From 4faee3802a70963b055167b98380d74a769482b3 Mon Sep 17 00:00:00 2001 From: ferrog Date: Tue, 13 May 2025 16:03:11 +0000 Subject: [PATCH] Generation working and Compilation of MARTe components --- .../DataSources/JAEPICSCA/JAEPICSCAInput.cpp | 366 + .../DataSources/JAEPICSCA/JAEPICSCAInput.h | 260 + .../DataSources/JAEPICSCA/JAEPICSCAOutput.cpp | 375 + .../DataSources/JAEPICSCA/JAEPICSCAOutput.h | 233 + .../c++/DataSources/JAEPICSCA/Makefile.gcc | 29 + .../c++/DataSources/JAEPICSCA/Makefile.inc | 58 + .../src/main/c++/DataSources/Makefile | 28 + .../src/main/c++/DataSources/Makefile.gcc | 26 + .../src/main/c++/DataSources/Makefile.inc | 42 + .../main/c++/DataSources/NI6528/Makefile.gcc | 30 + .../main/c++/DataSources/NI6528/Makefile.inc | 53 + .../main/c++/DataSources/NI6528/NI6528.cpp | 141 + .../src/main/c++/DataSources/NI6528/NI6528.h | 143 + .../DataSources/RandomDataSource/Makefile.gcc | 27 + .../DataSources/RandomDataSource/Makefile.inc | 53 + .../RandomDataSource/RandomDataSource.cpp | 146 + .../RandomDataSource/RandomDataSource.h | 137 + .../GAMs/JABitReverseGAM/JABitReverseGAM.cpp | 123 + .../GAMs/JABitReverseGAM/JABitReverseGAM.h | 75 + .../c++/GAMs/JABitReverseGAM/Makefile.gcc | 27 + .../c++/GAMs/JABitReverseGAM/Makefile.inc | 55 + .../main/c++/GAMs/JABitSumGAM/JABitSumGAM.cpp | 143 + .../main/c++/GAMs/JABitSumGAM/JABitSumGAM.h | 81 + .../main/c++/GAMs/JABitSumGAM/Makefile.gcc | 27 + .../main/c++/GAMs/JABitSumGAM/Makefile.inc | 55 + .../JAConditionalSignalUpdateGAM.cpp | 309 + .../JAConditionalSignalUpdateGAM.h | 180 + .../JAConditionalSignalUpdateGAM/Makefile.gcc | 27 + .../JAConditionalSignalUpdateGAM/Makefile.inc | 53 + .../c++/GAMs/JAMessageGAM/JAMessageGAM.cpp | 347 + .../main/c++/GAMs/JAMessageGAM/JAMessageGAM.h | 149 + .../main/c++/GAMs/JAMessageGAM/Makefile.gcc | 27 + .../main/c++/GAMs/JAMessageGAM/Makefile.inc | 53 + .../JAModeControlGAM/JAModeControlGAM.cpp | 154 + .../GAMs/JAModeControlGAM/JAModeControlGAM.h | 149 + .../c++/GAMs/JAModeControlGAM/Makefile.gcc | 27 + .../c++/GAMs/JAModeControlGAM/Makefile.inc | 52 + .../JAPreProgrammedGAM/JAPreProgrammedGAM.cpp | 460 + .../JAPreProgrammedGAM/JAPreProgrammedGAM.h | 187 + .../c++/GAMs/JAPreProgrammedGAM/Makefile.gcc | 27 + .../c++/GAMs/JAPreProgrammedGAM/Makefile.inc | 56 + .../JARTStateMachineGAM-v1.cpp | 411 + .../JARTStateMachineGAM-v1.h | 262 + .../JARTStateMachineGAM.cpp | 409 + .../JARTStateMachineGAM/JARTStateMachineGAM.h | 264 + .../JARTStateMachineGAM_stable.cpp | 402 + .../JARTStateMachineGAM_stable.h | 260 + .../c++/GAMs/JARTStateMachineGAM/Makefile.gcc | 27 + .../c++/GAMs/JARTStateMachineGAM/Makefile.inc | 56 + .../main/c++/GAMs/JARampupGAM/JARampupGAM.cpp | 295 + .../main/c++/GAMs/JARampupGAM/JARampupGAM.h | 141 + .../main/c++/GAMs/JARampupGAM/Makefile.gcc | 27 + .../main/c++/GAMs/JARampupGAM/Makefile.inc | 55 + .../JASDNRTStateMachineGAM.cpp | 361 + .../JASDNRTStateMachineGAM.h | 250 + .../GAMs/JASDNRTStateMachineGAM/Makefile.gcc | 27 + .../GAMs/JASDNRTStateMachineGAM/Makefile.inc | 55 + .../main/c++/GAMs/JASampleGAM/JASampleGAM.cpp | 177 + .../main/c++/GAMs/JASampleGAM/JASampleGAM.h | 122 + .../main/c++/GAMs/JASampleGAM/Makefile.gcc | 27 + .../main/c++/GAMs/JASampleGAM/Makefile.inc | 55 + .../JASourceChoiseGAM/JASourceChoiseGAM.cpp | 188 + .../JASourceChoiseGAM/JASourceChoiseGAM.h | 84 + .../c++/GAMs/JASourceChoiseGAM/Makefile.gcc | 27 + .../c++/GAMs/JASourceChoiseGAM/Makefile.inc | 55 + .../JATerminalInterfaceGAM.cpp | 206 + .../JATerminalInterfaceGAM.h | 157 + .../GAMs/JATerminalInterfaceGAM/Makefile.gcc | 27 + .../GAMs/JATerminalInterfaceGAM/Makefile.inc | 55 + .../JATriangleWaveGAM/JATriangleWaveGAM.cpp | 178 + .../JATriangleWaveGAM/JATriangleWaveGAM.h | 130 + .../c++/GAMs/JATriangleWaveGAM/Makefile.gcc | 27 + .../c++/GAMs/JATriangleWaveGAM/Makefile.inc | 56 + .../c++/GAMs/JAWFRecordGAM/JAWFRecordGAM.cpp | 317 + .../c++/GAMs/JAWFRecordGAM/JAWFRecordGAM.h | 130 + .../main/c++/GAMs/JAWFRecordGAM/Makefile.gcc | 27 + .../main/c++/GAMs/JAWFRecordGAM/Makefile.inc | 56 + EC-GN-JA-PCF-IN/src/main/c++/GAMs/Makefile | 28 + .../src/main/c++/GAMs/Makefile.gcc | 26 + .../src/main/c++/GAMs/Makefile.inc | 45 + .../main/c++/Gyrotron01DAN/Gyrotron01DAN.cpp | 639 + .../src/main/c++/Gyrotron01DAN/Makefile | 68 + .../src/main/c++/Gyrotron01DAN/ca-if.h | 165 + .../main/c++/Gyrotron01DAN/configure_sdn.cpp | 68 + .../main/c++/Gyrotron01DAN/environmentVarDev | 17 + .../main/c++/Gyrotron01DAN/includetopics.h | 29 + .../src/main/c++/Gyrotron01DAN/sdd-dan.cpp | 15 + .../src/main/c++/Gyrotron01DAN/sdd-dan.h | 8 + .../src/main/c++/Gyrotron01DAN/sdd-data.h | 14 + .../src/main/c++/Gyrotron01DAN/sdd-iomodule.h | 37 + .../src/main/c++/Gyrotron01DAN/sdd-pon-if.h | 36 + .../src/main/c++/Gyrotron01DAN/topicvars.h | 36 + .../main/c++/Gyrotron02DAN/Gyrotron02DAN.cpp | 639 + .../src/main/c++/Gyrotron02DAN/Makefile | 68 + .../src/main/c++/Gyrotron02DAN/ca-if.h | 165 + .../main/c++/Gyrotron02DAN/configure_sdn.cpp | 68 + .../main/c++/Gyrotron02DAN/environmentVarDev | 17 + .../main/c++/Gyrotron02DAN/includetopics.h | 29 + .../src/main/c++/Gyrotron02DAN/sdd-dan.cpp | 15 + .../src/main/c++/Gyrotron02DAN/sdd-dan.h | 8 + .../src/main/c++/Gyrotron02DAN/sdd-data.h | 14 + .../src/main/c++/Gyrotron02DAN/sdd-iomodule.h | 37 + .../src/main/c++/Gyrotron02DAN/sdd-pon-if.h | 36 + .../src/main/c++/Gyrotron02DAN/topicvars.h | 36 + EC-GN-JA-PCF-IN/src/main/c++/Makefile | 31 + .../main/c++/conf/Gyrotron01DAN_danconf.xml | 101 + .../main/c++/conf/Gyrotron02DAN_danconf.xml | 101 + .../src/main/c++/conf/environmentVarDev | 14 + .../src/main/c++/include/ccs-headers.h | 36 + .../src/main/c++/include/sys-headers.h | 32 + .../qst-gyrotron-fast-controller/.gitignore | 2 + .../Configurations/100s.csv | 1013 + .../Configurations/100s_20201224_fat.csv | 1013 + .../Configurations/100s_20210105_fat.csv | 1013 + .../Configurations/100s_20210120_fat.csv | 1013 + .../Configurations/1ms-minus.csv | 103 + .../Configurations/1ms-plus.csv | 103 + .../Configurations/1ms.csv | 103 + .../Configurations/JAGyrotronA_FY19_P1.cfg | 4981 ++++ .../Configurations/JAGyrotronB_FY19_P1.cfg | 4946 ++++ .../Configurations/JAGyrotronIOC.db | 1384 + .../Configurations/shot0001.csv | 0 .../Configurations/test.csv | 41 + .../Configurations/test.csv.original | 41 + .../Configurations/test2.csv | 103 + .../Configurations/test2.csv.original | 103 + .../Configurations/test3.csv | 6002 ++++ .../Configurations/test3.csv.original | 6002 ++++ .../Configurations/test5.csv | 1023 + .../Configurations/tests/ECPCSubscriber.cfg | 396 + .../Configurations/tests/EPICS_Test.cfg | 249 + .../Configurations/tests/EPICS_Test.db | 18 + .../tests/NI6528_NI6259_test.cfg | 1081 + .../tests/NI6528_NI6259_test.db | 257 + .../Configurations/tests/NI6528_test.cfg | 191 + .../Configurations/tests/NI6528_test.db | 18 + .../Configurations/tests/README.md | 29 + .../Configurations/tests/Timer_Test.cfg | 163 + .../DataSources/JAEPICSCA/JAEPICSCAInput.cpp | 366 + .../DataSources/JAEPICSCA/JAEPICSCAInput.h | 260 + .../DataSources/JAEPICSCA/JAEPICSCAOutput.cpp | 375 + .../DataSources/JAEPICSCA/JAEPICSCAOutput.h | 233 + .../DataSources/JAEPICSCA/Makefile.gcc | 29 + .../DataSources/JAEPICSCA/Makefile.inc | 58 + .../DataSources/Makefile.gcc | 26 + .../DataSources/Makefile.inc | 42 + .../DataSources/NI6528/Makefile.gcc | 30 + .../DataSources/NI6528/Makefile.inc | 53 + .../DataSources/NI6528/NI6528.cpp | 141 + .../DataSources/NI6528/NI6528.h | 143 + .../DataSources/RandomDataSource/Makefile.gcc | 27 + .../DataSources/RandomDataSource/Makefile.inc | 53 + .../RandomDataSource/RandomDataSource.cpp | 146 + .../RandomDataSource/RandomDataSource.h | 137 + .../Doc/RTAppStates.xml | 1 + .../Doc/StateMachine.txt | 463 + .../GAMs/JABitReverseGAM/JABitReverseGAM.cpp | 123 + .../GAMs/JABitReverseGAM/JABitReverseGAM.h | 75 + .../GAMs/JABitReverseGAM/Makefile.gcc | 27 + .../GAMs/JABitReverseGAM/Makefile.inc | 55 + .../GAMs/JABitSumGAM/JABitSumGAM.cpp | 143 + .../GAMs/JABitSumGAM/JABitSumGAM.h | 81 + .../GAMs/JABitSumGAM/Makefile.gcc | 27 + .../GAMs/JABitSumGAM/Makefile.inc | 55 + .../JAConditionalSignalUpdateGAM.cpp | 309 + .../JAConditionalSignalUpdateGAM.h | 180 + .../JAConditionalSignalUpdateGAM/Makefile.gcc | 27 + .../JAConditionalSignalUpdateGAM/Makefile.inc | 53 + .../GAMs/JAMessageGAM/JAMessageGAM.cpp | 347 + .../GAMs/JAMessageGAM/JAMessageGAM.h | 149 + .../GAMs/JAMessageGAM/Makefile.gcc | 27 + .../GAMs/JAMessageGAM/Makefile.inc | 53 + .../JAModeControlGAM/JAModeControlGAM.cpp | 154 + .../GAMs/JAModeControlGAM/JAModeControlGAM.h | 149 + .../GAMs/JAModeControlGAM/Makefile.gcc | 27 + .../GAMs/JAModeControlGAM/Makefile.inc | 52 + .../JAPreProgrammedGAM/JAPreProgrammedGAM.cpp | 460 + .../JAPreProgrammedGAM/JAPreProgrammedGAM.h | 187 + .../GAMs/JAPreProgrammedGAM/Makefile.gcc | 27 + .../GAMs/JAPreProgrammedGAM/Makefile.inc | 56 + .../JARTStateMachineGAM-v1.cpp | 411 + .../JARTStateMachineGAM-v1.h | 262 + .../JARTStateMachineGAM.cpp | 409 + .../JARTStateMachineGAM/JARTStateMachineGAM.h | 264 + .../JARTStateMachineGAM_stable.cpp | 402 + .../JARTStateMachineGAM_stable.h | 260 + .../GAMs/JARTStateMachineGAM/Makefile.gcc | 27 + .../GAMs/JARTStateMachineGAM/Makefile.inc | 56 + .../GAMs/JARampupGAM/JARampupGAM.cpp | 295 + .../GAMs/JARampupGAM/JARampupGAM.h | 141 + .../GAMs/JARampupGAM/Makefile.gcc | 27 + .../GAMs/JARampupGAM/Makefile.inc | 55 + .../JASDNRTStateMachineGAM.cpp | 361 + .../JASDNRTStateMachineGAM.h | 250 + .../GAMs/JASDNRTStateMachineGAM/Makefile.gcc | 27 + .../GAMs/JASDNRTStateMachineGAM/Makefile.inc | 55 + .../GAMs/JASampleGAM/JASampleGAM.cpp | 177 + .../GAMs/JASampleGAM/JASampleGAM.h | 122 + .../GAMs/JASampleGAM/Makefile.gcc | 27 + .../GAMs/JASampleGAM/Makefile.inc | 55 + .../JASourceChoiseGAM/JASourceChoiseGAM.cpp | 188 + .../JASourceChoiseGAM/JASourceChoiseGAM.h | 84 + .../GAMs/JASourceChoiseGAM/Makefile.gcc | 27 + .../GAMs/JASourceChoiseGAM/Makefile.inc | 55 + .../JATerminalInterfaceGAM.cpp | 206 + .../JATerminalInterfaceGAM.h | 157 + .../GAMs/JATerminalInterfaceGAM/Makefile.gcc | 27 + .../GAMs/JATerminalInterfaceGAM/Makefile.inc | 55 + .../JATriangleWaveGAM/JATriangleWaveGAM.cpp | 178 + .../JATriangleWaveGAM/JATriangleWaveGAM.h | 130 + .../GAMs/JATriangleWaveGAM/Makefile.gcc | 27 + .../GAMs/JATriangleWaveGAM/Makefile.inc | 56 + .../GAMs/JAWFRecordGAM/JAWFRecordGAM.cpp | 317 + .../GAMs/JAWFRecordGAM/JAWFRecordGAM.h | 130 + .../GAMs/JAWFRecordGAM/Makefile.gcc | 27 + .../GAMs/JAWFRecordGAM/Makefile.inc | 56 + .../GAMs/Makefile.gcc | 26 + .../GAMs/Makefile.inc | 45 + .../qst-gyrotron-fast-controller/Makefile.inc | 42 + .../Makefile.linux | 27 + .../qst-gyrotron-fast-controller/README.md | 1 + .../Startup/Main.sh | 195 + .../Startup/runECPCSub.sh | 1 + .../Startup/runEPICSTEST.sh | 2 + .../Startup/runHWTEST.sh | 4 + .../Startup/runMain.sh | 4 + .../Startup/runMainB.sh | 3 + .../Startup/runNI6528TEST.sh | 4 + .../Test_P01/beamon_test_async_GYB.py | 51 + .../Test_P01/test.py | 90 + .../Test_P01/test_async.py | 414 + .../Test_P01/test_async.pyc | Bin 0 -> 18679 bytes .../Test_P01/test_ready.py | 38 + .../Test_P01/test_ready.pyc | Bin 0 -> 2241 bytes .../Test_P01/test_ready_hw.py | 43 + .../Test_P01/test_ready_hw.pyc | Bin 0 -> 1379 bytes .../Test_P01/test_rup_confirm.py | 28 + .../Test_P01/test_setup.py | 109 + .../Test_P01/test_setup.pyc | Bin 0 -> 6040 bytes .../Test_P01/test_setup_hw.py | 93 + .../Test_P01/test_setup_hw.pyc | Bin 0 -> 2912 bytes .../Test_P01/test_setup_rup_confirm.py | 106 + .../Test_P01/test_setup_rup_confirm.pyc | Bin 0 -> 5717 bytes .../Test_P01/test_standby.py | 73 + .../Test_P01/test_standby.pyc | Bin 0 -> 4531 bytes .../Test_P01/test_standby_hw.py | 76 + .../Test_P01/test_standby_hw.pyc | Bin 0 -> 3293 bytes .../Test_P01/test_sync.py | 97 + .../Test_P01/test_sync.pyc | Bin 0 -> 5308 bytes EC-GN-JA-PCF/.svn/entries | 1 + EC-GN-JA-PCF/.svn/format | 1 + ...0a80d6caf268354385b8ac25fb02d549f.svn-base | 1 + ...2464d4124aada49bb9bedc4ed61633171.svn-base | 141 + ...0bcd66c1d50bb78cfc306b2f5cecfb765.svn-base | 68 + ...ae8558989abc8b5e4186a5245f73cc97d.svn-base | 16 + ...c6d3053875aff447ef8669c21ca553bf0.svn-base | 206 + ...04244ebfb95706234746bdd37ca02ad72.svn-base | 29 + ...5d484a6ade1522bd1ddcef7f86d69bdd6.svn-base | 8 + ...f642e4d5dbcb63642024867e058fc8ea0.svn-base | 1013 + ...321be88cfb10321c9014e66de9a135e0b.svn-base | 18 + ...4481aa7904c356a5cabed48e261cfdf14.svn-base | 53 + ...dfec4bc04fbfab5da8e5b2a0bb40f295b.svn-base | 92 + ...a2d384aac9e1e815774e0afd031506dc6.svn-base | 366 + ...f118007099a767b3d670ccf9beb7e0fc3.svn-base | 16 + ...04ddbf07fba4dc6ea76fd29e49a161d11.svn-base | 1 + ...6d02d385e9dad6e0ab0f25284ad7cb839.svn-base | 4946 ++++ ...e425fd32419d571f4e915ec808f4a5b39.svn-base | 55 + ...35817f8a4a4a4b69954331619312a20a2.svn-base | 53 + ...2d251dc031ef0d019c3189c214679491b.svn-base | 143 + ...52be19846ff84957b163a0568ab79a598.svn-base | 55 + ...e105d7b3efc196ed242d1e84fcbc0e744.svn-base | 27 + ...a59e2a87def32095aa7b29e4ad5603780.svn-base | 16 + ...f016614bba5453c92baf01cedc4059bd2.svn-base | 16 + ...a318be191db56b077383731db398fdc5e.svn-base | 24 + ...0b2977b929feadc2259c550bbefb18348.svn-base | 6 + ...3928301637e4284f1e51fdbdfdad9d09e.svn-base | 58 + ...bc98f401c160447a8f0b99bb83be9132c.svn-base | 55 + ...8561de5a7edc884ad1facc68ec80f9d99.svn-base | 55 + ...abaa53d358f3bc82e0641b0a4cda7a3ac.svn-base | 25 + ...4b0ee11e1ee73b96849c7cb93a804340b.svn-base | 52 + ...ccc7a0d08fc9f212a66810e56d615f606.svn-base | 23557 ++++++++++++++++ ...ec8d4b513c3f6b33e1e541bbdaf9f31f5.svn-base | 53 + ...1a7c2cbc3cc11d4e1286edae9790e6ef1.svn-base | 1384 + ...775c639982eaafb90a50ddebb134e44d5.svn-base | 25 + ...2d99b3f026b327006c529d3666e294a03.svn-base | 42 + ...6d7916c65a24b54f0a9d37e270f726352.svn-base | 56 + ...aa3d2a3bea5b22fd2aafbacbfcd37bb9a.svn-base | 317 + ...9df0b589cea410b48741efd748faae6f8.svn-base | 31 + ...6fcf806f63cf914f82655782e253ccf35.svn-base | 375 + ...8eea0082bb6e56ec3f600d1cfc4697d51.svn-base | 8 + ...c3c6f536fa1943892f1e2a5c04126face.svn-base | 76 + ...aaededbfa075682073eca65b570186bc8.svn-base | 84 + ...3c998e6b6253b1e9c3cc9f21e4c13a2d9.svn-base | 55 + ...bf35713084a164f5e33aaa0d74132efb4.svn-base | 103 + ...333893d05c418c5f70511953adf6c90d6.svn-base | 58 + ...a2c21037a3b66365bdca7907307d37519.svn-base | 463 + ...ecde60f9b08037e10008460665945e390.svn-base | 14 + ...d5e4b673585cd80ede1281ff55b3a2328.svn-base | 460 + ...19c6cdd09533ef832debe793a1c6a4966.svn-base | 49 + ...bf603f0ad946d9a6aa78caae806d30763.svn-base | 35 + ...eb95901393499e960ee5d864d08bb7ffb.svn-base | 1712 ++ ...62b1d1c073748c08caed4b621fafa8d2a.svn-base | 73 + ...5d0cdcde3541b079abb81090daf9015d5.svn-base | 347 + ...34fdb5167f187933877ccba2f9b347ebd.svn-base | 27 + ...695ad8c9d803e5d1fe284146eb2c689ab.svn-base | 4 + ...9bd135cb48283949cbba52accd73d141e.svn-base | 52 + ...0acd05bd4a7e7b6db5e484ee266f39f29.svn-base | 56 + ...cb3871c0d6275d9d5d622e15ec11732f8.svn-base | 51 + ...f38bc11635855dee60306cc6117ee86c0.svn-base | 87 + ...4e791c7319b28df99903d18d5d0e03562.svn-base | 56 + ...bb9bfd7fb0f4253def24628423ff56a01.svn-base | 23557 ++++++++++++++++ ...c30fdb38b9d8e582910a31341e4b12297.svn-base | 26 + ...c934c5f71b43af5d78f1b0c45cb721955.svn-base | 146 + ...4b297e2b898182fc0e90d7544485be01d.svn-base | 211 + ...29ce01389865572d006816e870e2030e2.svn-base | 55 + ...1643f1859516959472a1d2b39e908df45.svn-base | 157 + ...ec272eb645dfef2975defbd64150f2a4b.svn-base | 5 + ...8186712e6c4094db5b3ad553cbe50746f.svn-base | 1013 + ...fa2d2a0912a5b2e2b970829e1b82e3a2c.svn-base | 206 + ...28052118ee7319dac0de6709099277527.svn-base | 49 + ...7e9df3871844046ef2e1f3ceada17bd06.svn-base | 396 + ...a607a78aab64352cf34bd25d8c7fb85fd.svn-base | 68 + ...f13a6de3330f5df21840ddef019a3a467.svn-base | 195 + ...4150b68fd7a49f282894aec6a5f2323b3.svn-base | 23 + ...f89e480b7875d15bae68fe7bdccd6a696.svn-base | 53 + ...1495cb31abb8c1f8354dd1be38aec2c1b.svn-base | 93 + ...e7146674b868eac46600a4e1651f816e5.svn-base | 56 + ...d077d9daf7d49899fc84237c00a260668.svn-base | 163 + ...3a004ca38e95831a65effbe6a9e6d09eb.svn-base | 8 + ...d1b095acb20b58d7edc31b98c07e7445c.svn-base | 53 + ...5ce985d21f583f097e8ea5c17106a723e.svn-base | 230 + ...fbe9ed60ddbfd2f21ecdc1748a3f4997d.svn-base | 41 + ...0855d966536fb2fe47245ae93bfaed2b7.svn-base | 1081 + ...4823274165dbb5dcce714578e62d3b27a.svn-base | 55 + ...04c70edf86536a205a96af7a204fd110b.svn-base | 4 + ...13382efdcc62edcd615d1e4959f221a40.svn-base | 273 + ...56cd9ff77536c4ef03db90d604e137565.svn-base | 55 + ...778989e6382bdc7e264248240d52f28d8.svn-base | 18 + ...b257caa83d471a695487bf999956c1446.svn-base | 389 + ...f1f4bef1fbd5701ae6126af0d48fd9168.svn-base | 97 + ...146fc5ac3f8cdfce9473304430564c8fd.svn-base | 4 + ...60c3ebad8dfdbdb18fd4ecbefb6ea87b0.svn-base | 42 + ...e62507cee1d6cad721f8241286a2dcac5.svn-base | 123 + ...f7985ff1378fe0d78c9f0f5e17a3aa242.svn-base | 81 + ...b3804f804773aef9c6ba83dfd6cd27967.svn-base | 24 + ...84ae75716f9a8903e9f3836feef5781ef.svn-base | 16 + ...97695ed1999e9a4cfd4d879d4a75aed50.svn-base | 120 + ...fd5beafa5e60aefee867bf92025dc2849.svn-base | 1 + ...b8594a32bbe88fc8140331f42a390a008.svn-base | 29 + ...561b4987879ec76372d7dddeeb902ca4e.svn-base | 2 + ...e3504c525c654bc5f385cfdf2873ae341.svn-base | 15 + ...666b7ef270c97c569ea65f9cff0794f05.svn-base | 257 + ...2839a747f3e9a21cf7a5578b1cde41768.svn-base | 22 + ...e8a5b1cef852e24ba33f83c3b4871f9e0.svn-base | 28 + ...a3345164e6a381b55704f07fb8e0312de.svn-base | 149 + ...086ec9ae271cbafab9e19ae94c0550990.svn-base | 31 + ...6dcf52d8f864e19529ce95425546b58c2.svn-base | 17 + ...f8855bcd5787141444c0a11312ad980b9.svn-base | 1471 + ...f9c5419716adc211e5fad73939eb957d5.svn-base | 53 + ...04f4bdf1098c1953e08dbce7c37031a73.svn-base | 27 + ...d2f7f52eeb0a4e98e9ab63d1fa17b661e.svn-base | 414 + ...be1ea225f0f812da1184a3be00fa23b36.svn-base | 37 + ...2e7f4d44bb897c60332f73ce790c2c609.svn-base | 1 + ...ee1d8215fcd85b6d3ff3f49fc18ee48f1.svn-base | 16 + ...5fa5fdb473c64c3e12cc0fbd0791081e8.svn-base | 424 + ...2d1d0f7173cffb44d2ca7336c2fd927fa.svn-base | 242 + ...a1107a816e88d89281286046ae91019f9.svn-base | 25 + ...00f211e3f81a33f1feb6d5ec457bc4580.svn-base | 29 + ...86070fce2b5a8392ee5c3ed6121017e46.svn-base | 6 + ...242299eac7602f6eb1f790f96fbb19005.svn-base | 1 + ...c9c5b4d1fefbe2cadf37f5c02fd249a09.svn-base | 187 + ...8d160147013d7797e1d940a2fb77683a3.svn-base | 103 + ...a9d738240c1860f6e2df68361584aed3e.svn-base | 188 + ...08b91382e9bc21a029cf126579f079ce6.svn-base | 55 + ...ac0a759251b9daacd2e0c1e6d9a090a77.svn-base | 71 + ...17dcb6ee3262005011911d62689a8b690.svn-base | 16 + ...fec01b8975b3d744e668eb8bbfa786d5e.svn-base | 3 + ...e244a1fbbffafcede7c521c80e1feb54f.svn-base | 146 + ...387e987f13e2ba0eae94207a440e68703.svn-base | 29 + ...4fff984271989b6d1eb6dc549295a51d7.svn-base | 331 + ...92f38a9ad919175fae0f8c865bcc53958.svn-base | 55 + ...d1c25aac56dca7fba976ad4f767c83150.svn-base | 27 + ...60a8906957d3220725e70cc61969d9277.svn-base | 8 + ...c231cd2b9239946aab04a019bda8ff684.svn-base | 122 + ...6fff9ff412b7c7b2c25566bc5dc3d13e9.svn-base | 180 + ...1da6a173d5418d462856b922e14e1b2b6.svn-base | 130 + ...3b9ac9d7233b3ea8aceaf9eb4f88df2df.svn-base | 14 + ...144772ac58c0d5c165bfefebb37a4dcd8.svn-base | 16 + ...c5956b8db7abf7c96ccb6634c239da122.svn-base | 53 + ...a23622cd759847804f11a667b20b656d9.svn-base | 180 + ...aaddf747c1049e35fb5ae3188b2146b1e.svn-base | 45 + ...15c01862692d6f55568b066fd2e087a14.svn-base | 6 + ...c0fbe688ad687497e94deb0334ed2c2b2.svn-base | 6 + ...a7139cfdf8e6f1d7b38e2ca249317760f.svn-base | 55 + ...f37dc9572bb9b91544a337eff98c80189.svn-base | 56 + ...cdab49b1abd3f54c9b6ac537aaf7505a4.svn-base | 53 + ...7cb9cfd63e7642ea7e9584c787b423930.svn-base | 16 + ...69c3cf96b9e977bf8887ae6b3280ee052.svn-base | 101 + ...e7c09b531a62d8bd618212f80a85a0851.svn-base | 53 + ...2ef59a2c824eda7d1e8cf863c8f2508cb.svn-base | 42 + ...df1ab71f7b4b6b65c291fe9de00babe48.svn-base | 55 + ...785945a002bcf6160c9535cb4bb8dc3e9.svn-base | 154 + ...61fcb4106db444c17b8d3947c9646d8ea.svn-base | 26 + ...b80347d346dfd1d7497f54bb384e9ce0a.svn-base | 309 + ...abdbe0a722ff0c1477415d37ac7603078.svn-base | 1 + ...79866c16ab49369a5963e75483c9d05ab.svn-base | 23557 ++++++++++++++++ ...ecb8d5f67395c4f18731aedda51717653.svn-base | 55 + ...60dc358c4c01307291ed68bcaa97c7e08.svn-base | 134 + ...f591a72f34ece014e29523c80b81d8b2d.svn-base | 43 + ...46c05b598acfa0197c98e7bf3793b4cc7.svn-base | 206 + ...233046adceeb850f4ed7fc5d6c7a864b6.svn-base | 3 + ...d3bbd15629d3d87f896cc710b9b374039.svn-base | 177 + ...73f6668a9bfd07cc4a1ed52d60a8e27b8.svn-base | 16 + ...5e336f9b543af3a8115e9c643ce2a0395.svn-base | 55 + ...163c24769b3f933688d39a8d88f1cb32c.svn-base | 34 + ...60790cd82cadd2850b578af840251fe2f.svn-base | 26 + ...103223083f4c567fd6a848f74eb73b4cb.svn-base | 25 + ...bd59cad2842f7a5a27cb9247f7b6e33bb.svn-base | 8 + ...20954948457c88ca89b6fd4daeef42b40.svn-base | 75 + ...cfd645bdae9898985e37060d389767186.svn-base | 90 + ...5abb58491d8db91dc530e75071095b557.svn-base | 409 + ...0b2bcf0768b94db3953f0f746a419b3de.svn-base | 55 + ...65ef18f97f83abce3ec13782e575ab786.svn-base | 6 + ...af1c730aa7f3b596b3c4749505f1dbe3d.svn-base | 53 + ...9cb9ce4d1c006ecbd7461f8b4002b114a.svn-base | 67 + ...fb9bee87c696c009ba0fd85eac418f3b7.svn-base | 6 + ...0f2f2ddf5ff699e4c17ac97f6e8a915b2.svn-base | 8 + ...60e8d5dabba73d649217e085164125996.svn-base | 67 + ...93564f7f055425ff8e56b023a4163fdd3.svn-base | 16 + ...deafe4711e6474178e7f0bb448faf79d7.svn-base | 25 + ...0b568fd56cc070d9cbde0ad460b2699d5.svn-base | 28 + ...0861ab1fbcff80feac46ed370cbac79fe.svn-base | 130 + ...5bce8accaad5ffb7de87990ca5432df98.svn-base | 36 + ...2a9a99b8d182defcdf24697a3eb1147c5.svn-base | 2 + ...7c7b71295510bc6a903ca963a954b4f1e.svn-base | 19 + ...f068bad44aaffa4a72d4bb473dd42ff49.svn-base | 12 + ...e48dbd5bf7ad8f2e0e095e48da7f4442e.svn-base | 1 + ...9a363ba841b5a7420c7f2953833bb8a94.svn-base | 25 + ...688eef8b35d37a4351569381cc7fe6807.svn-base | 141 + ...51d2aceecb03307dd3eb27e2956a4c14c.svn-base | 639 + ...8ac5775598b5912322a7b04c0d83c7569.svn-base | 424 + ...41a921b6e727cdd7071b60096b4585e57.svn-base | 38 + ...11cdf61a3a290499d924bdf9187062bb0.svn-base | 41 + ...8b21bbf86519fc9efb324e75bc11bd6fc.svn-base | 16 + ...585d5fe85af5832474bd40f96dafcf261.svn-base | 8 + ...5ab6991a44e28b917406e8b3c083f9799.svn-base | 27 + ...125b958e3464efd824c6501f2117f1c30.svn-base | 411 + ...f1abe8cdcd064bf0c0bb418d78b769586.svn-base | 19 + ...0a40b0724212b241cefe50d3637e3bed3.svn-base | 1 + ...cd2546715cbe8ce904621acd7cb454299.svn-base | 74 + ...e087efba977f03fe52cee87753146df62.svn-base | 619 + ...6f274eb76da18d421f2a0b6ac8f4c3699.svn-base | 260 + ...672cb516118a1b73999b74d9810164f2c.svn-base | 2 + ...10ab2c3918bcb2436e9058ed8602f3b00.svn-base | 28 + ...3308abcae4e3b8ec696812b9b0d66566e.svn-base | 42 + ...43f02a0371ea6181d96b0b132ecbd74c0.svn-base | 28 + ...e8280efae87bac6f8c3f38acca8dbcc7d.svn-base | 25 + ...d94d58e96a1076918cb49b2574c321e9d.svn-base | 1 + ...29b18bc3f2e1700d48f3b73cb8ddc19ff.svn-base | 55 + ...d6857e4fd23f04c657b629891b4b9b36b.svn-base | 273 + ...26cbb343d7d39cd528a0c3ce3c8a75628.svn-base | 1405 + ...4921da5b733da00173a6af31daa974d7a.svn-base | 68 + ...bbd057f9bea50f88c793463f0e4e0d4a0.svn-base | 16 + ...0cde72a2d665b7c89829e554043d90773.svn-base | 38 + ...eb0073662e76e011f278f81b6793ed6b4.svn-base | 45 + ...48ba58f522f256282d4b788d6ca60779b.svn-base | 55 + ...fb9465d049d7e1dd2988ee02664ff6fc3.svn-base | 109 + ...963a4bea31e9a1418d6d79842a9e1be91.svn-base | 231 + ...0db9fb23c0a6d516499b1bafc3dd178a6.svn-base | 45 + ...7dbb266ceb462f472e4eb74868e365e4c.svn-base | 6002 ++++ ...070cb3723929ae807df3990f4c43f0018.svn-base | 55 + ...1b4b35a849f57294b275cdd97720d5eb4.svn-base | 143 + ...39ba1d5bbffb568065acdfca7d49d612a.svn-base | 23557 ++++++++++++++++ ...9d4843e8580baddd3cd2472838701740e.svn-base | 262 + ...43ca0edcd2e4ad68cbbdba2a0c4de095d.svn-base | 59 + ...a2d1cdc224df268b12185f139e877d639.svn-base | 250 + ...c0938b20be3b9d5c2ab0a12fd429a5957.svn-base | 14 + ...1da20a5b6b3f248fd27dfe7c1f134db23.svn-base | 707 + ...fcb91225938c3771e34a83e21c77074dd.svn-base | 191 + ...d0db0322af5975ea3a79ee406a924ac2e.svn-base | 349 + ...7f3e6038fdc2a20372de412544715a018.svn-base | 20 + ...d0b9f506f1433a0174614fcb72d68ffc7.svn-base | 68 + ...593bd4ad2bc0745276fed1416dc1e44b1.svn-base | 16 + ...7fac2075780d10b34cdd9dc036718cdba.svn-base | 56 + ...d68a2af05d20d38bfd9ab122c0335821b.svn-base | 44 + ...8f40d9a90fd571b77d153a87022fa2c87.svn-base | 53 + ...976bb0b0fa102a36a6538ec14b98d5f0b.svn-base | 29 + ...bf1ef151878fdf9e79fbe61df6800a0fc.svn-base | 23557 ++++++++++++++++ ...e4854e520bbfd22f5525aef323c450779.svn-base | 14 + ...656a890dcfeb61ca4e7b8d12f601ceb3b.svn-base | 58 + ...c3e4788141fc4e258e6f16fbddfc00f41.svn-base | 1 + ...39016bf6392a5685fb6fcdca50ba48b1d.svn-base | 361 + ...4693fc8ac91a2e29a0c8f12c80d68ffcb.svn-base | 103 + ...a03468d13c4af01226df634946f6090b8.svn-base | 2 + ...38b973391a51b4fa9e0f9d86169e59b3b.svn-base | 16 + ...68f0123c32d2db9a815f8d2ef9077ec0c.svn-base | 56 + ...9d0ada739184e69969f7ebd3fdd3ad805.svn-base | 52 + ...df74ca0850e77f0a341d6983baa91bd59.svn-base | 273 + ...560043f1c137671a33f763d8fc20ef310.svn-base | 103 + ...7d64f5802c6f619d46638867975102f98.svn-base | 56 + ...da19b7a751c3d85acc850f6db8f931b0f.svn-base | 28 + ...bc263569cc5f7c8a167793e4e3a170203.svn-base | 23557 ++++++++++++++++ ...011cb795633e6f2916d27758ffea3bb0f.svn-base | 8 + ...b6713251909929c68882bb38165d935e4.svn-base | 57 + ...ff295fabd70fd071026672887a7ad44c2.svn-base | 36 + ...959d2ee9284a237cc5096caa1b43daf39.svn-base | 25 + ...141476887e31583a185b9bb971cd7dff9.svn-base | 106 + ...3922a00bce89d661c4b722102e758dff3.svn-base | 32 + ...a17178bbf2edc49b4a3024e1e2e99889b.svn-base | 149 + ...2dbe795f4eb83484ec8aef850a7cf4e67.svn-base | 59 + ...744dc85470d5eea99f31be471f2356cf9.svn-base | 29 + ...eb00445bace8999bd50e16522cbc87f99.svn-base | 43 + ...c0bb2d5d0d5233f52170f3335b40afe8d.svn-base | 101 + ...23613945661b5e1bc7edee04d371610ce.svn-base | 56 + ...22c57f63aab6017e57baf90fed76c6952.svn-base | 31 + ...cf2685647b1af06ba7330a9c55ab3fa15.svn-base | 57 + ...6346d9ef0e93d5a1cb7987482d60baacc.svn-base | 178 + ...240ccf0821dd62abad31f96fbb776f34c.svn-base | 402 + ...7be95871b2911c3082f94fc90551de48f.svn-base | 137 + ...02470be38b6a8b3e6bd16b7d368fdc035.svn-base | 14 + ...853ec028db7e87977050d69672efeffa3.svn-base | 45 + ...c240f820b888eb6b57a0ab2208705e074.svn-base | 1023 + ...075ac787db211d8b37636f916cd37864b.svn-base | 165 + ...8557a0ab7f71c73eb227710b912f26fdd.svn-base | 249 + ...1e21c99c88d92ed2da5cf4f1352cde446.svn-base | 57 + ...e5e6b4b0d3255bfef95601890afd80709.svn-base | 0 ...651b29b5505ee066bedb3f09c5a80e12a.svn-base | 2 + ...036a2aa463ca538dbb90838aa3928a1bf.svn-base | 53 + ...311fea0f8b3d549f15c1f59fe0787a2e8.svn-base | 295 + ...f741de9cc146fa5d8218d1af0fb4908b5.svn-base | 260 + ...f690c7a29a6b5fa244fbb3da7d22be4cb.svn-base | 180 + ...3ee392ef8c0f08d479ac3fc9777e60f01.svn-base | 17 + ...3274ec7bd28a10842d3068f8391320552.svn-base | 29 + ...2eaafc1b450d2c4e9891f8d64ab85a068.svn-base | 16 + ...f0bb084fa70d278cebd9165b958cb09f4.svn-base | 67 + ...0466760609c22ed79800279a211b6d996.svn-base | 55 + ...2dcc39a75644d36ca8ebda7a68f4d43e9.svn-base | 306 + ...6e63e4c70302b3140c389829d49715350.svn-base | 55 + ...ac8c50aa9f02b7243b5d3353649883620.svn-base | 42 + ...b9f763d656bef4bf2411a250ee2ef085c.svn-base | 30 + ...14c8e82c54b77a0e9c6b08fc1e5de2e68.svn-base | 310 + ...bc60a4221433c4deb5486dd9ca02f2e9b.svn-base | 1013 + ...123087046e7714587975f66f8ccdee824.svn-base | 31 + ...c1a6b1ed165c05336e3858d334fda3159.svn-base | 55 + ...73a03ca0789a3e237791edbe21cf0b88b.svn-base | 26 + ...4745800d870621b3ec0ffe0386f1e68b4.svn-base | 36 + ...c5433b23466f2df6c00ad647033edd493.svn-base | 16 + ...b77c1ca53dd89b518e97a3aa71c59439d.svn-base | 55 + ...55fa13e62ee5ccdb0120bc2716d80b108.svn-base | 639 + ...0880622e2eca172bb88b190f207f88547.svn-base | 56 + ...7f7bafd1fdafea86ccf9bef15bbd9c555.svn-base | 56 + ...62364f2316a46e63f3634e9b3a9db69f9.svn-base | 25 + ...addc1b55f5073a97b1b2cb437f045ca4d.svn-base | 42 + ...eb4191a528c6ebb16845fb8b759eefd29.svn-base | 415 + ...bbf846018a091da9bca15df6cc9c92ed9.svn-base | 310 + ...581e86c750d0983d3fdceeb2e6031861a.svn-base | 36 + ...27142ed712c031f1726608af3779a9d71.svn-base | 25 + ...ad53678797b8e28923d1b18b1d2816add.svn-base | 28 + ...50989e12fd6e95f5628233cafc0b783b0.svn-base | 1013 + ...84968e75ba2471ee8a12c0a164d2ae5a4.svn-base | 24 + ...c97d94c9b9bd06be509db615897457ed2.svn-base | 29 + ...402d7062edcdc464f7c1b946d73c2fb8d.svn-base | 4981 ++++ ...3ad2ebec2c0e0942cf9b73760fbfdc391.svn-base | 16 + ...91b2ca375b6d286aa857252c3654696b5.svn-base | 103 + ...f38d901e56bd8139d9e42fce7bdafb813.svn-base | 51 + ...d5b68a92beb7a69cd53009febfd5e4aa2.svn-base | 86 + ...40a9e137f5a0eebf48d374470bc16442f.svn-base | 1 + ...3b939c6244c4b7fac9a484391ee831af3.svn-base | 389 + ...9b31ef6a419187174b4870486ce197549.svn-base | 264 + ...ac31145540c01cf0d1c9d000321a10adc.svn-base | 45 + ...f3bd0ea1f577124c91d43093b1c5f5567.svn-base | 233 + ...0c2b1641f01f53d70c4434251ac91c48c.svn-base | 56 + ...93cb9493bab3cfc5acbd87baf25b6b0b3.svn-base | 10 + ...be97664469d62dd37b2c7128e729ca9d7.svn-base | 14 + ...8976e0fee8c8b75ff0d3124af4cd3aafa.svn-base | 23557 ++++++++++++++++ ...a8f3140970beef51d066617b03961950e.svn-base | 14 + ...5f1c5a761427b0891a8982ea94aef42c5.svn-base | 55 + ...1f29a6a16b338343b2c69ddb664838b13.svn-base | 6002 ++++ ...8d84f4e651ba42a2c25882683d5424a9b.svn-base | 9 + EC-GN-JA-PCF/.svn/wc.db | Bin 0 -> 535552 bytes EC-GN-JA-PCF/info.log | 1 + EC-GN-JA-PCF/pom.xml | 87 + ...om_13-05-25_15-59-1747151989_659047792.xml | 87 + EC-GN-JA-PCF/sdd.xml | 23557 ++++++++++++++++ ...dd_13-05-25_15-59-1747151989_678406675.xml | 23557 ++++++++++++++++ EC-GN-JA-PCF/src/main/beast/EC-beast.xml | 273 + EC-GN-JA-PCF/src/main/beauty/EC-beauty.xml | 242 + .../main/boy/empty/ITER-EC-GN-HWCF_Mimic.opi | 211 + .../empty/ITER-EC-GN-P01-GAF-CCPS_Mimic.opi | 211 + .../empty/ITER-EC-GN-P01-GAF-FHPS_Mimic.opi | 211 + .../empty/ITER-EC-GN-P01-GAF-GCPS_Mimic.opi | 211 + .../empty/ITER-EC-GN-P01-GAF-MCPS_Mimic.opi | 211 + .../boy/empty/ITER-EC-GN-P01-GAFP_Mimic.opi | 211 + .../boy/empty/ITER-EC-GN-P01-GAF_Mimic.opi | 211 + .../empty/ITER-EC-GN-P01-GBF-CCPS_Mimic.opi | 211 + .../empty/ITER-EC-GN-P01-GBF-FHPS_Mimic.opi | 211 + .../empty/ITER-EC-GN-P01-GBF-GCPS_Mimic.opi | 211 + .../empty/ITER-EC-GN-P01-GBF-MCPS_Mimic.opi | 211 + .../boy/empty/ITER-EC-GN-P01-GBFP_Mimic.opi | 211 + .../boy/empty/ITER-EC-GN-P01-GBF_Mimic.opi | 211 + .../boy/empty/ITER-EC-GN-P01-GPF_Mimic.opi | 211 + .../boy/empty/ITER-EC-GN-P01-GPS_Mimic.opi | 211 + .../boy/empty/ITER-EC-GN-P01-PA1F_Mimic.opi | 211 + .../boy/empty/ITER-EC-GN-P01-PA2F_Mimic.opi | 211 + .../boy/empty/ITER-EC-GN-P01-PB1F_Mimic.opi | 211 + .../boy/empty/ITER-EC-GN-P01-PB2F_Mimic.opi | 211 + .../boy/empty/ITER-EC-GN-P01-PMF_Mimic.opi | 211 + .../main/boy/empty/ITER-EC-GN-P01_Mimic.opi | 211 + .../src/main/boy/empty/ITER-EC-GN_Mimic.opi | 211 + .../src/main/boy/empty/ITER-EC_Mimic.opi | 211 + .../src/main/boy/navigation/Navigation.xml | 19 + .../boy/navigation/Navigation_EC-GN-HWCF.xml | 16 + .../Navigation_EC-GN-P01-GAF-CCPS.xml | 16 + .../Navigation_EC-GN-P01-GAF-FHPS.xml | 16 + .../Navigation_EC-GN-P01-GAF-GCPS.xml | 16 + .../Navigation_EC-GN-P01-GAF-MCPS.xml | 16 + .../navigation/Navigation_EC-GN-P01-GAF.xml | 28 + .../navigation/Navigation_EC-GN-P01-GAFP.xml | 16 + .../Navigation_EC-GN-P01-GBF-CCPS.xml | 16 + .../Navigation_EC-GN-P01-GBF-FHPS.xml | 16 + .../Navigation_EC-GN-P01-GBF-GCPS.xml | 16 + .../Navigation_EC-GN-P01-GBF-MCPS.xml | 16 + .../navigation/Navigation_EC-GN-P01-GBF.xml | 28 + .../navigation/Navigation_EC-GN-P01-GBFP.xml | 16 + .../navigation/Navigation_EC-GN-P01-GPF.xml | 16 + .../navigation/Navigation_EC-GN-P01-GPS.xml | 16 + .../navigation/Navigation_EC-GN-P01-PA1F.xml | 16 + .../navigation/Navigation_EC-GN-P01-PA2F.xml | 16 + .../navigation/Navigation_EC-GN-P01-PB1F.xml | 16 + .../navigation/Navigation_EC-GN-P01-PB2F.xml | 16 + .../navigation/Navigation_EC-GN-P01-PMF.xml | 16 + .../boy/navigation/Navigation_EC-GN-P01.xml | 49 + .../main/boy/navigation/Navigation_EC-GN.xml | 22 + .../src/main/boy/navigation/Navigation_EC.xml | 19 + .../boy/sysm/EC-GN-SYSM-CubicleDetails.opi | 415 + .../boy/sysm/EC-GN-SYSM-F0-PCFDetails.opi | 1471 + .../boy/sysm/EC-GN-SYSM-H0-PSHDetails.opi | 1405 + .../boy/sysm/EC-GN-SYSM-P0-PLCDetails.opi | 707 + EC-GN-JA-PCF/src/main/boy/sysm/EC-GN-SYSM.opi | 619 + .../main/boy/sysm/scripts/AlarmShortFormat.js | 20 + .../scripts/CUDetailsTableSelectionMonitor.js | 14 + .../ControlUnitsTableSelectionMonitor.js | 51 + .../ControlUnitsTableSelectionMonitor.py | 38 + ...clesContentSummaryTableSelectionMonitor.js | 23 + ...clesContentSummaryTableSelectionMonitor.py | 24 + .../CubiclesDetailsTableSelectionMonitor.js | 14 + .../scripts/CubiclesTableSelectionMonitor.js | 31 + .../scripts/CubiclesTableSelectionMonitor.py | 24 + .../boy/sysm/scripts/DisplayAlarmsInRow.py | 14 + ...splayPVValuesINCtrlUnitDetailTableTable.js | 57 + ...splayPVValuesINCtrlUnitDetailTableTable.py | 49 + .../DisplayPVValuesInCubicleContent.js | 92 + .../DisplayPVValuesInCubicleContent.py | 71 + .../DisplayPVValuesInCubicleOverview.js | 57 + .../DisplayPVValuesInCubicleOverview.py | 31 + .../scripts/DisplayPVValuesInGeneralTable.js | 55 + .../scripts/DisplayPVValuesInGeneralTable.py | 45 + .../sysm/scripts/DisplayPVValuesInOverview.js | 74 + .../sysm/scripts/DisplayPVValuesInOverview.py | 55 + .../scripts/DisplayPVValuesInPLCOverview.js | 34 + .../scripts/DisplayPVValuesInPLCOverview.py | 26 + .../DisplayPVValuesInServerOverview.js | 31 + .../DisplayPVValuesInServerOverview.py | 27 + .../IOCDetailsTableSelectionMonitor.js | 14 + .../PLCDetailsTableSelectionMonitor.js | 14 + .../sysm/scripts/PLCsTableSelectionMonitor.js | 29 + .../sysm/scripts/PLCsTableSelectionMonitor.py | 27 + .../scripts/ServersTableSelectionMonitor.js | 26 + .../scripts/ServersTableSelectionMonitor.py | 26 + .../DataSources/JAEPICSCA/JAEPICSCAInput.cpp | 366 + .../DataSources/JAEPICSCA/JAEPICSCAInput.h | 260 + .../DataSources/JAEPICSCA/JAEPICSCAOutput.cpp | 375 + .../DataSources/JAEPICSCA/JAEPICSCAOutput.h | 233 + .../c++/DataSources/JAEPICSCA/Makefile.gcc | 29 + .../c++/DataSources/JAEPICSCA/Makefile.inc | 58 + .../src/main/c++/DataSources/Makefile | 28 + .../src/main/c++/DataSources/Makefile.gcc | 26 + .../src/main/c++/DataSources/Makefile.inc | 42 + .../main/c++/DataSources/NI6528/Makefile.gcc | 30 + .../main/c++/DataSources/NI6528/Makefile.inc | 53 + .../main/c++/DataSources/NI6528/NI6528.cpp | 141 + .../src/main/c++/DataSources/NI6528/NI6528.h | 143 + .../DataSources/RandomDataSource/Makefile.gcc | 27 + .../DataSources/RandomDataSource/Makefile.inc | 53 + .../RandomDataSource/RandomDataSource.cpp | 146 + .../RandomDataSource/RandomDataSource.h | 137 + .../GAMs/JABitReverseGAM/JABitReverseGAM.cpp | 123 + .../GAMs/JABitReverseGAM/JABitReverseGAM.h | 75 + .../c++/GAMs/JABitReverseGAM/Makefile.gcc | 27 + .../c++/GAMs/JABitReverseGAM/Makefile.inc | 55 + .../main/c++/GAMs/JABitSumGAM/JABitSumGAM.cpp | 143 + .../main/c++/GAMs/JABitSumGAM/JABitSumGAM.h | 81 + .../main/c++/GAMs/JABitSumGAM/Makefile.gcc | 27 + .../main/c++/GAMs/JABitSumGAM/Makefile.inc | 55 + .../JAConditionalSignalUpdateGAM.cpp | 309 + .../JAConditionalSignalUpdateGAM.h | 180 + .../JAConditionalSignalUpdateGAM/Makefile.gcc | 27 + .../JAConditionalSignalUpdateGAM/Makefile.inc | 53 + .../c++/GAMs/JAMessageGAM/JAMessageGAM.cpp | 347 + .../main/c++/GAMs/JAMessageGAM/JAMessageGAM.h | 149 + .../main/c++/GAMs/JAMessageGAM/Makefile.gcc | 27 + .../main/c++/GAMs/JAMessageGAM/Makefile.inc | 53 + .../JAModeControlGAM/JAModeControlGAM.cpp | 154 + .../GAMs/JAModeControlGAM/JAModeControlGAM.h | 149 + .../c++/GAMs/JAModeControlGAM/Makefile.gcc | 27 + .../c++/GAMs/JAModeControlGAM/Makefile.inc | 52 + .../JAPreProgrammedGAM/JAPreProgrammedGAM.cpp | 460 + .../JAPreProgrammedGAM/JAPreProgrammedGAM.h | 187 + .../c++/GAMs/JAPreProgrammedGAM/Makefile.gcc | 27 + .../c++/GAMs/JAPreProgrammedGAM/Makefile.inc | 56 + .../JARTStateMachineGAM-v1.cpp | 411 + .../JARTStateMachineGAM-v1.h | 262 + .../JARTStateMachineGAM.cpp | 409 + .../JARTStateMachineGAM/JARTStateMachineGAM.h | 264 + .../JARTStateMachineGAM_stable.cpp | 402 + .../JARTStateMachineGAM_stable.h | 260 + .../c++/GAMs/JARTStateMachineGAM/Makefile.gcc | 27 + .../c++/GAMs/JARTStateMachineGAM/Makefile.inc | 56 + .../main/c++/GAMs/JARampupGAM/JARampupGAM.cpp | 295 + .../main/c++/GAMs/JARampupGAM/JARampupGAM.h | 141 + .../main/c++/GAMs/JARampupGAM/Makefile.gcc | 27 + .../main/c++/GAMs/JARampupGAM/Makefile.inc | 55 + .../JASDNRTStateMachineGAM.cpp | 361 + .../JASDNRTStateMachineGAM.h | 250 + .../GAMs/JASDNRTStateMachineGAM/Makefile.gcc | 27 + .../GAMs/JASDNRTStateMachineGAM/Makefile.inc | 55 + .../main/c++/GAMs/JASampleGAM/JASampleGAM.cpp | 177 + .../main/c++/GAMs/JASampleGAM/JASampleGAM.h | 122 + .../main/c++/GAMs/JASampleGAM/Makefile.gcc | 27 + .../main/c++/GAMs/JASampleGAM/Makefile.inc | 55 + .../JASourceChoiseGAM/JASourceChoiseGAM.cpp | 188 + .../JASourceChoiseGAM/JASourceChoiseGAM.h | 84 + .../c++/GAMs/JASourceChoiseGAM/Makefile.gcc | 27 + .../c++/GAMs/JASourceChoiseGAM/Makefile.inc | 55 + .../JATerminalInterfaceGAM.cpp | 206 + .../JATerminalInterfaceGAM.h | 157 + .../GAMs/JATerminalInterfaceGAM/Makefile.gcc | 27 + .../GAMs/JATerminalInterfaceGAM/Makefile.inc | 55 + .../JATriangleWaveGAM/JATriangleWaveGAM.cpp | 178 + .../JATriangleWaveGAM/JATriangleWaveGAM.h | 130 + .../c++/GAMs/JATriangleWaveGAM/Makefile.gcc | 27 + .../c++/GAMs/JATriangleWaveGAM/Makefile.inc | 56 + .../c++/GAMs/JAWFRecordGAM/JAWFRecordGAM.cpp | 317 + .../c++/GAMs/JAWFRecordGAM/JAWFRecordGAM.h | 130 + .../main/c++/GAMs/JAWFRecordGAM/Makefile.gcc | 27 + .../main/c++/GAMs/JAWFRecordGAM/Makefile.inc | 56 + EC-GN-JA-PCF/src/main/c++/GAMs/Makefile | 28 + EC-GN-JA-PCF/src/main/c++/GAMs/Makefile.gcc | 26 + EC-GN-JA-PCF/src/main/c++/GAMs/Makefile.inc | 45 + .../main/c++/Gyrotron01DAN/Gyrotron01DAN.cpp | 639 + .../src/main/c++/Gyrotron01DAN/Makefile | 68 + .../src/main/c++/Gyrotron01DAN/ca-if.h | 165 + .../main/c++/Gyrotron01DAN/configure_sdn.cpp | 68 + .../main/c++/Gyrotron01DAN/environmentVarDev | 17 + .../main/c++/Gyrotron01DAN/includetopics.h | 29 + .../src/main/c++/Gyrotron01DAN/sdd-dan.cpp | 15 + .../src/main/c++/Gyrotron01DAN/sdd-dan.h | 8 + .../src/main/c++/Gyrotron01DAN/sdd-data.h | 14 + .../src/main/c++/Gyrotron01DAN/sdd-iomodule.h | 37 + .../src/main/c++/Gyrotron01DAN/sdd-pon-if.h | 36 + .../src/main/c++/Gyrotron01DAN/topicvars.h | 36 + .../main/c++/Gyrotron02DAN/Gyrotron02DAN.cpp | 639 + .../src/main/c++/Gyrotron02DAN/Makefile | 68 + .../src/main/c++/Gyrotron02DAN/ca-if.h | 165 + .../main/c++/Gyrotron02DAN/configure_sdn.cpp | 68 + .../main/c++/Gyrotron02DAN/environmentVarDev | 17 + .../main/c++/Gyrotron02DAN/includetopics.h | 29 + .../src/main/c++/Gyrotron02DAN/sdd-dan.cpp | 15 + .../src/main/c++/Gyrotron02DAN/sdd-dan.h | 8 + .../src/main/c++/Gyrotron02DAN/sdd-data.h | 14 + .../src/main/c++/Gyrotron02DAN/sdd-iomodule.h | 37 + .../src/main/c++/Gyrotron02DAN/sdd-pon-if.h | 36 + .../src/main/c++/Gyrotron02DAN/topicvars.h | 36 + EC-GN-JA-PCF/src/main/c++/Makefile | 31 + .../main/c++/conf/Gyrotron01DAN_danconf.xml | 101 + .../main/c++/conf/Gyrotron02DAN_danconf.xml | 101 + .../src/main/c++/conf/environmentVarDev | 14 + .../src/main/c++/include/ccs-headers.h | 36 + .../src/main/c++/include/sys-headers.h | 32 + EC-GN-JA-PCF/src/main/epics/CUBApp/.appdesc | 1 + .../src/main/epics/CUBApp/Db/Makefile | 24 + EC-GN-JA-PCF/src/main/epics/CUBApp/Makefile | 29 + .../src/main/epics/CUBApp/src/CUBMain.cpp | 25 + .../src/main/epics/CUBApp/src/Makefile | 59 + .../src/main/epics/EC-GNApp/Db/Makefile | 44 + .../Db/PCF0-EC-GN-HWCF-iocEC-GN-PSH0PCF.db | 1712 ++ ...CF0-EC-GN-P01-GAF-CCPS-iocEC-GN-PSH0PCF.db | 310 + ...CF0-EC-GN-P01-GAF-FHPS-iocEC-GN-PSH0PCF.db | 424 + ...CF0-EC-GN-P01-GAF-GCPS-iocEC-GN-PSH0PCF.db | 273 + ...CF0-EC-GN-P01-GAF-MCPS-iocEC-GN-PSH0PCF.db | 331 + .../Db/PCF0-EC-GN-P01-GAF-iocEC-GN-PSH0PCF.db | 389 + .../PCF0-EC-GN-P01-GAFP-iocEC-GN-PSH0PCF.db | 146 + ...CF0-EC-GN-P01-GBF-CCPS-iocEC-GN-PSH0PCF.db | 310 + ...CF0-EC-GN-P01-GBF-FHPS-iocEC-GN-PSH0PCF.db | 424 + ...CF0-EC-GN-P01-GBF-GCPS-iocEC-GN-PSH0PCF.db | 273 + ...CF0-EC-GN-P01-GBF-MCPS-iocEC-GN-PSH0PCF.db | 306 + .../Db/PCF0-EC-GN-P01-GBF-iocEC-GN-PSH0PCF.db | 389 + .../PCF0-EC-GN-P01-GBFP-iocEC-GN-PSH0PCF.db | 120 + .../Db/PCF0-EC-GN-P01-GPF-iocEC-GN-PSH0PCF.db | 349 + .../Db/PCF0-EC-GN-P01-GPS-iocEC-GN-PSH0PCF.db | 230 + .../PCF0-EC-GN-P01-PA1F-iocEC-GN-PSH0PCF.db | 206 + .../PCF0-EC-GN-P01-PA2F-iocEC-GN-PSH0PCF.db | 206 + .../PCF0-EC-GN-P01-PB1F-iocEC-GN-PSH0PCF.db | 180 + .../PCF0-EC-GN-P01-PB2F-iocEC-GN-PSH0PCF.db | 180 + .../Db/PCF0-EC-GN-P01-PMF-iocEC-GN-PSH0PCF.db | 231 + EC-GN-JA-PCF/src/main/epics/EC-GNApp/Makefile | 29 + .../src/main/epics/EC-GNApp/src/EC-GNMain.cpp | 25 + .../src/main/epics/EC-GNApp/src/Makefile | 57 + EC-GN-JA-PCF/src/main/epics/Makefile | 35 + EC-GN-JA-PCF/src/main/epics/PLCApp/.appdesc | 1 + .../src/main/epics/PLCApp/Db/Makefile | 24 + EC-GN-JA-PCF/src/main/epics/PLCApp/Makefile | 29 + .../src/main/epics/PLCApp/src/Makefile | 59 + .../src/main/epics/PLCApp/src/PLCMain.cpp | 25 + EC-GN-JA-PCF/src/main/epics/configure/CONFIG | 29 + .../src/main/epics/configure/CONFIG_SITE | 43 + .../src/main/epics/configure/Makefile | 8 + EC-GN-JA-PCF/src/main/epics/configure/RULES | 6 + .../src/main/epics/configure/RULES.ioc | 2 + .../src/main/epics/configure/RULES_DIRS | 2 + .../src/main/epics/configure/RULES_TOP | 3 + EC-GN-JA-PCF/src/main/epics/iocBoot/Makefile | 6 + .../epics/iocBoot/iocEC-GN-PCF0SYSM/Makefile | 5 + .../iocBoot/iocEC-GN-PCF0SYSM/dbToLoad.cmd | 17 + .../epics/iocBoot/iocEC-GN-PCF0SYSM/envSystem | 8 + .../epics/iocBoot/iocEC-GN-PCF0SYSM/envUser | 9 + .../iocEC-GN-PCF0SYSM-postSaveRestore.cmd | 8 + .../iocEC-GN-PCF0SYSM-preSaveRestore.cmd | 42 + .../iocEC-GN-PCF0SYSM/iocEC-GN-PCF0SYSM.req | 0 .../iocEC-GN-PCF0SYSM/sddPostDriverConf.cmd | 6 + .../iocEC-GN-PCF0SYSM/sddPreDriverConf.cmd | 86 + .../iocEC-GN-PCF0SYSM/sddSeqToLoad.cmd | 6 + .../iocBoot/iocEC-GN-PCF0SYSM/seqToLoad.cmd | 8 + .../epics/iocBoot/iocEC-GN-PCF0SYSM/st.cmd | 67 + .../threadSchedulingConf.cmd | 6 + .../iocEC-GN-PCF0SYSM/userPostDriverConf.cmd | 6 + .../iocEC-GN-PCF0SYSM/userPreDriverConf.cmd | 12 + .../epics/iocBoot/iocEC-GN-PSH0CUB/Makefile | 5 + .../iocBoot/iocEC-GN-PSH0CUB/dbToLoad.cmd | 25 + .../epics/iocBoot/iocEC-GN-PSH0CUB/envSystem | 8 + .../epics/iocBoot/iocEC-GN-PSH0CUB/envUser | 9 + .../iocEC-GN-PSH0CUB-postSaveRestore.cmd | 8 + .../iocEC-GN-PSH0CUB-preSaveRestore.cmd | 42 + .../iocEC-GN-PSH0CUB/sddPostDriverConf.cmd | 6 + .../iocEC-GN-PSH0CUB/sddPreDriverConf.cmd | 86 + .../iocBoot/iocEC-GN-PSH0CUB/sddSeqToLoad.cmd | 6 + .../iocBoot/iocEC-GN-PSH0CUB/seqToLoad.cmd | 8 + .../epics/iocBoot/iocEC-GN-PSH0CUB/st.cmd | 67 + .../iocEC-GN-PSH0CUB/threadSchedulingConf.cmd | 6 + .../iocEC-GN-PSH0CUB/userPostDriverConf.cmd | 6 + .../iocEC-GN-PSH0CUB/userPreDriverConf.cmd | 12 + .../epics/iocBoot/iocEC-GN-PSH0PCF/Makefile | 5 + .../iocBoot/iocEC-GN-PSH0PCF/dbToLoad.cmd | 45 + .../epics/iocBoot/iocEC-GN-PSH0PCF/envSystem | 10 + .../epics/iocBoot/iocEC-GN-PSH0PCF/envUser | 9 + .../iocEC-GN-PSH0PCF-postSaveRestore.cmd | 8 + .../iocEC-GN-PSH0PCF-preSaveRestore.cmd | 42 + .../iocEC-GN-PSH0PCF/iocEC-GN-PSH0PCF.req | 0 .../iocEC-GN-PSH0PCF/sddPostDriverConf.cmd | 2 + .../iocEC-GN-PSH0PCF/sddPreDriverConf.cmd | 2 + .../iocBoot/iocEC-GN-PSH0PCF/sddSeqToLoad.cmd | 6 + .../iocBoot/iocEC-GN-PSH0PCF/seqToLoad.cmd | 8 + .../epics/iocBoot/iocEC-GN-PSH0PCF/st.cmd | 67 + .../iocEC-GN-PSH0PCF/threadSchedulingConf.cmd | 6 + .../iocEC-GN-PSH0PCF/userPostDriverConf.cmd | 6 + .../iocEC-GN-PSH0PCF/userPreDriverConf.cmd | 12 + .../qst-gyrotron-fast-controller/.gitignore | 2 + .../Configurations/100s.csv | 1013 + .../Configurations/100s_20201224_fat.csv | 1013 + .../Configurations/100s_20210105_fat.csv | 1013 + .../Configurations/100s_20210120_fat.csv | 1013 + .../Configurations/1ms-minus.csv | 103 + .../Configurations/1ms-plus.csv | 103 + .../Configurations/1ms.csv | 103 + .../Configurations/JAGyrotronA_FY19_P1.cfg | 4981 ++++ .../Configurations/JAGyrotronB_FY19_P1.cfg | 4946 ++++ .../Configurations/JAGyrotronIOC.db | 1384 + .../Configurations/shot0001.csv | 0 .../Configurations/test.csv | 41 + .../Configurations/test.csv.original | 41 + .../Configurations/test2.csv | 103 + .../Configurations/test2.csv.original | 103 + .../Configurations/test3.csv | 6002 ++++ .../Configurations/test3.csv.original | 6002 ++++ .../Configurations/test5.csv | 1023 + .../Configurations/tests/ECPCSubscriber.cfg | 396 + .../Configurations/tests/EPICS_Test.cfg | 249 + .../Configurations/tests/EPICS_Test.db | 18 + .../tests/NI6528_NI6259_test.cfg | 1081 + .../tests/NI6528_NI6259_test.db | 257 + .../Configurations/tests/NI6528_test.cfg | 191 + .../Configurations/tests/NI6528_test.db | 18 + .../Configurations/tests/README.md | 29 + .../Configurations/tests/Timer_Test.cfg | 163 + .../DataSources/JAEPICSCA/JAEPICSCAInput.cpp | 366 + .../DataSources/JAEPICSCA/JAEPICSCAInput.h | 260 + .../DataSources/JAEPICSCA/JAEPICSCAOutput.cpp | 375 + .../DataSources/JAEPICSCA/JAEPICSCAOutput.h | 233 + .../DataSources/JAEPICSCA/Makefile.gcc | 29 + .../DataSources/JAEPICSCA/Makefile.inc | 58 + .../DataSources/Makefile.gcc | 26 + .../DataSources/Makefile.inc | 42 + .../DataSources/NI6528/Makefile.gcc | 30 + .../DataSources/NI6528/Makefile.inc | 53 + .../DataSources/NI6528/NI6528.cpp | 141 + .../DataSources/NI6528/NI6528.h | 143 + .../DataSources/RandomDataSource/Makefile.gcc | 27 + .../DataSources/RandomDataSource/Makefile.inc | 53 + .../RandomDataSource/RandomDataSource.cpp | 146 + .../RandomDataSource/RandomDataSource.h | 137 + .../Doc/RTAppStates.xml | 1 + .../Doc/StateMachine.txt | 463 + .../GAMs/JABitReverseGAM/JABitReverseGAM.cpp | 123 + .../GAMs/JABitReverseGAM/JABitReverseGAM.h | 75 + .../GAMs/JABitReverseGAM/Makefile.gcc | 27 + .../GAMs/JABitReverseGAM/Makefile.inc | 55 + .../GAMs/JABitSumGAM/JABitSumGAM.cpp | 143 + .../GAMs/JABitSumGAM/JABitSumGAM.h | 81 + .../GAMs/JABitSumGAM/Makefile.gcc | 27 + .../GAMs/JABitSumGAM/Makefile.inc | 55 + .../JAConditionalSignalUpdateGAM.cpp | 309 + .../JAConditionalSignalUpdateGAM.h | 180 + .../JAConditionalSignalUpdateGAM/Makefile.gcc | 27 + .../JAConditionalSignalUpdateGAM/Makefile.inc | 53 + .../GAMs/JAMessageGAM/JAMessageGAM.cpp | 347 + .../GAMs/JAMessageGAM/JAMessageGAM.h | 149 + .../GAMs/JAMessageGAM/Makefile.gcc | 27 + .../GAMs/JAMessageGAM/Makefile.inc | 53 + .../JAModeControlGAM/JAModeControlGAM.cpp | 154 + .../GAMs/JAModeControlGAM/JAModeControlGAM.h | 149 + .../GAMs/JAModeControlGAM/Makefile.gcc | 27 + .../GAMs/JAModeControlGAM/Makefile.inc | 52 + .../JAPreProgrammedGAM/JAPreProgrammedGAM.cpp | 460 + .../JAPreProgrammedGAM/JAPreProgrammedGAM.h | 187 + .../GAMs/JAPreProgrammedGAM/Makefile.gcc | 27 + .../GAMs/JAPreProgrammedGAM/Makefile.inc | 56 + .../JARTStateMachineGAM-v1.cpp | 411 + .../JARTStateMachineGAM-v1.h | 262 + .../JARTStateMachineGAM.cpp | 409 + .../JARTStateMachineGAM/JARTStateMachineGAM.h | 264 + .../JARTStateMachineGAM_stable.cpp | 402 + .../JARTStateMachineGAM_stable.h | 260 + .../GAMs/JARTStateMachineGAM/Makefile.gcc | 27 + .../GAMs/JARTStateMachineGAM/Makefile.inc | 56 + .../GAMs/JARampupGAM/JARampupGAM.cpp | 295 + .../GAMs/JARampupGAM/JARampupGAM.h | 141 + .../GAMs/JARampupGAM/Makefile.gcc | 27 + .../GAMs/JARampupGAM/Makefile.inc | 55 + .../JASDNRTStateMachineGAM.cpp | 361 + .../JASDNRTStateMachineGAM.h | 250 + .../GAMs/JASDNRTStateMachineGAM/Makefile.gcc | 27 + .../GAMs/JASDNRTStateMachineGAM/Makefile.inc | 55 + .../GAMs/JASampleGAM/JASampleGAM.cpp | 177 + .../GAMs/JASampleGAM/JASampleGAM.h | 122 + .../GAMs/JASampleGAM/Makefile.gcc | 27 + .../GAMs/JASampleGAM/Makefile.inc | 55 + .../JASourceChoiseGAM/JASourceChoiseGAM.cpp | 188 + .../JASourceChoiseGAM/JASourceChoiseGAM.h | 84 + .../GAMs/JASourceChoiseGAM/Makefile.gcc | 27 + .../GAMs/JASourceChoiseGAM/Makefile.inc | 55 + .../JATerminalInterfaceGAM.cpp | 206 + .../JATerminalInterfaceGAM.h | 157 + .../GAMs/JATerminalInterfaceGAM/Makefile.gcc | 27 + .../GAMs/JATerminalInterfaceGAM/Makefile.inc | 55 + .../JATriangleWaveGAM/JATriangleWaveGAM.cpp | 178 + .../JATriangleWaveGAM/JATriangleWaveGAM.h | 130 + .../GAMs/JATriangleWaveGAM/Makefile.gcc | 27 + .../GAMs/JATriangleWaveGAM/Makefile.inc | 56 + .../GAMs/JAWFRecordGAM/JAWFRecordGAM.cpp | 317 + .../GAMs/JAWFRecordGAM/JAWFRecordGAM.h | 130 + .../GAMs/JAWFRecordGAM/Makefile.gcc | 27 + .../GAMs/JAWFRecordGAM/Makefile.inc | 56 + .../GAMs/Makefile.gcc | 26 + .../GAMs/Makefile.inc | 45 + .../qst-gyrotron-fast-controller/Makefile.inc | 42 + .../Makefile.linux | 27 + .../qst-gyrotron-fast-controller/README.md | 1 + .../Startup/Main.sh | 195 + .../Startup/runECPCSub.sh | 1 + .../Startup/runEPICSTEST.sh | 2 + .../Startup/runHWTEST.sh | 4 + .../Startup/runMain.sh | 4 + .../Startup/runMainB.sh | 3 + .../Startup/runNI6528TEST.sh | 4 + .../Test_P01/beamon_test_async_GYB.py | 51 + .../Test_P01/test.py | 90 + .../Test_P01/test_async.py | 414 + .../Test_P01/test_async.pyc | Bin 0 -> 18679 bytes .../Test_P01/test_ready.py | 38 + .../Test_P01/test_ready.pyc | Bin 0 -> 2241 bytes .../Test_P01/test_ready_hw.py | 43 + .../Test_P01/test_ready_hw.pyc | Bin 0 -> 1379 bytes .../Test_P01/test_rup_confirm.py | 28 + .../Test_P01/test_setup.py | 109 + .../Test_P01/test_setup.pyc | Bin 0 -> 6040 bytes .../Test_P01/test_setup_hw.py | 93 + .../Test_P01/test_setup_hw.pyc | Bin 0 -> 2912 bytes .../Test_P01/test_setup_rup_confirm.py | 106 + .../Test_P01/test_setup_rup_confirm.pyc | Bin 0 -> 5717 bytes .../Test_P01/test_standby.py | 73 + .../Test_P01/test_standby.pyc | Bin 0 -> 4531 bytes .../Test_P01/test_standby_hw.py | 76 + .../Test_P01/test_standby_hw.pyc | Bin 0 -> 3293 bytes .../Test_P01/test_sync.py | 97 + .../Test_P01/test_sync.pyc | Bin 0 -> 5308 bytes EC-GN-JA-PCF/target/.codac-version | 1 + EC-GN-JA-PCF/target/bin/Gyrotron01DAN | Bin 0 -> 259592 bytes EC-GN-JA-PCF/target/bin/Gyrotron02DAN | Bin 0 -> 259592 bytes ...PCF0SYSM-ioc-6.3.2.v1.0.0-1.el7.x86_64.rpm | Bin 0 -> 41148 bytes ...-PSH0PCF-ioc-6.3.2.v1.0.0-1.el7.x86_64.rpm | Bin 0 -> 53972 bytes .../iter-icint-EC-GN-1.0.0-1.noarch.rpm | Bin 0 -> 7504 bytes .../iter-icint-EC-GN-alarm-1.0.0-1.noarch.rpm | Bin 0 -> 4856 bytes ...ter-icint-EC-GN-archive-1.0.0-1.noarch.rpm | Bin 0 -> 3300 bytes .../iter-icint-EC-GN-opi-1.0.0-1.noarch.rpm | Bin 0 -> 47580 bytes EC-GN-JA-PCF/target/main/beast/EC-beast.xml | 273 + EC-GN-JA-PCF/target/main/beauty/EC-beauty.xml | 242 + EC-GN-JA-PCF/target/main/boy/SymbolLibrary | 1 + .../main/boy/empty/ITER-EC-GN-HWCF_Mimic.opi | 211 + .../empty/ITER-EC-GN-P01-GAF-CCPS_Mimic.opi | 211 + .../empty/ITER-EC-GN-P01-GAF-FHPS_Mimic.opi | 211 + .../empty/ITER-EC-GN-P01-GAF-GCPS_Mimic.opi | 211 + .../empty/ITER-EC-GN-P01-GAF-MCPS_Mimic.opi | 211 + .../boy/empty/ITER-EC-GN-P01-GAFP_Mimic.opi | 211 + .../boy/empty/ITER-EC-GN-P01-GAF_Mimic.opi | 211 + .../empty/ITER-EC-GN-P01-GBF-CCPS_Mimic.opi | 211 + .../empty/ITER-EC-GN-P01-GBF-FHPS_Mimic.opi | 211 + .../empty/ITER-EC-GN-P01-GBF-GCPS_Mimic.opi | 211 + .../empty/ITER-EC-GN-P01-GBF-MCPS_Mimic.opi | 211 + .../boy/empty/ITER-EC-GN-P01-GBFP_Mimic.opi | 211 + .../boy/empty/ITER-EC-GN-P01-GBF_Mimic.opi | 211 + .../boy/empty/ITER-EC-GN-P01-GPF_Mimic.opi | 211 + .../boy/empty/ITER-EC-GN-P01-GPS_Mimic.opi | 211 + .../boy/empty/ITER-EC-GN-P01-PA1F_Mimic.opi | 211 + .../boy/empty/ITER-EC-GN-P01-PA2F_Mimic.opi | 211 + .../boy/empty/ITER-EC-GN-P01-PB1F_Mimic.opi | 211 + .../boy/empty/ITER-EC-GN-P01-PB2F_Mimic.opi | 211 + .../boy/empty/ITER-EC-GN-P01-PMF_Mimic.opi | 211 + .../main/boy/empty/ITER-EC-GN-P01_Mimic.opi | 211 + .../main/boy/empty/ITER-EC-GN_Mimic.opi | 211 + .../target/main/boy/empty/ITER-EC_Mimic.opi | 211 + .../target/main/boy/navigation/Navigation.xml | 19 + .../boy/navigation/Navigation_EC-GN-HWCF.xml | 16 + .../Navigation_EC-GN-P01-GAF-CCPS.xml | 16 + .../Navigation_EC-GN-P01-GAF-FHPS.xml | 16 + .../Navigation_EC-GN-P01-GAF-GCPS.xml | 16 + .../Navigation_EC-GN-P01-GAF-MCPS.xml | 16 + .../navigation/Navigation_EC-GN-P01-GAF.xml | 28 + .../navigation/Navigation_EC-GN-P01-GAFP.xml | 16 + .../Navigation_EC-GN-P01-GBF-CCPS.xml | 16 + .../Navigation_EC-GN-P01-GBF-FHPS.xml | 16 + .../Navigation_EC-GN-P01-GBF-GCPS.xml | 16 + .../Navigation_EC-GN-P01-GBF-MCPS.xml | 16 + .../navigation/Navigation_EC-GN-P01-GBF.xml | 28 + .../navigation/Navigation_EC-GN-P01-GBFP.xml | 16 + .../navigation/Navigation_EC-GN-P01-GPF.xml | 16 + .../navigation/Navigation_EC-GN-P01-GPS.xml | 16 + .../navigation/Navigation_EC-GN-P01-PA1F.xml | 16 + .../navigation/Navigation_EC-GN-P01-PA2F.xml | 16 + .../navigation/Navigation_EC-GN-P01-PB1F.xml | 16 + .../navigation/Navigation_EC-GN-P01-PB2F.xml | 16 + .../navigation/Navigation_EC-GN-P01-PMF.xml | 16 + .../boy/navigation/Navigation_EC-GN-P01.xml | 49 + .../main/boy/navigation/Navigation_EC-GN.xml | 22 + .../main/boy/navigation/Navigation_EC.xml | 19 + .../boy/sysm/EC-GN-SYSM-CubicleDetails.opi | 415 + .../boy/sysm/EC-GN-SYSM-F0-PCFDetails.opi | 1471 + .../boy/sysm/EC-GN-SYSM-H0-PSHDetails.opi | 1405 + .../boy/sysm/EC-GN-SYSM-P0-PLCDetails.opi | 707 + .../target/main/boy/sysm/EC-GN-SYSM.opi | 619 + .../main/boy/sysm/scripts/AlarmShortFormat.js | 20 + .../scripts/CUDetailsTableSelectionMonitor.js | 14 + .../ControlUnitsTableSelectionMonitor.js | 51 + .../ControlUnitsTableSelectionMonitor.py | 38 + ...clesContentSummaryTableSelectionMonitor.js | 23 + ...clesContentSummaryTableSelectionMonitor.py | 24 + .../CubiclesDetailsTableSelectionMonitor.js | 14 + .../scripts/CubiclesTableSelectionMonitor.js | 31 + .../scripts/CubiclesTableSelectionMonitor.py | 24 + .../boy/sysm/scripts/DisplayAlarmsInRow.py | 14 + ...splayPVValuesINCtrlUnitDetailTableTable.js | 57 + ...splayPVValuesINCtrlUnitDetailTableTable.py | 49 + .../DisplayPVValuesInCubicleContent.js | 92 + .../DisplayPVValuesInCubicleContent.py | 71 + .../DisplayPVValuesInCubicleOverview.js | 57 + .../DisplayPVValuesInCubicleOverview.py | 31 + .../scripts/DisplayPVValuesInGeneralTable.js | 55 + .../scripts/DisplayPVValuesInGeneralTable.py | 45 + .../sysm/scripts/DisplayPVValuesInOverview.js | 74 + .../sysm/scripts/DisplayPVValuesInOverview.py | 55 + .../scripts/DisplayPVValuesInPLCOverview.js | 34 + .../scripts/DisplayPVValuesInPLCOverview.py | 26 + .../DisplayPVValuesInServerOverview.js | 31 + .../DisplayPVValuesInServerOverview.py | 27 + .../IOCDetailsTableSelectionMonitor.js | 14 + .../PLCDetailsTableSelectionMonitor.js | 14 + .../sysm/scripts/PLCsTableSelectionMonitor.js | 29 + .../sysm/scripts/PLCsTableSelectionMonitor.py | 27 + .../scripts/ServersTableSelectionMonitor.js | 26 + .../scripts/ServersTableSelectionMonitor.py | 26 + EC-GN-JA-PCF/target/main/boy/templates | 1 + .../DataSources/JAEPICSCA/JAEPICSCAInput.cpp | 366 + .../DataSources/JAEPICSCA/JAEPICSCAInput.h | 260 + .../DataSources/JAEPICSCA/JAEPICSCAOutput.cpp | 375 + .../DataSources/JAEPICSCA/JAEPICSCAOutput.h | 233 + .../c++/DataSources/JAEPICSCA/Makefile.gcc | 29 + .../c++/DataSources/JAEPICSCA/Makefile.inc | 58 + .../DataSources/JAEPICSCA/depends.x86-linux | 305 + .../JAEPICSCA/dependsRaw.x86-linux | 305 + .../target/main/c++/DataSources/Makefile | 28 + .../target/main/c++/DataSources/Makefile.gcc | 26 + .../target/main/c++/DataSources/Makefile.inc | 42 + .../main/c++/DataSources/NI6528/Makefile.gcc | 30 + .../main/c++/DataSources/NI6528/Makefile.inc | 53 + .../main/c++/DataSources/NI6528/NI6528.cpp | 141 + .../main/c++/DataSources/NI6528/NI6528.h | 143 + .../DataSources/RandomDataSource/Makefile.gcc | 27 + .../DataSources/RandomDataSource/Makefile.inc | 53 + .../RandomDataSource/RandomDataSource.cpp | 146 + .../RandomDataSource/RandomDataSource.h | 137 + .../GAMs/JABitReverseGAM/JABitReverseGAM.cpp | 123 + .../GAMs/JABitReverseGAM/JABitReverseGAM.h | 75 + .../c++/GAMs/JABitReverseGAM/Makefile.gcc | 27 + .../c++/GAMs/JABitReverseGAM/Makefile.inc | 55 + .../main/c++/GAMs/JABitSumGAM/JABitSumGAM.cpp | 143 + .../main/c++/GAMs/JABitSumGAM/JABitSumGAM.h | 81 + .../main/c++/GAMs/JABitSumGAM/Makefile.gcc | 27 + .../main/c++/GAMs/JABitSumGAM/Makefile.inc | 55 + .../JAConditionalSignalUpdateGAM.cpp | 309 + .../JAConditionalSignalUpdateGAM.h | 180 + .../JAConditionalSignalUpdateGAM/Makefile.gcc | 27 + .../JAConditionalSignalUpdateGAM/Makefile.inc | 53 + .../c++/GAMs/JAMessageGAM/JAMessageGAM.cpp | 347 + .../main/c++/GAMs/JAMessageGAM/JAMessageGAM.h | 149 + .../main/c++/GAMs/JAMessageGAM/Makefile.gcc | 27 + .../main/c++/GAMs/JAMessageGAM/Makefile.inc | 53 + .../JAModeControlGAM/JAModeControlGAM.cpp | 154 + .../GAMs/JAModeControlGAM/JAModeControlGAM.h | 149 + .../c++/GAMs/JAModeControlGAM/Makefile.gcc | 27 + .../c++/GAMs/JAModeControlGAM/Makefile.inc | 52 + .../JAPreProgrammedGAM/JAPreProgrammedGAM.cpp | 460 + .../JAPreProgrammedGAM/JAPreProgrammedGAM.h | 187 + .../c++/GAMs/JAPreProgrammedGAM/Makefile.gcc | 27 + .../c++/GAMs/JAPreProgrammedGAM/Makefile.inc | 56 + .../JARTStateMachineGAM-v1.cpp | 411 + .../JARTStateMachineGAM-v1.h | 262 + .../JARTStateMachineGAM.cpp | 409 + .../JARTStateMachineGAM/JARTStateMachineGAM.h | 264 + .../JARTStateMachineGAM_stable.cpp | 402 + .../JARTStateMachineGAM_stable.h | 260 + .../c++/GAMs/JARTStateMachineGAM/Makefile.gcc | 27 + .../c++/GAMs/JARTStateMachineGAM/Makefile.inc | 56 + .../main/c++/GAMs/JARampupGAM/JARampupGAM.cpp | 295 + .../main/c++/GAMs/JARampupGAM/JARampupGAM.h | 141 + .../main/c++/GAMs/JARampupGAM/Makefile.gcc | 27 + .../main/c++/GAMs/JARampupGAM/Makefile.inc | 55 + .../JASDNRTStateMachineGAM.cpp | 361 + .../JASDNRTStateMachineGAM.h | 250 + .../GAMs/JASDNRTStateMachineGAM/Makefile.gcc | 27 + .../GAMs/JASDNRTStateMachineGAM/Makefile.inc | 55 + .../main/c++/GAMs/JASampleGAM/JASampleGAM.cpp | 177 + .../main/c++/GAMs/JASampleGAM/JASampleGAM.h | 122 + .../main/c++/GAMs/JASampleGAM/Makefile.gcc | 27 + .../main/c++/GAMs/JASampleGAM/Makefile.inc | 55 + .../JASourceChoiseGAM/JASourceChoiseGAM.cpp | 188 + .../JASourceChoiseGAM/JASourceChoiseGAM.h | 84 + .../c++/GAMs/JASourceChoiseGAM/Makefile.gcc | 27 + .../c++/GAMs/JASourceChoiseGAM/Makefile.inc | 55 + .../JATerminalInterfaceGAM.cpp | 206 + .../JATerminalInterfaceGAM.h | 157 + .../GAMs/JATerminalInterfaceGAM/Makefile.gcc | 27 + .../GAMs/JATerminalInterfaceGAM/Makefile.inc | 55 + .../JATriangleWaveGAM/JATriangleWaveGAM.cpp | 178 + .../JATriangleWaveGAM/JATriangleWaveGAM.h | 130 + .../c++/GAMs/JATriangleWaveGAM/Makefile.gcc | 27 + .../c++/GAMs/JATriangleWaveGAM/Makefile.inc | 56 + .../c++/GAMs/JAWFRecordGAM/JAWFRecordGAM.cpp | 317 + .../c++/GAMs/JAWFRecordGAM/JAWFRecordGAM.h | 130 + .../main/c++/GAMs/JAWFRecordGAM/Makefile.gcc | 27 + .../main/c++/GAMs/JAWFRecordGAM/Makefile.inc | 56 + EC-GN-JA-PCF/target/main/c++/GAMs/Makefile | 28 + .../target/main/c++/GAMs/Makefile.gcc | 26 + .../target/main/c++/GAMs/Makefile.inc | 45 + .../main/c++/Gyrotron01DAN/Gyrotron01DAN.cpp | 639 + .../target/main/c++/Gyrotron01DAN/Makefile | 68 + .../target/main/c++/Gyrotron01DAN/ca-if.h | 165 + .../main/c++/Gyrotron01DAN/configure_sdn.cpp | 68 + .../main/c++/Gyrotron01DAN/environmentVarDev | 17 + .../main/c++/Gyrotron01DAN/includetopics.h | 29 + .../target/main/c++/Gyrotron01DAN/sdd-dan.cpp | 15 + .../target/main/c++/Gyrotron01DAN/sdd-dan.h | 8 + .../target/main/c++/Gyrotron01DAN/sdd-data.h | 14 + .../main/c++/Gyrotron01DAN/sdd-iomodule.h | 37 + .../main/c++/Gyrotron01DAN/sdd-pon-if.h | 36 + .../target/main/c++/Gyrotron01DAN/topicvars.h | 36 + .../main/c++/Gyrotron02DAN/Gyrotron02DAN.cpp | 639 + .../target/main/c++/Gyrotron02DAN/Makefile | 68 + .../target/main/c++/Gyrotron02DAN/ca-if.h | 165 + .../main/c++/Gyrotron02DAN/configure_sdn.cpp | 68 + .../main/c++/Gyrotron02DAN/environmentVarDev | 17 + .../main/c++/Gyrotron02DAN/includetopics.h | 29 + .../target/main/c++/Gyrotron02DAN/sdd-dan.cpp | 15 + .../target/main/c++/Gyrotron02DAN/sdd-dan.h | 8 + .../target/main/c++/Gyrotron02DAN/sdd-data.h | 14 + .../main/c++/Gyrotron02DAN/sdd-iomodule.h | 37 + .../main/c++/Gyrotron02DAN/sdd-pon-if.h | 36 + .../target/main/c++/Gyrotron02DAN/topicvars.h | 36 + EC-GN-JA-PCF/target/main/c++/Makefile | 31 + .../main/c++/conf/Gyrotron01DAN_danconf.xml | 101 + .../main/c++/conf/Gyrotron02DAN_danconf.xml | 101 + .../target/main/c++/conf/environmentVarDev | 14 + .../target/main/c++/include/ccs-headers.h | 36 + .../target/main/c++/include/sys-headers.h | 32 + .../target/main/epics/CUBApp/.appdesc | 1 + .../target/main/epics/CUBApp/Db/Makefile | 24 + .../epics/CUBApp/Db/O.linux-x86_64/Makefile | 10 + .../target/main/epics/CUBApp/Makefile | 29 + .../target/main/epics/CUBApp/src/CUBMain.cpp | 25 + .../target/main/epics/CUBApp/src/Makefile | 59 + .../main/epics/CUBApp/src/O.Common/CUB.dbd | 19604 +++++++++++++ .../main/epics/CUBApp/src/O.linux-x86_64/CUB | Bin 0 -> 61720 bytes .../epics/CUBApp/src/O.linux-x86_64/CUB.dbd.d | 168 + .../epics/CUBApp/src/O.linux-x86_64/CUBMain.d | 16 + .../epics/CUBApp/src/O.linux-x86_64/CUBMain.o | Bin 0 -> 1920 bytes .../CUB_registerRecordDeviceDriver.cpp | 469 + .../CUB_registerRecordDeviceDriver.d | 26 + .../CUB_registerRecordDeviceDriver.o | Bin 0 -> 44960 bytes .../epics/CUBApp/src/O.linux-x86_64/Makefile | 10 + .../target/main/epics/EC-GNApp/Db/Makefile | 44 + .../epics/EC-GNApp/Db/O.linux-x86_64/Makefile | 10 + .../Db/PCF0-EC-GN-HWCF-iocEC-GN-PSH0PCF.db | 1712 ++ ...CF0-EC-GN-P01-GAF-CCPS-iocEC-GN-PSH0PCF.db | 310 + ...CF0-EC-GN-P01-GAF-FHPS-iocEC-GN-PSH0PCF.db | 424 + ...CF0-EC-GN-P01-GAF-GCPS-iocEC-GN-PSH0PCF.db | 273 + ...CF0-EC-GN-P01-GAF-MCPS-iocEC-GN-PSH0PCF.db | 331 + .../Db/PCF0-EC-GN-P01-GAF-iocEC-GN-PSH0PCF.db | 389 + .../PCF0-EC-GN-P01-GAFP-iocEC-GN-PSH0PCF.db | 146 + ...CF0-EC-GN-P01-GBF-CCPS-iocEC-GN-PSH0PCF.db | 310 + ...CF0-EC-GN-P01-GBF-FHPS-iocEC-GN-PSH0PCF.db | 424 + ...CF0-EC-GN-P01-GBF-GCPS-iocEC-GN-PSH0PCF.db | 273 + ...CF0-EC-GN-P01-GBF-MCPS-iocEC-GN-PSH0PCF.db | 306 + .../Db/PCF0-EC-GN-P01-GBF-iocEC-GN-PSH0PCF.db | 389 + .../PCF0-EC-GN-P01-GBFP-iocEC-GN-PSH0PCF.db | 120 + .../Db/PCF0-EC-GN-P01-GPF-iocEC-GN-PSH0PCF.db | 349 + .../Db/PCF0-EC-GN-P01-GPS-iocEC-GN-PSH0PCF.db | 230 + .../PCF0-EC-GN-P01-PA1F-iocEC-GN-PSH0PCF.db | 206 + .../PCF0-EC-GN-P01-PA2F-iocEC-GN-PSH0PCF.db | 206 + .../PCF0-EC-GN-P01-PB1F-iocEC-GN-PSH0PCF.db | 180 + .../PCF0-EC-GN-P01-PB2F-iocEC-GN-PSH0PCF.db | 180 + .../Db/PCF0-EC-GN-P01-PMF-iocEC-GN-PSH0PCF.db | 231 + .../target/main/epics/EC-GNApp/Makefile | 29 + .../main/epics/EC-GNApp/src/EC-GNMain.cpp | 25 + .../target/main/epics/EC-GNApp/src/Makefile | 57 + .../epics/EC-GNApp/src/O.Common/EC-GN.dbd | 18666 ++++++++++++ .../epics/EC-GNApp/src/O.linux-x86_64/EC-GN | Bin 0 -> 45464 bytes .../EC-GNApp/src/O.linux-x86_64/EC-GN.dbd.d | 122 + .../EC-GNApp/src/O.linux-x86_64/EC-GNMain.d | 16 + .../EC-GNApp/src/O.linux-x86_64/EC-GNMain.o | Bin 0 -> 1928 bytes .../EC-GN_registerRecordDeviceDriver.cpp | 356 + .../EC-GN_registerRecordDeviceDriver.d | 26 + .../EC-GN_registerRecordDeviceDriver.o | Bin 0 -> 33976 bytes .../EC-GNApp/src/O.linux-x86_64/Makefile | 10 + EC-GN-JA-PCF/target/main/epics/Makefile | 35 + .../target/main/epics/PLCApp/.appdesc | 1 + .../target/main/epics/PLCApp/Db/Makefile | 24 + .../epics/PLCApp/Db/O.linux-x86_64/Makefile | 10 + .../target/main/epics/PLCApp/Makefile | 29 + .../target/main/epics/PLCApp/src/Makefile | 59 + .../main/epics/PLCApp/src/O.Common/PLC.dbd | 19604 +++++++++++++ .../epics/PLCApp/src/O.linux-x86_64/Makefile | 10 + .../main/epics/PLCApp/src/O.linux-x86_64/PLC | Bin 0 -> 61720 bytes .../epics/PLCApp/src/O.linux-x86_64/PLC.dbd.d | 168 + .../epics/PLCApp/src/O.linux-x86_64/PLCMain.d | 16 + .../epics/PLCApp/src/O.linux-x86_64/PLCMain.o | Bin 0 -> 1920 bytes .../PLC_registerRecordDeviceDriver.cpp | 469 + .../PLC_registerRecordDeviceDriver.d | 26 + .../PLC_registerRecordDeviceDriver.o | Bin 0 -> 44960 bytes .../target/main/epics/PLCApp/src/PLCMain.cpp | 25 + .../target/main/epics/bin/linux-x86_64/CUB | Bin 0 -> 61720 bytes .../target/main/epics/bin/linux-x86_64/EC-GN | Bin 0 -> 45464 bytes .../target/main/epics/bin/linux-x86_64/PLC | Bin 0 -> 61720 bytes .../target/main/epics/configure/CONFIG | 29 + .../target/main/epics/configure/CONFIG_SITE | 43 + .../target/main/epics/configure/Makefile | 8 + .../epics/configure/O.linux-x86_64/Makefile | 10 + .../target/main/epics/configure/RELEASE | 6 + .../target/main/epics/configure/RULES | 6 + .../target/main/epics/configure/RULES.ioc | 2 + .../target/main/epics/configure/RULES_DIRS | 2 + .../target/main/epics/configure/RULES_TOP | 3 + .../db/PCF0-EC-GN-HWCF-iocEC-GN-PSH0PCF.db | 1712 ++ ...CF0-EC-GN-P01-GAF-CCPS-iocEC-GN-PSH0PCF.db | 310 + ...CF0-EC-GN-P01-GAF-FHPS-iocEC-GN-PSH0PCF.db | 424 + ...CF0-EC-GN-P01-GAF-GCPS-iocEC-GN-PSH0PCF.db | 273 + ...CF0-EC-GN-P01-GAF-MCPS-iocEC-GN-PSH0PCF.db | 331 + .../db/PCF0-EC-GN-P01-GAF-iocEC-GN-PSH0PCF.db | 389 + .../PCF0-EC-GN-P01-GAFP-iocEC-GN-PSH0PCF.db | 146 + ...CF0-EC-GN-P01-GBF-CCPS-iocEC-GN-PSH0PCF.db | 310 + ...CF0-EC-GN-P01-GBF-FHPS-iocEC-GN-PSH0PCF.db | 424 + ...CF0-EC-GN-P01-GBF-GCPS-iocEC-GN-PSH0PCF.db | 273 + ...CF0-EC-GN-P01-GBF-MCPS-iocEC-GN-PSH0PCF.db | 306 + .../db/PCF0-EC-GN-P01-GBF-iocEC-GN-PSH0PCF.db | 389 + .../PCF0-EC-GN-P01-GBFP-iocEC-GN-PSH0PCF.db | 120 + .../db/PCF0-EC-GN-P01-GPF-iocEC-GN-PSH0PCF.db | 349 + .../db/PCF0-EC-GN-P01-GPS-iocEC-GN-PSH0PCF.db | 230 + .../PCF0-EC-GN-P01-PA1F-iocEC-GN-PSH0PCF.db | 206 + .../PCF0-EC-GN-P01-PA2F-iocEC-GN-PSH0PCF.db | 206 + .../PCF0-EC-GN-P01-PB1F-iocEC-GN-PSH0PCF.db | 180 + .../PCF0-EC-GN-P01-PB2F-iocEC-GN-PSH0PCF.db | 180 + .../db/PCF0-EC-GN-P01-PMF-iocEC-GN-PSH0PCF.db | 231 + EC-GN-JA-PCF/target/main/epics/dbd/CUB.dbd | 19604 +++++++++++++ EC-GN-JA-PCF/target/main/epics/dbd/EC-GN.dbd | 18666 ++++++++++++ EC-GN-JA-PCF/target/main/epics/dbd/PLC.dbd | 19604 +++++++++++++ .../target/main/epics/iocBoot/Makefile | 6 + .../epics/iocBoot/iocEC-GN-PCF0SYSM/Makefile | 5 + .../iocBoot/iocEC-GN-PCF0SYSM/dbToLoad.cmd | 17 + .../epics/iocBoot/iocEC-GN-PCF0SYSM/envPaths | 3 + .../epics/iocBoot/iocEC-GN-PCF0SYSM/envSystem | 8 + .../epics/iocBoot/iocEC-GN-PCF0SYSM/envUser | 9 + .../iocEC-GN-PCF0SYSM-postSaveRestore.cmd | 8 + .../iocEC-GN-PCF0SYSM-preSaveRestore.cmd | 42 + .../iocEC-GN-PCF0SYSM/iocEC-GN-PCF0SYSM.req | 0 .../iocEC-GN-PCF0SYSM/sddPostDriverConf.cmd | 6 + .../iocEC-GN-PCF0SYSM/sddPreDriverConf.cmd | 86 + .../iocEC-GN-PCF0SYSM/sddSeqToLoad.cmd | 6 + .../iocBoot/iocEC-GN-PCF0SYSM/seqToLoad.cmd | 8 + .../epics/iocBoot/iocEC-GN-PCF0SYSM/st.cmd | 67 + .../threadSchedulingConf.cmd | 6 + .../iocEC-GN-PCF0SYSM/userPostDriverConf.cmd | 6 + .../iocEC-GN-PCF0SYSM/userPreDriverConf.cmd | 12 + .../epics/iocBoot/iocEC-GN-PSH0CUB/Makefile | 5 + .../iocBoot/iocEC-GN-PSH0CUB/dbToLoad.cmd | 25 + .../epics/iocBoot/iocEC-GN-PSH0CUB/envPaths | 3 + .../epics/iocBoot/iocEC-GN-PSH0CUB/envSystem | 8 + .../epics/iocBoot/iocEC-GN-PSH0CUB/envUser | 9 + .../iocEC-GN-PSH0CUB-postSaveRestore.cmd | 8 + .../iocEC-GN-PSH0CUB-preSaveRestore.cmd | 42 + .../iocEC-GN-PSH0CUB/sddPostDriverConf.cmd | 6 + .../iocEC-GN-PSH0CUB/sddPreDriverConf.cmd | 86 + .../iocBoot/iocEC-GN-PSH0CUB/sddSeqToLoad.cmd | 6 + .../iocBoot/iocEC-GN-PSH0CUB/seqToLoad.cmd | 8 + .../epics/iocBoot/iocEC-GN-PSH0CUB/st.cmd | 67 + .../iocEC-GN-PSH0CUB/threadSchedulingConf.cmd | 6 + .../iocEC-GN-PSH0CUB/userPostDriverConf.cmd | 6 + .../iocEC-GN-PSH0CUB/userPreDriverConf.cmd | 12 + .../epics/iocBoot/iocEC-GN-PSH0PCF/Makefile | 5 + .../iocBoot/iocEC-GN-PSH0PCF/dbToLoad.cmd | 45 + .../epics/iocBoot/iocEC-GN-PSH0PCF/envPaths | 3 + .../epics/iocBoot/iocEC-GN-PSH0PCF/envSystem | 10 + .../epics/iocBoot/iocEC-GN-PSH0PCF/envUser | 9 + .../iocEC-GN-PSH0PCF-postSaveRestore.cmd | 8 + .../iocEC-GN-PSH0PCF-preSaveRestore.cmd | 42 + .../iocEC-GN-PSH0PCF/iocEC-GN-PSH0PCF.req | 0 .../iocEC-GN-PSH0PCF/sddPostDriverConf.cmd | 2 + .../iocEC-GN-PSH0PCF/sddPreDriverConf.cmd | 2 + .../iocBoot/iocEC-GN-PSH0PCF/sddSeqToLoad.cmd | 6 + .../iocBoot/iocEC-GN-PSH0PCF/seqToLoad.cmd | 8 + .../epics/iocBoot/iocEC-GN-PSH0PCF/st.cmd | 67 + .../iocEC-GN-PSH0PCF/threadSchedulingConf.cmd | 6 + .../iocEC-GN-PSH0PCF/userPostDriverConf.cmd | 6 + .../iocEC-GN-PSH0PCF/userPreDriverConf.cmd | 12 + .../qst-gyrotron-fast-controller/.gitignore | 2 + .../Configurations/100s.csv | 1013 + .../Configurations/100s_20201224_fat.csv | 1013 + .../Configurations/100s_20210105_fat.csv | 1013 + .../Configurations/100s_20210120_fat.csv | 1013 + .../Configurations/1ms-minus.csv | 103 + .../Configurations/1ms-plus.csv | 103 + .../Configurations/1ms.csv | 103 + .../Configurations/JAGyrotronA_FY19_P1.cfg | 4981 ++++ .../Configurations/JAGyrotronB_FY19_P1.cfg | 4946 ++++ .../Configurations/JAGyrotronIOC.db | 1384 + .../Configurations/shot0001.csv | 0 .../Configurations/test.csv | 41 + .../Configurations/test.csv.original | 41 + .../Configurations/test2.csv | 103 + .../Configurations/test2.csv.original | 103 + .../Configurations/test3.csv | 6002 ++++ .../Configurations/test3.csv.original | 6002 ++++ .../Configurations/test5.csv | 1023 + .../Configurations/tests/ECPCSubscriber.cfg | 396 + .../Configurations/tests/EPICS_Test.cfg | 249 + .../Configurations/tests/EPICS_Test.db | 18 + .../tests/NI6528_NI6259_test.cfg | 1081 + .../tests/NI6528_NI6259_test.db | 257 + .../Configurations/tests/NI6528_test.cfg | 191 + .../Configurations/tests/NI6528_test.db | 18 + .../Configurations/tests/README.md | 29 + .../Configurations/tests/Timer_Test.cfg | 163 + .../DataSources/JAEPICSCA/JAEPICSCAInput.cpp | 366 + .../DataSources/JAEPICSCA/JAEPICSCAInput.h | 260 + .../DataSources/JAEPICSCA/JAEPICSCAOutput.cpp | 375 + .../DataSources/JAEPICSCA/JAEPICSCAOutput.h | 233 + .../DataSources/JAEPICSCA/Makefile.gcc | 29 + .../DataSources/JAEPICSCA/Makefile.inc | 58 + .../DataSources/Makefile.gcc | 26 + .../DataSources/Makefile.inc | 42 + .../DataSources/NI6528/Makefile.gcc | 30 + .../DataSources/NI6528/Makefile.inc | 53 + .../DataSources/NI6528/NI6528.cpp | 141 + .../DataSources/NI6528/NI6528.h | 143 + .../DataSources/RandomDataSource/Makefile.gcc | 27 + .../DataSources/RandomDataSource/Makefile.inc | 53 + .../RandomDataSource/RandomDataSource.cpp | 146 + .../RandomDataSource/RandomDataSource.h | 137 + .../Doc/RTAppStates.xml | 1 + .../Doc/StateMachine.txt | 463 + .../GAMs/JABitReverseGAM/JABitReverseGAM.cpp | 123 + .../GAMs/JABitReverseGAM/JABitReverseGAM.h | 75 + .../GAMs/JABitReverseGAM/Makefile.gcc | 27 + .../GAMs/JABitReverseGAM/Makefile.inc | 55 + .../GAMs/JABitSumGAM/JABitSumGAM.cpp | 143 + .../GAMs/JABitSumGAM/JABitSumGAM.h | 81 + .../GAMs/JABitSumGAM/Makefile.gcc | 27 + .../GAMs/JABitSumGAM/Makefile.inc | 55 + .../JAConditionalSignalUpdateGAM.cpp | 309 + .../JAConditionalSignalUpdateGAM.h | 180 + .../JAConditionalSignalUpdateGAM/Makefile.gcc | 27 + .../JAConditionalSignalUpdateGAM/Makefile.inc | 53 + .../GAMs/JAMessageGAM/JAMessageGAM.cpp | 347 + .../GAMs/JAMessageGAM/JAMessageGAM.h | 149 + .../GAMs/JAMessageGAM/Makefile.gcc | 27 + .../GAMs/JAMessageGAM/Makefile.inc | 53 + .../JAModeControlGAM/JAModeControlGAM.cpp | 154 + .../GAMs/JAModeControlGAM/JAModeControlGAM.h | 149 + .../GAMs/JAModeControlGAM/Makefile.gcc | 27 + .../GAMs/JAModeControlGAM/Makefile.inc | 52 + .../JAPreProgrammedGAM/JAPreProgrammedGAM.cpp | 460 + .../JAPreProgrammedGAM/JAPreProgrammedGAM.h | 187 + .../GAMs/JAPreProgrammedGAM/Makefile.gcc | 27 + .../GAMs/JAPreProgrammedGAM/Makefile.inc | 56 + .../JARTStateMachineGAM-v1.cpp | 411 + .../JARTStateMachineGAM-v1.h | 262 + .../JARTStateMachineGAM.cpp | 409 + .../JARTStateMachineGAM/JARTStateMachineGAM.h | 264 + .../JARTStateMachineGAM_stable.cpp | 402 + .../JARTStateMachineGAM_stable.h | 260 + .../GAMs/JARTStateMachineGAM/Makefile.gcc | 27 + .../GAMs/JARTStateMachineGAM/Makefile.inc | 56 + .../GAMs/JARampupGAM/JARampupGAM.cpp | 295 + .../GAMs/JARampupGAM/JARampupGAM.h | 141 + .../GAMs/JARampupGAM/Makefile.gcc | 27 + .../GAMs/JARampupGAM/Makefile.inc | 55 + .../JASDNRTStateMachineGAM.cpp | 361 + .../JASDNRTStateMachineGAM.h | 250 + .../GAMs/JASDNRTStateMachineGAM/Makefile.gcc | 27 + .../GAMs/JASDNRTStateMachineGAM/Makefile.inc | 55 + .../GAMs/JASampleGAM/JASampleGAM.cpp | 177 + .../GAMs/JASampleGAM/JASampleGAM.h | 122 + .../GAMs/JASampleGAM/Makefile.gcc | 27 + .../GAMs/JASampleGAM/Makefile.inc | 55 + .../JASourceChoiseGAM/JASourceChoiseGAM.cpp | 188 + .../JASourceChoiseGAM/JASourceChoiseGAM.h | 84 + .../GAMs/JASourceChoiseGAM/Makefile.gcc | 27 + .../GAMs/JASourceChoiseGAM/Makefile.inc | 55 + .../JATerminalInterfaceGAM.cpp | 206 + .../JATerminalInterfaceGAM.h | 157 + .../GAMs/JATerminalInterfaceGAM/Makefile.gcc | 27 + .../GAMs/JATerminalInterfaceGAM/Makefile.inc | 55 + .../JATriangleWaveGAM/JATriangleWaveGAM.cpp | 178 + .../JATriangleWaveGAM/JATriangleWaveGAM.h | 130 + .../GAMs/JATriangleWaveGAM/Makefile.gcc | 27 + .../GAMs/JATriangleWaveGAM/Makefile.inc | 56 + .../GAMs/JAWFRecordGAM/JAWFRecordGAM.cpp | 317 + .../GAMs/JAWFRecordGAM/JAWFRecordGAM.h | 130 + .../GAMs/JAWFRecordGAM/Makefile.gcc | 27 + .../GAMs/JAWFRecordGAM/Makefile.inc | 56 + .../GAMs/Makefile.gcc | 26 + .../GAMs/Makefile.inc | 45 + .../qst-gyrotron-fast-controller/Makefile.inc | 42 + .../Makefile.linux | 27 + .../qst-gyrotron-fast-controller/README.md | 1 + .../Startup/Main.sh | 195 + .../Startup/runECPCSub.sh | 1 + .../Startup/runEPICSTEST.sh | 2 + .../Startup/runHWTEST.sh | 4 + .../Startup/runMain.sh | 4 + .../Startup/runMainB.sh | 3 + .../Startup/runNI6528TEST.sh | 4 + .../Test_P01/beamon_test_async_GYB.py | 51 + .../Test_P01/test.py | 90 + .../Test_P01/test_async.py | 414 + .../Test_P01/test_async.pyc | Bin 0 -> 18679 bytes .../Test_P01/test_ready.py | 38 + .../Test_P01/test_ready.pyc | Bin 0 -> 2241 bytes .../Test_P01/test_ready_hw.py | 43 + .../Test_P01/test_ready_hw.pyc | Bin 0 -> 1379 bytes .../Test_P01/test_rup_confirm.py | 28 + .../Test_P01/test_setup.py | 109 + .../Test_P01/test_setup.pyc | Bin 0 -> 6040 bytes .../Test_P01/test_setup_hw.py | 93 + .../Test_P01/test_setup_hw.pyc | Bin 0 -> 2912 bytes .../Test_P01/test_setup_rup_confirm.py | 106 + .../Test_P01/test_setup_rup_confirm.pyc | Bin 0 -> 5717 bytes .../Test_P01/test_standby.py | 73 + .../Test_P01/test_standby.pyc | Bin 0 -> 4531 bytes .../Test_P01/test_standby_hw.py | 76 + .../Test_P01/test_standby_hw.pyc | Bin 0 -> 3293 bytes .../Test_P01/test_sync.py | 97 + .../Test_P01/test_sync.pyc | Bin 0 -> 5308 bytes .../DataSources/JAEPICSCA/JAEPICSCA.a | Bin 0 -> 570944 bytes .../DataSources/JAEPICSCA/JAEPICSCA.so | Bin 0 -> 315048 bytes .../DataSources/JAEPICSCA/JAEPICSCAInput.o | Bin 0 -> 330768 bytes .../DataSources/JAEPICSCA/JAEPICSCAOutput.o | Bin 0 -> 317992 bytes .../DataSources/JAEPICSCA/libJAEPICSCA.so | 1 + .../x86-linux/DataSources/NI6528/NI6528.a | Bin 0 -> 268632 bytes .../x86-linux/DataSources/NI6528/NI6528.o | Bin 0 -> 268576 bytes .../x86-linux/DataSources/NI6528/NI6528.so | Bin 0 -> 167928 bytes .../x86-linux/DataSources/NI6528/libNI6528.so | 1 + .../RandomDataSource/RandomDataSource.a | Bin 0 -> 260168 bytes .../RandomDataSource/RandomDataSource.o | Bin 0 -> 260152 bytes .../RandomDataSource/RandomDataSource.so | Bin 0 -> 161200 bytes .../RandomDataSource/libRandomDataSource.so | 1 + .../GAMs/JABitReverseGAM/JABitReverseGAM.a | Bin 0 -> 265928 bytes .../GAMs/JABitReverseGAM/JABitReverseGAM.o | Bin 0 -> 265880 bytes .../GAMs/JABitReverseGAM/JABitReverseGAM.so | Bin 0 -> 166600 bytes .../JABitReverseGAM/libJABitReverseGAM.so | 1 + .../x86-linux/GAMs/JABitSumGAM/JABitSumGAM.a | Bin 0 -> 267424 bytes .../x86-linux/GAMs/JABitSumGAM/JABitSumGAM.o | Bin 0 -> 267344 bytes .../x86-linux/GAMs/JABitSumGAM/JABitSumGAM.so | Bin 0 -> 166720 bytes .../GAMs/JABitSumGAM/libJABitSumGAM.so | 1 + .../JAConditionalSignalUpdateGAM.a | Bin 0 -> 306560 bytes .../JAConditionalSignalUpdateGAM.o | Bin 0 -> 306496 bytes .../JAConditionalSignalUpdateGAM.so | Bin 0 -> 191248 bytes .../libJAConditionalSignalUpdateGAM.so | 1 + .../GAMs/JAMessageGAM/JAMessageGAM.a | Bin 0 -> 341104 bytes .../GAMs/JAMessageGAM/JAMessageGAM.o | Bin 0 -> 341032 bytes .../GAMs/JAMessageGAM/JAMessageGAM.so | Bin 0 -> 208552 bytes .../GAMs/JAMessageGAM/libJAMessageGAM.so | 1 + .../GAMs/JAModeControlGAM/JAModeControlGAM.a | Bin 0 -> 269872 bytes .../GAMs/JAModeControlGAM/JAModeControlGAM.o | Bin 0 -> 269800 bytes .../GAMs/JAModeControlGAM/JAModeControlGAM.so | Bin 0 -> 167760 bytes .../JAModeControlGAM/libJAModeControlGAM.so | 1 + .../JAPreProgrammedGAM/JAPreProgrammedGAM.a | Bin 0 -> 313512 bytes .../JAPreProgrammedGAM/JAPreProgrammedGAM.o | Bin 0 -> 313440 bytes .../JAPreProgrammedGAM/JAPreProgrammedGAM.so | Bin 0 -> 194984 bytes .../libJAPreProgrammedGAM.so | 1 + .../JARTStateMachineGAM/JARTStateMachineGAM.a | Bin 0 -> 283896 bytes .../JARTStateMachineGAM/JARTStateMachineGAM.o | Bin 0 -> 283848 bytes .../JARTStateMachineGAM.so | Bin 0 -> 179256 bytes .../libJARTStateMachineGAM.so | 1 + .../x86-linux/GAMs/JARampupGAM/JARampupGAM.a | Bin 0 -> 275384 bytes .../x86-linux/GAMs/JARampupGAM/JARampupGAM.o | Bin 0 -> 275328 bytes .../x86-linux/GAMs/JARampupGAM/JARampupGAM.so | Bin 0 -> 170928 bytes .../GAMs/JARampupGAM/libJARampupGAM.so | 1 + .../JASDNRTStateMachineGAM.a | Bin 0 -> 291128 bytes .../JASDNRTStateMachineGAM.o | Bin 0 -> 291024 bytes .../JASDNRTStateMachineGAM.so | Bin 0 -> 179440 bytes .../libJASDNRTStateMachineGAM.so | 1 + .../JASourceChoiseGAM/JASourceChoiseGAM.a | Bin 0 -> 577592 bytes .../JASourceChoiseGAM/JASourceChoiseGAM.o | Bin 0 -> 577472 bytes .../JASourceChoiseGAM/JASourceChoiseGAM.so | Bin 0 -> 341704 bytes .../JASourceChoiseGAM/libJASourceChoiseGAM.so | 1 + .../JATerminalInterfaceGAM.a | Bin 0 -> 274160 bytes .../JATerminalInterfaceGAM.o | Bin 0 -> 274040 bytes .../JATerminalInterfaceGAM.so | Bin 0 -> 168608 bytes .../libJATerminalInterfaceGAM.so | 1 + .../JATriangleWaveGAM/JATriangleWaveGAM.a | Bin 0 -> 261888 bytes .../JATriangleWaveGAM/JATriangleWaveGAM.o | Bin 0 -> 261800 bytes .../JATriangleWaveGAM/JATriangleWaveGAM.so | Bin 0 -> 160064 bytes .../JATriangleWaveGAM/libJATriangleWaveGAM.so | 1 + .../GAMs/JAWFRecordGAM/JAWFRecordGAM.a | Bin 0 -> 299984 bytes .../GAMs/JAWFRecordGAM/JAWFRecordGAM.o | Bin 0 -> 299912 bytes .../GAMs/JAWFRecordGAM/JAWFRecordGAM.so | Bin 0 -> 188080 bytes .../GAMs/JAWFRecordGAM/libJAWFRecordGAM.so | 1 + .../target/obj/Gyrotron01DAN/Gyrotron01DAN.o | Bin 0 -> 18184 bytes .../target/obj/Gyrotron01DAN/configure_sdn.o | Bin 0 -> 363184 bytes .../target/obj/Gyrotron02DAN/Gyrotron02DAN.o | Bin 0 -> 18184 bytes .../target/obj/Gyrotron02DAN/configure_sdn.o | Bin 0 -> 363184 bytes EC-GN-JA-PCF/unit.spec | 134 + ...t_13-05-25_15-59-1747151989_670334485.spec | 134 + generate.sh | 147 + 1571 files changed, 611466 insertions(+) create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAInput.cpp create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAInput.h create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAOutput.cpp create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAOutput.h create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/DataSources/JAEPICSCA/Makefile.gcc create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/DataSources/JAEPICSCA/Makefile.inc create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/DataSources/Makefile create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/DataSources/Makefile.gcc create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/DataSources/Makefile.inc create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/DataSources/NI6528/Makefile.gcc create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/DataSources/NI6528/Makefile.inc create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/DataSources/NI6528/NI6528.cpp create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/DataSources/NI6528/NI6528.h create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/DataSources/RandomDataSource/Makefile.gcc create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/DataSources/RandomDataSource/Makefile.inc create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/DataSources/RandomDataSource/RandomDataSource.cpp create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/DataSources/RandomDataSource/RandomDataSource.h create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitReverseGAM/JABitReverseGAM.cpp create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitReverseGAM/JABitReverseGAM.h create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitReverseGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitReverseGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitSumGAM/JABitSumGAM.cpp create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitSumGAM/JABitSumGAM.h create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitSumGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitSumGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.cpp create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.h create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAMessageGAM/JAMessageGAM.cpp create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAMessageGAM/JAMessageGAM.h create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAMessageGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAMessageGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAModeControlGAM/JAModeControlGAM.cpp create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAModeControlGAM/JAModeControlGAM.h create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAModeControlGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAModeControlGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.cpp create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.h create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAPreProgrammedGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAPreProgrammedGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.cpp create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.h create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.cpp create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.h create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.cpp create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.h create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARampupGAM/JARampupGAM.cpp create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARampupGAM/JARampupGAM.h create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARampupGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARampupGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.cpp create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.h create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASDNRTStateMachineGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASDNRTStateMachineGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASampleGAM/JASampleGAM.cpp create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASampleGAM/JASampleGAM.h create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASampleGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASampleGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.cpp create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.h create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASourceChoiseGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASourceChoiseGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.cpp create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.h create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATerminalInterfaceGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATerminalInterfaceGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.cpp create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.h create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATriangleWaveGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATriangleWaveGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAWFRecordGAM/JAWFRecordGAM.cpp create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAWFRecordGAM/JAWFRecordGAM.h create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAWFRecordGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAWFRecordGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/Makefile create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/Makefile.gcc create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/Makefile.inc create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/Gyrotron01DAN.cpp create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/Makefile create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/ca-if.h create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/configure_sdn.cpp create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/environmentVarDev create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/includetopics.h create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/sdd-dan.cpp create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/sdd-dan.h create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/sdd-data.h create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/sdd-iomodule.h create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/sdd-pon-if.h create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/topicvars.h create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/Gyrotron02DAN.cpp create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/Makefile create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/ca-if.h create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/configure_sdn.cpp create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/environmentVarDev create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/includetopics.h create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/sdd-dan.cpp create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/sdd-dan.h create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/sdd-data.h create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/sdd-iomodule.h create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/sdd-pon-if.h create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/topicvars.h create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/Makefile create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/conf/Gyrotron01DAN_danconf.xml create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/conf/Gyrotron02DAN_danconf.xml create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/conf/environmentVarDev create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/include/ccs-headers.h create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/include/sys-headers.h create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/.gitignore create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s.csv create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20201224_fat.csv create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20210105_fat.csv create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20210120_fat.csv create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/1ms-minus.csv create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/1ms-plus.csv create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/1ms.csv create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronA_FY19_P1.cfg create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronB_FY19_P1.cfg create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronIOC.db create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/shot0001.csv create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/test.csv create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/test.csv.original create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/test2.csv create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/test2.csv.original create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/test3.csv create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/test3.csv.original create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/test5.csv create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/ECPCSubscriber.cfg create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/EPICS_Test.cfg create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/EPICS_Test.db create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_NI6259_test.cfg create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_NI6259_test.db create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_test.cfg create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_test.db create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/README.md create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/Timer_Test.cfg create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAInput.cpp create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAInput.h create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAOutput.cpp create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAOutput.h create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/Makefile.gcc create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/Makefile.inc create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/Makefile.gcc create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/Makefile.inc create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/Makefile.gcc create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/Makefile.inc create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/NI6528.cpp create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/NI6528.h create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/Makefile.gcc create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/Makefile.inc create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/RandomDataSource.cpp create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/RandomDataSource.h create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Doc/RTAppStates.xml create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Doc/StateMachine.txt create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/JABitReverseGAM.cpp create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/JABitReverseGAM.h create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/JABitSumGAM.cpp create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/JABitSumGAM.h create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.cpp create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.h create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/JAMessageGAM.cpp create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/JAMessageGAM.h create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/JAModeControlGAM.cpp create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/JAModeControlGAM.h create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.cpp create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.h create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.cpp create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.h create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.cpp create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.h create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.cpp create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.h create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/JARampupGAM.cpp create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/JARampupGAM.h create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.cpp create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.h create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/JASampleGAM.cpp create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/JASampleGAM.h create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.cpp create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.h create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.cpp create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.h create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.cpp create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.h create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/JAWFRecordGAM.cpp create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/JAWFRecordGAM.h create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/Makefile.gcc create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/Makefile.inc create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Makefile.inc create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Makefile.linux create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/README.md create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/Main.sh create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/runECPCSub.sh create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/runEPICSTEST.sh create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/runHWTEST.sh create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/runMain.sh create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/runMainB.sh create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/runNI6528TEST.sh create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/beamon_test_async_GYB.py create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test.py create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_async.py create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_async.pyc create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready.py create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready.pyc create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready_hw.py create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready_hw.pyc create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_rup_confirm.py create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup.py create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup.pyc create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_hw.py create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_hw.pyc create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_rup_confirm.py create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_rup_confirm.pyc create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby.py create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby.pyc create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby_hw.py create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby_hw.pyc create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_sync.py create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_sync.pyc create mode 100644 EC-GN-JA-PCF/.svn/entries create mode 100644 EC-GN-JA-PCF/.svn/format create mode 100644 EC-GN-JA-PCF/.svn/pristine/00/008c10a0a80d6caf268354385b8ac25fb02d549f.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/00/00f6c732464d4124aada49bb9bedc4ed61633171.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/02/02cdd410bcd66c1d50bb78cfc306b2f5cecfb765.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/03/0347116ae8558989abc8b5e4186a5245f73cc97d.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/03/034b6e3c6d3053875aff447ef8669c21ca553bf0.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/04/04df14b04244ebfb95706234746bdd37ca02ad72.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/05/05467ff5d484a6ade1522bd1ddcef7f86d69bdd6.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/06/063c920f642e4d5dbcb63642024867e058fc8ea0.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/06/064c7ca321be88cfb10321c9014e66de9a135e0b.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/07/07b07b24481aa7904c356a5cabed48e261cfdf14.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/08/0846338dfec4bc04fbfab5da8e5b2a0bb40f295b.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/09/0936506a2d384aac9e1e815774e0afd031506dc6.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/09/09705f4f118007099a767b3d670ccf9beb7e0fc3.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/09/098b66d04ddbf07fba4dc6ea76fd29e49a161d11.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/09/09cc9d56d02d385e9dad6e0ab0f25284ad7cb839.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/09/09d6370e425fd32419d571f4e915ec808f4a5b39.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/0a/0a01aaf35817f8a4a4a4b69954331619312a20a2.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/0b/0b344352d251dc031ef0d019c3189c214679491b.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/0d/0d0dc5c52be19846ff84957b163a0568ab79a598.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/0d/0da35fee105d7b3efc196ed242d1e84fcbc0e744.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/0d/0dc217ea59e2a87def32095aa7b29e4ad5603780.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/0e/0e8bbbdf016614bba5453c92baf01cedc4059bd2.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/0f/0f13403a318be191db56b077383731db398fdc5e.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/0f/0f421d10b2977b929feadc2259c550bbefb18348.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/10/10727d73928301637e4284f1e51fdbdfdad9d09e.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/10/10a7428bc98f401c160447a8f0b99bb83be9132c.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/10/10cce328561de5a7edc884ad1facc68ec80f9d99.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/11/114be4aabaa53d358f3bc82e0641b0a4cda7a3ac.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/11/117ffc64b0ee11e1ee73b96849c7cb93a804340b.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/12/128dea0ccc7a0d08fc9f212a66810e56d615f606.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/12/12d128cec8d4b513c3f6b33e1e541bbdaf9f31f5.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/13/1313d0b1a7c2cbc3cc11d4e1286edae9790e6ef1.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/14/1441820775c639982eaafb90a50ddebb134e44d5.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/15/159450d2d99b3f026b327006c529d3666e294a03.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/15/15bd7766d7916c65a24b54f0a9d37e270f726352.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/15/15d0643aa3d2a3bea5b22fd2aafbacbfcd37bb9a.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/16/1695bd99df0b589cea410b48741efd748faae6f8.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/16/16ccca26fcf806f63cf914f82655782e253ccf35.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/17/17e4abb8eea0082bb6e56ec3f600d1cfc4697d51.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/18/18a09f6c3c6f536fa1943892f1e2a5c04126face.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/18/18da067aaededbfa075682073eca65b570186bc8.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/1b/1b11db83c998e6b6253b1e9c3cc9f21e4c13a2d9.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/1b/1b6d4e1bf35713084a164f5e33aaa0d74132efb4.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/1b/1be3b45333893d05c418c5f70511953adf6c90d6.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/1c/1ce3c5da2c21037a3b66365bdca7907307d37519.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/1d/1d77799ecde60f9b08037e10008460665945e390.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/1e/1e9061dd5e4b673585cd80ede1281ff55b3a2328.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/1f/1f1e4c219c6cdd09533ef832debe793a1c6a4966.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/21/2136f8fbf603f0ad946d9a6aa78caae806d30763.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/21/2187012eb95901393499e960ee5d864d08bb7ffb.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/22/22517f262b1d1c073748c08caed4b621fafa8d2a.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/22/22639e15d0cdcde3541b079abb81090daf9015d5.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/24/2465c0b34fdb5167f187933877ccba2f9b347ebd.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/24/24fb2a2695ad8c9d803e5d1fe284146eb2c689ab.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/25/25239d59bd135cb48283949cbba52accd73d141e.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/25/254ff460acd05bd4a7e7b6db5e484ee266f39f29.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/26/2659b07cb3871c0d6275d9d5d622e15ec11732f8.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/26/26b589cf38bc11635855dee60306cc6117ee86c0.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/28/280f6864e791c7319b28df99903d18d5d0e03562.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/29/2919878bb9bfd7fb0f4253def24628423ff56a01.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/29/295be0cc30fdb38b9d8e582910a31341e4b12297.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/2a/2acea19c934c5f71b43af5d78f1b0c45cb721955.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/2b/2b001e34b297e2b898182fc0e90d7544485be01d.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/2b/2b312fe29ce01389865572d006816e870e2030e2.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/2b/2b3b6651643f1859516959472a1d2b39e908df45.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/2c/2c30507ec272eb645dfef2975defbd64150f2a4b.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/2d/2db2a5d8186712e6c4094db5b3ad553cbe50746f.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/2d/2ded610fa2d2a0912a5b2e2b970829e1b82e3a2c.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/2e/2ed144928052118ee7319dac0de6709099277527.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/2f/2f0379f7e9df3871844046ef2e1f3ceada17bd06.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/2f/2f7035aa607a78aab64352cf34bd25d8c7fb85fd.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/2f/2f8c561f13a6de3330f5df21840ddef019a3a467.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/32/32acce34150b68fd7a49f282894aec6a5f2323b3.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/32/32b72edf89e480b7875d15bae68fe7bdccd6a696.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/33/334513d1495cb31abb8c1f8354dd1be38aec2c1b.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/34/345983ee7146674b868eac46600a4e1651f816e5.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/34/34a02f9d077d9daf7d49899fc84237c00a260668.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/34/34c317b3a004ca38e95831a65effbe6a9e6d09eb.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/34/34c47aad1b095acb20b58d7edc31b98c07e7445c.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/35/35a0f5c5ce985d21f583f097e8ea5c17106a723e.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/37/3703afbfbe9ed60ddbfd2f21ecdc1748a3f4997d.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/37/37d562b0855d966536fb2fe47245ae93bfaed2b7.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/3b/3bedbfb4823274165dbb5dcce714578e62d3b27a.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/3c/3c41f9d04c70edf86536a205a96af7a204fd110b.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/3e/3e6cc0813382efdcc62edcd615d1e4959f221a40.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/3f/3f4db3b56cd9ff77536c4ef03db90d604e137565.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/3f/3f9dfae778989e6382bdc7e264248240d52f28d8.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/3f/3fdb6fbb257caa83d471a695487bf999956c1446.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/40/408ff12f1f4bef1fbd5701ae6126af0d48fd9168.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/42/4201267146fc5ac3f8cdfce9473304430564c8fd.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/42/427221460c3ebad8dfdbdb18fd4ecbefb6ea87b0.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/42/42cac31e62507cee1d6cad721f8241286a2dcac5.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/43/43518b3f7985ff1378fe0d78c9f0f5e17a3aa242.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/45/45ace7db3804f804773aef9c6ba83dfd6cd27967.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/46/462899184ae75716f9a8903e9f3836feef5781ef.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/46/462d88297695ed1999e9a4cfd4d879d4a75aed50.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/46/46a808cfd5beafa5e60aefee867bf92025dc2849.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/48/485d347b8594a32bbe88fc8140331f42a390a008.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/48/48b543d561b4987879ec76372d7dddeeb902ca4e.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/48/48b6238e3504c525c654bc5f385cfdf2873ae341.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/49/4951acd666b7ef270c97c569ea65f9cff0794f05.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/4b/4b097c32839a747f3e9a21cf7a5578b1cde41768.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/4b/4ba8746e8a5b1cef852e24ba33f83c3b4871f9e0.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/4b/4bcbb25a3345164e6a381b55704f07fb8e0312de.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/4c/4c008fb086ec9ae271cbafab9e19ae94c0550990.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/4c/4c9a1176dcf52d8f864e19529ce95425546b58c2.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/4c/4ca6a80f8855bcd5787141444c0a11312ad980b9.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/4d/4d0d4a9f9c5419716adc211e5fad73939eb957d5.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/4d/4d0efcf04f4bdf1098c1953e08dbce7c37031a73.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/4d/4d38832d2f7f52eeb0a4e98e9ab63d1fa17b661e.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/4d/4dca29abe1ea225f0f812da1184a3be00fa23b36.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/4e/4e2dbd52e7f4d44bb897c60332f73ce790c2c609.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/50/50914f9ee1d8215fcd85b6d3ff3f49fc18ee48f1.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/51/517cbe55fa5fdb473c64c3e12cc0fbd0791081e8.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/53/5319a1a2d1d0f7173cffb44d2ca7336c2fd927fa.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/54/54771e7a1107a816e88d89281286046ae91019f9.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/54/54be21e00f211e3f81a33f1feb6d5ec457bc4580.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/55/55d3ec486070fce2b5a8392ee5c3ed6121017e46.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/56/561bdf8242299eac7602f6eb1f790f96fbb19005.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/56/56c3385c9c5b4d1fefbe2cadf37f5c02fd249a09.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/56/56cbc568d160147013d7797e1d940a2fb77683a3.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/58/58cf976a9d738240c1860f6e2df68361584aed3e.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/59/5970b9108b91382e9bc21a029cf126579f079ce6.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/59/59840e5ac0a759251b9daacd2e0c1e6d9a090a77.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/59/59d513317dcb6ee3262005011911d62689a8b690.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/5a/5a0b5adfec01b8975b3d744e668eb8bbfa786d5e.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/5a/5a9d8cde244a1fbbffafcede7c521c80e1feb54f.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/5a/5af5f3c387e987f13e2ba0eae94207a440e68703.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/5b/5b28ad94fff984271989b6d1eb6dc549295a51d7.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/5d/5d5541c92f38a9ad919175fae0f8c865bcc53958.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/5d/5d6bbfbd1c25aac56dca7fba976ad4f767c83150.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/5d/5d7e46060a8906957d3220725e70cc61969d9277.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/5e/5e0480dc231cd2b9239946aab04a019bda8ff684.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/5e/5e3ccaf6fff9ff412b7c7b2c25566bc5dc3d13e9.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/5e/5e811f31da6a173d5418d462856b922e14e1b2b6.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/5f/5f7cd2a3b9ac9d7233b3ea8aceaf9eb4f88df2df.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/60/604afcd144772ac58c0d5c165bfefebb37a4dcd8.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/60/60db156c5956b8db7abf7c96ccb6634c239da122.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/61/61e5f5da23622cd759847804f11a667b20b656d9.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/63/63dc16eaaddf747c1049e35fb5ae3188b2146b1e.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/64/6494c4c15c01862692d6f55568b066fd2e087a14.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/66/664c628c0fbe688ad687497e94deb0334ed2c2b2.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/67/67caca0a7139cfdf8e6f1d7b38e2ca249317760f.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/68/682293df37dc9572bb9b91544a337eff98c80189.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/69/6945050cdab49b1abd3f54c9b6ac537aaf7505a4.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/69/698b97b7cb9cfd63e7642ea7e9584c787b423930.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/69/69a199e69c3cf96b9e977bf8887ae6b3280ee052.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/6a/6a0c699e7c09b531a62d8bd618212f80a85a0851.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/6a/6aa6fdf2ef59a2c824eda7d1e8cf863c8f2508cb.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/6b/6be7746df1ab71f7b4b6b65c291fe9de00babe48.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/6d/6d0d4b6785945a002bcf6160c9535cb4bb8dc3e9.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/6e/6e52f1861fcb4106db444c17b8d3947c9646d8ea.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/6e/6ebcc57b80347d346dfd1d7497f54bb384e9ce0a.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/6e/6edb1afabdbe0a722ff0c1477415d37ac7603078.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/6f/6f0bdb579866c16ab49369a5963e75483c9d05ab.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/71/7142a58ecb8d5f67395c4f18731aedda51717653.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/71/716d11760dc358c4c01307291ed68bcaa97c7e08.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/72/72c1a68f591a72f34ece014e29523c80b81d8b2d.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/73/733053c46c05b598acfa0197c98e7bf3793b4cc7.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/73/7397400233046adceeb850f4ed7fc5d6c7a864b6.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/73/739a18ad3bbd15629d3d87f896cc710b9b374039.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/74/748386473f6668a9bfd07cc4a1ed52d60a8e27b8.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/76/76a63875e336f9b543af3a8115e9c643ce2a0395.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/77/777f69b163c24769b3f933688d39a8d88f1cb32c.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/78/780954360790cd82cadd2850b578af840251fe2f.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/78/78fcde4103223083f4c567fd6a848f74eb73b4cb.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/79/799db37bd59cad2842f7a5a27cb9247f7b6e33bb.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/7a/7a057f520954948457c88ca89b6fd4daeef42b40.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/7b/7b019c0cfd645bdae9898985e37060d389767186.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/7b/7b58f2f5abb58491d8db91dc530e75071095b557.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/7f/7f4f0820b2bcf0768b94db3953f0f746a419b3de.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/81/816e87665ef18f97f83abce3ec13782e575ab786.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/81/8198339af1c730aa7f3b596b3c4749505f1dbe3d.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/82/82906779cb9ce4d1c006ecbd7461f8b4002b114a.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/83/8331f49fb9bee87c696c009ba0fd85eac418f3b7.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/83/83570b90f2f2ddf5ff699e4c17ac97f6e8a915b2.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/83/83fc02d60e8d5dabba73d649217e085164125996.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/86/863510893564f7f055425ff8e56b023a4163fdd3.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/87/876a86edeafe4711e6474178e7f0bb448faf79d7.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/87/878a4270b568fd56cc070d9cbde0ad460b2699d5.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/88/8817d5a0861ab1fbcff80feac46ed370cbac79fe.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/88/88c87f05bce8accaad5ffb7de87990ca5432df98.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/89/89404842a9a99b8d182defcdf24697a3eb1147c5.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/8a/8af3ffb7c7b71295510bc6a903ca963a954b4f1e.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/8a/8af5737f068bad44aaffa4a72d4bb473dd42ff49.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/8b/8b53da5e48dbd5bf7ad8f2e0e095e48da7f4442e.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/8c/8cbd4f09a363ba841b5a7420c7f2953833bb8a94.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/8c/8cc6904688eef8b35d37a4351569381cc7fe6807.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/8d/8d0751151d2aceecb03307dd3eb27e2956a4c14c.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/8d/8d41ae78ac5775598b5912322a7b04c0d83c7569.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/8e/8ebfbb941a921b6e727cdd7071b60096b4585e57.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/90/90c6b4911cdf61a3a290499d924bdf9187062bb0.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/91/913fef48b21bbf86519fc9efb324e75bc11bd6fc.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/91/91be254585d5fe85af5832474bd40f96dafcf261.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/91/91d99695ab6991a44e28b917406e8b3c083f9799.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/93/936ed27125b958e3464efd824c6501f2117f1c30.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/94/9436185f1abe8cdcd064bf0c0bb418d78b769586.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/94/945399a0a40b0724212b241cefe50d3637e3bed3.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/96/969867ecd2546715cbe8ce904621acd7cb454299.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/96/96a19a2e087efba977f03fe52cee87753146df62.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/96/96b9f136f274eb76da18d421f2a0b6ac8f4c3699.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/96/96d6248672cb516118a1b73999b74d9810164f2c.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/98/98804f810ab2c3918bcb2436e9058ed8602f3b00.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/98/989ce703308abcae4e3b8ec696812b9b0d66566e.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/99/99177ee43f02a0371ea6181d96b0b132ecbd74c0.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/9a/9a3899be8280efae87bac6f8c3f38acca8dbcc7d.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/9a/9ae69c5d94d58e96a1076918cb49b2574c321e9d.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/9b/9b2611d29b18bc3f2e1700d48f3b73cb8ddc19ff.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/9c/9c74f59d6857e4fd23f04c657b629891b4b9b36b.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/9c/9cac30126cbb343d7d39cd528a0c3ce3c8a75628.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/9f/9f010f44921da5b733da00173a6af31daa974d7a.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/9f/9f34739bbd057f9bea50f88c793463f0e4e0d4a0.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/a0/a02278d0cde72a2d665b7c89829e554043d90773.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/a0/a06678beb0073662e76e011f278f81b6793ed6b4.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/a0/a09246348ba58f522f256282d4b788d6ca60779b.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/a1/a1c5fa1fb9465d049d7e1dd2988ee02664ff6fc3.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/a1/a1e26a6963a4bea31e9a1418d6d79842a9e1be91.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/a3/a38b4150db9fb23c0a6d516499b1bafc3dd178a6.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/a4/a473e687dbb266ceb462f472e4eb74868e365e4c.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/a5/a5cfe2b070cb3723929ae807df3990f4c43f0018.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/a5/a5ebf1a1b4b35a849f57294b275cdd97720d5eb4.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/a6/a64751839ba1d5bbffb568065acdfca7d49d612a.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/a6/a66a87d9d4843e8580baddd3cd2472838701740e.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/a6/a66d04843ca0edcd2e4ad68cbbdba2a0c4de095d.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/a7/a70329ca2d1cdc224df268b12185f139e877d639.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/a8/a8272b0c0938b20be3b9d5c2ab0a12fd429a5957.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/a8/a8bb09e1da20a5b6b3f248fd27dfe7c1f134db23.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/aa/aa43469fcb91225938c3771e34a83e21c77074dd.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/aa/aad892fd0db0322af5975ea3a79ee406a924ac2e.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/ab/abab6377f3e6038fdc2a20372de412544715a018.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/ac/ac41b7cd0b9f506f1433a0174614fcb72d68ffc7.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/ac/ac8122b593bd4ad2bc0745276fed1416dc1e44b1.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/ac/acbe2a47fac2075780d10b34cdd9dc036718cdba.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/ad/ad2d5ded68a2af05d20d38bfd9ab122c0335821b.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/ad/adb829b8f40d9a90fd571b77d153a87022fa2c87.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/ae/ae338b0976bb0b0fa102a36a6538ec14b98d5f0b.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/af/af34be3bf1ef151878fdf9e79fbe61df6800a0fc.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/b0/b01fe26e4854e520bbfd22f5525aef323c450779.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/b0/b0db51d656a890dcfeb61ca4e7b8d12f601ceb3b.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/b0/b0edf9bc3e4788141fc4e258e6f16fbddfc00f41.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/b0/b0f5a3439016bf6392a5685fb6fcdca50ba48b1d.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/b1/b13b2154693fc8ac91a2e29a0c8f12c80d68ffcb.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/b2/b25738fa03468d13c4af01226df634946f6090b8.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/b5/b56093c38b973391a51b4fa9e0f9d86169e59b3b.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/b5/b562fc468f0123c32d2db9a815f8d2ef9077ec0c.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/b7/b783d699d0ada739184e69969f7ebd3fdd3ad805.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/b7/b7aeec8df74ca0850e77f0a341d6983baa91bd59.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/b8/b861dac560043f1c137671a33f763d8fc20ef310.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/b8/b89bc977d64f5802c6f619d46638867975102f98.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/ba/ba7f381da19b7a751c3d85acc850f6db8f931b0f.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/bc/bceb9cabc263569cc5f7c8a167793e4e3a170203.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/bf/bf9e48c011cb795633e6f2916d27758ffea3bb0f.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/c1/c104719b6713251909929c68882bb38165d935e4.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/c2/c273d2aff295fabd70fd071026672887a7ad44c2.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/c4/c42c6af959d2ee9284a237cc5096caa1b43daf39.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/c4/c4ae97c141476887e31583a185b9bb971cd7dff9.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/c7/c7436143922a00bce89d661c4b722102e758dff3.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/ca/ca30d17a17178bbf2edc49b4a3024e1e2e99889b.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/ca/ca5dc532dbe795f4eb83484ec8aef850a7cf4e67.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/ca/cad518d744dc85470d5eea99f31be471f2356cf9.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/cb/cb1f791eb00445bace8999bd50e16522cbc87f99.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/cb/cbb7bc0c0bb2d5d0d5233f52170f3335b40afe8d.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/cc/cc1c88c23613945661b5e1bc7edee04d371610ce.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/cc/cca5db322c57f63aab6017e57baf90fed76c6952.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/cc/cccbe1ccf2685647b1af06ba7330a9c55ab3fa15.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/ce/ce837356346d9ef0e93d5a1cb7987482d60baacc.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/cf/cf009a9240ccf0821dd62abad31f96fbb776f34c.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/cf/cf9306a7be95871b2911c3082f94fc90551de48f.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/cf/cfa4fdc02470be38b6a8b3e6bd16b7d368fdc035.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/d1/d1780ac853ec028db7e87977050d69672efeffa3.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/d1/d1aa005c240f820b888eb6b57a0ab2208705e074.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/d3/d319b38075ac787db211d8b37636f916cd37864b.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/d5/d5b600e8557a0ab7f71c73eb227710b912f26fdd.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/d8/d820ae71e21c99c88d92ed2da5cf4f1352cde446.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/da/da39a3ee5e6b4b0d3255bfef95601890afd80709.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/da/da6d368651b29b5505ee066bedb3f09c5a80e12a.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/dc/dc260e4036a2aa463ca538dbb90838aa3928a1bf.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/dc/dc944d9311fea0f8b3d549f15c1f59fe0787a2e8.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/dd/dd3df36f741de9cc146fa5d8218d1af0fb4908b5.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/dd/dda01edf690c7a29a6b5fa244fbb3da7d22be4cb.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/dd/ddad8773ee392ef8c0f08d479ac3fc9777e60f01.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/de/de09da43274ec7bd28a10842d3068f8391320552.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/de/deb81eb2eaafc1b450d2c4e9891f8d64ab85a068.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/e0/e074104f0bb084fa70d278cebd9165b958cb09f4.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/e1/e17b3fc0466760609c22ed79800279a211b6d996.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/e1/e1b0e6f2dcc39a75644d36ca8ebda7a68f4d43e9.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/e1/e1e36616e63e4c70302b3140c389829d49715350.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/e3/e37a1f7ac8c50aa9f02b7243b5d3353649883620.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/e5/e558be4b9f763d656bef4bf2411a250ee2ef085c.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/e6/e60bff214c8e82c54b77a0e9c6b08fc1e5de2e68.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/e7/e765ae1bc60a4221433c4deb5486dd9ca02f2e9b.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/e7/e7efc3f123087046e7714587975f66f8ccdee824.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/e8/e847560c1a6b1ed165c05336e3858d334fda3159.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/eb/eb3994f73a03ca0789a3e237791edbe21cf0b88b.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/ec/ecda2f44745800d870621b3ec0ffe0386f1e68b4.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/ed/edc485fc5433b23466f2df6c00ad647033edd493.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/ee/eea4071b77c1ca53dd89b518e97a3aa71c59439d.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/f0/f029c3c55fa13e62ee5ccdb0120bc2716d80b108.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/f0/f0377310880622e2eca172bb88b190f207f88547.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/f0/f03902d7f7bafd1fdafea86ccf9bef15bbd9c555.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/f0/f0efe0862364f2316a46e63f3634e9b3a9db69f9.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/f2/f20905aaddc1b55f5073a97b1b2cb437f045ca4d.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/f2/f27171deb4191a528c6ebb16845fb8b759eefd29.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/f3/f32c802bbf846018a091da9bca15df6cc9c92ed9.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/f3/f3c1364581e86c750d0983d3fdceeb2e6031861a.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/f5/f509fcf27142ed712c031f1726608af3779a9d71.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/f5/f54562cad53678797b8e28923d1b18b1d2816add.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/f5/f55388950989e12fd6e95f5628233cafc0b783b0.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/f5/f5734b484968e75ba2471ee8a12c0a164d2ae5a4.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/f5/f59bb5fc97d94c9b9bd06be509db615897457ed2.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/f5/f5cbd48402d7062edcdc464f7c1b946d73c2fb8d.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/f5/f5e2f843ad2ebec2c0e0942cf9b73760fbfdc391.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/f7/f78215091b2ca375b6d286aa857252c3654696b5.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/f7/f793e20f38d901e56bd8139d9e42fce7bdafb813.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/f8/f857620d5b68a92beb7a69cd53009febfd5e4aa2.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/f8/f876b4440a9e137f5a0eebf48d374470bc16442f.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/f9/f92eb213b939c6244c4b7fac9a484391ee831af3.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/f9/f94cc269b31ef6a419187174b4870486ce197549.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/f9/f9668ddac31145540c01cf0d1c9d000321a10adc.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/f9/f9718c0f3bd0ea1f577124c91d43093b1c5f5567.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/fc/fc72bf70c2b1641f01f53d70c4434251ac91c48c.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/fd/fd0b92393cb9493bab3cfc5acbd87baf25b6b0b3.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/fd/fd457b8be97664469d62dd37b2c7128e729ca9d7.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/fd/fde3b008976e0fee8c8b75ff0d3124af4cd3aafa.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/fe/fe8153aa8f3140970beef51d066617b03961950e.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/fe/fe9c11d5f1c5a761427b0891a8982ea94aef42c5.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/fe/fec88461f29a6a16b338343b2c69ddb664838b13.svn-base create mode 100644 EC-GN-JA-PCF/.svn/pristine/ff/ff406d08d84f4e651ba42a2c25882683d5424a9b.svn-base create mode 100644 EC-GN-JA-PCF/.svn/wc.db create mode 100644 EC-GN-JA-PCF/info.log create mode 100755 EC-GN-JA-PCF/pom.xml create mode 100755 EC-GN-JA-PCF/pom_13-05-25_15-59-1747151989_659047792.xml create mode 100755 EC-GN-JA-PCF/sdd.xml create mode 100755 EC-GN-JA-PCF/sdd_13-05-25_15-59-1747151989_678406675.xml create mode 100644 EC-GN-JA-PCF/src/main/beast/EC-beast.xml create mode 100755 EC-GN-JA-PCF/src/main/beauty/EC-beauty.xml create mode 100644 EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-HWCF_Mimic.opi create mode 100644 EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GAF-CCPS_Mimic.opi create mode 100644 EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GAF-FHPS_Mimic.opi create mode 100644 EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GAF-GCPS_Mimic.opi create mode 100644 EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GAF-MCPS_Mimic.opi create mode 100644 EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GAFP_Mimic.opi create mode 100644 EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GAF_Mimic.opi create mode 100644 EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GBF-CCPS_Mimic.opi create mode 100644 EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GBF-FHPS_Mimic.opi create mode 100644 EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GBF-GCPS_Mimic.opi create mode 100644 EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GBF-MCPS_Mimic.opi create mode 100644 EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GBFP_Mimic.opi create mode 100644 EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GBF_Mimic.opi create mode 100644 EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GPF_Mimic.opi create mode 100644 EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GPS_Mimic.opi create mode 100644 EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-PA1F_Mimic.opi create mode 100644 EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-PA2F_Mimic.opi create mode 100644 EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-PB1F_Mimic.opi create mode 100644 EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-PB2F_Mimic.opi create mode 100644 EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-PMF_Mimic.opi create mode 100644 EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01_Mimic.opi create mode 100644 EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN_Mimic.opi create mode 100644 EC-GN-JA-PCF/src/main/boy/empty/ITER-EC_Mimic.opi create mode 100755 EC-GN-JA-PCF/src/main/boy/navigation/Navigation.xml create mode 100755 EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-HWCF.xml create mode 100755 EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GAF-CCPS.xml create mode 100755 EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GAF-FHPS.xml create mode 100755 EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GAF-GCPS.xml create mode 100755 EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GAF-MCPS.xml create mode 100755 EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GAF.xml create mode 100755 EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GAFP.xml create mode 100755 EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GBF-CCPS.xml create mode 100755 EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GBF-FHPS.xml create mode 100755 EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GBF-GCPS.xml create mode 100755 EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GBF-MCPS.xml create mode 100755 EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GBF.xml create mode 100755 EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GBFP.xml create mode 100755 EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GPF.xml create mode 100755 EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GPS.xml create mode 100755 EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-PA1F.xml create mode 100755 EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-PA2F.xml create mode 100755 EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-PB1F.xml create mode 100755 EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-PB2F.xml create mode 100755 EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-PMF.xml create mode 100755 EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01.xml create mode 100755 EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN.xml create mode 100755 EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC.xml create mode 100755 EC-GN-JA-PCF/src/main/boy/sysm/EC-GN-SYSM-CubicleDetails.opi create mode 100755 EC-GN-JA-PCF/src/main/boy/sysm/EC-GN-SYSM-F0-PCFDetails.opi create mode 100755 EC-GN-JA-PCF/src/main/boy/sysm/EC-GN-SYSM-H0-PSHDetails.opi create mode 100755 EC-GN-JA-PCF/src/main/boy/sysm/EC-GN-SYSM-P0-PLCDetails.opi create mode 100755 EC-GN-JA-PCF/src/main/boy/sysm/EC-GN-SYSM.opi create mode 100644 EC-GN-JA-PCF/src/main/boy/sysm/scripts/AlarmShortFormat.js create mode 100644 EC-GN-JA-PCF/src/main/boy/sysm/scripts/CUDetailsTableSelectionMonitor.js create mode 100644 EC-GN-JA-PCF/src/main/boy/sysm/scripts/ControlUnitsTableSelectionMonitor.js create mode 100644 EC-GN-JA-PCF/src/main/boy/sysm/scripts/ControlUnitsTableSelectionMonitor.py create mode 100644 EC-GN-JA-PCF/src/main/boy/sysm/scripts/CubiclesContentSummaryTableSelectionMonitor.js create mode 100644 EC-GN-JA-PCF/src/main/boy/sysm/scripts/CubiclesContentSummaryTableSelectionMonitor.py create mode 100644 EC-GN-JA-PCF/src/main/boy/sysm/scripts/CubiclesDetailsTableSelectionMonitor.js create mode 100644 EC-GN-JA-PCF/src/main/boy/sysm/scripts/CubiclesTableSelectionMonitor.js create mode 100644 EC-GN-JA-PCF/src/main/boy/sysm/scripts/CubiclesTableSelectionMonitor.py create mode 100644 EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayAlarmsInRow.py create mode 100644 EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesINCtrlUnitDetailTableTable.js create mode 100644 EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesINCtrlUnitDetailTableTable.py create mode 100644 EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInCubicleContent.js create mode 100644 EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInCubicleContent.py create mode 100644 EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInCubicleOverview.js create mode 100644 EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInCubicleOverview.py create mode 100644 EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInGeneralTable.js create mode 100644 EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInGeneralTable.py create mode 100644 EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInOverview.js create mode 100644 EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInOverview.py create mode 100644 EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInPLCOverview.js create mode 100644 EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInPLCOverview.py create mode 100644 EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInServerOverview.js create mode 100644 EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInServerOverview.py create mode 100644 EC-GN-JA-PCF/src/main/boy/sysm/scripts/IOCDetailsTableSelectionMonitor.js create mode 100644 EC-GN-JA-PCF/src/main/boy/sysm/scripts/PLCDetailsTableSelectionMonitor.js create mode 100644 EC-GN-JA-PCF/src/main/boy/sysm/scripts/PLCsTableSelectionMonitor.js create mode 100644 EC-GN-JA-PCF/src/main/boy/sysm/scripts/PLCsTableSelectionMonitor.py create mode 100644 EC-GN-JA-PCF/src/main/boy/sysm/scripts/ServersTableSelectionMonitor.js create mode 100644 EC-GN-JA-PCF/src/main/boy/sysm/scripts/ServersTableSelectionMonitor.py create mode 100644 EC-GN-JA-PCF/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAInput.cpp create mode 100644 EC-GN-JA-PCF/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAInput.h create mode 100644 EC-GN-JA-PCF/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAOutput.cpp create mode 100644 EC-GN-JA-PCF/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAOutput.h create mode 100644 EC-GN-JA-PCF/src/main/c++/DataSources/JAEPICSCA/Makefile.gcc create mode 100644 EC-GN-JA-PCF/src/main/c++/DataSources/JAEPICSCA/Makefile.inc create mode 100644 EC-GN-JA-PCF/src/main/c++/DataSources/Makefile create mode 100644 EC-GN-JA-PCF/src/main/c++/DataSources/Makefile.gcc create mode 100644 EC-GN-JA-PCF/src/main/c++/DataSources/Makefile.inc create mode 100644 EC-GN-JA-PCF/src/main/c++/DataSources/NI6528/Makefile.gcc create mode 100644 EC-GN-JA-PCF/src/main/c++/DataSources/NI6528/Makefile.inc create mode 100644 EC-GN-JA-PCF/src/main/c++/DataSources/NI6528/NI6528.cpp create mode 100644 EC-GN-JA-PCF/src/main/c++/DataSources/NI6528/NI6528.h create mode 100644 EC-GN-JA-PCF/src/main/c++/DataSources/RandomDataSource/Makefile.gcc create mode 100644 EC-GN-JA-PCF/src/main/c++/DataSources/RandomDataSource/Makefile.inc create mode 100644 EC-GN-JA-PCF/src/main/c++/DataSources/RandomDataSource/RandomDataSource.cpp create mode 100644 EC-GN-JA-PCF/src/main/c++/DataSources/RandomDataSource/RandomDataSource.h create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JABitReverseGAM/JABitReverseGAM.cpp create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JABitReverseGAM/JABitReverseGAM.h create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JABitReverseGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JABitReverseGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JABitSumGAM/JABitSumGAM.cpp create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JABitSumGAM/JABitSumGAM.h create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JABitSumGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JABitSumGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.cpp create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.h create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JAMessageGAM/JAMessageGAM.cpp create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JAMessageGAM/JAMessageGAM.h create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JAMessageGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JAMessageGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JAModeControlGAM/JAModeControlGAM.cpp create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JAModeControlGAM/JAModeControlGAM.h create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JAModeControlGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JAModeControlGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.cpp create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.h create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JAPreProgrammedGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JAPreProgrammedGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.cpp create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.h create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.cpp create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.h create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.cpp create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.h create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JARampupGAM/JARampupGAM.cpp create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JARampupGAM/JARampupGAM.h create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JARampupGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JARampupGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.cpp create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.h create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JASDNRTStateMachineGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JASDNRTStateMachineGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JASampleGAM/JASampleGAM.cpp create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JASampleGAM/JASampleGAM.h create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JASampleGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JASampleGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.cpp create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.h create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JASourceChoiseGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JASourceChoiseGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.cpp create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.h create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JATerminalInterfaceGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JATerminalInterfaceGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.cpp create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.h create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JATriangleWaveGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JATriangleWaveGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JAWFRecordGAM/JAWFRecordGAM.cpp create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JAWFRecordGAM/JAWFRecordGAM.h create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JAWFRecordGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/JAWFRecordGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/Makefile create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/Makefile.gcc create mode 100644 EC-GN-JA-PCF/src/main/c++/GAMs/Makefile.inc create mode 100644 EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/Gyrotron01DAN.cpp create mode 100644 EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/Makefile create mode 100644 EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/ca-if.h create mode 100644 EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/configure_sdn.cpp create mode 100644 EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/environmentVarDev create mode 100644 EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/includetopics.h create mode 100644 EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/sdd-dan.cpp create mode 100644 EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/sdd-dan.h create mode 100644 EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/sdd-data.h create mode 100644 EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/sdd-iomodule.h create mode 100644 EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/sdd-pon-if.h create mode 100644 EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/topicvars.h create mode 100644 EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/Gyrotron02DAN.cpp create mode 100644 EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/Makefile create mode 100644 EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/ca-if.h create mode 100644 EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/configure_sdn.cpp create mode 100644 EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/environmentVarDev create mode 100644 EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/includetopics.h create mode 100644 EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/sdd-dan.cpp create mode 100644 EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/sdd-dan.h create mode 100644 EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/sdd-data.h create mode 100644 EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/sdd-iomodule.h create mode 100644 EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/sdd-pon-if.h create mode 100644 EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/topicvars.h create mode 100644 EC-GN-JA-PCF/src/main/c++/Makefile create mode 100644 EC-GN-JA-PCF/src/main/c++/conf/Gyrotron01DAN_danconf.xml create mode 100644 EC-GN-JA-PCF/src/main/c++/conf/Gyrotron02DAN_danconf.xml create mode 100644 EC-GN-JA-PCF/src/main/c++/conf/environmentVarDev create mode 100644 EC-GN-JA-PCF/src/main/c++/include/ccs-headers.h create mode 100644 EC-GN-JA-PCF/src/main/c++/include/sys-headers.h create mode 100644 EC-GN-JA-PCF/src/main/epics/CUBApp/.appdesc create mode 100644 EC-GN-JA-PCF/src/main/epics/CUBApp/Db/Makefile create mode 100644 EC-GN-JA-PCF/src/main/epics/CUBApp/Makefile create mode 100644 EC-GN-JA-PCF/src/main/epics/CUBApp/src/CUBMain.cpp create mode 100644 EC-GN-JA-PCF/src/main/epics/CUBApp/src/Makefile create mode 100755 EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/Makefile create mode 100755 EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-HWCF-iocEC-GN-PSH0PCF.db create mode 100755 EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-CCPS-iocEC-GN-PSH0PCF.db create mode 100755 EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-FHPS-iocEC-GN-PSH0PCF.db create mode 100755 EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-GCPS-iocEC-GN-PSH0PCF.db create mode 100755 EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-MCPS-iocEC-GN-PSH0PCF.db create mode 100755 EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-iocEC-GN-PSH0PCF.db create mode 100755 EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAFP-iocEC-GN-PSH0PCF.db create mode 100755 EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-CCPS-iocEC-GN-PSH0PCF.db create mode 100755 EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-FHPS-iocEC-GN-PSH0PCF.db create mode 100755 EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-GCPS-iocEC-GN-PSH0PCF.db create mode 100755 EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-MCPS-iocEC-GN-PSH0PCF.db create mode 100755 EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-iocEC-GN-PSH0PCF.db create mode 100755 EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBFP-iocEC-GN-PSH0PCF.db create mode 100755 EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GPF-iocEC-GN-PSH0PCF.db create mode 100755 EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GPS-iocEC-GN-PSH0PCF.db create mode 100755 EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PA1F-iocEC-GN-PSH0PCF.db create mode 100755 EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PA2F-iocEC-GN-PSH0PCF.db create mode 100755 EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PB1F-iocEC-GN-PSH0PCF.db create mode 100755 EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PB2F-iocEC-GN-PSH0PCF.db create mode 100755 EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PMF-iocEC-GN-PSH0PCF.db create mode 100644 EC-GN-JA-PCF/src/main/epics/EC-GNApp/Makefile create mode 100644 EC-GN-JA-PCF/src/main/epics/EC-GNApp/src/EC-GNMain.cpp create mode 100755 EC-GN-JA-PCF/src/main/epics/EC-GNApp/src/Makefile create mode 100644 EC-GN-JA-PCF/src/main/epics/Makefile create mode 100644 EC-GN-JA-PCF/src/main/epics/PLCApp/.appdesc create mode 100644 EC-GN-JA-PCF/src/main/epics/PLCApp/Db/Makefile create mode 100644 EC-GN-JA-PCF/src/main/epics/PLCApp/Makefile create mode 100644 EC-GN-JA-PCF/src/main/epics/PLCApp/src/Makefile create mode 100644 EC-GN-JA-PCF/src/main/epics/PLCApp/src/PLCMain.cpp create mode 100644 EC-GN-JA-PCF/src/main/epics/configure/CONFIG create mode 100644 EC-GN-JA-PCF/src/main/epics/configure/CONFIG_SITE create mode 100644 EC-GN-JA-PCF/src/main/epics/configure/Makefile create mode 100644 EC-GN-JA-PCF/src/main/epics/configure/RULES create mode 100644 EC-GN-JA-PCF/src/main/epics/configure/RULES.ioc create mode 100644 EC-GN-JA-PCF/src/main/epics/configure/RULES_DIRS create mode 100644 EC-GN-JA-PCF/src/main/epics/configure/RULES_TOP create mode 100644 EC-GN-JA-PCF/src/main/epics/iocBoot/Makefile create mode 100644 EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/Makefile create mode 100755 EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/dbToLoad.cmd create mode 100755 EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/envSystem create mode 100644 EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/envUser create mode 100755 EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/iocEC-GN-PCF0SYSM-postSaveRestore.cmd create mode 100755 EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/iocEC-GN-PCF0SYSM-preSaveRestore.cmd create mode 100755 EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/iocEC-GN-PCF0SYSM.req create mode 100644 EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/sddPostDriverConf.cmd create mode 100644 EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/sddPreDriverConf.cmd create mode 100644 EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/sddSeqToLoad.cmd create mode 100644 EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/seqToLoad.cmd create mode 100755 EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/st.cmd create mode 100644 EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/threadSchedulingConf.cmd create mode 100644 EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/userPostDriverConf.cmd create mode 100644 EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/userPreDriverConf.cmd create mode 100644 EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/Makefile create mode 100755 EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/dbToLoad.cmd create mode 100755 EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/envSystem create mode 100644 EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/envUser create mode 100755 EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/iocEC-GN-PSH0CUB-postSaveRestore.cmd create mode 100755 EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/iocEC-GN-PSH0CUB-preSaveRestore.cmd create mode 100644 EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/sddPostDriverConf.cmd create mode 100644 EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/sddPreDriverConf.cmd create mode 100644 EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/sddSeqToLoad.cmd create mode 100644 EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/seqToLoad.cmd create mode 100755 EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/st.cmd create mode 100644 EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/threadSchedulingConf.cmd create mode 100644 EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/userPostDriverConf.cmd create mode 100644 EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/userPreDriverConf.cmd create mode 100644 EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/Makefile create mode 100755 EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/dbToLoad.cmd create mode 100755 EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/envSystem create mode 100644 EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/envUser create mode 100755 EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/iocEC-GN-PSH0PCF-postSaveRestore.cmd create mode 100755 EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/iocEC-GN-PSH0PCF-preSaveRestore.cmd create mode 100755 EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/iocEC-GN-PSH0PCF.req create mode 100755 EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/sddPostDriverConf.cmd create mode 100755 EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/sddPreDriverConf.cmd create mode 100644 EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/sddSeqToLoad.cmd create mode 100644 EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/seqToLoad.cmd create mode 100755 EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/st.cmd create mode 100644 EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/threadSchedulingConf.cmd create mode 100644 EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/userPostDriverConf.cmd create mode 100644 EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/userPreDriverConf.cmd create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/.gitignore create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s.csv create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20201224_fat.csv create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20210105_fat.csv create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20210120_fat.csv create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/1ms-minus.csv create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/1ms-plus.csv create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/1ms.csv create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronA_FY19_P1.cfg create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronB_FY19_P1.cfg create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronIOC.db create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/shot0001.csv create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/test.csv create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/test.csv.original create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/test2.csv create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/test2.csv.original create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/test3.csv create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/test3.csv.original create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/test5.csv create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/ECPCSubscriber.cfg create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/EPICS_Test.cfg create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/EPICS_Test.db create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_NI6259_test.cfg create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_NI6259_test.db create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_test.cfg create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_test.db create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/README.md create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/Timer_Test.cfg create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAInput.cpp create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAInput.h create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAOutput.cpp create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAOutput.h create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/Makefile.gcc create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/Makefile.inc create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/Makefile.gcc create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/Makefile.inc create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/Makefile.gcc create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/Makefile.inc create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/NI6528.cpp create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/NI6528.h create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/Makefile.gcc create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/Makefile.inc create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/RandomDataSource.cpp create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/RandomDataSource.h create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Doc/RTAppStates.xml create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Doc/StateMachine.txt create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/JABitReverseGAM.cpp create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/JABitReverseGAM.h create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/JABitSumGAM.cpp create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/JABitSumGAM.h create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.cpp create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.h create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/JAMessageGAM.cpp create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/JAMessageGAM.h create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/JAModeControlGAM.cpp create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/JAModeControlGAM.h create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.cpp create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.h create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.cpp create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.h create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.cpp create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.h create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.cpp create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.h create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/JARampupGAM.cpp create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/JARampupGAM.h create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.cpp create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.h create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/JASampleGAM.cpp create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/JASampleGAM.h create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.cpp create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.h create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.cpp create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.h create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.cpp create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.h create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/JAWFRecordGAM.cpp create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/JAWFRecordGAM.h create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/Makefile.gcc create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/Makefile.inc create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Makefile.inc create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Makefile.linux create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/README.md create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Startup/Main.sh create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Startup/runECPCSub.sh create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Startup/runEPICSTEST.sh create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Startup/runHWTEST.sh create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Startup/runMain.sh create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Startup/runMainB.sh create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Startup/runNI6528TEST.sh create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/beamon_test_async_GYB.py create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test.py create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_async.py create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_async.pyc create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready.py create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready.pyc create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready_hw.py create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready_hw.pyc create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_rup_confirm.py create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup.py create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup.pyc create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_hw.py create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_hw.pyc create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_rup_confirm.py create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_rup_confirm.pyc create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby.py create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby.pyc create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby_hw.py create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby_hw.pyc create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_sync.py create mode 100644 EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_sync.pyc create mode 100644 EC-GN-JA-PCF/target/.codac-version create mode 100755 EC-GN-JA-PCF/target/bin/Gyrotron01DAN create mode 100755 EC-GN-JA-PCF/target/bin/Gyrotron02DAN create mode 100644 EC-GN-JA-PCF/target/codac-core-6.3-EC-GN-PCF0SYSM-ioc-6.3.2.v1.0.0-1.el7.x86_64.rpm create mode 100644 EC-GN-JA-PCF/target/codac-core-6.3-EC-GN-PSH0PCF-ioc-6.3.2.v1.0.0-1.el7.x86_64.rpm create mode 100644 EC-GN-JA-PCF/target/iter-icint-EC-GN-1.0.0-1.noarch.rpm create mode 100644 EC-GN-JA-PCF/target/iter-icint-EC-GN-alarm-1.0.0-1.noarch.rpm create mode 100644 EC-GN-JA-PCF/target/iter-icint-EC-GN-archive-1.0.0-1.noarch.rpm create mode 100644 EC-GN-JA-PCF/target/iter-icint-EC-GN-opi-1.0.0-1.noarch.rpm create mode 100644 EC-GN-JA-PCF/target/main/beast/EC-beast.xml create mode 100755 EC-GN-JA-PCF/target/main/beauty/EC-beauty.xml create mode 120000 EC-GN-JA-PCF/target/main/boy/SymbolLibrary create mode 100644 EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-HWCF_Mimic.opi create mode 100644 EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GAF-CCPS_Mimic.opi create mode 100644 EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GAF-FHPS_Mimic.opi create mode 100644 EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GAF-GCPS_Mimic.opi create mode 100644 EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GAF-MCPS_Mimic.opi create mode 100644 EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GAFP_Mimic.opi create mode 100644 EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GAF_Mimic.opi create mode 100644 EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GBF-CCPS_Mimic.opi create mode 100644 EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GBF-FHPS_Mimic.opi create mode 100644 EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GBF-GCPS_Mimic.opi create mode 100644 EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GBF-MCPS_Mimic.opi create mode 100644 EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GBFP_Mimic.opi create mode 100644 EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GBF_Mimic.opi create mode 100644 EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GPF_Mimic.opi create mode 100644 EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GPS_Mimic.opi create mode 100644 EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-PA1F_Mimic.opi create mode 100644 EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-PA2F_Mimic.opi create mode 100644 EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-PB1F_Mimic.opi create mode 100644 EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-PB2F_Mimic.opi create mode 100644 EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-PMF_Mimic.opi create mode 100644 EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01_Mimic.opi create mode 100644 EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN_Mimic.opi create mode 100644 EC-GN-JA-PCF/target/main/boy/empty/ITER-EC_Mimic.opi create mode 100755 EC-GN-JA-PCF/target/main/boy/navigation/Navigation.xml create mode 100755 EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-HWCF.xml create mode 100755 EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GAF-CCPS.xml create mode 100755 EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GAF-FHPS.xml create mode 100755 EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GAF-GCPS.xml create mode 100755 EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GAF-MCPS.xml create mode 100755 EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GAF.xml create mode 100755 EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GAFP.xml create mode 100755 EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GBF-CCPS.xml create mode 100755 EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GBF-FHPS.xml create mode 100755 EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GBF-GCPS.xml create mode 100755 EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GBF-MCPS.xml create mode 100755 EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GBF.xml create mode 100755 EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GBFP.xml create mode 100755 EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GPF.xml create mode 100755 EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GPS.xml create mode 100755 EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-PA1F.xml create mode 100755 EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-PA2F.xml create mode 100755 EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-PB1F.xml create mode 100755 EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-PB2F.xml create mode 100755 EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-PMF.xml create mode 100755 EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01.xml create mode 100755 EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN.xml create mode 100755 EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC.xml create mode 100755 EC-GN-JA-PCF/target/main/boy/sysm/EC-GN-SYSM-CubicleDetails.opi create mode 100755 EC-GN-JA-PCF/target/main/boy/sysm/EC-GN-SYSM-F0-PCFDetails.opi create mode 100755 EC-GN-JA-PCF/target/main/boy/sysm/EC-GN-SYSM-H0-PSHDetails.opi create mode 100755 EC-GN-JA-PCF/target/main/boy/sysm/EC-GN-SYSM-P0-PLCDetails.opi create mode 100755 EC-GN-JA-PCF/target/main/boy/sysm/EC-GN-SYSM.opi create mode 100644 EC-GN-JA-PCF/target/main/boy/sysm/scripts/AlarmShortFormat.js create mode 100644 EC-GN-JA-PCF/target/main/boy/sysm/scripts/CUDetailsTableSelectionMonitor.js create mode 100644 EC-GN-JA-PCF/target/main/boy/sysm/scripts/ControlUnitsTableSelectionMonitor.js create mode 100644 EC-GN-JA-PCF/target/main/boy/sysm/scripts/ControlUnitsTableSelectionMonitor.py create mode 100644 EC-GN-JA-PCF/target/main/boy/sysm/scripts/CubiclesContentSummaryTableSelectionMonitor.js create mode 100644 EC-GN-JA-PCF/target/main/boy/sysm/scripts/CubiclesContentSummaryTableSelectionMonitor.py create mode 100644 EC-GN-JA-PCF/target/main/boy/sysm/scripts/CubiclesDetailsTableSelectionMonitor.js create mode 100644 EC-GN-JA-PCF/target/main/boy/sysm/scripts/CubiclesTableSelectionMonitor.js create mode 100644 EC-GN-JA-PCF/target/main/boy/sysm/scripts/CubiclesTableSelectionMonitor.py create mode 100644 EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayAlarmsInRow.py create mode 100644 EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesINCtrlUnitDetailTableTable.js create mode 100644 EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesINCtrlUnitDetailTableTable.py create mode 100644 EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInCubicleContent.js create mode 100644 EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInCubicleContent.py create mode 100644 EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInCubicleOverview.js create mode 100644 EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInCubicleOverview.py create mode 100644 EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInGeneralTable.js create mode 100644 EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInGeneralTable.py create mode 100644 EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInOverview.js create mode 100644 EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInOverview.py create mode 100644 EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInPLCOverview.js create mode 100644 EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInPLCOverview.py create mode 100644 EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInServerOverview.js create mode 100644 EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInServerOverview.py create mode 100644 EC-GN-JA-PCF/target/main/boy/sysm/scripts/IOCDetailsTableSelectionMonitor.js create mode 100644 EC-GN-JA-PCF/target/main/boy/sysm/scripts/PLCDetailsTableSelectionMonitor.js create mode 100644 EC-GN-JA-PCF/target/main/boy/sysm/scripts/PLCsTableSelectionMonitor.js create mode 100644 EC-GN-JA-PCF/target/main/boy/sysm/scripts/PLCsTableSelectionMonitor.py create mode 100644 EC-GN-JA-PCF/target/main/boy/sysm/scripts/ServersTableSelectionMonitor.js create mode 100644 EC-GN-JA-PCF/target/main/boy/sysm/scripts/ServersTableSelectionMonitor.py create mode 120000 EC-GN-JA-PCF/target/main/boy/templates create mode 100644 EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/JAEPICSCAInput.cpp create mode 100644 EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/JAEPICSCAInput.h create mode 100644 EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/JAEPICSCAOutput.cpp create mode 100644 EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/JAEPICSCAOutput.h create mode 100644 EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/Makefile.gcc create mode 100644 EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/Makefile.inc create mode 100644 EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/depends.x86-linux create mode 100644 EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/dependsRaw.x86-linux create mode 100644 EC-GN-JA-PCF/target/main/c++/DataSources/Makefile create mode 100644 EC-GN-JA-PCF/target/main/c++/DataSources/Makefile.gcc create mode 100644 EC-GN-JA-PCF/target/main/c++/DataSources/Makefile.inc create mode 100644 EC-GN-JA-PCF/target/main/c++/DataSources/NI6528/Makefile.gcc create mode 100644 EC-GN-JA-PCF/target/main/c++/DataSources/NI6528/Makefile.inc create mode 100644 EC-GN-JA-PCF/target/main/c++/DataSources/NI6528/NI6528.cpp create mode 100644 EC-GN-JA-PCF/target/main/c++/DataSources/NI6528/NI6528.h create mode 100644 EC-GN-JA-PCF/target/main/c++/DataSources/RandomDataSource/Makefile.gcc create mode 100644 EC-GN-JA-PCF/target/main/c++/DataSources/RandomDataSource/Makefile.inc create mode 100644 EC-GN-JA-PCF/target/main/c++/DataSources/RandomDataSource/RandomDataSource.cpp create mode 100644 EC-GN-JA-PCF/target/main/c++/DataSources/RandomDataSource/RandomDataSource.h create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JABitReverseGAM/JABitReverseGAM.cpp create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JABitReverseGAM/JABitReverseGAM.h create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JABitReverseGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JABitReverseGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JABitSumGAM/JABitSumGAM.cpp create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JABitSumGAM/JABitSumGAM.h create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JABitSumGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JABitSumGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.cpp create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.h create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JAConditionalSignalUpdateGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JAConditionalSignalUpdateGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JAMessageGAM/JAMessageGAM.cpp create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JAMessageGAM/JAMessageGAM.h create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JAMessageGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JAMessageGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JAModeControlGAM/JAModeControlGAM.cpp create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JAModeControlGAM/JAModeControlGAM.h create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JAModeControlGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JAModeControlGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.cpp create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.h create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JAPreProgrammedGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JAPreProgrammedGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.cpp create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.h create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.cpp create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.h create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.cpp create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.h create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JARampupGAM/JARampupGAM.cpp create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JARampupGAM/JARampupGAM.h create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JARampupGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JARampupGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.cpp create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.h create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JASDNRTStateMachineGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JASDNRTStateMachineGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JASampleGAM/JASampleGAM.cpp create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JASampleGAM/JASampleGAM.h create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JASampleGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JASampleGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.cpp create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.h create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JASourceChoiseGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JASourceChoiseGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.cpp create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.h create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JATerminalInterfaceGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JATerminalInterfaceGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.cpp create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.h create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JATriangleWaveGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JATriangleWaveGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JAWFRecordGAM/JAWFRecordGAM.cpp create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JAWFRecordGAM/JAWFRecordGAM.h create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JAWFRecordGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/JAWFRecordGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/Makefile create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/Makefile.gcc create mode 100644 EC-GN-JA-PCF/target/main/c++/GAMs/Makefile.inc create mode 100644 EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/Gyrotron01DAN.cpp create mode 100644 EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/Makefile create mode 100644 EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/ca-if.h create mode 100644 EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/configure_sdn.cpp create mode 100644 EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/environmentVarDev create mode 100644 EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/includetopics.h create mode 100644 EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/sdd-dan.cpp create mode 100644 EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/sdd-dan.h create mode 100644 EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/sdd-data.h create mode 100644 EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/sdd-iomodule.h create mode 100644 EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/sdd-pon-if.h create mode 100644 EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/topicvars.h create mode 100644 EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/Gyrotron02DAN.cpp create mode 100644 EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/Makefile create mode 100644 EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/ca-if.h create mode 100644 EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/configure_sdn.cpp create mode 100644 EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/environmentVarDev create mode 100644 EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/includetopics.h create mode 100644 EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/sdd-dan.cpp create mode 100644 EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/sdd-dan.h create mode 100644 EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/sdd-data.h create mode 100644 EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/sdd-iomodule.h create mode 100644 EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/sdd-pon-if.h create mode 100644 EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/topicvars.h create mode 100644 EC-GN-JA-PCF/target/main/c++/Makefile create mode 100644 EC-GN-JA-PCF/target/main/c++/conf/Gyrotron01DAN_danconf.xml create mode 100644 EC-GN-JA-PCF/target/main/c++/conf/Gyrotron02DAN_danconf.xml create mode 100644 EC-GN-JA-PCF/target/main/c++/conf/environmentVarDev create mode 100644 EC-GN-JA-PCF/target/main/c++/include/ccs-headers.h create mode 100644 EC-GN-JA-PCF/target/main/c++/include/sys-headers.h create mode 100644 EC-GN-JA-PCF/target/main/epics/CUBApp/.appdesc create mode 100644 EC-GN-JA-PCF/target/main/epics/CUBApp/Db/Makefile create mode 100644 EC-GN-JA-PCF/target/main/epics/CUBApp/Db/O.linux-x86_64/Makefile create mode 100644 EC-GN-JA-PCF/target/main/epics/CUBApp/Makefile create mode 100644 EC-GN-JA-PCF/target/main/epics/CUBApp/src/CUBMain.cpp create mode 100644 EC-GN-JA-PCF/target/main/epics/CUBApp/src/Makefile create mode 100644 EC-GN-JA-PCF/target/main/epics/CUBApp/src/O.Common/CUB.dbd create mode 100755 EC-GN-JA-PCF/target/main/epics/CUBApp/src/O.linux-x86_64/CUB create mode 100644 EC-GN-JA-PCF/target/main/epics/CUBApp/src/O.linux-x86_64/CUB.dbd.d create mode 100644 EC-GN-JA-PCF/target/main/epics/CUBApp/src/O.linux-x86_64/CUBMain.d create mode 100644 EC-GN-JA-PCF/target/main/epics/CUBApp/src/O.linux-x86_64/CUBMain.o create mode 100644 EC-GN-JA-PCF/target/main/epics/CUBApp/src/O.linux-x86_64/CUB_registerRecordDeviceDriver.cpp create mode 100644 EC-GN-JA-PCF/target/main/epics/CUBApp/src/O.linux-x86_64/CUB_registerRecordDeviceDriver.d create mode 100644 EC-GN-JA-PCF/target/main/epics/CUBApp/src/O.linux-x86_64/CUB_registerRecordDeviceDriver.o create mode 100644 EC-GN-JA-PCF/target/main/epics/CUBApp/src/O.linux-x86_64/Makefile create mode 100755 EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/Makefile create mode 100644 EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/O.linux-x86_64/Makefile create mode 100755 EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-HWCF-iocEC-GN-PSH0PCF.db create mode 100755 EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-CCPS-iocEC-GN-PSH0PCF.db create mode 100755 EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-FHPS-iocEC-GN-PSH0PCF.db create mode 100755 EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-GCPS-iocEC-GN-PSH0PCF.db create mode 100755 EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-MCPS-iocEC-GN-PSH0PCF.db create mode 100755 EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-iocEC-GN-PSH0PCF.db create mode 100755 EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAFP-iocEC-GN-PSH0PCF.db create mode 100755 EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-CCPS-iocEC-GN-PSH0PCF.db create mode 100755 EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-FHPS-iocEC-GN-PSH0PCF.db create mode 100755 EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-GCPS-iocEC-GN-PSH0PCF.db create mode 100755 EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-MCPS-iocEC-GN-PSH0PCF.db create mode 100755 EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-iocEC-GN-PSH0PCF.db create mode 100755 EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBFP-iocEC-GN-PSH0PCF.db create mode 100755 EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GPF-iocEC-GN-PSH0PCF.db create mode 100755 EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GPS-iocEC-GN-PSH0PCF.db create mode 100755 EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PA1F-iocEC-GN-PSH0PCF.db create mode 100755 EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PA2F-iocEC-GN-PSH0PCF.db create mode 100755 EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PB1F-iocEC-GN-PSH0PCF.db create mode 100755 EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PB2F-iocEC-GN-PSH0PCF.db create mode 100755 EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PMF-iocEC-GN-PSH0PCF.db create mode 100644 EC-GN-JA-PCF/target/main/epics/EC-GNApp/Makefile create mode 100644 EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/EC-GNMain.cpp create mode 100755 EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/Makefile create mode 100644 EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.Common/EC-GN.dbd create mode 100755 EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.linux-x86_64/EC-GN create mode 100644 EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.linux-x86_64/EC-GN.dbd.d create mode 100644 EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.linux-x86_64/EC-GNMain.d create mode 100644 EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.linux-x86_64/EC-GNMain.o create mode 100644 EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.linux-x86_64/EC-GN_registerRecordDeviceDriver.cpp create mode 100644 EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.linux-x86_64/EC-GN_registerRecordDeviceDriver.d create mode 100644 EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.linux-x86_64/EC-GN_registerRecordDeviceDriver.o create mode 100644 EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.linux-x86_64/Makefile create mode 100644 EC-GN-JA-PCF/target/main/epics/Makefile create mode 100644 EC-GN-JA-PCF/target/main/epics/PLCApp/.appdesc create mode 100644 EC-GN-JA-PCF/target/main/epics/PLCApp/Db/Makefile create mode 100644 EC-GN-JA-PCF/target/main/epics/PLCApp/Db/O.linux-x86_64/Makefile create mode 100644 EC-GN-JA-PCF/target/main/epics/PLCApp/Makefile create mode 100644 EC-GN-JA-PCF/target/main/epics/PLCApp/src/Makefile create mode 100644 EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.Common/PLC.dbd create mode 100644 EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.linux-x86_64/Makefile create mode 100755 EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.linux-x86_64/PLC create mode 100644 EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.linux-x86_64/PLC.dbd.d create mode 100644 EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.linux-x86_64/PLCMain.d create mode 100644 EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.linux-x86_64/PLCMain.o create mode 100644 EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.linux-x86_64/PLC_registerRecordDeviceDriver.cpp create mode 100644 EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.linux-x86_64/PLC_registerRecordDeviceDriver.d create mode 100644 EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.linux-x86_64/PLC_registerRecordDeviceDriver.o create mode 100644 EC-GN-JA-PCF/target/main/epics/PLCApp/src/PLCMain.cpp create mode 100755 EC-GN-JA-PCF/target/main/epics/bin/linux-x86_64/CUB create mode 100755 EC-GN-JA-PCF/target/main/epics/bin/linux-x86_64/EC-GN create mode 100755 EC-GN-JA-PCF/target/main/epics/bin/linux-x86_64/PLC create mode 100644 EC-GN-JA-PCF/target/main/epics/configure/CONFIG create mode 100644 EC-GN-JA-PCF/target/main/epics/configure/CONFIG_SITE create mode 100644 EC-GN-JA-PCF/target/main/epics/configure/Makefile create mode 100644 EC-GN-JA-PCF/target/main/epics/configure/O.linux-x86_64/Makefile create mode 100644 EC-GN-JA-PCF/target/main/epics/configure/RELEASE create mode 100644 EC-GN-JA-PCF/target/main/epics/configure/RULES create mode 100644 EC-GN-JA-PCF/target/main/epics/configure/RULES.ioc create mode 100644 EC-GN-JA-PCF/target/main/epics/configure/RULES_DIRS create mode 100644 EC-GN-JA-PCF/target/main/epics/configure/RULES_TOP create mode 100644 EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-HWCF-iocEC-GN-PSH0PCF.db create mode 100644 EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GAF-CCPS-iocEC-GN-PSH0PCF.db create mode 100644 EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GAF-FHPS-iocEC-GN-PSH0PCF.db create mode 100644 EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GAF-GCPS-iocEC-GN-PSH0PCF.db create mode 100644 EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GAF-MCPS-iocEC-GN-PSH0PCF.db create mode 100644 EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GAF-iocEC-GN-PSH0PCF.db create mode 100644 EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GAFP-iocEC-GN-PSH0PCF.db create mode 100644 EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GBF-CCPS-iocEC-GN-PSH0PCF.db create mode 100644 EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GBF-FHPS-iocEC-GN-PSH0PCF.db create mode 100644 EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GBF-GCPS-iocEC-GN-PSH0PCF.db create mode 100644 EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GBF-MCPS-iocEC-GN-PSH0PCF.db create mode 100644 EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GBF-iocEC-GN-PSH0PCF.db create mode 100644 EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GBFP-iocEC-GN-PSH0PCF.db create mode 100644 EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GPF-iocEC-GN-PSH0PCF.db create mode 100644 EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GPS-iocEC-GN-PSH0PCF.db create mode 100644 EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-PA1F-iocEC-GN-PSH0PCF.db create mode 100644 EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-PA2F-iocEC-GN-PSH0PCF.db create mode 100644 EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-PB1F-iocEC-GN-PSH0PCF.db create mode 100644 EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-PB2F-iocEC-GN-PSH0PCF.db create mode 100644 EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-PMF-iocEC-GN-PSH0PCF.db create mode 100644 EC-GN-JA-PCF/target/main/epics/dbd/CUB.dbd create mode 100644 EC-GN-JA-PCF/target/main/epics/dbd/EC-GN.dbd create mode 100644 EC-GN-JA-PCF/target/main/epics/dbd/PLC.dbd create mode 100644 EC-GN-JA-PCF/target/main/epics/iocBoot/Makefile create mode 100644 EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/Makefile create mode 100755 EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/dbToLoad.cmd create mode 100644 EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/envPaths create mode 100755 EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/envSystem create mode 100644 EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/envUser create mode 100755 EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/iocEC-GN-PCF0SYSM-postSaveRestore.cmd create mode 100755 EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/iocEC-GN-PCF0SYSM-preSaveRestore.cmd create mode 100755 EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/iocEC-GN-PCF0SYSM.req create mode 100644 EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/sddPostDriverConf.cmd create mode 100644 EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/sddPreDriverConf.cmd create mode 100644 EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/sddSeqToLoad.cmd create mode 100644 EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/seqToLoad.cmd create mode 100755 EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/st.cmd create mode 100644 EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/threadSchedulingConf.cmd create mode 100644 EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/userPostDriverConf.cmd create mode 100644 EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/userPreDriverConf.cmd create mode 100644 EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/Makefile create mode 100755 EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/dbToLoad.cmd create mode 100644 EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/envPaths create mode 100755 EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/envSystem create mode 100644 EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/envUser create mode 100755 EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/iocEC-GN-PSH0CUB-postSaveRestore.cmd create mode 100755 EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/iocEC-GN-PSH0CUB-preSaveRestore.cmd create mode 100644 EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/sddPostDriverConf.cmd create mode 100644 EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/sddPreDriverConf.cmd create mode 100644 EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/sddSeqToLoad.cmd create mode 100644 EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/seqToLoad.cmd create mode 100755 EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/st.cmd create mode 100644 EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/threadSchedulingConf.cmd create mode 100644 EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/userPostDriverConf.cmd create mode 100644 EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/userPreDriverConf.cmd create mode 100644 EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/Makefile create mode 100755 EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/dbToLoad.cmd create mode 100644 EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/envPaths create mode 100755 EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/envSystem create mode 100644 EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/envUser create mode 100755 EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/iocEC-GN-PSH0PCF-postSaveRestore.cmd create mode 100755 EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/iocEC-GN-PSH0PCF-preSaveRestore.cmd create mode 100755 EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/iocEC-GN-PSH0PCF.req create mode 100755 EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/sddPostDriverConf.cmd create mode 100755 EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/sddPreDriverConf.cmd create mode 100644 EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/sddSeqToLoad.cmd create mode 100644 EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/seqToLoad.cmd create mode 100755 EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/st.cmd create mode 100644 EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/threadSchedulingConf.cmd create mode 100644 EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/userPostDriverConf.cmd create mode 100644 EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/userPreDriverConf.cmd create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/.gitignore create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/100s.csv create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20201224_fat.csv create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20210105_fat.csv create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20210120_fat.csv create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/1ms-minus.csv create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/1ms-plus.csv create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/1ms.csv create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronA_FY19_P1.cfg create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronB_FY19_P1.cfg create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronIOC.db create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/shot0001.csv create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/test.csv create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/test.csv.original create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/test2.csv create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/test2.csv.original create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/test3.csv create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/test3.csv.original create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/test5.csv create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/ECPCSubscriber.cfg create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/EPICS_Test.cfg create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/EPICS_Test.db create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_NI6259_test.cfg create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_NI6259_test.db create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_test.cfg create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_test.db create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/README.md create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/Timer_Test.cfg create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAInput.cpp create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAInput.h create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAOutput.cpp create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAOutput.h create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/Makefile.gcc create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/Makefile.inc create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/Makefile.gcc create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/Makefile.inc create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/Makefile.gcc create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/Makefile.inc create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/NI6528.cpp create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/NI6528.h create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/Makefile.gcc create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/Makefile.inc create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/RandomDataSource.cpp create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/RandomDataSource.h create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Doc/RTAppStates.xml create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Doc/StateMachine.txt create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/JABitReverseGAM.cpp create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/JABitReverseGAM.h create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/JABitSumGAM.cpp create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/JABitSumGAM.h create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.cpp create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.h create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/JAMessageGAM.cpp create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/JAMessageGAM.h create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/JAModeControlGAM.cpp create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/JAModeControlGAM.h create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.cpp create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.h create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.cpp create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.h create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.cpp create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.h create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.cpp create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.h create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/JARampupGAM.cpp create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/JARampupGAM.h create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.cpp create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.h create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/JASampleGAM.cpp create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/JASampleGAM.h create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.cpp create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.h create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.cpp create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.h create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.cpp create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.h create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/JAWFRecordGAM.cpp create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/JAWFRecordGAM.h create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/Makefile.gcc create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/Makefile.inc create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Makefile.inc create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Makefile.linux create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/README.md create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Startup/Main.sh create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Startup/runECPCSub.sh create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Startup/runEPICSTEST.sh create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Startup/runHWTEST.sh create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Startup/runMain.sh create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Startup/runMainB.sh create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Startup/runNI6528TEST.sh create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/beamon_test_async_GYB.py create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test.py create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_async.py create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_async.pyc create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready.py create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready.pyc create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready_hw.py create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready_hw.pyc create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_rup_confirm.py create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup.py create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup.pyc create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_hw.py create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_hw.pyc create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_rup_confirm.py create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_rup_confirm.pyc create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby.py create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby.pyc create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby_hw.py create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby_hw.pyc create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_sync.py create mode 100644 EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_sync.pyc create mode 100644 EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/JAEPICSCA/JAEPICSCA.a create mode 100755 EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/JAEPICSCA/JAEPICSCA.so create mode 100644 EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/JAEPICSCA/JAEPICSCAInput.o create mode 100644 EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/JAEPICSCA/JAEPICSCAOutput.o create mode 120000 EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/JAEPICSCA/libJAEPICSCA.so create mode 100644 EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/NI6528/NI6528.a create mode 100644 EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/NI6528/NI6528.o create mode 100755 EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/NI6528/NI6528.so create mode 120000 EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/NI6528/libNI6528.so create mode 100644 EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/RandomDataSource/RandomDataSource.a create mode 100644 EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/RandomDataSource/RandomDataSource.o create mode 100755 EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/RandomDataSource/RandomDataSource.so create mode 120000 EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/RandomDataSource/libRandomDataSource.so create mode 100644 EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JABitReverseGAM/JABitReverseGAM.a create mode 100644 EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JABitReverseGAM/JABitReverseGAM.o create mode 100755 EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JABitReverseGAM/JABitReverseGAM.so create mode 120000 EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JABitReverseGAM/libJABitReverseGAM.so create mode 100644 EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JABitSumGAM/JABitSumGAM.a create mode 100644 EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JABitSumGAM/JABitSumGAM.o create mode 100755 EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JABitSumGAM/JABitSumGAM.so create mode 120000 EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JABitSumGAM/libJABitSumGAM.so create mode 100644 EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.a create mode 100644 EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.o create mode 100755 EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.so create mode 120000 EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAConditionalSignalUpdateGAM/libJAConditionalSignalUpdateGAM.so create mode 100644 EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAMessageGAM/JAMessageGAM.a create mode 100644 EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAMessageGAM/JAMessageGAM.o create mode 100755 EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAMessageGAM/JAMessageGAM.so create mode 120000 EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAMessageGAM/libJAMessageGAM.so create mode 100644 EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAModeControlGAM/JAModeControlGAM.a create mode 100644 EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAModeControlGAM/JAModeControlGAM.o create mode 100755 EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAModeControlGAM/JAModeControlGAM.so create mode 120000 EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAModeControlGAM/libJAModeControlGAM.so create mode 100644 EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.a create mode 100644 EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.o create mode 100755 EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.so create mode 120000 EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAPreProgrammedGAM/libJAPreProgrammedGAM.so create mode 100644 EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.a create mode 100644 EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.o create mode 100755 EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.so create mode 120000 EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JARTStateMachineGAM/libJARTStateMachineGAM.so create mode 100644 EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JARampupGAM/JARampupGAM.a create mode 100644 EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JARampupGAM/JARampupGAM.o create mode 100755 EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JARampupGAM/JARampupGAM.so create mode 120000 EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JARampupGAM/libJARampupGAM.so create mode 100644 EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.a create mode 100644 EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.o create mode 100755 EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.so create mode 120000 EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JASDNRTStateMachineGAM/libJASDNRTStateMachineGAM.so create mode 100644 EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.a create mode 100644 EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.o create mode 100755 EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.so create mode 120000 EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JASourceChoiseGAM/libJASourceChoiseGAM.so create mode 100644 EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.a create mode 100644 EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.o create mode 100755 EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.so create mode 120000 EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JATerminalInterfaceGAM/libJATerminalInterfaceGAM.so create mode 100644 EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.a create mode 100644 EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.o create mode 100755 EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.so create mode 120000 EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JATriangleWaveGAM/libJATriangleWaveGAM.so create mode 100644 EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAWFRecordGAM/JAWFRecordGAM.a create mode 100644 EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAWFRecordGAM/JAWFRecordGAM.o create mode 100755 EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAWFRecordGAM/JAWFRecordGAM.so create mode 120000 EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAWFRecordGAM/libJAWFRecordGAM.so create mode 100644 EC-GN-JA-PCF/target/obj/Gyrotron01DAN/Gyrotron01DAN.o create mode 100644 EC-GN-JA-PCF/target/obj/Gyrotron01DAN/configure_sdn.o create mode 100644 EC-GN-JA-PCF/target/obj/Gyrotron02DAN/Gyrotron02DAN.o create mode 100644 EC-GN-JA-PCF/target/obj/Gyrotron02DAN/configure_sdn.o create mode 100644 EC-GN-JA-PCF/unit.spec create mode 100644 EC-GN-JA-PCF/unit_13-05-25_15-59-1747151989_670334485.spec create mode 100755 generate.sh diff --git a/EC-GN-JA-PCF-IN/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAInput.cpp b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAInput.cpp new file mode 100644 index 0000000..ac3464d --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAInput.cpp @@ -0,0 +1,366 @@ +/** + * @file JAEPICSCAInput.cpp + * @brief Source file for class JAEPICSCAInput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAEPICSCAInput (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAEPICSCAInput.h" + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "MemoryMapInputBroker.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +namespace MARTe { +/** + * @brief Callback function for the ca_create_subscription. Single point of access which + * delegates the events to the corresponding JAEPICSPV instance. + */ +static FastPollingMutexSem eventCallbackFastMux; +/*lint -e{1746} function must match required prototype and thus cannot be changed to constant reference.*/ +void JAEPICSCAInputEventCallback(struct event_handler_args const args) { + (void) eventCallbackFastMux.FastLock(); + PVWrapper *pv = static_cast(args.usr); + if (pv != NULL_PTR(PVWrapper *)) { + (void) MemoryOperationsHelper::Copy(pv->memory, args.dbr, pv->memorySize); + } + eventCallbackFastMux.FastUnLock(); +} +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +JAEPICSCAInput::JAEPICSCAInput() : + DataSourceI(), EmbeddedServiceMethodBinderI(), executor(*this) { + pvs = NULL_PTR(PVWrapper *); + stackSize = THREADS_DEFAULT_STACKSIZE * 4u; + cpuMask = 0xffu; + eventCallbackFastMux.Create(); +} + +/*lint -e{1551} must stop the SingleThreadService in the destructor.*/ +JAEPICSCAInput::~JAEPICSCAInput() { + if (!executor.Stop()) { + if (!executor.Stop()) { + REPORT_ERROR(ErrorManagement::FatalError, "Could not stop SingleThreadService."); + } + } + (void) eventCallbackFastMux.FastLock(); + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + if (pvs[n].memory != NULL_PTR(void *)) { + GlobalObjectsDatabase::Instance()->GetStandardHeap()->Free(pvs[n].memory); + } + } + delete[] pvs; + } + eventCallbackFastMux.FastUnLock(); +} + +bool JAEPICSCAInput::Initialise(StructuredDataI & data) { + bool ok = DataSourceI::Initialise(data); + if (ok) { + if (!data.Read("CPUs", cpuMask)) { + REPORT_ERROR(ErrorManagement::Information, "No CPUs defined. Using default = %d", cpuMask); + } + if (!data.Read("StackSize", stackSize)) { + REPORT_ERROR(ErrorManagement::Information, "No StackSize defined. Using default = %d", stackSize); + } + executor.SetStackSize(stackSize); + executor.SetCPUMask(cpuMask); + } + if (ok) { + ok = data.MoveRelative("Signals"); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Could not move to the Signals section"); + } + if (ok) { + ok = data.Copy(originalSignalInformation); + } + if (ok) { + ok = originalSignalInformation.MoveToRoot(); + } + //Do not allow to add signals in run-time + if (ok) { + ok = signalsDatabase.MoveRelative("Signals"); + } + if (ok) { + ok = signalsDatabase.Write("Locked", 1u); + } + if (ok) { + ok = signalsDatabase.MoveToAncestor(1u); + } + } + if (ok) { + ok = data.MoveToAncestor(1u); + } + return ok; +} + +bool JAEPICSCAInput::SetConfiguredDatabase(StructuredDataI & data) { + bool ok = DataSourceI::SetConfiguredDatabase(data); + //Check the signal index of the timing signal. + uint32 nOfSignals = GetNumberOfSignals(); + if (ok) { + ok = (nOfSignals > 0u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one signal shall be defined"); + } + } + if (ok) { + //Do not allow samples + uint32 functionNumberOfSignals = 0u; + uint32 n; + if (GetFunctionNumberOfSignals(InputSignals, 0u, functionNumberOfSignals)) { + for (n = 0u; (n < functionNumberOfSignals) && (ok); n++) { + uint32 nSamples; + ok = GetFunctionSignalSamples(InputSignals, 0u, n, nSamples); + if (ok) { + ok = (nSamples == 1u); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The number of samples shall be exactly 1"); + } + } + } + } + if (ok) { + pvs = new PVWrapper[nOfSignals]; + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + pvs[n].memory = NULL_PTR(void *); + } + for (n = 0u; (n < nOfSignals) && (ok); n++) { + //Note that the RealTimeApplicationConfigurationBuilder is allowed to change the order of the signals w.r.t. to the originalSignalInformation + StreamString orderedSignalName; + ok = GetSignalName(n, orderedSignalName); + if (ok) { + //Have to mix and match between the original setting of the DataSource signal + //and the ones which are later added by the RealTimeApplicationConfigurationBuilder + ok = originalSignalInformation.MoveRelative(orderedSignalName.Buffer()); + } + StreamString pvName; + if (ok) { + ok = originalSignalInformation.Read("PVName", pvName); + if (!ok) { + uint32 nn = n; + REPORT_ERROR(ErrorManagement::ParametersError, "No PVName specified for signal at index %d", nn); + } + } + TypeDescriptor td = GetSignalType(n); + if (ok) { + (void) StringHelper::CopyN(&pvs[n].pvName[0], pvName.Buffer(), PV_NAME_MAX_SIZE); + if (td == CharString) { + pvs[n].pvType = DBR_STRING; + } + else if (td == Character8Bit) { + pvs[n].pvType = DBR_STRING; + } + else if (td == SignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == UnsignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == SignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == UnsignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == SignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == UnsignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == Float32Bit) { + pvs[n].pvType = DBR_FLOAT; + } + else if (td == Float64Bit) { + pvs[n].pvType = DBR_DOUBLE; + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Type %s is not supported", TypeDescriptor::GetTypeNameFromTypeDescriptor(td)); + ok = false; + } + } + uint32 numberOfElements = 1u; + if (ok) { + ok = GetSignalNumberOfElements(n, numberOfElements); + } + if (ok) { + if (pvs[n].pvType == DBR_STRING) { + ok = (numberOfElements == 40u); + } + if (!ok) { + //Could support arrays of strings with multiples of char8[40] + REPORT_ERROR(ErrorManagement::ParametersError, "Strings shall be defined with 40 elements char8[40]. Arrays of strings are not currently supported"); + } + } + if (ok) { + pvs[n].numberOfElements = numberOfElements; + } + if (ok) { + pvs[n].memorySize = td.numberOfBits; + pvs[n].memorySize /= 8u; + pvs[n].memorySize *= numberOfElements; + pvs[n].memory = GlobalObjectsDatabase::Instance()->GetStandardHeap()->Malloc(pvs[n].memorySize); + ok = originalSignalInformation.MoveToAncestor(1u); + } + } + } + + if (ok) { + ok = (executor.Start() == ErrorManagement::NoError); + } + return ok; +} + +bool JAEPICSCAInput::AllocateMemory() { + return true; +} + +uint32 JAEPICSCAInput::GetNumberOfMemoryBuffers() { + return 1u; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The signalAddress is independent of the bufferIdx.*/ +bool JAEPICSCAInput::GetSignalMemoryBuffer(const uint32 signalIdx, const uint32 bufferIdx, void*& signalAddress) { + bool ok = (pvs != NULL_PTR(PVWrapper *)); + if (ok) { + ok = (signalIdx < GetNumberOfSignals()); + } + if (ok) { + //lint -e{613} pvs cannot as otherwise ok would be false + signalAddress = pvs[signalIdx].memory; + } + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The brokerName only depends on the direction */ +const char8* JAEPICSCAInput::GetBrokerName(StructuredDataI& data, const SignalDirection direction) { + const char8* brokerName = ""; + if (direction == InputSignals) { + brokerName = "MemoryMapInputBroker"; + } + return brokerName; +} + +bool JAEPICSCAInput::GetInputBrokers(ReferenceContainer& inputBrokers, const char8* const functionName, void* const gamMemPtr) { + ReferenceT broker("MemoryMapInputBroker"); + bool ok = broker->Init(InputSignals, *this, functionName, gamMemPtr); + if (ok) { + ok = inputBrokers.Insert(broker); + } + + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: OutputBrokers are not supported. Function returns false irrespectively of the parameters.*/ +bool JAEPICSCAInput::GetOutputBrokers(ReferenceContainer& outputBrokers, const char8* const functionName, void* const gamMemPtr) { + return false; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: NOOP at StateChange, independently of the function parameters.*/ +bool JAEPICSCAInput::PrepareNextState(const char8* const currentStateName, const char8* const nextStateName) { + return true; +} + +ErrorManagement::ErrorType JAEPICSCAInput::Execute(ExecutionInfo& info) { + ErrorManagement::ErrorType err = ErrorManagement::NoError; + if (info.GetStage() == ExecutionInfo::StartupStage) { + (void) eventCallbackFastMux.FastLock(); + /*lint -e{9130} -e{835} -e{845} -e{747} Several false positives. lint is getting confused here for some reason.*/ + if (ca_context_create(ca_enable_preemptive_callback) != ECA_NORMAL) { + err = ErrorManagement::FatalError; + REPORT_ERROR(err, "ca_enable_preemptive_callback failed"); + } + + uint32 n; + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + /*lint -e{9130} -e{835} -e{845} -e{747} Several false positives. lint is getting confused here for some reason.*/ + if (ca_create_channel(&pvs[n].pvName[0], NULL_PTR(caCh *), NULL_PTR(void *), 20u, &pvs[n].pvChid) != ECA_NORMAL) { + err = ErrorManagement::FatalError; + REPORT_ERROR(err, "ca_create_channel failed for PV with name %s", pvs[n].pvName); + } + if (err.ErrorsCleared()) { + /*lint -e{9130} -e{835} -e{845} -e{747} Several false positives. lint is getting confused here for some reason.*/ + if (ca_create_subscription(pvs[n].pvType, pvs[n].numberOfElements, pvs[n].pvChid, DBE_VALUE, &JAEPICSCAInputEventCallback, &pvs[n], + &pvs[n].pvEvid) != ECA_NORMAL) { + err = ErrorManagement::FatalError; + REPORT_ERROR(err, "ca_create_subscription failed for PV %s", pvs[n].pvName); + } + } + } + } + eventCallbackFastMux.FastUnLock(); + } + else if (info.GetStage() != ExecutionInfo::BadTerminationStage) { + Sleep::Sec(1.0F); + } + else { + (void) eventCallbackFastMux.FastLock(); + uint32 n; + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + (void) ca_clear_subscription(pvs[n].pvEvid); + (void) ca_clear_event(pvs[n].pvEvid); + (void) ca_clear_channel(pvs[n].pvChid); + } + } + ca_detach_context(); + ca_context_destroy(); + eventCallbackFastMux.FastUnLock(); + } + + return err; +} + +uint32 JAEPICSCAInput::GetStackSize() const { + return stackSize; +} + +uint32 JAEPICSCAInput::GetCPUMask() const { + return cpuMask; +} + +bool JAEPICSCAInput::Synchronise() { + return false; +} + +CLASS_REGISTER(JAEPICSCAInput, "1.0") + +} + diff --git a/EC-GN-JA-PCF-IN/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAInput.h b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAInput.h new file mode 100644 index 0000000..3a5071d --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAInput.h @@ -0,0 +1,260 @@ +/** + * @file EPICSCAInput.h + * @brief Header file for class EPICSCAInput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class EPICSCAInput + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef JAEPICSCAINPUT_H_ +#define JAEPICSCAINPUT_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" +#include "EmbeddedServiceMethodBinderI.h" +#include "EventSem.h" +#include "SingleThreadService.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +/** + * Maximum size that a PV name may have + */ +/*lint -esym(551, MARTe::PV_NAME_MAX_SIZE) the symbol is used to define the size of PVWrapper below*/ +const uint32 PV_NAME_MAX_SIZE = 64u; + +/** + * Wraps a PV + */ +struct PVWrapper { + /** + * The channel identifier + */ + chid pvChid; + /** + * The event identifier + */ + evid pvEvid; + /** + * The PV type + */ + chtype pvType; + /** + * The memory of the signal associated to this channel + */ + void *memory; + void *previousValue; + /** + * The number of elements > 0 + */ + uint32 numberOfElements; + /** + * The memory size + */ + uint32 memorySize; + /** + * The PV name + */ + char8 pvName[PV_NAME_MAX_SIZE]; +}; + +/** + * @brief A DataSource which allows to retrieved data from any number of PVs using the EPICS channel access client protocol. + * Data is asynchronously retrieved using ca_create_subscriptions in the context of a different thread (w.r.t. to the real-time thread). + * + * The configuration syntax is (names are only given as an example): + * + *
+ * +EPICSCAInput_1 = {
+ *     Class = JAEPICSCA::JAEPICSCAInput
+ *     StackSize = 1048576 //Optional the EmbeddedThread stack size. Default value is THREADS_DEFAULT_STACKSIZE * 4u
+ *     CPUs = 0xff //Optional the affinity of the EmbeddedThread (where the EPICS context is attached).
+ *     Signals = {
+ *          PV1 = { //At least one shall be defined
+ *             PVName = My::PV1 //Compulsory. Name of the PV.
+ *             Type = uint32 //Compulsory. Supported types are char8[40], string[40], uint8, int8, uint16, int16, int32, uint32, uint64, int64, float32 and float64
+ *             NumberOfElements = 1 //Arrays also supported
+ *          }
+ *          ...
+ *     }
+ * }
+ *
+ * 
+ */ +class JAEPICSCAInput: public DataSourceI, public EmbeddedServiceMethodBinderI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Default constructor. NOOP. + */ + JAEPICSCAInput(); + + /** + * @brief Destructor. + * @details TODO. + */ + virtual ~JAEPICSCAInput(); + + /** + * @brief See DataSourceI::AllocateMemory. NOOP. + * @return true. + */ + virtual bool AllocateMemory(); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @return 1. + */ + virtual uint32 GetNumberOfMemoryBuffers(); + + /** + * @brief See DataSourceI::GetSignalMemoryBuffer. + * @pre + * SetConfiguredDatabase + */ + virtual bool GetSignalMemoryBuffer(const uint32 signalIdx, + const uint32 bufferIdx, + void *&signalAddress); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @details Only InputSignals are supported. + * @return MemoryMapInputBroker. + */ + virtual const char8 *GetBrokerName(StructuredDataI &data, + const SignalDirection direction); + + /** + * @brief See DataSourceI::GetInputBrokers. + * @details adds a memory MemoryMapInputBroker instance to the inputBrokers + * @return true. + */ + virtual bool GetInputBrokers(ReferenceContainer &inputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::GetOutputBrokers. + * @return false. + */ + virtual bool GetOutputBrokers(ReferenceContainer &outputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::PrepareNextState. NOOP. + * @return true. + */ + virtual bool PrepareNextState(const char8 * const currentStateName, + const char8 * const nextStateName); + + /** + * @brief Loads and verifies the configuration parameters detailed in the class description. + * @return true if all the mandatory parameters are correctly specified and if the specified optional parameters have valid values. + */ + virtual bool Initialise(StructuredDataI & data); + + /** + * @brief Final verification of all the parameters. Setup of the memory required to hold all the signals. + * @details This method verifies that all the parameters requested by the GAMs interacting with this DataSource + * are valid and consistent with the parameters set during the initialisation phase. + * In particular the following conditions shall be met: + * - All the signals have the PVName defined + * - All the signals have one of the following types: uint32, int32, float32 or float64. + * @return true if all the parameters are valid and the conditions above are met. + */ + virtual bool SetConfiguredDatabase(StructuredDataI & data); + + /** + * @brief Gets the affinity of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + * @return the the affinity of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + */ + uint32 GetCPUMask() const; + + /** + * @brief Gets the stack size of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + * @return the stack size of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + */ + uint32 GetStackSize() const; + + /** + * @brief Provides the context to execute all the EPICS relevant calls. + * @details Executes in the context of a spawned thread the following EPICS calls: + * ca_context_create, ca_create_channel, ca_create_subscription, ca_clear_subscription, + * ca_clear_event, ca_clear_channel, ca_detach_context and ca_context_destroy + * @return ErrorManagement::NoError if all the EPICS calls return without any error. + */ + virtual ErrorManagement::ErrorType Execute(ExecutionInfo & info); + + /** + * @brief See DataSourceI::Synchronise. + * @return false. + */ + virtual bool Synchronise(); + + /** + * @brief Registered as the ca_create_subscription callback function. + * It calls updates the memory of the corresponding PV variable. + */ + friend void JAEPICSCAInputEventCallback(struct event_handler_args args); + +private: + + /** + * List of PVs. + */ + PVWrapper *pvs; + + /** + * The CPU mask for the executor + */ + uint32 cpuMask; + + /** + * The stack size + */ + uint32 stackSize; + + /** + * The EmbeddedThread where the ca_pend_event is executed. + */ + SingleThreadService executor; + + /** + * Stores the configuration information received at Initialise. + */ + ConfigurationDatabase originalSignalInformation; +}; +} + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* EPICSCADATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF-IN/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAOutput.cpp b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAOutput.cpp new file mode 100644 index 0000000..951ed07 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAOutput.cpp @@ -0,0 +1,375 @@ +/** + * @file EPICSCAOutput.cpp + * @brief Source file for class EPICSCAOutput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class EPICSCAOutput (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAEPICSCAOutput.h" + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "MemoryMapAsyncOutputBroker.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +JAEPICSCAOutput::JAEPICSCAOutput() : + DataSourceI() { + pvs = NULL_PTR(PVWrapper *); + stackSize = THREADS_DEFAULT_STACKSIZE * 4u; + cpuMask = 0xffu; + numberOfBuffers = 0u; + ignoreBufferOverrun = 1u; + threadContextSet = false; +} + +/*lint -e{1551} must free the memory allocated to the different PVs.*/ +JAEPICSCAOutput::~JAEPICSCAOutput() { + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + if (pvs[n].pvChid != NULL_PTR(chid)) { + (void) ca_clear_channel(pvs[n].pvChid); + } + if (pvs[n].memory != NULL_PTR(void *)) { + GlobalObjectsDatabase::Instance()->GetStandardHeap()->Free(pvs[n].memory); + GlobalObjectsDatabase::Instance()->GetStandardHeap()->Free(pvs[n].previousValue); + } + } + delete[] pvs; + } +} + +bool JAEPICSCAOutput::Initialise(StructuredDataI & data) { + bool ok = DataSourceI::Initialise(data); + if (ok) { + ok = data.Read("NumberOfBuffers", numberOfBuffers); + + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "NumberOfBuffers shall be specified"); + } + } + if (ok) { + if (!data.Read("CPUs", cpuMask)) { + REPORT_ERROR(ErrorManagement::Information, "No CPUs defined. Using default = %d", cpuMask); + } + if (!data.Read("StackSize", stackSize)) { + REPORT_ERROR(ErrorManagement::Information, "No StackSize defined. Using default = %d", stackSize); + } + if (!data.Read("IgnoreBufferOverrun", ignoreBufferOverrun)) { + REPORT_ERROR(ErrorManagement::Information, "No IgnoreBufferOverrun defined. Using default = %d", ignoreBufferOverrun); + } + + } + if (ok) { + ok = data.MoveRelative("Signals"); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Could not move to the Signals section"); + } + if (ok) { + ok = data.Copy(originalSignalInformation); + } + if (ok) { + ok = originalSignalInformation.MoveToRoot(); + } + //Do not allow to add signals in run-time + if (ok) { + ok = signalsDatabase.MoveRelative("Signals"); + } + if (ok) { + ok = signalsDatabase.Write("Locked", 1u); + } + if (ok) { + ok = signalsDatabase.MoveToAncestor(1u); + } + } + if (ok) { + ok = data.MoveToAncestor(1u); + } + return ok; +} + +bool JAEPICSCAOutput::SetConfiguredDatabase(StructuredDataI & data) { + bool ok = DataSourceI::SetConfiguredDatabase(data); + //Check the signal index of the timing signal. + uint32 nOfSignals = GetNumberOfSignals(); + if (ok) { + ok = (nOfSignals > 0u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one signal shall be defined"); + } + } + if (ok) { + //Do not allow samples + uint32 functionNumberOfSignals = 0u; + uint32 n; + if (GetFunctionNumberOfSignals(OutputSignals, 0u, functionNumberOfSignals)) { + for (n = 0u; (n < functionNumberOfSignals) && (ok); n++) { + uint32 nSamples; + ok = GetFunctionSignalSamples(OutputSignals, 0u, n, nSamples); + if (ok) { + ok = (nSamples == 1u); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The number of samples shall be exactly 1"); + } + } + } + } + //Only one and one GAM allowed to interact with this DataSourceI + if (ok) { + ok = (GetNumberOfFunctions() == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Exactly one Function allowed to interact with this DataSourceI"); + } + } + + if (ok) { + pvs = new PVWrapper[nOfSignals]; + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + pvs[n].memory = NULL_PTR(void *); //value to write PV + pvs[n].previousValue = NULL_PTR(void *); //written value + pvs[n].pvChid = NULL_PTR(chid); + + } + for (n = 0u; (n < nOfSignals) && (ok); n++) { + //Note that the RealTimeApplicationConfigurationBuilder is allowed to change the order of the signals w.r.t. to the originalSignalInformation + StreamString orderedSignalName; + ok = GetSignalName(n, orderedSignalName); + if (ok) { + //Have to mix and match between the original setting of the DataSource signal + //and the ones which are later added by the RealTimeApplicationConfigurationBuilder + ok = originalSignalInformation.MoveRelative(orderedSignalName.Buffer()); + } + StreamString pvName; + if (ok) { + ok = originalSignalInformation.Read("PVName", pvName); + if (!ok) { + uint32 nn = n; + REPORT_ERROR(ErrorManagement::ParametersError, "No PVName specified for signal at index %d", nn); + } + } + TypeDescriptor td = GetSignalType(n); + + if (ok) { + (void) StringHelper::CopyN(&pvs[n].pvName[0], pvName.Buffer(), PV_NAME_MAX_SIZE); + if (td == CharString) { + pvs[n].pvType = DBR_STRING; + } + else if (td == Character8Bit) { + pvs[n].pvType = DBR_STRING; + } + else if (td == SignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == UnsignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == SignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == UnsignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == SignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == UnsignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == Float32Bit) { + pvs[n].pvType = DBR_FLOAT; + } + else if (td == Float64Bit) { + pvs[n].pvType = DBR_DOUBLE; + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Type %s is not supported", TypeDescriptor::GetTypeNameFromTypeDescriptor(td)); + ok = false; + } + } + uint32 numberOfElements = 1u; + if (ok) { + ok = GetSignalNumberOfElements(n, numberOfElements); + } + if (ok) { + if (pvs[n].pvType == DBR_STRING) { + ok = (numberOfElements == 40u); + } + if (!ok) { + //Could support arrays of strings with multiples of char8[40] + REPORT_ERROR(ErrorManagement::ParametersError, + "Strings shall be defined with 40 elements char8[40]. Arrays of strings are not currently supported"); + } + } + if (ok) { + pvs[n].numberOfElements = numberOfElements; + } + if (ok) { + pvs[n].memorySize = td.numberOfBits; + pvs[n].memorySize /= 8u; + pvs[n].memorySize *= numberOfElements; + pvs[n].memory = GlobalObjectsDatabase::Instance()->GetStandardHeap()->Malloc(pvs[n].memorySize); + pvs[n].previousValue = GlobalObjectsDatabase::Instance()->GetStandardHeap()->Malloc(pvs[n].memorySize); + ok = originalSignalInformation.MoveToAncestor(1u); + } + } + } + return ok; +} + +bool JAEPICSCAOutput::AllocateMemory() { + return true; +} + +uint32 JAEPICSCAOutput::GetNumberOfMemoryBuffers() { + return 1u; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The signalAddress is independent of the bufferIdx.*/ +bool JAEPICSCAOutput::GetSignalMemoryBuffer(const uint32 signalIdx, const uint32 bufferIdx, void*& signalAddress) { + bool ok = (pvs != NULL_PTR(PVWrapper *)); + if (ok) { + ok = (signalIdx < GetNumberOfSignals()); + } + if (ok) { + //lint -e{613} pvs cannot as otherwise ok would be false + signalAddress = pvs[signalIdx].memory; + } + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The brokerName only depends on the direction */ +const char8* JAEPICSCAOutput::GetBrokerName(StructuredDataI& data, const SignalDirection direction) { + const char8* brokerName = ""; + if (direction == OutputSignals) { + brokerName = "MemoryMapAsyncOutputBroker"; + } + return brokerName; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: InputBrokers are not supported. Function returns false irrespectively of the parameters.*/ +bool JAEPICSCAOutput::GetInputBrokers(ReferenceContainer& inputBrokers, const char8* const functionName, void* const gamMemPtr) { + return false; +} + +bool JAEPICSCAOutput::GetOutputBrokers(ReferenceContainer& outputBrokers, const char8* const functionName, void* const gamMemPtr) { + ReferenceT broker("MemoryMapAsyncOutputBroker"); + bool ok = broker->InitWithBufferParameters(OutputSignals, *this, functionName, gamMemPtr, numberOfBuffers, cpuMask, stackSize); + if (ok) { + ok = outputBrokers.Insert(broker); + broker->SetIgnoreBufferOverrun(ignoreBufferOverrun == 1u); + } + + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: NOOP at StateChange, independently of the function parameters.*/ +bool JAEPICSCAOutput::PrepareNextState(const char8* const currentStateName, const char8* const nextStateName) { + return true; +} + +uint32 JAEPICSCAOutput::GetStackSize() const { + return stackSize; +} + +uint32 JAEPICSCAOutput::GetCPUMask() const { + return cpuMask; +} + +uint32 JAEPICSCAOutput::GetNumberOfBuffers() const { + return numberOfBuffers; +} + +bool JAEPICSCAOutput::Synchronise() { + bool ok = true; + uint32 n; + uint32 nOfSignals = GetNumberOfSignals(); + if (!threadContextSet) { + ok = (ca_context_create(ca_enable_preemptive_callback) == ECA_NORMAL); + if (!ok) { + REPORT_ERROR(ErrorManagement::FatalError, "ca_enable_preemptive_callback failed"); + } + threadContextSet = ok; + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + ok = (ca_create_channel(&pvs[n].pvName[0], NULL_PTR(caCh *), NULL_PTR(void *), 20u, &pvs[n].pvChid) == ECA_NORMAL); + if (!ok) { + REPORT_ERROR(ErrorManagement::FatalError, "ca_create_channel failed for PV with name %s", pvs[n].pvName); + } + } + } + } + + //Allow to write event at the first time! + if (threadContextSet) { + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + bool isNewValue = true; + if (pvs[n].pvType == DBR_STRING) { + if(strcmp((char*)pvs[n].memory,(char*)pvs[n].previousValue)==0){ + isNewValue = false; + continue; + } + if(isNewValue){ + ok = (ca_put(pvs[n].pvType, pvs[n].pvChid, pvs[n].memory) == ECA_NORMAL); + memcpy(pvs[n].previousValue,pvs[n].memory, pvs[n].numberOfElements); + } + } + else { + if(memcmp(pvs[n].memory, pvs[n].previousValue, pvs[n].numberOfElements)==0){ + isNewValue = false; + continue; + } + if(isNewValue){ + ok = (ca_array_put(pvs[n].pvType, pvs[n].numberOfElements, pvs[n].pvChid, pvs[n].memory) == ECA_NORMAL); + memcpy(pvs[n].previousValue, pvs[n].memory, pvs[n].numberOfElements); + } + } + if (!ok) { + REPORT_ERROR(ErrorManagement::FatalError, "ca_put failed for PV: %s", pvs[n].pvName); + } + (void) ca_pend_io(0.1); + } + } + } + + return ok; +} + +bool JAEPICSCAOutput::IsIgnoringBufferOverrun() const { + return (ignoreBufferOverrun == 1u); +} + +CLASS_REGISTER(JAEPICSCAOutput, "1.0") + +} + diff --git a/EC-GN-JA-PCF-IN/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAOutput.h b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAOutput.h new file mode 100644 index 0000000..5c2de87 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAOutput.h @@ -0,0 +1,233 @@ +/** + * @file EPICSCAOutput.h + * @brief Header file for class EPICSCAOutput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class EPICSCAOutput + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef JAEPICSCAOutput_H_ +#define JAEPICSCAOutput_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" +#include "JAEPICSCAInput.h" +#include "EmbeddedServiceMethodBinderI.h" +#include "EventSem.h" +#include "SingleThreadService.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +//Maximum size that a PV name may have + +/** + * @brief A DataSource which allows to output data into any number of PVs using the EPICS channel access client protocol. + * Data is asynchronously ca_put in the context of a different thread (w.r.t. to the real-time thread). + * + * The configuration syntax is (names are only given as an example): + * + *
+ * +EPICSCAOutput_1 = {
+ *     Class = EPICSCA::EPICSCAOutput
+ *     StackSize = 1048576 //Optional the EmbeddedThread stack size. Default value is THREADS_DEFAULT_STACKSIZE * 4u
+ *     CPUs = 0xff //Optional the affinity of the EmbeddedThread (where the EPICS context is attached).
+ *     IgnoreBufferOverrun = 1 //Optional. If true no error will be triggered when the thread that writes into EPICS does not consume the data fast enough.
+ *     NumberOfBuffers = 10 //Compulsory. Number of buffers in a circular buffer that asynchronously writes the PV values. Each buffer is capable of holding a copy of all the DataSourceI signals.
+ *     Signals = {
+ *          PV1 = { //At least one shall be defined
+ *             PVName = My::PV1 //Compulsory. Name of the PV.
+ *             Type = uint32 //Compulsory. Supported types are char8[40], string[40], uint8, int8, uint16, int16, int32, uint32, float32 and float64
+ *          }
+ *          ...
+ *     }
+ * }
+ *
+ * 
+ */ +class JAEPICSCAOutput: public DataSourceI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Default constructor. NOOP. + */ + JAEPICSCAOutput(); + + /** + * @brief Destructor. + * @details TODO. + */ + virtual ~JAEPICSCAOutput(); + + /** + * @brief See DataSourceI::AllocateMemory. NOOP. + * @return true. + */ + virtual bool AllocateMemory(); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @return 1. + */ + virtual uint32 GetNumberOfMemoryBuffers(); + + /** + * @brief See DataSourceI::GetSignalMemoryBuffer. + * @pre + * SetConfiguredDatabase + */ + virtual bool GetSignalMemoryBuffer(const uint32 signalIdx, + const uint32 bufferIdx, + void *&signalAddress); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @details Only OutputSignals are supported. + * @return MemoryMapAsyncOutputBroker. + */ + virtual const char8 *GetBrokerName(StructuredDataI &data, + const SignalDirection direction); + + /** + * @brief See DataSourceI::GetInputBrokers. + * @return false. + */ + virtual bool GetInputBrokers(ReferenceContainer &inputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::GetOutputBrokers. + * @details adds a memory MemoryMapOutputBroker instance to the outputBrokers + * @return true. + */ + virtual bool GetOutputBrokers(ReferenceContainer &outputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::PrepareNextState. NOOP. + * @return true. + */ + virtual bool PrepareNextState(const char8 * const currentStateName, + const char8 * const nextStateName); + + /** + * @brief Loads and verifies the configuration parameters detailed in the class description. + * @return true if all the mandatory parameters are correctly specified and if the specified optional parameters have valid values. + */ + virtual bool Initialise(StructuredDataI & data); + + /** + * @brief Final verification of all the parameters. Setup of the memory required to hold all the signals. + * @details This method verifies that all the parameters requested by the GAMs interacting with this DataSource + * are valid and consistent with the parameters set during the initialisation phase. + * In particular the following conditions shall be met: + * - All the signals have the PVName defined + * - All the signals have one of the following types: uint32, int32, float32 or float64. + * @return true if all the parameters are valid and the conditions above are met. + */ + virtual bool SetConfiguredDatabase(StructuredDataI & data); + + /** + * @brief Gets the affinity of the thread which is going to be used to asynchronously write data with ca_put. + * @return the affinity of the thread which is going to be used to asynchronously write data with ca_put. + */ + uint32 GetCPUMask() const; + + /** + * @brief Gets the stack size of the thread which is going to be used to asynchronously write data with ca_put. + * @return the stack size of the thread which is going to be used to asynchronously write data with ca_put. + */ + uint32 GetStackSize() const; + + /** + * @brief Gets the number of buffers in the circular buffer that asynchronously writes the PV values. + * @return the number of buffers in the circular buffer that asynchronously writes the PV values. + */ + uint32 GetNumberOfBuffers() const; + + /** + * @brief Provides the context to execute all the EPICS ca_put calls. + * @details Executes in the context of the MemoryMapAsyncOutputBroker thread the following EPICS calls: + * ca_context_create, ca_create_channel, ca_create_subscription, ca_clear_subscription, + * ca_clear_event, ca_clear_channel, ca_detach_context and ca_context_destroy + * @return true if all the EPICS calls return without any error. + */ + virtual bool Synchronise(); + + /** + * @brief Gets if buffer overruns is being ignored (i.e. the consumer thread which writes into EPICS is not consuming the data fast enough). + * @return if true no error is to be triggered when there is a buffer overrun. + */ + bool IsIgnoringBufferOverrun() const; + + +private: + /** + * List of PVs. + */ + PVWrapper *pvs; + + /** + * The CPU mask for the executor + */ + uint32 cpuMask; + + /** + * The stack size + */ + uint32 stackSize; + + /** + * Stores the configuration information received at Initialise. + */ + ConfigurationDatabase originalSignalInformation; + + /** + * The number of buffers for the circular buffer that flushes data into EPICS + */ + uint32 numberOfBuffers; + + /** + * True once the epics thread context is set + */ + bool threadContextSet; + + /** + * If true no error will be triggered when the data cannot be consumed by the thread doing the caputs. + */ + uint32 ignoreBufferOverrun; +}; +} + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* EPICSCADATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF-IN/src/main/c++/DataSources/JAEPICSCA/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/JAEPICSCA/Makefile.gcc new file mode 100644 index 0000000..1c65faf --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/JAEPICSCA/Makefile.gcc @@ -0,0 +1,29 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc + +LIBRARIES += -L$(EPICS_BASE)/lib/$(EPICS_HOST_ARCH)/ -lca diff --git a/EC-GN-JA-PCF-IN/src/main/c++/DataSources/JAEPICSCA/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/JAEPICSCA/Makefile.inc new file mode 100644 index 0000000..435df16 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/JAEPICSCA/Makefile.inc @@ -0,0 +1,58 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAEPICSCAOutput.x JAEPICSCAInput.x + +PACKAGE=DataSources + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(EPICS_BASE)/include/ +INCLUDES += -I$(EPICS_BASE)/include/os/Linux/ +INCLUDES += -I$(EPICS_BASE)/include/compiler/gcc/ +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L5GAMs + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAEPICSCA$(LIBEXT) \ + $(BUILD_DIR)/JAEPICSCA$(DLLEXT) + echo $(OBJS) + +include depends.$(TARGET) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF-IN/src/main/c++/DataSources/Makefile b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/Makefile new file mode 100644 index 0000000..fa87195 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/Makefile @@ -0,0 +1,28 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +export TARGET=x86-linux + +include Makefile.gcc \ No newline at end of file diff --git a/EC-GN-JA-PCF-IN/src/main/c++/DataSources/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/Makefile.gcc new file mode 100644 index 0000000..e0a2fc4 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/Makefile.gcc @@ -0,0 +1,26 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +############################################################# + +include Makefile.inc + diff --git a/EC-GN-JA-PCF-IN/src/main/c++/DataSources/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/Makefile.inc new file mode 100644 index 0000000..59ce9d2 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/Makefile.inc @@ -0,0 +1,42 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +SPB = RandomDataSource.x NI6528.x JAEPICSCA.x + +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults + +ROOT_DIR=../../../obj +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +all: $(OBJS) $(SUBPROJ) check-env + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + +check-env: +ifndef MARTe2_DIR + $(error MARTe2_DIR is undefined) +endif + diff --git a/EC-GN-JA-PCF-IN/src/main/c++/DataSources/NI6528/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/NI6528/Makefile.gcc new file mode 100644 index 0000000..29201d0 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/NI6528/Makefile.gcc @@ -0,0 +1,30 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc + +LIBRARIES += -L$(CODAC_ROOT)/lib/ -lpxi6528 + diff --git a/EC-GN-JA-PCF-IN/src/main/c++/DataSources/NI6528/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/NI6528/Makefile.inc new file mode 100644 index 0000000..24ebd5d --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/NI6528/Makefile.inc @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=NI6528.x + +PACKAGE=DataSources + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(CODAC_ROOT)/include/ + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/NI6528$(LIBEXT) \ + $(BUILD_DIR)/NI6528$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF-IN/src/main/c++/DataSources/NI6528/NI6528.cpp b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/NI6528/NI6528.cpp new file mode 100644 index 0000000..49f62b1 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/NI6528/NI6528.cpp @@ -0,0 +1,141 @@ +/** + * @file NI6528.cpp + * @brief Source file for class NI6528 + * @date 01/03/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class NI6528 (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include +#include +#include +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "CompilerTypes.h" +#include "NI6528.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +NI6528::NI6528() : + MARTe::DataSourceI() { + using namespace MARTe; + previousValue = 0u; + value = 0u; + port = 0u; + boardFileDescriptor = 0; +} + +NI6528::~NI6528() { + using namespace MARTe; + (void) pxi6528_close_device(boardFileDescriptor); +} + +bool NI6528::SetConfiguredDatabase(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = (DataSourceI::SetConfiguredDatabase(data)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "DataSourceI::SetConfiguredDatabas() failed"); + } + if (ok) { + ok = (GetNumberOfSignals() == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetNumberOfSignals() != 1u"); + } + } + if (ok) { + ok = (GetSignalType(0u) == UnsignedInteger8Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetSignalType(0u) != UnsignedInteger8Bit"); + } + } + + return ok; +} + +bool NI6528::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = DataSourceI::Initialise(data); + if (ok) { + ok = data.Read("Port", port); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The Port shall be specified"); + } + } + if (ok) { + ok = data.Read("DeviceName", deviceName); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The DeviceName shall be specified"); + } + } + int32 ret = pxi6528_open_device(&boardFileDescriptor, deviceName.Buffer(), O_NONBLOCK); + ok = (ret == 0); + if (!ok) { + StreamString err = strerror(-ret); + REPORT_ERROR(ErrorManagement::FatalError, "Could not open device (%s) : %s", deviceName.Buffer(), err.Buffer()); + } + return ok; +} + +bool NI6528::Synchronise() { + using namespace MARTe; + if(previousValue != value){ + int32 ret = (pxi6528_write_port(boardFileDescriptor, port, value) > 0); + previousValue = value; + bool ok = (ret > -1); + if (!ok) { + StreamString err = strerror(-ret); + REPORT_ERROR(ErrorManagement::FatalError, "Could not write to device (%s) : %s", deviceName.Buffer(), err.Buffer()); + } + } + + return true; +} + +bool NI6528::AllocateMemory() { + return true; +} + +bool NI6528::GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress) { + signalAddress = &value; + return true; +} + +const MARTe::char8 *NI6528::GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction) { + using namespace MARTe; + return "MemoryMapSynchronisedOutputBroker"; +} + +bool NI6528::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + return true; +} + +CLASS_REGISTER(NI6528, "1.0") + diff --git a/EC-GN-JA-PCF-IN/src/main/c++/DataSources/NI6528/NI6528.h b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/NI6528/NI6528.h new file mode 100644 index 0000000..7074477 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/NI6528/NI6528.h @@ -0,0 +1,143 @@ +/** + * @file NI6528.h + * @brief Header file for class NI6528 + * @date 07/06/2018 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class NI6528 + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef RANDOM_DATASOURCE_H_ +#define RANDOM_DATASOURCE_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +/** + * @brief NI6528 simplified data source implementation. + * + * The configuration syntax is (names and signal quantities are only given as an example): + * +NI6528 = { + * Class = NI6528 + * DeviceName = "/dev/pxi6528.0" //Mandatory + * Port = 0 //The port where to write + * Signals = { + * currentValue = {Type = uint8} + * bitmask = {Type = uint8} + * Value = {Type = uint8} + * } + * } + */ +class NI6528: public MARTe::DataSourceI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Constructor. NOOP. + */ +NI6528 (); + + /** + * @brief Destructor. NOOP. + */ + virtual ~NI6528(); + + /** + * @brief The configuration data detailed in the class description + * @return true if all the compulsory parameters are set. + */ + virtual bool Initialise(MARTe::StructuredDataI & data); + + /** + * @brief Verifies that at most one signal has been set with the correct type (i.e. any integer). + * @return true if the above conditions are met. + */ + virtual bool SetConfiguredDatabase(MARTe::StructuredDataI & data); + + /** + * @brief @see DataSourceI::Synchronise + */ + virtual bool Synchronise(); + + /** + * @brief @see DataSourceI::AllocateMemory + */ + virtual bool AllocateMemory(); + + /** + * @brief @see DataSourceI::GetSignalMemoryBuffer + */ + virtual bool GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress); + + /** + * @return "MemoryMapSynchronisedInputBroker" + */ + virtual const MARTe::char8 *GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction); + + /** + * @brief NOOP + */ + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName); + +private: + /** + * The previous value to write. + */ + MARTe::uint8 previousValue; + + /** + * The bitmask to write value. (new value) = (current value) || (bitmask) && (write value) + */ + MARTe::uint8 bitmask; + + /** + * The value to write. + */ + MARTe::uint8 value; + + /** + * The port number + */ + MARTe::uint32 port; + + /** + * The board file descriptor + */ + pxi6528_device_t boardFileDescriptor; + + /** + * The device name + */ + MARTe::StreamString deviceName; +}; + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* RANDOM_DATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF-IN/src/main/c++/DataSources/RandomDataSource/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/RandomDataSource/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/RandomDataSource/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/c++/DataSources/RandomDataSource/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/RandomDataSource/Makefile.inc new file mode 100644 index 0000000..0833f11 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/RandomDataSource/Makefile.inc @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=RandomDataSource.x + +PACKAGE=DataSources + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/RandomDataSource$(LIBEXT) \ + $(BUILD_DIR)/RandomDataSource$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF-IN/src/main/c++/DataSources/RandomDataSource/RandomDataSource.cpp b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/RandomDataSource/RandomDataSource.cpp new file mode 100644 index 0000000..bcfc0b0 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/RandomDataSource/RandomDataSource.cpp @@ -0,0 +1,146 @@ +/** + * @file RandomDataSource.cpp + * @brief Source file for class RandomDataSource + * @date 01/03/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class RandomDataSource (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "CompilerTypes.h" +#include "RandomDataSource.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +RandomDataSource::RandomDataSource() : + MARTe::DataSourceI() { + using namespace MARTe; + seed = 0u; + signalPtr = NULL_PTR(MARTe::char8 *); + signalTypeDescriptor = UnsignedInteger8Bit; +} + +RandomDataSource::~RandomDataSource() { + using namespace MARTe; + if (signalPtr) { + delete[] signalPtr; + } +} + +bool RandomDataSource::SetConfiguredDatabase(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = (DataSourceI::SetConfiguredDatabase(data)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "DataSourceI::SetConfiguredDatabas() failed"); + } + if (ok) { + ok = (GetNumberOfSignals() == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetNumberOfSignals() != 1u"); + } + } + if (ok) { + signalTypeDescriptor = GetSignalType(0u); + ok = (signalTypeDescriptor.type == UnsignedInteger); + if (!ok) { + ok = (signalTypeDescriptor.type == SignedInteger); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetSignalType(0u) != Un/SignedInteger"); + } + } + + return ok; +} + +bool RandomDataSource::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = DataSourceI::Initialise(data); + if (ok) { + ok = data.Read("Seed", seed); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The Seed shall be specified"); + } + } + + return ok; +} + +bool RandomDataSource::Synchronise() { + using namespace MARTe; + + if (signalTypeDescriptor.numberOfBits == 8u) { + GetValue(); + } + if (signalTypeDescriptor.numberOfBits == 16u) { + GetValue(); + } + if (signalTypeDescriptor.numberOfBits == 32u) { + GetValue(); + } + if (signalTypeDescriptor.numberOfBits == 64u) { + GetValue(); + } + + return true; +} + +bool RandomDataSource::AllocateMemory() { + signalPtr = new MARTe::char8[signalTypeDescriptor.numberOfBits]; + return true; +} + +bool RandomDataSource::GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress) { + signalAddress = &signalPtr[0]; + return true; +} + +const MARTe::char8 *RandomDataSource::GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction) { + using namespace MARTe; + + static bool firstTime = true; + const char8 * broker;// = NULL_PTR(const char8 *); + if (firstTime) { + broker = "MemoryMapSynchronisedInputBroker"; + } + else { + firstTime = false; + broker = "MemoryMapInputBroker"; + } + return broker; +} + +bool RandomDataSource::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + return true; +} + +CLASS_REGISTER(RandomDataSource, "1.0") + diff --git a/EC-GN-JA-PCF-IN/src/main/c++/DataSources/RandomDataSource/RandomDataSource.h b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/RandomDataSource/RandomDataSource.h new file mode 100644 index 0000000..11cade5 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/DataSources/RandomDataSource/RandomDataSource.h @@ -0,0 +1,137 @@ +/** + * @file RandomDataSource.h + * @brief Header file for class RandomDataSource + * @date 07/06/2018 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class RandomDataSource + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef RANDOM_DATASOURCE_H_ +#define RANDOM_DATASOURCE_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +/** + * @brief DataDource which generates random numbers against a given seed. + * + * The configuration syntax is (names and signal quantities are only given as an example): + * +RandomDataSource = { + * Class = RandomDataSource + * Seed = 8 //Seed against which the the seed will be generated. Note that each signal + * Signals = { + * Random1 = { //Maximum one signal + * Type = uint64 //All the integer types are supported + * } + * } + * } + */ +class RandomDataSource: public MARTe::DataSourceI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Constructor. NOOP. + */ +RandomDataSource (); + + /** + * @brief Destructor. NOOP. + */ + virtual ~RandomDataSource(); + + /** + * @brief The configuration data detailed in the class description + * @return true if all the compulsory parameters are set. + */ + virtual bool Initialise(MARTe::StructuredDataI & data); + + /** + * @brief Verifies that at most one signal has been set with the correct type (i.e. any integer). + * @return true if the above conditions are met. + */ + virtual bool SetConfiguredDatabase(MARTe::StructuredDataI & data); + + /** + * @brief @see DataSourceI::Synchronise + */ + virtual bool Synchronise(); + + /** + * @brief @see DataSourceI::AllocateMemory + */ + virtual bool AllocateMemory(); + + /** + * @brief @see DataSourceI::GetSignalMemoryBuffer + */ + virtual bool GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress); + + /** + * @return "MemoryMapSynchronisedInputBroker" + */ + virtual const MARTe::char8 *GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction); + + /** + * @brief NOOP + */ + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName); + +private: + /** + * The seed to compute the signals. + */ + MARTe::uint32 seed; + + /** + * The signal pointer + */ + MARTe::char8 *signalPtr; + + /** + * The signal type descriptor. + */ + MARTe::TypeDescriptor signalTypeDescriptor; + + /** + * Compute the random value + */ + template + void GetValue(); + +}; + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ +template +void RandomDataSource::GetValue() { + *(reinterpret_cast(&signalPtr[0u])) = static_cast(rand_r(&seed)); +} + +#endif /* RANDOM_DATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitReverseGAM/JABitReverseGAM.cpp b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitReverseGAM/JABitReverseGAM.cpp new file mode 100644 index 0000000..dd322b8 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitReverseGAM/JABitReverseGAM.cpp @@ -0,0 +1,123 @@ +/** + * @file JABitReverseGAM.cpp + * @brief Source file for class JABitReverseGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JABitReverseGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JABitReverseGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JABitReverseGAM::JABitReverseGAM() { + //Input signals. + input1 = NULL_PTR(MARTe::uint8 *); + + //Output signals. + output1= NULL_PTR(MARTe::uint8 *); +} + +JABitReverseGAM::~JABitReverseGAM() { +} + +bool JABitReverseGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + return ok; +} + +bool JABitReverseGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JABitReverseGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == 1u); + if (ok) { + ok = (numberOfOutputSignals == 1u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "One output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "One input signals shall be defined"); + } + // Do type check for input signals. + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = ((inputType == UnsignedInteger8Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint8.", signalName.Buffer()); + } + + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = ((outputType == UnsignedInteger8Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint8.", signalName.Buffer()); + } + } + } + // Do type cast. + if (ok) { + input1 = reinterpret_cast(GetInputSignalMemory(0)); + + output1 = reinterpret_cast(GetOutputSignalMemory(0)); + } + return ok; +} + +bool JABitReverseGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + *output1 = ~(*input1); + return true; +} + +CLASS_REGISTER(JABitReverseGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitReverseGAM/JABitReverseGAM.h b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitReverseGAM/JABitReverseGAM.h new file mode 100644 index 0000000..1d2bbcf --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitReverseGAM/JABitReverseGAM.h @@ -0,0 +1,75 @@ +/** + * @file JABitReverseGAM.h + * @brief Header file for class JABitReverseGAM + * @date Mar 18, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JABitReverseGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JABitReverseGAM_H_ +#define GAMS_JABitReverseGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +class JABitReverseGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JABitReverseGAM(); + + virtual ~JABitReverseGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + + // Input signals + MARTe::uint8 *input1; + + // Output signals + MARTe::uint8 *output1; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JABitReverseGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitReverseGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitReverseGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitReverseGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitReverseGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitReverseGAM/Makefile.inc new file mode 100644 index 0000000..8847378 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitReverseGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JABitReverseGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JABitReverseGAM$(LIBEXT) \ + $(BUILD_DIR)/JABitReverseGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitSumGAM/JABitSumGAM.cpp b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitSumGAM/JABitSumGAM.cpp new file mode 100644 index 0000000..7c75cd1 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitSumGAM/JABitSumGAM.cpp @@ -0,0 +1,143 @@ +/** + * @file JABitSumGAM.cpp + * @brief Source file for class JABitSumGAM + * @date Feb 10, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JABitSumGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JABitSumGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JABitSumGAM::JABitSumGAM() { + //Input signals. + input0 = NULL_PTR(MARTe::uint32 *); + input1 = NULL_PTR(MARTe::uint32 *); + input2 = NULL_PTR(MARTe::uint32 *); + input3 = NULL_PTR(MARTe::uint32 *); + input4 = NULL_PTR(MARTe::uint32 *); + input5 = NULL_PTR(MARTe::uint32 *); + input6 = NULL_PTR(MARTe::uint32 *); + input7 = NULL_PTR(MARTe::uint32 *); + + //Output signals. + output= NULL_PTR(MARTe::uint8 *); +} + +JABitSumGAM::~JABitSumGAM() { +} + +bool JABitSumGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (!ok){ + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "ParametersError in init."); + } + return ok; +} + +bool JABitSumGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JABitSumGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == 8u); + if (ok) { + ok = (numberOfOutputSignals == 1u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "One output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Eight input signals shall be defined"); + } + // Do type check for input signals. + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32.", signalName.Buffer()); + } + + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint8.", signalName.Buffer()); + } + } + } + // Do type cast. + if (ok) { + input0 = reinterpret_cast(GetInputSignalMemory(0)); + input1 = reinterpret_cast(GetInputSignalMemory(1)); + input2 = reinterpret_cast(GetInputSignalMemory(2)); + input3 = reinterpret_cast(GetInputSignalMemory(3)); + input4 = reinterpret_cast(GetInputSignalMemory(4)); + input5 = reinterpret_cast(GetInputSignalMemory(5)); + input6 = reinterpret_cast(GetInputSignalMemory(6)); + input7 = reinterpret_cast(GetInputSignalMemory(7)); + + output = reinterpret_cast(GetOutputSignalMemory(0)); + } + + return ok; +} + +bool JABitSumGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + *output = *input0 + *input1*2 + *input2*4 + *input3*8 + *input4*16 + + *input5*32 + *input6*64 + *input7*128; + + return true; +} + +CLASS_REGISTER(JABitSumGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitSumGAM/JABitSumGAM.h b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitSumGAM/JABitSumGAM.h new file mode 100644 index 0000000..462f62b --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitSumGAM/JABitSumGAM.h @@ -0,0 +1,81 @@ +/** + * @file JABitSumGAM.h + * @brief Header file for class JABitSumGAM + * @date Feb 10, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JABitSumGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JABitSumGAM_H_ +#define GAMS_JABitSumGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include "stdio.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +class JABitSumGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JABitSumGAM(); + + virtual ~JABitSumGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + // Input signals + MARTe::uint32 *input0; + MARTe::uint32 *input1; + MARTe::uint32 *input2; + MARTe::uint32 *input3; + MARTe::uint32 *input4; + MARTe::uint32 *input5; + MARTe::uint32 *input6; + MARTe::uint32 *input7; + + // Output signals + MARTe::uint8 *output; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JABitSumGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitSumGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitSumGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitSumGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitSumGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitSumGAM/Makefile.inc new file mode 100644 index 0000000..f57063b --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JABitSumGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JABitSumGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JABitSumGAM$(LIBEXT) \ + $(BUILD_DIR)/JABitSumGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.cpp b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.cpp new file mode 100644 index 0000000..99ba1f5 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.cpp @@ -0,0 +1,309 @@ +/** + * @file JAConditionalSignalUpdateGAM.cpp + * @brief Source file for class JAConditionalSignalUpdateGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAConditionalSignalUpdateGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAConditionalSignalUpdateGAM.h" +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAConditionalSignalUpdateGAM::JAConditionalSignalUpdateGAM() { + inputSignals = NULL_PTR(void **); + inputSignalTypes = NULL_PTR(MARTe::TypeDescriptor *); + values = NULL_PTR(MARTe::uint32 *); + valuesCount = 0u; + outputSignals = NULL_PTR(MARTe::uint32 **); + defaultValues = NULL_PTR(MARTe::uint32 **); + needsReset = false; + expectedValues = NULL_PTR(MARTe::uint32 *); + expectedValuesCount = 0u; + operation = And; + comparators = NULL_PTR(ComparisonMode *); +} + +JAConditionalSignalUpdateGAM::~JAConditionalSignalUpdateGAM() { + if (outputSignals != NULL_PTR(MARTe::uint32 **)) { + delete[] outputSignals; + } + if (inputSignals != NULL_PTR(void **)) { + delete[] inputSignals; + } + if (inputSignalTypes != NULL_PTR(MARTe::TypeDescriptor *)) { + delete[] inputSignalTypes; + } + if (values != NULL_PTR(MARTe::uint32 *)) { + delete[] values; + } + if (comparators != NULL_PTR(ComparisonMode *)) { + delete[] comparators; + } + if (defaultValues != NULL_PTR(MARTe::uint32 **)) { + delete[] defaultValues; + } +} + +bool JAConditionalSignalUpdateGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + // Read expected values. + AnyType valuesArray = data.GetType("ExpectedValues"); + + if (valuesArray.GetDataPointer() != NULL) { + expectedValuesCount = valuesArray.GetNumberOfElements(0u); + + expectedValues = new uint32[expectedValuesCount]; + + Vector valuesVector(expectedValues, expectedValuesCount); + ok = (data.Read("ExpectedValues", valuesVector)); + } + } + if (ok) { + // Read comparators. + AnyType comparatorsArray = data.GetType("Comparators"); + if (comparatorsArray.GetDataPointer() != NULL) { + uint32 count; + if (ok) { + count = comparatorsArray.GetNumberOfElements(0u); + ok = count == expectedValuesCount; + } + if (ok) { + comparators = new ComparisonMode[count]; + StreamString* comp = new StreamString[count]; + Vector compVector(comp, count); + + ok = (data.Read("Comparators", compVector)); + + if (ok) { + for (uint32 i = 0; i < count; ++i) { + if (comp[i] == "EQUALS") { + comparators[i] = Equals; + } else if (comp[i] == "NOT") { + comparators[i] = Not; + } else if (comp[i] == "GREATER") { + comparators[i] = Greater; + } else if (comp[i] == "EQUALS_OR_GREATER") { + comparators[i] = EqualsOrGreater; + } else if (comp[i] == "LESS") { + comparators[i] = Less; + } else if (comp[i] == "EQUALS_OR_LESS") { + comparators[i] = EqualsOrLess; + } else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Comparator %s is not defined.", comp[i].Buffer()); + } + } + } + delete[] comp; + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Expected values and operators shall have the same " + "number of elements."); + } + } else { + // Create default comparators (equals) when they aren't provided in the configuration. + comparators = new ComparisonMode[expectedValuesCount]; + for (uint32 i = 0; i < expectedValuesCount; ++i) { + comparators[i] = Equals; + } + } + } + if (ok) { + MARTe::StreamString operationStr; + if (data.Read("Operation", operationStr)) { + if (operationStr == "AND") { + operation = And; + } + else if (operationStr == "OR") { + operation = Or; + } + else if (operationStr == "NOR") { + operation = Nor; + } + else if (operationStr == "XOR") { + operation = Xor; + } + else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Operation %s is not defined", operationStr.Buffer()); + } + } + } + if (ok) { + // Read output signal values to be set. + AnyType valuesArray = data.GetType("Values"); + ok = (valuesArray.GetDataPointer() != NULL); + + if (ok) { + valuesCount = valuesArray.GetNumberOfElements(0u); + ok = valuesCount > 0u; + } + if (ok) { + values = new uint32[valuesCount]; + + Vector valuesVector(values, valuesCount); + ok = (data.Read("Values", valuesVector)); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Values shall be defined."); + } + } + return ok; +} + +bool JAConditionalSignalUpdateGAM::Setup() { + using namespace MARTe; + bool ok = numberOfInputSignals == (expectedValuesCount + numberOfOutputSignals); + if (ok) { + inputSignals = new void*[expectedValuesCount]; + defaultValues = new uint32*[numberOfOutputSignals]; + uint32 i; + for (i = 0u; i < expectedValuesCount; i++) { + inputSignals[i] = GetInputSignalMemory(i); + } + for (; i < numberOfInputSignals; i++) { + defaultValues[i - expectedValuesCount] = reinterpret_cast(GetInputSignalMemory(i)); + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Number of input signals shall be equal to number " + "of expected values plus number of output signals."); + } + if (ok) { + inputSignalTypes = new TypeDescriptor[expectedValuesCount]; + uint32 i; + for (i = 0u; (i < expectedValuesCount) && (ok); i++) { + inputSignalTypes[i] = GetSignalType(InputSignals, i); + ok = ((inputSignalTypes[i] == UnsignedInteger32Bit) || (inputSignalTypes[i] == UnsignedInteger16Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, i, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint16", signalName.Buffer()); + } + } + } + if (ok) { + ok = numberOfOutputSignals == valuesCount; + if (ok) { + ok = numberOfOutputSignals > 0u; + if (ok) { + outputSignals = new uint32*[numberOfOutputSignals]; + uint32 i; + for (i = 0u; i < numberOfOutputSignals; i++) { + outputSignals[i] = reinterpret_cast(GetOutputSignalMemory(i)); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one output signal shall be defined"); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Number of output signals shall be the same as " + "number of provided values."); + } + } + + return ok; +} + +bool JAConditionalSignalUpdateGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + needsReset = false; + return true; +} + +bool JAConditionalSignalUpdateGAM::Execute() { + if (!needsReset) { + bool eventDetected = expectedValuesCount == 0; + if (!eventDetected) { + if (operation == Or) { + MARTe::uint32 j; + for (j = 0; (j < expectedValuesCount) && (!eventDetected); j++) { + eventDetected = Compare(j); + } + } + else if (operation == Nor) { + MARTe::uint32 j; + for (j = 0; (j < expectedValuesCount) && (!eventDetected); j++) { + eventDetected = Compare(j); + } + eventDetected = !eventDetected; + } + else if (operation == And) { + MARTe::uint32 j; + eventDetected = Compare(0); + for (j = 1; (j < expectedValuesCount); j++) { + eventDetected &= Compare(j); + } + } + else if (operation == Xor) { + MARTe::uint32 j; + MARTe::uint32 eventDetectedUint32; + if (inputSignalTypes[0] == MARTe::UnsignedInteger32Bit) { + eventDetectedUint32 = *static_cast(inputSignals[0]); + } + else { + eventDetectedUint32 = *static_cast(inputSignals[0]); + } + for (j = 1; (j < expectedValuesCount); j++) { + eventDetectedUint32 ^= Compare(j); + } + eventDetected = (eventDetectedUint32 == 1u); + } + } + if (eventDetected) { + needsReset = true; + MARTe::uint32 i; + for (i = 0u; i < numberOfOutputSignals; ++i) { + *outputSignals[i] = values[i]; + MARTe::StreamString signalName; + (void) GetSignalName(MARTe::OutputSignals, i, signalName); + } + } + else { + MARTe::uint32 i; + for (i = 0u; i < numberOfOutputSignals; ++i) { + *outputSignals[i] = *defaultValues[i]; + } + } + } + return true; +} + +bool JAConditionalSignalUpdateGAM::Compare(MARTe::uint32 index) { + if (inputSignalTypes[index] == MARTe::UnsignedInteger32Bit) { + return Compare(index); + } + return Compare(index); +} + +CLASS_REGISTER(JAConditionalSignalUpdateGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.h b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.h new file mode 100644 index 0000000..2cf5c5d --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.h @@ -0,0 +1,180 @@ +/** + * @file JAConditionalSignalUpdateGAM.h + * @brief Header file for class JAConditionalSignalUpdateGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAConditionalSignalUpdateGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JACONDITIONALSIGNALUPDATEGAM_H_ +#define GAMS_JACONDITIONALSIGNALUPDATEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that writes predefined values to output signals when a condition is met. + * If there are no conditional signals provided, the condition is presumed to be met. + * + * +ASYNCShotlengthControlGAM = { + * Class = JAConditionalSignalUpdateGAM + * Operation = OR // Logical operation performed between conditional signals + * // Supported values: AND, OR, XOR, NOR + * // Default: AND + * ExpectedValues = {1 1} // Values to which conditional signals will be compared. + * Comparators = {EQUALS EQUALS} // Operator between conditional signal an expected value + * // Supported values: EQUALS, NOT, GREATER, EQUALS_OR_GREATER, LESS, EQUALS_OR_LESS + * // Default: EQUALS + * Values = {0 3} // Values that will be written to output signals when condition is met. + * InputSignals = { + * // Conditional Signals + * SHOTLEN_FLAG = { + * DataSource = DDB1 + * Type = uint32 + * } + * MODE_SHOTLEN_FLAG = { + * DataSource = DDB1 + * Type = uint32 + * } + * // Default values (set to output signals before the condition is met) + * APS_SWON = { // APS_SWON will keep the value from previous state. + * DataSource = DDB1 + * Type = uint32 + * } + * BPS_SWON_DEFAULT = { // BPS_SWON will be set to 7 before condition is met. + * DataSource = DDB1 + * Type = uint32 + * Default = 7 + * } + * } + * OutputSignals = { + * APS_SWON = { + * DataSource = DDB1 + * Type = uint32 + * } + * BPS_SWON = { + * DataSource = DDB1 + * Type = uint32 + * } + * } + * } + */ +class JAConditionalSignalUpdateGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAConditionalSignalUpdateGAM(); + + virtual ~JAConditionalSignalUpdateGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + /** + * @brief Does the input signal at provided index have the expected value. + * @param[in] index of the signal. + * @return true if the signal has expected value. + */ + bool Compare(MARTe::uint32 index); + + template + bool Compare(MARTe::uint32 index); + + enum OperationMode { + And, Or, Xor, Nor + }; + + enum ComparisonMode { + Equals, Not, Greater, EqualsOrGreater, Less, EqualsOrLess + }; + + // Input signals + void **inputSignals; + + MARTe::TypeDescriptor *inputSignalTypes; + + // Condition operation. + OperationMode operation; + + // Array of expected values of input signals. + MARTe::uint32* expectedValues; + + // Expected values count (must be equal to numberOfInputSignals) + MARTe::uint32 expectedValuesCount; + + // Array of comparators + ComparisonMode* comparators; + + // Values to be written on output signals when input signal has the expected value. + MARTe::uint32 *values; + + // Number of values (must be equal to numberOfOutputSignals) + MARTe::uint32 valuesCount; + + // Output signals + MARTe::uint32 **outputSignals; + + // Default values of output signals + MARTe::uint32 **defaultValues; + + // Were output signals already set and we are waiting for a state change before they are set again. + bool needsReset; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +template +bool JAConditionalSignalUpdateGAM::Compare(MARTe::uint32 index) { + switch (comparators[index]) { + case Equals: + return *static_cast(inputSignals[index]) == static_cast(expectedValues[index]); + case Not: + return *static_cast(inputSignals[index]) != static_cast(expectedValues[index]); + case Greater: + return *static_cast(inputSignals[index]) > static_cast(expectedValues[index]); + case EqualsOrGreater: + return *static_cast(inputSignals[index]) >= static_cast(expectedValues[index]); + case Less: + return *static_cast(inputSignals[index]) < static_cast(expectedValues[index]); + default: // case EqualsOrLess: + return *static_cast(inputSignals[index]) <= static_cast(expectedValues[index]); + } +} + +#endif /* GAMS_JACONDITIONALSIGNALUPDATEGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/Makefile.inc new file mode 100644 index 0000000..5853027 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/Makefile.inc @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAConditionalSignalUpdateGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAConditionalSignalUpdateGAM$(LIBEXT) \ + $(BUILD_DIR)/JAConditionalSignalUpdateGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAMessageGAM/JAMessageGAM.cpp b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAMessageGAM/JAMessageGAM.cpp new file mode 100644 index 0000000..50ca308 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAMessageGAM/JAMessageGAM.cpp @@ -0,0 +1,347 @@ +/** + * @file JAMessageGAM.cpp + * @brief Source file for class JAMessageGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAMessageGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "JAMessageGAM.h" +#include "MessageI.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +template +bool Compare(JAMessageGAM::ComparisonMode comparator, void *inputSignal, U expectedValue) { + switch (comparator) { + case JAMessageGAM::Equals: + return *static_cast(inputSignal) == expectedValue; + case JAMessageGAM::Not: + return *static_cast(inputSignal) != expectedValue; + case JAMessageGAM::Greater: + return *static_cast(inputSignal) > expectedValue; + case JAMessageGAM::EqualsOrGreater: + return *static_cast(inputSignal) >= expectedValue; + case JAMessageGAM::Less: + return *static_cast(inputSignal) < expectedValue; + default: // case EqualsOrLess: + return *static_cast(inputSignal) <= expectedValue; + } +} + +JAMessageGAM::JAMessageGAM() { + inputSignals = NULL_PTR(void **); + inputSignalTypes = NULL_PTR(MARTe::TypeDescriptor *); + operation = And; + needsReset = false; + expectedValuesInt = NULL_PTR(MARTe::uint64 *); + expectedValuesFloat = NULL_PTR(MARTe::float64 *); + intValuesCount = 0u; + floatValuesCount = 0u; + comparators = NULL_PTR(ComparisonMode *); +} + +JAMessageGAM::~JAMessageGAM() { + if (inputSignals != NULL_PTR(void **)) { + delete[] inputSignals; + } + if (inputSignalTypes != NULL_PTR(MARTe::TypeDescriptor *)) { + delete[] inputSignalTypes; + } + if (expectedValuesInt != NULL_PTR(MARTe::uint64 *)) { + delete[] expectedValuesInt; + } + if (expectedValuesFloat != NULL_PTR(MARTe::float64 *)) { + delete[] expectedValuesFloat; + } + if (comparators != NULL_PTR(ComparisonMode *)) { + delete[] comparators; + } +} + +bool JAMessageGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + // Read expected integer values. + AnyType valuesArray = data.GetType("ExpectedIntValues"); + bool intValuesProvided = (valuesArray.GetDataPointer() != NULL); + + if (intValuesProvided) { + intValuesCount = valuesArray.GetNumberOfElements(0u); + } + if (intValuesProvided) { + expectedValuesInt = new uint64[intValuesCount]; + + Vector valuesVector(expectedValuesInt, intValuesCount); + ok = (data.Read("ExpectedIntValues", valuesVector)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Failed to read ExpectedIntValues."); + return ok; + } + } + // Read expected float values. + valuesArray = data.GetType("ExpectedFloatValues"); + bool floatValuesProvided = (valuesArray.GetDataPointer() != NULL); + + if (floatValuesProvided) { + floatValuesCount = valuesArray.GetNumberOfElements(0u); + } + if (floatValuesProvided) { + expectedValuesFloat = new float64[floatValuesCount]; + + Vector valuesVector(expectedValuesFloat, floatValuesCount); + ok = (data.Read("ExpectedFloatValues", valuesVector)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Failed to read ExpectedFloatValues."); + return ok; + } + } + + ok = (floatValuesCount + intValuesCount) > 0u; + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "ExpectedFloatValues and or ExpectedIntValues shall be defined."); + } + } + if (ok) { + // Read comparators. + AnyType comparatorsArray = data.GetType("Comparators"); + if (comparatorsArray.GetDataPointer() != NULL) { + uint32 count = comparatorsArray.GetNumberOfElements(0u); + ok = count == (intValuesCount + floatValuesCount); + if (ok) { + comparators = new ComparisonMode[count]; + StreamString* comp = new StreamString[count]; + Vector compVector(comp, count); + + ok = (data.Read("Comparators", compVector)); + + if (ok) { + for (uint32 i = 0; i < count; ++i) { + if (comp[i] == "EQUALS") { + comparators[i] = Equals; + } else if (comp[i] == "NOT") { + comparators[i] = Not; + } else if (comp[i] == "GREATER") { + comparators[i] = Greater; + } else if (comp[i] == "EQUALS_OR_GREATER") { + comparators[i] = EqualsOrGreater; + } else if (comp[i] == "LESS") { + comparators[i] = Less; + } else if (comp[i] == "EQUALS_OR_LESS") { + comparators[i] = EqualsOrLess; + } else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Comparator %s is not defined.", comp[i].Buffer()); + } + } + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Expected values and operators shall have the same " + "number of elements."); + } + } else { + uint32 count = intValuesCount + floatValuesCount; + if (ok) { + // Create default comparators (equals) when they aren't provided in the configuration. + comparators = new ComparisonMode[count]; + for (uint32 i = 0; i < count; ++i) { + comparators[i] = Equals; + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Expected values and operators shall have the same " + "number of elements."); + } + } + } + if (ok) { + MARTe::StreamString operationStr; + if (data.Read("Operation", operationStr)) { + if (operationStr == "AND") { + operation = And; + } + else if (operationStr == "OR") { + operation = Or; + } + else if (operationStr == "NOR") { + operation = Nor; + } + else if (operationStr == "XOR") { + operation = Xor; + } + else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Operation %s is not defined", operationStr.Buffer()); + } + } + } + if (ok) { + ok = (Size() == 1); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "A Message object shall be added to this container"); + } + } + if (ok) { + eventMsg = Get(0); + ok = (eventMsg.IsValid()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "A valid Message shall be added to this container"); + } + } + return ok; +} + +bool JAMessageGAM::Setup() { + using namespace MARTe; + bool ok = numberOfInputSignals == (intValuesCount + floatValuesCount); + if (ok) { + ok = numberOfInputSignals > 0u; + if (ok) { + inputSignals = new void*[numberOfInputSignals]; + uint32 i; + for (i = 0u; i < numberOfInputSignals; i++) { + inputSignals[i] = GetInputSignalMemory(i); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one input signal shall be defined"); + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Number of input signals shall be the same as " + "number of expected values."); + } + if (ok) { + inputSignalTypes = new TypeDescriptor[numberOfInputSignals]; + uint32 i; + for (i = 0u; (i < numberOfInputSignals) && (ok); i++) { + TypeDescriptor inputType = GetSignalType(InputSignals, i); + inputSignalTypes[i] = inputType; + ok = (inputType == UnsignedInteger32Bit) || (inputType == SignedInteger32Bit) || + (inputType == UnsignedInteger16Bit) || (inputType == SignedInteger16Bit) || + (inputType == UnsignedInteger8Bit) || (inputType == SignedInteger8Bit) || + (inputType == Float64Bit) || (inputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, i, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "Signal %s shall be defined as 32/16/8 bit signed/unsigned integer " + "or as 64/32 float.", signalName.Buffer()); + } + } + } + + return ok; +} + +bool JAMessageGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + needsReset = false; + return true; +} + +bool JAMessageGAM::Execute() { + using namespace MARTe; + bool ok = true; + bool eventDetected = false; + uint32 inputPortIndex = 0; + uint32 intIndex = 0; + uint32 floatIndex = 0; + if (operation == Or) { + for (inputPortIndex = 0; (inputPortIndex < numberOfInputSignals) && (!eventDetected); inputPortIndex++) { + eventDetected = Compare(inputPortIndex, floatIndex, intIndex); + } + } + else if (operation == Nor) { + for (inputPortIndex = 0; (inputPortIndex < numberOfInputSignals) && (!eventDetected); inputPortIndex++) { + eventDetected = Compare(inputPortIndex, floatIndex, intIndex); + } + eventDetected = !eventDetected; + } + else if (operation == And) { + eventDetected = Compare(0, floatIndex, intIndex); + for (inputPortIndex = 1; (inputPortIndex < numberOfInputSignals); inputPortIndex++) { + eventDetected &= Compare(inputPortIndex, floatIndex, intIndex); + } + } + else if (operation == Xor) { + uint32 eventDetectedUInt32 = Compare(inputPortIndex, floatIndex, intIndex); + for (inputPortIndex = 1; (inputPortIndex < numberOfInputSignals); inputPortIndex++) { + eventDetectedUInt32 ^= Compare(inputPortIndex, floatIndex, intIndex); + } + eventDetected = (eventDetectedUInt32 == 1u); + } + if (eventDetected) { + if (!needsReset) { + ok = (MessageI::SendMessage(eventMsg, this) == ErrorManagement::NoError); + needsReset = true; + } + } + return ok; +} + +bool JAMessageGAM::Compare(MARTe::uint32 inputPortIndex, MARTe::uint32 &floatValueIndex, MARTe::uint32 &intValueIndex) { + using namespace MARTe; + bool ret = false; + if (inputSignalTypes[inputPortIndex] == UnsignedInteger32Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == SignedInteger32Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == UnsignedInteger16Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == SignedInteger16Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == UnsignedInteger8Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == SignedInteger8Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == Float64Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesFloat[floatValueIndex]); + ++floatValueIndex; + } + else { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesFloat[floatValueIndex]); + ++floatValueIndex; + } + return ret; +} + +CLASS_REGISTER(JAMessageGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAMessageGAM/JAMessageGAM.h b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAMessageGAM/JAMessageGAM.h new file mode 100644 index 0000000..0cdb315 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAMessageGAM/JAMessageGAM.h @@ -0,0 +1,149 @@ +/** + * @file JAMessageGAM.h + * @brief Header file for class JAMessageGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAMessageGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAMESSAGEGAM_H_ +#define GAMS_JAMESSAGEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include "Message.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that sends a message when input signals have expected values. Message will not be sent multiple + * times without first changing the application state. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ * +MessageGAM = {
+ *      Class = JAMessageGAM
+ *      Operation = AND // Accepted values are: AND, OR, XOR, NOR. Default value is AND.
+ *      ExpectedIntValues = {1 10} // Expected values for input signals of integral type.
+ *      ExpectedFloatValues = {3.5} // Expected values for float signals of floting point type.
+ *      Comparators = {EQUALS GREATER NOT} // Accepted values are: EQUALS, NOT, GREATER, EQUALS_OR_GREATER, LESS, EQUALS_OR_LESS
+ *                                         // Comparators element is optional. Default comparator is EQUALS.
+ *      InputSignals = {
+ *          Sig1 = {
+ *              DataSource = EPICSCAInput
+ *              Type = uint32
+ *          }
+ *          Sig2 = {
+ *              DataSource = EPICSCAInput
+ *              Type = float32
+ *          }
+ *          Sig3 = {
+ *              DataSource = EPICSCAInput
+ *              Type = uint32
+ *          }
+ *      }
+ *      +Event = { // Message to be sent when condition is true.
+ *          Class = Message
+ *          Destination = StateMachine
+ *          Function = GoDisabled
+ *      }
+ *  }
+ * 
+ * This example will send Event message when Sig1 == 1 && Sig2 > 3.5 && Sig3 != 10 + */ +class JAMessageGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAMessageGAM(); + + virtual ~JAMessageGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + + enum ComparisonMode { + Equals, Not, Greater, EqualsOrGreater, Less, EqualsOrLess + }; + +private: + /** + * @brief Does the input signal at provided index have the expected value. + * @param[in] index of the signal. + * @param[out] floatValueIndex lookup index for expected float values array. + * @param[out] intValueIndex lookup index for expected integer values array. + * @return true if the signal has expected value. + */ + bool Compare(MARTe::uint32 index, MARTe::uint32 &floatValueIndex, MARTe::uint32 &intValueIndex); + + enum OperationMode { + And, Or, Xor, Nor + }; + + // Input signals + void **inputSignals; + + MARTe::TypeDescriptor *inputSignalTypes; + + // Condition operation. + OperationMode operation; + + // Message to be sent when conditions are met. + MARTe::ReferenceT eventMsg; + + // Was the message already sent and we are waiting for a state change before next message can be sent. + bool needsReset; + + // Array of expected integer values of input signals. + MARTe::uint64* expectedValuesInt; + + // Array of expected float values for input signals. + MARTe::float64* expectedValuesFloat; + + // Expected integer values count (must be equal to numberOfInputSignals - floatValuesCount) + MARTe::uint32 intValuesCount; + + // Expected integer values count (must be equal to numberOfInputSignals - floatValuesCount) + MARTe::uint32 floatValuesCount; + + // Array of comparators + ComparisonMode* comparators; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAMESSAGEGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAMessageGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAMessageGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAMessageGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAMessageGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAMessageGAM/Makefile.inc new file mode 100644 index 0000000..e2e2415 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAMessageGAM/Makefile.inc @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAMessageGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAMessageGAM$(LIBEXT) \ + $(BUILD_DIR)/JAMessageGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAModeControlGAM/JAModeControlGAM.cpp b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAModeControlGAM/JAModeControlGAM.cpp new file mode 100644 index 0000000..c55e6d0 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAModeControlGAM/JAModeControlGAM.cpp @@ -0,0 +1,154 @@ +/** + * @file JAModeControlGAM.cpp + * @brief Source file for class JAModeControlGAM + * @date Jan, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAModeControlGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAModeControlGAM.h" +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAModeControlGAM::JAModeControlGAM() { + inputSignals = NULL_PTR(MARTe::uint32 **); + outputSignal = NULL_PTR(MARTe::uint32 *); + pulseLengthLimit = 360000000u; + resetRemainingTime = true; + previousState = 0u; +} + +JAModeControlGAM::~JAModeControlGAM() { + if (inputSignals != NULL_PTR(MARTe::uint32 **)) { + delete[] inputSignals; + } +} + +bool JAModeControlGAM::Initialise(MARTe::StructuredDataI & data) { + /* read hard coded on cfg file parameter values by using key name. */ + using namespace MARTe; + return GAM::Initialise(data); +} + +bool JAModeControlGAM::Setup() { + /* read GAM Input signal */ + using namespace MARTe; + /* read 4 mode bits and 4 shot length limit values */ + + bool ok = numberOfInputSignals == 11; + if (ok) { + uint32 i; + for (i = 0u; (i < numberOfInputSignals) && (ok); i++) { + TypeDescriptor inputType = GetSignalType(InputSignals, i); + ok = inputType == UnsignedInteger32Bit; + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, i, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "InputSignel %s shall be defined as uint32", signalName.Buffer()); + } + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Eleven input signals shall be defined."); + } + if (ok) { + ok = numberOfOutputSignals == 1; + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "One output signal shall be defined."); + } + else { + TypeDescriptor type = GetSignalType(OutputSignals, 0); + ok = type == UnsignedInteger32Bit; + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, 0, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + inputSignals = new uint32*[numberOfInputSignals]; + uint32 i; + for (i = 0u; i < 11; i++) { + inputSignals[i] = reinterpret_cast(GetInputSignalMemory(i)); + } + } + return ok; +} + +bool JAModeControlGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + *outputSignal = 0u; + previousState = 0u; + resetRemainingTime = true; + return true; +} + +bool JAModeControlGAM::Execute() { + using namespace MARTe; + //When RT state goes to RFON state, update the limit. + if(previousState == 0u && *inputSignals[8] == 1u && resetRemainingTime) { + rfonTime = *inputSignals[9]; + resetRemainingTime = false; + pulseLengthLimit = CalcPulseLengthLimit(inputSignals); + REPORT_ERROR(ErrorManagement::Debug, "Pulse Length was set to Limit:%d", pulseLengthLimit); + } + // Turn on the flag during RFON if the pulse legth over the limit. + if ((*inputSignals[9] - rfonTime <= pulseLengthLimit) && (previousState == 1u)) { + *outputSignal = 0u; + return true; + } else if(*inputSignals[9] == 1u){ + resetRemainingTime = true; + *outputSignal = 1u; + } + + previousState = *inputSignals[8]; + return true; +} + + +MARTe::uint32 JAModeControlGAM::CalcPulseLengthLimit(MARTe::uint32 **inputSignals) { + if (*inputSignals[0] == 1) { + return *inputSignals[1]; + } else if (*inputSignals[2] == 1) { + return *inputSignals[3]; + } else if (*inputSignals[4] == 1) { + return *inputSignals[5]; + } else if (*inputSignals[6] == 1) { + return *inputSignals[7]; + } else { + return 3600000000;//us + } +} + + +CLASS_REGISTER(JAModeControlGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAModeControlGAM/JAModeControlGAM.h b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAModeControlGAM/JAModeControlGAM.h new file mode 100644 index 0000000..e9041ce --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAModeControlGAM/JAModeControlGAM.h @@ -0,0 +1,149 @@ +/** + * @file JAModeControlGAM.h + * @brief Header file for class JAModeControlGAM + * @date Jan, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAModeControlGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAMODECONTROLGAM_H_ +#define GAMS_JAMODECONTROLGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that check the pulse lenght limit. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +ModeLimitGAM = {
+ *           Class = JAModeControlGAM
+ *           InputSignals = {
+ *               PLC_MODE1 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD1_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               PLC_MODE2 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD2_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               PLC_MODE3 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD3_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               PLC_MODE4 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD4_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               HVInjection = {
+ *               	DataSource = RealTimeThreadAsyncBridge
+ *               	Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * If MODE1 is ON and Time is exceed MD1_SHOTLEN_LIM, MODE_SHOTLEN_FLAG become ON. + */ + +class JAModeControlGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAModeControlGAM(); + + virtual ~JAModeControlGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + + MARTe::uint32 CalcPulseLengthLimit(MARTe::uint32 **inputSignals); + + // Input signals + MARTe::uint32 **inputSignals; + + // Output signals + MARTe::uint32 *outputSignal; + + // Calculated pulse lenght limit. + MARTe::uint32 pulseLengthLimit; + + // Amount of time passed per execution cycle. + MARTe::uint32 rfonTime; + + // reset flag + bool resetRemainingTime; + MARTe::uint32 previousState; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAMODECONTROLGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAModeControlGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAModeControlGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAModeControlGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAModeControlGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAModeControlGAM/Makefile.inc new file mode 100644 index 0000000..2654a66 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAModeControlGAM/Makefile.inc @@ -0,0 +1,52 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAModeControlGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAModeControlGAM$(LIBEXT) \ + $(BUILD_DIR)/JAModeControlGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.cpp b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.cpp new file mode 100644 index 0000000..06de1df --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.cpp @@ -0,0 +1,460 @@ +/** + * @file JAPreProgrammedGAM.cpp + * @brief Source file for class JAPreProgrammedGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAPreProgrammedGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "CLASSMETHODREGISTER.h" +#include "File.h" +#include "JAPreProgrammedGAM.h" +#include "MessageI.h" +#include "RegisteredMethodsMessageFilter.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +// How often output signals are updated. +const MARTe::uint32 cycleMs = 10u; + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAPreProgrammedGAM::JAPreProgrammedGAM() : + GAM() { + using namespace MARTe; + filenameSignalIndex = 0u; + timeSignal = NULL_PTR(MARTe::int32 *); + loadTriggerSignal = NULL_PTR(MARTe::uint32 *); + fhpsrefSignal = NULL_PTR(MARTe::float32 *); + rfonStateSignal = NULL_PTR(MARTe::uint32 *); + + valueSignals = NULL_PTR(MARTe::float32 **); + preProgrammedValues = NULL_PTR(MARTe::float32 **); + preProgrammedTime = NULL_PTR(MARTe::int32 *); + fileLoadedSignal = NULL_PTR(MARTe::uint32 *); + fileLoadErrorOutput = NULL_PTR(MARTe::uint32 *); + + startTime = 0u; + numberOfPreProgrammedValues = 0u; + numberOfPreProgrammedTimeRows = 0u; + currentRow = 0u; + mode = None; + preProgrammedExecutaionPeriodMs = 0u; + msCounter = 0u; + preProgrammedRow = 0u; + resetOutputSignals = false; + readOnce = true; +} + +JAPreProgrammedGAM::~JAPreProgrammedGAM() { + DeleteArrays(); + if (valueSignals != NULL_PTR(MARTe::float32 **)) { + delete[] valueSignals; + } +} + +bool JAPreProgrammedGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("Directory", directory); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Directory shall be specified"); + } + } + if (ok) { + ok = data.Read("PreProgrammedPeriodMs", preProgrammedExecutaionPeriodMs); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Directory shall be specified"); + } + } + return ok; +} + +bool JAPreProgrammedGAM::Setup() { + using namespace MARTe; + //Signal number check. + bool ok = (numberOfInputSignals == 4u); + if (ok) { + ok = (numberOfOutputSignals > 2u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "At least two output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Four input signals with the filename and file load trigger shall be defined"); + } + //Input signals type consistency check. + if (ok) { + StreamString signalName = "Filename"; + ok = GetSignalIndex(InputSignals, filenameSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Filename input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, filenameSignalIndex); + ok = (inputType == CharString); + if (!ok) { + ok = (inputType == Character8Bit); + } + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, filenameSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as string", signalName.Buffer()); + } + } + } + if (ok) { + StreamString signalName = "CSV_LOAD"; + uint32 loadSignalIndex; + ok = GetSignalIndex(InputSignals, loadSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "CSV_LOAD input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, loadSignalIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, loadSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } else { + loadTriggerSignal = reinterpret_cast(GetInputSignalMemory(loadSignalIndex)); + } + } + } + if (ok) { + StreamString signalName = "FHPS_REF"; + uint32 fhpsrefIndex; + ok = GetSignalIndex(InputSignals, fhpsrefIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "FHPS_REF input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, fhpsrefIndex); + ok = (inputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, fhpsrefIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } else { + fhpsrefSignal = reinterpret_cast(GetInputSignalMemory(fhpsrefIndex)); + } + } + } + if (ok) { + StreamString signalName = "RFON"; + uint32 rfonIndex; + ok = GetSignalIndex(InputSignals, rfonIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "RFON input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, rfonIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, rfonIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } else { + rfonStateSignal = reinterpret_cast(GetInputSignalMemory(rfonIndex)); + } + } + } + + //Output signals type check. + if (ok) { + TypeDescriptor timeType = GetSignalType(OutputSignals, 0); + ok = (timeType == SignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, 0, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as int32", signalName.Buffer()); + } + + uint32 i; + for (i = 1u; (i <= 6) && (ok); i++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, i); + ok = (outputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, i, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } + } + + if (ok) { + TypeDescriptor fileLoadedType = GetSignalType(OutputSignals, 7u); + ok = (fileLoadedType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, 6u, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + if (ok) { + TypeDescriptor fileLoadErrorOutputType = GetSignalType(OutputSignals, 8u); + ok = (fileLoadErrorOutputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, 7u, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + + //Register signal memory + if (ok) { + timeSignal = reinterpret_cast(GetOutputSignalMemory(0)); + valueSignals = new float32*[6u]; + uint32 i; + for (i = 1u; i <= 6u; i++) { + valueSignals[i - 1] = reinterpret_cast(GetOutputSignalMemory(i)); + } + fileLoadedSignal = reinterpret_cast(GetOutputSignalMemory(7u)); + fileLoadErrorOutput = reinterpret_cast(GetOutputSignalMemory(8u)); + } + return ok; +} + +bool JAPreProgrammedGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + bool ok = true; + if (strcmp(nextStateName, "WaitReady") == 0) { + mode = LoadFileMode; + resetOutputSignals = true; + // Reset read once flag when reentering WaitReady state. + readOnce = true; + } else if (strcmp(nextStateName, "WaitPermit") == 0) { + mode = LoadFileMode; + resetOutputSignals = true; + currentRow = 0u; + } else if (strcmp(nextStateName, "WaitHVON_PREP") == 0 || strcmp(nextStateName, "WaitHVON_SDN_PREP") == 0) { + ok = numberOfPreProgrammedTimeRows > 0; + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::IllegalOperation, "Entering PreProgrammed mode without any waveform data."); + } + mode = PreProgrammedMode; + msCounter = cycleMs; + currentRow = 0u; + } else { + mode = None; + } + return ok; +} + +bool JAPreProgrammedGAM::LoadFile() { + using namespace MARTe; + + DeleteArrays(); + + bool ok = true; + + const MARTe::char8 * const filenameSignal = reinterpret_cast(GetInputSignalMemory(filenameSignalIndex)); + //Prepare full path to the configuration file. + StreamString filename = directory; + filename += DIRECTORY_SEPARATOR; + filename += filenameSignal; + REPORT_ERROR(MARTe::ErrorManagement::Debug, "Opening file %s", filename.Buffer()); + + //parse prepro configuration file into two arrays(time, values). + File f; + ok = f.Open(filename.Buffer(), BasicFile::ACCESS_MODE_R); + if (ok) { + //Count up number of file Rows. + numberOfPreProgrammedTimeRows = 0u; + StreamString tokenLine; + while (f.GetLine(tokenLine)) { + if (tokenLine[0] != '#' && tokenLine[0] != '-') { + numberOfPreProgrammedTimeRows++; + } + tokenLine = ""; + } + //Count up number of file lines + numberOfPreProgrammedValues = 0u; + f.Seek(0); + uint32 t = 0u; + tokenLine = ""; + while ((ok) && (f.GetLine(tokenLine))) { + // Skip comment line and minus time + if (tokenLine[0] == '#' || tokenLine[0] == '-') { + tokenLine = ""; + continue; + } + // Prepare two arrays at first. + if (numberOfPreProgrammedValues == 0) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + while (tokenLine.GetToken(token, ",", ignored)) { + numberOfPreProgrammedValues++; + token = ""; + } +REPORT_ERROR(MARTe::ErrorManagement::ParametersError,"numberOfPreProgrammedVal %d", numberOfPreProgrammedValues); + ok = (numberOfPreProgrammedValues == 7u);//From time row to FHPS row. + numberOfPreProgrammedValues -= 1u; //From MHVPS row to FHPS row. + if (ok) { + preProgrammedTime = new int32[numberOfPreProgrammedTimeRows]; + preProgrammedValues = new float32*[numberOfPreProgrammedTimeRows]; + uint32 j; + for (j = 0u; j < numberOfPreProgrammedTimeRows; j++) { + preProgrammedValues[j] = new float32[numberOfPreProgrammedValues]; + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, + "Number of columns in csv file (%d) is not consistent with the number of output signals (%d)", + numberOfPreProgrammedValues, 6u); + *fileLoadErrorOutput = 1; + } + } + // Add loaded data into two arrays. + if (ok) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + uint32 idx = 0u; + while (tokenLine.GetToken(token, ",", ignored)) { + if (idx == 0u) { + preProgrammedTime[t] = atoi(token.Buffer()); + if (t == 0 && preProgrammedTime[0] != 0) { + REPORT_ERROR(MARTe::ErrorManagement::Debug, "Prepro start from none zero time."); + } + } + else { + ok = ((idx - 1) < numberOfPreProgrammedValues); + if (ok) { + preProgrammedValues[t][idx - 1] = static_cast(atof(token.Buffer())); + } + else { + REPORT_ERROR(MARTe::ErrorManagement::FatalError, "Number of columns in csv file is not consistent with the number of output signals in line %d", t); + *fileLoadErrorOutput = 1; + } + } + token = ""; + idx++; + } + t++; + } + tokenLine = ""; + } + f.Close(); + } + if (ok) { + currentRow = 0u; + } + else { + numberOfPreProgrammedTimeRows = 0u; + REPORT_ERROR(ErrorManagement::Warning, "Failed to read waveform data from file."); + *fileLoadErrorOutput = 2; + } + return ok; +} + +bool JAPreProgrammedGAM::Execute() { + using namespace MARTe; + bool ok = true; + + switch (mode) { + case LoadFileMode: { + if (*loadTriggerSignal == 1u) { + if (readOnce) { + *fileLoadErrorOutput = 0; + *fileLoadedSignal = LoadFile() ? 1 : 0; + readOnce = false; + } + } else { + // Reset read once flag when loadTriggerSignal is reset. + readOnce = true; + } + + if (resetOutputSignals) { + // Write default values to output signals + *timeSignal = 0u; + *valueSignals[FHPS-1] = *fhpsrefSignal; + resetOutputSignals = false; + } else { + *valueSignals[FHPS-1] = *fhpsrefSignal; //copy input(2) to val_arr(4) + } + } break; + + case PreProgrammedMode: { + ok = numberOfPreProgrammedTimeRows > 0; + + //add 20210105. Before RFON, prepro setpoints should be same as the values listed at csv first line. + if (ok && *rfonStateSignal == 0) { + uint32 j; + for (j = 0u; j < FHPS; j++) { + *valueSignals[j] = preProgrammedValues[0][j]; + } + } + //end 20210105 + + if (ok && currentRow < numberOfPreProgrammedTimeRows && *rfonStateSignal == 1) { + if (msCounter >= cycleMs) { + msCounter -= cycleMs; + int32 currentTime = preProgrammedTime[currentRow]; + //REPORT_ERROR(MARTe::ErrorManagement::Debug, "Write Time at %d",currentRow); + // Write to output signals + *timeSignal = currentTime; + uint32 j; + for (j = 0u; j < FHPS; j++) { + *valueSignals[j] = preProgrammedValues[currentRow][j]; + //REPORT_ERROR(MARTe::ErrorManagement::Debug, "Write Value %f at row %d",preProgrammedValues[currentRow][j], currentRow); + } + //REPORT_ERROR(MARTe::ErrorManagement::Debug, "Writing pre programmed data for time %d", currentTime); + + // Update row + ++currentRow; + } + msCounter += preProgrammedExecutaionPeriodMs; + } + } break; + default: + // Nothing to do. + REPORT_ERROR(MARTe::ErrorManagement::Warning, "Unhandled mode."); + break; + } + return ok; +} + +void JAPreProgrammedGAM::DeleteArrays() { + if (preProgrammedValues != NULL_PTR(MARTe::float32 **)) { + MARTe::uint32 i; + for (i = 0u; i < numberOfPreProgrammedValues; i++) { + delete preProgrammedValues[i]; + } + delete[] preProgrammedValues; + } + if (preProgrammedTime != NULL_PTR(MARTe::int32 *)) { + delete[] preProgrammedTime; + } +} + +CLASS_REGISTER(JAPreProgrammedGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.h b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.h new file mode 100644 index 0000000..4226fef --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.h @@ -0,0 +1,187 @@ +/** + * @file JAPreProgrammedGAM.h + * @brief Header file for class JAPreProgrammedGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAPreProgrammedGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAPREPROGRAMMEDGAM_H_ +#define GAMS_JAPREPROGRAMMEDGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "GAM.h" +#include "Message.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that update PS output value for pre-programmed operation. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +PreProgrammedGAM = {
+ *           Class = JAPreProgrammedGAM
+ *           Directory = "../Configurations" // Directory which has pre-pro configuration file.
+ *           PreProgrammedPeriodMs = 1       // RFON state is executed every millisecond.
+ *           InputSignals = {
+ *               CSV_LOAD = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               Filename = {
+ *                   Alias = CSV_NAME
+ *                   DataSource = EPICSCAInput
+ *               }
+ *               FHPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               GYA_PREHEAT_TIME = {
+ *                   DataSource = DDB1
+ *                   Type = int32
+ *               }
+ *               MHVPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               BPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               APS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               MCPS_TRG_CURR_SET = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               GCPS_TRG_CURR_SET = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               FHPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               CSV_LOADED = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               CSV_ERR = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * + */ + +class JAPreProgrammedGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAPreProgrammedGAM(); + + virtual ~JAPreProgrammedGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + bool LoadFile(); + + void DeleteArrays(); + + //Parameters + MARTe::StreamString directory; //Location for prepro configuration file. + MARTe::uint32 preProgrammedExecutaionPeriodMs; // Time between to execution cycles in milliseconds in pre-programmed mode. + + //Input Signals + MARTe::uint32 *loadTriggerSignal; //index:0 + MARTe::uint32 filenameSignalIndex;//index:1 + MARTe::float32 *fhpsrefSignal; //index:2 + MARTe::uint32 *rfonStateSignal; //index:3 + + //Output Signals + MARTe::int32 *timeSignal; //index:0 + MARTe::float32 **valueSignals; //index:1-5 = BPS,APS,MC,GC,FHPS + MARTe::uint32 *fileLoadedSignal; //index:6 + MARTe::uint32 *fileLoadErrorOutput;//index:7 + + //Internal variables + MARTe::int32 *preProgrammedTime; + MARTe::float32 **preProgrammedValues; + + MARTe::uint32 startTime; + + //Number of columns in csv, EXCLUDING the time + MARTe::uint32 numberOfPreProgrammedValues; //is 5.(BPS, APS, MC, GC, FHPS) + MARTe::uint32 numberOfPreProgrammedTimeRows; //This start from t=0 row. + MARTe::uint32 currentRow; + + // Number of milliseconds since the last time output signals were updated. + MARTe::uint32 msCounter; + + // Row number where the pre-programmed data begins (time == 0). + MARTe::uint32 preProgrammedRow; + + enum OperationMode { + LoadFileMode, PreProgrammedMode, None + }; + enum PreProTableDefinition { + Time, MHVPS, BPS, APS, MCPS, GCPS, FHPS + }; + + OperationMode mode; + + bool resetOutputSignals; + + // Flag determining whether file should be read (so it isn't read multiple time) + bool readOnce; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAPREPROGRAMMEDGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAPreProgrammedGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAPreProgrammedGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAPreProgrammedGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAPreProgrammedGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAPreProgrammedGAM/Makefile.inc new file mode 100644 index 0000000..587d4b8 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAPreProgrammedGAM/Makefile.inc @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAPreProgrammedGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAPreProgrammedGAM$(LIBEXT) \ + $(BUILD_DIR)/JAPreProgrammedGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.cpp b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.cpp new file mode 100644 index 0000000..56f9b18 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.cpp @@ -0,0 +1,411 @@ +/** + * @file JARTStateMachineGAM.cpp + * @brief Source file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JARTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +static MARTe::uint64 getCurrentTimeUs() { + using namespace MARTe; + return static_cast(HighResolutionTimer::Counter() * HighResolutionTimer::Period() * 1e6f + 0.5f); +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARTStateMachineGAM::JARTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + turn_off_delay = 2000; //us + + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + short_pulse_mode = NULL_PTR(MARTe::uint32 *); + + modulation = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + + apsSwonHighResolutionTime = 0; + + aps_hvon_state=0; + aps_swon_state=0; + mhvps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; +} + +JARTStateMachineGAM::~JARTStateMachineGAM() { +} + +bool JARTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JARTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JARTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 12u); + if (ok) { + ok = (numberOfOutputSignals == 16u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined %d",numberOfOutputSignals); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(10)); + modulation = reinterpret_cast(GetInputSignalMemory(11)); + + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + + outputAPSHVON = reinterpret_cast(GetOutputSignalMemory(8)); + outputAPSSWON = reinterpret_cast(GetOutputSignalMemory(9)); + outputBPSHVON = reinterpret_cast(GetOutputSignalMemory(10)); + outputBPSSWON = reinterpret_cast(GetOutputSignalMemory(11)); + outputMHVPSON = reinterpret_cast(GetOutputSignalMemory(12)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(13)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(14)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(15)); + + *shotCounter = 0; + } + return ok; +} + +bool JARTStateMachineGAM::Execute() { + using namespace MARTe; + + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + //REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence at %d.", *currentTime); + plcOnTime = *currentTime; //Save pulse start time. + //*outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS; + } + } + else if (currentState == SwitchingHVPS) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; bps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + *outputBPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; aps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal at %d.", *currentTime); + *outputAPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; bps_swon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + *outputBPSSWON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; mhvps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + *outputMHVPSON=1; + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (plcOnTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; aps_swon_state=1; + apsSwonHighResolutionTime = getCurrentTimeUs(); + apsSwonTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + *outputAPSSWON=1; + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 1; + } + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 1; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *outputBeamON = 1; + *shotCounter += 1; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //Action in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + //debug + //if((*stopRequest != 0)){ + //REPORT_ERROR(ErrorManagement::Debug, "Stop request was called.!!!"); + //} else { + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset.!!!"); + //} + *outputSignal -= aps_swon; + mhvps_hvon_is_on = false; mhvps_hvon_state=0; + aps_hvon_is_on = false; aps_hvon_state=0; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; bps_hvon_state=0; + bps_swon_is_on = false; bps_swon_state=0; + currentState = HVTerminate; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + } + uint32 updatePeriod = 100; // in microsecnds (get this from Timer) + if ((*modePulseLengthLimit == 1u) || (getCurrentTimeUs() + updatePeriod >= (apsSwonHighResolutionTime + *triggerDelay_shotlen))) { + + // Now we do busy wait + while (getCurrentTimeUs() < (apsSwonHighResolutionTime + *triggerDelay_shotlen)) { + //REPORT_ERROR(ErrorManagement::Debug, "!"); + } + // We stop busy waiting #executionOverhead before expected pulse off time + //debug + //if((*modePulseLengthLimit == 1u)){ + // REPORT_ERROR(ErrorManagement::Debug, "Mode limit detected.!!!"); + //} else { + // REPORT_ERROR(ErrorManagement::Debug, "Shot length reached to the setpoint.!!!"); + //} + //debug end. + //Do action + *outputSignal -= aps_swon; //Turn off only APS_SWON first. + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; + bps_swon_is_on = false; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + //REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 1; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + //In the HVTerminate state, turn APS_SWON off first, and wait 1ms. Finally turn other PS off. + //Action in this state. + *outputBeamON = 0; + *outputHVArmed = 0; + *outputHVInjection = 0; + *outputRFON = 0; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + mhvps_hvon_state=0; + aps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset. The State was changed to WaitTrigger at %d.", *currentTime); + } + } + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6259 = 1*aps_swon_state; + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + if (modulation) { + p4Value = 8*mhvps_hvon_state + 32; + } + else { + p4Value = 8*mhvps_hvon_state; + } + //*outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + *outputSignalNI6528P4 = ~p4Value; + return true; +} + +CLASS_REGISTER(JARTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.h b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.h new file mode 100644 index 0000000..e968f39 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.h @@ -0,0 +1,262 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARTSTATEMACHINEGAM_H_ +#define GAMS_JARTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that provides real-time state machine. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMRealTimeStateMachine = {
+ *           Class = JARTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BEAM_ON_STAT = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JARTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARTStateMachineGAM(); + + virtual ~JARTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS = 1, + RFON = 2, + HVTerminate = 3 + }; + + //The current rtState + JARealTimeState currentState; + + //A given condition + MARTe::uint32 conditionTrigger; + + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + + //Time signal + MARTe::uint32 *currentTime; + + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for short pulse mode. + MARTe::uint32 *short_pulse_mode; + // Input signal for modulation pv. + MARTe::uint32 *modulation; + + // Output signal to which the output value will be written. + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + // Added for HVPS state (20201117) + MARTe::uint32 *outputAPSHVON; + MARTe::uint32 *outputAPSSWON; + MARTe::uint32 *outputBPSHVON; + MARTe::uint32 *outputBPSSWON; + MARTe::uint32 *outputMHVPSON; + + // Output signals for NI devices + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + MARTe::uint64 apsSwonHighResolutionTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + + // terminal values + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.cpp b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.cpp new file mode 100644 index 0000000..55983f1 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.cpp @@ -0,0 +1,409 @@ +/** + * @file JARTStateMachineGAM.cpp + * @brief Source file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JARTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +static MARTe::uint64 getCurrentTimeUs() { + using namespace MARTe; + return static_cast(HighResolutionTimer::Counter() * HighResolutionTimer::Period() * 1e6f + 0.5f); +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARTStateMachineGAM::JARTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + turn_off_delay = 2000; //us + + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + short_pulse_mode = NULL_PTR(MARTe::uint32 *); + + modulation = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + + apsSwonHighResolutionTime = 0; + + aps_hvon_state=0; + aps_swon_state=0; + mhvps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; +} + +JARTStateMachineGAM::~JARTStateMachineGAM() { +} + +bool JARTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JARTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JARTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 13u); + if (ok) { + ok = (numberOfOutputSignals == 16u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined %d",numberOfOutputSignals); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(10)); + modulation = reinterpret_cast(GetInputSignalMemory(11)); + pauseSet = reinterpret_cast(GetInputSignalMemory(12)); + + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + + outputAPSHVON = reinterpret_cast(GetOutputSignalMemory(8)); + outputAPSSWON = reinterpret_cast(GetOutputSignalMemory(9)); + outputBPSHVON = reinterpret_cast(GetOutputSignalMemory(10)); + outputBPSSWON = reinterpret_cast(GetOutputSignalMemory(11)); + outputMHVPSON = reinterpret_cast(GetOutputSignalMemory(12)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(13)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(14)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(15)); + + *shotCounter = 0; + } + return ok; +} + +bool JARTStateMachineGAM::Execute() { + using namespace MARTe; + + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + //REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence at %d.", *currentTime); + plcOnTime = *currentTime; //Save pulse start time. + //*outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS; + } + } + else if (currentState == SwitchingHVPS) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; bps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + *outputBPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; aps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal at %d.", *currentTime); + *outputAPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; bps_swon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + *outputBPSSWON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; mhvps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + *outputMHVPSON=1; + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (plcOnTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; aps_swon_state=1; + apsSwonHighResolutionTime = getCurrentTimeUs(); + apsSwonTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + *outputAPSSWON=1; + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 1; + } + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 1; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *outputBeamON = 1; + *shotCounter += 1; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //Action in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + //debug + //if((*stopRequest != 0)){ + //REPORT_ERROR(ErrorManagement::Debug, "Stop request was called.!!!"); + //} else { + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset.!!!"); + //} + *outputSignal -= aps_swon; + mhvps_hvon_is_on = false; mhvps_hvon_state=0; + aps_hvon_is_on = false; aps_hvon_state=0; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; bps_hvon_state=0; + bps_swon_is_on = false; bps_swon_state=0; + currentState = HVTerminate; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + } + uint32 updatePeriod = 100; // in microsecnds (get this from Timer) + if ((*modePulseLengthLimit == 1u) || (getCurrentTimeUs() + updatePeriod >= (apsSwonHighResolutionTime + *triggerDelay_shotlen))) { + + // Now we do busy wait + while (getCurrentTimeUs() < (apsSwonHighResolutionTime + *triggerDelay_shotlen)) { + //REPORT_ERROR(ErrorManagement::Debug, "!"); + } + // We stop busy waiting #executionOverhead before expected pulse off time + //debug + //if((*modePulseLengthLimit == 1u)){ + // REPORT_ERROR(ErrorManagement::Debug, "Mode limit detected.!!!"); + //} else { + // REPORT_ERROR(ErrorManagement::Debug, "Shot length reached to the setpoint.!!!"); + //} + //debug end. + //Do action + *outputSignal -= aps_swon; //Turn off only APS_SWON first. + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; + bps_swon_is_on = false; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + //REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 1; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + //In the HVTerminate state, turn APS_SWON off first, and wait 1ms. Finally turn other PS off. + //Action in this state. + *outputBeamON = 0; + *outputHVArmed = 0; + *outputHVInjection = 0; + *outputRFON = 0; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + mhvps_hvon_state=0; + aps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset. The State was changed to WaitTrigger at %d.", *currentTime); + } + } + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6259 = 1*aps_swon_state; + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + p4Value = 8*mhvps_hvon_state; + if (modulation) p4Value += 32; + if (pauseSet) p4Value += 1; + //*outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + *outputSignalNI6528P4 = ~p4Value; + return true; +} + +CLASS_REGISTER(JARTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.h b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.h new file mode 100644 index 0000000..876d64e --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.h @@ -0,0 +1,264 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARTSTATEMACHINEGAM_H_ +#define GAMS_JARTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that provides real-time state machine. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMRealTimeStateMachine = {
+ *           Class = JARTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BEAM_ON_STAT = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JARTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARTStateMachineGAM(); + + virtual ~JARTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS = 1, + RFON = 2, + HVTerminate = 3 + }; + + //The current rtState + JARealTimeState currentState; + + //A given condition + MARTe::uint32 conditionTrigger; + + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + + //Time signal + MARTe::uint32 *currentTime; + + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for short pulse mode. + MARTe::uint32 *short_pulse_mode; + // Input signal for modulation pv. + MARTe::uint32 *modulation; + // Input signal for pause signal set pv. + MARTe::uint32 *pauseSet; + + // Output signal to which the output value will be written. + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + // Added for HVPS state (20201117) + MARTe::uint32 *outputAPSHVON; + MARTe::uint32 *outputAPSSWON; + MARTe::uint32 *outputBPSHVON; + MARTe::uint32 *outputBPSSWON; + MARTe::uint32 *outputMHVPSON; + + // Output signals for NI devices + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + MARTe::uint64 apsSwonHighResolutionTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + + // terminal values + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.cpp b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.cpp new file mode 100644 index 0000000..71c7669 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.cpp @@ -0,0 +1,402 @@ +/** + * @file JARTStateMachineGAM.cpp + * @brief Source file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JARTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +static MARTe::uint64 getCurrentTimeUs() { + using namespace MARTe; + return static_cast(HighResolutionTimer::Counter() * HighResolutionTimer::Period() * 1e6f + 0.5f); +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARTStateMachineGAM::JARTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + turn_off_delay = 2000; //us + + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + + apsSwonHighResolutionTime = 0; + + aps_hvon_state=0; + aps_swon_state=0; + mhvps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; +} + +JARTStateMachineGAM::~JARTStateMachineGAM() { +} + +bool JARTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JARTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JARTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 11u); + if (ok) { + ok = (numberOfOutputSignals == 16u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined %d",numberOfOutputSignals); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(10)); + + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + + outputAPSHVON = reinterpret_cast(GetOutputSignalMemory(8)); + outputAPSSWON = reinterpret_cast(GetOutputSignalMemory(9)); + outputBPSHVON = reinterpret_cast(GetOutputSignalMemory(10)); + outputBPSSWON = reinterpret_cast(GetOutputSignalMemory(11)); + outputMHVPSON = reinterpret_cast(GetOutputSignalMemory(12)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(13)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(14)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(15)); + + *shotCounter = 0; + } + return ok; +} + +bool JARTStateMachineGAM::Execute() { + using namespace MARTe; + + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + //REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence at %d.", *currentTime); + plcOnTime = *currentTime; //Save pulse start time. + //*outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS; + } + } + else if (currentState == SwitchingHVPS) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; bps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + *outputBPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; aps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal at %d.", *currentTime); + *outputAPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; bps_swon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + *outputBPSSWON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; mhvps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + *outputMHVPSON=1; + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (plcOnTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; aps_swon_state=1; + apsSwonHighResolutionTime = getCurrentTimeUs(); + apsSwonTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + *outputAPSSWON=1; + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 1; + } + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 1; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *outputBeamON = 1; + *shotCounter += 1; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //Action in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + //debug + //if((*stopRequest != 0)){ + //REPORT_ERROR(ErrorManagement::Debug, "Stop request was called.!!!"); + //} else { + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset.!!!"); + //} + *outputSignal -= aps_swon; + mhvps_hvon_is_on = false; mhvps_hvon_state=0; + aps_hvon_is_on = false; aps_hvon_state=0; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; bps_hvon_state=0; + bps_swon_is_on = false; bps_swon_state=0; + currentState = HVTerminate; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + } + uint32 updatePeriod = 100; // in microsecnds (get this from Timer) + if ((*modePulseLengthLimit == 1u) || (getCurrentTimeUs() + updatePeriod >= (apsSwonHighResolutionTime + *triggerDelay_shotlen))) { + + // Now we do busy wait + while (getCurrentTimeUs() < (apsSwonHighResolutionTime + *triggerDelay_shotlen)) { + //REPORT_ERROR(ErrorManagement::Debug, "!"); + } + // We stop busy waiting #executionOverhead before expected pulse off time + //debug + //if((*modePulseLengthLimit == 1u)){ + // REPORT_ERROR(ErrorManagement::Debug, "Mode limit detected.!!!"); + //} else { + // REPORT_ERROR(ErrorManagement::Debug, "Shot length reached to the setpoint.!!!"); + //} + //debug end. + //Do action + *outputSignal -= aps_swon; //Turn off only APS_SWON first. + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; + bps_swon_is_on = false; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + //REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 1; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + //In the HVTerminate state, turn APS_SWON off first, and wait 1ms. Finally turn other PS off. + //Action in this state. + *outputBeamON = 0; + *outputHVArmed = 0; + *outputHVInjection = 0; + *outputRFON = 0; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + mhvps_hvon_state=0; + aps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset. The State was changed to WaitTrigger at %d.", *currentTime); + } + } + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6259 = 1*aps_swon_state; + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + p4Value = 8*mhvps_hvon_state; + //*outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + *outputSignalNI6528P4 = ~p4Value; + return true; +} + +CLASS_REGISTER(JARTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.h b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.h new file mode 100644 index 0000000..e59f3fa --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.h @@ -0,0 +1,260 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARTSTATEMACHINEGAM_H_ +#define GAMS_JARTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that provides real-time state machine. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMRealTimeStateMachine = {
+ *           Class = JARTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BEAM_ON_STAT = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JARTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARTStateMachineGAM(); + + virtual ~JARTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS = 1, + RFON = 2, + HVTerminate = 3 + }; + + //The current rtState + JARealTimeState currentState; + + //A given condition + MARTe::uint32 conditionTrigger; + + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + + //Time signal + MARTe::uint32 *currentTime; + + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for short pulse mode. + MARTe::uint32 *short_pulse_mode; + + // Output signal to which the output value will be written. + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + // Added for HVPS state (20201117) + MARTe::uint32 *outputAPSHVON; + MARTe::uint32 *outputAPSSWON; + MARTe::uint32 *outputBPSHVON; + MARTe::uint32 *outputBPSSWON; + MARTe::uint32 *outputMHVPSON; + + // Output signals for NI devices + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + MARTe::uint64 apsSwonHighResolutionTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + + // terminal values + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/Makefile.inc new file mode 100644 index 0000000..234a3d6 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARTStateMachineGAM/Makefile.inc @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JARTStateMachineGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JARTStateMachineGAM$(LIBEXT) \ + $(BUILD_DIR)/JARTStateMachineGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARampupGAM/JARampupGAM.cpp b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARampupGAM/JARampupGAM.cpp new file mode 100644 index 0000000..98003a2 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARampupGAM/JARampupGAM.cpp @@ -0,0 +1,295 @@ +/** + * @file JARampupGAM.cpp + * @brief Source file for class JARampupGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARampupGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "AdvancedErrorManagement.h" +#include "JARampupGAM.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARampupGAM::JARampupGAM() : GAM() { + current_setpoint = NULL_PTR(MARTe::float32 *); + target_value = NULL_PTR(MARTe::float32 *); + rampup_time = NULL_PTR(MARTe::float32 *); + start = NULL_PTR(MARTe::uint32 *); + standby = NULL_PTR(MARTe::uint32 *); + isAuto = NULL_PTR(MARTe::uint32 *); + FHPS_PrePro = NULL_PTR(MARTe::float32 *); + + output = NULL_PTR(MARTe::float32 *); + state = NULL_PTR(MARTe::uint32 *); + + rampup_rate = 0.0f; + inRampup = false; + resetFlag = true; + inWaitHVON = false; + inWaitStandby = false; +} + +JARampupGAM::~JARampupGAM() { +} + +bool JARampupGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + return GAM::Initialise(data); +} + +bool JARampupGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 7u); + if (ok) { + ok = (numberOfOutputSignals == 2u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Two output signals shall be defined."); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Six input signals shall be defined."); + } + uint32 currentspvIndex; + uint32 targetvIndex; + uint32 timeIndex; + uint32 startIndex; + uint32 standbyIndex; + uint32 isAutoIndex; + uint32 fhpsPreProIndex; + + if (ok) { + StreamString signalName = "Currspv"; + ok = GetSignalIndex(InputSignals, currentspvIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Currspv input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, currentspvIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Currspv shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Targetv"; + ok = GetSignalIndex(InputSignals, targetvIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Targetv input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, targetvIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Targetv shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Time"; + ok = GetSignalIndex(InputSignals, timeIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Time input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, timeIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Time shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Start"; + ok = GetSignalIndex(InputSignals, startIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Start input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, startIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Start shall be defined as uint32."); + } + } + } + if (ok) { + StreamString signalName = "PLC_STANDBY"; + ok = GetSignalIndex(InputSignals, standbyIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLC_STANDBY input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, standbyIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLC_STANDBY shall be defined as uint32."); + } + } + } + if (ok) { + StreamString signalName = "MANUAL_AUTO"; + ok = GetSignalIndex(InputSignals, isAutoIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "MANUAL_AUTO input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, isAutoIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "MANUAL_AUTO shall be defined as uint32."); + } + } + } + if (ok) { + StreamString signalName = "FHPS_PrePro"; + ok = GetSignalIndex(InputSignals, fhpsPreProIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "FHPS_PrePro input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, fhpsPreProIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal FHPS_PrePro shall be defined as float32."); + } + } + } + + if (ok) { + TypeDescriptor inputType = GetSignalType(OutputSignals, 0); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Output shall be defined as float32."); + } + } + if (ok) { + TypeDescriptor inputType = GetSignalType(OutputSignals, 1); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal state shall be defined as float32."); + } + } + + if (ok) { + current_setpoint = reinterpret_cast(GetInputSignalMemory(currentspvIndex)); + target_value = reinterpret_cast(GetInputSignalMemory(targetvIndex)); + rampup_time = reinterpret_cast(GetInputSignalMemory(timeIndex)); + start = reinterpret_cast(GetInputSignalMemory(startIndex)); + standby = reinterpret_cast(GetInputSignalMemory(standbyIndex)); + isAuto = reinterpret_cast(GetInputSignalMemory(isAutoIndex)); + FHPS_PrePro = reinterpret_cast(GetInputSignalMemory(fhpsPreProIndex)); + + output = reinterpret_cast(GetOutputSignalMemory(0)); + state = reinterpret_cast(GetOutputSignalMemory(1)); + } + return ok; +} + +bool JARampupGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName){ + if(strcmp(nextStateName, "WaitHVON_PREP")==0 || strcmp(nextStateName, "WaitHVON_SDN_PREP")==0 || + strcmp(nextStateName, "WaitHVON")==0 || strcmp(nextStateName, "WaitHVON_SDN")==0){ + inWaitHVON = true; + inWaitStandby = false; + } else{ + inWaitHVON = false; + if(strcmp(nextStateName,"WaitStandby")==0 ){ + inWaitStandby = true; + } else { + inWaitStandby = false; + } + } + return true; +} + +bool JARampupGAM::Execute() { + using namespace MARTe; + if(!inWaitHVON){ + if (*target_value <= 0.0f || *standby == 0u) { + *output = 0.0f; + rampup_rate = 0.0f; + if(*target_value <= 0.0f){ + *state = 3u; + } else { + *state = 0u; + } + return true; + } + + if(*start == 1u && *isAuto==0u){ //isAuto = 1.Manual, 0.auto-rampup. + inRampup = true; + resetFlag = true; + *output = 0.0f; //Enable if it should start always zero. + } + + // Calcrate new rampup rate. + if(*rampup_time != 0 && resetFlag == true){ + rampup_rate = (*target_value - *current_setpoint) / *rampup_time/1000.0f; // Volt/msec + resetFlag = false; + } + + // Update Parameter + if(*standby == 1u ){ + if(*isAuto == 1u){ + if (inWaitStandby){ + *output = *target_value; + } else{ + *output = *FHPS_PrePro; + } + //*output = *target_value; + *state = 0u; + return true; + } + else if (inRampup){ + if (*output + rampup_rate < *target_value && *rampup_time != 0){ + *output = *output + rampup_rate; + *state = 1u; + } else { + *output = *target_value; + *state = 2u; + inRampup = false; + } + } + } + return true; + } else { + if(*isAuto == 0){ + *output = *FHPS_PrePro; + } else{ + *output = *target_value; + } + return true; + } +} + +CLASS_REGISTER(JARampupGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARampupGAM/JARampupGAM.h b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARampupGAM/JARampupGAM.h new file mode 100644 index 0000000..3c6e012 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARampupGAM/JARampupGAM.h @@ -0,0 +1,141 @@ +/** + * @file JARampupGAM.h + * @brief Header file for class JARampupGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARampupGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARampupGAM_H_ +#define GAMS_JARampupGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that rampup output value with specified target value and duration. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *      +FHPSRampupGAM = {
+ *         Class = JARampupGAM
+ *         InputSignals = {
+ *             Currspv = {
+ *                 Alias = FHPS_REF
+ *                 DataSource = DDB1
+ *                 Type = float32
+ *             }
+ *             Targetv = {
+ *                 Alias = FHPS_AUTO_TAGV
+ *                 DataSource = EPICSCAInput
+ *                 Type = float32
+ *             }
+ *             Time = {
+ *                 Alias = FHPS_AUTO_TIME
+ *                 DataSource = EPICSCAInput
+ *                 Type = float32
+ *             }
+ *             Start = {
+ *                 Alias = FHPS_AUTO_START
+ *                 DataSource = EPICSCAInput
+ *                 Type = uint32
+ *             }
+ *         }
+ *         OutputSignals = {
+ *             FHPS_REF = {
+ *                 DataSource = DDB1
+ *                 Type = float32
+ *             }
+ *         }
+ *       }
+ *  
+ * 
+ * + */ + +class JARampupGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARampupGAM(); + + virtual ~JARampupGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + // Input signal containing current current_setpoint + MARTe::float32 *current_setpoint; + + // Input signal containing the frequency of the waveform. + MARTe::float32 *target_value; + + // Input signal containing the amplitude of the waveform. + MARTe::float32 *rampup_time; + + // Input signal containing CCPS_ON_REQUEST + MARTe::uint32 *start; + + // Input signal PLC_STANDBY + MARTe::uint32 *standby; + + // MANUAL AUTO button + MARTe::uint32 *isAuto; + + // Input signal + MARTe::float32 *FHPS_PrePro; + + // Output + MARTe::float32 *output; + // State output + MARTe::uint32 *state; //0:NotOperation, 1:InOperation, 2:Finish, 3:Error + + // Internal variables + MARTe::float32 rampup_rate; + bool inRampup; + bool resetFlag; + bool inWaitHVON; + bool inWaitStandby; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARampupGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARampupGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARampupGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARampupGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARampupGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARampupGAM/Makefile.inc new file mode 100644 index 0000000..9bf127b --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JARampupGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JARampupGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JARampupGAM$(LIBEXT) \ + $(BUILD_DIR)/JARampupGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.cpp b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.cpp new file mode 100644 index 0000000..d164e89 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.cpp @@ -0,0 +1,361 @@ +/** + * @file JASDNRTStateMachineGAM.cpp + * @brief Source file for class JASDNRTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JASDNRTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JASDNRTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JASDNRTStateMachineGAM::JASDNRTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + sdnTriggerTime = 0; + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + sdnCommand = NULL_PTR(MARTe::uint16 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; +} + +JASDNRTStateMachineGAM::~JASDNRTStateMachineGAM() { +} + +bool JASDNRTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JASDNRTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JASDNRTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 11u); + if (ok) { + ok = (numberOfOutputSignals == 8u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit || inputType == UnsignedInteger16Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint16", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + sdnCommand = reinterpret_cast(GetInputSignalMemory(10)); + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + *shotCounter = 0; + } + return ok; +} + +bool JASDNRTStateMachineGAM::Execute() { + using namespace MARTe; + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence in SDN mode."); + plcOnTime = *currentTime; //Save pulse start time. + *outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS_HVON; + } + } + else if (currentState == SwitchingHVPS_HVON) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal -= aps_swon; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal."); + } + + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 0; + currentState = WaitSDNTrigger; + } + + } + else if (currentState == WaitSDNTrigger) { + + // Action in this state + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + + // State change conditions + if (*sdnCommand == 1){ + sdnTriggerTime = *currentTime; + currentState = SwitchingHVPS_SWON; + } + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + } + else if (currentState == SwitchingHVPS_SWON) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + + if (*currentTime >= (sdnTriggerTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + } + if (*currentTime >= (sdnTriggerTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (sdnTriggerTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; + apsSwonTime = *currentTime; + REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 0; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *shotCounter += 1; + REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //SDN command processing. + if (*sdnCommand == 4 && aps_swon_is_on) { + *outputSignal -= aps_swon; + aps_swon_is_on = false; + REPORT_ERROR(ErrorManagement::Debug, "sdn command was 4"); + } + if (*sdnCommand == 3 && !aps_swon_is_on) { + *outputSignal += aps_swon; + aps_swon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "sdn command was 3"); + } + + //Action in this state. + if ((*sdnCommand == 2) || (*modePulseLengthLimit == 1u) || (*currentTime >= (sdnTriggerTime + *triggerDelay_aps_swon + *triggerDelay_shotlen))) { + REPORT_ERROR(ErrorManagement::Debug, "shotlen: %d", *triggerDelay_shotlen); + if (*sdnCommand == 2) { + REPORT_ERROR(ErrorManagement::Information, "sdn command was 2"); + } else if (*currentTime >= (sdnTriggerTime + *triggerDelay_aps_swon + *triggerDelay_shotlen)){ + REPORT_ERROR(ErrorManagement::Information, "pulse length reached setpoint."); + } + //Do action + *outputSignal -= aps_swon; //Turn off only aps_swon + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 0; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + REPORT_ERROR(ErrorManagement::Information, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + + //Action in this state. + *outputBeamON = 1; + *outputHVArmed = 1; + *outputHVInjection = 1; + *outputRFON = 1; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + REPORT_ERROR(ErrorManagement::Debug, "state was changed to WaitTrigger"); + } + } + + return true; +} + +CLASS_REGISTER(JASDNRTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.h b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.h new file mode 100644 index 0000000..91b4199 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.h @@ -0,0 +1,250 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JASDNRTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JASDNRTSTATEMACHINEGAM_H_ +#define GAMS_JASDNRTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM provides real-time state machine that communicate with SDN packet. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMSDNRealTimeStateMachine = {
+ *           Class = JASDNRTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               Command = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint16
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   //DataSource = NI6259
+ *                   DataSource = Display
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BeamON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * + */ + +class JASDNRTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JASDNRTStateMachineGAM(); + + virtual ~JASDNRTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS_HVON = 1, + WaitSDNTrigger = 2, + SwitchingHVPS_SWON = 3, + RFON = 4, + HVTerminate = 5 + }; + + //The current rtState + JARealTimeState currentState; + + ///////////////////////////////////////////////// + // Static parameter given by cfg File + ///////////////////////////////////////////////// + //A given condition + MARTe::uint32 conditionTrigger; + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + ///////////////////////////////////////////////// + // Input signals + ///////////////////////////////////////////////// + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + //Time signal (Time from TimerGAM) + MARTe::uint32 *currentTime; + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for SDN commands. + MARTe::uint16 *sdnCommand; + + ///////////////////////////////////////////////////////////// + // Output signal to which the output value will be written. + ///////////////////////////////////////////////////////////// + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //SDN trigger command arrival time. + MARTe::uint32 sdnTriggerTime; + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JASDNRTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASDNRTStateMachineGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASDNRTStateMachineGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASDNRTStateMachineGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASDNRTStateMachineGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASDNRTStateMachineGAM/Makefile.inc new file mode 100644 index 0000000..50056e0 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASDNRTStateMachineGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JASDNRTStateMachineGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JASDNRTStateMachineGAM$(LIBEXT) \ + $(BUILD_DIR)/JASDNRTStateMachineGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASampleGAM/JASampleGAM.cpp b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASampleGAM/JASampleGAM.cpp new file mode 100644 index 0000000..62ab62d --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASampleGAM/JASampleGAM.cpp @@ -0,0 +1,177 @@ +/** + * @file JASampleGAM.cpp + * @brief Source file for class JASampleGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JASampleGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JASampleGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JASampleGAM::JASampleGAM() { + // initialize member variables. + param1 = 0; + param2 = 0; + + //Input signals. + input1 = NULL_PTR(MARTe::uint32 *); + input2 = NULL_PTR(MARTe::float32 *); + //Output signals. + output1= NULL_PTR(MARTe::uint32 *); + output2 = NULL_PTR(MARTe::float32 *); + +} + +JASampleGAM::~JASampleGAM() { +} + +bool JASampleGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("param1", param1); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The param1 shall be specified"); + } + } + if (ok) { + ok = data.Read("param2", param2); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The param2 shall be specified"); + } + } + return ok; +} + +bool JASampleGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JASampleGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == 2u); + if (ok) { + ok = (numberOfOutputSignals == 2u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Two output signals shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Two input signals shall be defined"); + } + // Do type check for input signals. + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = ((inputType == UnsignedInteger32Bit) || (inputType == Float32Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or flaot32", signalName.Buffer()); + } + + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = ((outputType == UnsignedInteger32Bit) || (outputType == Float32Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or float32", signalName.Buffer()); + } + } + } + + // Signal id can get by signal name in configuration file + if (ok) { + StreamString signalName = "InputXXX"; //Variable name in configuration file. + uint32 signalxxxIndex; //Index is copied to this variable by using signal name. + ok = GetSignalIndex(InputSignals, signalxxxIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "InputXXX input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, signalxxxIndex); + ok = (inputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, signalxxxIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } else { + inputXXX = reinterpret_cast(GetInputSignalMemory(signalxxxIndex)); + } + } + } + + // Do type cast. with explicit signal id. + if (ok) { + input1 = reinterpret_cast(GetInputSignalMemory(0)); + input2 = reinterpret_cast(GetInputSignalMemory(1)); + + output1 = reinterpret_cast(GetOutputSignalMemory(0)); + output2 = reinterpret_cast(GetOutputSignalMemory(1)); + + } + return ok; +} + +bool JASampleGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + REPORT_ERROR(ErrorManagement::Information, "input1 is %d.", *input1); + REPORT_ERROR(ErrorManagement::Information, "input2 is %f.", *input2); + REPORT_ERROR(ErrorManagement::Information, "inputXXX is %f.", *inputXXX); + + REPORT_ERROR(ErrorManagement::Information, "maltiply param value to input."); + + *output1 = *input1 * param1; + *output2 = *input2 * param2; + + REPORT_ERROR(ErrorManagement::Information, "output1 is %d.", *output1); + REPORT_ERROR(ErrorManagement::Information, "output2 is %f.", *output2); + + return true; +} + +CLASS_REGISTER(JASampleGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASampleGAM/JASampleGAM.h b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASampleGAM/JASampleGAM.h new file mode 100644 index 0000000..53f06ad --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASampleGAM/JASampleGAM.h @@ -0,0 +1,122 @@ +/** + * @file JASampleGAM.h + * @brief Header file for class JASampleGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JASampleGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JASampleGAM_H_ +#define GAMS_JASampleGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +/** + * @brief GAM Sample Usage. + * @details Sample + * + * The configuration syntax is: + * + *
+ * +SampleGAM = {
+ *     Class = JASampleGAM
+ *     InputSignals = {
+ *         Input1 = {
+ *             DataSource = "DDB"
+ *             Type = uint32
+ *             Default = 0
+ *         }
+ *         Input2 = {
+ *             DataSource = "DDB"
+ *             Type = float32
+ *             Default = 100
+ *         }
+ *         InputXXX = {
+ *             DataSource = "DDB"
+ *             Type = float32
+ *             NumberOfElements = 1
+ *         }
+ *     }
+ *     OutputSignals = {
+ *         Output1 = {
+ *             DataSource = "DDB"
+ *             Type = uint32
+ *             Default = 0
+ *         }
+ *         Output2 = {
+ *             DataSource = "DDB"
+ *             Type = int32
+ *             Default = 100
+ *         }
+ *     }
+ * }
+ * 
+ */ + + +class JASampleGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JASampleGAM(); + + virtual ~JASampleGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //GAM fixed parameters. + MARTe::uint32 param1; + MARTe::float32 param2; + + // Input signals + MARTe::uint32 *input1; + MARTe::float32 *input2; + MARTe::float32 *inputXXX; + + // Output signals + MARTe::uint32 *output1; + MARTe::float32 *output2; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JASampleGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASampleGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASampleGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASampleGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASampleGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASampleGAM/Makefile.inc new file mode 100644 index 0000000..a95be67 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASampleGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JARTSampleGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JARTSampleGAM$(LIBEXT) \ + $(BUILD_DIR)/JARTSampleGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.cpp b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.cpp new file mode 100644 index 0000000..3ab70d0 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.cpp @@ -0,0 +1,188 @@ +/** + * @file JASourceChoiseGAM.cpp + * @brief Source file for class JASourceChoiseGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JASourceChoiseGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JASourceChoiseGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JASourceChoiseGAM::JASourceChoiseGAM() { + // initialize member variables. + numberOfPVs = 0; +} + +JASourceChoiseGAM::~JASourceChoiseGAM() { +} + +bool JASourceChoiseGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("numberOfPVs", numberOfPVs); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The numberOfPVs parameter shall be specified"); + } + } + return ok; +} + +bool JASourceChoiseGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JASourceChoiseGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == numberOfPVs*3u); + if (ok) { + ok = (numberOfOutputSignals == numberOfPVs); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "%d *3 output signals shall be defined", numberOfPVs); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "%d input signals shall be defined", numberOfPVs); + } + // Do type check for input signals. + int int_num = 0; + int float_num = 0; + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + if(inputType == UnsignedInteger32Bit){ + int_num++; + } else if (inputType == Float32Bit) { + float_num++; + } else { + ok = false; + }; + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or flaot32", signalName.Buffer()); + } + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = ((outputType == UnsignedInteger32Bit) || (outputType == Float32Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or float32", signalName.Buffer()); + } + } + } + // Set memory + inputUInt32.resize(numberOfPVs*2); + inputFloat32.resize(numberOfPVs*2); + choise.resize(numberOfPVs); + outputUInt32.resize(numberOfPVs); + outputFloat32.resize(numberOfPVs); + + prevUInt32.resize(numberOfPVs*2); + prevFloat32.resize(numberOfPVs*2); + + if(ok){ + for(uint32 i=0; i(GetInputSignalMemory(3*i)); + inputUInt32[2*i+1] = reinterpret_cast(GetInputSignalMemory(3*i+1)); + choise[i] = reinterpret_cast(GetInputSignalMemory(3*i+2)); + outputUInt32[i] = reinterpret_cast(GetOutputSignalMemory(i)); + } else if(inputType == Float32Bit){ + inputFloat32[2*i] = reinterpret_cast(GetInputSignalMemory(3*i)); + inputFloat32[2*i+1] = reinterpret_cast(GetInputSignalMemory(3*i+1)); + choise[i] = reinterpret_cast(GetInputSignalMemory(3*i+2)); + outputFloat32[i] = reinterpret_cast(GetOutputSignalMemory(i)); + } + prevUInt32[2*i] = 0; + prevUInt32[2*i+1] = 0; + prevFloat32[2*i] = 0; + prevFloat32[2*i+1] = 0; + } + } + return ok; +} + +bool JASourceChoiseGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + + for (uint32 i=0; i < numberOfPVs; i++){ + if(*choise[i]==0){ + if(outputUInt32[i]){ + if(prevUInt32[i*2] != *inputUInt32[i*2]){ + *outputUInt32[i] = *inputUInt32[i*2]; + prevUInt32[i*2] = *inputUInt32[i*2]; + prevUInt32[1+i*2] = *inputUInt32[1+i*2]; + } + } else if(outputFloat32[i]){ + if(prevFloat32[i*2] != *inputFloat32[i*2]){ + *outputFloat32[i] = *inputFloat32[i*2]; + prevFloat32[i*2] = *inputFloat32[i*2]; + prevFloat32[1+i*2] = *inputFloat32[1+i*2]; + } + } + } else { + if(outputUInt32[i]){ + if(prevUInt32[1+i*2] != *inputUInt32[1+i*2]){ + *outputUInt32[i] = *inputUInt32[1+i*2]; + prevUInt32[i*2] = *inputUInt32[i*2]; + prevUInt32[1+i*2] = *inputUInt32[1+i*2]; + } + } else if (outputFloat32[i]){ + if(prevFloat32[1+i*2] != *inputFloat32[1+i*2]){ + *outputFloat32[i] = *inputFloat32[1+i*2]; + prevFloat32[i*2] = *inputFloat32[i*2]; + prevFloat32[1+i*2] = *inputFloat32[1+i*2]; + } + } + } + } + return true; +} + +CLASS_REGISTER(JASourceChoiseGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.h b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.h new file mode 100644 index 0000000..2a4cd80 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.h @@ -0,0 +1,84 @@ +/** + * @file JASourceChoiseGAM.h + * @brief Header file for class JASourceChoiseGAM + * @date Mar 04, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JASourceChoiseGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JASourceChoiseGAM_H_ +#define GAMS_JASourceChoiseGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +class JASourceChoiseGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JASourceChoiseGAM(); + + virtual ~JASourceChoiseGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + //GAM fixed parameters. + MARTe::uint32 numberOfPVs; + + // Input signals + std::vector inputUInt32; + std::vector inputFloat32; + std::vector choise; + + // Output signals + std::vector outputUInt32; + std::vector outputFloat32; + + // Previous Input value + std::vector prevUInt32; + std::vector prevFloat32; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JASourceChoiseGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASourceChoiseGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASourceChoiseGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASourceChoiseGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASourceChoiseGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASourceChoiseGAM/Makefile.inc new file mode 100644 index 0000000..52d83e4 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JASourceChoiseGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JASourceChoiseGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JASourceChoiseGAM$(LIBEXT) \ + $(BUILD_DIR)/JASourceChoiseGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.cpp b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.cpp new file mode 100644 index 0000000..1d3f9c1 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.cpp @@ -0,0 +1,206 @@ +/** + * @file JATerminalInterfaceGAM.cpp + * @brief Source file for class JATerminalInterfaceGAM + * @date Feb 19, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JATerminalInterfaceGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JATerminalInterfaceGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JATerminalInterfaceGAM::JATerminalInterfaceGAM() { + + // Fixed GAM input + aps_hvon_term = 0; + + // Parameters which get from Input signals. + mhvps_hvon = NULL_PTR(MARTe::uint32 *); + aps_hvon = NULL_PTR(MARTe::uint32 *); + aps_swon = NULL_PTR(MARTe::uint32 *); + bps_hvon = NULL_PTR(MARTe::uint32 *); + bps_swon = NULL_PTR(MARTe::uint32 *); + + stateMachineOutput = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignalNI6259 = NULL_PTR(MARTe::uint32 *); + outputSignalNI6528P3 = NULL_PTR(MARTe::uint8 *); + outputSignalNI6528P4 = NULL_PTR(MARTe::uint8 *); + + aps_hvon_state = 0; + aps_swon_state = 0; + mhvps_hvon_state = 0; + bps_hvon_state = 0; + bps_swon_state = 0; + p3Value = 0; + p4Value = 0; +} + +JATerminalInterfaceGAM::~JATerminalInterfaceGAM() { +} + +bool JATerminalInterfaceGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("mhvps_hvon_term", mhvps_hvon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon_term", aps_hvon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon_term", aps_swon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon_term", bps_hvon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon_term", bps_swon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon_term shall be specified"); + } + } + return ok; +} + +bool JATerminalInterfaceGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JATerminalInterfaceGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 9u); + if (ok) { + ok = (numberOfOutputSignals == 3u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Three output signals shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit || inputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint8", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint8", signalName.Buffer()); + } + } + } + if (ok) { + //mhvps_manm = reinterpret_cast(GetInputSignalMemory(0)); + mhvps_hvon = reinterpret_cast(GetInputSignalMemory(0)); + //aps_manm = reinterpret_cast(GetInputSignalMemory(2)); + aps_hvon = reinterpret_cast(GetInputSignalMemory(1)); + aps_swon = reinterpret_cast(GetInputSignalMemory(2)); + //bps_manm = reinterpret_cast(GetInputSignalMemory(5)); + bps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + bps_swon = reinterpret_cast(GetInputSignalMemory(4)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(5)); + stateMachineOutput = reinterpret_cast(GetInputSignalMemory(6)); + ni6528p3Value = reinterpret_cast(GetInputSignalMemory(7)); + ni6528p4Value = reinterpret_cast(GetInputSignalMemory(8)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(0)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(1)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(2)); + + } + return ok; +} + +bool JATerminalInterfaceGAM::Execute() { + using namespace MARTe; + uint8 sm = *stateMachineOutput; + + + //Update HVPS state + aps_hvon_state = ((sm >> (0))&1); + aps_swon_state = ((sm >> (4))&1); + mhvps_hvon_state = ((sm >> (2))&1); + bps_hvon_state = ((sm >> (1))&1); + bps_swon_state = ((sm >> (3))&1); + + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state; + *outputSignalNI6259 = 1*aps_swon_state; + //uint8 ni6528p3ValueTemp = 0;//*ni6528p3Value; + //ni6528p3ValueTemp &= ~(1<<2); //Does not turn on ni6258 aps switch + //Update terminal value + //*outputSignalNI6528P3 = ~(ni6528p3ValueTemp | p3Value); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + + p4Value = 8*mhvps_hvon_state; + *outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + return true; +} + +CLASS_REGISTER(JATerminalInterfaceGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.h b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.h new file mode 100644 index 0000000..773cbd6 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.h @@ -0,0 +1,157 @@ +/** + * @file JATerminalInterfaceGAM.h + * @brief Header file for class JATerminalInterfaceGAM + * @date Feb 19, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JATerminalInterfaceGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JATerminalInterfaceGAM_H_ +#define GAMS_JATerminalInterfaceGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM calculates one output value by comparing input value and fixed parameters. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ * 
+ *         +terminalInterfaceGAM = {
+ *           Class = JATerminalInterfaceGAM
+ *           mhvps_hvon_term = 4
+ *           aps_hvon_term = 1
+ *           aps_swon_term = 16
+ *           bps_hvon_term = 2
+ *           bps_swon_term = 8
+ *           InputSignals = {
+ *               MHVPS_HVON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = NI6259
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JATerminalInterfaceGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JATerminalInterfaceGAM(); + + virtual ~JATerminalInterfaceGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + // Fixed GAM input + MARTe::uint32 mhvps_hvon_term; + MARTe::uint32 aps_hvon_term; + MARTe::uint32 aps_swon_term; + MARTe::uint32 bps_hvon_term; + MARTe::uint32 bps_swon_term; + + // Input signals + //MARTe::uint32 *mhvps_manm; + MARTe::uint32 *mhvps_hvon; + + //MARTe::uint32 *aps_manm; + MARTe::uint32 *aps_hvon; + MARTe::uint32 *aps_swon; + + //MARTe::uint32 *bps_manm; + MARTe::uint32 *bps_hvon; + MARTe::uint32 *bps_swon; + + MARTe::uint32 *short_pulse_mode; + + MARTe::uint32 *stateMachineOutput; + MARTe::uint8 *ni6528p3Value; + MARTe::uint8 *ni6528p4Value; + + // Output signals + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JATerminalInterfaceGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATerminalInterfaceGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATerminalInterfaceGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATerminalInterfaceGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATerminalInterfaceGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATerminalInterfaceGAM/Makefile.inc new file mode 100644 index 0000000..0f3e2aa --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATerminalInterfaceGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JATerminalInterfaceGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JATerminalInterfaceGAM$(LIBEXT) \ + $(BUILD_DIR)/JATerminalInterfaceGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.cpp b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.cpp new file mode 100644 index 0000000..7004a1f --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.cpp @@ -0,0 +1,178 @@ +/** + * @file JATriangleWaveGAM.cpp + * @brief Source file for class JATriangleWaveGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JATriangleWaveGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "AdvancedErrorManagement.h" +#include "JATriangleWaveGAM.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +MARTe::float32 absFloat(MARTe::float32 x) { + if (x < 0.0f) { + return -x; + } + return x; +} + +JATriangleWaveGAM::JATriangleWaveGAM() { + frequency = NULL_PTR(MARTe::float32 *); + amplitude = NULL_PTR(MARTe::float32 *); + offset = NULL_PTR(MARTe::float32 *); + plcStandby = NULL_PTR(MARTe::uint32 *); + waveOutput = NULL_PTR(MARTe::float32 *); + time = 0.0f; +} + +JATriangleWaveGAM::~JATriangleWaveGAM() { +} + +bool JATriangleWaveGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + return GAM::Initialise(data); +} + +bool JATriangleWaveGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 4u); + if (ok) { + ok = (numberOfOutputSignals == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "One output signal shall be defined."); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Four input signals shall be defined."); + } + uint32 freqIndex; + uint32 ampIndex; + uint32 offsetIndex; + uint32 plcStandbyIndex; + if (ok) { + StreamString signalName = "Frequency"; + ok = GetSignalIndex(InputSignals, freqIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Frequency input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, freqIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Frequency shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Amplitude"; + ok = GetSignalIndex(InputSignals, ampIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Amplitude input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, ampIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Amplitude shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Offset"; + ok = GetSignalIndex(InputSignals, offsetIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Offset input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, offsetIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Offset shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "PLCSTANDBY"; + ok = GetSignalIndex(InputSignals, plcStandbyIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLCSTANDBY input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, plcStandbyIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLCSTANDBY shall be defined as uint32."); + } + } + } + if (ok) { + TypeDescriptor inputType = GetSignalType(OutputSignals, 0); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Amplitude shall be defined as float32."); + } + } + if (ok) { + frequency = reinterpret_cast(GetInputSignalMemory(freqIndex)); + amplitude = reinterpret_cast(GetInputSignalMemory(ampIndex)); + offset = reinterpret_cast(GetInputSignalMemory(offsetIndex)); + plcStandby = reinterpret_cast(GetInputSignalMemory(plcStandbyIndex)); + waveOutput = reinterpret_cast(GetOutputSignalMemory(0)); + } + return ok; +} + +bool JATriangleWaveGAM::Execute() { + using namespace MARTe; + // If frequency is not set, output 0. + if (*frequency <= 0.0f || *plcStandby == 0u) { + *waveOutput = 0.0f; + return true; + } + // Increase the current time. + ++time; + // Calculate the period in milliseconds + float32 periodMs = 1000.0 / *frequency; + // Make sure the time is on [0, periodMs] interval. + while (time > periodMs) { + time -= periodMs; + } + // Formula: + // f(x) = |x - 0.5| * 2 * amplitude + // where x is between 0 and 1 + *waveOutput = absFloat((time / periodMs) - 0.5f) * 2.0f * (*amplitude) + *offset; + return true; +} + +CLASS_REGISTER(JATriangleWaveGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.h b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.h new file mode 100644 index 0000000..22e34c3 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.h @@ -0,0 +1,130 @@ +/** + * @file JATriangleWaveGAM.h + * @brief Header file for class JATriangleWaveGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JATriangleWaveGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JATRIANGLEWAVEGAM_H_ +#define GAMS_JATRIANGLEWAVEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM provides triangular waveform output within 1kHz thread. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *      +CCPSWaveformGAM = {
+ *           Class = JATriangleWaveGAM
+ *           InputSignals = {
+ *               Offset = {
+ *                   Alias = OFFSET
+ *                   DataSource = EPICSCAInput
+ *                   Type = float32
+ *               }
+ *               Frequency = {
+ *                   Alias = CCPS_OUTPUT_FREQ
+ *                   DataSource = EPICSCAInput
+ *                   Type = float32
+ *               }
+ *               Amplitude = {
+ *                   Alias = CCPS_OUTPUT_AMP
+ *                   DataSource = EPICSCAInput
+ *                   Type = float32
+ *               }
+ *               PLCCCPSON = {
+ *                   Alias = PLC_CCPSON
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+  *              READY = {
+ *                   Alias = PLC_READY
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               CCPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JATriangleWaveGAM : public MARTe::GAM { +public: + CLASS_REGISTER_DECLARATION() + + JATriangleWaveGAM(); + + virtual ~JATriangleWaveGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); +private: + // Input signal containing the frequency of the waveform. + MARTe::float32 *frequency; + + // Input signal containing the amplitude of the waveform. + MARTe::float32 *amplitude; + + // Input signal cantaining the offset of the waveform. + MARTe::float32 *offset; + + // Input signal containing CCPS_ON_REQUEST + //MARTe::uint32 *plcccpson; + + // Input signal condition CCPS_READY + //MARTe::uint32 *plcReady; + + // Input signal condition CCPS_STANDBY + MARTe::uint32 *plcStandby; + + MARTe::float32 *waveOutput; + + MARTe::float32 time; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JATRIANGLEWAVEGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATriangleWaveGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATriangleWaveGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATriangleWaveGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATriangleWaveGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATriangleWaveGAM/Makefile.inc new file mode 100644 index 0000000..495d6ae --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JATriangleWaveGAM/Makefile.inc @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JATriangleWaveGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JATriangleWaveGAM$(LIBEXT) \ + $(BUILD_DIR)/JATriangleWaveGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAWFRecordGAM/JAWFRecordGAM.cpp b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAWFRecordGAM/JAWFRecordGAM.cpp new file mode 100644 index 0000000..b26b6bd --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAWFRecordGAM/JAWFRecordGAM.cpp @@ -0,0 +1,317 @@ +/** + * @file JAWFRecordGAM.cpp + * @brief Source file for class JAWFRecordGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAWFRecordGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAWFRecordGAM.h" + +#include "AdvancedErrorManagement.h" +#include "CLASSMETHODREGISTER.h" +#include "File.h" +#include "MessageI.h" +#include "RegisteredMethodsMessageFilter.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +// How often output signals are updated. +const MARTe::uint32 cycleMs = 10u; + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAWFRecordGAM::JAWFRecordGAM() : + GAM() { + filenameSignalIndex = 0u; + timeSignal = NULL_PTR(MARTe::int32 *); + loadTriggerSignal = NULL_PTR(MARTe::uint32 *); + valueSignals = NULL_PTR(MARTe::float32 **); + maxElements = 0u; + readOnce = true; +} + +JAWFRecordGAM::~JAWFRecordGAM() { + if (valueSignals != NULL_PTR(MARTe::float32 **)) { + delete[] valueSignals; + } +} + +bool JAWFRecordGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("Directory", directory); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Directory shall be specified"); + } + } + return ok; +} + +bool JAWFRecordGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 2u); + if (ok) { + ok = (numberOfOutputSignals > 1u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "At least two output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Two input signal with the filename and file load trigger shall be defined"); + } + if (ok) { + StreamString signalName = "Filename"; + ok = GetSignalIndex(InputSignals, filenameSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Filename input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, filenameSignalIndex); + ok = (inputType == CharString); + if (!ok) { + ok = (inputType == Character8Bit); + } + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, filenameSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as string", signalName.Buffer()); + } + } + } + if (ok) { + StreamString signalName = "CSV_LOAD"; + uint32 loadSignalIndex; + ok = GetSignalIndex(InputSignals, loadSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "CSV_LOAD input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, loadSignalIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, loadSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } else { + loadTriggerSignal = reinterpret_cast(GetInputSignalMemory(loadSignalIndex)); + } + } + } + if (ok) { + TypeDescriptor timeType = GetSignalType(OutputSignals, 0); + + ok = (timeType == SignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, 0, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as int32", signalName.Buffer()); + } + + uint32 i; + for (i = 1u; (i < numberOfOutputSignals) && (ok); i++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, i); + ok = (outputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, i, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } + else { + uint32 dimentionsCount; + ok = GetSignalNumberOfDimensions(OutputSignals, 0u, dimentionsCount); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Output signals shall have 1 dimension."); + } + else { + uint32 elementsCount; + ok = GetSignalNumberOfElements(OutputSignals, 0u, elementsCount); + if (maxElements == 0) { + maxElements = elementsCount; + } + else { + ok = (maxElements == elementsCount); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Output signals shall have consistent number of elements."); + } + } + } + } + } + } + if (ok) { + valueSignals = new float32*[numberOfOutputSignals - 1u]; + uint32 i; + for (i = 1u; i < numberOfOutputSignals; i++) { + valueSignals[i - 1] = reinterpret_cast(GetOutputSignalMemory(i)); + } + timeSignal = reinterpret_cast(GetOutputSignalMemory(0)); + } + return ok; +} + +bool JAWFRecordGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + if (strcmp(nextStateName, "WaitReady") == 0) { + // Reset read once flag when reentering WaitReady state. + readOnce = true; + } + return true; +} + +void JAWFRecordGAM::LoadFile() { + using namespace MARTe; + + bool ok = true; + + const char8 * const filenameSignal = reinterpret_cast(GetInputSignalMemory(filenameSignalIndex)); + StreamString filename = directory; + filename += DIRECTORY_SEPARATOR; + filename += filenameSignal; + REPORT_ERROR(ErrorManagement::Debug, "Opening file %s", filename.Buffer()); + + File f; + ok = f.Open(filename.Buffer(), BasicFile::ACCESS_MODE_R); + + uint32 numberOfPreProgrammedTimeRows = 0u; + int32 *preProgrammedTime; + float32 **preProgrammedValues; + uint32 numberOfPreProgrammedValues = 0u; + + if (ok) { + StreamString tokenLine; + while (f.GetLine(tokenLine)) { + if (tokenLine[0] != '#') { + numberOfPreProgrammedTimeRows++; + } + tokenLine = ""; + } + f.Seek(0); + uint32 t = 0u; + tokenLine = ""; + while ((ok) && (f.GetLine(tokenLine))) { + if (tokenLine[0] == '#') { + tokenLine = ""; + continue; + } + if (numberOfPreProgrammedValues == 0) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + while (tokenLine.GetToken(token, ",", ignored)) { + numberOfPreProgrammedValues++; + token = ""; + } + ok = numberOfPreProgrammedValues == numberOfOutputSignals; + // Remove time from pre-programmed values count. + numberOfPreProgrammedValues -= 1u; + if (ok) { + preProgrammedTime = new int32[maxElements]; + memset(preProgrammedTime, 0, maxElements * sizeof(int32)); + preProgrammedValues = new float32*[numberOfPreProgrammedValues]; + uint32 j; + for (j = 0u; j < numberOfPreProgrammedValues; j++) { + preProgrammedValues[j] = new float32[maxElements]; + memset(preProgrammedValues[j], 0, maxElements * sizeof(float32)); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Number of columns in csv file (%d) is not consistent with the number of output signals (%d)", numberOfPreProgrammedValues, + numberOfOutputSignals - 1u); + } + } + if (ok) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + uint32 idx = 0u; + while (tokenLine.GetToken(token, ",", ignored)) { + if (idx == 0u) { + preProgrammedTime[t] = atoi(token.Buffer()); + } + else { + ok = ((idx - 1) < numberOfPreProgrammedValues); + if (ok) { + preProgrammedValues[idx - 1][t] = static_cast(atof(token.Buffer())); + } + else { + REPORT_ERROR(ErrorManagement::FatalError, "Number of columns in csv file is not consistent with the number of output signals in line %d", t); + } + } + token = ""; + idx++; + } + t++; + } + tokenLine = ""; + } + f.Close(); + } else { + REPORT_ERROR(ErrorManagement::Debug, "Cannot open the file %s", filename.Buffer()); + return; + } + if (numberOfPreProgrammedTimeRows > maxElements) { + REPORT_ERROR(ErrorManagement::Warning, "Only %d (out of %d) of pre-programmed values will be written to waveform record.", + maxElements, numberOfPreProgrammedTimeRows); + } + ok = MemoryOperationsHelper::Copy(timeSignal, preProgrammedTime, maxElements * sizeof(int32)); + uint32 i; + for (i = 0u; (i < numberOfPreProgrammedValues) && (ok); ++i) { + ok = MemoryOperationsHelper::Copy(valueSignals[i], preProgrammedValues[i], maxElements * sizeof(float32)); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::Warning, "Failed to write data to waveform record."); + } + + if (preProgrammedValues != NULL_PTR(float32 **)) { + uint32 i; + for (i = 0u; i < numberOfPreProgrammedValues; i++) { + delete preProgrammedValues[i]; + } + delete[] preProgrammedValues; + } + if (preProgrammedTime != NULL_PTR(int32 *)) { + delete[] preProgrammedTime; + } +} + +bool JAWFRecordGAM::Execute() { + if (*loadTriggerSignal == 1u) { + if (readOnce) { + LoadFile(); + readOnce = false; + } + } else { + // Reset read once flag when loadTriggerSignal is reset. + readOnce = true; + } + return true; +} + +CLASS_REGISTER(JAWFRecordGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAWFRecordGAM/JAWFRecordGAM.h b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAWFRecordGAM/JAWFRecordGAM.h new file mode 100644 index 0000000..ee22c1a --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAWFRecordGAM/JAWFRecordGAM.h @@ -0,0 +1,130 @@ +/** + * @file JAWFRecordGAM.h + * @brief Header file for class JAWFRecordGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAWFRecordGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAWFRECORDGAM_H_ +#define GAMS_JAWFRECORDGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include "Message.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that is used for pre-programmed operation. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *       +WFRecordGAM = {
+ *           Class = JAWFRecordGAM
+ *           Directory = "../Configurations" 
+ *           InputSignals = {
+ *               CSV_LOAD = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               Filename = {
+ *                   Alias = CSV_NAME
+ *                   DataSource = EPICSCAInput
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               PREP_TIME_WF = {
+ *                   DataSource = DDB1
+ *               }
+ * *             MHVPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               BPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               APS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               MCPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               GCPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               FHPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *           }
+ *       }
+ * 
+ * + */ + +class JAWFRecordGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAWFRecordGAM(); + + virtual ~JAWFRecordGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + void LoadFile(); + + MARTe::uint32 filenameSignalIndex; + + MARTe::uint32 *loadTriggerSignal; + + MARTe::StreamString directory; + + MARTe::float32 **valueSignals; + + MARTe::int32 *timeSignal; + + MARTe::uint32 maxElements; + + // Flag determining whether file should be read (so it isn't read multiple time) + bool readOnce; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAWFRECORDGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAWFRecordGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAWFRecordGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAWFRecordGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAWFRecordGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAWFRecordGAM/Makefile.inc new file mode 100644 index 0000000..608ea6c --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAWFRecordGAM/Makefile.inc @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAWFRecordGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAWFRecordGAM$(LIBEXT) \ + $(BUILD_DIR)/JAWFRecordGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/Makefile b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/Makefile new file mode 100644 index 0000000..61a2101 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/Makefile @@ -0,0 +1,28 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +export TARGET=x86-linux + +include Makefile.gcc diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/Makefile.gcc new file mode 100644 index 0000000..e0a2fc4 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/Makefile.gcc @@ -0,0 +1,26 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +############################################################# + +include Makefile.inc + diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/Makefile.inc new file mode 100644 index 0000000..8dfc149 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/Makefile.inc @@ -0,0 +1,45 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +SPB = JAMessageGAM.x JAPreProgrammedGAM.x JAModeControlGAM.x \ + JAWFRecordGAM.x JATriangleWaveGAM.x JARampupGAM.x \ + JARTStateMachineGAM.x JASDNRTStateMachineGAM.x JATerminalInterfaceGAM.x \ + JABitSumGAM.x JAConditionalSignalUpdateGAM.x JASourceChoiseGAM.x JABitReverseGAM.x + +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults + +ROOT_DIR=../../../obj +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +all: $(OBJS) $(SUBPROJ) check-env + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + +check-env: +ifndef MARTe2_DIR + $(error MARTe2_DIR is undefined) +endif diff --git a/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/Gyrotron01DAN.cpp b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/Gyrotron01DAN.cpp new file mode 100644 index 0000000..46ae827 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/Gyrotron01DAN.cpp @@ -0,0 +1,639 @@ +/****************************************************************************** + * $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp-sdn/main/c++/prog/prog.cpp.template $ + * $Id: prog.cpp.template 83098 2018-01-08 13:23:38Z cesnikt $ + * + * Project : CODAC Core System + * + * Description : GyrotronDAN program + * + * Author : codac-dev + * + * Copyright (c) : 2010-2018 ITER Organization, + * CS 90 046 + * 13067 St. Paul-lez-Durance Cedex + * France + * + * This file is part of ITER CODAC software. + * For the terms and conditions of redistribution or use of this software + * refer to the file ITER-LICENSE.TXT located in the top level directory + * of the distribution package. + ******************************************************************************/ + +/* header files */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +//#include +#define float32_t float32_t1 +#include +#undef float32_t + +#include +#include +#include +#include +#include +#include + +#include + +// global variables +static bool __terminate = false; +char pxie6368_0_ai_fd[] = "/dev/pxie-6368.0.ai"; // ai segment +char pxie6368_0_device[] = "/dev/pxie-6368.0"; // device descriptor + +typedef struct { + int daq_smpl_rate; + int daq_mode; + double daq_smpl_st_dly; + double daq_len; + double daq_pub_dly; +} daq_parameters; + +void signal_handler(int signal) { + log_info("Received signal '%d' to terminate", signal); + __terminate = true; +}; + +// DAN parameter reload function ------------------------------------------------ +int reload_daq_conf(int *aifd, int *ai_chan_fd, daq_parameters *daq_p) { + std::cout << "reload_daq_conf was called \n"; + + // Common variables + int retval; + unsigned long number_of_samples; + int chan_num = 10; // Channel number to add. + uint32_t sample_period_divisor; + uint32_t base_clock = 100000000; // TB3:100MHz, TB2:100 kHz + uint32_t pre_samples = 1000; + uint32_t post_samples = 1000; + char str[40]; + xseries_ai_conf_t conf; // ai segment configuraton data + + // calculate sampling period divisor + if (daq_p->daq_smpl_rate != 0) { + sample_period_divisor = base_clock / daq_p->daq_smpl_rate; + } else { + return 0; + } + + // Stop ai segment---------------------------------------------------------------------- + retval = xseries_stop_ai(*aifd); + if (retval) { + log_error("ai segment stop failed.\n"); + } else { + log_info("ai segment stopped.\n"); + } + + // reset ai segment--------------------------------------------------------------------- + retval = xseries_reset_ai(*aifd); + if (retval) { + log_error("ai segment reset failed.\n"); + return -1; + } + + // Configure AI segment mode ------------------------------------------------------------ + switch (daq_p->daq_mode) { + case 0: + conf = xseries_software_timed_ai(); + log_info("software_timed mode.\n"); + break; + case 1: + conf = xseries_finite_ai(number_of_samples); + log_info("finite mode.\n"); + break; + case 2: + conf = xseries_retriggerable_finite_ai(number_of_samples); + log_info("retriggerable_finite mode.\n"); + break; + case 3: + conf = xseries_continuous_ai(); + log_info("continuous mode.\n"); + break; + case 4: + conf = xseries_reference_ai(pre_samples, post_samples); + log_info("reference mode.\n"); + break; + } + + // disable external gate + retval = xseries_set_ai_external_gate(&conf, + XSERIES_AI_EXTERNAL_GATE_DISABLED, // No external pause signal + XSERIES_AI_POLARITY_ACTIVE_LOW_OR_FALLING_EDGE); // Don't care + if (retval) { + log_error("Cannot set gate trigger.\n"); + return -1; + } + + // select start trigger (START1 signal) + retval = xseries_set_ai_start_trigger(&conf, + XSERIES_AI_START_TRIGGER_SW_PULSE, // Set the line to software-driven + XSERIES_AI_POLARITY_ACTIVE_HIGH_OR_RISING_EDGE, // Make line active on rising... + 1); // ... edge (not high level) + if (retval) { + log_error("Cannot set start trigger.\n"); + return -1; + } + + // set sampling clock source---------------------------------------------------------------------------------------- + retval = xseries_set_ai_sample_clock(&conf, + XSERIES_AI_SAMPLE_CONVERT_CLOCK_INTERNALTIMING, + XSERIES_AI_POLARITY_ACTIVE_HIGH_OR_RISING_EDGE, 1); + if (retval) { + log_error("Cannot configure sampling clock.\n"); + return -1; + } + + // set scan interval ------------------------------------------------------------------------------------------------------------------------- + retval = xseries_set_ai_scan_interval_counter(&conf, + XSERIES_SCAN_INTERVAL_COUNTER_TB3, // TB3 : 100MHz base clock, TB2 : 100kHz base clock + XSERIES_SCAN_INTERVAL_COUNTER_POLARITY_RISING_EDGE, + sample_period_divisor, 2); // Wait 2*100MHz sec after sampling trig. + if (retval) { + log_error("Cannot configure scan counter.\n"); + return -1; + } + + // Set DMA buffer size----------------------------------------------------------------------------------------------------------------------- + retval = xseries_set_ai_attribute(&conf, XSERIES_AI_DMA_BUFFER_SIZE, 1000); + if (retval) { + log_error("DMA configuration was failed.\n"); + return -1; + } + + // Add AI channels --------------------------------------------------------------------------------------------------------------------------- + for (int i = 0; i < chan_num; i++) { + retval = xseries_add_ai_channel(&conf, i, XSERIES_INPUT_RANGE_10V, + XSERIES_AI_CHANNEL_TYPE_DIFFERENTIAL, 0); + if (retval) { + log_error("Add AI channel %d was failed.\n", i); + return -1; + } + } + sleep(3); + + // Load configuration.----------------------------------------------------------------------------------------------------------------------- + retval = xseries_load_ai_conf(*aifd, conf); + if (retval) { + log_error("xseries_load_ai_conf was failed. error code: %d \n", retval); + exit (EXIT_FAILURE); + } + sleep(3); + + // Open channels-------------------------------------------------------------------------------------------------------------------------------- + for (int i = 0; i < chan_num; i++) { + sprintf(str, "%s.ai.%u", pxie6368_0_device, i); + //ai_chan_fd[i] = open(str, O_RDWR | O_NONBLOCK); + ai_chan_fd[i] = open(str, O_RDWR); + if (ai_chan_fd[i] < 0) { + log_error("Cannot open ai channel %d .\n",i); + sleep(1); + exit (EXIT_FAILURE); + } + } + + // start ai segment task----------------------------------------------------------------------------------------------------------------------- + retval = xseries_start_ai(*aifd); + if (retval) { + log_error("ERROR, starting AI segment failed: %s\n", strerror(retval)); + exit (EXIT_FAILURE); + } + + log_info("PXIe-6368 configuration was finished.\n"); + return 0; +}; + + + +int main(int argc, char **argv) { + using namespace std; + unsigned long n_sample_quotient = 0; + + log_initialize(NULL); + + while (!__terminate) { + // Install signal handler to support graceful termination + sigset(SIGTERM, signal_handler); + sigset(SIGINT, signal_handler); + sigset(SIGHUP, signal_handler); + + // ---------------------------------------------------------------------------------------------------------------- + // Running parameter declaration + // ---------------------------------------------------------------------------------------------------------------- + // pxie6368 hardware parameters + int pxie6368_0_device_number = 0; // device discriptor number + int aifd = 0; // ai segment file discriptor + xseries_ai_conf_t conf; // ai segment config + xseries_ai_attribute_t aiatrb; // ai segment attributes + char str[40]; // fd tmp var + int ai_chan_fd[16]; // ai channels file discriptor + int pxie6368_sampling_rate = 1000; // sampling rate Hz + uint32_t sample_period_divisor = 100000000 / pxie6368_sampling_rate; // TB3 100MHz, TB2:100kHz, TB1:20MHz + int sampleSize = 2; // Sample size in bytes <---> uInt16 + int n_channels; // Number of opened channels + struct xseries_dma *dma; // Ptr to dma struct + int chan_num = 10; // Channel number to add. + + // DAN parameters + char dan_source_name[] = "GYADanSource"; // DAN data source (ds) name + long offset_ai = 0; // offset size in published data + int dma_mode = 1; // 0:All, 1:AI only, 2:AO only + dan_DataCore dc = NULL; // Datacore reference declaration + dan_Source ds = NULL; // DAN source declaration + long samplesCounter = 0; // Total acquired sample size + size_t n_samples; // prepared sample size to publish + + // TCN parameters + uint64_t tBase_old = 0; + uint64_t tBase = 0; // TCN publishing base time + uint64_t nanos; // time length for sampling + hpn_timestamp_t delay = 1e7; // wait for publishing (10ms) + char buf[ISO_8601_LEN]; + uint64_t tBase0 = 0; + + // Operation tmp parameter + int result; // For result values. + int exValue; + bool toterminate = false; + int retval; + bool daq_start = false; + int testcounter = 10000; + + // Connected EPCIS PV + + // DAQ config PVs + chid daq_smpl_rate_id; + chtype daq_smpl_rate_type; + int daq_smpl_rate; + chid daq_smpl_rate_rb_id; + chtype daq_smpl_rate_rb_type; + int daq_smpl_rate_rb; + chid daq_mode_id; + chtype daq_mode_type; + int daq_mode; + chid daq_mode_rb_id; + chtype daq_mode_rb_type; + int daq_mode_rb; + chid daq_sw_trig_id; + chtype daq_sw_trig_type; + int daq_sw_trig; + chid daq_smpl_st_dly_id; + chtype daq_smpl_st_dly_type; + double daq_smpl_st_dly; + chid daq_smpl_st_dly_rb_id; + chtype daq_smpl_st_dly_rb_type; + double daq_smpl_st_dly_rb; + chid daq_len_id; + chtype daq_len_type; + double daq_len; + chid daq_len_rb_id; + chtype daq_len_rb_type; + double daq_len_rb; + chid daq_reconf_id; + chtype daq_reconf_type; + int daq_reconf; + chid daq_pub_dly_id; + chtype daq_pub_dly_type; + double daq_pub_dly; + chid daq_pub_dly_rb_id; + chtype daq_pub_dly_rb_type; + double daq_pub_dly_rb; + + chid daq_stat_id; + chtype daq_stat_type; + int daq_stat; + chid daq_conf_stat_id; + chtype daq_conf_stat_type; + int daq_conf_stat; + + daq_parameters daq_p = { 0 }; // = {daq_smpl_rate, daq_smpl_rate_rb, daq_mode, daq_mode_rb}; + + // ---------------------------------------------------------------------------------------------------------------------------------------------- + // EPICS PV connection + // ---------------------------------------------------------------------------------------------------------------------------------------------- + //Initialize ChannelAccess interface + CAInterface_Initialize(); + + // Connect to EPICS PVs + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE", daq_smpl_rate_id); + daq_smpl_rate_type = DBR_LONG; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE-RB", daq_smpl_rate_rb_id); + daq_smpl_rate_rb_type = DBR_LONG; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-MODE", daq_mode_id); + daq_mode_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-MODE-RB", daq_mode_rb_id); + daq_mode_rb_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-SW-TRIG", daq_sw_trig_id); + daq_sw_trig_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-SMPL-ST-DLY", daq_smpl_st_dly_id); + daq_smpl_st_dly_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-SMPL-ST-DLY-RB", daq_smpl_st_dly_rb_id); + daq_smpl_st_dly_rb_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-LEN", daq_len_id); + daq_len_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-LEN-RB", daq_len_rb_id); + daq_len_rb_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-RECONF", daq_reconf_id); + daq_reconf_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-PUB-DLY", daq_pub_dly_id); + daq_pub_dly_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-PUB-DLY-RB", daq_pub_dly_rb_id); + daq_pub_dly_rb_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-STAT", daq_stat_id); + daq_stat_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-CONF-STAT", daq_conf_stat_id); + daq_conf_stat_type = DBR_ENUM; + + tcn_sleep(3e9);// Wait for a while. + + // ---------------------------------------------------------------------------------------------------------------- + // Initialize tcn library + // ---------------------------------------------------------------------------------------------------------------- + int tcn_err; + tcn_err = tcn_init(); + if (tcn_err != TCN_SUCCESS) { + log_error("TCN Initialization failed.\n"); + exValue = 1; + goto END; + } + + // ---------------------------------------------------------------------------------------------------------------- + // pxie-6368 settings + // ---------------------------------------------------------------------------------------------------------------- + // Open ai segment---------------------------------------------------------------------- + aifd = open(pxie6368_0_ai_fd, O_RDWR); + if (aifd <= 0) { + log_error("Open PXIe6368 AI fd failed.\n"); + exValue = -1; + goto END; + } + + // wait ai segment setup start + do { + CAInterface_ReadVariable(daq_reconf_id, daq_reconf_type, (void*) &daq_reconf); + } while (!daq_reconf and !__terminate); + + // read parameter + result = CAInterface_ReadVariable(daq_smpl_rate_id, daq_smpl_rate_type, (void *) &daq_p.daq_smpl_rate); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_mode_id, daq_mode_type, (void *) &daq_p.daq_mode); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_smpl_st_dly_id, daq_smpl_st_dly_type, (void *) &daq_p.daq_smpl_st_dly); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_len_id, daq_len_type, (void *) &daq_p.daq_len); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_pub_dly_id, daq_pub_dly_type, (void *) &daq_p.daq_pub_dly); + if (!result) { + log_error("CA_READ failed.\n"); + } + + std::cout << "SAMPLE RATE:" << daq_p.daq_smpl_rate << endl; + std::cout << "MODE :" << daq_p.daq_mode << endl; + std::cout << "START DELAY:" <ai.count * sampleSize, 4096); + + //dan_DataCore, ds_name, devName, enum_daq_type refType, long refSize, long refOffset + if (ds == NULL) { + log_error("Error while publishing DAN source %s ", dan_source_name); + exValue = 1; + goto END; + } + + n_channels = dan_publisher_getNumberOfChannels(ds); + + // ------------------------------------------------------------------------------------------------------------------ + // ----- DAN Streamer. + // ------------------------------------------------------------------------------------------------------------------ + // ----- Open a new stream --------------------------------------------------------------------- + dan_publisher_openStream(ds, daq_p.daq_smpl_rate, 0); + sleep(1); + + // ------------------------------------------------------------------------------------------------------------------ + // ----- Main DAN Loop. + // ------------------------------------------------------------------------------------------------------------------ + while (!__terminate) { + // Wait for the master trigger.---------------------------------------------------------------------------- + daq_stat = 1; //0:Not Ready, 1: Waiting trigger, 2:Acquiring 3:Error + CAInterface_WriteVariable(daq_stat_id, daq_stat_type, &daq_stat); + daq_conf_stat = 1; //0:Not ready, 1: Ready + CAInterface_WriteVariable(daq_conf_stat_id, daq_conf_stat_type, &daq_conf_stat); + + // Wait DAQ Start Software Trigger. + do { + // check daq_sw_trigger to start DAQ sequence. + CAInterface_ReadVariable(daq_sw_trig_id, daq_sw_trig_type, (void*) &daq_sw_trig); + tcn_sleep(1e7); // wait 0.01 s + if (daq_sw_trig) { + daq_start = true; + } + } while (daq_start != true and !__terminate); + + daq_start = false; //reset daq_start flag. + delay = (long) (1e6 * daq_p.daq_pub_dly); //check publish period. + + // Wait a time to start DAQ. ---------------------------------------------------------------------------------------------------------------------- + tcn_sleep(daq_p.daq_smpl_st_dly * 1e6); // in ms + + // After the wating, trigger DAQ ------------------------------------------------------------------------------------------------------------------ + retval = xseries_pulse_ai(aifd, XSERIES_START_TRIGGER); + daq_stat = 2; + CAInterface_WriteVariable(daq_stat_id, daq_stat_type, &daq_stat); + if (retval) { + std::cout << "Cannot generate start trigger!\n"; + goto END; + } else { + tcn_get_time(&tBase); // get DAQ start time. + tBase0 = tBase; // save DAQ start time to tBase0; + tBase_old = tBase; + } + + // DAQ Publish Loop. ---------------------------------------------------------------------------------------------------------------------------- + // DAN data publish is executed every delay time interval. + while (!__terminate && (tcn_wait_until_hr((tBase + delay), &tBase, 0) == TCN_SUCCESS)) { + // Get the number of available samples in PXIe6368 buffer. + n_samples = xsereis_ai_dma_samples_in_buffer(dma); // samples + + if (n_samples > dma->ai.count) { + //log_error("DMA Buffer overflow: Number of new samples in buffer = %ld, AI buffer size = %ld,\n", n_samples, dma->ai.count); + } else if (n_samples > 0) { + //log_info("Current Time:\n%s\n", tcn_strftime(tBase, buf, ISO_8601_LEN)); + if (tBase == 0) { + // "tBase was reset.------------------------------------------------------\n"; + tcn_get_time(&tBase); + tBase -= n_samples * 100000000 / pxie6368_sampling_rate; + nanos = 0; + } else { + // update time offset value. + nanos = n_samples * 100000000 / daq_p.daq_smpl_rate; + } + n_sample_quotient = floor(n_samples / chan_num); + n_samples = n_sample_quotient * chan_num; + + // Publish a new data block -------------------------------------------------------------------------------------------------------------------------- + result = dan_publisher_putBlockReference(ds, + tBase_old + nanos, // timestamp in epoch nanoseconds + n_samples * sampleSize, // datablock size in bytes + offset_ai * sampleSize, // Offset in DAQ buffer + NULL); // No datablock header.... + // Detected overflow in pass datablock reference queue + if (result == -1) { + log_info("%s, Queue overflow with policy %d\n", dan_source_name, dan_publisher_getCheckPolicy(ds)); + } else if (result == -2) { + log_info("%s, DAQ buffer overflow with policy %d\n", dan_source_name, dan_publisher_getCheckPolicy(ds)); + } + } + + samplesCounter += n_samples; // Increment total of published sampes + offset_ai = (offset_ai + n_samples) % dma->ai.count; // Update offset of memory + dma->ai.last_transfer_count = samplesCounter; // Update dma last_transfer_count + + // Check exit condition. + if ((daq_p.daq_len * 1e6 <= (tBase - tBase0))) { + retval = xseries_stop_ai(aifd); + if (retval) { + std::cout << "Stop AI segment failed.\n"; + exit (EXIT_FAILURE); + } + + //restart ai segment. + tcn_sleep(1e9); // wait + retval = xseries_start_ai(aifd); + if (retval) { + std::cout << "Start AI segment failed.\n"; + exit (EXIT_FAILURE); + } + //debug + tcn_sleep(1e8); + n_samples = xsereis_ai_dma_samples_in_buffer(dma); + cout << "n_samples check : " << n_samples << endl; + break; + } + tBase_old = tBase; + } // End of DAQ publish loop. + break; + } // End of DAN main loop. + + // ------------------------------------------------------------------------------------------------------------------ + // ----- Closing program. + // ------------------------------------------------------------------------------------------------------------------ + log_info("DAN end of acquisition, closing all resources"); + + //Closing stream + dan_publisher_closeStream(ds); + exValue = 0; + + // Close all channels + for (int channel = 0; channel < chan_num; channel++) { + close(ai_chan_fd[channel]); + } + goto END; + + END: daq_conf_stat = 0; + CAInterface_WriteVariable(daq_conf_stat_id, daq_conf_stat_type, &daq_conf_stat); + daq_stat = 0; + CAInterface_WriteVariable(daq_stat_id, daq_stat_type, &daq_stat); + // Destroy CA context + CAInterface_Finalize(); + // Close pxie6368 + if (dma != NULL) { + xseries_dma_close(dma); + cout << "pxie-6368 dma was clesed.\n"; + } + + close(aifd); + + // Unpublishing source from DAN API + if (ds != NULL) { + dan_publisher_unpublishSource(dc, ds); + } + + // Closing DAN API library + if (dc != NULL) { + dan_closeLibrary(dc); + } + + // Closing TCN library + result = tcn_finalize(); + if (result != TCN_SUCCESS) { + //log_error("Error finalizing TCN lib.\n"); + } + + } // loop end from initialization + return (0); + +} diff --git a/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/Makefile b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/Makefile new file mode 100644 index 0000000..ab6bca0 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/Makefile @@ -0,0 +1,68 @@ +#+====================================================================== +# $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp/main/c++/prog/Makefile.template $ +# $Id: Makefile.template 83098 2018-01-08 13:23:38Z cesnikt $ +# +# Project : CODAC Core System +# +# Description : gyrotronDAN Makefile +# +# Author : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2018 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== + +PROGNAME=Gyrotron01DAN + +LIBRARIES=ca dan_api dan_client_api dan_stream dan_base xml2 log sdn sdn-core ccs-core rt pthread tcn nixseries +LIBRARY_DIRS= +INCLUDE_DIRS=. ../include $(CODAC_ROOT)/include $(EPICS_BASE)/include/os/Linux $(EPICS_BASE)/include/compiler/gcc $(EPICS_BASE)/include /usr/include/libxml2 $(SDN_TOPIC_DIRECTORY) + +TARGET=../../../../target +BINARY_DIR=$(TARGET)/bin +OBJECT_DIR=$(TARGET)/obj/$(PROGNAME) +SOURCE_DIR=. + +EXECUTABLE=$(BINARY_DIR)/$(PROGNAME) +INCLUDES=$(foreach inc,$(INCLUDE_DIRS),-I$(inc)) +LDLIBS=-L$(CODAC_ROOT)/lib -L$(EPICS_BASE)/lib/$(EPICS_HOST_ARCH) $(foreach libs,$(LIBRARY_DIRS),-L$(libs) -Wl,-rpath,$(libs)) $(foreach libs,$(LIBRARIES),-l$(libs)) +SOURCES=$(SOURCE_DIR)/$(PROGNAME).cpp $(SOURCE_DIR)/configure_sdn.cpp +# to build executable from all sources in the program directory: +#SOURCES=$(wildcard $(SOURCE_DIR)/*.cpp $(SOURCE_DIR)/*.c) +OBJECTS=$(addprefix $(OBJECT_DIR)/,$(patsubst %.cpp,%.o,$(notdir $(SOURCES)))) + +C=gcc +CC=g++ +CFLAGS=-c -Wall +CCFLAGS=-c -Wall -std=c++11 +LDFLAGS= + +.PHONY: all clean run + +all: $(SOURCES) $(EXECUTABLE) + +clean: + rm -rf "$(EXECUTABLE)" "$(OBJECT_DIR)" + +run: $(SOURCES) $(EXECUTABLE) + $(EXECUTABLE) + +$(EXECUTABLE): $(OBJECTS) + mkdir -p $(BINARY_DIR) + $(CC) $(LDFLAGS) $(LDLIBS) $(OBJECTS) -o $@ + +$(OBJECT_DIR)/%.o: $(SOURCE_DIR)/%.cpp + mkdir -p $(OBJECT_DIR) + $(CC) $(CCFLAGS) $(INCLUDES) $< -o $@ + +$(OBJECT_DIR)/%.o: $(SOURCE_DIR)/%.c + mkdir -p $(OBJECT_DIR) + $(C) $(CFLAGS) $(INCLUDES) $< -o $@ \ No newline at end of file diff --git a/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/ca-if.h b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/ca-if.h new file mode 100644 index 0000000..3bcbb4d --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/ca-if.h @@ -0,0 +1,165 @@ +#ifndef CA_IF_H +#define CA_IF_H + +/****************************************************************************** + * $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-log-lib/trunk/src/main/c++/include/tools/any-type.h $ + * $Id: any-type.h 50547 2014-10-09 12:09:51Z bauvirb $ + * + * Project : CODAC Core System + * + * Description : Channel Access Interface + * + * Author : Bertrand Bauvir + * + * Copyright (c) : 2010-2014 ITER Organization, + * CS 90 046 + * 13067 St. Paul-lez-Durance Cedex + * France + * + * This file is part of ITER CODAC software. + * For the terms and conditions of redistribution or use of this software + * refer to the file ITER-LICENSE.TXT located in the top level directory + * of the distribution package. + ******************************************************************************/ + +/* Global header files */ +#include +#include /* Channel Access API definition, etc. */ +//#include /* CCS logging library */ + +/* Local header files */ + +/* Constants */ + +#ifndef log_trace +#define log_trace(arg_msg...) {} +#endif + +#ifndef log_error +#define log_error(arg_msg...){} +#endif + +/* Type definition */ + +/* Global variables */ + +/* Public function declaration */ + +static inline bool CAInterface_Initialize(void) { + bool status = false; + ca_context_create (ca_disable_preemptive_callback); //Default + //ca_context_create(ca_enable_preemptive_callback); + status = true; + + return status; +}; + +static inline bool CAInterface_Finalize(void) { + bool status = false; + ca_context_destroy(); + status = true; + + return status; +}; + +static inline bool CAInterface_ConnectVariable(char* name, chid& id) { + bool status = false; + /* Connect to channels */ + if (ca_create_channel(name, NULL, NULL, 10, &id) != ECA_NORMAL) { + return status; + } + + /* Wait for connections */ + if (ca_pend_io(1) != ECA_NORMAL) { + log_error("%s - ca_pend_io failed", __FUNCTION__); + return status; + } + + /* Verify channel */ + if (ca_state(id) != cs_conn) { + //log_warning("Connection to channel '%s' has not been successful", name); + } else { + //log_info("Connection to channel '%s' has been successfully verified", name); + } + + status = true; + + return status; +}; + +static inline bool CAInterface_ReadVariable(chid channel, chtype type, + void* p_value) { + bool status = false; + if (ca_state(channel) != cs_conn) { + //log_error("%s - Connection to channel has been lost"); + return status; + } + + if (ca_get(type, channel, p_value) != ECA_NORMAL) { + //log_error("%s - ca_get failed", __FUNCTION__); + return status; + } + + /* Flush the requests */ + if (ca_pend_io(1) != ECA_NORMAL) { + //log_error("%s - ca_pend_io failed", __FUNCTION__); + return status; + } + + status = true; + + return status; +}; + +static inline bool CAInterface_WriteVariable(chid channel, chtype type, + void* p_value) { + bool status = false; + + if (ca_state(channel) != cs_conn) { + //log_error("%s - Connection to channel has been lost", __FUNCTION__); + return status; + } + + if (ca_put(type, channel, p_value) != ECA_NORMAL) { + //log_warning("%s - ca_put failed", __FUNCTION__); + } + + /* Flush the requests */ + if (ca_pend_io(1) != ECA_NORMAL) { + //log_error("%s - ca_pend_io failed", __FUNCTION__); + return status; + } + + status = true; + + return status; +}; + +typedef void (*pCallBack)(struct event_handler_args); + +static inline bool CAInterface_SubscribeVariable(chid channel, chtype type, + pCallBack cb_func, void* p_value) { + bool status = false; + if (ca_state(channel) != cs_conn) { + //log_error("%s - Connection to channel has been lost", __FUNCTION__); + return status; + } + + if (ca_create_subscription(type, 0, channel, DBE_VALUE, cb_func, NULL, NULL) + != ECA_NORMAL) { + //log_error("%s - ca_create_subscription failed", __FUNCTION__); + return status; + + } + /* + if(ca_pend_event(0.0) != ECA_NORMAL){ + //log_error("%s - ca_pend_event failed", __FUNCTION__); + return status; + } + */ + status = true; + + return status; +}; + +#endif /* CA_IF_H */ diff --git a/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/configure_sdn.cpp b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/configure_sdn.cpp new file mode 100644 index 0000000..fc607b1 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/configure_sdn.cpp @@ -0,0 +1,68 @@ +//+====================================================================== +// $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-sdd-translator-parts/tags/CODAC-CORE-6.0.0/org.iter.codac.sdd.translators/src/main/resources/templates/sdn/configure_sdn.cpp.vm $ +// $Id: configure_sdn.cpp.vm 83098 2018-01-08 13:23:38Z cesnikt $ +// +// Project : CODAC Core System +// +// Description : SDN Program - Gyrotron01DAN +// +// Author : Kirti Mahajan, Lana Abadie and TCS (link with velocity and SDD model) +// +// Copyright (c) : 2010-2018 ITER Organization, +// CS 90 046 +// 13067 St. Paul-lez-Durance Cedex +// France +// +// This file is part of ITER CODAC software. +// For the terms and conditions of redistribution or use of this software +// refer to the file ITER-LICENSE.TXT located in the top level directory +// of the distribution package. +// +//-====================================================================== + +#include + +#include +#include "includetopics.h" + +using namespace std; + +/* Create variables for the topics on which application is publishing */ +//+P===================================================================== +//-P===================================================================== + +/* Create variables for topics on which application is subscribing */ +//+S===================================================================== +//-S===================================================================== + +int configureSDN() +{ + + SR_RET sr_ret = SR_OK; + + //+P===================================================================== + //-P===================================================================== + + //+S===================================================================== + //-S===================================================================== + + return sr_ret; + +} + +int cleanupSDN() +{ + + SR_RET sr_ret = SR_OK; + + /* Unregister publisher */ + //+P===================================================================== + //-P===================================================================== + + /* Unregister subscriber */ + //+S===================================================================== + //-S===================================================================== + + return sr_ret; + +} \ No newline at end of file diff --git a/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/environmentVarDev b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/environmentVarDev new file mode 100644 index 0000000..fa62c0e --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/environmentVarDev @@ -0,0 +1,17 @@ +######################################## +# Program-specific environment variables +######################################## + +# INFO - This file is part of the I&C project. It can be modified without risk of being overwritten. +# INFO - This file is sourced when invoking 'mvn run -Dprog=' to allow for setting development-specific environment variables. + +# Override SDN interface name for test purposes +# Default: lo +# Project: Target host in SDD database +#SDN_INTERFACE_NAME=lo + +# INFO - This file can be further extended with anything specific required by the program. + +#LOG_FILE_ENABLE=false +#LOG_FILTER_LEVEL=info +#LOG_FWD_MODE=asyn diff --git a/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/includetopics.h b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/includetopics.h new file mode 100644 index 0000000..b7aece5 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/includetopics.h @@ -0,0 +1,29 @@ +//+====================================================================== +// $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-sdd-translator-parts/tags/CODAC-CORE-6.0.0/org.iter.codac.sdd.translators/src/main/resources/templates/sdn/includetopics.h.vm $ +// $Id: includetopics.h.vm 83098 2018-01-08 13:23:38Z cesnikt $ +// +// Project : CODAC Core System +// +// Description : SDN Program - Gyrotron01DAN +// +// Author : Kirti Mahajan, Lana Abadie and TCS (link with velocity and SDD model) +// +// Copyright (c) : 2010-2018 ITER Organization, +// CS 90 046 +// 13067 St. Paul-lez-Durance Cedex +// France +// +// This file is part of ITER CODAC software. +// For the terms and conditions of redistribution or use of this software +// refer to the file ITER-LICENSE.TXT located in the top level directory +// of the distribution package. +// +//-====================================================================== + +#ifndef INCLUDETOPICS_H +#define INCLUDETOPICS_H + +#include + + +#endif \ No newline at end of file diff --git a/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/sdd-dan.cpp b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/sdd-dan.cpp new file mode 100644 index 0000000..00886e0 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/sdd-dan.cpp @@ -0,0 +1,15 @@ +#include "sdd-dan.h" +#include +#include "stdlib.h" + +int declareDANStruct(dan_Source ds ){ + + int result=0; + int Cnt=0; + if(ds==NULL){ + log_error("Invalid call to declareDANStruct, dan source not initialized \n "); + return -1; + } + + return 0; + } \ No newline at end of file diff --git a/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/sdd-dan.h b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/sdd-dan.h new file mode 100644 index 0000000..9d1b3a8 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/sdd-dan.h @@ -0,0 +1,8 @@ +#ifndef SDD_DAN_H +#define SDD_DAN_H +#include "dan.h" + +static const char ICProgName[] = "Gyrotron01DAN"; +static const char GYADanSource[] = "GYADanSource"; + +#endif /* SDD_DAN_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/sdd-data.h b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/sdd-data.h new file mode 100644 index 0000000..73f755b --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/sdd-data.h @@ -0,0 +1,14 @@ +#ifndef SDD_DATA_H +#define SDD_DATA_H + +#include "sdd-pon-if.h" +#include "sdd-iomodule.h" + +static SDD_PONVar pvlist []={ + + }; + +static SDD_IOModule iomlist []={ + }; + +#endif /* SDD_DATA_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/sdd-iomodule.h b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/sdd-iomodule.h new file mode 100644 index 0000000..a8af1fe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/sdd-iomodule.h @@ -0,0 +1,37 @@ +#ifndef SDD_IOMODULE_H +#define SDD_IOMODULE_H + +//include all linux libraries for IO module listed in the programs + + +//max is 15 for component name +#define SDD_CPMAXLENGTH 50 +#define SDD_SERIALNBMAXLENGTH 60 +#define SDD_FDPREFIXMAXLENGTH 100 + +struct SDD_IOModule { + + //name of the module + char name[SDD_CPMAXLENGTH]; + + //type of the module + char modtype[SDD_CPMAXLENGTH]; + + //module index + int fd; + + //file descriptor name + char filedescrip_prefix[SDD_FDPREFIXMAXLENGTH]; + + //serial number + char serial_number [SDD_SERIALNBMAXLENGTH]; + +}; + +//list of symbol for IOModule : IO module type and fd +typedef enum SDD_IOModuleEnum { + + } SDD_IOModuleEnum; + + +#endif /* SDD_IOMODULE_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/sdd-pon-if.h b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/sdd-pon-if.h new file mode 100644 index 0000000..ea459e6 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/sdd-pon-if.h @@ -0,0 +1,36 @@ +#ifndef SDD_PON_IF_H +#define SDD_PON_IF_H + +#include /* Channel Access API definition, etc. */ + + +#define SDD_PVMAXLENGTH 40 +#define SDD_STRING_MAX_LENGTH 100 +#define SDD_NB_OF_PONVAR 0 //generated by SDD + +struct SDD_PONVar { + + char name[SDD_PVMAXLENGTH]; + + //if read-> monitor=yes otherwise false + bool isMonitored; + + chtype type; + + //the code can cast + char initialvalue[SDD_STRING_MAX_LENGTH]; + +}; + +//list of symbols +typedef enum SDD_PONVarEnum { + + +} SDD_PONVarEnum; + +//for each enum (bi/bo/mbbi/mbbo) name is symbolname suffix with _enum + + + + +#endif /* SDD_PON_IF_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/topicvars.h b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/topicvars.h new file mode 100644 index 0000000..dc0b827 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron01DAN/topicvars.h @@ -0,0 +1,36 @@ +//+====================================================================== +// $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-sdd-translator-parts/tags/CODAC-CORE-6.0.0/org.iter.codac.sdd.translators/src/main/resources/templates/sdn/topicvars.h.vm $ +// $Id: topicvars.h.vm 83098 2018-01-08 13:23:38Z cesnikt $ +// +// Project : CODAC Core System +// +// Description : SDN Program - Gyrotron01DAN +// +// Author : Kirti Mahajan, Lana Abadie and TCS (link with velocity and SDD model) +// +// Copyright (c) : 2010-2018 ITER Organization, +// CS 90 046 +// 13067 St. Paul-lez-Durance Cedex +// France +// +// This file is part of ITER CODAC software. +// For the terms and conditions of redistribution or use of this software +// refer to the file ITER-LICENSE.TXT located in the top level directory +// of the distribution package. +// +//-====================================================================== + +#ifndef TOPICVARS_H +#define TOPICVARS_H + +#include "includetopics.h" + +/* Declare variables for the topics on which application is publishing. */ +//+P===================================================================== +//-P===================================================================== + +/* Declare variables for the topics to which application is subscribing. */ +//+S===================================================================== +//-S===================================================================== + +#endif diff --git a/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/Gyrotron02DAN.cpp b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/Gyrotron02DAN.cpp new file mode 100644 index 0000000..06f975b --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/Gyrotron02DAN.cpp @@ -0,0 +1,639 @@ +/****************************************************************************** + * $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp-sdn/main/c++/prog/prog.cpp.template $ + * $Id: prog.cpp.template 83098 2018-01-08 13:23:38Z cesnikt $ + * + * Project : CODAC Core System + * + * Description : GyrotronDAN program + * + * Author : codac-dev + * + * Copyright (c) : 2010-2018 ITER Organization, + * CS 90 046 + * 13067 St. Paul-lez-Durance Cedex + * France + * + * This file is part of ITER CODAC software. + * For the terms and conditions of redistribution or use of this software + * refer to the file ITER-LICENSE.TXT located in the top level directory + * of the distribution package. + ******************************************************************************/ + +/* header files */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +//#include +#define float32_t float32_t1 +#include +#undef float32_t + +#include +#include +#include +#include +#include +#include + +#include + +// global variables +static bool __terminate = false; +char pxie6368_0_ai_fd[] = "/dev/pxie-6368.1.ai"; // ai segment +char pxie6368_0_device[] = "/dev/pxie-6368.1"; // device descriptor + +typedef struct { + int daq_smpl_rate; + int daq_mode; + double daq_smpl_st_dly; + double daq_len; + double daq_pub_dly; +} daq_parameters; + +void signal_handler(int signal) { + log_info("Received signal '%d' to terminate", signal); + __terminate = true; +}; + +// DAN parameter reload function ------------------------------------------------ +int reload_daq_conf(int *aifd, int *ai_chan_fd, daq_parameters *daq_p) { + std::cout << "reload_daq_conf was called \n"; + + // Common variables + int retval; + unsigned long number_of_samples; + int chan_num = 10; // Channel number to add. + uint32_t sample_period_divisor; + uint32_t base_clock = 100000000; // TB3:100MHz, TB2:100 kHz + uint32_t pre_samples = 1000; + uint32_t post_samples = 1000; + char str[40]; + xseries_ai_conf_t conf; // ai segment configuraton data + + // calculate sampling period divisor + if (daq_p->daq_smpl_rate != 0) { + sample_period_divisor = base_clock / daq_p->daq_smpl_rate; + } else { + return 0; + } + + // Stop ai segment---------------------------------------------------------------------- + retval = xseries_stop_ai(*aifd); + if (retval) { + log_error("ai segment stop failed.\n"); + } else { + log_info("ai segment stopped.\n"); + } + + // reset ai segment--------------------------------------------------------------------- + retval = xseries_reset_ai(*aifd); + if (retval) { + log_error("ai segment reset failed.\n"); + return -1; + } + + // Configure AI segment mode ------------------------------------------------------------ + switch (daq_p->daq_mode) { + case 0: + conf = xseries_software_timed_ai(); + log_info("software_timed mode.\n"); + break; + case 1: + conf = xseries_finite_ai(number_of_samples); + log_info("finite mode.\n"); + break; + case 2: + conf = xseries_retriggerable_finite_ai(number_of_samples); + log_info("retriggerable_finite mode.\n"); + break; + case 3: + conf = xseries_continuous_ai(); + log_info("continuous mode.\n"); + break; + case 4: + conf = xseries_reference_ai(pre_samples, post_samples); + log_info("reference mode.\n"); + break; + } + + // disable external gate + retval = xseries_set_ai_external_gate(&conf, + XSERIES_AI_EXTERNAL_GATE_DISABLED, // No external pause signal + XSERIES_AI_POLARITY_ACTIVE_LOW_OR_FALLING_EDGE); // Don't care + if (retval) { + log_error("Cannot set gate trigger.\n"); + return -1; + } + + // select start trigger (START1 signal) + retval = xseries_set_ai_start_trigger(&conf, + XSERIES_AI_START_TRIGGER_SW_PULSE, // Set the line to software-driven + XSERIES_AI_POLARITY_ACTIVE_HIGH_OR_RISING_EDGE, // Make line active on rising... + 1); // ... edge (not high level) + if (retval) { + log_error("Cannot set start trigger.\n"); + return -1; + } + + // set sampling clock source---------------------------------------------------------------------------------------- + retval = xseries_set_ai_sample_clock(&conf, + XSERIES_AI_SAMPLE_CONVERT_CLOCK_INTERNALTIMING, + XSERIES_AI_POLARITY_ACTIVE_HIGH_OR_RISING_EDGE, 1); + if (retval) { + log_error("Cannot configure sampling clock.\n"); + return -1; + } + + // set scan interval ------------------------------------------------------------------------------------------------------------------------- + retval = xseries_set_ai_scan_interval_counter(&conf, + XSERIES_SCAN_INTERVAL_COUNTER_TB3, // TB3 : 100MHz base clock, TB2 : 100kHz base clock + XSERIES_SCAN_INTERVAL_COUNTER_POLARITY_RISING_EDGE, + sample_period_divisor, 2); // Wait 2*100MHz sec after sampling trig. + if (retval) { + log_error("Cannot configure scan counter.\n"); + return -1; + } + + // Set DMA buffer size----------------------------------------------------------------------------------------------------------------------- + retval = xseries_set_ai_attribute(&conf, XSERIES_AI_DMA_BUFFER_SIZE, 1000); + if (retval) { + log_error("DMA configuration was failed.\n"); + return -1; + } + + // Add AI channels --------------------------------------------------------------------------------------------------------------------------- + for (int i = 0; i < chan_num; i++) { + retval = xseries_add_ai_channel(&conf, i, XSERIES_INPUT_RANGE_10V, + XSERIES_AI_CHANNEL_TYPE_DIFFERENTIAL, 0); + if (retval) { + log_error("Add AI channel %d was failed.\n", i); + return -1; + } + } + sleep(3); + + // Load configuration.----------------------------------------------------------------------------------------------------------------------- + retval = xseries_load_ai_conf(*aifd, conf); + if (retval) { + log_error("xseries_load_ai_conf was failed. error code: %d \n", retval); + exit (EXIT_FAILURE); + } + sleep(3); + + // Open channels-------------------------------------------------------------------------------------------------------------------------------- + for (int i = 0; i < chan_num; i++) { + sprintf(str, "%s.ai.%u", pxie6368_0_device, i); + //ai_chan_fd[i] = open(str, O_RDWR | O_NONBLOCK); + ai_chan_fd[i] = open(str, O_RDWR); + if (ai_chan_fd[i] < 0) { + log_error("Cannot open ai channel %d .\n",i); + sleep(1); + exit (EXIT_FAILURE); + } + } + + // start ai segment task----------------------------------------------------------------------------------------------------------------------- + retval = xseries_start_ai(*aifd); + if (retval) { + log_error("ERROR, starting AI segment failed: %s\n", strerror(retval)); + exit (EXIT_FAILURE); + } + + log_info("PXIe-6368 configuration was finished.\n"); + return 0; +}; + + + +int main(int argc, char **argv) { + using namespace std; + unsigned long n_sample_quotient = 0; + + log_initialize(NULL); + + while (!__terminate) { + // Install signal handler to support graceful termination + sigset(SIGTERM, signal_handler); + sigset(SIGINT, signal_handler); + sigset(SIGHUP, signal_handler); + + // ---------------------------------------------------------------------------------------------------------------- + // Running parameter declaration + // ---------------------------------------------------------------------------------------------------------------- + // pxie6368 hardware parameters + int pxie6368_0_device_number = 1; // device discriptor number + int aifd = 0; // ai segment file discriptor + xseries_ai_conf_t conf; // ai segment config + xseries_ai_attribute_t aiatrb; // ai segment attributes + char str[40]; // fd tmp var + int ai_chan_fd[16]; // ai channels file discriptor + int pxie6368_sampling_rate = 1000; // sampling rate Hz + uint32_t sample_period_divisor = 100000000 / pxie6368_sampling_rate; // TB3 100MHz, TB2:100kHz, TB1:20MHz + int sampleSize = 2; // Sample size in bytes <---> uInt16 + int n_channels; // Number of opened channels + struct xseries_dma *dma; // Ptr to dma struct + int chan_num = 10; // Channel number to add. + + // DAN parameters + char dan_source_name[] = "GYBDanSource"; // DAN data source (ds) name + long offset_ai = 0; // offset size in published data + int dma_mode = 1; // 0:All, 1:AI only, 2:AO only + dan_DataCore dc = NULL; // Datacore reference declaration + dan_Source ds = NULL; // DAN source declaration + long samplesCounter = 0; // Total acquired sample size + size_t n_samples; // prepared sample size to publish + + // TCN parameters + uint64_t tBase_old = 0; + uint64_t tBase = 0; // TCN publishing base time + uint64_t nanos; // time length for sampling + hpn_timestamp_t delay = 1e7; // wait for publishing (10ms) + char buf[ISO_8601_LEN]; + uint64_t tBase0 = 0; + + // Operation tmp parameter + int result; // For result values. + int exValue; + bool toterminate = false; + int retval; + bool daq_start = false; + int testcounter = 10000; + + // Connected EPCIS PV + + // DAQ config PVs + chid daq_smpl_rate_id; + chtype daq_smpl_rate_type; + int daq_smpl_rate; + chid daq_smpl_rate_rb_id; + chtype daq_smpl_rate_rb_type; + int daq_smpl_rate_rb; + chid daq_mode_id; + chtype daq_mode_type; + int daq_mode; + chid daq_mode_rb_id; + chtype daq_mode_rb_type; + int daq_mode_rb; + chid daq_sw_trig_id; + chtype daq_sw_trig_type; + int daq_sw_trig; + chid daq_smpl_st_dly_id; + chtype daq_smpl_st_dly_type; + double daq_smpl_st_dly; + chid daq_smpl_st_dly_rb_id; + chtype daq_smpl_st_dly_rb_type; + double daq_smpl_st_dly_rb; + chid daq_len_id; + chtype daq_len_type; + double daq_len; + chid daq_len_rb_id; + chtype daq_len_rb_type; + double daq_len_rb; + chid daq_reconf_id; + chtype daq_reconf_type; + int daq_reconf; + chid daq_pub_dly_id; + chtype daq_pub_dly_type; + double daq_pub_dly; + chid daq_pub_dly_rb_id; + chtype daq_pub_dly_rb_type; + double daq_pub_dly_rb; + + chid daq_stat_id; + chtype daq_stat_type; + int daq_stat; + chid daq_conf_stat_id; + chtype daq_conf_stat_type; + int daq_conf_stat; + + daq_parameters daq_p = { 0 }; // = {daq_smpl_rate, daq_smpl_rate_rb, daq_mode, daq_mode_rb}; + + // ---------------------------------------------------------------------------------------------------------------------------------------------- + // EPICS PV connection + // ---------------------------------------------------------------------------------------------------------------------------------------------- + //Initialize ChannelAccess interface + CAInterface_Initialize(); + + // Connect to EPICS PVs + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE", daq_smpl_rate_id); + daq_smpl_rate_type = DBR_LONG; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE-RB", daq_smpl_rate_rb_id); + daq_smpl_rate_rb_type = DBR_LONG; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-MODE", daq_mode_id); + daq_mode_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-MODE-RB", daq_mode_rb_id); + daq_mode_rb_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-SW-TRIG", daq_sw_trig_id); + daq_sw_trig_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-SMPL-ST-DLY", daq_smpl_st_dly_id); + daq_smpl_st_dly_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-SMPL-ST-DLY-RB", daq_smpl_st_dly_rb_id); + daq_smpl_st_dly_rb_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-LEN", daq_len_id); + daq_len_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-LEN-RB", daq_len_rb_id); + daq_len_rb_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-RECONF", daq_reconf_id); + daq_reconf_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-PUB-DLY", daq_pub_dly_id); + daq_pub_dly_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-PUB-DLY-RB", daq_pub_dly_rb_id); + daq_pub_dly_rb_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-STAT", daq_stat_id); + daq_stat_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-CONF-STAT", daq_conf_stat_id); + daq_conf_stat_type = DBR_ENUM; + + tcn_sleep(3e9);// Wait for a while. + + // ---------------------------------------------------------------------------------------------------------------- + // Initialize tcn library + // ---------------------------------------------------------------------------------------------------------------- + int tcn_err; + tcn_err = tcn_init(); + if (tcn_err != TCN_SUCCESS) { + log_error("TCN Initialization failed.\n"); + exValue = 1; + goto END; + } + + // ---------------------------------------------------------------------------------------------------------------- + // pxie-6368 settings + // ---------------------------------------------------------------------------------------------------------------- + // Open ai segment---------------------------------------------------------------------- + aifd = open(pxie6368_0_ai_fd, O_RDWR); + if (aifd <= 0) { + log_error("Open PXIe6368 AI fd failed.\n"); + exValue = -1; + goto END; + } + + // wait ai segment setup start + do { + CAInterface_ReadVariable(daq_reconf_id, daq_reconf_type, (void*) &daq_reconf); + } while (!daq_reconf and !__terminate); + + // read parameter + result = CAInterface_ReadVariable(daq_smpl_rate_id, daq_smpl_rate_type, (void *) &daq_p.daq_smpl_rate); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_mode_id, daq_mode_type, (void *) &daq_p.daq_mode); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_smpl_st_dly_id, daq_smpl_st_dly_type, (void *) &daq_p.daq_smpl_st_dly); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_len_id, daq_len_type, (void *) &daq_p.daq_len); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_pub_dly_id, daq_pub_dly_type, (void *) &daq_p.daq_pub_dly); + if (!result) { + log_error("CA_READ failed.\n"); + } + + std::cout << "SAMPLE RATE:" << daq_p.daq_smpl_rate << endl; + std::cout << "MODE :" << daq_p.daq_mode << endl; + std::cout << "START DELAY:" <ai.count * sampleSize, 4096); + + //dan_DataCore, ds_name, devName, enum_daq_type refType, long refSize, long refOffset + if (ds == NULL) { + log_error("Error while publishing DAN source %s ", dan_source_name); + exValue = 1; + goto END; + } + + n_channels = dan_publisher_getNumberOfChannels(ds); + + // ------------------------------------------------------------------------------------------------------------------ + // ----- DAN Streamer. + // ------------------------------------------------------------------------------------------------------------------ + // ----- Open a new stream --------------------------------------------------------------------- + dan_publisher_openStream(ds, daq_p.daq_smpl_rate, 0); + sleep(1); + + // ------------------------------------------------------------------------------------------------------------------ + // ----- Main DAN Loop. + // ------------------------------------------------------------------------------------------------------------------ + while (!__terminate) { + // Wait for the master trigger.---------------------------------------------------------------------------- + daq_stat = 1; //0:Not Ready, 1: Waiting trigger, 2:Acquiring 3:Error + CAInterface_WriteVariable(daq_stat_id, daq_stat_type, &daq_stat); + daq_conf_stat = 1; //0:Not ready, 1: Ready + CAInterface_WriteVariable(daq_conf_stat_id, daq_conf_stat_type, &daq_conf_stat); + + // Wait DAQ Start Software Trigger. + do { + // check daq_sw_trigger to start DAQ sequence. + CAInterface_ReadVariable(daq_sw_trig_id, daq_sw_trig_type, (void*) &daq_sw_trig); + tcn_sleep(1e7); // wait 0.01 s + if (daq_sw_trig) { + daq_start = true; + } + } while (daq_start != true and !__terminate); + + daq_start = false; //reset daq_start flag. + delay = (long) (1e6 * daq_p.daq_pub_dly); //check publish period. + + // Wait a time to start DAQ. ---------------------------------------------------------------------------------------------------------------------- + tcn_sleep(daq_p.daq_smpl_st_dly * 1e6); // in ms + + // After the wating, trigger DAQ ------------------------------------------------------------------------------------------------------------------ + retval = xseries_pulse_ai(aifd, XSERIES_START_TRIGGER); + daq_stat = 2; + CAInterface_WriteVariable(daq_stat_id, daq_stat_type, &daq_stat); + if (retval) { + std::cout << "Cannot generate start trigger!\n"; + goto END; + } else { + tcn_get_time(&tBase); // get DAQ start time. + tBase0 = tBase; // save DAQ start time to tBase0; + tBase_old = tBase; + } + + // DAQ Publish Loop. ---------------------------------------------------------------------------------------------------------------------------- + // DAN data publish is executed every delay time interval. + while (!__terminate && (tcn_wait_until_hr((tBase + delay), &tBase, 0) == TCN_SUCCESS)) { + // Get the number of available samples in PXIe6368 buffer. + n_samples = xsereis_ai_dma_samples_in_buffer(dma); // samples + + if (n_samples > dma->ai.count) { + //log_error("DMA Buffer overflow: Number of new samples in buffer = %ld, AI buffer size = %ld,\n", n_samples, dma->ai.count); + } else if (n_samples > 0) { + //log_info("Current Time:\n%s\n", tcn_strftime(tBase, buf, ISO_8601_LEN)); + if (tBase == 0) { + // "tBase was reset.------------------------------------------------------\n"; + tcn_get_time(&tBase); + tBase -= n_samples * 100000000 / pxie6368_sampling_rate; + nanos = 0; + } else { + // update time offset value. + nanos = n_samples * 100000000 / daq_p.daq_smpl_rate; + } + n_sample_quotient = floor(n_samples / chan_num); + n_samples = n_sample_quotient * chan_num; + + // Publish a new data block -------------------------------------------------------------------------------------------------------------------------- + result = dan_publisher_putBlockReference(ds, + tBase_old + nanos, // timestamp in epoch nanoseconds + n_samples * sampleSize, // datablock size in bytes + offset_ai * sampleSize, // Offset in DAQ buffer + NULL); // No datablock header.... + // Detected overflow in pass datablock reference queue + if (result == -1) { + log_info("%s, Queue overflow with policy %d\n", dan_source_name, dan_publisher_getCheckPolicy(ds)); + } else if (result == -2) { + log_info("%s, DAQ buffer overflow with policy %d\n", dan_source_name, dan_publisher_getCheckPolicy(ds)); + } + } + + samplesCounter += n_samples; // Increment total of published sampes + offset_ai = (offset_ai + n_samples) % dma->ai.count; // Update offset of memory + dma->ai.last_transfer_count = samplesCounter; // Update dma last_transfer_count + + // Check exit condition. + if ((daq_p.daq_len * 1e6 <= (tBase - tBase0))) { + retval = xseries_stop_ai(aifd); + if (retval) { + std::cout << "Stop AI segment failed.\n"; + exit (EXIT_FAILURE); + } + + //restart ai segment. + tcn_sleep(1e9); // wait + retval = xseries_start_ai(aifd); + if (retval) { + std::cout << "Start AI segment failed.\n"; + exit (EXIT_FAILURE); + } + //debug + tcn_sleep(1e8); + n_samples = xsereis_ai_dma_samples_in_buffer(dma); + cout << "n_samples check : " << n_samples << endl; + break; + } + tBase_old = tBase; + } // End of DAQ publish loop. + break; + } // End of DAN main loop. + + // ------------------------------------------------------------------------------------------------------------------ + // ----- Closing program. + // ------------------------------------------------------------------------------------------------------------------ + log_info("DAN end of acquisition, closing all resources"); + + //Closing stream + dan_publisher_closeStream(ds); + exValue = 0; + + // Close all channels + for (int channel = 0; channel < chan_num; channel++) { + close(ai_chan_fd[channel]); + } + goto END; + + END: daq_conf_stat = 0; + CAInterface_WriteVariable(daq_conf_stat_id, daq_conf_stat_type, &daq_conf_stat); + daq_stat = 0; + CAInterface_WriteVariable(daq_stat_id, daq_stat_type, &daq_stat); + // Destroy CA context + CAInterface_Finalize(); + // Close pxie6368 + if (dma != NULL) { + xseries_dma_close(dma); + cout << "pxie-6368 dma was clesed.\n"; + } + + close(aifd); + + // Unpublishing source from DAN API + if (ds != NULL) { + dan_publisher_unpublishSource(dc, ds); + } + + // Closing DAN API library + if (dc != NULL) { + dan_closeLibrary(dc); + } + + // Closing TCN library + result = tcn_finalize(); + if (result != TCN_SUCCESS) { + //log_error("Error finalizing TCN lib.\n"); + } + + } // loop end from initialization + return (0); + +} diff --git a/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/Makefile b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/Makefile new file mode 100644 index 0000000..e0d79f8 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/Makefile @@ -0,0 +1,68 @@ +#+====================================================================== +# $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp/main/c++/prog/Makefile.template $ +# $Id: Makefile.template 83098 2018-01-08 13:23:38Z cesnikt $ +# +# Project : CODAC Core System +# +# Description : gyrotronDAN Makefile +# +# Author : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2018 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== + +PROGNAME=Gyrotron02DAN + +LIBRARIES=ca dan_api dan_client_api dan_stream dan_base xml2 log sdn sdn-core ccs-core rt pthread tcn nixseries +LIBRARY_DIRS= +INCLUDE_DIRS=. ../include $(CODAC_ROOT)/include $(EPICS_BASE)/include/os/Linux $(EPICS_BASE)/include/compiler/gcc $(EPICS_BASE)/include /usr/include/libxml2 $(SDN_TOPIC_DIRECTORY) + +TARGET=../../../../target +BINARY_DIR=$(TARGET)/bin +OBJECT_DIR=$(TARGET)/obj/$(PROGNAME) +SOURCE_DIR=. + +EXECUTABLE=$(BINARY_DIR)/$(PROGNAME) +INCLUDES=$(foreach inc,$(INCLUDE_DIRS),-I$(inc)) +LDLIBS=-L$(CODAC_ROOT)/lib -L$(EPICS_BASE)/lib/$(EPICS_HOST_ARCH) $(foreach libs,$(LIBRARY_DIRS),-L$(libs) -Wl,-rpath,$(libs)) $(foreach libs,$(LIBRARIES),-l$(libs)) +SOURCES=$(SOURCE_DIR)/$(PROGNAME).cpp $(SOURCE_DIR)/configure_sdn.cpp +# to build executable from all sources in the program directory: +#SOURCES=$(wildcard $(SOURCE_DIR)/*.cpp $(SOURCE_DIR)/*.c) +OBJECTS=$(addprefix $(OBJECT_DIR)/,$(patsubst %.cpp,%.o,$(notdir $(SOURCES)))) + +C=gcc +CC=g++ +CFLAGS=-c -Wall +CCFLAGS=-c -Wall -std=c++11 +LDFLAGS= + +.PHONY: all clean run + +all: $(SOURCES) $(EXECUTABLE) + +clean: + rm -rf "$(EXECUTABLE)" "$(OBJECT_DIR)" + +run: $(SOURCES) $(EXECUTABLE) + $(EXECUTABLE) + +$(EXECUTABLE): $(OBJECTS) + mkdir -p $(BINARY_DIR) + $(CC) $(LDFLAGS) $(LDLIBS) $(OBJECTS) -o $@ + +$(OBJECT_DIR)/%.o: $(SOURCE_DIR)/%.cpp + mkdir -p $(OBJECT_DIR) + $(CC) $(CCFLAGS) $(INCLUDES) $< -o $@ + +$(OBJECT_DIR)/%.o: $(SOURCE_DIR)/%.c + mkdir -p $(OBJECT_DIR) + $(C) $(CFLAGS) $(INCLUDES) $< -o $@ \ No newline at end of file diff --git a/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/ca-if.h b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/ca-if.h new file mode 100644 index 0000000..3bcbb4d --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/ca-if.h @@ -0,0 +1,165 @@ +#ifndef CA_IF_H +#define CA_IF_H + +/****************************************************************************** + * $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-log-lib/trunk/src/main/c++/include/tools/any-type.h $ + * $Id: any-type.h 50547 2014-10-09 12:09:51Z bauvirb $ + * + * Project : CODAC Core System + * + * Description : Channel Access Interface + * + * Author : Bertrand Bauvir + * + * Copyright (c) : 2010-2014 ITER Organization, + * CS 90 046 + * 13067 St. Paul-lez-Durance Cedex + * France + * + * This file is part of ITER CODAC software. + * For the terms and conditions of redistribution or use of this software + * refer to the file ITER-LICENSE.TXT located in the top level directory + * of the distribution package. + ******************************************************************************/ + +/* Global header files */ +#include +#include /* Channel Access API definition, etc. */ +//#include /* CCS logging library */ + +/* Local header files */ + +/* Constants */ + +#ifndef log_trace +#define log_trace(arg_msg...) {} +#endif + +#ifndef log_error +#define log_error(arg_msg...){} +#endif + +/* Type definition */ + +/* Global variables */ + +/* Public function declaration */ + +static inline bool CAInterface_Initialize(void) { + bool status = false; + ca_context_create (ca_disable_preemptive_callback); //Default + //ca_context_create(ca_enable_preemptive_callback); + status = true; + + return status; +}; + +static inline bool CAInterface_Finalize(void) { + bool status = false; + ca_context_destroy(); + status = true; + + return status; +}; + +static inline bool CAInterface_ConnectVariable(char* name, chid& id) { + bool status = false; + /* Connect to channels */ + if (ca_create_channel(name, NULL, NULL, 10, &id) != ECA_NORMAL) { + return status; + } + + /* Wait for connections */ + if (ca_pend_io(1) != ECA_NORMAL) { + log_error("%s - ca_pend_io failed", __FUNCTION__); + return status; + } + + /* Verify channel */ + if (ca_state(id) != cs_conn) { + //log_warning("Connection to channel '%s' has not been successful", name); + } else { + //log_info("Connection to channel '%s' has been successfully verified", name); + } + + status = true; + + return status; +}; + +static inline bool CAInterface_ReadVariable(chid channel, chtype type, + void* p_value) { + bool status = false; + if (ca_state(channel) != cs_conn) { + //log_error("%s - Connection to channel has been lost"); + return status; + } + + if (ca_get(type, channel, p_value) != ECA_NORMAL) { + //log_error("%s - ca_get failed", __FUNCTION__); + return status; + } + + /* Flush the requests */ + if (ca_pend_io(1) != ECA_NORMAL) { + //log_error("%s - ca_pend_io failed", __FUNCTION__); + return status; + } + + status = true; + + return status; +}; + +static inline bool CAInterface_WriteVariable(chid channel, chtype type, + void* p_value) { + bool status = false; + + if (ca_state(channel) != cs_conn) { + //log_error("%s - Connection to channel has been lost", __FUNCTION__); + return status; + } + + if (ca_put(type, channel, p_value) != ECA_NORMAL) { + //log_warning("%s - ca_put failed", __FUNCTION__); + } + + /* Flush the requests */ + if (ca_pend_io(1) != ECA_NORMAL) { + //log_error("%s - ca_pend_io failed", __FUNCTION__); + return status; + } + + status = true; + + return status; +}; + +typedef void (*pCallBack)(struct event_handler_args); + +static inline bool CAInterface_SubscribeVariable(chid channel, chtype type, + pCallBack cb_func, void* p_value) { + bool status = false; + if (ca_state(channel) != cs_conn) { + //log_error("%s - Connection to channel has been lost", __FUNCTION__); + return status; + } + + if (ca_create_subscription(type, 0, channel, DBE_VALUE, cb_func, NULL, NULL) + != ECA_NORMAL) { + //log_error("%s - ca_create_subscription failed", __FUNCTION__); + return status; + + } + /* + if(ca_pend_event(0.0) != ECA_NORMAL){ + //log_error("%s - ca_pend_event failed", __FUNCTION__); + return status; + } + */ + status = true; + + return status; +}; + +#endif /* CA_IF_H */ diff --git a/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/configure_sdn.cpp b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/configure_sdn.cpp new file mode 100644 index 0000000..9088cc2 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/configure_sdn.cpp @@ -0,0 +1,68 @@ +//+====================================================================== +// $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-sdd-translator-parts/tags/CODAC-CORE-6.0.0/org.iter.codac.sdd.translators/src/main/resources/templates/sdn/configure_sdn.cpp.vm $ +// $Id: configure_sdn.cpp.vm 83098 2018-01-08 13:23:38Z cesnikt $ +// +// Project : CODAC Core System +// +// Description : SDN Program - Gyrotron02DAN +// +// Author : Kirti Mahajan, Lana Abadie and TCS (link with velocity and SDD model) +// +// Copyright (c) : 2010-2018 ITER Organization, +// CS 90 046 +// 13067 St. Paul-lez-Durance Cedex +// France +// +// This file is part of ITER CODAC software. +// For the terms and conditions of redistribution or use of this software +// refer to the file ITER-LICENSE.TXT located in the top level directory +// of the distribution package. +// +//-====================================================================== + +#include + +#include +#include "includetopics.h" + +using namespace std; + +/* Create variables for the topics on which application is publishing */ +//+P===================================================================== +//-P===================================================================== + +/* Create variables for topics on which application is subscribing */ +//+S===================================================================== +//-S===================================================================== + +int configureSDN() +{ + + SR_RET sr_ret = SR_OK; + + //+P===================================================================== + //-P===================================================================== + + //+S===================================================================== + //-S===================================================================== + + return sr_ret; + +} + +int cleanupSDN() +{ + + SR_RET sr_ret = SR_OK; + + /* Unregister publisher */ + //+P===================================================================== + //-P===================================================================== + + /* Unregister subscriber */ + //+S===================================================================== + //-S===================================================================== + + return sr_ret; + +} \ No newline at end of file diff --git a/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/environmentVarDev b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/environmentVarDev new file mode 100644 index 0000000..fa62c0e --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/environmentVarDev @@ -0,0 +1,17 @@ +######################################## +# Program-specific environment variables +######################################## + +# INFO - This file is part of the I&C project. It can be modified without risk of being overwritten. +# INFO - This file is sourced when invoking 'mvn run -Dprog=' to allow for setting development-specific environment variables. + +# Override SDN interface name for test purposes +# Default: lo +# Project: Target host in SDD database +#SDN_INTERFACE_NAME=lo + +# INFO - This file can be further extended with anything specific required by the program. + +#LOG_FILE_ENABLE=false +#LOG_FILTER_LEVEL=info +#LOG_FWD_MODE=asyn diff --git a/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/includetopics.h b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/includetopics.h new file mode 100644 index 0000000..0c4212c --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/includetopics.h @@ -0,0 +1,29 @@ +//+====================================================================== +// $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-sdd-translator-parts/tags/CODAC-CORE-6.0.0/org.iter.codac.sdd.translators/src/main/resources/templates/sdn/includetopics.h.vm $ +// $Id: includetopics.h.vm 83098 2018-01-08 13:23:38Z cesnikt $ +// +// Project : CODAC Core System +// +// Description : SDN Program - Gyrotron02DAN +// +// Author : Kirti Mahajan, Lana Abadie and TCS (link with velocity and SDD model) +// +// Copyright (c) : 2010-2018 ITER Organization, +// CS 90 046 +// 13067 St. Paul-lez-Durance Cedex +// France +// +// This file is part of ITER CODAC software. +// For the terms and conditions of redistribution or use of this software +// refer to the file ITER-LICENSE.TXT located in the top level directory +// of the distribution package. +// +//-====================================================================== + +#ifndef INCLUDETOPICS_H +#define INCLUDETOPICS_H + +#include + + +#endif \ No newline at end of file diff --git a/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/sdd-dan.cpp b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/sdd-dan.cpp new file mode 100644 index 0000000..00886e0 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/sdd-dan.cpp @@ -0,0 +1,15 @@ +#include "sdd-dan.h" +#include +#include "stdlib.h" + +int declareDANStruct(dan_Source ds ){ + + int result=0; + int Cnt=0; + if(ds==NULL){ + log_error("Invalid call to declareDANStruct, dan source not initialized \n "); + return -1; + } + + return 0; + } \ No newline at end of file diff --git a/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/sdd-dan.h b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/sdd-dan.h new file mode 100644 index 0000000..230aa06 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/sdd-dan.h @@ -0,0 +1,8 @@ +#ifndef SDD_DAN_H +#define SDD_DAN_H +#include "dan.h" + +static const char ICProgName[] = "Gyrotron02DAN"; +static const char GYBDanSource[] = "GYBDanSource"; + +#endif /* SDD_DAN_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/sdd-data.h b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/sdd-data.h new file mode 100644 index 0000000..73f755b --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/sdd-data.h @@ -0,0 +1,14 @@ +#ifndef SDD_DATA_H +#define SDD_DATA_H + +#include "sdd-pon-if.h" +#include "sdd-iomodule.h" + +static SDD_PONVar pvlist []={ + + }; + +static SDD_IOModule iomlist []={ + }; + +#endif /* SDD_DATA_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/sdd-iomodule.h b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/sdd-iomodule.h new file mode 100644 index 0000000..a8af1fe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/sdd-iomodule.h @@ -0,0 +1,37 @@ +#ifndef SDD_IOMODULE_H +#define SDD_IOMODULE_H + +//include all linux libraries for IO module listed in the programs + + +//max is 15 for component name +#define SDD_CPMAXLENGTH 50 +#define SDD_SERIALNBMAXLENGTH 60 +#define SDD_FDPREFIXMAXLENGTH 100 + +struct SDD_IOModule { + + //name of the module + char name[SDD_CPMAXLENGTH]; + + //type of the module + char modtype[SDD_CPMAXLENGTH]; + + //module index + int fd; + + //file descriptor name + char filedescrip_prefix[SDD_FDPREFIXMAXLENGTH]; + + //serial number + char serial_number [SDD_SERIALNBMAXLENGTH]; + +}; + +//list of symbol for IOModule : IO module type and fd +typedef enum SDD_IOModuleEnum { + + } SDD_IOModuleEnum; + + +#endif /* SDD_IOMODULE_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/sdd-pon-if.h b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/sdd-pon-if.h new file mode 100644 index 0000000..ea459e6 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/sdd-pon-if.h @@ -0,0 +1,36 @@ +#ifndef SDD_PON_IF_H +#define SDD_PON_IF_H + +#include /* Channel Access API definition, etc. */ + + +#define SDD_PVMAXLENGTH 40 +#define SDD_STRING_MAX_LENGTH 100 +#define SDD_NB_OF_PONVAR 0 //generated by SDD + +struct SDD_PONVar { + + char name[SDD_PVMAXLENGTH]; + + //if read-> monitor=yes otherwise false + bool isMonitored; + + chtype type; + + //the code can cast + char initialvalue[SDD_STRING_MAX_LENGTH]; + +}; + +//list of symbols +typedef enum SDD_PONVarEnum { + + +} SDD_PONVarEnum; + +//for each enum (bi/bo/mbbi/mbbo) name is symbolname suffix with _enum + + + + +#endif /* SDD_PON_IF_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/topicvars.h b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/topicvars.h new file mode 100644 index 0000000..1a4216b --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/Gyrotron02DAN/topicvars.h @@ -0,0 +1,36 @@ +//+====================================================================== +// $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-sdd-translator-parts/tags/CODAC-CORE-6.0.0/org.iter.codac.sdd.translators/src/main/resources/templates/sdn/topicvars.h.vm $ +// $Id: topicvars.h.vm 83098 2018-01-08 13:23:38Z cesnikt $ +// +// Project : CODAC Core System +// +// Description : SDN Program - Gyrotron02DAN +// +// Author : Kirti Mahajan, Lana Abadie and TCS (link with velocity and SDD model) +// +// Copyright (c) : 2010-2018 ITER Organization, +// CS 90 046 +// 13067 St. Paul-lez-Durance Cedex +// France +// +// This file is part of ITER CODAC software. +// For the terms and conditions of redistribution or use of this software +// refer to the file ITER-LICENSE.TXT located in the top level directory +// of the distribution package. +// +//-====================================================================== + +#ifndef TOPICVARS_H +#define TOPICVARS_H + +#include "includetopics.h" + +/* Declare variables for the topics on which application is publishing. */ +//+P===================================================================== +//-P===================================================================== + +/* Declare variables for the topics to which application is subscribing. */ +//+S===================================================================== +//-S===================================================================== + +#endif diff --git a/EC-GN-JA-PCF-IN/src/main/c++/Makefile b/EC-GN-JA-PCF-IN/src/main/c++/Makefile new file mode 100644 index 0000000..0a725f5 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/Makefile @@ -0,0 +1,31 @@ +#+====================================================================== +# $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp/main/c++/Makefile $ +# $Id: Makefile 83098 2018-01-08 13:23:38Z cesnikt $ +# +# Project : CODAC Core System +# +# Description : C++ Makefile +# +# Author : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2018 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== + +SUBDIRS=$(dir $(wildcard */Makefile)) + +BOLD=\e[1m +NC=\e[0m + +all: + +%: + @$(foreach dir, $(SUBDIRS), echo -e "$(BOLD)Building $(dir:/=)...$(NC)" && $(MAKE) -C $(dir) $@ &&) : diff --git a/EC-GN-JA-PCF-IN/src/main/c++/conf/Gyrotron01DAN_danconf.xml b/EC-GN-JA-PCF-IN/src/main/c++/conf/Gyrotron01DAN_danconf.xml new file mode 100644 index 0000000..01faa30 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/conf/Gyrotron01DAN_danconf.xml @@ -0,0 +1,101 @@ + + + + + 1.0.0 + + + + danInt16 + + 100000 + + + DATA_D0 + + DM_BLOCK2D_VAR + + CHECK_AND_OVERWRITE + + 1000 + + 1 + + UTC + + + + GYADanSource + + v1.3 + + 0 + + N1134342 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ALL + + + + + + IF_FAIL_NEXT + + ${DAN_ARCHIVE_MASTER} + + ${DAN_ARCHIVE_SLAVE} + + + + + diff --git a/EC-GN-JA-PCF-IN/src/main/c++/conf/Gyrotron02DAN_danconf.xml b/EC-GN-JA-PCF-IN/src/main/c++/conf/Gyrotron02DAN_danconf.xml new file mode 100644 index 0000000..5607efe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/conf/Gyrotron02DAN_danconf.xml @@ -0,0 +1,101 @@ + + + + + 1.0.0 + + + + danInt16 + + 100000 + + + DATA_D0 + + DM_BLOCK2D_VAR + + CHECK_AND_OVERWRITE + + 1000 + + 1 + + UTC + + + + GYBDanSource + + v1.3 + + 0 + + N1134342 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ALL + + + + + + IF_FAIL_NEXT + + ${DAN_ARCHIVE_MASTER} + + ${DAN_ARCHIVE_SLAVE} + + + + + diff --git a/EC-GN-JA-PCF-IN/src/main/c++/conf/environmentVarDev b/EC-GN-JA-PCF-IN/src/main/c++/conf/environmentVarDev new file mode 100644 index 0000000..ab5d5da --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/conf/environmentVarDev @@ -0,0 +1,14 @@ +############################################ +# I&C project-specific environment variables +############################################ + +# INFO - This file is part of the I&C project. It can be modified without risk of being overwritten. +# INFO - This file is sourced when invoking 'mvn run' to allow for setting development-specific environment variables. + +# INFO - This file can be further extended with anything specific required by the I&C project. + +#LOG_FILE_ENABLE=false +#LOG_FILTER_LEVEL=info +#LOG_FWD_MODE=asyn + +export DAN_ARCHIVE_MASTER=192.168.102.3:9999 \ No newline at end of file diff --git a/EC-GN-JA-PCF-IN/src/main/c++/include/ccs-headers.h b/EC-GN-JA-PCF-IN/src/main/c++/include/ccs-headers.h new file mode 100644 index 0000000..2f10a54 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/include/ccs-headers.h @@ -0,0 +1,36 @@ +#ifndef CCS_HEADERS_H +#define CCS_HEADERS_H + +/****************************************************************************** +* $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp/main/c++/include/ccs-headers.h $ +* $Id: ccs-headers.h 83715 2018-01-30 16:31:40Z abadiel $ +* +* Project : CODAC Core System +* +* Description : CODAC Core System - Commonly used program headers +* +* Author : Bertrand Bauvir +* +* Copyright (c) : 2010-2018 ITER Organization, +* CS 90 046 +* 13067 St. Paul-lez-Durance Cedex +* France +* +* This file is part of ITER CODAC software. +* For the terms and conditions of redistribution or use of this software +* refer to the file ITER-LICENSE.TXT located in the top level directory +* of the distribution package. +******************************************************************************/ + +/* log.h -- Part of CCS. It includes the declaration of the logging library API. */ +#include /* This file is mandatory to compile this program against the logging library and API. */ + +/* sdn.h -- Part of CCS. It includes the declaration of the SDN library API. */ +#include /* This file is mandatory to compile this program against the SDN core library and API. */ + +/* tcn.h -- Part of CCS. It includes the declaration of the TCN library API. */ +#include /* This file is optional and can be removed if the program does not need to handle ITER time or operate on it. */ + +/* dan.h -- part of CCS. It includes the declaration of the DAN library API. */ +#include /* This file is optional and can be removed if the program does not need to handle ITER time or operate on it. */ +#endif /* CCS_HEADERS_H */ diff --git a/EC-GN-JA-PCF-IN/src/main/c++/include/sys-headers.h b/EC-GN-JA-PCF-IN/src/main/c++/include/sys-headers.h new file mode 100644 index 0000000..00318e3 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/include/sys-headers.h @@ -0,0 +1,32 @@ +#ifndef SYS_HEADERS_H +#define SYS_HEADERS_H + +/****************************************************************************** +* $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp/main/c++/include/sys-headers.h $ +* $Id: sys-headers.h 83098 2018-01-08 13:23:38Z cesnikt $ +* +* Project : CODAC Core System +* +* Description : CODAC Core System - Commonly used program headers +* +* Author : Bertrand Bauvir +* +* Copyright (c) : 2010-2018 ITER Organization, +* CS 90 046 +* 13067 St. Paul-lez-Durance Cedex +* France +* +* This file is part of ITER CODAC software. +* For the terms and conditions of redistribution or use of this software +* refer to the file ITER-LICENSE.TXT located in the top level directory +* of the distribution package. +******************************************************************************/ + +#include +#include /* sscanf, printf, etc. */ +//#include +#include /* strncpy, etc. */ +#include /* va_start, etc. */ +#include /* sigset, etc. */ + +#endif /* SYS_HEADERS_H */ diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/.gitignore b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/.gitignore new file mode 100644 index 0000000..5eba449 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/.gitignore @@ -0,0 +1,2 @@ +Build/ + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s.csv b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s.csv new file mode 100644 index 0000000..98fb573 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s.csv @@ -0,0 +1,1013 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,60,45,10,10,10,10 +10,55,40,9,9,9,9 +20,50,35,8,8,8,8 +30,45,30,7,7,7,7 +40,40,25,6,6,6,6 +50,35,20,5,5,5,5 +60,30,15,4,4,4,4 +70,25,10,3,3,3,3 +80,20,5,2,2,2,2 +90,15,0,1,1,1,1 +100,10,-5,0,0,0,0 +110,5,0,1,1,1,1 +120,0,5,2,2,2,2 +130,-5,10,3,3,3,3 +140,0,15,4,4,4,4 +150,5,20,5,5,5,5 +160,10,25,6,6,6,6 +170,15,30,7,7,7,7 +180,20,35,8,8,8,8 +190,25,40,9,9,9,9 +200,30,45,10,10,10,10 +210,35,40,11,9,9,9 +220,40,35,12,8,8,8 +230,45,30,11,7,7,7 +240,50,25,10,6,6,6 +250,55,20,9,5,5,5 +260,60,15,8,4,4,4 +270,55,10,7,3,3,3 +280,50,5,6,2,2,2 +290,45,0,5,1,1,1 +300,40,-5,4,0,0,0 +310,35,0,3,1,1,1 +320,30,5,2,2,2,2 +330,25,10,1,3,3,3 +340,20,15,0,4,4,4 +350,15,20,1,5,5,5 +360,10,25,2,6,6,6 +370,5,30,3,7,7,7 +380,0,35,4,8,8,8 +390,-5,40,5,9,9,9 +400,0,45,6,10,10,10 +410,5,40,7,9,9,9 +420,10,35,8,8,8,8 +430,15,30,9,7,7,7 +440,20,25,10,6,6,6 +450,25,20,11,5,5,5 +460,30,15,12,4,4,4 +470,35,10,11,3,3,3 +480,40,5,10,2,2,2 +490,45,0,9,1,1,1 +500,50,-5,8,0,0,0 +510,55,0,7,1,1,1 +520,60,5,6,2,2,2 +530,55,10,5,3,3,3 +540,50,15,4,4,4,4 +550,45,20,3,5,5,5 +560,40,25,2,6,6,6 +570,35,30,1,7,7,7 +580,30,35,0,8,8,8 +590,25,40,1,9,9,9 +600,20,45,2,10,10,10 +610,15,40,3,9,9,9 +620,10,35,4,8,8,8 +630,5,30,5,7,7,7 +640,0,25,6,6,6,6 +650,-5,20,7,5,5,5 +660,0,15,8,4,4,4 +670,5,10,9,3,3,3 +680,10,5,10,2,2,2 +690,15,0,11,1,1,1 +700,20,-5,12,0,0,0 +710,25,0,11,1,1,1 +720,30,5,10,2,2,2 +730,35,10,9,3,3,3 +740,40,15,8,4,4,4 +750,45,20,7,5,5,5 +760,50,25,6,6,6,6 +770,55,30,5,7,7,7 +780,60,35,4,8,8,8 +790,55,40,3,9,9,9 +800,50,45,2,10,10,10 +810,45,40,1,9,9,9 +820,40,35,0,8,8,8 +830,35,30,1,7,7,7 +840,30,25,2,6,6,6 +850,25,20,3,5,5,5 +860,20,15,4,4,4,4 +870,15,10,5,3,3,3 +880,10,5,6,2,2,2 +890,5,0,7,1,1,1 +900,0,-5,8,0,0,0 +910,-5,0,9,1,1,1 +920,0,5,10,2,2,2 +930,5,10,11,3,3,3 +940,10,15,12,4,4,4 +950,15,20,11,5,5,5 +960,20,25,10,6,6,6 +970,25,30,9,7,7,7 +980,30,35,8,8,8,8 +990,35,40,7,9,9,9 +1000,40,45,6,10,10,10 +1010,30,20,10,10,10,10 +1020,30,20,10,10,10,10 +1030,30,20,10,10,10,10 +1040,30,20,10,10,10,10 +1050,30,20,10,10,10,10 +1060,30,20,10,10,10,10 +1070,30,20,10,10,10,10 +1080,30,20,10,10,10,10 +1090,30,20,10,10,10,10 +1100,30,20,10,10,10,10 +1110,30,20,10,10,10,10 +1120,30,20,10,10,10,10 +1130,30,20,10,10,10,10 +1140,30,20,10,10,10,10 +1150,30,20,10,10,10,10 +1160,30,20,10,10,10,10 +1170,30,20,10,10,10,10 +1180,30,20,10,10,10,10 +1190,30,20,10,10,10,10 +1200,30,20,10,10,10,10 +1210,30,20,10,10,10,10 +1220,30,20,10,10,10,10 +1230,30,20,10,10,10,10 +1240,30,20,10,10,10,10 +1250,30,20,10,10,10,10 +1260,30,20,10,10,10,10 +1270,30,20,10,10,10,10 +1280,30,20,10,10,10,10 +1290,30,20,10,10,10,10 +1300,30,20,10,10,10,10 +1310,30,20,10,10,10,10 +1320,30,20,10,10,10,10 +1330,30,20,10,10,10,10 +1340,30,20,10,10,10,10 +1350,30,20,10,10,10,10 +1360,30,20,10,10,10,10 +1370,30,20,10,10,10,10 +1380,30,20,10,10,10,10 +1390,30,20,10,10,10,10 +1400,30,20,10,10,10,10 +1410,30,20,10,10,10,10 +1420,30,20,10,10,10,10 +1430,30,20,10,10,10,10 +1440,30,20,10,10,10,10 +1450,30,20,10,10,10,10 +1460,30,20,10,10,10,10 +1470,30,20,10,10,10,10 +1480,30,20,10,10,10,10 +1490,30,20,10,10,10,10 +1500,30,20,10,10,10,10 +1510,30,20,10,10,10,10 +1520,30,20,10,10,10,10 +1530,30,20,10,10,10,10 +1540,30,20,10,10,10,10 +1550,30,20,10,10,10,10 +1560,30,20,10,10,10,10 +1570,30,20,10,10,10,10 +1580,30,20,10,10,10,10 +1590,30,20,10,10,10,10 +1600,30,20,10,10,10,10 +1610,30,20,10,10,10,10 +1620,30,20,10,10,10,10 +1630,30,20,10,10,10,10 +1640,30,20,10,10,10,10 +1650,30,20,10,10,10,10 +1660,30,20,10,10,10,10 +1670,30,20,10,10,10,10 +1680,30,20,10,10,10,10 +1690,30,20,10,10,10,10 +1700,30,20,10,10,10,10 +1710,30,20,10,10,10,10 +1720,30,20,10,10,10,10 +1730,30,20,10,10,10,10 +1740,30,20,10,10,10,10 +1750,30,20,10,10,10,10 +1760,30,20,10,10,10,10 +1770,30,20,10,10,10,10 +1780,30,20,10,10,10,10 +1790,30,20,10,10,10,10 +1800,30,20,10,10,10,10 +1810,30,20,10,10,10,10 +1820,30,20,10,10,10,10 +1830,30,20,10,10,10,10 +1840,30,20,10,10,10,10 +1850,30,20,10,10,10,10 +1860,30,20,10,10,10,10 +1870,30,20,10,10,10,10 +1880,30,20,10,10,10,10 +1890,30,20,10,10,10,10 +1900,30,20,10,10,10,10 +1910,30,20,10,10,10,10 +1920,30,20,10,10,10,10 +1930,30,20,10,10,10,10 +1940,30,20,10,10,10,10 +1950,30,20,10,10,10,10 +1960,30,20,10,10,10,10 +1970,30,20,10,10,10,10 +1980,30,20,10,10,10,10 +1990,30,20,10,10,10,10 +2000,30,20,10,10,10,10 +2010,30,20,10,10,10,10 +2020,30,20,10,10,10,10 +2030,30,20,10,10,10,10 +2040,30,20,10,10,10,10 +2050,30,20,10,10,10,10 +2060,30,20,10,10,10,10 +2070,30,20,10,10,10,10 +2080,30,20,10,10,10,10 +2090,30,20,10,10,10,10 +2100,30,20,10,10,10,10 +2110,30,20,10,10,10,10 +2120,30,20,10,10,10,10 +2130,30,20,10,10,10,10 +2140,30,20,10,10,10,10 +2150,30,20,10,10,10,10 +2160,30,20,10,10,10,10 +2170,30,20,10,10,10,10 +2180,30,20,10,10,10,10 +2190,30,20,10,10,10,10 +2200,30,20,10,10,10,10 +2210,30,20,10,10,10,10 +2220,30,20,10,10,10,10 +2230,30,20,10,10,10,10 +2240,30,20,10,10,10,10 +2250,30,20,10,10,10,10 +2260,30,20,10,10,10,10 +2270,30,20,10,10,10,10 +2280,30,20,10,10,10,10 +2290,30,20,10,10,10,10 +2300,30,20,10,10,10,10 +2310,30,20,10,10,10,10 +2320,30,20,10,10,10,10 +2330,30,20,10,10,10,10 +2340,30,20,10,10,10,10 +2350,30,20,10,10,10,10 +2360,30,20,10,10,10,10 +2370,30,20,10,10,10,10 +2380,30,20,10,10,10,10 +2390,30,20,10,10,10,10 +2400,30,20,10,10,10,10 +2410,30,20,10,10,10,10 +2420,30,20,10,10,10,10 +2430,30,20,10,10,10,10 +2440,30,20,10,10,10,10 +2450,30,20,10,10,10,10 +2460,30,20,10,10,10,10 +2470,30,20,10,10,10,10 +2480,30,20,10,10,10,10 +2490,30,20,10,10,10,10 +2500,30,20,10,10,10,10 +2510,30,20,10,10,10,10 +2520,30,20,10,10,10,10 +2530,30,20,10,10,10,10 +2540,30,20,10,10,10,10 +2550,30,20,10,10,10,10 +2560,30,20,10,10,10,10 +2570,30,20,10,10,10,10 +2580,30,20,10,10,10,10 +2590,30,20,10,10,10,10 +2600,30,20,10,10,10,10 +2610,30,20,10,10,10,10 +2620,30,20,10,10,10,10 +2630,30,20,10,10,10,10 +2640,30,20,10,10,10,10 +2650,30,20,10,10,10,10 +2660,30,20,10,10,10,10 +2670,30,20,10,10,10,10 +2680,30,20,10,10,10,10 +2690,30,20,10,10,10,10 +2700,30,20,10,10,10,10 +2710,30,20,10,10,10,10 +2720,30,20,10,10,10,10 +2730,30,20,10,10,10,10 +2740,30,20,10,10,10,10 +2750,30,20,10,10,10,10 +2760,30,20,10,10,10,10 +2770,30,20,10,10,10,10 +2780,30,20,10,10,10,10 +2790,30,20,10,10,10,10 +2800,30,20,10,10,10,10 +2810,30,20,10,10,10,10 +2820,30,20,10,10,10,10 +2830,30,20,10,10,10,10 +2840,30,20,10,10,10,10 +2850,30,20,10,10,10,10 +2860,30,20,10,10,10,10 +2870,30,20,10,10,10,10 +2880,30,20,10,10,10,10 +2890,30,20,10,10,10,10 +2900,30,20,10,10,10,10 +2910,30,20,10,10,10,10 +2920,30,20,10,10,10,10 +2930,30,20,10,10,10,10 +2940,30,20,10,10,10,10 +2950,30,20,10,10,10,10 +2960,30,20,10,10,10,10 +2970,30,20,10,10,10,10 +2980,30,20,10,10,10,10 +2990,30,20,10,10,10,10 +3000,30,20,10,10,10,10 +3010,30,20,10,10,10,10 +3020,30,20,10,10,10,10 +3030,30,20,10,10,10,10 +3040,30,20,10,10,10,10 +3050,30,20,10,10,10,10 +3060,30,20,10,10,10,10 +3070,30,20,10,10,10,10 +3080,30,20,10,10,10,10 +3090,30,20,10,10,10,10 +3100,30,20,10,10,10,10 +3110,30,20,10,10,10,10 +3120,30,20,10,10,10,10 +3130,30,20,10,10,10,10 +3140,30,20,10,10,10,10 +3150,30,20,10,10,10,10 +3160,30,20,10,10,10,10 +3170,30,20,10,10,10,10 +3180,30,20,10,10,10,10 +3190,30,20,10,10,10,10 +3200,30,20,10,10,10,10 +3210,30,20,10,10,10,10 +3220,30,20,10,10,10,10 +3230,30,20,10,10,10,10 +3240,30,20,10,10,10,10 +3250,30,20,10,10,10,10 +3260,30,20,10,10,10,10 +3270,30,20,10,10,10,10 +3280,30,20,10,10,10,10 +3290,30,20,10,10,10,10 +3300,30,20,10,10,10,10 +3310,30,20,10,10,10,10 +3320,30,20,10,10,10,10 +3330,30,20,10,10,10,10 +3340,30,20,10,10,10,10 +3350,30,20,10,10,10,10 +3360,30,20,10,10,10,10 +3370,30,20,10,10,10,10 +3380,30,20,10,10,10,10 +3390,30,20,10,10,10,10 +3400,30,20,10,10,10,10 +3410,30,20,10,10,10,10 +3420,30,20,10,10,10,10 +3430,30,20,10,10,10,10 +3440,30,20,10,10,10,10 +3450,30,20,10,10,10,10 +3460,30,20,10,10,10,10 +3470,30,20,10,10,10,10 +3480,30,20,10,10,10,10 +3490,30,20,10,10,10,10 +3500,30,20,10,10,10,10 +3510,30,20,10,10,10,10 +3520,30,20,10,10,10,10 +3530,30,20,10,10,10,10 +3540,30,20,10,10,10,10 +3550,30,20,10,10,10,10 +3560,30,20,10,10,10,10 +3570,30,20,10,10,10,10 +3580,30,20,10,10,10,10 +3590,30,20,10,10,10,10 +3600,30,20,10,10,10,10 +3610,30,20,10,10,10,10 +3620,30,20,10,10,10,10 +3630,30,20,10,10,10,10 +3640,30,20,10,10,10,10 +3650,30,20,10,10,10,10 +3660,30,20,10,10,10,10 +3670,30,20,10,10,10,10 +3680,30,20,10,10,10,10 +3690,30,20,10,10,10,10 +3700,30,20,10,10,10,10 +3710,30,20,10,10,10,10 +3720,30,20,10,10,10,10 +3730,30,20,10,10,10,10 +3740,30,20,10,10,10,10 +3750,30,20,10,10,10,10 +3760,30,20,10,10,10,10 +3770,30,20,10,10,10,10 +3780,30,20,10,10,10,10 +3790,30,20,10,10,10,10 +3800,30,20,10,10,10,10 +3810,30,20,10,10,10,10 +3820,30,20,10,10,10,10 +3830,30,20,10,10,10,10 +3840,30,20,10,10,10,10 +3850,30,20,10,10,10,10 +3860,30,20,10,10,10,10 +3870,30,20,10,10,10,10 +3880,30,20,10,10,10,10 +3890,30,20,10,10,10,10 +3900,30,20,10,10,10,10 +3910,30,20,10,10,10,10 +3920,30,20,10,10,10,10 +3930,30,20,10,10,10,10 +3940,30,20,10,10,10,10 +3950,30,20,10,10,10,10 +3960,30,20,10,10,10,10 +3970,30,20,10,10,10,10 +3980,30,20,10,10,10,10 +3990,30,20,10,10,10,10 +4000,30,20,10,10,10,10 +4010,30,20,10,10,10,10 +4020,30,20,10,10,10,10 +4030,30,20,10,10,10,10 +4040,30,20,10,10,10,10 +4050,30,20,10,10,10,10 +4060,30,20,10,10,10,10 +4070,30,20,10,10,10,10 +4080,30,20,10,10,10,10 +4090,30,20,10,10,10,10 +4100,30,20,10,10,10,10 +4110,30,20,10,10,10,10 +4120,30,20,10,10,10,10 +4130,30,20,10,10,10,10 +4140,30,20,10,10,10,10 +4150,30,20,10,10,10,10 +4160,30,20,10,10,10,10 +4170,30,20,10,10,10,10 +4180,30,20,10,10,10,10 +4190,30,20,10,10,10,10 +4200,30,20,10,10,10,10 +4210,30,20,10,10,10,10 +4220,30,20,10,10,10,10 +4230,30,20,10,10,10,10 +4240,30,20,10,10,10,10 +4250,30,20,10,10,10,10 +4260,30,20,10,10,10,10 +4270,30,20,10,10,10,10 +4280,30,20,10,10,10,10 +4290,30,20,10,10,10,10 +4300,30,20,10,10,10,10 +4310,30,20,10,10,10,10 +4320,30,20,10,10,10,10 +4330,30,20,10,10,10,10 +4340,30,20,10,10,10,10 +4350,30,20,10,10,10,10 +4360,30,20,10,10,10,10 +4370,30,20,10,10,10,10 +4380,30,20,10,10,10,10 +4390,30,20,10,10,10,10 +4400,30,20,10,10,10,10 +4410,30,20,10,10,10,10 +4420,30,20,10,10,10,10 +4430,30,20,10,10,10,10 +4440,30,20,10,10,10,10 +4450,30,20,10,10,10,10 +4460,30,20,10,10,10,10 +4470,30,20,10,10,10,10 +4480,30,20,10,10,10,10 +4490,30,20,10,10,10,10 +4500,30,20,10,10,10,10 +4510,30,20,10,10,10,10 +4520,30,20,10,10,10,10 +4530,30,20,10,10,10,10 +4540,30,20,10,10,10,10 +4550,30,20,10,10,10,10 +4560,30,20,10,10,10,10 +4570,30,20,10,10,10,10 +4580,30,20,10,10,10,10 +4590,30,20,10,10,10,10 +4600,30,20,10,10,10,10 +4610,30,20,10,10,10,10 +4620,30,20,10,10,10,10 +4630,30,20,10,10,10,10 +4640,30,20,10,10,10,10 +4650,30,20,10,10,10,10 +4660,30,20,10,10,10,10 +4670,30,20,10,10,10,10 +4680,30,20,10,10,10,10 +4690,30,20,10,10,10,10 +4700,30,20,10,10,10,10 +4710,30,20,10,10,10,10 +4720,30,20,10,10,10,10 +4730,30,20,10,10,10,10 +4740,30,20,10,10,10,10 +4750,30,20,10,10,10,10 +4760,30,20,10,10,10,10 +4770,30,20,10,10,10,10 +4780,30,20,10,10,10,10 +4790,30,20,10,10,10,10 +4800,30,20,10,10,10,10 +4810,30,20,10,10,10,10 +4820,30,20,10,10,10,10 +4830,30,20,10,10,10,10 +4840,30,20,10,10,10,10 +4850,30,20,10,10,10,10 +4860,30,20,10,10,10,10 +4870,30,20,10,10,10,10 +4880,30,20,10,10,10,10 +4890,30,20,10,10,10,10 +4900,30,20,10,10,10,10 +4910,30,20,10,10,10,10 +4920,30,20,10,10,10,10 +4930,30,20,10,10,10,10 +4940,30,20,10,10,10,10 +4950,30,20,10,10,10,10 +4960,30,20,10,10,10,10 +4970,30,20,10,10,10,10 +4980,30,20,10,10,10,10 +4990,30,20,10,10,10,10 +5000,30,20,10,10,10,10 +5010,30,20,10,10,10,10 +5020,30,20,10,10,10,10 +5030,30,20,10,10,10,10 +5040,30,20,10,10,10,10 +5050,30,20,10,10,10,10 +5060,30,20,10,10,10,10 +5070,30,20,10,10,10,10 +5080,30,20,10,10,10,10 +5090,30,20,10,10,10,10 +5100,30,20,10,10,10,10 +5110,30,20,10,10,10,10 +5120,30,20,10,10,10,10 +5130,30,20,10,10,10,10 +5140,30,20,10,10,10,10 +5150,30,20,10,10,10,10 +5160,30,20,10,10,10,10 +5170,30,20,10,10,10,10 +5180,30,20,10,10,10,10 +5190,30,20,10,10,10,10 +5200,30,20,10,10,10,10 +5210,30,20,10,10,10,10 +5220,30,20,10,10,10,10 +5230,30,20,10,10,10,10 +5240,30,20,10,10,10,10 +5250,30,20,10,10,10,10 +5260,30,20,10,10,10,10 +5270,30,20,10,10,10,10 +5280,30,20,10,10,10,10 +5290,30,20,10,10,10,10 +5300,30,20,10,10,10,10 +5310,30,20,10,10,10,10 +5320,30,20,10,10,10,10 +5330,30,20,10,10,10,10 +5340,30,20,10,10,10,10 +5350,30,20,10,10,10,10 +5360,30,20,10,10,10,10 +5370,30,20,10,10,10,10 +5380,30,20,10,10,10,10 +5390,30,20,10,10,10,10 +5400,30,20,10,10,10,10 +5410,30,20,10,10,10,10 +5420,30,20,10,10,10,10 +5430,30,20,10,10,10,10 +5440,30,20,10,10,10,10 +5450,30,20,10,10,10,10 +5460,30,20,10,10,10,10 +5470,30,20,10,10,10,10 +5480,30,20,10,10,10,10 +5490,30,20,10,10,10,10 +5500,30,20,10,10,10,10 +5510,30,20,10,10,10,10 +5520,30,20,10,10,10,10 +5530,30,20,10,10,10,10 +5540,30,20,10,10,10,10 +5550,30,20,10,10,10,10 +5560,30,20,10,10,10,10 +5570,30,20,10,10,10,10 +5580,30,20,10,10,10,10 +5590,30,20,10,10,10,10 +5600,30,20,10,10,10,10 +5610,30,20,10,10,10,10 +5620,30,20,10,10,10,10 +5630,30,20,10,10,10,10 +5640,30,20,10,10,10,10 +5650,30,20,10,10,10,10 +5660,30,20,10,10,10,10 +5670,30,20,10,10,10,10 +5680,30,20,10,10,10,10 +5690,30,20,10,10,10,10 +5700,30,20,10,10,10,10 +5710,30,20,10,10,10,10 +5720,30,20,10,10,10,10 +5730,30,20,10,10,10,10 +5740,30,20,10,10,10,10 +5750,30,20,10,10,10,10 +5760,30,20,10,10,10,10 +5770,30,20,10,10,10,10 +5780,30,20,10,10,10,10 +5790,30,20,10,10,10,10 +5800,30,20,10,10,10,10 +5810,30,20,10,10,10,10 +5820,30,20,10,10,10,10 +5830,30,20,10,10,10,10 +5840,30,20,10,10,10,10 +5850,30,20,10,10,10,10 +5860,30,20,10,10,10,10 +5870,30,20,10,10,10,10 +5880,30,20,10,10,10,10 +5890,30,20,10,10,10,10 +5900,30,20,10,10,10,10 +5910,30,20,10,10,10,10 +5920,30,20,10,10,10,10 +5930,30,20,10,10,10,10 +5940,30,20,10,10,10,10 +5950,30,20,10,10,10,10 +5960,30,20,10,10,10,10 +5970,30,20,10,10,10,10 +5980,30,20,10,10,10,10 +5990,30,20,10,10,10,10 +6000,30,20,10,10,10,10 +6010,30,20,10,10,10,10 +6020,30,20,10,10,10,10 +6030,30,20,10,10,10,10 +6040,30,20,10,10,10,10 +6050,30,20,10,10,10,10 +6060,30,20,10,10,10,10 +6070,30,20,10,10,10,10 +6080,30,20,10,10,10,10 +6090,30,20,10,10,10,10 +6100,30,20,10,10,10,10 +6110,30,20,10,10,10,10 +6120,30,20,10,10,10,10 +6130,30,20,10,10,10,10 +6140,30,20,10,10,10,10 +6150,30,20,10,10,10,10 +6160,30,20,10,10,10,10 +6170,30,20,10,10,10,10 +6180,30,20,10,10,10,10 +6190,30,20,10,10,10,10 +6200,30,20,10,10,10,10 +6210,30,20,10,10,10,10 +6220,30,20,10,10,10,10 +6230,30,20,10,10,10,10 +6240,30,20,10,10,10,10 +6250,30,20,10,10,10,10 +6260,30,20,10,10,10,10 +6270,30,20,10,10,10,10 +6280,30,20,10,10,10,10 +6290,30,20,10,10,10,10 +6300,30,20,10,10,10,10 +6310,30,20,10,10,10,10 +6320,30,20,10,10,10,10 +6330,30,20,10,10,10,10 +6340,30,20,10,10,10,10 +6350,30,20,10,10,10,10 +6360,30,20,10,10,10,10 +6370,30,20,10,10,10,10 +6380,30,20,10,10,10,10 +6390,30,20,10,10,10,10 +6400,30,20,10,10,10,10 +6410,30,20,10,10,10,10 +6420,30,20,10,10,10,10 +6430,30,20,10,10,10,10 +6440,30,20,10,10,10,10 +6450,30,20,10,10,10,10 +6460,30,20,10,10,10,10 +6470,30,20,10,10,10,10 +6480,30,20,10,10,10,10 +6490,30,20,10,10,10,10 +6500,30,20,10,10,10,10 +6510,30,20,10,10,10,10 +6520,30,20,10,10,10,10 +6530,30,20,10,10,10,10 +6540,30,20,10,10,10,10 +6550,30,20,10,10,10,10 +6560,30,20,10,10,10,10 +6570,30,20,10,10,10,10 +6580,30,20,10,10,10,10 +6590,30,20,10,10,10,10 +6600,30,20,10,10,10,10 +6610,30,20,10,10,10,10 +6620,30,20,10,10,10,10 +6630,30,20,10,10,10,10 +6640,30,20,10,10,10,10 +6650,30,20,10,10,10,10 +6660,30,20,10,10,10,10 +6670,30,20,10,10,10,10 +6680,30,20,10,10,10,10 +6690,30,20,10,10,10,10 +6700,30,20,10,10,10,10 +6710,30,20,10,10,10,10 +6720,30,20,10,10,10,10 +6730,30,20,10,10,10,10 +6740,30,20,10,10,10,10 +6750,30,20,10,10,10,10 +6760,30,20,10,10,10,10 +6770,30,20,10,10,10,10 +6780,30,20,10,10,10,10 +6790,30,20,10,10,10,10 +6800,30,20,10,10,10,10 +6810,30,20,10,10,10,10 +6820,30,20,10,10,10,10 +6830,30,20,10,10,10,10 +6840,30,20,10,10,10,10 +6850,30,20,10,10,10,10 +6860,30,20,10,10,10,10 +6870,30,20,10,10,10,10 +6880,30,20,10,10,10,10 +6890,30,20,10,10,10,10 +6900,30,20,10,10,10,10 +6910,30,20,10,10,10,10 +6920,30,20,10,10,10,10 +6930,30,20,10,10,10,10 +6940,30,20,10,10,10,10 +6950,30,20,10,10,10,10 +6960,30,20,10,10,10,10 +6970,30,20,10,10,10,10 +6980,30,20,10,10,10,10 +6990,30,20,10,10,10,10 +7000,30,20,10,10,10,10 +7010,30,20,10,10,10,10 +7020,30,20,10,10,10,10 +7030,30,20,10,10,10,10 +7040,30,20,10,10,10,10 +7050,30,20,10,10,10,10 +7060,30,20,10,10,10,10 +7070,30,20,10,10,10,10 +7080,30,20,10,10,10,10 +7090,30,20,10,10,10,10 +7100,30,20,10,10,10,10 +7110,30,20,10,10,10,10 +7120,30,20,10,10,10,10 +7130,30,20,10,10,10,10 +7140,30,20,10,10,10,10 +7150,30,20,10,10,10,10 +7160,30,20,10,10,10,10 +7170,30,20,10,10,10,10 +7180,30,20,10,10,10,10 +7190,30,20,10,10,10,10 +7200,30,20,10,10,10,10 +7210,30,20,10,10,10,10 +7220,30,20,10,10,10,10 +7230,30,20,10,10,10,10 +7240,30,20,10,10,10,10 +7250,30,20,10,10,10,10 +7260,30,20,10,10,10,10 +7270,30,20,10,10,10,10 +7280,30,20,10,10,10,10 +7290,30,20,10,10,10,10 +7300,30,20,10,10,10,10 +7310,30,20,10,10,10,10 +7320,30,20,10,10,10,10 +7330,30,20,10,10,10,10 +7340,30,20,10,10,10,10 +7350,30,20,10,10,10,10 +7360,30,20,10,10,10,10 +7370,30,20,10,10,10,10 +7380,30,20,10,10,10,10 +7390,30,20,10,10,10,10 +7400,30,20,10,10,10,10 +7410,30,20,10,10,10,10 +7420,30,20,10,10,10,10 +7430,30,20,10,10,10,10 +7440,30,20,10,10,10,10 +7450,30,20,10,10,10,10 +7460,30,20,10,10,10,10 +7470,30,20,10,10,10,10 +7480,30,20,10,10,10,10 +7490,30,20,10,10,10,10 +7500,30,20,10,10,10,10 +7510,30,20,10,10,10,10 +7520,30,20,10,10,10,10 +7530,30,20,10,10,10,10 +7540,30,20,10,10,10,10 +7550,30,20,10,10,10,10 +7560,30,20,10,10,10,10 +7570,30,20,10,10,10,10 +7580,30,20,10,10,10,10 +7590,30,20,10,10,10,10 +7600,30,20,10,10,10,10 +7610,30,20,10,10,10,10 +7620,30,20,10,10,10,10 +7630,30,20,10,10,10,10 +7640,30,20,10,10,10,10 +7650,30,20,10,10,10,10 +7660,30,20,10,10,10,10 +7670,30,20,10,10,10,10 +7680,30,20,10,10,10,10 +7690,30,20,10,10,10,10 +7700,30,20,10,10,10,10 +7710,30,20,10,10,10,10 +7720,30,20,10,10,10,10 +7730,30,20,10,10,10,10 +7740,30,20,10,10,10,10 +7750,30,20,10,10,10,10 +7760,30,20,10,10,10,10 +7770,30,20,10,10,10,10 +7780,30,20,10,10,10,10 +7790,30,20,10,10,10,10 +7800,30,20,10,10,10,10 +7810,30,20,10,10,10,10 +7820,30,20,10,10,10,10 +7830,30,20,10,10,10,10 +7840,30,20,10,10,10,10 +7850,30,20,10,10,10,10 +7860,30,20,10,10,10,10 +7870,30,20,10,10,10,10 +7880,30,20,10,10,10,10 +7890,30,20,10,10,10,10 +7900,30,20,10,10,10,10 +7910,30,20,10,10,10,10 +7920,30,20,10,10,10,10 +7930,30,20,10,10,10,10 +7940,30,20,10,10,10,10 +7950,30,20,10,10,10,10 +7960,30,20,10,10,10,10 +7970,30,20,10,10,10,10 +7980,30,20,10,10,10,10 +7990,30,20,10,10,10,10 +8000,30,20,10,10,10,10 +8010,30,20,10,10,10,10 +8020,30,20,10,10,10,10 +8030,30,20,10,10,10,10 +8040,30,20,10,10,10,10 +8050,30,20,10,10,10,10 +8060,30,20,10,10,10,10 +8070,30,20,10,10,10,10 +8080,30,20,10,10,10,10 +8090,30,20,10,10,10,10 +8100,30,20,10,10,10,10 +8110,30,20,10,10,10,10 +8120,30,20,10,10,10,10 +8130,30,20,10,10,10,10 +8140,30,20,10,10,10,10 +8150,30,20,10,10,10,10 +8160,30,20,10,10,10,10 +8170,30,20,10,10,10,10 +8180,30,20,10,10,10,10 +8190,30,20,10,10,10,10 +8200,30,20,10,10,10,10 +8210,30,20,10,10,10,10 +8220,30,20,10,10,10,10 +8230,30,20,10,10,10,10 +8240,30,20,10,10,10,10 +8250,30,20,10,10,10,10 +8260,30,20,10,10,10,10 +8270,30,20,10,10,10,10 +8280,30,20,10,10,10,10 +8290,30,20,10,10,10,10 +8300,30,20,10,10,10,10 +8310,30,20,10,10,10,10 +8320,30,20,10,10,10,10 +8330,30,20,10,10,10,10 +8340,30,20,10,10,10,10 +8350,30,20,10,10,10,10 +8360,30,20,10,10,10,10 +8370,30,20,10,10,10,10 +8380,30,20,10,10,10,10 +8390,30,20,10,10,10,10 +8400,30,20,10,10,10,10 +8410,30,20,10,10,10,10 +8420,30,20,10,10,10,10 +8430,30,20,10,10,10,10 +8440,30,20,10,10,10,10 +8450,30,20,10,10,10,10 +8460,30,20,10,10,10,10 +8470,30,20,10,10,10,10 +8480,30,20,10,10,10,10 +8490,30,20,10,10,10,10 +8500,30,20,10,10,10,10 +8510,30,20,10,10,10,10 +8520,30,20,10,10,10,10 +8530,30,20,10,10,10,10 +8540,30,20,10,10,10,10 +8550,30,20,10,10,10,10 +8560,30,20,10,10,10,10 +8570,30,20,10,10,10,10 +8580,30,20,10,10,10,10 +8590,30,20,10,10,10,10 +8600,30,20,10,10,10,10 +8610,30,20,10,10,10,10 +8620,30,20,10,10,10,10 +8630,30,20,10,10,10,10 +8640,30,20,10,10,10,10 +8650,30,20,10,10,10,10 +8660,30,20,10,10,10,10 +8670,30,20,10,10,10,10 +8680,30,20,10,10,10,10 +8690,30,20,10,10,10,10 +8700,30,20,10,10,10,10 +8710,30,20,10,10,10,10 +8720,30,20,10,10,10,10 +8730,30,20,10,10,10,10 +8740,30,20,10,10,10,10 +8750,30,20,10,10,10,10 +8760,30,20,10,10,10,10 +8770,30,20,10,10,10,10 +8780,30,20,10,10,10,10 +8790,30,20,10,10,10,10 +8800,30,20,10,10,10,10 +8810,30,20,10,10,10,10 +8820,30,20,10,10,10,10 +8830,30,20,10,10,10,10 +8840,30,20,10,10,10,10 +8850,30,20,10,10,10,10 +8860,30,20,10,10,10,10 +8870,30,20,10,10,10,10 +8880,30,20,10,10,10,10 +8890,30,20,10,10,10,10 +8900,30,20,10,10,10,10 +8910,30,20,10,10,10,10 +8920,30,20,10,10,10,10 +8930,30,20,10,10,10,10 +8940,30,20,10,10,10,10 +8950,30,20,10,10,10,10 +8960,30,20,10,10,10,10 +8970,30,20,10,10,10,10 +8980,30,20,10,10,10,10 +8990,30,20,10,10,10,10 +9000,30,20,10,10,10,10 +9010,30,20,10,10,10,10 +9020,30,20,10,10,10,10 +9030,30,20,10,10,10,10 +9040,30,20,10,10,10,10 +9050,30,20,10,10,10,10 +9060,30,20,10,10,10,10 +9070,30,20,10,10,10,10 +9080,30,20,10,10,10,10 +9090,30,20,10,10,10,10 +9100,30,20,10,10,10,10 +9110,30,20,10,10,10,10 +9120,30,20,10,10,10,10 +9130,30,20,10,10,10,10 +9140,30,20,10,10,10,10 +9150,30,20,10,10,10,10 +9160,30,20,10,10,10,10 +9170,30,20,10,10,10,10 +9180,30,20,10,10,10,10 +9190,30,20,10,10,10,10 +9200,30,20,10,10,10,10 +9210,30,20,10,10,10,10 +9220,30,20,10,10,10,10 +9230,30,20,10,10,10,10 +9240,30,20,10,10,10,10 +9250,30,20,10,10,10,10 +9260,30,20,10,10,10,10 +9270,30,20,10,10,10,10 +9280,30,20,10,10,10,10 +9290,30,20,10,10,10,10 +9300,30,20,10,10,10,10 +9310,30,20,10,10,10,10 +9320,30,20,10,10,10,10 +9330,30,20,10,10,10,10 +9340,30,20,10,10,10,10 +9350,30,20,10,10,10,10 +9360,30,20,10,10,10,10 +9370,30,20,10,10,10,10 +9380,30,20,10,10,10,10 +9390,30,20,10,10,10,10 +9400,30,20,10,10,10,10 +9410,30,20,10,10,10,10 +9420,30,20,10,10,10,10 +9430,30,20,10,10,10,10 +9440,30,20,10,10,10,10 +9450,30,20,10,10,10,10 +9460,30,20,10,10,10,10 +9470,30,20,10,10,10,10 +9480,30,20,10,10,10,10 +9490,30,20,10,10,10,10 +9500,30,20,10,10,10,10 +9510,30,20,10,10,10,10 +9520,30,20,10,10,10,10 +9530,30,20,10,10,10,10 +9540,30,20,10,10,10,10 +9550,30,20,10,10,10,10 +9560,30,20,10,10,10,10 +9570,30,20,10,10,10,10 +9580,30,20,10,10,10,10 +9590,30,20,10,10,10,10 +9600,30,20,10,10,10,10 +9610,30,20,10,10,10,10 +9620,30,20,10,10,10,10 +9630,30,20,10,10,10,10 +9640,30,20,10,10,10,10 +9650,30,20,10,10,10,10 +9660,30,20,10,10,10,10 +9670,30,20,10,10,10,10 +9680,30,20,10,10,10,10 +9690,30,20,10,10,10,10 +9700,30,20,10,10,10,10 +9710,30,20,10,10,10,10 +9720,30,20,10,10,10,10 +9730,30,20,10,10,10,10 +9740,30,20,10,10,10,10 +9750,30,20,10,10,10,10 +9760,30,20,10,10,10,10 +9770,30,20,10,10,10,10 +9780,30,20,10,10,10,10 +9790,30,20,10,10,10,10 +9800,30,20,10,10,10,10 +9810,30,20,10,10,10,10 +9820,30,20,10,10,10,10 +9830,30,20,10,10,10,10 +9840,30,20,10,10,10,10 +9850,30,20,10,10,10,10 +9860,30,20,10,10,10,10 +9870,30,20,10,10,10,10 +9880,30,20,10,10,10,10 +9890,30,20,10,10,10,10 +9900,30,20,10,10,10,10 +9910,30,20,10,10,10,10 +9920,30,20,10,10,10,10 +9930,30,20,10,10,10,10 +9940,30,20,10,10,10,10 +9950,30,20,10,10,10,10 +9960,30,20,10,10,10,10 +9970,30,20,10,10,10,10 +9980,30,20,10,10,10,10 +9990,30,20,10,10,10,10 +10000,30,20,10,10,10,10 +10010,30,20,10,10,10,10 +10020,30,20,10,10,10,10 +10030,30,20,10,10,10,10 +10040,30,20,10,10,10,10 +10050,30,20,10,10,10,10 +10060,30,20,10,10,10,10 +10070,30,20,10,10,10,10 +10080,30,20,10,10,10,10 +10090,30,20,10,10,10,10 +10100,30,20,10,10,10,10 diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20201224_fat.csv b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20201224_fat.csv new file mode 100644 index 0000000..e981b6d --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20201224_fat.csv @@ -0,0 +1,1013 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,0,1,1,100,1,5 +10,0,1,1,100,1,5 +20,0,1,1,100,1,5 +30,0,1,1,100,1,5 +40,0,1,1,100,1,5 +50,0,1,1,100,1,5 +60,0,1,1,100,1,5 +70,0,1,1,100,1,5 +80,0,1,1,100,1,5 +90,0,1,1,100,1,5 +100,0,1,1,100,1,5 +110,0,1,1,100,1,5 +120,0,1,1,100,1,5 +130,0,1,1,100,1,5 +140,0,1,1,100,1,5 +150,0,1,1,100,1,5 +160,0,1,1,100,1,5 +170,0,1,1,100,1,5 +180,0,1,1,100,1,5 +190,0,1,1,100,1,5 +200,0,1,1,100,1,5 +210,0,1,1,100,1,5 +220,0,1,1,100,1,5 +230,0,1,1,100,1,5 +240,0,1,1,100,1,5 +250,0,1,1,100,1,5 +260,0,1,1,100,1,5 +270,0,1,1,100,1,5 +280,0,1,1,100,1,5 +290,0,1,1,100,1,5 +300,0,1,1,100,1,5 +310,0,1,1,100,1,5 +320,0,1,1,100,1,5 +330,0,1,1,100,1,5 +340,0,1,1,100,1,5 +350,0,1,1,100,1,5 +360,0,1,1,100,1,5 +370,0,1,1,100,1,5 +380,0,1,1,100,1,5 +390,0,1,1,100,1,5 +400,0,1,1,100,1,5 +410,0,1,1,100,1,5 +420,0,1,1,100,1,5 +430,0,1,1,100,1,5 +440,0,1,1,100,1,5 +450,0,1,1,100,1,5 +460,0,1,1,100,1,5 +470,0,1,1,100,1,5 +480,0,1,1,100,1,5 +490,0,1,1,100,1,5 +500,0,1,1,100,1,5 +510,0,1,1,100,1,5 +520,0,1,1,100,1,5 +530,0,1,1,100,1,5 +540,0,1,1,100,1,5 +550,0,1,1,100,1,5 +560,0,1,1,100,1,5 +570,0,1,1,100,1,5 +580,0,1,1,100,1,5 +590,0,1,1,100,1,5 +600,0,1,1,100,1,5 +610,0,1,1,100,1,5 +620,0,1,1,100,1,5 +630,0,1,1,100,1,5 +640,0,1,1,100,1,5 +650,0,1,1,100,1,5 +660,0,1,1,100,1,5 +670,0,1,1,100,1,5 +680,0,1,1,100,1,5 +690,0,1,1,100,1,5 +700,0,1,1,100,1,5 +710,0,1,1,100,1,5 +720,0,1,1,100,1,5 +730,0,1,1,100,1,5 +740,0,1,1,100,1,5 +750,0,1,1,100,1,5 +760,0,1,1,100,1,5 +770,0,1,1,100,1,5 +780,0,1,1,100,1,5 +790,0,1,1,100,1,5 +800,0,1,1,100,1,5 +810,0,1,1,100,1,5 +820,0,1,1,100,1,5 +830,0,1,1,100,1,5 +840,0,1,1,100,1,5 +850,0,1,1,100,1,5 +860,0,1,1,100,1,5 +870,0,1,1,100,1,5 +880,0,1,1,100,1,5 +890,0,1,1,100,1,5 +900,0,1,1,100,1,5 +910,0,1,1,100,1,5 +920,0,1,1,100,1,5 +930,0,1,1,100,1,5 +940,0,1,1,100,1,5 +950,0,1,1,100,1,5 +960,0,1,1,100,1,5 +970,0,1,1,100,1,5 +980,0,1,1,100,1,5 +990,0,1,1,100,1,5 +1000,0,1,1,100,1,5 +1010,0,1,1,100,1,5 +1020,0,1,1,100,1,5 +1030,0,1,1,100,1,5 +1040,0,1,1,100,1,5 +1050,0,1,1,100,1,5 +1060,0,1,1,100,1,5 +1070,0,1,1,100,1,5 +1080,0,1,1,100,1,5 +1090,0,1,1,100,1,5 +1100,0,1,1,100,1,5 +1110,0,1,1,100,1,5 +1120,0,1,1,100,1,5 +1130,0,1,1,100,1,5 +1140,0,1,1,100,1,5 +1150,0,1,1,100,1,5 +1160,0,1,1,100,1,5 +1170,0,1,1,100,1,5 +1180,0,1,1,100,1,5 +1190,0,1,1,100,1,5 +1200,0,1,1,100,1,5 +1210,0,1,1,100,1,5 +1220,0,1,1,100,1,5 +1230,0,1,1,100,1,5 +1240,0,1,1,100,1,5 +1250,0,1,1,100,1,5 +1260,0,1,1,100,1,5 +1270,0,1,1,100,1,5 +1280,0,1,1,100,1,5 +1290,0,1,1,100,1,5 +1300,0,1,1,100,1,5 +1310,0,1,1,100,1,5 +1320,0,1,1,100,1,5 +1330,0,1,1,100,1,5 +1340,0,1,1,100,1,5 +1350,0,1,1,100,1,5 +1360,0,1,1,100,1,5 +1370,0,1,1,100,1,5 +1380,0,1,1,100,1,5 +1390,0,1,1,100,1,5 +1400,0,1,1,100,1,5 +1410,0,1,1,100,1,5 +1420,0,1,1,100,1,5 +1430,0,1,1,100,1,5 +1440,0,1,1,100,1,5 +1450,0,1,1,100,1,5 +1460,0,1,1,100,1,5 +1470,0,1,1,100,1,5 +1480,0,1,1,100,1,5 +1490,0,1,1,100,1,5 +1500,0,1,1,100,1,5 +1510,0,1,1,100,1,5 +1520,0,1,1,100,1,5 +1530,0,1,1,100,1,5 +1540,0,1,1,100,1,5 +1550,0,1,1,100,1,5 +1560,0,1,1,100,1,5 +1570,0,1,1,100,1,5 +1580,0,1,1,100,1,5 +1590,0,1,1,100,1,5 +1600,0,1,1,100,1,5 +1610,0,1,1,100,1,5 +1620,0,1,1,100,1,5 +1630,0,1,1,100,1,5 +1640,0,1,1,100,1,5 +1650,0,1,1,100,1,5 +1660,0,1,1,100,1,5 +1670,0,1,1,100,1,5 +1680,0,1,1,100,1,5 +1690,0,1,1,100,1,5 +1700,0,1,1,100,1,5 +1710,0,1,1,100,1,5 +1720,0,1,1,100,1,5 +1730,0,1,1,100,1,5 +1740,0,1,1,100,1,5 +1750,0,1,1,100,1,5 +1760,0,1,1,100,1,5 +1770,0,1,1,100,1,5 +1780,0,1,1,100,1,5 +1790,0,1,1,100,1,5 +1800,0,1,1,100,1,5 +1810,0,1,1,100,1,5 +1820,0,1,1,100,1,5 +1830,0,1,1,100,1,5 +1840,0,1,1,100,1,5 +1850,0,1,1,100,1,5 +1860,0,1,1,100,1,5 +1870,0,1,1,100,1,5 +1880,0,1,1,100,1,5 +1890,0,1,1,100,1,5 +1900,0,1,1,100,1,5 +1910,0,1,1,100,1,5 +1920,0,1,1,100,1,5 +1930,0,1,1,100,1,5 +1940,0,1,1,100,1,5 +1950,0,1,1,100,1,5 +1960,0,1,1,100,1,5 +1970,0,1,1,100,1,5 +1980,0,1,1,100,1,5 +1990,0,1,1,100,1,5 +2000,0,1,1,100,1,5 +2010,0,1,1,100,1,5 +2020,0,1,1,100,1,5 +2030,0,1,1,100,1,5 +2040,0,1,1,100,1,5 +2050,0,1,1,100,1,5 +2060,0,1,1,100,1,5 +2070,0,1,1,100,1,5 +2080,0,1,1,100,1,5 +2090,0,1,1,100,1,5 +2100,0,1,1,100,1,5 +2110,0,1,1,100,1,5 +2120,0,1,1,100,1,5 +2130,0,1,1,100,1,5 +2140,0,1,1,100,1,5 +2150,0,1,1,100,1,5 +2160,0,1,1,100,1,5 +2170,0,1,1,100,1,5 +2180,0,1,1,100,1,5 +2190,0,1,1,100,1,5 +2200,0,1,1,100,1,5 +2210,0,1,1,100,1,5 +2220,0,1,1,100,1,5 +2230,0,1,1,100,1,5 +2240,0,1,1,100,1,5 +2250,0,1,1,100,1,5 +2260,0,1,1,100,1,5 +2270,0,1,1,100,1,5 +2280,0,1,1,100,1,5 +2290,0,1,1,100,1,5 +2300,0,1,1,100,1,5 +2310,0,1,1,100,1,5 +2320,0,1,1,100,1,5 +2330,0,1,1,100,1,5 +2340,0,1,1,100,1,5 +2350,0,1,1,100,1,5 +2360,0,1,1,100,1,5 +2370,0,1,1,100,1,5 +2380,0,1,1,100,1,5 +2390,0,1,1,100,1,5 +2400,0,1,1,100,1,5 +2410,0,1,1,100,1,5 +2420,0,1,1,100,1,5 +2430,0,1,1,100,1,5 +2440,0,1,1,100,1,5 +2450,0,1,1,100,1,5 +2460,0,1,1,100,1,5 +2470,0,1,1,100,1,5 +2480,0,1,1,100,1,5 +2490,0,1,1,100,1,5 +2500,0,1,1,100,1,5 +2510,0,1,1,100,1,5 +2520,0,1,1,100,1,5 +2530,0,1,1,100,1,5 +2540,0,1,1,100,1,5 +2550,0,1,1,100,1,5 +2560,0,1,1,100,1,5 +2570,0,1,1,100,1,5 +2580,0,1,1,100,1,5 +2590,0,1,1,100,1,5 +2600,0,1,1,100,1,5 +2610,0,1,1,100,1,5 +2620,0,1,1,100,1,5 +2630,0,1,1,100,1,5 +2640,0,1,1,100,1,5 +2650,0,1,1,100,1,5 +2660,0,1,1,100,1,5 +2670,0,1,1,100,1,5 +2680,0,1,1,100,1,5 +2690,0,1,1,100,1,5 +2700,0,1,1,100,1,5 +2710,0,1,1,100,1,5 +2720,0,1,1,100,1,5 +2730,0,1,1,100,1,5 +2740,0,1,1,100,1,5 +2750,0,1,1,100,1,5 +2760,0,1,1,100,1,5 +2770,0,1,1,100,1,5 +2780,0,1,1,100,1,5 +2790,0,1,1,100,1,5 +2800,0,1,1,100,1,5 +2810,0,1,1,100,1,5 +2820,0,1,1,100,1,5 +2830,0,1,1,100,1,5 +2840,0,1,1,100,1,5 +2850,0,1,1,100,1,5 +2860,0,1,1,100,1,5 +2870,0,1,1,100,1,5 +2880,0,1,1,100,1,5 +2890,0,1,1,100,1,5 +2900,0,1,1,100,1,5 +2910,0,1,1,100,1,5 +2920,0,1,1,100,1,5 +2930,0,1,1,100,1,5 +2940,0,1,1,100,1,5 +2950,0,1,1,100,1,5 +2960,0,1,1,100,1,5 +2970,0,1,1,100,1,5 +2980,0,1,1,100,1,5 +2990,0,1,1,100,1,5 +3000,0,1,1,100,1,5 +3010,0,1,1,100,1,5 +3020,0,1,1,100,1,5 +3030,0,1,1,100,1,5 +3040,0,1,1,100,1,5 +3050,0,1,1,100,1,5 +3060,0,1,1,100,1,5 +3070,0,1,1,100,1,5 +3080,0,1,1,100,1,5 +3090,0,1,1,100,1,5 +3100,0,1,1,100,1,5 +3110,0,1,1,100,1,5 +3120,0,1,1,100,1,5 +3130,0,1,1,100,1,5 +3140,0,1,1,100,1,5 +3150,0,1,1,100,1,5 +3160,0,1,1,100,1,5 +3170,0,1,1,100,1,5 +3180,0,1,1,100,1,5 +3190,0,1,1,100,1,5 +3200,0,1,1,100,1,5 +3210,0,1,1,100,1,5 +3220,0,1,1,100,1,5 +3230,0,1,1,100,1,5 +3240,0,1,1,100,1,5 +3250,0,1,1,100,1,5 +3260,0,1,1,100,1,5 +3270,0,1,1,100,1,5 +3280,0,1,1,100,1,5 +3290,0,1,1,100,1,5 +3300,0,1,1,100,1,5 +3310,0,1,1,100,1,5 +3320,0,1,1,100,1,5 +3330,0,1,1,100,1,5 +3340,0,1,1,100,1,5 +3350,0,1,1,100,1,5 +3360,0,1,1,100,1,5 +3370,0,1,1,100,1,5 +3380,0,1,1,100,1,5 +3390,0,1,1,100,1,5 +3400,0,1,1,100,1,5 +3410,0,1,1,100,1,5 +3420,0,1,1,100,1,5 +3430,0,1,1,100,1,5 +3440,0,1,1,100,1,5 +3450,0,1,1,100,1,5 +3460,0,1,1,100,1,5 +3470,0,1,1,100,1,5 +3480,0,1,1,100,1,5 +3490,0,1,1,100,1,5 +3500,0,1,1,100,1,5 +3510,0,1,1,100,1,5 +3520,0,1,1,100,1,5 +3530,0,1,1,100,1,5 +3540,0,1,1,100,1,5 +3550,0,1,1,100,1,5 +3560,0,1,1,100,1,5 +3570,0,1,1,100,1,5 +3580,0,1,1,100,1,5 +3590,0,1,1,100,1,5 +3600,0,1,1,100,1,5 +3610,0,1,1,100,1,5 +3620,0,1,1,100,1,5 +3630,0,1,1,100,1,5 +3640,0,1,1,100,1,5 +3650,0,1,1,100,1,5 +3660,0,1,1,100,1,5 +3670,0,1,1,100,1,5 +3680,0,1,1,100,1,5 +3690,0,1,1,100,1,5 +3700,0,1,1,100,1,5 +3710,0,1,1,100,1,5 +3720,0,1,1,100,1,5 +3730,0,1,1,100,1,5 +3740,0,1,1,100,1,5 +3750,0,1,1,100,1,5 +3760,0,1,1,100,1,5 +3770,0,1,1,100,1,5 +3780,0,1,1,100,1,5 +3790,0,1,1,100,1,5 +3800,0,1,1,100,1,5 +3810,0,1,1,100,1,5 +3820,0,1,1,100,1,5 +3830,0,1,1,100,1,5 +3840,0,1,1,100,1,5 +3850,0,1,1,100,1,5 +3860,0,1,1,100,1,5 +3870,0,1,1,100,1,5 +3880,0,1,1,100,1,5 +3890,0,1,1,100,1,5 +3900,0,1,1,100,1,5 +3910,0,1,1,100,1,5 +3920,0,1,1,100,1,5 +3930,0,1,1,100,1,5 +3940,0,1,1,100,1,5 +3950,0,1,1,100,1,5 +3960,0,1,1,100,1,5 +3970,0,1,1,100,1,5 +3980,0,1,1,100,1,5 +3990,0,1,1,100,1,5 +4000,0,1,1,100,1,5 +4010,0,1,1,100,1,5 +4020,0,1,1,100,1,5 +4030,0,1,1,100,1,5 +4040,0,1,1,100,1,5 +4050,0,1,1,100,1,5 +4060,0,1,1,100,1,5 +4070,0,1,1,100,1,5 +4080,0,1,1,100,1,5 +4090,0,1,1,100,1,5 +4100,0,1,1,100,1,5 +4110,0,1,1,100,1,5 +4120,0,1,1,100,1,5 +4130,0,1,1,100,1,5 +4140,0,1,1,100,1,5 +4150,0,1,1,100,1,5 +4160,0,1,1,100,1,5 +4170,0,1,1,100,1,5 +4180,0,1,1,100,1,5 +4190,0,1,1,100,1,5 +4200,0,1,1,100,1,5 +4210,0,1,1,100,1,5 +4220,0,1,1,100,1,5 +4230,0,1,1,100,1,5 +4240,0,1,1,100,1,5 +4250,0,1,1,100,1,5 +4260,0,1,1,100,1,5 +4270,0,1,1,100,1,5 +4280,0,1,1,100,1,5 +4290,0,1,1,100,1,5 +4300,0,1,1,100,1,5 +4310,0,1,1,100,1,5 +4320,0,1,1,100,1,5 +4330,0,1,1,100,1,5 +4340,0,1,1,100,1,5 +4350,0,1,1,100,1,5 +4360,0,1,1,100,1,5 +4370,0,1,1,100,1,5 +4380,0,1,1,100,1,5 +4390,0,1,1,100,1,5 +4400,0,1,1,100,1,5 +4410,0,1,1,100,1,5 +4420,0,1,1,100,1,5 +4430,0,1,1,100,1,5 +4440,0,1,1,100,1,5 +4450,0,1,1,100,1,5 +4460,0,1,1,100,1,5 +4470,0,1,1,100,1,5 +4480,0,1,1,100,1,5 +4490,0,1,1,100,1,5 +4500,0,1,1,100,1,5 +4510,0,1,1,100,1,5 +4520,0,1,1,100,1,5 +4530,0,1,1,100,1,5 +4540,0,1,1,100,1,5 +4550,0,1,1,100,1,5 +4560,0,1,1,100,1,5 +4570,0,1,1,100,1,5 +4580,0,1,1,100,1,5 +4590,0,1,1,100,1,5 +4600,0,1,1,100,1,5 +4610,0,1,1,100,1,5 +4620,0,1,1,100,1,5 +4630,0,1,1,100,1,5 +4640,0,1,1,100,1,5 +4650,0,1,1,100,1,5 +4660,0,1,1,100,1,5 +4670,0,1,1,100,1,5 +4680,0,1,1,100,1,5 +4690,0,1,1,100,1,5 +4700,0,1,1,100,1,5 +4710,0,1,1,100,1,5 +4720,0,1,1,100,1,5 +4730,0,1,1,100,1,5 +4740,0,1,1,100,1,5 +4750,0,1,1,100,1,5 +4760,0,1,1,100,1,5 +4770,0,1,1,100,1,5 +4780,0,1,1,100,1,5 +4790,0,1,1,100,1,5 +4800,0,1,1,100,1,5 +4810,0,1,1,100,1,5 +4820,0,1,1,100,1,5 +4830,0,1,1,100,1,5 +4840,0,1,1,100,1,5 +4850,0,1,1,100,1,5 +4860,0,1,1,100,1,5 +4870,0,1,1,100,1,5 +4880,0,1,1,100,1,5 +4890,0,1,1,100,1,5 +4900,0,1,1,100,1,5 +4910,0,1,1,100,1,5 +4920,0,1,1,100,1,5 +4930,0,1,1,100,1,5 +4940,0,1,1,100,1,5 +4950,0,1,1,100,1,5 +4960,0,1,1,100,1,5 +4970,0,1,1,100,1,5 +4980,0,1,1,100,1,5 +4990,0,1,1,100,1,5 +5000,0,2,2,100,1,5 +5010,0,2,2,100,1,5 +5020,0,2,2,100,1,5 +5030,0,2,2,100,1,5 +5040,0,2,2,100,1,5 +5050,0,2,2,100,1,5 +5060,0,2,2,100,1,5 +5070,0,2,2,100,1,5 +5080,0,2,2,100,1,5 +5090,0,2,2,100,1,5 +5100,0,2,2,100,1,5 +5110,0,2,2,100,1,5 +5120,0,2,2,100,1,5 +5130,0,2,2,100,1,5 +5140,0,2,2,100,1,5 +5150,0,2,2,100,1,5 +5160,0,2,2,100,1,5 +5170,0,2,2,100,1,5 +5180,0,2,2,100,1,5 +5190,0,2,2,100,1,5 +5200,0,2,2,100,1,5 +5210,0,2,2,100,1,5 +5220,0,2,2,100,1,5 +5230,0,2,2,100,1,5 +5240,0,2,2,100,1,5 +5250,0,2,2,100,1,5 +5260,0,2,2,100,1,5 +5270,0,2,2,100,1,5 +5280,0,2,2,100,1,5 +5290,0,2,2,100,1,5 +5300,0,2,2,100,1,5 +5310,0,2,2,100,1,5 +5320,0,2,2,100,1,5 +5330,0,2,2,100,1,5 +5340,0,2,2,100,1,5 +5350,0,2,2,100,1,5 +5360,0,2,2,100,1,5 +5370,0,2,2,100,1,5 +5380,0,2,2,100,1,5 +5390,0,2,2,100,1,5 +5400,0,2,2,100,1,5 +5410,0,2,2,100,1,5 +5420,0,2,2,100,1,5 +5430,0,2,2,100,1,5 +5440,0,2,2,100,1,5 +5450,0,2,2,100,1,5 +5460,0,2,2,100,1,5 +5470,0,2,2,100,1,5 +5480,0,2,2,100,1,5 +5490,0,2,2,100,1,5 +5500,0,2,2,100,1,5 +5510,0,2,2,100,1,5 +5520,0,2,2,100,1,5 +5530,0,2,2,100,1,5 +5540,0,2,2,100,1,5 +5550,0,2,2,100,1,5 +5560,0,2,2,100,1,5 +5570,0,2,2,100,1,5 +5580,0,2,2,100,1,5 +5590,0,2,2,100,1,5 +5600,0,2,2,100,1,5 +5610,0,2,2,100,1,5 +5620,0,2,2,100,1,5 +5630,0,2,2,100,1,5 +5640,0,2,2,100,1,5 +5650,0,2,2,100,1,5 +5660,0,2,2,100,1,5 +5670,0,2,2,100,1,5 +5680,0,2,2,100,1,5 +5690,0,2,2,100,1,5 +5700,0,2,2,100,1,5 +5710,0,2,2,100,1,5 +5720,0,2,2,100,1,5 +5730,0,2,2,100,1,5 +5740,0,2,2,100,1,5 +5750,0,2,2,100,1,5 +5760,0,2,2,100,1,5 +5770,0,2,2,100,1,5 +5780,0,2,2,100,1,5 +5790,0,2,2,100,1,5 +5800,0,2,2,100,1,5 +5810,0,2,2,100,1,5 +5820,0,2,2,100,1,5 +5830,0,2,2,100,1,5 +5840,0,2,2,100,1,5 +5850,0,2,2,100,1,5 +5860,0,2,2,100,1,5 +5870,0,2,2,100,1,5 +5880,0,2,2,100,1,5 +5890,0,2,2,100,1,5 +5900,0,2,2,100,1,5 +5910,0,2,2,100,1,5 +5920,0,2,2,100,1,5 +5930,0,2,2,100,1,5 +5940,0,2,2,100,1,5 +5950,0,2,2,100,1,5 +5960,0,2,2,100,1,5 +5970,0,2,2,100,1,5 +5980,0,2,2,100,1,5 +5990,0,2,2,100,1,5 +6000,0,2,2,100,1,5 +6010,0,2,2,100,1,5 +6020,0,2,2,100,1,5 +6030,0,2,2,100,1,5 +6040,0,2,2,100,1,5 +6050,0,2,2,100,1,5 +6060,0,2,2,100,1,5 +6070,0,2,2,100,1,5 +6080,0,2,2,100,1,5 +6090,0,2,2,100,1,5 +6100,0,2,2,100,1,5 +6110,0,2,2,100,1,5 +6120,0,2,2,100,1,5 +6130,0,2,2,100,1,5 +6140,0,2,2,100,1,5 +6150,0,2,2,100,1,5 +6160,0,2,2,100,1,5 +6170,0,2,2,100,1,5 +6180,0,2,2,100,1,5 +6190,0,2,2,100,1,5 +6200,0,2,2,100,1,5 +6210,0,2,2,100,1,5 +6220,0,2,2,100,1,5 +6230,0,2,2,100,1,5 +6240,0,2,2,100,1,5 +6250,0,2,2,100,1,5 +6260,0,2,2,100,1,5 +6270,0,2,2,100,1,5 +6280,0,2,2,100,1,5 +6290,0,2,2,100,1,5 +6300,0,2,2,100,1,5 +6310,0,2,2,100,1,5 +6320,0,2,2,100,1,5 +6330,0,2,2,100,1,5 +6340,0,2,2,100,1,5 +6350,0,2,2,100,1,5 +6360,0,2,2,100,1,5 +6370,0,2,2,100,1,5 +6380,0,2,2,100,1,5 +6390,0,2,2,100,1,5 +6400,0,2,2,100,1,5 +6410,0,2,2,100,1,5 +6420,0,2,2,100,1,5 +6430,0,2,2,100,1,5 +6440,0,2,2,100,1,5 +6450,0,2,2,100,1,5 +6460,0,2,2,100,1,5 +6470,0,2,2,100,1,5 +6480,0,2,2,100,1,5 +6490,0,2,2,100,1,5 +6500,0,2,2,100,1,5 +6510,0,2,2,100,1,5 +6520,0,2,2,100,1,5 +6530,0,2,2,100,1,5 +6540,0,2,2,100,1,5 +6550,0,2,2,100,1,5 +6560,0,2,2,100,1,5 +6570,0,2,2,100,1,5 +6580,0,2,2,100,1,5 +6590,0,2,2,100,1,5 +6600,0,2,2,100,1,5 +6610,0,2,2,100,1,5 +6620,0,2,2,100,1,5 +6630,0,2,2,100,1,5 +6640,0,2,2,100,1,5 +6650,0,2,2,100,1,5 +6660,0,2,2,100,1,5 +6670,0,2,2,100,1,5 +6680,0,2,2,100,1,5 +6690,0,2,2,100,1,5 +6700,0,2,2,100,1,5 +6710,0,2,2,100,1,5 +6720,0,2,2,100,1,5 +6730,0,2,2,100,1,5 +6740,0,2,2,100,1,5 +6750,0,2,2,100,1,5 +6760,0,2,2,100,1,5 +6770,0,2,2,100,1,5 +6780,0,2,2,100,1,5 +6790,0,2,2,100,1,5 +6800,0,2,2,100,1,5 +6810,0,2,2,100,1,5 +6820,0,2,2,100,1,5 +6830,0,2,2,100,1,5 +6840,0,2,2,100,1,5 +6850,0,2,2,100,1,5 +6860,0,2,2,100,1,5 +6870,0,2,2,100,1,5 +6880,0,2,2,100,1,5 +6890,0,2,2,100,1,5 +6900,0,2,2,100,1,5 +6910,0,2,2,100,1,5 +6920,0,2,2,100,1,5 +6930,0,2,2,100,1,5 +6940,0,2,2,100,1,5 +6950,0,2,2,100,1,5 +6960,0,2,2,100,1,5 +6970,0,2,2,100,1,5 +6980,0,2,2,100,1,5 +6990,0,2,2,100,1,5 +7000,0,2,2,100,1,5 +7010,0,2,2,100,1,5 +7020,0,2,2,100,1,5 +7030,0,2,2,100,1,5 +7040,0,2,2,100,1,5 +7050,0,2,2,100,1,5 +7060,0,2,2,100,1,5 +7070,0,2,2,100,1,5 +7080,0,2,2,100,1,5 +7090,0,2,2,100,1,5 +7100,0,2,2,100,1,5 +7110,0,2,2,100,1,5 +7120,0,2,2,100,1,5 +7130,0,2,2,100,1,5 +7140,0,2,2,100,1,5 +7150,0,2,2,100,1,5 +7160,0,2,2,100,1,5 +7170,0,2,2,100,1,5 +7180,0,2,2,100,1,5 +7190,0,2,2,100,1,5 +7200,0,2,2,100,1,5 +7210,0,2,2,100,1,5 +7220,0,2,2,100,1,5 +7230,0,2,2,100,1,5 +7240,0,2,2,100,1,5 +7250,0,2,2,100,1,5 +7260,0,2,2,100,1,5 +7270,0,2,2,100,1,5 +7280,0,2,2,100,1,5 +7290,0,2,2,100,1,5 +7300,0,2,2,100,1,5 +7310,0,2,2,100,1,5 +7320,0,2,2,100,1,5 +7330,0,2,2,100,1,5 +7340,0,2,2,100,1,5 +7350,0,2,2,100,1,5 +7360,0,2,2,100,1,5 +7370,0,2,2,100,1,5 +7380,0,2,2,100,1,5 +7390,0,2,2,100,1,5 +7400,0,2,2,100,1,5 +7410,0,2,2,100,1,5 +7420,0,2,2,100,1,5 +7430,0,2,2,100,1,5 +7440,0,2,2,100,1,5 +7450,0,2,2,100,1,5 +7460,0,2,2,100,1,5 +7470,0,2,2,100,1,5 +7480,0,2,2,100,1,5 +7490,0,2,2,100,1,5 +7500,0,2,2,100,1,5 +7510,0,2,2,100,1,5 +7520,0,2,2,100,1,5 +7530,0,2,2,100,1,5 +7540,0,2,2,100,1,5 +7550,0,2,2,100,1,5 +7560,0,2,2,100,1,5 +7570,0,2,2,100,1,5 +7580,0,2,2,100,1,5 +7590,0,2,2,100,1,5 +7600,0,2,2,100,1,5 +7610,0,2,2,100,1,5 +7620,0,2,2,100,1,5 +7630,0,2,2,100,1,5 +7640,0,2,2,100,1,5 +7650,0,2,2,100,1,5 +7660,0,2,2,100,1,5 +7670,0,2,2,100,1,5 +7680,0,2,2,100,1,5 +7690,0,2,2,100,1,5 +7700,0,2,2,100,1,5 +7710,0,2,2,100,1,5 +7720,0,2,2,100,1,5 +7730,0,2,2,100,1,5 +7740,0,2,2,100,1,5 +7750,0,2,2,100,1,5 +7760,0,2,2,100,1,5 +7770,0,2,2,100,1,5 +7780,0,2,2,100,1,5 +7790,0,2,2,100,1,5 +7800,0,2,2,100,1,5 +7810,0,2,2,100,1,5 +7820,0,2,2,100,1,5 +7830,0,2,2,100,1,5 +7840,0,2,2,100,1,5 +7850,0,2,2,100,1,5 +7860,0,2,2,100,1,5 +7870,0,2,2,100,1,5 +7880,0,2,2,100,1,5 +7890,0,2,2,100,1,5 +7900,0,2,2,100,1,5 +7910,0,2,2,100,1,5 +7920,0,2,2,100,1,5 +7930,0,2,2,100,1,5 +7940,0,2,2,100,1,5 +7950,0,2,2,100,1,5 +7960,0,2,2,100,1,5 +7970,0,2,2,100,1,5 +7980,0,2,2,100,1,5 +7990,0,2,2,100,1,5 +8000,0,2,2,100,1,5 +8010,0,2,2,100,1,5 +8020,0,2,2,100,1,5 +8030,0,2,2,100,1,5 +8040,0,2,2,100,1,5 +8050,0,2,2,100,1,5 +8060,0,2,2,100,1,5 +8070,0,2,2,100,1,5 +8080,0,2,2,100,1,5 +8090,0,2,2,100,1,5 +8100,0,2,2,100,1,5 +8110,0,2,2,100,1,5 +8120,0,2,2,100,1,5 +8130,0,2,2,100,1,5 +8140,0,2,2,100,1,5 +8150,0,2,2,100,1,5 +8160,0,2,2,100,1,5 +8170,0,2,2,100,1,5 +8180,0,2,2,100,1,5 +8190,0,2,2,100,1,5 +8200,0,2,2,100,1,5 +8210,0,2,2,100,1,5 +8220,0,2,2,100,1,5 +8230,0,2,2,100,1,5 +8240,0,2,2,100,1,5 +8250,0,2,2,100,1,5 +8260,0,2,2,100,1,5 +8270,0,2,2,100,1,5 +8280,0,2,2,100,1,5 +8290,0,2,2,100,1,5 +8300,0,2,2,100,1,5 +8310,0,2,2,100,1,5 +8320,0,2,2,100,1,5 +8330,0,2,2,100,1,5 +8340,0,2,2,100,1,5 +8350,0,2,2,100,1,5 +8360,0,2,2,100,1,5 +8370,0,2,2,100,1,5 +8380,0,2,2,100,1,5 +8390,0,2,2,100,1,5 +8400,0,2,2,100,1,5 +8410,0,2,2,100,1,5 +8420,0,2,2,100,1,5 +8430,0,2,2,100,1,5 +8440,0,2,2,100,1,5 +8450,0,2,2,100,1,5 +8460,0,2,2,100,1,5 +8470,0,2,2,100,1,5 +8480,0,2,2,100,1,5 +8490,0,2,2,100,1,5 +8500,0,2,2,100,1,5 +8510,0,2,2,100,1,5 +8520,0,2,2,100,1,5 +8530,0,2,2,100,1,5 +8540,0,2,2,100,1,5 +8550,0,2,2,100,1,5 +8560,0,2,2,100,1,5 +8570,0,2,2,100,1,5 +8580,0,2,2,100,1,5 +8590,0,2,2,100,1,5 +8600,0,2,2,100,1,5 +8610,0,2,2,100,1,5 +8620,0,2,2,100,1,5 +8630,0,2,2,100,1,5 +8640,0,2,2,100,1,5 +8650,0,2,2,100,1,5 +8660,0,2,2,100,1,5 +8670,0,2,2,100,1,5 +8680,0,2,2,100,1,5 +8690,0,2,2,100,1,5 +8700,0,2,2,100,1,5 +8710,0,2,2,100,1,5 +8720,0,2,2,100,1,5 +8730,0,2,2,100,1,5 +8740,0,2,2,100,1,5 +8750,0,2,2,100,1,5 +8760,0,2,2,100,1,5 +8770,0,2,2,100,1,5 +8780,0,2,2,100,1,5 +8790,0,2,2,100,1,5 +8800,0,2,2,100,1,5 +8810,0,2,2,100,1,5 +8820,0,2,2,100,1,5 +8830,0,2,2,100,1,5 +8840,0,2,2,100,1,5 +8850,0,2,2,100,1,5 +8860,0,2,2,100,1,5 +8870,0,2,2,100,1,5 +8880,0,2,2,100,1,5 +8890,0,2,2,100,1,5 +8900,0,2,2,100,1,5 +8910,0,2,2,100,1,5 +8920,0,2,2,100,1,5 +8930,0,2,2,100,1,5 +8940,0,2,2,100,1,5 +8950,0,2,2,100,1,5 +8960,0,2,2,100,1,5 +8970,0,2,2,100,1,5 +8980,0,2,2,100,1,5 +8990,0,2,2,100,1,5 +9000,0,2,2,100,1,5 +9010,0,2,2,100,1,5 +9020,0,2,2,100,1,5 +9030,0,2,2,100,1,5 +9040,0,2,2,100,1,5 +9050,0,2,2,100,1,5 +9060,0,2,2,100,1,5 +9070,0,2,2,100,1,5 +9080,0,2,2,100,1,5 +9090,0,2,2,100,1,5 +9100,0,2,2,100,1,5 +9110,0,2,2,100,1,5 +9120,0,2,2,100,1,5 +9130,0,2,2,100,1,5 +9140,0,2,2,100,1,5 +9150,0,2,2,100,1,5 +9160,0,2,2,100,1,5 +9170,0,2,2,100,1,5 +9180,0,2,2,100,1,5 +9190,0,2,2,100,1,5 +9200,0,2,2,100,1,5 +9210,0,2,2,100,1,5 +9220,0,2,2,100,1,5 +9230,0,2,2,100,1,5 +9240,0,2,2,100,1,5 +9250,0,2,2,100,1,5 +9260,0,2,2,100,1,5 +9270,0,2,2,100,1,5 +9280,0,2,2,100,1,5 +9290,0,2,2,100,1,5 +9300,0,2,2,100,1,5 +9310,0,2,2,100,1,5 +9320,0,2,2,100,1,5 +9330,0,2,2,100,1,5 +9340,0,2,2,100,1,5 +9350,0,2,2,100,1,5 +9360,0,2,2,100,1,5 +9370,0,2,2,100,1,5 +9380,0,2,2,100,1,5 +9390,0,2,2,100,1,5 +9400,0,2,2,100,1,5 +9410,0,2,2,100,1,5 +9420,0,2,2,100,1,5 +9430,0,2,2,100,1,5 +9440,0,2,2,100,1,5 +9450,0,2,2,100,1,5 +9460,0,2,2,100,1,5 +9470,0,2,2,100,1,5 +9480,0,2,2,100,1,5 +9490,0,2,2,100,1,5 +9500,0,2,2,100,1,5 +9510,0,2,2,100,1,5 +9520,0,2,2,100,1,5 +9530,0,2,2,100,1,5 +9540,0,2,2,100,1,5 +9550,0,2,2,100,1,5 +9560,0,2,2,100,1,5 +9570,0,2,2,100,1,5 +9580,0,2,2,100,1,5 +9590,0,2,2,100,1,5 +9600,0,2,2,100,1,5 +9610,0,2,2,100,1,5 +9620,0,2,2,100,1,5 +9630,0,2,2,100,1,5 +9640,0,2,2,100,1,5 +9650,0,2,2,100,1,5 +9660,0,2,2,100,1,5 +9670,0,2,2,100,1,5 +9680,0,2,2,100,1,5 +9690,0,2,2,100,1,5 +9700,0,2,2,100,1,5 +9710,0,2,2,100,1,5 +9720,0,2,2,100,1,5 +9730,0,2,2,100,1,5 +9740,0,2,2,100,1,5 +9750,0,2,2,100,1,5 +9760,0,2,2,100,1,5 +9770,0,2,2,100,1,5 +9780,0,2,2,100,1,5 +9790,0,2,2,100,1,5 +9800,0,2,2,100,1,5 +9810,0,2,2,100,1,5 +9820,0,2,2,100,1,5 +9830,0,2,2,100,1,5 +9840,0,2,2,100,1,5 +9850,0,2,2,100,1,5 +9860,0,2,2,100,1,5 +9870,0,2,2,100,1,5 +9880,0,2,2,100,1,5 +9890,0,2,2,100,1,5 +9900,0,2,2,100,1,5 +9910,0,2,2,100,1,5 +9920,0,2,2,100,1,5 +9930,0,2,2,100,1,5 +9940,0,2,2,100,1,5 +9950,0,2,2,100,1,5 +9960,0,2,2,100,1,5 +9970,0,2,2,100,1,5 +9980,0,2,2,100,1,5 +9990,0,2,2,100,1,5 +10000,0,2,2,100,1,5 +10010,0,2,2,100,1,5 +10020,0,2,2,100,1,5 +10030,0,2,2,100,1,5 +10040,0,2,2,100,1,5 +10050,0,2,2,100,1,5 +10060,0,2,2,100,1,5 +10070,0,2,2,100,1,5 +10080,0,2,2,100,1,5 +10090,0,2,2,100,1,5 +10100,0,2,2,100,1,5 diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20210105_fat.csv b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20210105_fat.csv new file mode 100644 index 0000000..fda3c4d --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20210105_fat.csv @@ -0,0 +1,1013 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,0,0.5,0.5,100,1,5 +10,0,0.5,0.5,100,1,5 +20,0,0.5,0.5,100,1,5 +30,0,0.5,0.5,100,1,5 +40,0,0.5,0.5,100,1,5 +50,0,0.5,0.5,100,1,5 +60,0,0.5,0.5,100,1,5 +70,0,0.5,0.5,100,1,5 +80,0,0.5,0.5,100,1,5 +90,0,0.5,0.5,100,1,5 +100,0,0.5,0.5,100,1,5 +110,0,0.5,0.5,100,1,5 +120,0,0.5,0.5,100,1,5 +130,0,0.5,0.5,100,1,5 +140,0,0.5,0.5,100,1,5 +150,0,0.5,0.5,100,1,5 +160,0,0.5,0.5,100,1,5 +170,0,0.5,0.5,100,1,5 +180,0,0.5,0.5,100,1,5 +190,0,0.5,0.5,100,1,5 +200,0,0.5,0.5,100,1,5 +210,0,0.5,0.5,100,1,5 +220,0,0.5,0.5,100,1,5 +230,0,0.5,0.5,100,1,5 +240,0,0.5,0.5,100,1,5 +250,0,0.5,0.5,100,1,5 +260,0,0.5,0.5,100,1,5 +270,0,0.5,0.5,100,1,5 +280,0,0.5,0.5,100,1,5 +290,0,0.5,0.5,100,1,5 +300,0,0.5,0.5,100,1,5 +310,0,0.5,0.5,100,1,5 +320,0,0.5,0.5,100,1,5 +330,0,0.5,0.5,100,1,5 +340,0,0.5,0.5,100,1,5 +350,0,0.5,0.5,100,1,5 +360,0,0.5,0.5,100,1,5 +370,0,0.5,0.5,100,1,5 +380,0,0.5,0.5,100,1,5 +390,0,0.5,0.5,100,1,5 +400,0,0.5,0.5,100,1,5 +410,0,0.5,0.5,100,1,5 +420,0,0.5,0.5,100,1,5 +430,0,0.5,0.5,100,1,5 +440,0,0.5,0.5,100,1,5 +450,0,0.5,0.5,100,1,5 +460,0,0.5,0.5,100,1,5 +470,0,0.5,0.5,100,1,5 +480,0,0.5,0.5,100,1,5 +490,0,0.5,0.5,100,1,5 +500,0,0.5,0.5,100,1,5 +510,0,0.5,0.5,100,1,5 +520,0,0.5,0.5,100,1,5 +530,0,0.5,0.5,100,1,5 +540,0,0.5,0.5,100,1,5 +550,0,0.5,0.5,100,1,5 +560,0,0.5,0.5,100,1,5 +570,0,0.5,0.5,100,1,5 +580,0,0.5,0.5,100,1,5 +590,0,0.5,0.5,100,1,5 +600,0,0.5,0.5,100,1,5 +610,0,0.5,0.5,100,1,5 +620,0,0.5,0.5,100,1,5 +630,0,0.5,0.5,100,1,5 +640,0,0.5,0.5,100,1,5 +650,0,0.5,0.5,100,1,5 +660,0,0.5,0.5,100,1,5 +670,0,0.5,0.5,100,1,5 +680,0,0.5,0.5,100,1,5 +690,0,0.5,0.5,100,1,5 +700,0,0.5,0.5,100,1,5 +710,0,0.5,0.5,100,1,5 +720,0,0.5,0.5,100,1,5 +730,0,0.5,0.5,100,1,5 +740,0,0.5,0.5,100,1,5 +750,0,0.5,0.5,100,1,5 +760,0,0.5,0.5,100,1,5 +770,0,0.5,0.5,100,1,5 +780,0,0.5,0.5,100,1,5 +790,0,0.5,0.5,100,1,5 +800,0,0.5,0.5,100,1,5 +810,0,0.5,0.5,100,1,5 +820,0,0.5,0.5,100,1,5 +830,0,0.5,0.5,100,1,5 +840,0,0.5,0.5,100,1,5 +850,0,0.5,0.5,100,1,5 +860,0,0.5,0.5,100,1,5 +870,0,0.5,0.5,100,1,5 +880,0,0.5,0.5,100,1,5 +890,0,0.5,0.5,100,1,5 +900,0,0.5,0.5,100,1,5 +910,0,0.5,0.5,100,1,5 +920,0,0.5,0.5,100,1,5 +930,0,0.5,0.5,100,1,5 +940,0,0.5,0.5,100,1,5 +950,0,0.5,0.5,100,1,5 +960,0,0.5,0.5,100,1,5 +970,0,0.5,0.5,100,1,5 +980,0,0.5,0.5,100,1,5 +990,0,0.5,0.5,100,1,5 +1000,0,0.5,0.5,100,1,5 +1010,0,1,1,100,1,5 +1020,0,1,1,100,1,5 +1030,0,1,1,100,1,5 +1040,0,1,1,100,1,5 +1050,0,1,1,100,1,5 +1060,0,1,1,100,1,5 +1070,0,1,1,100,1,5 +1080,0,1,1,100,1,5 +1090,0,1,1,100,1,5 +1100,0,1,1,100,1,5 +1110,0,1,1,100,1,5 +1120,0,1,1,100,1,5 +1130,0,1,1,100,1,5 +1140,0,1,1,100,1,5 +1150,0,1,1,100,1,5 +1160,0,1,1,100,1,5 +1170,0,1,1,100,1,5 +1180,0,1,1,100,1,5 +1190,0,1,1,100,1,5 +1200,0,1,1,100,1,5 +1210,0,1,1,100,1,5 +1220,0,1,1,100,1,5 +1230,0,1,1,100,1,5 +1240,0,1,1,100,1,5 +1250,0,1,1,100,1,5 +1260,0,1,1,100,1,5 +1270,0,1,1,100,1,5 +1280,0,1,1,100,1,5 +1290,0,1,1,100,1,5 +1300,0,1,1,100,1,5 +1310,0,1,1,100,1,5 +1320,0,1,1,100,1,5 +1330,0,1,1,100,1,5 +1340,0,1,1,100,1,5 +1350,0,1,1,100,1,5 +1360,0,1,1,100,1,5 +1370,0,1,1,100,1,5 +1380,0,1,1,100,1,5 +1390,0,1,1,100,1,5 +1400,0,1,1,100,1,5 +1410,0,1,1,100,1,5 +1420,0,1,1,100,1,5 +1430,0,1,1,100,1,5 +1440,0,1,1,100,1,5 +1450,0,1,1,100,1,5 +1460,0,1,1,100,1,5 +1470,0,1,1,100,1,5 +1480,0,1,1,100,1,5 +1490,0,1,1,100,1,5 +1500,0,1,1,100,1,5 +1510,0,1,1,100,1,5 +1520,0,1,1,100,1,5 +1530,0,1,1,100,1,5 +1540,0,1,1,100,1,5 +1550,0,1,1,100,1,5 +1560,0,1,1,100,1,5 +1570,0,1,1,100,1,5 +1580,0,1,1,100,1,5 +1590,0,1,1,100,1,5 +1600,0,1,1,100,1,5 +1610,0,1,1,100,1,5 +1620,0,1,1,100,1,5 +1630,0,1,1,100,1,5 +1640,0,1,1,100,1,5 +1650,0,1,1,100,1,5 +1660,0,1,1,100,1,5 +1670,0,1,1,100,1,5 +1680,0,1,1,100,1,5 +1690,0,1,1,100,1,5 +1700,0,1,1,100,1,5 +1710,0,1,1,100,1,5 +1720,0,1,1,100,1,5 +1730,0,1,1,100,1,5 +1740,0,1,1,100,1,5 +1750,0,1,1,100,1,5 +1760,0,1,1,100,1,5 +1770,0,1,1,100,1,5 +1780,0,1,1,100,1,5 +1790,0,1,1,100,1,5 +1800,0,1,1,100,1,5 +1810,0,1,1,100,1,5 +1820,0,1,1,100,1,5 +1830,0,1,1,100,1,5 +1840,0,1,1,100,1,5 +1850,0,1,1,100,1,5 +1860,0,1,1,100,1,5 +1870,0,1,1,100,1,5 +1880,0,1,1,100,1,5 +1890,0,1,1,100,1,5 +1900,0,1,1,100,1,5 +1910,0,1,1,100,1,5 +1920,0,1,1,100,1,5 +1930,0,1,1,100,1,5 +1940,0,1,1,100,1,5 +1950,0,1,1,100,1,5 +1960,0,1,1,100,1,5 +1970,0,1,1,100,1,5 +1980,0,1,1,100,1,5 +1990,0,1,1,100,1,5 +2000,0,1,1,100,1,5 +2010,0,1,1,100,1,5 +2020,0,1,1,100,1,5 +2030,0,1,1,100,1,5 +2040,0,1,1,100,1,5 +2050,0,1,1,100,1,5 +2060,0,1,1,100,1,5 +2070,0,1,1,100,1,5 +2080,0,1,1,100,1,5 +2090,0,1,1,100,1,5 +2100,0,1,1,100,1,5 +2110,0,1,1,100,1,5 +2120,0,1,1,100,1,5 +2130,0,1,1,100,1,5 +2140,0,1,1,100,1,5 +2150,0,1,1,100,1,5 +2160,0,1,1,100,1,5 +2170,0,1,1,100,1,5 +2180,0,1,1,100,1,5 +2190,0,1,1,100,1,5 +2200,0,1,1,100,1,5 +2210,0,1,1,100,1,5 +2220,0,1,1,100,1,5 +2230,0,1,1,100,1,5 +2240,0,1,1,100,1,5 +2250,0,1,1,100,1,5 +2260,0,1,1,100,1,5 +2270,0,1,1,100,1,5 +2280,0,1,1,100,1,5 +2290,0,1,1,100,1,5 +2300,0,1,1,100,1,5 +2310,0,1,1,100,1,5 +2320,0,1,1,100,1,5 +2330,0,1,1,100,1,5 +2340,0,1,1,100,1,5 +2350,0,1,1,100,1,5 +2360,0,1,1,100,1,5 +2370,0,1,1,100,1,5 +2380,0,1,1,100,1,5 +2390,0,1,1,100,1,5 +2400,0,1,1,100,1,5 +2410,0,1,1,100,1,5 +2420,0,1,1,100,1,5 +2430,0,1,1,100,1,5 +2440,0,1,1,100,1,5 +2450,0,1,1,100,1,5 +2460,0,1,1,100,1,5 +2470,0,1,1,100,1,5 +2480,0,1,1,100,1,5 +2490,0,1,1,100,1,5 +2500,0,1,1,100,1,5 +2510,0,1,1,100,1,5 +2520,0,1,1,100,1,5 +2530,0,1,1,100,1,5 +2540,0,1,1,100,1,5 +2550,0,1,1,100,1,5 +2560,0,1,1,100,1,5 +2570,0,1,1,100,1,5 +2580,0,1,1,100,1,5 +2590,0,1,1,100,1,5 +2600,0,1,1,100,1,5 +2610,0,1,1,100,1,5 +2620,0,1,1,100,1,5 +2630,0,1,1,100,1,5 +2640,0,1,1,100,1,5 +2650,0,1,1,100,1,5 +2660,0,1,1,100,1,5 +2670,0,1,1,100,1,5 +2680,0,1,1,100,1,5 +2690,0,1,1,100,1,5 +2700,0,1,1,100,1,5 +2710,0,1,1,100,1,5 +2720,0,1,1,100,1,5 +2730,0,1,1,100,1,5 +2740,0,1,1,100,1,5 +2750,0,1,1,100,1,5 +2760,0,1,1,100,1,5 +2770,0,1,1,100,1,5 +2780,0,1,1,100,1,5 +2790,0,1,1,100,1,5 +2800,0,1,1,100,1,5 +2810,0,1,1,100,1,5 +2820,0,1,1,100,1,5 +2830,0,1,1,100,1,5 +2840,0,1,1,100,1,5 +2850,0,1,1,100,1,5 +2860,0,1,1,100,1,5 +2870,0,1,1,100,1,5 +2880,0,1,1,100,1,5 +2890,0,1,1,100,1,5 +2900,0,1,1,100,1,5 +2910,0,1,1,100,1,5 +2920,0,1,1,100,1,5 +2930,0,1,1,100,1,5 +2940,0,1,1,100,1,5 +2950,0,1,1,100,1,5 +2960,0,1,1,100,1,5 +2970,0,1,1,100,1,5 +2980,0,1,1,100,1,5 +2990,0,1,1,100,1,5 +3000,0,1,1,100,1,5 +3010,0,1,1,100,1,5 +3020,0,1,1,100,1,5 +3030,0,1,1,100,1,5 +3040,0,1,1,100,1,5 +3050,0,1,1,100,1,5 +3060,0,1,1,100,1,5 +3070,0,1,1,100,1,5 +3080,0,1,1,100,1,5 +3090,0,1,1,100,1,5 +3100,0,1,1,100,1,5 +3110,0,1,1,100,1,5 +3120,0,1,1,100,1,5 +3130,0,1,1,100,1,5 +3140,0,1,1,100,1,5 +3150,0,1,1,100,1,5 +3160,0,1,1,100,1,5 +3170,0,1,1,100,1,5 +3180,0,1,1,100,1,5 +3190,0,1,1,100,1,5 +3200,0,1,1,100,1,5 +3210,0,1,1,100,1,5 +3220,0,1,1,100,1,5 +3230,0,1,1,100,1,5 +3240,0,1,1,100,1,5 +3250,0,1,1,100,1,5 +3260,0,1,1,100,1,5 +3270,0,1,1,100,1,5 +3280,0,1,1,100,1,5 +3290,0,1,1,100,1,5 +3300,0,1,1,100,1,5 +3310,0,1,1,100,1,5 +3320,0,1,1,100,1,5 +3330,0,1,1,100,1,5 +3340,0,1,1,100,1,5 +3350,0,1,1,100,1,5 +3360,0,1,1,100,1,5 +3370,0,1,1,100,1,5 +3380,0,1,1,100,1,5 +3390,0,1,1,100,1,5 +3400,0,1,1,100,1,5 +3410,0,1,1,100,1,5 +3420,0,1,1,100,1,5 +3430,0,1,1,100,1,5 +3440,0,1,1,100,1,5 +3450,0,1,1,100,1,5 +3460,0,1,1,100,1,5 +3470,0,1,1,100,1,5 +3480,0,1,1,100,1,5 +3490,0,1,1,100,1,5 +3500,0,1,1,100,1,5 +3510,0,1,1,100,1,5 +3520,0,1,1,100,1,5 +3530,0,1,1,100,1,5 +3540,0,1,1,100,1,5 +3550,0,1,1,100,1,5 +3560,0,1,1,100,1,5 +3570,0,1,1,100,1,5 +3580,0,1,1,100,1,5 +3590,0,1,1,100,1,5 +3600,0,1,1,100,1,5 +3610,0,1,1,100,1,5 +3620,0,1,1,100,1,5 +3630,0,1,1,100,1,5 +3640,0,1,1,100,1,5 +3650,0,1,1,100,1,5 +3660,0,1,1,100,1,5 +3670,0,1,1,100,1,5 +3680,0,1,1,100,1,5 +3690,0,1,1,100,1,5 +3700,0,1,1,100,1,5 +3710,0,1,1,100,1,5 +3720,0,1,1,100,1,5 +3730,0,1,1,100,1,5 +3740,0,1,1,100,1,5 +3750,0,1,1,100,1,5 +3760,0,1,1,100,1,5 +3770,0,1,1,100,1,5 +3780,0,1,1,100,1,5 +3790,0,1,1,100,1,5 +3800,0,1,1,100,1,5 +3810,0,1,1,100,1,5 +3820,0,1,1,100,1,5 +3830,0,1,1,100,1,5 +3840,0,1,1,100,1,5 +3850,0,1,1,100,1,5 +3860,0,1,1,100,1,5 +3870,0,1,1,100,1,5 +3880,0,1,1,100,1,5 +3890,0,1,1,100,1,5 +3900,0,1,1,100,1,5 +3910,0,1,1,100,1,5 +3920,0,1,1,100,1,5 +3930,0,1,1,100,1,5 +3940,0,1,1,100,1,5 +3950,0,1,1,100,1,5 +3960,0,1,1,100,1,5 +3970,0,1,1,100,1,5 +3980,0,1,1,100,1,5 +3990,0,1,1,100,1,5 +4000,0,1,1,100,1,5 +4010,0,1,1,100,1,5 +4020,0,1,1,100,1,5 +4030,0,1,1,100,1,5 +4040,0,1,1,100,1,5 +4050,0,1,1,100,1,5 +4060,0,1,1,100,1,5 +4070,0,1,1,100,1,5 +4080,0,1,1,100,1,5 +4090,0,1,1,100,1,5 +4100,0,1,1,100,1,5 +4110,0,1,1,100,1,5 +4120,0,1,1,100,1,5 +4130,0,1,1,100,1,5 +4140,0,1,1,100,1,5 +4150,0,1,1,100,1,5 +4160,0,1,1,100,1,5 +4170,0,1,1,100,1,5 +4180,0,1,1,100,1,5 +4190,0,1,1,100,1,5 +4200,0,1,1,100,1,5 +4210,0,1,1,100,1,5 +4220,0,1,1,100,1,5 +4230,0,1,1,100,1,5 +4240,0,1,1,100,1,5 +4250,0,1,1,100,1,5 +4260,0,1,1,100,1,5 +4270,0,1,1,100,1,5 +4280,0,1,1,100,1,5 +4290,0,1,1,100,1,5 +4300,0,1,1,100,1,5 +4310,0,1,1,100,1,5 +4320,0,1,1,100,1,5 +4330,0,1,1,100,1,5 +4340,0,1,1,100,1,5 +4350,0,1,1,100,1,5 +4360,0,1,1,100,1,5 +4370,0,1,1,100,1,5 +4380,0,1,1,100,1,5 +4390,0,1,1,100,1,5 +4400,0,1,1,100,1,5 +4410,0,1,1,100,1,5 +4420,0,1,1,100,1,5 +4430,0,1,1,100,1,5 +4440,0,1,1,100,1,5 +4450,0,1,1,100,1,5 +4460,0,1,1,100,1,5 +4470,0,1,1,100,1,5 +4480,0,1,1,100,1,5 +4490,0,1,1,100,1,5 +4500,0,1,1,100,1,5 +4510,0,1,1,100,1,5 +4520,0,1,1,100,1,5 +4530,0,1,1,100,1,5 +4540,0,1,1,100,1,5 +4550,0,1,1,100,1,5 +4560,0,1,1,100,1,5 +4570,0,1,1,100,1,5 +4580,0,1,1,100,1,5 +4590,0,1,1,100,1,5 +4600,0,1,1,100,1,5 +4610,0,1,1,100,1,5 +4620,0,1,1,100,1,5 +4630,0,1,1,100,1,5 +4640,0,1,1,100,1,5 +4650,0,1,1,100,1,5 +4660,0,1,1,100,1,5 +4670,0,1,1,100,1,5 +4680,0,1,1,100,1,5 +4690,0,1,1,100,1,5 +4700,0,1,1,100,1,5 +4710,0,1,1,100,1,5 +4720,0,1,1,100,1,5 +4730,0,1,1,100,1,5 +4740,0,1,1,100,1,5 +4750,0,1,1,100,1,5 +4760,0,1,1,100,1,5 +4770,0,1,1,100,1,5 +4780,0,1,1,100,1,5 +4790,0,1,1,100,1,5 +4800,0,1,1,100,1,5 +4810,0,1,1,100,1,5 +4820,0,1,1,100,1,5 +4830,0,1,1,100,1,5 +4840,0,1,1,100,1,5 +4850,0,1,1,100,1,5 +4860,0,1,1,100,1,5 +4870,0,1,1,100,1,5 +4880,0,1,1,100,1,5 +4890,0,1,1,100,1,5 +4900,0,1,1,100,1,5 +4910,0,1,1,100,1,5 +4920,0,1,1,100,1,5 +4930,0,1,1,100,1,5 +4940,0,1,1,100,1,5 +4950,0,1,1,100,1,5 +4960,0,1,1,100,1,5 +4970,0,1,1,100,1,5 +4980,0,1,1,100,1,5 +4990,0,1,1,100,1,5 +5000,0,2,2,100,1,5 +5010,0,2,2,100,1,5 +5020,0,2,2,100,1,5 +5030,0,2,2,100,1,5 +5040,0,2,2,100,1,5 +5050,0,2,2,100,1,5 +5060,0,2,2,100,1,5 +5070,0,2,2,100,1,5 +5080,0,2,2,100,1,5 +5090,0,2,2,100,1,5 +5100,0,2,2,100,1,5 +5110,0,2,2,100,1,5 +5120,0,2,2,100,1,5 +5130,0,2,2,100,1,5 +5140,0,2,2,100,1,5 +5150,0,2,2,100,1,5 +5160,0,2,2,100,1,5 +5170,0,2,2,100,1,5 +5180,0,2,2,100,1,5 +5190,0,2,2,100,1,5 +5200,0,2,2,100,1,5 +5210,0,2,2,100,1,5 +5220,0,2,2,100,1,5 +5230,0,2,2,100,1,5 +5240,0,2,2,100,1,5 +5250,0,2,2,100,1,5 +5260,0,2,2,100,1,5 +5270,0,2,2,100,1,5 +5280,0,2,2,100,1,5 +5290,0,2,2,100,1,5 +5300,0,2,2,100,1,5 +5310,0,2,2,100,1,5 +5320,0,2,2,100,1,5 +5330,0,2,2,100,1,5 +5340,0,2,2,100,1,5 +5350,0,2,2,100,1,5 +5360,0,2,2,100,1,5 +5370,0,2,2,100,1,5 +5380,0,2,2,100,1,5 +5390,0,2,2,100,1,5 +5400,0,2,2,100,1,5 +5410,0,2,2,100,1,5 +5420,0,2,2,100,1,5 +5430,0,2,2,100,1,5 +5440,0,2,2,100,1,5 +5450,0,2,2,100,1,5 +5460,0,2,2,100,1,5 +5470,0,2,2,100,1,5 +5480,0,2,2,100,1,5 +5490,0,2,2,100,1,5 +5500,0,2,2,100,1,5 +5510,0,2,2,100,1,5 +5520,0,2,2,100,1,5 +5530,0,2,2,100,1,5 +5540,0,2,2,100,1,5 +5550,0,2,2,100,1,5 +5560,0,2,2,100,1,5 +5570,0,2,2,100,1,5 +5580,0,2,2,100,1,5 +5590,0,2,2,100,1,5 +5600,0,2,2,100,1,5 +5610,0,2,2,100,1,5 +5620,0,2,2,100,1,5 +5630,0,2,2,100,1,5 +5640,0,2,2,100,1,5 +5650,0,2,2,100,1,5 +5660,0,2,2,100,1,5 +5670,0,2,2,100,1,5 +5680,0,2,2,100,1,5 +5690,0,2,2,100,1,5 +5700,0,2,2,100,1,5 +5710,0,2,2,100,1,5 +5720,0,2,2,100,1,5 +5730,0,2,2,100,1,5 +5740,0,2,2,100,1,5 +5750,0,2,2,100,1,5 +5760,0,2,2,100,1,5 +5770,0,2,2,100,1,5 +5780,0,2,2,100,1,5 +5790,0,2,2,100,1,5 +5800,0,2,2,100,1,5 +5810,0,2,2,100,1,5 +5820,0,2,2,100,1,5 +5830,0,2,2,100,1,5 +5840,0,2,2,100,1,5 +5850,0,2,2,100,1,5 +5860,0,2,2,100,1,5 +5870,0,2,2,100,1,5 +5880,0,2,2,100,1,5 +5890,0,2,2,100,1,5 +5900,0,2,2,100,1,5 +5910,0,2,2,100,1,5 +5920,0,2,2,100,1,5 +5930,0,2,2,100,1,5 +5940,0,2,2,100,1,5 +5950,0,2,2,100,1,5 +5960,0,2,2,100,1,5 +5970,0,2,2,100,1,5 +5980,0,2,2,100,1,5 +5990,0,2,2,100,1,5 +6000,0,2,2,100,1,5 +6010,0,2,2,100,1,5 +6020,0,2,2,100,1,5 +6030,0,2,2,100,1,5 +6040,0,2,2,100,1,5 +6050,0,2,2,100,1,5 +6060,0,2,2,100,1,5 +6070,0,2,2,100,1,5 +6080,0,2,2,100,1,5 +6090,0,2,2,100,1,5 +6100,0,2,2,100,1,5 +6110,0,2,2,100,1,5 +6120,0,2,2,100,1,5 +6130,0,2,2,100,1,5 +6140,0,2,2,100,1,5 +6150,0,2,2,100,1,5 +6160,0,2,2,100,1,5 +6170,0,2,2,100,1,5 +6180,0,2,2,100,1,5 +6190,0,2,2,100,1,5 +6200,0,2,2,100,1,5 +6210,0,2,2,100,1,5 +6220,0,2,2,100,1,5 +6230,0,2,2,100,1,5 +6240,0,2,2,100,1,5 +6250,0,2,2,100,1,5 +6260,0,2,2,100,1,5 +6270,0,2,2,100,1,5 +6280,0,2,2,100,1,5 +6290,0,2,2,100,1,5 +6300,0,2,2,100,1,5 +6310,0,2,2,100,1,5 +6320,0,2,2,100,1,5 +6330,0,2,2,100,1,5 +6340,0,2,2,100,1,5 +6350,0,2,2,100,1,5 +6360,0,2,2,100,1,5 +6370,0,2,2,100,1,5 +6380,0,2,2,100,1,5 +6390,0,2,2,100,1,5 +6400,0,2,2,100,1,5 +6410,0,2,2,100,1,5 +6420,0,2,2,100,1,5 +6430,0,2,2,100,1,5 +6440,0,2,2,100,1,5 +6450,0,2,2,100,1,5 +6460,0,2,2,100,1,5 +6470,0,2,2,100,1,5 +6480,0,2,2,100,1,5 +6490,0,2,2,100,1,5 +6500,0,2,2,100,1,5 +6510,0,2,2,100,1,5 +6520,0,2,2,100,1,5 +6530,0,2,2,100,1,5 +6540,0,2,2,100,1,5 +6550,0,2,2,100,1,5 +6560,0,2,2,100,1,5 +6570,0,2,2,100,1,5 +6580,0,2,2,100,1,5 +6590,0,2,2,100,1,5 +6600,0,2,2,100,1,5 +6610,0,2,2,100,1,5 +6620,0,2,2,100,1,5 +6630,0,2,2,100,1,5 +6640,0,2,2,100,1,5 +6650,0,2,2,100,1,5 +6660,0,2,2,100,1,5 +6670,0,2,2,100,1,5 +6680,0,2,2,100,1,5 +6690,0,2,2,100,1,5 +6700,0,2,2,100,1,5 +6710,0,2,2,100,1,5 +6720,0,2,2,100,1,5 +6730,0,2,2,100,1,5 +6740,0,2,2,100,1,5 +6750,0,2,2,100,1,5 +6760,0,2,2,100,1,5 +6770,0,2,2,100,1,5 +6780,0,2,2,100,1,5 +6790,0,2,2,100,1,5 +6800,0,2,2,100,1,5 +6810,0,2,2,100,1,5 +6820,0,2,2,100,1,5 +6830,0,2,2,100,1,5 +6840,0,2,2,100,1,5 +6850,0,2,2,100,1,5 +6860,0,2,2,100,1,5 +6870,0,2,2,100,1,5 +6880,0,2,2,100,1,5 +6890,0,2,2,100,1,5 +6900,0,2,2,100,1,5 +6910,0,2,2,100,1,5 +6920,0,2,2,100,1,5 +6930,0,2,2,100,1,5 +6940,0,2,2,100,1,5 +6950,0,2,2,100,1,5 +6960,0,2,2,100,1,5 +6970,0,2,2,100,1,5 +6980,0,2,2,100,1,5 +6990,0,2,2,100,1,5 +7000,0,2,2,100,1,5 +7010,0,2,2,100,1,5 +7020,0,2,2,100,1,5 +7030,0,2,2,100,1,5 +7040,0,2,2,100,1,5 +7050,0,2,2,100,1,5 +7060,0,2,2,100,1,5 +7070,0,2,2,100,1,5 +7080,0,2,2,100,1,5 +7090,0,2,2,100,1,5 +7100,0,2,2,100,1,5 +7110,0,2,2,100,1,5 +7120,0,2,2,100,1,5 +7130,0,2,2,100,1,5 +7140,0,2,2,100,1,5 +7150,0,2,2,100,1,5 +7160,0,2,2,100,1,5 +7170,0,2,2,100,1,5 +7180,0,2,2,100,1,5 +7190,0,2,2,100,1,5 +7200,0,2,2,100,1,5 +7210,0,2,2,100,1,5 +7220,0,2,2,100,1,5 +7230,0,2,2,100,1,5 +7240,0,2,2,100,1,5 +7250,0,2,2,100,1,5 +7260,0,2,2,100,1,5 +7270,0,2,2,100,1,5 +7280,0,2,2,100,1,5 +7290,0,2,2,100,1,5 +7300,0,2,2,100,1,5 +7310,0,2,2,100,1,5 +7320,0,2,2,100,1,5 +7330,0,2,2,100,1,5 +7340,0,2,2,100,1,5 +7350,0,2,2,100,1,5 +7360,0,2,2,100,1,5 +7370,0,2,2,100,1,5 +7380,0,2,2,100,1,5 +7390,0,2,2,100,1,5 +7400,0,2,2,100,1,5 +7410,0,2,2,100,1,5 +7420,0,2,2,100,1,5 +7430,0,2,2,100,1,5 +7440,0,2,2,100,1,5 +7450,0,2,2,100,1,5 +7460,0,2,2,100,1,5 +7470,0,2,2,100,1,5 +7480,0,2,2,100,1,5 +7490,0,2,2,100,1,5 +7500,0,2,2,100,1,5 +7510,0,2,2,100,1,5 +7520,0,2,2,100,1,5 +7530,0,2,2,100,1,5 +7540,0,2,2,100,1,5 +7550,0,2,2,100,1,5 +7560,0,2,2,100,1,5 +7570,0,2,2,100,1,5 +7580,0,2,2,100,1,5 +7590,0,2,2,100,1,5 +7600,0,2,2,100,1,5 +7610,0,2,2,100,1,5 +7620,0,2,2,100,1,5 +7630,0,2,2,100,1,5 +7640,0,2,2,100,1,5 +7650,0,2,2,100,1,5 +7660,0,2,2,100,1,5 +7670,0,2,2,100,1,5 +7680,0,2,2,100,1,5 +7690,0,2,2,100,1,5 +7700,0,2,2,100,1,5 +7710,0,2,2,100,1,5 +7720,0,2,2,100,1,5 +7730,0,2,2,100,1,5 +7740,0,2,2,100,1,5 +7750,0,2,2,100,1,5 +7760,0,2,2,100,1,5 +7770,0,2,2,100,1,5 +7780,0,2,2,100,1,5 +7790,0,2,2,100,1,5 +7800,0,2,2,100,1,5 +7810,0,2,2,100,1,5 +7820,0,2,2,100,1,5 +7830,0,2,2,100,1,5 +7840,0,2,2,100,1,5 +7850,0,2,2,100,1,5 +7860,0,2,2,100,1,5 +7870,0,2,2,100,1,5 +7880,0,2,2,100,1,5 +7890,0,2,2,100,1,5 +7900,0,2,2,100,1,5 +7910,0,2,2,100,1,5 +7920,0,2,2,100,1,5 +7930,0,2,2,100,1,5 +7940,0,2,2,100,1,5 +7950,0,2,2,100,1,5 +7960,0,2,2,100,1,5 +7970,0,2,2,100,1,5 +7980,0,2,2,100,1,5 +7990,0,2,2,100,1,5 +8000,0,2,2,100,1,5 +8010,0,2,2,100,1,5 +8020,0,2,2,100,1,5 +8030,0,2,2,100,1,5 +8040,0,2,2,100,1,5 +8050,0,2,2,100,1,5 +8060,0,2,2,100,1,5 +8070,0,2,2,100,1,5 +8080,0,2,2,100,1,5 +8090,0,2,2,100,1,5 +8100,0,2,2,100,1,5 +8110,0,2,2,100,1,5 +8120,0,2,2,100,1,5 +8130,0,2,2,100,1,5 +8140,0,2,2,100,1,5 +8150,0,2,2,100,1,5 +8160,0,2,2,100,1,5 +8170,0,2,2,100,1,5 +8180,0,2,2,100,1,5 +8190,0,2,2,100,1,5 +8200,0,2,2,100,1,5 +8210,0,2,2,100,1,5 +8220,0,2,2,100,1,5 +8230,0,2,2,100,1,5 +8240,0,2,2,100,1,5 +8250,0,2,2,100,1,5 +8260,0,2,2,100,1,5 +8270,0,2,2,100,1,5 +8280,0,2,2,100,1,5 +8290,0,2,2,100,1,5 +8300,0,2,2,100,1,5 +8310,0,2,2,100,1,5 +8320,0,2,2,100,1,5 +8330,0,2,2,100,1,5 +8340,0,2,2,100,1,5 +8350,0,2,2,100,1,5 +8360,0,2,2,100,1,5 +8370,0,2,2,100,1,5 +8380,0,2,2,100,1,5 +8390,0,2,2,100,1,5 +8400,0,2,2,100,1,5 +8410,0,2,2,100,1,5 +8420,0,2,2,100,1,5 +8430,0,2,2,100,1,5 +8440,0,2,2,100,1,5 +8450,0,2,2,100,1,5 +8460,0,2,2,100,1,5 +8470,0,2,2,100,1,5 +8480,0,2,2,100,1,5 +8490,0,2,2,100,1,5 +8500,0,2,2,100,1,5 +8510,0,2,2,100,1,5 +8520,0,2,2,100,1,5 +8530,0,2,2,100,1,5 +8540,0,2,2,100,1,5 +8550,0,2,2,100,1,5 +8560,0,2,2,100,1,5 +8570,0,2,2,100,1,5 +8580,0,2,2,100,1,5 +8590,0,2,2,100,1,5 +8600,0,2,2,100,1,5 +8610,0,2,2,100,1,5 +8620,0,2,2,100,1,5 +8630,0,2,2,100,1,5 +8640,0,2,2,100,1,5 +8650,0,2,2,100,1,5 +8660,0,2,2,100,1,5 +8670,0,2,2,100,1,5 +8680,0,2,2,100,1,5 +8690,0,2,2,100,1,5 +8700,0,2,2,100,1,5 +8710,0,2,2,100,1,5 +8720,0,2,2,100,1,5 +8730,0,2,2,100,1,5 +8740,0,2,2,100,1,5 +8750,0,2,2,100,1,5 +8760,0,2,2,100,1,5 +8770,0,2,2,100,1,5 +8780,0,2,2,100,1,5 +8790,0,2,2,100,1,5 +8800,0,2,2,100,1,5 +8810,0,2,2,100,1,5 +8820,0,2,2,100,1,5 +8830,0,2,2,100,1,5 +8840,0,2,2,100,1,5 +8850,0,2,2,100,1,5 +8860,0,2,2,100,1,5 +8870,0,2,2,100,1,5 +8880,0,2,2,100,1,5 +8890,0,2,2,100,1,5 +8900,0,2,2,100,1,5 +8910,0,2,2,100,1,5 +8920,0,2,2,100,1,5 +8930,0,2,2,100,1,5 +8940,0,2,2,100,1,5 +8950,0,2,2,100,1,5 +8960,0,2,2,100,1,5 +8970,0,2,2,100,1,5 +8980,0,2,2,100,1,5 +8990,0,2,2,100,1,5 +9000,0,2,2,100,1,5 +9010,0,2,2,100,1,5 +9020,0,2,2,100,1,5 +9030,0,2,2,100,1,5 +9040,0,2,2,100,1,5 +9050,0,2,2,100,1,5 +9060,0,2,2,100,1,5 +9070,0,2,2,100,1,5 +9080,0,2,2,100,1,5 +9090,0,2,2,100,1,5 +9100,0,2,2,100,1,5 +9110,0,2,2,100,1,5 +9120,0,2,2,100,1,5 +9130,0,2,2,100,1,5 +9140,0,2,2,100,1,5 +9150,0,2,2,100,1,5 +9160,0,2,2,100,1,5 +9170,0,2,2,100,1,5 +9180,0,2,2,100,1,5 +9190,0,2,2,100,1,5 +9200,0,2,2,100,1,5 +9210,0,2,2,100,1,5 +9220,0,2,2,100,1,5 +9230,0,2,2,100,1,5 +9240,0,2,2,100,1,5 +9250,0,2,2,100,1,5 +9260,0,2,2,100,1,5 +9270,0,2,2,100,1,5 +9280,0,2,2,100,1,5 +9290,0,2,2,100,1,5 +9300,0,2,2,100,1,5 +9310,0,2,2,100,1,5 +9320,0,2,2,100,1,5 +9330,0,2,2,100,1,5 +9340,0,2,2,100,1,5 +9350,0,2,2,100,1,5 +9360,0,2,2,100,1,5 +9370,0,2,2,100,1,5 +9380,0,2,2,100,1,5 +9390,0,2,2,100,1,5 +9400,0,2,2,100,1,5 +9410,0,2,2,100,1,5 +9420,0,2,2,100,1,5 +9430,0,2,2,100,1,5 +9440,0,2,2,100,1,5 +9450,0,2,2,100,1,5 +9460,0,2,2,100,1,5 +9470,0,2,2,100,1,5 +9480,0,2,2,100,1,5 +9490,0,2,2,100,1,5 +9500,0,2,2,100,1,5 +9510,0,2,2,100,1,5 +9520,0,2,2,100,1,5 +9530,0,2,2,100,1,5 +9540,0,2,2,100,1,5 +9550,0,2,2,100,1,5 +9560,0,2,2,100,1,5 +9570,0,2,2,100,1,5 +9580,0,2,2,100,1,5 +9590,0,2,2,100,1,5 +9600,0,2,2,100,1,5 +9610,0,2,2,100,1,5 +9620,0,2,2,100,1,5 +9630,0,2,2,100,1,5 +9640,0,2,2,100,1,5 +9650,0,2,2,100,1,5 +9660,0,2,2,100,1,5 +9670,0,2,2,100,1,5 +9680,0,2,2,100,1,5 +9690,0,2,2,100,1,5 +9700,0,2,2,100,1,5 +9710,0,2,2,100,1,5 +9720,0,2,2,100,1,5 +9730,0,2,2,100,1,5 +9740,0,2,2,100,1,5 +9750,0,2,2,100,1,5 +9760,0,2,2,100,1,5 +9770,0,2,2,100,1,5 +9780,0,2,2,100,1,5 +9790,0,2,2,100,1,5 +9800,0,2,2,100,1,5 +9810,0,2,2,100,1,5 +9820,0,2,2,100,1,5 +9830,0,2,2,100,1,5 +9840,0,2,2,100,1,5 +9850,0,2,2,100,1,5 +9860,0,2,2,100,1,5 +9870,0,2,2,100,1,5 +9880,0,2,2,100,1,5 +9890,0,2,2,100,1,5 +9900,0,2,2,100,1,5 +9910,0,2,2,100,1,5 +9920,0,2,2,100,1,5 +9930,0,2,2,100,1,5 +9940,0,2,2,100,1,5 +9950,0,2,2,100,1,5 +9960,0,2,2,100,1,5 +9970,0,2,2,100,1,5 +9980,0,2,2,100,1,5 +9990,0,2,2,100,1,5 +10000,0,2,2,100,1,5 +10010,0,2,2,100,1,5 +10020,0,2,2,100,1,5 +10030,0,2,2,100,1,5 +10040,0,2,2,100,1,5 +10050,0,2,2,100,1,5 +10060,0,2,2,100,1,5 +10070,0,2,2,100,1,5 +10080,0,2,2,100,1,5 +10090,0,2,2,100,1,5 +10100,0,2,2,100,1,5 diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20210120_fat.csv b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20210120_fat.csv new file mode 100644 index 0000000..832aa45 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20210120_fat.csv @@ -0,0 +1,1013 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,0,0.5,0.5,1,1,5 +10,0,0.5,0.5,1,1,5 +20,0,0.5,0.5,1,1,5 +30,0,0.5,0.5,1,1,5 +40,0,0.5,0.5,1,1,5 +50,0,0.5,0.5,1,1,5 +60,0,0.5,0.5,1,1,5 +70,0,0.5,0.5,1,1,5 +80,0,0.5,0.5,1,1,5 +90,0,0.5,0.5,1,1,5 +100,0,0.5,0.5,1,1,5 +110,0,0.5,0.5,1,1,5 +120,0,0.5,0.5,1,1,5 +130,0,0.5,0.5,1,1,5 +140,0,0.5,0.5,1,1,5 +150,0,0.5,0.5,1,1,5 +160,0,0.5,0.5,1,1,5 +170,0,0.5,0.5,1,1,5 +180,0,0.5,0.5,1,1,5 +190,0,0.5,0.5,1,1,5 +200,0,0.5,0.5,1,1,5 +210,0,0.5,0.5,1,1,5 +220,0,0.5,0.5,1,1,5 +230,0,0.5,0.5,1,1,5 +240,0,0.5,0.5,1,1,5 +250,0,0.5,0.5,1,1,5 +260,0,0.5,0.5,1,1,5 +270,0,0.5,0.5,1,1,5 +280,0,0.5,0.5,1,1,5 +290,0,0.5,0.5,1,1,5 +300,0,0.5,0.5,1,1,5 +310,0,0.5,0.5,1,1,5 +320,0,0.5,0.5,1,1,5 +330,0,0.5,0.5,1,1,5 +340,0,0.5,0.5,1,1,5 +350,0,0.5,0.5,1,1,5 +360,0,0.5,0.5,1,1,5 +370,0,0.5,0.5,1,1,5 +380,0,0.5,0.5,1,1,5 +390,0,0.5,0.5,1,1,5 +400,0,0.5,0.5,1,1,5 +410,0,0.5,0.5,1,1,5 +420,0,0.5,0.5,1,1,5 +430,0,0.5,0.5,1,1,5 +440,0,0.5,0.5,1,1,5 +450,0,0.5,0.5,1,1,5 +460,0,0.5,0.5,1,1,5 +470,0,0.5,0.5,1,1,5 +480,0,0.5,0.5,1,1,5 +490,0,0.5,0.5,1,1,5 +500,0,0.5,0.5,1,1,5 +510,0,0.5,0.5,1,1,5 +520,0,0.5,0.5,1,1,5 +530,0,0.5,0.5,1,1,5 +540,0,0.5,0.5,1,1,5 +550,0,0.5,0.5,1,1,5 +560,0,0.5,0.5,1,1,5 +570,0,0.5,0.5,1,1,5 +580,0,0.5,0.5,1,1,5 +590,0,0.5,0.5,1,1,5 +600,0,0.5,0.5,1,1,5 +610,0,0.5,0.5,1,1,5 +620,0,0.5,0.5,1,1,5 +630,0,0.5,0.5,1,1,5 +640,0,0.5,0.5,1,1,5 +650,0,0.5,0.5,1,1,5 +660,0,0.5,0.5,1,1,5 +670,0,0.5,0.5,1,1,5 +680,0,0.5,0.5,1,1,5 +690,0,0.5,0.5,1,1,5 +700,0,0.5,0.5,1,1,5 +710,0,0.5,0.5,1,1,5 +720,0,0.5,0.5,1,1,5 +730,0,0.5,0.5,1,1,5 +740,0,0.5,0.5,1,1,5 +750,0,0.5,0.5,1,1,5 +760,0,0.5,0.5,1,1,5 +770,0,0.5,0.5,1,1,5 +780,0,0.5,0.5,1,1,5 +790,0,0.5,0.5,1,1,5 +800,0,0.5,0.5,1,1,5 +810,0,0.5,0.5,1,1,5 +820,0,0.5,0.5,1,1,5 +830,0,0.5,0.5,1,1,5 +840,0,0.5,0.5,1,1,5 +850,0,0.5,0.5,1,1,5 +860,0,0.5,0.5,1,1,5 +870,0,0.5,0.5,1,1,5 +880,0,0.5,0.5,1,1,5 +890,0,0.5,0.5,1,1,5 +900,0,0.5,0.5,1,1,5 +910,0,0.5,0.5,1,1,5 +920,0,0.5,0.5,1,1,5 +930,0,0.5,0.5,1,1,5 +940,0,0.5,0.5,1,1,5 +950,0,0.5,0.5,1,1,5 +960,0,0.5,0.5,1,1,5 +970,0,0.5,0.5,1,1,5 +980,0,0.5,0.5,1,1,5 +990,0,0.5,0.5,1,1,5 +1000,0,0.5,0.5,1,1,5 +1010,0,1,1,1,1,5 +1020,0,1,1,1,1,5 +1030,0,1,1,1,1,5 +1040,0,1,1,1,1,5 +1050,0,1,1,1,1,5 +1060,0,1,1,1,1,5 +1070,0,1,1,1,1,5 +1080,0,1,1,1,1,5 +1090,0,1,1,1,1,5 +1100,0,1,1,1,1,5 +1110,0,1,1,1,1,5 +1120,0,1,1,1,1,5 +1130,0,1,1,1,1,5 +1140,0,1,1,1,1,5 +1150,0,1,1,1,1,5 +1160,0,1,1,1,1,5 +1170,0,1,1,1,1,5 +1180,0,1,1,1,1,5 +1190,0,1,1,1,1,5 +1200,0,1,1,1,1,5 +1210,0,1,1,1,1,5 +1220,0,1,1,1,1,5 +1230,0,1,1,1,1,5 +1240,0,1,1,1,1,5 +1250,0,1,1,1,1,5 +1260,0,1,1,1,1,5 +1270,0,1,1,1,1,5 +1280,0,1,1,1,1,5 +1290,0,1,1,1,1,5 +1300,0,1,1,1,1,5 +1310,0,1,1,1,1,5 +1320,0,1,1,1,1,5 +1330,0,1,1,1,1,5 +1340,0,1,1,1,1,5 +1350,0,1,1,1,1,5 +1360,0,1,1,1,1,5 +1370,0,1,1,1,1,5 +1380,0,1,1,1,1,5 +1390,0,1,1,1,1,5 +1400,0,1,1,1,1,5 +1410,0,1,1,1,1,5 +1420,0,1,1,1,1,5 +1430,0,1,1,1,1,5 +1440,0,1,1,1,1,5 +1450,0,1,1,1,1,5 +1460,0,1,1,1,1,5 +1470,0,1,1,1,1,5 +1480,0,1,1,1,1,5 +1490,0,1,1,1,1,5 +1500,0,1,1,1,1,5 +1510,0,1,1,1,1,5 +1520,0,1,1,1,1,5 +1530,0,1,1,1,1,5 +1540,0,1,1,1,1,5 +1550,0,1,1,1,1,5 +1560,0,1,1,1,1,5 +1570,0,1,1,1,1,5 +1580,0,1,1,1,1,5 +1590,0,1,1,1,1,5 +1600,0,1,1,1,1,5 +1610,0,1,1,1,1,5 +1620,0,1,1,1,1,5 +1630,0,1,1,1,1,5 +1640,0,1,1,1,1,5 +1650,0,1,1,1,1,5 +1660,0,1,1,1,1,5 +1670,0,1,1,1,1,5 +1680,0,1,1,1,1,5 +1690,0,1,1,1,1,5 +1700,0,1,1,1,1,5 +1710,0,1,1,1,1,5 +1720,0,1,1,1,1,5 +1730,0,1,1,1,1,5 +1740,0,1,1,1,1,5 +1750,0,1,1,1,1,5 +1760,0,1,1,1,1,5 +1770,0,1,1,1,1,5 +1780,0,1,1,1,1,5 +1790,0,1,1,1,1,5 +1800,0,1,1,1,1,5 +1810,0,1,1,1,1,5 +1820,0,1,1,1,1,5 +1830,0,1,1,1,1,5 +1840,0,1,1,1,1,5 +1850,0,1,1,1,1,5 +1860,0,1,1,1,1,5 +1870,0,1,1,1,1,5 +1880,0,1,1,1,1,5 +1890,0,1,1,1,1,5 +1900,0,1,1,1,1,5 +1910,0,1,1,1,1,5 +1920,0,1,1,1,1,5 +1930,0,1,1,1,1,5 +1940,0,1,1,1,1,5 +1950,0,1,1,1,1,5 +1960,0,1,1,1,1,5 +1970,0,1,1,1,1,5 +1980,0,1,1,1,1,5 +1990,0,1,1,1,1,5 +2000,0,1,1,1,1,5 +2010,0,1,1,1,1,5 +2020,0,1,1,1,1,5 +2030,0,1,1,1,1,5 +2040,0,1,1,1,1,5 +2050,0,1,1,1,1,5 +2060,0,1,1,1,1,5 +2070,0,1,1,1,1,5 +2080,0,1,1,1,1,5 +2090,0,1,1,1,1,5 +2100,0,1,1,1,1,5 +2110,0,1,1,1,1,5 +2120,0,1,1,1,1,5 +2130,0,1,1,1,1,5 +2140,0,1,1,1,1,5 +2150,0,1,1,1,1,5 +2160,0,1,1,1,1,5 +2170,0,1,1,1,1,5 +2180,0,1,1,1,1,5 +2190,0,1,1,1,1,5 +2200,0,1,1,1,1,5 +2210,0,1,1,1,1,5 +2220,0,1,1,1,1,5 +2230,0,1,1,1,1,5 +2240,0,1,1,1,1,5 +2250,0,1,1,1,1,5 +2260,0,1,1,1,1,5 +2270,0,1,1,1,1,5 +2280,0,1,1,1,1,5 +2290,0,1,1,1,1,5 +2300,0,1,1,1,1,5 +2310,0,1,1,1,1,5 +2320,0,1,1,1,1,5 +2330,0,1,1,1,1,5 +2340,0,1,1,1,1,5 +2350,0,1,1,1,1,5 +2360,0,1,1,1,1,5 +2370,0,1,1,1,1,5 +2380,0,1,1,1,1,5 +2390,0,1,1,1,1,5 +2400,0,1,1,1,1,5 +2410,0,1,1,1,1,5 +2420,0,1,1,1,1,5 +2430,0,1,1,1,1,5 +2440,0,1,1,1,1,5 +2450,0,1,1,1,1,5 +2460,0,1,1,1,1,5 +2470,0,1,1,1,1,5 +2480,0,1,1,1,1,5 +2490,0,1,1,1,1,5 +2500,0,1,1,1,1,5 +2510,0,1,1,1,1,5 +2520,0,1,1,1,1,5 +2530,0,1,1,1,1,5 +2540,0,1,1,1,1,5 +2550,0,1,1,1,1,5 +2560,0,1,1,1,1,5 +2570,0,1,1,1,1,5 +2580,0,1,1,1,1,5 +2590,0,1,1,1,1,5 +2600,0,1,1,1,1,5 +2610,0,1,1,1,1,5 +2620,0,1,1,1,1,5 +2630,0,1,1,1,1,5 +2640,0,1,1,1,1,5 +2650,0,1,1,1,1,5 +2660,0,1,1,1,1,5 +2670,0,1,1,1,1,5 +2680,0,1,1,1,1,5 +2690,0,1,1,1,1,5 +2700,0,1,1,1,1,5 +2710,0,1,1,1,1,5 +2720,0,1,1,1,1,5 +2730,0,1,1,1,1,5 +2740,0,1,1,1,1,5 +2750,0,1,1,1,1,5 +2760,0,1,1,1,1,5 +2770,0,1,1,1,1,5 +2780,0,1,1,1,1,5 +2790,0,1,1,1,1,5 +2800,0,1,1,1,1,5 +2810,0,1,1,1,1,5 +2820,0,1,1,1,1,5 +2830,0,1,1,1,1,5 +2840,0,1,1,1,1,5 +2850,0,1,1,1,1,5 +2860,0,1,1,1,1,5 +2870,0,1,1,1,1,5 +2880,0,1,1,1,1,5 +2890,0,1,1,1,1,5 +2900,0,1,1,1,1,5 +2910,0,1,1,1,1,5 +2920,0,1,1,1,1,5 +2930,0,1,1,1,1,5 +2940,0,1,1,1,1,5 +2950,0,1,1,1,1,5 +2960,0,1,1,1,1,5 +2970,0,1,1,1,1,5 +2980,0,1,1,1,1,5 +2990,0,1,1,1,1,5 +3000,0,1,1,1,1,5 +3010,0,1,1,1,1,5 +3020,0,1,1,1,1,5 +3030,0,1,1,1,1,5 +3040,0,1,1,1,1,5 +3050,0,1,1,1,1,5 +3060,0,1,1,1,1,5 +3070,0,1,1,1,1,5 +3080,0,1,1,1,1,5 +3090,0,1,1,1,1,5 +3100,0,1,1,1,1,5 +3110,0,1,1,1,1,5 +3120,0,1,1,1,1,5 +3130,0,1,1,1,1,5 +3140,0,1,1,1,1,5 +3150,0,1,1,1,1,5 +3160,0,1,1,1,1,5 +3170,0,1,1,1,1,5 +3180,0,1,1,1,1,5 +3190,0,1,1,1,1,5 +3200,0,1,1,1,1,5 +3210,0,1,1,1,1,5 +3220,0,1,1,1,1,5 +3230,0,1,1,1,1,5 +3240,0,1,1,1,1,5 +3250,0,1,1,1,1,5 +3260,0,1,1,1,1,5 +3270,0,1,1,1,1,5 +3280,0,1,1,1,1,5 +3290,0,1,1,1,1,5 +3300,0,1,1,1,1,5 +3310,0,1,1,1,1,5 +3320,0,1,1,1,1,5 +3330,0,1,1,1,1,5 +3340,0,1,1,1,1,5 +3350,0,1,1,1,1,5 +3360,0,1,1,1,1,5 +3370,0,1,1,1,1,5 +3380,0,1,1,1,1,5 +3390,0,1,1,1,1,5 +3400,0,1,1,1,1,5 +3410,0,1,1,1,1,5 +3420,0,1,1,1,1,5 +3430,0,1,1,1,1,5 +3440,0,1,1,1,1,5 +3450,0,1,1,1,1,5 +3460,0,1,1,1,1,5 +3470,0,1,1,1,1,5 +3480,0,1,1,1,1,5 +3490,0,1,1,1,1,5 +3500,0,1,1,1,1,5 +3510,0,1,1,1,1,5 +3520,0,1,1,1,1,5 +3530,0,1,1,1,1,5 +3540,0,1,1,1,1,5 +3550,0,1,1,1,1,5 +3560,0,1,1,1,1,5 +3570,0,1,1,1,1,5 +3580,0,1,1,1,1,5 +3590,0,1,1,1,1,5 +3600,0,1,1,1,1,5 +3610,0,1,1,1,1,5 +3620,0,1,1,1,1,5 +3630,0,1,1,1,1,5 +3640,0,1,1,1,1,5 +3650,0,1,1,1,1,5 +3660,0,1,1,1,1,5 +3670,0,1,1,1,1,5 +3680,0,1,1,1,1,5 +3690,0,1,1,1,1,5 +3700,0,1,1,1,1,5 +3710,0,1,1,1,1,5 +3720,0,1,1,1,1,5 +3730,0,1,1,1,1,5 +3740,0,1,1,1,1,5 +3750,0,1,1,1,1,5 +3760,0,1,1,1,1,5 +3770,0,1,1,1,1,5 +3780,0,1,1,1,1,5 +3790,0,1,1,1,1,5 +3800,0,1,1,1,1,5 +3810,0,1,1,1,1,5 +3820,0,1,1,1,1,5 +3830,0,1,1,1,1,5 +3840,0,1,1,1,1,5 +3850,0,1,1,1,1,5 +3860,0,1,1,1,1,5 +3870,0,1,1,1,1,5 +3880,0,1,1,1,1,5 +3890,0,1,1,1,1,5 +3900,0,1,1,1,1,5 +3910,0,1,1,1,1,5 +3920,0,1,1,1,1,5 +3930,0,1,1,1,1,5 +3940,0,1,1,1,1,5 +3950,0,1,1,1,1,5 +3960,0,1,1,1,1,5 +3970,0,1,1,1,1,5 +3980,0,1,1,1,1,5 +3990,0,1,1,1,1,5 +4000,0,1,1,1,1,5 +4010,0,1,1,1,1,5 +4020,0,1,1,1,1,5 +4030,0,1,1,1,1,5 +4040,0,1,1,1,1,5 +4050,0,1,1,1,1,5 +4060,0,1,1,1,1,5 +4070,0,1,1,1,1,5 +4080,0,1,1,1,1,5 +4090,0,1,1,1,1,5 +4100,0,1,1,1,1,5 +4110,0,1,1,1,1,5 +4120,0,1,1,1,1,5 +4130,0,1,1,1,1,5 +4140,0,1,1,1,1,5 +4150,0,1,1,1,1,5 +4160,0,1,1,1,1,5 +4170,0,1,1,1,1,5 +4180,0,1,1,1,1,5 +4190,0,1,1,1,1,5 +4200,0,1,1,1,1,5 +4210,0,1,1,1,1,5 +4220,0,1,1,1,1,5 +4230,0,1,1,1,1,5 +4240,0,1,1,1,1,5 +4250,0,1,1,1,1,5 +4260,0,1,1,1,1,5 +4270,0,1,1,1,1,5 +4280,0,1,1,1,1,5 +4290,0,1,1,1,1,5 +4300,0,1,1,1,1,5 +4310,0,1,1,1,1,5 +4320,0,1,1,1,1,5 +4330,0,1,1,1,1,5 +4340,0,1,1,1,1,5 +4350,0,1,1,1,1,5 +4360,0,1,1,1,1,5 +4370,0,1,1,1,1,5 +4380,0,1,1,1,1,5 +4390,0,1,1,1,1,5 +4400,0,1,1,1,1,5 +4410,0,1,1,1,1,5 +4420,0,1,1,1,1,5 +4430,0,1,1,1,1,5 +4440,0,1,1,1,1,5 +4450,0,1,1,1,1,5 +4460,0,1,1,1,1,5 +4470,0,1,1,1,1,5 +4480,0,1,1,1,1,5 +4490,0,1,1,1,1,5 +4500,0,1,1,1,1,5 +4510,0,1,1,1,1,5 +4520,0,1,1,1,1,5 +4530,0,1,1,1,1,5 +4540,0,1,1,1,1,5 +4550,0,1,1,1,1,5 +4560,0,1,1,1,1,5 +4570,0,1,1,1,1,5 +4580,0,1,1,1,1,5 +4590,0,1,1,1,1,5 +4600,0,1,1,1,1,5 +4610,0,1,1,1,1,5 +4620,0,1,1,1,1,5 +4630,0,1,1,1,1,5 +4640,0,1,1,1,1,5 +4650,0,1,1,1,1,5 +4660,0,1,1,1,1,5 +4670,0,1,1,1,1,5 +4680,0,1,1,1,1,5 +4690,0,1,1,1,1,5 +4700,0,1,1,1,1,5 +4710,0,1,1,1,1,5 +4720,0,1,1,1,1,5 +4730,0,1,1,1,1,5 +4740,0,1,1,1,1,5 +4750,0,1,1,1,1,5 +4760,0,1,1,1,1,5 +4770,0,1,1,1,1,5 +4780,0,1,1,1,1,5 +4790,0,1,1,1,1,5 +4800,0,1,1,1,1,5 +4810,0,1,1,1,1,5 +4820,0,1,1,1,1,5 +4830,0,1,1,1,1,5 +4840,0,1,1,1,1,5 +4850,0,1,1,1,1,5 +4860,0,1,1,1,1,5 +4870,0,1,1,1,1,5 +4880,0,1,1,1,1,5 +4890,0,1,1,1,1,5 +4900,0,1,1,1,1,5 +4910,0,1,1,1,1,5 +4920,0,1,1,1,1,5 +4930,0,1,1,1,1,5 +4940,0,1,1,1,1,5 +4950,0,1,1,1,1,5 +4960,0,1,1,1,1,5 +4970,0,1,1,1,1,5 +4980,0,1,1,1,1,5 +4990,0,1,1,1,1,5 +5000,0,2,2,1,1,5 +5010,0,2,2,1,1,5 +5020,0,2,2,1,1,5 +5030,0,2,2,1,1,5 +5040,0,2,2,1,1,5 +5050,0,2,2,1,1,5 +5060,0,2,2,1,1,5 +5070,0,2,2,1,1,5 +5080,0,2,2,1,1,5 +5090,0,2,2,1,1,5 +5100,0,2,2,1,1,5 +5110,0,2,2,1,1,5 +5120,0,2,2,1,1,5 +5130,0,2,2,1,1,5 +5140,0,2,2,1,1,5 +5150,0,2,2,1,1,5 +5160,0,2,2,1,1,5 +5170,0,2,2,1,1,5 +5180,0,2,2,1,1,5 +5190,0,2,2,1,1,5 +5200,0,2,2,1,1,5 +5210,0,2,2,1,1,5 +5220,0,2,2,1,1,5 +5230,0,2,2,1,1,5 +5240,0,2,2,1,1,5 +5250,0,2,2,1,1,5 +5260,0,2,2,1,1,5 +5270,0,2,2,1,1,5 +5280,0,2,2,1,1,5 +5290,0,2,2,1,1,5 +5300,0,2,2,1,1,5 +5310,0,2,2,1,1,5 +5320,0,2,2,1,1,5 +5330,0,2,2,1,1,5 +5340,0,2,2,1,1,5 +5350,0,2,2,1,1,5 +5360,0,2,2,1,1,5 +5370,0,2,2,1,1,5 +5380,0,2,2,1,1,5 +5390,0,2,2,1,1,5 +5400,0,2,2,1,1,5 +5410,0,2,2,1,1,5 +5420,0,2,2,1,1,5 +5430,0,2,2,1,1,5 +5440,0,2,2,1,1,5 +5450,0,2,2,1,1,5 +5460,0,2,2,1,1,5 +5470,0,2,2,1,1,5 +5480,0,2,2,1,1,5 +5490,0,2,2,1,1,5 +5500,0,2,2,1,1,5 +5510,0,2,2,1,1,5 +5520,0,2,2,1,1,5 +5530,0,2,2,1,1,5 +5540,0,2,2,1,1,5 +5550,0,2,2,1,1,5 +5560,0,2,2,1,1,5 +5570,0,2,2,1,1,5 +5580,0,2,2,1,1,5 +5590,0,2,2,1,1,5 +5600,0,2,2,1,1,5 +5610,0,2,2,1,1,5 +5620,0,2,2,1,1,5 +5630,0,2,2,1,1,5 +5640,0,2,2,1,1,5 +5650,0,2,2,1,1,5 +5660,0,2,2,1,1,5 +5670,0,2,2,1,1,5 +5680,0,2,2,1,1,5 +5690,0,2,2,1,1,5 +5700,0,2,2,1,1,5 +5710,0,2,2,1,1,5 +5720,0,2,2,1,1,5 +5730,0,2,2,1,1,5 +5740,0,2,2,1,1,5 +5750,0,2,2,1,1,5 +5760,0,2,2,1,1,5 +5770,0,2,2,1,1,5 +5780,0,2,2,1,1,5 +5790,0,2,2,1,1,5 +5800,0,2,2,1,1,5 +5810,0,2,2,1,1,5 +5820,0,2,2,1,1,5 +5830,0,2,2,1,1,5 +5840,0,2,2,1,1,5 +5850,0,2,2,1,1,5 +5860,0,2,2,1,1,5 +5870,0,2,2,1,1,5 +5880,0,2,2,1,1,5 +5890,0,2,2,1,1,5 +5900,0,2,2,1,1,5 +5910,0,2,2,1,1,5 +5920,0,2,2,1,1,5 +5930,0,2,2,1,1,5 +5940,0,2,2,1,1,5 +5950,0,2,2,1,1,5 +5960,0,2,2,1,1,5 +5970,0,2,2,1,1,5 +5980,0,2,2,1,1,5 +5990,0,2,2,1,1,5 +6000,0,2,2,1,1,5 +6010,0,2,2,1,1,5 +6020,0,2,2,1,1,5 +6030,0,2,2,1,1,5 +6040,0,2,2,1,1,5 +6050,0,2,2,1,1,5 +6060,0,2,2,1,1,5 +6070,0,2,2,1,1,5 +6080,0,2,2,1,1,5 +6090,0,2,2,1,1,5 +6100,0,2,2,1,1,5 +6110,0,2,2,1,1,5 +6120,0,2,2,1,1,5 +6130,0,2,2,1,1,5 +6140,0,2,2,1,1,5 +6150,0,2,2,1,1,5 +6160,0,2,2,1,1,5 +6170,0,2,2,1,1,5 +6180,0,2,2,1,1,5 +6190,0,2,2,1,1,5 +6200,0,2,2,1,1,5 +6210,0,2,2,1,1,5 +6220,0,2,2,1,1,5 +6230,0,2,2,1,1,5 +6240,0,2,2,1,1,5 +6250,0,2,2,1,1,5 +6260,0,2,2,1,1,5 +6270,0,2,2,1,1,5 +6280,0,2,2,1,1,5 +6290,0,2,2,1,1,5 +6300,0,2,2,1,1,5 +6310,0,2,2,1,1,5 +6320,0,2,2,1,1,5 +6330,0,2,2,1,1,5 +6340,0,2,2,1,1,5 +6350,0,2,2,1,1,5 +6360,0,2,2,1,1,5 +6370,0,2,2,1,1,5 +6380,0,2,2,1,1,5 +6390,0,2,2,1,1,5 +6400,0,2,2,1,1,5 +6410,0,2,2,1,1,5 +6420,0,2,2,1,1,5 +6430,0,2,2,1,1,5 +6440,0,2,2,1,1,5 +6450,0,2,2,1,1,5 +6460,0,2,2,1,1,5 +6470,0,2,2,1,1,5 +6480,0,2,2,1,1,5 +6490,0,2,2,1,1,5 +6500,0,2,2,1,1,5 +6510,0,2,2,1,1,5 +6520,0,2,2,1,1,5 +6530,0,2,2,1,1,5 +6540,0,2,2,1,1,5 +6550,0,2,2,1,1,5 +6560,0,2,2,1,1,5 +6570,0,2,2,1,1,5 +6580,0,2,2,1,1,5 +6590,0,2,2,1,1,5 +6600,0,2,2,1,1,5 +6610,0,2,2,1,1,5 +6620,0,2,2,1,1,5 +6630,0,2,2,1,1,5 +6640,0,2,2,1,1,5 +6650,0,2,2,1,1,5 +6660,0,2,2,1,1,5 +6670,0,2,2,1,1,5 +6680,0,2,2,1,1,5 +6690,0,2,2,1,1,5 +6700,0,2,2,1,1,5 +6710,0,2,2,1,1,5 +6720,0,2,2,1,1,5 +6730,0,2,2,1,1,5 +6740,0,2,2,1,1,5 +6750,0,2,2,1,1,5 +6760,0,2,2,1,1,5 +6770,0,2,2,1,1,5 +6780,0,2,2,1,1,5 +6790,0,2,2,1,1,5 +6800,0,2,2,1,1,5 +6810,0,2,2,1,1,5 +6820,0,2,2,1,1,5 +6830,0,2,2,1,1,5 +6840,0,2,2,1,1,5 +6850,0,2,2,1,1,5 +6860,0,2,2,1,1,5 +6870,0,2,2,1,1,5 +6880,0,2,2,1,1,5 +6890,0,2,2,1,1,5 +6900,0,2,2,1,1,5 +6910,0,2,2,1,1,5 +6920,0,2,2,1,1,5 +6930,0,2,2,1,1,5 +6940,0,2,2,1,1,5 +6950,0,2,2,1,1,5 +6960,0,2,2,1,1,5 +6970,0,2,2,1,1,5 +6980,0,2,2,1,1,5 +6990,0,2,2,1,1,5 +7000,0,2,2,1,1,5 +7010,0,2,2,1,1,5 +7020,0,2,2,1,1,5 +7030,0,2,2,1,1,5 +7040,0,2,2,1,1,5 +7050,0,2,2,1,1,5 +7060,0,2,2,1,1,5 +7070,0,2,2,1,1,5 +7080,0,2,2,1,1,5 +7090,0,2,2,1,1,5 +7100,0,2,2,1,1,5 +7110,0,2,2,1,1,5 +7120,0,2,2,1,1,5 +7130,0,2,2,1,1,5 +7140,0,2,2,1,1,5 +7150,0,2,2,1,1,5 +7160,0,2,2,1,1,5 +7170,0,2,2,1,1,5 +7180,0,2,2,1,1,5 +7190,0,2,2,1,1,5 +7200,0,2,2,1,1,5 +7210,0,2,2,1,1,5 +7220,0,2,2,1,1,5 +7230,0,2,2,1,1,5 +7240,0,2,2,1,1,5 +7250,0,2,2,1,1,5 +7260,0,2,2,1,1,5 +7270,0,2,2,1,1,5 +7280,0,2,2,1,1,5 +7290,0,2,2,1,1,5 +7300,0,2,2,1,1,5 +7310,0,2,2,1,1,5 +7320,0,2,2,1,1,5 +7330,0,2,2,1,1,5 +7340,0,2,2,1,1,5 +7350,0,2,2,1,1,5 +7360,0,2,2,1,1,5 +7370,0,2,2,1,1,5 +7380,0,2,2,1,1,5 +7390,0,2,2,1,1,5 +7400,0,2,2,1,1,5 +7410,0,2,2,1,1,5 +7420,0,2,2,1,1,5 +7430,0,2,2,1,1,5 +7440,0,2,2,1,1,5 +7450,0,2,2,1,1,5 +7460,0,2,2,1,1,5 +7470,0,2,2,1,1,5 +7480,0,2,2,1,1,5 +7490,0,2,2,1,1,5 +7500,0,2,2,1,1,5 +7510,0,2,2,1,1,5 +7520,0,2,2,1,1,5 +7530,0,2,2,1,1,5 +7540,0,2,2,1,1,5 +7550,0,2,2,1,1,5 +7560,0,2,2,1,1,5 +7570,0,2,2,1,1,5 +7580,0,2,2,1,1,5 +7590,0,2,2,1,1,5 +7600,0,2,2,1,1,5 +7610,0,2,2,1,1,5 +7620,0,2,2,1,1,5 +7630,0,2,2,1,1,5 +7640,0,2,2,1,1,5 +7650,0,2,2,1,1,5 +7660,0,2,2,1,1,5 +7670,0,2,2,1,1,5 +7680,0,2,2,1,1,5 +7690,0,2,2,1,1,5 +7700,0,2,2,1,1,5 +7710,0,2,2,1,1,5 +7720,0,2,2,1,1,5 +7730,0,2,2,1,1,5 +7740,0,2,2,1,1,5 +7750,0,2,2,1,1,5 +7760,0,2,2,1,1,5 +7770,0,2,2,1,1,5 +7780,0,2,2,1,1,5 +7790,0,2,2,1,1,5 +7800,0,2,2,1,1,5 +7810,0,2,2,1,1,5 +7820,0,2,2,1,1,5 +7830,0,2,2,1,1,5 +7840,0,2,2,1,1,5 +7850,0,2,2,1,1,5 +7860,0,2,2,1,1,5 +7870,0,2,2,1,1,5 +7880,0,2,2,1,1,5 +7890,0,2,2,1,1,5 +7900,0,2,2,1,1,5 +7910,0,2,2,1,1,5 +7920,0,2,2,1,1,5 +7930,0,2,2,1,1,5 +7940,0,2,2,1,1,5 +7950,0,2,2,1,1,5 +7960,0,2,2,1,1,5 +7970,0,2,2,1,1,5 +7980,0,2,2,1,1,5 +7990,0,2,2,1,1,5 +8000,0,2,2,1,1,5 +8010,0,2,2,1,1,5 +8020,0,2,2,1,1,5 +8030,0,2,2,1,1,5 +8040,0,2,2,1,1,5 +8050,0,2,2,1,1,5 +8060,0,2,2,1,1,5 +8070,0,2,2,1,1,5 +8080,0,2,2,1,1,5 +8090,0,2,2,1,1,5 +8100,0,2,2,1,1,5 +8110,0,2,2,1,1,5 +8120,0,2,2,1,1,5 +8130,0,2,2,1,1,5 +8140,0,2,2,1,1,5 +8150,0,2,2,1,1,5 +8160,0,2,2,1,1,5 +8170,0,2,2,1,1,5 +8180,0,2,2,1,1,5 +8190,0,2,2,1,1,5 +8200,0,2,2,1,1,5 +8210,0,2,2,1,1,5 +8220,0,2,2,1,1,5 +8230,0,2,2,1,1,5 +8240,0,2,2,1,1,5 +8250,0,2,2,1,1,5 +8260,0,2,2,1,1,5 +8270,0,2,2,1,1,5 +8280,0,2,2,1,1,5 +8290,0,2,2,1,1,5 +8300,0,2,2,1,1,5 +8310,0,2,2,1,1,5 +8320,0,2,2,1,1,5 +8330,0,2,2,1,1,5 +8340,0,2,2,1,1,5 +8350,0,2,2,1,1,5 +8360,0,2,2,1,1,5 +8370,0,2,2,1,1,5 +8380,0,2,2,1,1,5 +8390,0,2,2,1,1,5 +8400,0,2,2,1,1,5 +8410,0,2,2,1,1,5 +8420,0,2,2,1,1,5 +8430,0,2,2,1,1,5 +8440,0,2,2,1,1,5 +8450,0,2,2,1,1,5 +8460,0,2,2,1,1,5 +8470,0,2,2,1,1,5 +8480,0,2,2,1,1,5 +8490,0,2,2,1,1,5 +8500,0,2,2,1,1,5 +8510,0,2,2,1,1,5 +8520,0,2,2,1,1,5 +8530,0,2,2,1,1,5 +8540,0,2,2,1,1,5 +8550,0,2,2,1,1,5 +8560,0,2,2,1,1,5 +8570,0,2,2,1,1,5 +8580,0,2,2,1,1,5 +8590,0,2,2,1,1,5 +8600,0,2,2,1,1,5 +8610,0,2,2,1,1,5 +8620,0,2,2,1,1,5 +8630,0,2,2,1,1,5 +8640,0,2,2,1,1,5 +8650,0,2,2,1,1,5 +8660,0,2,2,1,1,5 +8670,0,2,2,1,1,5 +8680,0,2,2,1,1,5 +8690,0,2,2,1,1,5 +8700,0,2,2,1,1,5 +8710,0,2,2,1,1,5 +8720,0,2,2,1,1,5 +8730,0,2,2,1,1,5 +8740,0,2,2,1,1,5 +8750,0,2,2,1,1,5 +8760,0,2,2,1,1,5 +8770,0,2,2,1,1,5 +8780,0,2,2,1,1,5 +8790,0,2,2,1,1,5 +8800,0,2,2,1,1,5 +8810,0,2,2,1,1,5 +8820,0,2,2,1,1,5 +8830,0,2,2,1,1,5 +8840,0,2,2,1,1,5 +8850,0,2,2,1,1,5 +8860,0,2,2,1,1,5 +8870,0,2,2,1,1,5 +8880,0,2,2,1,1,5 +8890,0,2,2,1,1,5 +8900,0,2,2,1,1,5 +8910,0,2,2,1,1,5 +8920,0,2,2,1,1,5 +8930,0,2,2,1,1,5 +8940,0,2,2,1,1,5 +8950,0,2,2,1,1,5 +8960,0,2,2,1,1,5 +8970,0,2,2,1,1,5 +8980,0,2,2,1,1,5 +8990,0,2,2,1,1,5 +9000,0,2,2,1,1,5 +9010,0,2,2,1,1,5 +9020,0,2,2,1,1,5 +9030,0,2,2,1,1,5 +9040,0,2,2,1,1,5 +9050,0,2,2,1,1,5 +9060,0,2,2,1,1,5 +9070,0,2,2,1,1,5 +9080,0,2,2,1,1,5 +9090,0,2,2,1,1,5 +9100,0,2,2,1,1,5 +9110,0,2,2,1,1,5 +9120,0,2,2,1,1,5 +9130,0,2,2,1,1,5 +9140,0,2,2,1,1,5 +9150,0,2,2,1,1,5 +9160,0,2,2,1,1,5 +9170,0,2,2,1,1,5 +9180,0,2,2,1,1,5 +9190,0,2,2,1,1,5 +9200,0,2,2,1,1,5 +9210,0,2,2,1,1,5 +9220,0,2,2,1,1,5 +9230,0,2,2,1,1,5 +9240,0,2,2,1,1,5 +9250,0,2,2,1,1,5 +9260,0,2,2,1,1,5 +9270,0,2,2,1,1,5 +9280,0,2,2,1,1,5 +9290,0,2,2,1,1,5 +9300,0,2,2,1,1,5 +9310,0,2,2,1,1,5 +9320,0,2,2,1,1,5 +9330,0,2,2,1,1,5 +9340,0,2,2,1,1,5 +9350,0,2,2,1,1,5 +9360,0,2,2,1,1,5 +9370,0,2,2,1,1,5 +9380,0,2,2,1,1,5 +9390,0,2,2,1,1,5 +9400,0,2,2,1,1,5 +9410,0,2,2,1,1,5 +9420,0,2,2,1,1,5 +9430,0,2,2,1,1,5 +9440,0,2,2,1,1,5 +9450,0,2,2,1,1,5 +9460,0,2,2,1,1,5 +9470,0,2,2,1,1,5 +9480,0,2,2,1,1,5 +9490,0,2,2,1,1,5 +9500,0,2,2,1,1,5 +9510,0,2,2,1,1,5 +9520,0,2,2,1,1,5 +9530,0,2,2,1,1,5 +9540,0,2,2,1,1,5 +9550,0,2,2,1,1,5 +9560,0,2,2,1,1,5 +9570,0,2,2,1,1,5 +9580,0,2,2,1,1,5 +9590,0,2,2,1,1,5 +9600,0,2,2,1,1,5 +9610,0,2,2,1,1,5 +9620,0,2,2,1,1,5 +9630,0,2,2,1,1,5 +9640,0,2,2,1,1,5 +9650,0,2,2,1,1,5 +9660,0,2,2,1,1,5 +9670,0,2,2,1,1,5 +9680,0,2,2,1,1,5 +9690,0,2,2,1,1,5 +9700,0,2,2,1,1,5 +9710,0,2,2,1,1,5 +9720,0,2,2,1,1,5 +9730,0,2,2,1,1,5 +9740,0,2,2,1,1,5 +9750,0,2,2,1,1,5 +9760,0,2,2,1,1,5 +9770,0,2,2,1,1,5 +9780,0,2,2,1,1,5 +9790,0,2,2,1,1,5 +9800,0,2,2,1,1,5 +9810,0,2,2,1,1,5 +9820,0,2,2,1,1,5 +9830,0,2,2,1,1,5 +9840,0,2,2,1,1,5 +9850,0,2,2,1,1,5 +9860,0,2,2,1,1,5 +9870,0,2,2,1,1,5 +9880,0,2,2,1,1,5 +9890,0,2,2,1,1,5 +9900,0,2,2,1,1,5 +9910,0,2,2,1,1,5 +9920,0,2,2,1,1,5 +9930,0,2,2,1,1,5 +9940,0,2,2,1,1,5 +9950,0,2,2,1,1,5 +9960,0,2,2,1,1,5 +9970,0,2,2,1,1,5 +9980,0,2,2,1,1,5 +9990,0,2,2,1,1,5 +10000,0,2,2,1,1,5 +10010,0,2,2,1,1,5 +10020,0,2,2,1,1,5 +10030,0,2,2,1,1,5 +10040,0,2,2,1,1,5 +10050,0,2,2,1,1,5 +10060,0,2,2,1,1,5 +10070,0,2,2,1,1,5 +10080,0,2,2,1,1,5 +10090,0,2,2,1,1,5 +10100,0,2,2,1,1,5 diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/1ms-minus.csv b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/1ms-minus.csv new file mode 100644 index 0000000..954c588 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/1ms-minus.csv @@ -0,0 +1,103 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,60,45,0,10,10,10 +10,55,40,-2,9,9,9 +20,50,35,-4,8,8,8 +30,45,30,-6,7,7,7 +40,40,25,-8,6,6,6 +50,35,20,-10,5,5,5 +60,30,15,-12,4,4,4 +70,25,10,-14,3,3,3 +80,20,5,-16,2,2,2 +90,15,0,-18,1,1,1 +100,10,-5,-20,0,0,0 +110,5,0,-22,1,1,1 +120,0,5,-20,2,2,2 +130,-5,10,-18,3,3,3 +140,0,15,-16,4,4,4 +150,5,20,-14,5,5,5 +160,10,25,-12,6,6,6 +170,15,30,-10,7,7,7 +180,20,35,-8,8,8,8 +190,25,40,-6,9,9,9 +200,30,45,-4,10,10,10 +210,35,40,-2,9,9,9 +220,40,35,0,8,8,8 +230,45,30,-2,7,7,7 +240,50,25,-4,6,6,6 +250,55,20,-6,5,5,5 +260,60,15,-8,4,4,4 +270,55,10,-10,3,3,3 +280,50,5,-12,2,2,2 +290,45,0,-14,1,1,1 +300,40,-5,-16,0,0,0 +310,35,0,-18,1,1,1 +320,30,5,-20,2,2,2 +330,25,10,-25,3,3,3 +340,20,15,-20,4,4,4 +350,15,20,-18,5,5,5 +360,10,25,-16,6,6,6 +370,5,30,-14,7,7,7 +380,0,35,-12,8,8,8 +390,-5,40,-10,9,9,9 +400,0,45,-8,10,10,10 +410,5,40,-6,9,9,9 +420,10,35,-4,8,8,8 +430,15,30,-2,7,7,7 +440,20,25,0,6,6,6 +450,25,20,-2,5,5,5 +460,30,15,-4,4,4,4 +470,35,10,-6,3,3,3 +480,40,5,-8,2,2,2 +490,45,0,-10,1,1,1 +500,50,-5,-12,0,0,0 +510,55,0,-14,1,1,1 +520,60,5,-16,2,2,2 +530,55,10,-18,3,3,3 +540,50,15,-20,4,4,4 +550,45,20,-30,5,5,5 +560,40,25,-20,6,6,6 +570,35,30,-18,7,7,7 +580,30,35,-16,8,8,8 +590,25,40,-14,9,9,9 +600,20,45,-12,10,10,10 +610,15,40,-10,9,9,9 +620,10,35,-8,8,8,8 +630,5,30,-6,7,7,7 +640,0,25,-4,6,6,6 +650,-5,20,-2,5,5,5 +660,0,15,0,4,4,4 +670,5,10,-2,3,3,3 +680,10,5,-4,2,2,2 +690,15,0,-6,1,1,1 +700,20,-5,-8,0,0,0 +710,25,0,-10,1,1,1 +720,30,5,-12,2,2,2 +730,35,10,-14,3,3,3 +740,40,15,-16,4,4,4 +750,45,20,-18,5,5,5 +760,50,25,-20,6,6,6 +770,55,30,-22,7,7,7 +780,60,35,-20,8,8,8 +790,55,40,-18,9,9,9 +800,50,45,-16,10,10,10 +810,45,40,-14,9,9,9 +820,40,35,-12,8,8,8 +830,35,30,-10,7,7,7 +840,30,25,-8,6,6,6 +850,25,20,-6,5,5,5 +860,20,15,-4,4,4,4 +870,15,10,-2,3,3,3 +880,10,5,0,2,2,2 +890,5,0,-2,1,1,1 +900,0,-5,-4,0,0,0 +910,-5,0,-6,1,1,1 +920,0,5,-8,2,2,2 +930,5,10,-10,3,3,3 +940,10,15,-12,4,4,4 +950,15,20,-14,5,5,5 +960,20,25,-16,6,6,6 +970,25,30,-18,7,7,7 +980,30,35,-20,8,8,8 +990,35,40,-22,9,9,9 +1000,40,45,-20,10,10,10 diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/1ms-plus.csv b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/1ms-plus.csv new file mode 100644 index 0000000..9ae00ed --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/1ms-plus.csv @@ -0,0 +1,103 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,60,45,10,10,10,10 +10,55,40,9,9,9,9 +20,50,35,8,8,8,8 +30,45,30,7,7,7,7 +40,40,25,6,6,6,6 +50,35,20,5,5,5,5 +60,30,15,4,4,4,4 +70,25,10,3,3,3,3 +80,20,5,2,2,2,2 +90,15,0,1,1,1,1 +100,10,-5,0,0,0,0 +110,5,0,1,1,1,1 +120,0,5,2,2,2,2 +130,-5,10,3,3,3,3 +140,0,15,4,4,4,4 +150,5,20,5,5,5,5 +160,10,25,6,6,6,6 +170,15,30,7,7,7,7 +180,20,35,8,8,8,8 +190,25,40,9,9,9,9 +200,30,45,10,10,10,10 +210,35,40,11,9,9,9 +220,40,35,12,8,8,8 +230,45,30,11,7,7,7 +240,50,25,10,6,6,6 +250,55,20,9,5,5,5 +260,60,15,8,4,4,4 +270,55,10,7,3,3,3 +280,50,5,6,2,2,2 +290,45,0,5,1,1,1 +300,40,-5,4,0,0,0 +310,35,0,3,1,1,1 +320,30,5,2,2,2,2 +330,25,10,1,3,3,3 +340,20,15,0,4,4,4 +350,15,20,1,5,5,5 +360,10,25,2,6,6,6 +370,5,30,3,7,7,7 +380,0,35,4,8,8,8 +390,-5,40,5,9,9,9 +400,0,45,6,10,10,10 +410,5,40,7,9,9,9 +420,10,35,8,8,8,8 +430,15,30,9,7,7,7 +440,20,25,10,6,6,6 +450,25,20,11,5,5,5 +460,30,15,12,4,4,4 +470,35,10,11,3,3,3 +480,40,5,10,2,2,2 +490,45,0,9,1,1,1 +500,50,-5,8,0,0,0 +510,55,0,7,1,1,1 +520,60,5,6,2,2,2 +530,55,10,5,3,3,3 +540,50,15,4,4,4,4 +550,45,20,3,5,5,5 +560,40,25,2,6,6,6 +570,35,30,1,7,7,7 +580,30,35,0,8,8,8 +590,25,40,1,9,9,9 +600,20,45,2,10,10,10 +610,15,40,3,9,9,9 +620,10,35,4,8,8,8 +630,5,30,5,7,7,7 +640,0,25,6,6,6,6 +650,-5,20,7,5,5,5 +660,0,15,8,4,4,4 +670,5,10,9,3,3,3 +680,10,5,10,2,2,2 +690,15,0,11,1,1,1 +700,20,-5,12,0,0,0 +710,25,0,11,1,1,1 +720,30,5,10,2,2,2 +730,35,10,9,3,3,3 +740,40,15,8,4,4,4 +750,45,20,7,5,5,5 +760,50,25,6,6,6,6 +770,55,30,5,7,7,7 +780,60,35,4,8,8,8 +790,55,40,3,9,9,9 +800,50,45,2,10,10,10 +810,45,40,1,9,9,9 +820,40,35,0,8,8,8 +830,35,30,1,7,7,7 +840,30,25,2,6,6,6 +850,25,20,3,5,5,5 +860,20,15,4,4,4,4 +870,15,10,5,3,3,3 +880,10,5,6,2,2,2 +890,5,0,7,1,1,1 +900,0,-5,8,0,0,0 +910,-5,0,9,1,1,1 +920,0,5,10,2,2,2 +930,5,10,11,3,3,3 +940,10,15,12,4,4,4 +950,15,20,11,5,5,5 +960,20,25,10,6,6,6 +970,25,30,9,7,7,7 +980,30,35,8,8,8,8 +990,35,40,7,9,9,9 +1000,40,45,6,10,10,10 diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/1ms.csv b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/1ms.csv new file mode 100644 index 0000000..1fa4757 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/1ms.csv @@ -0,0 +1,103 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,60,45,10,10,10,10 +10,55,40,7,9,9,9 +20,50,35,4,8,8,8 +30,45,30,1,7,7,7 +40,40,25,-2,6,6,6 +50,35,20,-5,5,5,5 +60,30,15,-8,4,4,4 +70,25,10,-11,3,3,3 +80,20,5,-14,2,2,2 +90,15,0,-17,1,1,1 +100,10,-5,-20,0,0,0 +110,5,0,-23,1,1,1 +120,0,5,-20,2,2,2 +130,-5,10,-17,3,3,3 +140,0,15,-14,4,4,4 +150,5,20,-11,5,5,5 +160,10,25,-8,6,6,6 +170,15,30,-5,7,7,7 +180,20,35,-2,8,8,8 +190,25,40,1,9,9,9 +200,30,45,4,10,10,10 +210,35,40,7,9,9,9 +220,40,35,10,8,8,8 +230,45,30,13,7,7,7 +240,50,25,10,6,6,6 +250,55,20,7,5,5,5 +260,60,15,4,4,4,4 +270,55,10,1,3,3,3 +280,50,5,-2,2,2,2 +290,45,0,-5,1,1,1 +300,40,-5,-8,0,0,0 +310,35,0,-11,1,1,1 +320,30,5,-14,2,2,2 +330,25,10,-17,3,3,3 +340,20,15,-20,4,4,4 +350,15,20,-23,5,5,5 +360,10,25,-20,6,6,6 +370,5,30,-17,7,7,7 +380,0,35,-14,8,8,8 +390,-5,40,-11,9,9,9 +400,0,45,-8,10,10,10 +410,5,40,-5,9,9,9 +420,10,35,-2,8,8,8 +430,15,30,1,7,7,7 +440,20,25,4,6,6,6 +450,25,20,7,5,5,5 +460,30,15,10,4,4,4 +470,35,10,13,3,3,3 +480,40,5,10,2,2,2 +490,45,0,7,1,1,1 +500,50,-5,4,0,0,0 +510,55,0,1,1,1,1 +520,60,5,-2,2,2,2 +530,55,10,-5,3,3,3 +540,50,15,-8,4,4,4 +550,45,20,-11,5,5,5 +560,40,25,-14,6,6,6 +570,35,30,-17,7,7,7 +580,30,35,-20,8,8,8 +590,25,40,-23,9,9,9 +600,20,45,-20,10,10,10 +610,15,40,-17,9,9,9 +620,10,35,-14,8,8,8 +630,5,30,-11,7,7,7 +640,0,25,-8,6,6,6 +650,-5,20,-5,5,5,5 +660,0,15,-2,4,4,4 +670,5,10,1,3,3,3 +680,10,5,4,2,2,2 +690,15,0,7,1,1,1 +700,20,-5,10,0,0,0 +710,25,0,13,1,1,1 +720,30,5,10,2,2,2 +730,35,10,7,3,3,3 +740,40,15,4,4,4,4 +750,45,20,1,5,5,5 +760,50,25,-2,6,6,6 +770,55,30,-5,7,7,7 +780,60,35,-8,8,8,8 +790,55,40,-11,9,9,9 +800,50,45,-14,10,10,10 +810,45,40,-17,9,9,9 +820,40,35,-20,8,8,8 +830,35,30,-23,7,7,7 +840,30,25,-20,6,6,6 +850,25,20,-17,5,5,5 +860,20,15,-14,4,4,4 +870,15,10,-11,3,3,3 +880,10,5,-8,2,2,2 +890,5,0,-5,1,1,1 +900,0,-5,-2,0,0,0 +910,-5,0,1,1,1,1 +920,0,5,4,2,2,2 +930,5,10,7,3,3,3 +940,10,15,10,4,4,4 +950,15,20,13,5,5,5 +960,20,25,10,6,6,6 +970,25,30,7,7,7,7 +980,30,35,4,8,8,8 +990,35,40,1,9,9,9 +1000,40,45,-2,10,10,10 diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronA_FY19_P1.cfg b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronA_FY19_P1.cfg new file mode 100644 index 0000000..a4cf645 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronA_FY19_P1.cfg @@ -0,0 +1,4981 @@ +// LoggerService node: See /var/log/messages file. +// +LoggerService = { +// Class = LoggerService +// CPUs = 0x800 +// StackSize = 32768 +// NumberOfLogPages = 128 +// +SysLogger = { +// Class = SysLogger +// Format = "EtOoFmC" +// PrintKeys = 1 +// Ident = "JAGyA" +// } +// } + +// StateMachine node ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +Start = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +DISABLED = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITSTANDBY = { + Class = ReferenceContainer + +GoWaitReady = { + Class = StateMachineEvent + NextState = "WAITREADY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitReady + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoDisabled = { + Class = StateMachineEvent + NextState = "DISABLED" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Disabled + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITREADY = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITPERMIT = { + Class = ReferenceContainer + +GoWaitReady = { + Class = StateMachineEvent + NextState = "WAITREADY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitReady + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON = { + Class = StateMachineEvent + NextState = "WAITHVON" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON_SDN = { + Class = StateMachineEvent + NextState = "WAITHVON_SDN" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON_SDN + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON_PREP = { + Class = StateMachineEvent + NextState = "WAITHVON_PREP" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON_PREP + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON_SDN_PREP = { + Class = StateMachineEvent + NextState = "WAITHVON_SDN_PREP" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON_SDN_PREP + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + // HVPS sequence control states. + +WAITHVON = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITHVON_SDN = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITHVON_PREP = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITHVON_SDN_PREP = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + // Error State (Enter by HVPS errors) + +ERROR = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } +} + +// RealTime Application node ++JAGyrotronRTApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + //Timer GAM for thread 1. + +Timer1kHzGAM = { + Class = IOGAM + InputSignals = { + Counter = { + DataSource = Timer1kHz + Type = uint32 + Frequency = 1000 //Hz + } + Time = { + DataSource = Timer1kHz + Type = uint32 + } + } + OutputSignals = { + Counter1kHz = { + DataSource = DDB1 + Type = uint32 + } + Time1kHz = { + DataSource = DDB1 + Type = uint32 + } + } + } + +Timer10HzGAM = { + Class = IOGAM + InputSignals = { + Counter = { + DataSource = Timer10Hz + Type = uint32 + Frequency = 1 //Hz + } + Time = { + DataSource = Timer10Hz + Type = uint32 + } + } + OutputSignals = { + Counter10Hz = { + DataSource = DDB1 + Type = uint32 + } + Time1Hz = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM to update PCF state-machine state + +InErrorGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 1 + } + } + } + +InDisabledGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 2 + } + } + } + +InWaitStandbyGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 3 + } + } + } + +InWaitReadyGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 4 + } + } + } + +InWaitPermitGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 5 + } + } + } + +InWaitHVONGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 6 + } + } + } + +InWaitHVON_PREPGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 7 + } + } + } + +InWaitHVON_SDNGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 8 + } + } + } + +InWaitHVON_SDN_PREPGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 9 + } + } + } + + // Copy data from DDB1 to EPICSCAOutput DataSource. + +EPICSOutputGAM = { + Class = IOGAM + InputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + } + MCPS_ACT_SP = { + DataSource = DDB1 + Type = uint32 + } + GCPS_ACT_SP = { + DataSource = DDB1 + Type = uint32 + } + BPS_OUT = { + DataSource = DDB1 + Type = float32 + } + APS_OUT = { + DataSource = DDB1 + Type = float32 + } + MCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + GCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + FHPS_REF = { + DataSource = DDB1 + Type = float32 + } + CSV_LOADED = { + DataSource = DDB1 + Type = uint32 + } + CSV_ERR = { + DataSource = DDB1 + Type = uint32 + } + ELAPSED_TIME = { + DataSource = DDB1 + Type = uint32 + } + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + RFON = { + DataSource = DDB1 + Type = uint32 + } + MHVPS_OUT = { + DataSource = DDB1 + Type = float32 + } + PREP_TIME_WF = { + DataSource = DDB1 + Type = int32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + MHVPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + BPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + APS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + MCPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GCPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + FHPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + CCPS_REF = { + DataSource = DDB1 + Type = float32 + } + MHVPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + APS_STOP = { + DataSource = DDB1 + Type = uint32 + } + BPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + BEAM_ON_TIME = { + DataSource = DDB1 + Type = uint32 + } + PCF_FLT = { + DataSource = DDB1 + Type = uint32 + } + BEAM_ON_STAT = { + DataSource = DDB1 + Type = uint32 + } + SHOT_ID = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + FHPS_AUTO_STAT = { + DataSource = DDB1 + Type = uint32 + } + //Add 20201117 + APS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + APS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + MHVPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + PCF_STATE = { + DataSource = EPICSCAOutput + Type = uint32 + } + MCPS_ACT_SP = { + DataSource = EPICSCAOutput + Type = uint32 + } + GCPS_ACT_SP = { + DataSource = EPICSCAOutput + Type = uint32 + } + BPS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + APS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + MCPS_TRG_CURR_SET = { + DataSource = EPICSCAOutput + Type = float32 + } + GCPS_TRG_CURR_SET = { + DataSource = EPICSCAOutput + Type = float32 + } + FHPS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + CSV_LOADED = { + DataSource = EPICSCAOutput + Type = uint32 + } + CSV_ERR = { + DataSource = EPICSCAOutput + Type = uint32 + } + ELAPSED_TIME = { + DataSource = EPICSCAOutput + Type = uint32 + } + HVARMED = { + DataSource = EPICSCAOutput + Type = uint32 + } + HVINJECTION = { + DataSource = EPICSCAOutput + Type = uint32 + } + RFON = { + DataSource = EPICSCAOutput + Type = uint32 + } + + MHVPS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + PREP_TIME_WF = { + DataSource = EPICSCAOutput + } + MHVPS_PREP_WF = { + DataSource = EPICSCAOutput + } + BPS_PREP_WF = { + DataSource = EPICSCAOutput + } + APS_PREP_WF = { + DataSource = EPICSCAOutput + } + MCPS_PREP_WF = { + DataSource = EPICSCAOutput + } + GCPS_PREP_WF = { + DataSource = EPICSCAOutput + } + FHPS_PREP_WF = { + DataSource = EPICSCAOutput + } + CCPS_REF = { + DataSource = EPICSCAOutput + } + MHVPS_STOP = { + DataSource = EPICSCAOutput + Type = uint32 + } + APS_STOP = { + DataSource = EPICSCAOutput + Type = uint32 + } + BPS_STOP = { + DataSource = EPICSCAOutput + Type = uint32 + } + BEAM_ON_TIME = { + DataSource = EPICSCAOutput + Type = uint32 + } + PCF_FLT = { + DataSource = EPICSCAOutput + } + BEAM_ON_STAT = { + DataSource = EPICSCAOutput + } + SHOT_ID = { + DataSource = EPICSCAOutput + } + FHPS_AUTO_STAT = { + DataSource = EPICSCAOutput + } + //Added 20201117 + APS_HVON = { + DataSource = EPICSCAOutput + } + APS_SWON = { + DataSource = EPICSCAOutput + } + BPS_HVON = { + DataSource = EPICSCAOutput + } + BPS_SWON = { + DataSource = EPICSCAOutput + } + MHVPS_HVON = { + DataSource = EPICSCAOutput + } + } + } + + // Message GAM in Disabled state. + +GoWaitStandbyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1} + Comparators = {EQUALS} + InputSignals = { + PLC_SELECT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + +GoWaitStandbyFromReadyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0} + Comparators = {EQUALS} + InputSignals = { + PLC_STANDBY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + + // MCPS, GCPS PV to DDB1 + +GCPSGAM = { + Class = IOGAM + InputSignals = { + GCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + GCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + } + } + +MCPSGAM = { + Class = IOGAM + InputSignals = { + MCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + MCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + } + } + // Message GAM in Standby state. + +GoDisabledGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0} + Comparators = {EQUALS} + InputSignals = { + PLC_SELECT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoDisabled + } + } + + //GAM in WaitReady state. Check MCPS,GCPS,FHPS state for state transition. + +GoWaitReadyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {3 3 1} + ExpectedFloatValues = {0 0 0} + Comparators = {EQUALS GREATER EQUALS GREATER EQUALS GREATER} + InputSignals = { + MCPS_ACT_RB = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_MCPS_CURR_MON = { + DataSource = EPICSCAInput + Type = float32 + } + GCPS_ACT_RB = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_GCPS_CURR_MON = { + DataSource = EPICSCAInput + Type = float32 + } + FHPS_RU = { + DataSource = EPICSCAInput + Type = uint32 + } + FHPS_MEAS_ACV = { + DataSource = EPICSCAInput + Type = float32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitReady + } + } + + //GAM for prepro + +WFRecordGAM = { + Class = JAWFRecordGAM + Directory = "../Configurations" //TODO: Enter directory path for prepro files. + InputSignals = { + CSV_LOAD = { + DataSource = EPICSCAInput + Type = uint32 + } + Filename = { + Alias = CSV_NAME + DataSource = EPICSCAInput + } + } + OutputSignals = { + PREP_TIME_WF = { + DataSource = DDB1 + } + MHVPS_PREP_WF = { + DataSource = DDB1 + } + BPS_PREP_WF = { + DataSource = DDB1 + } + APS_PREP_WF = { + DataSource = DDB1 + } + MCPS_PREP_WF = { + DataSource = DDB1 + } + GCPS_PREP_WF = { + DataSource = DDB1 + } + FHPS_PREP_WF = { + DataSource = DDB1 + } + } + } + +PreProgrammedGAM = { + Class = JAPreProgrammedGAM + Directory = "../Configurations" // TODO: Enter the directory path for prepro files. + PreProgrammedPeriodMs = 1 // Parameter update periods in ms. + InputSignals = { + CSV_LOAD = { + DataSource = EPICSCAInput + Type = uint32 + } + Filename = { + Alias = CSV_NAME + DataSource = EPICSCAInput + } + FHPS_REF = { + Alias = FHPS_AUTO_TAGV + DataSource = EPICSCAInput + Type = float32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + GYA_PREPRO_TIME = { + DataSource = DDB1 + Type = int32 + } + MHVPS_REF = { + DataSource = DDB1 + Type = float32 + } + BPS_REF = { + DataSource = DDB1 + Type = float32 + } + APS_REF = { + DataSource = DDB1 + Type = float32 + } + MCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + GCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + FHPS_PrePro = { + DataSource = DDB1 + Type = float32 + } + CSV_LOADED = { + DataSource = DDB1 + Type = uint32 + } + CSV_ERR = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM in WaitReady state. Check PLC_READY and CCPS_IN_OPERATION status. + +GoWaitPermitGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 1} //20201222 modified. In the past, 0 1. + Comparators = {EQUALS EQUALS} + InputSignals = { + CCPS_IN_OPERATION = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_READY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitPermit + } + } + + //GAM in WaitPermit state. Check Permit and States of Operation Modes. + +GoWaitReadyFromWaitPermitGAM = { + Class = JAMessageGAM + Operation = OR + ExpectedIntValues = {0 0} + Comparators = {EQUALS EQUALS} + InputSignals = { + PLC_STANDBY = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_READY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitReady + } + } + +GoWaitHVONGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0 0 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON + } + } + +GoWaitHVON_PREP_GAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0 1 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON_PREP + } + } + +GoWaitHVON_SDN_GAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 0 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON_SDN + } + } + +GoWaitHVON_SDN_PREP_GAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 1 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON_SDN_PREP + } + } + + //GAM in WaitHVON_xx states. If PLC_READY is zero, goto WaitStandby. + +FromWaitHVONToWaitStandby = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0} + Comparators = {EQUALS} + InputSignals = { + PLC_READY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + //GAM in WaitHVON_xx states. If PLC_PERMIT is zero, goto WaitPermit. + +FromWaitHVONToWaitPermit = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0 0 0 0 0 0} //modified 20201222 + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} //modified 20201222 + InputSignals = { + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + //add 20201222 + APS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + MHVPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + APS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + }//20201222 + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitPermit + } + } + + // Check the selected mode, and check maximum pulse length. Use with a StateMachineGAM + +ModeLimitGAM = { + Class = JAModeControlGAM + InputSignals = { + PLC_MODE1 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD1_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_MODE2 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD2_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_MODE3 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD3_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_MODE4 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD4_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + Time = { + DataSource = DDB1 + Type = uint32 + } + HVInjection = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + MODE_SHOTLEN_FLAG = { + DataSource = DDB1 + Type = uint32 + } + } + } + + // State notify GAMs. These GAMs are in all WaitHVON states. + +writeBeamONStateGAM = { + Class = IOGAM + InputSignals = { + BEAM_ON_STAT = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + BEAM_ON_STAT = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeHVArmedStateGAM = { + Class = IOGAM + InputSignals = { + HVARMED = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeHVInjectionStateGAM = { + Class = IOGAM + InputSignals = { + HVINJECTION = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeRFONStateGAM = { + Class = IOGAM + InputSignals = { + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + RFON = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeBeamONTimeGAM = { + Class = IOGAM + InputSignals = { + BeamONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + ELAPSED_TIME = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeRFONTimeGAM = { + Class = IOGAM + InputSignals = { + RFONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + BEAM_ON_TIME = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM for trianguler waveform generation. + +CCPSWaveformGAM = { + Class = JATriangleWaveGAM + InputSignals = { + Frequency = { + Alias = CCPS_OUTPUT_FREQ + DataSource = EPICSCAInput + Type = float32 + } + Amplitude = { + Alias = CCPS_OUTPUT_AMP + DataSource = EPICSCAInput + Type = float32 + } + Offset = { + Alias = CCPS_OUTPUT_OFFS + DataSource = EPICSCAInput + Type = float32 + } + PLCSTANDBY = { + Alias = PLC_STANDBY + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + CCPS_REF = { + DataSource = DDB1 + Type = float32 + } + } + } + //GAM for FHPS ramping up operation. + +FHPSSetpointGAM = { + Class = IOGAM + InputSignals = { + FHPS_AUTO_TAGV = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + FHPS_TAGV = { + DataSource = DDB1 + Type = float32 + } + } + } + +FHPSRampupGAM = { + Class = JARampupGAM + InputSignals = { + Currspv = { + Alias = FHPS_REF + DataSource = DDB1 + Type = float32 + } + Targetv = { + Alias = FHPS_TAGV + DataSource = DDB1 + Type = float32 + } + Time = { + Alias = FHPS_AUTO_TIME + DataSource = EPICSCAInput + Type = float32 + } + Start = { + Alias = FHPS_AUTO_START + DataSource = EPICSCAInput + Type = uint32 + } + PLC_STANDBY = { + Alias = PLC_STANDBY + DataSource = EPICSCAInput + Type = uint32 + } + MANUAL_AUTO = { + Alias = FHPS_MANM + DataSource = EPICSCAInput + Type = uint32 + } + FHPS_PrePro = { + DataSource = DDB1 + Type = float32 + } + } + OutputSignals = { + FHPS_REF = { + DataSource = DDB1 + Type = float32 + } + FHPS_AUTO_STAT = { + DataSource = DDB1 + Type = uint32 + } + } + } + //GAM for error handling. + // GAM that sets ERROR and STOP FLAGS for APS, BPS and MHVPS when we enter Error state and resets them when we leave Error state + +ErrorGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = AND + ExpectedValues = {1 0 0 0 0 0 0 0 0 0 0} + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} + Values = {0 0 0} + InputSignals = { + // Conditional signals + RESET_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + MHVPS_STOP_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + APS_STOP_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + BPS_STOP_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + MHVPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + APS_STOP = { + DataSource = DDB1 + Type = uint32 + } + BPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + } + } + +StopRequestGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {1 1 1 1 1 1 1 1 1 1} + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} + Values = {1} + InputSignals = { + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + StopRequest_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + StopRequest = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //Test whether board status are stable + +GAMDisplayDebug = { + Class = IOGAM + InputSignals = { + RESET_FLT = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + RESET_FLT_DISP = { + DataSource = Display + Type = uint32 + } + } + } + //Check PXI board status. + +PXI6259ErrorGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {0 0 0 0} + Comparators = {GREATER GREATER GREATER GREATER} + Values = {1} + InputSignals = { + // Conditional signals + PXI6259_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6259_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6528_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6528_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + PCF_FLT_6259_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT_6259 = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PXI6368Error03GAM = {// detect Hardware error (status number 3) for PXI6368 boards. + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {3 3} + Comparators = {EQUALS EQUALS} + Values = {1} + InputSignals = { + PXI6368_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6368_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + PCF_FLT_6368_ERRNO_03_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT_6368_ERRNO_03 = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PXI6368Error04GAM = {// detect No board error (status number 4) for PXI6368 boards. + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {4 4} + Comparators = {EQUALS EQUALS} + Values = {1} + InputSignals = { + PXI6368_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6368_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + PCF_FLT_6368_ERRNO_04_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT_6368_ERRNO_04 = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PXIErrorGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {0 0 0} + Comparators = {GREATER GREATER GREATER} + Values = {1} + InputSignals = { + PCF_FLT_6368_ERRNO_03 = { + DataSource = DDB1 + Type = uint32 + } + PCF_FLT_6368_ERRNO_04 = { + DataSource = DDB1 + Type = uint32 + } + PCF_FLT_6259 = { + DataSource = DDB1 + Type = uint32 + } + // Default values + PCF_FLT_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT = { + DataSource = DDB1 + Type = uint32 + } + } + } + + + +FromErrorToWaitStandbyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 0 0 0 0 0 0 0 0 0 0} + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} + InputSignals = { + RESET_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + // From any state to Error state. + +GoErrorGAM = { + Class = JAMessageGAM + Operation = OR + ExpectedIntValues = {1 1 1 1 1 1 1 1 1 1} + InputSignals = { + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoError + } + } + // Reset HVPS outputs. ToDo: Fix to access NI d.s. + +ResetPSsGAM = { + Class = ConstantGAM + OutputSignals = { + MHVPS_HVON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + BPS_HVON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + BPS_SWON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + APS_HVON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + APS_SWON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + //here + } + } + // Update status. ToDo: Fix to access NI d.s. + +ExitedHVArmedInjectionRFONGAM = { + Class = JAConditionalSignalUpdateGAM + Values = {0 0 0} + InputSignals = { + // Condition signals + // Default output values + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + RFON = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + RFON = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM for SDN communication.(ProcessWF:thread1, Subscribe/Publish:thread2) + +SDNCommandGAM = { + Class = IOGAM + InputSignals = { + Command = { + DataSource = SDNSubCommands + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 64 + Ranges = {{0 0}} + // TODO uncomment this for release/testing + //Frequency = 1 + } + ESDNTime = { + DataSource = SDNSubCommands + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + OutputSignals = { + Command = { + DataSource = RealTimeThreadAsyncBridge + Type = uint16 + } + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + } + } + +debugSDNGAM = {//for debug + Class = IOGAM + InputSignals = { + Command = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + Command_DISP = { + DataSource = Display + Type = float32 + } + ESDNTime_DISP = { + DataSource = Display + Type = uint32 + } + } + } + +SDNReplyGAM = { + Class = IOGAM + InputSignals = { + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + WaveformPacketID = { + DataSource = DDB1 + Type = uint16 + } + GYA_BPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_BPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_BPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_BPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_APS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_APS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_APS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_APS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC1_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC1_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC1_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC1_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC2_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC2_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC2_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC2_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_MHVPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_MHVPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_MHVPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_MHVPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_MCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYB_MCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYA_GCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYB_GCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYA_FHPS_MEAS_ACI = { + DataSource = EPICSCAInput + } + GYB_FHPS_MEAS_ACI = { + DataSource = EPICSCAInput + } + GYA_CCPS_MEAS_DCI = { + DataSource = EPICSCAInput + } + GYB_CCPS_MEAS_DCI = { + DataSource = EPICSCAInput + } + } + OutputSignals = { + ESDNTime = { + DataSource = SDNReply + Type = uint32 + Trigger = 1 + } + ReplyWaveformAck = { + DataSource = SDNReply + Type = uint16 + } + GYA_BPS_MESVOLT = { + DataSource = SDNReply + } + GYB_BPS_MESVOLT = { + DataSource = SDNReply + } + GYA_BPS_MESCURR = { + DataSource = SDNReply + } + GYB_BPS_MESCURR = { + DataSource = SDNReply + } + GYA_APS_MESVOLT = { + DataSource = SDNReply + } + GYB_APS_MESVOLT = { + DataSource = SDNReply + } + GYA_APS_MESCURR = { + DataSource = SDNReply + } + GYB_APS_MESCURR = { + DataSource = SDNReply + } + GYA_ARC1_MESVOLT = { + DataSource = SDNReply + } + GYB_ARC1_MESVOLT = { + DataSource = SDNReply + } + GYA_ARC1_MESCURR = { + DataSource = SDNReply + } + GYB_ARC1_MESCURR = { + DataSource = SDNReply + } + GYA_ARC2_MESVOLT = { + DataSource = SDNReply + } + GYB_ARC2_MESVOLT = { + DataSource = SDNReply + } + GYA_ARC2_MESCURR = { + DataSource = SDNReply + } + GYB_ARC2_MESCURR = { + DataSource = SDNReply + } + GYA_MHVPS_MESVOLT = { + DataSource = SDNReply + } + GYB_MHVPS_MESVOLT = { + DataSource = SDNReply + } + GYA_MHVPS_MESCURR = { + DataSource = SDNReply + } + GYB_MHVPS_MESCURR = { + DataSource = SDNReply + } + GYA_MCPS_CURR_MON = { + DataSource = SDNReply + } + GYB_MCPS_CURR_MON = { + DataSource = SDNReply + } + GYA_GCPS_CURR_MON = { + DataSource = SDNReply + } + GYB_GCPS_CURR_MON = { + DataSource = SDNReply + } + GYA_FHPS_MEAS_ACI = { + DataSource = SDNReply + } + GYB_FHPS_MEAS_ACI = { + DataSource = SDNReply + } + GYA_CCPS_MEAS_DCI = { + DataSource = SDNReply + } + GYB_CCPS_MEAS_DCI = { + DataSource = SDNReply + } + } + } + //Write SDN waveform data into PS setpoint PV. + + // Timer for SDN thread. + +TimeSDNGAM = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = TimerSDN + Type = uint32 + } + Counter = { + DataSource = TimerSDN + Type = uint32 + Frequency = 1000 //operation:1k(=1ms cyc), debug:10 + } + } + OutputSignals = { + TimeSDN = { + DataSource = DDB1 + Type = uint32 + } + CounterSDN = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM for realtime statemachine + +Timer100kHzGAM = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = Timer + Type = uint32 + } + Counter = { + DataSource = Timer + Type = uint32 + Frequency = 200000 //operation:10k(=100us cyc) + //Frequency = 100000 //operation:100k(=10us cyc) + } + RTThreadPerf = { + DataSource = Timings + Alias = "WaitHVON.Thread3_CycleTime" + Type = uint32 + } + } + OutputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerf = { + DataSource = DDB1 + Type = uint32 + } + } + } + + // Digital Output port access. + // EPICS PV to one uint8 variable + +NI6528P3GAM = { + Class = JABitSumGAM + InputSignals = { + APS_HVON = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_SWON = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_STOP = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_HVON = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_SWON = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_STOP = { + DataSource = EPICSCAInput + Type = uint32 + } + BEAM_ON_STAT = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV5 = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + NI6528P3CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P4GAM = { + Class = JABitSumGAM + InputSignals = { + DO_REV6 = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV7 = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV8 = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_HVON = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_STOP = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_MODSW = { + DataSource = EPICSCAInput + Type = uint32 + } + PCF_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + HVARMED = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + NI6528P4CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P5GAM = { + Class = JABitSumGAM + InputSignals = { + HVINJECTION = { + DataSource = EPICSCAInput + Type = uint32 + } + RFON = { + DataSource = EPICSCAInput + Type = uint32 + } + FHPS_RU = { + DataSource = EPICSCAInput + Type = uint32 + } + SCM_RU = { + DataSource = EPICSCAInput + Type = uint32 + } + SCM_RD = { + DataSource = EPICSCAInput + Type = uint32 + } + CCPS_IN_OPERATION = { + DataSource = EPICSCAInput + Type = uint32 + } + NONE1 = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + NONE2 = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + NI6528P5CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + // reversed uint8 variable (value to write on port.) + +NI6528P3PV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P3CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P3PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P4PV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P4CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P4PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P5PV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P5CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P5PortValue = { + DataSource = NI6528P5 + Type = uint8 + } + } + } + // write a uint8 port value to PXI data source. + +NI6528P3WriteGAM = { + Class = IOGAM + InputSignals = { + NI6528P3PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P3Value = { + DataSource = NI6528P3 + Type = uint8 + } + } + } + +NI6528P4WriteGAM = { + Class = IOGAM + InputSignals = { + NI6528P4PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P4Value = { + DataSource = NI6528P4 + Type = uint8 + } + } + } + + //Thread3 pulse parameter EPICS PVs read. + +GAMEPICSCA = { + Class = IOGAM + InputSignals = { + MHVPS_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_HVON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_SWON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_HVON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_SWON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + SHOTLEN = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ON = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + MHVPS_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + SHOTLEN = { + DataSource = DDB1 + Type = uint32 + } + PLC_ON = { + DataSource = DDB1 + Type = uint32 + } + } + } + + // Real-Time state machine GAMs + +GAMRealTimeStateMachine = { + Class = JARTStateMachineGAM + ConditionTrigger = 1 + mhvps_hvon = 4 + aps_hvon = 1 + aps_swon = 16 + bps_hvon = 2 + bps_swon = 8 + InputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + PLC_ON = { + DataSource = DDB1 + Type = uint32 + } + MHVPS_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + SHOTLEN = { + DataSource = DDB1 + Type = uint32 + } + StopRequest = { + DataSource = DDB1 + Type = uint32 + } + MODE_SHOTLEN_FLAG = { + DataSource = DDB1 + Type = uint32 + } + SHORT_PULSE_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + //Add 20210120 + MHVPS_MODSW = { + DataSource = EPICSCAInput + Type = uint32 + } + //Add 20210121 + DO_REV6 = { + DataSource = EPICSCAInput + Type = uint32 + } + + } + OutputSignals = { + RTSMValue = { + DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + BEAM_ON_STAT = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVARMED = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVINJECTION = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BeamONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + SHOT_ID = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + //Added 20201117 + APS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + APS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + MHVPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + NI6259Value = { + DataSource = NI6259 + //DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + NI6528P3Value = { + DataSource = NI6528P3 + //DataSource = DDB1 + Type = uint8 + } + NI6528P4Value = { + DataSource = NI6528P4 + //DataSource = DDB1 + Type = uint8 + } + } + } + +GAMSDNRealTimeStateMachine = { + Class = JASDNRTStateMachineGAM + ConditionTrigger = 1 + mhvps_hvon = 4 + aps_hvon = 1 + aps_swon = 16 + bps_hvon = 2 + bps_swon = 8 + InputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + PLC_ON = { + DataSource = DDB1 + Type = uint32 + } + MHVPS_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + SHOTLEN = { + DataSource = DDB1 + Type = uint32 + } + StopRequest = { + DataSource = DDB1 + Type = uint32 + } + MODE_SHOTLEN_FLAG = { + DataSource = DDB1 + Type = uint32 + } + Command = { + DataSource = RealTimeThreadAsyncBridge + Type = uint16 + } + + } + OutputSignals = { + RTSMValue = { + DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + BeamON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVARMED = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVINJECTION = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BeamONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + SHOT_ID = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + } + + //Terminal Interface reads three inputs. + // INPUTs: StateMahine Value, NI6528P3Value and NI6528P4Value + // OUTPUTs: Each NIxxx data sources. + +terminalInterfaceGAM = { + Class = JATerminalInterfaceGAM + mhvps_hvon_term = 4 + aps_hvon_term = 1 + aps_swon_term = 16 + bps_hvon_term = 2 + bps_swon_term = 8 + InputSignals = { + MHVPS_HVON = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON = { + DataSource = DDB1 + Type = uint32 + } + SHORT_PULSE_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + //Input signals about HW terminal. + RTSMValue = { + DataSource = DDB1 + Type = uint32 + } + NI6528P3CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + NI6528P4CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6259Value = { + DataSource = NI6259 + //DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + NI6528P3Value = { + DataSource = NI6528P3 + //DataSource = DDB1 + Type = uint8 + } + NI6528P4Value = { + DataSource = NI6528P4 + //DataSource = DDB1 + Type = uint8 + } + } + } + + // Switching AO port source between internal variable and EPICS PV. + +choiseGAM = { + Class = JASourceChoiseGAM + numberOfPVs = 5 + InputSignals = { + BPS_REF = { + DataSource = DDB1 + Type = float32 + } + BPS_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + BPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + APS_REF = { + DataSource = DDB1 + Type = float32 + } + APS_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + APS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + MHVPS_REF = { + DataSource = DDB1 + Type = float32 + } + MHVPS_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + MHVPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + MCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + MCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + MCPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + GCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + GCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + GCPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + } + OutputSignals = { + BPS_OUT = { + DataSource = DDB1 + Type = float32 + } + APS_OUT = { + DataSource = DDB1 + Type = float32 + } + MHVPS_OUT = { + DataSource = DDB1 + Type = float32 + } + MCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + GCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + } + } + + //debug + +debugTimerGAM = { + Class = IOGAM + InputSignals = { + Time1kHz = { + DataSource = DDB1 + Type = uint32 + } + TimeSDN = { + DataSource = DDB1 + Type = uint32 + } + Time = { + DataSource = DDB1 + Type = uint32 + } + Time1Hz = { + DataSource = DDB1 + Type = uint32 + } + + } + OutputSignals = { + T1_time = { + DataSource = Display + Type = uint32 + } + T2_time = { + DataSource = Display + Type = uint32 + } + T3_time = { + DataSource = Display + Type = uint32 + } + T4_time = { + DataSource = Display + Type = uint32 + } + } + } + +GAMExecTime = {//debug + Class = IOGAM + InputSignals = { + GAMEPICSCA_ExecTime = { + DataSource = Timings + Type = uint32 + } + StopRequestGAM_ExecTime = { + DataSource = Timings + Type = uint32 + } + ModeLimitGAM_ExecTime = { + DataSource = Timings + Type = uint32 + } + NI6528P3GAM_ExecTime = { + DataSource = Timings + Type = uint32 + } + terminalInterfaceGAM_ExecTime = { + DataSource = Timings + Type = uint32 + } + GAMRealTimeStateMachine_ExecTime = { + DataSource = Timings + Type = uint32 + } + + } + OutputSignals = { + GAMEPICSCA_ExecTime = { + DataSource = Display + Type = uint32 + } + StopRequestGAM_ExecTime = { + DataSource = Display + Type = uint32 + } + ModeLimitGAM_ExecTime = { + DataSource = Display + Type = uint32 + } + NI6528P3GAM_ExecTime = { + DataSource = Display + Type = uint32 + } + terminalInterfaceGAM_ExecTime = { + DataSource = Display + Type = uint32 + } + GAMRealTimeStateMachine_ExecTime = { + DataSource = Display + Type = uint32 + } + } + } + + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + AllowNoProducers = 1 + ResetUnusedVariablesAtStateChange = 0 + } + // Timer for thread 1 (Normal RT state execution cycle.) + +Timer1kHz = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x100 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + +TimerSDN = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x200 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + +Timer10Hz = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x800 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + // Timer for thread 3 (RTStateMachineGAM execution cycle.) + +Timer = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x400 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + + +Timings = { + Class = TimingDataSource + } + +Display = { + Class = LoggerDataSource + } + // for data exechange between threads. + +RealTimeThreadAsyncBridge = { + Class = RealTimeThreadAsyncBridge + NumberOfBuffers = 20 + } + // for access ECPIS PV. + +EPICSCAInput = { + Class = "EPICSCA::EPICSCAInput" + CPUMask = "0x100" //change from 200 + StackSize = "10000000" + Signals = { + // PV for manually setting + BPS_MM = { + PVName = "EC-GN-P01-PB1F:STAT-MANM" + Type = uint32 + } + BPS_MANUAL = { + PVName = "EC-GN-P01-PB1F:PSU1000-EREF-MSP" + Type = float32 + } + APS_MM = { + PVName = "EC-GN-P01-PA1F:STAT-MANM" + Type = uint32 + } + APS_MANUAL = { + PVName = "EC-GN-P01-PA1F:PSU3000-EREF-MSP" + Type = float32 + } + MHVPS_MANUAL = { + PVName = "EC-GN-P01-PMF:PSU0000-EREF-MSP" + Type = float32 + } + MHVPS_MM = { + PVName = "EC-GN-P01-PMF:STAT-MANM" + Type = uint32 + } + // Analog Input PVs. + GYA_BPS_MESVOLT = { + PVName = "EC-GN-P01-PB1F:PSU1000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_BPS_MESVOLT = { + PVName = "EC-GN-P01-PB2F:PSU2000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_BPS_MESCURR = { + PVName = "EC-GN-P01-PB1F:PSU1000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_BPS_MESCURR = { + PVName = "EC-GN-P01-PB2F:PSU2000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_APS_MESVOLT = { + PVName = "EC-GN-P01-PA1F:PSU3000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_APS_MESVOLT = { + PVName = "EC-GN-P01-PA2F:PSU4000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_APS_MESCURR = { + PVName = "EC-GN-P01-PA1F:PSU3000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_APS_MESCURR = { + PVName = "EC-GN-P01-PA2F:PSU4000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC1_MESVOLT = { + PVName = "EC-GN-P01-GAF:MOE2810-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC1_MESVOLT = { + PVName = "EC-GN-P01-GBF:MOE2810-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC1_MESCURR = { + PVName = "EC-GN-P01-GAF:MOE2820-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC1_MESCURR = { + PVName = "EC-GN-P01-GBF:MOE2820-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC2_MESVOLT = { + PVName = "EC-GN-P01-GAF:MOE2830-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC2_MESVOLT = { + PVName = "EC-GN-P01-GBF:MOE2830-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC2_MESCURR = { + PVName = "EC-GN-P01-GAF:MRF2910-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC2_MESCURR = { + PVName = "EC-GN-P01-GBF:MRF2910-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_MHVPS_MESVOLT = { + PVName = "EC-GN-P01-PMF:PSU0000-ET-GA" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_MHVPS_MESVOLT = { + PVName = "EC-GN-P01-PMF:PSU0000-ET-GB" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_MHVPS_MESCURR = { + PVName = "EC-GN-P01-PMF:PSU0000-IT-GA" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_MHVPS_MESCURR = { + PVName = "EC-GN-P01-PMF:PSU0000-IT-GB" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + + //Digital Input PVs in Signal-Variable tab. + APS_READY = { + PVName = "EC-GN-P01-PA1F:PSU3000-YSTA" + Type = uint32 + } + GYA_APS_FLT = { + PVName = "EC-GN-P01-PA1F:PSU3000-YFLT" + Type = uint32 + } + GYB_APS_FLT = { + PVName = "EC-GN-P01-PA2F:PSU4000-YFLT" + Type = uint32 + } + BPS_READY = { + PVName = "EC-GN-P01-PB1F:PSU1000-YSTA" + Type = uint32 + } + GYA_BPS_FLT = { + PVName = "EC-GN-P01-PB1F:PSU1000-YFLT" + Type = uint32 + } + GYB_BPS_FLT = { + PVName = "EC-GN-P01-PB2F:PSU2000-YFLT" + Type = uint32 + } + MHVPS_OV = { + PVName = "EC-GN-P01-GAFP:FMC4310-YFLT-OC" + Type = uint32 + } + MHVPS_OC = { + PVName = "EC-GN-P01-GAFP:FMC4310-YFLT-OV" + Type = uint32 + } + MHVPS_FLT = { + PVName = "EC-GN-P01-PMF:PSU0000-YFLT" + Type = uint32 + } + MHVPS_READY = { + PVName = "EC-GN-P01-PMF:PSU0000-TYSTA" + Type = uint32 + } + MHVPS_MODON = { + PVName = "EC-GN-P01-GPF:PSU0000-YSTA-MOD" + Type = uint32 + } + MIS_ITL = { + PVName = "EC-GN-P01-GAFP:FMC4310-YTRP" + Type = uint32 + } + MISB_ITL = { + PVName = "EC-GN-P01-GBFP:FMC4310-YTRP" + Type = uint32 + } + PLC_ITL = { + PVName = "EC-GN-P01-GPS:PLC4110-YTRP" + Type = uint32 + } + PLC_STANDBY = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-ST1R" + Type = uint32 + } + PLC_READY = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-ST2R" + Type = uint32 + } + PLC_ON = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-ST3R" + Type = uint32 + } + PLC_MODE1 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD1" + Type = uint32 + } + PLC_MODE2 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD2" + Type = uint32 + } + PLC_MODE3 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD3" + Type = uint32 + } + PLC_MODE4 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD4" + Type = uint32 + } + PLC_PERMIT = { + PVName = "EC-GN-P01-GPS:PLC4110-CON-GY1PRM" + Type = uint32 + } + PLC_SELECT = { + PVName = "EC-GN-P01-GPS:PLC4110-CON-OPGY1" + Type = uint32 + } + PLC_SYNCMODE = { + PVName = "EC-GN-P01-GPS:PLC4110-YSTA-MPSS" + Type = uint32 + } + PLC_CCPSON = { + PVName = "EC-GN-P01-GPS:PLC4110-YON-CCPS1" + Type = uint32 + } + EXT_TRIG = { + PVName = "EC-GN-P01-GAF:DIO4900-YON" + Type = uint32 + } + + //Digital Output PVs in Variables-signal tab + APS_HVON = { + PVName = "EC-GN-P01-PA1F:PSU3000-CON-HV" + Type = uint32 + } + APS_SWON = { + PVName = "EC-GN-P01-PA1F:PSU3000-CON-SW" + Type = uint32 + } + APS_STOP = { + PVName = "EC-GN-P01-PA1F:PSU3000-CTRP" + Type = uint32 + } + BPS_HVON = { + PVName = "EC-GN-P01-PB1F:PSU1000-CON-HV" + Type = uint32 + } + BPS_SWON = { + PVName = "EC-GN-P01-PB1F:PSU1000-CON-SW" + Type = uint32 + } + BPS_STOP = { + PVName = "EC-GN-P01-PB1F:PSU1000-CTRP" + Type = uint32 + } + BEAM_ON_STAT = { + PVName = "EC-GN-P01-GAFP:FMC4310-YSTA-GAOP" + Type = uint32 + } + DO_REV5 = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV5" + Type = uint32 + } + DO_REV6 = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV6" + Type = uint32 + } + DO_REV7 = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV7" + Type = uint32 + } + DO_REV8 = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV8" + Type = uint32 + } + MHVPS_HVON = { + PVName = "EC-GN-P01-PMF:PSU0000-CON-SW" + Type = uint32 + } + MHVPS_STOP = { + PVName = "EC-GN-P01-PMF:PSU0000-COFF" + Type = uint32 + } + MHVPS_MODSW = { + PVName = "EC-GN-P01-PMF:PSU0000-CON-MOD" + Type = uint32 + } + PCF_FLT = { + PVName = "EC-GN-P01-GPF:PCF4210-CTRP" + Type = uint32 + } + HVARMED = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA1" + Type = uint32 + } + HVINJECTION = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA2" + Type = uint32 + } + RFON = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA3" + Type = uint32 + } + FHPS_RU = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP" + Type = uint32 + } + SCM_RU = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP" + Type = uint32 + } + SCM_RD = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN" + Type = uint32 + } + CCPS_IN_OPERATION = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-TR" + Type = uint32 + } + //Input PVs in Variables-Operation tab. + PREP_MODE = { + PVName = "EC-GN-P01-GAF:STAT-PREP-MODE" + Type = uint32 + } + SHORT_PULSE_MODE = { + PVName = "EC-GN-P01-GAF:STAT-SHORT-PULSE" + Type = uint32 + } + + MHVPS_DT = { + PVName = "EC-GN-P01-PMF:STAT-DT-HVON" + Type = uint32 + } + APS_HVON_DT = { + PVName = "EC-GN-P01-PA1F:STAT-DT-HVON" + Type = uint32 + } + APS_SWON_DT = { + PVName = "EC-GN-P01-PA1F:STAT-DT-SWON" + Type = uint32 + } + BPS_HVON_DT = { + PVName = "EC-GN-P01-PB1F:STAT-DT-HVON" + Type = uint32 + } + BPS_SWON_DT = { + PVName = "EC-GN-P01-PB1F:STAT-DT-SWON" + Type = uint32 + } + SHOTLEN = { + PVName = "EC-GN-P01-GAF:STAT-DT-SHOTLEN" + Type = uint32 + } + + MD1_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD1-LIM" + Type = uint32 + } + MD2_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD2-LIM" + Type = uint32 + } + MD3_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD3-LIM" + Type = uint32 + } + MD4_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD4-LIM" + Type = uint32 + } + + FHPS_MANM = { + PVName = "EC-GN-P01-GAF-FHPS:STAT-MANM" + Type = uint32 + } + + CSV_LOAD = { + PVName = "EC-GN-P01-GAF:STAT-CSV-LOAD" + Type = uint32 + } + CSV_NAME = { + PVName = "EC-GN-P01-GAF:STAT-CSV-NAME" + Type = char8 + NumberOfElements = 40 + } + RESET_FLT = { + PVName = "EC-GN-P01-GPF:STAT-RST-FLT" + //PVName = "EC-GN-P01-GPS-MEM:CMD-CONALARMRESET-HMI" + Type = uint32 + } + + //Input PVs in Variables-JASTEC tab. + MCPS_ACT_SP = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-ACT-SET-MI" + Type = uint32 + } + MCPS_TRG_CURR_MANUAL = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MI" + Type = float32 + } + MCPS_ACT_RB = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB" + Type = uint32 + } + MCPS_CURR_RB = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-RB" + Type = uint32 + } + GYA_MCPS_CURR_MON = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON" + Type = float32 + } + GYB_MCPS_CURR_MON = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON" + Type = float32 + } + MCPS_VOLT_MON = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-VOLT-MON" + Type = uint32 + } + MCPS_SWP_RB = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-SWP-RB" + Type = uint32 + } + MCPS_SWP_LIM = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-SWP-LIM" + Type = uint32 + } + MCPS_ERR = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-ERR" + Type = uint32 + } + MCPS_MM = { + PVName = "EC-GN-P01-GAF-MCPS:STAT-MANM" + Type = uint32 + } + //GCPS PVs + GCPS_ACT_SP = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MI" + Type = uint32 + } + GCPS_TRG_CURR_MANUAL = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MI" + Type = float32 + } + GCPS_ACT_RB = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB" + Type = uint32 + } + GCPS_CURR_RB = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-RB" + Type = uint32 + } + GYA_GCPS_CURR_MON = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON" + Type = float32 + } + GYB_GCPS_CURR_MON = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON" + Type = float32 + } + GCPS_VOLT_MON = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-VOLT-MON" + Type = uint32 + } + GCPS_SWP_RB = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-SWP-RB" + Type = uint32 + } + GCPS_SWP_LIM = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-SWP-LIM" + Type = uint32 + } + GCPS_ERR = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-ERR" + Type = uint32 + } + GCPS_MM = { + PVName = "EC-GN-P01-GAF-GCPS:STAT-MANM" + Type = uint32 + } + //Input PVs in Variables-kikusui tab. + FHPS_REM_RB = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-REM-RB" + Type = uint32 + } + FHPS_OUTON_RB = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB" + Type = uint32 + } + FHPS_CURR_RB = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-CURR-RB" + Type = uint32 + } + FHPS_ACV_RB = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-ACV-RB" + Type = uint32 + } + FHPS_FRQ_RB = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-FRQ-RB" + Type = uint32 + } + FHPS_SOUR_ON_RB = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-RB" + Type = uint32 + } + FHPS_MEAS_ACV = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV" + Type = float32 + } + GYA_FHPS_MEAS_ACI = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACI" + Type = float32 + } + GYB_FHPS_MEAS_ACI = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACI" + Type = float32 + } + FHPS_MEAS_ACP = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACP" + Type = uint32 + } + FHPS_MEAS_FRQ = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-FRQ" + Type = uint32 + } + FHPS_ERR = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-ERROR" + Type = uint32 + } + FHPS_AUTO_TAGV = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV" + Type = float32 + } + FHPS_AUTO_TIME = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-RU-TIME" + Type = float32 + } + FHPS_AUTO_START = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START" + Type = uint32 + } + + CCPS_REMLOC_RB = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-RB" + Type = uint32 + } + CCPS_OUTON_RB = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-OUTON-RB" + Type = uint32 + } + CCPS_CURR_RB = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-CURR-RB" + Type = uint32 + } + CCPS_DCV_RB = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-DCV-RB" + Type = uint32 + } + CCPS_RANG_RB = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-RANG-RB" + Type = uint32 + } + CCPS_SOUR_ON_RB = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-RB" + Type = uint32 + } + CCPS_MEAS_DCV = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCV" + Type = uint32 + } + GYA_CCPS_MEAS_DCI = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCI" + Type = float32 + } + GYB_CCPS_MEAS_DCI = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCI" + Type = float32 + } + CCPS_MEAS_DCP = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCP" + Type = uint32 + } + CCPS_ERR = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-ERROR" + Type = uint32 + } + CCPS_OUTPUT_AMP = { + PVName = "EC-GN-P01-GAF-CCPS:STAT-AMP" + Type = float32 + } + CCPS_OUTPUT_FREQ = { + PVName = "EC-GN-P01-GAF-CCPS:STAT-FREQ" + Type = float32 + } + CCPS_OUTPUT_OFFS = { + PVName = "EC-GN-P01-GAF-CCPS:STAT-OFFS" + Type = float32 + } + //PXI Board status PVs + PXI6259_0 = { + PVName = "EC-GN-HWCF:6259-0-STATUS" + Type = uint32 + } + PXI6259_1 = { + PVName = "EC-GN-HWCF:6259-1-STATUS" + Type = uint32 + } + PXI6528_0 = { + PVName = "EC-GN-HWCF:6528-0-STATUS" + Type = uint32 + } + PXI6528_1 = { + PVName = "EC-GN-HWCF:6528-1-STATUS" + Type = uint32 + } + PXI6368_0 = { + PVName = "EC-GN-HWCF:6368-0-STATUS" + Type = uint32 + } + PXI6368_1 = { + PVName = "EC-GN-HWCF:6368-1-STATUS" + Type = uint32 + } + } + } + +EPICSCAOutput = { + Class = "EPICSCA::EPICSCAOutput" + CPUMask = "0x100" //change from 0x200 + StackSize = "10000000" + NumberOfBuffers = 2 + Signals = { + PCF_STATE = { + PVName = "EC-GN-P01-GAF:STAT-SM" + Type = uint32 + } + //Analog Output PVs in Variables-signal tab. + FHPS_REF = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-EREF" + Type = float32 + } + BPS_REF = { + PVName = "EC-GN-P01-PB1F:PSU1000-EREF" + Type = float32 + } + APS_REF = { + PVName = "EC-GN-P01-PA1F:STAT-EREF-CONV.A" + Type = float32 + } + MHVPS_REF = { + PVName = "EC-GN-P01-PMF:STAT-EREF-CALC.A" + Type = float32 + } + + //Digital Output PVs in Variables-signal tab. + APS_STOP = { + PVName = "EC-GN-P01-PA1F:PSU3000-CTRP" + Type = uint32 + } + + BPS_STOP = { + PVName = "EC-GN-P01-PB1F:PSU1000-CTRP" + Type = uint32 + } + + BEAM_ON_STAT = { + PVName = "EC-GN-P01-GAFP:FMC4310-YSTA-GAOP" + Type = uint32 + } + + MHVPS_STOP = { + PVName = "EC-GN-P01-PMF:PSU0000-COFF" + Type = uint32 + } + PCF_FLT = { + PVName = "EC-GN-P01-GPF:PCF4210-CTRP" + Type = uint32 + } + HVARMED = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA1" + Type = uint32 + } + HVINJECTION = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA2" + Type = uint32 + } + RFON = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA3" + Type = uint32 + } + + //Output PVs in Variables-operation tab. + MHVPS_PREP_WF = { + PVName = "EC-GN-P01-PMF:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + + } + BPS_PREP_WF = { + PVName = "EC-GN-P01-PB1F:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + APS_PREP_WF = { + PVName = "EC-GN-P01-PA1F:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + FHPS_PREP_WF = { + PVName = "EC-GN-P01-GAF-FHPS:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + MCPS_PREP_WF = { + PVName = "EC-GN-P01-GAF-MCPS:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GCPS_PREP_WF = { + PVName = "EC-GN-P01-GAF-GCPS:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + PREP_TIME_WF = { + PVName = "EC-GN-P01-GAF:STAT-PREP-TIME-WF" + Type = int32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + BEAM_ON_TIME = { + PVName = "EC-GN-P01-GAF:STAT-BEAMON-TIME" + Type = uint32 + } + ELAPSED_TIME = { + PVName = "EC-GN-P01-GAF:STAT-ELAPSED" + Type = uint32 + } + SHOT_ID = { + PVName = "EC-GN-P01-GAF:STAT-SHOT-ID" + Type = uint32 + } + + CSV_LOADED = { + PVName = "EC-GN-P01-GAF:STAT-CSV-LOADED" + Type = uint32 + } + CSV_ERR = { + PVName = "EC-GN-P01-GAF:STAT-CSV-ERR" + Type = uint32 + } + + //Output PVs in Variables-jastec tab. + MCPS_TRG_CURR_SET = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MO" + Type = float32 + } + MCPS_ACT_SP = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MO" + Type = uint32 + } + GCPS_TRG_CURR_SET = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MO" + Type = float32 + } + GCPS_ACT_SP = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MO" + Type = uint32 + } + + //Output PVs in Variables-kikusui tab. + CCPS_REF = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-EREF" + Type = float32 + } + FHPS_AUTO_STAT = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-STAT" + Type = uint32 + } + //Add 20201117 + APS_HVON = { + PVName = "EC-GN-P01-PA1F:PSU3000-CON-HV" + Type = uint32 + } + APS_SWON = { + PVName = "EC-GN-P01-PA1F:PSU3000-CON-SW" + Type = uint32 + } + BPS_HVON = { + PVName = "EC-GN-P01-PB1F:PSU1000-CON-HV" + Type = uint32 + } + BPS_SWON = { + PVName = "EC-GN-P01-PB1F:PSU1000-CON-SW" + Type = uint32 + } + MHVPS_HVON = { + PVName = "EC-GN-P01-PMF:STAT-HVON-CALC.A" + Type = uint32 + } + } + } + // for ESDN packet subscription/publication. + +SDNSubCommands = { + Class = SDN::SDNSubscriber + Topic = ECPC2SCUJA + Interface = enp27s0f0 + CPUs = 0x200 //change from 100 + Locked = 1 + Timeout = 2 + Signals = { + Header = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + Command = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 64 + } + } + } + +SDNReply = { + Class = SDN::SDNPublisher + Topic = SCUJA2ECPC + Interface = enp27s0f0 + CPUs = 0x200 //changed from 0x100 + Locked = 1 + Signals = { + Header = { + Type = uint8 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ReplyStatus = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ReplyWaveformAck = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + //Status (26Bytes?) is not assigned + //GyrotronA measurements + //56Bytes are used as Gyrotron1 Measurements (verified on 2020/10/22) + GYA_MHVPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_MHVPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_BPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_BPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_APS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_APS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC1_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC1_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC2_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC2_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_MCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_GCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_FHPS_MEAS_ACI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_CCPS_MEAS_DCI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + //GyrotronB measurements + GYB_MHVPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_MHVPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_BPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_BPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_APS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_APS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC1_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC1_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC2_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC2_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_MCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_GCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_FHPS_MEAS_ACI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_CCPS_MEAS_DCI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + } + + // Direct HW accesses. Follwing device/port assignment must be consistent with actual wiring. + // NI6259.0 + // APS_SWON BoardId=0, PortId=3.0 + +NI6259 = { + Class = NI6259::NI6259DIO + DeviceName = "/dev/pxi6259" + BoardId = 1 + Signals = { + NI6259Value = { + Type = uint32 + Mask = 0xFF + PortId = 0 + } + } + } + + //NI6528 digital output has logic low == 0 == close relay. ((See Driver Manual.) + //When the program send ON signal, this program writes 0 on the data source. + +NI6528P3 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.1" + Port = 3 + NI6528P3Value = { + NI6528P3Value = { + Type = uint8 + } + } + } + //P3.0 APS_HVON + //P3.1 APS_SWON + //P3.2 APS_Shutdown + //P3.3 BPS_HVON + //P3.4 BPS_SWON + //P3.5 BPS_Shutdown + //P3.6 GY1_Beam_ON_status + //P3.7 RV5 _cRIO + + +NI6528P4 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.1" + Port = 4 + NI6528P4Value = { + NI6528P4Value = { + Type = uint8 + } + } + } + //P4.0 RV6 _cRIO + //P4.1 RV7 _cRIO + //P4.2 RV8 _cRIO + //P4.3 MHVPS_HVON + //P4.4 MHVPS_Shutdown + //P4.5 MHVPS_MOD + //P4.6 PCF_FLT + //P4.7 HVArmed + + +NI6528P5 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.1" + Port = 5 + NI6528P5Value = { + NI6528P5Value = { + Type = uint8 + } + } + } + //P5.0 HVInjection + //P5.1 RFON + //P5.2 FHPS_Rampup_complete + //P5.3 SCM_RU_Complete + //P5.4 SCM_RD_Complete + //P5.5 CCPS_IN_OPERATION + //P5.6 None + //P5.7 None + + } + +States = { + Class = ReferenceContainer + +Disabled = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM GoErrorGAM InDisabledGAM + GoWaitStandbyGAM choiseGAM MCPSGAM GCPSGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM} + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM } + CPUs = 0x400 + } + } + } + +WaitStandby = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM FHPSSetpointGAM FHPSRampupGAM InWaitStandbyGAM + choiseGAM MCPSGAM GCPSGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + GoDisabledGAM GoWaitReadyGAM GoErrorGAM } + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM } + CPUs = 0x400 + } + } + } + +WaitReady = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM WFRecordGAM PreProgrammedGAM FHPSSetpointGAM FHPSRampupGAM InWaitReadyGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + GoWaitPermitGAM GoWaitStandbyFromReadyGAM GoErrorGAM } + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM } + CPUs = 0x400 + } + } + } + +WaitPermit = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM WFRecordGAM PreProgrammedGAM FHPSSetpointGAM FHPSRampupGAM InWaitPermitGAM + choiseGAM EPICSOutputGAM GoWaitReadyFromWaitPermitGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + GoWaitHVONGAM GoWaitHVON_PREP_GAM GoWaitHVON_SDN_GAM GoWaitHVON_SDN_PREP_GAM GoErrorGAM } + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM } + CPUs = 0x400 + } + } + } + + //Real-Time state for HVPS sequence timing control. + +WaitHVON = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM FHPSSetpointGAM FHPSRampupGAM InWaitHVONGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM } + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM + GAMRealTimeStateMachine NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x400 + } +// +Thread4 = { +// Class = RealTimeThread +// Functions = {Timer10HzGAM GAMExecTime } +// CPUs = 0x800 +// } + } + } + +WaitHVON_SDN = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM FHPSRampupGAM InWaitHVON_SDNGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM } + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM + GAMSDNRealTimeStateMachine terminalInterfaceGAM NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x400 + } + } + } + +WaitHVON_PREP = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM PreProgrammedGAM FHPSRampupGAM InWaitHVON_PREPGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM } + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM + GAMRealTimeStateMachine NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x400 + } + } + } + +WaitHVON_SDN_PREP = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM PreProgrammedGAM FHPSRampupGAM InWaitHVON_SDN_PREPGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM} + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM + GAMSDNRealTimeStateMachine terminalInterfaceGAM NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x400 + } + } + } + + +Error = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM InErrorGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + ExitedHVArmedInjectionRFONGAM ResetPSsGAM + FromErrorToWaitStandbyGAM ErrorGAM choiseGAM EPICSOutputGAM FHPSSetpointGAM FHPSRampupGAM CCPSWaveformGAM} + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM } + CPUs = 0x400 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronB_FY19_P1.cfg b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronB_FY19_P1.cfg new file mode 100644 index 0000000..6fb3d04 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronB_FY19_P1.cfg @@ -0,0 +1,4946 @@ +// LoggerService node: See /var/log/messages file. +// +LoggerService = { +// Class = LoggerService +// CPUs = 0x8000 +// StackSize = 32768 +// NumberOfLogPages = 128 +// +SysLogger = { +// Class = SysLogger +// Format = "EtOoFmC" +// PrintKeys = 1 +// Ident = "JAGyA" +// } +// } + +// StateMachine node ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +Start = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +DISABLED = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITSTANDBY = { + Class = ReferenceContainer + +GoWaitReady = { + Class = StateMachineEvent + NextState = "WAITREADY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitReady + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoDisabled = { + Class = StateMachineEvent + NextState = "DISABLED" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Disabled + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITREADY = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITPERMIT = { + Class = ReferenceContainer + +GoWaitReady = { + Class = StateMachineEvent + NextState = "WAITREADY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitReady + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON = { + Class = StateMachineEvent + NextState = "WAITHVON" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON_SDN = { + Class = StateMachineEvent + NextState = "WAITHVON_SDN" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON_SDN + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON_PREP = { + Class = StateMachineEvent + NextState = "WAITHVON_PREP" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON_PREP + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON_SDN_PREP = { + Class = StateMachineEvent + NextState = "WAITHVON_SDN_PREP" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON_SDN_PREP + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + // HVPS sequence control states. + +WAITHVON = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITHVON_SDN = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITHVON_PREP = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITHVON_SDN_PREP = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + // Error State (Enter by HVPS errors) + +ERROR = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } +} + +// RealTime Application node ++JAGyrotronRTApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + //Timer GAM for thread 1. + +Timer1kHzGAM = { + Class = IOGAM + InputSignals = { + Counter = { + DataSource = Timer1kHz + Type = uint32 + Frequency = 1000 //Hz + } + Time = { + DataSource = Timer1kHz + Type = uint32 + } + } + OutputSignals = { + Counter1kHz = { + DataSource = DDB1 + Type = uint32 + } + Time1kHz = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM to update PCF state-machine state + +InErrorGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 1 + } + } + } + +InDisabledGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 2 + } + } + } + +InWaitStandbyGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 3 + } + } + } + +InWaitReadyGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 4 + } + } + } + +InWaitPermitGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 5 + } + } + } + +InWaitHVONGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 6 + } + } + } + +InWaitHVON_PREPGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 7 + } + } + } + +InWaitHVON_SDNGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 8 + } + } + } + +InWaitHVON_SDN_PREPGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 9 + } + } + } + + // Copy data from DDB1 to EPICSCAOutput DataSource. + +EPICSOutputGAM = { + Class = IOGAM + InputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + } + MCPS_ACT_SP = { + DataSource = DDB1 + Type = uint32 + } + GCPS_ACT_SP = { + DataSource = DDB1 + Type = uint32 + } + BPS_OUT = { + DataSource = DDB1 + Type = float32 + } + APS_OUT = { + DataSource = DDB1 + Type = float32 + } + MCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + GCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + FHPS_REF = { + DataSource = DDB1 + Type = float32 + } + CSV_LOADED = { + DataSource = DDB1 + Type = uint32 + } + CSV_ERR = { + DataSource = DDB1 + Type = uint32 + } + ELAPSED_TIME = { + DataSource = DDB1 + Type = uint32 + } + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + RFON = { + DataSource = DDB1 + Type = uint32 + } + MHVPS_OUT = { + DataSource = DDB1 + Type = float32 + } + PREP_TIME_WF = { + DataSource = DDB1 + Type = int32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + MHVPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + BPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + APS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + MCPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GCPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + FHPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + CCPS_REF = { + DataSource = DDB1 + Type = float32 + } + MHVPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + APS_STOP = { + DataSource = DDB1 + Type = uint32 + } + BPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + BEAM_ON_TIME = { + DataSource = DDB1 + Type = uint32 + } + PCF_FLT = { + DataSource = DDB1 + Type = uint32 + } + BEAM_ON_STAT = { + DataSource = DDB1 + Type = uint32 + } + SHOT_ID = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + FHPS_AUTO_STAT = { + DataSource = DDB1 + Type = uint32 + } + //Add 20201117 + APS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + APS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + MHVPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + PCF_STATE = { + DataSource = EPICSCAOutput + Type = uint32 + } + MCPS_ACT_SP = { + DataSource = EPICSCAOutput + Type = uint32 + } + GCPS_ACT_SP = { + DataSource = EPICSCAOutput + Type = uint32 + } + BPS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + APS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + MCPS_TRG_CURR_SET = { + DataSource = EPICSCAOutput + Type = float32 + } + GCPS_TRG_CURR_SET = { + DataSource = EPICSCAOutput + Type = float32 + } + FHPS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + CSV_LOADED = { + DataSource = EPICSCAOutput + Type = uint32 + } + CSV_ERR = { + DataSource = EPICSCAOutput + Type = uint32 + } + ELAPSED_TIME = { + DataSource = EPICSCAOutput + Type = uint32 + } + HVARMED = { + DataSource = EPICSCAOutput + Type = uint32 + } + HVINJECTION = { + DataSource = EPICSCAOutput + Type = uint32 + } + RFON = { + DataSource = EPICSCAOutput + Type = uint32 + } + + MHVPS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + PREP_TIME_WF = { + DataSource = EPICSCAOutput + } + MHVPS_PREP_WF = { + DataSource = EPICSCAOutput + } + BPS_PREP_WF = { + DataSource = EPICSCAOutput + } + APS_PREP_WF = { + DataSource = EPICSCAOutput + } + MCPS_PREP_WF = { + DataSource = EPICSCAOutput + } + GCPS_PREP_WF = { + DataSource = EPICSCAOutput + } + FHPS_PREP_WF = { + DataSource = EPICSCAOutput + } + CCPS_REF = { + DataSource = EPICSCAOutput + } + MHVPS_STOP = { + DataSource = EPICSCAOutput + Type = uint32 + } + APS_STOP = { + DataSource = EPICSCAOutput + Type = uint32 + } + BPS_STOP = { + DataSource = EPICSCAOutput + Type = uint32 + } + BEAM_ON_TIME = { + DataSource = EPICSCAOutput + Type = uint32 + } + PCF_FLT = { + DataSource = EPICSCAOutput + } + BEAM_ON_STAT = { + DataSource = EPICSCAOutput + } + SHOT_ID = { + DataSource = EPICSCAOutput + } + FHPS_AUTO_STAT = { + DataSource = EPICSCAOutput + } + //Added 20201117 + APS_HVON = { + DataSource = EPICSCAOutput + } + APS_SWON = { + DataSource = EPICSCAOutput + } + BPS_HVON = { + DataSource = EPICSCAOutput + } + BPS_SWON = { + DataSource = EPICSCAOutput + } + MHVPS_HVON = { + DataSource = EPICSCAOutput + } + } + } + + // Message GAM in Disabled state. + +GoWaitStandbyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1} + Comparators = {EQUALS} + InputSignals = { + PLC_SELECT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + +GoWaitStandbyFromReadyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0} + Comparators = {EQUALS} + InputSignals = { + PLC_STANDBY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + + // MCPS, GCPS PV to DDB1 + +GCPSGAM = { + Class = IOGAM + InputSignals = { + GCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + GCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + } + } + +MCPSGAM = { + Class = IOGAM + InputSignals = { + MCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + MCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + } + } + // Message GAM in Standby state. + +GoDisabledGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0} + Comparators = {EQUALS} + InputSignals = { + PLC_SELECT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoDisabled + } + } + + //GAM in WaitReady state. Check MCPS,GCPS,FHPS state for state transition. + +GoWaitReadyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {3 3 1} + ExpectedFloatValues = {0 0 0} + Comparators = {EQUALS GREATER EQUALS GREATER EQUALS GREATER} + InputSignals = { + MCPS_ACT_RB = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_MCPS_CURR_MON = { + DataSource = EPICSCAInput + Type = float32 + } + GCPS_ACT_RB = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_GCPS_CURR_MON = { + DataSource = EPICSCAInput + Type = float32 + } + FHPS_RU = { + DataSource = EPICSCAInput + Type = uint32 + } + FHPS_MEAS_ACV = { + DataSource = EPICSCAInput + Type = float32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitReady + } + } + + //GAM for prepro + +WFRecordGAM = { + Class = JAWFRecordGAM + Directory = "../Configurations" //TODO: Enter directory path for prepro files. + InputSignals = { + CSV_LOAD = { + DataSource = EPICSCAInput + Type = uint32 + } + Filename = { + Alias = CSV_NAME + DataSource = EPICSCAInput + } + } + OutputSignals = { + PREP_TIME_WF = { + DataSource = DDB1 + } + MHVPS_PREP_WF = { + DataSource = DDB1 + } + BPS_PREP_WF = { + DataSource = DDB1 + } + APS_PREP_WF = { + DataSource = DDB1 + } + MCPS_PREP_WF = { + DataSource = DDB1 + } + GCPS_PREP_WF = { + DataSource = DDB1 + } + FHPS_PREP_WF = { + DataSource = DDB1 + } + } + } + +PreProgrammedGAM = { + Class = JAPreProgrammedGAM + Directory = "../Configurations" // TODO: Enter the directory path for prepro files. + PreProgrammedPeriodMs = 1 // Parameter update periods in ms. + InputSignals = { + CSV_LOAD = { + DataSource = EPICSCAInput + Type = uint32 + } + Filename = { + Alias = CSV_NAME + DataSource = EPICSCAInput + } + FHPS_REF = { + Alias = FHPS_AUTO_TAGV + DataSource = EPICSCAInput + Type = float32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + GYA_PREPRO_TIME = { + DataSource = DDB1 + Type = int32 + } + MHVPS_REF = { + DataSource = DDB1 + Type = float32 + } + BPS_REF = { + DataSource = DDB1 + Type = float32 + } + APS_REF = { + DataSource = DDB1 + Type = float32 + } + MCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + GCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + FHPS_PrePro = { + DataSource = DDB1 + Type = float32 + } + CSV_LOADED = { + DataSource = DDB1 + Type = uint32 + } + CSV_ERR = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM in WaitReady state. Check PLC_READY and CCPS_IN_OPERATION status. + +GoWaitPermitGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 1} //20201222 modified. In the past, 0 1. + Comparators = {EQUALS EQUALS} + InputSignals = { + CCPS_IN_OPERATION = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_READY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitPermit + } + } + + //GAM in WaitPermit state. Check Permit and States of Operation Modes. + +GoWaitReadyFromWaitPermitGAM = { + Class = JAMessageGAM + Operation = OR + ExpectedIntValues = {0 0} + Comparators = {EQUALS EQUALS} + InputSignals = { + PLC_STANDBY = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_READY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitReady + } + } + +GoWaitHVONGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0 0 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON + } + } + +GoWaitHVON_PREP_GAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0 1 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON_PREP + } + } + +GoWaitHVON_SDN_GAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 0 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON_SDN + } + } + +GoWaitHVON_SDN_PREP_GAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 1 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON_SDN_PREP + } + } + + //GAM in WaitHVON_xx states. If PLC_READY is zero, goto WaitStandby. + +FromWaitHVONToWaitStandby = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0} + Comparators = {EQUALS} + InputSignals = { + PLC_READY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + //GAM in WaitHVON_xx states. If PLC_PERMIT is zero, goto WaitPermit. + +FromWaitHVONToWaitPermit = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0 0 0 0 0 0} //modified 20201222 + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} //modified 20201222 + InputSignals = { + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + //add 20201222 + APS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + MHVPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + APS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + }//20201222 + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitPermit + } + } + + // Check the selected mode, and check maximum pulse length. Use with a StateMachineGAM + +ModeLimitGAM = { + Class = JAModeControlGAM + InputSignals = { + PLC_MODE1 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD1_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_MODE2 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD2_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_MODE3 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD3_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_MODE4 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD4_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + Time = { + DataSource = DDB1 + Type = uint32 + } + HVInjection = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + MODE_SHOTLEN_FLAG = { + DataSource = DDB1 + Type = uint32 + } + } + } + + // State notify GAMs. These GAMs are in all WaitHVON states. + +writeBeamONStateGAM = { + Class = IOGAM + InputSignals = { + BEAM_ON_STAT = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + BEAM_ON_STAT = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeHVArmedStateGAM = { + Class = IOGAM + InputSignals = { + HVARMED = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeHVInjectionStateGAM = { + Class = IOGAM + InputSignals = { + HVINJECTION = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeRFONStateGAM = { + Class = IOGAM + InputSignals = { + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + RFON = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeBeamONTimeGAM = { + Class = IOGAM + InputSignals = { + BeamONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + ELAPSED_TIME = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeRFONTimeGAM = { + Class = IOGAM + InputSignals = { + RFONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + BEAM_ON_TIME = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM for trianguler waveform generation. + +CCPSWaveformGAM = { + Class = JATriangleWaveGAM + InputSignals = { + Frequency = { + Alias = CCPS_OUTPUT_FREQ + DataSource = EPICSCAInput + Type = float32 + } + Amplitude = { + Alias = CCPS_OUTPUT_AMP + DataSource = EPICSCAInput + Type = float32 + } + Offset = { + Alias = CCPS_OUTPUT_OFFS + DataSource = EPICSCAInput + Type = float32 + } + PLCSTANDBY = { + Alias = PLC_STANDBY + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + CCPS_REF = { + DataSource = DDB1 + Type = float32 + } + } + } + //GAM for FHPS ramping up operation. + +FHPSSetpointGAM = { + Class = IOGAM + InputSignals = { + FHPS_AUTO_TAGV = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + FHPS_TAGV = { + DataSource = DDB1 + Type = float32 + } + } + } + +FHPSRampupGAM = { + Class = JARampupGAM + InputSignals = { + Currspv = { + Alias = FHPS_REF + DataSource = DDB1 + Type = float32 + } + Targetv = { + Alias = FHPS_TAGV + DataSource = DDB1 + Type = float32 + } + Time = { + Alias = FHPS_AUTO_TIME + DataSource = EPICSCAInput + Type = float32 + } + Start = { + Alias = FHPS_AUTO_START + DataSource = EPICSCAInput + Type = uint32 + } + PLC_STANDBY = { + Alias = PLC_STANDBY + DataSource = EPICSCAInput + Type = uint32 + } + MANUAL_AUTO = { + Alias = FHPS_MANM + DataSource = EPICSCAInput + Type = uint32 + } + FHPS_PrePro = { + DataSource = DDB1 + Type = float32 + } + } + OutputSignals = { + FHPS_REF = { + DataSource = DDB1 + Type = float32 + } + FHPS_AUTO_STAT = { + DataSource = DDB1 + Type = uint32 + } + } + } + //GAM for error handling. + // GAM that sets ERROR and STOP FLAGS for APS, BPS and MHVPS when we enter Error state and resets them when we leave Error state + +ErrorGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = AND + ExpectedValues = {1 0 0 0 0 0 0 0 0 0 0} + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} + Values = {0 0 0} + InputSignals = { + // Conditional signals + RESET_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + MHVPS_STOP_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + APS_STOP_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + BPS_STOP_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + MHVPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + APS_STOP = { + DataSource = DDB1 + Type = uint32 + } + BPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + } + } + +StopRequestGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {1 1 1 1 1 1 1 1 1 1} + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} + Values = {1} + InputSignals = { + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + StopRequest_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + StopRequest = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //Test whether board status are stable + +GAMDisplayBoardStatus = { + Class = IOGAM + InputSignals = { + CCPS_OUTPUT_OFFS = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + CCPS_OUTPUT_FREQ_DISP = { + DataSource = Display + Type = float32 + } + } + } + //Check PXI board status. + +PXI6259ErrorGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {0 0 0 0} + Comparators = {GREATER GREATER GREATER GREATER} + Values = {1} + InputSignals = { + // Conditional signals + PXI6259_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6259_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6528_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6528_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + PCF_FLT_6259_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT_6259 = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PXI6368Error03GAM = {// detect Hardware error (status number 3) for PXI6368 boards. + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {3 3} + Comparators = {EQUALS EQUALS} + Values = {1} + InputSignals = { + PXI6368_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6368_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + PCF_FLT_6368_ERRNO_03_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT_6368_ERRNO_03 = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PXI6368Error04GAM = {// detect No board error (status number 4) for PXI6368 boards. + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {4 4} + Comparators = {EQUALS EQUALS} + Values = {1} + InputSignals = { + PXI6368_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6368_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + PCF_FLT_6368_ERRNO_04_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT_6368_ERRNO_04 = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PXIErrorGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {0 0 0} + Comparators = {GREATER GREATER GREATER} + Values = {1} + InputSignals = { + PCF_FLT_6368_ERRNO_03 = { + DataSource = DDB1 + Type = uint32 + } + PCF_FLT_6368_ERRNO_04 = { + DataSource = DDB1 + Type = uint32 + } + PCF_FLT_6259 = { + DataSource = DDB1 + Type = uint32 + } + // Default values + PCF_FLT_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT = { + DataSource = DDB1 + Type = uint32 + } + } + } + + + +FromErrorToWaitStandbyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 0 0 0 0 0 0 0 0 0 0} + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} + InputSignals = { + RESET_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + // From any state to Error state. + +GoErrorGAM = { + Class = JAMessageGAM + Operation = OR + ExpectedIntValues = {1 1 1 1 1 1 1 1 1 1} + InputSignals = { + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoError + } + } + // Reset HVPS outputs. ToDo: Fix to access NI d.s. + +ResetPSsGAM = { + Class = ConstantGAM + OutputSignals = { + MHVPS_HVON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + BPS_HVON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + BPS_SWON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + APS_HVON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + APS_SWON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + } + // Update status. ToDo: Fix to access NI d.s. + +ExitedHVArmedInjectionRFONGAM = { + Class = JAConditionalSignalUpdateGAM + Values = {0 0 0} + InputSignals = { + // Condition signals + // Default output values + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + RFON = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + RFON = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM for SDN communication.(ProcessWF:thread1, Subscribe/Publish:thread2) + +SDNCommandGAM = { + Class = IOGAM + InputSignals = { + Command = { + DataSource = SDNSubCommands + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 64 + Ranges = {{0 0}} + // TODO uncomment this for release/testing + //Frequency = 1 + } + ESDNTime = { + DataSource = SDNSubCommands + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + OutputSignals = { + Command = { + DataSource = RealTimeThreadAsyncBridge + Type = uint16 + } + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + } + } + + +SDNReplyGAM = { + Class = IOGAM + InputSignals = { + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + WaveformPacketID = { + DataSource = DDB1 + Type = uint16 + } + GYA_BPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_BPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_BPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_BPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_APS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_APS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_APS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_APS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC1_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC1_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC1_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC1_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC2_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC2_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC2_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC2_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_MHVPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_MHVPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_MHVPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_MHVPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_MCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYB_MCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYA_GCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYB_GCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYA_FHPS_MEAS_ACI = { + DataSource = EPICSCAInput + } + GYB_FHPS_MEAS_ACI = { + DataSource = EPICSCAInput + } + GYA_CCPS_MEAS_DCI = { + DataSource = EPICSCAInput + } + GYB_CCPS_MEAS_DCI = { + DataSource = EPICSCAInput + } + } + OutputSignals = { + ESDNTime = { + DataSource = SDNReply + Type = uint32 + Trigger = 1 + } + ReplyWaveformAck = { + DataSource = SDNReply + Type = uint16 + } + GYA_BPS_MESVOLT = { + DataSource = SDNReply + } + GYB_BPS_MESVOLT = { + DataSource = SDNReply + } + GYA_BPS_MESCURR = { + DataSource = SDNReply + } + GYB_BPS_MESCURR = { + DataSource = SDNReply + } + GYA_APS_MESVOLT = { + DataSource = SDNReply + } + GYB_APS_MESVOLT = { + DataSource = SDNReply + } + GYA_APS_MESCURR = { + DataSource = SDNReply + } + GYB_APS_MESCURR = { + DataSource = SDNReply + } + GYA_ARC1_MESVOLT = { + DataSource = SDNReply + } + GYB_ARC1_MESVOLT = { + DataSource = SDNReply + } + GYA_ARC1_MESCURR = { + DataSource = SDNReply + } + GYB_ARC1_MESCURR = { + DataSource = SDNReply + } + GYA_ARC2_MESVOLT = { + DataSource = SDNReply + } + GYB_ARC2_MESVOLT = { + DataSource = SDNReply + } + GYA_ARC2_MESCURR = { + DataSource = SDNReply + } + GYB_ARC2_MESCURR = { + DataSource = SDNReply + } + GYA_MHVPS_MESVOLT = { + DataSource = SDNReply + } + GYB_MHVPS_MESVOLT = { + DataSource = SDNReply + } + GYA_MHVPS_MESCURR = { + DataSource = SDNReply + } + GYB_MHVPS_MESCURR = { + DataSource = SDNReply + } + GYA_MCPS_CURR_MON = { + DataSource = SDNReply + } + GYB_MCPS_CURR_MON = { + DataSource = SDNReply + } + GYA_GCPS_CURR_MON = { + DataSource = SDNReply + } + GYB_GCPS_CURR_MON = { + DataSource = SDNReply + } + GYA_FHPS_MEAS_ACI = { + DataSource = SDNReply + } + GYB_FHPS_MEAS_ACI = { + DataSource = SDNReply + } + GYA_CCPS_MEAS_DCI = { + DataSource = SDNReply + } + GYB_CCPS_MEAS_DCI = { + DataSource = SDNReply + } + } + } + //Write SDN waveform data into PS setpoint PV. + + // Timer for SDN thread. + +TimeSDNGAM = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = TimerSDN + Type = uint32 + } + Counter = { + DataSource = TimerSDN + Type = uint32 + Frequency = 1000 //operation:1k(=1ms cyc), debug:10 + } + RTThreadPerf = { + DataSource = Timings + Alias = "WaitHVON.Thread3_CycleTime" + Type = uint32 + } + } + OutputSignals = { + TimeSDN = { + DataSource = DDB1 + Type = uint32 + } + CounterSDN = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerfSDN = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM for realtime statemachine + +Timer100kHzGAM = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = Timer + Type = uint32 + } + Counter = { + DataSource = Timer + Type = uint32 + Frequency = 200000 //operation:100k(=10us cyc), debug:10 + } + RTThreadPerf = { + DataSource = Timings + Alias = "WaitHVON.Thread3_CycleTime" + Type = uint32 + } + } + OutputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerf = { + DataSource = DDB1 + Type = uint32 + } + } + } + + // Digital Output port access. (These GAMs are different from GYA.) + // EPICS PV to one uint8 variable + +NI6528P3GAM = { + Class = JABitSumGAM + InputSignals = { + APS_HVON = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_SWON = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_STOP = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_HVON = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_SWON = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_STOP = { + DataSource = EPICSCAInput + Type = uint32 + } + BEAM_ON_STAT = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV5 = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + NI6528P3CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P4GAM = { + Class = JABitSumGAM + InputSignals = { + DO_REV6 = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV7 = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV8 = { + DataSource = EPICSCAInput + Type = uint32 + } + None1 = { + DataSource = DDB1 + Type = uint32 + Defualt = 0 + } + None2 = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + None3 = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + HVARMED = { + DataSource = EPICSCAInput + Type = uint32 + } + HVINJECTION = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + NI6528P4CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P4GYAGAM = { + Class = JABitSumGAM + InputSignals = { + DO_REV6_GYA = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV7_GYA = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV8_GYA = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_HVON = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_STOP = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_MODSW = { + DataSource = EPICSCAInput + Type = uint32 + } + PCF_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + HVARMED_GYA = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + NI6528P4GYACurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P5GAM = { + Class = JABitSumGAM + InputSignals = { + RFON = { + DataSource = EPICSCAInput + Type = uint32 + } + FHPS_RU = { + DataSource = EPICSCAInput + Type = uint32 + } + SCM_RU = { + DataSource = EPICSCAInput + Type = uint32 + } + CCPS_IN_OPERATION = { + DataSource = EPICSCAInput + Type = uint32 + } + REV2_PLC = { + DataSource = EPICSCAInput + Type = uint32 + } + REV3_PLC = { + DataSource = EPICSCAInput + Type = uint32 + } + None4 = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + None5 = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + NI6528P5CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + // reversed uint8 variable (value to write on port.) + +NI6528P3PV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P3CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P3PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P4PV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P4CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P4PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P4GYAPV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P4GYACurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P4GYAPortValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P5PV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P5CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P5PortValue = { + DataSource = NI6528P5 + Type = uint8 + } + } + } + // write a uint8 port value to PXI data source. + +NI6528P3WriteGAM = { + Class = IOGAM + InputSignals = { + NI6528P3PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P3Value = { + DataSource = NI6528P3 + Type = uint8 + } + } + } + +NI6528P4WriteGAM = { + Class = IOGAM + InputSignals = { + NI6528P4PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P4Value = { + DataSource = NI6528P4 + Type = uint8 + } + } + } + +NI6528P4GYAWriteGAM = { + Class = IOGAM + InputSignals = { + NI6528P4GYAPortValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P4GYAValue = { + DataSource = NI6528P4GYA + Type = uint8 + } + } + } + + //Thread3 pulse parameter EPICS PVs read. + +GAMEPICSCA = { + Class = IOGAM + InputSignals = { + MHVPS_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_HVON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_SWON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_HVON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_SWON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + SHOTLEN = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ON = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + MHVPS_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + SHOTLEN = { + DataSource = DDB1 + Type = uint32 + } + PLC_ON = { + DataSource = DDB1 + Type = uint32 + } + } + } + + // Real-Time state machine GAMs + +GAMRealTimeStateMachine = { + Class = JARTStateMachineGAM + ConditionTrigger = 1 + mhvps_hvon = 4 + aps_hvon = 1 + aps_swon = 16 + bps_hvon = 2 + bps_swon = 8 + InputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + PLC_ON = { + DataSource = DDB1 + Type = uint32 + } + MHVPS_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + SHOTLEN = { + DataSource = DDB1 + Type = uint32 + } + StopRequest = { + DataSource = DDB1 + Type = uint32 + } + MODE_SHOTLEN_FLAG = { + DataSource = DDB1 + Type = uint32 + } + SHORT_PULSE_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + //Add 20210120 + MHVPS_MODSW = { + DataSource = EPICSCAInput + Type = uint32 + } + //Add 20210120 + DO_REV6_GYA = { + DataSource = EPICSCAInput + Type = uint32 + } + + } + OutputSignals = { + RTSMValue = { + DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + BEAM_ON_STAT = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVARMED = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVINJECTION = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BeamONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + SHOT_ID = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + //Added 20201117 + APS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + APS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + MHVPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + NI6259Value = { + DataSource = NI6259 + //DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + NI6528P3Value = { + DataSource = NI6528P3 + //DataSource = DDB1 + Type = uint8 + } + NI6528P4GYAValue = { + DataSource = NI6528P4GYA + //DataSource = DDB1 + Type = uint8 + } + } + } + +GAMSDNRealTimeStateMachine = { + Class = JASDNRTStateMachineGAM + ConditionTrigger = 1 + mhvps_hvon = 4 + aps_hvon = 1 + aps_swon = 16 + bps_hvon = 2 + bps_swon = 8 + InputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + PLC_ON = { + DataSource = DDB1 + Type = uint32 + } + MHVPS_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + SHOTLEN = { + DataSource = DDB1 + Type = uint32 + } + StopRequest = { + DataSource = DDB1 + Type = uint32 + } + MODE_SHOTLEN_FLAG = { + DataSource = DDB1 + Type = uint32 + } + Command = { + DataSource = RealTimeThreadAsyncBridge + Type = uint16 + } + + } + OutputSignals = { + RTSMValue = { + DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + BeamON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVARMED = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVINJECTION = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BeamONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + SHOT_ID = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + } + + //Terminal Interface reads three inputs. + // INPUTs: StateMahine Value, NI6528P3Value and NI6528P4Value + // OUTPUTs: Each NIxxx data sources. + +terminalInterfaceGAM = { + Class = JATerminalInterfaceGAM + mhvps_hvon_term = 4 + aps_hvon_term = 1 + aps_swon_term = 16 + bps_hvon_term = 2 + bps_swon_term = 8 + InputSignals = { + MHVPS_HVON = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON = { + DataSource = DDB1 + Type = uint32 + } + SHORT_PULSE_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + //Input signals about HW terminal. + RTSMValue = { + DataSource = DDB1 + Type = uint32 + } + NI6528P3CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + NI6528P4GYACurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6259Value = { + DataSource = NI6259 + //DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + NI6528P3Value = { + DataSource = NI6528P3 + //DataSource = DDB1 + Type = uint8 + } + NI6528P4GYAValue = { + DataSource = NI6528P4GYA + //DataSource = DDB1 + Type = uint8 + } + } + } + + // Switching AO port source between internal variable and EPICS PV. + +choiseGAM = { + Class = JASourceChoiseGAM + numberOfPVs = 5 + InputSignals = { + BPS_REF = { + DataSource = DDB1 + Type = float32 + } + BPS_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + BPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + APS_REF = { + DataSource = DDB1 + Type = float32 + } + APS_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + APS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + MHVPS_REF = { + DataSource = DDB1 + Type = float32 + } + MHVPS_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + MHVPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + MCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + MCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + MCPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + GCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + GCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + GCPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + } + OutputSignals = { + BPS_OUT = { + DataSource = DDB1 + Type = float32 + } + APS_OUT = { + DataSource = DDB1 + Type = float32 + } + MHVPS_OUT = { + DataSource = DDB1 + Type = float32 + } + MCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + GCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + } + } + + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + AllowNoProducers = 1 + ResetUnusedVariablesAtStateChange = 0 + } + // Timer for thread 1 (Normal RT state execution cycle.) + +Timer1kHz = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x1000 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + +TimerSDN = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x2000 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + // Timer for thread 3 (RTStateMachineGAM execution cycle.) + +Timer = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x4000 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + + +Timings = { + Class = TimingDataSource + } + +Display = { + Class = LoggerDataSource + } + // for data exechange between threads. + +RealTimeThreadAsyncBridge = { + Class = RealTimeThreadAsyncBridge + NumberOfBuffers = 20 + } + // for access ECPIS PV. + +EPICSCAInput = { + Class = "EPICSCA::EPICSCAInput" + CPUMask = "0x1000" //change from 200 + StackSize = "10000000" + Signals = { + // PV for GYA(6528.1 port4) + DO_REV6_GYA = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV6" + Type = uint32 + } + DO_REV7_GYA = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV7" + Type = uint32 + } + DO_REV8_GYA = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV8" + Type = uint32 + } + HVARMED_GYA = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA1" + Type = uint32 + } + // PV for DO + REV2_PLC = { + PVName = "EC-GN-P01-GPS:PLC4110-RV2" + Type = uint32 + } + REV3_PLC = { + PVName = "EC-GN-P01-GPS:PLC4110-RV3" + Type = uint32 + } + // PV for manually setting + BPS_MM = { + PVName = "EC-GN-P01-PB2F:STAT-MANM" + Type = uint32 + } + BPS_MANUAL = { + PVName = "EC-GN-P01-PB2F:PSU2000-EREF-MSP" + Type = float32 + } + APS_MM = { + PVName = "EC-GN-P01-PA2F:STAT-MANM" + Type = uint32 + } + APS_MANUAL = { + PVName = "EC-GN-P01-PA2F:PSU4000-EREF-MSP" + Type = float32 + } + MHVPS_MANUAL = { + PVName = "EC-GN-P01-PMF:PSU0000-EREF-MSP" + Type = float32 + } + MHVPS_MM = { + PVName = "EC-GN-P01-PMF:STAT-MANM" + Type = uint32 + } + // Analog Input PVs. + GYA_BPS_MESVOLT = { + PVName = "EC-GN-P01-PB1F:PSU1000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_BPS_MESVOLT = { + PVName = "EC-GN-P01-PB2F:PSU2000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_BPS_MESCURR = { + PVName = "EC-GN-P01-PB1F:PSU1000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_BPS_MESCURR = { + PVName = "EC-GN-P01-PB2F:PSU2000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_APS_MESVOLT = { + PVName = "EC-GN-P01-PA1F:PSU3000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_APS_MESVOLT = { + PVName = "EC-GN-P01-PA2F:PSU4000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_APS_MESCURR = { + PVName = "EC-GN-P01-PA1F:PSU3000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_APS_MESCURR = { + PVName = "EC-GN-P01-PA2F:PSU4000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC1_MESVOLT = { + PVName = "EC-GN-P01-GAF:MOE2810-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC1_MESVOLT = { + PVName = "EC-GN-P01-GBF:MOE2810-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC1_MESCURR = { + PVName = "EC-GN-P01-GAF:MOE2820-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC1_MESCURR = { + PVName = "EC-GN-P01-GBF:MOE2820-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC2_MESVOLT = { + PVName = "EC-GN-P01-GAF:MOE2830-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC2_MESVOLT = { + PVName = "EC-GN-P01-GBF:MOE2830-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC2_MESCURR = { + PVName = "EC-GN-P01-GAF:MRF2910-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC2_MESCURR = { + PVName = "EC-GN-P01-GBF:MRF2910-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_MHVPS_MESVOLT = { + PVName = "EC-GN-P01-PMF:PSU0000-ET-GA" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_MHVPS_MESVOLT = { + PVName = "EC-GN-P01-PMF:PSU0000-ET-GB" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_MHVPS_MESCURR = { + PVName = "EC-GN-P01-PMF:PSU0000-IT-GA" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_MHVPS_MESCURR = { + PVName = "EC-GN-P01-PMF:PSU0000-IT-GB" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + + //Digital Input PVs in Signal-Variable tab. + APS_READY = { + PVName = "EC-GN-P01-PA2F:PSU4000-YSTA" + Type = uint32 + } + GYA_APS_FLT = { + PVName = "EC-GN-P01-PA1F:PSU3000-YFLT" + Type = uint32 + } + GYB_APS_FLT = { + PVName = "EC-GN-P01-PA2F:PSU4000-YFLT" + Type = uint32 + } + BPS_READY = { + PVName = "EC-GN-P01-PB2F:PSU2000-YSTA" + Type = uint32 + } + GYA_BPS_FLT = { + PVName = "EC-GN-P01-PB1F:PSU1000-YFLT" + Type = uint32 + } + GYB_BPS_FLT = { + PVName = "EC-GN-P01-PB2F:PSU2000-YFLT" + Type = uint32 + } + MHVPS_OV = { + PVName = "EC-GN-P01-GAFP:FMC4310-YFLT-OC" + Type = uint32 + } + MHVPS_OC = { + PVName = "EC-GN-P01-GAFP:FMC4310-YFLT-OV" + Type = uint32 + } + MHVPS_FLT = { + PVName = "EC-GN-P01-PMF:PSU0000-YFLT" + Type = uint32 + } + MHVPS_READY = { + PVName = "EC-GN-P01-PMF:PSU0000-TYSTA" + Type = uint32 + } + MHVPS_MODON = { + PVName = "EC-GN-P01-GPF:PSU0000-YSTA-MOD" + Type = uint32 + } + MIS_ITL = { + PVName = "EC-GN-P01-GAFP:FMC4310-YTRP" + Type = uint32 + } + MISB_ITL = { + PVName = "EC-GN-P01-GBFP:FMC4310-YTRP" + Type = uint32 + } + PLC_ITL = { + PVName = "EC-GN-P01-GPS:PLC4110-YTRP" + Type = uint32 + } + PLC_STANDBY = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-ST1R" + Type = uint32 + } + PLC_READY = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-ST2R" + Type = uint32 + } + PLC_ON = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-ST3R" + Type = uint32 + } + PLC_MODE1 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD1" + Type = uint32 + } + PLC_MODE2 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD2" + Type = uint32 + } + PLC_MODE3 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD3" + Type = uint32 + } + PLC_MODE4 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD4" + Type = uint32 + } + PLC_PERMIT = { + PVName = "EC-GN-P01-GPS:PLC4110-CON-GY2PRM" + Type = uint32 + } + PLC_SELECT = { + PVName = "EC-GN-P01-GPS:PLC4110-CON-OPGY2" + Type = uint32 + } + PLC_SYNCMODE = { + PVName = "EC-GN-P01-GPS:PLC4110-YSTA-MPSS" + Type = uint32 + } + PLC_CCPSON = { + PVName = "EC-GN-P01-GPS:PLC4110-YON-CCPS2" + Type = uint32 + } + EXT_TRIG = { + PVName = "EC-GN-P01-GBF:DIO4900-YON" + Type = uint32 + } + + //Digital Output PVs in Variables-signal tab + APS_HVON = { + PVName = "EC-GN-P01-PA2F:PSU4000-CON-HV" + Type = uint32 + } + APS_SWON = { + PVName = "EC-GN-P01-PA2F:PSU4000-CON-SW" + Type = uint32 + } + APS_STOP = { + PVName = "EC-GN-P01-PA2F:PSU4000-CTRP" + Type = uint32 + } + BPS_HVON = { + PVName = "EC-GN-P01-PB2F:PSU2000-CON-HV" + Type = uint32 + } + BPS_SWON = { + PVName = "EC-GN-P01-PB2F:PSU2000-CON-SW" + Type = uint32 + } + BPS_STOP = { + PVName = "EC-GN-P01-PB2F:PSU2000-CTRP" + Type = uint32 + } + BEAM_ON_STAT = { + PVName = "EC-GN-P01-GBFP:FMC4310-YSTA-GBOP" + Type = uint32 + } + DO_REV5 = { + PVName = "EC-GN-P01-GBFP:FMC4310-RV5" + Type = uint32 + } + DO_REV6 = { + PVName = "EC-GN-P01-GBFP:FMC4310-RV6" + Type = uint32 + } + DO_REV7 = { + PVName = "EC-GN-P01-GBFP:FMC4310-RV7" + Type = uint32 + } + DO_REV8 = { + PVName = "EC-GN-P01-GBFP:FMC4310-RV8" + Type = uint32 + } + MHVPS_HVON = { + PVName = "EC-GN-P01-PMF:PSU0000-CON-SW" + Type = uint32 + } + MHVPS_STOP = { + PVName = "EC-GN-P01-PMF:PSU0000-COFF" + Type = uint32 + } + MHVPS_MODSW = { + PVName = "EC-GN-P01-PMF:PSU0000-CON-MOD" + Type = uint32 + } + PCF_FLT = { + PVName = "EC-GN-P01-GPF:PCF4210-CTRP" + Type = uint32 + } + HVARMED = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GB1" + Type = uint32 + } + HVINJECTION = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GB2" + Type = uint32 + } + RFON = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GB3" + Type = uint32 + } + FHPS_RU = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP" + Type = uint32 + } + SCM_RU = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP" + Type = uint32 + } + SCM_RD = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-YTS-RDOWN" + Type = uint32 + } + CCPS_IN_OPERATION = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-TR" + Type = uint32 + } + //Input PVs in Variables-Operation tab. + PREP_MODE = { + PVName = "EC-GN-P01-GBF:STAT-PREP-MODE" + Type = uint32 + } + SHORT_PULSE_MODE = { + PVName = "EC-GN-P01-GBF:STAT-SHORT-PULSE" + Type = uint32 + } + + MHVPS_DT = { + PVName = "EC-GN-P01-PMF:STAT-DT-HVON" + Type = uint32 + } + APS_HVON_DT = { + PVName = "EC-GN-P01-PA2F:STAT-DT-HVON" + Type = uint32 + } + APS_SWON_DT = { + PVName = "EC-GN-P01-PA2F:STAT-DT-SWON" + Type = uint32 + } + BPS_HVON_DT = { + PVName = "EC-GN-P01-PB2F:STAT-DT-HVON" + Type = uint32 + } + BPS_SWON_DT = { + PVName = "EC-GN-P01-PB2F:STAT-DT-SWON" + Type = uint32 + } + SHOTLEN = { + PVName = "EC-GN-P01-GBF:STAT-DT-SHOTLEN" + Type = uint32 + } + + MD1_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD1-LIM" + Type = uint32 + } + MD2_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD2-LIM" + Type = uint32 + } + MD3_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD3-LIM" + Type = uint32 + } + MD4_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD4-LIM" + Type = uint32 + } + + FHPS_MANM = { + PVName = "EC-GN-P01-GBF-FHPS:STAT-MANM" + Type = uint32 + } + + CSV_LOAD = { + PVName = "EC-GN-P01-GBF:STAT-CSV-LOAD" + Type = uint32 + } + CSV_NAME = { + PVName = "EC-GN-P01-GBF:STAT-CSV-NAME" + Type = char8 + NumberOfElements = 40 + } + RESET_FLT = { + PVName = "EC-GN-P01-GPF:STAT-RST-FLT" + //PVName = "EC-GN-P01-GPS-MEM:CMD-CONALARMRESET-HMI" + Type = uint32 + } + + //Input PVs in Variables-JASTEC tab. + MCPS_ACT_SP = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-ACT-SET-MI" + Type = uint32 + } + MCPS_TRG_CURR_MANUAL = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MI" + Type = float32 + } + MCPS_ACT_RB = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB" + Type = uint32 + } + MCPS_CURR_RB = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-RB" + Type = uint32 + } + GYA_MCPS_CURR_MON = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON" + Type = float32 + } + GYB_MCPS_CURR_MON = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON" + Type = float32 + } + MCPS_VOLT_MON = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-VOLT-MON" + Type = uint32 + } + MCPS_SWP_RB = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-SWP-RB" + Type = uint32 + } + MCPS_SWP_LIM = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-SWP-LIM" + Type = uint32 + } + MCPS_ERR = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-ERR" + Type = uint32 + } + MCPS_MM = { + PVName = "EC-GN-P01-GBF-MCPS:STAT-MANM" + Type = uint32 + } + //GCPS PVs + GCPS_ACT_SP = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MI" + Type = uint32 + } + GCPS_TRG_CURR_MANUAL = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MI" + Type = float32 + } + GCPS_ACT_RB = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB" + Type = uint32 + } + GCPS_CURR_RB = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-RB" + Type = uint32 + } + GYA_GCPS_CURR_MON = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON" + Type = float32 + } + GYB_GCPS_CURR_MON = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON" + Type = float32 + } + GCPS_VOLT_MON = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-VOLT-MON" + Type = uint32 + } + GCPS_SWP_RB = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-SWP-RB" + Type = uint32 + } + GCPS_SWP_LIM = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-SWP-LIM" + Type = uint32 + } + GCPS_ERR = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-ERR" + Type = uint32 + } + GCPS_MM = { + PVName = "EC-GN-P01-GBF-GCPS:STAT-MANM" + Type = uint32 + } + //Input PVs in Variables-kikusui tab. + FHPS_REM_RB = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-REM-RB" + Type = uint32 + } + FHPS_OUTON_RB = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB" + Type = uint32 + } + FHPS_CURR_RB = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-CURR-RB" + Type = uint32 + } + FHPS_ACV_RB = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-ACV-RB" + Type = uint32 + } + FHPS_FRQ_RB = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-FRQ-RB" + Type = uint32 + } + FHPS_SOUR_ON_RB = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-RB" + Type = uint32 + } + FHPS_MEAS_ACV = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV" + Type = float32 + } + GYA_FHPS_MEAS_ACI = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACI" + Type = float32 + } + GYB_FHPS_MEAS_ACI = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACI" + Type = float32 + } + FHPS_MEAS_ACP = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACP" + Type = uint32 + } + FHPS_MEAS_FRQ = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-FRQ" + Type = uint32 + } + FHPS_ERR = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-ERROR" + Type = uint32 + } + FHPS_AUTO_TAGV = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV" + Type = float32 + } + FHPS_AUTO_TIME = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-RU-TIME" + Type = float32 + } + FHPS_AUTO_START = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START" + Type = uint32 + } + + CCPS_REMLOC_RB = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-RB" + Type = uint32 + } + CCPS_OUTON_RB = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-OUTON-RB" + Type = uint32 + } + CCPS_CURR_RB = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-CURR-RB" + Type = uint32 + } + CCPS_DCV_RB = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-DCV-RB" + Type = uint32 + } + CCPS_RANG_RB = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-RANG-RB" + Type = uint32 + } + CCPS_SOUR_ON_RB = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-RB" + Type = uint32 + } + CCPS_MEAS_DCV = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCV" + Type = uint32 + } + GYA_CCPS_MEAS_DCI = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCI" + Type = float32 + } + GYB_CCPS_MEAS_DCI = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCI" + Type = float32 + } + CCPS_MEAS_DCP = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCP" + Type = uint32 + } + CCPS_ERR = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-ERROR" + Type = uint32 + } + CCPS_OUTPUT_AMP = { + PVName = "EC-GN-P01-GBF-CCPS:STAT-AMP" + Type = float32 + } + CCPS_OUTPUT_FREQ = { + PVName = "EC-GN-P01-GBF-CCPS:STAT-FREQ" + Type = float32 + } + CCPS_OUTPUT_OFFS = { + PVName = "EC-GN-P01-GBF-CCPS:STAT-OFFS" + Type = float32 + } + //PXI Board status PVs + PXI6259_0 = { + PVName = "EC-GN-HWCF:6259-0-STATUS" + Type = uint32 + } + PXI6259_1 = { + PVName = "EC-GN-HWCF:6259-1-STATUS" + Type = uint32 + } + PXI6528_0 = { + PVName = "EC-GN-HWCF:6528-0-STATUS" + Type = uint32 + } + PXI6528_1 = { + PVName = "EC-GN-HWCF:6528-1-STATUS" + Type = uint32 + } + PXI6368_0 = { + PVName = "EC-GN-HWCF:6368-0-STATUS" + Type = uint32 + } + PXI6368_1 = { + PVName = "EC-GN-HWCF:6368-1-STATUS" + Type = uint32 + } + } + } + +EPICSCAOutput = { + Class = "EPICSCA::EPICSCAOutput" + CPUMask = "0x1000" //change from 0x200 + StackSize = "10000000" + NumberOfBuffers = 2 + Signals = { + PCF_STATE = { + PVName = "EC-GN-P01-GBF:STAT-SM" + Type = uint32 + } + //Analog Output PVs in Variables-signal tab. + FHPS_REF = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-EREF" + Type = float32 + } + BPS_REF = { + PVName = "EC-GN-P01-PB2F:PSU2000-EREF" + Type = float32 + } + APS_REF = { + PVName = "EC-GN-P01-PA2F:STAT-EREF-CONV.A" + Type = float32 + } + MHVPS_REF = { + PVName = "EC-GN-P01-PMF:STAT-EREF-CALC.B" + Type = float32 + } + + //Digital Output PVs in Variables-signal tab. + APS_STOP = { + PVName = "EC-GN-P01-PA2F:PSU4000-CTRP" + Type = uint32 + } + + BPS_STOP = { + PVName = "EC-GN-P01-PB2F:PSU2000-CTRP" + Type = uint32 + } + + BEAM_ON_STAT = { + PVName = "EC-GN-P01-GBFP:FMC4310-YSTA-GBOP" + Type = uint32 + } + + MHVPS_STOP = { + PVName = "EC-GN-P01-PMF:PSU0000-COFF" + Type = uint32 + } + PCF_FLT = { + PVName = "EC-GN-P01-GPF:PCF4210-CTRP" + Type = uint32 + } + HVARMED = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GB1" + Type = uint32 + } + HVINJECTION = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GB2" + Type = uint32 + } + RFON = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GB3" + Type = uint32 + } + + //Output PVs in Variables-operation tab. + MHVPS_PREP_WF = { + PVName = "EC-GN-P01-PB2F:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + + NumberOfDimensions = 1 + } + BPS_PREP_WF = { + PVName = "EC-GN-P01-PB2F:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + APS_PREP_WF = { + PVName = "EC-GN-P01-PA2F:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + FHPS_PREP_WF = { + PVName = "EC-GN-P01-GBF-FHPS:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + MCPS_PREP_WF = { + PVName = "EC-GN-P01-GBF-MCPS:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GCPS_PREP_WF = { + PVName = "EC-GN-P01-GBF-GCPS:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + PREP_TIME_WF = { + PVName = "EC-GN-P01-GBF:STAT-PREP-TIME-WF" + Type = int32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + BEAM_ON_TIME = { + PVName = "EC-GN-P01-GBF:STAT-BEAMON-TIME" + Type = uint32 + } + ELAPSED_TIME = { + PVName = "EC-GN-P01-GBF:STAT-ELAPSED" + Type = uint32 + } + SHOT_ID = { + PVName = "EC-GN-P01-GBF:STAT-SHOT-ID" + Type = uint32 + } + + CSV_LOADED = { + PVName = "EC-GN-P01-GBF:STAT-CSV-LOADED" + Type = uint32 + } + CSV_ERR = { + PVName = "EC-GN-P01-GBF:STAT-CSV-ERR" + Type = uint32 + } + + //Output PVs in Variables-jastec tab. + MCPS_TRG_CURR_SET = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MO" + Type = float32 + } + MCPS_ACT_SP = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MO" + Type = uint32 + } + GCPS_TRG_CURR_SET = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MO" + Type = float32 + } + GCPS_ACT_SP = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MO" + Type = uint32 + } + + //Output PVs in Variables-kikusui tab. + CCPS_REF = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-EREF" + Type = float32 + } + FHPS_AUTO_STAT = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-STAT" + Type = uint32 + } + //Add 20201117 + APS_HVON = { + PVName = "EC-GN-P01-PA2F:PSU4000-CON-HV" + Type = uint32 + } + APS_SWON = { + PVName = "EC-GN-P01-PA2F:PSU4000-CON-SW" + Type = uint32 + } + BPS_HVON = { + PVName = "EC-GN-P01-PB2F:PSU2000-CON-HV" + Type = uint32 + } + BPS_SWON = { + PVName = "EC-GN-P01-PB2F:PSU2000-CON-SW" + Type = uint32 + } + MHVPS_HVON = { + PVName = "EC-GN-P01-PMF:STAT-HVON-CALC.B" + Type = uint32 + } + } + } + // for ESDN packet subscription/publication. + +SDNSubCommands = { + Class = SDN::SDNSubscriber + Topic = ECPC2SCUJA + Interface = enp27s0f0 + CPUs = 0x2000 + Locked = 1 + Timeout = 2 + Signals = { + Header = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + Command = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 64 + } + } + } + +SDNReply = { + Class = SDN::SDNPublisher + //Topic = SCUJAB2ECPC + Topic = SCUJA2ECPC + Interface = enp27s0f0 + CPUs = 0x2000 + Locked = 1 + Signals = { + Header = { + Type = uint8 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ReplyStatus = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ReplyWaveformAck = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + //Status (26Bytes?) is not assigned + //GyrotronA measurements + //56Bytes are used as Gyrotron1 Measurements (verified on 2020/10/22) + GYA_MHVPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_MHVPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_BPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_BPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_APS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_APS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC1_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC1_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC2_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC2_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_MCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_GCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_FHPS_MEAS_ACI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_CCPS_MEAS_DCI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + //GyrotronB measurements + GYB_MHVPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_MHVPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_BPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_BPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_APS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_APS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC1_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC1_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC2_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC2_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_MCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_GCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_FHPS_MEAS_ACI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_CCPS_MEAS_DCI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + } + + // Direct HW accesses. Follwing device/port assignment must be consistent with actual wiring. + // NI6259.0 + // APS_SWON BoardId=0, PortId=3.0 + +NI6259 = { + Class = NI6259::NI6259DIO + DeviceName = "/dev/pxi6259" + BoardId = 0 + Signals = { + NI6259Value = { + Type = uint32 + Mask = 0xFF + PortId = 0 + } + } + } + + //NI6528 digital output has logic low == 0 == close relay. ((See Driver Manual.) + //When the program send ON signal, this program writes 0 on the data source. + +NI6528P3 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.0" + Port = 3 + NI6528P3Value = { + NI6528P3Value = { + Type = uint8 + } + } + } + //P3.0 APS_HVON + //P3.1 APS_SWON + //P3.2 APS_Shutdown + //P3.3 BPS_HVON + //P3.4 BPS_SWON + //P3.5 BPS_Shutdown + //P3.6 GY1_Beam_ON_status + //P3.7 RV5 _cRIO + + +NI6528P4 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.0" + Port = 4 + NI6528P4Value = { + NI6528P4Value = { + Type = uint8 + } + } + } + //P4.0 RV6 _cRIO + //P4.1 RV7 _cRIO + //P4.2 RV8 _cRIO + //P4.3 emp + //P4.4 emp + //P4.5 emp + //P4.6 HVArmed + //P4.7 HVInjection + + +NI6528P5 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.0" + Port = 5 + NI6528P5Value = { + NI6528P5Value = { + Type = uint8 + } + } + } + //P5.0 RFON + //P5.1 FHPS_Rampup_complete + //P5.2 SCM_RU_Complete + //P5.3 CCPS_IN_OPERATION + //P5.4 REV2 _PLC + //P5.5 REV3 _PLC + //P5.6 None + //P5.7 None + + +NI6528P4GYA = { + Class = NI6528 + DeviceName = "/dev/pxi6528.1" + Port = 4 + NI6528P4GYAValue = { + NI6528P4GYAValue = { + Type = uint8 + } + } + } + //P4.0 RV6 _cRIO + //P4.1 RV7 _cRIO + //P4.2 RV8 _cRIO + //P4.3 MHVPS_HVON + //P4.4 MHVPS_Shutdown + //P4.5 MHVPS_MOD + //P4.6 PCF_FLT + //P4.7 HVArmed_GYA + + } + +States = { + Class = ReferenceContainer + +Disabled = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM GoErrorGAM InDisabledGAM + GoWaitStandbyGAM choiseGAM MCPSGAM GCPSGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM} + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P4GYAPV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM NI6528P4GYAWriteGAM} + CPUs = 0x4000 + } + } + } + +WaitStandby = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM FHPSSetpointGAM FHPSRampupGAM InWaitStandbyGAM + choiseGAM MCPSGAM GCPSGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + GoDisabledGAM GoWaitReadyGAM GoErrorGAM CCPSWaveformGAM } + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P4GYAPV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM NI6528P4GYAWriteGAM} + CPUs = 0x4000 + } + } + } + +WaitReady = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM WFRecordGAM PreProgrammedGAM FHPSSetpointGAM FHPSRampupGAM InWaitReadyGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + GoWaitPermitGAM GoWaitStandbyFromReadyGAM GoErrorGAM } + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P4GYAPV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM NI6528P4GYAWriteGAM} + CPUs = 0x4000 + } + } + } + +WaitPermit = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM WFRecordGAM PreProgrammedGAM FHPSSetpointGAM FHPSRampupGAM InWaitPermitGAM + choiseGAM EPICSOutputGAM GoWaitReadyFromWaitPermitGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + GoWaitHVONGAM GoWaitHVON_PREP_GAM GoWaitHVON_SDN_GAM GoWaitHVON_SDN_PREP_GAM GoErrorGAM } + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P4GYAPV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM NI6528P4GYAWriteGAM} + CPUs = 0x4000 + } + } + } + + //Real-Time state for HVPS sequence timing control. + +WaitHVON = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM FHPSSetpointGAM FHPSRampupGAM InWaitHVONGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM } + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P4PV2PortGAM NI6528P4WriteGAM + GAMRealTimeStateMachine NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x4000 + } + } + } + +WaitHVON_SDN = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM FHPSRampupGAM InWaitHVON_SDNGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM } + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P4PV2PortGAM NI6528P4WriteGAM + GAMSDNRealTimeStateMachine terminalInterfaceGAM NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x4000 + } + } + } + +WaitHVON_PREP = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM PreProgrammedGAM FHPSRampupGAM InWaitHVON_PREPGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM } + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P4PV2PortGAM NI6528P4WriteGAM + GAMRealTimeStateMachine NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x4000 + } + } + } + +WaitHVON_SDN_PREP = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM PreProgrammedGAM FHPSRampupGAM InWaitHVON_SDN_PREPGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM} + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P4PV2PortGAM NI6528P4WriteGAM + GAMSDNRealTimeStateMachine terminalInterfaceGAM NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x4000 + } + } + } + + +Error = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM InErrorGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + ExitedHVArmedInjectionRFONGAM ResetPSsGAM + FromErrorToWaitStandbyGAM ErrorGAM choiseGAM EPICSOutputGAM FHPSSetpointGAM FHPSRampupGAM CCPSWaveformGAM} + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P4GYAPV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM NI6528P4GYAWriteGAM} + CPUs = 0x4000 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronIOC.db b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronIOC.db new file mode 100644 index 0000000..3bb3f94 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronIOC.db @@ -0,0 +1,1384 @@ + +record(bo, "EC-GN-P01-GAF:STAT-SHORT-PULSE"){ + field(SCAN, "Passive") + field(ONAM, "SHORT MODE") + field(ZNAM, "LONG MODE") +} + +record(ao, "EC-GN-P01-GAF-FHPS:PSU2320-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-CCPS:PSU2610-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-FHPS:PSU2320-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-CCPS:PSU2610-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PB1F:PSU1000-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PA1F:PSU3000-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PA1F:PSU3000-EREF-P"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PMF:PSU0000-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PB2F:PSU2000-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PA2F:PSU4000-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PA2F:PSU4000-EREF-P"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-FHPS:PSU2610-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-CCPS:PSU2320-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GAF-MCPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PB1F:PSU1000-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PB1F:PSU1000-IT"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PA1F:PSU3000-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PA1F:PSU3000-IT"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF:MOE2810-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF:MOE2820-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF:MOE2830-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF:MRF2910-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PMF:PSU0000-ET-GA"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PMF:PSU0000-IT-GA"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PB2F:PSU2000-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PB2F:PSU2000-IT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PA2F:PSU4000-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PA2F:PSU4000-IT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF:MOE2810-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF:MOE2820-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF:MOE2830-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF:MRF2910-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PMF:PSU0000-ET-GB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PMF:PSU0000-IT-GB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA1F:PSU3000-CON-HV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA1F:PSU3000-CON-SW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA1F:PSU3000-CTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB1F:PSU1000-CON-HV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB1F:PSU1000-CON-SW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB1F:PSU1000-CTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAFP:FMC4310-YSTA-GAOP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAFP:FMC4310-RV5"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAFP:FMC4310-RV6"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAFP:FMC4310-RV7"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAFP:FMC4310-RV8"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PMF:PSU0000-CON-SW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PMF:PSU0000-COFF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PMF:PSU0000-CON-MOD"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-CTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-YTS-GA1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-YTS-GA2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-YTS-GA3"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-CCPS:PSU2320-TR"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA2F:PSU4000-CON-HV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA2F:PSU4000-CON-SW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA2F:PSU4000-CTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB2F:PSU2000-CON-HV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB2F:PSU2000-CON-SW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB2F:PSU2000-CTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBFP:FMC4310-YSTA-GBOP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBFP:FMC4310-RV5"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBFP:FMC4310-RV6"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBFP:FMC4310-RV7"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBFP:FMC4310-RV8"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-YTS-GB1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-YTS-GB2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-YTS-GB3"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-CCPS:PSU2320-TR"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPS:PLC4110-RV2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPS:PLC4110-RV3"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:PCF4210-CTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PA1F:PSU3000-YSTA"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PA1F:PSU3000-YFLT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PB1F:PSU1000-YSTA"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PB1F:PSU1000-YFLT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-YFLT-OC"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-YFLT-OV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PMF:PSU0000-YFLT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PMF:PSU0000-TYSTA"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPF:PSU0000-YSTA-MOD"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-YTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-YTRP2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-RV1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-RV2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-RV3"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-ST1R"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-ST2R"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-ST3R"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-CON-GY1PRM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-CON-OPGY1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YON-CCPS1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YSTA-MPSS"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF:DIO4900-YON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PA2F:PSU4000-YSTA"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PA2F:PSU4000-YFLT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PB2F:PSU2000-YSTA"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PB2F:PSU2000-YFLT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBFP:FMC4310-YTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBFP:FMC4310-YTRP2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBFP:FMC4310-RV1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBFP:FMC4310-RV2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBFP:FMC4310-RV3"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-MD1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-MD2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-MD3"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-MD4"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-CON-GY2PRM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-CON-OPGY2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YON-CCPS2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-RV1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF:DIO4900-YON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PMF:STAT-DT-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PA1F:STAT-DT-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PA1F:STAT-DT-SWON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PB1F:STAT-DT-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PB1F:STAT-DT-SWON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PA2F:STAT-DT-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PA2F:STAT-DT-SWON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PB2F:STAT-DT-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PB2F:STAT-DT-SWON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF:STAT-DT-SHOTLEN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF:STAT-DT-SHOTLEN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF:STAT-BEAMON-TIME"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF:STAT-BEAMON-TIME"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF:STAT-ELAPSED"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF:STAT-ELAPSED"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GPF:STAT-RDY-TOUT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PMF:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA1F:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB1F:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA2F:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB2F:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-MCPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-GCPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-CCPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-MCPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-GCPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-CCPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:STAT-TRIG-SOUR"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF:STAT-TRIG-SOUR"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longin, "EC-GN-P01-GPF:STAT-MD1-LIM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longin, "EC-GN-P01-GPF:STAT-MD2-LIM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longin, "EC-GN-P01-GPF:STST-MD3-LIM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longin, "EC-GN-P01-GPF:STAT-MD4-LIM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:STAT-SIMM-MODE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF:STAT-SIMM-MODE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:STAT-PREP-MODE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF:STAT-PREP-MODE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:STAT-MST-TRIG"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF:STAT-MST-TRIG"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:STAT-RST-FLT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longout, "EC-GN-P01-GAF:STAT-SHOT-ID"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GAF:STAT-FC-SUBSTATE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longin, "EC-GN-P01-GAF:STAT-PREHEAT-TIME"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longout, "EC-GN-P01-GBF:STAT-SHOT-ID"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GBF:STAT-FC-SUBSTATE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longin, "EC-GN-P01-GBF:STAT-PREHEAT-TIME"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA1F:STAT-POLSW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA2F:STAT-POLSW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:STAT-CSV-LOAD"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:STAT-CSV-LOADED"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(stringout, "EC-GN-P01-GAF:STAT-CSV-NAME"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GAF:STAT-CSV-ERR"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF:STAT-CSV-LOAD"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF:STAT-CSV-LOADED"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(stringout, "EC-GN-P01-GBF:STAT-CSV-NAME"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GBF:STAT-CSV-ERR"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longout, "EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GPF:STAT-DAQ-MODE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:STAT-DAQ-SW-TRIG"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GPF:STAT-DAQ-STAT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:STAT-DAQ-CONF-STAT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GPF:STAT-DAQ-LEN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:STAT-DAQ-RECONF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GPF:STAT-DAQ-PUB-DLY"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longout, "EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE-RB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GPF:STAT-DAQ-MODE-RB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY-RB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GPF:STAT-DAQ-LEN-RB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GPF:STAT-DAQ-PUB-DLY-RB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PB1F:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PA1F:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF-FHPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF-CCPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GAF-MCPS:STATPREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF-GCPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF:STAT-PREP-TIME-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "SHORT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PB2F:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PA2F:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF-FHPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF-CCPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF-MCPS:STATPREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF-GCPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF:STAT-PREP-TIME-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-MCPS:PSU2120-TRG-SWPR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbi, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-MCPS:PSU2120-VOLT-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-MCPS:PSU2120-SWP-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-MCPS:PSU2120-SWP-LIM"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GAF-MCPS:PSU2120-ERR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-GCPS:PSU2130-TRG-SWPR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbi, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-GCPS:PSU2130-VOLT-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-GCPS:PSU2130-SWP-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-GCPS:PSU2130-SWP-LIM"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GAF-GCPS:PSU2130-ERR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-MCPS:PSU2120-TRG-SWPR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbi, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-MCPS:PSU2120-VOLT-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-MCPS:PSU2120-SWP-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-MCPS:PSU2120-SWP-LIM"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF-MCPS:PSU2120-ERR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-GCPS:PSU2130-TRG-SWPR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbi, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-GCPS:PSU2130-VOLT-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-GCPS:PSU2130-SWP-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-GCPS:PSU2130-SWP-LIM"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF-GCPS:PSU2130-ERR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GAF-FHPS:PSU2610-IDN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-RST"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-REM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-OUTON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-FHPS:PSU2610-CURR-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-FHPS:PSU2610-ACV-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-FHPS:PSU2610-FRQ-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF-FHPS:PSU2610-REM-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-ACV-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-FRQ-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACI"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACP"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-FRQ"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GAF-FHPS:PSU2610-ERROR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-STAT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-STOP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GAF-CCPS:PSU2320-IDN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-CCPS:PSU2320-RST"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-CCPS:PSU2320-OUTON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-CCPS:PSU2320-CURR-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-CCPS:PSU2320-DCV-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-CCPS:PSU2320-RANG-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF-CCPS:PSU2320-OUTON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:PSU2320-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:PSU2320-DCV-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:PSU2320-RANG-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCV"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCI"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCP"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GAF-CCPS:PSU2320-ERROR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:STAT-AMP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:STAT-FREQ"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GBF-FHPS:PSU2610-IDN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-RST"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-REM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-OUTON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-FHPS:PSU2610-CURR-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-FHPS:PSU2610-ACV-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-FHPS:PSU2610-FRQ-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF-FHPS:PSU2610-REM-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-ACV-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-FRQ-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACI"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACP"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-FRQ"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GBF-FHPS:PSU2610-ERROR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-STAT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-STOP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GBF-CCPS:PSU2320-IDN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-CCPS:PSU2320-RST"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-CCPS:PSU2320-OUTON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-CCPS:PSU2320-CURR-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-CCPS:PSU2320-DCV-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-CCPS:PSU2320-RANG-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF-CCPS:PSU2320-OUTON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:PSU2320-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:PSU2320-DCV-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:PSU2320-RANG-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCV"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCI"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCP"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GBF-CCPS:PSU2320-ERROR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:STAT-AMP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:STAT-FREQ"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PMF:STAT-GYA-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PMF:STAT-GYB-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(calcout, "EC-GN-P01-PMF:STAT-HVON-CALC"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(calcout, "EC-GN-P01-GAF:STAT-MST-TRIG-CALC"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(calcout, "EC-GN-P01-GBF:STAT-MST-TRIG-CALC"){ + field(SCAN, "Passive") + field(PINI, "YES") +} + +record(bi, "EC-GN-P01-GAF-CCPS:PSU2320-STAT"){ + field(SCAN, "Passive") +} +record(bi, "EC-GN-P01-GBF-CCPS:PSU2320-STAT"){ + field(SCAN, "Passive") +} diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/shot0001.csv b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/shot0001.csv new file mode 100644 index 0000000..e69de29 diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/test.csv b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/test.csv new file mode 100644 index 0000000..e7ba9e5 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/test.csv @@ -0,0 +1,41 @@ +-100,0,0,0,0,0,0 +-90,1,1,1,1,1,1 +-80,2,2,2,2,2,2 +-70,3,3,3,3,3,3 +-60,4,4,4,4,4,4 +-50,5,5,5,5,5,5 +-40,6,6,6,6,6,6 +-30,7,7,7,7,7,7 +-20,8,8,8,8,8,8 +-10,9,9,9,9,9,9 +0,10,10,10,10,10,10 +10,9,9,9,9,9,9 +20,8,8,8,8,8,8 +30,7,7,7,7,7,7 +40,6,6,6,6,6,6 +50,5,5,5,5,5,5 +60,4,4,4,4,4,4 +70,3,3,3,3,3,3 +80,2,2,2,2,2,2 +90,1,1,1,1,1,1 +100,0,0,0,0,0,0 +110,1,1,1,1,1,1 +120,2,2,2,2,2,2 +130,3,3,3,3,3,3 +140,4,4,4,4,4,4 +150,5,5,5,5,5,5 +160,6,6,6,6,6,6 +170,7,7,7,7,7,7 +180,8,8,8,8,8,8 +190,9,9,9,9,9,9 +200,10,10,10,10,10,10 +210,9,9,9,9,9,9 +220,8,8,8,8,8,8 +230,7,7,7,7,7,7 +240,6,6,6,6,6,6 +250,5,5,5,5,5,5 +260,4,4,4,4,4,4 +270,3,3,3,3,3,3 +280,2,2,2,2,2,2 +290,1,1,1,1,1,1 +300,0,0,0,0,0,0 diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/test.csv.original b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/test.csv.original new file mode 100644 index 0000000..c942204 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/test.csv.original @@ -0,0 +1,41 @@ +-100,0,0,0,0,0 +-90,1,1,1,1,1 +-80,2,2,2,2,2 +-70,3,3,3,3,3 +-60,4,4,4,4,4 +-50,5,5,5,5,5 +-40,6,6,6,6,6 +-30,7,7,7,7,7 +-20,8,8,8,8,8 +-10,9,9,9,9,9 +0,10,10,10,10,10 +10,9,9,9,9,9 +20,8,8,8,8,8 +30,7,7,7,7,7 +40,6,6,6,6,6 +50,5,5,5,5,5 +60,4,4,4,4,4 +70,3,3,3,3,3 +80,2,2,2,2,2 +90,1,1,1,1,1 +100,0,0,0,0,0 +110,1,1,1,1,1 +120,2,2,2,2,2 +130,3,3,3,3,3 +140,4,4,4,4,4 +150,5,5,5,5,5 +160,6,6,6,6,6 +170,7,7,7,7,7 +180,8,8,8,8,8 +190,9,9,9,9,9 +200,10,10,10,10,10 +210,9,9,9,9,9 +220,8,8,8,8,8 +230,7,7,7,7,7 +240,6,6,6,6,6 +250,5,5,5,5,5 +260,4,4,4,4,4 +270,3,3,3,3,3 +280,2,2,2,2,2 +290,1,1,1,1,1 +300,0,0,0,0,0 diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/test2.csv b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/test2.csv new file mode 100644 index 0000000..d05acb7 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/test2.csv @@ -0,0 +1,103 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,10,10,10,10,10,10 +10,9,9,9,9,9,9 +20,8,8,8,8,8,8 +30,7,7,7,7,7,7 +40,6,6,6,6,6,6 +50,5,5,5,5,5,5 +60,4,4,4,4,4,4 +70,3,3,3,3,3,3 +80,2,2,2,2,2,2 +90,1,1,1,1,1,1 +100,0,0,0,0,0,0 +110,1,1,1,1,1,1 +120,2,2,2,2,2,2 +130,3,3,3,3,3,3 +140,4,4,4,4,4,4 +150,5,5,5,5,5,5 +160,6,6,6,6,6,6 +170,7,7,7,7,7,7 +180,8,8,8,8,8,8 +190,9,9,9,9,9,9 +200,10,10,10,10,10,10 +210,9,9,9,9,9,9 +220,8,8,8,8,8,8 +230,7,7,7,7,7,7 +240,6,6,6,6,6,6 +250,5,5,5,5,5,5 +260,4,4,4,4,4,4 +270,3,3,3,3,3,3 +280,2,2,2,2,2,2 +290,1,1,1,1,1,1 +300,0,0,0,0,0,0 +310,1,1,1,1,1,1 +320,2,2,2,2,2,2 +330,3,3,3,3,3,3 +340,4,4,4,4,4,4 +350,5,5,5,5,5,5 +360,6,6,6,6,6,6 +370,7,7,7,7,7,7 +380,8,8,8,8,8,8 +390,9,9,9,9,9,9 +400,10,10,10,10,10,10 +410,9,9,9,9,9,9 +420,8,8,8,8,8,8 +430,7,7,7,7,7,7 +440,6,6,6,6,6,6 +450,5,5,5,5,5,5 +460,4,4,4,4,4,4 +470,3,3,3,3,3,3 +480,2,2,2,2,2,2 +490,1,1,1,1,1,1 +500,0,0,0,0,0,0 +510,1,1,1,1,1,1 +520,2,2,2,2,2,2 +530,3,3,3,3,3,3 +540,4,4,4,4,4,4 +550,5,5,5,5,5,5 +560,6,6,6,6,6,6 +570,7,7,7,7,7,7 +580,8,8,8,8,8,8 +590,9,9,9,9,9,9 +600,10,10,10,10,10,10 +610,9,9,9,9,9,9 +620,8,8,8,8,8,8 +630,7,7,7,7,7,7 +640,6,6,6,6,6,6 +650,5,5,5,5,5,5 +660,4,4,4,4,4,4 +670,3,3,3,3,3,3 +680,2,2,2,2,2,2 +690,1,1,1,1,1,1 +700,0,0,0,0,0,0 +710,1,1,1,1,1,1 +720,2,2,2,2,2,2 +730,3,3,3,3,3,3 +740,4,4,4,4,4,4 +750,5,5,5,5,5,5 +760,6,6,6,6,6,6 +770,7,7,7,7,7,7 +780,8,8,8,8,8,8 +790,9,9,9,9,9,9 +800,10,10,10,10,10,10 +810,9,9,9,9,9,9 +820,8,8,8,8,8,8 +830,7,7,7,7,7,7 +840,6,6,6,6,6,6 +850,5,5,5,5,5,5 +860,4,4,4,4,4,4 +870,3,3,3,3,3,3 +880,2,2,2,2,2,2 +890,1,1,1,1,1,1 +900,0,0,0,0,0,0 +910,1,1,1,1,1,1 +920,2,2,2,2,2,2 +930,3,3,3,3,3,3 +940,4,4,4,4,4,4 +950,5,5,5,5,5,5 +960,6,6,6,6,6,6 +970,7,7,7,7,7,7 +980,8,8,8,8,8,8 +990,9,9,9,9,9,9 +1000,10,10,10,10,10,10 diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/test2.csv.original b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/test2.csv.original new file mode 100644 index 0000000..07d2393 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/test2.csv.original @@ -0,0 +1,103 @@ +#test configuration file2 +#Time,BPS,APS,MC,GC,FHPS +0,10,10,10,10,10 +10,9,9,9,9,9 +20,8,8,8,8,8 +30,7,7,7,7,7 +40,6,6,6,6,6 +50,5,5,5,5,5 +60,4,4,4,4,4 +70,3,3,3,3,3 +80,2,2,2,2,2 +90,1,1,1,1,1 +100,0,0,0,0,0 +110,1,1,1,1,1 +120,2,2,2,2,2 +130,3,3,3,3,3 +140,4,4,4,4,4 +150,5,5,5,5,5 +160,6,6,6,6,6 +170,7,7,7,7,7 +180,8,8,8,8,8 +190,9,9,9,9,9 +200,10,10,10,10,10 +210,9,9,9,9,9 +220,8,8,8,8,8 +230,7,7,7,7,7 +240,6,6,6,6,6 +250,5,5,5,5,5 +260,4,4,4,4,4 +270,3,3,3,3,3 +280,2,2,2,2,2 +290,1,1,1,1,1 +300,0,0,0,0,0 +310,1,1,1,1,1 +320,2,2,2,2,2 +330,3,3,3,3,3 +340,4,4,4,4,4 +350,5,5,5,5,5 +360,6,6,6,6,6 +370,7,7,7,7,7 +380,8,8,8,8,8 +390,9,9,9,9,9 +400,10,10,10,10,10 +410,9,9,9,9,9 +420,8,8,8,8,8 +430,7,7,7,7,7 +440,6,6,6,6,6 +450,5,5,5,5,5 +460,4,4,4,4,4 +470,3,3,3,3,3 +480,2,2,2,2,2 +490,1,1,1,1,1 +500,0,0,0,0,0 +510,1,1,1,1,1 +520,2,2,2,2,2 +530,3,3,3,3,3 +540,4,4,4,4,4 +550,5,5,5,5,5 +560,6,6,6,6,6 +570,7,7,7,7,7 +580,8,8,8,8,8 +590,9,9,9,9,9 +600,10,10,10,10,10 +610,9,9,9,9,9 +620,8,8,8,8,8 +630,7,7,7,7,7 +640,6,6,6,6,6 +650,5,5,5,5,5 +660,4,4,4,4,4 +670,3,3,3,3,3 +680,2,2,2,2,2 +690,1,1,1,1,1 +700,0,0,0,0,0 +710,1,1,1,1,1 +720,2,2,2,2,2 +730,3,3,3,3,3 +740,4,4,4,4,4 +750,5,5,5,5,5 +760,6,6,6,6,6 +770,7,7,7,7,7 +780,8,8,8,8,8 +790,9,9,9,9,9 +800,10,10,10,10,10 +810,9,9,9,9,9 +820,8,8,8,8,8 +830,7,7,7,7,7 +840,6,6,6,6,6 +850,5,5,5,5,5 +860,4,4,4,4,4 +870,3,3,3,3,3 +880,2,2,2,2,2 +890,1,1,1,1,1 +900,0,0,0,0,0 +910,1,1,1,1,1 +920,2,2,2,2,2 +930,3,3,3,3,3 +940,4,4,4,4,4 +950,5,5,5,5,5 +960,6,6,6,6,6 +970,7,7,7,7,7 +980,8,8,8,8,8 +990,9,9,9,9,9 +1000,10,10,10,10,10 diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/test3.csv b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/test3.csv new file mode 100644 index 0000000..6751924 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/test3.csv @@ -0,0 +1,6002 @@ +t (100ms),EW6-Voset (kV),EW2-Voset (kV),EW3-VOset (kV),EW101-MC-Ioset (A),EW101-GC-Ioset (A),FPS101-Voset (V) +0,46,20,15,111.3,1.7,53.2 +1,46,20.5,14.5,111.3,1.7,62 +2,46,21,14,111.3,1.7,62 +3,46,21.5,13.5,111.3,1.7,62 +4,46,22,13,111.3,1.7,62 +5,46,22.5,12.5,111.3,1.7,62 +6,46,23,12,111.3,1.7,62 +7,46,23.5,11.5,111.3,1.7,62 +8,46,24,11,111.3,1.7,62 +9,46,24.5,10.5,111.3,1.7,62 +10,46,25,10,111.3,1.7,62 +11,46,25.5,9.5,111.3,1.7,62 +12,46,26,9,111.3,1.7,62 +13,46,26.5,8.5,111.3,1.7,62 +14,46,27,8,111.3,1.7,62 +15,46,27.5,7.5,111.3,1.7,62 +16,46,28,7,111.3,1.7,62 +17,46,28.5,6.5,111.3,1.7,62 +18,46,29,6,111.3,1.7,62 +19,46,29.5,5.5,111.3,1.7,62 +20,46,30,5,111.3,1.7,62 +21,46,30,4.5,111.3,1.7,62 +22,46,30,4,111.3,1.7,62 +23,46,30,4,111.3,1.7,62 +24,46,30,4,111.3,1.7,62 +25,46,30,4,111.3,1.7,62 +26,46,30,4,111.3,1.7,62 +27,46,30,4,111.3,1.7,62 +28,46,30,4,111.3,1.7,62 +29,46,30,4,111.3,1.7,62 +30,46,30,4,111.3,1.7,62 +31,46,30,3.4,111.3,1.7,62 +32,46,30,3.4,111.3,1.7,62 +33,46,30,3.4,111.3,1.7,62 +34,46,30,3.4,111.3,1.7,62 +35,46,30,3.4,111.3,1.7,62 +36,46,30,3.4,111.3,1.7,62 +37,46,30,3.4,111.3,1.7,62 +38,46,30,3.4,111.3,1.7,62 +39,46,30,3.4,111.3,1.7,62 +40,46,30,3.4,111.3,1.7,62 +41,46,30,3.4,111.3,1.7,62 +42,46,30,3.4,111.3,1.7,62 +43,46,30,3.4,111.3,1.7,62 +44,46,30,3.4,111.3,1.7,62 +45,46,30,3.4,111.3,1.7,62 +46,46,30,3.4,111.3,1.7,62 +47,46,30,3.4,111.3,1.7,62 +48,46,30,3.4,111.3,1.7,62 +49,46,30,3.4,111.3,1.7,62 +50,46,30,3.4,111.3,1.7,62 +51,46,30,3.4,111.3,1.7,62.1 +52,46,30,3.4,111.3,1.7,62.2 +53,46,30,3.4,111.3,1.7,62.3 +54,46,30,3.4,111.3,1.7,62.4 +55,46,30,3.4,111.3,1.7,62.5 +56,46,30,3.4,111.3,1.7,62.6 +57,46,30,3.4,111.3,1.7,62.7 +58,46,30,3.4,111.3,1.7,62.8 +59,46,30,3.4,111.3,1.7,62.9 +60,46,30,3.4,111.3,1.7,63 +61,46,30,3,111.3,1.7,63.1 +62,46,30,3,111.3,1.7,63.2 +63,46,30,3,111.3,1.7,63.3 +64,46,30,3,111.3,1.7,63.4 +65,46,30,3,111.3,1.7,63.5 +66,46,30,3,111.3,1.7,63.6 +67,46,30,3,111.3,1.7,63.7 +68,46,30,3,111.3,1.7,63.8 +69,46,30,3,111.3,1.7,63.9 +70,46,30,3,111.3,1.7,64 +71,46,30,3,111.3,1.7,64.1 +72,46,30,3,111.3,1.7,64.2 +73,46,30,3,111.3,1.7,64.3 +74,46,30,3,111.3,1.7,64.4 +75,46,30,3,111.3,1.7,64.5 +76,46,30,3,111.3,1.7,64.6 +77,46,30,3,111.3,1.7,64.7 +78,46,30,3,111.3,1.7,64.8 +79,46,30,3,111.3,1.7,64.9 +80,46,30,3,111.3,1.7,65 +81,46,30,3,111.3,1.7,65.1 +82,46,30,3,111.3,1.7,65.2 +83,46,30,3,111.3,1.7,65.3 +84,46,30,3,111.3,1.7,65.4 +85,46,30,3,111.3,1.7,65.5 +86,46,30,3,111.3,1.7,65.6 +87,46,30,3,111.3,1.7,65.7 +88,46,30,3,111.3,1.7,65.8 +89,46,30,3,111.3,1.7,65.9 +90,46,30,3,111.3,1.7,66 +91,46,30,3,111.3,1.7,66.1 +92,46,30,3,111.3,1.7,66.2 +93,46,30,3,111.3,1.7,66.3 +94,46,30,3,111.3,1.7,66.4 +95,46,30,3,111.3,1.7,66.5 +96,46,30,3,111.3,1.7,66.6 +97,46,30,3,111.3,1.7,66.7 +98,46,30,3,111.3,1.7,66.8 +99,46,30,3,111.3,1.7,66.9 +100,46,30,3,111.3,1.7,67 +101,46,30,3,111.3,1.7,67 +102,46,30,3,111.3,1.7,67 +103,46,30,3,111.3,1.7,67 +104,46,30,3,111.3,1.7,67 +105,46,30,3,111.3,1.7,67 +106,46,30,3,111.3,1.7,67 +107,46,30,3,111.3,1.7,67 +108,46,30,3,111.3,1.7,67 +109,46,30,3,111.3,1.7,67 +110,46,30,3,111.3,1.7,67 +111,46,30,3,111.3,1.7,67 +112,46,30,3,111.3,1.7,67 +113,46,30,3,111.3,1.7,67 +114,46,30,3,111.3,1.7,67 +115,46,30,3,111.3,1.7,67 +116,46,30,3,111.3,1.7,67 +117,46,30,3,111.3,1.7,67 +118,46,30,3,111.3,1.7,67 +119,46,30,3,111.3,1.7,67 +120,46,30,3,111.3,1.7,67 +121,46,30,3,111.3,1.7,67 +122,46,30,3,111.3,1.7,67 +123,46,30,3,111.3,1.7,67 +124,46,30,3,111.3,1.7,67 +125,46,30,3,111.3,1.7,67 +126,46,30,3,111.3,1.7,67 +127,46,30,3,111.3,1.7,67 +128,46,30,3,111.3,1.7,67 +129,46,30,3,111.3,1.7,67 +130,46,30,3,111.3,1.7,67 +131,46,30,3,111.3,1.7,67 +132,46,30,3,111.3,1.7,67 +133,46,30,3,111.3,1.7,67 +134,46,30,3,111.3,1.7,67 +135,46,30,3,111.3,1.7,67 +136,46,30,3,111.3,1.7,67 +137,46,30,3,111.3,1.7,67 +138,46,30,3,111.3,1.7,67 +139,46,30,3,111.3,1.7,67 +140,46,30,3,111.3,1.7,67 +141,46,30,3,111.3,1.7,67 +142,46,30,3,111.3,1.7,67 +143,46,30,3,111.3,1.7,67 +144,46,30,3,111.3,1.7,67 +145,46,30,3,111.3,1.7,67 +146,46,30,3,111.3,1.7,67 +147,46,30,3,111.3,1.7,67 +148,46,30,3,111.3,1.7,67 +149,46,30,3,111.3,1.7,67 +150,46,30,3,111.3,1.7,67 +151,46,30,3,111.3,1.7,67 +152,46,30,3,111.3,1.7,67 +153,46,30,3,111.3,1.7,67 +154,46,30,3,111.3,1.7,67 +155,46,30,3,111.3,1.7,67 +156,46,30,3,111.3,1.7,67 +157,46,30,3,111.3,1.7,67 +158,46,30,3,111.3,1.7,67 +159,46,30,3,111.3,1.7,67 +160,46,30,3,111.3,1.7,67 +161,46,30,3,111.3,1.7,67 +162,46,30,3,111.3,1.7,67 +163,46,30,3,111.3,1.7,67 +164,46,30,3,111.3,1.7,67 +165,46,30,3,111.3,1.7,67 +166,46,30,3,111.3,1.7,67 +167,46,30,3,111.3,1.7,67 +168,46,30,3,111.3,1.7,67 +169,46,30,3,111.3,1.7,67 +170,46,30,3,111.3,1.7,67 +171,46,30,3,111.3,1.7,67 +172,46,30,3,111.3,1.7,67 +173,46,30,3,111.3,1.7,67 +174,46,30,3,111.3,1.7,67 +175,46,30,3,111.3,1.7,67 +176,46,30,3,111.3,1.7,67 +177,46,30,3,111.3,1.7,67 +178,46,30,3,111.3,1.7,67 +179,46,30,3,111.3,1.7,67 +180,46,30,3,111.3,1.7,67 +181,46,30,3,111.3,1.7,67 +182,46,30,3,111.3,1.7,67 +183,46,30,3,111.3,1.7,67 +184,46,30,3,111.3,1.7,67 +185,46,30,3,111.3,1.7,67 +186,46,30,3,111.3,1.7,67 +187,46,30,3,111.3,1.7,67 +188,46,30,3,111.3,1.7,67 +189,46,30,3,111.3,1.7,67 +190,46,30,3,111.3,1.7,67 +191,46,30,3,111.3,1.7,67 +192,46,30,3,111.3,1.7,67 +193,46,30,3,111.3,1.7,67 +194,46,30,3,111.3,1.7,67 +195,46,30,3,111.3,1.7,67 +196,46,30,3,111.3,1.7,67 +197,46,30,3,111.3,1.7,67 +198,46,30,3,111.3,1.7,67 +199,46,30,3,111.3,1.7,67 +200,46,30,2.9,111.3,1.7,67 +201,46,30,2.9,111.05,1.7,67 +202,46,30,2.9,111.05,1.7,67 +203,46,30,2.9,111.05,1.7,67 +204,46,30,2.9,111.05,1.7,67 +205,46,30,2.9,111.05,1.7,67 +206,46,30,2.9,111.05,1.7,67 +207,46,30,2.9,111.05,1.7,67 +208,46,30,2.9,111.05,1.7,67 +209,46,30,2.9,111.05,1.7,67 +210,46,30,2.9,111.05,1.7,67 +211,46,30,2.9,111.05,1.7,67 +212,46,30,2.9,111.05,1.7,67 +213,46,30,2.9,111.05,1.7,67 +214,46,30,2.9,111.05,1.7,67 +215,46,30,2.9,111.05,1.7,67 +216,46,30,2.9,111.05,1.7,67 +217,46,30,2.9,111.05,1.7,67 +218,46,30,2.9,111.05,1.7,67 +219,46,30,2.9,111.05,1.7,67 +220,46,30,2.9,111.05,1.7,67 +221,46,30,2.9,111.05,1.7,67 +222,46,30,2.9,111.05,1.7,67 +223,46,30,2.9,111.05,1.7,67 +224,46,30,2.9,111.05,1.7,67 +225,46,30,2.9,111.05,1.7,67 +226,46,30,2.9,111.05,1.7,67 +227,46,30,2.9,111.05,1.7,67 +228,46,30,2.9,111.05,1.7,67 +229,46,30,2.9,111.05,1.7,67 +230,46,30,2.9,111.05,1.7,67 +231,46,30,2.9,111.05,1.7,67 +232,46,30,2.9,111.05,1.7,67 +233,46,30,2.9,111.05,1.7,67 +234,46,30,2.9,111.05,1.7,67 +235,46,30,2.9,111.05,1.7,67 +236,46,30,2.9,111.05,1.7,67 +237,46,30,2.9,111.05,1.7,67 +238,46,30,2.9,111.05,1.7,67 +239,46,30,2.9,111.05,1.7,67 +240,46,30,2.9,111.05,1.7,67 +241,46,30,2.9,111.05,1.7,67 +242,46,30,2.9,111.05,1.7,67 +243,46,30,2.9,111.05,1.7,67 +244,46,30,2.9,111.05,1.7,67 +245,46,30,2.9,111.05,1.7,67 +246,46,30,2.9,111.05,1.7,67 +247,46,30,2.9,111.05,1.7,67 +248,46,30,2.9,111.05,1.7,67 +249,46,30,2.9,111.05,1.7,67 +250,46,30,2.8,111.05,1.7,67 +251,46,30,2.8,111.05,1.7,67 +252,46,30,2.8,111.05,1.7,67 +253,46,30,2.8,111.05,1.7,67 +254,46,30,2.8,111.05,1.7,67 +255,46,30,2.8,111.05,1.7,67 +256,46,30,2.8,111.05,1.7,67 +257,46,30,2.8,111.05,1.7,67 +258,46,30,2.8,111.05,1.7,67 +259,46,30,2.8,111.05,1.7,67 +260,46,30,2.8,111.05,1.7,67 +261,46,30,2.8,111.05,1.7,67 +262,46,30,2.8,111.05,1.7,67 +263,46,30,2.8,111.05,1.7,67 +264,46,30,2.8,111.05,1.7,67 +265,46,30,2.8,111.05,1.7,67 +266,46,30,2.8,111.05,1.7,67 +267,46,30,2.8,111.05,1.7,67 +268,46,30,2.8,111.05,1.7,67 +269,46,30,2.8,111.05,1.7,67 +270,46,30,2.8,111.05,1.7,67 +271,46,30,2.8,111.05,1.7,67 +272,46,30,2.8,111.05,1.7,67 +273,46,30,2.8,111.05,1.7,67 +274,46,30,2.8,111.05,1.7,67 +275,46,30,2.8,111.05,1.7,67 +276,46,30,2.8,111.05,1.7,67 +277,46,30,2.8,111.05,1.7,67 +278,46,30,2.8,111.05,1.7,67 +279,46,30,2.8,111.05,1.7,67 +280,46,30,2.8,111.05,1.7,67 +281,46,30,2.8,111.05,1.7,67 +282,46,30,2.8,111.05,1.7,67 +283,46,30,2.8,111.05,1.7,67 +284,46,30,2.8,111.05,1.7,67 +285,46,30,2.8,111.05,1.7,67 +286,46,30,2.8,111.05,1.7,67 +287,46,30,2.8,111.05,1.7,67 +288,46,30,2.8,111.05,1.7,67 +289,46,30,2.8,111.05,1.7,67 +290,46,30,2.8,111.05,1.7,67 +291,46,30,2.8,111.05,1.7,67 +292,46,30,2.8,111.05,1.7,67 +293,46,30,2.8,111.05,1.7,67 +294,46,30,2.8,111.05,1.7,67 +295,46,30,2.8,111.05,1.7,67 +296,46,30,2.8,111.05,1.7,67 +297,46,30,2.8,111.05,1.7,67 +298,46,30,2.8,111.05,1.7,67 +299,46,30,2.8,111.05,1.7,67 +300,46,30,2.7,111.05,1.7,67 +301,46,30,2.7,111.05,1.7,67 +302,46,30,2.7,111.05,1.7,67 +303,46,30,2.7,111.05,1.7,67 +304,46,30,2.7,111.05,1.7,67 +305,46,30,2.7,111.05,1.7,67 +306,46,30,2.7,111.05,1.7,67 +307,46,30,2.7,111.05,1.7,67 +308,46,30,2.7,111.05,1.7,67 +309,46,30,2.7,111.05,1.7,67 +310,46,30,2.7,111.05,1.7,67 +311,46,30,2.7,111.05,1.7,67 +312,46,30,2.7,111.05,1.7,67 +313,46,30,2.7,111.05,1.7,67 +314,46,30,2.7,111.05,1.7,67 +315,46,30,2.7,111.05,1.7,67 +316,46,30,2.7,111.05,1.7,67 +317,46,30,2.7,111.05,1.7,67 +318,46,30,2.7,111.05,1.7,67 +319,46,30,2.7,111.05,1.7,67 +320,46,30,2.7,111.05,1.7,67 +321,46,30,2.7,111.05,1.7,67 +322,46,30,2.7,111.05,1.7,67 +323,46,30,2.7,111.05,1.7,67 +324,46,30,2.7,111.05,1.7,67 +325,46,30,2.7,111.05,1.7,67 +326,46,30,2.7,111.05,1.7,67 +327,46,30,2.7,111.05,1.7,67 +328,46,30,2.7,111.05,1.7,67 +329,46,30,2.7,111.05,1.7,67 +330,46,30,2.7,111.05,1.7,67 +331,46,30,2.7,111.05,1.7,67 +332,46,30,2.7,111.05,1.7,67 +333,46,30,2.7,111.05,1.7,67 +334,46,30,2.7,111.05,1.7,67 +335,46,30,2.7,111.05,1.7,67 +336,46,30,2.7,111.05,1.7,67 +337,46,30,2.7,111.05,1.7,67 +338,46,30,2.7,111.05,1.7,67 +339,46,30,2.7,111.05,1.7,67 +340,46,30,2.7,111.05,1.7,67 +341,46,30,2.7,111.05,1.7,67 +342,46,30,2.7,111.05,1.7,67 +343,46,30,2.7,111.05,1.7,67 +344,46,30,2.7,111.05,1.7,67 +345,46,30,2.7,111.05,1.7,67 +346,46,30,2.7,111.05,1.7,67 +347,46,30,2.7,111.05,1.7,67 +348,46,30,2.7,111.05,1.7,67 +349,46,30,2.7,111.05,1.7,67 +350,46,30,2.7,111.05,1.7,67 +351,46,30,2.7,111.05,1.7,67 +352,46,30,2.7,111.05,1.7,67 +353,46,30,2.7,111.05,1.7,67 +354,46,30,2.7,111.05,1.7,67 +355,46,30,2.7,111.05,1.7,67 +356,46,30,2.7,111.05,1.7,67 +357,46,30,2.7,111.05,1.7,67 +358,46,30,2.7,111.05,1.7,67 +359,46,30,2.7,111.05,1.7,67 +360,46,30,2.7,111.05,1.7,67 +361,46,30,2.7,111.05,1.7,67 +362,46,30,2.7,111.05,1.7,67 +363,46,30,2.7,111.05,1.7,67 +364,46,30,2.7,111.05,1.7,67 +365,46,30,2.7,111.05,1.7,67 +366,46,30,2.7,111.05,1.7,67 +367,46,30,2.7,111.05,1.7,67 +368,46,30,2.7,111.05,1.7,67 +369,46,30,2.7,111.05,1.7,67 +370,46,30,2.7,111.05,1.7,67 +371,46,30,2.7,111.05,1.7,67 +372,46,30,2.7,111.05,1.7,67 +373,46,30,2.7,111.05,1.7,67 +374,46,30,2.7,111.05,1.7,67 +375,46,30,2.7,111.05,1.7,67 +376,46,30,2.7,111.05,1.7,67 +377,46,30,2.7,111.05,1.7,67 +378,46,30,2.7,111.05,1.7,67 +379,46,30,2.7,111.05,1.7,67 +380,46,30,2.7,111.05,1.7,67 +381,46,30,2.7,111.05,1.7,67 +382,46,30,2.7,111.05,1.7,67 +383,46,30,2.7,111.05,1.7,67 +384,46,30,2.7,111.05,1.7,67 +385,46,30,2.7,111.05,1.7,67 +386,46,30,2.7,111.05,1.7,67 +387,46,30,2.7,111.05,1.7,67 +388,46,30,2.7,111.05,1.7,67 +389,46,30,2.7,111.05,1.7,67 +390,46,30,2.7,111.05,1.7,67 +391,46,30,2.7,111.05,1.7,67 +392,46,30,2.7,111.05,1.7,67 +393,46,30,2.7,111.05,1.7,67 +394,46,30,2.7,111.05,1.7,67 +395,46,30,2.7,111.05,1.7,67 +396,46,30,2.7,111.05,1.7,67 +397,46,30,2.7,111.05,1.7,67 +398,46,30,2.7,111.05,1.7,67 +399,46,30,2.7,111.05,1.7,67 +400,46,30,2.7,111.05,1.7,67 +401,46,30,2.7,111.05,1.7,66.9975 +402,46,30,2.7,111.05,1.7,66.995 +403,46,30,2.7,111.05,1.7,66.9925 +404,46,30,2.7,111.05,1.7,66.99 +405,46,30,2.7,111.05,1.7,66.9875 +406,46,30,2.7,111.05,1.7,66.985 +407,46,30,2.7,111.05,1.7,66.9825 +408,46,30,2.7,111.05,1.7,66.98 +409,46,30,2.7,111.05,1.7,66.9775 +410,46,30,2.7,111.05,1.7,66.975 +411,46,30,2.7,111.05,1.7,66.9725 +412,46,30,2.7,111.05,1.7,66.97 +413,46,30,2.7,111.05,1.7,66.9675 +414,46,30,2.7,111.05,1.7,66.965 +415,46,30,2.7,111.05,1.7,66.9625 +416,46,30,2.7,111.05,1.7,66.96 +417,46,30,2.7,111.05,1.7,66.9575 +418,46,30,2.7,111.05,1.7,66.955 +419,46,30,2.7,111.05,1.7,66.9525 +420,46,30,2.7,111.05,1.7,66.95 +421,46,30,2.7,111.05,1.7,66.9475 +422,46,30,2.7,111.05,1.7,66.945 +423,46,30,2.7,111.05,1.7,66.9425 +424,46,30,2.7,111.05,1.7,66.94 +425,46,30,2.7,111.05,1.7,66.9375 +426,46,30,2.7,111.05,1.7,66.935 +427,46,30,2.7,111.05,1.7,66.9325 +428,46,30,2.7,111.05,1.7,66.93 +429,46,30,2.7,111.05,1.7,66.9275 +430,46,30,2.7,111.05,1.7,66.925 +431,46,30,2.7,111.05,1.7,66.9225 +432,46,30,2.7,111.05,1.7,66.92 +433,46,30,2.7,111.05,1.7,66.9175 +434,46,30,2.7,111.05,1.7,66.915 +435,46,30,2.7,111.05,1.7,66.9125 +436,46,30,2.7,111.05,1.7,66.91 +437,46,30,2.7,111.05,1.7,66.9075 +438,46,30,2.7,111.05,1.7,66.905 +439,46,30,2.7,111.05,1.7,66.9025 +440,46,30,2.7,111.05,1.7,66.9 +441,46,30,2.7,111.05,1.7,66.8975 +442,46,30,2.7,111.05,1.7,66.895 +443,46,30,2.7,111.05,1.7,66.8925 +444,46,30,2.7,111.05,1.7,66.89 +445,46,30,2.7,111.05,1.7,66.8875 +446,46,30,2.7,111.05,1.7,66.885 +447,46,30,2.7,111.05,1.7,66.8825 +448,46,30,2.7,111.05,1.7,66.88 +449,46,30,2.7,111.05,1.7,66.8775 +450,46,30,2.7,111.05,1.7,66.875 +451,46,30,2.7,111.05,1.7,66.8725 +452,46,30,2.7,111.05,1.7,66.87 +453,46,30,2.7,111.05,1.7,66.8675 +454,46,30,2.7,111.05,1.7,66.865 +455,46,30,2.7,111.05,1.7,66.8625 +456,46,30,2.7,111.05,1.7,66.86 +457,46,30,2.7,111.05,1.7,66.8575 +458,46,30,2.7,111.05,1.7,66.855 +459,46,30,2.7,111.05,1.7,66.8525 +460,46,30,2.7,111.05,1.7,66.85 +461,46,30,2.7,111.05,1.7,66.8475 +462,46,30,2.7,111.05,1.7,66.845 +463,46,30,2.7,111.05,1.7,66.8425 +464,46,30,2.7,111.05,1.7,66.84 +465,46,30,2.7,111.05,1.7,66.8375 +466,46,30,2.7,111.05,1.7,66.835 +467,46,30,2.7,111.05,1.7,66.8325 +468,46,30,2.7,111.05,1.7,66.83 +469,46,30,2.7,111.05,1.7,66.8275 +470,46,30,2.7,111.05,1.7,66.825 +471,46,30,2.7,111.05,1.7,66.8225 +472,46,30,2.7,111.05,1.7,66.82 +473,46,30,2.7,111.05,1.7,66.8175 +474,46,30,2.7,111.05,1.7,66.815 +475,46,30,2.7,111.05,1.7,66.8125 +476,46,30,2.7,111.05,1.7,66.81 +477,46,30,2.7,111.05,1.7,66.8075 +478,46,30,2.7,111.05,1.7,66.805 +479,46,30,2.7,111.05,1.7,66.8025 +480,46,30,2.7,111.05,1.7,66.8 +481,46,30,2.7,111.05,1.7,66.7975 +482,46,30,2.7,111.05,1.7,66.795 +483,46,30,2.7,111.05,1.7,66.7925 +484,46,30,2.7,111.05,1.7,66.79 +485,46,30,2.7,111.05,1.7,66.7875 +486,46,30,2.7,111.05,1.7,66.785 +487,46,30,2.7,111.05,1.7,66.7825 +488,46,30,2.7,111.05,1.7,66.78 +489,46,30,2.7,111.05,1.7,66.7775 +490,46,30,2.7,111.05,1.7,66.775 +491,46,30,2.7,111.05,1.7,66.7725 +492,46,30,2.7,111.05,1.7,66.77 +493,46,30,2.7,111.05,1.7,66.7675 +494,46,30,2.7,111.05,1.7,66.765 +495,46,30,2.7,111.05,1.7,66.7625 +496,46,30,2.7,111.05,1.7,66.76 +497,46,30,2.7,111.05,1.7,66.7575 +498,46,30,2.7,111.05,1.7,66.755 +499,46,30,2.7,111.05,1.7,66.7525 +500,46,30,2.7,111.05,1.7,66.75 +501,46,30,2.7,111.05,1.7,66.7475 +502,46,30,2.7,111.05,1.7,66.745 +503,46,30,2.7,111.05,1.7,66.7425 +504,46,30,2.7,111.05,1.7,66.74 +505,46,30,2.7,111.05,1.7,66.7375 +506,46,30,2.7,111.05,1.7,66.735 +507,46,30,2.7,111.05,1.7,66.7325 +508,46,30,2.7,111.05,1.7,66.73 +509,46,30,2.7,111.05,1.7,66.7275 +510,46,30,2.7,111.05,1.7,66.725 +511,46,30,2.7,111.05,1.7,66.7225 +512,46,30,2.7,111.05,1.7,66.72 +513,46,30,2.7,111.05,1.7,66.7175 +514,46,30,2.7,111.05,1.7,66.715 +515,46,30,2.7,111.05,1.7,66.7125 +516,46,30,2.7,111.05,1.7,66.71 +517,46,30,2.7,111.05,1.7,66.7075 +518,46,30,2.7,111.05,1.7,66.705 +519,46,30,2.7,111.05,1.7,66.7025 +520,46,30,2.7,111.05,1.7,66.7 +521,46,30,2.7,111.05,1.7,66.6975 +522,46,30,2.7,111.05,1.7,66.695 +523,46,30,2.7,111.05,1.7,66.6925 +524,46,30,2.7,111.05,1.7,66.69 +525,46,30,2.7,111.05,1.7,66.6875 +526,46,30,2.7,111.05,1.7,66.685 +527,46,30,2.7,111.05,1.7,66.6825 +528,46,30,2.7,111.05,1.7,66.68 +529,46,30,2.7,111.05,1.7,66.6775 +530,46,30,2.7,111.05,1.7,66.675 +531,46,30,2.7,111.05,1.7,66.6725 +532,46,30,2.7,111.05,1.7,66.67 +533,46,30,2.7,111.05,1.7,66.6675 +534,46,30,2.7,111.05,1.7,66.665 +535,46,30,2.7,111.05,1.7,66.6625 +536,46,30,2.7,111.05,1.7,66.66 +537,46,30,2.7,111.05,1.7,66.6575 +538,46,30,2.7,111.05,1.7,66.655 +539,46,30,2.7,111.05,1.7,66.6525 +540,46,30,2.7,111.05,1.7,66.65 +541,46,30,2.7,111.05,1.7,66.6475 +542,46,30,2.7,111.05,1.7,66.645 +543,46,30,2.7,111.05,1.7,66.6425 +544,46,30,2.7,111.05,1.7,66.64 +545,46,30,2.7,111.05,1.7,66.6375 +546,46,30,2.7,111.05,1.7,66.635 +547,46,30,2.7,111.05,1.7,66.6325 +548,46,30,2.7,111.05,1.7,66.63 +549,46,30,2.7,111.05,1.7,66.6275 +550,46,30,2.7,111.05,1.7,66.625 +551,46,30,2.7,111.05,1.7,66.6225 +552,46,30,2.7,111.05,1.7,66.62 +553,46,30,2.7,111.05,1.7,66.6175 +554,46,30,2.7,111.05,1.7,66.615 +555,46,30,2.7,111.05,1.7,66.6125 +556,46,30,2.7,111.05,1.7,66.61 +557,46,30,2.7,111.05,1.7,66.6075 +558,46,30,2.7,111.05,1.7,66.605 +559,46,30,2.7,111.05,1.7,66.6025 +560,46,30,2.7,111.05,1.7,66.6 +561,46,30,2.7,111.05,1.7,66.5975 +562,46,30,2.7,111.05,1.7,66.595 +563,46,30,2.7,111.05,1.7,66.5925 +564,46,30,2.7,111.05,1.7,66.59 +565,46,30,2.7,111.05,1.7,66.5875 +566,46,30,2.7,111.05,1.7,66.585 +567,46,30,2.7,111.05,1.7,66.5825 +568,46,30,2.7,111.05,1.7,66.58 +569,46,30,2.7,111.05,1.7,66.5775 +570,46,30,2.7,111.05,1.7,66.575 +571,46,30,2.7,111.05,1.7,66.5725 +572,46,30,2.7,111.05,1.7,66.57 +573,46,30,2.7,111.05,1.7,66.5675 +574,46,30,2.7,111.05,1.7,66.565 +575,46,30,2.7,111.05,1.7,66.5625 +576,46,30,2.7,111.05,1.7,66.56 +577,46,30,2.7,111.05,1.7,66.5575 +578,46,30,2.7,111.05,1.7,66.555 +579,46,30,2.7,111.05,1.7,66.5525 +580,46,30,2.7,111.05,1.7,66.55 +581,46,30,2.7,111.05,1.7,66.5475 +582,46,30,2.7,111.05,1.7,66.545 +583,46,30,2.7,111.05,1.7,66.5425 +584,46,30,2.7,111.05,1.7,66.54 +585,46,30,2.7,111.05,1.7,66.5375 +586,46,30,2.7,111.05,1.7,66.535 +587,46,30,2.7,111.05,1.7,66.5325 +588,46,30,2.7,111.05,1.7,66.53 +589,46,30,2.7,111.05,1.7,66.5275 +590,46,30,2.7,111.05,1.7,66.525 +591,46,30,2.7,111.05,1.7,66.5225 +592,46,30,2.7,111.05,1.7,66.52 +593,46,30,2.7,111.05,1.7,66.5175 +594,46,30,2.7,111.05,1.7,66.515 +595,46,30,2.7,111.05,1.7,66.5125 +596,46,30,2.7,111.05,1.7,66.51 +597,46,30,2.7,111.05,1.7,66.5075 +598,46,30,2.7,111.05,1.7,66.505 +599,46,30,2.7,111.05,1.7,66.5025 +600,46,30,2.7,111.05,1.7,66.5 +601,46,30,2.7,111.05,1.7,66.495 +602,46,30,2.7,111.05,1.7,66.49 +603,46,30,2.7,111.05,1.7,66.485 +604,46,30,2.7,111.05,1.7,66.48 +605,46,30,2.7,111.05,1.7,66.475 +606,46,30,2.7,111.05,1.7,66.47 +607,46,30,2.7,111.05,1.7,66.465 +608,46,30,2.7,111.05,1.7,66.46 +609,46,30,2.7,111.05,1.7,66.455 +610,46,30,2.7,111.05,1.7,66.45 +611,46,30,2.7,111.05,1.7,66.445 +612,46,30,2.7,111.05,1.7,66.44 +613,46,30,2.7,111.05,1.7,66.435 +614,46,30,2.7,111.05,1.7,66.43 +615,46,30,2.7,111.05,1.7,66.425 +616,46,30,2.7,111.05,1.7,66.42 +617,46,30,2.7,111.05,1.7,66.415 +618,46,30,2.7,111.05,1.7,66.41 +619,46,30,2.7,111.05,1.7,66.405 +620,46,30,2.7,111.05,1.7,66.4 +621,46,30,2.7,111.05,1.7,66.395 +622,46,30,2.7,111.05,1.7,66.39 +623,46,30,2.7,111.05,1.7,66.385 +624,46,30,2.7,111.05,1.7,66.38 +625,46,30,2.7,111.05,1.7,66.375 +626,46,30,2.7,111.05,1.7,66.37 +627,46,30,2.7,111.05,1.7,66.365 +628,46,30,2.7,111.05,1.7,66.36 +629,46,30,2.7,111.05,1.7,66.355 +630,46,30,2.7,111.05,1.7,66.35 +631,46,30,2.7,111.05,1.7,66.345 +632,46,30,2.7,111.05,1.7,66.34 +633,46,30,2.7,111.05,1.7,66.335 +634,46,30,2.7,111.05,1.7,66.33 +635,46,30,2.7,111.05,1.7,66.325 +636,46,30,2.7,111.05,1.7,66.32 +637,46,30,2.7,111.05,1.7,66.315 +638,46,30,2.7,111.05,1.7,66.31 +639,46,30,2.7,111.05,1.7,66.305 +640,46,30,2.7,111.05,1.7,66.3 +641,46,30,2.7,111.05,1.7,66.295 +642,46,30,2.7,111.05,1.7,66.29 +643,46,30,2.7,111.05,1.7,66.285 +644,46,30,2.7,111.05,1.7,66.28 +645,46,30,2.7,111.05,1.7,66.275 +646,46,30,2.7,111.05,1.7,66.27 +647,46,30,2.7,111.05,1.7,66.265 +648,46,30,2.7,111.05,1.7,66.26 +649,46,30,2.7,111.05,1.7,66.255 +650,46,30,2.7,111.05,1.7,66.25 +651,46,30,2.7,111.05,1.7,66.245 +652,46,30,2.7,111.05,1.7,66.24 +653,46,30,2.7,111.05,1.7,66.235 +654,46,30,2.7,111.05,1.7,66.23 +655,46,30,2.7,111.05,1.7,66.225 +656,46,30,2.7,111.05,1.7,66.22 +657,46,30,2.7,111.05,1.7,66.215 +658,46,30,2.7,111.05,1.7,66.21 +659,46,30,2.7,111.05,1.7,66.205 +660,46,30,2.7,111.05,1.7,66.2 +661,46,30,2.7,111.05,1.7,66.195 +662,46,30,2.7,111.05,1.7,66.19 +663,46,30,2.7,111.05,1.7,66.185 +664,46,30,2.7,111.05,1.7,66.18 +665,46,30,2.7,111.05,1.7,66.175 +666,46,30,2.7,111.05,1.7,66.17 +667,46,30,2.7,111.05,1.7,66.165 +668,46,30,2.7,111.05,1.7,66.16 +669,46,30,2.7,111.05,1.7,66.155 +670,46,30,2.7,111.05,1.7,66.15 +671,46,30,2.7,111.05,1.7,66.145 +672,46,30,2.7,111.05,1.7,66.14 +673,46,30,2.7,111.05,1.7,66.135 +674,46,30,2.7,111.05,1.7,66.13 +675,46,30,2.7,111.05,1.7,66.125 +676,46,30,2.7,111.05,1.7,66.12 +677,46,30,2.7,111.05,1.7,66.115 +678,46,30,2.7,111.05,1.7,66.11 +679,46,30,2.7,111.05,1.7,66.105 +680,46,30,2.7,111.05,1.7,66.1 +681,46,30,2.7,111.05,1.7,66.095 +682,46,30,2.7,111.05,1.7,66.09 +683,46,30,2.7,111.05,1.7,66.085 +684,46,30,2.7,111.05,1.7,66.08 +685,46,30,2.7,111.05,1.7,66.075 +686,46,30,2.7,111.05,1.7,66.07 +687,46,30,2.7,111.05,1.7,66.065 +688,46,30,2.7,111.05,1.7,66.06 +689,46,30,2.7,111.05,1.7,66.055 +690,46,30,2.7,111.05,1.7,66.05 +691,46,30,2.7,111.05,1.7,66.045 +692,46,30,2.7,111.05,1.7,66.04 +693,46,30,2.7,111.05,1.7,66.035 +694,46,30,2.7,111.05,1.7,66.03 +695,46,30,2.7,111.05,1.7,66.025 +696,46,30,2.7,111.05,1.7,66.02 +697,46,30,2.7,111.05,1.7,66.015 +698,46,30,2.7,111.05,1.7,66.01 +699,46,30,2.7,111.05,1.7,66.005 +700,46,30,2.7,111.05,1.7,66 +701,46,30,2.7,111.05,1.7,65.995 +702,46,30,2.7,111.05,1.7,65.99 +703,46,30,2.7,111.05,1.7,65.985 +704,46,30,2.7,111.05,1.7,65.98 +705,46,30,2.7,111.05,1.7,65.975 +706,46,30,2.7,111.05,1.7,65.97 +707,46,30,2.7,111.05,1.7,65.965 +708,46,30,2.7,111.05,1.7,65.96 +709,46,30,2.7,111.05,1.7,65.955 +710,46,30,2.7,111.05,1.7,65.95 +711,46,30,2.7,111.05,1.7,65.945 +712,46,30,2.7,111.05,1.7,65.94 +713,46,30,2.7,111.05,1.7,65.935 +714,46,30,2.7,111.05,1.7,65.93 +715,46,30,2.7,111.05,1.7,65.925 +716,46,30,2.7,111.05,1.7,65.92 +717,46,30,2.7,111.05,1.7,65.915 +718,46,30,2.7,111.05,1.7,65.91 +719,46,30,2.7,111.05,1.7,65.905 +720,46,30,2.7,111.05,1.7,65.9 +721,46,30,2.7,111.05,1.7,65.895 +722,46,30,2.7,111.05,1.7,65.89 +723,46,30,2.7,111.05,1.7,65.885 +724,46,30,2.7,111.05,1.7,65.88 +725,46,30,2.7,111.05,1.7,65.875 +726,46,30,2.7,111.05,1.7,65.87 +727,46,30,2.7,111.05,1.7,65.865 +728,46,30,2.7,111.05,1.7,65.86 +729,46,30,2.7,111.05,1.7,65.855 +730,46,30,2.7,111.05,1.7,65.85 +731,46,30,2.7,111.05,1.7,65.845 +732,46,30,2.7,111.05,1.7,65.84 +733,46,30,2.7,111.05,1.7,65.835 +734,46,30,2.7,111.05,1.7,65.83 +735,46,30,2.7,111.05,1.7,65.825 +736,46,30,2.7,111.05,1.7,65.82 +737,46,30,2.7,111.05,1.7,65.815 +738,46,30,2.7,111.05,1.7,65.81 +739,46,30,2.7,111.05,1.7,65.805 +740,46,30,2.7,111.05,1.7,65.8 +741,46,30,2.7,111.05,1.7,65.795 +742,46,30,2.7,111.05,1.7,65.79 +743,46,30,2.7,111.05,1.7,65.785 +744,46,30,2.7,111.05,1.7,65.78 +745,46,30,2.7,111.05,1.7,65.775 +746,46,30,2.7,111.05,1.7,65.77 +747,46,30,2.7,111.05,1.7,65.765 +748,46,30,2.7,111.05,1.7,65.76 +749,46,30,2.7,111.05,1.7,65.755 +750,46,30,2.7,111.05,1.7,65.75 +751,46,30,2.7,111.05,1.7,65.745 +752,46,30,2.7,111.05,1.7,65.74 +753,46,30,2.7,111.05,1.7,65.735 +754,46,30,2.7,111.05,1.7,65.73 +755,46,30,2.7,111.05,1.7,65.725 +756,46,30,2.7,111.05,1.7,65.72 +757,46,30,2.7,111.05,1.7,65.715 +758,46,30,2.7,111.05,1.7,65.71 +759,46,30,2.7,111.05,1.7,65.705 +760,46,30,2.7,111.05,1.7,65.7 +761,46,30,2.7,111.05,1.7,65.695 +762,46,30,2.7,111.05,1.7,65.69 +763,46,30,2.7,111.05,1.7,65.685 +764,46,30,2.7,111.05,1.7,65.68 +765,46,30,2.7,111.05,1.7,65.675 +766,46,30,2.7,111.05,1.7,65.67 +767,46,30,2.7,111.05,1.7,65.665 +768,46,30,2.7,111.05,1.7,65.66 +769,46,30,2.7,111.05,1.7,65.655 +770,46,30,2.7,111.05,1.7,65.65 +771,46,30,2.7,111.05,1.7,65.645 +772,46,30,2.7,111.05,1.7,65.64 +773,46,30,2.7,111.05,1.7,65.635 +774,46,30,2.7,111.05,1.7,65.63 +775,46,30,2.7,111.05,1.7,65.625 +776,46,30,2.7,111.05,1.7,65.62 +777,46,30,2.7,111.05,1.7,65.615 +778,46,30,2.7,111.05,1.7,65.61 +779,46,30,2.7,111.05,1.7,65.605 +780,46,30,2.7,111.05,1.7,65.6 +781,46,30,2.7,111.05,1.7,65.595 +782,46,30,2.7,111.05,1.7,65.59 +783,46,30,2.7,111.05,1.7,65.585 +784,46,30,2.7,111.05,1.7,65.58 +785,46,30,2.7,111.05,1.7,65.575 +786,46,30,2.7,111.05,1.7,65.57 +787,46,30,2.7,111.05,1.7,65.565 +788,46,30,2.7,111.05,1.7,65.56 +789,46,30,2.7,111.05,1.7,65.555 +790,46,30,2.7,111.05,1.7,65.55 +791,46,30,2.7,111.05,1.7,65.545 +792,46,30,2.7,111.05,1.7,65.54 +793,46,30,2.7,111.05,1.7,65.535 +794,46,30,2.7,111.05,1.7,65.53 +795,46,30,2.7,111.05,1.7,65.525 +796,46,30,2.7,111.05,1.7,65.52 +797,46,30,2.7,111.05,1.7,65.515 +798,46,30,2.7,111.05,1.7,65.51 +799,46,30,2.7,111.05,1.7,65.505 +800,46,30,2.7,111.05,1.7,65.5 +801,46,30,2.7,111.05,1.7,65.495 +802,46,30,2.7,111.05,1.7,65.49 +803,46,30,2.7,111.05,1.7,65.485 +804,46,30,2.7,111.05,1.7,65.48 +805,46,30,2.7,111.05,1.7,65.475 +806,46,30,2.7,111.05,1.7,65.47 +807,46,30,2.7,111.05,1.7,65.465 +808,46,30,2.7,111.05,1.7,65.46 +809,46,30,2.7,111.05,1.7,65.455 +810,46,30,2.7,111.05,1.7,65.45 +811,46,30,2.7,111.05,1.7,65.445 +812,46,30,2.7,111.05,1.7,65.44 +813,46,30,2.7,111.05,1.7,65.435 +814,46,30,2.7,111.05,1.7,65.43 +815,46,30,2.7,111.05,1.7,65.425 +816,46,30,2.7,111.05,1.7,65.42 +817,46,30,2.7,111.05,1.7,65.415 +818,46,30,2.7,111.05,1.7,65.41 +819,46,30,2.7,111.05,1.7,65.405 +820,46,30,2.7,111.05,1.7,65.4 +821,46,30,2.7,111.05,1.7,65.395 +822,46,30,2.7,111.05,1.7,65.39 +823,46,30,2.7,111.05,1.7,65.385 +824,46,30,2.7,111.05,1.7,65.38 +825,46,30,2.7,111.05,1.7,65.375 +826,46,30,2.7,111.05,1.7,65.37 +827,46,30,2.7,111.05,1.7,65.365 +828,46,30,2.7,111.05,1.7,65.36 +829,46,30,2.7,111.05,1.7,65.355 +830,46,30,2.7,111.05,1.7,65.35 +831,46,30,2.7,111.05,1.7,65.345 +832,46,30,2.7,111.05,1.7,65.34 +833,46,30,2.7,111.05,1.7,65.335 +834,46,30,2.7,111.05,1.7,65.33 +835,46,30,2.7,111.05,1.7,65.325 +836,46,30,2.7,111.05,1.7,65.32 +837,46,30,2.7,111.05,1.7,65.315 +838,46,30,2.7,111.05,1.7,65.31 +839,46,30,2.7,111.05,1.7,65.305 +840,46,30,2.7,111.05,1.7,65.3 +841,46,30,2.7,111.05,1.7,65.295 +842,46,30,2.7,111.05,1.7,65.29 +843,46,30,2.7,111.05,1.7,65.285 +844,46,30,2.7,111.05,1.7,65.28 +845,46,30,2.7,111.05,1.7,65.275 +846,46,30,2.7,111.05,1.7,65.27 +847,46,30,2.7,111.05,1.7,65.265 +848,46,30,2.7,111.05,1.7,65.26 +849,46,30,2.7,111.05,1.7,65.255 +850,46,30,2.7,111.05,1.7,65.25 +851,46,30,2.7,111.05,1.7,65.245 +852,46,30,2.7,111.05,1.7,65.24 +853,46,30,2.7,111.05,1.7,65.235 +854,46,30,2.7,111.05,1.7,65.23 +855,46,30,2.7,111.05,1.7,65.225 +856,46,30,2.7,111.05,1.7,65.22 +857,46,30,2.7,111.05,1.7,65.215 +858,46,30,2.7,111.05,1.7,65.21 +859,46,30,2.7,111.05,1.7,65.205 +860,46,30,2.7,111.05,1.7,65.2 +861,46,30,2.7,111.05,1.7,65.195 +862,46,30,2.7,111.05,1.7,65.19 +863,46,30,2.7,111.05,1.7,65.185 +864,46,30,2.7,111.05,1.7,65.18 +865,46,30,2.7,111.05,1.7,65.175 +866,46,30,2.7,111.05,1.7,65.17 +867,46,30,2.7,111.05,1.7,65.165 +868,46,30,2.7,111.05,1.7,65.16 +869,46,30,2.7,111.05,1.7,65.155 +870,46,30,2.7,111.05,1.7,65.15 +871,46,30,2.7,111.05,1.7,65.145 +872,46,30,2.7,111.05,1.7,65.14 +873,46,30,2.7,111.05,1.7,65.135 +874,46,30,2.7,111.05,1.7,65.13 +875,46,30,2.7,111.05,1.7,65.125 +876,46,30,2.7,111.05,1.7,65.12 +877,46,30,2.7,111.05,1.7,65.115 +878,46,30,2.7,111.05,1.7,65.11 +879,46,30,2.7,111.05,1.7,65.105 +880,46,30,2.7,111.05,1.7,65.1 +881,46,30,2.7,111.05,1.7,65.095 +882,46,30,2.7,111.05,1.7,65.09 +883,46,30,2.7,111.05,1.7,65.085 +884,46,30,2.7,111.05,1.7,65.08 +885,46,30,2.7,111.05,1.7,65.075 +886,46,30,2.7,111.05,1.7,65.07 +887,46,30,2.7,111.05,1.7,65.065 +888,46,30,2.7,111.05,1.7,65.06 +889,46,30,2.7,111.05,1.7,65.055 +890,46,30,2.7,111.05,1.7,65.05 +891,46,30,2.7,111.05,1.7,65.045 +892,46,30,2.7,111.05,1.7,65.04 +893,46,30,2.7,111.05,1.7,65.035 +894,46,30,2.7,111.05,1.7,65.03 +895,46,30,2.7,111.05,1.7,65.025 +896,46,30,2.7,111.05,1.7,65.02 +897,46,30,2.7,111.05,1.7,65.015 +898,46,30,2.7,111.05,1.7,65.01 +899,46,30,2.7,111.05,1.7,65.005 +900,46,30,2.7,111.05,1.7,65 +901,46,30,2.7,111.05,1.7,64.99833333 +902,46,30,2.7,111.05,1.7,64.99666667 +903,46,30,2.7,111.05,1.7,64.995 +904,46,30,2.7,111.05,1.7,64.99333333 +905,46,30,2.7,111.05,1.7,64.99166667 +906,46,30,2.7,111.05,1.7,64.99 +907,46,30,2.7,111.05,1.7,64.98833333 +908,46,30,2.7,111.05,1.7,64.98666667 +909,46,30,2.7,111.05,1.7,64.985 +910,46,30,2.7,111.05,1.7,64.98333333 +911,46,30,2.7,111.05,1.7,64.98166667 +912,46,30,2.7,111.05,1.7,64.98 +913,46,30,2.7,111.05,1.7,64.97833333 +914,46,30,2.7,111.05,1.7,64.97666667 +915,46,30,2.7,111.05,1.7,64.975 +916,46,30,2.7,111.05,1.7,64.97333333 +917,46,30,2.7,111.05,1.7,64.97166667 +918,46,30,2.7,111.05,1.7,64.97 +919,46,30,2.7,111.05,1.7,64.96833333 +920,46,30,2.7,111.05,1.7,64.96666667 +921,46,30,2.7,111.05,1.7,64.965 +922,46,30,2.7,111.05,1.7,64.96333333 +923,46,30,2.7,111.05,1.7,64.96166667 +924,46,30,2.7,111.05,1.7,64.96 +925,46,30,2.7,111.05,1.7,64.95833333 +926,46,30,2.7,111.05,1.7,64.95666667 +927,46,30,2.7,111.05,1.7,64.955 +928,46,30,2.7,111.05,1.7,64.95333333 +929,46,30,2.7,111.05,1.7,64.95166667 +930,46,30,2.7,111.05,1.7,64.95 +931,46,30,2.7,111.05,1.7,64.94833333 +932,46,30,2.7,111.05,1.7,64.94666667 +933,46,30,2.7,111.05,1.7,64.945 +934,46,30,2.7,111.05,1.7,64.94333333 +935,46,30,2.7,111.05,1.7,64.94166667 +936,46,30,2.7,111.05,1.7,64.94 +937,46,30,2.7,111.05,1.7,64.93833333 +938,46,30,2.7,111.05,1.7,64.93666667 +939,46,30,2.7,111.05,1.7,64.935 +940,46,30,2.7,111.05,1.7,64.93333333 +941,46,30,2.7,111.05,1.7,64.93166667 +942,46,30,2.7,111.05,1.7,64.93 +943,46,30,2.7,111.05,1.7,64.92833333 +944,46,30,2.7,111.05,1.7,64.92666667 +945,46,30,2.7,111.05,1.7,64.925 +946,46,30,2.7,111.05,1.7,64.92333333 +947,46,30,2.7,111.05,1.7,64.92166667 +948,46,30,2.7,111.05,1.7,64.92 +949,46,30,2.7,111.05,1.7,64.91833333 +950,46,30,2.7,111.05,1.7,64.91666667 +951,46,30,2.7,111.05,1.7,64.915 +952,46,30,2.7,111.05,1.7,64.91333333 +953,46,30,2.7,111.05,1.7,64.91166666 +954,46,30,2.7,111.05,1.7,64.91 +955,46,30,2.7,111.05,1.7,64.90833333 +956,46,30,2.7,111.05,1.7,64.90666666 +957,46,30,2.7,111.05,1.7,64.905 +958,46,30,2.7,111.05,1.7,64.90333333 +959,46,30,2.7,111.05,1.7,64.90166666 +960,46,30,2.7,111.05,1.7,64.9 +961,46,30,2.7,111.05,1.7,64.89833333 +962,46,30,2.7,111.05,1.7,64.89666666 +963,46,30,2.7,111.05,1.7,64.895 +964,46,30,2.7,111.05,1.7,64.89333333 +965,46,30,2.7,111.05,1.7,64.89166666 +966,46,30,2.7,111.05,1.7,64.89 +967,46,30,2.7,111.05,1.7,64.88833333 +968,46,30,2.7,111.05,1.7,64.88666666 +969,46,30,2.7,111.05,1.7,64.885 +970,46,30,2.7,111.05,1.7,64.88333333 +971,46,30,2.7,111.05,1.7,64.88166666 +972,46,30,2.7,111.05,1.7,64.88 +973,46,30,2.7,111.05,1.7,64.87833333 +974,46,30,2.7,111.05,1.7,64.87666666 +975,46,30,2.7,111.05,1.7,64.875 +976,46,30,2.7,111.05,1.7,64.87333333 +977,46,30,2.7,111.05,1.7,64.87166666 +978,46,30,2.7,111.05,1.7,64.87 +979,46,30,2.7,111.05,1.7,64.86833333 +980,46,30,2.7,111.05,1.7,64.86666666 +981,46,30,2.7,111.05,1.7,64.865 +982,46,30,2.7,111.05,1.7,64.86333333 +983,46,30,2.7,111.05,1.7,64.86166666 +984,46,30,2.7,111.05,1.7,64.86 +985,46,30,2.7,111.05,1.7,64.85833333 +986,46,30,2.7,111.05,1.7,64.85666666 +987,46,30,2.7,111.05,1.7,64.855 +988,46,30,2.7,111.05,1.7,64.85333333 +989,46,30,2.7,111.05,1.7,64.85166666 +990,46,30,2.7,111.05,1.7,64.85 +991,46,30,2.7,111.05,1.7,64.84833333 +992,46,30,2.7,111.05,1.7,64.84666666 +993,46,30,2.7,111.05,1.7,64.845 +994,46,30,2.7,111.05,1.7,64.84333333 +995,46,30,2.7,111.05,1.7,64.84166666 +996,46,30,2.7,111.05,1.7,64.84 +997,46,30,2.7,111.05,1.7,64.83833333 +998,46,30,2.7,111.05,1.7,64.83666666 +999,46,30,2.7,111.05,1.7,64.835 +1000,46,30,2.7,111.05,1.7,64.83333333 +1001,46,30,2.7,111.05,1.7,64.83166666 +1002,46,30,2.7,111.05,1.7,64.83 +1003,46,30,2.7,111.05,1.7,64.82833333 +1004,46,30,2.7,111.05,1.7,64.82666666 +1005,46,30,2.7,111.05,1.7,64.825 +1006,46,30,2.7,111.05,1.7,64.82333333 +1007,46,30,2.7,111.05,1.7,64.82166666 +1008,46,30,2.7,111.05,1.7,64.82 +1009,46,30,2.7,111.05,1.7,64.81833333 +1010,46,30,2.7,111.05,1.7,64.81666666 +1011,46,30,2.7,111.05,1.7,64.815 +1012,46,30,2.7,111.05,1.7,64.81333333 +1013,46,30,2.7,111.05,1.7,64.81166666 +1014,46,30,2.7,111.05,1.7,64.81 +1015,46,30,2.7,111.05,1.7,64.80833333 +1016,46,30,2.7,111.05,1.7,64.80666666 +1017,46,30,2.7,111.05,1.7,64.805 +1018,46,30,2.7,111.05,1.7,64.80333333 +1019,46,30,2.7,111.05,1.7,64.80166666 +1020,46,30,2.7,111.05,1.7,64.8 +1021,46,30,2.7,111.05,1.7,64.79833333 +1022,46,30,2.7,111.05,1.7,64.79666666 +1023,46,30,2.7,111.05,1.7,64.795 +1024,46,30,2.7,111.05,1.7,64.79333333 +1025,46,30,2.7,111.05,1.7,64.79166666 +1026,46,30,2.7,111.05,1.7,64.79 +1027,46,30,2.7,111.05,1.7,64.78833333 +1028,46,30,2.7,111.05,1.7,64.78666666 +1029,46,30,2.7,111.05,1.7,64.785 +1030,46,30,2.7,111.05,1.7,64.78333333 +1031,46,30,2.7,111.05,1.7,64.78166666 +1032,46,30,2.7,111.05,1.7,64.78 +1033,46,30,2.7,111.05,1.7,64.77833333 +1034,46,30,2.7,111.05,1.7,64.77666666 +1035,46,30,2.7,111.05,1.7,64.775 +1036,46,30,2.7,111.05,1.7,64.77333333 +1037,46,30,2.7,111.05,1.7,64.77166666 +1038,46,30,2.7,111.05,1.7,64.77 +1039,46,30,2.7,111.05,1.7,64.76833333 +1040,46,30,2.7,111.05,1.7,64.76666666 +1041,46,30,2.7,111.05,1.7,64.765 +1042,46,30,2.7,111.05,1.7,64.76333333 +1043,46,30,2.7,111.05,1.7,64.76166666 +1044,46,30,2.7,111.05,1.7,64.76 +1045,46,30,2.7,111.05,1.7,64.75833333 +1046,46,30,2.7,111.05,1.7,64.75666666 +1047,46,30,2.7,111.05,1.7,64.755 +1048,46,30,2.7,111.05,1.7,64.75333333 +1049,46,30,2.7,111.05,1.7,64.75166666 +1050,46,30,2.7,111.05,1.7,64.75 +1051,46,30,2.7,111.05,1.7,64.74833333 +1052,46,30,2.7,111.05,1.7,64.74666666 +1053,46,30,2.7,111.05,1.7,64.74499999 +1054,46,30,2.7,111.05,1.7,64.74333333 +1055,46,30,2.7,111.05,1.7,64.74166666 +1056,46,30,2.7,111.05,1.7,64.73999999 +1057,46,30,2.7,111.05,1.7,64.73833333 +1058,46,30,2.7,111.05,1.7,64.73666666 +1059,46,30,2.7,111.05,1.7,64.73499999 +1060,46,30,2.7,111.05,1.7,64.73333333 +1061,46,30,2.7,111.05,1.7,64.73166666 +1062,46,30,2.7,111.05,1.7,64.72999999 +1063,46,30,2.7,111.05,1.7,64.72833333 +1064,46,30,2.7,111.05,1.7,64.72666666 +1065,46,30,2.7,111.05,1.7,64.72499999 +1066,46,30,2.7,111.05,1.7,64.72333333 +1067,46,30,2.7,111.05,1.7,64.72166666 +1068,46,30,2.7,111.05,1.7,64.71999999 +1069,46,30,2.7,111.05,1.7,64.71833333 +1070,46,30,2.7,111.05,1.7,64.71666666 +1071,46,30,2.7,111.05,1.7,64.71499999 +1072,46,30,2.7,111.05,1.7,64.71333333 +1073,46,30,2.7,111.05,1.7,64.71166666 +1074,46,30,2.7,111.05,1.7,64.70999999 +1075,46,30,2.7,111.05,1.7,64.70833333 +1076,46,30,2.7,111.05,1.7,64.70666666 +1077,46,30,2.7,111.05,1.7,64.70499999 +1078,46,30,2.7,111.05,1.7,64.70333333 +1079,46,30,2.7,111.05,1.7,64.70166666 +1080,46,30,2.7,111.05,1.7,64.69999999 +1081,46,30,2.7,111.05,1.7,64.69833333 +1082,46,30,2.7,111.05,1.7,64.69666666 +1083,46,30,2.7,111.05,1.7,64.69499999 +1084,46,30,2.7,111.05,1.7,64.69333333 +1085,46,30,2.7,111.05,1.7,64.69166666 +1086,46,30,2.7,111.05,1.7,64.68999999 +1087,46,30,2.7,111.05,1.7,64.68833333 +1088,46,30,2.7,111.05,1.7,64.68666666 +1089,46,30,2.7,111.05,1.7,64.68499999 +1090,46,30,2.7,111.05,1.7,64.68333333 +1091,46,30,2.7,111.05,1.7,64.68166666 +1092,46,30,2.7,111.05,1.7,64.67999999 +1093,46,30,2.7,111.05,1.7,64.67833333 +1094,46,30,2.7,111.05,1.7,64.67666666 +1095,46,30,2.7,111.05,1.7,64.67499999 +1096,46,30,2.7,111.05,1.7,64.67333333 +1097,46,30,2.7,111.05,1.7,64.67166666 +1098,46,30,2.7,111.05,1.7,64.66999999 +1099,46,30,2.7,111.05,1.7,64.66833333 +1100,46,30,2.7,111.05,1.7,64.66666666 +1101,46,30,2.7,111.05,1.7,64.66499999 +1102,46,30,2.7,111.05,1.7,64.66333333 +1103,46,30,2.7,111.05,1.7,64.66166666 +1104,46,30,2.7,111.05,1.7,64.65999999 +1105,46,30,2.7,111.05,1.7,64.65833333 +1106,46,30,2.7,111.05,1.7,64.65666666 +1107,46,30,2.7,111.05,1.7,64.65499999 +1108,46,30,2.7,111.05,1.7,64.65333333 +1109,46,30,2.7,111.05,1.7,64.65166666 +1110,46,30,2.7,111.05,1.7,64.64999999 +1111,46,30,2.7,111.05,1.7,64.64833333 +1112,46,30,2.7,111.05,1.7,64.64666666 +1113,46,30,2.7,111.05,1.7,64.64499999 +1114,46,30,2.7,111.05,1.7,64.64333333 +1115,46,30,2.7,111.05,1.7,64.64166666 +1116,46,30,2.7,111.05,1.7,64.63999999 +1117,46,30,2.7,111.05,1.7,64.63833333 +1118,46,30,2.7,111.05,1.7,64.63666666 +1119,46,30,2.7,111.05,1.7,64.63499999 +1120,46,30,2.7,111.05,1.7,64.63333333 +1121,46,30,2.7,111.05,1.7,64.63166666 +1122,46,30,2.7,111.05,1.7,64.62999999 +1123,46,30,2.7,111.05,1.7,64.62833333 +1124,46,30,2.7,111.05,1.7,64.62666666 +1125,46,30,2.7,111.05,1.7,64.62499999 +1126,46,30,2.7,111.05,1.7,64.62333333 +1127,46,30,2.7,111.05,1.7,64.62166666 +1128,46,30,2.7,111.05,1.7,64.61999999 +1129,46,30,2.7,111.05,1.7,64.61833333 +1130,46,30,2.7,111.05,1.7,64.61666666 +1131,46,30,2.7,111.05,1.7,64.61499999 +1132,46,30,2.7,111.05,1.7,64.61333333 +1133,46,30,2.7,111.05,1.7,64.61166666 +1134,46,30,2.7,111.05,1.7,64.60999999 +1135,46,30,2.7,111.05,1.7,64.60833333 +1136,46,30,2.7,111.05,1.7,64.60666666 +1137,46,30,2.7,111.05,1.7,64.60499999 +1138,46,30,2.7,111.05,1.7,64.60333333 +1139,46,30,2.7,111.05,1.7,64.60166666 +1140,46,30,2.7,111.05,1.7,64.59999999 +1141,46,30,2.7,111.05,1.7,64.59833333 +1142,46,30,2.7,111.05,1.7,64.59666666 +1143,46,30,2.7,111.05,1.7,64.59499999 +1144,46,30,2.7,111.05,1.7,64.59333333 +1145,46,30,2.7,111.05,1.7,64.59166666 +1146,46,30,2.7,111.05,1.7,64.58999999 +1147,46,30,2.7,111.05,1.7,64.58833333 +1148,46,30,2.7,111.05,1.7,64.58666666 +1149,46,30,2.7,111.05,1.7,64.58499999 +1150,46,30,2.7,111.05,1.7,64.58333333 +1151,46,30,2.7,111.05,1.7,64.58166666 +1152,46,30,2.7,111.05,1.7,64.57999999 +1153,46,30,2.7,111.05,1.7,64.57833332 +1154,46,30,2.7,111.05,1.7,64.57666666 +1155,46,30,2.7,111.05,1.7,64.57499999 +1156,46,30,2.7,111.05,1.7,64.57333332 +1157,46,30,2.7,111.05,1.7,64.57166666 +1158,46,30,2.7,111.05,1.7,64.56999999 +1159,46,30,2.7,111.05,1.7,64.56833332 +1160,46,30,2.7,111.05,1.7,64.56666666 +1161,46,30,2.7,111.05,1.7,64.56499999 +1162,46,30,2.7,111.05,1.7,64.56333332 +1163,46,30,2.7,111.05,1.7,64.56166666 +1164,46,30,2.7,111.05,1.7,64.55999999 +1165,46,30,2.7,111.05,1.7,64.55833332 +1166,46,30,2.7,111.05,1.7,64.55666666 +1167,46,30,2.7,111.05,1.7,64.55499999 +1168,46,30,2.7,111.05,1.7,64.55333332 +1169,46,30,2.7,111.05,1.7,64.55166666 +1170,46,30,2.7,111.05,1.7,64.54999999 +1171,46,30,2.7,111.05,1.7,64.54833332 +1172,46,30,2.7,111.05,1.7,64.54666666 +1173,46,30,2.7,111.05,1.7,64.54499999 +1174,46,30,2.7,111.05,1.7,64.54333332 +1175,46,30,2.7,111.05,1.7,64.54166666 +1176,46,30,2.7,111.05,1.7,64.53999999 +1177,46,30,2.7,111.05,1.7,64.53833332 +1178,46,30,2.7,111.05,1.7,64.53666666 +1179,46,30,2.7,111.05,1.7,64.53499999 +1180,46,30,2.7,111.05,1.7,64.53333332 +1181,46,30,2.7,111.05,1.7,64.53166666 +1182,46,30,2.7,111.05,1.7,64.52999999 +1183,46,30,2.7,111.05,1.7,64.52833332 +1184,46,30,2.7,111.05,1.7,64.52666666 +1185,46,30,2.7,111.05,1.7,64.52499999 +1186,46,30,2.7,111.05,1.7,64.52333332 +1187,46,30,2.7,111.05,1.7,64.52166666 +1188,46,30,2.7,111.05,1.7,64.51999999 +1189,46,30,2.7,111.05,1.7,64.51833332 +1190,46,30,2.7,111.05,1.7,64.51666666 +1191,46,30,2.7,111.05,1.7,64.51499999 +1192,46,30,2.7,111.05,1.7,64.51333332 +1193,46,30,2.7,111.05,1.7,64.51166666 +1194,46,30,2.7,111.05,1.7,64.50999999 +1195,46,30,2.7,111.05,1.7,64.50833332 +1196,46,30,2.7,111.05,1.7,64.50666666 +1197,46,30,2.7,111.05,1.7,64.50499999 +1198,46,30,2.7,111.05,1.7,64.50333332 +1199,46,30,2.7,111.05,1.7,64.50166666 +1200,46,30,2.7,111.05,1.7,64.5 +1201,46,30,2.7,111.05,1.7,64.499375 +1202,46,30,2.7,111.05,1.7,64.49875 +1203,46,30,2.7,111.05,1.7,64.498125 +1204,46,30,2.7,111.05,1.7,64.4975 +1205,46,30,2.7,111.05,1.7,64.496875 +1206,46,30,2.7,111.05,1.7,64.49625 +1207,46,30,2.7,111.05,1.7,64.495625 +1208,46,30,2.7,111.05,1.7,64.495 +1209,46,30,2.7,111.05,1.7,64.494375 +1210,46,30,2.7,111.05,1.7,64.49375 +1211,46,30,2.7,111.05,1.7,64.493125 +1212,46,30,2.7,111.05,1.7,64.4925 +1213,46,30,2.7,111.05,1.7,64.491875 +1214,46,30,2.7,111.05,1.7,64.49125 +1215,46,30,2.7,111.05,1.7,64.490625 +1216,46,30,2.7,111.05,1.7,64.49 +1217,46,30,2.7,111.05,1.7,64.489375 +1218,46,30,2.7,111.05,1.7,64.48875 +1219,46,30,2.7,111.05,1.7,64.488125 +1220,46,30,2.7,111.05,1.7,64.4875 +1221,46,30,2.7,111.05,1.7,64.486875 +1222,46,30,2.7,111.05,1.7,64.48625 +1223,46,30,2.7,111.05,1.7,64.485625 +1224,46,30,2.7,111.05,1.7,64.485 +1225,46,30,2.7,111.05,1.7,64.484375 +1226,46,30,2.7,111.05,1.7,64.48375 +1227,46,30,2.7,111.05,1.7,64.483125 +1228,46,30,2.7,111.05,1.7,64.4825 +1229,46,30,2.7,111.05,1.7,64.481875 +1230,46,30,2.7,111.05,1.7,64.48125 +1231,46,30,2.7,111.05,1.7,64.480625 +1232,46,30,2.7,111.05,1.7,64.48 +1233,46,30,2.7,111.05,1.7,64.479375 +1234,46,30,2.7,111.05,1.7,64.47875 +1235,46,30,2.7,111.05,1.7,64.478125 +1236,46,30,2.7,111.05,1.7,64.4775 +1237,46,30,2.7,111.05,1.7,64.476875 +1238,46,30,2.7,111.05,1.7,64.47625 +1239,46,30,2.7,111.05,1.7,64.475625 +1240,46,30,2.7,111.05,1.7,64.475 +1241,46,30,2.7,111.05,1.7,64.474375 +1242,46,30,2.7,111.05,1.7,64.47375 +1243,46,30,2.7,111.05,1.7,64.473125 +1244,46,30,2.7,111.05,1.7,64.4725 +1245,46,30,2.7,111.05,1.7,64.471875 +1246,46,30,2.7,111.05,1.7,64.47125 +1247,46,30,2.7,111.05,1.7,64.470625 +1248,46,30,2.7,111.05,1.7,64.47 +1249,46,30,2.7,111.05,1.7,64.469375 +1250,46,30,2.7,111.05,1.7,64.46875 +1251,46,30,2.7,111.05,1.7,64.468125 +1252,46,30,2.7,111.05,1.7,64.4675 +1253,46,30,2.7,111.05,1.7,64.466875 +1254,46,30,2.7,111.05,1.7,64.46625 +1255,46,30,2.7,111.05,1.7,64.465625 +1256,46,30,2.7,111.05,1.7,64.465 +1257,46,30,2.7,111.05,1.7,64.464375 +1258,46,30,2.7,111.05,1.7,64.46375 +1259,46,30,2.7,111.05,1.7,64.463125 +1260,46,30,2.7,111.05,1.7,64.4625 +1261,46,30,2.7,111.05,1.7,64.461875 +1262,46,30,2.7,111.05,1.7,64.46125 +1263,46,30,2.7,111.05,1.7,64.460625 +1264,46,30,2.7,111.05,1.7,64.46 +1265,46,30,2.7,111.05,1.7,64.459375 +1266,46,30,2.7,111.05,1.7,64.45875 +1267,46,30,2.7,111.05,1.7,64.458125 +1268,46,30,2.7,111.05,1.7,64.4575 +1269,46,30,2.7,111.05,1.7,64.456875 +1270,46,30,2.7,111.05,1.7,64.45625 +1271,46,30,2.7,111.05,1.7,64.455625 +1272,46,30,2.7,111.05,1.7,64.455 +1273,46,30,2.7,111.05,1.7,64.454375 +1274,46,30,2.7,111.05,1.7,64.45375 +1275,46,30,2.7,111.05,1.7,64.453125 +1276,46,30,2.7,111.05,1.7,64.4525 +1277,46,30,2.7,111.05,1.7,64.451875 +1278,46,30,2.7,111.05,1.7,64.45125 +1279,46,30,2.7,111.05,1.7,64.450625 +1280,46,30,2.7,111.05,1.7,64.45 +1281,46,30,2.7,111.05,1.7,64.449375 +1282,46,30,2.7,111.05,1.7,64.44875 +1283,46,30,2.7,111.05,1.7,64.448125 +1284,46,30,2.7,111.05,1.7,64.4475 +1285,46,30,2.7,111.05,1.7,64.446875 +1286,46,30,2.7,111.05,1.7,64.44625 +1287,46,30,2.7,111.05,1.7,64.445625 +1288,46,30,2.7,111.05,1.7,64.445 +1289,46,30,2.7,111.05,1.7,64.444375 +1290,46,30,2.7,111.05,1.7,64.44375 +1291,46,30,2.7,111.05,1.7,64.443125 +1292,46,30,2.7,111.05,1.7,64.4425 +1293,46,30,2.7,111.05,1.7,64.441875 +1294,46,30,2.7,111.05,1.7,64.44125 +1295,46,30,2.7,111.05,1.7,64.440625 +1296,46,30,2.7,111.05,1.7,64.44 +1297,46,30,2.7,111.05,1.7,64.439375 +1298,46,30,2.7,111.05,1.7,64.43875 +1299,46,30,2.7,111.05,1.7,64.438125 +1300,46,30,2.7,111.05,1.7,64.4375 +1301,46,30,2.7,111.05,1.7,64.436875 +1302,46,30,2.7,111.05,1.7,64.43625 +1303,46,30,2.7,111.05,1.7,64.435625 +1304,46,30,2.7,111.05,1.7,64.435 +1305,46,30,2.7,111.05,1.7,64.434375 +1306,46,30,2.7,111.05,1.7,64.43375 +1307,46,30,2.7,111.05,1.7,64.433125 +1308,46,30,2.7,111.05,1.7,64.4325 +1309,46,30,2.7,111.05,1.7,64.431875 +1310,46,30,2.7,111.05,1.7,64.43125 +1311,46,30,2.7,111.05,1.7,64.430625 +1312,46,30,2.7,111.05,1.7,64.43 +1313,46,30,2.7,111.05,1.7,64.429375 +1314,46,30,2.7,111.05,1.7,64.42875 +1315,46,30,2.7,111.05,1.7,64.428125 +1316,46,30,2.7,111.05,1.7,64.4275 +1317,46,30,2.7,111.05,1.7,64.426875 +1318,46,30,2.7,111.05,1.7,64.42625 +1319,46,30,2.7,111.05,1.7,64.425625 +1320,46,30,2.7,111.05,1.7,64.425 +1321,46,30,2.7,111.05,1.7,64.424375 +1322,46,30,2.7,111.05,1.7,64.42375 +1323,46,30,2.7,111.05,1.7,64.423125 +1324,46,30,2.7,111.05,1.7,64.4225 +1325,46,30,2.7,111.05,1.7,64.421875 +1326,46,30,2.7,111.05,1.7,64.42125 +1327,46,30,2.7,111.05,1.7,64.420625 +1328,46,30,2.7,111.05,1.7,64.42 +1329,46,30,2.7,111.05,1.7,64.419375 +1330,46,30,2.7,111.05,1.7,64.41875 +1331,46,30,2.7,111.05,1.7,64.418125 +1332,46,30,2.7,111.05,1.7,64.4175 +1333,46,30,2.7,111.05,1.7,64.416875 +1334,46,30,2.7,111.05,1.7,64.41625 +1335,46,30,2.7,111.05,1.7,64.415625 +1336,46,30,2.7,111.05,1.7,64.415 +1337,46,30,2.7,111.05,1.7,64.414375 +1338,46,30,2.7,111.05,1.7,64.41375 +1339,46,30,2.7,111.05,1.7,64.413125 +1340,46,30,2.7,111.05,1.7,64.4125 +1341,46,30,2.7,111.05,1.7,64.411875 +1342,46,30,2.7,111.05,1.7,64.41125 +1343,46,30,2.7,111.05,1.7,64.410625 +1344,46,30,2.7,111.05,1.7,64.41 +1345,46,30,2.7,111.05,1.7,64.409375 +1346,46,30,2.7,111.05,1.7,64.40875 +1347,46,30,2.7,111.05,1.7,64.408125 +1348,46,30,2.7,111.05,1.7,64.4075 +1349,46,30,2.7,111.05,1.7,64.406875 +1350,46,30,2.7,111.05,1.7,64.40625 +1351,46,30,2.7,111.05,1.7,64.405625 +1352,46,30,2.7,111.05,1.7,64.405 +1353,46,30,2.7,111.05,1.7,64.404375 +1354,46,30,2.7,111.05,1.7,64.40375 +1355,46,30,2.7,111.05,1.7,64.403125 +1356,46,30,2.7,111.05,1.7,64.4025 +1357,46,30,2.7,111.05,1.7,64.401875 +1358,46,30,2.7,111.05,1.7,64.40125 +1359,46,30,2.7,111.05,1.7,64.400625 +1360,46,30,2.7,111.05,1.7,64.4 +1361,46,30,2.7,111.05,1.7,64.399375 +1362,46,30,2.7,111.05,1.7,64.39875 +1363,46,30,2.7,111.05,1.7,64.398125 +1364,46,30,2.7,111.05,1.7,64.3975 +1365,46,30,2.7,111.05,1.7,64.396875 +1366,46,30,2.7,111.05,1.7,64.39625 +1367,46,30,2.7,111.05,1.7,64.395625 +1368,46,30,2.7,111.05,1.7,64.395 +1369,46,30,2.7,111.05,1.7,64.394375 +1370,46,30,2.7,111.05,1.7,64.39375 +1371,46,30,2.7,111.05,1.7,64.393125 +1372,46,30,2.7,111.05,1.7,64.3925 +1373,46,30,2.7,111.05,1.7,64.391875 +1374,46,30,2.7,111.05,1.7,64.39125 +1375,46,30,2.7,111.05,1.7,64.390625 +1376,46,30,2.7,111.05,1.7,64.39 +1377,46,30,2.7,111.05,1.7,64.389375 +1378,46,30,2.7,111.05,1.7,64.38875 +1379,46,30,2.7,111.05,1.7,64.388125 +1380,46,30,2.7,111.05,1.7,64.3875 +1381,46,30,2.7,111.05,1.7,64.386875 +1382,46,30,2.7,111.05,1.7,64.38625 +1383,46,30,2.7,111.05,1.7,64.385625 +1384,46,30,2.7,111.05,1.7,64.385 +1385,46,30,2.7,111.05,1.7,64.384375 +1386,46,30,2.7,111.05,1.7,64.38375 +1387,46,30,2.7,111.05,1.7,64.383125 +1388,46,30,2.7,111.05,1.7,64.3825 +1389,46,30,2.7,111.05,1.7,64.381875 +1390,46,30,2.7,111.05,1.7,64.38125 +1391,46,30,2.7,111.05,1.7,64.380625 +1392,46,30,2.7,111.05,1.7,64.38 +1393,46,30,2.7,111.05,1.7,64.379375 +1394,46,30,2.7,111.05,1.7,64.37875 +1395,46,30,2.7,111.05,1.7,64.378125 +1396,46,30,2.7,111.05,1.7,64.3775 +1397,46,30,2.7,111.05,1.7,64.376875 +1398,46,30,2.7,111.05,1.7,64.37625 +1399,46,30,2.7,111.05,1.7,64.375625 +1400,46,30,2.7,111.05,1.7,64.375 +1401,46,30,2.7,111.05,1.7,64.374375 +1402,46,30,2.7,111.05,1.7,64.37375 +1403,46,30,2.7,111.05,1.7,64.373125 +1404,46,30,2.7,111.05,1.7,64.3725 +1405,46,30,2.7,111.05,1.7,64.371875 +1406,46,30,2.7,111.05,1.7,64.37125 +1407,46,30,2.7,111.05,1.7,64.370625 +1408,46,30,2.7,111.05,1.7,64.37 +1409,46,30,2.7,111.05,1.7,64.369375 +1410,46,30,2.7,111.05,1.7,64.36875 +1411,46,30,2.7,111.05,1.7,64.368125 +1412,46,30,2.7,111.05,1.7,64.3675 +1413,46,30,2.7,111.05,1.7,64.366875 +1414,46,30,2.7,111.05,1.7,64.36625 +1415,46,30,2.7,111.05,1.7,64.365625 +1416,46,30,2.7,111.05,1.7,64.365 +1417,46,30,2.7,111.05,1.7,64.364375 +1418,46,30,2.7,111.05,1.7,64.36375 +1419,46,30,2.7,111.05,1.7,64.363125 +1420,46,30,2.7,111.05,1.7,64.3625 +1421,46,30,2.7,111.05,1.7,64.361875 +1422,46,30,2.7,111.05,1.7,64.36125 +1423,46,30,2.7,111.05,1.7,64.360625 +1424,46,30,2.7,111.05,1.7,64.36 +1425,46,30,2.7,111.05,1.7,64.359375 +1426,46,30,2.7,111.05,1.7,64.35875 +1427,46,30,2.7,111.05,1.7,64.358125 +1428,46,30,2.7,111.05,1.7,64.3575 +1429,46,30,2.7,111.05,1.7,64.356875 +1430,46,30,2.7,111.05,1.7,64.35625 +1431,46,30,2.7,111.05,1.7,64.355625 +1432,46,30,2.7,111.05,1.7,64.355 +1433,46,30,2.7,111.05,1.7,64.354375 +1434,46,30,2.7,111.05,1.7,64.35375 +1435,46,30,2.7,111.05,1.7,64.353125 +1436,46,30,2.7,111.05,1.7,64.3525 +1437,46,30,2.7,111.05,1.7,64.351875 +1438,46,30,2.7,111.05,1.7,64.35125 +1439,46,30,2.7,111.05,1.7,64.350625 +1440,46,30,2.7,111.05,1.7,64.35 +1441,46,30,2.7,111.05,1.7,64.349375 +1442,46,30,2.7,111.05,1.7,64.34875 +1443,46,30,2.7,111.05,1.7,64.348125 +1444,46,30,2.7,111.05,1.7,64.3475 +1445,46,30,2.7,111.05,1.7,64.346875 +1446,46,30,2.7,111.05,1.7,64.34625 +1447,46,30,2.7,111.05,1.7,64.345625 +1448,46,30,2.7,111.05,1.7,64.345 +1449,46,30,2.7,111.05,1.7,64.344375 +1450,46,30,2.7,111.05,1.7,64.34375 +1451,46,30,2.7,111.05,1.7,64.343125 +1452,46,30,2.7,111.05,1.7,64.3425 +1453,46,30,2.7,111.05,1.7,64.341875 +1454,46,30,2.7,111.05,1.7,64.34125 +1455,46,30,2.7,111.05,1.7,64.340625 +1456,46,30,2.7,111.05,1.7,64.34 +1457,46,30,2.7,111.05,1.7,64.339375 +1458,46,30,2.7,111.05,1.7,64.33875 +1459,46,30,2.7,111.05,1.7,64.338125 +1460,46,30,2.7,111.05,1.7,64.3375 +1461,46,30,2.7,111.05,1.7,64.336875 +1462,46,30,2.7,111.05,1.7,64.33625 +1463,46,30,2.7,111.05,1.7,64.335625 +1464,46,30,2.7,111.05,1.7,64.335 +1465,46,30,2.7,111.05,1.7,64.334375 +1466,46,30,2.7,111.05,1.7,64.33375 +1467,46,30,2.7,111.05,1.7,64.333125 +1468,46,30,2.7,111.05,1.7,64.3325 +1469,46,30,2.7,111.05,1.7,64.331875 +1470,46,30,2.7,111.05,1.7,64.33125 +1471,46,30,2.7,111.05,1.7,64.330625 +1472,46,30,2.7,111.05,1.7,64.33 +1473,46,30,2.7,111.05,1.7,64.329375 +1474,46,30,2.7,111.05,1.7,64.32875 +1475,46,30,2.7,111.05,1.7,64.328125 +1476,46,30,2.7,111.05,1.7,64.3275 +1477,46,30,2.7,111.05,1.7,64.326875 +1478,46,30,2.7,111.05,1.7,64.32625 +1479,46,30,2.7,111.05,1.7,64.325625 +1480,46,30,2.7,111.05,1.7,64.325 +1481,46,30,2.7,111.05,1.7,64.324375 +1482,46,30,2.7,111.05,1.7,64.32375 +1483,46,30,2.7,111.05,1.7,64.323125 +1484,46,30,2.7,111.05,1.7,64.3225 +1485,46,30,2.7,111.05,1.7,64.321875 +1486,46,30,2.7,111.05,1.7,64.32125 +1487,46,30,2.7,111.05,1.7,64.320625 +1488,46,30,2.7,111.05,1.7,64.32 +1489,46,30,2.7,111.05,1.7,64.319375 +1490,46,30,2.6,111.05,1.7,64.31875 +1491,46,30,2.6,111.05,1.7,64.318125 +1492,46,30,2.6,111.05,1.7,64.3175 +1493,46,30,2.6,111.05,1.7,64.316875 +1494,46,30,2.6,111.05,1.7,64.31625 +1495,46,30,2.6,111.05,1.7,64.315625 +1496,46,30,2.6,111.05,1.7,64.315 +1497,46,30,2.6,111.05,1.7,64.314375 +1498,46,30,2.6,111.05,1.7,64.31375 +1499,46,30,2.6,111.05,1.7,64.313125 +1500,46,30,2.6,111.05,1.7,64.3125 +1501,46,30,2.6,111.05,1.7,64.311875 +1502,46,30,2.6,111.05,1.7,64.31125 +1503,46,30,2.6,111.05,1.7,64.310625 +1504,46,30,2.6,111.05,1.7,64.31 +1505,46,30,2.6,111.05,1.7,64.309375 +1506,46,30,2.6,111.05,1.7,64.30875 +1507,46,30,2.6,111.05,1.7,64.308125 +1508,46,30,2.6,111.05,1.7,64.3075 +1509,46,30,2.6,111.05,1.7,64.306875 +1510,46,30,2.6,111.05,1.7,64.30625 +1511,46,30,2.6,111.05,1.7,64.305625 +1512,46,30,2.6,111.05,1.7,64.305 +1513,46,30,2.6,111.05,1.7,64.304375 +1514,46,30,2.6,111.05,1.7,64.30375 +1515,46,30,2.6,111.05,1.7,64.303125 +1516,46,30,2.6,111.05,1.7,64.3025 +1517,46,30,2.6,111.05,1.7,64.301875 +1518,46,30,2.6,111.05,1.7,64.30125 +1519,46,30,2.6,111.05,1.7,64.300625 +1520,46,30,2.6,111.05,1.7,64.3 +1521,46,30,2.6,111.05,1.7,64.299375 +1522,46,30,2.6,111.05,1.7,64.29875 +1523,46,30,2.6,111.05,1.7,64.298125 +1524,46,30,2.6,111.05,1.7,64.2975 +1525,46,30,2.6,111.05,1.7,64.296875 +1526,46,30,2.6,111.05,1.7,64.29625 +1527,46,30,2.6,111.05,1.7,64.295625 +1528,46,30,2.6,111.05,1.7,64.295 +1529,46,30,2.6,111.05,1.7,64.294375 +1530,46,30,2.6,111.05,1.7,64.29375 +1531,46,30,2.6,111.05,1.7,64.293125 +1532,46,30,2.6,111.05,1.7,64.2925 +1533,46,30,2.6,111.05,1.7,64.291875 +1534,46,30,2.6,111.05,1.7,64.29125 +1535,46,30,2.6,111.05,1.7,64.290625 +1536,46,30,2.6,111.05,1.7,64.29 +1537,46,30,2.6,111.05,1.7,64.289375 +1538,46,30,2.6,111.05,1.7,64.28875 +1539,46,30,2.6,111.05,1.7,64.288125 +1540,46,30,2.6,111.05,1.7,64.2875 +1541,46,30,2.6,111.05,1.7,64.286875 +1542,46,30,2.6,111.05,1.7,64.28625 +1543,46,30,2.6,111.05,1.7,64.285625 +1544,46,30,2.6,111.05,1.7,64.285 +1545,46,30,2.6,111.05,1.7,64.284375 +1546,46,30,2.6,111.05,1.7,64.28375 +1547,46,30,2.6,111.05,1.7,64.283125 +1548,46,30,2.6,111.05,1.7,64.2825 +1549,46,30,2.6,111.05,1.7,64.281875 +1550,46,30,2.6,111.05,1.7,64.28125 +1551,46,30,2.6,111.05,1.7,64.280625 +1552,46,30,2.6,111.05,1.7,64.28 +1553,46,30,2.6,111.05,1.7,64.279375 +1554,46,30,2.6,111.05,1.7,64.27875 +1555,46,30,2.6,111.05,1.7,64.278125 +1556,46,30,2.6,111.05,1.7,64.2775 +1557,46,30,2.6,111.05,1.7,64.276875 +1558,46,30,2.6,111.05,1.7,64.27625 +1559,46,30,2.6,111.05,1.7,64.275625 +1560,46,30,2.6,111.05,1.7,64.275 +1561,46,30,2.6,111.05,1.7,64.274375 +1562,46,30,2.6,111.05,1.7,64.27375 +1563,46,30,2.6,111.05,1.7,64.273125 +1564,46,30,2.6,111.05,1.7,64.2725 +1565,46,30,2.6,111.05,1.7,64.271875 +1566,46,30,2.6,111.05,1.7,64.27125 +1567,46,30,2.6,111.05,1.7,64.270625 +1568,46,30,2.6,111.05,1.7,64.27 +1569,46,30,2.6,111.05,1.7,64.269375 +1570,46,30,2.6,111.05,1.7,64.26875 +1571,46,30,2.6,111.05,1.7,64.268125 +1572,46,30,2.6,111.05,1.7,64.2675 +1573,46,30,2.6,111.05,1.7,64.266875 +1574,46,30,2.6,111.05,1.7,64.26625 +1575,46,30,2.6,111.05,1.7,64.265625 +1576,46,30,2.6,111.05,1.7,64.265 +1577,46,30,2.6,111.05,1.7,64.264375 +1578,46,30,2.6,111.05,1.7,64.26375 +1579,46,30,2.6,111.05,1.7,64.263125 +1580,46,30,2.6,111.05,1.7,64.2625 +1581,46,30,2.6,111.05,1.7,64.261875 +1582,46,30,2.6,111.05,1.7,64.26125 +1583,46,30,2.6,111.05,1.7,64.260625 +1584,46,30,2.6,111.05,1.7,64.26 +1585,46,30,2.6,111.05,1.7,64.259375 +1586,46,30,2.6,111.05,1.7,64.25875 +1587,46,30,2.6,111.05,1.7,64.258125 +1588,46,30,2.6,111.05,1.7,64.2575 +1589,46,30,2.6,111.05,1.7,64.256875 +1590,46,30,2.6,111.05,1.7,64.25625 +1591,46,30,2.6,111.05,1.7,64.255625 +1592,46,30,2.6,111.05,1.7,64.255 +1593,46,30,2.6,111.05,1.7,64.254375 +1594,46,30,2.6,111.05,1.7,64.25375 +1595,46,30,2.6,111.05,1.7,64.253125 +1596,46,30,2.6,111.05,1.7,64.2525 +1597,46,30,2.6,111.05,1.7,64.251875 +1598,46,30,2.6,111.05,1.7,64.25125 +1599,46,30,2.6,111.05,1.7,64.250625 +1600,46,30,2.6,111.05,1.7,64.25 +1601,46,30,2.6,111.05,1.7,64.249375 +1602,46,30,2.6,111.05,1.7,64.24875 +1603,46,30,2.6,111.05,1.7,64.248125 +1604,46,30,2.6,111.05,1.7,64.2475 +1605,46,30,2.6,111.05,1.7,64.246875 +1606,46,30,2.6,111.05,1.7,64.24625 +1607,46,30,2.6,111.05,1.7,64.245625 +1608,46,30,2.6,111.05,1.7,64.245 +1609,46,30,2.6,111.05,1.7,64.244375 +1610,46,30,2.6,111.05,1.7,64.24375 +1611,46,30,2.6,111.05,1.7,64.243125 +1612,46,30,2.6,111.05,1.7,64.2425 +1613,46,30,2.6,111.05,1.7,64.241875 +1614,46,30,2.6,111.05,1.7,64.24125 +1615,46,30,2.6,111.05,1.7,64.240625 +1616,46,30,2.6,111.05,1.7,64.24 +1617,46,30,2.6,111.05,1.7,64.239375 +1618,46,30,2.6,111.05,1.7,64.23875 +1619,46,30,2.6,111.05,1.7,64.238125 +1620,46,30,2.6,111.05,1.7,64.2375 +1621,46,30,2.6,111.05,1.7,64.236875 +1622,46,30,2.6,111.05,1.7,64.23625 +1623,46,30,2.6,111.05,1.7,64.235625 +1624,46,30,2.6,111.05,1.7,64.235 +1625,46,30,2.6,111.05,1.7,64.234375 +1626,46,30,2.6,111.05,1.7,64.23375 +1627,46,30,2.6,111.05,1.7,64.233125 +1628,46,30,2.6,111.05,1.7,64.2325 +1629,46,30,2.6,111.05,1.7,64.231875 +1630,46,30,2.6,111.05,1.7,64.23125 +1631,46,30,2.6,111.05,1.7,64.230625 +1632,46,30,2.6,111.05,1.7,64.23 +1633,46,30,2.6,111.05,1.7,64.229375 +1634,46,30,2.6,111.05,1.7,64.22875 +1635,46,30,2.6,111.05,1.7,64.228125 +1636,46,30,2.6,111.05,1.7,64.2275 +1637,46,30,2.6,111.05,1.7,64.226875 +1638,46,30,2.6,111.05,1.7,64.22625 +1639,46,30,2.6,111.05,1.7,64.225625 +1640,46,30,2.6,111.05,1.7,64.225 +1641,46,30,2.6,111.05,1.7,64.224375 +1642,46,30,2.6,111.05,1.7,64.22375 +1643,46,30,2.6,111.05,1.7,64.223125 +1644,46,30,2.6,111.05,1.7,64.2225 +1645,46,30,2.6,111.05,1.7,64.221875 +1646,46,30,2.6,111.05,1.7,64.22125 +1647,46,30,2.6,111.05,1.7,64.220625 +1648,46,30,2.6,111.05,1.7,64.22 +1649,46,30,2.6,111.05,1.7,64.219375 +1650,46,30,2.6,111.05,1.7,64.21875 +1651,46,30,2.6,111.05,1.7,64.218125 +1652,46,30,2.6,111.05,1.7,64.2175 +1653,46,30,2.6,111.05,1.7,64.216875 +1654,46,30,2.6,111.05,1.7,64.21625 +1655,46,30,2.6,111.05,1.7,64.215625 +1656,46,30,2.6,111.05,1.7,64.215 +1657,46,30,2.6,111.05,1.7,64.214375 +1658,46,30,2.6,111.05,1.7,64.21375 +1659,46,30,2.6,111.05,1.7,64.213125 +1660,46,30,2.6,111.05,1.7,64.2125 +1661,46,30,2.6,111.05,1.7,64.211875 +1662,46,30,2.6,111.05,1.7,64.21125 +1663,46,30,2.6,111.05,1.7,64.210625 +1664,46,30,2.6,111.05,1.7,64.21 +1665,46,30,2.6,111.05,1.7,64.209375 +1666,46,30,2.6,111.05,1.7,64.20875 +1667,46,30,2.6,111.05,1.7,64.208125 +1668,46,30,2.6,111.05,1.7,64.2075 +1669,46,30,2.6,111.05,1.7,64.206875 +1670,46,30,2.6,111.05,1.7,64.20625 +1671,46,30,2.6,111.05,1.7,64.205625 +1672,46,30,2.6,111.05,1.7,64.205 +1673,46,30,2.6,111.05,1.7,64.204375 +1674,46,30,2.6,111.05,1.7,64.20375 +1675,46,30,2.6,111.05,1.7,64.203125 +1676,46,30,2.6,111.05,1.7,64.2025 +1677,46,30,2.6,111.05,1.7,64.201875 +1678,46,30,2.6,111.05,1.7,64.20125 +1679,46,30,2.6,111.05,1.7,64.200625 +1680,46,30,2.6,111.05,1.7,64.2 +1681,46,30,2.6,111.05,1.7,64.199375 +1682,46,30,2.6,111.05,1.7,64.19875 +1683,46,30,2.6,111.05,1.7,64.198125 +1684,46,30,2.6,111.05,1.7,64.1975 +1685,46,30,2.6,111.05,1.7,64.196875 +1686,46,30,2.6,111.05,1.7,64.19625 +1687,46,30,2.6,111.05,1.7,64.195625 +1688,46,30,2.6,111.05,1.7,64.195 +1689,46,30,2.6,111.05,1.7,64.194375 +1690,46,30,2.6,111.05,1.7,64.19375 +1691,46,30,2.6,111.05,1.7,64.193125 +1692,46,30,2.6,111.05,1.7,64.1925 +1693,46,30,2.6,111.05,1.7,64.191875 +1694,46,30,2.6,111.05,1.7,64.19125 +1695,46,30,2.6,111.05,1.7,64.190625 +1696,46,30,2.6,111.05,1.7,64.19 +1697,46,30,2.6,111.05,1.7,64.189375 +1698,46,30,2.6,111.05,1.7,64.18875 +1699,46,30,2.6,111.05,1.7,64.188125 +1700,46,30,2.6,111.05,1.7,64.1875 +1701,46,30,2.6,111.05,1.7,64.186875 +1702,46,30,2.6,111.05,1.7,64.18625 +1703,46,30,2.6,111.05,1.7,64.185625 +1704,46,30,2.6,111.05,1.7,64.185 +1705,46,30,2.6,111.05,1.7,64.184375 +1706,46,30,2.6,111.05,1.7,64.18375 +1707,46,30,2.6,111.05,1.7,64.183125 +1708,46,30,2.6,111.05,1.7,64.1825 +1709,46,30,2.6,111.05,1.7,64.181875 +1710,46,30,2.6,111.05,1.7,64.18125 +1711,46,30,2.6,111.05,1.7,64.180625 +1712,46,30,2.6,111.05,1.7,64.18 +1713,46,30,2.6,111.05,1.7,64.179375 +1714,46,30,2.6,111.05,1.7,64.17875 +1715,46,30,2.6,111.05,1.7,64.178125 +1716,46,30,2.6,111.05,1.7,64.1775 +1717,46,30,2.6,111.05,1.7,64.176875 +1718,46,30,2.6,111.05,1.7,64.17625 +1719,46,30,2.6,111.05,1.7,64.175625 +1720,46,30,2.6,111.05,1.7,64.175 +1721,46,30,2.6,111.05,1.7,64.174375 +1722,46,30,2.6,111.05,1.7,64.17375 +1723,46,30,2.6,111.05,1.7,64.173125 +1724,46,30,2.6,111.05,1.7,64.1725 +1725,46,30,2.6,111.05,1.7,64.171875 +1726,46,30,2.6,111.05,1.7,64.17125 +1727,46,30,2.6,111.05,1.7,64.170625 +1728,46,30,2.6,111.05,1.7,64.17 +1729,46,30,2.6,111.05,1.7,64.169375 +1730,46,30,2.6,111.05,1.7,64.16875 +1731,46,30,2.6,111.05,1.7,64.168125 +1732,46,30,2.6,111.05,1.7,64.1675 +1733,46,30,2.6,111.05,1.7,64.166875 +1734,46,30,2.6,111.05,1.7,64.16625 +1735,46,30,2.6,111.05,1.7,64.165625 +1736,46,30,2.6,111.05,1.7,64.165 +1737,46,30,2.6,111.05,1.7,64.164375 +1738,46,30,2.6,111.05,1.7,64.16375 +1739,46,30,2.6,111.05,1.7,64.163125 +1740,46,30,2.6,111.05,1.7,64.1625 +1741,46,30,2.6,111.05,1.7,64.161875 +1742,46,30,2.6,111.05,1.7,64.16125 +1743,46,30,2.6,111.05,1.7,64.160625 +1744,46,30,2.6,111.05,1.7,64.16 +1745,46,30,2.6,111.05,1.7,64.159375 +1746,46,30,2.6,111.05,1.7,64.15875 +1747,46,30,2.6,111.05,1.7,64.158125 +1748,46,30,2.6,111.05,1.7,64.1575 +1749,46,30,2.6,111.05,1.7,64.156875 +1750,46,30,2.6,111.05,1.7,64.15625 +1751,46,30,2.6,111.05,1.7,64.155625 +1752,46,30,2.6,111.05,1.7,64.155 +1753,46,30,2.6,111.05,1.7,64.154375 +1754,46,30,2.6,111.05,1.7,64.15375 +1755,46,30,2.6,111.05,1.7,64.153125 +1756,46,30,2.6,111.05,1.7,64.1525 +1757,46,30,2.6,111.05,1.7,64.151875 +1758,46,30,2.6,111.05,1.7,64.15125 +1759,46,30,2.6,111.05,1.7,64.150625 +1760,46,30,2.6,111.05,1.7,64.15 +1761,46,30,2.6,111.05,1.7,64.149375 +1762,46,30,2.6,111.05,1.7,64.14875 +1763,46,30,2.6,111.05,1.7,64.148125 +1764,46,30,2.6,111.05,1.7,64.1475 +1765,46,30,2.6,111.05,1.7,64.146875 +1766,46,30,2.6,111.05,1.7,64.14625 +1767,46,30,2.6,111.05,1.7,64.145625 +1768,46,30,2.6,111.05,1.7,64.145 +1769,46,30,2.6,111.05,1.7,64.144375 +1770,46,30,2.6,111.05,1.7,64.14375 +1771,46,30,2.6,111.05,1.7,64.143125 +1772,46,30,2.6,111.05,1.7,64.1425 +1773,46,30,2.6,111.05,1.7,64.141875 +1774,46,30,2.6,111.05,1.7,64.14125 +1775,46,30,2.6,111.05,1.7,64.140625 +1776,46,30,2.6,111.05,1.7,64.14 +1777,46,30,2.6,111.05,1.7,64.139375 +1778,46,30,2.6,111.05,1.7,64.13875 +1779,46,30,2.6,111.05,1.7,64.138125 +1780,46,30,2.6,111.05,1.7,64.1375 +1781,46,30,2.6,111.05,1.7,64.136875 +1782,46,30,2.6,111.05,1.7,64.13625 +1783,46,30,2.6,111.05,1.7,64.135625 +1784,46,30,2.6,111.05,1.7,64.135 +1785,46,30,2.6,111.05,1.7,64.134375 +1786,46,30,2.6,111.05,1.7,64.13375 +1787,46,30,2.6,111.05,1.7,64.133125 +1788,46,30,2.6,111.05,1.7,64.1325 +1789,46,30,2.6,111.05,1.7,64.131875 +1790,46,30,2.6,111.05,1.7,64.13125 +1791,46,30,2.6,111.05,1.7,64.130625 +1792,46,30,2.6,111.05,1.7,64.13 +1793,46,30,2.6,111.05,1.7,64.129375 +1794,46,30,2.6,111.05,1.7,64.12875 +1795,46,30,2.6,111.05,1.7,64.128125 +1796,46,30,2.6,111.05,1.7,64.1275 +1797,46,30,2.6,111.05,1.7,64.126875 +1798,46,30,2.6,111.05,1.7,64.12625 +1799,46,30,2.6,111.05,1.7,64.125625 +1800,46,30,2.6,111.05,1.7,64.125 +1801,46,30,2.6,111.05,1.7,64.124375 +1802,46,30,2.6,111.05,1.7,64.12375 +1803,46,30,2.6,111.05,1.7,64.123125 +1804,46,30,2.6,111.05,1.7,64.1225 +1805,46,30,2.6,111.05,1.7,64.121875 +1806,46,30,2.6,111.05,1.7,64.12125 +1807,46,30,2.6,111.05,1.7,64.120625 +1808,46,30,2.6,111.05,1.7,64.12 +1809,46,30,2.6,111.05,1.7,64.119375 +1810,46,30,2.6,111.05,1.7,64.11875 +1811,46,30,2.6,111.05,1.7,64.118125 +1812,46,30,2.6,111.05,1.7,64.1175 +1813,46,30,2.6,111.05,1.7,64.116875 +1814,46,30,2.6,111.05,1.7,64.11625 +1815,46,30,2.6,111.05,1.7,64.115625 +1816,46,30,2.6,111.05,1.7,64.115 +1817,46,30,2.6,111.05,1.7,64.114375 +1818,46,30,2.6,111.05,1.7,64.11375 +1819,46,30,2.6,111.05,1.7,64.113125 +1820,46,30,2.6,111.05,1.7,64.1125 +1821,46,30,2.6,111.05,1.7,64.111875 +1822,46,30,2.6,111.05,1.7,64.11125 +1823,46,30,2.6,111.05,1.7,64.110625 +1824,46,30,2.6,111.05,1.7,64.11 +1825,46,30,2.6,111.05,1.7,64.109375 +1826,46,30,2.6,111.05,1.7,64.10875 +1827,46,30,2.6,111.05,1.7,64.108125 +1828,46,30,2.6,111.05,1.7,64.1075 +1829,46,30,2.6,111.05,1.7,64.106875 +1830,46,30,2.6,111.05,1.7,64.10625 +1831,46,30,2.6,111.05,1.7,64.105625 +1832,46,30,2.6,111.05,1.7,64.105 +1833,46,30,2.6,111.05,1.7,64.104375 +1834,46,30,2.6,111.05,1.7,64.10375 +1835,46,30,2.6,111.05,1.7,64.103125 +1836,46,30,2.6,111.05,1.7,64.1025 +1837,46,30,2.6,111.05,1.7,64.101875 +1838,46,30,2.6,111.05,1.7,64.10125 +1839,46,30,2.6,111.05,1.7,64.100625 +1840,46,30,2.6,111.05,1.7,64.1 +1841,46,30,2.6,111.05,1.7,64.099375 +1842,46,30,2.6,111.05,1.7,64.09875 +1843,46,30,2.6,111.05,1.7,64.098125 +1844,46,30,2.6,111.05,1.7,64.0975 +1845,46,30,2.6,111.05,1.7,64.096875 +1846,46,30,2.6,111.05,1.7,64.09625 +1847,46,30,2.6,111.05,1.7,64.095625 +1848,46,30,2.6,111.05,1.7,64.095 +1849,46,30,2.6,111.05,1.7,64.094375 +1850,46,30,2.6,111.05,1.7,64.09375 +1851,46,30,2.6,111.05,1.7,64.093125 +1852,46,30,2.6,111.05,1.7,64.0925 +1853,46,30,2.6,111.05,1.7,64.091875 +1854,46,30,2.6,111.05,1.7,64.09125 +1855,46,30,2.6,111.05,1.7,64.090625 +1856,46,30,2.6,111.05,1.7,64.09 +1857,46,30,2.6,111.05,1.7,64.089375 +1858,46,30,2.6,111.05,1.7,64.08875 +1859,46,30,2.6,111.05,1.7,64.088125 +1860,46,30,2.6,111.05,1.7,64.0875 +1861,46,30,2.6,111.05,1.7,64.086875 +1862,46,30,2.6,111.05,1.7,64.08625 +1863,46,30,2.6,111.05,1.7,64.085625 +1864,46,30,2.6,111.05,1.7,64.085 +1865,46,30,2.6,111.05,1.7,64.084375 +1866,46,30,2.6,111.05,1.7,64.08375 +1867,46,30,2.6,111.05,1.7,64.083125 +1868,46,30,2.6,111.05,1.7,64.0825 +1869,46,30,2.6,111.05,1.7,64.081875 +1870,46,30,2.6,111.05,1.7,64.08125 +1871,46,30,2.6,111.05,1.7,64.080625 +1872,46,30,2.6,111.05,1.7,64.08 +1873,46,30,2.6,111.05,1.7,64.079375 +1874,46,30,2.6,111.05,1.7,64.07875 +1875,46,30,2.6,111.05,1.7,64.078125 +1876,46,30,2.6,111.05,1.7,64.0775 +1877,46,30,2.6,111.05,1.7,64.076875 +1878,46,30,2.6,111.05,1.7,64.07625 +1879,46,30,2.6,111.05,1.7,64.075625 +1880,46,30,2.6,111.05,1.7,64.075 +1881,46,30,2.6,111.05,1.7,64.074375 +1882,46,30,2.6,111.05,1.7,64.07375 +1883,46,30,2.6,111.05,1.7,64.073125 +1884,46,30,2.6,111.05,1.7,64.0725 +1885,46,30,2.6,111.05,1.7,64.071875 +1886,46,30,2.6,111.05,1.7,64.07125 +1887,46,30,2.6,111.05,1.7,64.070625 +1888,46,30,2.6,111.05,1.7,64.07 +1889,46,30,2.6,111.05,1.7,64.069375 +1890,46,30,2.6,111.05,1.7,64.06875 +1891,46,30,2.6,111.05,1.7,64.068125 +1892,46,30,2.6,111.05,1.7,64.0675 +1893,46,30,2.6,111.05,1.7,64.066875 +1894,46,30,2.6,111.05,1.7,64.06625 +1895,46,30,2.6,111.05,1.7,64.065625 +1896,46,30,2.6,111.05,1.7,64.065 +1897,46,30,2.6,111.05,1.7,64.064375 +1898,46,30,2.6,111.05,1.7,64.06375 +1899,46,30,2.6,111.05,1.7,64.063125 +1900,46,30,2.6,111.05,1.7,64.0625 +1901,46,30,2.6,111.05,1.7,64.061875 +1902,46,30,2.6,111.05,1.7,64.06125 +1903,46,30,2.6,111.05,1.7,64.060625 +1904,46,30,2.6,111.05,1.7,64.06 +1905,46,30,2.6,111.05,1.7,64.059375 +1906,46,30,2.6,111.05,1.7,64.05875 +1907,46,30,2.6,111.05,1.7,64.058125 +1908,46,30,2.6,111.05,1.7,64.0575 +1909,46,30,2.6,111.05,1.7,64.056875 +1910,46,30,2.6,111.05,1.7,64.05625 +1911,46,30,2.6,111.05,1.7,64.055625 +1912,46,30,2.6,111.05,1.7,64.055 +1913,46,30,2.6,111.05,1.7,64.054375 +1914,46,30,2.6,111.05,1.7,64.05375 +1915,46,30,2.6,111.05,1.7,64.053125 +1916,46,30,2.6,111.05,1.7,64.0525 +1917,46,30,2.6,111.05,1.7,64.051875 +1918,46,30,2.6,111.05,1.7,64.05125 +1919,46,30,2.6,111.05,1.7,64.050625 +1920,46,30,2.6,111.05,1.7,64.05 +1921,46,30,2.6,111.05,1.7,64.049375 +1922,46,30,2.6,111.05,1.7,64.04875 +1923,46,30,2.6,111.05,1.7,64.048125 +1924,46,30,2.6,111.05,1.7,64.0475 +1925,46,30,2.6,111.05,1.7,64.046875 +1926,46,30,2.6,111.05,1.7,64.04625 +1927,46,30,2.6,111.05,1.7,64.045625 +1928,46,30,2.6,111.05,1.7,64.045 +1929,46,30,2.6,111.05,1.7,64.044375 +1930,46,30,2.6,111.05,1.7,64.04375 +1931,46,30,2.6,111.05,1.7,64.043125 +1932,46,30,2.6,111.05,1.7,64.0425 +1933,46,30,2.6,111.05,1.7,64.041875 +1934,46,30,2.6,111.05,1.7,64.04125 +1935,46,30,2.6,111.05,1.7,64.040625 +1936,46,30,2.6,111.05,1.7,64.04 +1937,46,30,2.6,111.05,1.7,64.039375 +1938,46,30,2.6,111.05,1.7,64.03875 +1939,46,30,2.6,111.05,1.7,64.038125 +1940,46,30,2.6,111.05,1.7,64.0375 +1941,46,30,2.6,111.05,1.7,64.036875 +1942,46,30,2.6,111.05,1.7,64.03625 +1943,46,30,2.6,111.05,1.7,64.035625 +1944,46,30,2.6,111.05,1.7,64.035 +1945,46,30,2.6,111.05,1.7,64.034375 +1946,46,30,2.6,111.05,1.7,64.03375 +1947,46,30,2.6,111.05,1.7,64.033125 +1948,46,30,2.6,111.05,1.7,64.0325 +1949,46,30,2.6,111.05,1.7,64.031875 +1950,46,30,2.6,111.05,1.7,64.03125 +1951,46,30,2.6,111.05,1.7,64.030625 +1952,46,30,2.6,111.05,1.7,64.03 +1953,46,30,2.6,111.05,1.7,64.029375 +1954,46,30,2.6,111.05,1.7,64.02875 +1955,46,30,2.6,111.05,1.7,64.028125 +1956,46,30,2.6,111.05,1.7,64.0275 +1957,46,30,2.6,111.05,1.7,64.026875 +1958,46,30,2.6,111.05,1.7,64.02625 +1959,46,30,2.6,111.05,1.7,64.025625 +1960,46,30,2.6,111.05,1.7,64.025 +1961,46,30,2.6,111.05,1.7,64.024375 +1962,46,30,2.6,111.05,1.7,64.02375 +1963,46,30,2.6,111.05,1.7,64.023125 +1964,46,30,2.6,111.05,1.7,64.0225 +1965,46,30,2.6,111.05,1.7,64.021875 +1966,46,30,2.6,111.05,1.7,64.02125 +1967,46,30,2.6,111.05,1.7,64.020625 +1968,46,30,2.6,111.05,1.7,64.02 +1969,46,30,2.6,111.05,1.7,64.019375 +1970,46,30,2.6,111.05,1.7,64.01875 +1971,46,30,2.6,111.05,1.7,64.018125 +1972,46,30,2.6,111.05,1.7,64.0175 +1973,46,30,2.6,111.05,1.7,64.016875 +1974,46,30,2.6,111.05,1.7,64.01625 +1975,46,30,2.6,111.05,1.7,64.015625 +1976,46,30,2.6,111.05,1.7,64.015 +1977,46,30,2.6,111.05,1.7,64.014375 +1978,46,30,2.6,111.05,1.7,64.01375 +1979,46,30,2.6,111.05,1.7,64.013125 +1980,46,30,2.6,111.05,1.7,64.0125 +1981,46,30,2.6,111.05,1.7,64.011875 +1982,46,30,2.6,111.05,1.7,64.01125 +1983,46,30,2.6,111.05,1.7,64.010625 +1984,46,30,2.6,111.05,1.7,64.01 +1985,46,30,2.6,111.05,1.7,64.009375 +1986,46,30,2.6,111.05,1.7,64.00875 +1987,46,30,2.6,111.05,1.7,64.008125 +1988,46,30,2.6,111.05,1.7,64.0075 +1989,46,30,2.6,111.05,1.7,64.006875 +1990,46,30,2.6,111.05,1.7,64.00625 +1991,46,30,2.6,111.05,1.7,64.005625 +1992,46,30,2.6,111.05,1.7,64.005 +1993,46,30,2.6,111.05,1.7,64.004375 +1994,46,30,2.6,111.05,1.7,64.00375 +1995,46,30,2.6,111.05,1.7,64.003125 +1996,46,30,2.6,111.05,1.7,64.0025 +1997,46,30,2.6,111.05,1.7,64.001875 +1998,46,30,2.6,111.05,1.7,64.00125 +1999,46,30,2.6,111.05,1.7,64.000625 +2000,46,30,2.6,111.05,1.7,64 +2001,46,30,2.6,111.05,1.7,63.99975 +2002,46,30,2.6,111.05,1.7,63.9995 +2003,46,30,2.6,111.05,1.7,63.99925 +2004,46,30,2.6,111.05,1.7,63.999 +2005,46,30,2.6,111.05,1.7,63.99875 +2006,46,30,2.6,111.05,1.7,63.9985 +2007,46,30,2.6,111.05,1.7,63.99825 +2008,46,30,2.6,111.05,1.7,63.998 +2009,46,30,2.6,111.05,1.7,63.99775 +2010,46,30,2.6,111.05,1.7,63.9975 +2011,46,30,2.6,111.05,1.7,63.99725 +2012,46,30,2.6,111.05,1.7,63.997 +2013,46,30,2.6,111.05,1.7,63.99675 +2014,46,30,2.6,111.05,1.7,63.9965 +2015,46,30,2.6,111.05,1.7,63.99625 +2016,46,30,2.6,111.05,1.7,63.996 +2017,46,30,2.6,111.05,1.7,63.99575 +2018,46,30,2.6,111.05,1.7,63.9955 +2019,46,30,2.6,111.05,1.7,63.99525 +2020,46,30,2.6,111.05,1.7,63.995 +2021,46,30,2.6,111.05,1.7,63.99475 +2022,46,30,2.6,111.05,1.7,63.9945 +2023,46,30,2.6,111.05,1.7,63.99425 +2024,46,30,2.6,111.05,1.7,63.994 +2025,46,30,2.6,111.05,1.7,63.99375 +2026,46,30,2.6,111.05,1.7,63.9935 +2027,46,30,2.6,111.05,1.7,63.99325 +2028,46,30,2.6,111.05,1.7,63.993 +2029,46,30,2.6,111.05,1.7,63.99275 +2030,46,30,2.6,111.05,1.7,63.9925 +2031,46,30,2.6,111.05,1.7,63.99225 +2032,46,30,2.6,111.05,1.7,63.992 +2033,46,30,2.6,111.05,1.7,63.99175 +2034,46,30,2.6,111.05,1.7,63.9915 +2035,46,30,2.6,111.05,1.7,63.99125 +2036,46,30,2.6,111.05,1.7,63.991 +2037,46,30,2.6,111.05,1.7,63.99075 +2038,46,30,2.6,111.05,1.7,63.9905 +2039,46,30,2.6,111.05,1.7,63.99025 +2040,46,30,2.6,111.05,1.7,63.99 +2041,46,30,2.6,111.05,1.7,63.98975 +2042,46,30,2.6,111.05,1.7,63.9895 +2043,46,30,2.6,111.05,1.7,63.98925 +2044,46,30,2.6,111.05,1.7,63.989 +2045,46,30,2.6,111.05,1.7,63.98875 +2046,46,30,2.6,111.05,1.7,63.9885 +2047,46,30,2.6,111.05,1.7,63.98825 +2048,46,30,2.6,111.05,1.7,63.988 +2049,46,30,2.6,111.05,1.7,63.98775 +2050,46,30,2.6,111.05,1.7,63.9875 +2051,46,30,2.6,111.05,1.7,63.98725 +2052,46,30,2.6,111.05,1.7,63.987 +2053,46,30,2.6,111.05,1.7,63.98675 +2054,46,30,2.6,111.05,1.7,63.9865 +2055,46,30,2.6,111.05,1.7,63.98625 +2056,46,30,2.6,111.05,1.7,63.986 +2057,46,30,2.6,111.05,1.7,63.98575 +2058,46,30,2.6,111.05,1.7,63.9855 +2059,46,30,2.6,111.05,1.7,63.98525 +2060,46,30,2.6,111.05,1.7,63.985 +2061,46,30,2.6,111.05,1.7,63.98475 +2062,46,30,2.6,111.05,1.7,63.9845 +2063,46,30,2.6,111.05,1.7,63.98425 +2064,46,30,2.6,111.05,1.7,63.984 +2065,46,30,2.6,111.05,1.7,63.98375 +2066,46,30,2.6,111.05,1.7,63.9835 +2067,46,30,2.6,111.05,1.7,63.98325 +2068,46,30,2.6,111.05,1.7,63.983 +2069,46,30,2.6,111.05,1.7,63.98275 +2070,46,30,2.6,111.05,1.7,63.9825 +2071,46,30,2.6,111.05,1.7,63.98225 +2072,46,30,2.6,111.05,1.7,63.982 +2073,46,30,2.6,111.05,1.7,63.98175 +2074,46,30,2.6,111.05,1.7,63.9815 +2075,46,30,2.6,111.05,1.7,63.98125 +2076,46,30,2.6,111.05,1.7,63.981 +2077,46,30,2.6,111.05,1.7,63.98075 +2078,46,30,2.6,111.05,1.7,63.9805 +2079,46,30,2.6,111.05,1.7,63.98025 +2080,46,30,2.6,111.05,1.7,63.98 +2081,46,30,2.6,111.05,1.7,63.97975 +2082,46,30,2.6,111.05,1.7,63.9795 +2083,46,30,2.6,111.05,1.7,63.97925 +2084,46,30,2.6,111.05,1.7,63.979 +2085,46,30,2.6,111.05,1.7,63.97875 +2086,46,30,2.6,111.05,1.7,63.9785 +2087,46,30,2.6,111.05,1.7,63.97825 +2088,46,30,2.6,111.05,1.7,63.978 +2089,46,30,2.6,111.05,1.7,63.97775 +2090,46,30,2.6,111.05,1.7,63.9775 +2091,46,30,2.6,111.05,1.7,63.97725 +2092,46,30,2.6,111.05,1.7,63.977 +2093,46,30,2.6,111.05,1.7,63.97675 +2094,46,30,2.6,111.05,1.7,63.9765 +2095,46,30,2.6,111.05,1.7,63.97625 +2096,46,30,2.6,111.05,1.7,63.976 +2097,46,30,2.6,111.05,1.7,63.97575 +2098,46,30,2.6,111.05,1.7,63.9755 +2099,46,30,2.6,111.05,1.7,63.97525 +2100,46,30,2.6,111.05,1.7,63.975 +2101,46,30,2.6,111.05,1.7,63.97475 +2102,46,30,2.6,111.05,1.7,63.9745 +2103,46,30,2.6,111.05,1.7,63.97425 +2104,46,30,2.6,111.05,1.7,63.974 +2105,46,30,2.6,111.05,1.7,63.97375 +2106,46,30,2.6,111.05,1.7,63.9735 +2107,46,30,2.6,111.05,1.7,63.97325 +2108,46,30,2.6,111.05,1.7,63.973 +2109,46,30,2.6,111.05,1.7,63.97275 +2110,46,30,2.6,111.05,1.7,63.9725 +2111,46,30,2.6,111.05,1.7,63.97225 +2112,46,30,2.6,111.05,1.7,63.972 +2113,46,30,2.6,111.05,1.7,63.97175 +2114,46,30,2.6,111.05,1.7,63.9715 +2115,46,30,2.6,111.05,1.7,63.97125 +2116,46,30,2.6,111.05,1.7,63.971 +2117,46,30,2.6,111.05,1.7,63.97075 +2118,46,30,2.6,111.05,1.7,63.9705 +2119,46,30,2.6,111.05,1.7,63.97025 +2120,46,30,2.6,111.05,1.7,63.97 +2121,46,30,2.6,111.05,1.7,63.96975 +2122,46,30,2.6,111.05,1.7,63.9695 +2123,46,30,2.6,111.05,1.7,63.96925 +2124,46,30,2.6,111.05,1.7,63.969 +2125,46,30,2.6,111.05,1.7,63.96875 +2126,46,30,2.6,111.05,1.7,63.9685 +2127,46,30,2.6,111.05,1.7,63.96825 +2128,46,30,2.6,111.05,1.7,63.968 +2129,46,30,2.6,111.05,1.7,63.96775 +2130,46,30,2.6,111.05,1.7,63.9675 +2131,46,30,2.6,111.05,1.7,63.96725 +2132,46,30,2.6,111.05,1.7,63.967 +2133,46,30,2.6,111.05,1.7,63.96675 +2134,46,30,2.6,111.05,1.7,63.9665 +2135,46,30,2.6,111.05,1.7,63.96625 +2136,46,30,2.6,111.05,1.7,63.966 +2137,46,30,2.6,111.05,1.7,63.96575 +2138,46,30,2.6,111.05,1.7,63.9655 +2139,46,30,2.6,111.05,1.7,63.96525 +2140,46,30,2.6,111.05,1.7,63.965 +2141,46,30,2.6,111.05,1.7,63.96475 +2142,46,30,2.6,111.05,1.7,63.9645 +2143,46,30,2.6,111.05,1.7,63.96425 +2144,46,30,2.6,111.05,1.7,63.964 +2145,46,30,2.6,111.05,1.7,63.96375 +2146,46,30,2.6,111.05,1.7,63.9635 +2147,46,30,2.6,111.05,1.7,63.96325 +2148,46,30,2.6,111.05,1.7,63.963 +2149,46,30,2.6,111.05,1.7,63.96275 +2150,46,30,2.6,111.05,1.7,63.9625 +2151,46,30,2.6,111.05,1.7,63.96225 +2152,46,30,2.6,111.05,1.7,63.962 +2153,46,30,2.6,111.05,1.7,63.96175 +2154,46,30,2.6,111.05,1.7,63.9615 +2155,46,30,2.6,111.05,1.7,63.96125 +2156,46,30,2.6,111.05,1.7,63.961 +2157,46,30,2.6,111.05,1.7,63.96075 +2158,46,30,2.6,111.05,1.7,63.9605 +2159,46,30,2.6,111.05,1.7,63.96025 +2160,46,30,2.6,111.05,1.7,63.96 +2161,46,30,2.6,111.05,1.7,63.95975 +2162,46,30,2.6,111.05,1.7,63.9595 +2163,46,30,2.6,111.05,1.7,63.95925 +2164,46,30,2.6,111.05,1.7,63.959 +2165,46,30,2.6,111.05,1.7,63.95875 +2166,46,30,2.6,111.05,1.7,63.9585 +2167,46,30,2.6,111.05,1.7,63.95825 +2168,46,30,2.6,111.05,1.7,63.958 +2169,46,30,2.6,111.05,1.7,63.95775 +2170,46,30,2.6,111.05,1.7,63.9575 +2171,46,30,2.6,111.05,1.7,63.95725 +2172,46,30,2.6,111.05,1.7,63.957 +2173,46,30,2.6,111.05,1.7,63.95675 +2174,46,30,2.6,111.05,1.7,63.9565 +2175,46,30,2.6,111.05,1.7,63.95625 +2176,46,30,2.6,111.05,1.7,63.956 +2177,46,30,2.6,111.05,1.7,63.95575 +2178,46,30,2.6,111.05,1.7,63.9555 +2179,46,30,2.6,111.05,1.7,63.95525 +2180,46,30,2.6,111.05,1.7,63.955 +2181,46,30,2.6,111.05,1.7,63.95475 +2182,46,30,2.6,111.05,1.7,63.9545 +2183,46,30,2.6,111.05,1.7,63.95425 +2184,46,30,2.6,111.05,1.7,63.954 +2185,46,30,2.6,111.05,1.7,63.95375 +2186,46,30,2.6,111.05,1.7,63.9535 +2187,46,30,2.6,111.05,1.7,63.95325 +2188,46,30,2.6,111.05,1.7,63.953 +2189,46,30,2.6,111.05,1.7,63.95275 +2190,46,30,2.6,111.05,1.7,63.9525 +2191,46,30,2.6,111.05,1.7,63.95225 +2192,46,30,2.6,111.05,1.7,63.952 +2193,46,30,2.6,111.05,1.7,63.95175 +2194,46,30,2.6,111.05,1.7,63.9515 +2195,46,30,2.6,111.05,1.7,63.95125 +2196,46,30,2.6,111.05,1.7,63.951 +2197,46,30,2.6,111.05,1.7,63.95075 +2198,46,30,2.6,111.05,1.7,63.9505 +2199,46,30,2.6,111.05,1.7,63.95025 +2200,46,30,2.6,111.05,1.7,63.95 +2201,46,30,2.6,111.05,1.7,63.94975 +2202,46,30,2.6,111.05,1.7,63.9495 +2203,46,30,2.6,111.05,1.7,63.94925 +2204,46,30,2.6,111.05,1.7,63.949 +2205,46,30,2.6,111.05,1.7,63.94875 +2206,46,30,2.6,111.05,1.7,63.9485 +2207,46,30,2.6,111.05,1.7,63.94825 +2208,46,30,2.6,111.05,1.7,63.948 +2209,46,30,2.6,111.05,1.7,63.94775 +2210,46,30,2.6,111.05,1.7,63.9475 +2211,46,30,2.6,111.05,1.7,63.94725 +2212,46,30,2.6,111.05,1.7,63.947 +2213,46,30,2.6,111.05,1.7,63.94675 +2214,46,30,2.6,111.05,1.7,63.9465 +2215,46,30,2.6,111.05,1.7,63.94625 +2216,46,30,2.6,111.05,1.7,63.946 +2217,46,30,2.6,111.05,1.7,63.94575 +2218,46,30,2.6,111.05,1.7,63.9455 +2219,46,30,2.6,111.05,1.7,63.94525 +2220,46,30,2.6,111.05,1.7,63.945 +2221,46,30,2.6,111.05,1.7,63.94475 +2222,46,30,2.6,111.05,1.7,63.9445 +2223,46,30,2.6,111.05,1.7,63.94425 +2224,46,30,2.6,111.05,1.7,63.944 +2225,46,30,2.6,111.05,1.7,63.94375 +2226,46,30,2.6,111.05,1.7,63.9435 +2227,46,30,2.6,111.05,1.7,63.94325 +2228,46,30,2.6,111.05,1.7,63.943 +2229,46,30,2.6,111.05,1.7,63.94275 +2230,46,30,2.6,111.05,1.7,63.9425 +2231,46,30,2.6,111.05,1.7,63.94225 +2232,46,30,2.6,111.05,1.7,63.942 +2233,46,30,2.6,111.05,1.7,63.94175 +2234,46,30,2.6,111.05,1.7,63.9415 +2235,46,30,2.6,111.05,1.7,63.94125 +2236,46,30,2.6,111.05,1.7,63.941 +2237,46,30,2.6,111.05,1.7,63.94075 +2238,46,30,2.6,111.05,1.7,63.9405 +2239,46,30,2.6,111.05,1.7,63.94025 +2240,46,30,2.6,111.05,1.7,63.94 +2241,46,30,2.6,111.05,1.7,63.93975 +2242,46,30,2.6,111.05,1.7,63.9395 +2243,46,30,2.6,111.05,1.7,63.93925 +2244,46,30,2.6,111.05,1.7,63.939 +2245,46,30,2.6,111.05,1.7,63.93875 +2246,46,30,2.6,111.05,1.7,63.9385 +2247,46,30,2.6,111.05,1.7,63.93825 +2248,46,30,2.6,111.05,1.7,63.938 +2249,46,30,2.6,111.05,1.7,63.93775 +2250,46,30,2.6,111.05,1.7,63.9375 +2251,46,30,2.6,111.05,1.7,63.93725 +2252,46,30,2.6,111.05,1.7,63.937 +2253,46,30,2.6,111.05,1.7,63.93675 +2254,46,30,2.6,111.05,1.7,63.9365 +2255,46,30,2.6,111.05,1.7,63.93625 +2256,46,30,2.6,111.05,1.7,63.936 +2257,46,30,2.6,111.05,1.7,63.93575 +2258,46,30,2.6,111.05,1.7,63.9355 +2259,46,30,2.6,111.05,1.7,63.93525 +2260,46,30,2.6,111.05,1.7,63.935 +2261,46,30,2.6,111.05,1.7,63.93475 +2262,46,30,2.6,111.05,1.7,63.9345 +2263,46,30,2.6,111.05,1.7,63.93425 +2264,46,30,2.6,111.05,1.7,63.934 +2265,46,30,2.6,111.05,1.7,63.93375 +2266,46,30,2.6,111.05,1.7,63.9335 +2267,46,30,2.6,111.05,1.7,63.93325 +2268,46,30,2.6,111.05,1.7,63.933 +2269,46,30,2.6,111.05,1.7,63.93275 +2270,46,30,2.6,111.05,1.7,63.9325 +2271,46,30,2.6,111.05,1.7,63.93225 +2272,46,30,2.6,111.05,1.7,63.932 +2273,46,30,2.6,111.05,1.7,63.93175 +2274,46,30,2.6,111.05,1.7,63.9315 +2275,46,30,2.6,111.05,1.7,63.93125 +2276,46,30,2.6,111.05,1.7,63.931 +2277,46,30,2.6,111.05,1.7,63.93075 +2278,46,30,2.6,111.05,1.7,63.9305 +2279,46,30,2.6,111.05,1.7,63.93025 +2280,46,30,2.6,111.05,1.7,63.93 +2281,46,30,2.6,111.05,1.7,63.92975 +2282,46,30,2.6,111.05,1.7,63.9295 +2283,46,30,2.6,111.05,1.7,63.92925 +2284,46,30,2.6,111.05,1.7,63.929 +2285,46,30,2.6,111.05,1.7,63.92875 +2286,46,30,2.6,111.05,1.7,63.9285 +2287,46,30,2.6,111.05,1.7,63.92825 +2288,46,30,2.6,111.05,1.7,63.928 +2289,46,30,2.6,111.05,1.7,63.92775 +2290,46,30,2.6,111.05,1.7,63.9275 +2291,46,30,2.6,111.05,1.7,63.92725 +2292,46,30,2.6,111.05,1.7,63.927 +2293,46,30,2.6,111.05,1.7,63.92675 +2294,46,30,2.6,111.05,1.7,63.9265 +2295,46,30,2.6,111.05,1.7,63.92625 +2296,46,30,2.6,111.05,1.7,63.926 +2297,46,30,2.6,111.05,1.7,63.92575 +2298,46,30,2.6,111.05,1.7,63.9255 +2299,46,30,2.6,111.05,1.7,63.92525 +2300,46,30,2.6,111.05,1.7,63.925 +2301,46,30,2.6,111.05,1.7,63.92475 +2302,46,30,2.6,111.05,1.7,63.9245 +2303,46,30,2.6,111.05,1.7,63.92425 +2304,46,30,2.6,111.05,1.7,63.924 +2305,46,30,2.6,111.05,1.7,63.92375 +2306,46,30,2.6,111.05,1.7,63.9235 +2307,46,30,2.6,111.05,1.7,63.92325 +2308,46,30,2.6,111.05,1.7,63.923 +2309,46,30,2.6,111.05,1.7,63.92275 +2310,46,30,2.6,111.05,1.7,63.9225 +2311,46,30,2.6,111.05,1.7,63.92225 +2312,46,30,2.6,111.05,1.7,63.922 +2313,46,30,2.6,111.05,1.7,63.92175 +2314,46,30,2.6,111.05,1.7,63.9215 +2315,46,30,2.6,111.05,1.7,63.92125 +2316,46,30,2.6,111.05,1.7,63.921 +2317,46,30,2.6,111.05,1.7,63.92075 +2318,46,30,2.6,111.05,1.7,63.9205 +2319,46,30,2.6,111.05,1.7,63.92025 +2320,46,30,2.6,111.05,1.7,63.92 +2321,46,30,2.6,111.05,1.7,63.91975 +2322,46,30,2.6,111.05,1.7,63.9195 +2323,46,30,2.6,111.05,1.7,63.91925 +2324,46,30,2.6,111.05,1.7,63.919 +2325,46,30,2.6,111.05,1.7,63.91875 +2326,46,30,2.6,111.05,1.7,63.9185 +2327,46,30,2.6,111.05,1.7,63.91825 +2328,46,30,2.6,111.05,1.7,63.918 +2329,46,30,2.6,111.05,1.7,63.91775 +2330,46,30,2.6,111.05,1.7,63.9175 +2331,46,30,2.6,111.05,1.7,63.91725 +2332,46,30,2.6,111.05,1.7,63.917 +2333,46,30,2.6,111.05,1.7,63.91675 +2334,46,30,2.6,111.05,1.7,63.9165 +2335,46,30,2.6,111.05,1.7,63.91625 +2336,46,30,2.6,111.05,1.7,63.916 +2337,46,30,2.6,111.05,1.7,63.91575 +2338,46,30,2.6,111.05,1.7,63.9155 +2339,46,30,2.6,111.05,1.7,63.91525 +2340,46,30,2.6,111.05,1.7,63.915 +2341,46,30,2.6,111.05,1.7,63.91475 +2342,46,30,2.6,111.05,1.7,63.9145 +2343,46,30,2.6,111.05,1.7,63.91425 +2344,46,30,2.6,111.05,1.7,63.914 +2345,46,30,2.6,111.05,1.7,63.91375 +2346,46,30,2.6,111.05,1.7,63.9135 +2347,46,30,2.6,111.05,1.7,63.91325 +2348,46,30,2.6,111.05,1.7,63.913 +2349,46,30,2.6,111.05,1.7,63.91275 +2350,46,30,2.6,111.05,1.7,63.9125 +2351,46,30,2.6,111.05,1.7,63.91225 +2352,46,30,2.6,111.05,1.7,63.912 +2353,46,30,2.6,111.05,1.7,63.91175 +2354,46,30,2.6,111.05,1.7,63.9115 +2355,46,30,2.6,111.05,1.7,63.91125 +2356,46,30,2.6,111.05,1.7,63.911 +2357,46,30,2.6,111.05,1.7,63.91075 +2358,46,30,2.6,111.05,1.7,63.9105 +2359,46,30,2.6,111.05,1.7,63.91025 +2360,46,30,2.6,111.05,1.7,63.91 +2361,46,30,2.6,111.05,1.7,63.90975 +2362,46,30,2.6,111.05,1.7,63.9095 +2363,46,30,2.6,111.05,1.7,63.90925 +2364,46,30,2.6,111.05,1.7,63.909 +2365,46,30,2.6,111.05,1.7,63.90875 +2366,46,30,2.6,111.05,1.7,63.9085 +2367,46,30,2.6,111.05,1.7,63.90825 +2368,46,30,2.6,111.05,1.7,63.908 +2369,46,30,2.6,111.05,1.7,63.90775 +2370,46,30,2.6,111.05,1.7,63.9075 +2371,46,30,2.6,111.05,1.7,63.90725 +2372,46,30,2.6,111.05,1.7,63.907 +2373,46,30,2.6,111.05,1.7,63.90675 +2374,46,30,2.6,111.05,1.7,63.9065 +2375,46,30,2.6,111.05,1.7,63.90625 +2376,46,30,2.6,111.05,1.7,63.906 +2377,46,30,2.6,111.05,1.7,63.90575 +2378,46,30,2.6,111.05,1.7,63.9055 +2379,46,30,2.6,111.05,1.7,63.90525 +2380,46,30,2.6,111.05,1.7,63.905 +2381,46,30,2.6,111.05,1.7,63.90475 +2382,46,30,2.6,111.05,1.7,63.9045 +2383,46,30,2.6,111.05,1.7,63.90425 +2384,46,30,2.6,111.05,1.7,63.904 +2385,46,30,2.6,111.05,1.7,63.90375 +2386,46,30,2.6,111.05,1.7,63.9035 +2387,46,30,2.6,111.05,1.7,63.90325 +2388,46,30,2.6,111.05,1.7,63.903 +2389,46,30,2.6,111.05,1.7,63.90275 +2390,46,30,2.6,111.05,1.7,63.9025 +2391,46,30,2.6,111.05,1.7,63.90225 +2392,46,30,2.6,111.05,1.7,63.902 +2393,46,30,2.6,111.05,1.7,63.90175 +2394,46,30,2.6,111.05,1.7,63.9015 +2395,46,30,2.6,111.05,1.7,63.90125 +2396,46,30,2.6,111.05,1.7,63.901 +2397,46,30,2.6,111.05,1.7,63.90075 +2398,46,30,2.6,111.05,1.7,63.9005 +2399,46,30,2.6,111.05,1.7,63.90025 +2400,46,30,2.6,111.05,1.7,63.9 +2401,46,30,2.6,111.05,1.7,63.89975 +2402,46,30,2.6,111.05,1.7,63.8995 +2403,46,30,2.6,111.05,1.7,63.89925 +2404,46,30,2.6,111.05,1.7,63.899 +2405,46,30,2.6,111.05,1.7,63.89875 +2406,46,30,2.6,111.05,1.7,63.8985 +2407,46,30,2.6,111.05,1.7,63.89825 +2408,46,30,2.6,111.05,1.7,63.898 +2409,46,30,2.6,111.05,1.7,63.89775 +2410,46,30,2.6,111.05,1.7,63.8975 +2411,46,30,2.6,111.05,1.7,63.89725 +2412,46,30,2.6,111.05,1.7,63.897 +2413,46,30,2.6,111.05,1.7,63.89675 +2414,46,30,2.6,111.05,1.7,63.8965 +2415,46,30,2.6,111.05,1.7,63.89625 +2416,46,30,2.6,111.05,1.7,63.896 +2417,46,30,2.6,111.05,1.7,63.89575 +2418,46,30,2.6,111.05,1.7,63.8955 +2419,46,30,2.6,111.05,1.7,63.89525 +2420,46,30,2.6,111.05,1.7,63.895 +2421,46,30,2.6,111.05,1.7,63.89475 +2422,46,30,2.6,111.05,1.7,63.8945 +2423,46,30,2.6,111.05,1.7,63.89425 +2424,46,30,2.6,111.05,1.7,63.894 +2425,46,30,2.6,111.05,1.7,63.89375 +2426,46,30,2.6,111.05,1.7,63.8935 +2427,46,30,2.6,111.05,1.7,63.89325 +2428,46,30,2.6,111.05,1.7,63.893 +2429,46,30,2.6,111.05,1.7,63.89275 +2430,46,30,2.6,111.05,1.7,63.8925 +2431,46,30,2.6,111.05,1.7,63.89225 +2432,46,30,2.6,111.05,1.7,63.892 +2433,46,30,2.6,111.05,1.7,63.89175 +2434,46,30,2.6,111.05,1.7,63.8915 +2435,46,30,2.6,111.05,1.7,63.89125 +2436,46,30,2.6,111.05,1.7,63.891 +2437,46,30,2.6,111.05,1.7,63.89075 +2438,46,30,2.6,111.05,1.7,63.8905 +2439,46,30,2.6,111.05,1.7,63.89025 +2440,46,30,2.6,111.05,1.7,63.89 +2441,46,30,2.6,111.05,1.7,63.88975 +2442,46,30,2.6,111.05,1.7,63.8895 +2443,46,30,2.6,111.05,1.7,63.88925 +2444,46,30,2.6,111.05,1.7,63.889 +2445,46,30,2.6,111.05,1.7,63.88875 +2446,46,30,2.6,111.05,1.7,63.8885 +2447,46,30,2.6,111.05,1.7,63.88825 +2448,46,30,2.6,111.05,1.7,63.888 +2449,46,30,2.6,111.05,1.7,63.88775 +2450,46,30,2.6,111.05,1.7,63.8875 +2451,46,30,2.6,111.05,1.7,63.88725 +2452,46,30,2.6,111.05,1.7,63.887 +2453,46,30,2.6,111.05,1.7,63.88675 +2454,46,30,2.6,111.05,1.7,63.8865 +2455,46,30,2.6,111.05,1.7,63.88625 +2456,46,30,2.6,111.05,1.7,63.886 +2457,46,30,2.6,111.05,1.7,63.88575 +2458,46,30,2.6,111.05,1.7,63.8855 +2459,46,30,2.6,111.05,1.7,63.88525 +2460,46,30,2.6,111.05,1.7,63.885 +2461,46,30,2.6,111.05,1.7,63.88475 +2462,46,30,2.6,111.05,1.7,63.8845 +2463,46,30,2.6,111.05,1.7,63.88425 +2464,46,30,2.6,111.05,1.7,63.884 +2465,46,30,2.6,111.05,1.7,63.88375 +2466,46,30,2.6,111.05,1.7,63.8835 +2467,46,30,2.6,111.05,1.7,63.88325 +2468,46,30,2.6,111.05,1.7,63.883 +2469,46,30,2.6,111.05,1.7,63.88275 +2470,46,30,2.6,111.05,1.7,63.8825 +2471,46,30,2.6,111.05,1.7,63.88225 +2472,46,30,2.6,111.05,1.7,63.882 +2473,46,30,2.6,111.05,1.7,63.88175 +2474,46,30,2.6,111.05,1.7,63.8815 +2475,46,30,2.6,111.05,1.7,63.88125 +2476,46,30,2.6,111.05,1.7,63.881 +2477,46,30,2.6,111.05,1.7,63.88075 +2478,46,30,2.6,111.05,1.7,63.8805 +2479,46,30,2.6,111.05,1.7,63.88025 +2480,46,30,2.6,111.05,1.7,63.88 +2481,46,30,2.6,111.05,1.7,63.87975 +2482,46,30,2.6,111.05,1.7,63.8795 +2483,46,30,2.6,111.05,1.7,63.87925 +2484,46,30,2.6,111.05,1.7,63.879 +2485,46,30,2.6,111.05,1.7,63.87875 +2486,46,30,2.6,111.05,1.7,63.8785 +2487,46,30,2.6,111.05,1.7,63.87825 +2488,46,30,2.6,111.05,1.7,63.878 +2489,46,30,2.6,111.05,1.7,63.87775 +2490,46,30,2.5,111.05,1.7,63.8775 +2491,46,30,2.5,111.05,1.7,63.87725 +2492,46,30,2.5,111.05,1.7,63.877 +2493,46,30,2.5,111.05,1.7,63.87675 +2494,46,30,2.5,111.05,1.7,63.8765 +2495,46,30,2.5,111.05,1.7,63.87625 +2496,46,30,2.5,111.05,1.7,63.876 +2497,46,30,2.5,111.05,1.7,63.87575 +2498,46,30,2.5,111.05,1.7,63.8755 +2499,46,30,2.5,111.05,1.7,63.87525 +2500,46,30,2.5,111.05,1.7,63.875 +2501,46,30,2.5,111.05,1.7,63.87475 +2502,46,30,2.5,111.05,1.7,63.8745 +2503,46,30,2.5,111.05,1.7,63.87425 +2504,46,30,2.5,111.05,1.7,63.874 +2505,46,30,2.5,111.05,1.7,63.87375 +2506,46,30,2.5,111.05,1.7,63.8735 +2507,46,30,2.5,111.05,1.7,63.87325 +2508,46,30,2.5,111.05,1.7,63.873 +2509,46,30,2.5,111.05,1.7,63.87275 +2510,46,30,2.5,111.05,1.7,63.8725 +2511,46,30,2.5,111.05,1.7,63.87225 +2512,46,30,2.5,111.05,1.7,63.872 +2513,46,30,2.5,111.05,1.7,63.87175 +2514,46,30,2.5,111.05,1.7,63.8715 +2515,46,30,2.5,111.05,1.7,63.87125 +2516,46,30,2.5,111.05,1.7,63.871 +2517,46,30,2.5,111.05,1.7,63.87075 +2518,46,30,2.5,111.05,1.7,63.8705 +2519,46,30,2.5,111.05,1.7,63.87025 +2520,46,30,2.5,111.05,1.7,63.87 +2521,46,30,2.5,111.05,1.7,63.86975 +2522,46,30,2.5,111.05,1.7,63.8695 +2523,46,30,2.5,111.05,1.7,63.86925 +2524,46,30,2.5,111.05,1.7,63.869 +2525,46,30,2.5,111.05,1.7,63.86875 +2526,46,30,2.5,111.05,1.7,63.8685 +2527,46,30,2.5,111.05,1.7,63.86825 +2528,46,30,2.5,111.05,1.7,63.868 +2529,46,30,2.5,111.05,1.7,63.86775 +2530,46,30,2.5,111.05,1.7,63.8675 +2531,46,30,2.5,111.05,1.7,63.86725 +2532,46,30,2.5,111.05,1.7,63.867 +2533,46,30,2.5,111.05,1.7,63.86675 +2534,46,30,2.5,111.05,1.7,63.8665 +2535,46,30,2.5,111.05,1.7,63.86625 +2536,46,30,2.5,111.05,1.7,63.866 +2537,46,30,2.5,111.05,1.7,63.86575 +2538,46,30,2.5,111.05,1.7,63.8655 +2539,46,30,2.5,111.05,1.7,63.86525 +2540,46,30,2.5,111.05,1.7,63.865 +2541,46,30,2.5,111.05,1.7,63.86475 +2542,46,30,2.5,111.05,1.7,63.8645 +2543,46,30,2.5,111.05,1.7,63.86425 +2544,46,30,2.5,111.05,1.7,63.864 +2545,46,30,2.5,111.05,1.7,63.86375 +2546,46,30,2.5,111.05,1.7,63.8635 +2547,46,30,2.5,111.05,1.7,63.86325 +2548,46,30,2.5,111.05,1.7,63.863 +2549,46,30,2.5,111.05,1.7,63.86275 +2550,46,30,2.5,111.05,1.7,63.8625 +2551,46,30,2.5,111.05,1.7,63.86225 +2552,46,30,2.5,111.05,1.7,63.862 +2553,46,30,2.5,111.05,1.7,63.86175 +2554,46,30,2.5,111.05,1.7,63.8615 +2555,46,30,2.5,111.05,1.7,63.86125 +2556,46,30,2.5,111.05,1.7,63.861 +2557,46,30,2.5,111.05,1.7,63.86075 +2558,46,30,2.5,111.05,1.7,63.8605 +2559,46,30,2.5,111.05,1.7,63.86025 +2560,46,30,2.5,111.05,1.7,63.86 +2561,46,30,2.5,111.05,1.7,63.85975 +2562,46,30,2.5,111.05,1.7,63.8595 +2563,46,30,2.5,111.05,1.7,63.85925 +2564,46,30,2.5,111.05,1.7,63.859 +2565,46,30,2.5,111.05,1.7,63.85875 +2566,46,30,2.5,111.05,1.7,63.8585 +2567,46,30,2.5,111.05,1.7,63.85825 +2568,46,30,2.5,111.05,1.7,63.858 +2569,46,30,2.5,111.05,1.7,63.85775 +2570,46,30,2.5,111.05,1.7,63.8575 +2571,46,30,2.5,111.05,1.7,63.85725 +2572,46,30,2.5,111.05,1.7,63.857 +2573,46,30,2.5,111.05,1.7,63.85675 +2574,46,30,2.5,111.05,1.7,63.8565 +2575,46,30,2.5,111.05,1.7,63.85625 +2576,46,30,2.5,111.05,1.7,63.856 +2577,46,30,2.5,111.05,1.7,63.85575 +2578,46,30,2.5,111.05,1.7,63.8555 +2579,46,30,2.5,111.05,1.7,63.85525 +2580,46,30,2.5,111.05,1.7,63.855 +2581,46,30,2.5,111.05,1.7,63.85475 +2582,46,30,2.5,111.05,1.7,63.8545 +2583,46,30,2.5,111.05,1.7,63.85425 +2584,46,30,2.5,111.05,1.7,63.854 +2585,46,30,2.5,111.05,1.7,63.85375 +2586,46,30,2.5,111.05,1.7,63.8535 +2587,46,30,2.5,111.05,1.7,63.85325 +2588,46,30,2.5,111.05,1.7,63.853 +2589,46,30,2.5,111.05,1.7,63.85275 +2590,46,30,2.5,111.05,1.7,63.8525 +2591,46,30,2.5,111.05,1.7,63.85225 +2592,46,30,2.5,111.05,1.7,63.852 +2593,46,30,2.5,111.05,1.7,63.85175 +2594,46,30,2.5,111.05,1.7,63.8515 +2595,46,30,2.5,111.05,1.7,63.85125 +2596,46,30,2.5,111.05,1.7,63.851 +2597,46,30,2.5,111.05,1.7,63.85075 +2598,46,30,2.5,111.05,1.7,63.8505 +2599,46,30,2.5,111.05,1.7,63.85025 +2600,46,30,2.5,111.05,1.7,63.85 +2601,46,30,2.5,111.05,1.7,63.84975 +2602,46,30,2.5,111.05,1.7,63.8495 +2603,46,30,2.5,111.05,1.7,63.84925 +2604,46,30,2.5,111.05,1.7,63.849 +2605,46,30,2.5,111.05,1.7,63.84875 +2606,46,30,2.5,111.05,1.7,63.8485 +2607,46,30,2.5,111.05,1.7,63.84825 +2608,46,30,2.5,111.05,1.7,63.848 +2609,46,30,2.5,111.05,1.7,63.84775 +2610,46,30,2.5,111.05,1.7,63.8475 +2611,46,30,2.5,111.05,1.7,63.84725 +2612,46,30,2.5,111.05,1.7,63.847 +2613,46,30,2.5,111.05,1.7,63.84675 +2614,46,30,2.5,111.05,1.7,63.8465 +2615,46,30,2.5,111.05,1.7,63.84625 +2616,46,30,2.5,111.05,1.7,63.846 +2617,46,30,2.5,111.05,1.7,63.84575 +2618,46,30,2.5,111.05,1.7,63.8455 +2619,46,30,2.5,111.05,1.7,63.84525 +2620,46,30,2.5,111.05,1.7,63.845 +2621,46,30,2.5,111.05,1.7,63.84475 +2622,46,30,2.5,111.05,1.7,63.8445 +2623,46,30,2.5,111.05,1.7,63.84425 +2624,46,30,2.5,111.05,1.7,63.844 +2625,46,30,2.5,111.05,1.7,63.84375 +2626,46,30,2.5,111.05,1.7,63.8435 +2627,46,30,2.5,111.05,1.7,63.84325 +2628,46,30,2.5,111.05,1.7,63.843 +2629,46,30,2.5,111.05,1.7,63.84275 +2630,46,30,2.5,111.05,1.7,63.8425 +2631,46,30,2.5,111.05,1.7,63.84225 +2632,46,30,2.5,111.05,1.7,63.842 +2633,46,30,2.5,111.05,1.7,63.84175 +2634,46,30,2.5,111.05,1.7,63.8415 +2635,46,30,2.5,111.05,1.7,63.84125 +2636,46,30,2.5,111.05,1.7,63.841 +2637,46,30,2.5,111.05,1.7,63.84075 +2638,46,30,2.5,111.05,1.7,63.8405 +2639,46,30,2.5,111.05,1.7,63.84025 +2640,46,30,2.5,111.05,1.7,63.84 +2641,46,30,2.5,111.05,1.7,63.83975 +2642,46,30,2.5,111.05,1.7,63.8395 +2643,46,30,2.5,111.05,1.7,63.83925 +2644,46,30,2.5,111.05,1.7,63.839 +2645,46,30,2.5,111.05,1.7,63.83875 +2646,46,30,2.5,111.05,1.7,63.8385 +2647,46,30,2.5,111.05,1.7,63.83825 +2648,46,30,2.5,111.05,1.7,63.838 +2649,46,30,2.5,111.05,1.7,63.83775 +2650,46,30,2.5,111.05,1.7,63.8375 +2651,46,30,2.5,111.05,1.7,63.83725 +2652,46,30,2.5,111.05,1.7,63.837 +2653,46,30,2.5,111.05,1.7,63.83675 +2654,46,30,2.5,111.05,1.7,63.8365 +2655,46,30,2.5,111.05,1.7,63.83625 +2656,46,30,2.5,111.05,1.7,63.836 +2657,46,30,2.5,111.05,1.7,63.83575 +2658,46,30,2.5,111.05,1.7,63.8355 +2659,46,30,2.5,111.05,1.7,63.83525 +2660,46,30,2.5,111.05,1.7,63.835 +2661,46,30,2.5,111.05,1.7,63.83475 +2662,46,30,2.5,111.05,1.7,63.8345 +2663,46,30,2.5,111.05,1.7,63.83425 +2664,46,30,2.5,111.05,1.7,63.834 +2665,46,30,2.5,111.05,1.7,63.83375 +2666,46,30,2.5,111.05,1.7,63.8335 +2667,46,30,2.5,111.05,1.7,63.83325 +2668,46,30,2.5,111.05,1.7,63.833 +2669,46,30,2.5,111.05,1.7,63.83275 +2670,46,30,2.5,111.05,1.7,63.8325 +2671,46,30,2.5,111.05,1.7,63.83225 +2672,46,30,2.5,111.05,1.7,63.832 +2673,46,30,2.5,111.05,1.7,63.83175 +2674,46,30,2.5,111.05,1.7,63.8315 +2675,46,30,2.5,111.05,1.7,63.83125 +2676,46,30,2.5,111.05,1.7,63.831 +2677,46,30,2.5,111.05,1.7,63.83075 +2678,46,30,2.5,111.05,1.7,63.8305 +2679,46,30,2.5,111.05,1.7,63.83025 +2680,46,30,2.5,111.05,1.7,63.83 +2681,46,30,2.5,111.05,1.7,63.82975 +2682,46,30,2.5,111.05,1.7,63.8295 +2683,46,30,2.5,111.05,1.7,63.82925 +2684,46,30,2.5,111.05,1.7,63.829 +2685,46,30,2.5,111.05,1.7,63.82875 +2686,46,30,2.5,111.05,1.7,63.8285 +2687,46,30,2.5,111.05,1.7,63.82825 +2688,46,30,2.5,111.05,1.7,63.828 +2689,46,30,2.5,111.05,1.7,63.82775 +2690,46,30,2.5,111.05,1.7,63.8275 +2691,46,30,2.5,111.05,1.7,63.82725 +2692,46,30,2.5,111.05,1.7,63.827 +2693,46,30,2.5,111.05,1.7,63.82675 +2694,46,30,2.5,111.05,1.7,63.8265 +2695,46,30,2.5,111.05,1.7,63.82625 +2696,46,30,2.5,111.05,1.7,63.826 +2697,46,30,2.5,111.05,1.7,63.82575 +2698,46,30,2.5,111.05,1.7,63.8255 +2699,46,30,2.5,111.05,1.7,63.82525 +2700,46,30,2.5,111.05,1.7,63.825 +2701,46,30,2.5,111.05,1.7,63.82475 +2702,46,30,2.5,111.05,1.7,63.8245 +2703,46,30,2.5,111.05,1.7,63.82425 +2704,46,30,2.5,111.05,1.7,63.824 +2705,46,30,2.5,111.05,1.7,63.82375 +2706,46,30,2.5,111.05,1.7,63.8235 +2707,46,30,2.5,111.05,1.7,63.82325 +2708,46,30,2.5,111.05,1.7,63.823 +2709,46,30,2.5,111.05,1.7,63.82275 +2710,46,30,2.5,111.05,1.7,63.8225 +2711,46,30,2.5,111.05,1.7,63.82225 +2712,46,30,2.5,111.05,1.7,63.822 +2713,46,30,2.5,111.05,1.7,63.82175 +2714,46,30,2.5,111.05,1.7,63.8215 +2715,46,30,2.5,111.05,1.7,63.82125 +2716,46,30,2.5,111.05,1.7,63.821 +2717,46,30,2.5,111.05,1.7,63.82075 +2718,46,30,2.5,111.05,1.7,63.8205 +2719,46,30,2.5,111.05,1.7,63.82025 +2720,46,30,2.5,111.05,1.7,63.82 +2721,46,30,2.5,111.05,1.7,63.81975 +2722,46,30,2.5,111.05,1.7,63.8195 +2723,46,30,2.5,111.05,1.7,63.81925 +2724,46,30,2.5,111.05,1.7,63.819 +2725,46,30,2.5,111.05,1.7,63.81875 +2726,46,30,2.5,111.05,1.7,63.8185 +2727,46,30,2.5,111.05,1.7,63.81825 +2728,46,30,2.5,111.05,1.7,63.818 +2729,46,30,2.5,111.05,1.7,63.81775 +2730,46,30,2.5,111.05,1.7,63.8175 +2731,46,30,2.5,111.05,1.7,63.81725 +2732,46,30,2.5,111.05,1.7,63.817 +2733,46,30,2.5,111.05,1.7,63.81675 +2734,46,30,2.5,111.05,1.7,63.8165 +2735,46,30,2.5,111.05,1.7,63.81625 +2736,46,30,2.5,111.05,1.7,63.816 +2737,46,30,2.5,111.05,1.7,63.81575 +2738,46,30,2.5,111.05,1.7,63.8155 +2739,46,30,2.5,111.05,1.7,63.81525 +2740,46,30,2.5,111.05,1.7,63.815 +2741,46,30,2.5,111.05,1.7,63.81475 +2742,46,30,2.5,111.05,1.7,63.8145 +2743,46,30,2.5,111.05,1.7,63.81425 +2744,46,30,2.5,111.05,1.7,63.814 +2745,46,30,2.5,111.05,1.7,63.81375 +2746,46,30,2.5,111.05,1.7,63.8135 +2747,46,30,2.5,111.05,1.7,63.81325 +2748,46,30,2.5,111.05,1.7,63.813 +2749,46,30,2.5,111.05,1.7,63.81275 +2750,46,30,2.5,111.05,1.7,63.8125 +2751,46,30,2.5,111.05,1.7,63.81225 +2752,46,30,2.5,111.05,1.7,63.812 +2753,46,30,2.5,111.05,1.7,63.81175 +2754,46,30,2.5,111.05,1.7,63.8115 +2755,46,30,2.5,111.05,1.7,63.81125 +2756,46,30,2.5,111.05,1.7,63.811 +2757,46,30,2.5,111.05,1.7,63.81075 +2758,46,30,2.5,111.05,1.7,63.8105 +2759,46,30,2.5,111.05,1.7,63.81025 +2760,46,30,2.5,111.05,1.7,63.81 +2761,46,30,2.5,111.05,1.7,63.80975 +2762,46,30,2.5,111.05,1.7,63.8095 +2763,46,30,2.5,111.05,1.7,63.80925 +2764,46,30,2.5,111.05,1.7,63.809 +2765,46,30,2.5,111.05,1.7,63.80875 +2766,46,30,2.5,111.05,1.7,63.8085 +2767,46,30,2.5,111.05,1.7,63.80825 +2768,46,30,2.5,111.05,1.7,63.808 +2769,46,30,2.5,111.05,1.7,63.80775 +2770,46,30,2.5,111.05,1.7,63.8075 +2771,46,30,2.5,111.05,1.7,63.80725 +2772,46,30,2.5,111.05,1.7,63.807 +2773,46,30,2.5,111.05,1.7,63.80675 +2774,46,30,2.5,111.05,1.7,63.8065 +2775,46,30,2.5,111.05,1.7,63.80625 +2776,46,30,2.5,111.05,1.7,63.806 +2777,46,30,2.5,111.05,1.7,63.80575 +2778,46,30,2.5,111.05,1.7,63.8055 +2779,46,30,2.5,111.05,1.7,63.80525 +2780,46,30,2.5,111.05,1.7,63.805 +2781,46,30,2.5,111.05,1.7,63.80475 +2782,46,30,2.5,111.05,1.7,63.8045 +2783,46,30,2.5,111.05,1.7,63.80425 +2784,46,30,2.5,111.05,1.7,63.804 +2785,46,30,2.5,111.05,1.7,63.80375 +2786,46,30,2.5,111.05,1.7,63.8035 +2787,46,30,2.5,111.05,1.7,63.80325 +2788,46,30,2.5,111.05,1.7,63.803 +2789,46,30,2.5,111.05,1.7,63.80275 +2790,46,30,2.5,111.05,1.7,63.8025 +2791,46,30,2.5,111.05,1.7,63.80225 +2792,46,30,2.5,111.05,1.7,63.802 +2793,46,30,2.5,111.05,1.7,63.80175 +2794,46,30,2.5,111.05,1.7,63.8015 +2795,46,30,2.5,111.05,1.7,63.80125 +2796,46,30,2.5,111.05,1.7,63.801 +2797,46,30,2.5,111.05,1.7,63.80075 +2798,46,30,2.5,111.05,1.7,63.8005 +2799,46,30,2.5,111.05,1.7,63.80025 +2800,46,30,2.5,111.05,1.7,63.8 +2801,46,30,2.5,111.05,1.7,63.79975 +2802,46,30,2.5,111.05,1.7,63.7995 +2803,46,30,2.5,111.05,1.7,63.79925 +2804,46,30,2.5,111.05,1.7,63.799 +2805,46,30,2.5,111.05,1.7,63.79875 +2806,46,30,2.5,111.05,1.7,63.7985 +2807,46,30,2.5,111.05,1.7,63.79825 +2808,46,30,2.5,111.05,1.7,63.798 +2809,46,30,2.5,111.05,1.7,63.79775 +2810,46,30,2.5,111.05,1.7,63.7975 +2811,46,30,2.5,111.05,1.7,63.79725 +2812,46,30,2.5,111.05,1.7,63.797 +2813,46,30,2.5,111.05,1.7,63.79675 +2814,46,30,2.5,111.05,1.7,63.7965 +2815,46,30,2.5,111.05,1.7,63.79625 +2816,46,30,2.5,111.05,1.7,63.796 +2817,46,30,2.5,111.05,1.7,63.79575 +2818,46,30,2.5,111.05,1.7,63.7955 +2819,46,30,2.5,111.05,1.7,63.79525 +2820,46,30,2.5,111.05,1.7,63.795 +2821,46,30,2.5,111.05,1.7,63.79475 +2822,46,30,2.5,111.05,1.7,63.7945 +2823,46,30,2.5,111.05,1.7,63.79425 +2824,46,30,2.5,111.05,1.7,63.794 +2825,46,30,2.5,111.05,1.7,63.79375 +2826,46,30,2.5,111.05,1.7,63.7935 +2827,46,30,2.5,111.05,1.7,63.79325 +2828,46,30,2.5,111.05,1.7,63.793 +2829,46,30,2.5,111.05,1.7,63.79275 +2830,46,30,2.5,111.05,1.7,63.7925 +2831,46,30,2.5,111.05,1.7,63.79225 +2832,46,30,2.5,111.05,1.7,63.792 +2833,46,30,2.5,111.05,1.7,63.79175 +2834,46,30,2.5,111.05,1.7,63.7915 +2835,46,30,2.5,111.05,1.7,63.79125 +2836,46,30,2.5,111.05,1.7,63.791 +2837,46,30,2.5,111.05,1.7,63.79075 +2838,46,30,2.5,111.05,1.7,63.7905 +2839,46,30,2.5,111.05,1.7,63.79025 +2840,46,30,2.5,111.05,1.7,63.79 +2841,46,30,2.5,111.05,1.7,63.78975 +2842,46,30,2.5,111.05,1.7,63.7895 +2843,46,30,2.5,111.05,1.7,63.78925 +2844,46,30,2.5,111.05,1.7,63.789 +2845,46,30,2.5,111.05,1.7,63.78875 +2846,46,30,2.5,111.05,1.7,63.7885 +2847,46,30,2.5,111.05,1.7,63.78825 +2848,46,30,2.5,111.05,1.7,63.788 +2849,46,30,2.5,111.05,1.7,63.78775 +2850,46,30,2.5,111.05,1.7,63.7875 +2851,46,30,2.5,111.05,1.7,63.78725 +2852,46,30,2.5,111.05,1.7,63.787 +2853,46,30,2.5,111.05,1.7,63.78675 +2854,46,30,2.5,111.05,1.7,63.7865 +2855,46,30,2.5,111.05,1.7,63.78625 +2856,46,30,2.5,111.05,1.7,63.786 +2857,46,30,2.5,111.05,1.7,63.78575 +2858,46,30,2.5,111.05,1.7,63.7855 +2859,46,30,2.5,111.05,1.7,63.78525 +2860,46,30,2.5,111.05,1.7,63.785 +2861,46,30,2.5,111.05,1.7,63.78475 +2862,46,30,2.5,111.05,1.7,63.7845 +2863,46,30,2.5,111.05,1.7,63.78425 +2864,46,30,2.5,111.05,1.7,63.784 +2865,46,30,2.5,111.05,1.7,63.78375 +2866,46,30,2.5,111.05,1.7,63.7835 +2867,46,30,2.5,111.05,1.7,63.78325 +2868,46,30,2.5,111.05,1.7,63.783 +2869,46,30,2.5,111.05,1.7,63.78275 +2870,46,30,2.5,111.05,1.7,63.7825 +2871,46,30,2.5,111.05,1.7,63.78225 +2872,46,30,2.5,111.05,1.7,63.782 +2873,46,30,2.5,111.05,1.7,63.78175 +2874,46,30,2.5,111.05,1.7,63.7815 +2875,46,30,2.5,111.05,1.7,63.78125 +2876,46,30,2.5,111.05,1.7,63.781 +2877,46,30,2.5,111.05,1.7,63.78075 +2878,46,30,2.5,111.05,1.7,63.7805 +2879,46,30,2.5,111.05,1.7,63.78025 +2880,46,30,2.5,111.05,1.7,63.78 +2881,46,30,2.5,111.05,1.7,63.77975 +2882,46,30,2.5,111.05,1.7,63.7795 +2883,46,30,2.5,111.05,1.7,63.77925 +2884,46,30,2.5,111.05,1.7,63.779 +2885,46,30,2.5,111.05,1.7,63.77875 +2886,46,30,2.5,111.05,1.7,63.7785 +2887,46,30,2.5,111.05,1.7,63.77825 +2888,46,30,2.5,111.05,1.7,63.778 +2889,46,30,2.5,111.05,1.7,63.77775 +2890,46,30,2.5,111.05,1.7,63.7775 +2891,46,30,2.5,111.05,1.7,63.77725 +2892,46,30,2.5,111.05,1.7,63.777 +2893,46,30,2.5,111.05,1.7,63.77675 +2894,46,30,2.5,111.05,1.7,63.7765 +2895,46,30,2.5,111.05,1.7,63.77625 +2896,46,30,2.5,111.05,1.7,63.776 +2897,46,30,2.5,111.05,1.7,63.77575 +2898,46,30,2.5,111.05,1.7,63.7755 +2899,46,30,2.5,111.05,1.7,63.77525 +2900,46,30,2.5,111.05,1.7,63.775 +2901,46,30,2.5,111.05,1.7,63.77475 +2902,46,30,2.5,111.05,1.7,63.7745 +2903,46,30,2.5,111.05,1.7,63.77425 +2904,46,30,2.5,111.05,1.7,63.774 +2905,46,30,2.5,111.05,1.7,63.77375 +2906,46,30,2.5,111.05,1.7,63.7735 +2907,46,30,2.5,111.05,1.7,63.77325 +2908,46,30,2.5,111.05,1.7,63.773 +2909,46,30,2.5,111.05,1.7,63.77275 +2910,46,30,2.5,111.05,1.7,63.7725 +2911,46,30,2.5,111.05,1.7,63.77225 +2912,46,30,2.5,111.05,1.7,63.772 +2913,46,30,2.5,111.05,1.7,63.77175 +2914,46,30,2.5,111.05,1.7,63.7715 +2915,46,30,2.5,111.05,1.7,63.77125 +2916,46,30,2.5,111.05,1.7,63.771 +2917,46,30,2.5,111.05,1.7,63.77075 +2918,46,30,2.5,111.05,1.7,63.7705 +2919,46,30,2.5,111.05,1.7,63.77025 +2920,46,30,2.5,111.05,1.7,63.77 +2921,46,30,2.5,111.05,1.7,63.76975 +2922,46,30,2.5,111.05,1.7,63.7695 +2923,46,30,2.5,111.05,1.7,63.76925 +2924,46,30,2.5,111.05,1.7,63.769 +2925,46,30,2.5,111.05,1.7,63.76875 +2926,46,30,2.5,111.05,1.7,63.7685 +2927,46,30,2.5,111.05,1.7,63.76825 +2928,46,30,2.5,111.05,1.7,63.768 +2929,46,30,2.5,111.05,1.7,63.76775 +2930,46,30,2.5,111.05,1.7,63.7675 +2931,46,30,2.5,111.05,1.7,63.76725 +2932,46,30,2.5,111.05,1.7,63.767 +2933,46,30,2.5,111.05,1.7,63.76675 +2934,46,30,2.5,111.05,1.7,63.7665 +2935,46,30,2.5,111.05,1.7,63.76625 +2936,46,30,2.5,111.05,1.7,63.766 +2937,46,30,2.5,111.05,1.7,63.76575 +2938,46,30,2.5,111.05,1.7,63.7655 +2939,46,30,2.5,111.05,1.7,63.76525 +2940,46,30,2.5,111.05,1.7,63.765 +2941,46,30,2.5,111.05,1.7,63.76475 +2942,46,30,2.5,111.05,1.7,63.7645 +2943,46,30,2.5,111.05,1.7,63.76425 +2944,46,30,2.5,111.05,1.7,63.764 +2945,46,30,2.5,111.05,1.7,63.76375 +2946,46,30,2.5,111.05,1.7,63.7635 +2947,46,30,2.5,111.05,1.7,63.76325 +2948,46,30,2.5,111.05,1.7,63.763 +2949,46,30,2.5,111.05,1.7,63.76275 +2950,46,30,2.5,111.05,1.7,63.7625 +2951,46,30,2.5,111.05,1.7,63.76225 +2952,46,30,2.5,111.05,1.7,63.762 +2953,46,30,2.5,111.05,1.7,63.76175 +2954,46,30,2.5,111.05,1.7,63.7615 +2955,46,30,2.5,111.05,1.7,63.76125 +2956,46,30,2.5,111.05,1.7,63.761 +2957,46,30,2.5,111.05,1.7,63.76075 +2958,46,30,2.5,111.05,1.7,63.7605 +2959,46,30,2.5,111.05,1.7,63.76025 +2960,46,30,2.5,111.05,1.7,63.76 +2961,46,30,2.5,111.05,1.7,63.75975 +2962,46,30,2.5,111.05,1.7,63.7595 +2963,46,30,2.5,111.05,1.7,63.75925 +2964,46,30,2.5,111.05,1.7,63.759 +2965,46,30,2.5,111.05,1.7,63.75875 +2966,46,30,2.5,111.05,1.7,63.7585 +2967,46,30,2.5,111.05,1.7,63.75825 +2968,46,30,2.5,111.05,1.7,63.758 +2969,46,30,2.5,111.05,1.7,63.75775 +2970,46,30,2.5,111.05,1.7,63.7575 +2971,46,30,2.5,111.05,1.7,63.75725 +2972,46,30,2.5,111.05,1.7,63.757 +2973,46,30,2.5,111.05,1.7,63.75675 +2974,46,30,2.5,111.05,1.7,63.7565 +2975,46,30,2.5,111.05,1.7,63.75625 +2976,46,30,2.5,111.05,1.7,63.756 +2977,46,30,2.5,111.05,1.7,63.75575 +2978,46,30,2.5,111.05,1.7,63.7555 +2979,46,30,2.5,111.05,1.7,63.75525 +2980,46,30,2.5,111.05,1.7,63.755 +2981,46,30,2.5,111.05,1.7,63.75475 +2982,46,30,2.5,111.05,1.7,63.7545 +2983,46,30,2.5,111.05,1.7,63.75425 +2984,46,30,2.5,111.05,1.7,63.754 +2985,46,30,2.5,111.05,1.7,63.75375 +2986,46,30,2.5,111.05,1.7,63.7535 +2987,46,30,2.5,111.05,1.7,63.75325 +2988,46,30,2.5,111.05,1.7,63.753 +2989,46,30,2.5,111.05,1.7,63.75275 +2990,46,30,2.5,111.05,1.7,63.7525 +2991,46,30,2.5,111.05,1.7,63.75225 +2992,46,30,2.5,111.05,1.7,63.752 +2993,46,30,2.5,111.05,1.7,63.75175 +2994,46,30,2.5,111.05,1.7,63.7515 +2995,46,30,2.5,111.05,1.7,63.75125 +2996,46,30,2.5,111.05,1.7,63.751 +2997,46,30,2.5,111.05,1.7,63.75075 +2998,46,30,2.5,111.05,1.7,63.7505 +2999,46,30,2.5,111.05,1.7,63.75025 +3000,46,30,2.5,111.05,1.7,63.75 +3001,46,30,2.5,111.05,1.7,63.75 +3002,46,30,2.5,111.05,1.7,63.75 +3003,46,30,2.5,111.05,1.7,63.75 +3004,46,30,2.5,111.05,1.7,63.75 +3005,46,30,2.5,111.05,1.7,63.75 +3006,46,30,2.5,111.05,1.7,63.75 +3007,46,30,2.5,111.05,1.7,63.75 +3008,46,30,2.5,111.05,1.7,63.75 +3009,46,30,2.5,111.05,1.7,63.75 +3010,46,30,2.5,111.05,1.7,63.75 +3011,46,30,2.5,111.05,1.7,63.75 +3012,46,30,2.5,111.05,1.7,63.75 +3013,46,30,2.5,111.05,1.7,63.75 +3014,46,30,2.5,111.05,1.7,63.75 +3015,46,30,2.5,111.05,1.7,63.75 +3016,46,30,2.5,111.05,1.7,63.75 +3017,46,30,2.5,111.05,1.7,63.75 +3018,46,30,2.5,111.05,1.7,63.75 +3019,46,30,2.5,111.05,1.7,63.75 +3020,46,30,2.5,111.05,1.7,63.75 +3021,46,30,2.5,111.05,1.7,63.75 +3022,46,30,2.5,111.05,1.7,63.75 +3023,46,30,2.5,111.05,1.7,63.75 +3024,46,30,2.5,111.05,1.7,63.75 +3025,46,30,2.5,111.05,1.7,63.75 +3026,46,30,2.5,111.05,1.7,63.75 +3027,46,30,2.5,111.05,1.7,63.75 +3028,46,30,2.5,111.05,1.7,63.75 +3029,46,30,2.5,111.05,1.7,63.75 +3030,46,30,2.5,111.05,1.7,63.75 +3031,46,30,2.5,111.05,1.7,63.75 +3032,46,30,2.5,111.05,1.7,63.75 +3033,46,30,2.5,111.05,1.7,63.75 +3034,46,30,2.5,111.05,1.7,63.75 +3035,46,30,2.5,111.05,1.7,63.75 +3036,46,30,2.5,111.05,1.7,63.75 +3037,46,30,2.5,111.05,1.7,63.75 +3038,46,30,2.5,111.05,1.7,63.75 +3039,46,30,2.5,111.05,1.7,63.75 +3040,46,30,2.5,111.05,1.7,63.75 +3041,46,30,2.5,111.05,1.7,63.75 +3042,46,30,2.5,111.05,1.7,63.75 +3043,46,30,2.5,111.05,1.7,63.75 +3044,46,30,2.5,111.05,1.7,63.75 +3045,46,30,2.5,111.05,1.7,63.75 +3046,46,30,2.5,111.05,1.7,63.75 +3047,46,30,2.5,111.05,1.7,63.75 +3048,46,30,2.5,111.05,1.7,63.75 +3049,46,30,2.5,111.05,1.7,63.75 +3050,46,30,2.5,111.05,1.7,63.75 +3051,46,30,2.5,111.05,1.7,63.75 +3052,46,30,2.5,111.05,1.7,63.75 +3053,46,30,2.5,111.05,1.7,63.75 +3054,46,30,2.5,111.05,1.7,63.75 +3055,46,30,2.5,111.05,1.7,63.75 +3056,46,30,2.5,111.05,1.7,63.75 +3057,46,30,2.5,111.05,1.7,63.75 +3058,46,30,2.5,111.05,1.7,63.75 +3059,46,30,2.5,111.05,1.7,63.75 +3060,46,30,2.5,111.05,1.7,63.75 +3061,46,30,2.5,111.05,1.7,63.75 +3062,46,30,2.5,111.05,1.7,63.75 +3063,46,30,2.5,111.05,1.7,63.75 +3064,46,30,2.5,111.05,1.7,63.75 +3065,46,30,2.5,111.05,1.7,63.75 +3066,46,30,2.5,111.05,1.7,63.75 +3067,46,30,2.5,111.05,1.7,63.75 +3068,46,30,2.5,111.05,1.7,63.75 +3069,46,30,2.5,111.05,1.7,63.75 +3070,46,30,2.5,111.05,1.7,63.75 +3071,46,30,2.5,111.05,1.7,63.75 +3072,46,30,2.5,111.05,1.7,63.75 +3073,46,30,2.5,111.05,1.7,63.75 +3074,46,30,2.5,111.05,1.7,63.75 +3075,46,30,2.5,111.05,1.7,63.75 +3076,46,30,2.5,111.05,1.7,63.75 +3077,46,30,2.5,111.05,1.7,63.75 +3078,46,30,2.5,111.05,1.7,63.75 +3079,46,30,2.5,111.05,1.7,63.75 +3080,46,30,2.5,111.05,1.7,63.75 +3081,46,30,2.5,111.05,1.7,63.75 +3082,46,30,2.5,111.05,1.7,63.75 +3083,46,30,2.5,111.05,1.7,63.75 +3084,46,30,2.5,111.05,1.7,63.75 +3085,46,30,2.5,111.05,1.7,63.75 +3086,46,30,2.5,111.05,1.7,63.75 +3087,46,30,2.5,111.05,1.7,63.75 +3088,46,30,2.5,111.05,1.7,63.75 +3089,46,30,2.5,111.05,1.7,63.75 +3090,46,30,2.5,111.05,1.7,63.75 +3091,46,30,2.5,111.05,1.7,63.75 +3092,46,30,2.5,111.05,1.7,63.75 +3093,46,30,2.5,111.05,1.7,63.75 +3094,46,30,2.5,111.05,1.7,63.75 +3095,46,30,2.5,111.05,1.7,63.75 +3096,46,30,2.5,111.05,1.7,63.75 +3097,46,30,2.5,111.05,1.7,63.75 +3098,46,30,2.5,111.05,1.7,63.75 +3099,46,30,2.5,111.05,1.7,63.75 +3100,46,30,2.5,111.05,1.7,63.75 +3101,46,30,2.5,111.05,1.7,63.75 +3102,46,30,2.5,111.05,1.7,63.75 +3103,46,30,2.5,111.05,1.7,63.75 +3104,46,30,2.5,111.05,1.7,63.75 +3105,46,30,2.5,111.05,1.7,63.75 +3106,46,30,2.5,111.05,1.7,63.75 +3107,46,30,2.5,111.05,1.7,63.75 +3108,46,30,2.5,111.05,1.7,63.75 +3109,46,30,2.5,111.05,1.7,63.75 +3110,46,30,2.5,111.05,1.7,63.75 +3111,46,30,2.5,111.05,1.7,63.75 +3112,46,30,2.5,111.05,1.7,63.75 +3113,46,30,2.5,111.05,1.7,63.75 +3114,46,30,2.5,111.05,1.7,63.75 +3115,46,30,2.5,111.05,1.7,63.75 +3116,46,30,2.5,111.05,1.7,63.75 +3117,46,30,2.5,111.05,1.7,63.75 +3118,46,30,2.5,111.05,1.7,63.75 +3119,46,30,2.5,111.05,1.7,63.75 +3120,46,30,2.5,111.05,1.7,63.75 +3121,46,30,2.5,111.05,1.7,63.75 +3122,46,30,2.5,111.05,1.7,63.75 +3123,46,30,2.5,111.05,1.7,63.75 +3124,46,30,2.5,111.05,1.7,63.75 +3125,46,30,2.5,111.05,1.7,63.75 +3126,46,30,2.5,111.05,1.7,63.75 +3127,46,30,2.5,111.05,1.7,63.75 +3128,46,30,2.5,111.05,1.7,63.75 +3129,46,30,2.5,111.05,1.7,63.75 +3130,46,30,2.5,111.05,1.7,63.75 +3131,46,30,2.5,111.05,1.7,63.75 +3132,46,30,2.5,111.05,1.7,63.75 +3133,46,30,2.5,111.05,1.7,63.75 +3134,46,30,2.5,111.05,1.7,63.75 +3135,46,30,2.5,111.05,1.7,63.75 +3136,46,30,2.5,111.05,1.7,63.75 +3137,46,30,2.5,111.05,1.7,63.75 +3138,46,30,2.5,111.05,1.7,63.75 +3139,46,30,2.5,111.05,1.7,63.75 +3140,46,30,2.5,111.05,1.7,63.75 +3141,46,30,2.5,111.05,1.7,63.75 +3142,46,30,2.5,111.05,1.7,63.75 +3143,46,30,2.5,111.05,1.7,63.75 +3144,46,30,2.5,111.05,1.7,63.75 +3145,46,30,2.5,111.05,1.7,63.75 +3146,46,30,2.5,111.05,1.7,63.75 +3147,46,30,2.5,111.05,1.7,63.75 +3148,46,30,2.5,111.05,1.7,63.75 +3149,46,30,2.5,111.05,1.7,63.75 +3150,46,30,2.5,111.05,1.7,63.75 +3151,46,30,2.5,111.05,1.7,63.75 +3152,46,30,2.5,111.05,1.7,63.75 +3153,46,30,2.5,111.05,1.7,63.75 +3154,46,30,2.5,111.05,1.7,63.75 +3155,46,30,2.5,111.05,1.7,63.75 +3156,46,30,2.5,111.05,1.7,63.75 +3157,46,30,2.5,111.05,1.7,63.75 +3158,46,30,2.5,111.05,1.7,63.75 +3159,46,30,2.5,111.05,1.7,63.75 +3160,46,30,2.5,111.05,1.7,63.75 +3161,46,30,2.5,111.05,1.7,63.75 +3162,46,30,2.5,111.05,1.7,63.75 +3163,46,30,2.5,111.05,1.7,63.75 +3164,46,30,2.5,111.05,1.7,63.75 +3165,46,30,2.5,111.05,1.7,63.75 +3166,46,30,2.5,111.05,1.7,63.75 +3167,46,30,2.5,111.05,1.7,63.75 +3168,46,30,2.5,111.05,1.7,63.75 +3169,46,30,2.5,111.05,1.7,63.75 +3170,46,30,2.5,111.05,1.7,63.75 +3171,46,30,2.5,111.05,1.7,63.75 +3172,46,30,2.5,111.05,1.7,63.75 +3173,46,30,2.5,111.05,1.7,63.75 +3174,46,30,2.5,111.05,1.7,63.75 +3175,46,30,2.5,111.05,1.7,63.75 +3176,46,30,2.5,111.05,1.7,63.75 +3177,46,30,2.5,111.05,1.7,63.75 +3178,46,30,2.5,111.05,1.7,63.75 +3179,46,30,2.5,111.05,1.7,63.75 +3180,46,30,2.5,111.05,1.7,63.75 +3181,46,30,2.5,111.05,1.7,63.75 +3182,46,30,2.5,111.05,1.7,63.75 +3183,46,30,2.5,111.05,1.7,63.75 +3184,46,30,2.5,111.05,1.7,63.75 +3185,46,30,2.5,111.05,1.7,63.75 +3186,46,30,2.5,111.05,1.7,63.75 +3187,46,30,2.5,111.05,1.7,63.75 +3188,46,30,2.5,111.05,1.7,63.75 +3189,46,30,2.5,111.05,1.7,63.75 +3190,46,30,2.5,111.05,1.7,63.75 +3191,46,30,2.5,111.05,1.7,63.75 +3192,46,30,2.5,111.05,1.7,63.75 +3193,46,30,2.5,111.05,1.7,63.75 +3194,46,30,2.5,111.05,1.7,63.75 +3195,46,30,2.5,111.05,1.7,63.75 +3196,46,30,2.5,111.05,1.7,63.75 +3197,46,30,2.5,111.05,1.7,63.75 +3198,46,30,2.5,111.05,1.7,63.75 +3199,46,30,2.5,111.05,1.7,63.75 +3200,46,30,2.5,111.05,1.7,63.75 +3201,46,30,2.5,111.05,1.7,63.75 +3202,46,30,2.5,111.05,1.7,63.75 +3203,46,30,2.5,111.05,1.7,63.75 +3204,46,30,2.5,111.05,1.7,63.75 +3205,46,30,2.5,111.05,1.7,63.75 +3206,46,30,2.5,111.05,1.7,63.75 +3207,46,30,2.5,111.05,1.7,63.75 +3208,46,30,2.5,111.05,1.7,63.75 +3209,46,30,2.5,111.05,1.7,63.75 +3210,46,30,2.5,111.05,1.7,63.75 +3211,46,30,2.5,111.05,1.7,63.75 +3212,46,30,2.5,111.05,1.7,63.75 +3213,46,30,2.5,111.05,1.7,63.75 +3214,46,30,2.5,111.05,1.7,63.75 +3215,46,30,2.5,111.05,1.7,63.75 +3216,46,30,2.5,111.05,1.7,63.75 +3217,46,30,2.5,111.05,1.7,63.75 +3218,46,30,2.5,111.05,1.7,63.75 +3219,46,30,2.5,111.05,1.7,63.75 +3220,46,30,2.5,111.05,1.7,63.75 +3221,46,30,2.5,111.05,1.7,63.75 +3222,46,30,2.5,111.05,1.7,63.75 +3223,46,30,2.5,111.05,1.7,63.75 +3224,46,30,2.5,111.05,1.7,63.75 +3225,46,30,2.5,111.05,1.7,63.75 +3226,46,30,2.5,111.05,1.7,63.75 +3227,46,30,2.5,111.05,1.7,63.75 +3228,46,30,2.5,111.05,1.7,63.75 +3229,46,30,2.5,111.05,1.7,63.75 +3230,46,30,2.5,111.05,1.7,63.75 +3231,46,30,2.5,111.05,1.7,63.75 +3232,46,30,2.5,111.05,1.7,63.75 +3233,46,30,2.5,111.05,1.7,63.75 +3234,46,30,2.5,111.05,1.7,63.75 +3235,46,30,2.5,111.05,1.7,63.75 +3236,46,30,2.5,111.05,1.7,63.75 +3237,46,30,2.5,111.05,1.7,63.75 +3238,46,30,2.5,111.05,1.7,63.75 +3239,46,30,2.5,111.05,1.7,63.75 +3240,46,30,2.5,111.05,1.7,63.75 +3241,46,30,2.5,111.05,1.7,63.75 +3242,46,30,2.5,111.05,1.7,63.75 +3243,46,30,2.5,111.05,1.7,63.75 +3244,46,30,2.5,111.05,1.7,63.75 +3245,46,30,2.5,111.05,1.7,63.75 +3246,46,30,2.5,111.05,1.7,63.75 +3247,46,30,2.5,111.05,1.7,63.75 +3248,46,30,2.5,111.05,1.7,63.75 +3249,46,30,2.5,111.05,1.7,63.75 +3250,46,30,2.5,111.05,1.7,63.75 +3251,46,30,2.5,111.05,1.7,63.75 +3252,46,30,2.5,111.05,1.7,63.75 +3253,46,30,2.5,111.05,1.7,63.75 +3254,46,30,2.5,111.05,1.7,63.75 +3255,46,30,2.5,111.05,1.7,63.75 +3256,46,30,2.5,111.05,1.7,63.75 +3257,46,30,2.5,111.05,1.7,63.75 +3258,46,30,2.5,111.05,1.7,63.75 +3259,46,30,2.5,111.05,1.7,63.75 +3260,46,30,2.5,111.05,1.7,63.75 +3261,46,30,2.5,111.05,1.7,63.75 +3262,46,30,2.5,111.05,1.7,63.75 +3263,46,30,2.5,111.05,1.7,63.75 +3264,46,30,2.5,111.05,1.7,63.75 +3265,46,30,2.5,111.05,1.7,63.75 +3266,46,30,2.5,111.05,1.7,63.75 +3267,46,30,2.5,111.05,1.7,63.75 +3268,46,30,2.5,111.05,1.7,63.75 +3269,46,30,2.5,111.05,1.7,63.75 +3270,46,30,2.5,111.05,1.7,63.75 +3271,46,30,2.5,111.05,1.7,63.75 +3272,46,30,2.5,111.05,1.7,63.75 +3273,46,30,2.5,111.05,1.7,63.75 +3274,46,30,2.5,111.05,1.7,63.75 +3275,46,30,2.5,111.05,1.7,63.75 +3276,46,30,2.5,111.05,1.7,63.75 +3277,46,30,2.5,111.05,1.7,63.75 +3278,46,30,2.5,111.05,1.7,63.75 +3279,46,30,2.5,111.05,1.7,63.75 +3280,46,30,2.5,111.05,1.7,63.75 +3281,46,30,2.5,111.05,1.7,63.75 +3282,46,30,2.5,111.05,1.7,63.75 +3283,46,30,2.5,111.05,1.7,63.75 +3284,46,30,2.5,111.05,1.7,63.75 +3285,46,30,2.5,111.05,1.7,63.75 +3286,46,30,2.5,111.05,1.7,63.75 +3287,46,30,2.5,111.05,1.7,63.75 +3288,46,30,2.5,111.05,1.7,63.75 +3289,46,30,2.5,111.05,1.7,63.75 +3290,46,30,2.5,111.05,1.7,63.75 +3291,46,30,2.5,111.05,1.7,63.75 +3292,46,30,2.5,111.05,1.7,63.75 +3293,46,30,2.5,111.05,1.7,63.75 +3294,46,30,2.5,111.05,1.7,63.75 +3295,46,30,2.5,111.05,1.7,63.75 +3296,46,30,2.5,111.05,1.7,63.75 +3297,46,30,2.5,111.05,1.7,63.75 +3298,46,30,2.5,111.05,1.7,63.75 +3299,46,30,2.5,111.05,1.7,63.75 +3300,46,30,2.5,111.05,1.7,63.75 +3301,46,30,2.5,111.05,1.7,63.75 +3302,46,30,2.5,111.05,1.7,63.75 +3303,46,30,2.5,111.05,1.7,63.75 +3304,46,30,2.5,111.05,1.7,63.75 +3305,46,30,2.5,111.05,1.7,63.75 +3306,46,30,2.5,111.05,1.7,63.75 +3307,46,30,2.5,111.05,1.7,63.75 +3308,46,30,2.5,111.05,1.7,63.75 +3309,46,30,2.5,111.05,1.7,63.75 +3310,46,30,2.5,111.05,1.7,63.75 +3311,46,30,2.5,111.05,1.7,63.75 +3312,46,30,2.5,111.05,1.7,63.75 +3313,46,30,2.5,111.05,1.7,63.75 +3314,46,30,2.5,111.05,1.7,63.75 +3315,46,30,2.5,111.05,1.7,63.75 +3316,46,30,2.5,111.05,1.7,63.75 +3317,46,30,2.5,111.05,1.7,63.75 +3318,46,30,2.5,111.05,1.7,63.75 +3319,46,30,2.5,111.05,1.7,63.75 +3320,46,30,2.5,111.05,1.7,63.75 +3321,46,30,2.5,111.05,1.7,63.75 +3322,46,30,2.5,111.05,1.7,63.75 +3323,46,30,2.5,111.05,1.7,63.75 +3324,46,30,2.5,111.05,1.7,63.75 +3325,46,30,2.5,111.05,1.7,63.75 +3326,46,30,2.5,111.05,1.7,63.75 +3327,46,30,2.5,111.05,1.7,63.75 +3328,46,30,2.5,111.05,1.7,63.75 +3329,46,30,2.5,111.05,1.7,63.75 +3330,46,30,2.5,111.05,1.7,63.75 +3331,46,30,2.5,111.05,1.7,63.75 +3332,46,30,2.5,111.05,1.7,63.75 +3333,46,30,2.5,111.05,1.7,63.75 +3334,46,30,2.5,111.05,1.7,63.75 +3335,46,30,2.5,111.05,1.7,63.75 +3336,46,30,2.5,111.05,1.7,63.75 +3337,46,30,2.5,111.05,1.7,63.75 +3338,46,30,2.5,111.05,1.7,63.75 +3339,46,30,2.5,111.05,1.7,63.75 +3340,46,30,2.5,111.05,1.7,63.75 +3341,46,30,2.5,111.05,1.7,63.75 +3342,46,30,2.5,111.05,1.7,63.75 +3343,46,30,2.5,111.05,1.7,63.75 +3344,46,30,2.5,111.05,1.7,63.75 +3345,46,30,2.5,111.05,1.7,63.75 +3346,46,30,2.5,111.05,1.7,63.75 +3347,46,30,2.5,111.05,1.7,63.75 +3348,46,30,2.5,111.05,1.7,63.75 +3349,46,30,2.5,111.05,1.7,63.75 +3350,46,30,2.5,111.05,1.7,63.75 +3351,46,30,2.5,111.05,1.7,63.75 +3352,46,30,2.5,111.05,1.7,63.75 +3353,46,30,2.5,111.05,1.7,63.75 +3354,46,30,2.5,111.05,1.7,63.75 +3355,46,30,2.5,111.05,1.7,63.75 +3356,46,30,2.5,111.05,1.7,63.75 +3357,46,30,2.5,111.05,1.7,63.75 +3358,46,30,2.5,111.05,1.7,63.75 +3359,46,30,2.5,111.05,1.7,63.75 +3360,46,30,2.5,111.05,1.7,63.75 +3361,46,30,2.5,111.05,1.7,63.75 +3362,46,30,2.5,111.05,1.7,63.75 +3363,46,30,2.5,111.05,1.7,63.75 +3364,46,30,2.5,111.05,1.7,63.75 +3365,46,30,2.5,111.05,1.7,63.75 +3366,46,30,2.5,111.05,1.7,63.75 +3367,46,30,2.5,111.05,1.7,63.75 +3368,46,30,2.5,111.05,1.7,63.75 +3369,46,30,2.5,111.05,1.7,63.75 +3370,46,30,2.5,111.05,1.7,63.75 +3371,46,30,2.5,111.05,1.7,63.75 +3372,46,30,2.5,111.05,1.7,63.75 +3373,46,30,2.5,111.05,1.7,63.75 +3374,46,30,2.5,111.05,1.7,63.75 +3375,46,30,2.5,111.05,1.7,63.75 +3376,46,30,2.5,111.05,1.7,63.75 +3377,46,30,2.5,111.05,1.7,63.75 +3378,46,30,2.5,111.05,1.7,63.75 +3379,46,30,2.5,111.05,1.7,63.75 +3380,46,30,2.5,111.05,1.7,63.75 +3381,46,30,2.5,111.05,1.7,63.75 +3382,46,30,2.5,111.05,1.7,63.75 +3383,46,30,2.5,111.05,1.7,63.75 +3384,46,30,2.5,111.05,1.7,63.75 +3385,46,30,2.5,111.05,1.7,63.75 +3386,46,30,2.5,111.05,1.7,63.75 +3387,46,30,2.5,111.05,1.7,63.75 +3388,46,30,2.5,111.05,1.7,63.75 +3389,46,30,2.5,111.05,1.7,63.75 +3390,46,30,2.5,111.05,1.7,63.75 +3391,46,30,2.5,111.05,1.7,63.75 +3392,46,30,2.5,111.05,1.7,63.75 +3393,46,30,2.5,111.05,1.7,63.75 +3394,46,30,2.5,111.05,1.7,63.75 +3395,46,30,2.5,111.05,1.7,63.75 +3396,46,30,2.5,111.05,1.7,63.75 +3397,46,30,2.5,111.05,1.7,63.75 +3398,46,30,2.5,111.05,1.7,63.75 +3399,46,30,2.5,111.05,1.7,63.75 +3400,46,30,2.5,111.05,1.7,63.75 +3401,46,30,2.5,111.05,1.7,63.75 +3402,46,30,2.5,111.05,1.7,63.75 +3403,46,30,2.5,111.05,1.7,63.75 +3404,46,30,2.5,111.05,1.7,63.75 +3405,46,30,2.5,111.05,1.7,63.75 +3406,46,30,2.5,111.05,1.7,63.75 +3407,46,30,2.5,111.05,1.7,63.75 +3408,46,30,2.5,111.05,1.7,63.75 +3409,46,30,2.5,111.05,1.7,63.75 +3410,46,30,2.5,111.05,1.7,63.75 +3411,46,30,2.5,111.05,1.7,63.75 +3412,46,30,2.5,111.05,1.7,63.75 +3413,46,30,2.5,111.05,1.7,63.75 +3414,46,30,2.5,111.05,1.7,63.75 +3415,46,30,2.5,111.05,1.7,63.75 +3416,46,30,2.5,111.05,1.7,63.75 +3417,46,30,2.5,111.05,1.7,63.75 +3418,46,30,2.5,111.05,1.7,63.75 +3419,46,30,2.5,111.05,1.7,63.75 +3420,46,30,2.5,111.05,1.7,63.75 +3421,46,30,2.5,111.05,1.7,63.75 +3422,46,30,2.5,111.05,1.7,63.75 +3423,46,30,2.5,111.05,1.7,63.75 +3424,46,30,2.5,111.05,1.7,63.75 +3425,46,30,2.5,111.05,1.7,63.75 +3426,46,30,2.5,111.05,1.7,63.75 +3427,46,30,2.5,111.05,1.7,63.75 +3428,46,30,2.5,111.05,1.7,63.75 +3429,46,30,2.5,111.05,1.7,63.75 +3430,46,30,2.5,111.05,1.7,63.75 +3431,46,30,2.5,111.05,1.7,63.75 +3432,46,30,2.5,111.05,1.7,63.75 +3433,46,30,2.5,111.05,1.7,63.75 +3434,46,30,2.5,111.05,1.7,63.75 +3435,46,30,2.5,111.05,1.7,63.75 +3436,46,30,2.5,111.05,1.7,63.75 +3437,46,30,2.5,111.05,1.7,63.75 +3438,46,30,2.5,111.05,1.7,63.75 +3439,46,30,2.5,111.05,1.7,63.75 +3440,46,30,2.5,111.05,1.7,63.75 +3441,46,30,2.5,111.05,1.7,63.75 +3442,46,30,2.5,111.05,1.7,63.75 +3443,46,30,2.5,111.05,1.7,63.75 +3444,46,30,2.5,111.05,1.7,63.75 +3445,46,30,2.5,111.05,1.7,63.75 +3446,46,30,2.5,111.05,1.7,63.75 +3447,46,30,2.5,111.05,1.7,63.75 +3448,46,30,2.5,111.05,1.7,63.75 +3449,46,30,2.5,111.05,1.7,63.75 +3450,46,30,2.5,111.05,1.7,63.75 +3451,46,30,2.5,111.05,1.7,63.75 +3452,46,30,2.5,111.05,1.7,63.75 +3453,46,30,2.5,111.05,1.7,63.75 +3454,46,30,2.5,111.05,1.7,63.75 +3455,46,30,2.5,111.05,1.7,63.75 +3456,46,30,2.5,111.05,1.7,63.75 +3457,46,30,2.5,111.05,1.7,63.75 +3458,46,30,2.5,111.05,1.7,63.75 +3459,46,30,2.5,111.05,1.7,63.75 +3460,46,30,2.5,111.05,1.7,63.75 +3461,46,30,2.5,111.05,1.7,63.75 +3462,46,30,2.5,111.05,1.7,63.75 +3463,46,30,2.5,111.05,1.7,63.75 +3464,46,30,2.5,111.05,1.7,63.75 +3465,46,30,2.5,111.05,1.7,63.75 +3466,46,30,2.5,111.05,1.7,63.75 +3467,46,30,2.5,111.05,1.7,63.75 +3468,46,30,2.5,111.05,1.7,63.75 +3469,46,30,2.5,111.05,1.7,63.75 +3470,46,30,2.5,111.05,1.7,63.75 +3471,46,30,2.5,111.05,1.7,63.75 +3472,46,30,2.5,111.05,1.7,63.75 +3473,46,30,2.5,111.05,1.7,63.75 +3474,46,30,2.5,111.05,1.7,63.75 +3475,46,30,2.5,111.05,1.7,63.75 +3476,46,30,2.5,111.05,1.7,63.75 +3477,46,30,2.5,111.05,1.7,63.75 +3478,46,30,2.5,111.05,1.7,63.75 +3479,46,30,2.5,111.05,1.7,63.75 +3480,46,30,2.5,111.05,1.7,63.75 +3481,46,30,2.5,111.05,1.7,63.75 +3482,46,30,2.5,111.05,1.7,63.75 +3483,46,30,2.5,111.05,1.7,63.75 +3484,46,30,2.5,111.05,1.7,63.75 +3485,46,30,2.5,111.05,1.7,63.75 +3486,46,30,2.5,111.05,1.7,63.75 +3487,46,30,2.5,111.05,1.7,63.75 +3488,46,30,2.5,111.05,1.7,63.75 +3489,46,30,2.5,111.05,1.7,63.75 +3490,46,30,2.5,111.05,1.7,63.75 +3491,46,30,2.5,111.05,1.7,63.75 +3492,46,30,2.5,111.05,1.7,63.75 +3493,46,30,2.5,111.05,1.7,63.75 +3494,46,30,2.5,111.05,1.7,63.75 +3495,46,30,2.5,111.05,1.7,63.75 +3496,46,30,2.5,111.05,1.7,63.75 +3497,46,30,2.5,111.05,1.7,63.75 +3498,46,30,2.5,111.05,1.7,63.75 +3499,46,30,2.5,111.05,1.7,63.75 +3500,46,30,2.5,111.05,1.7,63.75 +3501,46,30,2.5,111.05,1.7,63.75 +3502,46,30,2.5,111.05,1.7,63.75 +3503,46,30,2.5,111.05,1.7,63.75 +3504,46,30,2.5,111.05,1.7,63.75 +3505,46,30,2.5,111.05,1.7,63.75 +3506,46,30,2.5,111.05,1.7,63.75 +3507,46,30,2.5,111.05,1.7,63.75 +3508,46,30,2.5,111.05,1.7,63.75 +3509,46,30,2.5,111.05,1.7,63.75 +3510,46,30,2.5,111.05,1.7,63.75 +3511,46,30,2.5,111.05,1.7,63.75 +3512,46,30,2.5,111.05,1.7,63.75 +3513,46,30,2.5,111.05,1.7,63.75 +3514,46,30,2.5,111.05,1.7,63.75 +3515,46,30,2.5,111.05,1.7,63.75 +3516,46,30,2.5,111.05,1.7,63.75 +3517,46,30,2.5,111.05,1.7,63.75 +3518,46,30,2.5,111.05,1.7,63.75 +3519,46,30,2.5,111.05,1.7,63.75 +3520,46,30,2.5,111.05,1.7,63.75 +3521,46,30,2.5,111.05,1.7,63.75 +3522,46,30,2.5,111.05,1.7,63.75 +3523,46,30,2.5,111.05,1.7,63.75 +3524,46,30,2.5,111.05,1.7,63.75 +3525,46,30,2.5,111.05,1.7,63.75 +3526,46,30,2.5,111.05,1.7,63.75 +3527,46,30,2.5,111.05,1.7,63.75 +3528,46,30,2.5,111.05,1.7,63.75 +3529,46,30,2.5,111.05,1.7,63.75 +3530,46,30,2.5,111.05,1.7,63.75 +3531,46,30,2.5,111.05,1.7,63.75 +3532,46,30,2.5,111.05,1.7,63.75 +3533,46,30,2.5,111.05,1.7,63.75 +3534,46,30,2.5,111.05,1.7,63.75 +3535,46,30,2.5,111.05,1.7,63.75 +3536,46,30,2.5,111.05,1.7,63.75 +3537,46,30,2.5,111.05,1.7,63.75 +3538,46,30,2.5,111.05,1.7,63.75 +3539,46,30,2.5,111.05,1.7,63.75 +3540,46,30,2.5,111.05,1.7,63.75 +3541,46,30,2.5,111.05,1.7,63.75 +3542,46,30,2.5,111.05,1.7,63.75 +3543,46,30,2.5,111.05,1.7,63.75 +3544,46,30,2.5,111.05,1.7,63.75 +3545,46,30,2.5,111.05,1.7,63.75 +3546,46,30,2.5,111.05,1.7,63.75 +3547,46,30,2.5,111.05,1.7,63.75 +3548,46,30,2.5,111.05,1.7,63.75 +3549,46,30,2.5,111.05,1.7,63.75 +3550,46,30,2.5,111.05,1.7,63.75 +3551,46,30,2.5,111.05,1.7,63.75 +3552,46,30,2.5,111.05,1.7,63.75 +3553,46,30,2.5,111.05,1.7,63.75 +3554,46,30,2.5,111.05,1.7,63.75 +3555,46,30,2.5,111.05,1.7,63.75 +3556,46,30,2.5,111.05,1.7,63.75 +3557,46,30,2.5,111.05,1.7,63.75 +3558,46,30,2.5,111.05,1.7,63.75 +3559,46,30,2.5,111.05,1.7,63.75 +3560,46,30,2.5,111.05,1.7,63.75 +3561,46,30,2.5,111.05,1.7,63.75 +3562,46,30,2.5,111.05,1.7,63.75 +3563,46,30,2.5,111.05,1.7,63.75 +3564,46,30,2.5,111.05,1.7,63.75 +3565,46,30,2.5,111.05,1.7,63.75 +3566,46,30,2.5,111.05,1.7,63.75 +3567,46,30,2.5,111.05,1.7,63.75 +3568,46,30,2.5,111.05,1.7,63.75 +3569,46,30,2.5,111.05,1.7,63.75 +3570,46,30,2.5,111.05,1.7,63.75 +3571,46,30,2.5,111.05,1.7,63.75 +3572,46,30,2.5,111.05,1.7,63.75 +3573,46,30,2.5,111.05,1.7,63.75 +3574,46,30,2.5,111.05,1.7,63.75 +3575,46,30,2.5,111.05,1.7,63.75 +3576,46,30,2.5,111.05,1.7,63.75 +3577,46,30,2.5,111.05,1.7,63.75 +3578,46,30,2.5,111.05,1.7,63.75 +3579,46,30,2.5,111.05,1.7,63.75 +3580,46,30,2.5,111.05,1.7,63.75 +3581,46,30,2.5,111.05,1.7,63.75 +3582,46,30,2.5,111.05,1.7,63.75 +3583,46,30,2.5,111.05,1.7,63.75 +3584,46,30,2.5,111.05,1.7,63.75 +3585,46,30,2.5,111.05,1.7,63.75 +3586,46,30,2.5,111.05,1.7,63.75 +3587,46,30,2.5,111.05,1.7,63.75 +3588,46,30,2.5,111.05,1.7,63.75 +3589,46,30,2.5,111.05,1.7,63.75 +3590,46,30,2.5,111.05,1.7,63.75 +3591,46,30,2.5,111.05,1.7,63.75 +3592,46,30,2.5,111.05,1.7,63.75 +3593,46,30,2.5,111.05,1.7,63.75 +3594,46,30,2.5,111.05,1.7,63.75 +3595,46,30,2.5,111.05,1.7,63.75 +3596,46,30,2.5,111.05,1.7,63.75 +3597,46,30,2.5,111.05,1.7,63.75 +3598,46,30,2.5,111.05,1.7,63.75 +3599,46,30,2.5,111.05,1.7,63.75 +3600,46,30,2.5,111.05,1.7,63.75 +3601,46,30,2.5,111.05,1.7,63.75 +3602,46,30,2.5,111.05,1.7,63.75 +3603,46,30,2.5,111.05,1.7,63.75 +3604,46,30,2.5,111.05,1.7,63.75 +3605,46,30,2.5,111.05,1.7,63.75 +3606,46,30,2.5,111.05,1.7,63.75 +3607,46,30,2.5,111.05,1.7,63.75 +3608,46,30,2.5,111.05,1.7,63.75 +3609,46,30,2.5,111.05,1.7,63.75 +3610,46,30,2.5,111.05,1.7,63.75 +3611,46,30,2.5,111.05,1.7,63.75 +3612,46,30,2.5,111.05,1.7,63.75 +3613,46,30,2.5,111.05,1.7,63.75 +3614,46,30,2.5,111.05,1.7,63.75 +3615,46,30,2.5,111.05,1.7,63.75 +3616,46,30,2.5,111.05,1.7,63.75 +3617,46,30,2.5,111.05,1.7,63.75 +3618,46,30,2.5,111.05,1.7,63.75 +3619,46,30,2.5,111.05,1.7,63.75 +3620,46,30,2.5,111.05,1.7,63.75 +3621,46,30,2.5,111.05,1.7,63.75 +3622,46,30,2.5,111.05,1.7,63.75 +3623,46,30,2.5,111.05,1.7,63.75 +3624,46,30,2.5,111.05,1.7,63.75 +3625,46,30,2.5,111.05,1.7,63.75 +3626,46,30,2.5,111.05,1.7,63.75 +3627,46,30,2.5,111.05,1.7,63.75 +3628,46,30,2.5,111.05,1.7,63.75 +3629,46,30,2.5,111.05,1.7,63.75 +3630,46,30,2.5,111.05,1.7,63.75 +3631,46,30,2.5,111.05,1.7,63.75 +3632,46,30,2.5,111.05,1.7,63.75 +3633,46,30,2.5,111.05,1.7,63.75 +3634,46,30,2.5,111.05,1.7,63.75 +3635,46,30,2.5,111.05,1.7,63.75 +3636,46,30,2.5,111.05,1.7,63.75 +3637,46,30,2.5,111.05,1.7,63.75 +3638,46,30,2.5,111.05,1.7,63.75 +3639,46,30,2.5,111.05,1.7,63.75 +3640,46,30,2.5,111.05,1.7,63.75 +3641,46,30,2.5,111.05,1.7,63.75 +3642,46,30,2.5,111.05,1.7,63.75 +3643,46,30,2.5,111.05,1.7,63.75 +3644,46,30,2.5,111.05,1.7,63.75 +3645,46,30,2.5,111.05,1.7,63.75 +3646,46,30,2.5,111.05,1.7,63.75 +3647,46,30,2.5,111.05,1.7,63.75 +3648,46,30,2.5,111.05,1.7,63.75 +3649,46,30,2.5,111.05,1.7,63.75 +3650,46,30,2.5,111.05,1.7,63.75 +3651,46,30,2.5,111.05,1.7,63.75 +3652,46,30,2.5,111.05,1.7,63.75 +3653,46,30,2.5,111.05,1.7,63.75 +3654,46,30,2.5,111.05,1.7,63.75 +3655,46,30,2.5,111.05,1.7,63.75 +3656,46,30,2.5,111.05,1.7,63.75 +3657,46,30,2.5,111.05,1.7,63.75 +3658,46,30,2.5,111.05,1.7,63.75 +3659,46,30,2.5,111.05,1.7,63.75 +3660,46,30,2.5,111.05,1.7,63.75 +3661,46,30,2.5,111.05,1.7,63.75 +3662,46,30,2.5,111.05,1.7,63.75 +3663,46,30,2.5,111.05,1.7,63.75 +3664,46,30,2.5,111.05,1.7,63.75 +3665,46,30,2.5,111.05,1.7,63.75 +3666,46,30,2.5,111.05,1.7,63.75 +3667,46,30,2.5,111.05,1.7,63.75 +3668,46,30,2.5,111.05,1.7,63.75 +3669,46,30,2.5,111.05,1.7,63.75 +3670,46,30,2.5,111.05,1.7,63.75 +3671,46,30,2.5,111.05,1.7,63.75 +3672,46,30,2.5,111.05,1.7,63.75 +3673,46,30,2.5,111.05,1.7,63.75 +3674,46,30,2.5,111.05,1.7,63.75 +3675,46,30,2.5,111.05,1.7,63.75 +3676,46,30,2.5,111.05,1.7,63.75 +3677,46,30,2.5,111.05,1.7,63.75 +3678,46,30,2.5,111.05,1.7,63.75 +3679,46,30,2.5,111.05,1.7,63.75 +3680,46,30,2.5,111.05,1.7,63.75 +3681,46,30,2.5,111.05,1.7,63.75 +3682,46,30,2.5,111.05,1.7,63.75 +3683,46,30,2.5,111.05,1.7,63.75 +3684,46,30,2.5,111.05,1.7,63.75 +3685,46,30,2.5,111.05,1.7,63.75 +3686,46,30,2.5,111.05,1.7,63.75 +3687,46,30,2.5,111.05,1.7,63.75 +3688,46,30,2.5,111.05,1.7,63.75 +3689,46,30,2.5,111.05,1.7,63.75 +3690,46,30,2.5,111.05,1.7,63.75 +3691,46,30,2.5,111.05,1.7,63.75 +3692,46,30,2.5,111.05,1.7,63.75 +3693,46,30,2.5,111.05,1.7,63.75 +3694,46,30,2.5,111.05,1.7,63.75 +3695,46,30,2.5,111.05,1.7,63.75 +3696,46,30,2.5,111.05,1.7,63.75 +3697,46,30,2.5,111.05,1.7,63.75 +3698,46,30,2.5,111.05,1.7,63.75 +3699,46,30,2.5,111.05,1.7,63.75 +3700,46,30,2.5,111.05,1.7,63.75 +3701,46,30,2.5,111.05,1.7,63.75 +3702,46,30,2.5,111.05,1.7,63.75 +3703,46,30,2.5,111.05,1.7,63.75 +3704,46,30,2.5,111.05,1.7,63.75 +3705,46,30,2.5,111.05,1.7,63.75 +3706,46,30,2.5,111.05,1.7,63.75 +3707,46,30,2.5,111.05,1.7,63.75 +3708,46,30,2.5,111.05,1.7,63.75 +3709,46,30,2.5,111.05,1.7,63.75 +3710,46,30,2.5,111.05,1.7,63.75 +3711,46,30,2.5,111.05,1.7,63.75 +3712,46,30,2.5,111.05,1.7,63.75 +3713,46,30,2.5,111.05,1.7,63.75 +3714,46,30,2.5,111.05,1.7,63.75 +3715,46,30,2.5,111.05,1.7,63.75 +3716,46,30,2.5,111.05,1.7,63.75 +3717,46,30,2.5,111.05,1.7,63.75 +3718,46,30,2.5,111.05,1.7,63.75 +3719,46,30,2.5,111.05,1.7,63.75 +3720,46,30,2.5,111.05,1.7,63.75 +3721,46,30,2.5,111.05,1.7,63.75 +3722,46,30,2.5,111.05,1.7,63.75 +3723,46,30,2.5,111.05,1.7,63.75 +3724,46,30,2.5,111.05,1.7,63.75 +3725,46,30,2.5,111.05,1.7,63.75 +3726,46,30,2.5,111.05,1.7,63.75 +3727,46,30,2.5,111.05,1.7,63.75 +3728,46,30,2.5,111.05,1.7,63.75 +3729,46,30,2.5,111.05,1.7,63.75 +3730,46,30,2.5,111.05,1.7,63.75 +3731,46,30,2.5,111.05,1.7,63.75 +3732,46,30,2.5,111.05,1.7,63.75 +3733,46,30,2.5,111.05,1.7,63.75 +3734,46,30,2.5,111.05,1.7,63.75 +3735,46,30,2.5,111.05,1.7,63.75 +3736,46,30,2.5,111.05,1.7,63.75 +3737,46,30,2.5,111.05,1.7,63.75 +3738,46,30,2.5,111.05,1.7,63.75 +3739,46,30,2.5,111.05,1.7,63.75 +3740,46,30,2.5,111.05,1.7,63.75 +3741,46,30,2.5,111.05,1.7,63.75 +3742,46,30,2.5,111.05,1.7,63.75 +3743,46,30,2.5,111.05,1.7,63.75 +3744,46,30,2.5,111.05,1.7,63.75 +3745,46,30,2.5,111.05,1.7,63.75 +3746,46,30,2.5,111.05,1.7,63.75 +3747,46,30,2.5,111.05,1.7,63.75 +3748,46,30,2.5,111.05,1.7,63.75 +3749,46,30,2.5,111.05,1.7,63.75 +3750,46,30,2.5,111.05,1.7,63.75 +3751,46,30,2.5,111.05,1.7,63.75 +3752,46,30,2.5,111.05,1.7,63.75 +3753,46,30,2.5,111.05,1.7,63.75 +3754,46,30,2.5,111.05,1.7,63.75 +3755,46,30,2.5,111.05,1.7,63.75 +3756,46,30,2.5,111.05,1.7,63.75 +3757,46,30,2.5,111.05,1.7,63.75 +3758,46,30,2.5,111.05,1.7,63.75 +3759,46,30,2.5,111.05,1.7,63.75 +3760,46,30,2.5,111.05,1.7,63.75 +3761,46,30,2.5,111.05,1.7,63.75 +3762,46,30,2.5,111.05,1.7,63.75 +3763,46,30,2.5,111.05,1.7,63.75 +3764,46,30,2.5,111.05,1.7,63.75 +3765,46,30,2.5,111.05,1.7,63.75 +3766,46,30,2.5,111.05,1.7,63.75 +3767,46,30,2.5,111.05,1.7,63.75 +3768,46,30,2.5,111.05,1.7,63.75 +3769,46,30,2.5,111.05,1.7,63.75 +3770,46,30,2.5,111.05,1.7,63.75 +3771,46,30,2.5,111.05,1.7,63.75 +3772,46,30,2.5,111.05,1.7,63.75 +3773,46,30,2.5,111.05,1.7,63.75 +3774,46,30,2.5,111.05,1.7,63.75 +3775,46,30,2.5,111.05,1.7,63.75 +3776,46,30,2.5,111.05,1.7,63.75 +3777,46,30,2.5,111.05,1.7,63.75 +3778,46,30,2.5,111.05,1.7,63.75 +3779,46,30,2.5,111.05,1.7,63.75 +3780,46,30,2.5,111.05,1.7,63.75 +3781,46,30,2.5,111.05,1.7,63.75 +3782,46,30,2.5,111.05,1.7,63.75 +3783,46,30,2.5,111.05,1.7,63.75 +3784,46,30,2.5,111.05,1.7,63.75 +3785,46,30,2.5,111.05,1.7,63.75 +3786,46,30,2.5,111.05,1.7,63.75 +3787,46,30,2.5,111.05,1.7,63.75 +3788,46,30,2.5,111.05,1.7,63.75 +3789,46,30,2.5,111.05,1.7,63.75 +3790,46,30,2.5,111.05,1.7,63.75 +3791,46,30,2.5,111.05,1.7,63.75 +3792,46,30,2.5,111.05,1.7,63.75 +3793,46,30,2.5,111.05,1.7,63.75 +3794,46,30,2.5,111.05,1.7,63.75 +3795,46,30,2.5,111.05,1.7,63.75 +3796,46,30,2.5,111.05,1.7,63.75 +3797,46,30,2.5,111.05,1.7,63.75 +3798,46,30,2.5,111.05,1.7,63.75 +3799,46,30,2.5,111.05,1.7,63.75 +3800,46,30,2.5,111.05,1.7,63.75 +3801,46,30,2.5,111.05,1.7,63.75 +3802,46,30,2.5,111.05,1.7,63.75 +3803,46,30,2.5,111.05,1.7,63.75 +3804,46,30,2.5,111.05,1.7,63.75 +3805,46,30,2.5,111.05,1.7,63.75 +3806,46,30,2.5,111.05,1.7,63.75 +3807,46,30,2.5,111.05,1.7,63.75 +3808,46,30,2.5,111.05,1.7,63.75 +3809,46,30,2.5,111.05,1.7,63.75 +3810,46,30,2.5,111.05,1.7,63.75 +3811,46,30,2.5,111.05,1.7,63.75 +3812,46,30,2.5,111.05,1.7,63.75 +3813,46,30,2.5,111.05,1.7,63.75 +3814,46,30,2.5,111.05,1.7,63.75 +3815,46,30,2.5,111.05,1.7,63.75 +3816,46,30,2.5,111.05,1.7,63.75 +3817,46,30,2.5,111.05,1.7,63.75 +3818,46,30,2.5,111.05,1.7,63.75 +3819,46,30,2.5,111.05,1.7,63.75 +3820,46,30,2.5,111.05,1.7,63.75 +3821,46,30,2.5,111.05,1.7,63.75 +3822,46,30,2.5,111.05,1.7,63.75 +3823,46,30,2.5,111.05,1.7,63.75 +3824,46,30,2.5,111.05,1.7,63.75 +3825,46,30,2.5,111.05,1.7,63.75 +3826,46,30,2.5,111.05,1.7,63.75 +3827,46,30,2.5,111.05,1.7,63.75 +3828,46,30,2.5,111.05,1.7,63.75 +3829,46,30,2.5,111.05,1.7,63.75 +3830,46,30,2.5,111.05,1.7,63.75 +3831,46,30,2.5,111.05,1.7,63.75 +3832,46,30,2.5,111.05,1.7,63.75 +3833,46,30,2.5,111.05,1.7,63.75 +3834,46,30,2.5,111.05,1.7,63.75 +3835,46,30,2.5,111.05,1.7,63.75 +3836,46,30,2.5,111.05,1.7,63.75 +3837,46,30,2.5,111.05,1.7,63.75 +3838,46,30,2.5,111.05,1.7,63.75 +3839,46,30,2.5,111.05,1.7,63.75 +3840,46,30,2.5,111.05,1.7,63.75 +3841,46,30,2.5,111.05,1.7,63.75 +3842,46,30,2.5,111.05,1.7,63.75 +3843,46,30,2.5,111.05,1.7,63.75 +3844,46,30,2.5,111.05,1.7,63.75 +3845,46,30,2.5,111.05,1.7,63.75 +3846,46,30,2.5,111.05,1.7,63.75 +3847,46,30,2.5,111.05,1.7,63.75 +3848,46,30,2.5,111.05,1.7,63.75 +3849,46,30,2.5,111.05,1.7,63.75 +3850,46,30,2.5,111.05,1.7,63.75 +3851,46,30,2.5,111.05,1.7,63.75 +3852,46,30,2.5,111.05,1.7,63.75 +3853,46,30,2.5,111.05,1.7,63.75 +3854,46,30,2.5,111.05,1.7,63.75 +3855,46,30,2.5,111.05,1.7,63.75 +3856,46,30,2.5,111.05,1.7,63.75 +3857,46,30,2.5,111.05,1.7,63.75 +3858,46,30,2.5,111.05,1.7,63.75 +3859,46,30,2.5,111.05,1.7,63.75 +3860,46,30,2.5,111.05,1.7,63.75 +3861,46,30,2.5,111.05,1.7,63.75 +3862,46,30,2.5,111.05,1.7,63.75 +3863,46,30,2.5,111.05,1.7,63.75 +3864,46,30,2.5,111.05,1.7,63.75 +3865,46,30,2.5,111.05,1.7,63.75 +3866,46,30,2.5,111.05,1.7,63.75 +3867,46,30,2.5,111.05,1.7,63.75 +3868,46,30,2.5,111.05,1.7,63.75 +3869,46,30,2.5,111.05,1.7,63.75 +3870,46,30,2.5,111.05,1.7,63.75 +3871,46,30,2.5,111.05,1.7,63.75 +3872,46,30,2.5,111.05,1.7,63.75 +3873,46,30,2.5,111.05,1.7,63.75 +3874,46,30,2.5,111.05,1.7,63.75 +3875,46,30,2.5,111.05,1.7,63.75 +3876,46,30,2.5,111.05,1.7,63.75 +3877,46,30,2.5,111.05,1.7,63.75 +3878,46,30,2.5,111.05,1.7,63.75 +3879,46,30,2.5,111.05,1.7,63.75 +3880,46,30,2.5,111.05,1.7,63.75 +3881,46,30,2.5,111.05,1.7,63.75 +3882,46,30,2.5,111.05,1.7,63.75 +3883,46,30,2.5,111.05,1.7,63.75 +3884,46,30,2.5,111.05,1.7,63.75 +3885,46,30,2.5,111.05,1.7,63.75 +3886,46,30,2.5,111.05,1.7,63.75 +3887,46,30,2.5,111.05,1.7,63.75 +3888,46,30,2.5,111.05,1.7,63.75 +3889,46,30,2.5,111.05,1.7,63.75 +3890,46,30,2.5,111.05,1.7,63.75 +3891,46,30,2.5,111.05,1.7,63.75 +3892,46,30,2.5,111.05,1.7,63.75 +3893,46,30,2.5,111.05,1.7,63.75 +3894,46,30,2.5,111.05,1.7,63.75 +3895,46,30,2.5,111.05,1.7,63.75 +3896,46,30,2.5,111.05,1.7,63.75 +3897,46,30,2.5,111.05,1.7,63.75 +3898,46,30,2.5,111.05,1.7,63.75 +3899,46,30,2.5,111.05,1.7,63.75 +3900,46,30,2.5,111.05,1.7,63.75 +3901,46,30,2.5,111.05,1.7,63.75 +3902,46,30,2.5,111.05,1.7,63.75 +3903,46,30,2.5,111.05,1.7,63.75 +3904,46,30,2.5,111.05,1.7,63.75 +3905,46,30,2.5,111.05,1.7,63.75 +3906,46,30,2.5,111.05,1.7,63.75 +3907,46,30,2.5,111.05,1.7,63.75 +3908,46,30,2.5,111.05,1.7,63.75 +3909,46,30,2.5,111.05,1.7,63.75 +3910,46,30,2.5,111.05,1.7,63.75 +3911,46,30,2.5,111.05,1.7,63.75 +3912,46,30,2.5,111.05,1.7,63.75 +3913,46,30,2.5,111.05,1.7,63.75 +3914,46,30,2.5,111.05,1.7,63.75 +3915,46,30,2.5,111.05,1.7,63.75 +3916,46,30,2.5,111.05,1.7,63.75 +3917,46,30,2.5,111.05,1.7,63.75 +3918,46,30,2.5,111.05,1.7,63.75 +3919,46,30,2.5,111.05,1.7,63.75 +3920,46,30,2.5,111.05,1.7,63.75 +3921,46,30,2.5,111.05,1.7,63.75 +3922,46,30,2.5,111.05,1.7,63.75 +3923,46,30,2.5,111.05,1.7,63.75 +3924,46,30,2.5,111.05,1.7,63.75 +3925,46,30,2.5,111.05,1.7,63.75 +3926,46,30,2.5,111.05,1.7,63.75 +3927,46,30,2.5,111.05,1.7,63.75 +3928,46,30,2.5,111.05,1.7,63.75 +3929,46,30,2.5,111.05,1.7,63.75 +3930,46,30,2.5,111.05,1.7,63.75 +3931,46,30,2.5,111.05,1.7,63.75 +3932,46,30,2.5,111.05,1.7,63.75 +3933,46,30,2.5,111.05,1.7,63.75 +3934,46,30,2.5,111.05,1.7,63.75 +3935,46,30,2.5,111.05,1.7,63.75 +3936,46,30,2.5,111.05,1.7,63.75 +3937,46,30,2.5,111.05,1.7,63.75 +3938,46,30,2.5,111.05,1.7,63.75 +3939,46,30,2.5,111.05,1.7,63.75 +3940,46,30,2.5,111.05,1.7,63.75 +3941,46,30,2.5,111.05,1.7,63.75 +3942,46,30,2.5,111.05,1.7,63.75 +3943,46,30,2.5,111.05,1.7,63.75 +3944,46,30,2.5,111.05,1.7,63.75 +3945,46,30,2.5,111.05,1.7,63.75 +3946,46,30,2.5,111.05,1.7,63.75 +3947,46,30,2.5,111.05,1.7,63.75 +3948,46,30,2.5,111.05,1.7,63.75 +3949,46,30,2.5,111.05,1.7,63.75 +3950,46,30,2.5,111.05,1.7,63.75 +3951,46,30,2.5,111.05,1.7,63.75 +3952,46,30,2.5,111.05,1.7,63.75 +3953,46,30,2.5,111.05,1.7,63.75 +3954,46,30,2.5,111.05,1.7,63.75 +3955,46,30,2.5,111.05,1.7,63.75 +3956,46,30,2.5,111.05,1.7,63.75 +3957,46,30,2.5,111.05,1.7,63.75 +3958,46,30,2.5,111.05,1.7,63.75 +3959,46,30,2.5,111.05,1.7,63.75 +3960,46,30,2.5,111.05,1.7,63.75 +3961,46,30,2.5,111.05,1.7,63.75 +3962,46,30,2.5,111.05,1.7,63.75 +3963,46,30,2.5,111.05,1.7,63.75 +3964,46,30,2.5,111.05,1.7,63.75 +3965,46,30,2.5,111.05,1.7,63.75 +3966,46,30,2.5,111.05,1.7,63.75 +3967,46,30,2.5,111.05,1.7,63.75 +3968,46,30,2.5,111.05,1.7,63.75 +3969,46,30,2.5,111.05,1.7,63.75 +3970,46,30,2.5,111.05,1.7,63.75 +3971,46,30,2.5,111.05,1.7,63.75 +3972,46,30,2.5,111.05,1.7,63.75 +3973,46,30,2.5,111.05,1.7,63.75 +3974,46,30,2.5,111.05,1.7,63.75 +3975,46,30,2.5,111.05,1.7,63.75 +3976,46,30,2.5,111.05,1.7,63.75 +3977,46,30,2.5,111.05,1.7,63.75 +3978,46,30,2.5,111.05,1.7,63.75 +3979,46,30,2.5,111.05,1.7,63.75 +3980,46,30,2.5,111.05,1.7,63.75 +3981,46,30,2.5,111.05,1.7,63.75 +3982,46,30,2.5,111.05,1.7,63.75 +3983,46,30,2.5,111.05,1.7,63.75 +3984,46,30,2.5,111.05,1.7,63.75 +3985,46,30,2.5,111.05,1.7,63.75 +3986,46,30,2.5,111.05,1.7,63.75 +3987,46,30,2.5,111.05,1.7,63.75 +3988,46,30,2.5,111.05,1.7,63.75 +3989,46,30,2.5,111.05,1.7,63.75 +3990,46,30,2.5,111.05,1.7,63.75 +3991,46,30,2.5,111.05,1.7,63.75 +3992,46,30,2.5,111.05,1.7,63.75 +3993,46,30,2.5,111.05,1.7,63.75 +3994,46,30,2.5,111.05,1.7,63.75 +3995,46,30,2.5,111.05,1.7,63.75 +3996,46,30,2.5,111.05,1.7,63.75 +3997,46,30,2.5,111.05,1.7,63.75 +3998,46,30,2.5,111.05,1.7,63.75 +3999,46,30,2.5,111.05,1.7,63.75 +4000,46,30,2.5,111.05,1.7,63.75 +4001,46,30,2.5,111.05,1.7,63.75 +4002,46,30,2.5,111.05,1.7,63.75 +4003,46,30,2.5,111.05,1.7,63.75 +4004,46,30,2.5,111.05,1.7,63.75 +4005,46,30,2.5,111.05,1.7,63.75 +4006,46,30,2.5,111.05,1.7,63.75 +4007,46,30,2.5,111.05,1.7,63.75 +4008,46,30,2.5,111.05,1.7,63.75 +4009,46,30,2.5,111.05,1.7,63.75 +4010,46,30,2.5,111.05,1.7,63.75 +4011,46,30,2.5,111.05,1.7,63.75 +4012,46,30,2.5,111.05,1.7,63.75 +4013,46,30,2.5,111.05,1.7,63.75 +4014,46,30,2.5,111.05,1.7,63.75 +4015,46,30,2.5,111.05,1.7,63.75 +4016,46,30,2.5,111.05,1.7,63.75 +4017,46,30,2.5,111.05,1.7,63.75 +4018,46,30,2.5,111.05,1.7,63.75 +4019,46,30,2.5,111.05,1.7,63.75 +4020,46,30,2.5,111.05,1.7,63.75 +4021,46,30,2.5,111.05,1.7,63.75 +4022,46,30,2.5,111.05,1.7,63.75 +4023,46,30,2.5,111.05,1.7,63.75 +4024,46,30,2.5,111.05,1.7,63.75 +4025,46,30,2.5,111.05,1.7,63.75 +4026,46,30,2.5,111.05,1.7,63.75 +4027,46,30,2.5,111.05,1.7,63.75 +4028,46,30,2.5,111.05,1.7,63.75 +4029,46,30,2.5,111.05,1.7,63.75 +4030,46,30,2.5,111.05,1.7,63.75 +4031,46,30,2.5,111.05,1.7,63.75 +4032,46,30,2.5,111.05,1.7,63.75 +4033,46,30,2.5,111.05,1.7,63.75 +4034,46,30,2.5,111.05,1.7,63.75 +4035,46,30,2.5,111.05,1.7,63.75 +4036,46,30,2.5,111.05,1.7,63.75 +4037,46,30,2.5,111.05,1.7,63.75 +4038,46,30,2.5,111.05,1.7,63.75 +4039,46,30,2.5,111.05,1.7,63.75 +4040,46,30,2.5,111.05,1.7,63.75 +4041,46,30,2.5,111.05,1.7,63.75 +4042,46,30,2.5,111.05,1.7,63.75 +4043,46,30,2.5,111.05,1.7,63.75 +4044,46,30,2.5,111.05,1.7,63.75 +4045,46,30,2.5,111.05,1.7,63.75 +4046,46,30,2.5,111.05,1.7,63.75 +4047,46,30,2.5,111.05,1.7,63.75 +4048,46,30,2.5,111.05,1.7,63.75 +4049,46,30,2.5,111.05,1.7,63.75 +4050,46,30,2.5,111.05,1.7,63.75 +4051,46,30,2.5,111.05,1.7,63.75 +4052,46,30,2.5,111.05,1.7,63.75 +4053,46,30,2.5,111.05,1.7,63.75 +4054,46,30,2.5,111.05,1.7,63.75 +4055,46,30,2.5,111.05,1.7,63.75 +4056,46,30,2.5,111.05,1.7,63.75 +4057,46,30,2.5,111.05,1.7,63.75 +4058,46,30,2.5,111.05,1.7,63.75 +4059,46,30,2.5,111.05,1.7,63.75 +4060,46,30,2.5,111.05,1.7,63.75 +4061,46,30,2.5,111.05,1.7,63.75 +4062,46,30,2.5,111.05,1.7,63.75 +4063,46,30,2.5,111.05,1.7,63.75 +4064,46,30,2.5,111.05,1.7,63.75 +4065,46,30,2.5,111.05,1.7,63.75 +4066,46,30,2.5,111.05,1.7,63.75 +4067,46,30,2.5,111.05,1.7,63.75 +4068,46,30,2.5,111.05,1.7,63.75 +4069,46,30,2.5,111.05,1.7,63.75 +4070,46,30,2.5,111.05,1.7,63.75 +4071,46,30,2.5,111.05,1.7,63.75 +4072,46,30,2.5,111.05,1.7,63.75 +4073,46,30,2.5,111.05,1.7,63.75 +4074,46,30,2.5,111.05,1.7,63.75 +4075,46,30,2.5,111.05,1.7,63.75 +4076,46,30,2.5,111.05,1.7,63.75 +4077,46,30,2.5,111.05,1.7,63.75 +4078,46,30,2.5,111.05,1.7,63.75 +4079,46,30,2.5,111.05,1.7,63.75 +4080,46,30,2.5,111.05,1.7,63.75 +4081,46,30,2.5,111.05,1.7,63.75 +4082,46,30,2.5,111.05,1.7,63.75 +4083,46,30,2.5,111.05,1.7,63.75 +4084,46,30,2.5,111.05,1.7,63.75 +4085,46,30,2.5,111.05,1.7,63.75 +4086,46,30,2.5,111.05,1.7,63.75 +4087,46,30,2.5,111.05,1.7,63.75 +4088,46,30,2.5,111.05,1.7,63.75 +4089,46,30,2.5,111.05,1.7,63.75 +4090,46,30,2.5,111.05,1.7,63.75 +4091,46,30,2.5,111.05,1.7,63.75 +4092,46,30,2.5,111.05,1.7,63.75 +4093,46,30,2.5,111.05,1.7,63.75 +4094,46,30,2.5,111.05,1.7,63.75 +4095,46,30,2.5,111.05,1.7,63.75 +4096,46,30,2.5,111.05,1.7,63.75 +4097,46,30,2.5,111.05,1.7,63.75 +4098,46,30,2.5,111.05,1.7,63.75 +4099,46,30,2.5,111.05,1.7,63.75 +4100,46,30,2.5,111.05,1.7,63.75 +4101,46,30,2.5,111.05,1.7,63.75 +4102,46,30,2.5,111.05,1.7,63.75 +4103,46,30,2.5,111.05,1.7,63.75 +4104,46,30,2.5,111.05,1.7,63.75 +4105,46,30,2.5,111.05,1.7,63.75 +4106,46,30,2.5,111.05,1.7,63.75 +4107,46,30,2.5,111.05,1.7,63.75 +4108,46,30,2.5,111.05,1.7,63.75 +4109,46,30,2.5,111.05,1.7,63.75 +4110,46,30,2.5,111.05,1.7,63.75 +4111,46,30,2.5,111.05,1.7,63.75 +4112,46,30,2.5,111.05,1.7,63.75 +4113,46,30,2.5,111.05,1.7,63.75 +4114,46,30,2.5,111.05,1.7,63.75 +4115,46,30,2.5,111.05,1.7,63.75 +4116,46,30,2.5,111.05,1.7,63.75 +4117,46,30,2.5,111.05,1.7,63.75 +4118,46,30,2.5,111.05,1.7,63.75 +4119,46,30,2.5,111.05,1.7,63.75 +4120,46,30,2.5,111.05,1.7,63.75 +4121,46,30,2.5,111.05,1.7,63.75 +4122,46,30,2.5,111.05,1.7,63.75 +4123,46,30,2.5,111.05,1.7,63.75 +4124,46,30,2.5,111.05,1.7,63.75 +4125,46,30,2.5,111.05,1.7,63.75 +4126,46,30,2.5,111.05,1.7,63.75 +4127,46,30,2.5,111.05,1.7,63.75 +4128,46,30,2.5,111.05,1.7,63.75 +4129,46,30,2.5,111.05,1.7,63.75 +4130,46,30,2.5,111.05,1.7,63.75 +4131,46,30,2.5,111.05,1.7,63.75 +4132,46,30,2.5,111.05,1.7,63.75 +4133,46,30,2.5,111.05,1.7,63.75 +4134,46,30,2.5,111.05,1.7,63.75 +4135,46,30,2.5,111.05,1.7,63.75 +4136,46,30,2.5,111.05,1.7,63.75 +4137,46,30,2.5,111.05,1.7,63.75 +4138,46,30,2.5,111.05,1.7,63.75 +4139,46,30,2.5,111.05,1.7,63.75 +4140,46,30,2.5,111.05,1.7,63.75 +4141,46,30,2.5,111.05,1.7,63.75 +4142,46,30,2.5,111.05,1.7,63.75 +4143,46,30,2.5,111.05,1.7,63.75 +4144,46,30,2.5,111.05,1.7,63.75 +4145,46,30,2.5,111.05,1.7,63.75 +4146,46,30,2.5,111.05,1.7,63.75 +4147,46,30,2.5,111.05,1.7,63.75 +4148,46,30,2.5,111.05,1.7,63.75 +4149,46,30,2.5,111.05,1.7,63.75 +4150,46,30,2.5,111.05,1.7,63.75 +4151,46,30,2.5,111.05,1.7,63.75 +4152,46,30,2.5,111.05,1.7,63.75 +4153,46,30,2.5,111.05,1.7,63.75 +4154,46,30,2.5,111.05,1.7,63.75 +4155,46,30,2.5,111.05,1.7,63.75 +4156,46,30,2.5,111.05,1.7,63.75 +4157,46,30,2.5,111.05,1.7,63.75 +4158,46,30,2.5,111.05,1.7,63.75 +4159,46,30,2.5,111.05,1.7,63.75 +4160,46,30,2.5,111.05,1.7,63.75 +4161,46,30,2.5,111.05,1.7,63.75 +4162,46,30,2.5,111.05,1.7,63.75 +4163,46,30,2.5,111.05,1.7,63.75 +4164,46,30,2.5,111.05,1.7,63.75 +4165,46,30,2.5,111.05,1.7,63.75 +4166,46,30,2.5,111.05,1.7,63.75 +4167,46,30,2.5,111.05,1.7,63.75 +4168,46,30,2.5,111.05,1.7,63.75 +4169,46,30,2.5,111.05,1.7,63.75 +4170,46,30,2.5,111.05,1.7,63.75 +4171,46,30,2.5,111.05,1.7,63.75 +4172,46,30,2.5,111.05,1.7,63.75 +4173,46,30,2.5,111.05,1.7,63.75 +4174,46,30,2.5,111.05,1.7,63.75 +4175,46,30,2.5,111.05,1.7,63.75 +4176,46,30,2.5,111.05,1.7,63.75 +4177,46,30,2.5,111.05,1.7,63.75 +4178,46,30,2.5,111.05,1.7,63.75 +4179,46,30,2.5,111.05,1.7,63.75 +4180,46,30,2.5,111.05,1.7,63.75 +4181,46,30,2.5,111.05,1.7,63.75 +4182,46,30,2.5,111.05,1.7,63.75 +4183,46,30,2.5,111.05,1.7,63.75 +4184,46,30,2.5,111.05,1.7,63.75 +4185,46,30,2.5,111.05,1.7,63.75 +4186,46,30,2.5,111.05,1.7,63.75 +4187,46,30,2.5,111.05,1.7,63.75 +4188,46,30,2.5,111.05,1.7,63.75 +4189,46,30,2.5,111.05,1.7,63.75 +4190,46,30,2.5,111.05,1.7,63.75 +4191,46,30,2.5,111.05,1.7,63.75 +4192,46,30,2.5,111.05,1.7,63.75 +4193,46,30,2.5,111.05,1.7,63.75 +4194,46,30,2.5,111.05,1.7,63.75 +4195,46,30,2.5,111.05,1.7,63.75 +4196,46,30,2.5,111.05,1.7,63.75 +4197,46,30,2.5,111.05,1.7,63.75 +4198,46,30,2.5,111.05,1.7,63.75 +4199,46,30,2.5,111.05,1.7,63.75 +4200,46,30,2.5,111.05,1.7,63.75 +4201,46,30,2.5,111.05,1.7,63.75 +4202,46,30,2.5,111.05,1.7,63.75 +4203,46,30,2.5,111.05,1.7,63.75 +4204,46,30,2.5,111.05,1.7,63.75 +4205,46,30,2.5,111.05,1.7,63.75 +4206,46,30,2.5,111.05,1.7,63.75 +4207,46,30,2.5,111.05,1.7,63.75 +4208,46,30,2.5,111.05,1.7,63.75 +4209,46,30,2.5,111.05,1.7,63.75 +4210,46,30,2.5,111.05,1.7,63.75 +4211,46,30,2.5,111.05,1.7,63.75 +4212,46,30,2.5,111.05,1.7,63.75 +4213,46,30,2.5,111.05,1.7,63.75 +4214,46,30,2.5,111.05,1.7,63.75 +4215,46,30,2.5,111.05,1.7,63.75 +4216,46,30,2.5,111.05,1.7,63.75 +4217,46,30,2.5,111.05,1.7,63.75 +4218,46,30,2.5,111.05,1.7,63.75 +4219,46,30,2.5,111.05,1.7,63.75 +4220,46,30,2.5,111.05,1.7,63.75 +4221,46,30,2.5,111.05,1.7,63.75 +4222,46,30,2.5,111.05,1.7,63.75 +4223,46,30,2.5,111.05,1.7,63.75 +4224,46,30,2.5,111.05,1.7,63.75 +4225,46,30,2.5,111.05,1.7,63.75 +4226,46,30,2.5,111.05,1.7,63.75 +4227,46,30,2.5,111.05,1.7,63.75 +4228,46,30,2.5,111.05,1.7,63.75 +4229,46,30,2.5,111.05,1.7,63.75 +4230,46,30,2.5,111.05,1.7,63.75 +4231,46,30,2.5,111.05,1.7,63.75 +4232,46,30,2.5,111.05,1.7,63.75 +4233,46,30,2.5,111.05,1.7,63.75 +4234,46,30,2.5,111.05,1.7,63.75 +4235,46,30,2.5,111.05,1.7,63.75 +4236,46,30,2.5,111.05,1.7,63.75 +4237,46,30,2.5,111.05,1.7,63.75 +4238,46,30,2.5,111.05,1.7,63.75 +4239,46,30,2.5,111.05,1.7,63.75 +4240,46,30,2.5,111.05,1.7,63.75 +4241,46,30,2.5,111.05,1.7,63.75 +4242,46,30,2.5,111.05,1.7,63.75 +4243,46,30,2.5,111.05,1.7,63.75 +4244,46,30,2.5,111.05,1.7,63.75 +4245,46,30,2.5,111.05,1.7,63.75 +4246,46,30,2.5,111.05,1.7,63.75 +4247,46,30,2.5,111.05,1.7,63.75 +4248,46,30,2.5,111.05,1.7,63.75 +4249,46,30,2.5,111.05,1.7,63.75 +4250,46,30,2.5,111.05,1.7,63.75 +4251,46,30,2.5,111.05,1.7,63.75 +4252,46,30,2.5,111.05,1.7,63.75 +4253,46,30,2.5,111.05,1.7,63.75 +4254,46,30,2.5,111.05,1.7,63.75 +4255,46,30,2.5,111.05,1.7,63.75 +4256,46,30,2.5,111.05,1.7,63.75 +4257,46,30,2.5,111.05,1.7,63.75 +4258,46,30,2.5,111.05,1.7,63.75 +4259,46,30,2.5,111.05,1.7,63.75 +4260,46,30,2.5,111.05,1.7,63.75 +4261,46,30,2.5,111.05,1.7,63.75 +4262,46,30,2.5,111.05,1.7,63.75 +4263,46,30,2.5,111.05,1.7,63.75 +4264,46,30,2.5,111.05,1.7,63.75 +4265,46,30,2.5,111.05,1.7,63.75 +4266,46,30,2.5,111.05,1.7,63.75 +4267,46,30,2.5,111.05,1.7,63.75 +4268,46,30,2.5,111.05,1.7,63.75 +4269,46,30,2.5,111.05,1.7,63.75 +4270,46,30,2.5,111.05,1.7,63.75 +4271,46,30,2.5,111.05,1.7,63.75 +4272,46,30,2.5,111.05,1.7,63.75 +4273,46,30,2.5,111.05,1.7,63.75 +4274,46,30,2.5,111.05,1.7,63.75 +4275,46,30,2.5,111.05,1.7,63.75 +4276,46,30,2.5,111.05,1.7,63.75 +4277,46,30,2.5,111.05,1.7,63.75 +4278,46,30,2.5,111.05,1.7,63.75 +4279,46,30,2.5,111.05,1.7,63.75 +4280,46,30,2.5,111.05,1.7,63.75 +4281,46,30,2.5,111.05,1.7,63.75 +4282,46,30,2.5,111.05,1.7,63.75 +4283,46,30,2.5,111.05,1.7,63.75 +4284,46,30,2.5,111.05,1.7,63.75 +4285,46,30,2.5,111.05,1.7,63.75 +4286,46,30,2.5,111.05,1.7,63.75 +4287,46,30,2.5,111.05,1.7,63.75 +4288,46,30,2.5,111.05,1.7,63.75 +4289,46,30,2.5,111.05,1.7,63.75 +4290,46,30,2.5,111.05,1.7,63.75 +4291,46,30,2.5,111.05,1.7,63.75 +4292,46,30,2.5,111.05,1.7,63.75 +4293,46,30,2.5,111.05,1.7,63.75 +4294,46,30,2.5,111.05,1.7,63.75 +4295,46,30,2.5,111.05,1.7,63.75 +4296,46,30,2.5,111.05,1.7,63.75 +4297,46,30,2.5,111.05,1.7,63.75 +4298,46,30,2.5,111.05,1.7,63.75 +4299,46,30,2.5,111.05,1.7,63.75 +4300,46,30,2.5,111.05,1.7,63.75 +4301,46,30,2.5,111.05,1.7,63.75 +4302,46,30,2.5,111.05,1.7,63.75 +4303,46,30,2.5,111.05,1.7,63.75 +4304,46,30,2.5,111.05,1.7,63.75 +4305,46,30,2.5,111.05,1.7,63.75 +4306,46,30,2.5,111.05,1.7,63.75 +4307,46,30,2.5,111.05,1.7,63.75 +4308,46,30,2.5,111.05,1.7,63.75 +4309,46,30,2.5,111.05,1.7,63.75 +4310,46,30,2.5,111.05,1.7,63.75 +4311,46,30,2.5,111.05,1.7,63.75 +4312,46,30,2.5,111.05,1.7,63.75 +4313,46,30,2.5,111.05,1.7,63.75 +4314,46,30,2.5,111.05,1.7,63.75 +4315,46,30,2.5,111.05,1.7,63.75 +4316,46,30,2.5,111.05,1.7,63.75 +4317,46,30,2.5,111.05,1.7,63.75 +4318,46,30,2.5,111.05,1.7,63.75 +4319,46,30,2.5,111.05,1.7,63.75 +4320,46,30,2.5,111.05,1.7,63.75 +4321,46,30,2.5,111.05,1.7,63.75 +4322,46,30,2.5,111.05,1.7,63.75 +4323,46,30,2.5,111.05,1.7,63.75 +4324,46,30,2.5,111.05,1.7,63.75 +4325,46,30,2.5,111.05,1.7,63.75 +4326,46,30,2.5,111.05,1.7,63.75 +4327,46,30,2.5,111.05,1.7,63.75 +4328,46,30,2.5,111.05,1.7,63.75 +4329,46,30,2.5,111.05,1.7,63.75 +4330,46,30,2.5,111.05,1.7,63.75 +4331,46,30,2.5,111.05,1.7,63.75 +4332,46,30,2.5,111.05,1.7,63.75 +4333,46,30,2.5,111.05,1.7,63.75 +4334,46,30,2.5,111.05,1.7,63.75 +4335,46,30,2.5,111.05,1.7,63.75 +4336,46,30,2.5,111.05,1.7,63.75 +4337,46,30,2.5,111.05,1.7,63.75 +4338,46,30,2.5,111.05,1.7,63.75 +4339,46,30,2.5,111.05,1.7,63.75 +4340,46,30,2.5,111.05,1.7,63.75 +4341,46,30,2.5,111.05,1.7,63.75 +4342,46,30,2.5,111.05,1.7,63.75 +4343,46,30,2.5,111.05,1.7,63.75 +4344,46,30,2.5,111.05,1.7,63.75 +4345,46,30,2.5,111.05,1.7,63.75 +4346,46,30,2.5,111.05,1.7,63.75 +4347,46,30,2.5,111.05,1.7,63.75 +4348,46,30,2.5,111.05,1.7,63.75 +4349,46,30,2.5,111.05,1.7,63.75 +4350,46,30,2.5,111.05,1.7,63.75 +4351,46,30,2.5,111.05,1.7,63.75 +4352,46,30,2.5,111.05,1.7,63.75 +4353,46,30,2.5,111.05,1.7,63.75 +4354,46,30,2.5,111.05,1.7,63.75 +4355,46,30,2.5,111.05,1.7,63.75 +4356,46,30,2.5,111.05,1.7,63.75 +4357,46,30,2.5,111.05,1.7,63.75 +4358,46,30,2.5,111.05,1.7,63.75 +4359,46,30,2.5,111.05,1.7,63.75 +4360,46,30,2.5,111.05,1.7,63.75 +4361,46,30,2.5,111.05,1.7,63.75 +4362,46,30,2.5,111.05,1.7,63.75 +4363,46,30,2.5,111.05,1.7,63.75 +4364,46,30,2.5,111.05,1.7,63.75 +4365,46,30,2.5,111.05,1.7,63.75 +4366,46,30,2.5,111.05,1.7,63.75 +4367,46,30,2.5,111.05,1.7,63.75 +4368,46,30,2.5,111.05,1.7,63.75 +4369,46,30,2.5,111.05,1.7,63.75 +4370,46,30,2.5,111.05,1.7,63.75 +4371,46,30,2.5,111.05,1.7,63.75 +4372,46,30,2.5,111.05,1.7,63.75 +4373,46,30,2.5,111.05,1.7,63.75 +4374,46,30,2.5,111.05,1.7,63.75 +4375,46,30,2.5,111.05,1.7,63.75 +4376,46,30,2.5,111.05,1.7,63.75 +4377,46,30,2.5,111.05,1.7,63.75 +4378,46,30,2.5,111.05,1.7,63.75 +4379,46,30,2.5,111.05,1.7,63.75 +4380,46,30,2.5,111.05,1.7,63.75 +4381,46,30,2.5,111.05,1.7,63.75 +4382,46,30,2.5,111.05,1.7,63.75 +4383,46,30,2.5,111.05,1.7,63.75 +4384,46,30,2.5,111.05,1.7,63.75 +4385,46,30,2.5,111.05,1.7,63.75 +4386,46,30,2.5,111.05,1.7,63.75 +4387,46,30,2.5,111.05,1.7,63.75 +4388,46,30,2.5,111.05,1.7,63.75 +4389,46,30,2.5,111.05,1.7,63.75 +4390,46,30,2.5,111.05,1.7,63.75 +4391,46,30,2.5,111.05,1.7,63.75 +4392,46,30,2.5,111.05,1.7,63.75 +4393,46,30,2.5,111.05,1.7,63.75 +4394,46,30,2.5,111.05,1.7,63.75 +4395,46,30,2.5,111.05,1.7,63.75 +4396,46,30,2.5,111.05,1.7,63.75 +4397,46,30,2.5,111.05,1.7,63.75 +4398,46,30,2.5,111.05,1.7,63.75 +4399,46,30,2.5,111.05,1.7,63.75 +4400,46,30,2.5,111.05,1.7,63.75 +4401,46,30,2.5,111.05,1.7,63.75 +4402,46,30,2.5,111.05,1.7,63.75 +4403,46,30,2.5,111.05,1.7,63.75 +4404,46,30,2.5,111.05,1.7,63.75 +4405,46,30,2.5,111.05,1.7,63.75 +4406,46,30,2.5,111.05,1.7,63.75 +4407,46,30,2.5,111.05,1.7,63.75 +4408,46,30,2.5,111.05,1.7,63.75 +4409,46,30,2.5,111.05,1.7,63.75 +4410,46,30,2.5,111.05,1.7,63.75 +4411,46,30,2.5,111.05,1.7,63.75 +4412,46,30,2.5,111.05,1.7,63.75 +4413,46,30,2.5,111.05,1.7,63.75 +4414,46,30,2.5,111.05,1.7,63.75 +4415,46,30,2.5,111.05,1.7,63.75 +4416,46,30,2.5,111.05,1.7,63.75 +4417,46,30,2.5,111.05,1.7,63.75 +4418,46,30,2.5,111.05,1.7,63.75 +4419,46,30,2.5,111.05,1.7,63.75 +4420,46,30,2.5,111.05,1.7,63.75 +4421,46,30,2.5,111.05,1.7,63.75 +4422,46,30,2.5,111.05,1.7,63.75 +4423,46,30,2.5,111.05,1.7,63.75 +4424,46,30,2.5,111.05,1.7,63.75 +4425,46,30,2.5,111.05,1.7,63.75 +4426,46,30,2.5,111.05,1.7,63.75 +4427,46,30,2.5,111.05,1.7,63.75 +4428,46,30,2.5,111.05,1.7,63.75 +4429,46,30,2.5,111.05,1.7,63.75 +4430,46,30,2.5,111.05,1.7,63.75 +4431,46,30,2.5,111.05,1.7,63.75 +4432,46,30,2.5,111.05,1.7,63.75 +4433,46,30,2.5,111.05,1.7,63.75 +4434,46,30,2.5,111.05,1.7,63.75 +4435,46,30,2.5,111.05,1.7,63.75 +4436,46,30,2.5,111.05,1.7,63.75 +4437,46,30,2.5,111.05,1.7,63.75 +4438,46,30,2.5,111.05,1.7,63.75 +4439,46,30,2.5,111.05,1.7,63.75 +4440,46,30,2.5,111.05,1.7,63.75 +4441,46,30,2.5,111.05,1.7,63.75 +4442,46,30,2.5,111.05,1.7,63.75 +4443,46,30,2.5,111.05,1.7,63.75 +4444,46,30,2.5,111.05,1.7,63.75 +4445,46,30,2.5,111.05,1.7,63.75 +4446,46,30,2.5,111.05,1.7,63.75 +4447,46,30,2.5,111.05,1.7,63.75 +4448,46,30,2.5,111.05,1.7,63.75 +4449,46,30,2.5,111.05,1.7,63.75 +4450,46,30,2.5,111.05,1.7,63.75 +4451,46,30,2.5,111.05,1.7,63.75 +4452,46,30,2.5,111.05,1.7,63.75 +4453,46,30,2.5,111.05,1.7,63.75 +4454,46,30,2.5,111.05,1.7,63.75 +4455,46,30,2.5,111.05,1.7,63.75 +4456,46,30,2.5,111.05,1.7,63.75 +4457,46,30,2.5,111.05,1.7,63.75 +4458,46,30,2.5,111.05,1.7,63.75 +4459,46,30,2.5,111.05,1.7,63.75 +4460,46,30,2.5,111.05,1.7,63.75 +4461,46,30,2.5,111.05,1.7,63.75 +4462,46,30,2.5,111.05,1.7,63.75 +4463,46,30,2.5,111.05,1.7,63.75 +4464,46,30,2.5,111.05,1.7,63.75 +4465,46,30,2.5,111.05,1.7,63.75 +4466,46,30,2.5,111.05,1.7,63.75 +4467,46,30,2.5,111.05,1.7,63.75 +4468,46,30,2.5,111.05,1.7,63.75 +4469,46,30,2.5,111.05,1.7,63.75 +4470,46,30,2.5,111.05,1.7,63.75 +4471,46,30,2.5,111.05,1.7,63.75 +4472,46,30,2.5,111.05,1.7,63.75 +4473,46,30,2.5,111.05,1.7,63.75 +4474,46,30,2.5,111.05,1.7,63.75 +4475,46,30,2.5,111.05,1.7,63.75 +4476,46,30,2.5,111.05,1.7,63.75 +4477,46,30,2.5,111.05,1.7,63.75 +4478,46,30,2.5,111.05,1.7,63.75 +4479,46,30,2.5,111.05,1.7,63.75 +4480,46,30,2.5,111.05,1.7,63.75 +4481,46,30,2.5,111.05,1.7,63.75 +4482,46,30,2.5,111.05,1.7,63.75 +4483,46,30,2.5,111.05,1.7,63.75 +4484,46,30,2.5,111.05,1.7,63.75 +4485,46,30,2.5,111.05,1.7,63.75 +4486,46,30,2.5,111.05,1.7,63.75 +4487,46,30,2.5,111.05,1.7,63.75 +4488,46,30,2.5,111.05,1.7,63.75 +4489,46,30,2.5,111.05,1.7,63.75 +4490,46,30,2.5,111.05,1.7,63.75 +4491,46,30,2.5,111.05,1.7,63.75 +4492,46,30,2.5,111.05,1.7,63.75 +4493,46,30,2.5,111.05,1.7,63.75 +4494,46,30,2.5,111.05,1.7,63.75 +4495,46,30,2.5,111.05,1.7,63.75 +4496,46,30,2.5,111.05,1.7,63.75 +4497,46,30,2.5,111.05,1.7,63.75 +4498,46,30,2.5,111.05,1.7,63.75 +4499,46,30,2.5,111.05,1.7,63.75 +4500,46,30,2.5,111.05,1.7,63.75 +4501,46,30,2.5,111.05,1.7,63.75 +4502,46,30,2.5,111.05,1.7,63.75 +4503,46,30,2.5,111.05,1.7,63.75 +4504,46,30,2.5,111.05,1.7,63.75 +4505,46,30,2.5,111.05,1.7,63.75 +4506,46,30,2.5,111.05,1.7,63.75 +4507,46,30,2.5,111.05,1.7,63.75 +4508,46,30,2.5,111.05,1.7,63.75 +4509,46,30,2.5,111.05,1.7,63.75 +4510,46,30,2.5,111.05,1.7,63.75 +4511,46,30,2.5,111.05,1.7,63.75 +4512,46,30,2.5,111.05,1.7,63.75 +4513,46,30,2.5,111.05,1.7,63.75 +4514,46,30,2.5,111.05,1.7,63.75 +4515,46,30,2.5,111.05,1.7,63.75 +4516,46,30,2.5,111.05,1.7,63.75 +4517,46,30,2.5,111.05,1.7,63.75 +4518,46,30,2.5,111.05,1.7,63.75 +4519,46,30,2.5,111.05,1.7,63.75 +4520,46,30,2.5,111.05,1.7,63.75 +4521,46,30,2.5,111.05,1.7,63.75 +4522,46,30,2.5,111.05,1.7,63.75 +4523,46,30,2.5,111.05,1.7,63.75 +4524,46,30,2.5,111.05,1.7,63.75 +4525,46,30,2.5,111.05,1.7,63.75 +4526,46,30,2.5,111.05,1.7,63.75 +4527,46,30,2.5,111.05,1.7,63.75 +4528,46,30,2.5,111.05,1.7,63.75 +4529,46,30,2.5,111.05,1.7,63.75 +4530,46,30,2.5,111.05,1.7,63.75 +4531,46,30,2.5,111.05,1.7,63.75 +4532,46,30,2.5,111.05,1.7,63.75 +4533,46,30,2.5,111.05,1.7,63.75 +4534,46,30,2.5,111.05,1.7,63.75 +4535,46,30,2.5,111.05,1.7,63.75 +4536,46,30,2.5,111.05,1.7,63.75 +4537,46,30,2.5,111.05,1.7,63.75 +4538,46,30,2.5,111.05,1.7,63.75 +4539,46,30,2.5,111.05,1.7,63.75 +4540,46,30,2.5,111.05,1.7,63.75 +4541,46,30,2.5,111.05,1.7,63.75 +4542,46,30,2.5,111.05,1.7,63.75 +4543,46,30,2.5,111.05,1.7,63.75 +4544,46,30,2.5,111.05,1.7,63.75 +4545,46,30,2.5,111.05,1.7,63.75 +4546,46,30,2.5,111.05,1.7,63.75 +4547,46,30,2.5,111.05,1.7,63.75 +4548,46,30,2.5,111.05,1.7,63.75 +4549,46,30,2.5,111.05,1.7,63.75 +4550,46,30,2.5,111.05,1.7,63.75 +4551,46,30,2.5,111.05,1.7,63.75 +4552,46,30,2.5,111.05,1.7,63.75 +4553,46,30,2.5,111.05,1.7,63.75 +4554,46,30,2.5,111.05,1.7,63.75 +4555,46,30,2.5,111.05,1.7,63.75 +4556,46,30,2.5,111.05,1.7,63.75 +4557,46,30,2.5,111.05,1.7,63.75 +4558,46,30,2.5,111.05,1.7,63.75 +4559,46,30,2.5,111.05,1.7,63.75 +4560,46,30,2.5,111.05,1.7,63.75 +4561,46,30,2.5,111.05,1.7,63.75 +4562,46,30,2.5,111.05,1.7,63.75 +4563,46,30,2.5,111.05,1.7,63.75 +4564,46,30,2.5,111.05,1.7,63.75 +4565,46,30,2.5,111.05,1.7,63.75 +4566,46,30,2.5,111.05,1.7,63.75 +4567,46,30,2.5,111.05,1.7,63.75 +4568,46,30,2.5,111.05,1.7,63.75 +4569,46,30,2.5,111.05,1.7,63.75 +4570,46,30,2.5,111.05,1.7,63.75 +4571,46,30,2.5,111.05,1.7,63.75 +4572,46,30,2.5,111.05,1.7,63.75 +4573,46,30,2.5,111.05,1.7,63.75 +4574,46,30,2.5,111.05,1.7,63.75 +4575,46,30,2.5,111.05,1.7,63.75 +4576,46,30,2.5,111.05,1.7,63.75 +4577,46,30,2.5,111.05,1.7,63.75 +4578,46,30,2.5,111.05,1.7,63.75 +4579,46,30,2.5,111.05,1.7,63.75 +4580,46,30,2.5,111.05,1.7,63.75 +4581,46,30,2.5,111.05,1.7,63.75 +4582,46,30,2.5,111.05,1.7,63.75 +4583,46,30,2.5,111.05,1.7,63.75 +4584,46,30,2.5,111.05,1.7,63.75 +4585,46,30,2.5,111.05,1.7,63.75 +4586,46,30,2.5,111.05,1.7,63.75 +4587,46,30,2.5,111.05,1.7,63.75 +4588,46,30,2.5,111.05,1.7,63.75 +4589,46,30,2.5,111.05,1.7,63.75 +4590,46,30,2.5,111.05,1.7,63.75 +4591,46,30,2.5,111.05,1.7,63.75 +4592,46,30,2.5,111.05,1.7,63.75 +4593,46,30,2.5,111.05,1.7,63.75 +4594,46,30,2.5,111.05,1.7,63.75 +4595,46,30,2.5,111.05,1.7,63.75 +4596,46,30,2.5,111.05,1.7,63.75 +4597,46,30,2.5,111.05,1.7,63.75 +4598,46,30,2.5,111.05,1.7,63.75 +4599,46,30,2.5,111.05,1.7,63.75 +4600,46,30,2.5,111.05,1.7,63.75 +4601,46,30,2.5,111.05,1.7,63.75 +4602,46,30,2.5,111.05,1.7,63.75 +4603,46,30,2.5,111.05,1.7,63.75 +4604,46,30,2.5,111.05,1.7,63.75 +4605,46,30,2.5,111.05,1.7,63.75 +4606,46,30,2.5,111.05,1.7,63.75 +4607,46,30,2.5,111.05,1.7,63.75 +4608,46,30,2.5,111.05,1.7,63.75 +4609,46,30,2.5,111.05,1.7,63.75 +4610,46,30,2.5,111.05,1.7,63.75 +4611,46,30,2.5,111.05,1.7,63.75 +4612,46,30,2.5,111.05,1.7,63.75 +4613,46,30,2.5,111.05,1.7,63.75 +4614,46,30,2.5,111.05,1.7,63.75 +4615,46,30,2.5,111.05,1.7,63.75 +4616,46,30,2.5,111.05,1.7,63.75 +4617,46,30,2.5,111.05,1.7,63.75 +4618,46,30,2.5,111.05,1.7,63.75 +4619,46,30,2.5,111.05,1.7,63.75 +4620,46,30,2.5,111.05,1.7,63.75 +4621,46,30,2.5,111.05,1.7,63.75 +4622,46,30,2.5,111.05,1.7,63.75 +4623,46,30,2.5,111.05,1.7,63.75 +4624,46,30,2.5,111.05,1.7,63.75 +4625,46,30,2.5,111.05,1.7,63.75 +4626,46,30,2.5,111.05,1.7,63.75 +4627,46,30,2.5,111.05,1.7,63.75 +4628,46,30,2.5,111.05,1.7,63.75 +4629,46,30,2.5,111.05,1.7,63.75 +4630,46,30,2.5,111.05,1.7,63.75 +4631,46,30,2.5,111.05,1.7,63.75 +4632,46,30,2.5,111.05,1.7,63.75 +4633,46,30,2.5,111.05,1.7,63.75 +4634,46,30,2.5,111.05,1.7,63.75 +4635,46,30,2.5,111.05,1.7,63.75 +4636,46,30,2.5,111.05,1.7,63.75 +4637,46,30,2.5,111.05,1.7,63.75 +4638,46,30,2.5,111.05,1.7,63.75 +4639,46,30,2.5,111.05,1.7,63.75 +4640,46,30,2.5,111.05,1.7,63.75 +4641,46,30,2.5,111.05,1.7,63.75 +4642,46,30,2.5,111.05,1.7,63.75 +4643,46,30,2.5,111.05,1.7,63.75 +4644,46,30,2.5,111.05,1.7,63.75 +4645,46,30,2.5,111.05,1.7,63.75 +4646,46,30,2.5,111.05,1.7,63.75 +4647,46,30,2.5,111.05,1.7,63.75 +4648,46,30,2.5,111.05,1.7,63.75 +4649,46,30,2.5,111.05,1.7,63.75 +4650,46,30,2.5,111.05,1.7,63.75 +4651,46,30,2.5,111.05,1.7,63.75 +4652,46,30,2.5,111.05,1.7,63.75 +4653,46,30,2.5,111.05,1.7,63.75 +4654,46,30,2.5,111.05,1.7,63.75 +4655,46,30,2.5,111.05,1.7,63.75 +4656,46,30,2.5,111.05,1.7,63.75 +4657,46,30,2.5,111.05,1.7,63.75 +4658,46,30,2.5,111.05,1.7,63.75 +4659,46,30,2.5,111.05,1.7,63.75 +4660,46,30,2.5,111.05,1.7,63.75 +4661,46,30,2.5,111.05,1.7,63.75 +4662,46,30,2.5,111.05,1.7,63.75 +4663,46,30,2.5,111.05,1.7,63.75 +4664,46,30,2.5,111.05,1.7,63.75 +4665,46,30,2.5,111.05,1.7,63.75 +4666,46,30,2.5,111.05,1.7,63.75 +4667,46,30,2.5,111.05,1.7,63.75 +4668,46,30,2.5,111.05,1.7,63.75 +4669,46,30,2.5,111.05,1.7,63.75 +4670,46,30,2.5,111.05,1.7,63.75 +4671,46,30,2.5,111.05,1.7,63.75 +4672,46,30,2.5,111.05,1.7,63.75 +4673,46,30,2.5,111.05,1.7,63.75 +4674,46,30,2.5,111.05,1.7,63.75 +4675,46,30,2.5,111.05,1.7,63.75 +4676,46,30,2.5,111.05,1.7,63.75 +4677,46,30,2.5,111.05,1.7,63.75 +4678,46,30,2.5,111.05,1.7,63.75 +4679,46,30,2.5,111.05,1.7,63.75 +4680,46,30,2.5,111.05,1.7,63.75 +4681,46,30,2.5,111.05,1.7,63.75 +4682,46,30,2.5,111.05,1.7,63.75 +4683,46,30,2.5,111.05,1.7,63.75 +4684,46,30,2.5,111.05,1.7,63.75 +4685,46,30,2.5,111.05,1.7,63.75 +4686,46,30,2.5,111.05,1.7,63.75 +4687,46,30,2.5,111.05,1.7,63.75 +4688,46,30,2.5,111.05,1.7,63.75 +4689,46,30,2.5,111.05,1.7,63.75 +4690,46,30,2.5,111.05,1.7,63.75 +4691,46,30,2.5,111.05,1.7,63.75 +4692,46,30,2.5,111.05,1.7,63.75 +4693,46,30,2.5,111.05,1.7,63.75 +4694,46,30,2.5,111.05,1.7,63.75 +4695,46,30,2.5,111.05,1.7,63.75 +4696,46,30,2.5,111.05,1.7,63.75 +4697,46,30,2.5,111.05,1.7,63.75 +4698,46,30,2.5,111.05,1.7,63.75 +4699,46,30,2.5,111.05,1.7,63.75 +4700,46,30,2.5,111.05,1.7,63.75 +4701,46,30,2.5,111.05,1.7,63.75 +4702,46,30,2.5,111.05,1.7,63.75 +4703,46,30,2.5,111.05,1.7,63.75 +4704,46,30,2.5,111.05,1.7,63.75 +4705,46,30,2.5,111.05,1.7,63.75 +4706,46,30,2.5,111.05,1.7,63.75 +4707,46,30,2.5,111.05,1.7,63.75 +4708,46,30,2.5,111.05,1.7,63.75 +4709,46,30,2.5,111.05,1.7,63.75 +4710,46,30,2.5,111.05,1.7,63.75 +4711,46,30,2.5,111.05,1.7,63.75 +4712,46,30,2.5,111.05,1.7,63.75 +4713,46,30,2.5,111.05,1.7,63.75 +4714,46,30,2.5,111.05,1.7,63.75 +4715,46,30,2.5,111.05,1.7,63.75 +4716,46,30,2.5,111.05,1.7,63.75 +4717,46,30,2.5,111.05,1.7,63.75 +4718,46,30,2.5,111.05,1.7,63.75 +4719,46,30,2.5,111.05,1.7,63.75 +4720,46,30,2.5,111.05,1.7,63.75 +4721,46,30,2.5,111.05,1.7,63.75 +4722,46,30,2.5,111.05,1.7,63.75 +4723,46,30,2.5,111.05,1.7,63.75 +4724,46,30,2.5,111.05,1.7,63.75 +4725,46,30,2.5,111.05,1.7,63.75 +4726,46,30,2.5,111.05,1.7,63.75 +4727,46,30,2.5,111.05,1.7,63.75 +4728,46,30,2.5,111.05,1.7,63.75 +4729,46,30,2.5,111.05,1.7,63.75 +4730,46,30,2.5,111.05,1.7,63.75 +4731,46,30,2.5,111.05,1.7,63.75 +4732,46,30,2.5,111.05,1.7,63.75 +4733,46,30,2.5,111.05,1.7,63.75 +4734,46,30,2.5,111.05,1.7,63.75 +4735,46,30,2.5,111.05,1.7,63.75 +4736,46,30,2.5,111.05,1.7,63.75 +4737,46,30,2.5,111.05,1.7,63.75 +4738,46,30,2.5,111.05,1.7,63.75 +4739,46,30,2.5,111.05,1.7,63.75 +4740,46,30,2.5,111.05,1.7,63.75 +4741,46,30,2.5,111.05,1.7,63.75 +4742,46,30,2.5,111.05,1.7,63.75 +4743,46,30,2.5,111.05,1.7,63.75 +4744,46,30,2.5,111.05,1.7,63.75 +4745,46,30,2.5,111.05,1.7,63.75 +4746,46,30,2.5,111.05,1.7,63.75 +4747,46,30,2.5,111.05,1.7,63.75 +4748,46,30,2.5,111.05,1.7,63.75 +4749,46,30,2.5,111.05,1.7,63.75 +4750,46,30,2.5,111.05,1.7,63.75 +4751,46,30,2.5,111.05,1.7,63.75 +4752,46,30,2.5,111.05,1.7,63.75 +4753,46,30,2.5,111.05,1.7,63.75 +4754,46,30,2.5,111.05,1.7,63.75 +4755,46,30,2.5,111.05,1.7,63.75 +4756,46,30,2.5,111.05,1.7,63.75 +4757,46,30,2.5,111.05,1.7,63.75 +4758,46,30,2.5,111.05,1.7,63.75 +4759,46,30,2.5,111.05,1.7,63.75 +4760,46,30,2.5,111.05,1.7,63.75 +4761,46,30,2.5,111.05,1.7,63.75 +4762,46,30,2.5,111.05,1.7,63.75 +4763,46,30,2.5,111.05,1.7,63.75 +4764,46,30,2.5,111.05,1.7,63.75 +4765,46,30,2.5,111.05,1.7,63.75 +4766,46,30,2.5,111.05,1.7,63.75 +4767,46,30,2.5,111.05,1.7,63.75 +4768,46,30,2.5,111.05,1.7,63.75 +4769,46,30,2.5,111.05,1.7,63.75 +4770,46,30,2.5,111.05,1.7,63.75 +4771,46,30,2.5,111.05,1.7,63.75 +4772,46,30,2.5,111.05,1.7,63.75 +4773,46,30,2.5,111.05,1.7,63.75 +4774,46,30,2.5,111.05,1.7,63.75 +4775,46,30,2.5,111.05,1.7,63.75 +4776,46,30,2.5,111.05,1.7,63.75 +4777,46,30,2.5,111.05,1.7,63.75 +4778,46,30,2.5,111.05,1.7,63.75 +4779,46,30,2.5,111.05,1.7,63.75 +4780,46,30,2.5,111.05,1.7,63.75 +4781,46,30,2.5,111.05,1.7,63.75 +4782,46,30,2.5,111.05,1.7,63.75 +4783,46,30,2.5,111.05,1.7,63.75 +4784,46,30,2.5,111.05,1.7,63.75 +4785,46,30,2.5,111.05,1.7,63.75 +4786,46,30,2.5,111.05,1.7,63.75 +4787,46,30,2.5,111.05,1.7,63.75 +4788,46,30,2.5,111.05,1.7,63.75 +4789,46,30,2.5,111.05,1.7,63.75 +4790,46,30,2.5,111.05,1.7,63.75 +4791,46,30,2.5,111.05,1.7,63.75 +4792,46,30,2.5,111.05,1.7,63.75 +4793,46,30,2.5,111.05,1.7,63.75 +4794,46,30,2.5,111.05,1.7,63.75 +4795,46,30,2.5,111.05,1.7,63.75 +4796,46,30,2.5,111.05,1.7,63.75 +4797,46,30,2.5,111.05,1.7,63.75 +4798,46,30,2.5,111.05,1.7,63.75 +4799,46,30,2.5,111.05,1.7,63.75 +4800,46,30,2.5,111.05,1.7,63.75 +4801,46,30,2.5,111.05,1.7,63.75 +4802,46,30,2.5,111.05,1.7,63.75 +4803,46,30,2.5,111.05,1.7,63.75 +4804,46,30,2.5,111.05,1.7,63.75 +4805,46,30,2.5,111.05,1.7,63.75 +4806,46,30,2.5,111.05,1.7,63.75 +4807,46,30,2.5,111.05,1.7,63.75 +4808,46,30,2.5,111.05,1.7,63.75 +4809,46,30,2.5,111.05,1.7,63.75 +4810,46,30,2.5,111.05,1.7,63.75 +4811,46,30,2.5,111.05,1.7,63.75 +4812,46,30,2.5,111.05,1.7,63.75 +4813,46,30,2.5,111.05,1.7,63.75 +4814,46,30,2.5,111.05,1.7,63.75 +4815,46,30,2.5,111.05,1.7,63.75 +4816,46,30,2.5,111.05,1.7,63.75 +4817,46,30,2.5,111.05,1.7,63.75 +4818,46,30,2.5,111.05,1.7,63.75 +4819,46,30,2.5,111.05,1.7,63.75 +4820,46,30,2.5,111.05,1.7,63.75 +4821,46,30,2.5,111.05,1.7,63.75 +4822,46,30,2.5,111.05,1.7,63.75 +4823,46,30,2.5,111.05,1.7,63.75 +4824,46,30,2.5,111.05,1.7,63.75 +4825,46,30,2.5,111.05,1.7,63.75 +4826,46,30,2.5,111.05,1.7,63.75 +4827,46,30,2.5,111.05,1.7,63.75 +4828,46,30,2.5,111.05,1.7,63.75 +4829,46,30,2.5,111.05,1.7,63.75 +4830,46,30,2.5,111.05,1.7,63.75 +4831,46,30,2.5,111.05,1.7,63.75 +4832,46,30,2.5,111.05,1.7,63.75 +4833,46,30,2.5,111.05,1.7,63.75 +4834,46,30,2.5,111.05,1.7,63.75 +4835,46,30,2.5,111.05,1.7,63.75 +4836,46,30,2.5,111.05,1.7,63.75 +4837,46,30,2.5,111.05,1.7,63.75 +4838,46,30,2.5,111.05,1.7,63.75 +4839,46,30,2.5,111.05,1.7,63.75 +4840,46,30,2.5,111.05,1.7,63.75 +4841,46,30,2.5,111.05,1.7,63.75 +4842,46,30,2.5,111.05,1.7,63.75 +4843,46,30,2.5,111.05,1.7,63.75 +4844,46,30,2.5,111.05,1.7,63.75 +4845,46,30,2.5,111.05,1.7,63.75 +4846,46,30,2.5,111.05,1.7,63.75 +4847,46,30,2.5,111.05,1.7,63.75 +4848,46,30,2.5,111.05,1.7,63.75 +4849,46,30,2.5,111.05,1.7,63.75 +4850,46,30,2.5,111.05,1.7,63.75 +4851,46,30,2.5,111.05,1.7,63.75 +4852,46,30,2.5,111.05,1.7,63.75 +4853,46,30,2.5,111.05,1.7,63.75 +4854,46,30,2.5,111.05,1.7,63.75 +4855,46,30,2.5,111.05,1.7,63.75 +4856,46,30,2.5,111.05,1.7,63.75 +4857,46,30,2.5,111.05,1.7,63.75 +4858,46,30,2.5,111.05,1.7,63.75 +4859,46,30,2.5,111.05,1.7,63.75 +4860,46,30,2.5,111.05,1.7,63.75 +4861,46,30,2.5,111.05,1.7,63.75 +4862,46,30,2.5,111.05,1.7,63.75 +4863,46,30,2.5,111.05,1.7,63.75 +4864,46,30,2.5,111.05,1.7,63.75 +4865,46,30,2.5,111.05,1.7,63.75 +4866,46,30,2.5,111.05,1.7,63.75 +4867,46,30,2.5,111.05,1.7,63.75 +4868,46,30,2.5,111.05,1.7,63.75 +4869,46,30,2.5,111.05,1.7,63.75 +4870,46,30,2.5,111.05,1.7,63.75 +4871,46,30,2.5,111.05,1.7,63.75 +4872,46,30,2.5,111.05,1.7,63.75 +4873,46,30,2.5,111.05,1.7,63.75 +4874,46,30,2.5,111.05,1.7,63.75 +4875,46,30,2.5,111.05,1.7,63.75 +4876,46,30,2.5,111.05,1.7,63.75 +4877,46,30,2.5,111.05,1.7,63.75 +4878,46,30,2.5,111.05,1.7,63.75 +4879,46,30,2.5,111.05,1.7,63.75 +4880,46,30,2.5,111.05,1.7,63.75 +4881,46,30,2.5,111.05,1.7,63.75 +4882,46,30,2.5,111.05,1.7,63.75 +4883,46,30,2.5,111.05,1.7,63.75 +4884,46,30,2.5,111.05,1.7,63.75 +4885,46,30,2.5,111.05,1.7,63.75 +4886,46,30,2.5,111.05,1.7,63.75 +4887,46,30,2.5,111.05,1.7,63.75 +4888,46,30,2.5,111.05,1.7,63.75 +4889,46,30,2.5,111.05,1.7,63.75 +4890,46,30,2.5,111.05,1.7,63.75 +4891,46,30,2.5,111.05,1.7,63.75 +4892,46,30,2.5,111.05,1.7,63.75 +4893,46,30,2.5,111.05,1.7,63.75 +4894,46,30,2.5,111.05,1.7,63.75 +4895,46,30,2.5,111.05,1.7,63.75 +4896,46,30,2.5,111.05,1.7,63.75 +4897,46,30,2.5,111.05,1.7,63.75 +4898,46,30,2.5,111.05,1.7,63.75 +4899,46,30,2.5,111.05,1.7,63.75 +4900,46,30,2.5,111.05,1.7,63.75 +4901,46,30,2.5,111.05,1.7,63.75 +4902,46,30,2.5,111.05,1.7,63.75 +4903,46,30,2.5,111.05,1.7,63.75 +4904,46,30,2.5,111.05,1.7,63.75 +4905,46,30,2.5,111.05,1.7,63.75 +4906,46,30,2.5,111.05,1.7,63.75 +4907,46,30,2.5,111.05,1.7,63.75 +4908,46,30,2.5,111.05,1.7,63.75 +4909,46,30,2.5,111.05,1.7,63.75 +4910,46,30,2.5,111.05,1.7,63.75 +4911,46,30,2.5,111.05,1.7,63.75 +4912,46,30,2.5,111.05,1.7,63.75 +4913,46,30,2.5,111.05,1.7,63.75 +4914,46,30,2.5,111.05,1.7,63.75 +4915,46,30,2.5,111.05,1.7,63.75 +4916,46,30,2.5,111.05,1.7,63.75 +4917,46,30,2.5,111.05,1.7,63.75 +4918,46,30,2.5,111.05,1.7,63.75 +4919,46,30,2.5,111.05,1.7,63.75 +4920,46,30,2.5,111.05,1.7,63.75 +4921,46,30,2.5,111.05,1.7,63.75 +4922,46,30,2.5,111.05,1.7,63.75 +4923,46,30,2.5,111.05,1.7,63.75 +4924,46,30,2.5,111.05,1.7,63.75 +4925,46,30,2.5,111.05,1.7,63.75 +4926,46,30,2.5,111.05,1.7,63.75 +4927,46,30,2.5,111.05,1.7,63.75 +4928,46,30,2.5,111.05,1.7,63.75 +4929,46,30,2.5,111.05,1.7,63.75 +4930,46,30,2.5,111.05,1.7,63.75 +4931,46,30,2.5,111.05,1.7,63.75 +4932,46,30,2.5,111.05,1.7,63.75 +4933,46,30,2.5,111.05,1.7,63.75 +4934,46,30,2.5,111.05,1.7,63.75 +4935,46,30,2.5,111.05,1.7,63.75 +4936,46,30,2.5,111.05,1.7,63.75 +4937,46,30,2.5,111.05,1.7,63.75 +4938,46,30,2.5,111.05,1.7,63.75 +4939,46,30,2.5,111.05,1.7,63.75 +4940,46,30,2.5,111.05,1.7,63.75 +4941,46,30,2.5,111.05,1.7,63.75 +4942,46,30,2.5,111.05,1.7,63.75 +4943,46,30,2.5,111.05,1.7,63.75 +4944,46,30,2.5,111.05,1.7,63.75 +4945,46,30,2.5,111.05,1.7,63.75 +4946,46,30,2.5,111.05,1.7,63.75 +4947,46,30,2.5,111.05,1.7,63.75 +4948,46,30,2.5,111.05,1.7,63.75 +4949,46,30,2.5,111.05,1.7,63.75 +4950,46,30,2.5,111.05,1.7,63.75 +4951,46,30,2.5,111.05,1.7,63.75 +4952,46,30,2.5,111.05,1.7,63.75 +4953,46,30,2.5,111.05,1.7,63.75 +4954,46,30,2.5,111.05,1.7,63.75 +4955,46,30,2.5,111.05,1.7,63.75 +4956,46,30,2.5,111.05,1.7,63.75 +4957,46,30,2.5,111.05,1.7,63.75 +4958,46,30,2.5,111.05,1.7,63.75 +4959,46,30,2.5,111.05,1.7,63.75 +4960,46,30,2.5,111.05,1.7,63.75 +4961,46,30,2.5,111.05,1.7,63.75 +4962,46,30,2.5,111.05,1.7,63.75 +4963,46,30,2.5,111.05,1.7,63.75 +4964,46,30,2.5,111.05,1.7,63.75 +4965,46,30,2.5,111.05,1.7,63.75 +4966,46,30,2.5,111.05,1.7,63.75 +4967,46,30,2.5,111.05,1.7,63.75 +4968,46,30,2.5,111.05,1.7,63.75 +4969,46,30,2.5,111.05,1.7,63.75 +4970,46,30,2.5,111.05,1.7,63.75 +4971,46,30,2.5,111.05,1.7,63.75 +4972,46,30,2.5,111.05,1.7,63.75 +4973,46,30,2.5,111.05,1.7,63.75 +4974,46,30,2.5,111.05,1.7,63.75 +4975,46,30,2.5,111.05,1.7,63.75 +4976,46,30,2.5,111.05,1.7,63.75 +4977,46,30,2.5,111.05,1.7,63.75 +4978,46,30,2.5,111.05,1.7,63.75 +4979,46,30,2.5,111.05,1.7,63.75 +4980,46,30,2.5,111.05,1.7,63.75 +4981,46,30,2.5,111.05,1.7,63.75 +4982,46,30,2.5,111.05,1.7,63.75 +4983,46,30,2.5,111.05,1.7,63.75 +4984,46,30,2.5,111.05,1.7,63.75 +4985,46,30,2.5,111.05,1.7,63.75 +4986,46,30,2.5,111.05,1.7,63.75 +4987,46,30,2.5,111.05,1.7,63.75 +4988,46,30,2.5,111.05,1.7,63.75 +4989,46,30,2.5,111.05,1.7,63.75 +4990,46,30,2.5,111.05,1.7,63.75 +4991,46,30,2.5,111.05,1.7,63.75 +4992,46,30,2.5,111.05,1.7,63.75 +4993,46,30,2.5,111.05,1.7,63.75 +4994,46,30,2.5,111.05,1.7,63.75 +4995,46,30,2.5,111.05,1.7,63.75 +4996,46,30,2.5,111.05,1.7,63.75 +4997,46,30,2.5,111.05,1.7,63.75 +4998,46,30,2.5,111.05,1.7,63.75 +4999,46,30,2.5,111.05,1.7,63.75 +5000,46,30,2.5,111.05,1.7,63.75 +5001,46,30,2.5,111.05,1.7,63.75 +5002,46,30,2.5,111.05,1.7,63.75 +5003,46,30,2.5,111.05,1.7,63.75 +5004,46,30,2.5,111.05,1.7,63.75 +5005,46,30,2.5,111.05,1.7,63.75 +5006,46,30,2.5,111.05,1.7,63.75 +5007,46,30,2.5,111.05,1.7,63.75 +5008,46,30,2.5,111.05,1.7,63.75 +5009,46,30,2.5,111.05,1.7,63.75 +5010,46,30,2.5,111.05,1.7,63.75 +5011,46,30,2.5,111.05,1.7,63.75 +5012,46,30,2.5,111.05,1.7,63.75 +5013,46,30,2.5,111.05,1.7,63.75 +5014,46,30,2.5,111.05,1.7,63.75 +5015,46,30,2.5,111.05,1.7,63.75 +5016,46,30,2.5,111.05,1.7,63.75 +5017,46,30,2.5,111.05,1.7,63.75 +5018,46,30,2.5,111.05,1.7,63.75 +5019,46,30,2.5,111.05,1.7,63.75 +5020,46,30,2.5,111.05,1.7,63.75 +5021,46,30,2.5,111.05,1.7,63.75 +5022,46,30,2.5,111.05,1.7,63.75 +5023,46,30,2.5,111.05,1.7,63.75 +5024,46,30,2.5,111.05,1.7,63.75 +5025,46,30,2.5,111.05,1.7,63.75 +5026,46,30,2.5,111.05,1.7,63.75 +5027,46,30,2.5,111.05,1.7,63.75 +5028,46,30,2.5,111.05,1.7,63.75 +5029,46,30,2.5,111.05,1.7,63.75 +5030,46,30,2.5,111.05,1.7,63.75 +5031,46,30,2.5,111.05,1.7,63.75 +5032,46,30,2.5,111.05,1.7,63.75 +5033,46,30,2.5,111.05,1.7,63.75 +5034,46,30,2.5,111.05,1.7,63.75 +5035,46,30,2.5,111.05,1.7,63.75 +5036,46,30,2.5,111.05,1.7,63.75 +5037,46,30,2.5,111.05,1.7,63.75 +5038,46,30,2.5,111.05,1.7,63.75 +5039,46,30,2.5,111.05,1.7,63.75 +5040,46,30,2.5,111.05,1.7,63.75 +5041,46,30,2.5,111.05,1.7,63.75 +5042,46,30,2.5,111.05,1.7,63.75 +5043,46,30,2.5,111.05,1.7,63.75 +5044,46,30,2.5,111.05,1.7,63.75 +5045,46,30,2.5,111.05,1.7,63.75 +5046,46,30,2.5,111.05,1.7,63.75 +5047,46,30,2.5,111.05,1.7,63.75 +5048,46,30,2.5,111.05,1.7,63.75 +5049,46,30,2.5,111.05,1.7,63.75 +5050,46,30,2.5,111.05,1.7,63.75 +5051,46,30,2.5,111.05,1.7,63.75 +5052,46,30,2.5,111.05,1.7,63.75 +5053,46,30,2.5,111.05,1.7,63.75 +5054,46,30,2.5,111.05,1.7,63.75 +5055,46,30,2.5,111.05,1.7,63.75 +5056,46,30,2.5,111.05,1.7,63.75 +5057,46,30,2.5,111.05,1.7,63.75 +5058,46,30,2.5,111.05,1.7,63.75 +5059,46,30,2.5,111.05,1.7,63.75 +5060,46,30,2.5,111.05,1.7,63.75 +5061,46,30,2.5,111.05,1.7,63.75 +5062,46,30,2.5,111.05,1.7,63.75 +5063,46,30,2.5,111.05,1.7,63.75 +5064,46,30,2.5,111.05,1.7,63.75 +5065,46,30,2.5,111.05,1.7,63.75 +5066,46,30,2.5,111.05,1.7,63.75 +5067,46,30,2.5,111.05,1.7,63.75 +5068,46,30,2.5,111.05,1.7,63.75 +5069,46,30,2.5,111.05,1.7,63.75 +5070,46,30,2.5,111.05,1.7,63.75 +5071,46,30,2.5,111.05,1.7,63.75 +5072,46,30,2.5,111.05,1.7,63.75 +5073,46,30,2.5,111.05,1.7,63.75 +5074,46,30,2.5,111.05,1.7,63.75 +5075,46,30,2.5,111.05,1.7,63.75 +5076,46,30,2.5,111.05,1.7,63.75 +5077,46,30,2.5,111.05,1.7,63.75 +5078,46,30,2.5,111.05,1.7,63.75 +5079,46,30,2.5,111.05,1.7,63.75 +5080,46,30,2.5,111.05,1.7,63.75 +5081,46,30,2.5,111.05,1.7,63.75 +5082,46,30,2.5,111.05,1.7,63.75 +5083,46,30,2.5,111.05,1.7,63.75 +5084,46,30,2.5,111.05,1.7,63.75 +5085,46,30,2.5,111.05,1.7,63.75 +5086,46,30,2.5,111.05,1.7,63.75 +5087,46,30,2.5,111.05,1.7,63.75 +5088,46,30,2.5,111.05,1.7,63.75 +5089,46,30,2.5,111.05,1.7,63.75 +5090,46,30,2.5,111.05,1.7,63.75 +5091,46,30,2.5,111.05,1.7,63.75 +5092,46,30,2.5,111.05,1.7,63.75 +5093,46,30,2.5,111.05,1.7,63.75 +5094,46,30,2.5,111.05,1.7,63.75 +5095,46,30,2.5,111.05,1.7,63.75 +5096,46,30,2.5,111.05,1.7,63.75 +5097,46,30,2.5,111.05,1.7,63.75 +5098,46,30,2.5,111.05,1.7,63.75 +5099,46,30,2.5,111.05,1.7,63.75 +5100,46,30,2.5,111.05,1.7,63.75 +5101,46,30,2.5,111.05,1.7,63.75 +5102,46,30,2.5,111.05,1.7,63.75 +5103,46,30,2.5,111.05,1.7,63.75 +5104,46,30,2.5,111.05,1.7,63.75 +5105,46,30,2.5,111.05,1.7,63.75 +5106,46,30,2.5,111.05,1.7,63.75 +5107,46,30,2.5,111.05,1.7,63.75 +5108,46,30,2.5,111.05,1.7,63.75 +5109,46,30,2.5,111.05,1.7,63.75 +5110,46,30,2.5,111.05,1.7,63.75 +5111,46,30,2.5,111.05,1.7,63.75 +5112,46,30,2.5,111.05,1.7,63.75 +5113,46,30,2.5,111.05,1.7,63.75 +5114,46,30,2.5,111.05,1.7,63.75 +5115,46,30,2.5,111.05,1.7,63.75 +5116,46,30,2.5,111.05,1.7,63.75 +5117,46,30,2.5,111.05,1.7,63.75 +5118,46,30,2.5,111.05,1.7,63.75 +5119,46,30,2.5,111.05,1.7,63.75 +5120,46,30,2.5,111.05,1.7,63.75 +5121,46,30,2.5,111.05,1.7,63.75 +5122,46,30,2.5,111.05,1.7,63.75 +5123,46,30,2.5,111.05,1.7,63.75 +5124,46,30,2.5,111.05,1.7,63.75 +5125,46,30,2.5,111.05,1.7,63.75 +5126,46,30,2.5,111.05,1.7,63.75 +5127,46,30,2.5,111.05,1.7,63.75 +5128,46,30,2.5,111.05,1.7,63.75 +5129,46,30,2.5,111.05,1.7,63.75 +5130,46,30,2.5,111.05,1.7,63.75 +5131,46,30,2.5,111.05,1.7,63.75 +5132,46,30,2.5,111.05,1.7,63.75 +5133,46,30,2.5,111.05,1.7,63.75 +5134,46,30,2.5,111.05,1.7,63.75 +5135,46,30,2.5,111.05,1.7,63.75 +5136,46,30,2.5,111.05,1.7,63.75 +5137,46,30,2.5,111.05,1.7,63.75 +5138,46,30,2.5,111.05,1.7,63.75 +5139,46,30,2.5,111.05,1.7,63.75 +5140,46,30,2.5,111.05,1.7,63.75 +5141,46,30,2.5,111.05,1.7,63.75 +5142,46,30,2.5,111.05,1.7,63.75 +5143,46,30,2.5,111.05,1.7,63.75 +5144,46,30,2.5,111.05,1.7,63.75 +5145,46,30,2.5,111.05,1.7,63.75 +5146,46,30,2.5,111.05,1.7,63.75 +5147,46,30,2.5,111.05,1.7,63.75 +5148,46,30,2.5,111.05,1.7,63.75 +5149,46,30,2.5,111.05,1.7,63.75 +5150,46,30,2.5,111.05,1.7,63.75 +5151,46,30,2.5,111.05,1.7,63.75 +5152,46,30,2.5,111.05,1.7,63.75 +5153,46,30,2.5,111.05,1.7,63.75 +5154,46,30,2.5,111.05,1.7,63.75 +5155,46,30,2.5,111.05,1.7,63.75 +5156,46,30,2.5,111.05,1.7,63.75 +5157,46,30,2.5,111.05,1.7,63.75 +5158,46,30,2.5,111.05,1.7,63.75 +5159,46,30,2.5,111.05,1.7,63.75 +5160,46,30,2.5,111.05,1.7,63.75 +5161,46,30,2.5,111.05,1.7,63.75 +5162,46,30,2.5,111.05,1.7,63.75 +5163,46,30,2.5,111.05,1.7,63.75 +5164,46,30,2.5,111.05,1.7,63.75 +5165,46,30,2.5,111.05,1.7,63.75 +5166,46,30,2.5,111.05,1.7,63.75 +5167,46,30,2.5,111.05,1.7,63.75 +5168,46,30,2.5,111.05,1.7,63.75 +5169,46,30,2.5,111.05,1.7,63.75 +5170,46,30,2.5,111.05,1.7,63.75 +5171,46,30,2.5,111.05,1.7,63.75 +5172,46,30,2.5,111.05,1.7,63.75 +5173,46,30,2.5,111.05,1.7,63.75 +5174,46,30,2.5,111.05,1.7,63.75 +5175,46,30,2.5,111.05,1.7,63.75 +5176,46,30,2.5,111.05,1.7,63.75 +5177,46,30,2.5,111.05,1.7,63.75 +5178,46,30,2.5,111.05,1.7,63.75 +5179,46,30,2.5,111.05,1.7,63.75 +5180,46,30,2.5,111.05,1.7,63.75 +5181,46,30,2.5,111.05,1.7,63.75 +5182,46,30,2.5,111.05,1.7,63.75 +5183,46,30,2.5,111.05,1.7,63.75 +5184,46,30,2.5,111.05,1.7,63.75 +5185,46,30,2.5,111.05,1.7,63.75 +5186,46,30,2.5,111.05,1.7,63.75 +5187,46,30,2.5,111.05,1.7,63.75 +5188,46,30,2.5,111.05,1.7,63.75 +5189,46,30,2.5,111.05,1.7,63.75 +5190,46,30,2.5,111.05,1.7,63.75 +5191,46,30,2.5,111.05,1.7,63.75 +5192,46,30,2.5,111.05,1.7,63.75 +5193,46,30,2.5,111.05,1.7,63.75 +5194,46,30,2.5,111.05,1.7,63.75 +5195,46,30,2.5,111.05,1.7,63.75 +5196,46,30,2.5,111.05,1.7,63.75 +5197,46,30,2.5,111.05,1.7,63.75 +5198,46,30,2.5,111.05,1.7,63.75 +5199,46,30,2.5,111.05,1.7,63.75 +5200,46,30,2.5,111.05,1.7,63.75 +5201,46,30,2.5,111.05,1.7,63.75 +5202,46,30,2.5,111.05,1.7,63.75 +5203,46,30,2.5,111.05,1.7,63.75 +5204,46,30,2.5,111.05,1.7,63.75 +5205,46,30,2.5,111.05,1.7,63.75 +5206,46,30,2.5,111.05,1.7,63.75 +5207,46,30,2.5,111.05,1.7,63.75 +5208,46,30,2.5,111.05,1.7,63.75 +5209,46,30,2.5,111.05,1.7,63.75 +5210,46,30,2.5,111.05,1.7,63.75 +5211,46,30,2.5,111.05,1.7,63.75 +5212,46,30,2.5,111.05,1.7,63.75 +5213,46,30,2.5,111.05,1.7,63.75 +5214,46,30,2.5,111.05,1.7,63.75 +5215,46,30,2.5,111.05,1.7,63.75 +5216,46,30,2.5,111.05,1.7,63.75 +5217,46,30,2.5,111.05,1.7,63.75 +5218,46,30,2.5,111.05,1.7,63.75 +5219,46,30,2.5,111.05,1.7,63.75 +5220,46,30,2.5,111.05,1.7,63.75 +5221,46,30,2.5,111.05,1.7,63.75 +5222,46,30,2.5,111.05,1.7,63.75 +5223,46,30,2.5,111.05,1.7,63.75 +5224,46,30,2.5,111.05,1.7,63.75 +5225,46,30,2.5,111.05,1.7,63.75 +5226,46,30,2.5,111.05,1.7,63.75 +5227,46,30,2.5,111.05,1.7,63.75 +5228,46,30,2.5,111.05,1.7,63.75 +5229,46,30,2.5,111.05,1.7,63.75 +5230,46,30,2.5,111.05,1.7,63.75 +5231,46,30,2.5,111.05,1.7,63.75 +5232,46,30,2.5,111.05,1.7,63.75 +5233,46,30,2.5,111.05,1.7,63.75 +5234,46,30,2.5,111.05,1.7,63.75 +5235,46,30,2.5,111.05,1.7,63.75 +5236,46,30,2.5,111.05,1.7,63.75 +5237,46,30,2.5,111.05,1.7,63.75 +5238,46,30,2.5,111.05,1.7,63.75 +5239,46,30,2.5,111.05,1.7,63.75 +5240,46,30,2.5,111.05,1.7,63.75 +5241,46,30,2.5,111.05,1.7,63.75 +5242,46,30,2.5,111.05,1.7,63.75 +5243,46,30,2.5,111.05,1.7,63.75 +5244,46,30,2.5,111.05,1.7,63.75 +5245,46,30,2.5,111.05,1.7,63.75 +5246,46,30,2.5,111.05,1.7,63.75 +5247,46,30,2.5,111.05,1.7,63.75 +5248,46,30,2.5,111.05,1.7,63.75 +5249,46,30,2.5,111.05,1.7,63.75 +5250,46,30,2.5,111.05,1.7,63.75 +5251,46,30,2.5,111.05,1.7,63.75 +5252,46,30,2.5,111.05,1.7,63.75 +5253,46,30,2.5,111.05,1.7,63.75 +5254,46,30,2.5,111.05,1.7,63.75 +5255,46,30,2.5,111.05,1.7,63.75 +5256,46,30,2.5,111.05,1.7,63.75 +5257,46,30,2.5,111.05,1.7,63.75 +5258,46,30,2.5,111.05,1.7,63.75 +5259,46,30,2.5,111.05,1.7,63.75 +5260,46,30,2.5,111.05,1.7,63.75 +5261,46,30,2.5,111.05,1.7,63.75 +5262,46,30,2.5,111.05,1.7,63.75 +5263,46,30,2.5,111.05,1.7,63.75 +5264,46,30,2.5,111.05,1.7,63.75 +5265,46,30,2.5,111.05,1.7,63.75 +5266,46,30,2.5,111.05,1.7,63.75 +5267,46,30,2.5,111.05,1.7,63.75 +5268,46,30,2.5,111.05,1.7,63.75 +5269,46,30,2.5,111.05,1.7,63.75 +5270,46,30,2.5,111.05,1.7,63.75 +5271,46,30,2.5,111.05,1.7,63.75 +5272,46,30,2.5,111.05,1.7,63.75 +5273,46,30,2.5,111.05,1.7,63.75 +5274,46,30,2.5,111.05,1.7,63.75 +5275,46,30,2.5,111.05,1.7,63.75 +5276,46,30,2.5,111.05,1.7,63.75 +5277,46,30,2.5,111.05,1.7,63.75 +5278,46,30,2.5,111.05,1.7,63.75 +5279,46,30,2.5,111.05,1.7,63.75 +5280,46,30,2.5,111.05,1.7,63.75 +5281,46,30,2.5,111.05,1.7,63.75 +5282,46,30,2.5,111.05,1.7,63.75 +5283,46,30,2.5,111.05,1.7,63.75 +5284,46,30,2.5,111.05,1.7,63.75 +5285,46,30,2.5,111.05,1.7,63.75 +5286,46,30,2.5,111.05,1.7,63.75 +5287,46,30,2.5,111.05,1.7,63.75 +5288,46,30,2.5,111.05,1.7,63.75 +5289,46,30,2.5,111.05,1.7,63.75 +5290,46,30,2.5,111.05,1.7,63.75 +5291,46,30,2.5,111.05,1.7,63.75 +5292,46,30,2.5,111.05,1.7,63.75 +5293,46,30,2.5,111.05,1.7,63.75 +5294,46,30,2.5,111.05,1.7,63.75 +5295,46,30,2.5,111.05,1.7,63.75 +5296,46,30,2.5,111.05,1.7,63.75 +5297,46,30,2.5,111.05,1.7,63.75 +5298,46,30,2.5,111.05,1.7,63.75 +5299,46,30,2.5,111.05,1.7,63.75 +5300,46,30,2.5,111.05,1.7,63.75 +5301,46,30,2.5,111.05,1.7,63.75 +5302,46,30,2.5,111.05,1.7,63.75 +5303,46,30,2.5,111.05,1.7,63.75 +5304,46,30,2.5,111.05,1.7,63.75 +5305,46,30,2.5,111.05,1.7,63.75 +5306,46,30,2.5,111.05,1.7,63.75 +5307,46,30,2.5,111.05,1.7,63.75 +5308,46,30,2.5,111.05,1.7,63.75 +5309,46,30,2.5,111.05,1.7,63.75 +5310,46,30,2.5,111.05,1.7,63.75 +5311,46,30,2.5,111.05,1.7,63.75 +5312,46,30,2.5,111.05,1.7,63.75 +5313,46,30,2.5,111.05,1.7,63.75 +5314,46,30,2.5,111.05,1.7,63.75 +5315,46,30,2.5,111.05,1.7,63.75 +5316,46,30,2.5,111.05,1.7,63.75 +5317,46,30,2.5,111.05,1.7,63.75 +5318,46,30,2.5,111.05,1.7,63.75 +5319,46,30,2.5,111.05,1.7,63.75 +5320,46,30,2.5,111.05,1.7,63.75 +5321,46,30,2.5,111.05,1.7,63.75 +5322,46,30,2.5,111.05,1.7,63.75 +5323,46,30,2.5,111.05,1.7,63.75 +5324,46,30,2.5,111.05,1.7,63.75 +5325,46,30,2.5,111.05,1.7,63.75 +5326,46,30,2.5,111.05,1.7,63.75 +5327,46,30,2.5,111.05,1.7,63.75 +5328,46,30,2.5,111.05,1.7,63.75 +5329,46,30,2.5,111.05,1.7,63.75 +5330,46,30,2.5,111.05,1.7,63.75 +5331,46,30,2.5,111.05,1.7,63.75 +5332,46,30,2.5,111.05,1.7,63.75 +5333,46,30,2.5,111.05,1.7,63.75 +5334,46,30,2.5,111.05,1.7,63.75 +5335,46,30,2.5,111.05,1.7,63.75 +5336,46,30,2.5,111.05,1.7,63.75 +5337,46,30,2.5,111.05,1.7,63.75 +5338,46,30,2.5,111.05,1.7,63.75 +5339,46,30,2.5,111.05,1.7,63.75 +5340,46,30,2.5,111.05,1.7,63.75 +5341,46,30,2.5,111.05,1.7,63.75 +5342,46,30,2.5,111.05,1.7,63.75 +5343,46,30,2.5,111.05,1.7,63.75 +5344,46,30,2.5,111.05,1.7,63.75 +5345,46,30,2.5,111.05,1.7,63.75 +5346,46,30,2.5,111.05,1.7,63.75 +5347,46,30,2.5,111.05,1.7,63.75 +5348,46,30,2.5,111.05,1.7,63.75 +5349,46,30,2.5,111.05,1.7,63.75 +5350,46,30,2.5,111.05,1.7,63.75 +5351,46,30,2.5,111.05,1.7,63.75 +5352,46,30,2.5,111.05,1.7,63.75 +5353,46,30,2.5,111.05,1.7,63.75 +5354,46,30,2.5,111.05,1.7,63.75 +5355,46,30,2.5,111.05,1.7,63.75 +5356,46,30,2.5,111.05,1.7,63.75 +5357,46,30,2.5,111.05,1.7,63.75 +5358,46,30,2.5,111.05,1.7,63.75 +5359,46,30,2.5,111.05,1.7,63.75 +5360,46,30,2.5,111.05,1.7,63.75 +5361,46,30,2.5,111.05,1.7,63.75 +5362,46,30,2.5,111.05,1.7,63.75 +5363,46,30,2.5,111.05,1.7,63.75 +5364,46,30,2.5,111.05,1.7,63.75 +5365,46,30,2.5,111.05,1.7,63.75 +5366,46,30,2.5,111.05,1.7,63.75 +5367,46,30,2.5,111.05,1.7,63.75 +5368,46,30,2.5,111.05,1.7,63.75 +5369,46,30,2.5,111.05,1.7,63.75 +5370,46,30,2.5,111.05,1.7,63.75 +5371,46,30,2.5,111.05,1.7,63.75 +5372,46,30,2.5,111.05,1.7,63.75 +5373,46,30,2.5,111.05,1.7,63.75 +5374,46,30,2.5,111.05,1.7,63.75 +5375,46,30,2.5,111.05,1.7,63.75 +5376,46,30,2.5,111.05,1.7,63.75 +5377,46,30,2.5,111.05,1.7,63.75 +5378,46,30,2.5,111.05,1.7,63.75 +5379,46,30,2.5,111.05,1.7,63.75 +5380,46,30,2.5,111.05,1.7,63.75 +5381,46,30,2.5,111.05,1.7,63.75 +5382,46,30,2.5,111.05,1.7,63.75 +5383,46,30,2.5,111.05,1.7,63.75 +5384,46,30,2.5,111.05,1.7,63.75 +5385,46,30,2.5,111.05,1.7,63.75 +5386,46,30,2.5,111.05,1.7,63.75 +5387,46,30,2.5,111.05,1.7,63.75 +5388,46,30,2.5,111.05,1.7,63.75 +5389,46,30,2.5,111.05,1.7,63.75 +5390,46,30,2.5,111.05,1.7,63.75 +5391,46,30,2.5,111.05,1.7,63.75 +5392,46,30,2.5,111.05,1.7,63.75 +5393,46,30,2.5,111.05,1.7,63.75 +5394,46,30,2.5,111.05,1.7,63.75 +5395,46,30,2.5,111.05,1.7,63.75 +5396,46,30,2.5,111.05,1.7,63.75 +5397,46,30,2.5,111.05,1.7,63.75 +5398,46,30,2.5,111.05,1.7,63.75 +5399,46,30,2.5,111.05,1.7,63.75 +5400,46,30,2.5,111.05,1.7,63.75 +5401,46,30,2.5,111.05,1.7,63.75 +5402,46,30,2.5,111.05,1.7,63.75 +5403,46,30,2.5,111.05,1.7,63.75 +5404,46,30,2.5,111.05,1.7,63.75 +5405,46,30,2.5,111.05,1.7,63.75 +5406,46,30,2.5,111.05,1.7,63.75 +5407,46,30,2.5,111.05,1.7,63.75 +5408,46,30,2.5,111.05,1.7,63.75 +5409,46,30,2.5,111.05,1.7,63.75 +5410,46,30,2.5,111.05,1.7,63.75 +5411,46,30,2.5,111.05,1.7,63.75 +5412,46,30,2.5,111.05,1.7,63.75 +5413,46,30,2.5,111.05,1.7,63.75 +5414,46,30,2.5,111.05,1.7,63.75 +5415,46,30,2.5,111.05,1.7,63.75 +5416,46,30,2.5,111.05,1.7,63.75 +5417,46,30,2.5,111.05,1.7,63.75 +5418,46,30,2.5,111.05,1.7,63.75 +5419,46,30,2.5,111.05,1.7,63.75 +5420,46,30,2.5,111.05,1.7,63.75 +5421,46,30,2.5,111.05,1.7,63.75 +5422,46,30,2.5,111.05,1.7,63.75 +5423,46,30,2.5,111.05,1.7,63.75 +5424,46,30,2.5,111.05,1.7,63.75 +5425,46,30,2.5,111.05,1.7,63.75 +5426,46,30,2.5,111.05,1.7,63.75 +5427,46,30,2.5,111.05,1.7,63.75 +5428,46,30,2.5,111.05,1.7,63.75 +5429,46,30,2.5,111.05,1.7,63.75 +5430,46,30,2.5,111.05,1.7,63.75 +5431,46,30,2.5,111.05,1.7,63.75 +5432,46,30,2.5,111.05,1.7,63.75 +5433,46,30,2.5,111.05,1.7,63.75 +5434,46,30,2.5,111.05,1.7,63.75 +5435,46,30,2.5,111.05,1.7,63.75 +5436,46,30,2.5,111.05,1.7,63.75 +5437,46,30,2.5,111.05,1.7,63.75 +5438,46,30,2.5,111.05,1.7,63.75 +5439,46,30,2.5,111.05,1.7,63.75 +5440,46,30,2.5,111.05,1.7,63.75 +5441,46,30,2.5,111.05,1.7,63.75 +5442,46,30,2.5,111.05,1.7,63.75 +5443,46,30,2.5,111.05,1.7,63.75 +5444,46,30,2.5,111.05,1.7,63.75 +5445,46,30,2.5,111.05,1.7,63.75 +5446,46,30,2.5,111.05,1.7,63.75 +5447,46,30,2.5,111.05,1.7,63.75 +5448,46,30,2.5,111.05,1.7,63.75 +5449,46,30,2.5,111.05,1.7,63.75 +5450,46,30,2.5,111.05,1.7,63.75 +5451,46,30,2.5,111.05,1.7,63.75 +5452,46,30,2.5,111.05,1.7,63.75 +5453,46,30,2.5,111.05,1.7,63.75 +5454,46,30,2.5,111.05,1.7,63.75 +5455,46,30,2.5,111.05,1.7,63.75 +5456,46,30,2.5,111.05,1.7,63.75 +5457,46,30,2.5,111.05,1.7,63.75 +5458,46,30,2.5,111.05,1.7,63.75 +5459,46,30,2.5,111.05,1.7,63.75 +5460,46,30,2.5,111.05,1.7,63.75 +5461,46,30,2.5,111.05,1.7,63.75 +5462,46,30,2.5,111.05,1.7,63.75 +5463,46,30,2.5,111.05,1.7,63.75 +5464,46,30,2.5,111.05,1.7,63.75 +5465,46,30,2.5,111.05,1.7,63.75 +5466,46,30,2.5,111.05,1.7,63.75 +5467,46,30,2.5,111.05,1.7,63.75 +5468,46,30,2.5,111.05,1.7,63.75 +5469,46,30,2.5,111.05,1.7,63.75 +5470,46,30,2.5,111.05,1.7,63.75 +5471,46,30,2.5,111.05,1.7,63.75 +5472,46,30,2.5,111.05,1.7,63.75 +5473,46,30,2.5,111.05,1.7,63.75 +5474,46,30,2.5,111.05,1.7,63.75 +5475,46,30,2.5,111.05,1.7,63.75 +5476,46,30,2.5,111.05,1.7,63.75 +5477,46,30,2.5,111.05,1.7,63.75 +5478,46,30,2.5,111.05,1.7,63.75 +5479,46,30,2.5,111.05,1.7,63.75 +5480,46,30,2.5,111.05,1.7,63.75 +5481,46,30,2.5,111.05,1.7,63.75 +5482,46,30,2.5,111.05,1.7,63.75 +5483,46,30,2.5,111.05,1.7,63.75 +5484,46,30,2.5,111.05,1.7,63.75 +5485,46,30,2.5,111.05,1.7,63.75 +5486,46,30,2.5,111.05,1.7,63.75 +5487,46,30,2.5,111.05,1.7,63.75 +5488,46,30,2.5,111.05,1.7,63.75 +5489,46,30,2.5,111.05,1.7,63.75 +5490,46,30,2.5,111.05,1.7,63.75 +5491,46,30,2.5,111.05,1.7,63.75 +5492,46,30,2.5,111.05,1.7,63.75 +5493,46,30,2.5,111.05,1.7,63.75 +5494,46,30,2.5,111.05,1.7,63.75 +5495,46,30,2.5,111.05,1.7,63.75 +5496,46,30,2.5,111.05,1.7,63.75 +5497,46,30,2.5,111.05,1.7,63.75 +5498,46,30,2.5,111.05,1.7,63.75 +5499,46,30,2.5,111.05,1.7,63.75 +5500,46,30,2.5,111.05,1.7,63.75 +5501,46,30,2.5,111.05,1.7,63.75 +5502,46,30,2.5,111.05,1.7,63.75 +5503,46,30,2.5,111.05,1.7,63.75 +5504,46,30,2.5,111.05,1.7,63.75 +5505,46,30,2.5,111.05,1.7,63.75 +5506,46,30,2.5,111.05,1.7,63.75 +5507,46,30,2.5,111.05,1.7,63.75 +5508,46,30,2.5,111.05,1.7,63.75 +5509,46,30,2.5,111.05,1.7,63.75 +5510,46,30,2.5,111.05,1.7,63.75 +5511,46,30,2.5,111.05,1.7,63.75 +5512,46,30,2.5,111.05,1.7,63.75 +5513,46,30,2.5,111.05,1.7,63.75 +5514,46,30,2.5,111.05,1.7,63.75 +5515,46,30,2.5,111.05,1.7,63.75 +5516,46,30,2.5,111.05,1.7,63.75 +5517,46,30,2.5,111.05,1.7,63.75 +5518,46,30,2.5,111.05,1.7,63.75 +5519,46,30,2.5,111.05,1.7,63.75 +5520,46,30,2.5,111.05,1.7,63.75 +5521,46,30,2.5,111.05,1.7,63.75 +5522,46,30,2.5,111.05,1.7,63.75 +5523,46,30,2.5,111.05,1.7,63.75 +5524,46,30,2.5,111.05,1.7,63.75 +5525,46,30,2.5,111.05,1.7,63.75 +5526,46,30,2.5,111.05,1.7,63.75 +5527,46,30,2.5,111.05,1.7,63.75 +5528,46,30,2.5,111.05,1.7,63.75 +5529,46,30,2.5,111.05,1.7,63.75 +5530,46,30,2.5,111.05,1.7,63.75 +5531,46,30,2.5,111.05,1.7,63.75 +5532,46,30,2.5,111.05,1.7,63.75 +5533,46,30,2.5,111.05,1.7,63.75 +5534,46,30,2.5,111.05,1.7,63.75 +5535,46,30,2.5,111.05,1.7,63.75 +5536,46,30,2.5,111.05,1.7,63.75 +5537,46,30,2.5,111.05,1.7,63.75 +5538,46,30,2.5,111.05,1.7,63.75 +5539,46,30,2.5,111.05,1.7,63.75 +5540,46,30,2.5,111.05,1.7,63.75 +5541,46,30,2.5,111.05,1.7,63.75 +5542,46,30,2.5,111.05,1.7,63.75 +5543,46,30,2.5,111.05,1.7,63.75 +5544,46,30,2.5,111.05,1.7,63.75 +5545,46,30,2.5,111.05,1.7,63.75 +5546,46,30,2.5,111.05,1.7,63.75 +5547,46,30,2.5,111.05,1.7,63.75 +5548,46,30,2.5,111.05,1.7,63.75 +5549,46,30,2.5,111.05,1.7,63.75 +5550,46,30,2.5,111.05,1.7,63.75 +5551,46,30,2.5,111.05,1.7,63.75 +5552,46,30,2.5,111.05,1.7,63.75 +5553,46,30,2.5,111.05,1.7,63.75 +5554,46,30,2.5,111.05,1.7,63.75 +5555,46,30,2.5,111.05,1.7,63.75 +5556,46,30,2.5,111.05,1.7,63.75 +5557,46,30,2.5,111.05,1.7,63.75 +5558,46,30,2.5,111.05,1.7,63.75 +5559,46,30,2.5,111.05,1.7,63.75 +5560,46,30,2.5,111.05,1.7,63.75 +5561,46,30,2.5,111.05,1.7,63.75 +5562,46,30,2.5,111.05,1.7,63.75 +5563,46,30,2.5,111.05,1.7,63.75 +5564,46,30,2.5,111.05,1.7,63.75 +5565,46,30,2.5,111.05,1.7,63.75 +5566,46,30,2.5,111.05,1.7,63.75 +5567,46,30,2.5,111.05,1.7,63.75 +5568,46,30,2.5,111.05,1.7,63.75 +5569,46,30,2.5,111.05,1.7,63.75 +5570,46,30,2.5,111.05,1.7,63.75 +5571,46,30,2.5,111.05,1.7,63.75 +5572,46,30,2.5,111.05,1.7,63.75 +5573,46,30,2.5,111.05,1.7,63.75 +5574,46,30,2.5,111.05,1.7,63.75 +5575,46,30,2.5,111.05,1.7,63.75 +5576,46,30,2.5,111.05,1.7,63.75 +5577,46,30,2.5,111.05,1.7,63.75 +5578,46,30,2.5,111.05,1.7,63.75 +5579,46,30,2.5,111.05,1.7,63.75 +5580,46,30,2.5,111.05,1.7,63.75 +5581,46,30,2.5,111.05,1.7,63.75 +5582,46,30,2.5,111.05,1.7,63.75 +5583,46,30,2.5,111.05,1.7,63.75 +5584,46,30,2.5,111.05,1.7,63.75 +5585,46,30,2.5,111.05,1.7,63.75 +5586,46,30,2.5,111.05,1.7,63.75 +5587,46,30,2.5,111.05,1.7,63.75 +5588,46,30,2.5,111.05,1.7,63.75 +5589,46,30,2.5,111.05,1.7,63.75 +5590,46,30,2.5,111.05,1.7,63.75 +5591,46,30,2.5,111.05,1.7,63.75 +5592,46,30,2.5,111.05,1.7,63.75 +5593,46,30,2.5,111.05,1.7,63.75 +5594,46,30,2.5,111.05,1.7,63.75 +5595,46,30,2.5,111.05,1.7,63.75 +5596,46,30,2.5,111.05,1.7,63.75 +5597,46,30,2.5,111.05,1.7,63.75 +5598,46,30,2.5,111.05,1.7,63.75 +5599,46,30,2.5,111.05,1.7,63.75 +5600,46,30,2.5,111.05,1.7,63.75 +5601,46,30,2.5,111.05,1.7,63.75 +5602,46,30,2.5,111.05,1.7,63.75 +5603,46,30,2.5,111.05,1.7,63.75 +5604,46,30,2.5,111.05,1.7,63.75 +5605,46,30,2.5,111.05,1.7,63.75 +5606,46,30,2.5,111.05,1.7,63.75 +5607,46,30,2.5,111.05,1.7,63.75 +5608,46,30,2.5,111.05,1.7,63.75 +5609,46,30,2.5,111.05,1.7,63.75 +5610,46,30,2.5,111.05,1.7,63.75 +5611,46,30,2.5,111.05,1.7,63.75 +5612,46,30,2.5,111.05,1.7,63.75 +5613,46,30,2.5,111.05,1.7,63.75 +5614,46,30,2.5,111.05,1.7,63.75 +5615,46,30,2.5,111.05,1.7,63.75 +5616,46,30,2.5,111.05,1.7,63.75 +5617,46,30,2.5,111.05,1.7,63.75 +5618,46,30,2.5,111.05,1.7,63.75 +5619,46,30,2.5,111.05,1.7,63.75 +5620,46,30,2.5,111.05,1.7,63.75 +5621,46,30,2.5,111.05,1.7,63.75 +5622,46,30,2.5,111.05,1.7,63.75 +5623,46,30,2.5,111.05,1.7,63.75 +5624,46,30,2.5,111.05,1.7,63.75 +5625,46,30,2.5,111.05,1.7,63.75 +5626,46,30,2.5,111.05,1.7,63.75 +5627,46,30,2.5,111.05,1.7,63.75 +5628,46,30,2.5,111.05,1.7,63.75 +5629,46,30,2.5,111.05,1.7,63.75 +5630,46,30,2.5,111.05,1.7,63.75 +5631,46,30,2.5,111.05,1.7,63.75 +5632,46,30,2.5,111.05,1.7,63.75 +5633,46,30,2.5,111.05,1.7,63.75 +5634,46,30,2.5,111.05,1.7,63.75 +5635,46,30,2.5,111.05,1.7,63.75 +5636,46,30,2.5,111.05,1.7,63.75 +5637,46,30,2.5,111.05,1.7,63.75 +5638,46,30,2.5,111.05,1.7,63.75 +5639,46,30,2.5,111.05,1.7,63.75 +5640,46,30,2.5,111.05,1.7,63.75 +5641,46,30,2.5,111.05,1.7,63.75 +5642,46,30,2.5,111.05,1.7,63.75 +5643,46,30,2.5,111.05,1.7,63.75 +5644,46,30,2.5,111.05,1.7,63.75 +5645,46,30,2.5,111.05,1.7,63.75 +5646,46,30,2.5,111.05,1.7,63.75 +5647,46,30,2.5,111.05,1.7,63.75 +5648,46,30,2.5,111.05,1.7,63.75 +5649,46,30,2.5,111.05,1.7,63.75 +5650,46,30,2.5,111.05,1.7,63.75 +5651,46,30,2.5,111.05,1.7,63.75 +5652,46,30,2.5,111.05,1.7,63.75 +5653,46,30,2.5,111.05,1.7,63.75 +5654,46,30,2.5,111.05,1.7,63.75 +5655,46,30,2.5,111.05,1.7,63.75 +5656,46,30,2.5,111.05,1.7,63.75 +5657,46,30,2.5,111.05,1.7,63.75 +5658,46,30,2.5,111.05,1.7,63.75 +5659,46,30,2.5,111.05,1.7,63.75 +5660,46,30,2.5,111.05,1.7,63.75 +5661,46,30,2.5,111.05,1.7,63.75 +5662,46,30,2.5,111.05,1.7,63.75 +5663,46,30,2.5,111.05,1.7,63.75 +5664,46,30,2.5,111.05,1.7,63.75 +5665,46,30,2.5,111.05,1.7,63.75 +5666,46,30,2.5,111.05,1.7,63.75 +5667,46,30,2.5,111.05,1.7,63.75 +5668,46,30,2.5,111.05,1.7,63.75 +5669,46,30,2.5,111.05,1.7,63.75 +5670,46,30,2.5,111.05,1.7,63.75 +5671,46,30,2.5,111.05,1.7,63.75 +5672,46,30,2.5,111.05,1.7,63.75 +5673,46,30,2.5,111.05,1.7,63.75 +5674,46,30,2.5,111.05,1.7,63.75 +5675,46,30,2.5,111.05,1.7,63.75 +5676,46,30,2.5,111.05,1.7,63.75 +5677,46,30,2.5,111.05,1.7,63.75 +5678,46,30,2.5,111.05,1.7,63.75 +5679,46,30,2.5,111.05,1.7,63.75 +5680,46,30,2.5,111.05,1.7,63.75 +5681,46,30,2.5,111.05,1.7,63.75 +5682,46,30,2.5,111.05,1.7,63.75 +5683,46,30,2.5,111.05,1.7,63.75 +5684,46,30,2.5,111.05,1.7,63.75 +5685,46,30,2.5,111.05,1.7,63.75 +5686,46,30,2.5,111.05,1.7,63.75 +5687,46,30,2.5,111.05,1.7,63.75 +5688,46,30,2.5,111.05,1.7,63.75 +5689,46,30,2.5,111.05,1.7,63.75 +5690,46,30,2.5,111.05,1.7,63.75 +5691,46,30,2.5,111.05,1.7,63.75 +5692,46,30,2.5,111.05,1.7,63.75 +5693,46,30,2.5,111.05,1.7,63.75 +5694,46,30,2.5,111.05,1.7,63.75 +5695,46,30,2.5,111.05,1.7,63.75 +5696,46,30,2.5,111.05,1.7,63.75 +5697,46,30,2.5,111.05,1.7,63.75 +5698,46,30,2.5,111.05,1.7,63.75 +5699,46,30,2.5,111.05,1.7,63.75 +5700,46,30,2.5,111.05,1.7,63.75 +5701,46,30,2.5,111.05,1.7,63.75 +5702,46,30,2.5,111.05,1.7,63.75 +5703,46,30,2.5,111.05,1.7,63.75 +5704,46,30,2.5,111.05,1.7,63.75 +5705,46,30,2.5,111.05,1.7,63.75 +5706,46,30,2.5,111.05,1.7,63.75 +5707,46,30,2.5,111.05,1.7,63.75 +5708,46,30,2.5,111.05,1.7,63.75 +5709,46,30,2.5,111.05,1.7,63.75 +5710,46,30,2.5,111.05,1.7,63.75 +5711,46,30,2.5,111.05,1.7,63.75 +5712,46,30,2.5,111.05,1.7,63.75 +5713,46,30,2.5,111.05,1.7,63.75 +5714,46,30,2.5,111.05,1.7,63.75 +5715,46,30,2.5,111.05,1.7,63.75 +5716,46,30,2.5,111.05,1.7,63.75 +5717,46,30,2.5,111.05,1.7,63.75 +5718,46,30,2.5,111.05,1.7,63.75 +5719,46,30,2.5,111.05,1.7,63.75 +5720,46,30,2.5,111.05,1.7,63.75 +5721,46,30,2.5,111.05,1.7,63.75 +5722,46,30,2.5,111.05,1.7,63.75 +5723,46,30,2.5,111.05,1.7,63.75 +5724,46,30,2.5,111.05,1.7,63.75 +5725,46,30,2.5,111.05,1.7,63.75 +5726,46,30,2.5,111.05,1.7,63.75 +5727,46,30,2.5,111.05,1.7,63.75 +5728,46,30,2.5,111.05,1.7,63.75 +5729,46,30,2.5,111.05,1.7,63.75 +5730,46,30,2.5,111.05,1.7,63.75 +5731,46,30,2.5,111.05,1.7,63.75 +5732,46,30,2.5,111.05,1.7,63.75 +5733,46,30,2.5,111.05,1.7,63.75 +5734,46,30,2.5,111.05,1.7,63.75 +5735,46,30,2.5,111.05,1.7,63.75 +5736,46,30,2.5,111.05,1.7,63.75 +5737,46,30,2.5,111.05,1.7,63.75 +5738,46,30,2.5,111.05,1.7,63.75 +5739,46,30,2.5,111.05,1.7,63.75 +5740,46,30,2.5,111.05,1.7,63.75 +5741,46,30,2.5,111.05,1.7,63.75 +5742,46,30,2.5,111.05,1.7,63.75 +5743,46,30,2.5,111.05,1.7,63.75 +5744,46,30,2.5,111.05,1.7,63.75 +5745,46,30,2.5,111.05,1.7,63.75 +5746,46,30,2.5,111.05,1.7,63.75 +5747,46,30,2.5,111.05,1.7,63.75 +5748,46,30,2.5,111.05,1.7,63.75 +5749,46,30,2.5,111.05,1.7,63.75 +5750,46,30,2.5,111.05,1.7,63.75 +5751,46,30,2.5,111.05,1.7,63.75 +5752,46,30,2.5,111.05,1.7,63.75 +5753,46,30,2.5,111.05,1.7,63.75 +5754,46,30,2.5,111.05,1.7,63.75 +5755,46,30,2.5,111.05,1.7,63.75 +5756,46,30,2.5,111.05,1.7,63.75 +5757,46,30,2.5,111.05,1.7,63.75 +5758,46,30,2.5,111.05,1.7,63.75 +5759,46,30,2.5,111.05,1.7,63.75 +5760,46,30,2.5,111.05,1.7,63.75 +5761,46,30,2.5,111.05,1.7,63.75 +5762,46,30,2.5,111.05,1.7,63.75 +5763,46,30,2.5,111.05,1.7,63.75 +5764,46,30,2.5,111.05,1.7,63.75 +5765,46,30,2.5,111.05,1.7,63.75 +5766,46,30,2.5,111.05,1.7,63.75 +5767,46,30,2.5,111.05,1.7,63.75 +5768,46,30,2.5,111.05,1.7,63.75 +5769,46,30,2.5,111.05,1.7,63.75 +5770,46,30,2.5,111.05,1.7,63.75 +5771,46,30,2.5,111.05,1.7,63.75 +5772,46,30,2.5,111.05,1.7,63.75 +5773,46,30,2.5,111.05,1.7,63.75 +5774,46,30,2.5,111.05,1.7,63.75 +5775,46,30,2.5,111.05,1.7,63.75 +5776,46,30,2.5,111.05,1.7,63.75 +5777,46,30,2.5,111.05,1.7,63.75 +5778,46,30,2.5,111.05,1.7,63.75 +5779,46,30,2.5,111.05,1.7,63.75 +5780,46,30,2.5,111.05,1.7,63.75 +5781,46,30,2.5,111.05,1.7,63.75 +5782,46,30,2.5,111.05,1.7,63.75 +5783,46,30,2.5,111.05,1.7,63.75 +5784,46,30,2.5,111.05,1.7,63.75 +5785,46,30,2.5,111.05,1.7,63.75 +5786,46,30,2.5,111.05,1.7,63.75 +5787,46,30,2.5,111.05,1.7,63.75 +5788,46,30,2.5,111.05,1.7,63.75 +5789,46,30,2.5,111.05,1.7,63.75 +5790,46,30,2.5,111.05,1.7,63.75 +5791,46,30,2.5,111.05,1.7,63.75 +5792,46,30,2.5,111.05,1.7,63.75 +5793,46,30,2.5,111.05,1.7,63.75 +5794,46,30,2.5,111.05,1.7,63.75 +5795,46,30,2.5,111.05,1.7,63.75 +5796,46,30,2.5,111.05,1.7,63.75 +5797,46,30,2.5,111.05,1.7,63.75 +5798,46,30,2.5,111.05,1.7,63.75 +5799,46,30,2.5,111.05,1.7,63.75 +5800,46,30,2.5,111.05,1.7,63.75 +5801,46,30,2.5,111.05,1.7,63.75 +5802,46,30,2.5,111.05,1.7,63.75 +5803,46,30,2.5,111.05,1.7,63.75 +5804,46,30,2.5,111.05,1.7,63.75 +5805,46,30,2.5,111.05,1.7,63.75 +5806,46,30,2.5,111.05,1.7,63.75 +5807,46,30,2.5,111.05,1.7,63.75 +5808,46,30,2.5,111.05,1.7,63.75 +5809,46,30,2.5,111.05,1.7,63.75 +5810,46,30,2.5,111.05,1.7,63.75 +5811,46,30,2.5,111.05,1.7,63.75 +5812,46,30,2.5,111.05,1.7,63.75 +5813,46,30,2.5,111.05,1.7,63.75 +5814,46,30,2.5,111.05,1.7,63.75 +5815,46,30,2.5,111.05,1.7,63.75 +5816,46,30,2.5,111.05,1.7,63.75 +5817,46,30,2.5,111.05,1.7,63.75 +5818,46,30,2.5,111.05,1.7,63.75 +5819,46,30,2.5,111.05,1.7,63.75 +5820,46,30,2.5,111.05,1.7,63.75 +5821,46,30,2.5,111.05,1.7,63.75 +5822,46,30,2.5,111.05,1.7,63.75 +5823,46,30,2.5,111.05,1.7,63.75 +5824,46,30,2.5,111.05,1.7,63.75 +5825,46,30,2.5,111.05,1.7,63.75 +5826,46,30,2.5,111.05,1.7,63.75 +5827,46,30,2.5,111.05,1.7,63.75 +5828,46,30,2.5,111.05,1.7,63.75 +5829,46,30,2.5,111.05,1.7,63.75 +5830,46,30,2.5,111.05,1.7,63.75 +5831,46,30,2.5,111.05,1.7,63.75 +5832,46,30,2.5,111.05,1.7,63.75 +5833,46,30,2.5,111.05,1.7,63.75 +5834,46,30,2.5,111.05,1.7,63.75 +5835,46,30,2.5,111.05,1.7,63.75 +5836,46,30,2.5,111.05,1.7,63.75 +5837,46,30,2.5,111.05,1.7,63.75 +5838,46,30,2.5,111.05,1.7,63.75 +5839,46,30,2.5,111.05,1.7,63.75 +5840,46,30,2.5,111.05,1.7,63.75 +5841,46,30,2.5,111.05,1.7,63.75 +5842,46,30,2.5,111.05,1.7,63.75 +5843,46,30,2.5,111.05,1.7,63.75 +5844,46,30,2.5,111.05,1.7,63.75 +5845,46,30,2.5,111.05,1.7,63.75 +5846,46,30,2.5,111.05,1.7,63.75 +5847,46,30,2.5,111.05,1.7,63.75 +5848,46,30,2.5,111.05,1.7,63.75 +5849,46,30,2.5,111.05,1.7,63.75 +5850,46,30,2.5,111.05,1.7,63.75 +5851,46,30,2.5,111.05,1.7,63.75 +5852,46,30,2.5,111.05,1.7,63.75 +5853,46,30,2.5,111.05,1.7,63.75 +5854,46,30,2.5,111.05,1.7,63.75 +5855,46,30,2.5,111.05,1.7,63.75 +5856,46,30,2.5,111.05,1.7,63.75 +5857,46,30,2.5,111.05,1.7,63.75 +5858,46,30,2.5,111.05,1.7,63.75 +5859,46,30,2.5,111.05,1.7,63.75 +5860,46,30,2.5,111.05,1.7,63.75 +5861,46,30,2.5,111.05,1.7,63.75 +5862,46,30,2.5,111.05,1.7,63.75 +5863,46,30,2.5,111.05,1.7,63.75 +5864,46,30,2.5,111.05,1.7,63.75 +5865,46,30,2.5,111.05,1.7,63.75 +5866,46,30,2.5,111.05,1.7,63.75 +5867,46,30,2.5,111.05,1.7,63.75 +5868,46,30,2.5,111.05,1.7,63.75 +5869,46,30,2.5,111.05,1.7,63.75 +5870,46,30,2.5,111.05,1.7,63.75 +5871,46,30,2.5,111.05,1.7,63.75 +5872,46,30,2.5,111.05,1.7,63.75 +5873,46,30,2.5,111.05,1.7,63.75 +5874,46,30,2.5,111.05,1.7,63.75 +5875,46,30,2.5,111.05,1.7,63.75 +5876,46,30,2.5,111.05,1.7,63.75 +5877,46,30,2.5,111.05,1.7,63.75 +5878,46,30,2.5,111.05,1.7,63.75 +5879,46,30,2.5,111.05,1.7,63.75 +5880,46,30,2.5,111.05,1.7,63.75 +5881,46,30,2.5,111.05,1.7,63.75 +5882,46,30,2.5,111.05,1.7,63.75 +5883,46,30,2.5,111.05,1.7,63.75 +5884,46,30,2.5,111.05,1.7,63.75 +5885,46,30,2.5,111.05,1.7,63.75 +5886,46,30,2.5,111.05,1.7,63.75 +5887,46,30,2.5,111.05,1.7,63.75 +5888,46,30,2.5,111.05,1.7,63.75 +5889,46,30,2.5,111.05,1.7,63.75 +5890,46,30,2.5,111.05,1.7,63.75 +5891,46,30,2.5,111.05,1.7,63.75 +5892,46,30,2.5,111.05,1.7,63.75 +5893,46,30,2.5,111.05,1.7,63.75 +5894,46,30,2.5,111.05,1.7,63.75 +5895,46,30,2.5,111.05,1.7,63.75 +5896,46,30,2.5,111.05,1.7,63.75 +5897,46,30,2.5,111.05,1.7,63.75 +5898,46,30,2.5,111.05,1.7,63.75 +5899,46,30,2.5,111.05,1.7,63.75 +5900,46,30,2.5,111.05,1.7,63.75 +5901,46,30,2.5,111.05,1.7,63.75 +5902,46,30,2.5,111.05,1.7,63.75 +5903,46,30,2.5,111.05,1.7,63.75 +5904,46,30,2.5,111.05,1.7,63.75 +5905,46,30,2.5,111.05,1.7,63.75 +5906,46,30,2.5,111.05,1.7,63.75 +5907,46,30,2.5,111.05,1.7,63.75 +5908,46,30,2.5,111.05,1.7,63.75 +5909,46,30,2.5,111.05,1.7,63.75 +5910,46,30,2.5,111.05,1.7,63.75 +5911,46,30,2.5,111.05,1.7,63.75 +5912,46,30,2.5,111.05,1.7,63.75 +5913,46,30,2.5,111.05,1.7,63.75 +5914,46,30,2.5,111.05,1.7,63.75 +5915,46,30,2.5,111.05,1.7,63.75 +5916,46,30,2.5,111.05,1.7,63.75 +5917,46,30,2.5,111.05,1.7,63.75 +5918,46,30,2.5,111.05,1.7,63.75 +5919,46,30,2.5,111.05,1.7,63.75 +5920,46,30,2.5,111.05,1.7,63.75 +5921,46,30,2.5,111.05,1.7,63.75 +5922,46,30,2.5,111.05,1.7,63.75 +5923,46,30,2.5,111.05,1.7,63.75 +5924,46,30,2.5,111.05,1.7,63.75 +5925,46,30,2.5,111.05,1.7,63.75 +5926,46,30,2.5,111.05,1.7,63.75 +5927,46,30,2.5,111.05,1.7,63.75 +5928,46,30,2.5,111.05,1.7,63.75 +5929,46,30,2.5,111.05,1.7,63.75 +5930,46,30,2.5,111.05,1.7,63.75 +5931,46,30,2.5,111.05,1.7,63.75 +5932,46,30,2.5,111.05,1.7,63.75 +5933,46,30,2.5,111.05,1.7,63.75 +5934,46,30,2.5,111.05,1.7,63.75 +5935,46,30,2.5,111.05,1.7,63.75 +5936,46,30,2.5,111.05,1.7,63.75 +5937,46,30,2.5,111.05,1.7,63.75 +5938,46,30,2.5,111.05,1.7,63.75 +5939,46,30,2.5,111.05,1.7,63.75 +5940,46,30,2.5,111.05,1.7,63.75 +5941,46,30,2.5,111.05,1.7,63.75 +5942,46,30,2.5,111.05,1.7,63.75 +5943,46,30,2.5,111.05,1.7,63.75 +5944,46,30,2.5,111.05,1.7,63.75 +5945,46,30,2.5,111.05,1.7,63.75 +5946,46,30,2.5,111.05,1.7,63.75 +5947,46,30,2.5,111.05,1.7,63.75 +5948,46,30,2.5,111.05,1.7,63.75 +5949,46,30,2.5,111.05,1.7,63.75 +5950,46,30,2.5,111.05,1.7,63.75 +5951,46,30,2.5,111.05,1.7,63.75 +5952,46,30,2.5,111.05,1.7,63.75 +5953,46,30,2.5,111.05,1.7,63.75 +5954,46,30,2.5,111.05,1.7,63.75 +5955,46,30,2.5,111.05,1.7,63.75 +5956,46,30,2.5,111.05,1.7,63.75 +5957,46,30,2.5,111.05,1.7,63.75 +5958,46,30,2.5,111.05,1.7,63.75 +5959,46,30,2.5,111.05,1.7,63.75 +5960,46,30,2.5,111.05,1.7,63.75 +5961,46,30,2.5,111.05,1.7,63.75 +5962,46,30,2.5,111.05,1.7,63.75 +5963,46,30,2.5,111.05,1.7,63.75 +5964,46,30,2.5,111.05,1.7,63.75 +5965,46,30,2.5,111.05,1.7,63.75 +5966,46,30,2.5,111.05,1.7,63.75 +5967,46,30,2.5,111.05,1.7,63.75 +5968,46,30,2.5,111.05,1.7,63.75 +5969,46,30,2.5,111.05,1.7,63.75 +5970,46,30,2.5,111.05,1.7,63.75 +5971,46,30,2.5,111.05,1.7,63.75 +5972,46,30,2.5,111.05,1.7,63.75 +5973,46,30,2.5,111.05,1.7,63.75 +5974,46,30,2.5,111.05,1.7,63.75 +5975,46,30,2.5,111.05,1.7,63.75 +5976,46,30,2.5,111.05,1.7,63.75 +5977,46,30,2.5,111.05,1.7,63.75 +5978,46,30,2.5,111.05,1.7,63.75 +5979,46,30,2.5,111.05,1.7,63.75 +5980,46,30,2.5,111.05,1.7,63.75 +5981,46,30,2.5,111.05,1.7,63.75 +5982,46,30,2.5,111.05,1.7,63.75 +5983,46,30,2.5,111.05,1.7,63.75 +5984,46,30,2.5,111.05,1.7,63.75 +5985,46,30,2.5,111.05,1.7,63.75 +5986,46,30,2.5,111.05,1.7,63.75 +5987,46,30,2.5,111.05,1.7,63.75 +5988,46,30,2.5,111.05,1.7,63.75 +5989,46,30,2.5,111.05,1.7,63.75 +5990,46,30,2.5,111.05,1.7,63.75 +5991,46,30,2.5,111.05,1.7,63.75 +5992,46,30,2.5,111.05,1.7,63.75 +5993,46,30,2.5,111.05,1.7,63.75 +5994,46,30,2.5,111.05,1.7,63.75 +5995,46,30,2.5,111.05,1.7,63.75 +5996,46,30,2.5,111.05,1.7,63.75 +5997,46,30,2.5,111.05,1.7,63.75 +5998,46,30,2.5,111.05,1.7,63.75 +5999,46,30,2.5,111.05,1.7,63.75 +6000,46,30,2.5,111.05,1.7,63.75 diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/test3.csv.original b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/test3.csv.original new file mode 100644 index 0000000..44d05b7 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/test3.csv.original @@ -0,0 +1,6002 @@ +#t (100ms),EW2-Voset (kV),EW3-VOset (kV),EW101-MC-Ioset (A),EW101-GC-Ioset (A),FPS101-Voset (V) +0,20,15,111.3,1.7,53.2 +1,20.5,14.5,111.3,1.7,62 +2,21,14,111.3,1.7,62 +3,21.5,13.5,111.3,1.7,62 +4,22,13,111.3,1.7,62 +5,22.5,12.5,111.3,1.7,62 +6,23,12,111.3,1.7,62 +7,23.5,11.5,111.3,1.7,62 +8,24,11,111.3,1.7,62 +9,24.5,10.5,111.3,1.7,62 +10,25,10,111.3,1.7,62 +11,25.5,9.5,111.3,1.7,62 +12,26,9,111.3,1.7,62 +13,26.5,8.5,111.3,1.7,62 +14,27,8,111.3,1.7,62 +15,27.5,7.5,111.3,1.7,62 +16,28,7,111.3,1.7,62 +17,28.5,6.5,111.3,1.7,62 +18,29,6,111.3,1.7,62 +19,29.5,5.5,111.3,1.7,62 +20,30,5,111.3,1.7,62 +21,30,4.5,111.3,1.7,62 +22,30,4,111.3,1.7,62 +23,30,4,111.3,1.7,62 +24,30,4,111.3,1.7,62 +25,30,4,111.3,1.7,62 +26,30,4,111.3,1.7,62 +27,30,4,111.3,1.7,62 +28,30,4,111.3,1.7,62 +29,30,4,111.3,1.7,62 +30,30,4,111.3,1.7,62 +31,30,3.4,111.3,1.7,62 +32,30,3.4,111.3,1.7,62 +33,30,3.4,111.3,1.7,62 +34,30,3.4,111.3,1.7,62 +35,30,3.4,111.3,1.7,62 +36,30,3.4,111.3,1.7,62 +37,30,3.4,111.3,1.7,62 +38,30,3.4,111.3,1.7,62 +39,30,3.4,111.3,1.7,62 +40,30,3.4,111.3,1.7,62 +41,30,3.4,111.3,1.7,62 +42,30,3.4,111.3,1.7,62 +43,30,3.4,111.3,1.7,62 +44,30,3.4,111.3,1.7,62 +45,30,3.4,111.3,1.7,62 +46,30,3.4,111.3,1.7,62 +47,30,3.4,111.3,1.7,62 +48,30,3.4,111.3,1.7,62 +49,30,3.4,111.3,1.7,62 +50,30,3.4,111.3,1.7,62 +51,30,3.4,111.3,1.7,62.1 +52,30,3.4,111.3,1.7,62.2 +53,30,3.4,111.3,1.7,62.3 +54,30,3.4,111.3,1.7,62.4 +55,30,3.4,111.3,1.7,62.5 +56,30,3.4,111.3,1.7,62.6 +57,30,3.4,111.3,1.7,62.7 +58,30,3.4,111.3,1.7,62.8 +59,30,3.4,111.3,1.7,62.9 +60,30,3.4,111.3,1.7,63 +61,30,3,111.3,1.7,63.1 +62,30,3,111.3,1.7,63.2 +63,30,3,111.3,1.7,63.3 +64,30,3,111.3,1.7,63.4 +65,30,3,111.3,1.7,63.5 +66,30,3,111.3,1.7,63.6 +67,30,3,111.3,1.7,63.7 +68,30,3,111.3,1.7,63.8 +69,30,3,111.3,1.7,63.9 +70,30,3,111.3,1.7,64 +71,30,3,111.3,1.7,64.1 +72,30,3,111.3,1.7,64.2 +73,30,3,111.3,1.7,64.3 +74,30,3,111.3,1.7,64.4 +75,30,3,111.3,1.7,64.5 +76,30,3,111.3,1.7,64.6 +77,30,3,111.3,1.7,64.7 +78,30,3,111.3,1.7,64.8 +79,30,3,111.3,1.7,64.9 +80,30,3,111.3,1.7,65 +81,30,3,111.3,1.7,65.1 +82,30,3,111.3,1.7,65.2 +83,30,3,111.3,1.7,65.3 +84,30,3,111.3,1.7,65.4 +85,30,3,111.3,1.7,65.5 +86,30,3,111.3,1.7,65.6 +87,30,3,111.3,1.7,65.7 +88,30,3,111.3,1.7,65.8 +89,30,3,111.3,1.7,65.9 +90,30,3,111.3,1.7,66 +91,30,3,111.3,1.7,66.1 +92,30,3,111.3,1.7,66.2 +93,30,3,111.3,1.7,66.3 +94,30,3,111.3,1.7,66.4 +95,30,3,111.3,1.7,66.5 +96,30,3,111.3,1.7,66.6 +97,30,3,111.3,1.7,66.7 +98,30,3,111.3,1.7,66.8 +99,30,3,111.3,1.7,66.9 +100,30,3,111.3,1.7,67 +101,30,3,111.3,1.7,67 +102,30,3,111.3,1.7,67 +103,30,3,111.3,1.7,67 +104,30,3,111.3,1.7,67 +105,30,3,111.3,1.7,67 +106,30,3,111.3,1.7,67 +107,30,3,111.3,1.7,67 +108,30,3,111.3,1.7,67 +109,30,3,111.3,1.7,67 +110,30,3,111.3,1.7,67 +111,30,3,111.3,1.7,67 +112,30,3,111.3,1.7,67 +113,30,3,111.3,1.7,67 +114,30,3,111.3,1.7,67 +115,30,3,111.3,1.7,67 +116,30,3,111.3,1.7,67 +117,30,3,111.3,1.7,67 +118,30,3,111.3,1.7,67 +119,30,3,111.3,1.7,67 +120,30,3,111.3,1.7,67 +121,30,3,111.3,1.7,67 +122,30,3,111.3,1.7,67 +123,30,3,111.3,1.7,67 +124,30,3,111.3,1.7,67 +125,30,3,111.3,1.7,67 +126,30,3,111.3,1.7,67 +127,30,3,111.3,1.7,67 +128,30,3,111.3,1.7,67 +129,30,3,111.3,1.7,67 +130,30,3,111.3,1.7,67 +131,30,3,111.3,1.7,67 +132,30,3,111.3,1.7,67 +133,30,3,111.3,1.7,67 +134,30,3,111.3,1.7,67 +135,30,3,111.3,1.7,67 +136,30,3,111.3,1.7,67 +137,30,3,111.3,1.7,67 +138,30,3,111.3,1.7,67 +139,30,3,111.3,1.7,67 +140,30,3,111.3,1.7,67 +141,30,3,111.3,1.7,67 +142,30,3,111.3,1.7,67 +143,30,3,111.3,1.7,67 +144,30,3,111.3,1.7,67 +145,30,3,111.3,1.7,67 +146,30,3,111.3,1.7,67 +147,30,3,111.3,1.7,67 +148,30,3,111.3,1.7,67 +149,30,3,111.3,1.7,67 +150,30,3,111.3,1.7,67 +151,30,3,111.3,1.7,67 +152,30,3,111.3,1.7,67 +153,30,3,111.3,1.7,67 +154,30,3,111.3,1.7,67 +155,30,3,111.3,1.7,67 +156,30,3,111.3,1.7,67 +157,30,3,111.3,1.7,67 +158,30,3,111.3,1.7,67 +159,30,3,111.3,1.7,67 +160,30,3,111.3,1.7,67 +161,30,3,111.3,1.7,67 +162,30,3,111.3,1.7,67 +163,30,3,111.3,1.7,67 +164,30,3,111.3,1.7,67 +165,30,3,111.3,1.7,67 +166,30,3,111.3,1.7,67 +167,30,3,111.3,1.7,67 +168,30,3,111.3,1.7,67 +169,30,3,111.3,1.7,67 +170,30,3,111.3,1.7,67 +171,30,3,111.3,1.7,67 +172,30,3,111.3,1.7,67 +173,30,3,111.3,1.7,67 +174,30,3,111.3,1.7,67 +175,30,3,111.3,1.7,67 +176,30,3,111.3,1.7,67 +177,30,3,111.3,1.7,67 +178,30,3,111.3,1.7,67 +179,30,3,111.3,1.7,67 +180,30,3,111.3,1.7,67 +181,30,3,111.3,1.7,67 +182,30,3,111.3,1.7,67 +183,30,3,111.3,1.7,67 +184,30,3,111.3,1.7,67 +185,30,3,111.3,1.7,67 +186,30,3,111.3,1.7,67 +187,30,3,111.3,1.7,67 +188,30,3,111.3,1.7,67 +189,30,3,111.3,1.7,67 +190,30,3,111.3,1.7,67 +191,30,3,111.3,1.7,67 +192,30,3,111.3,1.7,67 +193,30,3,111.3,1.7,67 +194,30,3,111.3,1.7,67 +195,30,3,111.3,1.7,67 +196,30,3,111.3,1.7,67 +197,30,3,111.3,1.7,67 +198,30,3,111.3,1.7,67 +199,30,3,111.3,1.7,67 +200,30,2.9,111.3,1.7,67 +201,30,2.9,111.05,1.7,67 +202,30,2.9,111.05,1.7,67 +203,30,2.9,111.05,1.7,67 +204,30,2.9,111.05,1.7,67 +205,30,2.9,111.05,1.7,67 +206,30,2.9,111.05,1.7,67 +207,30,2.9,111.05,1.7,67 +208,30,2.9,111.05,1.7,67 +209,30,2.9,111.05,1.7,67 +210,30,2.9,111.05,1.7,67 +211,30,2.9,111.05,1.7,67 +212,30,2.9,111.05,1.7,67 +213,30,2.9,111.05,1.7,67 +214,30,2.9,111.05,1.7,67 +215,30,2.9,111.05,1.7,67 +216,30,2.9,111.05,1.7,67 +217,30,2.9,111.05,1.7,67 +218,30,2.9,111.05,1.7,67 +219,30,2.9,111.05,1.7,67 +220,30,2.9,111.05,1.7,67 +221,30,2.9,111.05,1.7,67 +222,30,2.9,111.05,1.7,67 +223,30,2.9,111.05,1.7,67 +224,30,2.9,111.05,1.7,67 +225,30,2.9,111.05,1.7,67 +226,30,2.9,111.05,1.7,67 +227,30,2.9,111.05,1.7,67 +228,30,2.9,111.05,1.7,67 +229,30,2.9,111.05,1.7,67 +230,30,2.9,111.05,1.7,67 +231,30,2.9,111.05,1.7,67 +232,30,2.9,111.05,1.7,67 +233,30,2.9,111.05,1.7,67 +234,30,2.9,111.05,1.7,67 +235,30,2.9,111.05,1.7,67 +236,30,2.9,111.05,1.7,67 +237,30,2.9,111.05,1.7,67 +238,30,2.9,111.05,1.7,67 +239,30,2.9,111.05,1.7,67 +240,30,2.9,111.05,1.7,67 +241,30,2.9,111.05,1.7,67 +242,30,2.9,111.05,1.7,67 +243,30,2.9,111.05,1.7,67 +244,30,2.9,111.05,1.7,67 +245,30,2.9,111.05,1.7,67 +246,30,2.9,111.05,1.7,67 +247,30,2.9,111.05,1.7,67 +248,30,2.9,111.05,1.7,67 +249,30,2.9,111.05,1.7,67 +250,30,2.8,111.05,1.7,67 +251,30,2.8,111.05,1.7,67 +252,30,2.8,111.05,1.7,67 +253,30,2.8,111.05,1.7,67 +254,30,2.8,111.05,1.7,67 +255,30,2.8,111.05,1.7,67 +256,30,2.8,111.05,1.7,67 +257,30,2.8,111.05,1.7,67 +258,30,2.8,111.05,1.7,67 +259,30,2.8,111.05,1.7,67 +260,30,2.8,111.05,1.7,67 +261,30,2.8,111.05,1.7,67 +262,30,2.8,111.05,1.7,67 +263,30,2.8,111.05,1.7,67 +264,30,2.8,111.05,1.7,67 +265,30,2.8,111.05,1.7,67 +266,30,2.8,111.05,1.7,67 +267,30,2.8,111.05,1.7,67 +268,30,2.8,111.05,1.7,67 +269,30,2.8,111.05,1.7,67 +270,30,2.8,111.05,1.7,67 +271,30,2.8,111.05,1.7,67 +272,30,2.8,111.05,1.7,67 +273,30,2.8,111.05,1.7,67 +274,30,2.8,111.05,1.7,67 +275,30,2.8,111.05,1.7,67 +276,30,2.8,111.05,1.7,67 +277,30,2.8,111.05,1.7,67 +278,30,2.8,111.05,1.7,67 +279,30,2.8,111.05,1.7,67 +280,30,2.8,111.05,1.7,67 +281,30,2.8,111.05,1.7,67 +282,30,2.8,111.05,1.7,67 +283,30,2.8,111.05,1.7,67 +284,30,2.8,111.05,1.7,67 +285,30,2.8,111.05,1.7,67 +286,30,2.8,111.05,1.7,67 +287,30,2.8,111.05,1.7,67 +288,30,2.8,111.05,1.7,67 +289,30,2.8,111.05,1.7,67 +290,30,2.8,111.05,1.7,67 +291,30,2.8,111.05,1.7,67 +292,30,2.8,111.05,1.7,67 +293,30,2.8,111.05,1.7,67 +294,30,2.8,111.05,1.7,67 +295,30,2.8,111.05,1.7,67 +296,30,2.8,111.05,1.7,67 +297,30,2.8,111.05,1.7,67 +298,30,2.8,111.05,1.7,67 +299,30,2.8,111.05,1.7,67 +300,30,2.7,111.05,1.7,67 +301,30,2.7,111.05,1.7,67 +302,30,2.7,111.05,1.7,67 +303,30,2.7,111.05,1.7,67 +304,30,2.7,111.05,1.7,67 +305,30,2.7,111.05,1.7,67 +306,30,2.7,111.05,1.7,67 +307,30,2.7,111.05,1.7,67 +308,30,2.7,111.05,1.7,67 +309,30,2.7,111.05,1.7,67 +310,30,2.7,111.05,1.7,67 +311,30,2.7,111.05,1.7,67 +312,30,2.7,111.05,1.7,67 +313,30,2.7,111.05,1.7,67 +314,30,2.7,111.05,1.7,67 +315,30,2.7,111.05,1.7,67 +316,30,2.7,111.05,1.7,67 +317,30,2.7,111.05,1.7,67 +318,30,2.7,111.05,1.7,67 +319,30,2.7,111.05,1.7,67 +320,30,2.7,111.05,1.7,67 +321,30,2.7,111.05,1.7,67 +322,30,2.7,111.05,1.7,67 +323,30,2.7,111.05,1.7,67 +324,30,2.7,111.05,1.7,67 +325,30,2.7,111.05,1.7,67 +326,30,2.7,111.05,1.7,67 +327,30,2.7,111.05,1.7,67 +328,30,2.7,111.05,1.7,67 +329,30,2.7,111.05,1.7,67 +330,30,2.7,111.05,1.7,67 +331,30,2.7,111.05,1.7,67 +332,30,2.7,111.05,1.7,67 +333,30,2.7,111.05,1.7,67 +334,30,2.7,111.05,1.7,67 +335,30,2.7,111.05,1.7,67 +336,30,2.7,111.05,1.7,67 +337,30,2.7,111.05,1.7,67 +338,30,2.7,111.05,1.7,67 +339,30,2.7,111.05,1.7,67 +340,30,2.7,111.05,1.7,67 +341,30,2.7,111.05,1.7,67 +342,30,2.7,111.05,1.7,67 +343,30,2.7,111.05,1.7,67 +344,30,2.7,111.05,1.7,67 +345,30,2.7,111.05,1.7,67 +346,30,2.7,111.05,1.7,67 +347,30,2.7,111.05,1.7,67 +348,30,2.7,111.05,1.7,67 +349,30,2.7,111.05,1.7,67 +350,30,2.7,111.05,1.7,67 +351,30,2.7,111.05,1.7,67 +352,30,2.7,111.05,1.7,67 +353,30,2.7,111.05,1.7,67 +354,30,2.7,111.05,1.7,67 +355,30,2.7,111.05,1.7,67 +356,30,2.7,111.05,1.7,67 +357,30,2.7,111.05,1.7,67 +358,30,2.7,111.05,1.7,67 +359,30,2.7,111.05,1.7,67 +360,30,2.7,111.05,1.7,67 +361,30,2.7,111.05,1.7,67 +362,30,2.7,111.05,1.7,67 +363,30,2.7,111.05,1.7,67 +364,30,2.7,111.05,1.7,67 +365,30,2.7,111.05,1.7,67 +366,30,2.7,111.05,1.7,67 +367,30,2.7,111.05,1.7,67 +368,30,2.7,111.05,1.7,67 +369,30,2.7,111.05,1.7,67 +370,30,2.7,111.05,1.7,67 +371,30,2.7,111.05,1.7,67 +372,30,2.7,111.05,1.7,67 +373,30,2.7,111.05,1.7,67 +374,30,2.7,111.05,1.7,67 +375,30,2.7,111.05,1.7,67 +376,30,2.7,111.05,1.7,67 +377,30,2.7,111.05,1.7,67 +378,30,2.7,111.05,1.7,67 +379,30,2.7,111.05,1.7,67 +380,30,2.7,111.05,1.7,67 +381,30,2.7,111.05,1.7,67 +382,30,2.7,111.05,1.7,67 +383,30,2.7,111.05,1.7,67 +384,30,2.7,111.05,1.7,67 +385,30,2.7,111.05,1.7,67 +386,30,2.7,111.05,1.7,67 +387,30,2.7,111.05,1.7,67 +388,30,2.7,111.05,1.7,67 +389,30,2.7,111.05,1.7,67 +390,30,2.7,111.05,1.7,67 +391,30,2.7,111.05,1.7,67 +392,30,2.7,111.05,1.7,67 +393,30,2.7,111.05,1.7,67 +394,30,2.7,111.05,1.7,67 +395,30,2.7,111.05,1.7,67 +396,30,2.7,111.05,1.7,67 +397,30,2.7,111.05,1.7,67 +398,30,2.7,111.05,1.7,67 +399,30,2.7,111.05,1.7,67 +400,30,2.7,111.05,1.7,67 +401,30,2.7,111.05,1.7,66.9975 +402,30,2.7,111.05,1.7,66.995 +403,30,2.7,111.05,1.7,66.9925 +404,30,2.7,111.05,1.7,66.99 +405,30,2.7,111.05,1.7,66.9875 +406,30,2.7,111.05,1.7,66.985 +407,30,2.7,111.05,1.7,66.9825 +408,30,2.7,111.05,1.7,66.98 +409,30,2.7,111.05,1.7,66.9775 +410,30,2.7,111.05,1.7,66.975 +411,30,2.7,111.05,1.7,66.9725 +412,30,2.7,111.05,1.7,66.97 +413,30,2.7,111.05,1.7,66.9675 +414,30,2.7,111.05,1.7,66.965 +415,30,2.7,111.05,1.7,66.9625 +416,30,2.7,111.05,1.7,66.96 +417,30,2.7,111.05,1.7,66.9575 +418,30,2.7,111.05,1.7,66.955 +419,30,2.7,111.05,1.7,66.9525 +420,30,2.7,111.05,1.7,66.95 +421,30,2.7,111.05,1.7,66.9475 +422,30,2.7,111.05,1.7,66.945 +423,30,2.7,111.05,1.7,66.9425 +424,30,2.7,111.05,1.7,66.94 +425,30,2.7,111.05,1.7,66.9375 +426,30,2.7,111.05,1.7,66.935 +427,30,2.7,111.05,1.7,66.9325 +428,30,2.7,111.05,1.7,66.93 +429,30,2.7,111.05,1.7,66.9275 +430,30,2.7,111.05,1.7,66.925 +431,30,2.7,111.05,1.7,66.9225 +432,30,2.7,111.05,1.7,66.92 +433,30,2.7,111.05,1.7,66.9175 +434,30,2.7,111.05,1.7,66.915 +435,30,2.7,111.05,1.7,66.9125 +436,30,2.7,111.05,1.7,66.91 +437,30,2.7,111.05,1.7,66.9075 +438,30,2.7,111.05,1.7,66.905 +439,30,2.7,111.05,1.7,66.9025 +440,30,2.7,111.05,1.7,66.9 +441,30,2.7,111.05,1.7,66.8975 +442,30,2.7,111.05,1.7,66.895 +443,30,2.7,111.05,1.7,66.8925 +444,30,2.7,111.05,1.7,66.89 +445,30,2.7,111.05,1.7,66.8875 +446,30,2.7,111.05,1.7,66.885 +447,30,2.7,111.05,1.7,66.8825 +448,30,2.7,111.05,1.7,66.88 +449,30,2.7,111.05,1.7,66.8775 +450,30,2.7,111.05,1.7,66.875 +451,30,2.7,111.05,1.7,66.8725 +452,30,2.7,111.05,1.7,66.87 +453,30,2.7,111.05,1.7,66.8675 +454,30,2.7,111.05,1.7,66.865 +455,30,2.7,111.05,1.7,66.8625 +456,30,2.7,111.05,1.7,66.86 +457,30,2.7,111.05,1.7,66.8575 +458,30,2.7,111.05,1.7,66.855 +459,30,2.7,111.05,1.7,66.8525 +460,30,2.7,111.05,1.7,66.85 +461,30,2.7,111.05,1.7,66.8475 +462,30,2.7,111.05,1.7,66.845 +463,30,2.7,111.05,1.7,66.8425 +464,30,2.7,111.05,1.7,66.84 +465,30,2.7,111.05,1.7,66.8375 +466,30,2.7,111.05,1.7,66.835 +467,30,2.7,111.05,1.7,66.8325 +468,30,2.7,111.05,1.7,66.83 +469,30,2.7,111.05,1.7,66.8275 +470,30,2.7,111.05,1.7,66.825 +471,30,2.7,111.05,1.7,66.8225 +472,30,2.7,111.05,1.7,66.82 +473,30,2.7,111.05,1.7,66.8175 +474,30,2.7,111.05,1.7,66.815 +475,30,2.7,111.05,1.7,66.8125 +476,30,2.7,111.05,1.7,66.81 +477,30,2.7,111.05,1.7,66.8075 +478,30,2.7,111.05,1.7,66.805 +479,30,2.7,111.05,1.7,66.8025 +480,30,2.7,111.05,1.7,66.8 +481,30,2.7,111.05,1.7,66.7975 +482,30,2.7,111.05,1.7,66.795 +483,30,2.7,111.05,1.7,66.7925 +484,30,2.7,111.05,1.7,66.79 +485,30,2.7,111.05,1.7,66.7875 +486,30,2.7,111.05,1.7,66.785 +487,30,2.7,111.05,1.7,66.7825 +488,30,2.7,111.05,1.7,66.78 +489,30,2.7,111.05,1.7,66.7775 +490,30,2.7,111.05,1.7,66.775 +491,30,2.7,111.05,1.7,66.7725 +492,30,2.7,111.05,1.7,66.77 +493,30,2.7,111.05,1.7,66.7675 +494,30,2.7,111.05,1.7,66.765 +495,30,2.7,111.05,1.7,66.7625 +496,30,2.7,111.05,1.7,66.76 +497,30,2.7,111.05,1.7,66.7575 +498,30,2.7,111.05,1.7,66.755 +499,30,2.7,111.05,1.7,66.7525 +500,30,2.7,111.05,1.7,66.75 +501,30,2.7,111.05,1.7,66.7475 +502,30,2.7,111.05,1.7,66.745 +503,30,2.7,111.05,1.7,66.7425 +504,30,2.7,111.05,1.7,66.74 +505,30,2.7,111.05,1.7,66.7375 +506,30,2.7,111.05,1.7,66.735 +507,30,2.7,111.05,1.7,66.7325 +508,30,2.7,111.05,1.7,66.73 +509,30,2.7,111.05,1.7,66.7275 +510,30,2.7,111.05,1.7,66.725 +511,30,2.7,111.05,1.7,66.7225 +512,30,2.7,111.05,1.7,66.72 +513,30,2.7,111.05,1.7,66.7175 +514,30,2.7,111.05,1.7,66.715 +515,30,2.7,111.05,1.7,66.7125 +516,30,2.7,111.05,1.7,66.71 +517,30,2.7,111.05,1.7,66.7075 +518,30,2.7,111.05,1.7,66.705 +519,30,2.7,111.05,1.7,66.7025 +520,30,2.7,111.05,1.7,66.7 +521,30,2.7,111.05,1.7,66.6975 +522,30,2.7,111.05,1.7,66.695 +523,30,2.7,111.05,1.7,66.6925 +524,30,2.7,111.05,1.7,66.69 +525,30,2.7,111.05,1.7,66.6875 +526,30,2.7,111.05,1.7,66.685 +527,30,2.7,111.05,1.7,66.6825 +528,30,2.7,111.05,1.7,66.68 +529,30,2.7,111.05,1.7,66.6775 +530,30,2.7,111.05,1.7,66.675 +531,30,2.7,111.05,1.7,66.6725 +532,30,2.7,111.05,1.7,66.67 +533,30,2.7,111.05,1.7,66.6675 +534,30,2.7,111.05,1.7,66.665 +535,30,2.7,111.05,1.7,66.6625 +536,30,2.7,111.05,1.7,66.66 +537,30,2.7,111.05,1.7,66.6575 +538,30,2.7,111.05,1.7,66.655 +539,30,2.7,111.05,1.7,66.6525 +540,30,2.7,111.05,1.7,66.65 +541,30,2.7,111.05,1.7,66.6475 +542,30,2.7,111.05,1.7,66.645 +543,30,2.7,111.05,1.7,66.6425 +544,30,2.7,111.05,1.7,66.64 +545,30,2.7,111.05,1.7,66.6375 +546,30,2.7,111.05,1.7,66.635 +547,30,2.7,111.05,1.7,66.6325 +548,30,2.7,111.05,1.7,66.63 +549,30,2.7,111.05,1.7,66.6275 +550,30,2.7,111.05,1.7,66.625 +551,30,2.7,111.05,1.7,66.6225 +552,30,2.7,111.05,1.7,66.62 +553,30,2.7,111.05,1.7,66.6175 +554,30,2.7,111.05,1.7,66.615 +555,30,2.7,111.05,1.7,66.6125 +556,30,2.7,111.05,1.7,66.61 +557,30,2.7,111.05,1.7,66.6075 +558,30,2.7,111.05,1.7,66.605 +559,30,2.7,111.05,1.7,66.6025 +560,30,2.7,111.05,1.7,66.6 +561,30,2.7,111.05,1.7,66.5975 +562,30,2.7,111.05,1.7,66.595 +563,30,2.7,111.05,1.7,66.5925 +564,30,2.7,111.05,1.7,66.59 +565,30,2.7,111.05,1.7,66.5875 +566,30,2.7,111.05,1.7,66.585 +567,30,2.7,111.05,1.7,66.5825 +568,30,2.7,111.05,1.7,66.58 +569,30,2.7,111.05,1.7,66.5775 +570,30,2.7,111.05,1.7,66.575 +571,30,2.7,111.05,1.7,66.5725 +572,30,2.7,111.05,1.7,66.57 +573,30,2.7,111.05,1.7,66.5675 +574,30,2.7,111.05,1.7,66.565 +575,30,2.7,111.05,1.7,66.5625 +576,30,2.7,111.05,1.7,66.56 +577,30,2.7,111.05,1.7,66.5575 +578,30,2.7,111.05,1.7,66.555 +579,30,2.7,111.05,1.7,66.5525 +580,30,2.7,111.05,1.7,66.55 +581,30,2.7,111.05,1.7,66.5475 +582,30,2.7,111.05,1.7,66.545 +583,30,2.7,111.05,1.7,66.5425 +584,30,2.7,111.05,1.7,66.54 +585,30,2.7,111.05,1.7,66.5375 +586,30,2.7,111.05,1.7,66.535 +587,30,2.7,111.05,1.7,66.5325 +588,30,2.7,111.05,1.7,66.53 +589,30,2.7,111.05,1.7,66.5275 +590,30,2.7,111.05,1.7,66.525 +591,30,2.7,111.05,1.7,66.5225 +592,30,2.7,111.05,1.7,66.52 +593,30,2.7,111.05,1.7,66.5175 +594,30,2.7,111.05,1.7,66.515 +595,30,2.7,111.05,1.7,66.5125 +596,30,2.7,111.05,1.7,66.51 +597,30,2.7,111.05,1.7,66.5075 +598,30,2.7,111.05,1.7,66.505 +599,30,2.7,111.05,1.7,66.5025 +600,30,2.7,111.05,1.7,66.5 +601,30,2.7,111.05,1.7,66.495 +602,30,2.7,111.05,1.7,66.49 +603,30,2.7,111.05,1.7,66.485 +604,30,2.7,111.05,1.7,66.48 +605,30,2.7,111.05,1.7,66.475 +606,30,2.7,111.05,1.7,66.47 +607,30,2.7,111.05,1.7,66.465 +608,30,2.7,111.05,1.7,66.46 +609,30,2.7,111.05,1.7,66.455 +610,30,2.7,111.05,1.7,66.45 +611,30,2.7,111.05,1.7,66.445 +612,30,2.7,111.05,1.7,66.44 +613,30,2.7,111.05,1.7,66.435 +614,30,2.7,111.05,1.7,66.43 +615,30,2.7,111.05,1.7,66.425 +616,30,2.7,111.05,1.7,66.42 +617,30,2.7,111.05,1.7,66.415 +618,30,2.7,111.05,1.7,66.41 +619,30,2.7,111.05,1.7,66.405 +620,30,2.7,111.05,1.7,66.4 +621,30,2.7,111.05,1.7,66.395 +622,30,2.7,111.05,1.7,66.39 +623,30,2.7,111.05,1.7,66.385 +624,30,2.7,111.05,1.7,66.38 +625,30,2.7,111.05,1.7,66.375 +626,30,2.7,111.05,1.7,66.37 +627,30,2.7,111.05,1.7,66.365 +628,30,2.7,111.05,1.7,66.36 +629,30,2.7,111.05,1.7,66.355 +630,30,2.7,111.05,1.7,66.35 +631,30,2.7,111.05,1.7,66.345 +632,30,2.7,111.05,1.7,66.34 +633,30,2.7,111.05,1.7,66.335 +634,30,2.7,111.05,1.7,66.33 +635,30,2.7,111.05,1.7,66.325 +636,30,2.7,111.05,1.7,66.32 +637,30,2.7,111.05,1.7,66.315 +638,30,2.7,111.05,1.7,66.31 +639,30,2.7,111.05,1.7,66.305 +640,30,2.7,111.05,1.7,66.3 +641,30,2.7,111.05,1.7,66.295 +642,30,2.7,111.05,1.7,66.29 +643,30,2.7,111.05,1.7,66.285 +644,30,2.7,111.05,1.7,66.28 +645,30,2.7,111.05,1.7,66.275 +646,30,2.7,111.05,1.7,66.27 +647,30,2.7,111.05,1.7,66.265 +648,30,2.7,111.05,1.7,66.26 +649,30,2.7,111.05,1.7,66.255 +650,30,2.7,111.05,1.7,66.25 +651,30,2.7,111.05,1.7,66.245 +652,30,2.7,111.05,1.7,66.24 +653,30,2.7,111.05,1.7,66.235 +654,30,2.7,111.05,1.7,66.23 +655,30,2.7,111.05,1.7,66.225 +656,30,2.7,111.05,1.7,66.22 +657,30,2.7,111.05,1.7,66.215 +658,30,2.7,111.05,1.7,66.21 +659,30,2.7,111.05,1.7,66.205 +660,30,2.7,111.05,1.7,66.2 +661,30,2.7,111.05,1.7,66.195 +662,30,2.7,111.05,1.7,66.19 +663,30,2.7,111.05,1.7,66.185 +664,30,2.7,111.05,1.7,66.18 +665,30,2.7,111.05,1.7,66.175 +666,30,2.7,111.05,1.7,66.17 +667,30,2.7,111.05,1.7,66.165 +668,30,2.7,111.05,1.7,66.16 +669,30,2.7,111.05,1.7,66.155 +670,30,2.7,111.05,1.7,66.15 +671,30,2.7,111.05,1.7,66.145 +672,30,2.7,111.05,1.7,66.14 +673,30,2.7,111.05,1.7,66.135 +674,30,2.7,111.05,1.7,66.13 +675,30,2.7,111.05,1.7,66.125 +676,30,2.7,111.05,1.7,66.12 +677,30,2.7,111.05,1.7,66.115 +678,30,2.7,111.05,1.7,66.11 +679,30,2.7,111.05,1.7,66.105 +680,30,2.7,111.05,1.7,66.1 +681,30,2.7,111.05,1.7,66.095 +682,30,2.7,111.05,1.7,66.09 +683,30,2.7,111.05,1.7,66.085 +684,30,2.7,111.05,1.7,66.08 +685,30,2.7,111.05,1.7,66.075 +686,30,2.7,111.05,1.7,66.07 +687,30,2.7,111.05,1.7,66.065 +688,30,2.7,111.05,1.7,66.06 +689,30,2.7,111.05,1.7,66.055 +690,30,2.7,111.05,1.7,66.05 +691,30,2.7,111.05,1.7,66.045 +692,30,2.7,111.05,1.7,66.04 +693,30,2.7,111.05,1.7,66.035 +694,30,2.7,111.05,1.7,66.03 +695,30,2.7,111.05,1.7,66.025 +696,30,2.7,111.05,1.7,66.02 +697,30,2.7,111.05,1.7,66.015 +698,30,2.7,111.05,1.7,66.01 +699,30,2.7,111.05,1.7,66.005 +700,30,2.7,111.05,1.7,66 +701,30,2.7,111.05,1.7,65.995 +702,30,2.7,111.05,1.7,65.99 +703,30,2.7,111.05,1.7,65.985 +704,30,2.7,111.05,1.7,65.98 +705,30,2.7,111.05,1.7,65.975 +706,30,2.7,111.05,1.7,65.97 +707,30,2.7,111.05,1.7,65.965 +708,30,2.7,111.05,1.7,65.96 +709,30,2.7,111.05,1.7,65.955 +710,30,2.7,111.05,1.7,65.95 +711,30,2.7,111.05,1.7,65.945 +712,30,2.7,111.05,1.7,65.94 +713,30,2.7,111.05,1.7,65.935 +714,30,2.7,111.05,1.7,65.93 +715,30,2.7,111.05,1.7,65.925 +716,30,2.7,111.05,1.7,65.92 +717,30,2.7,111.05,1.7,65.915 +718,30,2.7,111.05,1.7,65.91 +719,30,2.7,111.05,1.7,65.905 +720,30,2.7,111.05,1.7,65.9 +721,30,2.7,111.05,1.7,65.895 +722,30,2.7,111.05,1.7,65.89 +723,30,2.7,111.05,1.7,65.885 +724,30,2.7,111.05,1.7,65.88 +725,30,2.7,111.05,1.7,65.875 +726,30,2.7,111.05,1.7,65.87 +727,30,2.7,111.05,1.7,65.865 +728,30,2.7,111.05,1.7,65.86 +729,30,2.7,111.05,1.7,65.855 +730,30,2.7,111.05,1.7,65.85 +731,30,2.7,111.05,1.7,65.845 +732,30,2.7,111.05,1.7,65.84 +733,30,2.7,111.05,1.7,65.835 +734,30,2.7,111.05,1.7,65.83 +735,30,2.7,111.05,1.7,65.825 +736,30,2.7,111.05,1.7,65.82 +737,30,2.7,111.05,1.7,65.815 +738,30,2.7,111.05,1.7,65.81 +739,30,2.7,111.05,1.7,65.805 +740,30,2.7,111.05,1.7,65.8 +741,30,2.7,111.05,1.7,65.795 +742,30,2.7,111.05,1.7,65.79 +743,30,2.7,111.05,1.7,65.785 +744,30,2.7,111.05,1.7,65.78 +745,30,2.7,111.05,1.7,65.775 +746,30,2.7,111.05,1.7,65.77 +747,30,2.7,111.05,1.7,65.765 +748,30,2.7,111.05,1.7,65.76 +749,30,2.7,111.05,1.7,65.755 +750,30,2.7,111.05,1.7,65.75 +751,30,2.7,111.05,1.7,65.745 +752,30,2.7,111.05,1.7,65.74 +753,30,2.7,111.05,1.7,65.735 +754,30,2.7,111.05,1.7,65.73 +755,30,2.7,111.05,1.7,65.725 +756,30,2.7,111.05,1.7,65.72 +757,30,2.7,111.05,1.7,65.715 +758,30,2.7,111.05,1.7,65.71 +759,30,2.7,111.05,1.7,65.705 +760,30,2.7,111.05,1.7,65.7 +761,30,2.7,111.05,1.7,65.695 +762,30,2.7,111.05,1.7,65.69 +763,30,2.7,111.05,1.7,65.685 +764,30,2.7,111.05,1.7,65.68 +765,30,2.7,111.05,1.7,65.675 +766,30,2.7,111.05,1.7,65.67 +767,30,2.7,111.05,1.7,65.665 +768,30,2.7,111.05,1.7,65.66 +769,30,2.7,111.05,1.7,65.655 +770,30,2.7,111.05,1.7,65.65 +771,30,2.7,111.05,1.7,65.645 +772,30,2.7,111.05,1.7,65.64 +773,30,2.7,111.05,1.7,65.635 +774,30,2.7,111.05,1.7,65.63 +775,30,2.7,111.05,1.7,65.625 +776,30,2.7,111.05,1.7,65.62 +777,30,2.7,111.05,1.7,65.615 +778,30,2.7,111.05,1.7,65.61 +779,30,2.7,111.05,1.7,65.605 +780,30,2.7,111.05,1.7,65.6 +781,30,2.7,111.05,1.7,65.595 +782,30,2.7,111.05,1.7,65.59 +783,30,2.7,111.05,1.7,65.585 +784,30,2.7,111.05,1.7,65.58 +785,30,2.7,111.05,1.7,65.575 +786,30,2.7,111.05,1.7,65.57 +787,30,2.7,111.05,1.7,65.565 +788,30,2.7,111.05,1.7,65.56 +789,30,2.7,111.05,1.7,65.555 +790,30,2.7,111.05,1.7,65.55 +791,30,2.7,111.05,1.7,65.545 +792,30,2.7,111.05,1.7,65.54 +793,30,2.7,111.05,1.7,65.535 +794,30,2.7,111.05,1.7,65.53 +795,30,2.7,111.05,1.7,65.525 +796,30,2.7,111.05,1.7,65.52 +797,30,2.7,111.05,1.7,65.515 +798,30,2.7,111.05,1.7,65.51 +799,30,2.7,111.05,1.7,65.505 +800,30,2.7,111.05,1.7,65.5 +801,30,2.7,111.05,1.7,65.495 +802,30,2.7,111.05,1.7,65.49 +803,30,2.7,111.05,1.7,65.485 +804,30,2.7,111.05,1.7,65.48 +805,30,2.7,111.05,1.7,65.475 +806,30,2.7,111.05,1.7,65.47 +807,30,2.7,111.05,1.7,65.465 +808,30,2.7,111.05,1.7,65.46 +809,30,2.7,111.05,1.7,65.455 +810,30,2.7,111.05,1.7,65.45 +811,30,2.7,111.05,1.7,65.445 +812,30,2.7,111.05,1.7,65.44 +813,30,2.7,111.05,1.7,65.435 +814,30,2.7,111.05,1.7,65.43 +815,30,2.7,111.05,1.7,65.425 +816,30,2.7,111.05,1.7,65.42 +817,30,2.7,111.05,1.7,65.415 +818,30,2.7,111.05,1.7,65.41 +819,30,2.7,111.05,1.7,65.405 +820,30,2.7,111.05,1.7,65.4 +821,30,2.7,111.05,1.7,65.395 +822,30,2.7,111.05,1.7,65.39 +823,30,2.7,111.05,1.7,65.385 +824,30,2.7,111.05,1.7,65.38 +825,30,2.7,111.05,1.7,65.375 +826,30,2.7,111.05,1.7,65.37 +827,30,2.7,111.05,1.7,65.365 +828,30,2.7,111.05,1.7,65.36 +829,30,2.7,111.05,1.7,65.355 +830,30,2.7,111.05,1.7,65.35 +831,30,2.7,111.05,1.7,65.345 +832,30,2.7,111.05,1.7,65.34 +833,30,2.7,111.05,1.7,65.335 +834,30,2.7,111.05,1.7,65.33 +835,30,2.7,111.05,1.7,65.325 +836,30,2.7,111.05,1.7,65.32 +837,30,2.7,111.05,1.7,65.315 +838,30,2.7,111.05,1.7,65.31 +839,30,2.7,111.05,1.7,65.305 +840,30,2.7,111.05,1.7,65.3 +841,30,2.7,111.05,1.7,65.295 +842,30,2.7,111.05,1.7,65.29 +843,30,2.7,111.05,1.7,65.285 +844,30,2.7,111.05,1.7,65.28 +845,30,2.7,111.05,1.7,65.275 +846,30,2.7,111.05,1.7,65.27 +847,30,2.7,111.05,1.7,65.265 +848,30,2.7,111.05,1.7,65.26 +849,30,2.7,111.05,1.7,65.255 +850,30,2.7,111.05,1.7,65.25 +851,30,2.7,111.05,1.7,65.245 +852,30,2.7,111.05,1.7,65.24 +853,30,2.7,111.05,1.7,65.235 +854,30,2.7,111.05,1.7,65.23 +855,30,2.7,111.05,1.7,65.225 +856,30,2.7,111.05,1.7,65.22 +857,30,2.7,111.05,1.7,65.215 +858,30,2.7,111.05,1.7,65.21 +859,30,2.7,111.05,1.7,65.205 +860,30,2.7,111.05,1.7,65.2 +861,30,2.7,111.05,1.7,65.195 +862,30,2.7,111.05,1.7,65.19 +863,30,2.7,111.05,1.7,65.185 +864,30,2.7,111.05,1.7,65.18 +865,30,2.7,111.05,1.7,65.175 +866,30,2.7,111.05,1.7,65.17 +867,30,2.7,111.05,1.7,65.165 +868,30,2.7,111.05,1.7,65.16 +869,30,2.7,111.05,1.7,65.155 +870,30,2.7,111.05,1.7,65.15 +871,30,2.7,111.05,1.7,65.145 +872,30,2.7,111.05,1.7,65.14 +873,30,2.7,111.05,1.7,65.135 +874,30,2.7,111.05,1.7,65.13 +875,30,2.7,111.05,1.7,65.125 +876,30,2.7,111.05,1.7,65.12 +877,30,2.7,111.05,1.7,65.115 +878,30,2.7,111.05,1.7,65.11 +879,30,2.7,111.05,1.7,65.105 +880,30,2.7,111.05,1.7,65.1 +881,30,2.7,111.05,1.7,65.095 +882,30,2.7,111.05,1.7,65.09 +883,30,2.7,111.05,1.7,65.085 +884,30,2.7,111.05,1.7,65.08 +885,30,2.7,111.05,1.7,65.075 +886,30,2.7,111.05,1.7,65.07 +887,30,2.7,111.05,1.7,65.065 +888,30,2.7,111.05,1.7,65.06 +889,30,2.7,111.05,1.7,65.055 +890,30,2.7,111.05,1.7,65.05 +891,30,2.7,111.05,1.7,65.045 +892,30,2.7,111.05,1.7,65.04 +893,30,2.7,111.05,1.7,65.035 +894,30,2.7,111.05,1.7,65.03 +895,30,2.7,111.05,1.7,65.025 +896,30,2.7,111.05,1.7,65.02 +897,30,2.7,111.05,1.7,65.015 +898,30,2.7,111.05,1.7,65.01 +899,30,2.7,111.05,1.7,65.005 +900,30,2.7,111.05,1.7,65 +901,30,2.7,111.05,1.7,64.99833333 +902,30,2.7,111.05,1.7,64.99666667 +903,30,2.7,111.05,1.7,64.995 +904,30,2.7,111.05,1.7,64.99333333 +905,30,2.7,111.05,1.7,64.99166667 +906,30,2.7,111.05,1.7,64.99 +907,30,2.7,111.05,1.7,64.98833333 +908,30,2.7,111.05,1.7,64.98666667 +909,30,2.7,111.05,1.7,64.985 +910,30,2.7,111.05,1.7,64.98333333 +911,30,2.7,111.05,1.7,64.98166667 +912,30,2.7,111.05,1.7,64.98 +913,30,2.7,111.05,1.7,64.97833333 +914,30,2.7,111.05,1.7,64.97666667 +915,30,2.7,111.05,1.7,64.975 +916,30,2.7,111.05,1.7,64.97333333 +917,30,2.7,111.05,1.7,64.97166667 +918,30,2.7,111.05,1.7,64.97 +919,30,2.7,111.05,1.7,64.96833333 +920,30,2.7,111.05,1.7,64.96666667 +921,30,2.7,111.05,1.7,64.965 +922,30,2.7,111.05,1.7,64.96333333 +923,30,2.7,111.05,1.7,64.96166667 +924,30,2.7,111.05,1.7,64.96 +925,30,2.7,111.05,1.7,64.95833333 +926,30,2.7,111.05,1.7,64.95666667 +927,30,2.7,111.05,1.7,64.955 +928,30,2.7,111.05,1.7,64.95333333 +929,30,2.7,111.05,1.7,64.95166667 +930,30,2.7,111.05,1.7,64.95 +931,30,2.7,111.05,1.7,64.94833333 +932,30,2.7,111.05,1.7,64.94666667 +933,30,2.7,111.05,1.7,64.945 +934,30,2.7,111.05,1.7,64.94333333 +935,30,2.7,111.05,1.7,64.94166667 +936,30,2.7,111.05,1.7,64.94 +937,30,2.7,111.05,1.7,64.93833333 +938,30,2.7,111.05,1.7,64.93666667 +939,30,2.7,111.05,1.7,64.935 +940,30,2.7,111.05,1.7,64.93333333 +941,30,2.7,111.05,1.7,64.93166667 +942,30,2.7,111.05,1.7,64.93 +943,30,2.7,111.05,1.7,64.92833333 +944,30,2.7,111.05,1.7,64.92666667 +945,30,2.7,111.05,1.7,64.925 +946,30,2.7,111.05,1.7,64.92333333 +947,30,2.7,111.05,1.7,64.92166667 +948,30,2.7,111.05,1.7,64.92 +949,30,2.7,111.05,1.7,64.91833333 +950,30,2.7,111.05,1.7,64.91666667 +951,30,2.7,111.05,1.7,64.915 +952,30,2.7,111.05,1.7,64.91333333 +953,30,2.7,111.05,1.7,64.91166666 +954,30,2.7,111.05,1.7,64.91 +955,30,2.7,111.05,1.7,64.90833333 +956,30,2.7,111.05,1.7,64.90666666 +957,30,2.7,111.05,1.7,64.905 +958,30,2.7,111.05,1.7,64.90333333 +959,30,2.7,111.05,1.7,64.90166666 +960,30,2.7,111.05,1.7,64.9 +961,30,2.7,111.05,1.7,64.89833333 +962,30,2.7,111.05,1.7,64.89666666 +963,30,2.7,111.05,1.7,64.895 +964,30,2.7,111.05,1.7,64.89333333 +965,30,2.7,111.05,1.7,64.89166666 +966,30,2.7,111.05,1.7,64.89 +967,30,2.7,111.05,1.7,64.88833333 +968,30,2.7,111.05,1.7,64.88666666 +969,30,2.7,111.05,1.7,64.885 +970,30,2.7,111.05,1.7,64.88333333 +971,30,2.7,111.05,1.7,64.88166666 +972,30,2.7,111.05,1.7,64.88 +973,30,2.7,111.05,1.7,64.87833333 +974,30,2.7,111.05,1.7,64.87666666 +975,30,2.7,111.05,1.7,64.875 +976,30,2.7,111.05,1.7,64.87333333 +977,30,2.7,111.05,1.7,64.87166666 +978,30,2.7,111.05,1.7,64.87 +979,30,2.7,111.05,1.7,64.86833333 +980,30,2.7,111.05,1.7,64.86666666 +981,30,2.7,111.05,1.7,64.865 +982,30,2.7,111.05,1.7,64.86333333 +983,30,2.7,111.05,1.7,64.86166666 +984,30,2.7,111.05,1.7,64.86 +985,30,2.7,111.05,1.7,64.85833333 +986,30,2.7,111.05,1.7,64.85666666 +987,30,2.7,111.05,1.7,64.855 +988,30,2.7,111.05,1.7,64.85333333 +989,30,2.7,111.05,1.7,64.85166666 +990,30,2.7,111.05,1.7,64.85 +991,30,2.7,111.05,1.7,64.84833333 +992,30,2.7,111.05,1.7,64.84666666 +993,30,2.7,111.05,1.7,64.845 +994,30,2.7,111.05,1.7,64.84333333 +995,30,2.7,111.05,1.7,64.84166666 +996,30,2.7,111.05,1.7,64.84 +997,30,2.7,111.05,1.7,64.83833333 +998,30,2.7,111.05,1.7,64.83666666 +999,30,2.7,111.05,1.7,64.835 +1000,30,2.7,111.05,1.7,64.83333333 +1001,30,2.7,111.05,1.7,64.83166666 +1002,30,2.7,111.05,1.7,64.83 +1003,30,2.7,111.05,1.7,64.82833333 +1004,30,2.7,111.05,1.7,64.82666666 +1005,30,2.7,111.05,1.7,64.825 +1006,30,2.7,111.05,1.7,64.82333333 +1007,30,2.7,111.05,1.7,64.82166666 +1008,30,2.7,111.05,1.7,64.82 +1009,30,2.7,111.05,1.7,64.81833333 +1010,30,2.7,111.05,1.7,64.81666666 +1011,30,2.7,111.05,1.7,64.815 +1012,30,2.7,111.05,1.7,64.81333333 +1013,30,2.7,111.05,1.7,64.81166666 +1014,30,2.7,111.05,1.7,64.81 +1015,30,2.7,111.05,1.7,64.80833333 +1016,30,2.7,111.05,1.7,64.80666666 +1017,30,2.7,111.05,1.7,64.805 +1018,30,2.7,111.05,1.7,64.80333333 +1019,30,2.7,111.05,1.7,64.80166666 +1020,30,2.7,111.05,1.7,64.8 +1021,30,2.7,111.05,1.7,64.79833333 +1022,30,2.7,111.05,1.7,64.79666666 +1023,30,2.7,111.05,1.7,64.795 +1024,30,2.7,111.05,1.7,64.79333333 +1025,30,2.7,111.05,1.7,64.79166666 +1026,30,2.7,111.05,1.7,64.79 +1027,30,2.7,111.05,1.7,64.78833333 +1028,30,2.7,111.05,1.7,64.78666666 +1029,30,2.7,111.05,1.7,64.785 +1030,30,2.7,111.05,1.7,64.78333333 +1031,30,2.7,111.05,1.7,64.78166666 +1032,30,2.7,111.05,1.7,64.78 +1033,30,2.7,111.05,1.7,64.77833333 +1034,30,2.7,111.05,1.7,64.77666666 +1035,30,2.7,111.05,1.7,64.775 +1036,30,2.7,111.05,1.7,64.77333333 +1037,30,2.7,111.05,1.7,64.77166666 +1038,30,2.7,111.05,1.7,64.77 +1039,30,2.7,111.05,1.7,64.76833333 +1040,30,2.7,111.05,1.7,64.76666666 +1041,30,2.7,111.05,1.7,64.765 +1042,30,2.7,111.05,1.7,64.76333333 +1043,30,2.7,111.05,1.7,64.76166666 +1044,30,2.7,111.05,1.7,64.76 +1045,30,2.7,111.05,1.7,64.75833333 +1046,30,2.7,111.05,1.7,64.75666666 +1047,30,2.7,111.05,1.7,64.755 +1048,30,2.7,111.05,1.7,64.75333333 +1049,30,2.7,111.05,1.7,64.75166666 +1050,30,2.7,111.05,1.7,64.75 +1051,30,2.7,111.05,1.7,64.74833333 +1052,30,2.7,111.05,1.7,64.74666666 +1053,30,2.7,111.05,1.7,64.74499999 +1054,30,2.7,111.05,1.7,64.74333333 +1055,30,2.7,111.05,1.7,64.74166666 +1056,30,2.7,111.05,1.7,64.73999999 +1057,30,2.7,111.05,1.7,64.73833333 +1058,30,2.7,111.05,1.7,64.73666666 +1059,30,2.7,111.05,1.7,64.73499999 +1060,30,2.7,111.05,1.7,64.73333333 +1061,30,2.7,111.05,1.7,64.73166666 +1062,30,2.7,111.05,1.7,64.72999999 +1063,30,2.7,111.05,1.7,64.72833333 +1064,30,2.7,111.05,1.7,64.72666666 +1065,30,2.7,111.05,1.7,64.72499999 +1066,30,2.7,111.05,1.7,64.72333333 +1067,30,2.7,111.05,1.7,64.72166666 +1068,30,2.7,111.05,1.7,64.71999999 +1069,30,2.7,111.05,1.7,64.71833333 +1070,30,2.7,111.05,1.7,64.71666666 +1071,30,2.7,111.05,1.7,64.71499999 +1072,30,2.7,111.05,1.7,64.71333333 +1073,30,2.7,111.05,1.7,64.71166666 +1074,30,2.7,111.05,1.7,64.70999999 +1075,30,2.7,111.05,1.7,64.70833333 +1076,30,2.7,111.05,1.7,64.70666666 +1077,30,2.7,111.05,1.7,64.70499999 +1078,30,2.7,111.05,1.7,64.70333333 +1079,30,2.7,111.05,1.7,64.70166666 +1080,30,2.7,111.05,1.7,64.69999999 +1081,30,2.7,111.05,1.7,64.69833333 +1082,30,2.7,111.05,1.7,64.69666666 +1083,30,2.7,111.05,1.7,64.69499999 +1084,30,2.7,111.05,1.7,64.69333333 +1085,30,2.7,111.05,1.7,64.69166666 +1086,30,2.7,111.05,1.7,64.68999999 +1087,30,2.7,111.05,1.7,64.68833333 +1088,30,2.7,111.05,1.7,64.68666666 +1089,30,2.7,111.05,1.7,64.68499999 +1090,30,2.7,111.05,1.7,64.68333333 +1091,30,2.7,111.05,1.7,64.68166666 +1092,30,2.7,111.05,1.7,64.67999999 +1093,30,2.7,111.05,1.7,64.67833333 +1094,30,2.7,111.05,1.7,64.67666666 +1095,30,2.7,111.05,1.7,64.67499999 +1096,30,2.7,111.05,1.7,64.67333333 +1097,30,2.7,111.05,1.7,64.67166666 +1098,30,2.7,111.05,1.7,64.66999999 +1099,30,2.7,111.05,1.7,64.66833333 +1100,30,2.7,111.05,1.7,64.66666666 +1101,30,2.7,111.05,1.7,64.66499999 +1102,30,2.7,111.05,1.7,64.66333333 +1103,30,2.7,111.05,1.7,64.66166666 +1104,30,2.7,111.05,1.7,64.65999999 +1105,30,2.7,111.05,1.7,64.65833333 +1106,30,2.7,111.05,1.7,64.65666666 +1107,30,2.7,111.05,1.7,64.65499999 +1108,30,2.7,111.05,1.7,64.65333333 +1109,30,2.7,111.05,1.7,64.65166666 +1110,30,2.7,111.05,1.7,64.64999999 +1111,30,2.7,111.05,1.7,64.64833333 +1112,30,2.7,111.05,1.7,64.64666666 +1113,30,2.7,111.05,1.7,64.64499999 +1114,30,2.7,111.05,1.7,64.64333333 +1115,30,2.7,111.05,1.7,64.64166666 +1116,30,2.7,111.05,1.7,64.63999999 +1117,30,2.7,111.05,1.7,64.63833333 +1118,30,2.7,111.05,1.7,64.63666666 +1119,30,2.7,111.05,1.7,64.63499999 +1120,30,2.7,111.05,1.7,64.63333333 +1121,30,2.7,111.05,1.7,64.63166666 +1122,30,2.7,111.05,1.7,64.62999999 +1123,30,2.7,111.05,1.7,64.62833333 +1124,30,2.7,111.05,1.7,64.62666666 +1125,30,2.7,111.05,1.7,64.62499999 +1126,30,2.7,111.05,1.7,64.62333333 +1127,30,2.7,111.05,1.7,64.62166666 +1128,30,2.7,111.05,1.7,64.61999999 +1129,30,2.7,111.05,1.7,64.61833333 +1130,30,2.7,111.05,1.7,64.61666666 +1131,30,2.7,111.05,1.7,64.61499999 +1132,30,2.7,111.05,1.7,64.61333333 +1133,30,2.7,111.05,1.7,64.61166666 +1134,30,2.7,111.05,1.7,64.60999999 +1135,30,2.7,111.05,1.7,64.60833333 +1136,30,2.7,111.05,1.7,64.60666666 +1137,30,2.7,111.05,1.7,64.60499999 +1138,30,2.7,111.05,1.7,64.60333333 +1139,30,2.7,111.05,1.7,64.60166666 +1140,30,2.7,111.05,1.7,64.59999999 +1141,30,2.7,111.05,1.7,64.59833333 +1142,30,2.7,111.05,1.7,64.59666666 +1143,30,2.7,111.05,1.7,64.59499999 +1144,30,2.7,111.05,1.7,64.59333333 +1145,30,2.7,111.05,1.7,64.59166666 +1146,30,2.7,111.05,1.7,64.58999999 +1147,30,2.7,111.05,1.7,64.58833333 +1148,30,2.7,111.05,1.7,64.58666666 +1149,30,2.7,111.05,1.7,64.58499999 +1150,30,2.7,111.05,1.7,64.58333333 +1151,30,2.7,111.05,1.7,64.58166666 +1152,30,2.7,111.05,1.7,64.57999999 +1153,30,2.7,111.05,1.7,64.57833332 +1154,30,2.7,111.05,1.7,64.57666666 +1155,30,2.7,111.05,1.7,64.57499999 +1156,30,2.7,111.05,1.7,64.57333332 +1157,30,2.7,111.05,1.7,64.57166666 +1158,30,2.7,111.05,1.7,64.56999999 +1159,30,2.7,111.05,1.7,64.56833332 +1160,30,2.7,111.05,1.7,64.56666666 +1161,30,2.7,111.05,1.7,64.56499999 +1162,30,2.7,111.05,1.7,64.56333332 +1163,30,2.7,111.05,1.7,64.56166666 +1164,30,2.7,111.05,1.7,64.55999999 +1165,30,2.7,111.05,1.7,64.55833332 +1166,30,2.7,111.05,1.7,64.55666666 +1167,30,2.7,111.05,1.7,64.55499999 +1168,30,2.7,111.05,1.7,64.55333332 +1169,30,2.7,111.05,1.7,64.55166666 +1170,30,2.7,111.05,1.7,64.54999999 +1171,30,2.7,111.05,1.7,64.54833332 +1172,30,2.7,111.05,1.7,64.54666666 +1173,30,2.7,111.05,1.7,64.54499999 +1174,30,2.7,111.05,1.7,64.54333332 +1175,30,2.7,111.05,1.7,64.54166666 +1176,30,2.7,111.05,1.7,64.53999999 +1177,30,2.7,111.05,1.7,64.53833332 +1178,30,2.7,111.05,1.7,64.53666666 +1179,30,2.7,111.05,1.7,64.53499999 +1180,30,2.7,111.05,1.7,64.53333332 +1181,30,2.7,111.05,1.7,64.53166666 +1182,30,2.7,111.05,1.7,64.52999999 +1183,30,2.7,111.05,1.7,64.52833332 +1184,30,2.7,111.05,1.7,64.52666666 +1185,30,2.7,111.05,1.7,64.52499999 +1186,30,2.7,111.05,1.7,64.52333332 +1187,30,2.7,111.05,1.7,64.52166666 +1188,30,2.7,111.05,1.7,64.51999999 +1189,30,2.7,111.05,1.7,64.51833332 +1190,30,2.7,111.05,1.7,64.51666666 +1191,30,2.7,111.05,1.7,64.51499999 +1192,30,2.7,111.05,1.7,64.51333332 +1193,30,2.7,111.05,1.7,64.51166666 +1194,30,2.7,111.05,1.7,64.50999999 +1195,30,2.7,111.05,1.7,64.50833332 +1196,30,2.7,111.05,1.7,64.50666666 +1197,30,2.7,111.05,1.7,64.50499999 +1198,30,2.7,111.05,1.7,64.50333332 +1199,30,2.7,111.05,1.7,64.50166666 +1200,30,2.7,111.05,1.7,64.5 +1201,30,2.7,111.05,1.7,64.499375 +1202,30,2.7,111.05,1.7,64.49875 +1203,30,2.7,111.05,1.7,64.498125 +1204,30,2.7,111.05,1.7,64.4975 +1205,30,2.7,111.05,1.7,64.496875 +1206,30,2.7,111.05,1.7,64.49625 +1207,30,2.7,111.05,1.7,64.495625 +1208,30,2.7,111.05,1.7,64.495 +1209,30,2.7,111.05,1.7,64.494375 +1210,30,2.7,111.05,1.7,64.49375 +1211,30,2.7,111.05,1.7,64.493125 +1212,30,2.7,111.05,1.7,64.4925 +1213,30,2.7,111.05,1.7,64.491875 +1214,30,2.7,111.05,1.7,64.49125 +1215,30,2.7,111.05,1.7,64.490625 +1216,30,2.7,111.05,1.7,64.49 +1217,30,2.7,111.05,1.7,64.489375 +1218,30,2.7,111.05,1.7,64.48875 +1219,30,2.7,111.05,1.7,64.488125 +1220,30,2.7,111.05,1.7,64.4875 +1221,30,2.7,111.05,1.7,64.486875 +1222,30,2.7,111.05,1.7,64.48625 +1223,30,2.7,111.05,1.7,64.485625 +1224,30,2.7,111.05,1.7,64.485 +1225,30,2.7,111.05,1.7,64.484375 +1226,30,2.7,111.05,1.7,64.48375 +1227,30,2.7,111.05,1.7,64.483125 +1228,30,2.7,111.05,1.7,64.4825 +1229,30,2.7,111.05,1.7,64.481875 +1230,30,2.7,111.05,1.7,64.48125 +1231,30,2.7,111.05,1.7,64.480625 +1232,30,2.7,111.05,1.7,64.48 +1233,30,2.7,111.05,1.7,64.479375 +1234,30,2.7,111.05,1.7,64.47875 +1235,30,2.7,111.05,1.7,64.478125 +1236,30,2.7,111.05,1.7,64.4775 +1237,30,2.7,111.05,1.7,64.476875 +1238,30,2.7,111.05,1.7,64.47625 +1239,30,2.7,111.05,1.7,64.475625 +1240,30,2.7,111.05,1.7,64.475 +1241,30,2.7,111.05,1.7,64.474375 +1242,30,2.7,111.05,1.7,64.47375 +1243,30,2.7,111.05,1.7,64.473125 +1244,30,2.7,111.05,1.7,64.4725 +1245,30,2.7,111.05,1.7,64.471875 +1246,30,2.7,111.05,1.7,64.47125 +1247,30,2.7,111.05,1.7,64.470625 +1248,30,2.7,111.05,1.7,64.47 +1249,30,2.7,111.05,1.7,64.469375 +1250,30,2.7,111.05,1.7,64.46875 +1251,30,2.7,111.05,1.7,64.468125 +1252,30,2.7,111.05,1.7,64.4675 +1253,30,2.7,111.05,1.7,64.466875 +1254,30,2.7,111.05,1.7,64.46625 +1255,30,2.7,111.05,1.7,64.465625 +1256,30,2.7,111.05,1.7,64.465 +1257,30,2.7,111.05,1.7,64.464375 +1258,30,2.7,111.05,1.7,64.46375 +1259,30,2.7,111.05,1.7,64.463125 +1260,30,2.7,111.05,1.7,64.4625 +1261,30,2.7,111.05,1.7,64.461875 +1262,30,2.7,111.05,1.7,64.46125 +1263,30,2.7,111.05,1.7,64.460625 +1264,30,2.7,111.05,1.7,64.46 +1265,30,2.7,111.05,1.7,64.459375 +1266,30,2.7,111.05,1.7,64.45875 +1267,30,2.7,111.05,1.7,64.458125 +1268,30,2.7,111.05,1.7,64.4575 +1269,30,2.7,111.05,1.7,64.456875 +1270,30,2.7,111.05,1.7,64.45625 +1271,30,2.7,111.05,1.7,64.455625 +1272,30,2.7,111.05,1.7,64.455 +1273,30,2.7,111.05,1.7,64.454375 +1274,30,2.7,111.05,1.7,64.45375 +1275,30,2.7,111.05,1.7,64.453125 +1276,30,2.7,111.05,1.7,64.4525 +1277,30,2.7,111.05,1.7,64.451875 +1278,30,2.7,111.05,1.7,64.45125 +1279,30,2.7,111.05,1.7,64.450625 +1280,30,2.7,111.05,1.7,64.45 +1281,30,2.7,111.05,1.7,64.449375 +1282,30,2.7,111.05,1.7,64.44875 +1283,30,2.7,111.05,1.7,64.448125 +1284,30,2.7,111.05,1.7,64.4475 +1285,30,2.7,111.05,1.7,64.446875 +1286,30,2.7,111.05,1.7,64.44625 +1287,30,2.7,111.05,1.7,64.445625 +1288,30,2.7,111.05,1.7,64.445 +1289,30,2.7,111.05,1.7,64.444375 +1290,30,2.7,111.05,1.7,64.44375 +1291,30,2.7,111.05,1.7,64.443125 +1292,30,2.7,111.05,1.7,64.4425 +1293,30,2.7,111.05,1.7,64.441875 +1294,30,2.7,111.05,1.7,64.44125 +1295,30,2.7,111.05,1.7,64.440625 +1296,30,2.7,111.05,1.7,64.44 +1297,30,2.7,111.05,1.7,64.439375 +1298,30,2.7,111.05,1.7,64.43875 +1299,30,2.7,111.05,1.7,64.438125 +1300,30,2.7,111.05,1.7,64.4375 +1301,30,2.7,111.05,1.7,64.436875 +1302,30,2.7,111.05,1.7,64.43625 +1303,30,2.7,111.05,1.7,64.435625 +1304,30,2.7,111.05,1.7,64.435 +1305,30,2.7,111.05,1.7,64.434375 +1306,30,2.7,111.05,1.7,64.43375 +1307,30,2.7,111.05,1.7,64.433125 +1308,30,2.7,111.05,1.7,64.4325 +1309,30,2.7,111.05,1.7,64.431875 +1310,30,2.7,111.05,1.7,64.43125 +1311,30,2.7,111.05,1.7,64.430625 +1312,30,2.7,111.05,1.7,64.43 +1313,30,2.7,111.05,1.7,64.429375 +1314,30,2.7,111.05,1.7,64.42875 +1315,30,2.7,111.05,1.7,64.428125 +1316,30,2.7,111.05,1.7,64.4275 +1317,30,2.7,111.05,1.7,64.426875 +1318,30,2.7,111.05,1.7,64.42625 +1319,30,2.7,111.05,1.7,64.425625 +1320,30,2.7,111.05,1.7,64.425 +1321,30,2.7,111.05,1.7,64.424375 +1322,30,2.7,111.05,1.7,64.42375 +1323,30,2.7,111.05,1.7,64.423125 +1324,30,2.7,111.05,1.7,64.4225 +1325,30,2.7,111.05,1.7,64.421875 +1326,30,2.7,111.05,1.7,64.42125 +1327,30,2.7,111.05,1.7,64.420625 +1328,30,2.7,111.05,1.7,64.42 +1329,30,2.7,111.05,1.7,64.419375 +1330,30,2.7,111.05,1.7,64.41875 +1331,30,2.7,111.05,1.7,64.418125 +1332,30,2.7,111.05,1.7,64.4175 +1333,30,2.7,111.05,1.7,64.416875 +1334,30,2.7,111.05,1.7,64.41625 +1335,30,2.7,111.05,1.7,64.415625 +1336,30,2.7,111.05,1.7,64.415 +1337,30,2.7,111.05,1.7,64.414375 +1338,30,2.7,111.05,1.7,64.41375 +1339,30,2.7,111.05,1.7,64.413125 +1340,30,2.7,111.05,1.7,64.4125 +1341,30,2.7,111.05,1.7,64.411875 +1342,30,2.7,111.05,1.7,64.41125 +1343,30,2.7,111.05,1.7,64.410625 +1344,30,2.7,111.05,1.7,64.41 +1345,30,2.7,111.05,1.7,64.409375 +1346,30,2.7,111.05,1.7,64.40875 +1347,30,2.7,111.05,1.7,64.408125 +1348,30,2.7,111.05,1.7,64.4075 +1349,30,2.7,111.05,1.7,64.406875 +1350,30,2.7,111.05,1.7,64.40625 +1351,30,2.7,111.05,1.7,64.405625 +1352,30,2.7,111.05,1.7,64.405 +1353,30,2.7,111.05,1.7,64.404375 +1354,30,2.7,111.05,1.7,64.40375 +1355,30,2.7,111.05,1.7,64.403125 +1356,30,2.7,111.05,1.7,64.4025 +1357,30,2.7,111.05,1.7,64.401875 +1358,30,2.7,111.05,1.7,64.40125 +1359,30,2.7,111.05,1.7,64.400625 +1360,30,2.7,111.05,1.7,64.4 +1361,30,2.7,111.05,1.7,64.399375 +1362,30,2.7,111.05,1.7,64.39875 +1363,30,2.7,111.05,1.7,64.398125 +1364,30,2.7,111.05,1.7,64.3975 +1365,30,2.7,111.05,1.7,64.396875 +1366,30,2.7,111.05,1.7,64.39625 +1367,30,2.7,111.05,1.7,64.395625 +1368,30,2.7,111.05,1.7,64.395 +1369,30,2.7,111.05,1.7,64.394375 +1370,30,2.7,111.05,1.7,64.39375 +1371,30,2.7,111.05,1.7,64.393125 +1372,30,2.7,111.05,1.7,64.3925 +1373,30,2.7,111.05,1.7,64.391875 +1374,30,2.7,111.05,1.7,64.39125 +1375,30,2.7,111.05,1.7,64.390625 +1376,30,2.7,111.05,1.7,64.39 +1377,30,2.7,111.05,1.7,64.389375 +1378,30,2.7,111.05,1.7,64.38875 +1379,30,2.7,111.05,1.7,64.388125 +1380,30,2.7,111.05,1.7,64.3875 +1381,30,2.7,111.05,1.7,64.386875 +1382,30,2.7,111.05,1.7,64.38625 +1383,30,2.7,111.05,1.7,64.385625 +1384,30,2.7,111.05,1.7,64.385 +1385,30,2.7,111.05,1.7,64.384375 +1386,30,2.7,111.05,1.7,64.38375 +1387,30,2.7,111.05,1.7,64.383125 +1388,30,2.7,111.05,1.7,64.3825 +1389,30,2.7,111.05,1.7,64.381875 +1390,30,2.7,111.05,1.7,64.38125 +1391,30,2.7,111.05,1.7,64.380625 +1392,30,2.7,111.05,1.7,64.38 +1393,30,2.7,111.05,1.7,64.379375 +1394,30,2.7,111.05,1.7,64.37875 +1395,30,2.7,111.05,1.7,64.378125 +1396,30,2.7,111.05,1.7,64.3775 +1397,30,2.7,111.05,1.7,64.376875 +1398,30,2.7,111.05,1.7,64.37625 +1399,30,2.7,111.05,1.7,64.375625 +1400,30,2.7,111.05,1.7,64.375 +1401,30,2.7,111.05,1.7,64.374375 +1402,30,2.7,111.05,1.7,64.37375 +1403,30,2.7,111.05,1.7,64.373125 +1404,30,2.7,111.05,1.7,64.3725 +1405,30,2.7,111.05,1.7,64.371875 +1406,30,2.7,111.05,1.7,64.37125 +1407,30,2.7,111.05,1.7,64.370625 +1408,30,2.7,111.05,1.7,64.37 +1409,30,2.7,111.05,1.7,64.369375 +1410,30,2.7,111.05,1.7,64.36875 +1411,30,2.7,111.05,1.7,64.368125 +1412,30,2.7,111.05,1.7,64.3675 +1413,30,2.7,111.05,1.7,64.366875 +1414,30,2.7,111.05,1.7,64.36625 +1415,30,2.7,111.05,1.7,64.365625 +1416,30,2.7,111.05,1.7,64.365 +1417,30,2.7,111.05,1.7,64.364375 +1418,30,2.7,111.05,1.7,64.36375 +1419,30,2.7,111.05,1.7,64.363125 +1420,30,2.7,111.05,1.7,64.3625 +1421,30,2.7,111.05,1.7,64.361875 +1422,30,2.7,111.05,1.7,64.36125 +1423,30,2.7,111.05,1.7,64.360625 +1424,30,2.7,111.05,1.7,64.36 +1425,30,2.7,111.05,1.7,64.359375 +1426,30,2.7,111.05,1.7,64.35875 +1427,30,2.7,111.05,1.7,64.358125 +1428,30,2.7,111.05,1.7,64.3575 +1429,30,2.7,111.05,1.7,64.356875 +1430,30,2.7,111.05,1.7,64.35625 +1431,30,2.7,111.05,1.7,64.355625 +1432,30,2.7,111.05,1.7,64.355 +1433,30,2.7,111.05,1.7,64.354375 +1434,30,2.7,111.05,1.7,64.35375 +1435,30,2.7,111.05,1.7,64.353125 +1436,30,2.7,111.05,1.7,64.3525 +1437,30,2.7,111.05,1.7,64.351875 +1438,30,2.7,111.05,1.7,64.35125 +1439,30,2.7,111.05,1.7,64.350625 +1440,30,2.7,111.05,1.7,64.35 +1441,30,2.7,111.05,1.7,64.349375 +1442,30,2.7,111.05,1.7,64.34875 +1443,30,2.7,111.05,1.7,64.348125 +1444,30,2.7,111.05,1.7,64.3475 +1445,30,2.7,111.05,1.7,64.346875 +1446,30,2.7,111.05,1.7,64.34625 +1447,30,2.7,111.05,1.7,64.345625 +1448,30,2.7,111.05,1.7,64.345 +1449,30,2.7,111.05,1.7,64.344375 +1450,30,2.7,111.05,1.7,64.34375 +1451,30,2.7,111.05,1.7,64.343125 +1452,30,2.7,111.05,1.7,64.3425 +1453,30,2.7,111.05,1.7,64.341875 +1454,30,2.7,111.05,1.7,64.34125 +1455,30,2.7,111.05,1.7,64.340625 +1456,30,2.7,111.05,1.7,64.34 +1457,30,2.7,111.05,1.7,64.339375 +1458,30,2.7,111.05,1.7,64.33875 +1459,30,2.7,111.05,1.7,64.338125 +1460,30,2.7,111.05,1.7,64.3375 +1461,30,2.7,111.05,1.7,64.336875 +1462,30,2.7,111.05,1.7,64.33625 +1463,30,2.7,111.05,1.7,64.335625 +1464,30,2.7,111.05,1.7,64.335 +1465,30,2.7,111.05,1.7,64.334375 +1466,30,2.7,111.05,1.7,64.33375 +1467,30,2.7,111.05,1.7,64.333125 +1468,30,2.7,111.05,1.7,64.3325 +1469,30,2.7,111.05,1.7,64.331875 +1470,30,2.7,111.05,1.7,64.33125 +1471,30,2.7,111.05,1.7,64.330625 +1472,30,2.7,111.05,1.7,64.33 +1473,30,2.7,111.05,1.7,64.329375 +1474,30,2.7,111.05,1.7,64.32875 +1475,30,2.7,111.05,1.7,64.328125 +1476,30,2.7,111.05,1.7,64.3275 +1477,30,2.7,111.05,1.7,64.326875 +1478,30,2.7,111.05,1.7,64.32625 +1479,30,2.7,111.05,1.7,64.325625 +1480,30,2.7,111.05,1.7,64.325 +1481,30,2.7,111.05,1.7,64.324375 +1482,30,2.7,111.05,1.7,64.32375 +1483,30,2.7,111.05,1.7,64.323125 +1484,30,2.7,111.05,1.7,64.3225 +1485,30,2.7,111.05,1.7,64.321875 +1486,30,2.7,111.05,1.7,64.32125 +1487,30,2.7,111.05,1.7,64.320625 +1488,30,2.7,111.05,1.7,64.32 +1489,30,2.7,111.05,1.7,64.319375 +1490,30,2.6,111.05,1.7,64.31875 +1491,30,2.6,111.05,1.7,64.318125 +1492,30,2.6,111.05,1.7,64.3175 +1493,30,2.6,111.05,1.7,64.316875 +1494,30,2.6,111.05,1.7,64.31625 +1495,30,2.6,111.05,1.7,64.315625 +1496,30,2.6,111.05,1.7,64.315 +1497,30,2.6,111.05,1.7,64.314375 +1498,30,2.6,111.05,1.7,64.31375 +1499,30,2.6,111.05,1.7,64.313125 +1500,30,2.6,111.05,1.7,64.3125 +1501,30,2.6,111.05,1.7,64.311875 +1502,30,2.6,111.05,1.7,64.31125 +1503,30,2.6,111.05,1.7,64.310625 +1504,30,2.6,111.05,1.7,64.31 +1505,30,2.6,111.05,1.7,64.309375 +1506,30,2.6,111.05,1.7,64.30875 +1507,30,2.6,111.05,1.7,64.308125 +1508,30,2.6,111.05,1.7,64.3075 +1509,30,2.6,111.05,1.7,64.306875 +1510,30,2.6,111.05,1.7,64.30625 +1511,30,2.6,111.05,1.7,64.305625 +1512,30,2.6,111.05,1.7,64.305 +1513,30,2.6,111.05,1.7,64.304375 +1514,30,2.6,111.05,1.7,64.30375 +1515,30,2.6,111.05,1.7,64.303125 +1516,30,2.6,111.05,1.7,64.3025 +1517,30,2.6,111.05,1.7,64.301875 +1518,30,2.6,111.05,1.7,64.30125 +1519,30,2.6,111.05,1.7,64.300625 +1520,30,2.6,111.05,1.7,64.3 +1521,30,2.6,111.05,1.7,64.299375 +1522,30,2.6,111.05,1.7,64.29875 +1523,30,2.6,111.05,1.7,64.298125 +1524,30,2.6,111.05,1.7,64.2975 +1525,30,2.6,111.05,1.7,64.296875 +1526,30,2.6,111.05,1.7,64.29625 +1527,30,2.6,111.05,1.7,64.295625 +1528,30,2.6,111.05,1.7,64.295 +1529,30,2.6,111.05,1.7,64.294375 +1530,30,2.6,111.05,1.7,64.29375 +1531,30,2.6,111.05,1.7,64.293125 +1532,30,2.6,111.05,1.7,64.2925 +1533,30,2.6,111.05,1.7,64.291875 +1534,30,2.6,111.05,1.7,64.29125 +1535,30,2.6,111.05,1.7,64.290625 +1536,30,2.6,111.05,1.7,64.29 +1537,30,2.6,111.05,1.7,64.289375 +1538,30,2.6,111.05,1.7,64.28875 +1539,30,2.6,111.05,1.7,64.288125 +1540,30,2.6,111.05,1.7,64.2875 +1541,30,2.6,111.05,1.7,64.286875 +1542,30,2.6,111.05,1.7,64.28625 +1543,30,2.6,111.05,1.7,64.285625 +1544,30,2.6,111.05,1.7,64.285 +1545,30,2.6,111.05,1.7,64.284375 +1546,30,2.6,111.05,1.7,64.28375 +1547,30,2.6,111.05,1.7,64.283125 +1548,30,2.6,111.05,1.7,64.2825 +1549,30,2.6,111.05,1.7,64.281875 +1550,30,2.6,111.05,1.7,64.28125 +1551,30,2.6,111.05,1.7,64.280625 +1552,30,2.6,111.05,1.7,64.28 +1553,30,2.6,111.05,1.7,64.279375 +1554,30,2.6,111.05,1.7,64.27875 +1555,30,2.6,111.05,1.7,64.278125 +1556,30,2.6,111.05,1.7,64.2775 +1557,30,2.6,111.05,1.7,64.276875 +1558,30,2.6,111.05,1.7,64.27625 +1559,30,2.6,111.05,1.7,64.275625 +1560,30,2.6,111.05,1.7,64.275 +1561,30,2.6,111.05,1.7,64.274375 +1562,30,2.6,111.05,1.7,64.27375 +1563,30,2.6,111.05,1.7,64.273125 +1564,30,2.6,111.05,1.7,64.2725 +1565,30,2.6,111.05,1.7,64.271875 +1566,30,2.6,111.05,1.7,64.27125 +1567,30,2.6,111.05,1.7,64.270625 +1568,30,2.6,111.05,1.7,64.27 +1569,30,2.6,111.05,1.7,64.269375 +1570,30,2.6,111.05,1.7,64.26875 +1571,30,2.6,111.05,1.7,64.268125 +1572,30,2.6,111.05,1.7,64.2675 +1573,30,2.6,111.05,1.7,64.266875 +1574,30,2.6,111.05,1.7,64.26625 +1575,30,2.6,111.05,1.7,64.265625 +1576,30,2.6,111.05,1.7,64.265 +1577,30,2.6,111.05,1.7,64.264375 +1578,30,2.6,111.05,1.7,64.26375 +1579,30,2.6,111.05,1.7,64.263125 +1580,30,2.6,111.05,1.7,64.2625 +1581,30,2.6,111.05,1.7,64.261875 +1582,30,2.6,111.05,1.7,64.26125 +1583,30,2.6,111.05,1.7,64.260625 +1584,30,2.6,111.05,1.7,64.26 +1585,30,2.6,111.05,1.7,64.259375 +1586,30,2.6,111.05,1.7,64.25875 +1587,30,2.6,111.05,1.7,64.258125 +1588,30,2.6,111.05,1.7,64.2575 +1589,30,2.6,111.05,1.7,64.256875 +1590,30,2.6,111.05,1.7,64.25625 +1591,30,2.6,111.05,1.7,64.255625 +1592,30,2.6,111.05,1.7,64.255 +1593,30,2.6,111.05,1.7,64.254375 +1594,30,2.6,111.05,1.7,64.25375 +1595,30,2.6,111.05,1.7,64.253125 +1596,30,2.6,111.05,1.7,64.2525 +1597,30,2.6,111.05,1.7,64.251875 +1598,30,2.6,111.05,1.7,64.25125 +1599,30,2.6,111.05,1.7,64.250625 +1600,30,2.6,111.05,1.7,64.25 +1601,30,2.6,111.05,1.7,64.249375 +1602,30,2.6,111.05,1.7,64.24875 +1603,30,2.6,111.05,1.7,64.248125 +1604,30,2.6,111.05,1.7,64.2475 +1605,30,2.6,111.05,1.7,64.246875 +1606,30,2.6,111.05,1.7,64.24625 +1607,30,2.6,111.05,1.7,64.245625 +1608,30,2.6,111.05,1.7,64.245 +1609,30,2.6,111.05,1.7,64.244375 +1610,30,2.6,111.05,1.7,64.24375 +1611,30,2.6,111.05,1.7,64.243125 +1612,30,2.6,111.05,1.7,64.2425 +1613,30,2.6,111.05,1.7,64.241875 +1614,30,2.6,111.05,1.7,64.24125 +1615,30,2.6,111.05,1.7,64.240625 +1616,30,2.6,111.05,1.7,64.24 +1617,30,2.6,111.05,1.7,64.239375 +1618,30,2.6,111.05,1.7,64.23875 +1619,30,2.6,111.05,1.7,64.238125 +1620,30,2.6,111.05,1.7,64.2375 +1621,30,2.6,111.05,1.7,64.236875 +1622,30,2.6,111.05,1.7,64.23625 +1623,30,2.6,111.05,1.7,64.235625 +1624,30,2.6,111.05,1.7,64.235 +1625,30,2.6,111.05,1.7,64.234375 +1626,30,2.6,111.05,1.7,64.23375 +1627,30,2.6,111.05,1.7,64.233125 +1628,30,2.6,111.05,1.7,64.2325 +1629,30,2.6,111.05,1.7,64.231875 +1630,30,2.6,111.05,1.7,64.23125 +1631,30,2.6,111.05,1.7,64.230625 +1632,30,2.6,111.05,1.7,64.23 +1633,30,2.6,111.05,1.7,64.229375 +1634,30,2.6,111.05,1.7,64.22875 +1635,30,2.6,111.05,1.7,64.228125 +1636,30,2.6,111.05,1.7,64.2275 +1637,30,2.6,111.05,1.7,64.226875 +1638,30,2.6,111.05,1.7,64.22625 +1639,30,2.6,111.05,1.7,64.225625 +1640,30,2.6,111.05,1.7,64.225 +1641,30,2.6,111.05,1.7,64.224375 +1642,30,2.6,111.05,1.7,64.22375 +1643,30,2.6,111.05,1.7,64.223125 +1644,30,2.6,111.05,1.7,64.2225 +1645,30,2.6,111.05,1.7,64.221875 +1646,30,2.6,111.05,1.7,64.22125 +1647,30,2.6,111.05,1.7,64.220625 +1648,30,2.6,111.05,1.7,64.22 +1649,30,2.6,111.05,1.7,64.219375 +1650,30,2.6,111.05,1.7,64.21875 +1651,30,2.6,111.05,1.7,64.218125 +1652,30,2.6,111.05,1.7,64.2175 +1653,30,2.6,111.05,1.7,64.216875 +1654,30,2.6,111.05,1.7,64.21625 +1655,30,2.6,111.05,1.7,64.215625 +1656,30,2.6,111.05,1.7,64.215 +1657,30,2.6,111.05,1.7,64.214375 +1658,30,2.6,111.05,1.7,64.21375 +1659,30,2.6,111.05,1.7,64.213125 +1660,30,2.6,111.05,1.7,64.2125 +1661,30,2.6,111.05,1.7,64.211875 +1662,30,2.6,111.05,1.7,64.21125 +1663,30,2.6,111.05,1.7,64.210625 +1664,30,2.6,111.05,1.7,64.21 +1665,30,2.6,111.05,1.7,64.209375 +1666,30,2.6,111.05,1.7,64.20875 +1667,30,2.6,111.05,1.7,64.208125 +1668,30,2.6,111.05,1.7,64.2075 +1669,30,2.6,111.05,1.7,64.206875 +1670,30,2.6,111.05,1.7,64.20625 +1671,30,2.6,111.05,1.7,64.205625 +1672,30,2.6,111.05,1.7,64.205 +1673,30,2.6,111.05,1.7,64.204375 +1674,30,2.6,111.05,1.7,64.20375 +1675,30,2.6,111.05,1.7,64.203125 +1676,30,2.6,111.05,1.7,64.2025 +1677,30,2.6,111.05,1.7,64.201875 +1678,30,2.6,111.05,1.7,64.20125 +1679,30,2.6,111.05,1.7,64.200625 +1680,30,2.6,111.05,1.7,64.2 +1681,30,2.6,111.05,1.7,64.199375 +1682,30,2.6,111.05,1.7,64.19875 +1683,30,2.6,111.05,1.7,64.198125 +1684,30,2.6,111.05,1.7,64.1975 +1685,30,2.6,111.05,1.7,64.196875 +1686,30,2.6,111.05,1.7,64.19625 +1687,30,2.6,111.05,1.7,64.195625 +1688,30,2.6,111.05,1.7,64.195 +1689,30,2.6,111.05,1.7,64.194375 +1690,30,2.6,111.05,1.7,64.19375 +1691,30,2.6,111.05,1.7,64.193125 +1692,30,2.6,111.05,1.7,64.1925 +1693,30,2.6,111.05,1.7,64.191875 +1694,30,2.6,111.05,1.7,64.19125 +1695,30,2.6,111.05,1.7,64.190625 +1696,30,2.6,111.05,1.7,64.19 +1697,30,2.6,111.05,1.7,64.189375 +1698,30,2.6,111.05,1.7,64.18875 +1699,30,2.6,111.05,1.7,64.188125 +1700,30,2.6,111.05,1.7,64.1875 +1701,30,2.6,111.05,1.7,64.186875 +1702,30,2.6,111.05,1.7,64.18625 +1703,30,2.6,111.05,1.7,64.185625 +1704,30,2.6,111.05,1.7,64.185 +1705,30,2.6,111.05,1.7,64.184375 +1706,30,2.6,111.05,1.7,64.18375 +1707,30,2.6,111.05,1.7,64.183125 +1708,30,2.6,111.05,1.7,64.1825 +1709,30,2.6,111.05,1.7,64.181875 +1710,30,2.6,111.05,1.7,64.18125 +1711,30,2.6,111.05,1.7,64.180625 +1712,30,2.6,111.05,1.7,64.18 +1713,30,2.6,111.05,1.7,64.179375 +1714,30,2.6,111.05,1.7,64.17875 +1715,30,2.6,111.05,1.7,64.178125 +1716,30,2.6,111.05,1.7,64.1775 +1717,30,2.6,111.05,1.7,64.176875 +1718,30,2.6,111.05,1.7,64.17625 +1719,30,2.6,111.05,1.7,64.175625 +1720,30,2.6,111.05,1.7,64.175 +1721,30,2.6,111.05,1.7,64.174375 +1722,30,2.6,111.05,1.7,64.17375 +1723,30,2.6,111.05,1.7,64.173125 +1724,30,2.6,111.05,1.7,64.1725 +1725,30,2.6,111.05,1.7,64.171875 +1726,30,2.6,111.05,1.7,64.17125 +1727,30,2.6,111.05,1.7,64.170625 +1728,30,2.6,111.05,1.7,64.17 +1729,30,2.6,111.05,1.7,64.169375 +1730,30,2.6,111.05,1.7,64.16875 +1731,30,2.6,111.05,1.7,64.168125 +1732,30,2.6,111.05,1.7,64.1675 +1733,30,2.6,111.05,1.7,64.166875 +1734,30,2.6,111.05,1.7,64.16625 +1735,30,2.6,111.05,1.7,64.165625 +1736,30,2.6,111.05,1.7,64.165 +1737,30,2.6,111.05,1.7,64.164375 +1738,30,2.6,111.05,1.7,64.16375 +1739,30,2.6,111.05,1.7,64.163125 +1740,30,2.6,111.05,1.7,64.1625 +1741,30,2.6,111.05,1.7,64.161875 +1742,30,2.6,111.05,1.7,64.16125 +1743,30,2.6,111.05,1.7,64.160625 +1744,30,2.6,111.05,1.7,64.16 +1745,30,2.6,111.05,1.7,64.159375 +1746,30,2.6,111.05,1.7,64.15875 +1747,30,2.6,111.05,1.7,64.158125 +1748,30,2.6,111.05,1.7,64.1575 +1749,30,2.6,111.05,1.7,64.156875 +1750,30,2.6,111.05,1.7,64.15625 +1751,30,2.6,111.05,1.7,64.155625 +1752,30,2.6,111.05,1.7,64.155 +1753,30,2.6,111.05,1.7,64.154375 +1754,30,2.6,111.05,1.7,64.15375 +1755,30,2.6,111.05,1.7,64.153125 +1756,30,2.6,111.05,1.7,64.1525 +1757,30,2.6,111.05,1.7,64.151875 +1758,30,2.6,111.05,1.7,64.15125 +1759,30,2.6,111.05,1.7,64.150625 +1760,30,2.6,111.05,1.7,64.15 +1761,30,2.6,111.05,1.7,64.149375 +1762,30,2.6,111.05,1.7,64.14875 +1763,30,2.6,111.05,1.7,64.148125 +1764,30,2.6,111.05,1.7,64.1475 +1765,30,2.6,111.05,1.7,64.146875 +1766,30,2.6,111.05,1.7,64.14625 +1767,30,2.6,111.05,1.7,64.145625 +1768,30,2.6,111.05,1.7,64.145 +1769,30,2.6,111.05,1.7,64.144375 +1770,30,2.6,111.05,1.7,64.14375 +1771,30,2.6,111.05,1.7,64.143125 +1772,30,2.6,111.05,1.7,64.1425 +1773,30,2.6,111.05,1.7,64.141875 +1774,30,2.6,111.05,1.7,64.14125 +1775,30,2.6,111.05,1.7,64.140625 +1776,30,2.6,111.05,1.7,64.14 +1777,30,2.6,111.05,1.7,64.139375 +1778,30,2.6,111.05,1.7,64.13875 +1779,30,2.6,111.05,1.7,64.138125 +1780,30,2.6,111.05,1.7,64.1375 +1781,30,2.6,111.05,1.7,64.136875 +1782,30,2.6,111.05,1.7,64.13625 +1783,30,2.6,111.05,1.7,64.135625 +1784,30,2.6,111.05,1.7,64.135 +1785,30,2.6,111.05,1.7,64.134375 +1786,30,2.6,111.05,1.7,64.13375 +1787,30,2.6,111.05,1.7,64.133125 +1788,30,2.6,111.05,1.7,64.1325 +1789,30,2.6,111.05,1.7,64.131875 +1790,30,2.6,111.05,1.7,64.13125 +1791,30,2.6,111.05,1.7,64.130625 +1792,30,2.6,111.05,1.7,64.13 +1793,30,2.6,111.05,1.7,64.129375 +1794,30,2.6,111.05,1.7,64.12875 +1795,30,2.6,111.05,1.7,64.128125 +1796,30,2.6,111.05,1.7,64.1275 +1797,30,2.6,111.05,1.7,64.126875 +1798,30,2.6,111.05,1.7,64.12625 +1799,30,2.6,111.05,1.7,64.125625 +1800,30,2.6,111.05,1.7,64.125 +1801,30,2.6,111.05,1.7,64.124375 +1802,30,2.6,111.05,1.7,64.12375 +1803,30,2.6,111.05,1.7,64.123125 +1804,30,2.6,111.05,1.7,64.1225 +1805,30,2.6,111.05,1.7,64.121875 +1806,30,2.6,111.05,1.7,64.12125 +1807,30,2.6,111.05,1.7,64.120625 +1808,30,2.6,111.05,1.7,64.12 +1809,30,2.6,111.05,1.7,64.119375 +1810,30,2.6,111.05,1.7,64.11875 +1811,30,2.6,111.05,1.7,64.118125 +1812,30,2.6,111.05,1.7,64.1175 +1813,30,2.6,111.05,1.7,64.116875 +1814,30,2.6,111.05,1.7,64.11625 +1815,30,2.6,111.05,1.7,64.115625 +1816,30,2.6,111.05,1.7,64.115 +1817,30,2.6,111.05,1.7,64.114375 +1818,30,2.6,111.05,1.7,64.11375 +1819,30,2.6,111.05,1.7,64.113125 +1820,30,2.6,111.05,1.7,64.1125 +1821,30,2.6,111.05,1.7,64.111875 +1822,30,2.6,111.05,1.7,64.11125 +1823,30,2.6,111.05,1.7,64.110625 +1824,30,2.6,111.05,1.7,64.11 +1825,30,2.6,111.05,1.7,64.109375 +1826,30,2.6,111.05,1.7,64.10875 +1827,30,2.6,111.05,1.7,64.108125 +1828,30,2.6,111.05,1.7,64.1075 +1829,30,2.6,111.05,1.7,64.106875 +1830,30,2.6,111.05,1.7,64.10625 +1831,30,2.6,111.05,1.7,64.105625 +1832,30,2.6,111.05,1.7,64.105 +1833,30,2.6,111.05,1.7,64.104375 +1834,30,2.6,111.05,1.7,64.10375 +1835,30,2.6,111.05,1.7,64.103125 +1836,30,2.6,111.05,1.7,64.1025 +1837,30,2.6,111.05,1.7,64.101875 +1838,30,2.6,111.05,1.7,64.10125 +1839,30,2.6,111.05,1.7,64.100625 +1840,30,2.6,111.05,1.7,64.1 +1841,30,2.6,111.05,1.7,64.099375 +1842,30,2.6,111.05,1.7,64.09875 +1843,30,2.6,111.05,1.7,64.098125 +1844,30,2.6,111.05,1.7,64.0975 +1845,30,2.6,111.05,1.7,64.096875 +1846,30,2.6,111.05,1.7,64.09625 +1847,30,2.6,111.05,1.7,64.095625 +1848,30,2.6,111.05,1.7,64.095 +1849,30,2.6,111.05,1.7,64.094375 +1850,30,2.6,111.05,1.7,64.09375 +1851,30,2.6,111.05,1.7,64.093125 +1852,30,2.6,111.05,1.7,64.0925 +1853,30,2.6,111.05,1.7,64.091875 +1854,30,2.6,111.05,1.7,64.09125 +1855,30,2.6,111.05,1.7,64.090625 +1856,30,2.6,111.05,1.7,64.09 +1857,30,2.6,111.05,1.7,64.089375 +1858,30,2.6,111.05,1.7,64.08875 +1859,30,2.6,111.05,1.7,64.088125 +1860,30,2.6,111.05,1.7,64.0875 +1861,30,2.6,111.05,1.7,64.086875 +1862,30,2.6,111.05,1.7,64.08625 +1863,30,2.6,111.05,1.7,64.085625 +1864,30,2.6,111.05,1.7,64.085 +1865,30,2.6,111.05,1.7,64.084375 +1866,30,2.6,111.05,1.7,64.08375 +1867,30,2.6,111.05,1.7,64.083125 +1868,30,2.6,111.05,1.7,64.0825 +1869,30,2.6,111.05,1.7,64.081875 +1870,30,2.6,111.05,1.7,64.08125 +1871,30,2.6,111.05,1.7,64.080625 +1872,30,2.6,111.05,1.7,64.08 +1873,30,2.6,111.05,1.7,64.079375 +1874,30,2.6,111.05,1.7,64.07875 +1875,30,2.6,111.05,1.7,64.078125 +1876,30,2.6,111.05,1.7,64.0775 +1877,30,2.6,111.05,1.7,64.076875 +1878,30,2.6,111.05,1.7,64.07625 +1879,30,2.6,111.05,1.7,64.075625 +1880,30,2.6,111.05,1.7,64.075 +1881,30,2.6,111.05,1.7,64.074375 +1882,30,2.6,111.05,1.7,64.07375 +1883,30,2.6,111.05,1.7,64.073125 +1884,30,2.6,111.05,1.7,64.0725 +1885,30,2.6,111.05,1.7,64.071875 +1886,30,2.6,111.05,1.7,64.07125 +1887,30,2.6,111.05,1.7,64.070625 +1888,30,2.6,111.05,1.7,64.07 +1889,30,2.6,111.05,1.7,64.069375 +1890,30,2.6,111.05,1.7,64.06875 +1891,30,2.6,111.05,1.7,64.068125 +1892,30,2.6,111.05,1.7,64.0675 +1893,30,2.6,111.05,1.7,64.066875 +1894,30,2.6,111.05,1.7,64.06625 +1895,30,2.6,111.05,1.7,64.065625 +1896,30,2.6,111.05,1.7,64.065 +1897,30,2.6,111.05,1.7,64.064375 +1898,30,2.6,111.05,1.7,64.06375 +1899,30,2.6,111.05,1.7,64.063125 +1900,30,2.6,111.05,1.7,64.0625 +1901,30,2.6,111.05,1.7,64.061875 +1902,30,2.6,111.05,1.7,64.06125 +1903,30,2.6,111.05,1.7,64.060625 +1904,30,2.6,111.05,1.7,64.06 +1905,30,2.6,111.05,1.7,64.059375 +1906,30,2.6,111.05,1.7,64.05875 +1907,30,2.6,111.05,1.7,64.058125 +1908,30,2.6,111.05,1.7,64.0575 +1909,30,2.6,111.05,1.7,64.056875 +1910,30,2.6,111.05,1.7,64.05625 +1911,30,2.6,111.05,1.7,64.055625 +1912,30,2.6,111.05,1.7,64.055 +1913,30,2.6,111.05,1.7,64.054375 +1914,30,2.6,111.05,1.7,64.05375 +1915,30,2.6,111.05,1.7,64.053125 +1916,30,2.6,111.05,1.7,64.0525 +1917,30,2.6,111.05,1.7,64.051875 +1918,30,2.6,111.05,1.7,64.05125 +1919,30,2.6,111.05,1.7,64.050625 +1920,30,2.6,111.05,1.7,64.05 +1921,30,2.6,111.05,1.7,64.049375 +1922,30,2.6,111.05,1.7,64.04875 +1923,30,2.6,111.05,1.7,64.048125 +1924,30,2.6,111.05,1.7,64.0475 +1925,30,2.6,111.05,1.7,64.046875 +1926,30,2.6,111.05,1.7,64.04625 +1927,30,2.6,111.05,1.7,64.045625 +1928,30,2.6,111.05,1.7,64.045 +1929,30,2.6,111.05,1.7,64.044375 +1930,30,2.6,111.05,1.7,64.04375 +1931,30,2.6,111.05,1.7,64.043125 +1932,30,2.6,111.05,1.7,64.0425 +1933,30,2.6,111.05,1.7,64.041875 +1934,30,2.6,111.05,1.7,64.04125 +1935,30,2.6,111.05,1.7,64.040625 +1936,30,2.6,111.05,1.7,64.04 +1937,30,2.6,111.05,1.7,64.039375 +1938,30,2.6,111.05,1.7,64.03875 +1939,30,2.6,111.05,1.7,64.038125 +1940,30,2.6,111.05,1.7,64.0375 +1941,30,2.6,111.05,1.7,64.036875 +1942,30,2.6,111.05,1.7,64.03625 +1943,30,2.6,111.05,1.7,64.035625 +1944,30,2.6,111.05,1.7,64.035 +1945,30,2.6,111.05,1.7,64.034375 +1946,30,2.6,111.05,1.7,64.03375 +1947,30,2.6,111.05,1.7,64.033125 +1948,30,2.6,111.05,1.7,64.0325 +1949,30,2.6,111.05,1.7,64.031875 +1950,30,2.6,111.05,1.7,64.03125 +1951,30,2.6,111.05,1.7,64.030625 +1952,30,2.6,111.05,1.7,64.03 +1953,30,2.6,111.05,1.7,64.029375 +1954,30,2.6,111.05,1.7,64.02875 +1955,30,2.6,111.05,1.7,64.028125 +1956,30,2.6,111.05,1.7,64.0275 +1957,30,2.6,111.05,1.7,64.026875 +1958,30,2.6,111.05,1.7,64.02625 +1959,30,2.6,111.05,1.7,64.025625 +1960,30,2.6,111.05,1.7,64.025 +1961,30,2.6,111.05,1.7,64.024375 +1962,30,2.6,111.05,1.7,64.02375 +1963,30,2.6,111.05,1.7,64.023125 +1964,30,2.6,111.05,1.7,64.0225 +1965,30,2.6,111.05,1.7,64.021875 +1966,30,2.6,111.05,1.7,64.02125 +1967,30,2.6,111.05,1.7,64.020625 +1968,30,2.6,111.05,1.7,64.02 +1969,30,2.6,111.05,1.7,64.019375 +1970,30,2.6,111.05,1.7,64.01875 +1971,30,2.6,111.05,1.7,64.018125 +1972,30,2.6,111.05,1.7,64.0175 +1973,30,2.6,111.05,1.7,64.016875 +1974,30,2.6,111.05,1.7,64.01625 +1975,30,2.6,111.05,1.7,64.015625 +1976,30,2.6,111.05,1.7,64.015 +1977,30,2.6,111.05,1.7,64.014375 +1978,30,2.6,111.05,1.7,64.01375 +1979,30,2.6,111.05,1.7,64.013125 +1980,30,2.6,111.05,1.7,64.0125 +1981,30,2.6,111.05,1.7,64.011875 +1982,30,2.6,111.05,1.7,64.01125 +1983,30,2.6,111.05,1.7,64.010625 +1984,30,2.6,111.05,1.7,64.01 +1985,30,2.6,111.05,1.7,64.009375 +1986,30,2.6,111.05,1.7,64.00875 +1987,30,2.6,111.05,1.7,64.008125 +1988,30,2.6,111.05,1.7,64.0075 +1989,30,2.6,111.05,1.7,64.006875 +1990,30,2.6,111.05,1.7,64.00625 +1991,30,2.6,111.05,1.7,64.005625 +1992,30,2.6,111.05,1.7,64.005 +1993,30,2.6,111.05,1.7,64.004375 +1994,30,2.6,111.05,1.7,64.00375 +1995,30,2.6,111.05,1.7,64.003125 +1996,30,2.6,111.05,1.7,64.0025 +1997,30,2.6,111.05,1.7,64.001875 +1998,30,2.6,111.05,1.7,64.00125 +1999,30,2.6,111.05,1.7,64.000625 +2000,30,2.6,111.05,1.7,64 +2001,30,2.6,111.05,1.7,63.99975 +2002,30,2.6,111.05,1.7,63.9995 +2003,30,2.6,111.05,1.7,63.99925 +2004,30,2.6,111.05,1.7,63.999 +2005,30,2.6,111.05,1.7,63.99875 +2006,30,2.6,111.05,1.7,63.9985 +2007,30,2.6,111.05,1.7,63.99825 +2008,30,2.6,111.05,1.7,63.998 +2009,30,2.6,111.05,1.7,63.99775 +2010,30,2.6,111.05,1.7,63.9975 +2011,30,2.6,111.05,1.7,63.99725 +2012,30,2.6,111.05,1.7,63.997 +2013,30,2.6,111.05,1.7,63.99675 +2014,30,2.6,111.05,1.7,63.9965 +2015,30,2.6,111.05,1.7,63.99625 +2016,30,2.6,111.05,1.7,63.996 +2017,30,2.6,111.05,1.7,63.99575 +2018,30,2.6,111.05,1.7,63.9955 +2019,30,2.6,111.05,1.7,63.99525 +2020,30,2.6,111.05,1.7,63.995 +2021,30,2.6,111.05,1.7,63.99475 +2022,30,2.6,111.05,1.7,63.9945 +2023,30,2.6,111.05,1.7,63.99425 +2024,30,2.6,111.05,1.7,63.994 +2025,30,2.6,111.05,1.7,63.99375 +2026,30,2.6,111.05,1.7,63.9935 +2027,30,2.6,111.05,1.7,63.99325 +2028,30,2.6,111.05,1.7,63.993 +2029,30,2.6,111.05,1.7,63.99275 +2030,30,2.6,111.05,1.7,63.9925 +2031,30,2.6,111.05,1.7,63.99225 +2032,30,2.6,111.05,1.7,63.992 +2033,30,2.6,111.05,1.7,63.99175 +2034,30,2.6,111.05,1.7,63.9915 +2035,30,2.6,111.05,1.7,63.99125 +2036,30,2.6,111.05,1.7,63.991 +2037,30,2.6,111.05,1.7,63.99075 +2038,30,2.6,111.05,1.7,63.9905 +2039,30,2.6,111.05,1.7,63.99025 +2040,30,2.6,111.05,1.7,63.99 +2041,30,2.6,111.05,1.7,63.98975 +2042,30,2.6,111.05,1.7,63.9895 +2043,30,2.6,111.05,1.7,63.98925 +2044,30,2.6,111.05,1.7,63.989 +2045,30,2.6,111.05,1.7,63.98875 +2046,30,2.6,111.05,1.7,63.9885 +2047,30,2.6,111.05,1.7,63.98825 +2048,30,2.6,111.05,1.7,63.988 +2049,30,2.6,111.05,1.7,63.98775 +2050,30,2.6,111.05,1.7,63.9875 +2051,30,2.6,111.05,1.7,63.98725 +2052,30,2.6,111.05,1.7,63.987 +2053,30,2.6,111.05,1.7,63.98675 +2054,30,2.6,111.05,1.7,63.9865 +2055,30,2.6,111.05,1.7,63.98625 +2056,30,2.6,111.05,1.7,63.986 +2057,30,2.6,111.05,1.7,63.98575 +2058,30,2.6,111.05,1.7,63.9855 +2059,30,2.6,111.05,1.7,63.98525 +2060,30,2.6,111.05,1.7,63.985 +2061,30,2.6,111.05,1.7,63.98475 +2062,30,2.6,111.05,1.7,63.9845 +2063,30,2.6,111.05,1.7,63.98425 +2064,30,2.6,111.05,1.7,63.984 +2065,30,2.6,111.05,1.7,63.98375 +2066,30,2.6,111.05,1.7,63.9835 +2067,30,2.6,111.05,1.7,63.98325 +2068,30,2.6,111.05,1.7,63.983 +2069,30,2.6,111.05,1.7,63.98275 +2070,30,2.6,111.05,1.7,63.9825 +2071,30,2.6,111.05,1.7,63.98225 +2072,30,2.6,111.05,1.7,63.982 +2073,30,2.6,111.05,1.7,63.98175 +2074,30,2.6,111.05,1.7,63.9815 +2075,30,2.6,111.05,1.7,63.98125 +2076,30,2.6,111.05,1.7,63.981 +2077,30,2.6,111.05,1.7,63.98075 +2078,30,2.6,111.05,1.7,63.9805 +2079,30,2.6,111.05,1.7,63.98025 +2080,30,2.6,111.05,1.7,63.98 +2081,30,2.6,111.05,1.7,63.97975 +2082,30,2.6,111.05,1.7,63.9795 +2083,30,2.6,111.05,1.7,63.97925 +2084,30,2.6,111.05,1.7,63.979 +2085,30,2.6,111.05,1.7,63.97875 +2086,30,2.6,111.05,1.7,63.9785 +2087,30,2.6,111.05,1.7,63.97825 +2088,30,2.6,111.05,1.7,63.978 +2089,30,2.6,111.05,1.7,63.97775 +2090,30,2.6,111.05,1.7,63.9775 +2091,30,2.6,111.05,1.7,63.97725 +2092,30,2.6,111.05,1.7,63.977 +2093,30,2.6,111.05,1.7,63.97675 +2094,30,2.6,111.05,1.7,63.9765 +2095,30,2.6,111.05,1.7,63.97625 +2096,30,2.6,111.05,1.7,63.976 +2097,30,2.6,111.05,1.7,63.97575 +2098,30,2.6,111.05,1.7,63.9755 +2099,30,2.6,111.05,1.7,63.97525 +2100,30,2.6,111.05,1.7,63.975 +2101,30,2.6,111.05,1.7,63.97475 +2102,30,2.6,111.05,1.7,63.9745 +2103,30,2.6,111.05,1.7,63.97425 +2104,30,2.6,111.05,1.7,63.974 +2105,30,2.6,111.05,1.7,63.97375 +2106,30,2.6,111.05,1.7,63.9735 +2107,30,2.6,111.05,1.7,63.97325 +2108,30,2.6,111.05,1.7,63.973 +2109,30,2.6,111.05,1.7,63.97275 +2110,30,2.6,111.05,1.7,63.9725 +2111,30,2.6,111.05,1.7,63.97225 +2112,30,2.6,111.05,1.7,63.972 +2113,30,2.6,111.05,1.7,63.97175 +2114,30,2.6,111.05,1.7,63.9715 +2115,30,2.6,111.05,1.7,63.97125 +2116,30,2.6,111.05,1.7,63.971 +2117,30,2.6,111.05,1.7,63.97075 +2118,30,2.6,111.05,1.7,63.9705 +2119,30,2.6,111.05,1.7,63.97025 +2120,30,2.6,111.05,1.7,63.97 +2121,30,2.6,111.05,1.7,63.96975 +2122,30,2.6,111.05,1.7,63.9695 +2123,30,2.6,111.05,1.7,63.96925 +2124,30,2.6,111.05,1.7,63.969 +2125,30,2.6,111.05,1.7,63.96875 +2126,30,2.6,111.05,1.7,63.9685 +2127,30,2.6,111.05,1.7,63.96825 +2128,30,2.6,111.05,1.7,63.968 +2129,30,2.6,111.05,1.7,63.96775 +2130,30,2.6,111.05,1.7,63.9675 +2131,30,2.6,111.05,1.7,63.96725 +2132,30,2.6,111.05,1.7,63.967 +2133,30,2.6,111.05,1.7,63.96675 +2134,30,2.6,111.05,1.7,63.9665 +2135,30,2.6,111.05,1.7,63.96625 +2136,30,2.6,111.05,1.7,63.966 +2137,30,2.6,111.05,1.7,63.96575 +2138,30,2.6,111.05,1.7,63.9655 +2139,30,2.6,111.05,1.7,63.96525 +2140,30,2.6,111.05,1.7,63.965 +2141,30,2.6,111.05,1.7,63.96475 +2142,30,2.6,111.05,1.7,63.9645 +2143,30,2.6,111.05,1.7,63.96425 +2144,30,2.6,111.05,1.7,63.964 +2145,30,2.6,111.05,1.7,63.96375 +2146,30,2.6,111.05,1.7,63.9635 +2147,30,2.6,111.05,1.7,63.96325 +2148,30,2.6,111.05,1.7,63.963 +2149,30,2.6,111.05,1.7,63.96275 +2150,30,2.6,111.05,1.7,63.9625 +2151,30,2.6,111.05,1.7,63.96225 +2152,30,2.6,111.05,1.7,63.962 +2153,30,2.6,111.05,1.7,63.96175 +2154,30,2.6,111.05,1.7,63.9615 +2155,30,2.6,111.05,1.7,63.96125 +2156,30,2.6,111.05,1.7,63.961 +2157,30,2.6,111.05,1.7,63.96075 +2158,30,2.6,111.05,1.7,63.9605 +2159,30,2.6,111.05,1.7,63.96025 +2160,30,2.6,111.05,1.7,63.96 +2161,30,2.6,111.05,1.7,63.95975 +2162,30,2.6,111.05,1.7,63.9595 +2163,30,2.6,111.05,1.7,63.95925 +2164,30,2.6,111.05,1.7,63.959 +2165,30,2.6,111.05,1.7,63.95875 +2166,30,2.6,111.05,1.7,63.9585 +2167,30,2.6,111.05,1.7,63.95825 +2168,30,2.6,111.05,1.7,63.958 +2169,30,2.6,111.05,1.7,63.95775 +2170,30,2.6,111.05,1.7,63.9575 +2171,30,2.6,111.05,1.7,63.95725 +2172,30,2.6,111.05,1.7,63.957 +2173,30,2.6,111.05,1.7,63.95675 +2174,30,2.6,111.05,1.7,63.9565 +2175,30,2.6,111.05,1.7,63.95625 +2176,30,2.6,111.05,1.7,63.956 +2177,30,2.6,111.05,1.7,63.95575 +2178,30,2.6,111.05,1.7,63.9555 +2179,30,2.6,111.05,1.7,63.95525 +2180,30,2.6,111.05,1.7,63.955 +2181,30,2.6,111.05,1.7,63.95475 +2182,30,2.6,111.05,1.7,63.9545 +2183,30,2.6,111.05,1.7,63.95425 +2184,30,2.6,111.05,1.7,63.954 +2185,30,2.6,111.05,1.7,63.95375 +2186,30,2.6,111.05,1.7,63.9535 +2187,30,2.6,111.05,1.7,63.95325 +2188,30,2.6,111.05,1.7,63.953 +2189,30,2.6,111.05,1.7,63.95275 +2190,30,2.6,111.05,1.7,63.9525 +2191,30,2.6,111.05,1.7,63.95225 +2192,30,2.6,111.05,1.7,63.952 +2193,30,2.6,111.05,1.7,63.95175 +2194,30,2.6,111.05,1.7,63.9515 +2195,30,2.6,111.05,1.7,63.95125 +2196,30,2.6,111.05,1.7,63.951 +2197,30,2.6,111.05,1.7,63.95075 +2198,30,2.6,111.05,1.7,63.9505 +2199,30,2.6,111.05,1.7,63.95025 +2200,30,2.6,111.05,1.7,63.95 +2201,30,2.6,111.05,1.7,63.94975 +2202,30,2.6,111.05,1.7,63.9495 +2203,30,2.6,111.05,1.7,63.94925 +2204,30,2.6,111.05,1.7,63.949 +2205,30,2.6,111.05,1.7,63.94875 +2206,30,2.6,111.05,1.7,63.9485 +2207,30,2.6,111.05,1.7,63.94825 +2208,30,2.6,111.05,1.7,63.948 +2209,30,2.6,111.05,1.7,63.94775 +2210,30,2.6,111.05,1.7,63.9475 +2211,30,2.6,111.05,1.7,63.94725 +2212,30,2.6,111.05,1.7,63.947 +2213,30,2.6,111.05,1.7,63.94675 +2214,30,2.6,111.05,1.7,63.9465 +2215,30,2.6,111.05,1.7,63.94625 +2216,30,2.6,111.05,1.7,63.946 +2217,30,2.6,111.05,1.7,63.94575 +2218,30,2.6,111.05,1.7,63.9455 +2219,30,2.6,111.05,1.7,63.94525 +2220,30,2.6,111.05,1.7,63.945 +2221,30,2.6,111.05,1.7,63.94475 +2222,30,2.6,111.05,1.7,63.9445 +2223,30,2.6,111.05,1.7,63.94425 +2224,30,2.6,111.05,1.7,63.944 +2225,30,2.6,111.05,1.7,63.94375 +2226,30,2.6,111.05,1.7,63.9435 +2227,30,2.6,111.05,1.7,63.94325 +2228,30,2.6,111.05,1.7,63.943 +2229,30,2.6,111.05,1.7,63.94275 +2230,30,2.6,111.05,1.7,63.9425 +2231,30,2.6,111.05,1.7,63.94225 +2232,30,2.6,111.05,1.7,63.942 +2233,30,2.6,111.05,1.7,63.94175 +2234,30,2.6,111.05,1.7,63.9415 +2235,30,2.6,111.05,1.7,63.94125 +2236,30,2.6,111.05,1.7,63.941 +2237,30,2.6,111.05,1.7,63.94075 +2238,30,2.6,111.05,1.7,63.9405 +2239,30,2.6,111.05,1.7,63.94025 +2240,30,2.6,111.05,1.7,63.94 +2241,30,2.6,111.05,1.7,63.93975 +2242,30,2.6,111.05,1.7,63.9395 +2243,30,2.6,111.05,1.7,63.93925 +2244,30,2.6,111.05,1.7,63.939 +2245,30,2.6,111.05,1.7,63.93875 +2246,30,2.6,111.05,1.7,63.9385 +2247,30,2.6,111.05,1.7,63.93825 +2248,30,2.6,111.05,1.7,63.938 +2249,30,2.6,111.05,1.7,63.93775 +2250,30,2.6,111.05,1.7,63.9375 +2251,30,2.6,111.05,1.7,63.93725 +2252,30,2.6,111.05,1.7,63.937 +2253,30,2.6,111.05,1.7,63.93675 +2254,30,2.6,111.05,1.7,63.9365 +2255,30,2.6,111.05,1.7,63.93625 +2256,30,2.6,111.05,1.7,63.936 +2257,30,2.6,111.05,1.7,63.93575 +2258,30,2.6,111.05,1.7,63.9355 +2259,30,2.6,111.05,1.7,63.93525 +2260,30,2.6,111.05,1.7,63.935 +2261,30,2.6,111.05,1.7,63.93475 +2262,30,2.6,111.05,1.7,63.9345 +2263,30,2.6,111.05,1.7,63.93425 +2264,30,2.6,111.05,1.7,63.934 +2265,30,2.6,111.05,1.7,63.93375 +2266,30,2.6,111.05,1.7,63.9335 +2267,30,2.6,111.05,1.7,63.93325 +2268,30,2.6,111.05,1.7,63.933 +2269,30,2.6,111.05,1.7,63.93275 +2270,30,2.6,111.05,1.7,63.9325 +2271,30,2.6,111.05,1.7,63.93225 +2272,30,2.6,111.05,1.7,63.932 +2273,30,2.6,111.05,1.7,63.93175 +2274,30,2.6,111.05,1.7,63.9315 +2275,30,2.6,111.05,1.7,63.93125 +2276,30,2.6,111.05,1.7,63.931 +2277,30,2.6,111.05,1.7,63.93075 +2278,30,2.6,111.05,1.7,63.9305 +2279,30,2.6,111.05,1.7,63.93025 +2280,30,2.6,111.05,1.7,63.93 +2281,30,2.6,111.05,1.7,63.92975 +2282,30,2.6,111.05,1.7,63.9295 +2283,30,2.6,111.05,1.7,63.92925 +2284,30,2.6,111.05,1.7,63.929 +2285,30,2.6,111.05,1.7,63.92875 +2286,30,2.6,111.05,1.7,63.9285 +2287,30,2.6,111.05,1.7,63.92825 +2288,30,2.6,111.05,1.7,63.928 +2289,30,2.6,111.05,1.7,63.92775 +2290,30,2.6,111.05,1.7,63.9275 +2291,30,2.6,111.05,1.7,63.92725 +2292,30,2.6,111.05,1.7,63.927 +2293,30,2.6,111.05,1.7,63.92675 +2294,30,2.6,111.05,1.7,63.9265 +2295,30,2.6,111.05,1.7,63.92625 +2296,30,2.6,111.05,1.7,63.926 +2297,30,2.6,111.05,1.7,63.92575 +2298,30,2.6,111.05,1.7,63.9255 +2299,30,2.6,111.05,1.7,63.92525 +2300,30,2.6,111.05,1.7,63.925 +2301,30,2.6,111.05,1.7,63.92475 +2302,30,2.6,111.05,1.7,63.9245 +2303,30,2.6,111.05,1.7,63.92425 +2304,30,2.6,111.05,1.7,63.924 +2305,30,2.6,111.05,1.7,63.92375 +2306,30,2.6,111.05,1.7,63.9235 +2307,30,2.6,111.05,1.7,63.92325 +2308,30,2.6,111.05,1.7,63.923 +2309,30,2.6,111.05,1.7,63.92275 +2310,30,2.6,111.05,1.7,63.9225 +2311,30,2.6,111.05,1.7,63.92225 +2312,30,2.6,111.05,1.7,63.922 +2313,30,2.6,111.05,1.7,63.92175 +2314,30,2.6,111.05,1.7,63.9215 +2315,30,2.6,111.05,1.7,63.92125 +2316,30,2.6,111.05,1.7,63.921 +2317,30,2.6,111.05,1.7,63.92075 +2318,30,2.6,111.05,1.7,63.9205 +2319,30,2.6,111.05,1.7,63.92025 +2320,30,2.6,111.05,1.7,63.92 +2321,30,2.6,111.05,1.7,63.91975 +2322,30,2.6,111.05,1.7,63.9195 +2323,30,2.6,111.05,1.7,63.91925 +2324,30,2.6,111.05,1.7,63.919 +2325,30,2.6,111.05,1.7,63.91875 +2326,30,2.6,111.05,1.7,63.9185 +2327,30,2.6,111.05,1.7,63.91825 +2328,30,2.6,111.05,1.7,63.918 +2329,30,2.6,111.05,1.7,63.91775 +2330,30,2.6,111.05,1.7,63.9175 +2331,30,2.6,111.05,1.7,63.91725 +2332,30,2.6,111.05,1.7,63.917 +2333,30,2.6,111.05,1.7,63.91675 +2334,30,2.6,111.05,1.7,63.9165 +2335,30,2.6,111.05,1.7,63.91625 +2336,30,2.6,111.05,1.7,63.916 +2337,30,2.6,111.05,1.7,63.91575 +2338,30,2.6,111.05,1.7,63.9155 +2339,30,2.6,111.05,1.7,63.91525 +2340,30,2.6,111.05,1.7,63.915 +2341,30,2.6,111.05,1.7,63.91475 +2342,30,2.6,111.05,1.7,63.9145 +2343,30,2.6,111.05,1.7,63.91425 +2344,30,2.6,111.05,1.7,63.914 +2345,30,2.6,111.05,1.7,63.91375 +2346,30,2.6,111.05,1.7,63.9135 +2347,30,2.6,111.05,1.7,63.91325 +2348,30,2.6,111.05,1.7,63.913 +2349,30,2.6,111.05,1.7,63.91275 +2350,30,2.6,111.05,1.7,63.9125 +2351,30,2.6,111.05,1.7,63.91225 +2352,30,2.6,111.05,1.7,63.912 +2353,30,2.6,111.05,1.7,63.91175 +2354,30,2.6,111.05,1.7,63.9115 +2355,30,2.6,111.05,1.7,63.91125 +2356,30,2.6,111.05,1.7,63.911 +2357,30,2.6,111.05,1.7,63.91075 +2358,30,2.6,111.05,1.7,63.9105 +2359,30,2.6,111.05,1.7,63.91025 +2360,30,2.6,111.05,1.7,63.91 +2361,30,2.6,111.05,1.7,63.90975 +2362,30,2.6,111.05,1.7,63.9095 +2363,30,2.6,111.05,1.7,63.90925 +2364,30,2.6,111.05,1.7,63.909 +2365,30,2.6,111.05,1.7,63.90875 +2366,30,2.6,111.05,1.7,63.9085 +2367,30,2.6,111.05,1.7,63.90825 +2368,30,2.6,111.05,1.7,63.908 +2369,30,2.6,111.05,1.7,63.90775 +2370,30,2.6,111.05,1.7,63.9075 +2371,30,2.6,111.05,1.7,63.90725 +2372,30,2.6,111.05,1.7,63.907 +2373,30,2.6,111.05,1.7,63.90675 +2374,30,2.6,111.05,1.7,63.9065 +2375,30,2.6,111.05,1.7,63.90625 +2376,30,2.6,111.05,1.7,63.906 +2377,30,2.6,111.05,1.7,63.90575 +2378,30,2.6,111.05,1.7,63.9055 +2379,30,2.6,111.05,1.7,63.90525 +2380,30,2.6,111.05,1.7,63.905 +2381,30,2.6,111.05,1.7,63.90475 +2382,30,2.6,111.05,1.7,63.9045 +2383,30,2.6,111.05,1.7,63.90425 +2384,30,2.6,111.05,1.7,63.904 +2385,30,2.6,111.05,1.7,63.90375 +2386,30,2.6,111.05,1.7,63.9035 +2387,30,2.6,111.05,1.7,63.90325 +2388,30,2.6,111.05,1.7,63.903 +2389,30,2.6,111.05,1.7,63.90275 +2390,30,2.6,111.05,1.7,63.9025 +2391,30,2.6,111.05,1.7,63.90225 +2392,30,2.6,111.05,1.7,63.902 +2393,30,2.6,111.05,1.7,63.90175 +2394,30,2.6,111.05,1.7,63.9015 +2395,30,2.6,111.05,1.7,63.90125 +2396,30,2.6,111.05,1.7,63.901 +2397,30,2.6,111.05,1.7,63.90075 +2398,30,2.6,111.05,1.7,63.9005 +2399,30,2.6,111.05,1.7,63.90025 +2400,30,2.6,111.05,1.7,63.9 +2401,30,2.6,111.05,1.7,63.89975 +2402,30,2.6,111.05,1.7,63.8995 +2403,30,2.6,111.05,1.7,63.89925 +2404,30,2.6,111.05,1.7,63.899 +2405,30,2.6,111.05,1.7,63.89875 +2406,30,2.6,111.05,1.7,63.8985 +2407,30,2.6,111.05,1.7,63.89825 +2408,30,2.6,111.05,1.7,63.898 +2409,30,2.6,111.05,1.7,63.89775 +2410,30,2.6,111.05,1.7,63.8975 +2411,30,2.6,111.05,1.7,63.89725 +2412,30,2.6,111.05,1.7,63.897 +2413,30,2.6,111.05,1.7,63.89675 +2414,30,2.6,111.05,1.7,63.8965 +2415,30,2.6,111.05,1.7,63.89625 +2416,30,2.6,111.05,1.7,63.896 +2417,30,2.6,111.05,1.7,63.89575 +2418,30,2.6,111.05,1.7,63.8955 +2419,30,2.6,111.05,1.7,63.89525 +2420,30,2.6,111.05,1.7,63.895 +2421,30,2.6,111.05,1.7,63.89475 +2422,30,2.6,111.05,1.7,63.8945 +2423,30,2.6,111.05,1.7,63.89425 +2424,30,2.6,111.05,1.7,63.894 +2425,30,2.6,111.05,1.7,63.89375 +2426,30,2.6,111.05,1.7,63.8935 +2427,30,2.6,111.05,1.7,63.89325 +2428,30,2.6,111.05,1.7,63.893 +2429,30,2.6,111.05,1.7,63.89275 +2430,30,2.6,111.05,1.7,63.8925 +2431,30,2.6,111.05,1.7,63.89225 +2432,30,2.6,111.05,1.7,63.892 +2433,30,2.6,111.05,1.7,63.89175 +2434,30,2.6,111.05,1.7,63.8915 +2435,30,2.6,111.05,1.7,63.89125 +2436,30,2.6,111.05,1.7,63.891 +2437,30,2.6,111.05,1.7,63.89075 +2438,30,2.6,111.05,1.7,63.8905 +2439,30,2.6,111.05,1.7,63.89025 +2440,30,2.6,111.05,1.7,63.89 +2441,30,2.6,111.05,1.7,63.88975 +2442,30,2.6,111.05,1.7,63.8895 +2443,30,2.6,111.05,1.7,63.88925 +2444,30,2.6,111.05,1.7,63.889 +2445,30,2.6,111.05,1.7,63.88875 +2446,30,2.6,111.05,1.7,63.8885 +2447,30,2.6,111.05,1.7,63.88825 +2448,30,2.6,111.05,1.7,63.888 +2449,30,2.6,111.05,1.7,63.88775 +2450,30,2.6,111.05,1.7,63.8875 +2451,30,2.6,111.05,1.7,63.88725 +2452,30,2.6,111.05,1.7,63.887 +2453,30,2.6,111.05,1.7,63.88675 +2454,30,2.6,111.05,1.7,63.8865 +2455,30,2.6,111.05,1.7,63.88625 +2456,30,2.6,111.05,1.7,63.886 +2457,30,2.6,111.05,1.7,63.88575 +2458,30,2.6,111.05,1.7,63.8855 +2459,30,2.6,111.05,1.7,63.88525 +2460,30,2.6,111.05,1.7,63.885 +2461,30,2.6,111.05,1.7,63.88475 +2462,30,2.6,111.05,1.7,63.8845 +2463,30,2.6,111.05,1.7,63.88425 +2464,30,2.6,111.05,1.7,63.884 +2465,30,2.6,111.05,1.7,63.88375 +2466,30,2.6,111.05,1.7,63.8835 +2467,30,2.6,111.05,1.7,63.88325 +2468,30,2.6,111.05,1.7,63.883 +2469,30,2.6,111.05,1.7,63.88275 +2470,30,2.6,111.05,1.7,63.8825 +2471,30,2.6,111.05,1.7,63.88225 +2472,30,2.6,111.05,1.7,63.882 +2473,30,2.6,111.05,1.7,63.88175 +2474,30,2.6,111.05,1.7,63.8815 +2475,30,2.6,111.05,1.7,63.88125 +2476,30,2.6,111.05,1.7,63.881 +2477,30,2.6,111.05,1.7,63.88075 +2478,30,2.6,111.05,1.7,63.8805 +2479,30,2.6,111.05,1.7,63.88025 +2480,30,2.6,111.05,1.7,63.88 +2481,30,2.6,111.05,1.7,63.87975 +2482,30,2.6,111.05,1.7,63.8795 +2483,30,2.6,111.05,1.7,63.87925 +2484,30,2.6,111.05,1.7,63.879 +2485,30,2.6,111.05,1.7,63.87875 +2486,30,2.6,111.05,1.7,63.8785 +2487,30,2.6,111.05,1.7,63.87825 +2488,30,2.6,111.05,1.7,63.878 +2489,30,2.6,111.05,1.7,63.87775 +2490,30,2.5,111.05,1.7,63.8775 +2491,30,2.5,111.05,1.7,63.87725 +2492,30,2.5,111.05,1.7,63.877 +2493,30,2.5,111.05,1.7,63.87675 +2494,30,2.5,111.05,1.7,63.8765 +2495,30,2.5,111.05,1.7,63.87625 +2496,30,2.5,111.05,1.7,63.876 +2497,30,2.5,111.05,1.7,63.87575 +2498,30,2.5,111.05,1.7,63.8755 +2499,30,2.5,111.05,1.7,63.87525 +2500,30,2.5,111.05,1.7,63.875 +2501,30,2.5,111.05,1.7,63.87475 +2502,30,2.5,111.05,1.7,63.8745 +2503,30,2.5,111.05,1.7,63.87425 +2504,30,2.5,111.05,1.7,63.874 +2505,30,2.5,111.05,1.7,63.87375 +2506,30,2.5,111.05,1.7,63.8735 +2507,30,2.5,111.05,1.7,63.87325 +2508,30,2.5,111.05,1.7,63.873 +2509,30,2.5,111.05,1.7,63.87275 +2510,30,2.5,111.05,1.7,63.8725 +2511,30,2.5,111.05,1.7,63.87225 +2512,30,2.5,111.05,1.7,63.872 +2513,30,2.5,111.05,1.7,63.87175 +2514,30,2.5,111.05,1.7,63.8715 +2515,30,2.5,111.05,1.7,63.87125 +2516,30,2.5,111.05,1.7,63.871 +2517,30,2.5,111.05,1.7,63.87075 +2518,30,2.5,111.05,1.7,63.8705 +2519,30,2.5,111.05,1.7,63.87025 +2520,30,2.5,111.05,1.7,63.87 +2521,30,2.5,111.05,1.7,63.86975 +2522,30,2.5,111.05,1.7,63.8695 +2523,30,2.5,111.05,1.7,63.86925 +2524,30,2.5,111.05,1.7,63.869 +2525,30,2.5,111.05,1.7,63.86875 +2526,30,2.5,111.05,1.7,63.8685 +2527,30,2.5,111.05,1.7,63.86825 +2528,30,2.5,111.05,1.7,63.868 +2529,30,2.5,111.05,1.7,63.86775 +2530,30,2.5,111.05,1.7,63.8675 +2531,30,2.5,111.05,1.7,63.86725 +2532,30,2.5,111.05,1.7,63.867 +2533,30,2.5,111.05,1.7,63.86675 +2534,30,2.5,111.05,1.7,63.8665 +2535,30,2.5,111.05,1.7,63.86625 +2536,30,2.5,111.05,1.7,63.866 +2537,30,2.5,111.05,1.7,63.86575 +2538,30,2.5,111.05,1.7,63.8655 +2539,30,2.5,111.05,1.7,63.86525 +2540,30,2.5,111.05,1.7,63.865 +2541,30,2.5,111.05,1.7,63.86475 +2542,30,2.5,111.05,1.7,63.8645 +2543,30,2.5,111.05,1.7,63.86425 +2544,30,2.5,111.05,1.7,63.864 +2545,30,2.5,111.05,1.7,63.86375 +2546,30,2.5,111.05,1.7,63.8635 +2547,30,2.5,111.05,1.7,63.86325 +2548,30,2.5,111.05,1.7,63.863 +2549,30,2.5,111.05,1.7,63.86275 +2550,30,2.5,111.05,1.7,63.8625 +2551,30,2.5,111.05,1.7,63.86225 +2552,30,2.5,111.05,1.7,63.862 +2553,30,2.5,111.05,1.7,63.86175 +2554,30,2.5,111.05,1.7,63.8615 +2555,30,2.5,111.05,1.7,63.86125 +2556,30,2.5,111.05,1.7,63.861 +2557,30,2.5,111.05,1.7,63.86075 +2558,30,2.5,111.05,1.7,63.8605 +2559,30,2.5,111.05,1.7,63.86025 +2560,30,2.5,111.05,1.7,63.86 +2561,30,2.5,111.05,1.7,63.85975 +2562,30,2.5,111.05,1.7,63.8595 +2563,30,2.5,111.05,1.7,63.85925 +2564,30,2.5,111.05,1.7,63.859 +2565,30,2.5,111.05,1.7,63.85875 +2566,30,2.5,111.05,1.7,63.8585 +2567,30,2.5,111.05,1.7,63.85825 +2568,30,2.5,111.05,1.7,63.858 +2569,30,2.5,111.05,1.7,63.85775 +2570,30,2.5,111.05,1.7,63.8575 +2571,30,2.5,111.05,1.7,63.85725 +2572,30,2.5,111.05,1.7,63.857 +2573,30,2.5,111.05,1.7,63.85675 +2574,30,2.5,111.05,1.7,63.8565 +2575,30,2.5,111.05,1.7,63.85625 +2576,30,2.5,111.05,1.7,63.856 +2577,30,2.5,111.05,1.7,63.85575 +2578,30,2.5,111.05,1.7,63.8555 +2579,30,2.5,111.05,1.7,63.85525 +2580,30,2.5,111.05,1.7,63.855 +2581,30,2.5,111.05,1.7,63.85475 +2582,30,2.5,111.05,1.7,63.8545 +2583,30,2.5,111.05,1.7,63.85425 +2584,30,2.5,111.05,1.7,63.854 +2585,30,2.5,111.05,1.7,63.85375 +2586,30,2.5,111.05,1.7,63.8535 +2587,30,2.5,111.05,1.7,63.85325 +2588,30,2.5,111.05,1.7,63.853 +2589,30,2.5,111.05,1.7,63.85275 +2590,30,2.5,111.05,1.7,63.8525 +2591,30,2.5,111.05,1.7,63.85225 +2592,30,2.5,111.05,1.7,63.852 +2593,30,2.5,111.05,1.7,63.85175 +2594,30,2.5,111.05,1.7,63.8515 +2595,30,2.5,111.05,1.7,63.85125 +2596,30,2.5,111.05,1.7,63.851 +2597,30,2.5,111.05,1.7,63.85075 +2598,30,2.5,111.05,1.7,63.8505 +2599,30,2.5,111.05,1.7,63.85025 +2600,30,2.5,111.05,1.7,63.85 +2601,30,2.5,111.05,1.7,63.84975 +2602,30,2.5,111.05,1.7,63.8495 +2603,30,2.5,111.05,1.7,63.84925 +2604,30,2.5,111.05,1.7,63.849 +2605,30,2.5,111.05,1.7,63.84875 +2606,30,2.5,111.05,1.7,63.8485 +2607,30,2.5,111.05,1.7,63.84825 +2608,30,2.5,111.05,1.7,63.848 +2609,30,2.5,111.05,1.7,63.84775 +2610,30,2.5,111.05,1.7,63.8475 +2611,30,2.5,111.05,1.7,63.84725 +2612,30,2.5,111.05,1.7,63.847 +2613,30,2.5,111.05,1.7,63.84675 +2614,30,2.5,111.05,1.7,63.8465 +2615,30,2.5,111.05,1.7,63.84625 +2616,30,2.5,111.05,1.7,63.846 +2617,30,2.5,111.05,1.7,63.84575 +2618,30,2.5,111.05,1.7,63.8455 +2619,30,2.5,111.05,1.7,63.84525 +2620,30,2.5,111.05,1.7,63.845 +2621,30,2.5,111.05,1.7,63.84475 +2622,30,2.5,111.05,1.7,63.8445 +2623,30,2.5,111.05,1.7,63.84425 +2624,30,2.5,111.05,1.7,63.844 +2625,30,2.5,111.05,1.7,63.84375 +2626,30,2.5,111.05,1.7,63.8435 +2627,30,2.5,111.05,1.7,63.84325 +2628,30,2.5,111.05,1.7,63.843 +2629,30,2.5,111.05,1.7,63.84275 +2630,30,2.5,111.05,1.7,63.8425 +2631,30,2.5,111.05,1.7,63.84225 +2632,30,2.5,111.05,1.7,63.842 +2633,30,2.5,111.05,1.7,63.84175 +2634,30,2.5,111.05,1.7,63.8415 +2635,30,2.5,111.05,1.7,63.84125 +2636,30,2.5,111.05,1.7,63.841 +2637,30,2.5,111.05,1.7,63.84075 +2638,30,2.5,111.05,1.7,63.8405 +2639,30,2.5,111.05,1.7,63.84025 +2640,30,2.5,111.05,1.7,63.84 +2641,30,2.5,111.05,1.7,63.83975 +2642,30,2.5,111.05,1.7,63.8395 +2643,30,2.5,111.05,1.7,63.83925 +2644,30,2.5,111.05,1.7,63.839 +2645,30,2.5,111.05,1.7,63.83875 +2646,30,2.5,111.05,1.7,63.8385 +2647,30,2.5,111.05,1.7,63.83825 +2648,30,2.5,111.05,1.7,63.838 +2649,30,2.5,111.05,1.7,63.83775 +2650,30,2.5,111.05,1.7,63.8375 +2651,30,2.5,111.05,1.7,63.83725 +2652,30,2.5,111.05,1.7,63.837 +2653,30,2.5,111.05,1.7,63.83675 +2654,30,2.5,111.05,1.7,63.8365 +2655,30,2.5,111.05,1.7,63.83625 +2656,30,2.5,111.05,1.7,63.836 +2657,30,2.5,111.05,1.7,63.83575 +2658,30,2.5,111.05,1.7,63.8355 +2659,30,2.5,111.05,1.7,63.83525 +2660,30,2.5,111.05,1.7,63.835 +2661,30,2.5,111.05,1.7,63.83475 +2662,30,2.5,111.05,1.7,63.8345 +2663,30,2.5,111.05,1.7,63.83425 +2664,30,2.5,111.05,1.7,63.834 +2665,30,2.5,111.05,1.7,63.83375 +2666,30,2.5,111.05,1.7,63.8335 +2667,30,2.5,111.05,1.7,63.83325 +2668,30,2.5,111.05,1.7,63.833 +2669,30,2.5,111.05,1.7,63.83275 +2670,30,2.5,111.05,1.7,63.8325 +2671,30,2.5,111.05,1.7,63.83225 +2672,30,2.5,111.05,1.7,63.832 +2673,30,2.5,111.05,1.7,63.83175 +2674,30,2.5,111.05,1.7,63.8315 +2675,30,2.5,111.05,1.7,63.83125 +2676,30,2.5,111.05,1.7,63.831 +2677,30,2.5,111.05,1.7,63.83075 +2678,30,2.5,111.05,1.7,63.8305 +2679,30,2.5,111.05,1.7,63.83025 +2680,30,2.5,111.05,1.7,63.83 +2681,30,2.5,111.05,1.7,63.82975 +2682,30,2.5,111.05,1.7,63.8295 +2683,30,2.5,111.05,1.7,63.82925 +2684,30,2.5,111.05,1.7,63.829 +2685,30,2.5,111.05,1.7,63.82875 +2686,30,2.5,111.05,1.7,63.8285 +2687,30,2.5,111.05,1.7,63.82825 +2688,30,2.5,111.05,1.7,63.828 +2689,30,2.5,111.05,1.7,63.82775 +2690,30,2.5,111.05,1.7,63.8275 +2691,30,2.5,111.05,1.7,63.82725 +2692,30,2.5,111.05,1.7,63.827 +2693,30,2.5,111.05,1.7,63.82675 +2694,30,2.5,111.05,1.7,63.8265 +2695,30,2.5,111.05,1.7,63.82625 +2696,30,2.5,111.05,1.7,63.826 +2697,30,2.5,111.05,1.7,63.82575 +2698,30,2.5,111.05,1.7,63.8255 +2699,30,2.5,111.05,1.7,63.82525 +2700,30,2.5,111.05,1.7,63.825 +2701,30,2.5,111.05,1.7,63.82475 +2702,30,2.5,111.05,1.7,63.8245 +2703,30,2.5,111.05,1.7,63.82425 +2704,30,2.5,111.05,1.7,63.824 +2705,30,2.5,111.05,1.7,63.82375 +2706,30,2.5,111.05,1.7,63.8235 +2707,30,2.5,111.05,1.7,63.82325 +2708,30,2.5,111.05,1.7,63.823 +2709,30,2.5,111.05,1.7,63.82275 +2710,30,2.5,111.05,1.7,63.8225 +2711,30,2.5,111.05,1.7,63.82225 +2712,30,2.5,111.05,1.7,63.822 +2713,30,2.5,111.05,1.7,63.82175 +2714,30,2.5,111.05,1.7,63.8215 +2715,30,2.5,111.05,1.7,63.82125 +2716,30,2.5,111.05,1.7,63.821 +2717,30,2.5,111.05,1.7,63.82075 +2718,30,2.5,111.05,1.7,63.8205 +2719,30,2.5,111.05,1.7,63.82025 +2720,30,2.5,111.05,1.7,63.82 +2721,30,2.5,111.05,1.7,63.81975 +2722,30,2.5,111.05,1.7,63.8195 +2723,30,2.5,111.05,1.7,63.81925 +2724,30,2.5,111.05,1.7,63.819 +2725,30,2.5,111.05,1.7,63.81875 +2726,30,2.5,111.05,1.7,63.8185 +2727,30,2.5,111.05,1.7,63.81825 +2728,30,2.5,111.05,1.7,63.818 +2729,30,2.5,111.05,1.7,63.81775 +2730,30,2.5,111.05,1.7,63.8175 +2731,30,2.5,111.05,1.7,63.81725 +2732,30,2.5,111.05,1.7,63.817 +2733,30,2.5,111.05,1.7,63.81675 +2734,30,2.5,111.05,1.7,63.8165 +2735,30,2.5,111.05,1.7,63.81625 +2736,30,2.5,111.05,1.7,63.816 +2737,30,2.5,111.05,1.7,63.81575 +2738,30,2.5,111.05,1.7,63.8155 +2739,30,2.5,111.05,1.7,63.81525 +2740,30,2.5,111.05,1.7,63.815 +2741,30,2.5,111.05,1.7,63.81475 +2742,30,2.5,111.05,1.7,63.8145 +2743,30,2.5,111.05,1.7,63.81425 +2744,30,2.5,111.05,1.7,63.814 +2745,30,2.5,111.05,1.7,63.81375 +2746,30,2.5,111.05,1.7,63.8135 +2747,30,2.5,111.05,1.7,63.81325 +2748,30,2.5,111.05,1.7,63.813 +2749,30,2.5,111.05,1.7,63.81275 +2750,30,2.5,111.05,1.7,63.8125 +2751,30,2.5,111.05,1.7,63.81225 +2752,30,2.5,111.05,1.7,63.812 +2753,30,2.5,111.05,1.7,63.81175 +2754,30,2.5,111.05,1.7,63.8115 +2755,30,2.5,111.05,1.7,63.81125 +2756,30,2.5,111.05,1.7,63.811 +2757,30,2.5,111.05,1.7,63.81075 +2758,30,2.5,111.05,1.7,63.8105 +2759,30,2.5,111.05,1.7,63.81025 +2760,30,2.5,111.05,1.7,63.81 +2761,30,2.5,111.05,1.7,63.80975 +2762,30,2.5,111.05,1.7,63.8095 +2763,30,2.5,111.05,1.7,63.80925 +2764,30,2.5,111.05,1.7,63.809 +2765,30,2.5,111.05,1.7,63.80875 +2766,30,2.5,111.05,1.7,63.8085 +2767,30,2.5,111.05,1.7,63.80825 +2768,30,2.5,111.05,1.7,63.808 +2769,30,2.5,111.05,1.7,63.80775 +2770,30,2.5,111.05,1.7,63.8075 +2771,30,2.5,111.05,1.7,63.80725 +2772,30,2.5,111.05,1.7,63.807 +2773,30,2.5,111.05,1.7,63.80675 +2774,30,2.5,111.05,1.7,63.8065 +2775,30,2.5,111.05,1.7,63.80625 +2776,30,2.5,111.05,1.7,63.806 +2777,30,2.5,111.05,1.7,63.80575 +2778,30,2.5,111.05,1.7,63.8055 +2779,30,2.5,111.05,1.7,63.80525 +2780,30,2.5,111.05,1.7,63.805 +2781,30,2.5,111.05,1.7,63.80475 +2782,30,2.5,111.05,1.7,63.8045 +2783,30,2.5,111.05,1.7,63.80425 +2784,30,2.5,111.05,1.7,63.804 +2785,30,2.5,111.05,1.7,63.80375 +2786,30,2.5,111.05,1.7,63.8035 +2787,30,2.5,111.05,1.7,63.80325 +2788,30,2.5,111.05,1.7,63.803 +2789,30,2.5,111.05,1.7,63.80275 +2790,30,2.5,111.05,1.7,63.8025 +2791,30,2.5,111.05,1.7,63.80225 +2792,30,2.5,111.05,1.7,63.802 +2793,30,2.5,111.05,1.7,63.80175 +2794,30,2.5,111.05,1.7,63.8015 +2795,30,2.5,111.05,1.7,63.80125 +2796,30,2.5,111.05,1.7,63.801 +2797,30,2.5,111.05,1.7,63.80075 +2798,30,2.5,111.05,1.7,63.8005 +2799,30,2.5,111.05,1.7,63.80025 +2800,30,2.5,111.05,1.7,63.8 +2801,30,2.5,111.05,1.7,63.79975 +2802,30,2.5,111.05,1.7,63.7995 +2803,30,2.5,111.05,1.7,63.79925 +2804,30,2.5,111.05,1.7,63.799 +2805,30,2.5,111.05,1.7,63.79875 +2806,30,2.5,111.05,1.7,63.7985 +2807,30,2.5,111.05,1.7,63.79825 +2808,30,2.5,111.05,1.7,63.798 +2809,30,2.5,111.05,1.7,63.79775 +2810,30,2.5,111.05,1.7,63.7975 +2811,30,2.5,111.05,1.7,63.79725 +2812,30,2.5,111.05,1.7,63.797 +2813,30,2.5,111.05,1.7,63.79675 +2814,30,2.5,111.05,1.7,63.7965 +2815,30,2.5,111.05,1.7,63.79625 +2816,30,2.5,111.05,1.7,63.796 +2817,30,2.5,111.05,1.7,63.79575 +2818,30,2.5,111.05,1.7,63.7955 +2819,30,2.5,111.05,1.7,63.79525 +2820,30,2.5,111.05,1.7,63.795 +2821,30,2.5,111.05,1.7,63.79475 +2822,30,2.5,111.05,1.7,63.7945 +2823,30,2.5,111.05,1.7,63.79425 +2824,30,2.5,111.05,1.7,63.794 +2825,30,2.5,111.05,1.7,63.79375 +2826,30,2.5,111.05,1.7,63.7935 +2827,30,2.5,111.05,1.7,63.79325 +2828,30,2.5,111.05,1.7,63.793 +2829,30,2.5,111.05,1.7,63.79275 +2830,30,2.5,111.05,1.7,63.7925 +2831,30,2.5,111.05,1.7,63.79225 +2832,30,2.5,111.05,1.7,63.792 +2833,30,2.5,111.05,1.7,63.79175 +2834,30,2.5,111.05,1.7,63.7915 +2835,30,2.5,111.05,1.7,63.79125 +2836,30,2.5,111.05,1.7,63.791 +2837,30,2.5,111.05,1.7,63.79075 +2838,30,2.5,111.05,1.7,63.7905 +2839,30,2.5,111.05,1.7,63.79025 +2840,30,2.5,111.05,1.7,63.79 +2841,30,2.5,111.05,1.7,63.78975 +2842,30,2.5,111.05,1.7,63.7895 +2843,30,2.5,111.05,1.7,63.78925 +2844,30,2.5,111.05,1.7,63.789 +2845,30,2.5,111.05,1.7,63.78875 +2846,30,2.5,111.05,1.7,63.7885 +2847,30,2.5,111.05,1.7,63.78825 +2848,30,2.5,111.05,1.7,63.788 +2849,30,2.5,111.05,1.7,63.78775 +2850,30,2.5,111.05,1.7,63.7875 +2851,30,2.5,111.05,1.7,63.78725 +2852,30,2.5,111.05,1.7,63.787 +2853,30,2.5,111.05,1.7,63.78675 +2854,30,2.5,111.05,1.7,63.7865 +2855,30,2.5,111.05,1.7,63.78625 +2856,30,2.5,111.05,1.7,63.786 +2857,30,2.5,111.05,1.7,63.78575 +2858,30,2.5,111.05,1.7,63.7855 +2859,30,2.5,111.05,1.7,63.78525 +2860,30,2.5,111.05,1.7,63.785 +2861,30,2.5,111.05,1.7,63.78475 +2862,30,2.5,111.05,1.7,63.7845 +2863,30,2.5,111.05,1.7,63.78425 +2864,30,2.5,111.05,1.7,63.784 +2865,30,2.5,111.05,1.7,63.78375 +2866,30,2.5,111.05,1.7,63.7835 +2867,30,2.5,111.05,1.7,63.78325 +2868,30,2.5,111.05,1.7,63.783 +2869,30,2.5,111.05,1.7,63.78275 +2870,30,2.5,111.05,1.7,63.7825 +2871,30,2.5,111.05,1.7,63.78225 +2872,30,2.5,111.05,1.7,63.782 +2873,30,2.5,111.05,1.7,63.78175 +2874,30,2.5,111.05,1.7,63.7815 +2875,30,2.5,111.05,1.7,63.78125 +2876,30,2.5,111.05,1.7,63.781 +2877,30,2.5,111.05,1.7,63.78075 +2878,30,2.5,111.05,1.7,63.7805 +2879,30,2.5,111.05,1.7,63.78025 +2880,30,2.5,111.05,1.7,63.78 +2881,30,2.5,111.05,1.7,63.77975 +2882,30,2.5,111.05,1.7,63.7795 +2883,30,2.5,111.05,1.7,63.77925 +2884,30,2.5,111.05,1.7,63.779 +2885,30,2.5,111.05,1.7,63.77875 +2886,30,2.5,111.05,1.7,63.7785 +2887,30,2.5,111.05,1.7,63.77825 +2888,30,2.5,111.05,1.7,63.778 +2889,30,2.5,111.05,1.7,63.77775 +2890,30,2.5,111.05,1.7,63.7775 +2891,30,2.5,111.05,1.7,63.77725 +2892,30,2.5,111.05,1.7,63.777 +2893,30,2.5,111.05,1.7,63.77675 +2894,30,2.5,111.05,1.7,63.7765 +2895,30,2.5,111.05,1.7,63.77625 +2896,30,2.5,111.05,1.7,63.776 +2897,30,2.5,111.05,1.7,63.77575 +2898,30,2.5,111.05,1.7,63.7755 +2899,30,2.5,111.05,1.7,63.77525 +2900,30,2.5,111.05,1.7,63.775 +2901,30,2.5,111.05,1.7,63.77475 +2902,30,2.5,111.05,1.7,63.7745 +2903,30,2.5,111.05,1.7,63.77425 +2904,30,2.5,111.05,1.7,63.774 +2905,30,2.5,111.05,1.7,63.77375 +2906,30,2.5,111.05,1.7,63.7735 +2907,30,2.5,111.05,1.7,63.77325 +2908,30,2.5,111.05,1.7,63.773 +2909,30,2.5,111.05,1.7,63.77275 +2910,30,2.5,111.05,1.7,63.7725 +2911,30,2.5,111.05,1.7,63.77225 +2912,30,2.5,111.05,1.7,63.772 +2913,30,2.5,111.05,1.7,63.77175 +2914,30,2.5,111.05,1.7,63.7715 +2915,30,2.5,111.05,1.7,63.77125 +2916,30,2.5,111.05,1.7,63.771 +2917,30,2.5,111.05,1.7,63.77075 +2918,30,2.5,111.05,1.7,63.7705 +2919,30,2.5,111.05,1.7,63.77025 +2920,30,2.5,111.05,1.7,63.77 +2921,30,2.5,111.05,1.7,63.76975 +2922,30,2.5,111.05,1.7,63.7695 +2923,30,2.5,111.05,1.7,63.76925 +2924,30,2.5,111.05,1.7,63.769 +2925,30,2.5,111.05,1.7,63.76875 +2926,30,2.5,111.05,1.7,63.7685 +2927,30,2.5,111.05,1.7,63.76825 +2928,30,2.5,111.05,1.7,63.768 +2929,30,2.5,111.05,1.7,63.76775 +2930,30,2.5,111.05,1.7,63.7675 +2931,30,2.5,111.05,1.7,63.76725 +2932,30,2.5,111.05,1.7,63.767 +2933,30,2.5,111.05,1.7,63.76675 +2934,30,2.5,111.05,1.7,63.7665 +2935,30,2.5,111.05,1.7,63.76625 +2936,30,2.5,111.05,1.7,63.766 +2937,30,2.5,111.05,1.7,63.76575 +2938,30,2.5,111.05,1.7,63.7655 +2939,30,2.5,111.05,1.7,63.76525 +2940,30,2.5,111.05,1.7,63.765 +2941,30,2.5,111.05,1.7,63.76475 +2942,30,2.5,111.05,1.7,63.7645 +2943,30,2.5,111.05,1.7,63.76425 +2944,30,2.5,111.05,1.7,63.764 +2945,30,2.5,111.05,1.7,63.76375 +2946,30,2.5,111.05,1.7,63.7635 +2947,30,2.5,111.05,1.7,63.76325 +2948,30,2.5,111.05,1.7,63.763 +2949,30,2.5,111.05,1.7,63.76275 +2950,30,2.5,111.05,1.7,63.7625 +2951,30,2.5,111.05,1.7,63.76225 +2952,30,2.5,111.05,1.7,63.762 +2953,30,2.5,111.05,1.7,63.76175 +2954,30,2.5,111.05,1.7,63.7615 +2955,30,2.5,111.05,1.7,63.76125 +2956,30,2.5,111.05,1.7,63.761 +2957,30,2.5,111.05,1.7,63.76075 +2958,30,2.5,111.05,1.7,63.7605 +2959,30,2.5,111.05,1.7,63.76025 +2960,30,2.5,111.05,1.7,63.76 +2961,30,2.5,111.05,1.7,63.75975 +2962,30,2.5,111.05,1.7,63.7595 +2963,30,2.5,111.05,1.7,63.75925 +2964,30,2.5,111.05,1.7,63.759 +2965,30,2.5,111.05,1.7,63.75875 +2966,30,2.5,111.05,1.7,63.7585 +2967,30,2.5,111.05,1.7,63.75825 +2968,30,2.5,111.05,1.7,63.758 +2969,30,2.5,111.05,1.7,63.75775 +2970,30,2.5,111.05,1.7,63.7575 +2971,30,2.5,111.05,1.7,63.75725 +2972,30,2.5,111.05,1.7,63.757 +2973,30,2.5,111.05,1.7,63.75675 +2974,30,2.5,111.05,1.7,63.7565 +2975,30,2.5,111.05,1.7,63.75625 +2976,30,2.5,111.05,1.7,63.756 +2977,30,2.5,111.05,1.7,63.75575 +2978,30,2.5,111.05,1.7,63.7555 +2979,30,2.5,111.05,1.7,63.75525 +2980,30,2.5,111.05,1.7,63.755 +2981,30,2.5,111.05,1.7,63.75475 +2982,30,2.5,111.05,1.7,63.7545 +2983,30,2.5,111.05,1.7,63.75425 +2984,30,2.5,111.05,1.7,63.754 +2985,30,2.5,111.05,1.7,63.75375 +2986,30,2.5,111.05,1.7,63.7535 +2987,30,2.5,111.05,1.7,63.75325 +2988,30,2.5,111.05,1.7,63.753 +2989,30,2.5,111.05,1.7,63.75275 +2990,30,2.5,111.05,1.7,63.7525 +2991,30,2.5,111.05,1.7,63.75225 +2992,30,2.5,111.05,1.7,63.752 +2993,30,2.5,111.05,1.7,63.75175 +2994,30,2.5,111.05,1.7,63.7515 +2995,30,2.5,111.05,1.7,63.75125 +2996,30,2.5,111.05,1.7,63.751 +2997,30,2.5,111.05,1.7,63.75075 +2998,30,2.5,111.05,1.7,63.7505 +2999,30,2.5,111.05,1.7,63.75025 +3000,30,2.5,111.05,1.7,63.75 +3001,30,2.5,111.05,1.7,63.75 +3002,30,2.5,111.05,1.7,63.75 +3003,30,2.5,111.05,1.7,63.75 +3004,30,2.5,111.05,1.7,63.75 +3005,30,2.5,111.05,1.7,63.75 +3006,30,2.5,111.05,1.7,63.75 +3007,30,2.5,111.05,1.7,63.75 +3008,30,2.5,111.05,1.7,63.75 +3009,30,2.5,111.05,1.7,63.75 +3010,30,2.5,111.05,1.7,63.75 +3011,30,2.5,111.05,1.7,63.75 +3012,30,2.5,111.05,1.7,63.75 +3013,30,2.5,111.05,1.7,63.75 +3014,30,2.5,111.05,1.7,63.75 +3015,30,2.5,111.05,1.7,63.75 +3016,30,2.5,111.05,1.7,63.75 +3017,30,2.5,111.05,1.7,63.75 +3018,30,2.5,111.05,1.7,63.75 +3019,30,2.5,111.05,1.7,63.75 +3020,30,2.5,111.05,1.7,63.75 +3021,30,2.5,111.05,1.7,63.75 +3022,30,2.5,111.05,1.7,63.75 +3023,30,2.5,111.05,1.7,63.75 +3024,30,2.5,111.05,1.7,63.75 +3025,30,2.5,111.05,1.7,63.75 +3026,30,2.5,111.05,1.7,63.75 +3027,30,2.5,111.05,1.7,63.75 +3028,30,2.5,111.05,1.7,63.75 +3029,30,2.5,111.05,1.7,63.75 +3030,30,2.5,111.05,1.7,63.75 +3031,30,2.5,111.05,1.7,63.75 +3032,30,2.5,111.05,1.7,63.75 +3033,30,2.5,111.05,1.7,63.75 +3034,30,2.5,111.05,1.7,63.75 +3035,30,2.5,111.05,1.7,63.75 +3036,30,2.5,111.05,1.7,63.75 +3037,30,2.5,111.05,1.7,63.75 +3038,30,2.5,111.05,1.7,63.75 +3039,30,2.5,111.05,1.7,63.75 +3040,30,2.5,111.05,1.7,63.75 +3041,30,2.5,111.05,1.7,63.75 +3042,30,2.5,111.05,1.7,63.75 +3043,30,2.5,111.05,1.7,63.75 +3044,30,2.5,111.05,1.7,63.75 +3045,30,2.5,111.05,1.7,63.75 +3046,30,2.5,111.05,1.7,63.75 +3047,30,2.5,111.05,1.7,63.75 +3048,30,2.5,111.05,1.7,63.75 +3049,30,2.5,111.05,1.7,63.75 +3050,30,2.5,111.05,1.7,63.75 +3051,30,2.5,111.05,1.7,63.75 +3052,30,2.5,111.05,1.7,63.75 +3053,30,2.5,111.05,1.7,63.75 +3054,30,2.5,111.05,1.7,63.75 +3055,30,2.5,111.05,1.7,63.75 +3056,30,2.5,111.05,1.7,63.75 +3057,30,2.5,111.05,1.7,63.75 +3058,30,2.5,111.05,1.7,63.75 +3059,30,2.5,111.05,1.7,63.75 +3060,30,2.5,111.05,1.7,63.75 +3061,30,2.5,111.05,1.7,63.75 +3062,30,2.5,111.05,1.7,63.75 +3063,30,2.5,111.05,1.7,63.75 +3064,30,2.5,111.05,1.7,63.75 +3065,30,2.5,111.05,1.7,63.75 +3066,30,2.5,111.05,1.7,63.75 +3067,30,2.5,111.05,1.7,63.75 +3068,30,2.5,111.05,1.7,63.75 +3069,30,2.5,111.05,1.7,63.75 +3070,30,2.5,111.05,1.7,63.75 +3071,30,2.5,111.05,1.7,63.75 +3072,30,2.5,111.05,1.7,63.75 +3073,30,2.5,111.05,1.7,63.75 +3074,30,2.5,111.05,1.7,63.75 +3075,30,2.5,111.05,1.7,63.75 +3076,30,2.5,111.05,1.7,63.75 +3077,30,2.5,111.05,1.7,63.75 +3078,30,2.5,111.05,1.7,63.75 +3079,30,2.5,111.05,1.7,63.75 +3080,30,2.5,111.05,1.7,63.75 +3081,30,2.5,111.05,1.7,63.75 +3082,30,2.5,111.05,1.7,63.75 +3083,30,2.5,111.05,1.7,63.75 +3084,30,2.5,111.05,1.7,63.75 +3085,30,2.5,111.05,1.7,63.75 +3086,30,2.5,111.05,1.7,63.75 +3087,30,2.5,111.05,1.7,63.75 +3088,30,2.5,111.05,1.7,63.75 +3089,30,2.5,111.05,1.7,63.75 +3090,30,2.5,111.05,1.7,63.75 +3091,30,2.5,111.05,1.7,63.75 +3092,30,2.5,111.05,1.7,63.75 +3093,30,2.5,111.05,1.7,63.75 +3094,30,2.5,111.05,1.7,63.75 +3095,30,2.5,111.05,1.7,63.75 +3096,30,2.5,111.05,1.7,63.75 +3097,30,2.5,111.05,1.7,63.75 +3098,30,2.5,111.05,1.7,63.75 +3099,30,2.5,111.05,1.7,63.75 +3100,30,2.5,111.05,1.7,63.75 +3101,30,2.5,111.05,1.7,63.75 +3102,30,2.5,111.05,1.7,63.75 +3103,30,2.5,111.05,1.7,63.75 +3104,30,2.5,111.05,1.7,63.75 +3105,30,2.5,111.05,1.7,63.75 +3106,30,2.5,111.05,1.7,63.75 +3107,30,2.5,111.05,1.7,63.75 +3108,30,2.5,111.05,1.7,63.75 +3109,30,2.5,111.05,1.7,63.75 +3110,30,2.5,111.05,1.7,63.75 +3111,30,2.5,111.05,1.7,63.75 +3112,30,2.5,111.05,1.7,63.75 +3113,30,2.5,111.05,1.7,63.75 +3114,30,2.5,111.05,1.7,63.75 +3115,30,2.5,111.05,1.7,63.75 +3116,30,2.5,111.05,1.7,63.75 +3117,30,2.5,111.05,1.7,63.75 +3118,30,2.5,111.05,1.7,63.75 +3119,30,2.5,111.05,1.7,63.75 +3120,30,2.5,111.05,1.7,63.75 +3121,30,2.5,111.05,1.7,63.75 +3122,30,2.5,111.05,1.7,63.75 +3123,30,2.5,111.05,1.7,63.75 +3124,30,2.5,111.05,1.7,63.75 +3125,30,2.5,111.05,1.7,63.75 +3126,30,2.5,111.05,1.7,63.75 +3127,30,2.5,111.05,1.7,63.75 +3128,30,2.5,111.05,1.7,63.75 +3129,30,2.5,111.05,1.7,63.75 +3130,30,2.5,111.05,1.7,63.75 +3131,30,2.5,111.05,1.7,63.75 +3132,30,2.5,111.05,1.7,63.75 +3133,30,2.5,111.05,1.7,63.75 +3134,30,2.5,111.05,1.7,63.75 +3135,30,2.5,111.05,1.7,63.75 +3136,30,2.5,111.05,1.7,63.75 +3137,30,2.5,111.05,1.7,63.75 +3138,30,2.5,111.05,1.7,63.75 +3139,30,2.5,111.05,1.7,63.75 +3140,30,2.5,111.05,1.7,63.75 +3141,30,2.5,111.05,1.7,63.75 +3142,30,2.5,111.05,1.7,63.75 +3143,30,2.5,111.05,1.7,63.75 +3144,30,2.5,111.05,1.7,63.75 +3145,30,2.5,111.05,1.7,63.75 +3146,30,2.5,111.05,1.7,63.75 +3147,30,2.5,111.05,1.7,63.75 +3148,30,2.5,111.05,1.7,63.75 +3149,30,2.5,111.05,1.7,63.75 +3150,30,2.5,111.05,1.7,63.75 +3151,30,2.5,111.05,1.7,63.75 +3152,30,2.5,111.05,1.7,63.75 +3153,30,2.5,111.05,1.7,63.75 +3154,30,2.5,111.05,1.7,63.75 +3155,30,2.5,111.05,1.7,63.75 +3156,30,2.5,111.05,1.7,63.75 +3157,30,2.5,111.05,1.7,63.75 +3158,30,2.5,111.05,1.7,63.75 +3159,30,2.5,111.05,1.7,63.75 +3160,30,2.5,111.05,1.7,63.75 +3161,30,2.5,111.05,1.7,63.75 +3162,30,2.5,111.05,1.7,63.75 +3163,30,2.5,111.05,1.7,63.75 +3164,30,2.5,111.05,1.7,63.75 +3165,30,2.5,111.05,1.7,63.75 +3166,30,2.5,111.05,1.7,63.75 +3167,30,2.5,111.05,1.7,63.75 +3168,30,2.5,111.05,1.7,63.75 +3169,30,2.5,111.05,1.7,63.75 +3170,30,2.5,111.05,1.7,63.75 +3171,30,2.5,111.05,1.7,63.75 +3172,30,2.5,111.05,1.7,63.75 +3173,30,2.5,111.05,1.7,63.75 +3174,30,2.5,111.05,1.7,63.75 +3175,30,2.5,111.05,1.7,63.75 +3176,30,2.5,111.05,1.7,63.75 +3177,30,2.5,111.05,1.7,63.75 +3178,30,2.5,111.05,1.7,63.75 +3179,30,2.5,111.05,1.7,63.75 +3180,30,2.5,111.05,1.7,63.75 +3181,30,2.5,111.05,1.7,63.75 +3182,30,2.5,111.05,1.7,63.75 +3183,30,2.5,111.05,1.7,63.75 +3184,30,2.5,111.05,1.7,63.75 +3185,30,2.5,111.05,1.7,63.75 +3186,30,2.5,111.05,1.7,63.75 +3187,30,2.5,111.05,1.7,63.75 +3188,30,2.5,111.05,1.7,63.75 +3189,30,2.5,111.05,1.7,63.75 +3190,30,2.5,111.05,1.7,63.75 +3191,30,2.5,111.05,1.7,63.75 +3192,30,2.5,111.05,1.7,63.75 +3193,30,2.5,111.05,1.7,63.75 +3194,30,2.5,111.05,1.7,63.75 +3195,30,2.5,111.05,1.7,63.75 +3196,30,2.5,111.05,1.7,63.75 +3197,30,2.5,111.05,1.7,63.75 +3198,30,2.5,111.05,1.7,63.75 +3199,30,2.5,111.05,1.7,63.75 +3200,30,2.5,111.05,1.7,63.75 +3201,30,2.5,111.05,1.7,63.75 +3202,30,2.5,111.05,1.7,63.75 +3203,30,2.5,111.05,1.7,63.75 +3204,30,2.5,111.05,1.7,63.75 +3205,30,2.5,111.05,1.7,63.75 +3206,30,2.5,111.05,1.7,63.75 +3207,30,2.5,111.05,1.7,63.75 +3208,30,2.5,111.05,1.7,63.75 +3209,30,2.5,111.05,1.7,63.75 +3210,30,2.5,111.05,1.7,63.75 +3211,30,2.5,111.05,1.7,63.75 +3212,30,2.5,111.05,1.7,63.75 +3213,30,2.5,111.05,1.7,63.75 +3214,30,2.5,111.05,1.7,63.75 +3215,30,2.5,111.05,1.7,63.75 +3216,30,2.5,111.05,1.7,63.75 +3217,30,2.5,111.05,1.7,63.75 +3218,30,2.5,111.05,1.7,63.75 +3219,30,2.5,111.05,1.7,63.75 +3220,30,2.5,111.05,1.7,63.75 +3221,30,2.5,111.05,1.7,63.75 +3222,30,2.5,111.05,1.7,63.75 +3223,30,2.5,111.05,1.7,63.75 +3224,30,2.5,111.05,1.7,63.75 +3225,30,2.5,111.05,1.7,63.75 +3226,30,2.5,111.05,1.7,63.75 +3227,30,2.5,111.05,1.7,63.75 +3228,30,2.5,111.05,1.7,63.75 +3229,30,2.5,111.05,1.7,63.75 +3230,30,2.5,111.05,1.7,63.75 +3231,30,2.5,111.05,1.7,63.75 +3232,30,2.5,111.05,1.7,63.75 +3233,30,2.5,111.05,1.7,63.75 +3234,30,2.5,111.05,1.7,63.75 +3235,30,2.5,111.05,1.7,63.75 +3236,30,2.5,111.05,1.7,63.75 +3237,30,2.5,111.05,1.7,63.75 +3238,30,2.5,111.05,1.7,63.75 +3239,30,2.5,111.05,1.7,63.75 +3240,30,2.5,111.05,1.7,63.75 +3241,30,2.5,111.05,1.7,63.75 +3242,30,2.5,111.05,1.7,63.75 +3243,30,2.5,111.05,1.7,63.75 +3244,30,2.5,111.05,1.7,63.75 +3245,30,2.5,111.05,1.7,63.75 +3246,30,2.5,111.05,1.7,63.75 +3247,30,2.5,111.05,1.7,63.75 +3248,30,2.5,111.05,1.7,63.75 +3249,30,2.5,111.05,1.7,63.75 +3250,30,2.5,111.05,1.7,63.75 +3251,30,2.5,111.05,1.7,63.75 +3252,30,2.5,111.05,1.7,63.75 +3253,30,2.5,111.05,1.7,63.75 +3254,30,2.5,111.05,1.7,63.75 +3255,30,2.5,111.05,1.7,63.75 +3256,30,2.5,111.05,1.7,63.75 +3257,30,2.5,111.05,1.7,63.75 +3258,30,2.5,111.05,1.7,63.75 +3259,30,2.5,111.05,1.7,63.75 +3260,30,2.5,111.05,1.7,63.75 +3261,30,2.5,111.05,1.7,63.75 +3262,30,2.5,111.05,1.7,63.75 +3263,30,2.5,111.05,1.7,63.75 +3264,30,2.5,111.05,1.7,63.75 +3265,30,2.5,111.05,1.7,63.75 +3266,30,2.5,111.05,1.7,63.75 +3267,30,2.5,111.05,1.7,63.75 +3268,30,2.5,111.05,1.7,63.75 +3269,30,2.5,111.05,1.7,63.75 +3270,30,2.5,111.05,1.7,63.75 +3271,30,2.5,111.05,1.7,63.75 +3272,30,2.5,111.05,1.7,63.75 +3273,30,2.5,111.05,1.7,63.75 +3274,30,2.5,111.05,1.7,63.75 +3275,30,2.5,111.05,1.7,63.75 +3276,30,2.5,111.05,1.7,63.75 +3277,30,2.5,111.05,1.7,63.75 +3278,30,2.5,111.05,1.7,63.75 +3279,30,2.5,111.05,1.7,63.75 +3280,30,2.5,111.05,1.7,63.75 +3281,30,2.5,111.05,1.7,63.75 +3282,30,2.5,111.05,1.7,63.75 +3283,30,2.5,111.05,1.7,63.75 +3284,30,2.5,111.05,1.7,63.75 +3285,30,2.5,111.05,1.7,63.75 +3286,30,2.5,111.05,1.7,63.75 +3287,30,2.5,111.05,1.7,63.75 +3288,30,2.5,111.05,1.7,63.75 +3289,30,2.5,111.05,1.7,63.75 +3290,30,2.5,111.05,1.7,63.75 +3291,30,2.5,111.05,1.7,63.75 +3292,30,2.5,111.05,1.7,63.75 +3293,30,2.5,111.05,1.7,63.75 +3294,30,2.5,111.05,1.7,63.75 +3295,30,2.5,111.05,1.7,63.75 +3296,30,2.5,111.05,1.7,63.75 +3297,30,2.5,111.05,1.7,63.75 +3298,30,2.5,111.05,1.7,63.75 +3299,30,2.5,111.05,1.7,63.75 +3300,30,2.5,111.05,1.7,63.75 +3301,30,2.5,111.05,1.7,63.75 +3302,30,2.5,111.05,1.7,63.75 +3303,30,2.5,111.05,1.7,63.75 +3304,30,2.5,111.05,1.7,63.75 +3305,30,2.5,111.05,1.7,63.75 +3306,30,2.5,111.05,1.7,63.75 +3307,30,2.5,111.05,1.7,63.75 +3308,30,2.5,111.05,1.7,63.75 +3309,30,2.5,111.05,1.7,63.75 +3310,30,2.5,111.05,1.7,63.75 +3311,30,2.5,111.05,1.7,63.75 +3312,30,2.5,111.05,1.7,63.75 +3313,30,2.5,111.05,1.7,63.75 +3314,30,2.5,111.05,1.7,63.75 +3315,30,2.5,111.05,1.7,63.75 +3316,30,2.5,111.05,1.7,63.75 +3317,30,2.5,111.05,1.7,63.75 +3318,30,2.5,111.05,1.7,63.75 +3319,30,2.5,111.05,1.7,63.75 +3320,30,2.5,111.05,1.7,63.75 +3321,30,2.5,111.05,1.7,63.75 +3322,30,2.5,111.05,1.7,63.75 +3323,30,2.5,111.05,1.7,63.75 +3324,30,2.5,111.05,1.7,63.75 +3325,30,2.5,111.05,1.7,63.75 +3326,30,2.5,111.05,1.7,63.75 +3327,30,2.5,111.05,1.7,63.75 +3328,30,2.5,111.05,1.7,63.75 +3329,30,2.5,111.05,1.7,63.75 +3330,30,2.5,111.05,1.7,63.75 +3331,30,2.5,111.05,1.7,63.75 +3332,30,2.5,111.05,1.7,63.75 +3333,30,2.5,111.05,1.7,63.75 +3334,30,2.5,111.05,1.7,63.75 +3335,30,2.5,111.05,1.7,63.75 +3336,30,2.5,111.05,1.7,63.75 +3337,30,2.5,111.05,1.7,63.75 +3338,30,2.5,111.05,1.7,63.75 +3339,30,2.5,111.05,1.7,63.75 +3340,30,2.5,111.05,1.7,63.75 +3341,30,2.5,111.05,1.7,63.75 +3342,30,2.5,111.05,1.7,63.75 +3343,30,2.5,111.05,1.7,63.75 +3344,30,2.5,111.05,1.7,63.75 +3345,30,2.5,111.05,1.7,63.75 +3346,30,2.5,111.05,1.7,63.75 +3347,30,2.5,111.05,1.7,63.75 +3348,30,2.5,111.05,1.7,63.75 +3349,30,2.5,111.05,1.7,63.75 +3350,30,2.5,111.05,1.7,63.75 +3351,30,2.5,111.05,1.7,63.75 +3352,30,2.5,111.05,1.7,63.75 +3353,30,2.5,111.05,1.7,63.75 +3354,30,2.5,111.05,1.7,63.75 +3355,30,2.5,111.05,1.7,63.75 +3356,30,2.5,111.05,1.7,63.75 +3357,30,2.5,111.05,1.7,63.75 +3358,30,2.5,111.05,1.7,63.75 +3359,30,2.5,111.05,1.7,63.75 +3360,30,2.5,111.05,1.7,63.75 +3361,30,2.5,111.05,1.7,63.75 +3362,30,2.5,111.05,1.7,63.75 +3363,30,2.5,111.05,1.7,63.75 +3364,30,2.5,111.05,1.7,63.75 +3365,30,2.5,111.05,1.7,63.75 +3366,30,2.5,111.05,1.7,63.75 +3367,30,2.5,111.05,1.7,63.75 +3368,30,2.5,111.05,1.7,63.75 +3369,30,2.5,111.05,1.7,63.75 +3370,30,2.5,111.05,1.7,63.75 +3371,30,2.5,111.05,1.7,63.75 +3372,30,2.5,111.05,1.7,63.75 +3373,30,2.5,111.05,1.7,63.75 +3374,30,2.5,111.05,1.7,63.75 +3375,30,2.5,111.05,1.7,63.75 +3376,30,2.5,111.05,1.7,63.75 +3377,30,2.5,111.05,1.7,63.75 +3378,30,2.5,111.05,1.7,63.75 +3379,30,2.5,111.05,1.7,63.75 +3380,30,2.5,111.05,1.7,63.75 +3381,30,2.5,111.05,1.7,63.75 +3382,30,2.5,111.05,1.7,63.75 +3383,30,2.5,111.05,1.7,63.75 +3384,30,2.5,111.05,1.7,63.75 +3385,30,2.5,111.05,1.7,63.75 +3386,30,2.5,111.05,1.7,63.75 +3387,30,2.5,111.05,1.7,63.75 +3388,30,2.5,111.05,1.7,63.75 +3389,30,2.5,111.05,1.7,63.75 +3390,30,2.5,111.05,1.7,63.75 +3391,30,2.5,111.05,1.7,63.75 +3392,30,2.5,111.05,1.7,63.75 +3393,30,2.5,111.05,1.7,63.75 +3394,30,2.5,111.05,1.7,63.75 +3395,30,2.5,111.05,1.7,63.75 +3396,30,2.5,111.05,1.7,63.75 +3397,30,2.5,111.05,1.7,63.75 +3398,30,2.5,111.05,1.7,63.75 +3399,30,2.5,111.05,1.7,63.75 +3400,30,2.5,111.05,1.7,63.75 +3401,30,2.5,111.05,1.7,63.75 +3402,30,2.5,111.05,1.7,63.75 +3403,30,2.5,111.05,1.7,63.75 +3404,30,2.5,111.05,1.7,63.75 +3405,30,2.5,111.05,1.7,63.75 +3406,30,2.5,111.05,1.7,63.75 +3407,30,2.5,111.05,1.7,63.75 +3408,30,2.5,111.05,1.7,63.75 +3409,30,2.5,111.05,1.7,63.75 +3410,30,2.5,111.05,1.7,63.75 +3411,30,2.5,111.05,1.7,63.75 +3412,30,2.5,111.05,1.7,63.75 +3413,30,2.5,111.05,1.7,63.75 +3414,30,2.5,111.05,1.7,63.75 +3415,30,2.5,111.05,1.7,63.75 +3416,30,2.5,111.05,1.7,63.75 +3417,30,2.5,111.05,1.7,63.75 +3418,30,2.5,111.05,1.7,63.75 +3419,30,2.5,111.05,1.7,63.75 +3420,30,2.5,111.05,1.7,63.75 +3421,30,2.5,111.05,1.7,63.75 +3422,30,2.5,111.05,1.7,63.75 +3423,30,2.5,111.05,1.7,63.75 +3424,30,2.5,111.05,1.7,63.75 +3425,30,2.5,111.05,1.7,63.75 +3426,30,2.5,111.05,1.7,63.75 +3427,30,2.5,111.05,1.7,63.75 +3428,30,2.5,111.05,1.7,63.75 +3429,30,2.5,111.05,1.7,63.75 +3430,30,2.5,111.05,1.7,63.75 +3431,30,2.5,111.05,1.7,63.75 +3432,30,2.5,111.05,1.7,63.75 +3433,30,2.5,111.05,1.7,63.75 +3434,30,2.5,111.05,1.7,63.75 +3435,30,2.5,111.05,1.7,63.75 +3436,30,2.5,111.05,1.7,63.75 +3437,30,2.5,111.05,1.7,63.75 +3438,30,2.5,111.05,1.7,63.75 +3439,30,2.5,111.05,1.7,63.75 +3440,30,2.5,111.05,1.7,63.75 +3441,30,2.5,111.05,1.7,63.75 +3442,30,2.5,111.05,1.7,63.75 +3443,30,2.5,111.05,1.7,63.75 +3444,30,2.5,111.05,1.7,63.75 +3445,30,2.5,111.05,1.7,63.75 +3446,30,2.5,111.05,1.7,63.75 +3447,30,2.5,111.05,1.7,63.75 +3448,30,2.5,111.05,1.7,63.75 +3449,30,2.5,111.05,1.7,63.75 +3450,30,2.5,111.05,1.7,63.75 +3451,30,2.5,111.05,1.7,63.75 +3452,30,2.5,111.05,1.7,63.75 +3453,30,2.5,111.05,1.7,63.75 +3454,30,2.5,111.05,1.7,63.75 +3455,30,2.5,111.05,1.7,63.75 +3456,30,2.5,111.05,1.7,63.75 +3457,30,2.5,111.05,1.7,63.75 +3458,30,2.5,111.05,1.7,63.75 +3459,30,2.5,111.05,1.7,63.75 +3460,30,2.5,111.05,1.7,63.75 +3461,30,2.5,111.05,1.7,63.75 +3462,30,2.5,111.05,1.7,63.75 +3463,30,2.5,111.05,1.7,63.75 +3464,30,2.5,111.05,1.7,63.75 +3465,30,2.5,111.05,1.7,63.75 +3466,30,2.5,111.05,1.7,63.75 +3467,30,2.5,111.05,1.7,63.75 +3468,30,2.5,111.05,1.7,63.75 +3469,30,2.5,111.05,1.7,63.75 +3470,30,2.5,111.05,1.7,63.75 +3471,30,2.5,111.05,1.7,63.75 +3472,30,2.5,111.05,1.7,63.75 +3473,30,2.5,111.05,1.7,63.75 +3474,30,2.5,111.05,1.7,63.75 +3475,30,2.5,111.05,1.7,63.75 +3476,30,2.5,111.05,1.7,63.75 +3477,30,2.5,111.05,1.7,63.75 +3478,30,2.5,111.05,1.7,63.75 +3479,30,2.5,111.05,1.7,63.75 +3480,30,2.5,111.05,1.7,63.75 +3481,30,2.5,111.05,1.7,63.75 +3482,30,2.5,111.05,1.7,63.75 +3483,30,2.5,111.05,1.7,63.75 +3484,30,2.5,111.05,1.7,63.75 +3485,30,2.5,111.05,1.7,63.75 +3486,30,2.5,111.05,1.7,63.75 +3487,30,2.5,111.05,1.7,63.75 +3488,30,2.5,111.05,1.7,63.75 +3489,30,2.5,111.05,1.7,63.75 +3490,30,2.5,111.05,1.7,63.75 +3491,30,2.5,111.05,1.7,63.75 +3492,30,2.5,111.05,1.7,63.75 +3493,30,2.5,111.05,1.7,63.75 +3494,30,2.5,111.05,1.7,63.75 +3495,30,2.5,111.05,1.7,63.75 +3496,30,2.5,111.05,1.7,63.75 +3497,30,2.5,111.05,1.7,63.75 +3498,30,2.5,111.05,1.7,63.75 +3499,30,2.5,111.05,1.7,63.75 +3500,30,2.5,111.05,1.7,63.75 +3501,30,2.5,111.05,1.7,63.75 +3502,30,2.5,111.05,1.7,63.75 +3503,30,2.5,111.05,1.7,63.75 +3504,30,2.5,111.05,1.7,63.75 +3505,30,2.5,111.05,1.7,63.75 +3506,30,2.5,111.05,1.7,63.75 +3507,30,2.5,111.05,1.7,63.75 +3508,30,2.5,111.05,1.7,63.75 +3509,30,2.5,111.05,1.7,63.75 +3510,30,2.5,111.05,1.7,63.75 +3511,30,2.5,111.05,1.7,63.75 +3512,30,2.5,111.05,1.7,63.75 +3513,30,2.5,111.05,1.7,63.75 +3514,30,2.5,111.05,1.7,63.75 +3515,30,2.5,111.05,1.7,63.75 +3516,30,2.5,111.05,1.7,63.75 +3517,30,2.5,111.05,1.7,63.75 +3518,30,2.5,111.05,1.7,63.75 +3519,30,2.5,111.05,1.7,63.75 +3520,30,2.5,111.05,1.7,63.75 +3521,30,2.5,111.05,1.7,63.75 +3522,30,2.5,111.05,1.7,63.75 +3523,30,2.5,111.05,1.7,63.75 +3524,30,2.5,111.05,1.7,63.75 +3525,30,2.5,111.05,1.7,63.75 +3526,30,2.5,111.05,1.7,63.75 +3527,30,2.5,111.05,1.7,63.75 +3528,30,2.5,111.05,1.7,63.75 +3529,30,2.5,111.05,1.7,63.75 +3530,30,2.5,111.05,1.7,63.75 +3531,30,2.5,111.05,1.7,63.75 +3532,30,2.5,111.05,1.7,63.75 +3533,30,2.5,111.05,1.7,63.75 +3534,30,2.5,111.05,1.7,63.75 +3535,30,2.5,111.05,1.7,63.75 +3536,30,2.5,111.05,1.7,63.75 +3537,30,2.5,111.05,1.7,63.75 +3538,30,2.5,111.05,1.7,63.75 +3539,30,2.5,111.05,1.7,63.75 +3540,30,2.5,111.05,1.7,63.75 +3541,30,2.5,111.05,1.7,63.75 +3542,30,2.5,111.05,1.7,63.75 +3543,30,2.5,111.05,1.7,63.75 +3544,30,2.5,111.05,1.7,63.75 +3545,30,2.5,111.05,1.7,63.75 +3546,30,2.5,111.05,1.7,63.75 +3547,30,2.5,111.05,1.7,63.75 +3548,30,2.5,111.05,1.7,63.75 +3549,30,2.5,111.05,1.7,63.75 +3550,30,2.5,111.05,1.7,63.75 +3551,30,2.5,111.05,1.7,63.75 +3552,30,2.5,111.05,1.7,63.75 +3553,30,2.5,111.05,1.7,63.75 +3554,30,2.5,111.05,1.7,63.75 +3555,30,2.5,111.05,1.7,63.75 +3556,30,2.5,111.05,1.7,63.75 +3557,30,2.5,111.05,1.7,63.75 +3558,30,2.5,111.05,1.7,63.75 +3559,30,2.5,111.05,1.7,63.75 +3560,30,2.5,111.05,1.7,63.75 +3561,30,2.5,111.05,1.7,63.75 +3562,30,2.5,111.05,1.7,63.75 +3563,30,2.5,111.05,1.7,63.75 +3564,30,2.5,111.05,1.7,63.75 +3565,30,2.5,111.05,1.7,63.75 +3566,30,2.5,111.05,1.7,63.75 +3567,30,2.5,111.05,1.7,63.75 +3568,30,2.5,111.05,1.7,63.75 +3569,30,2.5,111.05,1.7,63.75 +3570,30,2.5,111.05,1.7,63.75 +3571,30,2.5,111.05,1.7,63.75 +3572,30,2.5,111.05,1.7,63.75 +3573,30,2.5,111.05,1.7,63.75 +3574,30,2.5,111.05,1.7,63.75 +3575,30,2.5,111.05,1.7,63.75 +3576,30,2.5,111.05,1.7,63.75 +3577,30,2.5,111.05,1.7,63.75 +3578,30,2.5,111.05,1.7,63.75 +3579,30,2.5,111.05,1.7,63.75 +3580,30,2.5,111.05,1.7,63.75 +3581,30,2.5,111.05,1.7,63.75 +3582,30,2.5,111.05,1.7,63.75 +3583,30,2.5,111.05,1.7,63.75 +3584,30,2.5,111.05,1.7,63.75 +3585,30,2.5,111.05,1.7,63.75 +3586,30,2.5,111.05,1.7,63.75 +3587,30,2.5,111.05,1.7,63.75 +3588,30,2.5,111.05,1.7,63.75 +3589,30,2.5,111.05,1.7,63.75 +3590,30,2.5,111.05,1.7,63.75 +3591,30,2.5,111.05,1.7,63.75 +3592,30,2.5,111.05,1.7,63.75 +3593,30,2.5,111.05,1.7,63.75 +3594,30,2.5,111.05,1.7,63.75 +3595,30,2.5,111.05,1.7,63.75 +3596,30,2.5,111.05,1.7,63.75 +3597,30,2.5,111.05,1.7,63.75 +3598,30,2.5,111.05,1.7,63.75 +3599,30,2.5,111.05,1.7,63.75 +3600,30,2.5,111.05,1.7,63.75 +3601,30,2.5,111.05,1.7,63.75 +3602,30,2.5,111.05,1.7,63.75 +3603,30,2.5,111.05,1.7,63.75 +3604,30,2.5,111.05,1.7,63.75 +3605,30,2.5,111.05,1.7,63.75 +3606,30,2.5,111.05,1.7,63.75 +3607,30,2.5,111.05,1.7,63.75 +3608,30,2.5,111.05,1.7,63.75 +3609,30,2.5,111.05,1.7,63.75 +3610,30,2.5,111.05,1.7,63.75 +3611,30,2.5,111.05,1.7,63.75 +3612,30,2.5,111.05,1.7,63.75 +3613,30,2.5,111.05,1.7,63.75 +3614,30,2.5,111.05,1.7,63.75 +3615,30,2.5,111.05,1.7,63.75 +3616,30,2.5,111.05,1.7,63.75 +3617,30,2.5,111.05,1.7,63.75 +3618,30,2.5,111.05,1.7,63.75 +3619,30,2.5,111.05,1.7,63.75 +3620,30,2.5,111.05,1.7,63.75 +3621,30,2.5,111.05,1.7,63.75 +3622,30,2.5,111.05,1.7,63.75 +3623,30,2.5,111.05,1.7,63.75 +3624,30,2.5,111.05,1.7,63.75 +3625,30,2.5,111.05,1.7,63.75 +3626,30,2.5,111.05,1.7,63.75 +3627,30,2.5,111.05,1.7,63.75 +3628,30,2.5,111.05,1.7,63.75 +3629,30,2.5,111.05,1.7,63.75 +3630,30,2.5,111.05,1.7,63.75 +3631,30,2.5,111.05,1.7,63.75 +3632,30,2.5,111.05,1.7,63.75 +3633,30,2.5,111.05,1.7,63.75 +3634,30,2.5,111.05,1.7,63.75 +3635,30,2.5,111.05,1.7,63.75 +3636,30,2.5,111.05,1.7,63.75 +3637,30,2.5,111.05,1.7,63.75 +3638,30,2.5,111.05,1.7,63.75 +3639,30,2.5,111.05,1.7,63.75 +3640,30,2.5,111.05,1.7,63.75 +3641,30,2.5,111.05,1.7,63.75 +3642,30,2.5,111.05,1.7,63.75 +3643,30,2.5,111.05,1.7,63.75 +3644,30,2.5,111.05,1.7,63.75 +3645,30,2.5,111.05,1.7,63.75 +3646,30,2.5,111.05,1.7,63.75 +3647,30,2.5,111.05,1.7,63.75 +3648,30,2.5,111.05,1.7,63.75 +3649,30,2.5,111.05,1.7,63.75 +3650,30,2.5,111.05,1.7,63.75 +3651,30,2.5,111.05,1.7,63.75 +3652,30,2.5,111.05,1.7,63.75 +3653,30,2.5,111.05,1.7,63.75 +3654,30,2.5,111.05,1.7,63.75 +3655,30,2.5,111.05,1.7,63.75 +3656,30,2.5,111.05,1.7,63.75 +3657,30,2.5,111.05,1.7,63.75 +3658,30,2.5,111.05,1.7,63.75 +3659,30,2.5,111.05,1.7,63.75 +3660,30,2.5,111.05,1.7,63.75 +3661,30,2.5,111.05,1.7,63.75 +3662,30,2.5,111.05,1.7,63.75 +3663,30,2.5,111.05,1.7,63.75 +3664,30,2.5,111.05,1.7,63.75 +3665,30,2.5,111.05,1.7,63.75 +3666,30,2.5,111.05,1.7,63.75 +3667,30,2.5,111.05,1.7,63.75 +3668,30,2.5,111.05,1.7,63.75 +3669,30,2.5,111.05,1.7,63.75 +3670,30,2.5,111.05,1.7,63.75 +3671,30,2.5,111.05,1.7,63.75 +3672,30,2.5,111.05,1.7,63.75 +3673,30,2.5,111.05,1.7,63.75 +3674,30,2.5,111.05,1.7,63.75 +3675,30,2.5,111.05,1.7,63.75 +3676,30,2.5,111.05,1.7,63.75 +3677,30,2.5,111.05,1.7,63.75 +3678,30,2.5,111.05,1.7,63.75 +3679,30,2.5,111.05,1.7,63.75 +3680,30,2.5,111.05,1.7,63.75 +3681,30,2.5,111.05,1.7,63.75 +3682,30,2.5,111.05,1.7,63.75 +3683,30,2.5,111.05,1.7,63.75 +3684,30,2.5,111.05,1.7,63.75 +3685,30,2.5,111.05,1.7,63.75 +3686,30,2.5,111.05,1.7,63.75 +3687,30,2.5,111.05,1.7,63.75 +3688,30,2.5,111.05,1.7,63.75 +3689,30,2.5,111.05,1.7,63.75 +3690,30,2.5,111.05,1.7,63.75 +3691,30,2.5,111.05,1.7,63.75 +3692,30,2.5,111.05,1.7,63.75 +3693,30,2.5,111.05,1.7,63.75 +3694,30,2.5,111.05,1.7,63.75 +3695,30,2.5,111.05,1.7,63.75 +3696,30,2.5,111.05,1.7,63.75 +3697,30,2.5,111.05,1.7,63.75 +3698,30,2.5,111.05,1.7,63.75 +3699,30,2.5,111.05,1.7,63.75 +3700,30,2.5,111.05,1.7,63.75 +3701,30,2.5,111.05,1.7,63.75 +3702,30,2.5,111.05,1.7,63.75 +3703,30,2.5,111.05,1.7,63.75 +3704,30,2.5,111.05,1.7,63.75 +3705,30,2.5,111.05,1.7,63.75 +3706,30,2.5,111.05,1.7,63.75 +3707,30,2.5,111.05,1.7,63.75 +3708,30,2.5,111.05,1.7,63.75 +3709,30,2.5,111.05,1.7,63.75 +3710,30,2.5,111.05,1.7,63.75 +3711,30,2.5,111.05,1.7,63.75 +3712,30,2.5,111.05,1.7,63.75 +3713,30,2.5,111.05,1.7,63.75 +3714,30,2.5,111.05,1.7,63.75 +3715,30,2.5,111.05,1.7,63.75 +3716,30,2.5,111.05,1.7,63.75 +3717,30,2.5,111.05,1.7,63.75 +3718,30,2.5,111.05,1.7,63.75 +3719,30,2.5,111.05,1.7,63.75 +3720,30,2.5,111.05,1.7,63.75 +3721,30,2.5,111.05,1.7,63.75 +3722,30,2.5,111.05,1.7,63.75 +3723,30,2.5,111.05,1.7,63.75 +3724,30,2.5,111.05,1.7,63.75 +3725,30,2.5,111.05,1.7,63.75 +3726,30,2.5,111.05,1.7,63.75 +3727,30,2.5,111.05,1.7,63.75 +3728,30,2.5,111.05,1.7,63.75 +3729,30,2.5,111.05,1.7,63.75 +3730,30,2.5,111.05,1.7,63.75 +3731,30,2.5,111.05,1.7,63.75 +3732,30,2.5,111.05,1.7,63.75 +3733,30,2.5,111.05,1.7,63.75 +3734,30,2.5,111.05,1.7,63.75 +3735,30,2.5,111.05,1.7,63.75 +3736,30,2.5,111.05,1.7,63.75 +3737,30,2.5,111.05,1.7,63.75 +3738,30,2.5,111.05,1.7,63.75 +3739,30,2.5,111.05,1.7,63.75 +3740,30,2.5,111.05,1.7,63.75 +3741,30,2.5,111.05,1.7,63.75 +3742,30,2.5,111.05,1.7,63.75 +3743,30,2.5,111.05,1.7,63.75 +3744,30,2.5,111.05,1.7,63.75 +3745,30,2.5,111.05,1.7,63.75 +3746,30,2.5,111.05,1.7,63.75 +3747,30,2.5,111.05,1.7,63.75 +3748,30,2.5,111.05,1.7,63.75 +3749,30,2.5,111.05,1.7,63.75 +3750,30,2.5,111.05,1.7,63.75 +3751,30,2.5,111.05,1.7,63.75 +3752,30,2.5,111.05,1.7,63.75 +3753,30,2.5,111.05,1.7,63.75 +3754,30,2.5,111.05,1.7,63.75 +3755,30,2.5,111.05,1.7,63.75 +3756,30,2.5,111.05,1.7,63.75 +3757,30,2.5,111.05,1.7,63.75 +3758,30,2.5,111.05,1.7,63.75 +3759,30,2.5,111.05,1.7,63.75 +3760,30,2.5,111.05,1.7,63.75 +3761,30,2.5,111.05,1.7,63.75 +3762,30,2.5,111.05,1.7,63.75 +3763,30,2.5,111.05,1.7,63.75 +3764,30,2.5,111.05,1.7,63.75 +3765,30,2.5,111.05,1.7,63.75 +3766,30,2.5,111.05,1.7,63.75 +3767,30,2.5,111.05,1.7,63.75 +3768,30,2.5,111.05,1.7,63.75 +3769,30,2.5,111.05,1.7,63.75 +3770,30,2.5,111.05,1.7,63.75 +3771,30,2.5,111.05,1.7,63.75 +3772,30,2.5,111.05,1.7,63.75 +3773,30,2.5,111.05,1.7,63.75 +3774,30,2.5,111.05,1.7,63.75 +3775,30,2.5,111.05,1.7,63.75 +3776,30,2.5,111.05,1.7,63.75 +3777,30,2.5,111.05,1.7,63.75 +3778,30,2.5,111.05,1.7,63.75 +3779,30,2.5,111.05,1.7,63.75 +3780,30,2.5,111.05,1.7,63.75 +3781,30,2.5,111.05,1.7,63.75 +3782,30,2.5,111.05,1.7,63.75 +3783,30,2.5,111.05,1.7,63.75 +3784,30,2.5,111.05,1.7,63.75 +3785,30,2.5,111.05,1.7,63.75 +3786,30,2.5,111.05,1.7,63.75 +3787,30,2.5,111.05,1.7,63.75 +3788,30,2.5,111.05,1.7,63.75 +3789,30,2.5,111.05,1.7,63.75 +3790,30,2.5,111.05,1.7,63.75 +3791,30,2.5,111.05,1.7,63.75 +3792,30,2.5,111.05,1.7,63.75 +3793,30,2.5,111.05,1.7,63.75 +3794,30,2.5,111.05,1.7,63.75 +3795,30,2.5,111.05,1.7,63.75 +3796,30,2.5,111.05,1.7,63.75 +3797,30,2.5,111.05,1.7,63.75 +3798,30,2.5,111.05,1.7,63.75 +3799,30,2.5,111.05,1.7,63.75 +3800,30,2.5,111.05,1.7,63.75 +3801,30,2.5,111.05,1.7,63.75 +3802,30,2.5,111.05,1.7,63.75 +3803,30,2.5,111.05,1.7,63.75 +3804,30,2.5,111.05,1.7,63.75 +3805,30,2.5,111.05,1.7,63.75 +3806,30,2.5,111.05,1.7,63.75 +3807,30,2.5,111.05,1.7,63.75 +3808,30,2.5,111.05,1.7,63.75 +3809,30,2.5,111.05,1.7,63.75 +3810,30,2.5,111.05,1.7,63.75 +3811,30,2.5,111.05,1.7,63.75 +3812,30,2.5,111.05,1.7,63.75 +3813,30,2.5,111.05,1.7,63.75 +3814,30,2.5,111.05,1.7,63.75 +3815,30,2.5,111.05,1.7,63.75 +3816,30,2.5,111.05,1.7,63.75 +3817,30,2.5,111.05,1.7,63.75 +3818,30,2.5,111.05,1.7,63.75 +3819,30,2.5,111.05,1.7,63.75 +3820,30,2.5,111.05,1.7,63.75 +3821,30,2.5,111.05,1.7,63.75 +3822,30,2.5,111.05,1.7,63.75 +3823,30,2.5,111.05,1.7,63.75 +3824,30,2.5,111.05,1.7,63.75 +3825,30,2.5,111.05,1.7,63.75 +3826,30,2.5,111.05,1.7,63.75 +3827,30,2.5,111.05,1.7,63.75 +3828,30,2.5,111.05,1.7,63.75 +3829,30,2.5,111.05,1.7,63.75 +3830,30,2.5,111.05,1.7,63.75 +3831,30,2.5,111.05,1.7,63.75 +3832,30,2.5,111.05,1.7,63.75 +3833,30,2.5,111.05,1.7,63.75 +3834,30,2.5,111.05,1.7,63.75 +3835,30,2.5,111.05,1.7,63.75 +3836,30,2.5,111.05,1.7,63.75 +3837,30,2.5,111.05,1.7,63.75 +3838,30,2.5,111.05,1.7,63.75 +3839,30,2.5,111.05,1.7,63.75 +3840,30,2.5,111.05,1.7,63.75 +3841,30,2.5,111.05,1.7,63.75 +3842,30,2.5,111.05,1.7,63.75 +3843,30,2.5,111.05,1.7,63.75 +3844,30,2.5,111.05,1.7,63.75 +3845,30,2.5,111.05,1.7,63.75 +3846,30,2.5,111.05,1.7,63.75 +3847,30,2.5,111.05,1.7,63.75 +3848,30,2.5,111.05,1.7,63.75 +3849,30,2.5,111.05,1.7,63.75 +3850,30,2.5,111.05,1.7,63.75 +3851,30,2.5,111.05,1.7,63.75 +3852,30,2.5,111.05,1.7,63.75 +3853,30,2.5,111.05,1.7,63.75 +3854,30,2.5,111.05,1.7,63.75 +3855,30,2.5,111.05,1.7,63.75 +3856,30,2.5,111.05,1.7,63.75 +3857,30,2.5,111.05,1.7,63.75 +3858,30,2.5,111.05,1.7,63.75 +3859,30,2.5,111.05,1.7,63.75 +3860,30,2.5,111.05,1.7,63.75 +3861,30,2.5,111.05,1.7,63.75 +3862,30,2.5,111.05,1.7,63.75 +3863,30,2.5,111.05,1.7,63.75 +3864,30,2.5,111.05,1.7,63.75 +3865,30,2.5,111.05,1.7,63.75 +3866,30,2.5,111.05,1.7,63.75 +3867,30,2.5,111.05,1.7,63.75 +3868,30,2.5,111.05,1.7,63.75 +3869,30,2.5,111.05,1.7,63.75 +3870,30,2.5,111.05,1.7,63.75 +3871,30,2.5,111.05,1.7,63.75 +3872,30,2.5,111.05,1.7,63.75 +3873,30,2.5,111.05,1.7,63.75 +3874,30,2.5,111.05,1.7,63.75 +3875,30,2.5,111.05,1.7,63.75 +3876,30,2.5,111.05,1.7,63.75 +3877,30,2.5,111.05,1.7,63.75 +3878,30,2.5,111.05,1.7,63.75 +3879,30,2.5,111.05,1.7,63.75 +3880,30,2.5,111.05,1.7,63.75 +3881,30,2.5,111.05,1.7,63.75 +3882,30,2.5,111.05,1.7,63.75 +3883,30,2.5,111.05,1.7,63.75 +3884,30,2.5,111.05,1.7,63.75 +3885,30,2.5,111.05,1.7,63.75 +3886,30,2.5,111.05,1.7,63.75 +3887,30,2.5,111.05,1.7,63.75 +3888,30,2.5,111.05,1.7,63.75 +3889,30,2.5,111.05,1.7,63.75 +3890,30,2.5,111.05,1.7,63.75 +3891,30,2.5,111.05,1.7,63.75 +3892,30,2.5,111.05,1.7,63.75 +3893,30,2.5,111.05,1.7,63.75 +3894,30,2.5,111.05,1.7,63.75 +3895,30,2.5,111.05,1.7,63.75 +3896,30,2.5,111.05,1.7,63.75 +3897,30,2.5,111.05,1.7,63.75 +3898,30,2.5,111.05,1.7,63.75 +3899,30,2.5,111.05,1.7,63.75 +3900,30,2.5,111.05,1.7,63.75 +3901,30,2.5,111.05,1.7,63.75 +3902,30,2.5,111.05,1.7,63.75 +3903,30,2.5,111.05,1.7,63.75 +3904,30,2.5,111.05,1.7,63.75 +3905,30,2.5,111.05,1.7,63.75 +3906,30,2.5,111.05,1.7,63.75 +3907,30,2.5,111.05,1.7,63.75 +3908,30,2.5,111.05,1.7,63.75 +3909,30,2.5,111.05,1.7,63.75 +3910,30,2.5,111.05,1.7,63.75 +3911,30,2.5,111.05,1.7,63.75 +3912,30,2.5,111.05,1.7,63.75 +3913,30,2.5,111.05,1.7,63.75 +3914,30,2.5,111.05,1.7,63.75 +3915,30,2.5,111.05,1.7,63.75 +3916,30,2.5,111.05,1.7,63.75 +3917,30,2.5,111.05,1.7,63.75 +3918,30,2.5,111.05,1.7,63.75 +3919,30,2.5,111.05,1.7,63.75 +3920,30,2.5,111.05,1.7,63.75 +3921,30,2.5,111.05,1.7,63.75 +3922,30,2.5,111.05,1.7,63.75 +3923,30,2.5,111.05,1.7,63.75 +3924,30,2.5,111.05,1.7,63.75 +3925,30,2.5,111.05,1.7,63.75 +3926,30,2.5,111.05,1.7,63.75 +3927,30,2.5,111.05,1.7,63.75 +3928,30,2.5,111.05,1.7,63.75 +3929,30,2.5,111.05,1.7,63.75 +3930,30,2.5,111.05,1.7,63.75 +3931,30,2.5,111.05,1.7,63.75 +3932,30,2.5,111.05,1.7,63.75 +3933,30,2.5,111.05,1.7,63.75 +3934,30,2.5,111.05,1.7,63.75 +3935,30,2.5,111.05,1.7,63.75 +3936,30,2.5,111.05,1.7,63.75 +3937,30,2.5,111.05,1.7,63.75 +3938,30,2.5,111.05,1.7,63.75 +3939,30,2.5,111.05,1.7,63.75 +3940,30,2.5,111.05,1.7,63.75 +3941,30,2.5,111.05,1.7,63.75 +3942,30,2.5,111.05,1.7,63.75 +3943,30,2.5,111.05,1.7,63.75 +3944,30,2.5,111.05,1.7,63.75 +3945,30,2.5,111.05,1.7,63.75 +3946,30,2.5,111.05,1.7,63.75 +3947,30,2.5,111.05,1.7,63.75 +3948,30,2.5,111.05,1.7,63.75 +3949,30,2.5,111.05,1.7,63.75 +3950,30,2.5,111.05,1.7,63.75 +3951,30,2.5,111.05,1.7,63.75 +3952,30,2.5,111.05,1.7,63.75 +3953,30,2.5,111.05,1.7,63.75 +3954,30,2.5,111.05,1.7,63.75 +3955,30,2.5,111.05,1.7,63.75 +3956,30,2.5,111.05,1.7,63.75 +3957,30,2.5,111.05,1.7,63.75 +3958,30,2.5,111.05,1.7,63.75 +3959,30,2.5,111.05,1.7,63.75 +3960,30,2.5,111.05,1.7,63.75 +3961,30,2.5,111.05,1.7,63.75 +3962,30,2.5,111.05,1.7,63.75 +3963,30,2.5,111.05,1.7,63.75 +3964,30,2.5,111.05,1.7,63.75 +3965,30,2.5,111.05,1.7,63.75 +3966,30,2.5,111.05,1.7,63.75 +3967,30,2.5,111.05,1.7,63.75 +3968,30,2.5,111.05,1.7,63.75 +3969,30,2.5,111.05,1.7,63.75 +3970,30,2.5,111.05,1.7,63.75 +3971,30,2.5,111.05,1.7,63.75 +3972,30,2.5,111.05,1.7,63.75 +3973,30,2.5,111.05,1.7,63.75 +3974,30,2.5,111.05,1.7,63.75 +3975,30,2.5,111.05,1.7,63.75 +3976,30,2.5,111.05,1.7,63.75 +3977,30,2.5,111.05,1.7,63.75 +3978,30,2.5,111.05,1.7,63.75 +3979,30,2.5,111.05,1.7,63.75 +3980,30,2.5,111.05,1.7,63.75 +3981,30,2.5,111.05,1.7,63.75 +3982,30,2.5,111.05,1.7,63.75 +3983,30,2.5,111.05,1.7,63.75 +3984,30,2.5,111.05,1.7,63.75 +3985,30,2.5,111.05,1.7,63.75 +3986,30,2.5,111.05,1.7,63.75 +3987,30,2.5,111.05,1.7,63.75 +3988,30,2.5,111.05,1.7,63.75 +3989,30,2.5,111.05,1.7,63.75 +3990,30,2.5,111.05,1.7,63.75 +3991,30,2.5,111.05,1.7,63.75 +3992,30,2.5,111.05,1.7,63.75 +3993,30,2.5,111.05,1.7,63.75 +3994,30,2.5,111.05,1.7,63.75 +3995,30,2.5,111.05,1.7,63.75 +3996,30,2.5,111.05,1.7,63.75 +3997,30,2.5,111.05,1.7,63.75 +3998,30,2.5,111.05,1.7,63.75 +3999,30,2.5,111.05,1.7,63.75 +4000,30,2.5,111.05,1.7,63.75 +4001,30,2.5,111.05,1.7,63.75 +4002,30,2.5,111.05,1.7,63.75 +4003,30,2.5,111.05,1.7,63.75 +4004,30,2.5,111.05,1.7,63.75 +4005,30,2.5,111.05,1.7,63.75 +4006,30,2.5,111.05,1.7,63.75 +4007,30,2.5,111.05,1.7,63.75 +4008,30,2.5,111.05,1.7,63.75 +4009,30,2.5,111.05,1.7,63.75 +4010,30,2.5,111.05,1.7,63.75 +4011,30,2.5,111.05,1.7,63.75 +4012,30,2.5,111.05,1.7,63.75 +4013,30,2.5,111.05,1.7,63.75 +4014,30,2.5,111.05,1.7,63.75 +4015,30,2.5,111.05,1.7,63.75 +4016,30,2.5,111.05,1.7,63.75 +4017,30,2.5,111.05,1.7,63.75 +4018,30,2.5,111.05,1.7,63.75 +4019,30,2.5,111.05,1.7,63.75 +4020,30,2.5,111.05,1.7,63.75 +4021,30,2.5,111.05,1.7,63.75 +4022,30,2.5,111.05,1.7,63.75 +4023,30,2.5,111.05,1.7,63.75 +4024,30,2.5,111.05,1.7,63.75 +4025,30,2.5,111.05,1.7,63.75 +4026,30,2.5,111.05,1.7,63.75 +4027,30,2.5,111.05,1.7,63.75 +4028,30,2.5,111.05,1.7,63.75 +4029,30,2.5,111.05,1.7,63.75 +4030,30,2.5,111.05,1.7,63.75 +4031,30,2.5,111.05,1.7,63.75 +4032,30,2.5,111.05,1.7,63.75 +4033,30,2.5,111.05,1.7,63.75 +4034,30,2.5,111.05,1.7,63.75 +4035,30,2.5,111.05,1.7,63.75 +4036,30,2.5,111.05,1.7,63.75 +4037,30,2.5,111.05,1.7,63.75 +4038,30,2.5,111.05,1.7,63.75 +4039,30,2.5,111.05,1.7,63.75 +4040,30,2.5,111.05,1.7,63.75 +4041,30,2.5,111.05,1.7,63.75 +4042,30,2.5,111.05,1.7,63.75 +4043,30,2.5,111.05,1.7,63.75 +4044,30,2.5,111.05,1.7,63.75 +4045,30,2.5,111.05,1.7,63.75 +4046,30,2.5,111.05,1.7,63.75 +4047,30,2.5,111.05,1.7,63.75 +4048,30,2.5,111.05,1.7,63.75 +4049,30,2.5,111.05,1.7,63.75 +4050,30,2.5,111.05,1.7,63.75 +4051,30,2.5,111.05,1.7,63.75 +4052,30,2.5,111.05,1.7,63.75 +4053,30,2.5,111.05,1.7,63.75 +4054,30,2.5,111.05,1.7,63.75 +4055,30,2.5,111.05,1.7,63.75 +4056,30,2.5,111.05,1.7,63.75 +4057,30,2.5,111.05,1.7,63.75 +4058,30,2.5,111.05,1.7,63.75 +4059,30,2.5,111.05,1.7,63.75 +4060,30,2.5,111.05,1.7,63.75 +4061,30,2.5,111.05,1.7,63.75 +4062,30,2.5,111.05,1.7,63.75 +4063,30,2.5,111.05,1.7,63.75 +4064,30,2.5,111.05,1.7,63.75 +4065,30,2.5,111.05,1.7,63.75 +4066,30,2.5,111.05,1.7,63.75 +4067,30,2.5,111.05,1.7,63.75 +4068,30,2.5,111.05,1.7,63.75 +4069,30,2.5,111.05,1.7,63.75 +4070,30,2.5,111.05,1.7,63.75 +4071,30,2.5,111.05,1.7,63.75 +4072,30,2.5,111.05,1.7,63.75 +4073,30,2.5,111.05,1.7,63.75 +4074,30,2.5,111.05,1.7,63.75 +4075,30,2.5,111.05,1.7,63.75 +4076,30,2.5,111.05,1.7,63.75 +4077,30,2.5,111.05,1.7,63.75 +4078,30,2.5,111.05,1.7,63.75 +4079,30,2.5,111.05,1.7,63.75 +4080,30,2.5,111.05,1.7,63.75 +4081,30,2.5,111.05,1.7,63.75 +4082,30,2.5,111.05,1.7,63.75 +4083,30,2.5,111.05,1.7,63.75 +4084,30,2.5,111.05,1.7,63.75 +4085,30,2.5,111.05,1.7,63.75 +4086,30,2.5,111.05,1.7,63.75 +4087,30,2.5,111.05,1.7,63.75 +4088,30,2.5,111.05,1.7,63.75 +4089,30,2.5,111.05,1.7,63.75 +4090,30,2.5,111.05,1.7,63.75 +4091,30,2.5,111.05,1.7,63.75 +4092,30,2.5,111.05,1.7,63.75 +4093,30,2.5,111.05,1.7,63.75 +4094,30,2.5,111.05,1.7,63.75 +4095,30,2.5,111.05,1.7,63.75 +4096,30,2.5,111.05,1.7,63.75 +4097,30,2.5,111.05,1.7,63.75 +4098,30,2.5,111.05,1.7,63.75 +4099,30,2.5,111.05,1.7,63.75 +4100,30,2.5,111.05,1.7,63.75 +4101,30,2.5,111.05,1.7,63.75 +4102,30,2.5,111.05,1.7,63.75 +4103,30,2.5,111.05,1.7,63.75 +4104,30,2.5,111.05,1.7,63.75 +4105,30,2.5,111.05,1.7,63.75 +4106,30,2.5,111.05,1.7,63.75 +4107,30,2.5,111.05,1.7,63.75 +4108,30,2.5,111.05,1.7,63.75 +4109,30,2.5,111.05,1.7,63.75 +4110,30,2.5,111.05,1.7,63.75 +4111,30,2.5,111.05,1.7,63.75 +4112,30,2.5,111.05,1.7,63.75 +4113,30,2.5,111.05,1.7,63.75 +4114,30,2.5,111.05,1.7,63.75 +4115,30,2.5,111.05,1.7,63.75 +4116,30,2.5,111.05,1.7,63.75 +4117,30,2.5,111.05,1.7,63.75 +4118,30,2.5,111.05,1.7,63.75 +4119,30,2.5,111.05,1.7,63.75 +4120,30,2.5,111.05,1.7,63.75 +4121,30,2.5,111.05,1.7,63.75 +4122,30,2.5,111.05,1.7,63.75 +4123,30,2.5,111.05,1.7,63.75 +4124,30,2.5,111.05,1.7,63.75 +4125,30,2.5,111.05,1.7,63.75 +4126,30,2.5,111.05,1.7,63.75 +4127,30,2.5,111.05,1.7,63.75 +4128,30,2.5,111.05,1.7,63.75 +4129,30,2.5,111.05,1.7,63.75 +4130,30,2.5,111.05,1.7,63.75 +4131,30,2.5,111.05,1.7,63.75 +4132,30,2.5,111.05,1.7,63.75 +4133,30,2.5,111.05,1.7,63.75 +4134,30,2.5,111.05,1.7,63.75 +4135,30,2.5,111.05,1.7,63.75 +4136,30,2.5,111.05,1.7,63.75 +4137,30,2.5,111.05,1.7,63.75 +4138,30,2.5,111.05,1.7,63.75 +4139,30,2.5,111.05,1.7,63.75 +4140,30,2.5,111.05,1.7,63.75 +4141,30,2.5,111.05,1.7,63.75 +4142,30,2.5,111.05,1.7,63.75 +4143,30,2.5,111.05,1.7,63.75 +4144,30,2.5,111.05,1.7,63.75 +4145,30,2.5,111.05,1.7,63.75 +4146,30,2.5,111.05,1.7,63.75 +4147,30,2.5,111.05,1.7,63.75 +4148,30,2.5,111.05,1.7,63.75 +4149,30,2.5,111.05,1.7,63.75 +4150,30,2.5,111.05,1.7,63.75 +4151,30,2.5,111.05,1.7,63.75 +4152,30,2.5,111.05,1.7,63.75 +4153,30,2.5,111.05,1.7,63.75 +4154,30,2.5,111.05,1.7,63.75 +4155,30,2.5,111.05,1.7,63.75 +4156,30,2.5,111.05,1.7,63.75 +4157,30,2.5,111.05,1.7,63.75 +4158,30,2.5,111.05,1.7,63.75 +4159,30,2.5,111.05,1.7,63.75 +4160,30,2.5,111.05,1.7,63.75 +4161,30,2.5,111.05,1.7,63.75 +4162,30,2.5,111.05,1.7,63.75 +4163,30,2.5,111.05,1.7,63.75 +4164,30,2.5,111.05,1.7,63.75 +4165,30,2.5,111.05,1.7,63.75 +4166,30,2.5,111.05,1.7,63.75 +4167,30,2.5,111.05,1.7,63.75 +4168,30,2.5,111.05,1.7,63.75 +4169,30,2.5,111.05,1.7,63.75 +4170,30,2.5,111.05,1.7,63.75 +4171,30,2.5,111.05,1.7,63.75 +4172,30,2.5,111.05,1.7,63.75 +4173,30,2.5,111.05,1.7,63.75 +4174,30,2.5,111.05,1.7,63.75 +4175,30,2.5,111.05,1.7,63.75 +4176,30,2.5,111.05,1.7,63.75 +4177,30,2.5,111.05,1.7,63.75 +4178,30,2.5,111.05,1.7,63.75 +4179,30,2.5,111.05,1.7,63.75 +4180,30,2.5,111.05,1.7,63.75 +4181,30,2.5,111.05,1.7,63.75 +4182,30,2.5,111.05,1.7,63.75 +4183,30,2.5,111.05,1.7,63.75 +4184,30,2.5,111.05,1.7,63.75 +4185,30,2.5,111.05,1.7,63.75 +4186,30,2.5,111.05,1.7,63.75 +4187,30,2.5,111.05,1.7,63.75 +4188,30,2.5,111.05,1.7,63.75 +4189,30,2.5,111.05,1.7,63.75 +4190,30,2.5,111.05,1.7,63.75 +4191,30,2.5,111.05,1.7,63.75 +4192,30,2.5,111.05,1.7,63.75 +4193,30,2.5,111.05,1.7,63.75 +4194,30,2.5,111.05,1.7,63.75 +4195,30,2.5,111.05,1.7,63.75 +4196,30,2.5,111.05,1.7,63.75 +4197,30,2.5,111.05,1.7,63.75 +4198,30,2.5,111.05,1.7,63.75 +4199,30,2.5,111.05,1.7,63.75 +4200,30,2.5,111.05,1.7,63.75 +4201,30,2.5,111.05,1.7,63.75 +4202,30,2.5,111.05,1.7,63.75 +4203,30,2.5,111.05,1.7,63.75 +4204,30,2.5,111.05,1.7,63.75 +4205,30,2.5,111.05,1.7,63.75 +4206,30,2.5,111.05,1.7,63.75 +4207,30,2.5,111.05,1.7,63.75 +4208,30,2.5,111.05,1.7,63.75 +4209,30,2.5,111.05,1.7,63.75 +4210,30,2.5,111.05,1.7,63.75 +4211,30,2.5,111.05,1.7,63.75 +4212,30,2.5,111.05,1.7,63.75 +4213,30,2.5,111.05,1.7,63.75 +4214,30,2.5,111.05,1.7,63.75 +4215,30,2.5,111.05,1.7,63.75 +4216,30,2.5,111.05,1.7,63.75 +4217,30,2.5,111.05,1.7,63.75 +4218,30,2.5,111.05,1.7,63.75 +4219,30,2.5,111.05,1.7,63.75 +4220,30,2.5,111.05,1.7,63.75 +4221,30,2.5,111.05,1.7,63.75 +4222,30,2.5,111.05,1.7,63.75 +4223,30,2.5,111.05,1.7,63.75 +4224,30,2.5,111.05,1.7,63.75 +4225,30,2.5,111.05,1.7,63.75 +4226,30,2.5,111.05,1.7,63.75 +4227,30,2.5,111.05,1.7,63.75 +4228,30,2.5,111.05,1.7,63.75 +4229,30,2.5,111.05,1.7,63.75 +4230,30,2.5,111.05,1.7,63.75 +4231,30,2.5,111.05,1.7,63.75 +4232,30,2.5,111.05,1.7,63.75 +4233,30,2.5,111.05,1.7,63.75 +4234,30,2.5,111.05,1.7,63.75 +4235,30,2.5,111.05,1.7,63.75 +4236,30,2.5,111.05,1.7,63.75 +4237,30,2.5,111.05,1.7,63.75 +4238,30,2.5,111.05,1.7,63.75 +4239,30,2.5,111.05,1.7,63.75 +4240,30,2.5,111.05,1.7,63.75 +4241,30,2.5,111.05,1.7,63.75 +4242,30,2.5,111.05,1.7,63.75 +4243,30,2.5,111.05,1.7,63.75 +4244,30,2.5,111.05,1.7,63.75 +4245,30,2.5,111.05,1.7,63.75 +4246,30,2.5,111.05,1.7,63.75 +4247,30,2.5,111.05,1.7,63.75 +4248,30,2.5,111.05,1.7,63.75 +4249,30,2.5,111.05,1.7,63.75 +4250,30,2.5,111.05,1.7,63.75 +4251,30,2.5,111.05,1.7,63.75 +4252,30,2.5,111.05,1.7,63.75 +4253,30,2.5,111.05,1.7,63.75 +4254,30,2.5,111.05,1.7,63.75 +4255,30,2.5,111.05,1.7,63.75 +4256,30,2.5,111.05,1.7,63.75 +4257,30,2.5,111.05,1.7,63.75 +4258,30,2.5,111.05,1.7,63.75 +4259,30,2.5,111.05,1.7,63.75 +4260,30,2.5,111.05,1.7,63.75 +4261,30,2.5,111.05,1.7,63.75 +4262,30,2.5,111.05,1.7,63.75 +4263,30,2.5,111.05,1.7,63.75 +4264,30,2.5,111.05,1.7,63.75 +4265,30,2.5,111.05,1.7,63.75 +4266,30,2.5,111.05,1.7,63.75 +4267,30,2.5,111.05,1.7,63.75 +4268,30,2.5,111.05,1.7,63.75 +4269,30,2.5,111.05,1.7,63.75 +4270,30,2.5,111.05,1.7,63.75 +4271,30,2.5,111.05,1.7,63.75 +4272,30,2.5,111.05,1.7,63.75 +4273,30,2.5,111.05,1.7,63.75 +4274,30,2.5,111.05,1.7,63.75 +4275,30,2.5,111.05,1.7,63.75 +4276,30,2.5,111.05,1.7,63.75 +4277,30,2.5,111.05,1.7,63.75 +4278,30,2.5,111.05,1.7,63.75 +4279,30,2.5,111.05,1.7,63.75 +4280,30,2.5,111.05,1.7,63.75 +4281,30,2.5,111.05,1.7,63.75 +4282,30,2.5,111.05,1.7,63.75 +4283,30,2.5,111.05,1.7,63.75 +4284,30,2.5,111.05,1.7,63.75 +4285,30,2.5,111.05,1.7,63.75 +4286,30,2.5,111.05,1.7,63.75 +4287,30,2.5,111.05,1.7,63.75 +4288,30,2.5,111.05,1.7,63.75 +4289,30,2.5,111.05,1.7,63.75 +4290,30,2.5,111.05,1.7,63.75 +4291,30,2.5,111.05,1.7,63.75 +4292,30,2.5,111.05,1.7,63.75 +4293,30,2.5,111.05,1.7,63.75 +4294,30,2.5,111.05,1.7,63.75 +4295,30,2.5,111.05,1.7,63.75 +4296,30,2.5,111.05,1.7,63.75 +4297,30,2.5,111.05,1.7,63.75 +4298,30,2.5,111.05,1.7,63.75 +4299,30,2.5,111.05,1.7,63.75 +4300,30,2.5,111.05,1.7,63.75 +4301,30,2.5,111.05,1.7,63.75 +4302,30,2.5,111.05,1.7,63.75 +4303,30,2.5,111.05,1.7,63.75 +4304,30,2.5,111.05,1.7,63.75 +4305,30,2.5,111.05,1.7,63.75 +4306,30,2.5,111.05,1.7,63.75 +4307,30,2.5,111.05,1.7,63.75 +4308,30,2.5,111.05,1.7,63.75 +4309,30,2.5,111.05,1.7,63.75 +4310,30,2.5,111.05,1.7,63.75 +4311,30,2.5,111.05,1.7,63.75 +4312,30,2.5,111.05,1.7,63.75 +4313,30,2.5,111.05,1.7,63.75 +4314,30,2.5,111.05,1.7,63.75 +4315,30,2.5,111.05,1.7,63.75 +4316,30,2.5,111.05,1.7,63.75 +4317,30,2.5,111.05,1.7,63.75 +4318,30,2.5,111.05,1.7,63.75 +4319,30,2.5,111.05,1.7,63.75 +4320,30,2.5,111.05,1.7,63.75 +4321,30,2.5,111.05,1.7,63.75 +4322,30,2.5,111.05,1.7,63.75 +4323,30,2.5,111.05,1.7,63.75 +4324,30,2.5,111.05,1.7,63.75 +4325,30,2.5,111.05,1.7,63.75 +4326,30,2.5,111.05,1.7,63.75 +4327,30,2.5,111.05,1.7,63.75 +4328,30,2.5,111.05,1.7,63.75 +4329,30,2.5,111.05,1.7,63.75 +4330,30,2.5,111.05,1.7,63.75 +4331,30,2.5,111.05,1.7,63.75 +4332,30,2.5,111.05,1.7,63.75 +4333,30,2.5,111.05,1.7,63.75 +4334,30,2.5,111.05,1.7,63.75 +4335,30,2.5,111.05,1.7,63.75 +4336,30,2.5,111.05,1.7,63.75 +4337,30,2.5,111.05,1.7,63.75 +4338,30,2.5,111.05,1.7,63.75 +4339,30,2.5,111.05,1.7,63.75 +4340,30,2.5,111.05,1.7,63.75 +4341,30,2.5,111.05,1.7,63.75 +4342,30,2.5,111.05,1.7,63.75 +4343,30,2.5,111.05,1.7,63.75 +4344,30,2.5,111.05,1.7,63.75 +4345,30,2.5,111.05,1.7,63.75 +4346,30,2.5,111.05,1.7,63.75 +4347,30,2.5,111.05,1.7,63.75 +4348,30,2.5,111.05,1.7,63.75 +4349,30,2.5,111.05,1.7,63.75 +4350,30,2.5,111.05,1.7,63.75 +4351,30,2.5,111.05,1.7,63.75 +4352,30,2.5,111.05,1.7,63.75 +4353,30,2.5,111.05,1.7,63.75 +4354,30,2.5,111.05,1.7,63.75 +4355,30,2.5,111.05,1.7,63.75 +4356,30,2.5,111.05,1.7,63.75 +4357,30,2.5,111.05,1.7,63.75 +4358,30,2.5,111.05,1.7,63.75 +4359,30,2.5,111.05,1.7,63.75 +4360,30,2.5,111.05,1.7,63.75 +4361,30,2.5,111.05,1.7,63.75 +4362,30,2.5,111.05,1.7,63.75 +4363,30,2.5,111.05,1.7,63.75 +4364,30,2.5,111.05,1.7,63.75 +4365,30,2.5,111.05,1.7,63.75 +4366,30,2.5,111.05,1.7,63.75 +4367,30,2.5,111.05,1.7,63.75 +4368,30,2.5,111.05,1.7,63.75 +4369,30,2.5,111.05,1.7,63.75 +4370,30,2.5,111.05,1.7,63.75 +4371,30,2.5,111.05,1.7,63.75 +4372,30,2.5,111.05,1.7,63.75 +4373,30,2.5,111.05,1.7,63.75 +4374,30,2.5,111.05,1.7,63.75 +4375,30,2.5,111.05,1.7,63.75 +4376,30,2.5,111.05,1.7,63.75 +4377,30,2.5,111.05,1.7,63.75 +4378,30,2.5,111.05,1.7,63.75 +4379,30,2.5,111.05,1.7,63.75 +4380,30,2.5,111.05,1.7,63.75 +4381,30,2.5,111.05,1.7,63.75 +4382,30,2.5,111.05,1.7,63.75 +4383,30,2.5,111.05,1.7,63.75 +4384,30,2.5,111.05,1.7,63.75 +4385,30,2.5,111.05,1.7,63.75 +4386,30,2.5,111.05,1.7,63.75 +4387,30,2.5,111.05,1.7,63.75 +4388,30,2.5,111.05,1.7,63.75 +4389,30,2.5,111.05,1.7,63.75 +4390,30,2.5,111.05,1.7,63.75 +4391,30,2.5,111.05,1.7,63.75 +4392,30,2.5,111.05,1.7,63.75 +4393,30,2.5,111.05,1.7,63.75 +4394,30,2.5,111.05,1.7,63.75 +4395,30,2.5,111.05,1.7,63.75 +4396,30,2.5,111.05,1.7,63.75 +4397,30,2.5,111.05,1.7,63.75 +4398,30,2.5,111.05,1.7,63.75 +4399,30,2.5,111.05,1.7,63.75 +4400,30,2.5,111.05,1.7,63.75 +4401,30,2.5,111.05,1.7,63.75 +4402,30,2.5,111.05,1.7,63.75 +4403,30,2.5,111.05,1.7,63.75 +4404,30,2.5,111.05,1.7,63.75 +4405,30,2.5,111.05,1.7,63.75 +4406,30,2.5,111.05,1.7,63.75 +4407,30,2.5,111.05,1.7,63.75 +4408,30,2.5,111.05,1.7,63.75 +4409,30,2.5,111.05,1.7,63.75 +4410,30,2.5,111.05,1.7,63.75 +4411,30,2.5,111.05,1.7,63.75 +4412,30,2.5,111.05,1.7,63.75 +4413,30,2.5,111.05,1.7,63.75 +4414,30,2.5,111.05,1.7,63.75 +4415,30,2.5,111.05,1.7,63.75 +4416,30,2.5,111.05,1.7,63.75 +4417,30,2.5,111.05,1.7,63.75 +4418,30,2.5,111.05,1.7,63.75 +4419,30,2.5,111.05,1.7,63.75 +4420,30,2.5,111.05,1.7,63.75 +4421,30,2.5,111.05,1.7,63.75 +4422,30,2.5,111.05,1.7,63.75 +4423,30,2.5,111.05,1.7,63.75 +4424,30,2.5,111.05,1.7,63.75 +4425,30,2.5,111.05,1.7,63.75 +4426,30,2.5,111.05,1.7,63.75 +4427,30,2.5,111.05,1.7,63.75 +4428,30,2.5,111.05,1.7,63.75 +4429,30,2.5,111.05,1.7,63.75 +4430,30,2.5,111.05,1.7,63.75 +4431,30,2.5,111.05,1.7,63.75 +4432,30,2.5,111.05,1.7,63.75 +4433,30,2.5,111.05,1.7,63.75 +4434,30,2.5,111.05,1.7,63.75 +4435,30,2.5,111.05,1.7,63.75 +4436,30,2.5,111.05,1.7,63.75 +4437,30,2.5,111.05,1.7,63.75 +4438,30,2.5,111.05,1.7,63.75 +4439,30,2.5,111.05,1.7,63.75 +4440,30,2.5,111.05,1.7,63.75 +4441,30,2.5,111.05,1.7,63.75 +4442,30,2.5,111.05,1.7,63.75 +4443,30,2.5,111.05,1.7,63.75 +4444,30,2.5,111.05,1.7,63.75 +4445,30,2.5,111.05,1.7,63.75 +4446,30,2.5,111.05,1.7,63.75 +4447,30,2.5,111.05,1.7,63.75 +4448,30,2.5,111.05,1.7,63.75 +4449,30,2.5,111.05,1.7,63.75 +4450,30,2.5,111.05,1.7,63.75 +4451,30,2.5,111.05,1.7,63.75 +4452,30,2.5,111.05,1.7,63.75 +4453,30,2.5,111.05,1.7,63.75 +4454,30,2.5,111.05,1.7,63.75 +4455,30,2.5,111.05,1.7,63.75 +4456,30,2.5,111.05,1.7,63.75 +4457,30,2.5,111.05,1.7,63.75 +4458,30,2.5,111.05,1.7,63.75 +4459,30,2.5,111.05,1.7,63.75 +4460,30,2.5,111.05,1.7,63.75 +4461,30,2.5,111.05,1.7,63.75 +4462,30,2.5,111.05,1.7,63.75 +4463,30,2.5,111.05,1.7,63.75 +4464,30,2.5,111.05,1.7,63.75 +4465,30,2.5,111.05,1.7,63.75 +4466,30,2.5,111.05,1.7,63.75 +4467,30,2.5,111.05,1.7,63.75 +4468,30,2.5,111.05,1.7,63.75 +4469,30,2.5,111.05,1.7,63.75 +4470,30,2.5,111.05,1.7,63.75 +4471,30,2.5,111.05,1.7,63.75 +4472,30,2.5,111.05,1.7,63.75 +4473,30,2.5,111.05,1.7,63.75 +4474,30,2.5,111.05,1.7,63.75 +4475,30,2.5,111.05,1.7,63.75 +4476,30,2.5,111.05,1.7,63.75 +4477,30,2.5,111.05,1.7,63.75 +4478,30,2.5,111.05,1.7,63.75 +4479,30,2.5,111.05,1.7,63.75 +4480,30,2.5,111.05,1.7,63.75 +4481,30,2.5,111.05,1.7,63.75 +4482,30,2.5,111.05,1.7,63.75 +4483,30,2.5,111.05,1.7,63.75 +4484,30,2.5,111.05,1.7,63.75 +4485,30,2.5,111.05,1.7,63.75 +4486,30,2.5,111.05,1.7,63.75 +4487,30,2.5,111.05,1.7,63.75 +4488,30,2.5,111.05,1.7,63.75 +4489,30,2.5,111.05,1.7,63.75 +4490,30,2.5,111.05,1.7,63.75 +4491,30,2.5,111.05,1.7,63.75 +4492,30,2.5,111.05,1.7,63.75 +4493,30,2.5,111.05,1.7,63.75 +4494,30,2.5,111.05,1.7,63.75 +4495,30,2.5,111.05,1.7,63.75 +4496,30,2.5,111.05,1.7,63.75 +4497,30,2.5,111.05,1.7,63.75 +4498,30,2.5,111.05,1.7,63.75 +4499,30,2.5,111.05,1.7,63.75 +4500,30,2.5,111.05,1.7,63.75 +4501,30,2.5,111.05,1.7,63.75 +4502,30,2.5,111.05,1.7,63.75 +4503,30,2.5,111.05,1.7,63.75 +4504,30,2.5,111.05,1.7,63.75 +4505,30,2.5,111.05,1.7,63.75 +4506,30,2.5,111.05,1.7,63.75 +4507,30,2.5,111.05,1.7,63.75 +4508,30,2.5,111.05,1.7,63.75 +4509,30,2.5,111.05,1.7,63.75 +4510,30,2.5,111.05,1.7,63.75 +4511,30,2.5,111.05,1.7,63.75 +4512,30,2.5,111.05,1.7,63.75 +4513,30,2.5,111.05,1.7,63.75 +4514,30,2.5,111.05,1.7,63.75 +4515,30,2.5,111.05,1.7,63.75 +4516,30,2.5,111.05,1.7,63.75 +4517,30,2.5,111.05,1.7,63.75 +4518,30,2.5,111.05,1.7,63.75 +4519,30,2.5,111.05,1.7,63.75 +4520,30,2.5,111.05,1.7,63.75 +4521,30,2.5,111.05,1.7,63.75 +4522,30,2.5,111.05,1.7,63.75 +4523,30,2.5,111.05,1.7,63.75 +4524,30,2.5,111.05,1.7,63.75 +4525,30,2.5,111.05,1.7,63.75 +4526,30,2.5,111.05,1.7,63.75 +4527,30,2.5,111.05,1.7,63.75 +4528,30,2.5,111.05,1.7,63.75 +4529,30,2.5,111.05,1.7,63.75 +4530,30,2.5,111.05,1.7,63.75 +4531,30,2.5,111.05,1.7,63.75 +4532,30,2.5,111.05,1.7,63.75 +4533,30,2.5,111.05,1.7,63.75 +4534,30,2.5,111.05,1.7,63.75 +4535,30,2.5,111.05,1.7,63.75 +4536,30,2.5,111.05,1.7,63.75 +4537,30,2.5,111.05,1.7,63.75 +4538,30,2.5,111.05,1.7,63.75 +4539,30,2.5,111.05,1.7,63.75 +4540,30,2.5,111.05,1.7,63.75 +4541,30,2.5,111.05,1.7,63.75 +4542,30,2.5,111.05,1.7,63.75 +4543,30,2.5,111.05,1.7,63.75 +4544,30,2.5,111.05,1.7,63.75 +4545,30,2.5,111.05,1.7,63.75 +4546,30,2.5,111.05,1.7,63.75 +4547,30,2.5,111.05,1.7,63.75 +4548,30,2.5,111.05,1.7,63.75 +4549,30,2.5,111.05,1.7,63.75 +4550,30,2.5,111.05,1.7,63.75 +4551,30,2.5,111.05,1.7,63.75 +4552,30,2.5,111.05,1.7,63.75 +4553,30,2.5,111.05,1.7,63.75 +4554,30,2.5,111.05,1.7,63.75 +4555,30,2.5,111.05,1.7,63.75 +4556,30,2.5,111.05,1.7,63.75 +4557,30,2.5,111.05,1.7,63.75 +4558,30,2.5,111.05,1.7,63.75 +4559,30,2.5,111.05,1.7,63.75 +4560,30,2.5,111.05,1.7,63.75 +4561,30,2.5,111.05,1.7,63.75 +4562,30,2.5,111.05,1.7,63.75 +4563,30,2.5,111.05,1.7,63.75 +4564,30,2.5,111.05,1.7,63.75 +4565,30,2.5,111.05,1.7,63.75 +4566,30,2.5,111.05,1.7,63.75 +4567,30,2.5,111.05,1.7,63.75 +4568,30,2.5,111.05,1.7,63.75 +4569,30,2.5,111.05,1.7,63.75 +4570,30,2.5,111.05,1.7,63.75 +4571,30,2.5,111.05,1.7,63.75 +4572,30,2.5,111.05,1.7,63.75 +4573,30,2.5,111.05,1.7,63.75 +4574,30,2.5,111.05,1.7,63.75 +4575,30,2.5,111.05,1.7,63.75 +4576,30,2.5,111.05,1.7,63.75 +4577,30,2.5,111.05,1.7,63.75 +4578,30,2.5,111.05,1.7,63.75 +4579,30,2.5,111.05,1.7,63.75 +4580,30,2.5,111.05,1.7,63.75 +4581,30,2.5,111.05,1.7,63.75 +4582,30,2.5,111.05,1.7,63.75 +4583,30,2.5,111.05,1.7,63.75 +4584,30,2.5,111.05,1.7,63.75 +4585,30,2.5,111.05,1.7,63.75 +4586,30,2.5,111.05,1.7,63.75 +4587,30,2.5,111.05,1.7,63.75 +4588,30,2.5,111.05,1.7,63.75 +4589,30,2.5,111.05,1.7,63.75 +4590,30,2.5,111.05,1.7,63.75 +4591,30,2.5,111.05,1.7,63.75 +4592,30,2.5,111.05,1.7,63.75 +4593,30,2.5,111.05,1.7,63.75 +4594,30,2.5,111.05,1.7,63.75 +4595,30,2.5,111.05,1.7,63.75 +4596,30,2.5,111.05,1.7,63.75 +4597,30,2.5,111.05,1.7,63.75 +4598,30,2.5,111.05,1.7,63.75 +4599,30,2.5,111.05,1.7,63.75 +4600,30,2.5,111.05,1.7,63.75 +4601,30,2.5,111.05,1.7,63.75 +4602,30,2.5,111.05,1.7,63.75 +4603,30,2.5,111.05,1.7,63.75 +4604,30,2.5,111.05,1.7,63.75 +4605,30,2.5,111.05,1.7,63.75 +4606,30,2.5,111.05,1.7,63.75 +4607,30,2.5,111.05,1.7,63.75 +4608,30,2.5,111.05,1.7,63.75 +4609,30,2.5,111.05,1.7,63.75 +4610,30,2.5,111.05,1.7,63.75 +4611,30,2.5,111.05,1.7,63.75 +4612,30,2.5,111.05,1.7,63.75 +4613,30,2.5,111.05,1.7,63.75 +4614,30,2.5,111.05,1.7,63.75 +4615,30,2.5,111.05,1.7,63.75 +4616,30,2.5,111.05,1.7,63.75 +4617,30,2.5,111.05,1.7,63.75 +4618,30,2.5,111.05,1.7,63.75 +4619,30,2.5,111.05,1.7,63.75 +4620,30,2.5,111.05,1.7,63.75 +4621,30,2.5,111.05,1.7,63.75 +4622,30,2.5,111.05,1.7,63.75 +4623,30,2.5,111.05,1.7,63.75 +4624,30,2.5,111.05,1.7,63.75 +4625,30,2.5,111.05,1.7,63.75 +4626,30,2.5,111.05,1.7,63.75 +4627,30,2.5,111.05,1.7,63.75 +4628,30,2.5,111.05,1.7,63.75 +4629,30,2.5,111.05,1.7,63.75 +4630,30,2.5,111.05,1.7,63.75 +4631,30,2.5,111.05,1.7,63.75 +4632,30,2.5,111.05,1.7,63.75 +4633,30,2.5,111.05,1.7,63.75 +4634,30,2.5,111.05,1.7,63.75 +4635,30,2.5,111.05,1.7,63.75 +4636,30,2.5,111.05,1.7,63.75 +4637,30,2.5,111.05,1.7,63.75 +4638,30,2.5,111.05,1.7,63.75 +4639,30,2.5,111.05,1.7,63.75 +4640,30,2.5,111.05,1.7,63.75 +4641,30,2.5,111.05,1.7,63.75 +4642,30,2.5,111.05,1.7,63.75 +4643,30,2.5,111.05,1.7,63.75 +4644,30,2.5,111.05,1.7,63.75 +4645,30,2.5,111.05,1.7,63.75 +4646,30,2.5,111.05,1.7,63.75 +4647,30,2.5,111.05,1.7,63.75 +4648,30,2.5,111.05,1.7,63.75 +4649,30,2.5,111.05,1.7,63.75 +4650,30,2.5,111.05,1.7,63.75 +4651,30,2.5,111.05,1.7,63.75 +4652,30,2.5,111.05,1.7,63.75 +4653,30,2.5,111.05,1.7,63.75 +4654,30,2.5,111.05,1.7,63.75 +4655,30,2.5,111.05,1.7,63.75 +4656,30,2.5,111.05,1.7,63.75 +4657,30,2.5,111.05,1.7,63.75 +4658,30,2.5,111.05,1.7,63.75 +4659,30,2.5,111.05,1.7,63.75 +4660,30,2.5,111.05,1.7,63.75 +4661,30,2.5,111.05,1.7,63.75 +4662,30,2.5,111.05,1.7,63.75 +4663,30,2.5,111.05,1.7,63.75 +4664,30,2.5,111.05,1.7,63.75 +4665,30,2.5,111.05,1.7,63.75 +4666,30,2.5,111.05,1.7,63.75 +4667,30,2.5,111.05,1.7,63.75 +4668,30,2.5,111.05,1.7,63.75 +4669,30,2.5,111.05,1.7,63.75 +4670,30,2.5,111.05,1.7,63.75 +4671,30,2.5,111.05,1.7,63.75 +4672,30,2.5,111.05,1.7,63.75 +4673,30,2.5,111.05,1.7,63.75 +4674,30,2.5,111.05,1.7,63.75 +4675,30,2.5,111.05,1.7,63.75 +4676,30,2.5,111.05,1.7,63.75 +4677,30,2.5,111.05,1.7,63.75 +4678,30,2.5,111.05,1.7,63.75 +4679,30,2.5,111.05,1.7,63.75 +4680,30,2.5,111.05,1.7,63.75 +4681,30,2.5,111.05,1.7,63.75 +4682,30,2.5,111.05,1.7,63.75 +4683,30,2.5,111.05,1.7,63.75 +4684,30,2.5,111.05,1.7,63.75 +4685,30,2.5,111.05,1.7,63.75 +4686,30,2.5,111.05,1.7,63.75 +4687,30,2.5,111.05,1.7,63.75 +4688,30,2.5,111.05,1.7,63.75 +4689,30,2.5,111.05,1.7,63.75 +4690,30,2.5,111.05,1.7,63.75 +4691,30,2.5,111.05,1.7,63.75 +4692,30,2.5,111.05,1.7,63.75 +4693,30,2.5,111.05,1.7,63.75 +4694,30,2.5,111.05,1.7,63.75 +4695,30,2.5,111.05,1.7,63.75 +4696,30,2.5,111.05,1.7,63.75 +4697,30,2.5,111.05,1.7,63.75 +4698,30,2.5,111.05,1.7,63.75 +4699,30,2.5,111.05,1.7,63.75 +4700,30,2.5,111.05,1.7,63.75 +4701,30,2.5,111.05,1.7,63.75 +4702,30,2.5,111.05,1.7,63.75 +4703,30,2.5,111.05,1.7,63.75 +4704,30,2.5,111.05,1.7,63.75 +4705,30,2.5,111.05,1.7,63.75 +4706,30,2.5,111.05,1.7,63.75 +4707,30,2.5,111.05,1.7,63.75 +4708,30,2.5,111.05,1.7,63.75 +4709,30,2.5,111.05,1.7,63.75 +4710,30,2.5,111.05,1.7,63.75 +4711,30,2.5,111.05,1.7,63.75 +4712,30,2.5,111.05,1.7,63.75 +4713,30,2.5,111.05,1.7,63.75 +4714,30,2.5,111.05,1.7,63.75 +4715,30,2.5,111.05,1.7,63.75 +4716,30,2.5,111.05,1.7,63.75 +4717,30,2.5,111.05,1.7,63.75 +4718,30,2.5,111.05,1.7,63.75 +4719,30,2.5,111.05,1.7,63.75 +4720,30,2.5,111.05,1.7,63.75 +4721,30,2.5,111.05,1.7,63.75 +4722,30,2.5,111.05,1.7,63.75 +4723,30,2.5,111.05,1.7,63.75 +4724,30,2.5,111.05,1.7,63.75 +4725,30,2.5,111.05,1.7,63.75 +4726,30,2.5,111.05,1.7,63.75 +4727,30,2.5,111.05,1.7,63.75 +4728,30,2.5,111.05,1.7,63.75 +4729,30,2.5,111.05,1.7,63.75 +4730,30,2.5,111.05,1.7,63.75 +4731,30,2.5,111.05,1.7,63.75 +4732,30,2.5,111.05,1.7,63.75 +4733,30,2.5,111.05,1.7,63.75 +4734,30,2.5,111.05,1.7,63.75 +4735,30,2.5,111.05,1.7,63.75 +4736,30,2.5,111.05,1.7,63.75 +4737,30,2.5,111.05,1.7,63.75 +4738,30,2.5,111.05,1.7,63.75 +4739,30,2.5,111.05,1.7,63.75 +4740,30,2.5,111.05,1.7,63.75 +4741,30,2.5,111.05,1.7,63.75 +4742,30,2.5,111.05,1.7,63.75 +4743,30,2.5,111.05,1.7,63.75 +4744,30,2.5,111.05,1.7,63.75 +4745,30,2.5,111.05,1.7,63.75 +4746,30,2.5,111.05,1.7,63.75 +4747,30,2.5,111.05,1.7,63.75 +4748,30,2.5,111.05,1.7,63.75 +4749,30,2.5,111.05,1.7,63.75 +4750,30,2.5,111.05,1.7,63.75 +4751,30,2.5,111.05,1.7,63.75 +4752,30,2.5,111.05,1.7,63.75 +4753,30,2.5,111.05,1.7,63.75 +4754,30,2.5,111.05,1.7,63.75 +4755,30,2.5,111.05,1.7,63.75 +4756,30,2.5,111.05,1.7,63.75 +4757,30,2.5,111.05,1.7,63.75 +4758,30,2.5,111.05,1.7,63.75 +4759,30,2.5,111.05,1.7,63.75 +4760,30,2.5,111.05,1.7,63.75 +4761,30,2.5,111.05,1.7,63.75 +4762,30,2.5,111.05,1.7,63.75 +4763,30,2.5,111.05,1.7,63.75 +4764,30,2.5,111.05,1.7,63.75 +4765,30,2.5,111.05,1.7,63.75 +4766,30,2.5,111.05,1.7,63.75 +4767,30,2.5,111.05,1.7,63.75 +4768,30,2.5,111.05,1.7,63.75 +4769,30,2.5,111.05,1.7,63.75 +4770,30,2.5,111.05,1.7,63.75 +4771,30,2.5,111.05,1.7,63.75 +4772,30,2.5,111.05,1.7,63.75 +4773,30,2.5,111.05,1.7,63.75 +4774,30,2.5,111.05,1.7,63.75 +4775,30,2.5,111.05,1.7,63.75 +4776,30,2.5,111.05,1.7,63.75 +4777,30,2.5,111.05,1.7,63.75 +4778,30,2.5,111.05,1.7,63.75 +4779,30,2.5,111.05,1.7,63.75 +4780,30,2.5,111.05,1.7,63.75 +4781,30,2.5,111.05,1.7,63.75 +4782,30,2.5,111.05,1.7,63.75 +4783,30,2.5,111.05,1.7,63.75 +4784,30,2.5,111.05,1.7,63.75 +4785,30,2.5,111.05,1.7,63.75 +4786,30,2.5,111.05,1.7,63.75 +4787,30,2.5,111.05,1.7,63.75 +4788,30,2.5,111.05,1.7,63.75 +4789,30,2.5,111.05,1.7,63.75 +4790,30,2.5,111.05,1.7,63.75 +4791,30,2.5,111.05,1.7,63.75 +4792,30,2.5,111.05,1.7,63.75 +4793,30,2.5,111.05,1.7,63.75 +4794,30,2.5,111.05,1.7,63.75 +4795,30,2.5,111.05,1.7,63.75 +4796,30,2.5,111.05,1.7,63.75 +4797,30,2.5,111.05,1.7,63.75 +4798,30,2.5,111.05,1.7,63.75 +4799,30,2.5,111.05,1.7,63.75 +4800,30,2.5,111.05,1.7,63.75 +4801,30,2.5,111.05,1.7,63.75 +4802,30,2.5,111.05,1.7,63.75 +4803,30,2.5,111.05,1.7,63.75 +4804,30,2.5,111.05,1.7,63.75 +4805,30,2.5,111.05,1.7,63.75 +4806,30,2.5,111.05,1.7,63.75 +4807,30,2.5,111.05,1.7,63.75 +4808,30,2.5,111.05,1.7,63.75 +4809,30,2.5,111.05,1.7,63.75 +4810,30,2.5,111.05,1.7,63.75 +4811,30,2.5,111.05,1.7,63.75 +4812,30,2.5,111.05,1.7,63.75 +4813,30,2.5,111.05,1.7,63.75 +4814,30,2.5,111.05,1.7,63.75 +4815,30,2.5,111.05,1.7,63.75 +4816,30,2.5,111.05,1.7,63.75 +4817,30,2.5,111.05,1.7,63.75 +4818,30,2.5,111.05,1.7,63.75 +4819,30,2.5,111.05,1.7,63.75 +4820,30,2.5,111.05,1.7,63.75 +4821,30,2.5,111.05,1.7,63.75 +4822,30,2.5,111.05,1.7,63.75 +4823,30,2.5,111.05,1.7,63.75 +4824,30,2.5,111.05,1.7,63.75 +4825,30,2.5,111.05,1.7,63.75 +4826,30,2.5,111.05,1.7,63.75 +4827,30,2.5,111.05,1.7,63.75 +4828,30,2.5,111.05,1.7,63.75 +4829,30,2.5,111.05,1.7,63.75 +4830,30,2.5,111.05,1.7,63.75 +4831,30,2.5,111.05,1.7,63.75 +4832,30,2.5,111.05,1.7,63.75 +4833,30,2.5,111.05,1.7,63.75 +4834,30,2.5,111.05,1.7,63.75 +4835,30,2.5,111.05,1.7,63.75 +4836,30,2.5,111.05,1.7,63.75 +4837,30,2.5,111.05,1.7,63.75 +4838,30,2.5,111.05,1.7,63.75 +4839,30,2.5,111.05,1.7,63.75 +4840,30,2.5,111.05,1.7,63.75 +4841,30,2.5,111.05,1.7,63.75 +4842,30,2.5,111.05,1.7,63.75 +4843,30,2.5,111.05,1.7,63.75 +4844,30,2.5,111.05,1.7,63.75 +4845,30,2.5,111.05,1.7,63.75 +4846,30,2.5,111.05,1.7,63.75 +4847,30,2.5,111.05,1.7,63.75 +4848,30,2.5,111.05,1.7,63.75 +4849,30,2.5,111.05,1.7,63.75 +4850,30,2.5,111.05,1.7,63.75 +4851,30,2.5,111.05,1.7,63.75 +4852,30,2.5,111.05,1.7,63.75 +4853,30,2.5,111.05,1.7,63.75 +4854,30,2.5,111.05,1.7,63.75 +4855,30,2.5,111.05,1.7,63.75 +4856,30,2.5,111.05,1.7,63.75 +4857,30,2.5,111.05,1.7,63.75 +4858,30,2.5,111.05,1.7,63.75 +4859,30,2.5,111.05,1.7,63.75 +4860,30,2.5,111.05,1.7,63.75 +4861,30,2.5,111.05,1.7,63.75 +4862,30,2.5,111.05,1.7,63.75 +4863,30,2.5,111.05,1.7,63.75 +4864,30,2.5,111.05,1.7,63.75 +4865,30,2.5,111.05,1.7,63.75 +4866,30,2.5,111.05,1.7,63.75 +4867,30,2.5,111.05,1.7,63.75 +4868,30,2.5,111.05,1.7,63.75 +4869,30,2.5,111.05,1.7,63.75 +4870,30,2.5,111.05,1.7,63.75 +4871,30,2.5,111.05,1.7,63.75 +4872,30,2.5,111.05,1.7,63.75 +4873,30,2.5,111.05,1.7,63.75 +4874,30,2.5,111.05,1.7,63.75 +4875,30,2.5,111.05,1.7,63.75 +4876,30,2.5,111.05,1.7,63.75 +4877,30,2.5,111.05,1.7,63.75 +4878,30,2.5,111.05,1.7,63.75 +4879,30,2.5,111.05,1.7,63.75 +4880,30,2.5,111.05,1.7,63.75 +4881,30,2.5,111.05,1.7,63.75 +4882,30,2.5,111.05,1.7,63.75 +4883,30,2.5,111.05,1.7,63.75 +4884,30,2.5,111.05,1.7,63.75 +4885,30,2.5,111.05,1.7,63.75 +4886,30,2.5,111.05,1.7,63.75 +4887,30,2.5,111.05,1.7,63.75 +4888,30,2.5,111.05,1.7,63.75 +4889,30,2.5,111.05,1.7,63.75 +4890,30,2.5,111.05,1.7,63.75 +4891,30,2.5,111.05,1.7,63.75 +4892,30,2.5,111.05,1.7,63.75 +4893,30,2.5,111.05,1.7,63.75 +4894,30,2.5,111.05,1.7,63.75 +4895,30,2.5,111.05,1.7,63.75 +4896,30,2.5,111.05,1.7,63.75 +4897,30,2.5,111.05,1.7,63.75 +4898,30,2.5,111.05,1.7,63.75 +4899,30,2.5,111.05,1.7,63.75 +4900,30,2.5,111.05,1.7,63.75 +4901,30,2.5,111.05,1.7,63.75 +4902,30,2.5,111.05,1.7,63.75 +4903,30,2.5,111.05,1.7,63.75 +4904,30,2.5,111.05,1.7,63.75 +4905,30,2.5,111.05,1.7,63.75 +4906,30,2.5,111.05,1.7,63.75 +4907,30,2.5,111.05,1.7,63.75 +4908,30,2.5,111.05,1.7,63.75 +4909,30,2.5,111.05,1.7,63.75 +4910,30,2.5,111.05,1.7,63.75 +4911,30,2.5,111.05,1.7,63.75 +4912,30,2.5,111.05,1.7,63.75 +4913,30,2.5,111.05,1.7,63.75 +4914,30,2.5,111.05,1.7,63.75 +4915,30,2.5,111.05,1.7,63.75 +4916,30,2.5,111.05,1.7,63.75 +4917,30,2.5,111.05,1.7,63.75 +4918,30,2.5,111.05,1.7,63.75 +4919,30,2.5,111.05,1.7,63.75 +4920,30,2.5,111.05,1.7,63.75 +4921,30,2.5,111.05,1.7,63.75 +4922,30,2.5,111.05,1.7,63.75 +4923,30,2.5,111.05,1.7,63.75 +4924,30,2.5,111.05,1.7,63.75 +4925,30,2.5,111.05,1.7,63.75 +4926,30,2.5,111.05,1.7,63.75 +4927,30,2.5,111.05,1.7,63.75 +4928,30,2.5,111.05,1.7,63.75 +4929,30,2.5,111.05,1.7,63.75 +4930,30,2.5,111.05,1.7,63.75 +4931,30,2.5,111.05,1.7,63.75 +4932,30,2.5,111.05,1.7,63.75 +4933,30,2.5,111.05,1.7,63.75 +4934,30,2.5,111.05,1.7,63.75 +4935,30,2.5,111.05,1.7,63.75 +4936,30,2.5,111.05,1.7,63.75 +4937,30,2.5,111.05,1.7,63.75 +4938,30,2.5,111.05,1.7,63.75 +4939,30,2.5,111.05,1.7,63.75 +4940,30,2.5,111.05,1.7,63.75 +4941,30,2.5,111.05,1.7,63.75 +4942,30,2.5,111.05,1.7,63.75 +4943,30,2.5,111.05,1.7,63.75 +4944,30,2.5,111.05,1.7,63.75 +4945,30,2.5,111.05,1.7,63.75 +4946,30,2.5,111.05,1.7,63.75 +4947,30,2.5,111.05,1.7,63.75 +4948,30,2.5,111.05,1.7,63.75 +4949,30,2.5,111.05,1.7,63.75 +4950,30,2.5,111.05,1.7,63.75 +4951,30,2.5,111.05,1.7,63.75 +4952,30,2.5,111.05,1.7,63.75 +4953,30,2.5,111.05,1.7,63.75 +4954,30,2.5,111.05,1.7,63.75 +4955,30,2.5,111.05,1.7,63.75 +4956,30,2.5,111.05,1.7,63.75 +4957,30,2.5,111.05,1.7,63.75 +4958,30,2.5,111.05,1.7,63.75 +4959,30,2.5,111.05,1.7,63.75 +4960,30,2.5,111.05,1.7,63.75 +4961,30,2.5,111.05,1.7,63.75 +4962,30,2.5,111.05,1.7,63.75 +4963,30,2.5,111.05,1.7,63.75 +4964,30,2.5,111.05,1.7,63.75 +4965,30,2.5,111.05,1.7,63.75 +4966,30,2.5,111.05,1.7,63.75 +4967,30,2.5,111.05,1.7,63.75 +4968,30,2.5,111.05,1.7,63.75 +4969,30,2.5,111.05,1.7,63.75 +4970,30,2.5,111.05,1.7,63.75 +4971,30,2.5,111.05,1.7,63.75 +4972,30,2.5,111.05,1.7,63.75 +4973,30,2.5,111.05,1.7,63.75 +4974,30,2.5,111.05,1.7,63.75 +4975,30,2.5,111.05,1.7,63.75 +4976,30,2.5,111.05,1.7,63.75 +4977,30,2.5,111.05,1.7,63.75 +4978,30,2.5,111.05,1.7,63.75 +4979,30,2.5,111.05,1.7,63.75 +4980,30,2.5,111.05,1.7,63.75 +4981,30,2.5,111.05,1.7,63.75 +4982,30,2.5,111.05,1.7,63.75 +4983,30,2.5,111.05,1.7,63.75 +4984,30,2.5,111.05,1.7,63.75 +4985,30,2.5,111.05,1.7,63.75 +4986,30,2.5,111.05,1.7,63.75 +4987,30,2.5,111.05,1.7,63.75 +4988,30,2.5,111.05,1.7,63.75 +4989,30,2.5,111.05,1.7,63.75 +4990,30,2.5,111.05,1.7,63.75 +4991,30,2.5,111.05,1.7,63.75 +4992,30,2.5,111.05,1.7,63.75 +4993,30,2.5,111.05,1.7,63.75 +4994,30,2.5,111.05,1.7,63.75 +4995,30,2.5,111.05,1.7,63.75 +4996,30,2.5,111.05,1.7,63.75 +4997,30,2.5,111.05,1.7,63.75 +4998,30,2.5,111.05,1.7,63.75 +4999,30,2.5,111.05,1.7,63.75 +5000,30,2.5,111.05,1.7,63.75 +5001,30,2.5,111.05,1.7,63.75 +5002,30,2.5,111.05,1.7,63.75 +5003,30,2.5,111.05,1.7,63.75 +5004,30,2.5,111.05,1.7,63.75 +5005,30,2.5,111.05,1.7,63.75 +5006,30,2.5,111.05,1.7,63.75 +5007,30,2.5,111.05,1.7,63.75 +5008,30,2.5,111.05,1.7,63.75 +5009,30,2.5,111.05,1.7,63.75 +5010,30,2.5,111.05,1.7,63.75 +5011,30,2.5,111.05,1.7,63.75 +5012,30,2.5,111.05,1.7,63.75 +5013,30,2.5,111.05,1.7,63.75 +5014,30,2.5,111.05,1.7,63.75 +5015,30,2.5,111.05,1.7,63.75 +5016,30,2.5,111.05,1.7,63.75 +5017,30,2.5,111.05,1.7,63.75 +5018,30,2.5,111.05,1.7,63.75 +5019,30,2.5,111.05,1.7,63.75 +5020,30,2.5,111.05,1.7,63.75 +5021,30,2.5,111.05,1.7,63.75 +5022,30,2.5,111.05,1.7,63.75 +5023,30,2.5,111.05,1.7,63.75 +5024,30,2.5,111.05,1.7,63.75 +5025,30,2.5,111.05,1.7,63.75 +5026,30,2.5,111.05,1.7,63.75 +5027,30,2.5,111.05,1.7,63.75 +5028,30,2.5,111.05,1.7,63.75 +5029,30,2.5,111.05,1.7,63.75 +5030,30,2.5,111.05,1.7,63.75 +5031,30,2.5,111.05,1.7,63.75 +5032,30,2.5,111.05,1.7,63.75 +5033,30,2.5,111.05,1.7,63.75 +5034,30,2.5,111.05,1.7,63.75 +5035,30,2.5,111.05,1.7,63.75 +5036,30,2.5,111.05,1.7,63.75 +5037,30,2.5,111.05,1.7,63.75 +5038,30,2.5,111.05,1.7,63.75 +5039,30,2.5,111.05,1.7,63.75 +5040,30,2.5,111.05,1.7,63.75 +5041,30,2.5,111.05,1.7,63.75 +5042,30,2.5,111.05,1.7,63.75 +5043,30,2.5,111.05,1.7,63.75 +5044,30,2.5,111.05,1.7,63.75 +5045,30,2.5,111.05,1.7,63.75 +5046,30,2.5,111.05,1.7,63.75 +5047,30,2.5,111.05,1.7,63.75 +5048,30,2.5,111.05,1.7,63.75 +5049,30,2.5,111.05,1.7,63.75 +5050,30,2.5,111.05,1.7,63.75 +5051,30,2.5,111.05,1.7,63.75 +5052,30,2.5,111.05,1.7,63.75 +5053,30,2.5,111.05,1.7,63.75 +5054,30,2.5,111.05,1.7,63.75 +5055,30,2.5,111.05,1.7,63.75 +5056,30,2.5,111.05,1.7,63.75 +5057,30,2.5,111.05,1.7,63.75 +5058,30,2.5,111.05,1.7,63.75 +5059,30,2.5,111.05,1.7,63.75 +5060,30,2.5,111.05,1.7,63.75 +5061,30,2.5,111.05,1.7,63.75 +5062,30,2.5,111.05,1.7,63.75 +5063,30,2.5,111.05,1.7,63.75 +5064,30,2.5,111.05,1.7,63.75 +5065,30,2.5,111.05,1.7,63.75 +5066,30,2.5,111.05,1.7,63.75 +5067,30,2.5,111.05,1.7,63.75 +5068,30,2.5,111.05,1.7,63.75 +5069,30,2.5,111.05,1.7,63.75 +5070,30,2.5,111.05,1.7,63.75 +5071,30,2.5,111.05,1.7,63.75 +5072,30,2.5,111.05,1.7,63.75 +5073,30,2.5,111.05,1.7,63.75 +5074,30,2.5,111.05,1.7,63.75 +5075,30,2.5,111.05,1.7,63.75 +5076,30,2.5,111.05,1.7,63.75 +5077,30,2.5,111.05,1.7,63.75 +5078,30,2.5,111.05,1.7,63.75 +5079,30,2.5,111.05,1.7,63.75 +5080,30,2.5,111.05,1.7,63.75 +5081,30,2.5,111.05,1.7,63.75 +5082,30,2.5,111.05,1.7,63.75 +5083,30,2.5,111.05,1.7,63.75 +5084,30,2.5,111.05,1.7,63.75 +5085,30,2.5,111.05,1.7,63.75 +5086,30,2.5,111.05,1.7,63.75 +5087,30,2.5,111.05,1.7,63.75 +5088,30,2.5,111.05,1.7,63.75 +5089,30,2.5,111.05,1.7,63.75 +5090,30,2.5,111.05,1.7,63.75 +5091,30,2.5,111.05,1.7,63.75 +5092,30,2.5,111.05,1.7,63.75 +5093,30,2.5,111.05,1.7,63.75 +5094,30,2.5,111.05,1.7,63.75 +5095,30,2.5,111.05,1.7,63.75 +5096,30,2.5,111.05,1.7,63.75 +5097,30,2.5,111.05,1.7,63.75 +5098,30,2.5,111.05,1.7,63.75 +5099,30,2.5,111.05,1.7,63.75 +5100,30,2.5,111.05,1.7,63.75 +5101,30,2.5,111.05,1.7,63.75 +5102,30,2.5,111.05,1.7,63.75 +5103,30,2.5,111.05,1.7,63.75 +5104,30,2.5,111.05,1.7,63.75 +5105,30,2.5,111.05,1.7,63.75 +5106,30,2.5,111.05,1.7,63.75 +5107,30,2.5,111.05,1.7,63.75 +5108,30,2.5,111.05,1.7,63.75 +5109,30,2.5,111.05,1.7,63.75 +5110,30,2.5,111.05,1.7,63.75 +5111,30,2.5,111.05,1.7,63.75 +5112,30,2.5,111.05,1.7,63.75 +5113,30,2.5,111.05,1.7,63.75 +5114,30,2.5,111.05,1.7,63.75 +5115,30,2.5,111.05,1.7,63.75 +5116,30,2.5,111.05,1.7,63.75 +5117,30,2.5,111.05,1.7,63.75 +5118,30,2.5,111.05,1.7,63.75 +5119,30,2.5,111.05,1.7,63.75 +5120,30,2.5,111.05,1.7,63.75 +5121,30,2.5,111.05,1.7,63.75 +5122,30,2.5,111.05,1.7,63.75 +5123,30,2.5,111.05,1.7,63.75 +5124,30,2.5,111.05,1.7,63.75 +5125,30,2.5,111.05,1.7,63.75 +5126,30,2.5,111.05,1.7,63.75 +5127,30,2.5,111.05,1.7,63.75 +5128,30,2.5,111.05,1.7,63.75 +5129,30,2.5,111.05,1.7,63.75 +5130,30,2.5,111.05,1.7,63.75 +5131,30,2.5,111.05,1.7,63.75 +5132,30,2.5,111.05,1.7,63.75 +5133,30,2.5,111.05,1.7,63.75 +5134,30,2.5,111.05,1.7,63.75 +5135,30,2.5,111.05,1.7,63.75 +5136,30,2.5,111.05,1.7,63.75 +5137,30,2.5,111.05,1.7,63.75 +5138,30,2.5,111.05,1.7,63.75 +5139,30,2.5,111.05,1.7,63.75 +5140,30,2.5,111.05,1.7,63.75 +5141,30,2.5,111.05,1.7,63.75 +5142,30,2.5,111.05,1.7,63.75 +5143,30,2.5,111.05,1.7,63.75 +5144,30,2.5,111.05,1.7,63.75 +5145,30,2.5,111.05,1.7,63.75 +5146,30,2.5,111.05,1.7,63.75 +5147,30,2.5,111.05,1.7,63.75 +5148,30,2.5,111.05,1.7,63.75 +5149,30,2.5,111.05,1.7,63.75 +5150,30,2.5,111.05,1.7,63.75 +5151,30,2.5,111.05,1.7,63.75 +5152,30,2.5,111.05,1.7,63.75 +5153,30,2.5,111.05,1.7,63.75 +5154,30,2.5,111.05,1.7,63.75 +5155,30,2.5,111.05,1.7,63.75 +5156,30,2.5,111.05,1.7,63.75 +5157,30,2.5,111.05,1.7,63.75 +5158,30,2.5,111.05,1.7,63.75 +5159,30,2.5,111.05,1.7,63.75 +5160,30,2.5,111.05,1.7,63.75 +5161,30,2.5,111.05,1.7,63.75 +5162,30,2.5,111.05,1.7,63.75 +5163,30,2.5,111.05,1.7,63.75 +5164,30,2.5,111.05,1.7,63.75 +5165,30,2.5,111.05,1.7,63.75 +5166,30,2.5,111.05,1.7,63.75 +5167,30,2.5,111.05,1.7,63.75 +5168,30,2.5,111.05,1.7,63.75 +5169,30,2.5,111.05,1.7,63.75 +5170,30,2.5,111.05,1.7,63.75 +5171,30,2.5,111.05,1.7,63.75 +5172,30,2.5,111.05,1.7,63.75 +5173,30,2.5,111.05,1.7,63.75 +5174,30,2.5,111.05,1.7,63.75 +5175,30,2.5,111.05,1.7,63.75 +5176,30,2.5,111.05,1.7,63.75 +5177,30,2.5,111.05,1.7,63.75 +5178,30,2.5,111.05,1.7,63.75 +5179,30,2.5,111.05,1.7,63.75 +5180,30,2.5,111.05,1.7,63.75 +5181,30,2.5,111.05,1.7,63.75 +5182,30,2.5,111.05,1.7,63.75 +5183,30,2.5,111.05,1.7,63.75 +5184,30,2.5,111.05,1.7,63.75 +5185,30,2.5,111.05,1.7,63.75 +5186,30,2.5,111.05,1.7,63.75 +5187,30,2.5,111.05,1.7,63.75 +5188,30,2.5,111.05,1.7,63.75 +5189,30,2.5,111.05,1.7,63.75 +5190,30,2.5,111.05,1.7,63.75 +5191,30,2.5,111.05,1.7,63.75 +5192,30,2.5,111.05,1.7,63.75 +5193,30,2.5,111.05,1.7,63.75 +5194,30,2.5,111.05,1.7,63.75 +5195,30,2.5,111.05,1.7,63.75 +5196,30,2.5,111.05,1.7,63.75 +5197,30,2.5,111.05,1.7,63.75 +5198,30,2.5,111.05,1.7,63.75 +5199,30,2.5,111.05,1.7,63.75 +5200,30,2.5,111.05,1.7,63.75 +5201,30,2.5,111.05,1.7,63.75 +5202,30,2.5,111.05,1.7,63.75 +5203,30,2.5,111.05,1.7,63.75 +5204,30,2.5,111.05,1.7,63.75 +5205,30,2.5,111.05,1.7,63.75 +5206,30,2.5,111.05,1.7,63.75 +5207,30,2.5,111.05,1.7,63.75 +5208,30,2.5,111.05,1.7,63.75 +5209,30,2.5,111.05,1.7,63.75 +5210,30,2.5,111.05,1.7,63.75 +5211,30,2.5,111.05,1.7,63.75 +5212,30,2.5,111.05,1.7,63.75 +5213,30,2.5,111.05,1.7,63.75 +5214,30,2.5,111.05,1.7,63.75 +5215,30,2.5,111.05,1.7,63.75 +5216,30,2.5,111.05,1.7,63.75 +5217,30,2.5,111.05,1.7,63.75 +5218,30,2.5,111.05,1.7,63.75 +5219,30,2.5,111.05,1.7,63.75 +5220,30,2.5,111.05,1.7,63.75 +5221,30,2.5,111.05,1.7,63.75 +5222,30,2.5,111.05,1.7,63.75 +5223,30,2.5,111.05,1.7,63.75 +5224,30,2.5,111.05,1.7,63.75 +5225,30,2.5,111.05,1.7,63.75 +5226,30,2.5,111.05,1.7,63.75 +5227,30,2.5,111.05,1.7,63.75 +5228,30,2.5,111.05,1.7,63.75 +5229,30,2.5,111.05,1.7,63.75 +5230,30,2.5,111.05,1.7,63.75 +5231,30,2.5,111.05,1.7,63.75 +5232,30,2.5,111.05,1.7,63.75 +5233,30,2.5,111.05,1.7,63.75 +5234,30,2.5,111.05,1.7,63.75 +5235,30,2.5,111.05,1.7,63.75 +5236,30,2.5,111.05,1.7,63.75 +5237,30,2.5,111.05,1.7,63.75 +5238,30,2.5,111.05,1.7,63.75 +5239,30,2.5,111.05,1.7,63.75 +5240,30,2.5,111.05,1.7,63.75 +5241,30,2.5,111.05,1.7,63.75 +5242,30,2.5,111.05,1.7,63.75 +5243,30,2.5,111.05,1.7,63.75 +5244,30,2.5,111.05,1.7,63.75 +5245,30,2.5,111.05,1.7,63.75 +5246,30,2.5,111.05,1.7,63.75 +5247,30,2.5,111.05,1.7,63.75 +5248,30,2.5,111.05,1.7,63.75 +5249,30,2.5,111.05,1.7,63.75 +5250,30,2.5,111.05,1.7,63.75 +5251,30,2.5,111.05,1.7,63.75 +5252,30,2.5,111.05,1.7,63.75 +5253,30,2.5,111.05,1.7,63.75 +5254,30,2.5,111.05,1.7,63.75 +5255,30,2.5,111.05,1.7,63.75 +5256,30,2.5,111.05,1.7,63.75 +5257,30,2.5,111.05,1.7,63.75 +5258,30,2.5,111.05,1.7,63.75 +5259,30,2.5,111.05,1.7,63.75 +5260,30,2.5,111.05,1.7,63.75 +5261,30,2.5,111.05,1.7,63.75 +5262,30,2.5,111.05,1.7,63.75 +5263,30,2.5,111.05,1.7,63.75 +5264,30,2.5,111.05,1.7,63.75 +5265,30,2.5,111.05,1.7,63.75 +5266,30,2.5,111.05,1.7,63.75 +5267,30,2.5,111.05,1.7,63.75 +5268,30,2.5,111.05,1.7,63.75 +5269,30,2.5,111.05,1.7,63.75 +5270,30,2.5,111.05,1.7,63.75 +5271,30,2.5,111.05,1.7,63.75 +5272,30,2.5,111.05,1.7,63.75 +5273,30,2.5,111.05,1.7,63.75 +5274,30,2.5,111.05,1.7,63.75 +5275,30,2.5,111.05,1.7,63.75 +5276,30,2.5,111.05,1.7,63.75 +5277,30,2.5,111.05,1.7,63.75 +5278,30,2.5,111.05,1.7,63.75 +5279,30,2.5,111.05,1.7,63.75 +5280,30,2.5,111.05,1.7,63.75 +5281,30,2.5,111.05,1.7,63.75 +5282,30,2.5,111.05,1.7,63.75 +5283,30,2.5,111.05,1.7,63.75 +5284,30,2.5,111.05,1.7,63.75 +5285,30,2.5,111.05,1.7,63.75 +5286,30,2.5,111.05,1.7,63.75 +5287,30,2.5,111.05,1.7,63.75 +5288,30,2.5,111.05,1.7,63.75 +5289,30,2.5,111.05,1.7,63.75 +5290,30,2.5,111.05,1.7,63.75 +5291,30,2.5,111.05,1.7,63.75 +5292,30,2.5,111.05,1.7,63.75 +5293,30,2.5,111.05,1.7,63.75 +5294,30,2.5,111.05,1.7,63.75 +5295,30,2.5,111.05,1.7,63.75 +5296,30,2.5,111.05,1.7,63.75 +5297,30,2.5,111.05,1.7,63.75 +5298,30,2.5,111.05,1.7,63.75 +5299,30,2.5,111.05,1.7,63.75 +5300,30,2.5,111.05,1.7,63.75 +5301,30,2.5,111.05,1.7,63.75 +5302,30,2.5,111.05,1.7,63.75 +5303,30,2.5,111.05,1.7,63.75 +5304,30,2.5,111.05,1.7,63.75 +5305,30,2.5,111.05,1.7,63.75 +5306,30,2.5,111.05,1.7,63.75 +5307,30,2.5,111.05,1.7,63.75 +5308,30,2.5,111.05,1.7,63.75 +5309,30,2.5,111.05,1.7,63.75 +5310,30,2.5,111.05,1.7,63.75 +5311,30,2.5,111.05,1.7,63.75 +5312,30,2.5,111.05,1.7,63.75 +5313,30,2.5,111.05,1.7,63.75 +5314,30,2.5,111.05,1.7,63.75 +5315,30,2.5,111.05,1.7,63.75 +5316,30,2.5,111.05,1.7,63.75 +5317,30,2.5,111.05,1.7,63.75 +5318,30,2.5,111.05,1.7,63.75 +5319,30,2.5,111.05,1.7,63.75 +5320,30,2.5,111.05,1.7,63.75 +5321,30,2.5,111.05,1.7,63.75 +5322,30,2.5,111.05,1.7,63.75 +5323,30,2.5,111.05,1.7,63.75 +5324,30,2.5,111.05,1.7,63.75 +5325,30,2.5,111.05,1.7,63.75 +5326,30,2.5,111.05,1.7,63.75 +5327,30,2.5,111.05,1.7,63.75 +5328,30,2.5,111.05,1.7,63.75 +5329,30,2.5,111.05,1.7,63.75 +5330,30,2.5,111.05,1.7,63.75 +5331,30,2.5,111.05,1.7,63.75 +5332,30,2.5,111.05,1.7,63.75 +5333,30,2.5,111.05,1.7,63.75 +5334,30,2.5,111.05,1.7,63.75 +5335,30,2.5,111.05,1.7,63.75 +5336,30,2.5,111.05,1.7,63.75 +5337,30,2.5,111.05,1.7,63.75 +5338,30,2.5,111.05,1.7,63.75 +5339,30,2.5,111.05,1.7,63.75 +5340,30,2.5,111.05,1.7,63.75 +5341,30,2.5,111.05,1.7,63.75 +5342,30,2.5,111.05,1.7,63.75 +5343,30,2.5,111.05,1.7,63.75 +5344,30,2.5,111.05,1.7,63.75 +5345,30,2.5,111.05,1.7,63.75 +5346,30,2.5,111.05,1.7,63.75 +5347,30,2.5,111.05,1.7,63.75 +5348,30,2.5,111.05,1.7,63.75 +5349,30,2.5,111.05,1.7,63.75 +5350,30,2.5,111.05,1.7,63.75 +5351,30,2.5,111.05,1.7,63.75 +5352,30,2.5,111.05,1.7,63.75 +5353,30,2.5,111.05,1.7,63.75 +5354,30,2.5,111.05,1.7,63.75 +5355,30,2.5,111.05,1.7,63.75 +5356,30,2.5,111.05,1.7,63.75 +5357,30,2.5,111.05,1.7,63.75 +5358,30,2.5,111.05,1.7,63.75 +5359,30,2.5,111.05,1.7,63.75 +5360,30,2.5,111.05,1.7,63.75 +5361,30,2.5,111.05,1.7,63.75 +5362,30,2.5,111.05,1.7,63.75 +5363,30,2.5,111.05,1.7,63.75 +5364,30,2.5,111.05,1.7,63.75 +5365,30,2.5,111.05,1.7,63.75 +5366,30,2.5,111.05,1.7,63.75 +5367,30,2.5,111.05,1.7,63.75 +5368,30,2.5,111.05,1.7,63.75 +5369,30,2.5,111.05,1.7,63.75 +5370,30,2.5,111.05,1.7,63.75 +5371,30,2.5,111.05,1.7,63.75 +5372,30,2.5,111.05,1.7,63.75 +5373,30,2.5,111.05,1.7,63.75 +5374,30,2.5,111.05,1.7,63.75 +5375,30,2.5,111.05,1.7,63.75 +5376,30,2.5,111.05,1.7,63.75 +5377,30,2.5,111.05,1.7,63.75 +5378,30,2.5,111.05,1.7,63.75 +5379,30,2.5,111.05,1.7,63.75 +5380,30,2.5,111.05,1.7,63.75 +5381,30,2.5,111.05,1.7,63.75 +5382,30,2.5,111.05,1.7,63.75 +5383,30,2.5,111.05,1.7,63.75 +5384,30,2.5,111.05,1.7,63.75 +5385,30,2.5,111.05,1.7,63.75 +5386,30,2.5,111.05,1.7,63.75 +5387,30,2.5,111.05,1.7,63.75 +5388,30,2.5,111.05,1.7,63.75 +5389,30,2.5,111.05,1.7,63.75 +5390,30,2.5,111.05,1.7,63.75 +5391,30,2.5,111.05,1.7,63.75 +5392,30,2.5,111.05,1.7,63.75 +5393,30,2.5,111.05,1.7,63.75 +5394,30,2.5,111.05,1.7,63.75 +5395,30,2.5,111.05,1.7,63.75 +5396,30,2.5,111.05,1.7,63.75 +5397,30,2.5,111.05,1.7,63.75 +5398,30,2.5,111.05,1.7,63.75 +5399,30,2.5,111.05,1.7,63.75 +5400,30,2.5,111.05,1.7,63.75 +5401,30,2.5,111.05,1.7,63.75 +5402,30,2.5,111.05,1.7,63.75 +5403,30,2.5,111.05,1.7,63.75 +5404,30,2.5,111.05,1.7,63.75 +5405,30,2.5,111.05,1.7,63.75 +5406,30,2.5,111.05,1.7,63.75 +5407,30,2.5,111.05,1.7,63.75 +5408,30,2.5,111.05,1.7,63.75 +5409,30,2.5,111.05,1.7,63.75 +5410,30,2.5,111.05,1.7,63.75 +5411,30,2.5,111.05,1.7,63.75 +5412,30,2.5,111.05,1.7,63.75 +5413,30,2.5,111.05,1.7,63.75 +5414,30,2.5,111.05,1.7,63.75 +5415,30,2.5,111.05,1.7,63.75 +5416,30,2.5,111.05,1.7,63.75 +5417,30,2.5,111.05,1.7,63.75 +5418,30,2.5,111.05,1.7,63.75 +5419,30,2.5,111.05,1.7,63.75 +5420,30,2.5,111.05,1.7,63.75 +5421,30,2.5,111.05,1.7,63.75 +5422,30,2.5,111.05,1.7,63.75 +5423,30,2.5,111.05,1.7,63.75 +5424,30,2.5,111.05,1.7,63.75 +5425,30,2.5,111.05,1.7,63.75 +5426,30,2.5,111.05,1.7,63.75 +5427,30,2.5,111.05,1.7,63.75 +5428,30,2.5,111.05,1.7,63.75 +5429,30,2.5,111.05,1.7,63.75 +5430,30,2.5,111.05,1.7,63.75 +5431,30,2.5,111.05,1.7,63.75 +5432,30,2.5,111.05,1.7,63.75 +5433,30,2.5,111.05,1.7,63.75 +5434,30,2.5,111.05,1.7,63.75 +5435,30,2.5,111.05,1.7,63.75 +5436,30,2.5,111.05,1.7,63.75 +5437,30,2.5,111.05,1.7,63.75 +5438,30,2.5,111.05,1.7,63.75 +5439,30,2.5,111.05,1.7,63.75 +5440,30,2.5,111.05,1.7,63.75 +5441,30,2.5,111.05,1.7,63.75 +5442,30,2.5,111.05,1.7,63.75 +5443,30,2.5,111.05,1.7,63.75 +5444,30,2.5,111.05,1.7,63.75 +5445,30,2.5,111.05,1.7,63.75 +5446,30,2.5,111.05,1.7,63.75 +5447,30,2.5,111.05,1.7,63.75 +5448,30,2.5,111.05,1.7,63.75 +5449,30,2.5,111.05,1.7,63.75 +5450,30,2.5,111.05,1.7,63.75 +5451,30,2.5,111.05,1.7,63.75 +5452,30,2.5,111.05,1.7,63.75 +5453,30,2.5,111.05,1.7,63.75 +5454,30,2.5,111.05,1.7,63.75 +5455,30,2.5,111.05,1.7,63.75 +5456,30,2.5,111.05,1.7,63.75 +5457,30,2.5,111.05,1.7,63.75 +5458,30,2.5,111.05,1.7,63.75 +5459,30,2.5,111.05,1.7,63.75 +5460,30,2.5,111.05,1.7,63.75 +5461,30,2.5,111.05,1.7,63.75 +5462,30,2.5,111.05,1.7,63.75 +5463,30,2.5,111.05,1.7,63.75 +5464,30,2.5,111.05,1.7,63.75 +5465,30,2.5,111.05,1.7,63.75 +5466,30,2.5,111.05,1.7,63.75 +5467,30,2.5,111.05,1.7,63.75 +5468,30,2.5,111.05,1.7,63.75 +5469,30,2.5,111.05,1.7,63.75 +5470,30,2.5,111.05,1.7,63.75 +5471,30,2.5,111.05,1.7,63.75 +5472,30,2.5,111.05,1.7,63.75 +5473,30,2.5,111.05,1.7,63.75 +5474,30,2.5,111.05,1.7,63.75 +5475,30,2.5,111.05,1.7,63.75 +5476,30,2.5,111.05,1.7,63.75 +5477,30,2.5,111.05,1.7,63.75 +5478,30,2.5,111.05,1.7,63.75 +5479,30,2.5,111.05,1.7,63.75 +5480,30,2.5,111.05,1.7,63.75 +5481,30,2.5,111.05,1.7,63.75 +5482,30,2.5,111.05,1.7,63.75 +5483,30,2.5,111.05,1.7,63.75 +5484,30,2.5,111.05,1.7,63.75 +5485,30,2.5,111.05,1.7,63.75 +5486,30,2.5,111.05,1.7,63.75 +5487,30,2.5,111.05,1.7,63.75 +5488,30,2.5,111.05,1.7,63.75 +5489,30,2.5,111.05,1.7,63.75 +5490,30,2.5,111.05,1.7,63.75 +5491,30,2.5,111.05,1.7,63.75 +5492,30,2.5,111.05,1.7,63.75 +5493,30,2.5,111.05,1.7,63.75 +5494,30,2.5,111.05,1.7,63.75 +5495,30,2.5,111.05,1.7,63.75 +5496,30,2.5,111.05,1.7,63.75 +5497,30,2.5,111.05,1.7,63.75 +5498,30,2.5,111.05,1.7,63.75 +5499,30,2.5,111.05,1.7,63.75 +5500,30,2.5,111.05,1.7,63.75 +5501,30,2.5,111.05,1.7,63.75 +5502,30,2.5,111.05,1.7,63.75 +5503,30,2.5,111.05,1.7,63.75 +5504,30,2.5,111.05,1.7,63.75 +5505,30,2.5,111.05,1.7,63.75 +5506,30,2.5,111.05,1.7,63.75 +5507,30,2.5,111.05,1.7,63.75 +5508,30,2.5,111.05,1.7,63.75 +5509,30,2.5,111.05,1.7,63.75 +5510,30,2.5,111.05,1.7,63.75 +5511,30,2.5,111.05,1.7,63.75 +5512,30,2.5,111.05,1.7,63.75 +5513,30,2.5,111.05,1.7,63.75 +5514,30,2.5,111.05,1.7,63.75 +5515,30,2.5,111.05,1.7,63.75 +5516,30,2.5,111.05,1.7,63.75 +5517,30,2.5,111.05,1.7,63.75 +5518,30,2.5,111.05,1.7,63.75 +5519,30,2.5,111.05,1.7,63.75 +5520,30,2.5,111.05,1.7,63.75 +5521,30,2.5,111.05,1.7,63.75 +5522,30,2.5,111.05,1.7,63.75 +5523,30,2.5,111.05,1.7,63.75 +5524,30,2.5,111.05,1.7,63.75 +5525,30,2.5,111.05,1.7,63.75 +5526,30,2.5,111.05,1.7,63.75 +5527,30,2.5,111.05,1.7,63.75 +5528,30,2.5,111.05,1.7,63.75 +5529,30,2.5,111.05,1.7,63.75 +5530,30,2.5,111.05,1.7,63.75 +5531,30,2.5,111.05,1.7,63.75 +5532,30,2.5,111.05,1.7,63.75 +5533,30,2.5,111.05,1.7,63.75 +5534,30,2.5,111.05,1.7,63.75 +5535,30,2.5,111.05,1.7,63.75 +5536,30,2.5,111.05,1.7,63.75 +5537,30,2.5,111.05,1.7,63.75 +5538,30,2.5,111.05,1.7,63.75 +5539,30,2.5,111.05,1.7,63.75 +5540,30,2.5,111.05,1.7,63.75 +5541,30,2.5,111.05,1.7,63.75 +5542,30,2.5,111.05,1.7,63.75 +5543,30,2.5,111.05,1.7,63.75 +5544,30,2.5,111.05,1.7,63.75 +5545,30,2.5,111.05,1.7,63.75 +5546,30,2.5,111.05,1.7,63.75 +5547,30,2.5,111.05,1.7,63.75 +5548,30,2.5,111.05,1.7,63.75 +5549,30,2.5,111.05,1.7,63.75 +5550,30,2.5,111.05,1.7,63.75 +5551,30,2.5,111.05,1.7,63.75 +5552,30,2.5,111.05,1.7,63.75 +5553,30,2.5,111.05,1.7,63.75 +5554,30,2.5,111.05,1.7,63.75 +5555,30,2.5,111.05,1.7,63.75 +5556,30,2.5,111.05,1.7,63.75 +5557,30,2.5,111.05,1.7,63.75 +5558,30,2.5,111.05,1.7,63.75 +5559,30,2.5,111.05,1.7,63.75 +5560,30,2.5,111.05,1.7,63.75 +5561,30,2.5,111.05,1.7,63.75 +5562,30,2.5,111.05,1.7,63.75 +5563,30,2.5,111.05,1.7,63.75 +5564,30,2.5,111.05,1.7,63.75 +5565,30,2.5,111.05,1.7,63.75 +5566,30,2.5,111.05,1.7,63.75 +5567,30,2.5,111.05,1.7,63.75 +5568,30,2.5,111.05,1.7,63.75 +5569,30,2.5,111.05,1.7,63.75 +5570,30,2.5,111.05,1.7,63.75 +5571,30,2.5,111.05,1.7,63.75 +5572,30,2.5,111.05,1.7,63.75 +5573,30,2.5,111.05,1.7,63.75 +5574,30,2.5,111.05,1.7,63.75 +5575,30,2.5,111.05,1.7,63.75 +5576,30,2.5,111.05,1.7,63.75 +5577,30,2.5,111.05,1.7,63.75 +5578,30,2.5,111.05,1.7,63.75 +5579,30,2.5,111.05,1.7,63.75 +5580,30,2.5,111.05,1.7,63.75 +5581,30,2.5,111.05,1.7,63.75 +5582,30,2.5,111.05,1.7,63.75 +5583,30,2.5,111.05,1.7,63.75 +5584,30,2.5,111.05,1.7,63.75 +5585,30,2.5,111.05,1.7,63.75 +5586,30,2.5,111.05,1.7,63.75 +5587,30,2.5,111.05,1.7,63.75 +5588,30,2.5,111.05,1.7,63.75 +5589,30,2.5,111.05,1.7,63.75 +5590,30,2.5,111.05,1.7,63.75 +5591,30,2.5,111.05,1.7,63.75 +5592,30,2.5,111.05,1.7,63.75 +5593,30,2.5,111.05,1.7,63.75 +5594,30,2.5,111.05,1.7,63.75 +5595,30,2.5,111.05,1.7,63.75 +5596,30,2.5,111.05,1.7,63.75 +5597,30,2.5,111.05,1.7,63.75 +5598,30,2.5,111.05,1.7,63.75 +5599,30,2.5,111.05,1.7,63.75 +5600,30,2.5,111.05,1.7,63.75 +5601,30,2.5,111.05,1.7,63.75 +5602,30,2.5,111.05,1.7,63.75 +5603,30,2.5,111.05,1.7,63.75 +5604,30,2.5,111.05,1.7,63.75 +5605,30,2.5,111.05,1.7,63.75 +5606,30,2.5,111.05,1.7,63.75 +5607,30,2.5,111.05,1.7,63.75 +5608,30,2.5,111.05,1.7,63.75 +5609,30,2.5,111.05,1.7,63.75 +5610,30,2.5,111.05,1.7,63.75 +5611,30,2.5,111.05,1.7,63.75 +5612,30,2.5,111.05,1.7,63.75 +5613,30,2.5,111.05,1.7,63.75 +5614,30,2.5,111.05,1.7,63.75 +5615,30,2.5,111.05,1.7,63.75 +5616,30,2.5,111.05,1.7,63.75 +5617,30,2.5,111.05,1.7,63.75 +5618,30,2.5,111.05,1.7,63.75 +5619,30,2.5,111.05,1.7,63.75 +5620,30,2.5,111.05,1.7,63.75 +5621,30,2.5,111.05,1.7,63.75 +5622,30,2.5,111.05,1.7,63.75 +5623,30,2.5,111.05,1.7,63.75 +5624,30,2.5,111.05,1.7,63.75 +5625,30,2.5,111.05,1.7,63.75 +5626,30,2.5,111.05,1.7,63.75 +5627,30,2.5,111.05,1.7,63.75 +5628,30,2.5,111.05,1.7,63.75 +5629,30,2.5,111.05,1.7,63.75 +5630,30,2.5,111.05,1.7,63.75 +5631,30,2.5,111.05,1.7,63.75 +5632,30,2.5,111.05,1.7,63.75 +5633,30,2.5,111.05,1.7,63.75 +5634,30,2.5,111.05,1.7,63.75 +5635,30,2.5,111.05,1.7,63.75 +5636,30,2.5,111.05,1.7,63.75 +5637,30,2.5,111.05,1.7,63.75 +5638,30,2.5,111.05,1.7,63.75 +5639,30,2.5,111.05,1.7,63.75 +5640,30,2.5,111.05,1.7,63.75 +5641,30,2.5,111.05,1.7,63.75 +5642,30,2.5,111.05,1.7,63.75 +5643,30,2.5,111.05,1.7,63.75 +5644,30,2.5,111.05,1.7,63.75 +5645,30,2.5,111.05,1.7,63.75 +5646,30,2.5,111.05,1.7,63.75 +5647,30,2.5,111.05,1.7,63.75 +5648,30,2.5,111.05,1.7,63.75 +5649,30,2.5,111.05,1.7,63.75 +5650,30,2.5,111.05,1.7,63.75 +5651,30,2.5,111.05,1.7,63.75 +5652,30,2.5,111.05,1.7,63.75 +5653,30,2.5,111.05,1.7,63.75 +5654,30,2.5,111.05,1.7,63.75 +5655,30,2.5,111.05,1.7,63.75 +5656,30,2.5,111.05,1.7,63.75 +5657,30,2.5,111.05,1.7,63.75 +5658,30,2.5,111.05,1.7,63.75 +5659,30,2.5,111.05,1.7,63.75 +5660,30,2.5,111.05,1.7,63.75 +5661,30,2.5,111.05,1.7,63.75 +5662,30,2.5,111.05,1.7,63.75 +5663,30,2.5,111.05,1.7,63.75 +5664,30,2.5,111.05,1.7,63.75 +5665,30,2.5,111.05,1.7,63.75 +5666,30,2.5,111.05,1.7,63.75 +5667,30,2.5,111.05,1.7,63.75 +5668,30,2.5,111.05,1.7,63.75 +5669,30,2.5,111.05,1.7,63.75 +5670,30,2.5,111.05,1.7,63.75 +5671,30,2.5,111.05,1.7,63.75 +5672,30,2.5,111.05,1.7,63.75 +5673,30,2.5,111.05,1.7,63.75 +5674,30,2.5,111.05,1.7,63.75 +5675,30,2.5,111.05,1.7,63.75 +5676,30,2.5,111.05,1.7,63.75 +5677,30,2.5,111.05,1.7,63.75 +5678,30,2.5,111.05,1.7,63.75 +5679,30,2.5,111.05,1.7,63.75 +5680,30,2.5,111.05,1.7,63.75 +5681,30,2.5,111.05,1.7,63.75 +5682,30,2.5,111.05,1.7,63.75 +5683,30,2.5,111.05,1.7,63.75 +5684,30,2.5,111.05,1.7,63.75 +5685,30,2.5,111.05,1.7,63.75 +5686,30,2.5,111.05,1.7,63.75 +5687,30,2.5,111.05,1.7,63.75 +5688,30,2.5,111.05,1.7,63.75 +5689,30,2.5,111.05,1.7,63.75 +5690,30,2.5,111.05,1.7,63.75 +5691,30,2.5,111.05,1.7,63.75 +5692,30,2.5,111.05,1.7,63.75 +5693,30,2.5,111.05,1.7,63.75 +5694,30,2.5,111.05,1.7,63.75 +5695,30,2.5,111.05,1.7,63.75 +5696,30,2.5,111.05,1.7,63.75 +5697,30,2.5,111.05,1.7,63.75 +5698,30,2.5,111.05,1.7,63.75 +5699,30,2.5,111.05,1.7,63.75 +5700,30,2.5,111.05,1.7,63.75 +5701,30,2.5,111.05,1.7,63.75 +5702,30,2.5,111.05,1.7,63.75 +5703,30,2.5,111.05,1.7,63.75 +5704,30,2.5,111.05,1.7,63.75 +5705,30,2.5,111.05,1.7,63.75 +5706,30,2.5,111.05,1.7,63.75 +5707,30,2.5,111.05,1.7,63.75 +5708,30,2.5,111.05,1.7,63.75 +5709,30,2.5,111.05,1.7,63.75 +5710,30,2.5,111.05,1.7,63.75 +5711,30,2.5,111.05,1.7,63.75 +5712,30,2.5,111.05,1.7,63.75 +5713,30,2.5,111.05,1.7,63.75 +5714,30,2.5,111.05,1.7,63.75 +5715,30,2.5,111.05,1.7,63.75 +5716,30,2.5,111.05,1.7,63.75 +5717,30,2.5,111.05,1.7,63.75 +5718,30,2.5,111.05,1.7,63.75 +5719,30,2.5,111.05,1.7,63.75 +5720,30,2.5,111.05,1.7,63.75 +5721,30,2.5,111.05,1.7,63.75 +5722,30,2.5,111.05,1.7,63.75 +5723,30,2.5,111.05,1.7,63.75 +5724,30,2.5,111.05,1.7,63.75 +5725,30,2.5,111.05,1.7,63.75 +5726,30,2.5,111.05,1.7,63.75 +5727,30,2.5,111.05,1.7,63.75 +5728,30,2.5,111.05,1.7,63.75 +5729,30,2.5,111.05,1.7,63.75 +5730,30,2.5,111.05,1.7,63.75 +5731,30,2.5,111.05,1.7,63.75 +5732,30,2.5,111.05,1.7,63.75 +5733,30,2.5,111.05,1.7,63.75 +5734,30,2.5,111.05,1.7,63.75 +5735,30,2.5,111.05,1.7,63.75 +5736,30,2.5,111.05,1.7,63.75 +5737,30,2.5,111.05,1.7,63.75 +5738,30,2.5,111.05,1.7,63.75 +5739,30,2.5,111.05,1.7,63.75 +5740,30,2.5,111.05,1.7,63.75 +5741,30,2.5,111.05,1.7,63.75 +5742,30,2.5,111.05,1.7,63.75 +5743,30,2.5,111.05,1.7,63.75 +5744,30,2.5,111.05,1.7,63.75 +5745,30,2.5,111.05,1.7,63.75 +5746,30,2.5,111.05,1.7,63.75 +5747,30,2.5,111.05,1.7,63.75 +5748,30,2.5,111.05,1.7,63.75 +5749,30,2.5,111.05,1.7,63.75 +5750,30,2.5,111.05,1.7,63.75 +5751,30,2.5,111.05,1.7,63.75 +5752,30,2.5,111.05,1.7,63.75 +5753,30,2.5,111.05,1.7,63.75 +5754,30,2.5,111.05,1.7,63.75 +5755,30,2.5,111.05,1.7,63.75 +5756,30,2.5,111.05,1.7,63.75 +5757,30,2.5,111.05,1.7,63.75 +5758,30,2.5,111.05,1.7,63.75 +5759,30,2.5,111.05,1.7,63.75 +5760,30,2.5,111.05,1.7,63.75 +5761,30,2.5,111.05,1.7,63.75 +5762,30,2.5,111.05,1.7,63.75 +5763,30,2.5,111.05,1.7,63.75 +5764,30,2.5,111.05,1.7,63.75 +5765,30,2.5,111.05,1.7,63.75 +5766,30,2.5,111.05,1.7,63.75 +5767,30,2.5,111.05,1.7,63.75 +5768,30,2.5,111.05,1.7,63.75 +5769,30,2.5,111.05,1.7,63.75 +5770,30,2.5,111.05,1.7,63.75 +5771,30,2.5,111.05,1.7,63.75 +5772,30,2.5,111.05,1.7,63.75 +5773,30,2.5,111.05,1.7,63.75 +5774,30,2.5,111.05,1.7,63.75 +5775,30,2.5,111.05,1.7,63.75 +5776,30,2.5,111.05,1.7,63.75 +5777,30,2.5,111.05,1.7,63.75 +5778,30,2.5,111.05,1.7,63.75 +5779,30,2.5,111.05,1.7,63.75 +5780,30,2.5,111.05,1.7,63.75 +5781,30,2.5,111.05,1.7,63.75 +5782,30,2.5,111.05,1.7,63.75 +5783,30,2.5,111.05,1.7,63.75 +5784,30,2.5,111.05,1.7,63.75 +5785,30,2.5,111.05,1.7,63.75 +5786,30,2.5,111.05,1.7,63.75 +5787,30,2.5,111.05,1.7,63.75 +5788,30,2.5,111.05,1.7,63.75 +5789,30,2.5,111.05,1.7,63.75 +5790,30,2.5,111.05,1.7,63.75 +5791,30,2.5,111.05,1.7,63.75 +5792,30,2.5,111.05,1.7,63.75 +5793,30,2.5,111.05,1.7,63.75 +5794,30,2.5,111.05,1.7,63.75 +5795,30,2.5,111.05,1.7,63.75 +5796,30,2.5,111.05,1.7,63.75 +5797,30,2.5,111.05,1.7,63.75 +5798,30,2.5,111.05,1.7,63.75 +5799,30,2.5,111.05,1.7,63.75 +5800,30,2.5,111.05,1.7,63.75 +5801,30,2.5,111.05,1.7,63.75 +5802,30,2.5,111.05,1.7,63.75 +5803,30,2.5,111.05,1.7,63.75 +5804,30,2.5,111.05,1.7,63.75 +5805,30,2.5,111.05,1.7,63.75 +5806,30,2.5,111.05,1.7,63.75 +5807,30,2.5,111.05,1.7,63.75 +5808,30,2.5,111.05,1.7,63.75 +5809,30,2.5,111.05,1.7,63.75 +5810,30,2.5,111.05,1.7,63.75 +5811,30,2.5,111.05,1.7,63.75 +5812,30,2.5,111.05,1.7,63.75 +5813,30,2.5,111.05,1.7,63.75 +5814,30,2.5,111.05,1.7,63.75 +5815,30,2.5,111.05,1.7,63.75 +5816,30,2.5,111.05,1.7,63.75 +5817,30,2.5,111.05,1.7,63.75 +5818,30,2.5,111.05,1.7,63.75 +5819,30,2.5,111.05,1.7,63.75 +5820,30,2.5,111.05,1.7,63.75 +5821,30,2.5,111.05,1.7,63.75 +5822,30,2.5,111.05,1.7,63.75 +5823,30,2.5,111.05,1.7,63.75 +5824,30,2.5,111.05,1.7,63.75 +5825,30,2.5,111.05,1.7,63.75 +5826,30,2.5,111.05,1.7,63.75 +5827,30,2.5,111.05,1.7,63.75 +5828,30,2.5,111.05,1.7,63.75 +5829,30,2.5,111.05,1.7,63.75 +5830,30,2.5,111.05,1.7,63.75 +5831,30,2.5,111.05,1.7,63.75 +5832,30,2.5,111.05,1.7,63.75 +5833,30,2.5,111.05,1.7,63.75 +5834,30,2.5,111.05,1.7,63.75 +5835,30,2.5,111.05,1.7,63.75 +5836,30,2.5,111.05,1.7,63.75 +5837,30,2.5,111.05,1.7,63.75 +5838,30,2.5,111.05,1.7,63.75 +5839,30,2.5,111.05,1.7,63.75 +5840,30,2.5,111.05,1.7,63.75 +5841,30,2.5,111.05,1.7,63.75 +5842,30,2.5,111.05,1.7,63.75 +5843,30,2.5,111.05,1.7,63.75 +5844,30,2.5,111.05,1.7,63.75 +5845,30,2.5,111.05,1.7,63.75 +5846,30,2.5,111.05,1.7,63.75 +5847,30,2.5,111.05,1.7,63.75 +5848,30,2.5,111.05,1.7,63.75 +5849,30,2.5,111.05,1.7,63.75 +5850,30,2.5,111.05,1.7,63.75 +5851,30,2.5,111.05,1.7,63.75 +5852,30,2.5,111.05,1.7,63.75 +5853,30,2.5,111.05,1.7,63.75 +5854,30,2.5,111.05,1.7,63.75 +5855,30,2.5,111.05,1.7,63.75 +5856,30,2.5,111.05,1.7,63.75 +5857,30,2.5,111.05,1.7,63.75 +5858,30,2.5,111.05,1.7,63.75 +5859,30,2.5,111.05,1.7,63.75 +5860,30,2.5,111.05,1.7,63.75 +5861,30,2.5,111.05,1.7,63.75 +5862,30,2.5,111.05,1.7,63.75 +5863,30,2.5,111.05,1.7,63.75 +5864,30,2.5,111.05,1.7,63.75 +5865,30,2.5,111.05,1.7,63.75 +5866,30,2.5,111.05,1.7,63.75 +5867,30,2.5,111.05,1.7,63.75 +5868,30,2.5,111.05,1.7,63.75 +5869,30,2.5,111.05,1.7,63.75 +5870,30,2.5,111.05,1.7,63.75 +5871,30,2.5,111.05,1.7,63.75 +5872,30,2.5,111.05,1.7,63.75 +5873,30,2.5,111.05,1.7,63.75 +5874,30,2.5,111.05,1.7,63.75 +5875,30,2.5,111.05,1.7,63.75 +5876,30,2.5,111.05,1.7,63.75 +5877,30,2.5,111.05,1.7,63.75 +5878,30,2.5,111.05,1.7,63.75 +5879,30,2.5,111.05,1.7,63.75 +5880,30,2.5,111.05,1.7,63.75 +5881,30,2.5,111.05,1.7,63.75 +5882,30,2.5,111.05,1.7,63.75 +5883,30,2.5,111.05,1.7,63.75 +5884,30,2.5,111.05,1.7,63.75 +5885,30,2.5,111.05,1.7,63.75 +5886,30,2.5,111.05,1.7,63.75 +5887,30,2.5,111.05,1.7,63.75 +5888,30,2.5,111.05,1.7,63.75 +5889,30,2.5,111.05,1.7,63.75 +5890,30,2.5,111.05,1.7,63.75 +5891,30,2.5,111.05,1.7,63.75 +5892,30,2.5,111.05,1.7,63.75 +5893,30,2.5,111.05,1.7,63.75 +5894,30,2.5,111.05,1.7,63.75 +5895,30,2.5,111.05,1.7,63.75 +5896,30,2.5,111.05,1.7,63.75 +5897,30,2.5,111.05,1.7,63.75 +5898,30,2.5,111.05,1.7,63.75 +5899,30,2.5,111.05,1.7,63.75 +5900,30,2.5,111.05,1.7,63.75 +5901,30,2.5,111.05,1.7,63.75 +5902,30,2.5,111.05,1.7,63.75 +5903,30,2.5,111.05,1.7,63.75 +5904,30,2.5,111.05,1.7,63.75 +5905,30,2.5,111.05,1.7,63.75 +5906,30,2.5,111.05,1.7,63.75 +5907,30,2.5,111.05,1.7,63.75 +5908,30,2.5,111.05,1.7,63.75 +5909,30,2.5,111.05,1.7,63.75 +5910,30,2.5,111.05,1.7,63.75 +5911,30,2.5,111.05,1.7,63.75 +5912,30,2.5,111.05,1.7,63.75 +5913,30,2.5,111.05,1.7,63.75 +5914,30,2.5,111.05,1.7,63.75 +5915,30,2.5,111.05,1.7,63.75 +5916,30,2.5,111.05,1.7,63.75 +5917,30,2.5,111.05,1.7,63.75 +5918,30,2.5,111.05,1.7,63.75 +5919,30,2.5,111.05,1.7,63.75 +5920,30,2.5,111.05,1.7,63.75 +5921,30,2.5,111.05,1.7,63.75 +5922,30,2.5,111.05,1.7,63.75 +5923,30,2.5,111.05,1.7,63.75 +5924,30,2.5,111.05,1.7,63.75 +5925,30,2.5,111.05,1.7,63.75 +5926,30,2.5,111.05,1.7,63.75 +5927,30,2.5,111.05,1.7,63.75 +5928,30,2.5,111.05,1.7,63.75 +5929,30,2.5,111.05,1.7,63.75 +5930,30,2.5,111.05,1.7,63.75 +5931,30,2.5,111.05,1.7,63.75 +5932,30,2.5,111.05,1.7,63.75 +5933,30,2.5,111.05,1.7,63.75 +5934,30,2.5,111.05,1.7,63.75 +5935,30,2.5,111.05,1.7,63.75 +5936,30,2.5,111.05,1.7,63.75 +5937,30,2.5,111.05,1.7,63.75 +5938,30,2.5,111.05,1.7,63.75 +5939,30,2.5,111.05,1.7,63.75 +5940,30,2.5,111.05,1.7,63.75 +5941,30,2.5,111.05,1.7,63.75 +5942,30,2.5,111.05,1.7,63.75 +5943,30,2.5,111.05,1.7,63.75 +5944,30,2.5,111.05,1.7,63.75 +5945,30,2.5,111.05,1.7,63.75 +5946,30,2.5,111.05,1.7,63.75 +5947,30,2.5,111.05,1.7,63.75 +5948,30,2.5,111.05,1.7,63.75 +5949,30,2.5,111.05,1.7,63.75 +5950,30,2.5,111.05,1.7,63.75 +5951,30,2.5,111.05,1.7,63.75 +5952,30,2.5,111.05,1.7,63.75 +5953,30,2.5,111.05,1.7,63.75 +5954,30,2.5,111.05,1.7,63.75 +5955,30,2.5,111.05,1.7,63.75 +5956,30,2.5,111.05,1.7,63.75 +5957,30,2.5,111.05,1.7,63.75 +5958,30,2.5,111.05,1.7,63.75 +5959,30,2.5,111.05,1.7,63.75 +5960,30,2.5,111.05,1.7,63.75 +5961,30,2.5,111.05,1.7,63.75 +5962,30,2.5,111.05,1.7,63.75 +5963,30,2.5,111.05,1.7,63.75 +5964,30,2.5,111.05,1.7,63.75 +5965,30,2.5,111.05,1.7,63.75 +5966,30,2.5,111.05,1.7,63.75 +5967,30,2.5,111.05,1.7,63.75 +5968,30,2.5,111.05,1.7,63.75 +5969,30,2.5,111.05,1.7,63.75 +5970,30,2.5,111.05,1.7,63.75 +5971,30,2.5,111.05,1.7,63.75 +5972,30,2.5,111.05,1.7,63.75 +5973,30,2.5,111.05,1.7,63.75 +5974,30,2.5,111.05,1.7,63.75 +5975,30,2.5,111.05,1.7,63.75 +5976,30,2.5,111.05,1.7,63.75 +5977,30,2.5,111.05,1.7,63.75 +5978,30,2.5,111.05,1.7,63.75 +5979,30,2.5,111.05,1.7,63.75 +5980,30,2.5,111.05,1.7,63.75 +5981,30,2.5,111.05,1.7,63.75 +5982,30,2.5,111.05,1.7,63.75 +5983,30,2.5,111.05,1.7,63.75 +5984,30,2.5,111.05,1.7,63.75 +5985,30,2.5,111.05,1.7,63.75 +5986,30,2.5,111.05,1.7,63.75 +5987,30,2.5,111.05,1.7,63.75 +5988,30,2.5,111.05,1.7,63.75 +5989,30,2.5,111.05,1.7,63.75 +5990,30,2.5,111.05,1.7,63.75 +5991,30,2.5,111.05,1.7,63.75 +5992,30,2.5,111.05,1.7,63.75 +5993,30,2.5,111.05,1.7,63.75 +5994,30,2.5,111.05,1.7,63.75 +5995,30,2.5,111.05,1.7,63.75 +5996,30,2.5,111.05,1.7,63.75 +5997,30,2.5,111.05,1.7,63.75 +5998,30,2.5,111.05,1.7,63.75 +5999,30,2.5,111.05,1.7,63.75 +6000,30,2.5,111.05,1.7,63.75 diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/test5.csv b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/test5.csv new file mode 100644 index 0000000..dfaf406 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/test5.csv @@ -0,0 +1,1023 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,60,45,10,10,10,10 +10,55,40,7,9,9,9 +20,50,35,4,8,8,8 +30,45,30,1,7,7,7 +40,40,25,-2,6,6,6 +50,35,20,-5,5,5,5 +60,30,15,-8,4,4,4 +70,25,10,-11,3,3,3 +80,20,5,-14,2,2,2 +90,15,0,-17,1,1,1 +100,10,-5,-20,0,0,0 +110,5,0,-23,1,1,1 +120,0,5,-20,2,2,2 +130,-5,10,-17,3,3,3 +140,0,15,-14,4,4,4 +150,5,20,-11,5,5,5 +160,10,25,-8,6,6,6 +170,15,30,-5,7,7,7 +180,20,35,-2,8,8,8 +190,25,40,1,9,9,9 +200,30,45,4,10,10,10 +210,35,40,7,9,9,9 +220,40,35,10,8,8,8 +230,45,30,13,7,7,7 +240,50,25,10,6,6,6 +250,55,20,7,5,5,5 +260,60,15,4,4,4,4 +270,55,10,1,3,3,3 +280,50,5,-2,2,2,2 +290,45,0,-5,1,1,1 +300,40,-5,-8,0,0,0 +310,35,0,-11,1,1,1 +320,30,5,-14,2,2,2 +330,25,10,-17,3,3,3 +340,20,15,-20,4,4,4 +350,15,20,-23,5,5,5 +360,10,25,-20,6,6,6 +370,5,30,-17,7,7,7 +380,0,35,-14,8,8,8 +390,-5,40,-11,9,9,9 +400,0,45,-8,10,10,10 +410,5,40,-5,9,9,9 +420,10,35,-2,8,8,8 +430,15,30,1,7,7,7 +440,20,25,4,6,6,6 +450,25,20,7,5,5,5 +460,30,15,10,4,4,4 +470,35,10,13,3,3,3 +480,40,5,10,2,2,2 +490,45,0,7,1,1,1 +500,50,-5,4,0,0,0 +510,55,0,1,1,1,1 +520,60,5,-2,2,2,2 +530,55,10,-5,3,3,3 +540,50,15,-8,4,4,4 +550,45,20,-11,5,5,5 +560,40,25,-14,6,6,6 +570,35,30,-17,7,7,7 +580,30,35,-20,8,8,8 +590,25,40,-23,9,9,9 +600,20,45,-20,10,10,10 +610,15,40,-17,9,9,9 +620,10,35,-14,8,8,8 +630,5,30,-11,7,7,7 +640,0,25,-8,6,6,6 +650,-5,20,-5,5,5,5 +660,0,15,-2,4,4,4 +670,5,10,1,3,3,3 +680,10,5,4,2,2,2 +690,15,0,7,1,1,1 +700,20,-5,10,0,0,0 +710,25,0,13,1,1,1 +720,30,5,10,2,2,2 +730,35,10,7,3,3,3 +740,40,15,4,4,4,4 +750,45,20,1,5,5,5 +760,50,25,-2,6,6,6 +770,55,30,-5,7,7,7 +780,60,35,-8,8,8,8 +790,55,40,-11,9,9,9 +800,50,45,-14,10,10,10 +810,45,40,-17,9,9,9 +820,40,35,-20,8,8,8 +830,35,30,-23,7,7,7 +840,30,25,-20,6,6,6 +850,25,20,-17,5,5,5 +860,20,15,-14,4,4,4 +870,15,10,-11,3,3,3 +880,10,5,-8,2,2,2 +890,5,0,-5,1,1,1 +900,0,-5,-2,0,0,0 +910,-5,0,1,1,1,1 +920,0,5,4,2,2,2 +930,5,10,7,3,3,3 +940,10,15,10,4,4,4 +950,15,20,13,5,5,5 +960,20,25,10,6,6,6 +970,25,30,7,7,7,7 +980,30,35,4,8,8,8 +990,35,40,1,9,9,9 +1000,40,45,-2,10,10,10 +1010,10,20,30,40,50,60 +1020,10,20,30,40,50,60 +1030,10,20,30,40,50,60 +1040,10,20,30,40,50,60 +1050,10,20,30,40,50,60 +1060,10,20,30,40,50,60 +1070,10,20,30,40,50,60 +1080,10,20,30,40,50,60 +1090,10,20,30,40,50,60 +1100,10,20,30,40,50,60 +1110,10,20,30,40,50,60 +1120,10,20,30,40,50,60 +1130,10,20,30,40,50,60 +1140,10,20,30,40,50,60 +1150,10,20,30,40,50,60 +1160,10,20,30,40,50,60 +1170,10,20,30,40,50,60 +1180,10,20,30,40,50,60 +1190,10,20,30,40,50,60 +1200,10,20,30,40,50,60 +1210,10,20,30,40,50,60 +1220,10,20,30,40,50,60 +1230,10,20,30,40,50,60 +1240,10,20,30,40,50,60 +1250,10,20,30,40,50,60 +1260,10,20,30,40,50,60 +1270,10,20,30,40,50,60 +1280,10,20,30,40,50,60 +1290,10,20,30,40,50,60 +1300,10,20,30,40,50,60 +1310,10,20,30,40,50,60 +1320,10,20,30,40,50,60 +1330,10,20,30,40,50,60 +1340,10,20,30,40,50,60 +1350,10,20,30,40,50,60 +1360,10,20,30,40,50,60 +1370,10,20,30,40,50,60 +1380,10,20,30,40,50,60 +1390,10,20,30,40,50,60 +1400,10,20,30,40,50,60 +1410,10,20,30,40,50,60 +1420,10,20,30,40,50,60 +1430,10,20,30,40,50,60 +1440,10,20,30,40,50,60 +1450,10,20,30,40,50,60 +1460,10,20,30,40,50,60 +1470,10,20,30,40,50,60 +1480,10,20,30,40,50,60 +1490,10,20,30,40,50,60 +1500,10,20,30,40,50,60 +1510,10,20,30,40,50,60 +1520,10,20,30,40,50,60 +1530,10,20,30,40,50,60 +1540,10,20,30,40,50,60 +1550,10,20,30,40,50,60 +1560,10,20,30,40,50,60 +1570,10,20,30,40,50,60 +1580,10,20,30,40,50,60 +1590,10,20,30,40,50,60 +1600,10,20,30,40,50,60 +1610,10,20,30,40,50,60 +1620,10,20,30,40,50,60 +1630,10,20,30,40,50,60 +1640,10,20,30,40,50,60 +1650,10,20,30,40,50,60 +1660,10,20,30,40,50,60 +1670,10,20,30,40,50,60 +1680,10,20,30,40,50,60 +1690,10,20,30,40,50,60 +1700,10,20,30,40,50,60 +1710,10,20,30,40,50,60 +1720,10,20,30,40,50,60 +1730,10,20,30,40,50,60 +1740,10,20,30,40,50,60 +1750,10,20,30,40,50,60 +1760,10,20,30,40,50,60 +1770,10,20,30,40,50,60 +1780,10,20,30,40,50,60 +1790,10,20,30,40,50,60 +1800,10,20,30,40,50,60 +1810,10,20,30,40,50,60 +1820,10,20,30,40,50,60 +1830,10,20,30,40,50,60 +1840,10,20,30,40,50,60 +1850,10,20,30,40,50,60 +1860,10,20,30,40,50,60 +1870,10,20,30,40,50,60 +1880,10,20,30,40,50,60 +1890,10,20,30,40,50,60 +1900,10,20,30,40,50,60 +1910,10,20,30,40,50,60 +1920,10,20,30,40,50,60 +1930,10,20,30,40,50,60 +1940,10,20,30,40,50,60 +1950,10,20,30,40,50,60 +1960,10,20,30,40,50,60 +1970,10,20,30,40,50,60 +1980,10,20,30,40,50,60 +1990,10,20,30,40,50,60 +2000,10,20,30,40,50,60 +2010,10,20,30,40,50,60 +2020,10,20,30,40,50,60 +2030,10,20,30,40,50,60 +2040,10,20,30,40,50,60 +2050,10,20,30,40,50,60 +2060,10,20,30,40,50,60 +2070,10,20,30,40,50,60 +2080,10,20,30,40,50,60 +2090,10,20,30,40,50,60 +2100,10,20,30,40,50,60 +2110,10,20,30,40,50,60 +2120,10,20,30,40,50,60 +2130,10,20,30,40,50,60 +2140,10,20,30,40,50,60 +2150,10,20,30,40,50,60 +2160,10,20,30,40,50,60 +2170,10,20,30,40,50,60 +2180,10,20,30,40,50,60 +2190,10,20,30,40,50,60 +2200,10,20,30,40,50,60 +2210,10,20,30,40,50,60 +2220,10,20,30,40,50,60 +2230,10,20,30,40,50,60 +2240,10,20,30,40,50,60 +2250,10,20,30,40,50,60 +2260,10,20,30,40,50,60 +2270,10,20,30,40,50,60 +2280,10,20,30,40,50,60 +2290,10,20,30,40,50,60 +2300,10,20,30,40,50,60 +2310,10,20,30,40,50,60 +2320,10,20,30,40,50,60 +2330,10,20,30,40,50,60 +2340,10,20,30,40,50,60 +2350,10,20,30,40,50,60 +2360,10,20,30,40,50,60 +2370,10,20,30,40,50,60 +2380,10,20,30,40,50,60 +2390,10,20,30,40,50,60 +2400,10,20,30,40,50,60 +2410,10,20,30,40,50,60 +2420,10,20,30,40,50,60 +2430,10,20,30,40,50,60 +2440,10,20,30,40,50,60 +2450,10,20,30,40,50,60 +2460,10,20,30,40,50,60 +2470,10,20,30,40,50,60 +2480,10,20,30,40,50,60 +2490,10,20,30,40,50,60 +2500,10,20,30,40,50,60 +2510,10,20,30,40,50,60 +2520,10,20,30,40,50,60 +2530,10,20,30,40,50,60 +2540,10,20,30,40,50,60 +2550,10,20,30,40,50,60 +2560,10,20,30,40,50,60 +2570,10,20,30,40,50,60 +2580,10,20,30,40,50,60 +2590,10,20,30,40,50,60 +2600,10,20,30,40,50,60 +2610,10,20,30,40,50,60 +2620,10,20,30,40,50,60 +2630,10,20,30,40,50,60 +2640,10,20,30,40,50,60 +2650,10,20,30,40,50,60 +2660,10,20,30,40,50,60 +2670,10,20,30,40,50,60 +2680,10,20,30,40,50,60 +2690,10,20,30,40,50,60 +2700,10,20,30,40,50,60 +2710,10,20,30,40,50,60 +2720,10,20,30,40,50,60 +2730,10,20,30,40,50,60 +2740,10,20,30,40,50,60 +2750,10,20,30,40,50,60 +2760,10,20,30,40,50,60 +2770,10,20,30,40,50,60 +2780,10,20,30,40,50,60 +2790,10,20,30,40,50,60 +2800,10,20,30,40,50,60 +2810,10,20,30,40,50,60 +2820,10,20,30,40,50,60 +2830,10,20,30,40,50,60 +2840,10,20,30,40,50,60 +2850,10,20,30,40,50,60 +2860,10,20,30,40,50,60 +2870,10,20,30,40,50,60 +2880,10,20,30,40,50,60 +2890,10,20,30,40,50,60 +2900,10,20,30,40,50,60 +2910,10,20,30,40,50,60 +2920,10,20,30,40,50,60 +2930,10,20,30,40,50,60 +2940,10,20,30,40,50,60 +2950,10,20,30,40,50,60 +2960,10,20,30,40,50,60 +2970,10,20,30,40,50,60 +2980,10,20,30,40,50,60 +2990,10,20,30,40,50,60 +3000,10,20,30,40,50,60 +3010,10,20,30,40,50,60 +3020,10,20,30,40,50,60 +3030,10,20,30,40,50,60 +3040,10,20,30,40,50,60 +3050,10,20,30,40,50,60 +3060,10,20,30,40,50,60 +3070,10,20,30,40,50,60 +3080,10,20,30,40,50,60 +3090,10,20,30,40,50,60 +3100,10,20,30,40,50,60 +3110,10,20,30,40,50,60 +3120,10,20,30,40,50,60 +3130,10,20,30,40,50,60 +3140,10,20,30,40,50,60 +3150,10,20,30,40,50,60 +3160,10,20,30,40,50,60 +3170,10,20,30,40,50,60 +3180,10,20,30,40,50,60 +3190,10,20,30,40,50,60 +3200,10,20,30,40,50,60 +3210,10,20,30,40,50,60 +3220,10,20,30,40,50,60 +3230,10,20,30,40,50,60 +3240,10,20,30,40,50,60 +3250,10,20,30,40,50,60 +3260,10,20,30,40,50,60 +3270,10,20,30,40,50,60 +3280,10,20,30,40,50,60 +3290,10,20,30,40,50,60 +3300,10,20,30,40,50,60 +3310,10,20,30,40,50,60 +3320,10,20,30,40,50,60 +3330,10,20,30,40,50,60 +3340,10,20,30,40,50,60 +3350,10,20,30,40,50,60 +3360,10,20,30,40,50,60 +3370,10,20,30,40,50,60 +3380,10,20,30,40,50,60 +3390,10,20,30,40,50,60 +3400,10,20,30,40,50,60 +3410,10,20,30,40,50,60 +3420,10,20,30,40,50,60 +3430,10,20,30,40,50,60 +3440,10,20,30,40,50,60 +3450,10,20,30,40,50,60 +3460,10,20,30,40,50,60 +3470,10,20,30,40,50,60 +3480,10,20,30,40,50,60 +3490,10,20,30,40,50,60 +3500,10,20,30,40,50,60 +3510,10,20,30,40,50,60 +3520,10,20,30,40,50,60 +3530,10,20,30,40,50,60 +3540,10,20,30,40,50,60 +3550,10,20,30,40,50,60 +3560,10,20,30,40,50,60 +3570,10,20,30,40,50,60 +3580,10,20,30,40,50,60 +3590,10,20,30,40,50,60 +3600,10,20,30,40,50,60 +3610,10,20,30,40,50,60 +3620,10,20,30,40,50,60 +3630,10,20,30,40,50,60 +3640,10,20,30,40,50,60 +3650,10,20,30,40,50,60 +3660,10,20,30,40,50,60 +3670,10,20,30,40,50,60 +3680,10,20,30,40,50,60 +3690,10,20,30,40,50,60 +3700,10,20,30,40,50,60 +3710,10,20,30,40,50,60 +3720,10,20,30,40,50,60 +3730,10,20,30,40,50,60 +3740,10,20,30,40,50,60 +3750,10,20,30,40,50,60 +3760,10,20,30,40,50,60 +3770,10,20,30,40,50,60 +3780,10,20,30,40,50,60 +3790,10,20,30,40,50,60 +3800,10,20,30,40,50,60 +3810,10,20,30,40,50,60 +3820,10,20,30,40,50,60 +3830,10,20,30,40,50,60 +3840,10,20,30,40,50,60 +3850,10,20,30,40,50,60 +3860,10,20,30,40,50,60 +3870,10,20,30,40,50,60 +3880,10,20,30,40,50,60 +3890,10,20,30,40,50,60 +3900,10,20,30,40,50,60 +3910,10,20,30,40,50,60 +3920,10,20,30,40,50,60 +3930,10,20,30,40,50,60 +3940,10,20,30,40,50,60 +3950,10,20,30,40,50,60 +3960,10,20,30,40,50,60 +3970,10,20,30,40,50,60 +3980,10,20,30,40,50,60 +3990,10,20,30,40,50,60 +4000,10,20,30,40,50,60 +4010,10,20,30,40,50,60 +4020,10,20,30,40,50,60 +4030,10,20,30,40,50,60 +4040,10,20,30,40,50,60 +4050,10,20,30,40,50,60 +4060,10,20,30,40,50,60 +4070,10,20,30,40,50,60 +4080,10,20,30,40,50,60 +4090,10,20,30,40,50,60 +4100,10,20,30,40,50,60 +4110,10,20,30,40,50,60 +4120,10,20,30,40,50,60 +4130,10,20,30,40,50,60 +4140,10,20,30,40,50,60 +4150,10,20,30,40,50,60 +4160,10,20,30,40,50,60 +4170,10,20,30,40,50,60 +4180,10,20,30,40,50,60 +4190,10,20,30,40,50,60 +4200,10,20,30,40,50,60 +4210,10,20,30,40,50,60 +4220,10,20,30,40,50,60 +4230,10,20,30,40,50,60 +4240,10,20,30,40,50,60 +4250,10,20,30,40,50,60 +4260,10,20,30,40,50,60 +4270,10,20,30,40,50,60 +4280,10,20,30,40,50,60 +4290,10,20,30,40,50,60 +4300,10,20,30,40,50,60 +4310,10,20,30,40,50,60 +4320,10,20,30,40,50,60 +4330,10,20,30,40,50,60 +4340,10,20,30,40,50,60 +4350,10,20,30,40,50,60 +4360,10,20,30,40,50,60 +4370,10,20,30,40,50,60 +4380,10,20,30,40,50,60 +4390,10,20,30,40,50,60 +4400,10,20,30,40,50,60 +4410,10,20,30,40,50,60 +4420,10,20,30,40,50,60 +4430,10,20,30,40,50,60 +4440,10,20,30,40,50,60 +4450,10,20,30,40,50,60 +4460,10,20,30,40,50,60 +4470,10,20,30,40,50,60 +4480,10,20,30,40,50,60 +4490,10,20,30,40,50,60 +4500,10,20,30,40,50,60 +4510,10,20,30,40,50,60 +4520,10,20,30,40,50,60 +4530,10,20,30,40,50,60 +4540,10,20,30,40,50,60 +4550,10,20,30,40,50,60 +4560,10,20,30,40,50,60 +4570,10,20,30,40,50,60 +4580,10,20,30,40,50,60 +4590,10,20,30,40,50,60 +4600,10,20,30,40,50,60 +4610,10,20,30,40,50,60 +4620,10,20,30,40,50,60 +4630,10,20,30,40,50,60 +4640,10,20,30,40,50,60 +4650,10,20,30,40,50,60 +4660,10,20,30,40,50,60 +4670,10,20,30,40,50,60 +4680,10,20,30,40,50,60 +4690,10,20,30,40,50,60 +4700,10,20,30,40,50,60 +4710,10,20,30,40,50,60 +4720,10,20,30,40,50,60 +4730,10,20,30,40,50,60 +4740,10,20,30,40,50,60 +4750,10,20,30,40,50,60 +4760,10,20,30,40,50,60 +4770,10,20,30,40,50,60 +4780,10,20,30,40,50,60 +4790,10,20,30,40,50,60 +4800,10,20,30,40,50,60 +4810,10,20,30,40,50,60 +4820,10,20,30,40,50,60 +4830,10,20,30,40,50,60 +4840,10,20,30,40,50,60 +4850,10,20,30,40,50,60 +4860,10,20,30,40,50,60 +4870,10,20,30,40,50,60 +4880,10,20,30,40,50,60 +4890,10,20,30,40,50,60 +4900,10,20,30,40,50,60 +4910,10,20,30,40,50,60 +4920,10,20,30,40,50,60 +4930,10,20,30,40,50,60 +4940,10,20,30,40,50,60 +4950,10,20,30,40,50,60 +4960,10,20,30,40,50,60 +4970,10,20,30,40,50,60 +4980,10,20,30,40,50,60 +4990,10,20,30,40,50,60 +5000,10,20,30,40,50,60 +5010,10,20,30,40,50,60 +5020,10,20,30,40,50,60 +5030,10,20,30,40,50,60 +5040,10,20,30,40,50,60 +5050,10,20,30,40,50,60 +5060,10,20,30,40,50,60 +5070,10,20,30,40,50,60 +5080,10,20,30,40,50,60 +5090,10,20,30,40,50,60 +5100,10,20,30,40,50,60 +5110,10,20,30,40,50,60 +5120,10,20,30,40,50,60 +5130,10,20,30,40,50,60 +5140,10,20,30,40,50,60 +5150,10,20,30,40,50,60 +5160,10,20,30,40,50,60 +5170,10,20,30,40,50,60 +5180,10,20,30,40,50,60 +5190,10,20,30,40,50,60 +5200,10,20,30,40,50,60 +5210,10,20,30,40,50,60 +5220,10,20,30,40,50,60 +5230,10,20,30,40,50,60 +5240,10,20,30,40,50,60 +5250,10,20,30,40,50,60 +5260,10,20,30,40,50,60 +5270,10,20,30,40,50,60 +5280,10,20,30,40,50,60 +5290,10,20,30,40,50,60 +5300,10,20,30,40,50,60 +5310,10,20,30,40,50,60 +5320,10,20,30,40,50,60 +5330,10,20,30,40,50,60 +5340,10,20,30,40,50,60 +5350,10,20,30,40,50,60 +5360,10,20,30,40,50,60 +5370,10,20,30,40,50,60 +5380,10,20,30,40,50,60 +5390,10,20,30,40,50,60 +5400,10,20,30,40,50,60 +5410,10,20,30,40,50,60 +5420,10,20,30,40,50,60 +5430,10,20,30,40,50,60 +5440,10,20,30,40,50,60 +5450,10,20,30,40,50,60 +5460,10,20,30,40,50,60 +5470,10,20,30,40,50,60 +5480,10,20,30,40,50,60 +5490,10,20,30,40,50,60 +5500,10,20,30,40,50,60 +5510,10,20,30,40,50,60 +5520,10,20,30,40,50,60 +5530,10,20,30,40,50,60 +5540,10,20,30,40,50,60 +5550,10,20,30,40,50,60 +5560,10,20,30,40,50,60 +5570,10,20,30,40,50,60 +5580,10,20,30,40,50,60 +5590,10,20,30,40,50,60 +5600,10,20,30,40,50,60 +5610,10,20,30,40,50,60 +5620,10,20,30,40,50,60 +5630,10,20,30,40,50,60 +5640,10,20,30,40,50,60 +5650,10,20,30,40,50,60 +5660,10,20,30,40,50,60 +5670,10,20,30,40,50,60 +5680,10,20,30,40,50,60 +5690,10,20,30,40,50,60 +5700,10,20,30,40,50,60 +5710,10,20,30,40,50,60 +5720,10,20,30,40,50,60 +5730,10,20,30,40,50,60 +5740,10,20,30,40,50,60 +5750,10,20,30,40,50,60 +5760,10,20,30,40,50,60 +5770,10,20,30,40,50,60 +5780,10,20,30,40,50,60 +5790,10,20,30,40,50,60 +5800,10,20,30,40,50,60 +5810,10,20,30,40,50,60 +5820,10,20,30,40,50,60 +5830,10,20,30,40,50,60 +5840,10,20,30,40,50,60 +5850,10,20,30,40,50,60 +5860,10,20,30,40,50,60 +5870,10,20,30,40,50,60 +5880,10,20,30,40,50,60 +5890,10,20,30,40,50,60 +5900,10,20,30,40,50,60 +5910,10,20,30,40,50,60 +5920,10,20,30,40,50,60 +5930,10,20,30,40,50,60 +5940,10,20,30,40,50,60 +5950,10,20,30,40,50,60 +5960,10,20,30,40,50,60 +5970,10,20,30,40,50,60 +5980,10,20,30,40,50,60 +5990,10,20,30,40,50,60 +6000,10,20,30,40,50,60 +6010,10,20,30,40,50,60 +6020,10,20,30,40,50,60 +6030,10,20,30,40,50,60 +6040,10,20,30,40,50,60 +6050,10,20,30,40,50,60 +6060,10,20,30,40,50,60 +6070,10,20,30,40,50,60 +6080,10,20,30,40,50,60 +6090,10,20,30,40,50,60 +6100,10,20,30,40,50,60 +6110,10,20,30,40,50,60 +6120,10,20,30,40,50,60 +6130,10,20,30,40,50,60 +6140,10,20,30,40,50,60 +6150,10,20,30,40,50,60 +6160,10,20,30,40,50,60 +6170,10,20,30,40,50,60 +6180,10,20,30,40,50,60 +6190,10,20,30,40,50,60 +6200,10,20,30,40,50,60 +6210,10,20,30,40,50,60 +6220,10,20,30,40,50,60 +6230,10,20,30,40,50,60 +6240,10,20,30,40,50,60 +6250,10,20,30,40,50,60 +6260,10,20,30,40,50,60 +6270,10,20,30,40,50,60 +6280,10,20,30,40,50,60 +6290,10,20,30,40,50,60 +6300,10,20,30,40,50,60 +6310,10,20,30,40,50,60 +6320,10,20,30,40,50,60 +6330,10,20,30,40,50,60 +6340,10,20,30,40,50,60 +6350,10,20,30,40,50,60 +6360,10,20,30,40,50,60 +6370,10,20,30,40,50,60 +6380,10,20,30,40,50,60 +6390,10,20,30,40,50,60 +6400,10,20,30,40,50,60 +6410,10,20,30,40,50,60 +6420,10,20,30,40,50,60 +6430,10,20,30,40,50,60 +6440,10,20,30,40,50,60 +6450,10,20,30,40,50,60 +6460,10,20,30,40,50,60 +6470,10,20,30,40,50,60 +6480,10,20,30,40,50,60 +6490,10,20,30,40,50,60 +6500,10,20,30,40,50,60 +6510,10,20,30,40,50,60 +6520,10,20,30,40,50,60 +6530,10,20,30,40,50,60 +6540,10,20,30,40,50,60 +6550,10,20,30,40,50,60 +6560,10,20,30,40,50,60 +6570,10,20,30,40,50,60 +6580,10,20,30,40,50,60 +6590,10,20,30,40,50,60 +6600,10,20,30,40,50,60 +6610,10,20,30,40,50,60 +6620,10,20,30,40,50,60 +6630,10,20,30,40,50,60 +6640,10,20,30,40,50,60 +6650,10,20,30,40,50,60 +6660,10,20,30,40,50,60 +6670,10,20,30,40,50,60 +6680,10,20,30,40,50,60 +6690,10,20,30,40,50,60 +6700,10,20,30,40,50,60 +6710,10,20,30,40,50,60 +6720,10,20,30,40,50,60 +6730,10,20,30,40,50,60 +6740,10,20,30,40,50,60 +6750,10,20,30,40,50,60 +6760,10,20,30,40,50,60 +6770,10,20,30,40,50,60 +6780,10,20,30,40,50,60 +6790,10,20,30,40,50,60 +6800,10,20,30,40,50,60 +6810,10,20,30,40,50,60 +6820,10,20,30,40,50,60 +6830,10,20,30,40,50,60 +6840,10,20,30,40,50,60 +6850,10,20,30,40,50,60 +6860,10,20,30,40,50,60 +6870,10,20,30,40,50,60 +6880,10,20,30,40,50,60 +6890,10,20,30,40,50,60 +6900,10,20,30,40,50,60 +6910,10,20,30,40,50,60 +6920,10,20,30,40,50,60 +6930,10,20,30,40,50,60 +6940,10,20,30,40,50,60 +6950,10,20,30,40,50,60 +6960,10,20,30,40,50,60 +6970,10,20,30,40,50,60 +6980,10,20,30,40,50,60 +6990,10,20,30,40,50,60 +7000,10,20,30,40,50,60 +7010,10,20,30,40,50,60 +7020,10,20,30,40,50,60 +7030,10,20,30,40,50,60 +7040,10,20,30,40,50,60 +7050,10,20,30,40,50,60 +7060,10,20,30,40,50,60 +7070,10,20,30,40,50,60 +7080,10,20,30,40,50,60 +7090,10,20,30,40,50,60 +7100,10,20,30,40,50,60 +7110,10,20,30,40,50,60 +7120,10,20,30,40,50,60 +7130,10,20,30,40,50,60 +7140,10,20,30,40,50,60 +7150,10,20,30,40,50,60 +7160,10,20,30,40,50,60 +7170,10,20,30,40,50,60 +7180,10,20,30,40,50,60 +7190,10,20,30,40,50,60 +7200,10,20,30,40,50,60 +7210,10,20,30,40,50,60 +7220,10,20,30,40,50,60 +7230,10,20,30,40,50,60 +7240,10,20,30,40,50,60 +7250,10,20,30,40,50,60 +7260,10,20,30,40,50,60 +7270,10,20,30,40,50,60 +7280,10,20,30,40,50,60 +7290,10,20,30,40,50,60 +7300,10,20,30,40,50,60 +7310,10,20,30,40,50,60 +7320,10,20,30,40,50,60 +7330,10,20,30,40,50,60 +7340,10,20,30,40,50,60 +7350,10,20,30,40,50,60 +7360,10,20,30,40,50,60 +7370,10,20,30,40,50,60 +7380,10,20,30,40,50,60 +7390,10,20,30,40,50,60 +7400,10,20,30,40,50,60 +7410,10,20,30,40,50,60 +7420,10,20,30,40,50,60 +7430,10,20,30,40,50,60 +7440,10,20,30,40,50,60 +7450,10,20,30,40,50,60 +7460,10,20,30,40,50,60 +7470,10,20,30,40,50,60 +7480,10,20,30,40,50,60 +7490,10,20,30,40,50,60 +7500,10,20,30,40,50,60 +7510,10,20,30,40,50,60 +7520,10,20,30,40,50,60 +7530,10,20,30,40,50,60 +7540,10,20,30,40,50,60 +7550,10,20,30,40,50,60 +7560,10,20,30,40,50,60 +7570,10,20,30,40,50,60 +7580,10,20,30,40,50,60 +7590,10,20,30,40,50,60 +7600,10,20,30,40,50,60 +7610,10,20,30,40,50,60 +7620,10,20,30,40,50,60 +7630,10,20,30,40,50,60 +7640,10,20,30,40,50,60 +7650,10,20,30,40,50,60 +7660,10,20,30,40,50,60 +7670,10,20,30,40,50,60 +7680,10,20,30,40,50,60 +7690,10,20,30,40,50,60 +7700,10,20,30,40,50,60 +7710,10,20,30,40,50,60 +7720,10,20,30,40,50,60 +7730,10,20,30,40,50,60 +7740,10,20,30,40,50,60 +7750,10,20,30,40,50,60 +7760,10,20,30,40,50,60 +7770,10,20,30,40,50,60 +7780,10,20,30,40,50,60 +7790,10,20,30,40,50,60 +7800,10,20,30,40,50,60 +7810,10,20,30,40,50,60 +7820,10,20,30,40,50,60 +7830,10,20,30,40,50,60 +7840,10,20,30,40,50,60 +7850,10,20,30,40,50,60 +7860,10,20,30,40,50,60 +7870,10,20,30,40,50,60 +7880,10,20,30,40,50,60 +7890,10,20,30,40,50,60 +7900,10,20,30,40,50,60 +7910,10,20,30,40,50,60 +7920,10,20,30,40,50,60 +7930,10,20,30,40,50,60 +7940,10,20,30,40,50,60 +7950,10,20,30,40,50,60 +7960,10,20,30,40,50,60 +7970,10,20,30,40,50,60 +7980,10,20,30,40,50,60 +7990,10,20,30,40,50,60 +8000,10,20,30,40,50,60 +8010,10,20,30,40,50,60 +8020,10,20,30,40,50,60 +8030,10,20,30,40,50,60 +8040,10,20,30,40,50,60 +8050,10,20,30,40,50,60 +8060,10,20,30,40,50,60 +8070,10,20,30,40,50,60 +8080,10,20,30,40,50,60 +8090,10,20,30,40,50,60 +8100,10,20,30,40,50,60 +8110,10,20,30,40,50,60 +8120,10,20,30,40,50,60 +8130,10,20,30,40,50,60 +8140,10,20,30,40,50,60 +8150,10,20,30,40,50,60 +8160,10,20,30,40,50,60 +8170,10,20,30,40,50,60 +8180,10,20,30,40,50,60 +8190,10,20,30,40,50,60 +8200,10,20,30,40,50,60 +8210,10,20,30,40,50,60 +8220,10,20,30,40,50,60 +8230,10,20,30,40,50,60 +8240,10,20,30,40,50,60 +8250,10,20,30,40,50,60 +8260,10,20,30,40,50,60 +8270,10,20,30,40,50,60 +8280,10,20,30,40,50,60 +8290,10,20,30,40,50,60 +8300,10,20,30,40,50,60 +8310,10,20,30,40,50,60 +8320,10,20,30,40,50,60 +8330,10,20,30,40,50,60 +8340,10,20,30,40,50,60 +8350,10,20,30,40,50,60 +8360,10,20,30,40,50,60 +8370,10,20,30,40,50,60 +8380,10,20,30,40,50,60 +8390,10,20,30,40,50,60 +8400,10,20,30,40,50,60 +8410,10,20,30,40,50,60 +8420,10,20,30,40,50,60 +8430,10,20,30,40,50,60 +8440,10,20,30,40,50,60 +8450,10,20,30,40,50,60 +8460,10,20,30,40,50,60 +8470,10,20,30,40,50,60 +8480,10,20,30,40,50,60 +8490,10,20,30,40,50,60 +8500,10,20,30,40,50,60 +8510,10,20,30,40,50,60 +8520,10,20,30,40,50,60 +8530,10,20,30,40,50,60 +8540,10,20,30,40,50,60 +8550,10,20,30,40,50,60 +8560,10,20,30,40,50,60 +8570,10,20,30,40,50,60 +8580,10,20,30,40,50,60 +8590,10,20,30,40,50,60 +8600,10,20,30,40,50,60 +8610,10,20,30,40,50,60 +8620,10,20,30,40,50,60 +8630,10,20,30,40,50,60 +8640,10,20,30,40,50,60 +8650,10,20,30,40,50,60 +8660,10,20,30,40,50,60 +8670,10,20,30,40,50,60 +8680,10,20,30,40,50,60 +8690,10,20,30,40,50,60 +8700,10,20,30,40,50,60 +8710,10,20,30,40,50,60 +8720,10,20,30,40,50,60 +8730,10,20,30,40,50,60 +8740,10,20,30,40,50,60 +8750,10,20,30,40,50,60 +8760,10,20,30,40,50,60 +8770,10,20,30,40,50,60 +8780,10,20,30,40,50,60 +8790,10,20,30,40,50,60 +8800,10,20,30,40,50,60 +8810,10,20,30,40,50,60 +8820,10,20,30,40,50,60 +8830,10,20,30,40,50,60 +8840,10,20,30,40,50,60 +8850,10,20,30,40,50,60 +8860,10,20,30,40,50,60 +8870,10,20,30,40,50,60 +8880,10,20,30,40,50,60 +8890,10,20,30,40,50,60 +8900,10,20,30,40,50,60 +8910,10,20,30,40,50,60 +8920,10,20,30,40,50,60 +8930,10,20,30,40,50,60 +8940,10,20,30,40,50,60 +8950,10,20,30,40,50,60 +8960,10,20,30,40,50,60 +8970,10,20,30,40,50,60 +8980,10,20,30,40,50,60 +8990,10,20,30,40,50,60 +9000,10,20,30,40,50,60 +9010,10,20,30,40,50,60 +9020,10,20,30,40,50,60 +9030,10,20,30,40,50,60 +9040,10,20,30,40,50,60 +9050,10,20,30,40,50,60 +9060,10,20,30,40,50,60 +9070,10,20,30,40,50,60 +9080,10,20,30,40,50,60 +9090,10,20,30,40,50,60 +9100,10,20,30,40,50,60 +9110,10,20,30,40,50,60 +9120,10,20,30,40,50,60 +9130,10,20,30,40,50,60 +9140,10,20,30,40,50,60 +9150,10,20,30,40,50,60 +9160,10,20,30,40,50,60 +9170,10,20,30,40,50,60 +9180,10,20,30,40,50,60 +9190,10,20,30,40,50,60 +9200,10,20,30,40,50,60 +9210,10,20,30,40,50,60 +9220,10,20,30,40,50,60 +9230,10,20,30,40,50,60 +9240,10,20,30,40,50,60 +9250,10,20,30,40,50,60 +9260,10,20,30,40,50,60 +9270,10,20,30,40,50,60 +9280,10,20,30,40,50,60 +9290,10,20,30,40,50,60 +9300,10,20,30,40,50,60 +9310,10,20,30,40,50,60 +9320,10,20,30,40,50,60 +9330,10,20,30,40,50,60 +9340,10,20,30,40,50,60 +9350,10,20,30,40,50,60 +9360,10,20,30,40,50,60 +9370,10,20,30,40,50,60 +9380,10,20,30,40,50,60 +9390,10,20,30,40,50,60 +9400,10,20,30,40,50,60 +9410,10,20,30,40,50,60 +9420,10,20,30,40,50,60 +9430,10,20,30,40,50,60 +9440,10,20,30,40,50,60 +9450,10,20,30,40,50,60 +9460,10,20,30,40,50,60 +9470,10,20,30,40,50,60 +9480,10,20,30,40,50,60 +9490,10,20,30,40,50,60 +9500,10,20,30,40,50,60 +9510,10,20,30,40,50,60 +9520,10,20,30,40,50,60 +9530,10,20,30,40,50,60 +9540,10,20,30,40,50,60 +9550,10,20,30,40,50,60 +9560,10,20,30,40,50,60 +9570,10,20,30,40,50,60 +9580,10,20,30,40,50,60 +9590,10,20,30,40,50,60 +9600,10,20,30,40,50,60 +9610,10,20,30,40,50,60 +9620,10,20,30,40,50,60 +9630,10,20,30,40,50,60 +9640,10,20,30,40,50,60 +9650,10,20,30,40,50,60 +9660,10,20,30,40,50,60 +9670,10,20,30,40,50,60 +9680,10,20,30,40,50,60 +9690,10,20,30,40,50,60 +9700,10,20,30,40,50,60 +9710,10,20,30,40,50,60 +9720,10,20,30,40,50,60 +9730,10,20,30,40,50,60 +9740,10,20,30,40,50,60 +9750,10,20,30,40,50,60 +9760,10,20,30,40,50,60 +9770,10,20,30,40,50,60 +9780,10,20,30,40,50,60 +9790,10,20,30,40,50,60 +9800,10,20,30,40,50,60 +9810,10,20,30,40,50,60 +9820,10,20,30,40,50,60 +9830,10,20,30,40,50,60 +9840,10,20,30,40,50,60 +9850,10,20,30,40,50,60 +9860,10,20,30,40,50,60 +9870,10,20,30,40,50,60 +9880,10,20,30,40,50,60 +9890,10,20,30,40,50,60 +9900,10,20,30,40,50,60 +9910,10,20,30,40,50,60 +9920,10,20,30,40,50,60 +9930,10,20,30,40,50,60 +9940,10,20,30,40,50,60 +9950,10,20,30,40,50,60 +9960,10,20,30,40,50,60 +9970,10,20,30,40,50,60 +9980,10,20,30,40,50,60 +9981,11,21,31,41,51,61 +9982,12,22,32,42,52,62 +9983,13,23,33,43,53,63 +9984,14,24,34,44,54,64 +9985,15,25,35,45,55,65 +9986,16,26,36,46,56,66 +9987,17,27,37,47,57,67 +9988,18,28,38,48,58,68 +9989,19,29,39,49,59,69 +9990,20,30,40,50,60,70 +9991,21,31,41,51,61,71 +9992,22,32,42,52,62,72 +9993,23,33,43,53,63,73 +9994,24,34,44,54,64,74 +9995,25,35,45,55,65,75 +9996,26,36,46,56,66,76 +9997,27,37,47,57,67,77 +9998,28,38,48,58,68,78 +9999,29,39,49,59,69,79 +10000,30,40,50,60,70,80 +10001,31,41,51,61,71,81 +10002,32,42,52,62,72,82 diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/ECPCSubscriber.cfg b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/ECPCSubscriber.cfg new file mode 100644 index 0000000..1566c70 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/ECPCSubscriber.cfg @@ -0,0 +1,396 @@ ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +Start = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "WAITSTANDBY" + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITSTANDBY = { + Class = ReferenceContainer + +Stay = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "WAITSTANDBY" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } +} ++JAGyrotronRTApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + +GAMSDNSubCommand = { + Class = IOGAM + InputSignals = { + Command = { + DataSource = SDNSubCommands + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 64 + Ranges = {{0 0}} + Frequency = 1 + } + ESDNTime = { + DataSource = SDNSubCommands + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTimeDisplay = { + Alias = ESDNTime + DataSource = SDNSubCommands + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + OutputSignals = { + Command = { + DataSource = Display + Type = uint16 + } + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + ESDNTimeDisplay = { + DataSource = Display + Type = uint32 + } + } + } + +GAMSDNSubWaveform = { + Class = IOGAM + InputSignals = { + GYA_FHPS_SP = { + DataSource = SDNSubWaveform + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_MCPS_SP = { + DataSource = SDNSubWaveform + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_CCPS_SP = { + DataSource = SDNSubWaveform + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + MHVPS_SP = { + DataSource = SDNSubWaveform + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_BPS_SP = { + DataSource = SDNSubWaveform + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_APS_SP = { + DataSource = SDNSubWaveform + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + WaveformPacketIDFor1kHz = { + DataSource = SDNSubWaveform + Alias = WaveformPacketID + Type = uint16 + } + } + OutputSignals = { + GYA_FHPS_SP = { + DataSource = DDB1 + Type = float32 + } + GYA_MCPS_SP = { + DataSource = DDB1 + Type = float32 + } + GYA_CCPS_SP = { + DataSource = DDB1 + Type = float32 + } + MHVPS_SP = { + DataSource = DDB1 + Type = float32 + } + GYA_BPS_SP = { + DataSource = DDB1 + Type = float32 + } + GYA_APS_SP = { + DataSource = DDB1 + Type = float32 + } + WaveformPacketIDFor1kHz = { + DataSource = DDB1 + Alias = WaveformPacketID + Type = uint16 + } + } + } + +GAMReply = { + Class = IOGAM + InputSignals = { + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + WaveformPacketID = { + DataSource = DDB1 + Type = uint16 + } + } + OutputSignals = { + ESDNTime = { + DataSource = SDNReply + Type = uint32 + Trigger = 1 + } + ReplyWaveformAck = { + DataSource = SDNReply + Type = uint16 + } + } + } + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + } + +Timings = { + Class = TimingDataSource + } + +Display = { + Class = LoggerDataSource + } + +SDNSubCommands = { + Class = SDN::SDNSubscriber + Topic = ECPC2SCUJA + Interface = lo + CPUs = 0x2 + Locked = 1 + Timeout = 1000 // TODO: change to 1 ms + Signals = { + Header = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + Command = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 64 + } + } + } + +SDNReply = { + Class = SDN::SDNPublisher + Topic = SCUJA2ECPC + Interface = lo + CPUs = 0x8 + Locked = 1 + Signals = { + Header = { + Type = uint8 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ReplyStatus = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ReplyWaveformAck = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + } + +SDNSubWaveform = { + Class = SDN::SDNSubscriber + Topic = ECPC2SCUJAWF + Interface = lo + Locked = 1 + Timeout = 1000 // TODO: change to 1 ms + Signals = { + Header = { + Type = uint8 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + WaveformPacketID = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_MCPS_SP = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_CCPS_SP = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + MHVPS_SP = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_BPS_SP = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_APS_SP = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + } + } + +States = { + Class = ReferenceContainer + +WaitStandby = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {GAMSDNSubCommand GAMSDNSubWaveform GAMReply} + CPUs = 0x1 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} \ No newline at end of file diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/EPICS_Test.cfg b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/EPICS_Test.cfg new file mode 100644 index 0000000..ae4a27b --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/EPICS_Test.cfg @@ -0,0 +1,249 @@ +// +LoggerService = { +// Class = LoggerService +// CPUs = 0x1 +// StackSize = 32768 +// NumberOfLogPages = 128 +// +ConLogger = { +// Class = ConsoleLogger +// Format = "EtOoFmC" +// PrintKeys = 1 +// } +// } ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +START = { + Class = StateMachineEvent + NextState = "RUNNING" + NextStateError = "ERROR" + +PrepareNextStateOnOurRTApp = { + Class = Message + Destination = MyDemoApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = State1 + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = MyDemoApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +RUNNING = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = RUNNING + NextStateError = ERROR + } + } + +ERROR = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = ERROR + NextStateError = ERROR + } + } +} ++MyDemoApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + +GAMTimer = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = Timer + Type = uint32 + } + Counter = { + DataSource = Timer + Type = uint32 + Frequency = 1 //in Hz. Cycle for one state execution. + } + RTThreadPerf = { + DataSource = Timings + Alias = "State1.Thread1_CycleTime" + Type = uint32 + } + } + OutputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerf = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PV2DDB1 = { + Class = IOGAM + InputSignals = { + AiValue = { + DataSource = EPICSCAInput + Type = float32 + } + LongInValue = { + DataSource = EPICSCAInput + Type = uint32 + } + StringInValue = { + DataSource = EPICSCAInput + Type = char8 + NumberOfElements = 40 + } + } + OutputSignals = { + AValue = { + DataSource = DDB1 + Type = float32 + } + LValue = { + DataSource = DDB1 + Type = uint32 + } + SValue = { + DataSource = DDB1 + Type = char8 + NumberOfElements = 40 + } + } + } + +DDB12PV = { + Class = IOGAM + InputSignals = { + AValue = { + DataSource = DDB1 + Type = float32 + } + LValue = { + DataSource = DDB1 + Type = uint32 + } + SValue = { + DataSource = DDB1 + Type = char8 + NumberOfElements = 40 + } + } + OutputSignals = { + AoValue = { + DataSource = EPICSCAOutput + Type = float32 + } + LongOutValue = { + DataSource = EPICSCAOutput + Type = uint32 + } + StringOutValue = { + DataSource = EPICSCAOutput + Type = char8 + NumberOfElements = 40 + } + } + } + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + } + +Timer = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 0 + ExecutionMode = RealTimeThread + CPUMask = 0x1 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + +EPICSCAInput = { + //Class = "EPICSCA::EPICSCAInput" + Class = "JAEPICSCA::JAEPICSCAInput" + CPUMask = "1" + StackSize = "10000000" + Signals = { + AiValue = { + PVName = "ai" + Type = float32 + } + LongInValue = { + PVName = "longin" + Type = uint32 + } + StringInValue = { + PVName = "stringin" + Type = char8 + NumberOfElements = 40 + } + } + } + +EPICSCAOutput = { + //Class = "EPICSCA::EPICSCAOutput" + Class = "JAEPICSCA::JAEPICSCAOutput" + CPUMask = "1" + StackSize = "10000000" + NumberOfBuffers = 2 + Signals = { + AoValue = { + PVName = "ao" + Type = float32 + } + LongOutValue = { + PVName = "longout" + Type = uint32 + } + StringOutValue = { + PVName = "stringout" + Type = char8 + NumberOfElements = 40 + } + } + } + +Display = { + Class = LoggerDataSource + } + +Timings = { + Class = TimingDataSource + } + } + +States = { + Class = ReferenceContainer + +State1 = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {GAMTimer PV2DDB1 DDB12PV} + CPUMask = 0x1 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/EPICS_Test.db b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/EPICS_Test.db new file mode 100644 index 0000000..c344eae --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/EPICS_Test.db @@ -0,0 +1,18 @@ +record(longin, longin){ + field(SCAN, "Passive") +} +record(longout, longout){ + field(SCAN, "Passive") +} +record(ai, ai){ + field(SCAN, "Passive") +} +record(ao, ao){ + field(SCAN, "Passive") +} +record(stringin, stringin){ + field(SCAN, "Passive") +} +record(stringout, stringout){ + field(SCAN, "Passive") +} \ No newline at end of file diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_NI6259_test.cfg b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_NI6259_test.cfg new file mode 100644 index 0000000..1efebb0 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_NI6259_test.cfg @@ -0,0 +1,1081 @@ +// +LoggerService = { +// Class = LoggerService +// CPUs = 0x1 +// StackSize = 32768 +// NumberOfLogPages = 128 +// +ConLogger = { +// Class = ConsoleLogger +// Format = "EtOoFmC" +// PrintKeys = 1 +// } +// } + ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +START = { + Class = StateMachineEvent + NextState = "RUNNING" + NextStateError = "ERROR" + +PrepareNextStateOnOurRTApp = { + Class = Message + Destination = MyDemoApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = State1 + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = MyDemoApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +RUNNING = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = RUNNING + NextStateError = ERROR + } + } + +ERROR = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = ERROR + NextStateError = ERROR + } + } +} ++MyDemoApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + +GAMTimer = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = Timer + Type = uint32 + } + Counter = { + DataSource = Timer + Type = uint32 + Frequency = 1 //in Hz. Cycle for one state execution. + } + RTThreadPerf = { + DataSource = Timings + Alias = "State1.Thread1_CycleTime" + Type = uint32 + } + } + OutputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerf = { + DataSource = DDB1 + Type = uint32 + } + } + } + //EPICS PV read GAM + +PV2DDB1GAM = { + Class = IOGAM + InputSignals = { + ni6259d0p0do0 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do1 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do2 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do3 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do4 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do5 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do6 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do7 = { + DataSource = EPICSCAInput + Type = uint32 + } + + ni6528d0p3do0 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do1 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do2 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do3 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do4 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do5 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do6 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do7 = { + DataSource = EPICSCAInput + Type = uint32 + } + + ni6528d0p4do0 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do1 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do2 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do3 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do4 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do5 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do6 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do7 = { + DataSource = EPICSCAInput + Type = uint32 + } + + ni6259d1p0do0 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do1 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do2 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do3 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do4 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do5 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do6 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do7 = { + DataSource = EPICSCAInput + Type = uint32 + } + + ni6528d1p3do0 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do1 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do2 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do3 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do4 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do5 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do6 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do7 = { + DataSource = EPICSCAInput + Type = uint32 + } + + ni6528d1p4do0 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do1 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do2 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do3 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do4 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do5 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do6 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do7 = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + ni6259d0p0do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do7 = { + DataSource = DDB1 + Type = uint32 + } + + ni6528d0p3do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do7 = { + DataSource = DDB1 + Type = uint32 + } + + ni6528d0p4do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do7 = { + DataSource = DDB1 + Type = uint32 + } + + ni6259d1p0do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do7 = { + DataSource = DDB1 + Type = uint32 + } + + ni6528d1p3do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do7 = { + DataSource = DDB1 + Type = uint32 + } + + ni6528d1p4do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do7 = { + DataSource = DDB1 + Type = uint32 + } + } + } + //HW Write GAMs + //NI6259 uses uint32, so it is not able to use BitSumGAM + +NI6259D0P0GAM = { + Class = JABitSumGAM + InputSignals = { + ni6259d0p0do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do7 = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + NI6259D0P0Value = { + DataSource = Display + Type = uint8 + } + } + } + +NI6528D0P3GAM = { + Class = JABitSumGAM + InputSignals = { + ni6528d0p3do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do7 = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + NI6528D0P3Value = { + DataSource = Display + Type = uint8 + } + } + } + +NI6528D0P4GAM = { + Class = JABitSumGAM + InputSignals = { + ni6528d0p4do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do7 = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + NI6528D0P4Value = { + DataSource = Display + Type = uint8 + } + } + } + //NI6259 uses uint32, so it is not able to use BitSumGAM + +NI6259D1P0GAM = { + Class = JABitSumGAM + InputSignals = { + ni6259d1p0do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do7 = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + NI6259D1P0Value = { + DataSource = Display + Type = uint8 + } + } + } + +NI6528D1P3GAM = { + Class = JABitSumGAM + InputSignals = { + ni6528d1p3do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do7 = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + NI6528D1P3Value = { + DataSource = Display + Type = uint8 + } + } + } + +NI6528D1P4GAM = { + Class = JABitSumGAM + InputSignals = { + ni6528d1p4do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do7 = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + NI6528D1P4Value = { + DataSource = Display + Type = uint8 + } + } + } + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + } + +Timer = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 0 + ExecutionMode = RealTimeThread + CPUMask = 0x1 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + + /**** + +NI6259D1P0 = { + Class = NI6259::NI6259DIO + DeviceName = "/dev/pxi6259" + BoardId = 1 + Signals = { + NI6269D1P0Value = { + Type = uint32 + Mask = 0xFF + PortId = 0 + } + } + } + +NI6528D1P3 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.1" + Port = 3 + Value = { + NI6528D1P3Value = { + Type = uint32 + } + } + } + +NI6528D1P4 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.1" + Port = 4 + Value = { + NI6528D1P4Value = { + Type = uint32 + } + } + } + +NI6259D0P0 = { + Class = NI6259::NI6259DIO + DeviceName = "/dev/pxi6259" + BoardId = 0 + Signals = { + NI6259D0P0Value = { + Type = uint32 + Mask = 0xFF + PortId = 0 + } + } + } + +NI6528D0P3 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.0" + Port = 3 + Value = { + NI6528D0P3Value = { + Type = uint32 + } + } + } + +NI6528D0P4 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.0" + Port = 4 + Value = { + NI6528D0P4Value = { + Type = uint32 + } + } + } + ***/ + +EPICSCAInput = { + Class = "EPICSCA::EPICSCAInput" + CPUMask = "1" + StackSize = "10000000" + Signals = { + // NI6259 DO PVs + ni6259d0p0do0 = { + PVName = "ni6259:d0:p0:do0" + Type = uint32 + } + ni6259d0p0do1 = { + PVName = "ni6259:d0:p0:do1" + Type = uint32 + } + ni6259d0p0do2 = { + PVName = "ni6259:d0:p0:do2" + Type = uint32 + } + ni6259d0p0do3 = { + PVName = "ni6259:d0:p0:do3" + Type = uint32 + } + ni6259d0p0do4 = { + PVName = "ni6259:d0:p0:do4" + Type = uint32 + } + ni6259d0p0do5 = { + PVName = "ni6259:d0:p0:do5" + Type = uint32 + } + ni6259d0p0do6 = { + PVName = "ni6259:d0:p0:do6" + Type = uint32 + } + ni6259d0p0do7 = { + PVName = "ni6259:d0:p0:do7" + Type = uint32 + } + + // NI6528P3 PVs + ni6528d0p3do0 = { + PVName = "ni6528:d0:p3:do0" + Type = uint32 + } + ni6528d0p3do1 = { + PVName = "ni6528:d0:p3:do1" + Type = uint32 + } + ni6528d0p3do2 = { + PVName = "ni6528:d0:p3:do2" + Type = uint32 + } + ni6528d0p3do3 = { + PVName = "ni6528:d0:p3:do3" + Type = uint32 + } + ni6528d0p3do4 = { + PVName = "ni6528:d0:p3:do4" + Type = uint32 + } + ni6528d0p3do5 = { + PVName = "ni6528:d0:p3:do5" + Type = uint32 + } + ni6528d0p3do6 = { + PVName = "ni6528:d0:p3:do6" + Type = uint32 + } + ni6528d0p3do7 = { + PVName = "ni6528:d0:p3:do7" + Type = uint32 + } + + //NI6528P4 PVs + ni6528d0p4do0 = { + PVName = "ni6528:d0:p4:do0" + Type = uint32 + } + ni6528d0p4do1 = { + PVName = "ni6528:d0:p4:do1" + Type = uint32 + } + ni6528d0p4do2 = { + PVName = "ni6528:d0:p4:do2" + Type = uint32 + } + ni6528d0p4do3 = { + PVName = "ni6528:d0:p4:do3" + Type = uint32 + } + ni6528d0p4do4 = { + PVName = "ni6528:d0:p4:do4" + Type = uint32 + } + ni6528d0p4do5 = { + PVName = "ni6528:d0:p4:do5" + Type = uint32 + } + ni6528d0p4do6 = { + PVName = "ni6528:d0:p4:do6" + Type = uint32 + } + ni6528d0p4do7 = { + PVName = "ni6528:d0:p4:do7" + Type = uint32 + } + + // NI6259 DO PVs + ni6259d1p0do0 = { + PVName = "ni6259:d1:p0:do0" + Type = uint32 + } + ni6259d1p0do1 = { + PVName = "ni6259:d1:p0:do1" + Type = uint32 + } + ni6259d1p0do2 = { + PVName = "ni6259:d1:p0:do2" + Type = uint32 + } + ni6259d1p0do3 = { + PVName = "ni6259:d1:p0:do3" + Type = uint32 + } + ni6259d1p0do4 = { + PVName = "ni6259:d1:p0:do4" + Type = uint32 + } + ni6259d1p0do5 = { + PVName = "ni6259:d1:p0:do5" + Type = uint32 + } + ni6259d1p0do6 = { + PVName = "ni6259:d1:p0:do6" + Type = uint32 + } + ni6259d1p0do7 = { + PVName = "ni6259:d1:p0:do7" + Type = uint32 + } + + // NI6528P3 PVs + ni6528d1p3do0 = { + PVName = "ni6528:d1:p3:do0" + Type = uint32 + } + ni6528d1p3do1 = { + PVName = "ni6528:d1:p3:do1" + Type = uint32 + } + ni6528d1p3do2 = { + PVName = "ni6528:d1:p3:do2" + Type = uint32 + } + ni6528d1p3do3 = { + PVName = "ni6528:d1:p3:do3" + Type = uint32 + } + ni6528d1p3do4 = { + PVName = "ni6528:d1:p3:do4" + Type = uint32 + } + ni6528d1p3do5 = { + PVName = "ni6528:d1:p3:do5" + Type = uint32 + } + ni6528d1p3do6 = { + PVName = "ni6528:d1:p3:do6" + Type = uint32 + } + ni6528d1p3do7 = { + PVName = "ni6528:d1:p3:do7" + Type = uint32 + } + + //NI6528P4 PVs + ni6528d1p4do0 = { + PVName = "ni6528:d1:p4:do0" + Type = uint32 + } + ni6528d1p4do1 = { + PVName = "ni6528:d1:p4:do1" + Type = uint32 + } + ni6528d1p4do2 = { + PVName = "ni6528:d1:p4:do2" + Type = uint32 + } + ni6528d1p4do3 = { + PVName = "ni6528:d1:p4:do3" + Type = uint32 + } + ni6528d1p4do4 = { + PVName = "ni6528:d1:p4:do4" + Type = uint32 + } + ni6528d1p4do5 = { + PVName = "ni6528:d1:p4:do5" + Type = uint32 + } + ni6528d1p4do6 = { + PVName = "ni6528:d1:p4:do6" + Type = uint32 + } + ni6528d1p4do7 = { + PVName = "ni6528:d1:p4:do7" + Type = uint32 + } + } + } + +Display = { + Class = LoggerDataSource + } + +Timings = { + Class = TimingDataSource + } + } + +States = { + Class = ReferenceContainer + +State1 = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {GAMTimer PV2DDB1GAM NI6259D0P0GAM NI6528D0P3GAM NI6528D0P4GAM NI6259D1P0GAM NI6528D1P3GAM NI6528D1P4GAM } + CPUMask = 0x1 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_NI6259_test.db b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_NI6259_test.db new file mode 100644 index 0000000..1b2696d --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_NI6259_test.db @@ -0,0 +1,257 @@ +### The board on the Right Side Slots + +# NI6259 P0 PVs +record(bo, "ni6259:d1:p0:do0"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do4"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do5"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do6"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do7"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} + +#NI6528 P3 PVs +record(bo, "ni6528:d1:p3:do0"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do4"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do5"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do6"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do7"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} + + +#NI6528 P4 PVs +record(bo, "ni6528:d1:p4:do0"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do4"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do5"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do6"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do7"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} + + +### Left Side Slots +# NI6259 P0 PVs +record(bo, "ni6259:d0:p0:do0"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do4"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do5"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do6"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do7"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} + +#NI6528 P3 PVs +record(bo, "ni6528:d0:p3:do0"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do4"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do5"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do6"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do7"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} + + +#NI6528 P4 PVs +record(bo, "ni6528:d0:p4:do0"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do4"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do5"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do6"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do7"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_test.cfg b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_test.cfg new file mode 100644 index 0000000..2ac80fa --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_test.cfg @@ -0,0 +1,191 @@ ++LoggerService = { + Class = LoggerService + CPUs = 0x1 + StackSize = 32768 + NumberOfLogPages = 128 + +ConLogger = { + Class = ConsoleLogger + Format = "EtOoFmC" + PrintKeys = 1 + } +} ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +START = { + Class = StateMachineEvent + NextState = "RUNNING" + NextStateError = "ERROR" + +PrepareNextStateOnOurRTApp = { + Class = Message + Destination = MyDemoApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = State1 + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = MyDemoApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +RUNNING = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = RUNNING + NextStateError = ERROR + } + } + +ERROR = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = ERROR + NextStateError = ERROR + } + } +} ++MyDemoApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + +GAMTimer = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = Timer + Type = uint32 + } + Counter = { + DataSource = Timer + Type = uint32 + Frequency = 1 //in Hz. Cycle for one state execution. + } + RTThreadPerf = { + DataSource = Timings + Alias = "State1.Thread1_CycleTime" + Type = uint32 + } + } + OutputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerf = { + DataSource = DDB1 + Type = uint32 + } + } + } + +GAMEPICSCA = { + Class = IOGAM + InputSignals = { + doValue = { + DataSource = EPICSCAInput + Type = uint8 + } + } + OutputSignals = { + Value = { + DataSource = DDB1 + Type = uint8 + } + } + } + +GAMDebug = { + Class = IOGAM + InputSignals = { + Value = { + DataSource = DDB1 + Type = uint8 + } + + } + OutputSignals = { + Value = { + DataSource = NI6528 + Type = uint8 + } + } + } + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + } + +Timer = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 0 + ExecutionMode = RealTimeThread + CPUMask = 0x1 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + +NI6528 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.0" + Port = 3 + Value = { + Counter = { + Type = uint8 + } + } + } + +EPICSCAInput = { + Class = "EPICSCA::EPICSCAInput" + CPUMask = "1" + StackSize = "10000000" + Signals = { + doValue = { + PVName = "test:doValue" + } + } + } + +Display = { + Class = LoggerDataSource + } + +Timings = { + Class = TimingDataSource + } + } + +States = { + Class = ReferenceContainer + +State1 = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {GAMTimer GAMEPICSCA GAMDebug} + CPUMask = 0x1 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_test.db b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_test.db new file mode 100644 index 0000000..ccec4a0 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_test.db @@ -0,0 +1,18 @@ +record(bo, "test:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "test:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "test:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(longin, test:doValue){ + field(SCAN, "Passive") +} \ No newline at end of file diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/README.md b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/README.md new file mode 100644 index 0000000..01ec4d2 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/README.md @@ -0,0 +1,29 @@ +ECPCSubscriber.cfg is a configuration for testing ECPC simulator (JAECPCSimulator.cfg). + +Setup: +1) Run softIoc. In qst-gyrotron-fast-controller/Configurations execute command: + softIoc -d ECPC_IOC.db + +2) Run ECPC simulator. In qst-gyrotron-fast-controller/Startup execute command: + ./Main.sh -f ../Configurations/JAECPCSimulator.cfg -l RealTimeLoader -m StateMachine:Start + +3) Run ECPC subscriber. In qst-gyrotron-fast-controller/Startup execute command: + ./Main.sh -f ../Configurations/tests/ECPCSubscriber.cfg -l RealTimeLoader -m StateMachine:Start + +The ECPC simulator should automatically start sending waveforms, which will be printed by the ECPC subscriber every 10 milliseconds. +The ECPC simulator will also be sending command, which is printed by the ECPC subscriber every millisecond. + +To change command that is being sent, you have to caput 1 to one of following PVs: +MHVPS_ON (command 1) +GYA_BPS_SWON (command 2) +GYA_APS_SWON (command 3) +GYB_BPS_SWON (command 4) +GYB_APS_SWON (command 5) +GYA_BPS_SWOFF (command 6) +GYA_APS_SWOFF (command 7) +GYB_BPS_SWOFF (command 8) +GYB_APS_SWOFF (command 9) +RF_OFF (command 10) + +To stop sending that command, caput 0 to that PV. + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/Timer_Test.cfg b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/Timer_Test.cfg new file mode 100644 index 0000000..cea80cf --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/Timer_Test.cfg @@ -0,0 +1,163 @@ ++LoggerService = { + Class = LoggerService + CPUs = 0x1 + StackSize = 32768 + NumberOfLogPages = 128 + +ConLogger = { + Class = ConsoleLogger + Format = "EtOoFmC" + PrintKeys = 1 + } +} ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +START = { + Class = StateMachineEvent + NextState = "RUNNING" + NextStateError = "ERROR" + +PrepareNextStateOnOurRTApp = { + Class = Message + Destination = MyDemoApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = State1 + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = MyDemoApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +RUNNING = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = RUNNING + NextStateError = ERROR + } + } + +ERROR = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = ERROR + NextStateError = ERROR + } + } +} ++MyDemoApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + +GAMTimer = { + Class = IOGAM + InputSignals = { + Time = { //Time attribute is updated with us resolution. + DataSource = Timer + Type = uint32 + } + Counter = { + DataSource = Timer + Type = uint32 + Frequency = 10 //in Hz. Cycle for one state execution. + } + RTThreadPerf = { + DataSource = Timings + Alias = "State1.Thread1_CycleTime" + Type = uint32 + } + } + OutputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerf = { + DataSource = DDB1 + Type = uint32 + } + } + } + +TimerDisplayGAM = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + TimeDISP = { + DataSource = Display + Type = uint32 + } + CounterDISP = { + DataSource = Display + Type = uint32 + } + } + } + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + } + +Timer = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 0 + ExecutionMode = RealTimeThread + CPUMask = 0x1 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + +Display = { + Class = LoggerDataSource + } + +Timings = { + Class = TimingDataSource + } + } + +States = { + Class = ReferenceContainer + +State1 = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {GAMTimer TimerDisplayGAM} + CPUMask = 0x1 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAInput.cpp b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAInput.cpp new file mode 100644 index 0000000..ac3464d --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAInput.cpp @@ -0,0 +1,366 @@ +/** + * @file JAEPICSCAInput.cpp + * @brief Source file for class JAEPICSCAInput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAEPICSCAInput (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAEPICSCAInput.h" + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "MemoryMapInputBroker.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +namespace MARTe { +/** + * @brief Callback function for the ca_create_subscription. Single point of access which + * delegates the events to the corresponding JAEPICSPV instance. + */ +static FastPollingMutexSem eventCallbackFastMux; +/*lint -e{1746} function must match required prototype and thus cannot be changed to constant reference.*/ +void JAEPICSCAInputEventCallback(struct event_handler_args const args) { + (void) eventCallbackFastMux.FastLock(); + PVWrapper *pv = static_cast(args.usr); + if (pv != NULL_PTR(PVWrapper *)) { + (void) MemoryOperationsHelper::Copy(pv->memory, args.dbr, pv->memorySize); + } + eventCallbackFastMux.FastUnLock(); +} +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +JAEPICSCAInput::JAEPICSCAInput() : + DataSourceI(), EmbeddedServiceMethodBinderI(), executor(*this) { + pvs = NULL_PTR(PVWrapper *); + stackSize = THREADS_DEFAULT_STACKSIZE * 4u; + cpuMask = 0xffu; + eventCallbackFastMux.Create(); +} + +/*lint -e{1551} must stop the SingleThreadService in the destructor.*/ +JAEPICSCAInput::~JAEPICSCAInput() { + if (!executor.Stop()) { + if (!executor.Stop()) { + REPORT_ERROR(ErrorManagement::FatalError, "Could not stop SingleThreadService."); + } + } + (void) eventCallbackFastMux.FastLock(); + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + if (pvs[n].memory != NULL_PTR(void *)) { + GlobalObjectsDatabase::Instance()->GetStandardHeap()->Free(pvs[n].memory); + } + } + delete[] pvs; + } + eventCallbackFastMux.FastUnLock(); +} + +bool JAEPICSCAInput::Initialise(StructuredDataI & data) { + bool ok = DataSourceI::Initialise(data); + if (ok) { + if (!data.Read("CPUs", cpuMask)) { + REPORT_ERROR(ErrorManagement::Information, "No CPUs defined. Using default = %d", cpuMask); + } + if (!data.Read("StackSize", stackSize)) { + REPORT_ERROR(ErrorManagement::Information, "No StackSize defined. Using default = %d", stackSize); + } + executor.SetStackSize(stackSize); + executor.SetCPUMask(cpuMask); + } + if (ok) { + ok = data.MoveRelative("Signals"); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Could not move to the Signals section"); + } + if (ok) { + ok = data.Copy(originalSignalInformation); + } + if (ok) { + ok = originalSignalInformation.MoveToRoot(); + } + //Do not allow to add signals in run-time + if (ok) { + ok = signalsDatabase.MoveRelative("Signals"); + } + if (ok) { + ok = signalsDatabase.Write("Locked", 1u); + } + if (ok) { + ok = signalsDatabase.MoveToAncestor(1u); + } + } + if (ok) { + ok = data.MoveToAncestor(1u); + } + return ok; +} + +bool JAEPICSCAInput::SetConfiguredDatabase(StructuredDataI & data) { + bool ok = DataSourceI::SetConfiguredDatabase(data); + //Check the signal index of the timing signal. + uint32 nOfSignals = GetNumberOfSignals(); + if (ok) { + ok = (nOfSignals > 0u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one signal shall be defined"); + } + } + if (ok) { + //Do not allow samples + uint32 functionNumberOfSignals = 0u; + uint32 n; + if (GetFunctionNumberOfSignals(InputSignals, 0u, functionNumberOfSignals)) { + for (n = 0u; (n < functionNumberOfSignals) && (ok); n++) { + uint32 nSamples; + ok = GetFunctionSignalSamples(InputSignals, 0u, n, nSamples); + if (ok) { + ok = (nSamples == 1u); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The number of samples shall be exactly 1"); + } + } + } + } + if (ok) { + pvs = new PVWrapper[nOfSignals]; + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + pvs[n].memory = NULL_PTR(void *); + } + for (n = 0u; (n < nOfSignals) && (ok); n++) { + //Note that the RealTimeApplicationConfigurationBuilder is allowed to change the order of the signals w.r.t. to the originalSignalInformation + StreamString orderedSignalName; + ok = GetSignalName(n, orderedSignalName); + if (ok) { + //Have to mix and match between the original setting of the DataSource signal + //and the ones which are later added by the RealTimeApplicationConfigurationBuilder + ok = originalSignalInformation.MoveRelative(orderedSignalName.Buffer()); + } + StreamString pvName; + if (ok) { + ok = originalSignalInformation.Read("PVName", pvName); + if (!ok) { + uint32 nn = n; + REPORT_ERROR(ErrorManagement::ParametersError, "No PVName specified for signal at index %d", nn); + } + } + TypeDescriptor td = GetSignalType(n); + if (ok) { + (void) StringHelper::CopyN(&pvs[n].pvName[0], pvName.Buffer(), PV_NAME_MAX_SIZE); + if (td == CharString) { + pvs[n].pvType = DBR_STRING; + } + else if (td == Character8Bit) { + pvs[n].pvType = DBR_STRING; + } + else if (td == SignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == UnsignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == SignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == UnsignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == SignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == UnsignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == Float32Bit) { + pvs[n].pvType = DBR_FLOAT; + } + else if (td == Float64Bit) { + pvs[n].pvType = DBR_DOUBLE; + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Type %s is not supported", TypeDescriptor::GetTypeNameFromTypeDescriptor(td)); + ok = false; + } + } + uint32 numberOfElements = 1u; + if (ok) { + ok = GetSignalNumberOfElements(n, numberOfElements); + } + if (ok) { + if (pvs[n].pvType == DBR_STRING) { + ok = (numberOfElements == 40u); + } + if (!ok) { + //Could support arrays of strings with multiples of char8[40] + REPORT_ERROR(ErrorManagement::ParametersError, "Strings shall be defined with 40 elements char8[40]. Arrays of strings are not currently supported"); + } + } + if (ok) { + pvs[n].numberOfElements = numberOfElements; + } + if (ok) { + pvs[n].memorySize = td.numberOfBits; + pvs[n].memorySize /= 8u; + pvs[n].memorySize *= numberOfElements; + pvs[n].memory = GlobalObjectsDatabase::Instance()->GetStandardHeap()->Malloc(pvs[n].memorySize); + ok = originalSignalInformation.MoveToAncestor(1u); + } + } + } + + if (ok) { + ok = (executor.Start() == ErrorManagement::NoError); + } + return ok; +} + +bool JAEPICSCAInput::AllocateMemory() { + return true; +} + +uint32 JAEPICSCAInput::GetNumberOfMemoryBuffers() { + return 1u; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The signalAddress is independent of the bufferIdx.*/ +bool JAEPICSCAInput::GetSignalMemoryBuffer(const uint32 signalIdx, const uint32 bufferIdx, void*& signalAddress) { + bool ok = (pvs != NULL_PTR(PVWrapper *)); + if (ok) { + ok = (signalIdx < GetNumberOfSignals()); + } + if (ok) { + //lint -e{613} pvs cannot as otherwise ok would be false + signalAddress = pvs[signalIdx].memory; + } + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The brokerName only depends on the direction */ +const char8* JAEPICSCAInput::GetBrokerName(StructuredDataI& data, const SignalDirection direction) { + const char8* brokerName = ""; + if (direction == InputSignals) { + brokerName = "MemoryMapInputBroker"; + } + return brokerName; +} + +bool JAEPICSCAInput::GetInputBrokers(ReferenceContainer& inputBrokers, const char8* const functionName, void* const gamMemPtr) { + ReferenceT broker("MemoryMapInputBroker"); + bool ok = broker->Init(InputSignals, *this, functionName, gamMemPtr); + if (ok) { + ok = inputBrokers.Insert(broker); + } + + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: OutputBrokers are not supported. Function returns false irrespectively of the parameters.*/ +bool JAEPICSCAInput::GetOutputBrokers(ReferenceContainer& outputBrokers, const char8* const functionName, void* const gamMemPtr) { + return false; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: NOOP at StateChange, independently of the function parameters.*/ +bool JAEPICSCAInput::PrepareNextState(const char8* const currentStateName, const char8* const nextStateName) { + return true; +} + +ErrorManagement::ErrorType JAEPICSCAInput::Execute(ExecutionInfo& info) { + ErrorManagement::ErrorType err = ErrorManagement::NoError; + if (info.GetStage() == ExecutionInfo::StartupStage) { + (void) eventCallbackFastMux.FastLock(); + /*lint -e{9130} -e{835} -e{845} -e{747} Several false positives. lint is getting confused here for some reason.*/ + if (ca_context_create(ca_enable_preemptive_callback) != ECA_NORMAL) { + err = ErrorManagement::FatalError; + REPORT_ERROR(err, "ca_enable_preemptive_callback failed"); + } + + uint32 n; + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + /*lint -e{9130} -e{835} -e{845} -e{747} Several false positives. lint is getting confused here for some reason.*/ + if (ca_create_channel(&pvs[n].pvName[0], NULL_PTR(caCh *), NULL_PTR(void *), 20u, &pvs[n].pvChid) != ECA_NORMAL) { + err = ErrorManagement::FatalError; + REPORT_ERROR(err, "ca_create_channel failed for PV with name %s", pvs[n].pvName); + } + if (err.ErrorsCleared()) { + /*lint -e{9130} -e{835} -e{845} -e{747} Several false positives. lint is getting confused here for some reason.*/ + if (ca_create_subscription(pvs[n].pvType, pvs[n].numberOfElements, pvs[n].pvChid, DBE_VALUE, &JAEPICSCAInputEventCallback, &pvs[n], + &pvs[n].pvEvid) != ECA_NORMAL) { + err = ErrorManagement::FatalError; + REPORT_ERROR(err, "ca_create_subscription failed for PV %s", pvs[n].pvName); + } + } + } + } + eventCallbackFastMux.FastUnLock(); + } + else if (info.GetStage() != ExecutionInfo::BadTerminationStage) { + Sleep::Sec(1.0F); + } + else { + (void) eventCallbackFastMux.FastLock(); + uint32 n; + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + (void) ca_clear_subscription(pvs[n].pvEvid); + (void) ca_clear_event(pvs[n].pvEvid); + (void) ca_clear_channel(pvs[n].pvChid); + } + } + ca_detach_context(); + ca_context_destroy(); + eventCallbackFastMux.FastUnLock(); + } + + return err; +} + +uint32 JAEPICSCAInput::GetStackSize() const { + return stackSize; +} + +uint32 JAEPICSCAInput::GetCPUMask() const { + return cpuMask; +} + +bool JAEPICSCAInput::Synchronise() { + return false; +} + +CLASS_REGISTER(JAEPICSCAInput, "1.0") + +} + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAInput.h b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAInput.h new file mode 100644 index 0000000..3a5071d --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAInput.h @@ -0,0 +1,260 @@ +/** + * @file EPICSCAInput.h + * @brief Header file for class EPICSCAInput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class EPICSCAInput + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef JAEPICSCAINPUT_H_ +#define JAEPICSCAINPUT_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" +#include "EmbeddedServiceMethodBinderI.h" +#include "EventSem.h" +#include "SingleThreadService.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +/** + * Maximum size that a PV name may have + */ +/*lint -esym(551, MARTe::PV_NAME_MAX_SIZE) the symbol is used to define the size of PVWrapper below*/ +const uint32 PV_NAME_MAX_SIZE = 64u; + +/** + * Wraps a PV + */ +struct PVWrapper { + /** + * The channel identifier + */ + chid pvChid; + /** + * The event identifier + */ + evid pvEvid; + /** + * The PV type + */ + chtype pvType; + /** + * The memory of the signal associated to this channel + */ + void *memory; + void *previousValue; + /** + * The number of elements > 0 + */ + uint32 numberOfElements; + /** + * The memory size + */ + uint32 memorySize; + /** + * The PV name + */ + char8 pvName[PV_NAME_MAX_SIZE]; +}; + +/** + * @brief A DataSource which allows to retrieved data from any number of PVs using the EPICS channel access client protocol. + * Data is asynchronously retrieved using ca_create_subscriptions in the context of a different thread (w.r.t. to the real-time thread). + * + * The configuration syntax is (names are only given as an example): + * + *
+ * +EPICSCAInput_1 = {
+ *     Class = JAEPICSCA::JAEPICSCAInput
+ *     StackSize = 1048576 //Optional the EmbeddedThread stack size. Default value is THREADS_DEFAULT_STACKSIZE * 4u
+ *     CPUs = 0xff //Optional the affinity of the EmbeddedThread (where the EPICS context is attached).
+ *     Signals = {
+ *          PV1 = { //At least one shall be defined
+ *             PVName = My::PV1 //Compulsory. Name of the PV.
+ *             Type = uint32 //Compulsory. Supported types are char8[40], string[40], uint8, int8, uint16, int16, int32, uint32, uint64, int64, float32 and float64
+ *             NumberOfElements = 1 //Arrays also supported
+ *          }
+ *          ...
+ *     }
+ * }
+ *
+ * 
+ */ +class JAEPICSCAInput: public DataSourceI, public EmbeddedServiceMethodBinderI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Default constructor. NOOP. + */ + JAEPICSCAInput(); + + /** + * @brief Destructor. + * @details TODO. + */ + virtual ~JAEPICSCAInput(); + + /** + * @brief See DataSourceI::AllocateMemory. NOOP. + * @return true. + */ + virtual bool AllocateMemory(); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @return 1. + */ + virtual uint32 GetNumberOfMemoryBuffers(); + + /** + * @brief See DataSourceI::GetSignalMemoryBuffer. + * @pre + * SetConfiguredDatabase + */ + virtual bool GetSignalMemoryBuffer(const uint32 signalIdx, + const uint32 bufferIdx, + void *&signalAddress); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @details Only InputSignals are supported. + * @return MemoryMapInputBroker. + */ + virtual const char8 *GetBrokerName(StructuredDataI &data, + const SignalDirection direction); + + /** + * @brief See DataSourceI::GetInputBrokers. + * @details adds a memory MemoryMapInputBroker instance to the inputBrokers + * @return true. + */ + virtual bool GetInputBrokers(ReferenceContainer &inputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::GetOutputBrokers. + * @return false. + */ + virtual bool GetOutputBrokers(ReferenceContainer &outputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::PrepareNextState. NOOP. + * @return true. + */ + virtual bool PrepareNextState(const char8 * const currentStateName, + const char8 * const nextStateName); + + /** + * @brief Loads and verifies the configuration parameters detailed in the class description. + * @return true if all the mandatory parameters are correctly specified and if the specified optional parameters have valid values. + */ + virtual bool Initialise(StructuredDataI & data); + + /** + * @brief Final verification of all the parameters. Setup of the memory required to hold all the signals. + * @details This method verifies that all the parameters requested by the GAMs interacting with this DataSource + * are valid and consistent with the parameters set during the initialisation phase. + * In particular the following conditions shall be met: + * - All the signals have the PVName defined + * - All the signals have one of the following types: uint32, int32, float32 or float64. + * @return true if all the parameters are valid and the conditions above are met. + */ + virtual bool SetConfiguredDatabase(StructuredDataI & data); + + /** + * @brief Gets the affinity of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + * @return the the affinity of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + */ + uint32 GetCPUMask() const; + + /** + * @brief Gets the stack size of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + * @return the stack size of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + */ + uint32 GetStackSize() const; + + /** + * @brief Provides the context to execute all the EPICS relevant calls. + * @details Executes in the context of a spawned thread the following EPICS calls: + * ca_context_create, ca_create_channel, ca_create_subscription, ca_clear_subscription, + * ca_clear_event, ca_clear_channel, ca_detach_context and ca_context_destroy + * @return ErrorManagement::NoError if all the EPICS calls return without any error. + */ + virtual ErrorManagement::ErrorType Execute(ExecutionInfo & info); + + /** + * @brief See DataSourceI::Synchronise. + * @return false. + */ + virtual bool Synchronise(); + + /** + * @brief Registered as the ca_create_subscription callback function. + * It calls updates the memory of the corresponding PV variable. + */ + friend void JAEPICSCAInputEventCallback(struct event_handler_args args); + +private: + + /** + * List of PVs. + */ + PVWrapper *pvs; + + /** + * The CPU mask for the executor + */ + uint32 cpuMask; + + /** + * The stack size + */ + uint32 stackSize; + + /** + * The EmbeddedThread where the ca_pend_event is executed. + */ + SingleThreadService executor; + + /** + * Stores the configuration information received at Initialise. + */ + ConfigurationDatabase originalSignalInformation; +}; +} + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* EPICSCADATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAOutput.cpp b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAOutput.cpp new file mode 100644 index 0000000..951ed07 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAOutput.cpp @@ -0,0 +1,375 @@ +/** + * @file EPICSCAOutput.cpp + * @brief Source file for class EPICSCAOutput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class EPICSCAOutput (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAEPICSCAOutput.h" + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "MemoryMapAsyncOutputBroker.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +JAEPICSCAOutput::JAEPICSCAOutput() : + DataSourceI() { + pvs = NULL_PTR(PVWrapper *); + stackSize = THREADS_DEFAULT_STACKSIZE * 4u; + cpuMask = 0xffu; + numberOfBuffers = 0u; + ignoreBufferOverrun = 1u; + threadContextSet = false; +} + +/*lint -e{1551} must free the memory allocated to the different PVs.*/ +JAEPICSCAOutput::~JAEPICSCAOutput() { + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + if (pvs[n].pvChid != NULL_PTR(chid)) { + (void) ca_clear_channel(pvs[n].pvChid); + } + if (pvs[n].memory != NULL_PTR(void *)) { + GlobalObjectsDatabase::Instance()->GetStandardHeap()->Free(pvs[n].memory); + GlobalObjectsDatabase::Instance()->GetStandardHeap()->Free(pvs[n].previousValue); + } + } + delete[] pvs; + } +} + +bool JAEPICSCAOutput::Initialise(StructuredDataI & data) { + bool ok = DataSourceI::Initialise(data); + if (ok) { + ok = data.Read("NumberOfBuffers", numberOfBuffers); + + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "NumberOfBuffers shall be specified"); + } + } + if (ok) { + if (!data.Read("CPUs", cpuMask)) { + REPORT_ERROR(ErrorManagement::Information, "No CPUs defined. Using default = %d", cpuMask); + } + if (!data.Read("StackSize", stackSize)) { + REPORT_ERROR(ErrorManagement::Information, "No StackSize defined. Using default = %d", stackSize); + } + if (!data.Read("IgnoreBufferOverrun", ignoreBufferOverrun)) { + REPORT_ERROR(ErrorManagement::Information, "No IgnoreBufferOverrun defined. Using default = %d", ignoreBufferOverrun); + } + + } + if (ok) { + ok = data.MoveRelative("Signals"); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Could not move to the Signals section"); + } + if (ok) { + ok = data.Copy(originalSignalInformation); + } + if (ok) { + ok = originalSignalInformation.MoveToRoot(); + } + //Do not allow to add signals in run-time + if (ok) { + ok = signalsDatabase.MoveRelative("Signals"); + } + if (ok) { + ok = signalsDatabase.Write("Locked", 1u); + } + if (ok) { + ok = signalsDatabase.MoveToAncestor(1u); + } + } + if (ok) { + ok = data.MoveToAncestor(1u); + } + return ok; +} + +bool JAEPICSCAOutput::SetConfiguredDatabase(StructuredDataI & data) { + bool ok = DataSourceI::SetConfiguredDatabase(data); + //Check the signal index of the timing signal. + uint32 nOfSignals = GetNumberOfSignals(); + if (ok) { + ok = (nOfSignals > 0u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one signal shall be defined"); + } + } + if (ok) { + //Do not allow samples + uint32 functionNumberOfSignals = 0u; + uint32 n; + if (GetFunctionNumberOfSignals(OutputSignals, 0u, functionNumberOfSignals)) { + for (n = 0u; (n < functionNumberOfSignals) && (ok); n++) { + uint32 nSamples; + ok = GetFunctionSignalSamples(OutputSignals, 0u, n, nSamples); + if (ok) { + ok = (nSamples == 1u); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The number of samples shall be exactly 1"); + } + } + } + } + //Only one and one GAM allowed to interact with this DataSourceI + if (ok) { + ok = (GetNumberOfFunctions() == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Exactly one Function allowed to interact with this DataSourceI"); + } + } + + if (ok) { + pvs = new PVWrapper[nOfSignals]; + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + pvs[n].memory = NULL_PTR(void *); //value to write PV + pvs[n].previousValue = NULL_PTR(void *); //written value + pvs[n].pvChid = NULL_PTR(chid); + + } + for (n = 0u; (n < nOfSignals) && (ok); n++) { + //Note that the RealTimeApplicationConfigurationBuilder is allowed to change the order of the signals w.r.t. to the originalSignalInformation + StreamString orderedSignalName; + ok = GetSignalName(n, orderedSignalName); + if (ok) { + //Have to mix and match between the original setting of the DataSource signal + //and the ones which are later added by the RealTimeApplicationConfigurationBuilder + ok = originalSignalInformation.MoveRelative(orderedSignalName.Buffer()); + } + StreamString pvName; + if (ok) { + ok = originalSignalInformation.Read("PVName", pvName); + if (!ok) { + uint32 nn = n; + REPORT_ERROR(ErrorManagement::ParametersError, "No PVName specified for signal at index %d", nn); + } + } + TypeDescriptor td = GetSignalType(n); + + if (ok) { + (void) StringHelper::CopyN(&pvs[n].pvName[0], pvName.Buffer(), PV_NAME_MAX_SIZE); + if (td == CharString) { + pvs[n].pvType = DBR_STRING; + } + else if (td == Character8Bit) { + pvs[n].pvType = DBR_STRING; + } + else if (td == SignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == UnsignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == SignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == UnsignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == SignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == UnsignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == Float32Bit) { + pvs[n].pvType = DBR_FLOAT; + } + else if (td == Float64Bit) { + pvs[n].pvType = DBR_DOUBLE; + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Type %s is not supported", TypeDescriptor::GetTypeNameFromTypeDescriptor(td)); + ok = false; + } + } + uint32 numberOfElements = 1u; + if (ok) { + ok = GetSignalNumberOfElements(n, numberOfElements); + } + if (ok) { + if (pvs[n].pvType == DBR_STRING) { + ok = (numberOfElements == 40u); + } + if (!ok) { + //Could support arrays of strings with multiples of char8[40] + REPORT_ERROR(ErrorManagement::ParametersError, + "Strings shall be defined with 40 elements char8[40]. Arrays of strings are not currently supported"); + } + } + if (ok) { + pvs[n].numberOfElements = numberOfElements; + } + if (ok) { + pvs[n].memorySize = td.numberOfBits; + pvs[n].memorySize /= 8u; + pvs[n].memorySize *= numberOfElements; + pvs[n].memory = GlobalObjectsDatabase::Instance()->GetStandardHeap()->Malloc(pvs[n].memorySize); + pvs[n].previousValue = GlobalObjectsDatabase::Instance()->GetStandardHeap()->Malloc(pvs[n].memorySize); + ok = originalSignalInformation.MoveToAncestor(1u); + } + } + } + return ok; +} + +bool JAEPICSCAOutput::AllocateMemory() { + return true; +} + +uint32 JAEPICSCAOutput::GetNumberOfMemoryBuffers() { + return 1u; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The signalAddress is independent of the bufferIdx.*/ +bool JAEPICSCAOutput::GetSignalMemoryBuffer(const uint32 signalIdx, const uint32 bufferIdx, void*& signalAddress) { + bool ok = (pvs != NULL_PTR(PVWrapper *)); + if (ok) { + ok = (signalIdx < GetNumberOfSignals()); + } + if (ok) { + //lint -e{613} pvs cannot as otherwise ok would be false + signalAddress = pvs[signalIdx].memory; + } + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The brokerName only depends on the direction */ +const char8* JAEPICSCAOutput::GetBrokerName(StructuredDataI& data, const SignalDirection direction) { + const char8* brokerName = ""; + if (direction == OutputSignals) { + brokerName = "MemoryMapAsyncOutputBroker"; + } + return brokerName; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: InputBrokers are not supported. Function returns false irrespectively of the parameters.*/ +bool JAEPICSCAOutput::GetInputBrokers(ReferenceContainer& inputBrokers, const char8* const functionName, void* const gamMemPtr) { + return false; +} + +bool JAEPICSCAOutput::GetOutputBrokers(ReferenceContainer& outputBrokers, const char8* const functionName, void* const gamMemPtr) { + ReferenceT broker("MemoryMapAsyncOutputBroker"); + bool ok = broker->InitWithBufferParameters(OutputSignals, *this, functionName, gamMemPtr, numberOfBuffers, cpuMask, stackSize); + if (ok) { + ok = outputBrokers.Insert(broker); + broker->SetIgnoreBufferOverrun(ignoreBufferOverrun == 1u); + } + + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: NOOP at StateChange, independently of the function parameters.*/ +bool JAEPICSCAOutput::PrepareNextState(const char8* const currentStateName, const char8* const nextStateName) { + return true; +} + +uint32 JAEPICSCAOutput::GetStackSize() const { + return stackSize; +} + +uint32 JAEPICSCAOutput::GetCPUMask() const { + return cpuMask; +} + +uint32 JAEPICSCAOutput::GetNumberOfBuffers() const { + return numberOfBuffers; +} + +bool JAEPICSCAOutput::Synchronise() { + bool ok = true; + uint32 n; + uint32 nOfSignals = GetNumberOfSignals(); + if (!threadContextSet) { + ok = (ca_context_create(ca_enable_preemptive_callback) == ECA_NORMAL); + if (!ok) { + REPORT_ERROR(ErrorManagement::FatalError, "ca_enable_preemptive_callback failed"); + } + threadContextSet = ok; + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + ok = (ca_create_channel(&pvs[n].pvName[0], NULL_PTR(caCh *), NULL_PTR(void *), 20u, &pvs[n].pvChid) == ECA_NORMAL); + if (!ok) { + REPORT_ERROR(ErrorManagement::FatalError, "ca_create_channel failed for PV with name %s", pvs[n].pvName); + } + } + } + } + + //Allow to write event at the first time! + if (threadContextSet) { + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + bool isNewValue = true; + if (pvs[n].pvType == DBR_STRING) { + if(strcmp((char*)pvs[n].memory,(char*)pvs[n].previousValue)==0){ + isNewValue = false; + continue; + } + if(isNewValue){ + ok = (ca_put(pvs[n].pvType, pvs[n].pvChid, pvs[n].memory) == ECA_NORMAL); + memcpy(pvs[n].previousValue,pvs[n].memory, pvs[n].numberOfElements); + } + } + else { + if(memcmp(pvs[n].memory, pvs[n].previousValue, pvs[n].numberOfElements)==0){ + isNewValue = false; + continue; + } + if(isNewValue){ + ok = (ca_array_put(pvs[n].pvType, pvs[n].numberOfElements, pvs[n].pvChid, pvs[n].memory) == ECA_NORMAL); + memcpy(pvs[n].previousValue, pvs[n].memory, pvs[n].numberOfElements); + } + } + if (!ok) { + REPORT_ERROR(ErrorManagement::FatalError, "ca_put failed for PV: %s", pvs[n].pvName); + } + (void) ca_pend_io(0.1); + } + } + } + + return ok; +} + +bool JAEPICSCAOutput::IsIgnoringBufferOverrun() const { + return (ignoreBufferOverrun == 1u); +} + +CLASS_REGISTER(JAEPICSCAOutput, "1.0") + +} + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAOutput.h b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAOutput.h new file mode 100644 index 0000000..5c2de87 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAOutput.h @@ -0,0 +1,233 @@ +/** + * @file EPICSCAOutput.h + * @brief Header file for class EPICSCAOutput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class EPICSCAOutput + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef JAEPICSCAOutput_H_ +#define JAEPICSCAOutput_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" +#include "JAEPICSCAInput.h" +#include "EmbeddedServiceMethodBinderI.h" +#include "EventSem.h" +#include "SingleThreadService.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +//Maximum size that a PV name may have + +/** + * @brief A DataSource which allows to output data into any number of PVs using the EPICS channel access client protocol. + * Data is asynchronously ca_put in the context of a different thread (w.r.t. to the real-time thread). + * + * The configuration syntax is (names are only given as an example): + * + *
+ * +EPICSCAOutput_1 = {
+ *     Class = EPICSCA::EPICSCAOutput
+ *     StackSize = 1048576 //Optional the EmbeddedThread stack size. Default value is THREADS_DEFAULT_STACKSIZE * 4u
+ *     CPUs = 0xff //Optional the affinity of the EmbeddedThread (where the EPICS context is attached).
+ *     IgnoreBufferOverrun = 1 //Optional. If true no error will be triggered when the thread that writes into EPICS does not consume the data fast enough.
+ *     NumberOfBuffers = 10 //Compulsory. Number of buffers in a circular buffer that asynchronously writes the PV values. Each buffer is capable of holding a copy of all the DataSourceI signals.
+ *     Signals = {
+ *          PV1 = { //At least one shall be defined
+ *             PVName = My::PV1 //Compulsory. Name of the PV.
+ *             Type = uint32 //Compulsory. Supported types are char8[40], string[40], uint8, int8, uint16, int16, int32, uint32, float32 and float64
+ *          }
+ *          ...
+ *     }
+ * }
+ *
+ * 
+ */ +class JAEPICSCAOutput: public DataSourceI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Default constructor. NOOP. + */ + JAEPICSCAOutput(); + + /** + * @brief Destructor. + * @details TODO. + */ + virtual ~JAEPICSCAOutput(); + + /** + * @brief See DataSourceI::AllocateMemory. NOOP. + * @return true. + */ + virtual bool AllocateMemory(); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @return 1. + */ + virtual uint32 GetNumberOfMemoryBuffers(); + + /** + * @brief See DataSourceI::GetSignalMemoryBuffer. + * @pre + * SetConfiguredDatabase + */ + virtual bool GetSignalMemoryBuffer(const uint32 signalIdx, + const uint32 bufferIdx, + void *&signalAddress); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @details Only OutputSignals are supported. + * @return MemoryMapAsyncOutputBroker. + */ + virtual const char8 *GetBrokerName(StructuredDataI &data, + const SignalDirection direction); + + /** + * @brief See DataSourceI::GetInputBrokers. + * @return false. + */ + virtual bool GetInputBrokers(ReferenceContainer &inputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::GetOutputBrokers. + * @details adds a memory MemoryMapOutputBroker instance to the outputBrokers + * @return true. + */ + virtual bool GetOutputBrokers(ReferenceContainer &outputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::PrepareNextState. NOOP. + * @return true. + */ + virtual bool PrepareNextState(const char8 * const currentStateName, + const char8 * const nextStateName); + + /** + * @brief Loads and verifies the configuration parameters detailed in the class description. + * @return true if all the mandatory parameters are correctly specified and if the specified optional parameters have valid values. + */ + virtual bool Initialise(StructuredDataI & data); + + /** + * @brief Final verification of all the parameters. Setup of the memory required to hold all the signals. + * @details This method verifies that all the parameters requested by the GAMs interacting with this DataSource + * are valid and consistent with the parameters set during the initialisation phase. + * In particular the following conditions shall be met: + * - All the signals have the PVName defined + * - All the signals have one of the following types: uint32, int32, float32 or float64. + * @return true if all the parameters are valid and the conditions above are met. + */ + virtual bool SetConfiguredDatabase(StructuredDataI & data); + + /** + * @brief Gets the affinity of the thread which is going to be used to asynchronously write data with ca_put. + * @return the affinity of the thread which is going to be used to asynchronously write data with ca_put. + */ + uint32 GetCPUMask() const; + + /** + * @brief Gets the stack size of the thread which is going to be used to asynchronously write data with ca_put. + * @return the stack size of the thread which is going to be used to asynchronously write data with ca_put. + */ + uint32 GetStackSize() const; + + /** + * @brief Gets the number of buffers in the circular buffer that asynchronously writes the PV values. + * @return the number of buffers in the circular buffer that asynchronously writes the PV values. + */ + uint32 GetNumberOfBuffers() const; + + /** + * @brief Provides the context to execute all the EPICS ca_put calls. + * @details Executes in the context of the MemoryMapAsyncOutputBroker thread the following EPICS calls: + * ca_context_create, ca_create_channel, ca_create_subscription, ca_clear_subscription, + * ca_clear_event, ca_clear_channel, ca_detach_context and ca_context_destroy + * @return true if all the EPICS calls return without any error. + */ + virtual bool Synchronise(); + + /** + * @brief Gets if buffer overruns is being ignored (i.e. the consumer thread which writes into EPICS is not consuming the data fast enough). + * @return if true no error is to be triggered when there is a buffer overrun. + */ + bool IsIgnoringBufferOverrun() const; + + +private: + /** + * List of PVs. + */ + PVWrapper *pvs; + + /** + * The CPU mask for the executor + */ + uint32 cpuMask; + + /** + * The stack size + */ + uint32 stackSize; + + /** + * Stores the configuration information received at Initialise. + */ + ConfigurationDatabase originalSignalInformation; + + /** + * The number of buffers for the circular buffer that flushes data into EPICS + */ + uint32 numberOfBuffers; + + /** + * True once the epics thread context is set + */ + bool threadContextSet; + + /** + * If true no error will be triggered when the data cannot be consumed by the thread doing the caputs. + */ + uint32 ignoreBufferOverrun; +}; +} + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* EPICSCADATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/Makefile.gcc new file mode 100644 index 0000000..1c65faf --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/Makefile.gcc @@ -0,0 +1,29 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc + +LIBRARIES += -L$(EPICS_BASE)/lib/$(EPICS_HOST_ARCH)/ -lca diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/Makefile.inc new file mode 100644 index 0000000..5b7751f --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/Makefile.inc @@ -0,0 +1,58 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAEPICSCAOutput.x JAEPICSCAInput.x + +PACKAGE=DataSources + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(EPICS_BASE)/include/ +INCLUDES += -I$(EPICS_BASE)/include/os/Linux/ +INCLUDES += -I$(EPICS_BASE)/include/compiler/gcc/ +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L5GAMs + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAEPICSCA$(LIBEXT) \ + $(BUILD_DIR)/JAEPICSCA$(DLLEXT) + echo $(OBJS) + +include depends.$(TARGET) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/Makefile.gcc new file mode 100644 index 0000000..e0a2fc4 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/Makefile.gcc @@ -0,0 +1,26 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +############################################################# + +include Makefile.inc + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/Makefile.inc new file mode 100644 index 0000000..8bb8ee7 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/Makefile.inc @@ -0,0 +1,42 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +SPB = RandomDataSource.x NI6528.x JAEPICSCA.x + +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults + +ROOT_DIR=.. +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +all: $(OBJS) $(SUBPROJ) check-env + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + +check-env: +ifndef MARTe2_DIR + $(error MARTe2_DIR is undefined) +endif + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/Makefile.gcc new file mode 100644 index 0000000..29201d0 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/Makefile.gcc @@ -0,0 +1,30 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc + +LIBRARIES += -L$(CODAC_ROOT)/lib/ -lpxi6528 + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/Makefile.inc new file mode 100644 index 0000000..30adbd0 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/Makefile.inc @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=NI6528.x + +PACKAGE=DataSources + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(CODAC_ROOT)/include/ + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/NI6528$(LIBEXT) \ + $(BUILD_DIR)/NI6528$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/NI6528.cpp b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/NI6528.cpp new file mode 100644 index 0000000..49f62b1 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/NI6528.cpp @@ -0,0 +1,141 @@ +/** + * @file NI6528.cpp + * @brief Source file for class NI6528 + * @date 01/03/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class NI6528 (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include +#include +#include +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "CompilerTypes.h" +#include "NI6528.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +NI6528::NI6528() : + MARTe::DataSourceI() { + using namespace MARTe; + previousValue = 0u; + value = 0u; + port = 0u; + boardFileDescriptor = 0; +} + +NI6528::~NI6528() { + using namespace MARTe; + (void) pxi6528_close_device(boardFileDescriptor); +} + +bool NI6528::SetConfiguredDatabase(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = (DataSourceI::SetConfiguredDatabase(data)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "DataSourceI::SetConfiguredDatabas() failed"); + } + if (ok) { + ok = (GetNumberOfSignals() == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetNumberOfSignals() != 1u"); + } + } + if (ok) { + ok = (GetSignalType(0u) == UnsignedInteger8Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetSignalType(0u) != UnsignedInteger8Bit"); + } + } + + return ok; +} + +bool NI6528::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = DataSourceI::Initialise(data); + if (ok) { + ok = data.Read("Port", port); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The Port shall be specified"); + } + } + if (ok) { + ok = data.Read("DeviceName", deviceName); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The DeviceName shall be specified"); + } + } + int32 ret = pxi6528_open_device(&boardFileDescriptor, deviceName.Buffer(), O_NONBLOCK); + ok = (ret == 0); + if (!ok) { + StreamString err = strerror(-ret); + REPORT_ERROR(ErrorManagement::FatalError, "Could not open device (%s) : %s", deviceName.Buffer(), err.Buffer()); + } + return ok; +} + +bool NI6528::Synchronise() { + using namespace MARTe; + if(previousValue != value){ + int32 ret = (pxi6528_write_port(boardFileDescriptor, port, value) > 0); + previousValue = value; + bool ok = (ret > -1); + if (!ok) { + StreamString err = strerror(-ret); + REPORT_ERROR(ErrorManagement::FatalError, "Could not write to device (%s) : %s", deviceName.Buffer(), err.Buffer()); + } + } + + return true; +} + +bool NI6528::AllocateMemory() { + return true; +} + +bool NI6528::GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress) { + signalAddress = &value; + return true; +} + +const MARTe::char8 *NI6528::GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction) { + using namespace MARTe; + return "MemoryMapSynchronisedOutputBroker"; +} + +bool NI6528::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + return true; +} + +CLASS_REGISTER(NI6528, "1.0") + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/NI6528.h b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/NI6528.h new file mode 100644 index 0000000..7074477 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/NI6528.h @@ -0,0 +1,143 @@ +/** + * @file NI6528.h + * @brief Header file for class NI6528 + * @date 07/06/2018 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class NI6528 + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef RANDOM_DATASOURCE_H_ +#define RANDOM_DATASOURCE_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +/** + * @brief NI6528 simplified data source implementation. + * + * The configuration syntax is (names and signal quantities are only given as an example): + * +NI6528 = { + * Class = NI6528 + * DeviceName = "/dev/pxi6528.0" //Mandatory + * Port = 0 //The port where to write + * Signals = { + * currentValue = {Type = uint8} + * bitmask = {Type = uint8} + * Value = {Type = uint8} + * } + * } + */ +class NI6528: public MARTe::DataSourceI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Constructor. NOOP. + */ +NI6528 (); + + /** + * @brief Destructor. NOOP. + */ + virtual ~NI6528(); + + /** + * @brief The configuration data detailed in the class description + * @return true if all the compulsory parameters are set. + */ + virtual bool Initialise(MARTe::StructuredDataI & data); + + /** + * @brief Verifies that at most one signal has been set with the correct type (i.e. any integer). + * @return true if the above conditions are met. + */ + virtual bool SetConfiguredDatabase(MARTe::StructuredDataI & data); + + /** + * @brief @see DataSourceI::Synchronise + */ + virtual bool Synchronise(); + + /** + * @brief @see DataSourceI::AllocateMemory + */ + virtual bool AllocateMemory(); + + /** + * @brief @see DataSourceI::GetSignalMemoryBuffer + */ + virtual bool GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress); + + /** + * @return "MemoryMapSynchronisedInputBroker" + */ + virtual const MARTe::char8 *GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction); + + /** + * @brief NOOP + */ + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName); + +private: + /** + * The previous value to write. + */ + MARTe::uint8 previousValue; + + /** + * The bitmask to write value. (new value) = (current value) || (bitmask) && (write value) + */ + MARTe::uint8 bitmask; + + /** + * The value to write. + */ + MARTe::uint8 value; + + /** + * The port number + */ + MARTe::uint32 port; + + /** + * The board file descriptor + */ + pxi6528_device_t boardFileDescriptor; + + /** + * The device name + */ + MARTe::StreamString deviceName; +}; + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* RANDOM_DATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/Makefile.inc new file mode 100644 index 0000000..2f1534c --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/Makefile.inc @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=RandomDataSource.x + +PACKAGE=DataSources + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/RandomDataSource$(LIBEXT) \ + $(BUILD_DIR)/RandomDataSource$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/RandomDataSource.cpp b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/RandomDataSource.cpp new file mode 100644 index 0000000..bcfc0b0 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/RandomDataSource.cpp @@ -0,0 +1,146 @@ +/** + * @file RandomDataSource.cpp + * @brief Source file for class RandomDataSource + * @date 01/03/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class RandomDataSource (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "CompilerTypes.h" +#include "RandomDataSource.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +RandomDataSource::RandomDataSource() : + MARTe::DataSourceI() { + using namespace MARTe; + seed = 0u; + signalPtr = NULL_PTR(MARTe::char8 *); + signalTypeDescriptor = UnsignedInteger8Bit; +} + +RandomDataSource::~RandomDataSource() { + using namespace MARTe; + if (signalPtr) { + delete[] signalPtr; + } +} + +bool RandomDataSource::SetConfiguredDatabase(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = (DataSourceI::SetConfiguredDatabase(data)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "DataSourceI::SetConfiguredDatabas() failed"); + } + if (ok) { + ok = (GetNumberOfSignals() == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetNumberOfSignals() != 1u"); + } + } + if (ok) { + signalTypeDescriptor = GetSignalType(0u); + ok = (signalTypeDescriptor.type == UnsignedInteger); + if (!ok) { + ok = (signalTypeDescriptor.type == SignedInteger); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetSignalType(0u) != Un/SignedInteger"); + } + } + + return ok; +} + +bool RandomDataSource::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = DataSourceI::Initialise(data); + if (ok) { + ok = data.Read("Seed", seed); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The Seed shall be specified"); + } + } + + return ok; +} + +bool RandomDataSource::Synchronise() { + using namespace MARTe; + + if (signalTypeDescriptor.numberOfBits == 8u) { + GetValue(); + } + if (signalTypeDescriptor.numberOfBits == 16u) { + GetValue(); + } + if (signalTypeDescriptor.numberOfBits == 32u) { + GetValue(); + } + if (signalTypeDescriptor.numberOfBits == 64u) { + GetValue(); + } + + return true; +} + +bool RandomDataSource::AllocateMemory() { + signalPtr = new MARTe::char8[signalTypeDescriptor.numberOfBits]; + return true; +} + +bool RandomDataSource::GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress) { + signalAddress = &signalPtr[0]; + return true; +} + +const MARTe::char8 *RandomDataSource::GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction) { + using namespace MARTe; + + static bool firstTime = true; + const char8 * broker;// = NULL_PTR(const char8 *); + if (firstTime) { + broker = "MemoryMapSynchronisedInputBroker"; + } + else { + firstTime = false; + broker = "MemoryMapInputBroker"; + } + return broker; +} + +bool RandomDataSource::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + return true; +} + +CLASS_REGISTER(RandomDataSource, "1.0") + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/RandomDataSource.h b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/RandomDataSource.h new file mode 100644 index 0000000..11cade5 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/RandomDataSource.h @@ -0,0 +1,137 @@ +/** + * @file RandomDataSource.h + * @brief Header file for class RandomDataSource + * @date 07/06/2018 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class RandomDataSource + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef RANDOM_DATASOURCE_H_ +#define RANDOM_DATASOURCE_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +/** + * @brief DataDource which generates random numbers against a given seed. + * + * The configuration syntax is (names and signal quantities are only given as an example): + * +RandomDataSource = { + * Class = RandomDataSource + * Seed = 8 //Seed against which the the seed will be generated. Note that each signal + * Signals = { + * Random1 = { //Maximum one signal + * Type = uint64 //All the integer types are supported + * } + * } + * } + */ +class RandomDataSource: public MARTe::DataSourceI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Constructor. NOOP. + */ +RandomDataSource (); + + /** + * @brief Destructor. NOOP. + */ + virtual ~RandomDataSource(); + + /** + * @brief The configuration data detailed in the class description + * @return true if all the compulsory parameters are set. + */ + virtual bool Initialise(MARTe::StructuredDataI & data); + + /** + * @brief Verifies that at most one signal has been set with the correct type (i.e. any integer). + * @return true if the above conditions are met. + */ + virtual bool SetConfiguredDatabase(MARTe::StructuredDataI & data); + + /** + * @brief @see DataSourceI::Synchronise + */ + virtual bool Synchronise(); + + /** + * @brief @see DataSourceI::AllocateMemory + */ + virtual bool AllocateMemory(); + + /** + * @brief @see DataSourceI::GetSignalMemoryBuffer + */ + virtual bool GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress); + + /** + * @return "MemoryMapSynchronisedInputBroker" + */ + virtual const MARTe::char8 *GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction); + + /** + * @brief NOOP + */ + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName); + +private: + /** + * The seed to compute the signals. + */ + MARTe::uint32 seed; + + /** + * The signal pointer + */ + MARTe::char8 *signalPtr; + + /** + * The signal type descriptor. + */ + MARTe::TypeDescriptor signalTypeDescriptor; + + /** + * Compute the random value + */ + template + void GetValue(); + +}; + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ +template +void RandomDataSource::GetValue() { + *(reinterpret_cast(&signalPtr[0u])) = static_cast(rand_r(&seed)); +} + +#endif /* RANDOM_DATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Doc/RTAppStates.xml b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Doc/RTAppStates.xml new file mode 100644 index 0000000..5a244e9 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Doc/RTAppStates.xml @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Doc/StateMachine.txt b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Doc/StateMachine.txt new file mode 100644 index 0000000..1254477 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Doc/StateMachine.txt @@ -0,0 +1,463 @@ +********** +* EXAMLE * +********** + +State1 // RT application state name +========== +1. // Numbered GAMs in order of execution +if (signal_A == 1) // Execution function of the GAM +{ + set signal_B = 3 + change state to State2 +} +---------- + + + +***************** +* RT APP STATES * +***************** + +WaitStandby +========== +1. // DONE +if (EC-GN-P01-GAF:PLC4110-CON-OPGY1 == 0) //If a Gyrotron is not selected by PLC. +{ + change state to Disabled +} +---------- +2. // DONE +if (EC-GN-P01-GPF:PLC4110-YTS-ST1R == 1) //If STANDBY signal come from PLC, start Coil&Fil PSs. +{ + // TODO should these signals be set only once every time this state is entered? + set signal EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP = 1 + set signal EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP = 1 + set signal EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START = 1 +} +---------- +3. // DONE +if (EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB == 1 + AND + EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON > 0 + AND + EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB == 1 + AND + EC-GN-P01-GAF-FHPS:PSU2610-CURR-RB > 0) +{ + change state to Offline +} +---------- + + + +Disabled +========== +1. // DONE +if (EC-GN-P01-GAF:PLC4110-CON-OPGY1 == 1) +{ + change state to WaitStandby +} +---------- + + + +Offline +========== +1. // DONE +if (EC-GN-P01-GAF:PLC4110-CON-OPGY1 == 0) //If Gyrotron selection is turned off. +{ + change state to Disabled +} +---------- +2. // DONE +// If READY signal come from PLC is equal 1, app starts CCPS. +if (EC-GN-P01-GPF:PLC4110-YTS-ST2R == 1 + AND + EC-GN-P01-GAF-CCPS:PLC4110-YON-CCPS1 == 1) +{ + // TODO should this signal be set only once every time this state is entered? + set signal EC-GN-P01-GAF-CCPS:PSU2320-OUTON-SP = 1 +} +---------- +3. // DONE (with a temporary signal that needs to be changed when the record is added) +// TODO: Do we also have to check, that GAM 2. executed? So do we also have to check that EC-GN-P01-GPF:PLC4110-YTS-ST2R == 1? +if (EC-GN-P01-GAF-CCPS:PSU2320-STAT == 1) // TODO: there is no signal named EC-GN-P01-GAF-CCPS:PSU2320-STAT + // MEMO: I need add this record to check whether CCPS in running or stop. +{ + change state to WaitPermit +} +---------- +4. // DONE +// Wait CSV-LOAD trigger. When the app detect it, save data into the app. +if (EC-GN-P01-GAF:STAT-CSV-LOAD == 1) +{ + open csv file (file name: EC-GN-P01-GAF:STAT-CSV-NAME) + load time series data into memory + write data into EPICS waveform PSs.(EC-GN-P01-???:STAT-PREP-WF) // TODO do we realy write first data here or do we wait for PreHeating? + set signal EC-GN-P01-GAF:STAT-CSV-LOADED = 1 // TODO do we write 1 here? + If there is error, write EC-GN-P01-GAF:STAT-CSV-ERROR. // TODO there is no signal named EC-GN-P01-GAF:STAT-CSV-ERROR +} + + +WaitPermit +========== +1. // DONE +if (EC-GN-P01-GAF:PLC4110-CON-OPGY1 == 0) //If Gyrotron is un-selected. +{ + change state to Disabled +} +---------- +2. // DONE +if (EC-GN-P01-GAF:STAT-PREP-MODE == 1 + AND + EC-GN-P01-GAF:PLC4110-CON-GY1PRM == 1) +{ + change state to PreHeating +} +---------- +3. // DONE +if (EC-GN-P01-GAF:STAT-PREP-MODE == 0 + AND + EC-GN-P01-GAF:PLC4110-CON-GY1PRM == 1) +{ + change state to WaitReady +} +---------- +4. // DONE +if (EC-GN-P01-GAF:STAT-CSV-LOAD == 1) +{ + open csv file (file name: EC-GN-P01-GAF:STAT-CSV-NAME) + load time series data into memory + write data into EPICS waveform PSs.(EC-GN-P01-???:STAT-PREP-WF) + set signal EC-GN-P01-GAF:STAT-CSV-LOADED = 1 + If there is error, write EC-GN-P01-GAF:STAT-CSV-ERROR. +} + +PreHeating +========== +1. // DONE +every 10 ms do +{ + else + { + // TODO do we use float32 for the type of waveform signals? + // TODO is this the right order of columns? Time point is in column 1. + // TODO on what signal do we write time? + set signal EC-GN-P01-PB1F:PSU1000-EREF = setpoint column 2 + set signal EC-GN-P01-PA1F:PSU3000-EREF = setpoint column 3 // TODO there are two EC-GN-P01-PA1F:PSU3000-EREF signals. One ending with -P and one with -N. + set signal EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET = setpoint column 4 + set signal EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET = setpoint column 5 + set signal EC-GN-P01-GAF-FHPS:PSU2320-EREF = setpoint column 6 + } +} +---------- +2. // DONE +if (time == 0) +{ + change state to WaitReady +} +---------- + + +WaitReady +========== +1. // DONE +if (EC-GN-P01-PB1F:PSU1000-YSTA == 1 + AND + EC-GN-P01-PA1F:PSU3000-YSTA == 1) +{ + change state to WaitHVON +} +---------- + + +WaitHVON +========== +1. // DONE +if (EC-GN-P01-GPF:PLC4110-YTS-ST3R == 1)// Check ON signal from PLC. This signal come when PLC check the operation operation possible conditions. +{ + change state to HVArming +} +---------- +2. // DONE +if (EC-GN-P01-GPF:PLC4110-YTS-ST3R == 1) +{ + start HVON timer +} +---------- + + + +HVArming //HVArming is a state to startup HV generation in APS and BPS. +========== +1. +at specified time // TODO: Where do I get this specified time? And is it a countdown time or what? + // MEMO: Time is specified by PVs (EC-GN-P01-PB1F:STAT-DT-HVON). When app detect HVON from PLC, it is t=0. +{ + set signal EC-GN-P01-PB1F:PSU1000-CON-HV = 1 +} +---------- +2. +at specified time // TODO: Where do I get this specified time? And is it a countdown time or what? + // MEMO: Time is specified by PVs (EC-GN-P01-PA1F:STAT-DT-HVON) +{ + set signal EC-GN-P01-PA1F:PSU3000-CON-HV = 1 +} +---------- +3. +if (EC-GN-P01-PB1F:PSU1000-CON-HV == 1 + AND + EC-GN-P01-PA1F:PSU3000-CON-HV == 1 + AND + EC-GN-P01-GPF::PLC4110-YSTA-MPSS == 0) // MEMO: Both HV PVs are 1. i.e.Both PSs are charged HV. and is in async mode. +{ + change state to HVArmed +} +---------- +4. +if (EC-GN-P01-PB1F:PSU1000-CON-HV == 1 + AND + EC-GN-P01-PA1F:PSU3000-CON-HV == 1 + AND + EC-GN-P01-GPF::PLC4110-YSTA-MPSS == 1) // MEMO: HVPS HVs are ON and is in SYNC mode. +{ + Change state to HVArmedESDN +} +---------- +5. + count up elapsed time (time from HVON detection) + Write time to EC-GN-P01-GAF:STAT-ELAPSED + + +HVArmed +========== +1. +if (EC-GN-P01-GPF:PLC4110-YTS-ST3R == 0) // TODO: when do we go from HVArmed to Offline? + // MEMO: move to Offline when ON signal from PLC is turned off. +{ + change state to Offline +} +---------- +2. +// TODO: "(Entry) Write EC-GN-P01-GAF:PCF4210-YTS-GA1" What does Entry mean? Does it mean to do something +// only on the first cycle when we enter this state? What do I write to signal EC-GN-P01-GAF:PCF4210-YTS-GA1? +// MEMO: EC-GN-P01-GAF:PCF4210-YTS-GA1 is a PV that fast controller notifies Gyrotron operation state to PLC. +// When enter the HVArmed state, App writes 1 to this EPICS PV. +---------- +3. +if (EC-GN-P01-PB1F:PSU1000-CON-SW == 1) // TODO: when do we go from HVArmed to HVInjectionBPS? + // MEMO: If MHVPS HV is turned ON first, goto this state. +{ + change state to HVInjectionBPS +} +---------- +4. +if (EC-GN-P01-PMF:PSU0000-CON-SW == 1) // TODO: when do we go from HVArmed to HVInjectionMHVPS? + // MEMO: If BPS HV is turned ON first, goto this state. +{ + change state to HVInjectionMHVPS +} +---------- +5. + count up elapsed time (time from HVON detection) + Write time to EC-GN-P01-GAF:STAT-ELAPSED +---------- +6. +if (EC-GN-P01-GPF::PLC4110-YSTA-MPSS == 1) //When SYNC mode turned ON. +{ + change state to HVArmedESDN +} +---------- + +HVArmedESDN // Start ESDN command, waveform subscription. +========== +1. +if (EC-GN-P01-GPF:PLC4110-YTS-ST3R == 0) +{ + change state to Offline +} +---------- +2. +if (EC-GN-P01-PB1F:PSU1000-CON-SW == 1) +{ + change state to HVInjectionBPSESDN +} +---------- +3. +if (EC-GN-P01-PMF:PSU0000-CON-SW == 1) +{ + change state to HVInjectionMHVPSESDN +} +---------- +4. + count up elapsed time (time from HVON detection) + Write time to EC-GN-P01-GAF:STAT-ELAPSED +---------- +6. +if (EC-GN-P01-GPF::PLC4110-YSTA-MPSS == 0) //When SYNC mode turned ON. +{ + change state to HVArmed +} +---------- + +HVInjectionBPS +========== +HVInjectionMHVPS +========== +1. +// MEMO: Write Gyrotron state PV (HVInjection) to notify PLC. +Write 1 to EC-GN-P01-GAF:PCF4210-YTS-GA2. +---------- +// TODO: Following questions/states are for ALL of the above states +2. (Exist in HVInjection BPS) +set signal EC-GN-P01-PA1F:PSU3000-CON-SW = 1 // TODO when do we set this signal +// MEMO: Countdown time for EC-GN-P01-PA1F:STAT-DT-SWON +---------- +2. (Exist in HVInjection MHVPS) +set signal EC-GN-P01-PB1F:PSU1000-CON-SW = 1 // TODO when do we set this signal +// MEMO: Countdown time for EC-GN-P01-PB1F:STAT-DT-SWON +---------- +3. +set signal EC-GN-P01-PMF:PSU0000-CON-SW = 1 // TODO when do we set this signal +// MEMO: Countdown time for EC-GN-P01-PMF:STAT-DT-SWON +---------- +4. +// TODO when to switch to RFON? +// MEMO: Go to RFON state when All switch PVs are 1. and the mode is async. +if (EC-GN-P01-PA1F:PSU3000-CON-SW == 1 AND + EC-GN-P01-PB1F:PSU1000-CON-SW == 1 AND + EC-GN-P01-PMF:PSU0000-CON-SW == 1) +{ + change state to RFON +} +---------- +5. + count up elapsed time (time from HVON detection) + Write time to EC-GN-P01-GAF:STAT-ELAPSED +---------- + +HVInjectionESDN +========== +1. +// MEMO: Write Gyrotron state PV (HVInjection) to notify PLC. +Write 1 to EC-GN-P01-GAF:PCF4210-YTS-GA2. +---------- +2. +set signal EC-GN-P01-PA1F:PSU3000-CON-SW = 1 +// Write 1 when ESDN command give a command. +---------- +3. +set signal EC-GN-P01-PB1F:PSU1000-CON-SW = 1 +// Write 1 when ESDN command give a command. +---------- +4. +set signal EC-GN-P01-PMF:PSU0000-CON-SW = 1 +// Write 1 when ESDN command give a command. +---------- +5. +// TODO when to switch to RFONESDN? +// MEMO: Go to RFON state when All switch PVs are 1. and the mode is sync.i,e. change from HVInjectionxxxESDN +if (EC-GN-P01-PA1F:PSU3000-CON-SW == 1 AND + EC-GN-P01-PB1F:PSU1000-CON-SW == 1 AND + EC-GN-P01-PMF:PSU0000-CON-SW == 1) +{ + change state to RFONESDN +} +---------- + +RFON +========== +// TODO is this correct? +1. +// This only executes on the last cycle before we move to HVArmed +if (EC-GN-P01-GAF:STAT-BEAMON-TIME >= EC-GN-P01-GAF:STAT-DT-SHOTLEN) +{ + set signal EC-GN-P01-PA1F:PSU3000-CON-SW = 0 + set signal EC-GN-P01-PB1F:PSU1000-CON-SW = 0 + set signal EC-GN-P01-PMF:PSU0000-CON-SW = 0 +} +---------- +2. +if (EC-GN-P01-GAF:STAT-BEAMON-TIME >= EC-GN-P01-GAF:STAT-DT-SHOTLEN) +{ + change state to HVArmed +} +---------- +3. + count up elapsed time (time from HVON detection) + Write time to EC-GN-P01-GAF:STAT-ELAPSED +---------- +4. +When enter the state beam-on timer is set to 0. +count up beam-on time. write the time into EC-GN-P01-GAF:STAT-BEAMON-TIME +---------- + + + +RFONESDN +========== +// TODO is this correct? +// MEMO: In the ESDN sync mode, HVPS turned off by ESDN packet. +// In both mode, there is mode_limit which is given by (EC-GN-P01-GPF:PLC4110-YTS-MD1,2,3,4). +1. +// This only executes on the last cycle before we move to HVArmed +if (EC-GN-P01-GAF:STAT-BEAMON-TIME >= t_mode_limit) // TODO: where do I get t_mode_limit? +{ + set signal EC-GN-P01-PA1F:PSU3000-CON-SW = 0 + set signal EC-GN-P01-PB1F:PSU1000-CON-SW = 0 + set signal EC-GN-P01-PMF:PSU0000-CON-SW = 0 +} +---------- +2. +if (EC-GN-P01-GAF:STAT-BEAMON-TIME >= t_mode_limit) // TODO: where do I get t_mode_limit? +{ + change state to HVArmedESDN +} +---------- +3. +Subscribe ESDN commands. When GAM detect Beam-off command. It turn all HVPS SW OFF. +And change state to HVArmedESDN +---------- +4. + count up elapsed time (time from HVON detection) + Write time to EC-GN-P01-GAF:STAT-ELAPSED +---------- +5. +When enter the state beam-on timer is set to 0. +count up beam-on time. write the time into EC-GN-P01-GAF:STAT-BEAMON-TIME +---------- + + +Error +========== +1. +// Only execute on the first cycle after entering this state +if (first) +{ + set first = false + + set signal EC-GN-P01-PA1F:PUS3000-CON-HV = 0 // TODO: there is no signal named EC-GN-P01-PA1F:PUS3000-CON-HV + set signal EC-GN-P01-PA1F:PSU3000-CON-SW = 0 + set signal EC-GN-P01-PB1F:PSU1000-CON-HV = 0 + set signal EC-GN-P01-PB1F:PSU1000-CON-SW = 0 + set signal EC-GN-P01-PMF:PSU0000-CON-SW = 0 + // MEMO: PA2F and PB2F are component type for gyrotron B. I will remove following action. + set signal EC-GN-P01-PA2F:PUS4000-CON-HV = 0 // TODO: there is no signal named EC-GN-P01-PA2F:PUS4000-CON-HV + set signal EC-GN-P01-PA2F:PSU4000-CON-SW = 0 // TODO: signal EC-GN-P01-PA2F:PSU4000-CON-SW missing in configuration file + set signal EC-GN-P01-PB2F:PSU2000-CON-HV = 0 // TODO: signal EC-GN-P01-PB2F:PSU2000-CON-HV missing in configuration file + set signal EC-GN-P01-PB2F:PSU2000-CON-SW = 0 // TODO: signal EC-GN-P01-PB2F:PSU2000-CON-SW missing in configuration file + + set signal EC-GN-P01-PMF:PSU0000-CON-SW = 1 + set signal EC-GN-P01-PA1F:PSU3000-CTRP = 1 + set signal EC-GN-P01-PB1F:PSU1000-CTRP = 1 + // MEMO: PA2F and PB2F are component type for gyrotron B. I will remove following action. + set signal EC-GN-P01-PA2F:PSU4000-CTRP = 1 // TODO: signal EC-GN-P01-PA2F:PSU4000-CTRP missing in configuration file + set signal EC-GN-P01-PB2F:PSU1000-CTRP = 1 // TODO: there is no signal named EC-GN-P01-PB2F:PSU1000-CTRP +} +---------- +2. +if (EC-GN-P01-GPF:STAT-RST-FLT == 1 && ) // TODO: when do we go to Offline state? +{ + change state to Offline +} +---------- diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/JABitReverseGAM.cpp b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/JABitReverseGAM.cpp new file mode 100644 index 0000000..dd322b8 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/JABitReverseGAM.cpp @@ -0,0 +1,123 @@ +/** + * @file JABitReverseGAM.cpp + * @brief Source file for class JABitReverseGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JABitReverseGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JABitReverseGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JABitReverseGAM::JABitReverseGAM() { + //Input signals. + input1 = NULL_PTR(MARTe::uint8 *); + + //Output signals. + output1= NULL_PTR(MARTe::uint8 *); +} + +JABitReverseGAM::~JABitReverseGAM() { +} + +bool JABitReverseGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + return ok; +} + +bool JABitReverseGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JABitReverseGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == 1u); + if (ok) { + ok = (numberOfOutputSignals == 1u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "One output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "One input signals shall be defined"); + } + // Do type check for input signals. + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = ((inputType == UnsignedInteger8Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint8.", signalName.Buffer()); + } + + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = ((outputType == UnsignedInteger8Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint8.", signalName.Buffer()); + } + } + } + // Do type cast. + if (ok) { + input1 = reinterpret_cast(GetInputSignalMemory(0)); + + output1 = reinterpret_cast(GetOutputSignalMemory(0)); + } + return ok; +} + +bool JABitReverseGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + *output1 = ~(*input1); + return true; +} + +CLASS_REGISTER(JABitReverseGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/JABitReverseGAM.h b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/JABitReverseGAM.h new file mode 100644 index 0000000..1d2bbcf --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/JABitReverseGAM.h @@ -0,0 +1,75 @@ +/** + * @file JABitReverseGAM.h + * @brief Header file for class JABitReverseGAM + * @date Mar 18, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JABitReverseGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JABitReverseGAM_H_ +#define GAMS_JABitReverseGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +class JABitReverseGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JABitReverseGAM(); + + virtual ~JABitReverseGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + + // Input signals + MARTe::uint8 *input1; + + // Output signals + MARTe::uint8 *output1; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JABitReverseGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/Makefile.inc new file mode 100644 index 0000000..e764f01 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JABitReverseGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JABitReverseGAM$(LIBEXT) \ + $(BUILD_DIR)/JABitReverseGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/JABitSumGAM.cpp b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/JABitSumGAM.cpp new file mode 100644 index 0000000..7c75cd1 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/JABitSumGAM.cpp @@ -0,0 +1,143 @@ +/** + * @file JABitSumGAM.cpp + * @brief Source file for class JABitSumGAM + * @date Feb 10, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JABitSumGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JABitSumGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JABitSumGAM::JABitSumGAM() { + //Input signals. + input0 = NULL_PTR(MARTe::uint32 *); + input1 = NULL_PTR(MARTe::uint32 *); + input2 = NULL_PTR(MARTe::uint32 *); + input3 = NULL_PTR(MARTe::uint32 *); + input4 = NULL_PTR(MARTe::uint32 *); + input5 = NULL_PTR(MARTe::uint32 *); + input6 = NULL_PTR(MARTe::uint32 *); + input7 = NULL_PTR(MARTe::uint32 *); + + //Output signals. + output= NULL_PTR(MARTe::uint8 *); +} + +JABitSumGAM::~JABitSumGAM() { +} + +bool JABitSumGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (!ok){ + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "ParametersError in init."); + } + return ok; +} + +bool JABitSumGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JABitSumGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == 8u); + if (ok) { + ok = (numberOfOutputSignals == 1u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "One output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Eight input signals shall be defined"); + } + // Do type check for input signals. + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32.", signalName.Buffer()); + } + + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint8.", signalName.Buffer()); + } + } + } + // Do type cast. + if (ok) { + input0 = reinterpret_cast(GetInputSignalMemory(0)); + input1 = reinterpret_cast(GetInputSignalMemory(1)); + input2 = reinterpret_cast(GetInputSignalMemory(2)); + input3 = reinterpret_cast(GetInputSignalMemory(3)); + input4 = reinterpret_cast(GetInputSignalMemory(4)); + input5 = reinterpret_cast(GetInputSignalMemory(5)); + input6 = reinterpret_cast(GetInputSignalMemory(6)); + input7 = reinterpret_cast(GetInputSignalMemory(7)); + + output = reinterpret_cast(GetOutputSignalMemory(0)); + } + + return ok; +} + +bool JABitSumGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + *output = *input0 + *input1*2 + *input2*4 + *input3*8 + *input4*16 + + *input5*32 + *input6*64 + *input7*128; + + return true; +} + +CLASS_REGISTER(JABitSumGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/JABitSumGAM.h b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/JABitSumGAM.h new file mode 100644 index 0000000..462f62b --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/JABitSumGAM.h @@ -0,0 +1,81 @@ +/** + * @file JABitSumGAM.h + * @brief Header file for class JABitSumGAM + * @date Feb 10, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JABitSumGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JABitSumGAM_H_ +#define GAMS_JABitSumGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include "stdio.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +class JABitSumGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JABitSumGAM(); + + virtual ~JABitSumGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + // Input signals + MARTe::uint32 *input0; + MARTe::uint32 *input1; + MARTe::uint32 *input2; + MARTe::uint32 *input3; + MARTe::uint32 *input4; + MARTe::uint32 *input5; + MARTe::uint32 *input6; + MARTe::uint32 *input7; + + // Output signals + MARTe::uint8 *output; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JABitSumGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/Makefile.inc new file mode 100644 index 0000000..42b3063 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JABitSumGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JABitSumGAM$(LIBEXT) \ + $(BUILD_DIR)/JABitSumGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.cpp b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.cpp new file mode 100644 index 0000000..99ba1f5 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.cpp @@ -0,0 +1,309 @@ +/** + * @file JAConditionalSignalUpdateGAM.cpp + * @brief Source file for class JAConditionalSignalUpdateGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAConditionalSignalUpdateGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAConditionalSignalUpdateGAM.h" +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAConditionalSignalUpdateGAM::JAConditionalSignalUpdateGAM() { + inputSignals = NULL_PTR(void **); + inputSignalTypes = NULL_PTR(MARTe::TypeDescriptor *); + values = NULL_PTR(MARTe::uint32 *); + valuesCount = 0u; + outputSignals = NULL_PTR(MARTe::uint32 **); + defaultValues = NULL_PTR(MARTe::uint32 **); + needsReset = false; + expectedValues = NULL_PTR(MARTe::uint32 *); + expectedValuesCount = 0u; + operation = And; + comparators = NULL_PTR(ComparisonMode *); +} + +JAConditionalSignalUpdateGAM::~JAConditionalSignalUpdateGAM() { + if (outputSignals != NULL_PTR(MARTe::uint32 **)) { + delete[] outputSignals; + } + if (inputSignals != NULL_PTR(void **)) { + delete[] inputSignals; + } + if (inputSignalTypes != NULL_PTR(MARTe::TypeDescriptor *)) { + delete[] inputSignalTypes; + } + if (values != NULL_PTR(MARTe::uint32 *)) { + delete[] values; + } + if (comparators != NULL_PTR(ComparisonMode *)) { + delete[] comparators; + } + if (defaultValues != NULL_PTR(MARTe::uint32 **)) { + delete[] defaultValues; + } +} + +bool JAConditionalSignalUpdateGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + // Read expected values. + AnyType valuesArray = data.GetType("ExpectedValues"); + + if (valuesArray.GetDataPointer() != NULL) { + expectedValuesCount = valuesArray.GetNumberOfElements(0u); + + expectedValues = new uint32[expectedValuesCount]; + + Vector valuesVector(expectedValues, expectedValuesCount); + ok = (data.Read("ExpectedValues", valuesVector)); + } + } + if (ok) { + // Read comparators. + AnyType comparatorsArray = data.GetType("Comparators"); + if (comparatorsArray.GetDataPointer() != NULL) { + uint32 count; + if (ok) { + count = comparatorsArray.GetNumberOfElements(0u); + ok = count == expectedValuesCount; + } + if (ok) { + comparators = new ComparisonMode[count]; + StreamString* comp = new StreamString[count]; + Vector compVector(comp, count); + + ok = (data.Read("Comparators", compVector)); + + if (ok) { + for (uint32 i = 0; i < count; ++i) { + if (comp[i] == "EQUALS") { + comparators[i] = Equals; + } else if (comp[i] == "NOT") { + comparators[i] = Not; + } else if (comp[i] == "GREATER") { + comparators[i] = Greater; + } else if (comp[i] == "EQUALS_OR_GREATER") { + comparators[i] = EqualsOrGreater; + } else if (comp[i] == "LESS") { + comparators[i] = Less; + } else if (comp[i] == "EQUALS_OR_LESS") { + comparators[i] = EqualsOrLess; + } else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Comparator %s is not defined.", comp[i].Buffer()); + } + } + } + delete[] comp; + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Expected values and operators shall have the same " + "number of elements."); + } + } else { + // Create default comparators (equals) when they aren't provided in the configuration. + comparators = new ComparisonMode[expectedValuesCount]; + for (uint32 i = 0; i < expectedValuesCount; ++i) { + comparators[i] = Equals; + } + } + } + if (ok) { + MARTe::StreamString operationStr; + if (data.Read("Operation", operationStr)) { + if (operationStr == "AND") { + operation = And; + } + else if (operationStr == "OR") { + operation = Or; + } + else if (operationStr == "NOR") { + operation = Nor; + } + else if (operationStr == "XOR") { + operation = Xor; + } + else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Operation %s is not defined", operationStr.Buffer()); + } + } + } + if (ok) { + // Read output signal values to be set. + AnyType valuesArray = data.GetType("Values"); + ok = (valuesArray.GetDataPointer() != NULL); + + if (ok) { + valuesCount = valuesArray.GetNumberOfElements(0u); + ok = valuesCount > 0u; + } + if (ok) { + values = new uint32[valuesCount]; + + Vector valuesVector(values, valuesCount); + ok = (data.Read("Values", valuesVector)); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Values shall be defined."); + } + } + return ok; +} + +bool JAConditionalSignalUpdateGAM::Setup() { + using namespace MARTe; + bool ok = numberOfInputSignals == (expectedValuesCount + numberOfOutputSignals); + if (ok) { + inputSignals = new void*[expectedValuesCount]; + defaultValues = new uint32*[numberOfOutputSignals]; + uint32 i; + for (i = 0u; i < expectedValuesCount; i++) { + inputSignals[i] = GetInputSignalMemory(i); + } + for (; i < numberOfInputSignals; i++) { + defaultValues[i - expectedValuesCount] = reinterpret_cast(GetInputSignalMemory(i)); + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Number of input signals shall be equal to number " + "of expected values plus number of output signals."); + } + if (ok) { + inputSignalTypes = new TypeDescriptor[expectedValuesCount]; + uint32 i; + for (i = 0u; (i < expectedValuesCount) && (ok); i++) { + inputSignalTypes[i] = GetSignalType(InputSignals, i); + ok = ((inputSignalTypes[i] == UnsignedInteger32Bit) || (inputSignalTypes[i] == UnsignedInteger16Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, i, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint16", signalName.Buffer()); + } + } + } + if (ok) { + ok = numberOfOutputSignals == valuesCount; + if (ok) { + ok = numberOfOutputSignals > 0u; + if (ok) { + outputSignals = new uint32*[numberOfOutputSignals]; + uint32 i; + for (i = 0u; i < numberOfOutputSignals; i++) { + outputSignals[i] = reinterpret_cast(GetOutputSignalMemory(i)); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one output signal shall be defined"); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Number of output signals shall be the same as " + "number of provided values."); + } + } + + return ok; +} + +bool JAConditionalSignalUpdateGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + needsReset = false; + return true; +} + +bool JAConditionalSignalUpdateGAM::Execute() { + if (!needsReset) { + bool eventDetected = expectedValuesCount == 0; + if (!eventDetected) { + if (operation == Or) { + MARTe::uint32 j; + for (j = 0; (j < expectedValuesCount) && (!eventDetected); j++) { + eventDetected = Compare(j); + } + } + else if (operation == Nor) { + MARTe::uint32 j; + for (j = 0; (j < expectedValuesCount) && (!eventDetected); j++) { + eventDetected = Compare(j); + } + eventDetected = !eventDetected; + } + else if (operation == And) { + MARTe::uint32 j; + eventDetected = Compare(0); + for (j = 1; (j < expectedValuesCount); j++) { + eventDetected &= Compare(j); + } + } + else if (operation == Xor) { + MARTe::uint32 j; + MARTe::uint32 eventDetectedUint32; + if (inputSignalTypes[0] == MARTe::UnsignedInteger32Bit) { + eventDetectedUint32 = *static_cast(inputSignals[0]); + } + else { + eventDetectedUint32 = *static_cast(inputSignals[0]); + } + for (j = 1; (j < expectedValuesCount); j++) { + eventDetectedUint32 ^= Compare(j); + } + eventDetected = (eventDetectedUint32 == 1u); + } + } + if (eventDetected) { + needsReset = true; + MARTe::uint32 i; + for (i = 0u; i < numberOfOutputSignals; ++i) { + *outputSignals[i] = values[i]; + MARTe::StreamString signalName; + (void) GetSignalName(MARTe::OutputSignals, i, signalName); + } + } + else { + MARTe::uint32 i; + for (i = 0u; i < numberOfOutputSignals; ++i) { + *outputSignals[i] = *defaultValues[i]; + } + } + } + return true; +} + +bool JAConditionalSignalUpdateGAM::Compare(MARTe::uint32 index) { + if (inputSignalTypes[index] == MARTe::UnsignedInteger32Bit) { + return Compare(index); + } + return Compare(index); +} + +CLASS_REGISTER(JAConditionalSignalUpdateGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.h b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.h new file mode 100644 index 0000000..2cf5c5d --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.h @@ -0,0 +1,180 @@ +/** + * @file JAConditionalSignalUpdateGAM.h + * @brief Header file for class JAConditionalSignalUpdateGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAConditionalSignalUpdateGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JACONDITIONALSIGNALUPDATEGAM_H_ +#define GAMS_JACONDITIONALSIGNALUPDATEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that writes predefined values to output signals when a condition is met. + * If there are no conditional signals provided, the condition is presumed to be met. + * + * +ASYNCShotlengthControlGAM = { + * Class = JAConditionalSignalUpdateGAM + * Operation = OR // Logical operation performed between conditional signals + * // Supported values: AND, OR, XOR, NOR + * // Default: AND + * ExpectedValues = {1 1} // Values to which conditional signals will be compared. + * Comparators = {EQUALS EQUALS} // Operator between conditional signal an expected value + * // Supported values: EQUALS, NOT, GREATER, EQUALS_OR_GREATER, LESS, EQUALS_OR_LESS + * // Default: EQUALS + * Values = {0 3} // Values that will be written to output signals when condition is met. + * InputSignals = { + * // Conditional Signals + * SHOTLEN_FLAG = { + * DataSource = DDB1 + * Type = uint32 + * } + * MODE_SHOTLEN_FLAG = { + * DataSource = DDB1 + * Type = uint32 + * } + * // Default values (set to output signals before the condition is met) + * APS_SWON = { // APS_SWON will keep the value from previous state. + * DataSource = DDB1 + * Type = uint32 + * } + * BPS_SWON_DEFAULT = { // BPS_SWON will be set to 7 before condition is met. + * DataSource = DDB1 + * Type = uint32 + * Default = 7 + * } + * } + * OutputSignals = { + * APS_SWON = { + * DataSource = DDB1 + * Type = uint32 + * } + * BPS_SWON = { + * DataSource = DDB1 + * Type = uint32 + * } + * } + * } + */ +class JAConditionalSignalUpdateGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAConditionalSignalUpdateGAM(); + + virtual ~JAConditionalSignalUpdateGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + /** + * @brief Does the input signal at provided index have the expected value. + * @param[in] index of the signal. + * @return true if the signal has expected value. + */ + bool Compare(MARTe::uint32 index); + + template + bool Compare(MARTe::uint32 index); + + enum OperationMode { + And, Or, Xor, Nor + }; + + enum ComparisonMode { + Equals, Not, Greater, EqualsOrGreater, Less, EqualsOrLess + }; + + // Input signals + void **inputSignals; + + MARTe::TypeDescriptor *inputSignalTypes; + + // Condition operation. + OperationMode operation; + + // Array of expected values of input signals. + MARTe::uint32* expectedValues; + + // Expected values count (must be equal to numberOfInputSignals) + MARTe::uint32 expectedValuesCount; + + // Array of comparators + ComparisonMode* comparators; + + // Values to be written on output signals when input signal has the expected value. + MARTe::uint32 *values; + + // Number of values (must be equal to numberOfOutputSignals) + MARTe::uint32 valuesCount; + + // Output signals + MARTe::uint32 **outputSignals; + + // Default values of output signals + MARTe::uint32 **defaultValues; + + // Were output signals already set and we are waiting for a state change before they are set again. + bool needsReset; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +template +bool JAConditionalSignalUpdateGAM::Compare(MARTe::uint32 index) { + switch (comparators[index]) { + case Equals: + return *static_cast(inputSignals[index]) == static_cast(expectedValues[index]); + case Not: + return *static_cast(inputSignals[index]) != static_cast(expectedValues[index]); + case Greater: + return *static_cast(inputSignals[index]) > static_cast(expectedValues[index]); + case EqualsOrGreater: + return *static_cast(inputSignals[index]) >= static_cast(expectedValues[index]); + case Less: + return *static_cast(inputSignals[index]) < static_cast(expectedValues[index]); + default: // case EqualsOrLess: + return *static_cast(inputSignals[index]) <= static_cast(expectedValues[index]); + } +} + +#endif /* GAMS_JACONDITIONALSIGNALUPDATEGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/Makefile.inc new file mode 100644 index 0000000..c66a7fd --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/Makefile.inc @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAConditionalSignalUpdateGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAConditionalSignalUpdateGAM$(LIBEXT) \ + $(BUILD_DIR)/JAConditionalSignalUpdateGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/JAMessageGAM.cpp b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/JAMessageGAM.cpp new file mode 100644 index 0000000..50ca308 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/JAMessageGAM.cpp @@ -0,0 +1,347 @@ +/** + * @file JAMessageGAM.cpp + * @brief Source file for class JAMessageGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAMessageGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "JAMessageGAM.h" +#include "MessageI.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +template +bool Compare(JAMessageGAM::ComparisonMode comparator, void *inputSignal, U expectedValue) { + switch (comparator) { + case JAMessageGAM::Equals: + return *static_cast(inputSignal) == expectedValue; + case JAMessageGAM::Not: + return *static_cast(inputSignal) != expectedValue; + case JAMessageGAM::Greater: + return *static_cast(inputSignal) > expectedValue; + case JAMessageGAM::EqualsOrGreater: + return *static_cast(inputSignal) >= expectedValue; + case JAMessageGAM::Less: + return *static_cast(inputSignal) < expectedValue; + default: // case EqualsOrLess: + return *static_cast(inputSignal) <= expectedValue; + } +} + +JAMessageGAM::JAMessageGAM() { + inputSignals = NULL_PTR(void **); + inputSignalTypes = NULL_PTR(MARTe::TypeDescriptor *); + operation = And; + needsReset = false; + expectedValuesInt = NULL_PTR(MARTe::uint64 *); + expectedValuesFloat = NULL_PTR(MARTe::float64 *); + intValuesCount = 0u; + floatValuesCount = 0u; + comparators = NULL_PTR(ComparisonMode *); +} + +JAMessageGAM::~JAMessageGAM() { + if (inputSignals != NULL_PTR(void **)) { + delete[] inputSignals; + } + if (inputSignalTypes != NULL_PTR(MARTe::TypeDescriptor *)) { + delete[] inputSignalTypes; + } + if (expectedValuesInt != NULL_PTR(MARTe::uint64 *)) { + delete[] expectedValuesInt; + } + if (expectedValuesFloat != NULL_PTR(MARTe::float64 *)) { + delete[] expectedValuesFloat; + } + if (comparators != NULL_PTR(ComparisonMode *)) { + delete[] comparators; + } +} + +bool JAMessageGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + // Read expected integer values. + AnyType valuesArray = data.GetType("ExpectedIntValues"); + bool intValuesProvided = (valuesArray.GetDataPointer() != NULL); + + if (intValuesProvided) { + intValuesCount = valuesArray.GetNumberOfElements(0u); + } + if (intValuesProvided) { + expectedValuesInt = new uint64[intValuesCount]; + + Vector valuesVector(expectedValuesInt, intValuesCount); + ok = (data.Read("ExpectedIntValues", valuesVector)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Failed to read ExpectedIntValues."); + return ok; + } + } + // Read expected float values. + valuesArray = data.GetType("ExpectedFloatValues"); + bool floatValuesProvided = (valuesArray.GetDataPointer() != NULL); + + if (floatValuesProvided) { + floatValuesCount = valuesArray.GetNumberOfElements(0u); + } + if (floatValuesProvided) { + expectedValuesFloat = new float64[floatValuesCount]; + + Vector valuesVector(expectedValuesFloat, floatValuesCount); + ok = (data.Read("ExpectedFloatValues", valuesVector)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Failed to read ExpectedFloatValues."); + return ok; + } + } + + ok = (floatValuesCount + intValuesCount) > 0u; + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "ExpectedFloatValues and or ExpectedIntValues shall be defined."); + } + } + if (ok) { + // Read comparators. + AnyType comparatorsArray = data.GetType("Comparators"); + if (comparatorsArray.GetDataPointer() != NULL) { + uint32 count = comparatorsArray.GetNumberOfElements(0u); + ok = count == (intValuesCount + floatValuesCount); + if (ok) { + comparators = new ComparisonMode[count]; + StreamString* comp = new StreamString[count]; + Vector compVector(comp, count); + + ok = (data.Read("Comparators", compVector)); + + if (ok) { + for (uint32 i = 0; i < count; ++i) { + if (comp[i] == "EQUALS") { + comparators[i] = Equals; + } else if (comp[i] == "NOT") { + comparators[i] = Not; + } else if (comp[i] == "GREATER") { + comparators[i] = Greater; + } else if (comp[i] == "EQUALS_OR_GREATER") { + comparators[i] = EqualsOrGreater; + } else if (comp[i] == "LESS") { + comparators[i] = Less; + } else if (comp[i] == "EQUALS_OR_LESS") { + comparators[i] = EqualsOrLess; + } else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Comparator %s is not defined.", comp[i].Buffer()); + } + } + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Expected values and operators shall have the same " + "number of elements."); + } + } else { + uint32 count = intValuesCount + floatValuesCount; + if (ok) { + // Create default comparators (equals) when they aren't provided in the configuration. + comparators = new ComparisonMode[count]; + for (uint32 i = 0; i < count; ++i) { + comparators[i] = Equals; + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Expected values and operators shall have the same " + "number of elements."); + } + } + } + if (ok) { + MARTe::StreamString operationStr; + if (data.Read("Operation", operationStr)) { + if (operationStr == "AND") { + operation = And; + } + else if (operationStr == "OR") { + operation = Or; + } + else if (operationStr == "NOR") { + operation = Nor; + } + else if (operationStr == "XOR") { + operation = Xor; + } + else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Operation %s is not defined", operationStr.Buffer()); + } + } + } + if (ok) { + ok = (Size() == 1); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "A Message object shall be added to this container"); + } + } + if (ok) { + eventMsg = Get(0); + ok = (eventMsg.IsValid()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "A valid Message shall be added to this container"); + } + } + return ok; +} + +bool JAMessageGAM::Setup() { + using namespace MARTe; + bool ok = numberOfInputSignals == (intValuesCount + floatValuesCount); + if (ok) { + ok = numberOfInputSignals > 0u; + if (ok) { + inputSignals = new void*[numberOfInputSignals]; + uint32 i; + for (i = 0u; i < numberOfInputSignals; i++) { + inputSignals[i] = GetInputSignalMemory(i); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one input signal shall be defined"); + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Number of input signals shall be the same as " + "number of expected values."); + } + if (ok) { + inputSignalTypes = new TypeDescriptor[numberOfInputSignals]; + uint32 i; + for (i = 0u; (i < numberOfInputSignals) && (ok); i++) { + TypeDescriptor inputType = GetSignalType(InputSignals, i); + inputSignalTypes[i] = inputType; + ok = (inputType == UnsignedInteger32Bit) || (inputType == SignedInteger32Bit) || + (inputType == UnsignedInteger16Bit) || (inputType == SignedInteger16Bit) || + (inputType == UnsignedInteger8Bit) || (inputType == SignedInteger8Bit) || + (inputType == Float64Bit) || (inputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, i, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "Signal %s shall be defined as 32/16/8 bit signed/unsigned integer " + "or as 64/32 float.", signalName.Buffer()); + } + } + } + + return ok; +} + +bool JAMessageGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + needsReset = false; + return true; +} + +bool JAMessageGAM::Execute() { + using namespace MARTe; + bool ok = true; + bool eventDetected = false; + uint32 inputPortIndex = 0; + uint32 intIndex = 0; + uint32 floatIndex = 0; + if (operation == Or) { + for (inputPortIndex = 0; (inputPortIndex < numberOfInputSignals) && (!eventDetected); inputPortIndex++) { + eventDetected = Compare(inputPortIndex, floatIndex, intIndex); + } + } + else if (operation == Nor) { + for (inputPortIndex = 0; (inputPortIndex < numberOfInputSignals) && (!eventDetected); inputPortIndex++) { + eventDetected = Compare(inputPortIndex, floatIndex, intIndex); + } + eventDetected = !eventDetected; + } + else if (operation == And) { + eventDetected = Compare(0, floatIndex, intIndex); + for (inputPortIndex = 1; (inputPortIndex < numberOfInputSignals); inputPortIndex++) { + eventDetected &= Compare(inputPortIndex, floatIndex, intIndex); + } + } + else if (operation == Xor) { + uint32 eventDetectedUInt32 = Compare(inputPortIndex, floatIndex, intIndex); + for (inputPortIndex = 1; (inputPortIndex < numberOfInputSignals); inputPortIndex++) { + eventDetectedUInt32 ^= Compare(inputPortIndex, floatIndex, intIndex); + } + eventDetected = (eventDetectedUInt32 == 1u); + } + if (eventDetected) { + if (!needsReset) { + ok = (MessageI::SendMessage(eventMsg, this) == ErrorManagement::NoError); + needsReset = true; + } + } + return ok; +} + +bool JAMessageGAM::Compare(MARTe::uint32 inputPortIndex, MARTe::uint32 &floatValueIndex, MARTe::uint32 &intValueIndex) { + using namespace MARTe; + bool ret = false; + if (inputSignalTypes[inputPortIndex] == UnsignedInteger32Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == SignedInteger32Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == UnsignedInteger16Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == SignedInteger16Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == UnsignedInteger8Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == SignedInteger8Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == Float64Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesFloat[floatValueIndex]); + ++floatValueIndex; + } + else { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesFloat[floatValueIndex]); + ++floatValueIndex; + } + return ret; +} + +CLASS_REGISTER(JAMessageGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/JAMessageGAM.h b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/JAMessageGAM.h new file mode 100644 index 0000000..0cdb315 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/JAMessageGAM.h @@ -0,0 +1,149 @@ +/** + * @file JAMessageGAM.h + * @brief Header file for class JAMessageGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAMessageGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAMESSAGEGAM_H_ +#define GAMS_JAMESSAGEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include "Message.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that sends a message when input signals have expected values. Message will not be sent multiple + * times without first changing the application state. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ * +MessageGAM = {
+ *      Class = JAMessageGAM
+ *      Operation = AND // Accepted values are: AND, OR, XOR, NOR. Default value is AND.
+ *      ExpectedIntValues = {1 10} // Expected values for input signals of integral type.
+ *      ExpectedFloatValues = {3.5} // Expected values for float signals of floting point type.
+ *      Comparators = {EQUALS GREATER NOT} // Accepted values are: EQUALS, NOT, GREATER, EQUALS_OR_GREATER, LESS, EQUALS_OR_LESS
+ *                                         // Comparators element is optional. Default comparator is EQUALS.
+ *      InputSignals = {
+ *          Sig1 = {
+ *              DataSource = EPICSCAInput
+ *              Type = uint32
+ *          }
+ *          Sig2 = {
+ *              DataSource = EPICSCAInput
+ *              Type = float32
+ *          }
+ *          Sig3 = {
+ *              DataSource = EPICSCAInput
+ *              Type = uint32
+ *          }
+ *      }
+ *      +Event = { // Message to be sent when condition is true.
+ *          Class = Message
+ *          Destination = StateMachine
+ *          Function = GoDisabled
+ *      }
+ *  }
+ * 
+ * This example will send Event message when Sig1 == 1 && Sig2 > 3.5 && Sig3 != 10 + */ +class JAMessageGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAMessageGAM(); + + virtual ~JAMessageGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + + enum ComparisonMode { + Equals, Not, Greater, EqualsOrGreater, Less, EqualsOrLess + }; + +private: + /** + * @brief Does the input signal at provided index have the expected value. + * @param[in] index of the signal. + * @param[out] floatValueIndex lookup index for expected float values array. + * @param[out] intValueIndex lookup index for expected integer values array. + * @return true if the signal has expected value. + */ + bool Compare(MARTe::uint32 index, MARTe::uint32 &floatValueIndex, MARTe::uint32 &intValueIndex); + + enum OperationMode { + And, Or, Xor, Nor + }; + + // Input signals + void **inputSignals; + + MARTe::TypeDescriptor *inputSignalTypes; + + // Condition operation. + OperationMode operation; + + // Message to be sent when conditions are met. + MARTe::ReferenceT eventMsg; + + // Was the message already sent and we are waiting for a state change before next message can be sent. + bool needsReset; + + // Array of expected integer values of input signals. + MARTe::uint64* expectedValuesInt; + + // Array of expected float values for input signals. + MARTe::float64* expectedValuesFloat; + + // Expected integer values count (must be equal to numberOfInputSignals - floatValuesCount) + MARTe::uint32 intValuesCount; + + // Expected integer values count (must be equal to numberOfInputSignals - floatValuesCount) + MARTe::uint32 floatValuesCount; + + // Array of comparators + ComparisonMode* comparators; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAMESSAGEGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/Makefile.inc new file mode 100644 index 0000000..658d273 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/Makefile.inc @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAMessageGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAMessageGAM$(LIBEXT) \ + $(BUILD_DIR)/JAMessageGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/JAModeControlGAM.cpp b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/JAModeControlGAM.cpp new file mode 100644 index 0000000..c55e6d0 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/JAModeControlGAM.cpp @@ -0,0 +1,154 @@ +/** + * @file JAModeControlGAM.cpp + * @brief Source file for class JAModeControlGAM + * @date Jan, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAModeControlGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAModeControlGAM.h" +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAModeControlGAM::JAModeControlGAM() { + inputSignals = NULL_PTR(MARTe::uint32 **); + outputSignal = NULL_PTR(MARTe::uint32 *); + pulseLengthLimit = 360000000u; + resetRemainingTime = true; + previousState = 0u; +} + +JAModeControlGAM::~JAModeControlGAM() { + if (inputSignals != NULL_PTR(MARTe::uint32 **)) { + delete[] inputSignals; + } +} + +bool JAModeControlGAM::Initialise(MARTe::StructuredDataI & data) { + /* read hard coded on cfg file parameter values by using key name. */ + using namespace MARTe; + return GAM::Initialise(data); +} + +bool JAModeControlGAM::Setup() { + /* read GAM Input signal */ + using namespace MARTe; + /* read 4 mode bits and 4 shot length limit values */ + + bool ok = numberOfInputSignals == 11; + if (ok) { + uint32 i; + for (i = 0u; (i < numberOfInputSignals) && (ok); i++) { + TypeDescriptor inputType = GetSignalType(InputSignals, i); + ok = inputType == UnsignedInteger32Bit; + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, i, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "InputSignel %s shall be defined as uint32", signalName.Buffer()); + } + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Eleven input signals shall be defined."); + } + if (ok) { + ok = numberOfOutputSignals == 1; + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "One output signal shall be defined."); + } + else { + TypeDescriptor type = GetSignalType(OutputSignals, 0); + ok = type == UnsignedInteger32Bit; + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, 0, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + inputSignals = new uint32*[numberOfInputSignals]; + uint32 i; + for (i = 0u; i < 11; i++) { + inputSignals[i] = reinterpret_cast(GetInputSignalMemory(i)); + } + } + return ok; +} + +bool JAModeControlGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + *outputSignal = 0u; + previousState = 0u; + resetRemainingTime = true; + return true; +} + +bool JAModeControlGAM::Execute() { + using namespace MARTe; + //When RT state goes to RFON state, update the limit. + if(previousState == 0u && *inputSignals[8] == 1u && resetRemainingTime) { + rfonTime = *inputSignals[9]; + resetRemainingTime = false; + pulseLengthLimit = CalcPulseLengthLimit(inputSignals); + REPORT_ERROR(ErrorManagement::Debug, "Pulse Length was set to Limit:%d", pulseLengthLimit); + } + // Turn on the flag during RFON if the pulse legth over the limit. + if ((*inputSignals[9] - rfonTime <= pulseLengthLimit) && (previousState == 1u)) { + *outputSignal = 0u; + return true; + } else if(*inputSignals[9] == 1u){ + resetRemainingTime = true; + *outputSignal = 1u; + } + + previousState = *inputSignals[8]; + return true; +} + + +MARTe::uint32 JAModeControlGAM::CalcPulseLengthLimit(MARTe::uint32 **inputSignals) { + if (*inputSignals[0] == 1) { + return *inputSignals[1]; + } else if (*inputSignals[2] == 1) { + return *inputSignals[3]; + } else if (*inputSignals[4] == 1) { + return *inputSignals[5]; + } else if (*inputSignals[6] == 1) { + return *inputSignals[7]; + } else { + return 3600000000;//us + } +} + + +CLASS_REGISTER(JAModeControlGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/JAModeControlGAM.h b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/JAModeControlGAM.h new file mode 100644 index 0000000..e9041ce --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/JAModeControlGAM.h @@ -0,0 +1,149 @@ +/** + * @file JAModeControlGAM.h + * @brief Header file for class JAModeControlGAM + * @date Jan, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAModeControlGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAMODECONTROLGAM_H_ +#define GAMS_JAMODECONTROLGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that check the pulse lenght limit. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +ModeLimitGAM = {
+ *           Class = JAModeControlGAM
+ *           InputSignals = {
+ *               PLC_MODE1 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD1_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               PLC_MODE2 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD2_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               PLC_MODE3 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD3_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               PLC_MODE4 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD4_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               HVInjection = {
+ *               	DataSource = RealTimeThreadAsyncBridge
+ *               	Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * If MODE1 is ON and Time is exceed MD1_SHOTLEN_LIM, MODE_SHOTLEN_FLAG become ON. + */ + +class JAModeControlGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAModeControlGAM(); + + virtual ~JAModeControlGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + + MARTe::uint32 CalcPulseLengthLimit(MARTe::uint32 **inputSignals); + + // Input signals + MARTe::uint32 **inputSignals; + + // Output signals + MARTe::uint32 *outputSignal; + + // Calculated pulse lenght limit. + MARTe::uint32 pulseLengthLimit; + + // Amount of time passed per execution cycle. + MARTe::uint32 rfonTime; + + // reset flag + bool resetRemainingTime; + MARTe::uint32 previousState; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAMODECONTROLGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/Makefile.inc new file mode 100644 index 0000000..093c4b9 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/Makefile.inc @@ -0,0 +1,52 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAModeControlGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAModeControlGAM$(LIBEXT) \ + $(BUILD_DIR)/JAModeControlGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.cpp b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.cpp new file mode 100644 index 0000000..06de1df --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.cpp @@ -0,0 +1,460 @@ +/** + * @file JAPreProgrammedGAM.cpp + * @brief Source file for class JAPreProgrammedGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAPreProgrammedGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "CLASSMETHODREGISTER.h" +#include "File.h" +#include "JAPreProgrammedGAM.h" +#include "MessageI.h" +#include "RegisteredMethodsMessageFilter.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +// How often output signals are updated. +const MARTe::uint32 cycleMs = 10u; + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAPreProgrammedGAM::JAPreProgrammedGAM() : + GAM() { + using namespace MARTe; + filenameSignalIndex = 0u; + timeSignal = NULL_PTR(MARTe::int32 *); + loadTriggerSignal = NULL_PTR(MARTe::uint32 *); + fhpsrefSignal = NULL_PTR(MARTe::float32 *); + rfonStateSignal = NULL_PTR(MARTe::uint32 *); + + valueSignals = NULL_PTR(MARTe::float32 **); + preProgrammedValues = NULL_PTR(MARTe::float32 **); + preProgrammedTime = NULL_PTR(MARTe::int32 *); + fileLoadedSignal = NULL_PTR(MARTe::uint32 *); + fileLoadErrorOutput = NULL_PTR(MARTe::uint32 *); + + startTime = 0u; + numberOfPreProgrammedValues = 0u; + numberOfPreProgrammedTimeRows = 0u; + currentRow = 0u; + mode = None; + preProgrammedExecutaionPeriodMs = 0u; + msCounter = 0u; + preProgrammedRow = 0u; + resetOutputSignals = false; + readOnce = true; +} + +JAPreProgrammedGAM::~JAPreProgrammedGAM() { + DeleteArrays(); + if (valueSignals != NULL_PTR(MARTe::float32 **)) { + delete[] valueSignals; + } +} + +bool JAPreProgrammedGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("Directory", directory); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Directory shall be specified"); + } + } + if (ok) { + ok = data.Read("PreProgrammedPeriodMs", preProgrammedExecutaionPeriodMs); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Directory shall be specified"); + } + } + return ok; +} + +bool JAPreProgrammedGAM::Setup() { + using namespace MARTe; + //Signal number check. + bool ok = (numberOfInputSignals == 4u); + if (ok) { + ok = (numberOfOutputSignals > 2u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "At least two output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Four input signals with the filename and file load trigger shall be defined"); + } + //Input signals type consistency check. + if (ok) { + StreamString signalName = "Filename"; + ok = GetSignalIndex(InputSignals, filenameSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Filename input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, filenameSignalIndex); + ok = (inputType == CharString); + if (!ok) { + ok = (inputType == Character8Bit); + } + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, filenameSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as string", signalName.Buffer()); + } + } + } + if (ok) { + StreamString signalName = "CSV_LOAD"; + uint32 loadSignalIndex; + ok = GetSignalIndex(InputSignals, loadSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "CSV_LOAD input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, loadSignalIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, loadSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } else { + loadTriggerSignal = reinterpret_cast(GetInputSignalMemory(loadSignalIndex)); + } + } + } + if (ok) { + StreamString signalName = "FHPS_REF"; + uint32 fhpsrefIndex; + ok = GetSignalIndex(InputSignals, fhpsrefIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "FHPS_REF input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, fhpsrefIndex); + ok = (inputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, fhpsrefIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } else { + fhpsrefSignal = reinterpret_cast(GetInputSignalMemory(fhpsrefIndex)); + } + } + } + if (ok) { + StreamString signalName = "RFON"; + uint32 rfonIndex; + ok = GetSignalIndex(InputSignals, rfonIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "RFON input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, rfonIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, rfonIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } else { + rfonStateSignal = reinterpret_cast(GetInputSignalMemory(rfonIndex)); + } + } + } + + //Output signals type check. + if (ok) { + TypeDescriptor timeType = GetSignalType(OutputSignals, 0); + ok = (timeType == SignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, 0, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as int32", signalName.Buffer()); + } + + uint32 i; + for (i = 1u; (i <= 6) && (ok); i++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, i); + ok = (outputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, i, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } + } + + if (ok) { + TypeDescriptor fileLoadedType = GetSignalType(OutputSignals, 7u); + ok = (fileLoadedType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, 6u, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + if (ok) { + TypeDescriptor fileLoadErrorOutputType = GetSignalType(OutputSignals, 8u); + ok = (fileLoadErrorOutputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, 7u, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + + //Register signal memory + if (ok) { + timeSignal = reinterpret_cast(GetOutputSignalMemory(0)); + valueSignals = new float32*[6u]; + uint32 i; + for (i = 1u; i <= 6u; i++) { + valueSignals[i - 1] = reinterpret_cast(GetOutputSignalMemory(i)); + } + fileLoadedSignal = reinterpret_cast(GetOutputSignalMemory(7u)); + fileLoadErrorOutput = reinterpret_cast(GetOutputSignalMemory(8u)); + } + return ok; +} + +bool JAPreProgrammedGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + bool ok = true; + if (strcmp(nextStateName, "WaitReady") == 0) { + mode = LoadFileMode; + resetOutputSignals = true; + // Reset read once flag when reentering WaitReady state. + readOnce = true; + } else if (strcmp(nextStateName, "WaitPermit") == 0) { + mode = LoadFileMode; + resetOutputSignals = true; + currentRow = 0u; + } else if (strcmp(nextStateName, "WaitHVON_PREP") == 0 || strcmp(nextStateName, "WaitHVON_SDN_PREP") == 0) { + ok = numberOfPreProgrammedTimeRows > 0; + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::IllegalOperation, "Entering PreProgrammed mode without any waveform data."); + } + mode = PreProgrammedMode; + msCounter = cycleMs; + currentRow = 0u; + } else { + mode = None; + } + return ok; +} + +bool JAPreProgrammedGAM::LoadFile() { + using namespace MARTe; + + DeleteArrays(); + + bool ok = true; + + const MARTe::char8 * const filenameSignal = reinterpret_cast(GetInputSignalMemory(filenameSignalIndex)); + //Prepare full path to the configuration file. + StreamString filename = directory; + filename += DIRECTORY_SEPARATOR; + filename += filenameSignal; + REPORT_ERROR(MARTe::ErrorManagement::Debug, "Opening file %s", filename.Buffer()); + + //parse prepro configuration file into two arrays(time, values). + File f; + ok = f.Open(filename.Buffer(), BasicFile::ACCESS_MODE_R); + if (ok) { + //Count up number of file Rows. + numberOfPreProgrammedTimeRows = 0u; + StreamString tokenLine; + while (f.GetLine(tokenLine)) { + if (tokenLine[0] != '#' && tokenLine[0] != '-') { + numberOfPreProgrammedTimeRows++; + } + tokenLine = ""; + } + //Count up number of file lines + numberOfPreProgrammedValues = 0u; + f.Seek(0); + uint32 t = 0u; + tokenLine = ""; + while ((ok) && (f.GetLine(tokenLine))) { + // Skip comment line and minus time + if (tokenLine[0] == '#' || tokenLine[0] == '-') { + tokenLine = ""; + continue; + } + // Prepare two arrays at first. + if (numberOfPreProgrammedValues == 0) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + while (tokenLine.GetToken(token, ",", ignored)) { + numberOfPreProgrammedValues++; + token = ""; + } +REPORT_ERROR(MARTe::ErrorManagement::ParametersError,"numberOfPreProgrammedVal %d", numberOfPreProgrammedValues); + ok = (numberOfPreProgrammedValues == 7u);//From time row to FHPS row. + numberOfPreProgrammedValues -= 1u; //From MHVPS row to FHPS row. + if (ok) { + preProgrammedTime = new int32[numberOfPreProgrammedTimeRows]; + preProgrammedValues = new float32*[numberOfPreProgrammedTimeRows]; + uint32 j; + for (j = 0u; j < numberOfPreProgrammedTimeRows; j++) { + preProgrammedValues[j] = new float32[numberOfPreProgrammedValues]; + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, + "Number of columns in csv file (%d) is not consistent with the number of output signals (%d)", + numberOfPreProgrammedValues, 6u); + *fileLoadErrorOutput = 1; + } + } + // Add loaded data into two arrays. + if (ok) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + uint32 idx = 0u; + while (tokenLine.GetToken(token, ",", ignored)) { + if (idx == 0u) { + preProgrammedTime[t] = atoi(token.Buffer()); + if (t == 0 && preProgrammedTime[0] != 0) { + REPORT_ERROR(MARTe::ErrorManagement::Debug, "Prepro start from none zero time."); + } + } + else { + ok = ((idx - 1) < numberOfPreProgrammedValues); + if (ok) { + preProgrammedValues[t][idx - 1] = static_cast(atof(token.Buffer())); + } + else { + REPORT_ERROR(MARTe::ErrorManagement::FatalError, "Number of columns in csv file is not consistent with the number of output signals in line %d", t); + *fileLoadErrorOutput = 1; + } + } + token = ""; + idx++; + } + t++; + } + tokenLine = ""; + } + f.Close(); + } + if (ok) { + currentRow = 0u; + } + else { + numberOfPreProgrammedTimeRows = 0u; + REPORT_ERROR(ErrorManagement::Warning, "Failed to read waveform data from file."); + *fileLoadErrorOutput = 2; + } + return ok; +} + +bool JAPreProgrammedGAM::Execute() { + using namespace MARTe; + bool ok = true; + + switch (mode) { + case LoadFileMode: { + if (*loadTriggerSignal == 1u) { + if (readOnce) { + *fileLoadErrorOutput = 0; + *fileLoadedSignal = LoadFile() ? 1 : 0; + readOnce = false; + } + } else { + // Reset read once flag when loadTriggerSignal is reset. + readOnce = true; + } + + if (resetOutputSignals) { + // Write default values to output signals + *timeSignal = 0u; + *valueSignals[FHPS-1] = *fhpsrefSignal; + resetOutputSignals = false; + } else { + *valueSignals[FHPS-1] = *fhpsrefSignal; //copy input(2) to val_arr(4) + } + } break; + + case PreProgrammedMode: { + ok = numberOfPreProgrammedTimeRows > 0; + + //add 20210105. Before RFON, prepro setpoints should be same as the values listed at csv first line. + if (ok && *rfonStateSignal == 0) { + uint32 j; + for (j = 0u; j < FHPS; j++) { + *valueSignals[j] = preProgrammedValues[0][j]; + } + } + //end 20210105 + + if (ok && currentRow < numberOfPreProgrammedTimeRows && *rfonStateSignal == 1) { + if (msCounter >= cycleMs) { + msCounter -= cycleMs; + int32 currentTime = preProgrammedTime[currentRow]; + //REPORT_ERROR(MARTe::ErrorManagement::Debug, "Write Time at %d",currentRow); + // Write to output signals + *timeSignal = currentTime; + uint32 j; + for (j = 0u; j < FHPS; j++) { + *valueSignals[j] = preProgrammedValues[currentRow][j]; + //REPORT_ERROR(MARTe::ErrorManagement::Debug, "Write Value %f at row %d",preProgrammedValues[currentRow][j], currentRow); + } + //REPORT_ERROR(MARTe::ErrorManagement::Debug, "Writing pre programmed data for time %d", currentTime); + + // Update row + ++currentRow; + } + msCounter += preProgrammedExecutaionPeriodMs; + } + } break; + default: + // Nothing to do. + REPORT_ERROR(MARTe::ErrorManagement::Warning, "Unhandled mode."); + break; + } + return ok; +} + +void JAPreProgrammedGAM::DeleteArrays() { + if (preProgrammedValues != NULL_PTR(MARTe::float32 **)) { + MARTe::uint32 i; + for (i = 0u; i < numberOfPreProgrammedValues; i++) { + delete preProgrammedValues[i]; + } + delete[] preProgrammedValues; + } + if (preProgrammedTime != NULL_PTR(MARTe::int32 *)) { + delete[] preProgrammedTime; + } +} + +CLASS_REGISTER(JAPreProgrammedGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.h b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.h new file mode 100644 index 0000000..4226fef --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.h @@ -0,0 +1,187 @@ +/** + * @file JAPreProgrammedGAM.h + * @brief Header file for class JAPreProgrammedGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAPreProgrammedGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAPREPROGRAMMEDGAM_H_ +#define GAMS_JAPREPROGRAMMEDGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "GAM.h" +#include "Message.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that update PS output value for pre-programmed operation. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +PreProgrammedGAM = {
+ *           Class = JAPreProgrammedGAM
+ *           Directory = "../Configurations" // Directory which has pre-pro configuration file.
+ *           PreProgrammedPeriodMs = 1       // RFON state is executed every millisecond.
+ *           InputSignals = {
+ *               CSV_LOAD = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               Filename = {
+ *                   Alias = CSV_NAME
+ *                   DataSource = EPICSCAInput
+ *               }
+ *               FHPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               GYA_PREHEAT_TIME = {
+ *                   DataSource = DDB1
+ *                   Type = int32
+ *               }
+ *               MHVPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               BPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               APS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               MCPS_TRG_CURR_SET = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               GCPS_TRG_CURR_SET = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               FHPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               CSV_LOADED = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               CSV_ERR = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * + */ + +class JAPreProgrammedGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAPreProgrammedGAM(); + + virtual ~JAPreProgrammedGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + bool LoadFile(); + + void DeleteArrays(); + + //Parameters + MARTe::StreamString directory; //Location for prepro configuration file. + MARTe::uint32 preProgrammedExecutaionPeriodMs; // Time between to execution cycles in milliseconds in pre-programmed mode. + + //Input Signals + MARTe::uint32 *loadTriggerSignal; //index:0 + MARTe::uint32 filenameSignalIndex;//index:1 + MARTe::float32 *fhpsrefSignal; //index:2 + MARTe::uint32 *rfonStateSignal; //index:3 + + //Output Signals + MARTe::int32 *timeSignal; //index:0 + MARTe::float32 **valueSignals; //index:1-5 = BPS,APS,MC,GC,FHPS + MARTe::uint32 *fileLoadedSignal; //index:6 + MARTe::uint32 *fileLoadErrorOutput;//index:7 + + //Internal variables + MARTe::int32 *preProgrammedTime; + MARTe::float32 **preProgrammedValues; + + MARTe::uint32 startTime; + + //Number of columns in csv, EXCLUDING the time + MARTe::uint32 numberOfPreProgrammedValues; //is 5.(BPS, APS, MC, GC, FHPS) + MARTe::uint32 numberOfPreProgrammedTimeRows; //This start from t=0 row. + MARTe::uint32 currentRow; + + // Number of milliseconds since the last time output signals were updated. + MARTe::uint32 msCounter; + + // Row number where the pre-programmed data begins (time == 0). + MARTe::uint32 preProgrammedRow; + + enum OperationMode { + LoadFileMode, PreProgrammedMode, None + }; + enum PreProTableDefinition { + Time, MHVPS, BPS, APS, MCPS, GCPS, FHPS + }; + + OperationMode mode; + + bool resetOutputSignals; + + // Flag determining whether file should be read (so it isn't read multiple time) + bool readOnce; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAPREPROGRAMMEDGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/Makefile.inc new file mode 100644 index 0000000..aaa1948 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/Makefile.inc @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAPreProgrammedGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAPreProgrammedGAM$(LIBEXT) \ + $(BUILD_DIR)/JAPreProgrammedGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.cpp b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.cpp new file mode 100644 index 0000000..56f9b18 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.cpp @@ -0,0 +1,411 @@ +/** + * @file JARTStateMachineGAM.cpp + * @brief Source file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JARTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +static MARTe::uint64 getCurrentTimeUs() { + using namespace MARTe; + return static_cast(HighResolutionTimer::Counter() * HighResolutionTimer::Period() * 1e6f + 0.5f); +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARTStateMachineGAM::JARTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + turn_off_delay = 2000; //us + + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + short_pulse_mode = NULL_PTR(MARTe::uint32 *); + + modulation = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + + apsSwonHighResolutionTime = 0; + + aps_hvon_state=0; + aps_swon_state=0; + mhvps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; +} + +JARTStateMachineGAM::~JARTStateMachineGAM() { +} + +bool JARTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JARTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JARTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 12u); + if (ok) { + ok = (numberOfOutputSignals == 16u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined %d",numberOfOutputSignals); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(10)); + modulation = reinterpret_cast(GetInputSignalMemory(11)); + + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + + outputAPSHVON = reinterpret_cast(GetOutputSignalMemory(8)); + outputAPSSWON = reinterpret_cast(GetOutputSignalMemory(9)); + outputBPSHVON = reinterpret_cast(GetOutputSignalMemory(10)); + outputBPSSWON = reinterpret_cast(GetOutputSignalMemory(11)); + outputMHVPSON = reinterpret_cast(GetOutputSignalMemory(12)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(13)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(14)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(15)); + + *shotCounter = 0; + } + return ok; +} + +bool JARTStateMachineGAM::Execute() { + using namespace MARTe; + + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + //REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence at %d.", *currentTime); + plcOnTime = *currentTime; //Save pulse start time. + //*outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS; + } + } + else if (currentState == SwitchingHVPS) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; bps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + *outputBPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; aps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal at %d.", *currentTime); + *outputAPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; bps_swon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + *outputBPSSWON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; mhvps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + *outputMHVPSON=1; + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (plcOnTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; aps_swon_state=1; + apsSwonHighResolutionTime = getCurrentTimeUs(); + apsSwonTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + *outputAPSSWON=1; + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 1; + } + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 1; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *outputBeamON = 1; + *shotCounter += 1; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //Action in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + //debug + //if((*stopRequest != 0)){ + //REPORT_ERROR(ErrorManagement::Debug, "Stop request was called.!!!"); + //} else { + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset.!!!"); + //} + *outputSignal -= aps_swon; + mhvps_hvon_is_on = false; mhvps_hvon_state=0; + aps_hvon_is_on = false; aps_hvon_state=0; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; bps_hvon_state=0; + bps_swon_is_on = false; bps_swon_state=0; + currentState = HVTerminate; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + } + uint32 updatePeriod = 100; // in microsecnds (get this from Timer) + if ((*modePulseLengthLimit == 1u) || (getCurrentTimeUs() + updatePeriod >= (apsSwonHighResolutionTime + *triggerDelay_shotlen))) { + + // Now we do busy wait + while (getCurrentTimeUs() < (apsSwonHighResolutionTime + *triggerDelay_shotlen)) { + //REPORT_ERROR(ErrorManagement::Debug, "!"); + } + // We stop busy waiting #executionOverhead before expected pulse off time + //debug + //if((*modePulseLengthLimit == 1u)){ + // REPORT_ERROR(ErrorManagement::Debug, "Mode limit detected.!!!"); + //} else { + // REPORT_ERROR(ErrorManagement::Debug, "Shot length reached to the setpoint.!!!"); + //} + //debug end. + //Do action + *outputSignal -= aps_swon; //Turn off only APS_SWON first. + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; + bps_swon_is_on = false; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + //REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 1; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + //In the HVTerminate state, turn APS_SWON off first, and wait 1ms. Finally turn other PS off. + //Action in this state. + *outputBeamON = 0; + *outputHVArmed = 0; + *outputHVInjection = 0; + *outputRFON = 0; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + mhvps_hvon_state=0; + aps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset. The State was changed to WaitTrigger at %d.", *currentTime); + } + } + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6259 = 1*aps_swon_state; + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + if (modulation) { + p4Value = 8*mhvps_hvon_state + 32; + } + else { + p4Value = 8*mhvps_hvon_state; + } + //*outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + *outputSignalNI6528P4 = ~p4Value; + return true; +} + +CLASS_REGISTER(JARTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.h b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.h new file mode 100644 index 0000000..e968f39 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.h @@ -0,0 +1,262 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARTSTATEMACHINEGAM_H_ +#define GAMS_JARTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that provides real-time state machine. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMRealTimeStateMachine = {
+ *           Class = JARTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BEAM_ON_STAT = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JARTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARTStateMachineGAM(); + + virtual ~JARTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS = 1, + RFON = 2, + HVTerminate = 3 + }; + + //The current rtState + JARealTimeState currentState; + + //A given condition + MARTe::uint32 conditionTrigger; + + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + + //Time signal + MARTe::uint32 *currentTime; + + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for short pulse mode. + MARTe::uint32 *short_pulse_mode; + // Input signal for modulation pv. + MARTe::uint32 *modulation; + + // Output signal to which the output value will be written. + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + // Added for HVPS state (20201117) + MARTe::uint32 *outputAPSHVON; + MARTe::uint32 *outputAPSSWON; + MARTe::uint32 *outputBPSHVON; + MARTe::uint32 *outputBPSSWON; + MARTe::uint32 *outputMHVPSON; + + // Output signals for NI devices + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + MARTe::uint64 apsSwonHighResolutionTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + + // terminal values + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.cpp b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.cpp new file mode 100644 index 0000000..55983f1 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.cpp @@ -0,0 +1,409 @@ +/** + * @file JARTStateMachineGAM.cpp + * @brief Source file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JARTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +static MARTe::uint64 getCurrentTimeUs() { + using namespace MARTe; + return static_cast(HighResolutionTimer::Counter() * HighResolutionTimer::Period() * 1e6f + 0.5f); +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARTStateMachineGAM::JARTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + turn_off_delay = 2000; //us + + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + short_pulse_mode = NULL_PTR(MARTe::uint32 *); + + modulation = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + + apsSwonHighResolutionTime = 0; + + aps_hvon_state=0; + aps_swon_state=0; + mhvps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; +} + +JARTStateMachineGAM::~JARTStateMachineGAM() { +} + +bool JARTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JARTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JARTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 13u); + if (ok) { + ok = (numberOfOutputSignals == 16u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined %d",numberOfOutputSignals); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(10)); + modulation = reinterpret_cast(GetInputSignalMemory(11)); + pauseSet = reinterpret_cast(GetInputSignalMemory(12)); + + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + + outputAPSHVON = reinterpret_cast(GetOutputSignalMemory(8)); + outputAPSSWON = reinterpret_cast(GetOutputSignalMemory(9)); + outputBPSHVON = reinterpret_cast(GetOutputSignalMemory(10)); + outputBPSSWON = reinterpret_cast(GetOutputSignalMemory(11)); + outputMHVPSON = reinterpret_cast(GetOutputSignalMemory(12)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(13)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(14)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(15)); + + *shotCounter = 0; + } + return ok; +} + +bool JARTStateMachineGAM::Execute() { + using namespace MARTe; + + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + //REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence at %d.", *currentTime); + plcOnTime = *currentTime; //Save pulse start time. + //*outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS; + } + } + else if (currentState == SwitchingHVPS) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; bps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + *outputBPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; aps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal at %d.", *currentTime); + *outputAPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; bps_swon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + *outputBPSSWON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; mhvps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + *outputMHVPSON=1; + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (plcOnTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; aps_swon_state=1; + apsSwonHighResolutionTime = getCurrentTimeUs(); + apsSwonTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + *outputAPSSWON=1; + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 1; + } + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 1; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *outputBeamON = 1; + *shotCounter += 1; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //Action in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + //debug + //if((*stopRequest != 0)){ + //REPORT_ERROR(ErrorManagement::Debug, "Stop request was called.!!!"); + //} else { + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset.!!!"); + //} + *outputSignal -= aps_swon; + mhvps_hvon_is_on = false; mhvps_hvon_state=0; + aps_hvon_is_on = false; aps_hvon_state=0; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; bps_hvon_state=0; + bps_swon_is_on = false; bps_swon_state=0; + currentState = HVTerminate; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + } + uint32 updatePeriod = 100; // in microsecnds (get this from Timer) + if ((*modePulseLengthLimit == 1u) || (getCurrentTimeUs() + updatePeriod >= (apsSwonHighResolutionTime + *triggerDelay_shotlen))) { + + // Now we do busy wait + while (getCurrentTimeUs() < (apsSwonHighResolutionTime + *triggerDelay_shotlen)) { + //REPORT_ERROR(ErrorManagement::Debug, "!"); + } + // We stop busy waiting #executionOverhead before expected pulse off time + //debug + //if((*modePulseLengthLimit == 1u)){ + // REPORT_ERROR(ErrorManagement::Debug, "Mode limit detected.!!!"); + //} else { + // REPORT_ERROR(ErrorManagement::Debug, "Shot length reached to the setpoint.!!!"); + //} + //debug end. + //Do action + *outputSignal -= aps_swon; //Turn off only APS_SWON first. + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; + bps_swon_is_on = false; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + //REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 1; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + //In the HVTerminate state, turn APS_SWON off first, and wait 1ms. Finally turn other PS off. + //Action in this state. + *outputBeamON = 0; + *outputHVArmed = 0; + *outputHVInjection = 0; + *outputRFON = 0; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + mhvps_hvon_state=0; + aps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset. The State was changed to WaitTrigger at %d.", *currentTime); + } + } + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6259 = 1*aps_swon_state; + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + p4Value = 8*mhvps_hvon_state; + if (modulation) p4Value += 32; + if (pauseSet) p4Value += 1; + //*outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + *outputSignalNI6528P4 = ~p4Value; + return true; +} + +CLASS_REGISTER(JARTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.h b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.h new file mode 100644 index 0000000..876d64e --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.h @@ -0,0 +1,264 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARTSTATEMACHINEGAM_H_ +#define GAMS_JARTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that provides real-time state machine. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMRealTimeStateMachine = {
+ *           Class = JARTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BEAM_ON_STAT = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JARTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARTStateMachineGAM(); + + virtual ~JARTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS = 1, + RFON = 2, + HVTerminate = 3 + }; + + //The current rtState + JARealTimeState currentState; + + //A given condition + MARTe::uint32 conditionTrigger; + + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + + //Time signal + MARTe::uint32 *currentTime; + + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for short pulse mode. + MARTe::uint32 *short_pulse_mode; + // Input signal for modulation pv. + MARTe::uint32 *modulation; + // Input signal for pause signal set pv. + MARTe::uint32 *pauseSet; + + // Output signal to which the output value will be written. + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + // Added for HVPS state (20201117) + MARTe::uint32 *outputAPSHVON; + MARTe::uint32 *outputAPSSWON; + MARTe::uint32 *outputBPSHVON; + MARTe::uint32 *outputBPSSWON; + MARTe::uint32 *outputMHVPSON; + + // Output signals for NI devices + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + MARTe::uint64 apsSwonHighResolutionTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + + // terminal values + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.cpp b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.cpp new file mode 100644 index 0000000..71c7669 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.cpp @@ -0,0 +1,402 @@ +/** + * @file JARTStateMachineGAM.cpp + * @brief Source file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JARTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +static MARTe::uint64 getCurrentTimeUs() { + using namespace MARTe; + return static_cast(HighResolutionTimer::Counter() * HighResolutionTimer::Period() * 1e6f + 0.5f); +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARTStateMachineGAM::JARTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + turn_off_delay = 2000; //us + + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + + apsSwonHighResolutionTime = 0; + + aps_hvon_state=0; + aps_swon_state=0; + mhvps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; +} + +JARTStateMachineGAM::~JARTStateMachineGAM() { +} + +bool JARTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JARTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JARTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 11u); + if (ok) { + ok = (numberOfOutputSignals == 16u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined %d",numberOfOutputSignals); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(10)); + + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + + outputAPSHVON = reinterpret_cast(GetOutputSignalMemory(8)); + outputAPSSWON = reinterpret_cast(GetOutputSignalMemory(9)); + outputBPSHVON = reinterpret_cast(GetOutputSignalMemory(10)); + outputBPSSWON = reinterpret_cast(GetOutputSignalMemory(11)); + outputMHVPSON = reinterpret_cast(GetOutputSignalMemory(12)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(13)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(14)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(15)); + + *shotCounter = 0; + } + return ok; +} + +bool JARTStateMachineGAM::Execute() { + using namespace MARTe; + + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + //REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence at %d.", *currentTime); + plcOnTime = *currentTime; //Save pulse start time. + //*outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS; + } + } + else if (currentState == SwitchingHVPS) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; bps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + *outputBPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; aps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal at %d.", *currentTime); + *outputAPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; bps_swon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + *outputBPSSWON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; mhvps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + *outputMHVPSON=1; + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (plcOnTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; aps_swon_state=1; + apsSwonHighResolutionTime = getCurrentTimeUs(); + apsSwonTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + *outputAPSSWON=1; + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 1; + } + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 1; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *outputBeamON = 1; + *shotCounter += 1; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //Action in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + //debug + //if((*stopRequest != 0)){ + //REPORT_ERROR(ErrorManagement::Debug, "Stop request was called.!!!"); + //} else { + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset.!!!"); + //} + *outputSignal -= aps_swon; + mhvps_hvon_is_on = false; mhvps_hvon_state=0; + aps_hvon_is_on = false; aps_hvon_state=0; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; bps_hvon_state=0; + bps_swon_is_on = false; bps_swon_state=0; + currentState = HVTerminate; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + } + uint32 updatePeriod = 100; // in microsecnds (get this from Timer) + if ((*modePulseLengthLimit == 1u) || (getCurrentTimeUs() + updatePeriod >= (apsSwonHighResolutionTime + *triggerDelay_shotlen))) { + + // Now we do busy wait + while (getCurrentTimeUs() < (apsSwonHighResolutionTime + *triggerDelay_shotlen)) { + //REPORT_ERROR(ErrorManagement::Debug, "!"); + } + // We stop busy waiting #executionOverhead before expected pulse off time + //debug + //if((*modePulseLengthLimit == 1u)){ + // REPORT_ERROR(ErrorManagement::Debug, "Mode limit detected.!!!"); + //} else { + // REPORT_ERROR(ErrorManagement::Debug, "Shot length reached to the setpoint.!!!"); + //} + //debug end. + //Do action + *outputSignal -= aps_swon; //Turn off only APS_SWON first. + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; + bps_swon_is_on = false; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + //REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 1; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + //In the HVTerminate state, turn APS_SWON off first, and wait 1ms. Finally turn other PS off. + //Action in this state. + *outputBeamON = 0; + *outputHVArmed = 0; + *outputHVInjection = 0; + *outputRFON = 0; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + mhvps_hvon_state=0; + aps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset. The State was changed to WaitTrigger at %d.", *currentTime); + } + } + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6259 = 1*aps_swon_state; + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + p4Value = 8*mhvps_hvon_state; + //*outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + *outputSignalNI6528P4 = ~p4Value; + return true; +} + +CLASS_REGISTER(JARTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.h b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.h new file mode 100644 index 0000000..e59f3fa --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.h @@ -0,0 +1,260 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARTSTATEMACHINEGAM_H_ +#define GAMS_JARTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that provides real-time state machine. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMRealTimeStateMachine = {
+ *           Class = JARTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BEAM_ON_STAT = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JARTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARTStateMachineGAM(); + + virtual ~JARTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS = 1, + RFON = 2, + HVTerminate = 3 + }; + + //The current rtState + JARealTimeState currentState; + + //A given condition + MARTe::uint32 conditionTrigger; + + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + + //Time signal + MARTe::uint32 *currentTime; + + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for short pulse mode. + MARTe::uint32 *short_pulse_mode; + + // Output signal to which the output value will be written. + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + // Added for HVPS state (20201117) + MARTe::uint32 *outputAPSHVON; + MARTe::uint32 *outputAPSSWON; + MARTe::uint32 *outputBPSHVON; + MARTe::uint32 *outputBPSSWON; + MARTe::uint32 *outputMHVPSON; + + // Output signals for NI devices + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + MARTe::uint64 apsSwonHighResolutionTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + + // terminal values + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/Makefile.inc new file mode 100644 index 0000000..609ad23 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/Makefile.inc @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JARTStateMachineGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JARTStateMachineGAM$(LIBEXT) \ + $(BUILD_DIR)/JARTStateMachineGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/JARampupGAM.cpp b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/JARampupGAM.cpp new file mode 100644 index 0000000..98003a2 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/JARampupGAM.cpp @@ -0,0 +1,295 @@ +/** + * @file JARampupGAM.cpp + * @brief Source file for class JARampupGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARampupGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "AdvancedErrorManagement.h" +#include "JARampupGAM.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARampupGAM::JARampupGAM() : GAM() { + current_setpoint = NULL_PTR(MARTe::float32 *); + target_value = NULL_PTR(MARTe::float32 *); + rampup_time = NULL_PTR(MARTe::float32 *); + start = NULL_PTR(MARTe::uint32 *); + standby = NULL_PTR(MARTe::uint32 *); + isAuto = NULL_PTR(MARTe::uint32 *); + FHPS_PrePro = NULL_PTR(MARTe::float32 *); + + output = NULL_PTR(MARTe::float32 *); + state = NULL_PTR(MARTe::uint32 *); + + rampup_rate = 0.0f; + inRampup = false; + resetFlag = true; + inWaitHVON = false; + inWaitStandby = false; +} + +JARampupGAM::~JARampupGAM() { +} + +bool JARampupGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + return GAM::Initialise(data); +} + +bool JARampupGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 7u); + if (ok) { + ok = (numberOfOutputSignals == 2u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Two output signals shall be defined."); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Six input signals shall be defined."); + } + uint32 currentspvIndex; + uint32 targetvIndex; + uint32 timeIndex; + uint32 startIndex; + uint32 standbyIndex; + uint32 isAutoIndex; + uint32 fhpsPreProIndex; + + if (ok) { + StreamString signalName = "Currspv"; + ok = GetSignalIndex(InputSignals, currentspvIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Currspv input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, currentspvIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Currspv shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Targetv"; + ok = GetSignalIndex(InputSignals, targetvIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Targetv input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, targetvIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Targetv shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Time"; + ok = GetSignalIndex(InputSignals, timeIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Time input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, timeIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Time shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Start"; + ok = GetSignalIndex(InputSignals, startIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Start input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, startIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Start shall be defined as uint32."); + } + } + } + if (ok) { + StreamString signalName = "PLC_STANDBY"; + ok = GetSignalIndex(InputSignals, standbyIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLC_STANDBY input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, standbyIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLC_STANDBY shall be defined as uint32."); + } + } + } + if (ok) { + StreamString signalName = "MANUAL_AUTO"; + ok = GetSignalIndex(InputSignals, isAutoIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "MANUAL_AUTO input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, isAutoIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "MANUAL_AUTO shall be defined as uint32."); + } + } + } + if (ok) { + StreamString signalName = "FHPS_PrePro"; + ok = GetSignalIndex(InputSignals, fhpsPreProIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "FHPS_PrePro input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, fhpsPreProIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal FHPS_PrePro shall be defined as float32."); + } + } + } + + if (ok) { + TypeDescriptor inputType = GetSignalType(OutputSignals, 0); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Output shall be defined as float32."); + } + } + if (ok) { + TypeDescriptor inputType = GetSignalType(OutputSignals, 1); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal state shall be defined as float32."); + } + } + + if (ok) { + current_setpoint = reinterpret_cast(GetInputSignalMemory(currentspvIndex)); + target_value = reinterpret_cast(GetInputSignalMemory(targetvIndex)); + rampup_time = reinterpret_cast(GetInputSignalMemory(timeIndex)); + start = reinterpret_cast(GetInputSignalMemory(startIndex)); + standby = reinterpret_cast(GetInputSignalMemory(standbyIndex)); + isAuto = reinterpret_cast(GetInputSignalMemory(isAutoIndex)); + FHPS_PrePro = reinterpret_cast(GetInputSignalMemory(fhpsPreProIndex)); + + output = reinterpret_cast(GetOutputSignalMemory(0)); + state = reinterpret_cast(GetOutputSignalMemory(1)); + } + return ok; +} + +bool JARampupGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName){ + if(strcmp(nextStateName, "WaitHVON_PREP")==0 || strcmp(nextStateName, "WaitHVON_SDN_PREP")==0 || + strcmp(nextStateName, "WaitHVON")==0 || strcmp(nextStateName, "WaitHVON_SDN")==0){ + inWaitHVON = true; + inWaitStandby = false; + } else{ + inWaitHVON = false; + if(strcmp(nextStateName,"WaitStandby")==0 ){ + inWaitStandby = true; + } else { + inWaitStandby = false; + } + } + return true; +} + +bool JARampupGAM::Execute() { + using namespace MARTe; + if(!inWaitHVON){ + if (*target_value <= 0.0f || *standby == 0u) { + *output = 0.0f; + rampup_rate = 0.0f; + if(*target_value <= 0.0f){ + *state = 3u; + } else { + *state = 0u; + } + return true; + } + + if(*start == 1u && *isAuto==0u){ //isAuto = 1.Manual, 0.auto-rampup. + inRampup = true; + resetFlag = true; + *output = 0.0f; //Enable if it should start always zero. + } + + // Calcrate new rampup rate. + if(*rampup_time != 0 && resetFlag == true){ + rampup_rate = (*target_value - *current_setpoint) / *rampup_time/1000.0f; // Volt/msec + resetFlag = false; + } + + // Update Parameter + if(*standby == 1u ){ + if(*isAuto == 1u){ + if (inWaitStandby){ + *output = *target_value; + } else{ + *output = *FHPS_PrePro; + } + //*output = *target_value; + *state = 0u; + return true; + } + else if (inRampup){ + if (*output + rampup_rate < *target_value && *rampup_time != 0){ + *output = *output + rampup_rate; + *state = 1u; + } else { + *output = *target_value; + *state = 2u; + inRampup = false; + } + } + } + return true; + } else { + if(*isAuto == 0){ + *output = *FHPS_PrePro; + } else{ + *output = *target_value; + } + return true; + } +} + +CLASS_REGISTER(JARampupGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/JARampupGAM.h b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/JARampupGAM.h new file mode 100644 index 0000000..3c6e012 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/JARampupGAM.h @@ -0,0 +1,141 @@ +/** + * @file JARampupGAM.h + * @brief Header file for class JARampupGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARampupGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARampupGAM_H_ +#define GAMS_JARampupGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that rampup output value with specified target value and duration. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *      +FHPSRampupGAM = {
+ *         Class = JARampupGAM
+ *         InputSignals = {
+ *             Currspv = {
+ *                 Alias = FHPS_REF
+ *                 DataSource = DDB1
+ *                 Type = float32
+ *             }
+ *             Targetv = {
+ *                 Alias = FHPS_AUTO_TAGV
+ *                 DataSource = EPICSCAInput
+ *                 Type = float32
+ *             }
+ *             Time = {
+ *                 Alias = FHPS_AUTO_TIME
+ *                 DataSource = EPICSCAInput
+ *                 Type = float32
+ *             }
+ *             Start = {
+ *                 Alias = FHPS_AUTO_START
+ *                 DataSource = EPICSCAInput
+ *                 Type = uint32
+ *             }
+ *         }
+ *         OutputSignals = {
+ *             FHPS_REF = {
+ *                 DataSource = DDB1
+ *                 Type = float32
+ *             }
+ *         }
+ *       }
+ *  
+ * 
+ * + */ + +class JARampupGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARampupGAM(); + + virtual ~JARampupGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + // Input signal containing current current_setpoint + MARTe::float32 *current_setpoint; + + // Input signal containing the frequency of the waveform. + MARTe::float32 *target_value; + + // Input signal containing the amplitude of the waveform. + MARTe::float32 *rampup_time; + + // Input signal containing CCPS_ON_REQUEST + MARTe::uint32 *start; + + // Input signal PLC_STANDBY + MARTe::uint32 *standby; + + // MANUAL AUTO button + MARTe::uint32 *isAuto; + + // Input signal + MARTe::float32 *FHPS_PrePro; + + // Output + MARTe::float32 *output; + // State output + MARTe::uint32 *state; //0:NotOperation, 1:InOperation, 2:Finish, 3:Error + + // Internal variables + MARTe::float32 rampup_rate; + bool inRampup; + bool resetFlag; + bool inWaitHVON; + bool inWaitStandby; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARampupGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/Makefile.inc new file mode 100644 index 0000000..e9ce666 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JARampupGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JARampupGAM$(LIBEXT) \ + $(BUILD_DIR)/JARampupGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.cpp b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.cpp new file mode 100644 index 0000000..d164e89 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.cpp @@ -0,0 +1,361 @@ +/** + * @file JASDNRTStateMachineGAM.cpp + * @brief Source file for class JASDNRTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JASDNRTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JASDNRTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JASDNRTStateMachineGAM::JASDNRTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + sdnTriggerTime = 0; + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + sdnCommand = NULL_PTR(MARTe::uint16 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; +} + +JASDNRTStateMachineGAM::~JASDNRTStateMachineGAM() { +} + +bool JASDNRTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JASDNRTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JASDNRTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 11u); + if (ok) { + ok = (numberOfOutputSignals == 8u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit || inputType == UnsignedInteger16Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint16", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + sdnCommand = reinterpret_cast(GetInputSignalMemory(10)); + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + *shotCounter = 0; + } + return ok; +} + +bool JASDNRTStateMachineGAM::Execute() { + using namespace MARTe; + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence in SDN mode."); + plcOnTime = *currentTime; //Save pulse start time. + *outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS_HVON; + } + } + else if (currentState == SwitchingHVPS_HVON) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal -= aps_swon; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal."); + } + + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 0; + currentState = WaitSDNTrigger; + } + + } + else if (currentState == WaitSDNTrigger) { + + // Action in this state + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + + // State change conditions + if (*sdnCommand == 1){ + sdnTriggerTime = *currentTime; + currentState = SwitchingHVPS_SWON; + } + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + } + else if (currentState == SwitchingHVPS_SWON) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + + if (*currentTime >= (sdnTriggerTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + } + if (*currentTime >= (sdnTriggerTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (sdnTriggerTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; + apsSwonTime = *currentTime; + REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 0; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *shotCounter += 1; + REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //SDN command processing. + if (*sdnCommand == 4 && aps_swon_is_on) { + *outputSignal -= aps_swon; + aps_swon_is_on = false; + REPORT_ERROR(ErrorManagement::Debug, "sdn command was 4"); + } + if (*sdnCommand == 3 && !aps_swon_is_on) { + *outputSignal += aps_swon; + aps_swon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "sdn command was 3"); + } + + //Action in this state. + if ((*sdnCommand == 2) || (*modePulseLengthLimit == 1u) || (*currentTime >= (sdnTriggerTime + *triggerDelay_aps_swon + *triggerDelay_shotlen))) { + REPORT_ERROR(ErrorManagement::Debug, "shotlen: %d", *triggerDelay_shotlen); + if (*sdnCommand == 2) { + REPORT_ERROR(ErrorManagement::Information, "sdn command was 2"); + } else if (*currentTime >= (sdnTriggerTime + *triggerDelay_aps_swon + *triggerDelay_shotlen)){ + REPORT_ERROR(ErrorManagement::Information, "pulse length reached setpoint."); + } + //Do action + *outputSignal -= aps_swon; //Turn off only aps_swon + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 0; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + REPORT_ERROR(ErrorManagement::Information, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + + //Action in this state. + *outputBeamON = 1; + *outputHVArmed = 1; + *outputHVInjection = 1; + *outputRFON = 1; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + REPORT_ERROR(ErrorManagement::Debug, "state was changed to WaitTrigger"); + } + } + + return true; +} + +CLASS_REGISTER(JASDNRTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.h b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.h new file mode 100644 index 0000000..91b4199 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.h @@ -0,0 +1,250 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JASDNRTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JASDNRTSTATEMACHINEGAM_H_ +#define GAMS_JASDNRTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM provides real-time state machine that communicate with SDN packet. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMSDNRealTimeStateMachine = {
+ *           Class = JASDNRTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               Command = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint16
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   //DataSource = NI6259
+ *                   DataSource = Display
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BeamON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * + */ + +class JASDNRTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JASDNRTStateMachineGAM(); + + virtual ~JASDNRTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS_HVON = 1, + WaitSDNTrigger = 2, + SwitchingHVPS_SWON = 3, + RFON = 4, + HVTerminate = 5 + }; + + //The current rtState + JARealTimeState currentState; + + ///////////////////////////////////////////////// + // Static parameter given by cfg File + ///////////////////////////////////////////////// + //A given condition + MARTe::uint32 conditionTrigger; + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + ///////////////////////////////////////////////// + // Input signals + ///////////////////////////////////////////////// + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + //Time signal (Time from TimerGAM) + MARTe::uint32 *currentTime; + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for SDN commands. + MARTe::uint16 *sdnCommand; + + ///////////////////////////////////////////////////////////// + // Output signal to which the output value will be written. + ///////////////////////////////////////////////////////////// + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //SDN trigger command arrival time. + MARTe::uint32 sdnTriggerTime; + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JASDNRTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/Makefile.inc new file mode 100644 index 0000000..0ddfbdf --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JASDNRTStateMachineGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JASDNRTStateMachineGAM$(LIBEXT) \ + $(BUILD_DIR)/JASDNRTStateMachineGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/JASampleGAM.cpp b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/JASampleGAM.cpp new file mode 100644 index 0000000..62ab62d --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/JASampleGAM.cpp @@ -0,0 +1,177 @@ +/** + * @file JASampleGAM.cpp + * @brief Source file for class JASampleGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JASampleGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JASampleGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JASampleGAM::JASampleGAM() { + // initialize member variables. + param1 = 0; + param2 = 0; + + //Input signals. + input1 = NULL_PTR(MARTe::uint32 *); + input2 = NULL_PTR(MARTe::float32 *); + //Output signals. + output1= NULL_PTR(MARTe::uint32 *); + output2 = NULL_PTR(MARTe::float32 *); + +} + +JASampleGAM::~JASampleGAM() { +} + +bool JASampleGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("param1", param1); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The param1 shall be specified"); + } + } + if (ok) { + ok = data.Read("param2", param2); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The param2 shall be specified"); + } + } + return ok; +} + +bool JASampleGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JASampleGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == 2u); + if (ok) { + ok = (numberOfOutputSignals == 2u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Two output signals shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Two input signals shall be defined"); + } + // Do type check for input signals. + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = ((inputType == UnsignedInteger32Bit) || (inputType == Float32Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or flaot32", signalName.Buffer()); + } + + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = ((outputType == UnsignedInteger32Bit) || (outputType == Float32Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or float32", signalName.Buffer()); + } + } + } + + // Signal id can get by signal name in configuration file + if (ok) { + StreamString signalName = "InputXXX"; //Variable name in configuration file. + uint32 signalxxxIndex; //Index is copied to this variable by using signal name. + ok = GetSignalIndex(InputSignals, signalxxxIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "InputXXX input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, signalxxxIndex); + ok = (inputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, signalxxxIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } else { + inputXXX = reinterpret_cast(GetInputSignalMemory(signalxxxIndex)); + } + } + } + + // Do type cast. with explicit signal id. + if (ok) { + input1 = reinterpret_cast(GetInputSignalMemory(0)); + input2 = reinterpret_cast(GetInputSignalMemory(1)); + + output1 = reinterpret_cast(GetOutputSignalMemory(0)); + output2 = reinterpret_cast(GetOutputSignalMemory(1)); + + } + return ok; +} + +bool JASampleGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + REPORT_ERROR(ErrorManagement::Information, "input1 is %d.", *input1); + REPORT_ERROR(ErrorManagement::Information, "input2 is %f.", *input2); + REPORT_ERROR(ErrorManagement::Information, "inputXXX is %f.", *inputXXX); + + REPORT_ERROR(ErrorManagement::Information, "maltiply param value to input."); + + *output1 = *input1 * param1; + *output2 = *input2 * param2; + + REPORT_ERROR(ErrorManagement::Information, "output1 is %d.", *output1); + REPORT_ERROR(ErrorManagement::Information, "output2 is %f.", *output2); + + return true; +} + +CLASS_REGISTER(JASampleGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/JASampleGAM.h b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/JASampleGAM.h new file mode 100644 index 0000000..53f06ad --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/JASampleGAM.h @@ -0,0 +1,122 @@ +/** + * @file JASampleGAM.h + * @brief Header file for class JASampleGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JASampleGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JASampleGAM_H_ +#define GAMS_JASampleGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +/** + * @brief GAM Sample Usage. + * @details Sample + * + * The configuration syntax is: + * + *
+ * +SampleGAM = {
+ *     Class = JASampleGAM
+ *     InputSignals = {
+ *         Input1 = {
+ *             DataSource = "DDB"
+ *             Type = uint32
+ *             Default = 0
+ *         }
+ *         Input2 = {
+ *             DataSource = "DDB"
+ *             Type = float32
+ *             Default = 100
+ *         }
+ *         InputXXX = {
+ *             DataSource = "DDB"
+ *             Type = float32
+ *             NumberOfElements = 1
+ *         }
+ *     }
+ *     OutputSignals = {
+ *         Output1 = {
+ *             DataSource = "DDB"
+ *             Type = uint32
+ *             Default = 0
+ *         }
+ *         Output2 = {
+ *             DataSource = "DDB"
+ *             Type = int32
+ *             Default = 100
+ *         }
+ *     }
+ * }
+ * 
+ */ + + +class JASampleGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JASampleGAM(); + + virtual ~JASampleGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //GAM fixed parameters. + MARTe::uint32 param1; + MARTe::float32 param2; + + // Input signals + MARTe::uint32 *input1; + MARTe::float32 *input2; + MARTe::float32 *inputXXX; + + // Output signals + MARTe::uint32 *output1; + MARTe::float32 *output2; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JASampleGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/Makefile.inc new file mode 100644 index 0000000..c9bc4f2 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JARTSampleGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JARTSampleGAM$(LIBEXT) \ + $(BUILD_DIR)/JARTSampleGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.cpp b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.cpp new file mode 100644 index 0000000..3ab70d0 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.cpp @@ -0,0 +1,188 @@ +/** + * @file JASourceChoiseGAM.cpp + * @brief Source file for class JASourceChoiseGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JASourceChoiseGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JASourceChoiseGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JASourceChoiseGAM::JASourceChoiseGAM() { + // initialize member variables. + numberOfPVs = 0; +} + +JASourceChoiseGAM::~JASourceChoiseGAM() { +} + +bool JASourceChoiseGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("numberOfPVs", numberOfPVs); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The numberOfPVs parameter shall be specified"); + } + } + return ok; +} + +bool JASourceChoiseGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JASourceChoiseGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == numberOfPVs*3u); + if (ok) { + ok = (numberOfOutputSignals == numberOfPVs); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "%d *3 output signals shall be defined", numberOfPVs); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "%d input signals shall be defined", numberOfPVs); + } + // Do type check for input signals. + int int_num = 0; + int float_num = 0; + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + if(inputType == UnsignedInteger32Bit){ + int_num++; + } else if (inputType == Float32Bit) { + float_num++; + } else { + ok = false; + }; + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or flaot32", signalName.Buffer()); + } + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = ((outputType == UnsignedInteger32Bit) || (outputType == Float32Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or float32", signalName.Buffer()); + } + } + } + // Set memory + inputUInt32.resize(numberOfPVs*2); + inputFloat32.resize(numberOfPVs*2); + choise.resize(numberOfPVs); + outputUInt32.resize(numberOfPVs); + outputFloat32.resize(numberOfPVs); + + prevUInt32.resize(numberOfPVs*2); + prevFloat32.resize(numberOfPVs*2); + + if(ok){ + for(uint32 i=0; i(GetInputSignalMemory(3*i)); + inputUInt32[2*i+1] = reinterpret_cast(GetInputSignalMemory(3*i+1)); + choise[i] = reinterpret_cast(GetInputSignalMemory(3*i+2)); + outputUInt32[i] = reinterpret_cast(GetOutputSignalMemory(i)); + } else if(inputType == Float32Bit){ + inputFloat32[2*i] = reinterpret_cast(GetInputSignalMemory(3*i)); + inputFloat32[2*i+1] = reinterpret_cast(GetInputSignalMemory(3*i+1)); + choise[i] = reinterpret_cast(GetInputSignalMemory(3*i+2)); + outputFloat32[i] = reinterpret_cast(GetOutputSignalMemory(i)); + } + prevUInt32[2*i] = 0; + prevUInt32[2*i+1] = 0; + prevFloat32[2*i] = 0; + prevFloat32[2*i+1] = 0; + } + } + return ok; +} + +bool JASourceChoiseGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + + for (uint32 i=0; i < numberOfPVs; i++){ + if(*choise[i]==0){ + if(outputUInt32[i]){ + if(prevUInt32[i*2] != *inputUInt32[i*2]){ + *outputUInt32[i] = *inputUInt32[i*2]; + prevUInt32[i*2] = *inputUInt32[i*2]; + prevUInt32[1+i*2] = *inputUInt32[1+i*2]; + } + } else if(outputFloat32[i]){ + if(prevFloat32[i*2] != *inputFloat32[i*2]){ + *outputFloat32[i] = *inputFloat32[i*2]; + prevFloat32[i*2] = *inputFloat32[i*2]; + prevFloat32[1+i*2] = *inputFloat32[1+i*2]; + } + } + } else { + if(outputUInt32[i]){ + if(prevUInt32[1+i*2] != *inputUInt32[1+i*2]){ + *outputUInt32[i] = *inputUInt32[1+i*2]; + prevUInt32[i*2] = *inputUInt32[i*2]; + prevUInt32[1+i*2] = *inputUInt32[1+i*2]; + } + } else if (outputFloat32[i]){ + if(prevFloat32[1+i*2] != *inputFloat32[1+i*2]){ + *outputFloat32[i] = *inputFloat32[1+i*2]; + prevFloat32[i*2] = *inputFloat32[i*2]; + prevFloat32[1+i*2] = *inputFloat32[1+i*2]; + } + } + } + } + return true; +} + +CLASS_REGISTER(JASourceChoiseGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.h b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.h new file mode 100644 index 0000000..2a4cd80 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.h @@ -0,0 +1,84 @@ +/** + * @file JASourceChoiseGAM.h + * @brief Header file for class JASourceChoiseGAM + * @date Mar 04, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JASourceChoiseGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JASourceChoiseGAM_H_ +#define GAMS_JASourceChoiseGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +class JASourceChoiseGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JASourceChoiseGAM(); + + virtual ~JASourceChoiseGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + //GAM fixed parameters. + MARTe::uint32 numberOfPVs; + + // Input signals + std::vector inputUInt32; + std::vector inputFloat32; + std::vector choise; + + // Output signals + std::vector outputUInt32; + std::vector outputFloat32; + + // Previous Input value + std::vector prevUInt32; + std::vector prevFloat32; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JASourceChoiseGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/Makefile.inc new file mode 100644 index 0000000..cf441bb --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JASourceChoiseGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JASourceChoiseGAM$(LIBEXT) \ + $(BUILD_DIR)/JASourceChoiseGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.cpp b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.cpp new file mode 100644 index 0000000..1d3f9c1 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.cpp @@ -0,0 +1,206 @@ +/** + * @file JATerminalInterfaceGAM.cpp + * @brief Source file for class JATerminalInterfaceGAM + * @date Feb 19, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JATerminalInterfaceGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JATerminalInterfaceGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JATerminalInterfaceGAM::JATerminalInterfaceGAM() { + + // Fixed GAM input + aps_hvon_term = 0; + + // Parameters which get from Input signals. + mhvps_hvon = NULL_PTR(MARTe::uint32 *); + aps_hvon = NULL_PTR(MARTe::uint32 *); + aps_swon = NULL_PTR(MARTe::uint32 *); + bps_hvon = NULL_PTR(MARTe::uint32 *); + bps_swon = NULL_PTR(MARTe::uint32 *); + + stateMachineOutput = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignalNI6259 = NULL_PTR(MARTe::uint32 *); + outputSignalNI6528P3 = NULL_PTR(MARTe::uint8 *); + outputSignalNI6528P4 = NULL_PTR(MARTe::uint8 *); + + aps_hvon_state = 0; + aps_swon_state = 0; + mhvps_hvon_state = 0; + bps_hvon_state = 0; + bps_swon_state = 0; + p3Value = 0; + p4Value = 0; +} + +JATerminalInterfaceGAM::~JATerminalInterfaceGAM() { +} + +bool JATerminalInterfaceGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("mhvps_hvon_term", mhvps_hvon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon_term", aps_hvon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon_term", aps_swon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon_term", bps_hvon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon_term", bps_swon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon_term shall be specified"); + } + } + return ok; +} + +bool JATerminalInterfaceGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JATerminalInterfaceGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 9u); + if (ok) { + ok = (numberOfOutputSignals == 3u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Three output signals shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit || inputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint8", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint8", signalName.Buffer()); + } + } + } + if (ok) { + //mhvps_manm = reinterpret_cast(GetInputSignalMemory(0)); + mhvps_hvon = reinterpret_cast(GetInputSignalMemory(0)); + //aps_manm = reinterpret_cast(GetInputSignalMemory(2)); + aps_hvon = reinterpret_cast(GetInputSignalMemory(1)); + aps_swon = reinterpret_cast(GetInputSignalMemory(2)); + //bps_manm = reinterpret_cast(GetInputSignalMemory(5)); + bps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + bps_swon = reinterpret_cast(GetInputSignalMemory(4)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(5)); + stateMachineOutput = reinterpret_cast(GetInputSignalMemory(6)); + ni6528p3Value = reinterpret_cast(GetInputSignalMemory(7)); + ni6528p4Value = reinterpret_cast(GetInputSignalMemory(8)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(0)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(1)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(2)); + + } + return ok; +} + +bool JATerminalInterfaceGAM::Execute() { + using namespace MARTe; + uint8 sm = *stateMachineOutput; + + + //Update HVPS state + aps_hvon_state = ((sm >> (0))&1); + aps_swon_state = ((sm >> (4))&1); + mhvps_hvon_state = ((sm >> (2))&1); + bps_hvon_state = ((sm >> (1))&1); + bps_swon_state = ((sm >> (3))&1); + + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state; + *outputSignalNI6259 = 1*aps_swon_state; + //uint8 ni6528p3ValueTemp = 0;//*ni6528p3Value; + //ni6528p3ValueTemp &= ~(1<<2); //Does not turn on ni6258 aps switch + //Update terminal value + //*outputSignalNI6528P3 = ~(ni6528p3ValueTemp | p3Value); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + + p4Value = 8*mhvps_hvon_state; + *outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + return true; +} + +CLASS_REGISTER(JATerminalInterfaceGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.h b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.h new file mode 100644 index 0000000..773cbd6 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.h @@ -0,0 +1,157 @@ +/** + * @file JATerminalInterfaceGAM.h + * @brief Header file for class JATerminalInterfaceGAM + * @date Feb 19, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JATerminalInterfaceGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JATerminalInterfaceGAM_H_ +#define GAMS_JATerminalInterfaceGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM calculates one output value by comparing input value and fixed parameters. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ * 
+ *         +terminalInterfaceGAM = {
+ *           Class = JATerminalInterfaceGAM
+ *           mhvps_hvon_term = 4
+ *           aps_hvon_term = 1
+ *           aps_swon_term = 16
+ *           bps_hvon_term = 2
+ *           bps_swon_term = 8
+ *           InputSignals = {
+ *               MHVPS_HVON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = NI6259
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JATerminalInterfaceGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JATerminalInterfaceGAM(); + + virtual ~JATerminalInterfaceGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + // Fixed GAM input + MARTe::uint32 mhvps_hvon_term; + MARTe::uint32 aps_hvon_term; + MARTe::uint32 aps_swon_term; + MARTe::uint32 bps_hvon_term; + MARTe::uint32 bps_swon_term; + + // Input signals + //MARTe::uint32 *mhvps_manm; + MARTe::uint32 *mhvps_hvon; + + //MARTe::uint32 *aps_manm; + MARTe::uint32 *aps_hvon; + MARTe::uint32 *aps_swon; + + //MARTe::uint32 *bps_manm; + MARTe::uint32 *bps_hvon; + MARTe::uint32 *bps_swon; + + MARTe::uint32 *short_pulse_mode; + + MARTe::uint32 *stateMachineOutput; + MARTe::uint8 *ni6528p3Value; + MARTe::uint8 *ni6528p4Value; + + // Output signals + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JATerminalInterfaceGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/Makefile.inc new file mode 100644 index 0000000..ff7c79a --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JATerminalInterfaceGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JATerminalInterfaceGAM$(LIBEXT) \ + $(BUILD_DIR)/JATerminalInterfaceGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.cpp b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.cpp new file mode 100644 index 0000000..7004a1f --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.cpp @@ -0,0 +1,178 @@ +/** + * @file JATriangleWaveGAM.cpp + * @brief Source file for class JATriangleWaveGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JATriangleWaveGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "AdvancedErrorManagement.h" +#include "JATriangleWaveGAM.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +MARTe::float32 absFloat(MARTe::float32 x) { + if (x < 0.0f) { + return -x; + } + return x; +} + +JATriangleWaveGAM::JATriangleWaveGAM() { + frequency = NULL_PTR(MARTe::float32 *); + amplitude = NULL_PTR(MARTe::float32 *); + offset = NULL_PTR(MARTe::float32 *); + plcStandby = NULL_PTR(MARTe::uint32 *); + waveOutput = NULL_PTR(MARTe::float32 *); + time = 0.0f; +} + +JATriangleWaveGAM::~JATriangleWaveGAM() { +} + +bool JATriangleWaveGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + return GAM::Initialise(data); +} + +bool JATriangleWaveGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 4u); + if (ok) { + ok = (numberOfOutputSignals == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "One output signal shall be defined."); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Four input signals shall be defined."); + } + uint32 freqIndex; + uint32 ampIndex; + uint32 offsetIndex; + uint32 plcStandbyIndex; + if (ok) { + StreamString signalName = "Frequency"; + ok = GetSignalIndex(InputSignals, freqIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Frequency input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, freqIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Frequency shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Amplitude"; + ok = GetSignalIndex(InputSignals, ampIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Amplitude input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, ampIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Amplitude shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Offset"; + ok = GetSignalIndex(InputSignals, offsetIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Offset input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, offsetIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Offset shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "PLCSTANDBY"; + ok = GetSignalIndex(InputSignals, plcStandbyIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLCSTANDBY input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, plcStandbyIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLCSTANDBY shall be defined as uint32."); + } + } + } + if (ok) { + TypeDescriptor inputType = GetSignalType(OutputSignals, 0); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Amplitude shall be defined as float32."); + } + } + if (ok) { + frequency = reinterpret_cast(GetInputSignalMemory(freqIndex)); + amplitude = reinterpret_cast(GetInputSignalMemory(ampIndex)); + offset = reinterpret_cast(GetInputSignalMemory(offsetIndex)); + plcStandby = reinterpret_cast(GetInputSignalMemory(plcStandbyIndex)); + waveOutput = reinterpret_cast(GetOutputSignalMemory(0)); + } + return ok; +} + +bool JATriangleWaveGAM::Execute() { + using namespace MARTe; + // If frequency is not set, output 0. + if (*frequency <= 0.0f || *plcStandby == 0u) { + *waveOutput = 0.0f; + return true; + } + // Increase the current time. + ++time; + // Calculate the period in milliseconds + float32 periodMs = 1000.0 / *frequency; + // Make sure the time is on [0, periodMs] interval. + while (time > periodMs) { + time -= periodMs; + } + // Formula: + // f(x) = |x - 0.5| * 2 * amplitude + // where x is between 0 and 1 + *waveOutput = absFloat((time / periodMs) - 0.5f) * 2.0f * (*amplitude) + *offset; + return true; +} + +CLASS_REGISTER(JATriangleWaveGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.h b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.h new file mode 100644 index 0000000..22e34c3 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.h @@ -0,0 +1,130 @@ +/** + * @file JATriangleWaveGAM.h + * @brief Header file for class JATriangleWaveGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JATriangleWaveGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JATRIANGLEWAVEGAM_H_ +#define GAMS_JATRIANGLEWAVEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM provides triangular waveform output within 1kHz thread. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *      +CCPSWaveformGAM = {
+ *           Class = JATriangleWaveGAM
+ *           InputSignals = {
+ *               Offset = {
+ *                   Alias = OFFSET
+ *                   DataSource = EPICSCAInput
+ *                   Type = float32
+ *               }
+ *               Frequency = {
+ *                   Alias = CCPS_OUTPUT_FREQ
+ *                   DataSource = EPICSCAInput
+ *                   Type = float32
+ *               }
+ *               Amplitude = {
+ *                   Alias = CCPS_OUTPUT_AMP
+ *                   DataSource = EPICSCAInput
+ *                   Type = float32
+ *               }
+ *               PLCCCPSON = {
+ *                   Alias = PLC_CCPSON
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+  *              READY = {
+ *                   Alias = PLC_READY
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               CCPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JATriangleWaveGAM : public MARTe::GAM { +public: + CLASS_REGISTER_DECLARATION() + + JATriangleWaveGAM(); + + virtual ~JATriangleWaveGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); +private: + // Input signal containing the frequency of the waveform. + MARTe::float32 *frequency; + + // Input signal containing the amplitude of the waveform. + MARTe::float32 *amplitude; + + // Input signal cantaining the offset of the waveform. + MARTe::float32 *offset; + + // Input signal containing CCPS_ON_REQUEST + //MARTe::uint32 *plcccpson; + + // Input signal condition CCPS_READY + //MARTe::uint32 *plcReady; + + // Input signal condition CCPS_STANDBY + MARTe::uint32 *plcStandby; + + MARTe::float32 *waveOutput; + + MARTe::float32 time; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JATRIANGLEWAVEGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/Makefile.inc new file mode 100644 index 0000000..2e2dfed --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/Makefile.inc @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JATriangleWaveGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JATriangleWaveGAM$(LIBEXT) \ + $(BUILD_DIR)/JATriangleWaveGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/JAWFRecordGAM.cpp b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/JAWFRecordGAM.cpp new file mode 100644 index 0000000..b26b6bd --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/JAWFRecordGAM.cpp @@ -0,0 +1,317 @@ +/** + * @file JAWFRecordGAM.cpp + * @brief Source file for class JAWFRecordGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAWFRecordGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAWFRecordGAM.h" + +#include "AdvancedErrorManagement.h" +#include "CLASSMETHODREGISTER.h" +#include "File.h" +#include "MessageI.h" +#include "RegisteredMethodsMessageFilter.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +// How often output signals are updated. +const MARTe::uint32 cycleMs = 10u; + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAWFRecordGAM::JAWFRecordGAM() : + GAM() { + filenameSignalIndex = 0u; + timeSignal = NULL_PTR(MARTe::int32 *); + loadTriggerSignal = NULL_PTR(MARTe::uint32 *); + valueSignals = NULL_PTR(MARTe::float32 **); + maxElements = 0u; + readOnce = true; +} + +JAWFRecordGAM::~JAWFRecordGAM() { + if (valueSignals != NULL_PTR(MARTe::float32 **)) { + delete[] valueSignals; + } +} + +bool JAWFRecordGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("Directory", directory); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Directory shall be specified"); + } + } + return ok; +} + +bool JAWFRecordGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 2u); + if (ok) { + ok = (numberOfOutputSignals > 1u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "At least two output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Two input signal with the filename and file load trigger shall be defined"); + } + if (ok) { + StreamString signalName = "Filename"; + ok = GetSignalIndex(InputSignals, filenameSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Filename input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, filenameSignalIndex); + ok = (inputType == CharString); + if (!ok) { + ok = (inputType == Character8Bit); + } + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, filenameSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as string", signalName.Buffer()); + } + } + } + if (ok) { + StreamString signalName = "CSV_LOAD"; + uint32 loadSignalIndex; + ok = GetSignalIndex(InputSignals, loadSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "CSV_LOAD input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, loadSignalIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, loadSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } else { + loadTriggerSignal = reinterpret_cast(GetInputSignalMemory(loadSignalIndex)); + } + } + } + if (ok) { + TypeDescriptor timeType = GetSignalType(OutputSignals, 0); + + ok = (timeType == SignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, 0, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as int32", signalName.Buffer()); + } + + uint32 i; + for (i = 1u; (i < numberOfOutputSignals) && (ok); i++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, i); + ok = (outputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, i, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } + else { + uint32 dimentionsCount; + ok = GetSignalNumberOfDimensions(OutputSignals, 0u, dimentionsCount); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Output signals shall have 1 dimension."); + } + else { + uint32 elementsCount; + ok = GetSignalNumberOfElements(OutputSignals, 0u, elementsCount); + if (maxElements == 0) { + maxElements = elementsCount; + } + else { + ok = (maxElements == elementsCount); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Output signals shall have consistent number of elements."); + } + } + } + } + } + } + if (ok) { + valueSignals = new float32*[numberOfOutputSignals - 1u]; + uint32 i; + for (i = 1u; i < numberOfOutputSignals; i++) { + valueSignals[i - 1] = reinterpret_cast(GetOutputSignalMemory(i)); + } + timeSignal = reinterpret_cast(GetOutputSignalMemory(0)); + } + return ok; +} + +bool JAWFRecordGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + if (strcmp(nextStateName, "WaitReady") == 0) { + // Reset read once flag when reentering WaitReady state. + readOnce = true; + } + return true; +} + +void JAWFRecordGAM::LoadFile() { + using namespace MARTe; + + bool ok = true; + + const char8 * const filenameSignal = reinterpret_cast(GetInputSignalMemory(filenameSignalIndex)); + StreamString filename = directory; + filename += DIRECTORY_SEPARATOR; + filename += filenameSignal; + REPORT_ERROR(ErrorManagement::Debug, "Opening file %s", filename.Buffer()); + + File f; + ok = f.Open(filename.Buffer(), BasicFile::ACCESS_MODE_R); + + uint32 numberOfPreProgrammedTimeRows = 0u; + int32 *preProgrammedTime; + float32 **preProgrammedValues; + uint32 numberOfPreProgrammedValues = 0u; + + if (ok) { + StreamString tokenLine; + while (f.GetLine(tokenLine)) { + if (tokenLine[0] != '#') { + numberOfPreProgrammedTimeRows++; + } + tokenLine = ""; + } + f.Seek(0); + uint32 t = 0u; + tokenLine = ""; + while ((ok) && (f.GetLine(tokenLine))) { + if (tokenLine[0] == '#') { + tokenLine = ""; + continue; + } + if (numberOfPreProgrammedValues == 0) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + while (tokenLine.GetToken(token, ",", ignored)) { + numberOfPreProgrammedValues++; + token = ""; + } + ok = numberOfPreProgrammedValues == numberOfOutputSignals; + // Remove time from pre-programmed values count. + numberOfPreProgrammedValues -= 1u; + if (ok) { + preProgrammedTime = new int32[maxElements]; + memset(preProgrammedTime, 0, maxElements * sizeof(int32)); + preProgrammedValues = new float32*[numberOfPreProgrammedValues]; + uint32 j; + for (j = 0u; j < numberOfPreProgrammedValues; j++) { + preProgrammedValues[j] = new float32[maxElements]; + memset(preProgrammedValues[j], 0, maxElements * sizeof(float32)); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Number of columns in csv file (%d) is not consistent with the number of output signals (%d)", numberOfPreProgrammedValues, + numberOfOutputSignals - 1u); + } + } + if (ok) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + uint32 idx = 0u; + while (tokenLine.GetToken(token, ",", ignored)) { + if (idx == 0u) { + preProgrammedTime[t] = atoi(token.Buffer()); + } + else { + ok = ((idx - 1) < numberOfPreProgrammedValues); + if (ok) { + preProgrammedValues[idx - 1][t] = static_cast(atof(token.Buffer())); + } + else { + REPORT_ERROR(ErrorManagement::FatalError, "Number of columns in csv file is not consistent with the number of output signals in line %d", t); + } + } + token = ""; + idx++; + } + t++; + } + tokenLine = ""; + } + f.Close(); + } else { + REPORT_ERROR(ErrorManagement::Debug, "Cannot open the file %s", filename.Buffer()); + return; + } + if (numberOfPreProgrammedTimeRows > maxElements) { + REPORT_ERROR(ErrorManagement::Warning, "Only %d (out of %d) of pre-programmed values will be written to waveform record.", + maxElements, numberOfPreProgrammedTimeRows); + } + ok = MemoryOperationsHelper::Copy(timeSignal, preProgrammedTime, maxElements * sizeof(int32)); + uint32 i; + for (i = 0u; (i < numberOfPreProgrammedValues) && (ok); ++i) { + ok = MemoryOperationsHelper::Copy(valueSignals[i], preProgrammedValues[i], maxElements * sizeof(float32)); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::Warning, "Failed to write data to waveform record."); + } + + if (preProgrammedValues != NULL_PTR(float32 **)) { + uint32 i; + for (i = 0u; i < numberOfPreProgrammedValues; i++) { + delete preProgrammedValues[i]; + } + delete[] preProgrammedValues; + } + if (preProgrammedTime != NULL_PTR(int32 *)) { + delete[] preProgrammedTime; + } +} + +bool JAWFRecordGAM::Execute() { + if (*loadTriggerSignal == 1u) { + if (readOnce) { + LoadFile(); + readOnce = false; + } + } else { + // Reset read once flag when loadTriggerSignal is reset. + readOnce = true; + } + return true; +} + +CLASS_REGISTER(JAWFRecordGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/JAWFRecordGAM.h b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/JAWFRecordGAM.h new file mode 100644 index 0000000..ee22c1a --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/JAWFRecordGAM.h @@ -0,0 +1,130 @@ +/** + * @file JAWFRecordGAM.h + * @brief Header file for class JAWFRecordGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAWFRecordGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAWFRECORDGAM_H_ +#define GAMS_JAWFRECORDGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include "Message.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that is used for pre-programmed operation. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *       +WFRecordGAM = {
+ *           Class = JAWFRecordGAM
+ *           Directory = "../Configurations" 
+ *           InputSignals = {
+ *               CSV_LOAD = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               Filename = {
+ *                   Alias = CSV_NAME
+ *                   DataSource = EPICSCAInput
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               PREP_TIME_WF = {
+ *                   DataSource = DDB1
+ *               }
+ * *             MHVPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               BPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               APS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               MCPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               GCPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               FHPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *           }
+ *       }
+ * 
+ * + */ + +class JAWFRecordGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAWFRecordGAM(); + + virtual ~JAWFRecordGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + void LoadFile(); + + MARTe::uint32 filenameSignalIndex; + + MARTe::uint32 *loadTriggerSignal; + + MARTe::StreamString directory; + + MARTe::float32 **valueSignals; + + MARTe::int32 *timeSignal; + + MARTe::uint32 maxElements; + + // Flag determining whether file should be read (so it isn't read multiple time) + bool readOnce; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAWFRECORDGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/Makefile.inc new file mode 100644 index 0000000..cd7a5f1 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/Makefile.inc @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAWFRecordGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAWFRecordGAM$(LIBEXT) \ + $(BUILD_DIR)/JAWFRecordGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/Makefile.gcc new file mode 100644 index 0000000..e0a2fc4 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/Makefile.gcc @@ -0,0 +1,26 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +############################################################# + +include Makefile.inc + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/Makefile.inc new file mode 100644 index 0000000..9dfc5c1 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/Makefile.inc @@ -0,0 +1,45 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +SPB = JAMessageGAM.x JAPreProgrammedGAM.x JAModeControlGAM.x \ + JAWFRecordGAM.x JATriangleWaveGAM.x JARampupGAM.x \ + JARTStateMachineGAM.x JASDNRTStateMachineGAM.x JATerminalInterfaceGAM.x \ + JABitSumGAM.x JAConditionalSignalUpdateGAM.x JASourceChoiseGAM.x JABitReverseGAM.x + +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults + +ROOT_DIR=.. +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +all: $(OBJS) $(SUBPROJ) check-env + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + +check-env: +ifndef MARTe2_DIR + $(error MARTe2_DIR is undefined) +endif diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Makefile.inc new file mode 100644 index 0000000..1e256f8 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Makefile.inc @@ -0,0 +1,42 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +SPB = DataSources.x GAMs.x + +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults + +ROOT_DIR=. +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +all: $(OBJS) $(SUBPROJ) check-env + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + +check-env: +ifndef MARTe2_DIR + $(error MARTe2_DIR is undefined) +endif + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Makefile.linux b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Makefile.linux new file mode 100644 index 0000000..04cde43 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Makefile.linux @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +############################################################# +export TARGET=x86-linux + +include Makefile.inc + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/README.md b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/README.md new file mode 100644 index 0000000..2064aac --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/README.md @@ -0,0 +1 @@ +QST Gyrotron Fast Controller Implementation with MARTe2 RT Application Framework diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/Main.sh b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/Main.sh new file mode 100644 index 0000000..b425a77 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/Main.sh @@ -0,0 +1,195 @@ +#!/bin/bash +#Arguments -f FILENAME -m MESSAGE [-d cgdb|strace] -x DAN_CONFIG_LOCATION -r root +#-f FILENAME=MARTe configuration file +#-m MESSAGE=Start message +#-d cgdb=Run with cgdb +#-d strace=Run with strace +#-x DAN_CONFIG_LOCATION=Location of the DANConfig.xml (e.g. ~/Projects/ECJASDN/Configurations/DANTestConfig.xml) +#-r run as root + +#Run with cgdb or strace? +DEBUG="" + +#Consume input arguments +while [[ $# -gt 1 ]] +do +key="$1" + +case $key in + -f|--file) + FILE="$2" + shift # past argument + ;; + -m|--message) + MESSAGE="$2" + shift # past argument + ;; + -s|--state) + STATE="$2" + shift # past argument + ;; + -d|--debug) + DEBUG="$2" + shift # past argument + ;; + -x|--dan_config) + DAN_CONFIG_LOCATION="$2" + shift # past argument + ;; + -i|--dan_ip) + DAN_MASTER_IP="$2" + shift # past argument + ;; + -r|--root) + RUN_AS_ROOT="root" + shift # past argument + ;; + --default) + DEFAULT=YES + ;; + *) + # unknown option + ;; +esac +shift # past argument or value +done + +if [ -z ${MARTe2_DIR+x} ]; then + echo "Please set the MARTe2_DIR environment variable"; + exit; +fi + +if [ -z ${MARTe2_Components_DIR+x} ]; then + #Check if this is a CCS deployment + MARTe2_Components_DIR_CSS=$MARTe2_DIR/Build/x86-linux/Components/ + if [ -d ${MARTe2_Components_DIR_CSS+x} ]; then + MARTe2_Components_DIR=$MARTe2_DIR + else + echo "Please set the MARTe2_Components_DIR environment variable"; + exit; + fi +fi + +echo $MARTe2_Components_DIR + +LD_LIBRARY_PATH=. +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_DIR/Build/x86-linux/Core/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/EPICSCA/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/LinuxTimer/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/LoggerDataSource/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/DAN/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/NI6259/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/NI6368/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/SDN/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/UDP/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/MDSWriter/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/RealTimeThreadAsyncBridge/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/RealTimeThreadSynchronisation/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/FileDataSource/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/IOGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/BaseLib2GAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/ConversionGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/FilterGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/StatisticsGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/WaveformGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/ConstantGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/Interfaces/BaseLib2Wrapper/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/Interfaces/SysLogger/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/Interfaces/EPICS/ +### Add own datasource lib path +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/DataSources/RandomDataSource/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/DataSources/NI6528/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/DataSources/JAEPICSCA/ +### Add own GAM lib path +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/ESDNValidationGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAMessageGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAPreProgrammedGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JACountdownGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAWaitStandbyGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAConditionalSignalUpdateGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JATimerGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAESDNProcessCommandGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAModeControlGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JATimedSignalUpdateGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAHVArmedSyncGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JARFONSyncGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAWFRecordGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JATriangleWaveGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JARampupGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JACounterGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JARTStateMachineGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JASDNRTStateMachineGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JATerminalInterfaceGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JABitSumGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JASourceChoiseGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JABitReverseGAM/ +### Add EPICS lib path +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$EPICS_BASE/lib/$EPICS_HOST_ARCH +#LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/FilterDownsamplingGAM/ +#LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/mdsplus/lib64/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$SDN_CORE_LIBRARY_DIR +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/codac/lib/ + + +echo $LD_LIBRARY_PATH +export LD_LIBRARY_PATH=$LD_LIBRARY_PATH + +#Starts the DAN services only if required +if [ ! -z "$DAN_CONFIG_LOCATION" ]; then + export DAN_ARCHIVE_MASTER=$DAN_MASTER_IP + echo $DAN_MASTER_IP + /opt/codac/bin/danApiTool api close + /opt/codac/bin/danApiTool api init $DAN_CONFIG_LOCATION +fi + +NR_CPUS=16 +#Setup performance +#Disable CPU speed changing +#service cpuspeed stop +#memo:Redirecting to /bin/systemctl stop cpuspeed.service +#memo:Failed to stop cpuspeed.service: Unit cpuspeed.service not loaded. +# + +# Migrate irq to CPU0 +#for D in $(ls /proc/irq) +#do +#if [ -x "/proc/irq/$D" ] && [ $D != "0" ] +#then +# echo $D +# echo 1 > /proc/irq/$D/smp_affinity +#fi +#done + + +#Location of the MARTe2 application loader +MARTe2APP=$MARTe2_DIR/Build/x86-linux/App/MARTeApp.ex + +#Start with cgdb or with strace +if [ "$DEBUG" = "cgdb" ]; then + cgdb --args $MARTe2APP -l RealTimeLoader -f $FILE -m $MESSAGE +elif [ "$DEBUG" = "strace" ]; then + strace -o/tmp/strace.err $MARTe2APP -l RealTimeLoader -f $FILE -m $MESSAGE +else + if [ -z ${RUN_AS_ROOT+x} ]; then + if [ -z ${STATE+x} ]; then + echo "taskset was not used." + sleep 1 + $MARTe2APP -l RealTimeLoader -f $FILE -m $MESSAGE + else + $MARTe2APP -l RealTimeLoader -f $FILE -s $STATE + fi + else + if [ -z ${STATE+x} ]; then + echo "taskset was used." + sleep 1 + taskset 1 $MARTe2APP -l RealTimeLoader -f $FILE -m $MESSAGE + else + taskset 1 $MARTe2APP -l RealTimeLoader -f $FILE -s $STATE + fi + fi +fi + + +if [ ! -z "$DAN_CONFIG_LOCATION" ]; then + /opt/codac/bin/danApiTool api close +fi diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/runECPCSub.sh b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/runECPCSub.sh new file mode 100644 index 0000000..3254982 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/runECPCSub.sh @@ -0,0 +1 @@ +./Main.sh -f ../Configurations/tests/ECPCSubscriber.cfg -l RealTimeLoader -m StateMachine:Start \ No newline at end of file diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/runEPICSTEST.sh b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/runEPICSTEST.sh new file mode 100644 index 0000000..c141074 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/runEPICSTEST.sh @@ -0,0 +1,2 @@ +./Main.sh -f ../Configurations/tests/EPICS_Test.cfg -l RealTimeLoader -m StateMachine:START + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/runHWTEST.sh b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/runHWTEST.sh new file mode 100644 index 0000000..5991673 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/runHWTEST.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +./Main.sh -f ../Configurations/tests/NI6528_NI6259_test.cfg -l RealTimeLoader -m StateMachine:START + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/runMain.sh b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/runMain.sh new file mode 100644 index 0000000..623ae28 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/runMain.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +taskset -c 8-11 ./Main.sh -f ../Configurations/JAGyrotronA_FY19_P1.cfg -l RealTimeLoader -m StateMachine:Start + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/runMainB.sh b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/runMainB.sh new file mode 100644 index 0000000..a6fb765 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/runMainB.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +taskset -c 12-15 ./Main.sh -f ../Configurations/JAGyrotronB_FY19_P1.cfg -l RealTimeLoader -m StateMachine:Start diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/runNI6528TEST.sh b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/runNI6528TEST.sh new file mode 100644 index 0000000..ae06cf5 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/runNI6528TEST.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +./Main.sh -f ../Configurations/tests/NI6528_test.cfg -l RealTimeLoader -m StateMachine:START + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/beamon_test_async_GYB.py b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/beamon_test_async_GYB.py new file mode 100644 index 0000000..90477ef --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/beamon_test_async_GYB.py @@ -0,0 +1,51 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +import test_async +import test_sync +import test_ready_hw +import test_setup_hw +import test_standby_hw +import test_ready +import test_setup +import test_standby + + +"""" +Test GYB operation with Async mode. +This code can be executed when WaitPermit state. +""" +# turn on permit +print '2.. set PulseLengthLimitMode to 1 flag' +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) +res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) +time.sleep(1) +print '3. Write PERMIT' +#res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SCAN Passive', shell=True) +#res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SIML ', shell=True) +#res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SIMM 1', shell=True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 1', shell=True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 1', shell=True) +time.sleep(1) +# trun on HVON trigger +print '4. Write HVON' +#res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SCAN Passive', shell=True) +#res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SIML ', shell=True) +#res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SIMM 1', shell=True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC +time.sleep(11) +print '5. Confirm generated pulse' +print '6. Reset HVON' +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) +time.sleep(1) +print '7. Reset PERMIT' +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 0', shell=True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 0', shell=True) +print "end of async, non-prepro mode test!" + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test.py b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test.py new file mode 100644 index 0000000..82a2603 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test.py @@ -0,0 +1,90 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +import test_async +import test_sync +import test_ready_hw +import test_setup_hw +import test_standby_hw +import test_ready +import test_setup +import test_standby + +# +# Some EPICS PVs need to be simulation mode when we test code without PXI board. +# When user uses sim mode, new value must be written into PV.SVAL and PV itselfself. +# +print '### Start State Machine Sequence Test ###' + +print '---------- Pre setup for the test ----------' +test_setup.test_setup() +#test_setup_hw.test_setup() + +print 'Enter to continue test:' +inpval = raw_input() +################################################################################ +# set SELECT and STANDBY signal +################################################################################ +print '---------- WatiStandby test ----------' +test_standby.test_standby() +#test_standby_hw.test_standby() + +print 'Enter to continue test' +inpval = raw_input() + +################################################################################ +# set READY and CCPS_ON_REQUEST signal +################################################################################ +print '---------- WatiReady test ----------' +test_ready.test_ready() +#test_ready_hw.test_ready() + +print 'Enter to continue test' +inpval = raw_input() +################################################################################ +# set PERMIT and ON signal +################################################################################ +print 'Simulate PERMIT signal. State should go to WaitHVON state' +while(1): + print '''Select test type and push enter key: + 1: GYA / Async mode + 2: GYB / Async mode + 3: Two Gyrotron operation + 4: Mode limit detection + 5: Short pulse + 6: Long pulse + 7: PrePro operation + 8: SYNC mode operation + 9: GYA / Async mode --- operator set delay and pulse length on HMI + 10: GYB / Async mode --- operator set delay and pulse length on HMI + ''' + inpval = raw_input() + + if inpval == "1": + test_async.test_async_GYA() + elif inpval == "2": + test_async.test_async_GYB() + elif inpval == "3": + test_async.test_async_both() + elif inpval == "4": + test_async.test_async_limit() + elif inpval == "5": + test_async.test_async_shortpulse() + elif inpval == "6": + test_async.test_async_longpulse() + elif inpval == "7": + test_async.test_async_prepro() + elif inpval == "8": + test_sync.test_sync() + elif inpval == "9": + test_async.test_async_GYA_manual() + elif inpval == "10": + test_async.test_async_GYB_manual() + else: + print 'invalid value. Enter 1 to 10!' + continue + +print '..... End of test code .....' diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_async.py b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_async.py new file mode 100644 index 0000000..8f595b2 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_async.py @@ -0,0 +1,414 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + + +def test_async(): + """" + Simulate permit signal and ON signal from PLC. + Confirm pulse generation with async mode. 10ms + """ + print '1.set beam-on schedule (10ms diff + 3s pulse.)' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 10000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 20000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 30000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 40000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 50000000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 1000000', shell=True) + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 10000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(1) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print "end of async, non-prepro mode test!" + +def test_async_limit(): + """" + Mode Limit Stop test. + Pulse lenght was set to 3s, but it stop in 1s because of mode limit. + """ + print '1.set beam-on schedule' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 1000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 11000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 21000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 31000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 41000000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 3000000', shell=True) + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(6) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print "end of async, non-prepro mode test!" + +def test_async_prepro(): + """PrePro mode test""" + print '1.set beam-on schedule' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 100000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 200000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 300000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 400000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 500000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 3000000', shell=True) + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 10000000', shell = True) + time.sleep(1) + print '1.Set Pre-Pro flag' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-PREP-MODE 1', shell = True) + time.sleep(1) + print '2.Reset Mode 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 0', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 0', shell = True) + print '3.Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(2) + print '4.Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) + time.sleep(4) + print '5.Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(3) + print '6.Reset Pre-Pro flag' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-PREP-MODE 0', shell = True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print 'end of async, prepro mode testscript!' + +def test_async_shortpulse(): + """Short Pulse Mode test""" + #print '1.Set puls length to 1ms (1ms diff)' + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-SHORT-PULSE 1', shell=True) #Set short pulse mode. + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 1000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 2000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 3000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 4000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 5000', shell=True) #Should be grater than 1ms. + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 1000', shell=True) + print '1.Set puls length to 100us (100us diff)' + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-SHORT-PULSE 1', shell=True) #Set short pulse mode. + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 100', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 200', shell=True) + #res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 300', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 400', shell=True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 800', shell=True) #Should be grater than 1ms. + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 100', shell=True) + print '1.Set puls length (100us diff)' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-SHORT-PULSE 1', shell=True) #Set short pulse mode. + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 100', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 200', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 300', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 400', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 800', shell=True) #Should be grater than 1ms. + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 500', shell=True) + print '2.Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(1) + print '3.Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(1) + print '4.Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '5.Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print '6.Reset short pulse mode' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-SHORT-PULSE 0', shell=True) #Set short pulse mode. + print "-----------------------------------------\n" + +def test_async_longpulse(): + """" + Simulate permit signal and ON signal from PLC. + Confirm pulse generation with async mode. 10ms + """ + print '1.set beam-on schedule (10ms diff + 50ms pulse.)' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 10000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 20000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 30000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 40000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 50000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 3600000000', shell=True) + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 180000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(185) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print "end of async, non-prepro mode test!" + +def test_async_both(): + """" + Simultanious operation test. + """ + print '1.set beam-on schedule (10ms diff + 500ms pulse.)' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 10000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 20000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 30000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 40000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 50000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 500000', shell=True) + + res = subprocess.call('caput EC-GN-P01-PA2F:STAT-DT-HVON 10000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:STAT-DT-HVON 20000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:STAT-DT-SWON 40000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA2F:STAT-DT-SWON 50000', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-DT-SHOTLEN 500000', shell=True) + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(1) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 0', shell=True) + print "end of async, non-prepro mode test!" + +def test_async_GYA(): + """" + Test GYA operation with Async mode. + """ + #print '1.set beam-on schedule (1s diff + 1s pulse.)' + #print '1.set beam-on schedule (100ms diff + 1s pulse.)' + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 100000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 200000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 300000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 400000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 500000', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 1000000', shell=True) + #print '1.set beam-on schedule (10ms diff + 100ms pulse.)' + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 10000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 20000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 30000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 40000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 50000', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 100000', shell=True) + #print '1.set beam-on schedule (1ms diff + 10ms pulse.)' + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 1000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 2000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 3000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 4000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 5000', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 10000', shell=True) + print '1.set beam-on schedule (1s diff + 20s pulse.)' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 1000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 2000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 3000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 4000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 5000000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 20000000', shell=True) + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(30) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print "end of async, non-prepro mode test!" + +def test_async_GYB(): + """" + Test GYB operation with Async mode. + """ + print '1.set beam-on schedule (1s diff + 1s pulse.)' + res = subprocess.call('caput EC-GN-P01-PA2F:STAT-DT-HVON 1000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:STAT-DT-HVON 2000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 3000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:STAT-DT-SWON 4000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA2F:STAT-DT-SWON 5000000', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-DT-SHOTLEN 20000000', shell=True) + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(30) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 0', shell=True) + print "end of async, non-prepro mode test!" +def test_async_GYA_manual(): + """" + Test GYA operation with Async mode. + """ + print '1.. Set delays and pulse length on HMI and set sleep time here:' + inp_val = raw_input() + try: + sleep_time = float(inp_val) + except: + return + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(sleep_time) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print "end of async, non-prepro mode test!" + +def test_async_GYB_manual(): + """" + Test GYA operation with Async mode. + """ + print '1.. Set delays and pulse length on HMI and set sleep time here:' + inp_val = raw_input() + try: + sleep_time = float(inp_val) + except: + return + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(sleep_time) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 0', shell=True) + print "end of async, non-prepro mode test!" diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_async.pyc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_async.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f899918b0c2bf4fa267029b3508985b2028ac207 GIT binary patch literal 18679 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 CH!=4B literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready.py b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready.py new file mode 100644 index 0000000..72089d8 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready.py @@ -0,0 +1,38 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +def test_ready(): + """In the WaitReady state, simulate READY signal from PLC.""" + print '---------- WatiReady test ----------' + print '1. Simulate READY signal. State should go to WaitPermit state.' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST2R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST2R 1', shell=True) + print '2. Set CCPS trianguler waveform parameters(1V, 1Hz)' + res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-AMP 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-FREQ 1', shell=True) #Hz + res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-AMP 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-FREQ 1', shell=True) #Hz + time.sleep(1) + print '3. load csv file.' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-CSV-NAME test.csv', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-CSV-LOAD 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-CSV-NAME test2.csv', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-CSV-LOAD 1', shell=True) + time.sleep(1) + print '4. Simulate CCPS_ON_REQUEST signal' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS1.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS1 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS2.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS2 1', shell=True) + time.sleep(1) + print '5. Confirm CCPS_ON flag and triangular waveform generation.' + print '6. Simulate CCPS status PVs.' + res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-OP-V-DIFF.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-CCPS:PSU2320-TR 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-OP-V-DIFF.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-CCPS:PSU2320-TR 1', shell=True) + print '7. Confirm PCF state changes to WaitPermit state.' + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready.pyc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready.pyc new file mode 100644 index 0000000000000000000000000000000000000000..68b2851b04e48dee71d4fc8c763069e3f1127910 GIT binary patch literal 2241 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 gMd0o>B?bFEbP2iVD>(*OVf literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_rup_confirm.py b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_rup_confirm.py new file mode 100644 index 0000000..3f14868 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_rup_confirm.py @@ -0,0 +1,106 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +# +# Some EPICS PVs need to be simulation mode when we test code without PXI board. +# When user uses sim mode, new value must be written into PV.SVAL and PV itselfself. +# +print '### Start State Machine Sequence Test ###' + +def test_setup(): + """ + Setup EPICS PVs for testing. + Turn simulation mode ON for unavailable device + """ + print '---------- Start setup for the test ----------' + + print '1. set PVs to simulation mode' + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-AI-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF:STAT-AI-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DI-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-DI-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-MCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF-MCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-GCPS:STAT-SIMM YES', shell=True) #turn off for GCPS test. + #res = subprocess.call('caput EC-GN-P01-GBF-GCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-FHPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF-FHPS:STAT-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YFLT.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YFLT.SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YFLT.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YFLT 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YFLT.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YFLT.SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YFLT.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YFLT 0', shell=True) + time.sleep(1) + print '2. Change SCAN mode from I/O Inter to Passive to write sumulated values.' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1.SCAN Passive', shell=True)#SELECT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2.SCAN Passive', shell=True)#SELECT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R.SCAN Passive', shell=True) #STANDBY + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST2R.SCAN Passive', shell=True) #READY + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SCAN Passive', shell=True) #ON + res = subprocess.call('caput EC-GN-P01-PMF:PSU0000-TYSTA.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YSTA.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YSTA.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SCAN Passive', shell=True) #PERMIT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SCAN Passive', shell=True) #PERMIT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD2.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD3.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD4.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS.SCAN Passive', shell = True) #SYNC/ASYNC + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS1.SCAN Passive', shell=True) #CCPS ON REQUEST + time.sleep(1) + print '3. Set pulse length limit mode value and state.' + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 10000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD2-LIM 100000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD3-LIM 1000000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD4-LIM 10000000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD2.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD2 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD3.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD3 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD4.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD4 0', shell = True) #Pulse lenght mode + print '4. Set other operation modes' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-PREP-MODE 0', shell = True) #Pre-pro mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS.SVAL 0', shell = True) #SYNC/ASYNC mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS 0', shell = True) #SYNC/ASYNC mode + res = subprocess.call('caput EC-GN-P01-GAF:STAT-SHORT-PULSE 0',shell = True) #Short pulse mode + time.sleep(1) + print '5. Set a beam-on schedule(10ms diff + 100ms pulse)' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 10000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 20000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 30000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 40000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 50000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 100000', shell=True) + time.sleep(1) + print '6. Reset PLC INTERLOCK' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP.SIMM 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP.SCAN 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP 0', shell=True) #CCPS_IS_OPERATION + res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP.SIMM 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP.SCAN 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-RST-FLT 1', shell=True) + print '7. Simulate SELECT signal. State should go to WatiStandby from Disabled.' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2 1', shell=True) + time.sleep(1) + print '8. Simulate STANDBY signal. MCPS, GCPS, FHPS rampup must be started.' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R 1', shell=True) + print '---------- END setup for the test ----------' diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_rup_confirm.pyc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_rup_confirm.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b3a9917f8c94fdcbe8fb3564d998bf88d480af90 GIT binary patch literal 5717 zcmcIoS$En-6c%>K;>O*RZb>_hvp9=DELrNNNwC0}hD8S{$ssSUjK)Se0uhbm9zXP{ z{TY4gFYGz}0qva;AO>y>&N;agKA_+H(CW{tqdq+v896{Dt`#CXZbfgg|%ws?1Nm=Odk z3I>F^{m8RJ*B_9+?@-ce3Su;{k8Ibo_dQA+dgOMgFku<+u1-Fq=Lr)%3I9DR`XCdE z%C3S*E<=DM!U+A@KG}6(bnRgjl8UZYo2sD|)M{yG%d|?CTCS;Pt!KD?cbrAS{Qp>hT zZ4gq(MSrX~zx*|Dp(bIG$VTdrBioB8%dk8mMAb02jJjUToO^k*}XGjZ8wK}kBe4=2Q zjCMngZaKUBoSn9yKR#8B@=RJRXEc)(%NZ5qVJ&A=l#Lc;EuUMpVVLGA%|LoxH_RC^ zvY=og!=Dpm7s*m6Ssvat|ksMvwPzdxj0SM(A|7`1DWJWywlx4qfYjl5goQ@>@hL#7;@<} zj`K@9hI~7Xg!W-?1p*C9O3V6D= zNd9C6#6jX&HZ@;k18|Ne?>Gu`x7D^(<3-)%aqyLRKOT`y_Nm=hp+I8Y9(5v*ZsxQ; zBaVA;K<@Hnha0hgZlgIbN(YDnN*PPteF+8DyVr-o_gIOW7i$TN+<;wQqVjSEUv`pP z^A&_pd^eXr8ODAE_rBnw={^<@Mh5y>^~z{)8oLYvKFE+Z6?I=-C$*+kY1do&b5taG z;k1p6sQGeBa(Rh?k9^*5oHo}M<(btsz$I4OL1k)e?KJda0m_dK@W!z&NsfbEk{m~i zRgH6DK)Cp*M$_3gEfs2Ak`o2mLrCtp^oJ6yQm^P1l;wv5+XGy@9%4N|@*HyL^Xlvs zEM|ZQ&i*kGWn9^1{A}Q47OvQ-0*w!5@sv&sfV*fr7;{Iv?DEd@;Jgeu@Mu~FtJExS zcP2VCbi=$ys-oT5HB1uN{UIEw`VqV*+lOM6zf9v2++CPVqjb2*Yxi&! znt+PDS9ppl4Bj~^*`D90*{<){T@_A)*+!{t(Y&~P%R=?=IPk;3AE*a5+;#l{+;|=h zviyzW9-QW~{M@-G0^bXw;T}*9+@PNs9*anmU)On$fAW6Q>6P^ArPQSh@Rk17Q)%g5 z{x!ZkiIZ5*vS#mNU-NwNVztdR6>_m-*5=x^&p{(JOPc>%z4OrJV>n#FL+J^hI>v#E KDfl~^UilAY04VSP literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby.py b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby.py new file mode 100644 index 0000000..6d3b3b1 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby.py @@ -0,0 +1,73 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + + +def test_standby(): + """ + In the WaitStandby State, simulate PLC STANDBY signal. + Turn on FHPS by push auto-on button. + Turn on SCM PSs automatically. + State transition condition is checked at last. + """ + print '---------- Start WatiStandby test ----------' + print '1. Simulate SELECT signal. State should go to WatiStandby from Disabled.' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2 1', shell=True) + time.sleep(1) + print '2. Set MCPS rampup parameter(target current, sweep rate.)' + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MI 4', shell=True) #For A + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-TRG-SWPR-SET 1.5', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MI 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-TRG-SWPR-SET 1.5', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MI 4', shell=True) #For B + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-TRG-SWPR-SET 1.5', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MI 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-TRG-SWPR-SET 1.5', shell=True) + time.sleep(1) + print '3. Simulate STANDBY signal. MCPS, GCPS, FHPS rampup must be started.' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R 1', shell=True) + time.sleep(1) + print '4. Set FHPS rampup parameter and start it.' + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV 6', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-AUTO-RU-TIME 10', shell=True) #in second. + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START 1', shell=True) #in second. + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV 6', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-AUTO-RU-TIME 10', shell=True) #in second. + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START 1', shell=True) #in second. + time.sleep(10) + print '5. Simulate FHPS, MCPS and GCPS state.' + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB.SVAL 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON.SVAL 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB.SVAL 3', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB 3', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON.SVAL 4', shell=True)#turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON 4', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV.SVAL 6', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV 6', shell=True) + + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB.SVAL 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON.SVAL 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB.SVAL 3', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB 3', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON.SVAL 4', shell=True)#turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON 4', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV.SVAL 6', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV 6', shell=True) + time.sleep(1) + print '6. Confirm FHPS and SCM ramp-up complete. The state goes to WaitREADY from WaitStandby.' + print '---------- END WaitStandby test ----------' + diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby.pyc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bc743004c50155ca829c523127ca3604fc816cd4 GIT binary patch literal 4531 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 Axc~qF literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF/.svn/entries b/EC-GN-JA-PCF/.svn/entries new file mode 100644 index 0000000..48082f7 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/entries @@ -0,0 +1 @@ +12 diff --git a/EC-GN-JA-PCF/.svn/format b/EC-GN-JA-PCF/.svn/format new file mode 100644 index 0000000..48082f7 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/format @@ -0,0 +1 @@ +12 diff --git a/EC-GN-JA-PCF/.svn/pristine/00/008c10a0a80d6caf268354385b8ac25fb02d549f.svn-base b/EC-GN-JA-PCF/.svn/pristine/00/008c10a0a80d6caf268354385b8ac25fb02d549f.svn-base new file mode 100644 index 0000000..7202e19 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/00/008c10a0a80d6caf268354385b8ac25fb02d549f.svn-base @@ -0,0 +1 @@ +Last SDD Generation: Tue May 13 15:59:51 UTC 2025 diff --git a/EC-GN-JA-PCF/.svn/pristine/00/00f6c732464d4124aada49bb9bedc4ed61633171.svn-base b/EC-GN-JA-PCF/.svn/pristine/00/00f6c732464d4124aada49bb9bedc4ed61633171.svn-base new file mode 100644 index 0000000..3c6e012 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/00/00f6c732464d4124aada49bb9bedc4ed61633171.svn-base @@ -0,0 +1,141 @@ +/** + * @file JARampupGAM.h + * @brief Header file for class JARampupGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARampupGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARampupGAM_H_ +#define GAMS_JARampupGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that rampup output value with specified target value and duration. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *      +FHPSRampupGAM = {
+ *         Class = JARampupGAM
+ *         InputSignals = {
+ *             Currspv = {
+ *                 Alias = FHPS_REF
+ *                 DataSource = DDB1
+ *                 Type = float32
+ *             }
+ *             Targetv = {
+ *                 Alias = FHPS_AUTO_TAGV
+ *                 DataSource = EPICSCAInput
+ *                 Type = float32
+ *             }
+ *             Time = {
+ *                 Alias = FHPS_AUTO_TIME
+ *                 DataSource = EPICSCAInput
+ *                 Type = float32
+ *             }
+ *             Start = {
+ *                 Alias = FHPS_AUTO_START
+ *                 DataSource = EPICSCAInput
+ *                 Type = uint32
+ *             }
+ *         }
+ *         OutputSignals = {
+ *             FHPS_REF = {
+ *                 DataSource = DDB1
+ *                 Type = float32
+ *             }
+ *         }
+ *       }
+ *  
+ * 
+ * + */ + +class JARampupGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARampupGAM(); + + virtual ~JARampupGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + // Input signal containing current current_setpoint + MARTe::float32 *current_setpoint; + + // Input signal containing the frequency of the waveform. + MARTe::float32 *target_value; + + // Input signal containing the amplitude of the waveform. + MARTe::float32 *rampup_time; + + // Input signal containing CCPS_ON_REQUEST + MARTe::uint32 *start; + + // Input signal PLC_STANDBY + MARTe::uint32 *standby; + + // MANUAL AUTO button + MARTe::uint32 *isAuto; + + // Input signal + MARTe::float32 *FHPS_PrePro; + + // Output + MARTe::float32 *output; + // State output + MARTe::uint32 *state; //0:NotOperation, 1:InOperation, 2:Finish, 3:Error + + // Internal variables + MARTe::float32 rampup_rate; + bool inRampup; + bool resetFlag; + bool inWaitHVON; + bool inWaitStandby; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARampupGAM_H_ */ diff --git a/EC-GN-JA-PCF/.svn/pristine/02/02cdd410bcd66c1d50bb78cfc306b2f5cecfb765.svn-base b/EC-GN-JA-PCF/.svn/pristine/02/02cdd410bcd66c1d50bb78cfc306b2f5cecfb765.svn-base new file mode 100644 index 0000000..e0d79f8 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/02/02cdd410bcd66c1d50bb78cfc306b2f5cecfb765.svn-base @@ -0,0 +1,68 @@ +#+====================================================================== +# $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp/main/c++/prog/Makefile.template $ +# $Id: Makefile.template 83098 2018-01-08 13:23:38Z cesnikt $ +# +# Project : CODAC Core System +# +# Description : gyrotronDAN Makefile +# +# Author : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2018 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== + +PROGNAME=Gyrotron02DAN + +LIBRARIES=ca dan_api dan_client_api dan_stream dan_base xml2 log sdn sdn-core ccs-core rt pthread tcn nixseries +LIBRARY_DIRS= +INCLUDE_DIRS=. ../include $(CODAC_ROOT)/include $(EPICS_BASE)/include/os/Linux $(EPICS_BASE)/include/compiler/gcc $(EPICS_BASE)/include /usr/include/libxml2 $(SDN_TOPIC_DIRECTORY) + +TARGET=../../../../target +BINARY_DIR=$(TARGET)/bin +OBJECT_DIR=$(TARGET)/obj/$(PROGNAME) +SOURCE_DIR=. + +EXECUTABLE=$(BINARY_DIR)/$(PROGNAME) +INCLUDES=$(foreach inc,$(INCLUDE_DIRS),-I$(inc)) +LDLIBS=-L$(CODAC_ROOT)/lib -L$(EPICS_BASE)/lib/$(EPICS_HOST_ARCH) $(foreach libs,$(LIBRARY_DIRS),-L$(libs) -Wl,-rpath,$(libs)) $(foreach libs,$(LIBRARIES),-l$(libs)) +SOURCES=$(SOURCE_DIR)/$(PROGNAME).cpp $(SOURCE_DIR)/configure_sdn.cpp +# to build executable from all sources in the program directory: +#SOURCES=$(wildcard $(SOURCE_DIR)/*.cpp $(SOURCE_DIR)/*.c) +OBJECTS=$(addprefix $(OBJECT_DIR)/,$(patsubst %.cpp,%.o,$(notdir $(SOURCES)))) + +C=gcc +CC=g++ +CFLAGS=-c -Wall +CCFLAGS=-c -Wall -std=c++11 +LDFLAGS= + +.PHONY: all clean run + +all: $(SOURCES) $(EXECUTABLE) + +clean: + rm -rf "$(EXECUTABLE)" "$(OBJECT_DIR)" + +run: $(SOURCES) $(EXECUTABLE) + $(EXECUTABLE) + +$(EXECUTABLE): $(OBJECTS) + mkdir -p $(BINARY_DIR) + $(CC) $(LDFLAGS) $(LDLIBS) $(OBJECTS) -o $@ + +$(OBJECT_DIR)/%.o: $(SOURCE_DIR)/%.cpp + mkdir -p $(OBJECT_DIR) + $(CC) $(CCFLAGS) $(INCLUDES) $< -o $@ + +$(OBJECT_DIR)/%.o: $(SOURCE_DIR)/%.c + mkdir -p $(OBJECT_DIR) + $(C) $(CFLAGS) $(INCLUDES) $< -o $@ \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/03/0347116ae8558989abc8b5e4186a5245f73cc97d.svn-base b/EC-GN-JA-PCF/.svn/pristine/03/0347116ae8558989abc8b5e4186a5245f73cc97d.svn-base new file mode 100644 index 0000000..2c215fe --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/03/0347116ae8558989abc8b5e4186a5245f73cc97d.svn-base @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/03/034b6e3c6d3053875aff447ef8669c21ca553bf0.svn-base b/EC-GN-JA-PCF/.svn/pristine/03/034b6e3c6d3053875aff447ef8669c21ca553bf0.svn-base new file mode 100644 index 0000000..3d11cb5 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/03/034b6e3c6d3053875aff447ef8669c21ca553bf0.svn-base @@ -0,0 +1,206 @@ +record (bo,"EC-GN-P01-PA1F:PSU3000-CON-HV") +{ + field(DESC, "GY1 APS HVON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PA1F:PSU3000-CON-SW") +{ + field(DESC, "GY1 APS HV SWON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PA1F:PSU3000-CTRP") +{ + field(DESC, "GY1 APS Shutdonw request") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-PA1F:PSU3000-YFLT") +{ + field(DESC, "GY1 APS Fault") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 1) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-PA1F:PSU3000-YSTA") +{ + field(DESC, "GY1 APS Ready") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 0) bitread") + field(ONAM, "READY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-PA1F:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 APS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (ao,"EC-GN-P01-PA1F:PSU3000-EREF") +{ + field(DESC, "GY1 APS voltage setpoint") + field(DRVH, "10") + field(DRVL, "-20") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "10") + field(LOPR, "-20") + field(OUT, "@asyn(ni6368_1, 1) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PA1F:PSU3000-EREF-MSP") +{ + field(DESC, "GY1 APS voltage manual setpoint") + field(DRVH, "10") + field(DRVL, "-20") + field(EGU, "kV") + field(HOPR, "10") + field(LOPR, "-20") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PA1F:PSU3000-EREF-P") +{ + field(ASLO, "2") + field(DESC, "GY1 APS P-voltage setpoint") + field(DRVH, "0") + field(DRVL, "-20") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "10") + field(LOPR, "-20") + field(OUT, "@asyn(ni6368_1, 2) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-PA1F:PSU3000-ET") +{ + field(DESC, "GY1 APS Measured Volatege") + field(EGU, "kV") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PA1F:PSU3000-ET-WF") +{ + field(DESC, "GY1 APS Measured Volatege") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PA1F:PSU3000-IT") +{ + field(DESC, "GY1 APS Measued Current") + field(EGU, "A") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PA1F:PSU3000-IT-WF") +{ + field(DESC, "GY1 APS Measued Current") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PA1F:STAT-DT-HVON") +{ + field(DESC, "Time diff to GY1 APS Gate ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "500000") +} + +record (ai,"EC-GN-P01-PA1F:STAT-DT-SWON") +{ + field(DESC, "Time diff to GY1 APS SW ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "600000") +} + +record (calcout,"EC-GN-P01-PA1F:STAT-EREF-CONV") +{ + field(CALC, "A>0?A:((A>-20)?A/2:-10)") + field(DESC, "GYA APS engineer value conversion") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-PA1F:PSU3000-EREF PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-PA1F:STAT-PREP-WF") +{ + field(DESC, "GY1 APS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/.svn/pristine/04/04df14b04244ebfb95706234746bdd37ca02ad72.svn-base b/EC-GN-JA-PCF/.svn/pristine/04/04df14b04244ebfb95706234746bdd37ca02ad72.svn-base new file mode 100644 index 0000000..c1a4703 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/04/04df14b04244ebfb95706234746bdd37ca02ad72.svn-base @@ -0,0 +1,29 @@ +# CONFIG - Load build configuration data +# +# Do not make changes to this file! + +# Allow user to override where the build rules come from +RULES = $(EPICS_BASE) + +# RELEASE files point to other application tops +include $(TOP)/configure/RELEASE +-include $(TOP)/configure/RELEASE.$(EPICS_HOST_ARCH).Common +ifdef T_A +-include $(TOP)/configure/RELEASE.Common.$(T_A) +-include $(TOP)/configure/RELEASE.$(EPICS_HOST_ARCH).$(T_A) +endif + +CONFIG = $(RULES)/configure +include $(CONFIG)/CONFIG + +# Override the Base definition: +INSTALL_LOCATION = $(TOP) + +# CONFIG_SITE files contain other build configuration settings +include $(TOP)/configure/CONFIG_SITE +-include $(TOP)/configure/CONFIG_SITE.$(EPICS_HOST_ARCH).Common +ifdef T_A + -include $(TOP)/configure/CONFIG_SITE.Common.$(T_A) + -include $(TOP)/configure/CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A) +endif + diff --git a/EC-GN-JA-PCF/.svn/pristine/05/05467ff5d484a6ade1522bd1ddcef7f86d69bdd6.svn-base b/EC-GN-JA-PCF/.svn/pristine/05/05467ff5d484a6ade1522bd1ddcef7f86d69bdd6.svn-base new file mode 100644 index 0000000..864013e --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/05/05467ff5d484a6ade1522bd1ddcef7f86d69bdd6.svn-base @@ -0,0 +1,8 @@ +############################################################################ +## Autosave monitor post setup +############################################################################ + +cd "${TOP}/iocBoot/$(IOC)" +create_monitor_set(".req",30,"P=$(AUTOSAVE_SYSM_PV_PREFIX)") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/.svn/pristine/06/063c920f642e4d5dbcb63642024867e058fc8ea0.svn-base b/EC-GN-JA-PCF/.svn/pristine/06/063c920f642e4d5dbcb63642024867e058fc8ea0.svn-base new file mode 100644 index 0000000..832aa45 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/06/063c920f642e4d5dbcb63642024867e058fc8ea0.svn-base @@ -0,0 +1,1013 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,0,0.5,0.5,1,1,5 +10,0,0.5,0.5,1,1,5 +20,0,0.5,0.5,1,1,5 +30,0,0.5,0.5,1,1,5 +40,0,0.5,0.5,1,1,5 +50,0,0.5,0.5,1,1,5 +60,0,0.5,0.5,1,1,5 +70,0,0.5,0.5,1,1,5 +80,0,0.5,0.5,1,1,5 +90,0,0.5,0.5,1,1,5 +100,0,0.5,0.5,1,1,5 +110,0,0.5,0.5,1,1,5 +120,0,0.5,0.5,1,1,5 +130,0,0.5,0.5,1,1,5 +140,0,0.5,0.5,1,1,5 +150,0,0.5,0.5,1,1,5 +160,0,0.5,0.5,1,1,5 +170,0,0.5,0.5,1,1,5 +180,0,0.5,0.5,1,1,5 +190,0,0.5,0.5,1,1,5 +200,0,0.5,0.5,1,1,5 +210,0,0.5,0.5,1,1,5 +220,0,0.5,0.5,1,1,5 +230,0,0.5,0.5,1,1,5 +240,0,0.5,0.5,1,1,5 +250,0,0.5,0.5,1,1,5 +260,0,0.5,0.5,1,1,5 +270,0,0.5,0.5,1,1,5 +280,0,0.5,0.5,1,1,5 +290,0,0.5,0.5,1,1,5 +300,0,0.5,0.5,1,1,5 +310,0,0.5,0.5,1,1,5 +320,0,0.5,0.5,1,1,5 +330,0,0.5,0.5,1,1,5 +340,0,0.5,0.5,1,1,5 +350,0,0.5,0.5,1,1,5 +360,0,0.5,0.5,1,1,5 +370,0,0.5,0.5,1,1,5 +380,0,0.5,0.5,1,1,5 +390,0,0.5,0.5,1,1,5 +400,0,0.5,0.5,1,1,5 +410,0,0.5,0.5,1,1,5 +420,0,0.5,0.5,1,1,5 +430,0,0.5,0.5,1,1,5 +440,0,0.5,0.5,1,1,5 +450,0,0.5,0.5,1,1,5 +460,0,0.5,0.5,1,1,5 +470,0,0.5,0.5,1,1,5 +480,0,0.5,0.5,1,1,5 +490,0,0.5,0.5,1,1,5 +500,0,0.5,0.5,1,1,5 +510,0,0.5,0.5,1,1,5 +520,0,0.5,0.5,1,1,5 +530,0,0.5,0.5,1,1,5 +540,0,0.5,0.5,1,1,5 +550,0,0.5,0.5,1,1,5 +560,0,0.5,0.5,1,1,5 +570,0,0.5,0.5,1,1,5 +580,0,0.5,0.5,1,1,5 +590,0,0.5,0.5,1,1,5 +600,0,0.5,0.5,1,1,5 +610,0,0.5,0.5,1,1,5 +620,0,0.5,0.5,1,1,5 +630,0,0.5,0.5,1,1,5 +640,0,0.5,0.5,1,1,5 +650,0,0.5,0.5,1,1,5 +660,0,0.5,0.5,1,1,5 +670,0,0.5,0.5,1,1,5 +680,0,0.5,0.5,1,1,5 +690,0,0.5,0.5,1,1,5 +700,0,0.5,0.5,1,1,5 +710,0,0.5,0.5,1,1,5 +720,0,0.5,0.5,1,1,5 +730,0,0.5,0.5,1,1,5 +740,0,0.5,0.5,1,1,5 +750,0,0.5,0.5,1,1,5 +760,0,0.5,0.5,1,1,5 +770,0,0.5,0.5,1,1,5 +780,0,0.5,0.5,1,1,5 +790,0,0.5,0.5,1,1,5 +800,0,0.5,0.5,1,1,5 +810,0,0.5,0.5,1,1,5 +820,0,0.5,0.5,1,1,5 +830,0,0.5,0.5,1,1,5 +840,0,0.5,0.5,1,1,5 +850,0,0.5,0.5,1,1,5 +860,0,0.5,0.5,1,1,5 +870,0,0.5,0.5,1,1,5 +880,0,0.5,0.5,1,1,5 +890,0,0.5,0.5,1,1,5 +900,0,0.5,0.5,1,1,5 +910,0,0.5,0.5,1,1,5 +920,0,0.5,0.5,1,1,5 +930,0,0.5,0.5,1,1,5 +940,0,0.5,0.5,1,1,5 +950,0,0.5,0.5,1,1,5 +960,0,0.5,0.5,1,1,5 +970,0,0.5,0.5,1,1,5 +980,0,0.5,0.5,1,1,5 +990,0,0.5,0.5,1,1,5 +1000,0,0.5,0.5,1,1,5 +1010,0,1,1,1,1,5 +1020,0,1,1,1,1,5 +1030,0,1,1,1,1,5 +1040,0,1,1,1,1,5 +1050,0,1,1,1,1,5 +1060,0,1,1,1,1,5 +1070,0,1,1,1,1,5 +1080,0,1,1,1,1,5 +1090,0,1,1,1,1,5 +1100,0,1,1,1,1,5 +1110,0,1,1,1,1,5 +1120,0,1,1,1,1,5 +1130,0,1,1,1,1,5 +1140,0,1,1,1,1,5 +1150,0,1,1,1,1,5 +1160,0,1,1,1,1,5 +1170,0,1,1,1,1,5 +1180,0,1,1,1,1,5 +1190,0,1,1,1,1,5 +1200,0,1,1,1,1,5 +1210,0,1,1,1,1,5 +1220,0,1,1,1,1,5 +1230,0,1,1,1,1,5 +1240,0,1,1,1,1,5 +1250,0,1,1,1,1,5 +1260,0,1,1,1,1,5 +1270,0,1,1,1,1,5 +1280,0,1,1,1,1,5 +1290,0,1,1,1,1,5 +1300,0,1,1,1,1,5 +1310,0,1,1,1,1,5 +1320,0,1,1,1,1,5 +1330,0,1,1,1,1,5 +1340,0,1,1,1,1,5 +1350,0,1,1,1,1,5 +1360,0,1,1,1,1,5 +1370,0,1,1,1,1,5 +1380,0,1,1,1,1,5 +1390,0,1,1,1,1,5 +1400,0,1,1,1,1,5 +1410,0,1,1,1,1,5 +1420,0,1,1,1,1,5 +1430,0,1,1,1,1,5 +1440,0,1,1,1,1,5 +1450,0,1,1,1,1,5 +1460,0,1,1,1,1,5 +1470,0,1,1,1,1,5 +1480,0,1,1,1,1,5 +1490,0,1,1,1,1,5 +1500,0,1,1,1,1,5 +1510,0,1,1,1,1,5 +1520,0,1,1,1,1,5 +1530,0,1,1,1,1,5 +1540,0,1,1,1,1,5 +1550,0,1,1,1,1,5 +1560,0,1,1,1,1,5 +1570,0,1,1,1,1,5 +1580,0,1,1,1,1,5 +1590,0,1,1,1,1,5 +1600,0,1,1,1,1,5 +1610,0,1,1,1,1,5 +1620,0,1,1,1,1,5 +1630,0,1,1,1,1,5 +1640,0,1,1,1,1,5 +1650,0,1,1,1,1,5 +1660,0,1,1,1,1,5 +1670,0,1,1,1,1,5 +1680,0,1,1,1,1,5 +1690,0,1,1,1,1,5 +1700,0,1,1,1,1,5 +1710,0,1,1,1,1,5 +1720,0,1,1,1,1,5 +1730,0,1,1,1,1,5 +1740,0,1,1,1,1,5 +1750,0,1,1,1,1,5 +1760,0,1,1,1,1,5 +1770,0,1,1,1,1,5 +1780,0,1,1,1,1,5 +1790,0,1,1,1,1,5 +1800,0,1,1,1,1,5 +1810,0,1,1,1,1,5 +1820,0,1,1,1,1,5 +1830,0,1,1,1,1,5 +1840,0,1,1,1,1,5 +1850,0,1,1,1,1,5 +1860,0,1,1,1,1,5 +1870,0,1,1,1,1,5 +1880,0,1,1,1,1,5 +1890,0,1,1,1,1,5 +1900,0,1,1,1,1,5 +1910,0,1,1,1,1,5 +1920,0,1,1,1,1,5 +1930,0,1,1,1,1,5 +1940,0,1,1,1,1,5 +1950,0,1,1,1,1,5 +1960,0,1,1,1,1,5 +1970,0,1,1,1,1,5 +1980,0,1,1,1,1,5 +1990,0,1,1,1,1,5 +2000,0,1,1,1,1,5 +2010,0,1,1,1,1,5 +2020,0,1,1,1,1,5 +2030,0,1,1,1,1,5 +2040,0,1,1,1,1,5 +2050,0,1,1,1,1,5 +2060,0,1,1,1,1,5 +2070,0,1,1,1,1,5 +2080,0,1,1,1,1,5 +2090,0,1,1,1,1,5 +2100,0,1,1,1,1,5 +2110,0,1,1,1,1,5 +2120,0,1,1,1,1,5 +2130,0,1,1,1,1,5 +2140,0,1,1,1,1,5 +2150,0,1,1,1,1,5 +2160,0,1,1,1,1,5 +2170,0,1,1,1,1,5 +2180,0,1,1,1,1,5 +2190,0,1,1,1,1,5 +2200,0,1,1,1,1,5 +2210,0,1,1,1,1,5 +2220,0,1,1,1,1,5 +2230,0,1,1,1,1,5 +2240,0,1,1,1,1,5 +2250,0,1,1,1,1,5 +2260,0,1,1,1,1,5 +2270,0,1,1,1,1,5 +2280,0,1,1,1,1,5 +2290,0,1,1,1,1,5 +2300,0,1,1,1,1,5 +2310,0,1,1,1,1,5 +2320,0,1,1,1,1,5 +2330,0,1,1,1,1,5 +2340,0,1,1,1,1,5 +2350,0,1,1,1,1,5 +2360,0,1,1,1,1,5 +2370,0,1,1,1,1,5 +2380,0,1,1,1,1,5 +2390,0,1,1,1,1,5 +2400,0,1,1,1,1,5 +2410,0,1,1,1,1,5 +2420,0,1,1,1,1,5 +2430,0,1,1,1,1,5 +2440,0,1,1,1,1,5 +2450,0,1,1,1,1,5 +2460,0,1,1,1,1,5 +2470,0,1,1,1,1,5 +2480,0,1,1,1,1,5 +2490,0,1,1,1,1,5 +2500,0,1,1,1,1,5 +2510,0,1,1,1,1,5 +2520,0,1,1,1,1,5 +2530,0,1,1,1,1,5 +2540,0,1,1,1,1,5 +2550,0,1,1,1,1,5 +2560,0,1,1,1,1,5 +2570,0,1,1,1,1,5 +2580,0,1,1,1,1,5 +2590,0,1,1,1,1,5 +2600,0,1,1,1,1,5 +2610,0,1,1,1,1,5 +2620,0,1,1,1,1,5 +2630,0,1,1,1,1,5 +2640,0,1,1,1,1,5 +2650,0,1,1,1,1,5 +2660,0,1,1,1,1,5 +2670,0,1,1,1,1,5 +2680,0,1,1,1,1,5 +2690,0,1,1,1,1,5 +2700,0,1,1,1,1,5 +2710,0,1,1,1,1,5 +2720,0,1,1,1,1,5 +2730,0,1,1,1,1,5 +2740,0,1,1,1,1,5 +2750,0,1,1,1,1,5 +2760,0,1,1,1,1,5 +2770,0,1,1,1,1,5 +2780,0,1,1,1,1,5 +2790,0,1,1,1,1,5 +2800,0,1,1,1,1,5 +2810,0,1,1,1,1,5 +2820,0,1,1,1,1,5 +2830,0,1,1,1,1,5 +2840,0,1,1,1,1,5 +2850,0,1,1,1,1,5 +2860,0,1,1,1,1,5 +2870,0,1,1,1,1,5 +2880,0,1,1,1,1,5 +2890,0,1,1,1,1,5 +2900,0,1,1,1,1,5 +2910,0,1,1,1,1,5 +2920,0,1,1,1,1,5 +2930,0,1,1,1,1,5 +2940,0,1,1,1,1,5 +2950,0,1,1,1,1,5 +2960,0,1,1,1,1,5 +2970,0,1,1,1,1,5 +2980,0,1,1,1,1,5 +2990,0,1,1,1,1,5 +3000,0,1,1,1,1,5 +3010,0,1,1,1,1,5 +3020,0,1,1,1,1,5 +3030,0,1,1,1,1,5 +3040,0,1,1,1,1,5 +3050,0,1,1,1,1,5 +3060,0,1,1,1,1,5 +3070,0,1,1,1,1,5 +3080,0,1,1,1,1,5 +3090,0,1,1,1,1,5 +3100,0,1,1,1,1,5 +3110,0,1,1,1,1,5 +3120,0,1,1,1,1,5 +3130,0,1,1,1,1,5 +3140,0,1,1,1,1,5 +3150,0,1,1,1,1,5 +3160,0,1,1,1,1,5 +3170,0,1,1,1,1,5 +3180,0,1,1,1,1,5 +3190,0,1,1,1,1,5 +3200,0,1,1,1,1,5 +3210,0,1,1,1,1,5 +3220,0,1,1,1,1,5 +3230,0,1,1,1,1,5 +3240,0,1,1,1,1,5 +3250,0,1,1,1,1,5 +3260,0,1,1,1,1,5 +3270,0,1,1,1,1,5 +3280,0,1,1,1,1,5 +3290,0,1,1,1,1,5 +3300,0,1,1,1,1,5 +3310,0,1,1,1,1,5 +3320,0,1,1,1,1,5 +3330,0,1,1,1,1,5 +3340,0,1,1,1,1,5 +3350,0,1,1,1,1,5 +3360,0,1,1,1,1,5 +3370,0,1,1,1,1,5 +3380,0,1,1,1,1,5 +3390,0,1,1,1,1,5 +3400,0,1,1,1,1,5 +3410,0,1,1,1,1,5 +3420,0,1,1,1,1,5 +3430,0,1,1,1,1,5 +3440,0,1,1,1,1,5 +3450,0,1,1,1,1,5 +3460,0,1,1,1,1,5 +3470,0,1,1,1,1,5 +3480,0,1,1,1,1,5 +3490,0,1,1,1,1,5 +3500,0,1,1,1,1,5 +3510,0,1,1,1,1,5 +3520,0,1,1,1,1,5 +3530,0,1,1,1,1,5 +3540,0,1,1,1,1,5 +3550,0,1,1,1,1,5 +3560,0,1,1,1,1,5 +3570,0,1,1,1,1,5 +3580,0,1,1,1,1,5 +3590,0,1,1,1,1,5 +3600,0,1,1,1,1,5 +3610,0,1,1,1,1,5 +3620,0,1,1,1,1,5 +3630,0,1,1,1,1,5 +3640,0,1,1,1,1,5 +3650,0,1,1,1,1,5 +3660,0,1,1,1,1,5 +3670,0,1,1,1,1,5 +3680,0,1,1,1,1,5 +3690,0,1,1,1,1,5 +3700,0,1,1,1,1,5 +3710,0,1,1,1,1,5 +3720,0,1,1,1,1,5 +3730,0,1,1,1,1,5 +3740,0,1,1,1,1,5 +3750,0,1,1,1,1,5 +3760,0,1,1,1,1,5 +3770,0,1,1,1,1,5 +3780,0,1,1,1,1,5 +3790,0,1,1,1,1,5 +3800,0,1,1,1,1,5 +3810,0,1,1,1,1,5 +3820,0,1,1,1,1,5 +3830,0,1,1,1,1,5 +3840,0,1,1,1,1,5 +3850,0,1,1,1,1,5 +3860,0,1,1,1,1,5 +3870,0,1,1,1,1,5 +3880,0,1,1,1,1,5 +3890,0,1,1,1,1,5 +3900,0,1,1,1,1,5 +3910,0,1,1,1,1,5 +3920,0,1,1,1,1,5 +3930,0,1,1,1,1,5 +3940,0,1,1,1,1,5 +3950,0,1,1,1,1,5 +3960,0,1,1,1,1,5 +3970,0,1,1,1,1,5 +3980,0,1,1,1,1,5 +3990,0,1,1,1,1,5 +4000,0,1,1,1,1,5 +4010,0,1,1,1,1,5 +4020,0,1,1,1,1,5 +4030,0,1,1,1,1,5 +4040,0,1,1,1,1,5 +4050,0,1,1,1,1,5 +4060,0,1,1,1,1,5 +4070,0,1,1,1,1,5 +4080,0,1,1,1,1,5 +4090,0,1,1,1,1,5 +4100,0,1,1,1,1,5 +4110,0,1,1,1,1,5 +4120,0,1,1,1,1,5 +4130,0,1,1,1,1,5 +4140,0,1,1,1,1,5 +4150,0,1,1,1,1,5 +4160,0,1,1,1,1,5 +4170,0,1,1,1,1,5 +4180,0,1,1,1,1,5 +4190,0,1,1,1,1,5 +4200,0,1,1,1,1,5 +4210,0,1,1,1,1,5 +4220,0,1,1,1,1,5 +4230,0,1,1,1,1,5 +4240,0,1,1,1,1,5 +4250,0,1,1,1,1,5 +4260,0,1,1,1,1,5 +4270,0,1,1,1,1,5 +4280,0,1,1,1,1,5 +4290,0,1,1,1,1,5 +4300,0,1,1,1,1,5 +4310,0,1,1,1,1,5 +4320,0,1,1,1,1,5 +4330,0,1,1,1,1,5 +4340,0,1,1,1,1,5 +4350,0,1,1,1,1,5 +4360,0,1,1,1,1,5 +4370,0,1,1,1,1,5 +4380,0,1,1,1,1,5 +4390,0,1,1,1,1,5 +4400,0,1,1,1,1,5 +4410,0,1,1,1,1,5 +4420,0,1,1,1,1,5 +4430,0,1,1,1,1,5 +4440,0,1,1,1,1,5 +4450,0,1,1,1,1,5 +4460,0,1,1,1,1,5 +4470,0,1,1,1,1,5 +4480,0,1,1,1,1,5 +4490,0,1,1,1,1,5 +4500,0,1,1,1,1,5 +4510,0,1,1,1,1,5 +4520,0,1,1,1,1,5 +4530,0,1,1,1,1,5 +4540,0,1,1,1,1,5 +4550,0,1,1,1,1,5 +4560,0,1,1,1,1,5 +4570,0,1,1,1,1,5 +4580,0,1,1,1,1,5 +4590,0,1,1,1,1,5 +4600,0,1,1,1,1,5 +4610,0,1,1,1,1,5 +4620,0,1,1,1,1,5 +4630,0,1,1,1,1,5 +4640,0,1,1,1,1,5 +4650,0,1,1,1,1,5 +4660,0,1,1,1,1,5 +4670,0,1,1,1,1,5 +4680,0,1,1,1,1,5 +4690,0,1,1,1,1,5 +4700,0,1,1,1,1,5 +4710,0,1,1,1,1,5 +4720,0,1,1,1,1,5 +4730,0,1,1,1,1,5 +4740,0,1,1,1,1,5 +4750,0,1,1,1,1,5 +4760,0,1,1,1,1,5 +4770,0,1,1,1,1,5 +4780,0,1,1,1,1,5 +4790,0,1,1,1,1,5 +4800,0,1,1,1,1,5 +4810,0,1,1,1,1,5 +4820,0,1,1,1,1,5 +4830,0,1,1,1,1,5 +4840,0,1,1,1,1,5 +4850,0,1,1,1,1,5 +4860,0,1,1,1,1,5 +4870,0,1,1,1,1,5 +4880,0,1,1,1,1,5 +4890,0,1,1,1,1,5 +4900,0,1,1,1,1,5 +4910,0,1,1,1,1,5 +4920,0,1,1,1,1,5 +4930,0,1,1,1,1,5 +4940,0,1,1,1,1,5 +4950,0,1,1,1,1,5 +4960,0,1,1,1,1,5 +4970,0,1,1,1,1,5 +4980,0,1,1,1,1,5 +4990,0,1,1,1,1,5 +5000,0,2,2,1,1,5 +5010,0,2,2,1,1,5 +5020,0,2,2,1,1,5 +5030,0,2,2,1,1,5 +5040,0,2,2,1,1,5 +5050,0,2,2,1,1,5 +5060,0,2,2,1,1,5 +5070,0,2,2,1,1,5 +5080,0,2,2,1,1,5 +5090,0,2,2,1,1,5 +5100,0,2,2,1,1,5 +5110,0,2,2,1,1,5 +5120,0,2,2,1,1,5 +5130,0,2,2,1,1,5 +5140,0,2,2,1,1,5 +5150,0,2,2,1,1,5 +5160,0,2,2,1,1,5 +5170,0,2,2,1,1,5 +5180,0,2,2,1,1,5 +5190,0,2,2,1,1,5 +5200,0,2,2,1,1,5 +5210,0,2,2,1,1,5 +5220,0,2,2,1,1,5 +5230,0,2,2,1,1,5 +5240,0,2,2,1,1,5 +5250,0,2,2,1,1,5 +5260,0,2,2,1,1,5 +5270,0,2,2,1,1,5 +5280,0,2,2,1,1,5 +5290,0,2,2,1,1,5 +5300,0,2,2,1,1,5 +5310,0,2,2,1,1,5 +5320,0,2,2,1,1,5 +5330,0,2,2,1,1,5 +5340,0,2,2,1,1,5 +5350,0,2,2,1,1,5 +5360,0,2,2,1,1,5 +5370,0,2,2,1,1,5 +5380,0,2,2,1,1,5 +5390,0,2,2,1,1,5 +5400,0,2,2,1,1,5 +5410,0,2,2,1,1,5 +5420,0,2,2,1,1,5 +5430,0,2,2,1,1,5 +5440,0,2,2,1,1,5 +5450,0,2,2,1,1,5 +5460,0,2,2,1,1,5 +5470,0,2,2,1,1,5 +5480,0,2,2,1,1,5 +5490,0,2,2,1,1,5 +5500,0,2,2,1,1,5 +5510,0,2,2,1,1,5 +5520,0,2,2,1,1,5 +5530,0,2,2,1,1,5 +5540,0,2,2,1,1,5 +5550,0,2,2,1,1,5 +5560,0,2,2,1,1,5 +5570,0,2,2,1,1,5 +5580,0,2,2,1,1,5 +5590,0,2,2,1,1,5 +5600,0,2,2,1,1,5 +5610,0,2,2,1,1,5 +5620,0,2,2,1,1,5 +5630,0,2,2,1,1,5 +5640,0,2,2,1,1,5 +5650,0,2,2,1,1,5 +5660,0,2,2,1,1,5 +5670,0,2,2,1,1,5 +5680,0,2,2,1,1,5 +5690,0,2,2,1,1,5 +5700,0,2,2,1,1,5 +5710,0,2,2,1,1,5 +5720,0,2,2,1,1,5 +5730,0,2,2,1,1,5 +5740,0,2,2,1,1,5 +5750,0,2,2,1,1,5 +5760,0,2,2,1,1,5 +5770,0,2,2,1,1,5 +5780,0,2,2,1,1,5 +5790,0,2,2,1,1,5 +5800,0,2,2,1,1,5 +5810,0,2,2,1,1,5 +5820,0,2,2,1,1,5 +5830,0,2,2,1,1,5 +5840,0,2,2,1,1,5 +5850,0,2,2,1,1,5 +5860,0,2,2,1,1,5 +5870,0,2,2,1,1,5 +5880,0,2,2,1,1,5 +5890,0,2,2,1,1,5 +5900,0,2,2,1,1,5 +5910,0,2,2,1,1,5 +5920,0,2,2,1,1,5 +5930,0,2,2,1,1,5 +5940,0,2,2,1,1,5 +5950,0,2,2,1,1,5 +5960,0,2,2,1,1,5 +5970,0,2,2,1,1,5 +5980,0,2,2,1,1,5 +5990,0,2,2,1,1,5 +6000,0,2,2,1,1,5 +6010,0,2,2,1,1,5 +6020,0,2,2,1,1,5 +6030,0,2,2,1,1,5 +6040,0,2,2,1,1,5 +6050,0,2,2,1,1,5 +6060,0,2,2,1,1,5 +6070,0,2,2,1,1,5 +6080,0,2,2,1,1,5 +6090,0,2,2,1,1,5 +6100,0,2,2,1,1,5 +6110,0,2,2,1,1,5 +6120,0,2,2,1,1,5 +6130,0,2,2,1,1,5 +6140,0,2,2,1,1,5 +6150,0,2,2,1,1,5 +6160,0,2,2,1,1,5 +6170,0,2,2,1,1,5 +6180,0,2,2,1,1,5 +6190,0,2,2,1,1,5 +6200,0,2,2,1,1,5 +6210,0,2,2,1,1,5 +6220,0,2,2,1,1,5 +6230,0,2,2,1,1,5 +6240,0,2,2,1,1,5 +6250,0,2,2,1,1,5 +6260,0,2,2,1,1,5 +6270,0,2,2,1,1,5 +6280,0,2,2,1,1,5 +6290,0,2,2,1,1,5 +6300,0,2,2,1,1,5 +6310,0,2,2,1,1,5 +6320,0,2,2,1,1,5 +6330,0,2,2,1,1,5 +6340,0,2,2,1,1,5 +6350,0,2,2,1,1,5 +6360,0,2,2,1,1,5 +6370,0,2,2,1,1,5 +6380,0,2,2,1,1,5 +6390,0,2,2,1,1,5 +6400,0,2,2,1,1,5 +6410,0,2,2,1,1,5 +6420,0,2,2,1,1,5 +6430,0,2,2,1,1,5 +6440,0,2,2,1,1,5 +6450,0,2,2,1,1,5 +6460,0,2,2,1,1,5 +6470,0,2,2,1,1,5 +6480,0,2,2,1,1,5 +6490,0,2,2,1,1,5 +6500,0,2,2,1,1,5 +6510,0,2,2,1,1,5 +6520,0,2,2,1,1,5 +6530,0,2,2,1,1,5 +6540,0,2,2,1,1,5 +6550,0,2,2,1,1,5 +6560,0,2,2,1,1,5 +6570,0,2,2,1,1,5 +6580,0,2,2,1,1,5 +6590,0,2,2,1,1,5 +6600,0,2,2,1,1,5 +6610,0,2,2,1,1,5 +6620,0,2,2,1,1,5 +6630,0,2,2,1,1,5 +6640,0,2,2,1,1,5 +6650,0,2,2,1,1,5 +6660,0,2,2,1,1,5 +6670,0,2,2,1,1,5 +6680,0,2,2,1,1,5 +6690,0,2,2,1,1,5 +6700,0,2,2,1,1,5 +6710,0,2,2,1,1,5 +6720,0,2,2,1,1,5 +6730,0,2,2,1,1,5 +6740,0,2,2,1,1,5 +6750,0,2,2,1,1,5 +6760,0,2,2,1,1,5 +6770,0,2,2,1,1,5 +6780,0,2,2,1,1,5 +6790,0,2,2,1,1,5 +6800,0,2,2,1,1,5 +6810,0,2,2,1,1,5 +6820,0,2,2,1,1,5 +6830,0,2,2,1,1,5 +6840,0,2,2,1,1,5 +6850,0,2,2,1,1,5 +6860,0,2,2,1,1,5 +6870,0,2,2,1,1,5 +6880,0,2,2,1,1,5 +6890,0,2,2,1,1,5 +6900,0,2,2,1,1,5 +6910,0,2,2,1,1,5 +6920,0,2,2,1,1,5 +6930,0,2,2,1,1,5 +6940,0,2,2,1,1,5 +6950,0,2,2,1,1,5 +6960,0,2,2,1,1,5 +6970,0,2,2,1,1,5 +6980,0,2,2,1,1,5 +6990,0,2,2,1,1,5 +7000,0,2,2,1,1,5 +7010,0,2,2,1,1,5 +7020,0,2,2,1,1,5 +7030,0,2,2,1,1,5 +7040,0,2,2,1,1,5 +7050,0,2,2,1,1,5 +7060,0,2,2,1,1,5 +7070,0,2,2,1,1,5 +7080,0,2,2,1,1,5 +7090,0,2,2,1,1,5 +7100,0,2,2,1,1,5 +7110,0,2,2,1,1,5 +7120,0,2,2,1,1,5 +7130,0,2,2,1,1,5 +7140,0,2,2,1,1,5 +7150,0,2,2,1,1,5 +7160,0,2,2,1,1,5 +7170,0,2,2,1,1,5 +7180,0,2,2,1,1,5 +7190,0,2,2,1,1,5 +7200,0,2,2,1,1,5 +7210,0,2,2,1,1,5 +7220,0,2,2,1,1,5 +7230,0,2,2,1,1,5 +7240,0,2,2,1,1,5 +7250,0,2,2,1,1,5 +7260,0,2,2,1,1,5 +7270,0,2,2,1,1,5 +7280,0,2,2,1,1,5 +7290,0,2,2,1,1,5 +7300,0,2,2,1,1,5 +7310,0,2,2,1,1,5 +7320,0,2,2,1,1,5 +7330,0,2,2,1,1,5 +7340,0,2,2,1,1,5 +7350,0,2,2,1,1,5 +7360,0,2,2,1,1,5 +7370,0,2,2,1,1,5 +7380,0,2,2,1,1,5 +7390,0,2,2,1,1,5 +7400,0,2,2,1,1,5 +7410,0,2,2,1,1,5 +7420,0,2,2,1,1,5 +7430,0,2,2,1,1,5 +7440,0,2,2,1,1,5 +7450,0,2,2,1,1,5 +7460,0,2,2,1,1,5 +7470,0,2,2,1,1,5 +7480,0,2,2,1,1,5 +7490,0,2,2,1,1,5 +7500,0,2,2,1,1,5 +7510,0,2,2,1,1,5 +7520,0,2,2,1,1,5 +7530,0,2,2,1,1,5 +7540,0,2,2,1,1,5 +7550,0,2,2,1,1,5 +7560,0,2,2,1,1,5 +7570,0,2,2,1,1,5 +7580,0,2,2,1,1,5 +7590,0,2,2,1,1,5 +7600,0,2,2,1,1,5 +7610,0,2,2,1,1,5 +7620,0,2,2,1,1,5 +7630,0,2,2,1,1,5 +7640,0,2,2,1,1,5 +7650,0,2,2,1,1,5 +7660,0,2,2,1,1,5 +7670,0,2,2,1,1,5 +7680,0,2,2,1,1,5 +7690,0,2,2,1,1,5 +7700,0,2,2,1,1,5 +7710,0,2,2,1,1,5 +7720,0,2,2,1,1,5 +7730,0,2,2,1,1,5 +7740,0,2,2,1,1,5 +7750,0,2,2,1,1,5 +7760,0,2,2,1,1,5 +7770,0,2,2,1,1,5 +7780,0,2,2,1,1,5 +7790,0,2,2,1,1,5 +7800,0,2,2,1,1,5 +7810,0,2,2,1,1,5 +7820,0,2,2,1,1,5 +7830,0,2,2,1,1,5 +7840,0,2,2,1,1,5 +7850,0,2,2,1,1,5 +7860,0,2,2,1,1,5 +7870,0,2,2,1,1,5 +7880,0,2,2,1,1,5 +7890,0,2,2,1,1,5 +7900,0,2,2,1,1,5 +7910,0,2,2,1,1,5 +7920,0,2,2,1,1,5 +7930,0,2,2,1,1,5 +7940,0,2,2,1,1,5 +7950,0,2,2,1,1,5 +7960,0,2,2,1,1,5 +7970,0,2,2,1,1,5 +7980,0,2,2,1,1,5 +7990,0,2,2,1,1,5 +8000,0,2,2,1,1,5 +8010,0,2,2,1,1,5 +8020,0,2,2,1,1,5 +8030,0,2,2,1,1,5 +8040,0,2,2,1,1,5 +8050,0,2,2,1,1,5 +8060,0,2,2,1,1,5 +8070,0,2,2,1,1,5 +8080,0,2,2,1,1,5 +8090,0,2,2,1,1,5 +8100,0,2,2,1,1,5 +8110,0,2,2,1,1,5 +8120,0,2,2,1,1,5 +8130,0,2,2,1,1,5 +8140,0,2,2,1,1,5 +8150,0,2,2,1,1,5 +8160,0,2,2,1,1,5 +8170,0,2,2,1,1,5 +8180,0,2,2,1,1,5 +8190,0,2,2,1,1,5 +8200,0,2,2,1,1,5 +8210,0,2,2,1,1,5 +8220,0,2,2,1,1,5 +8230,0,2,2,1,1,5 +8240,0,2,2,1,1,5 +8250,0,2,2,1,1,5 +8260,0,2,2,1,1,5 +8270,0,2,2,1,1,5 +8280,0,2,2,1,1,5 +8290,0,2,2,1,1,5 +8300,0,2,2,1,1,5 +8310,0,2,2,1,1,5 +8320,0,2,2,1,1,5 +8330,0,2,2,1,1,5 +8340,0,2,2,1,1,5 +8350,0,2,2,1,1,5 +8360,0,2,2,1,1,5 +8370,0,2,2,1,1,5 +8380,0,2,2,1,1,5 +8390,0,2,2,1,1,5 +8400,0,2,2,1,1,5 +8410,0,2,2,1,1,5 +8420,0,2,2,1,1,5 +8430,0,2,2,1,1,5 +8440,0,2,2,1,1,5 +8450,0,2,2,1,1,5 +8460,0,2,2,1,1,5 +8470,0,2,2,1,1,5 +8480,0,2,2,1,1,5 +8490,0,2,2,1,1,5 +8500,0,2,2,1,1,5 +8510,0,2,2,1,1,5 +8520,0,2,2,1,1,5 +8530,0,2,2,1,1,5 +8540,0,2,2,1,1,5 +8550,0,2,2,1,1,5 +8560,0,2,2,1,1,5 +8570,0,2,2,1,1,5 +8580,0,2,2,1,1,5 +8590,0,2,2,1,1,5 +8600,0,2,2,1,1,5 +8610,0,2,2,1,1,5 +8620,0,2,2,1,1,5 +8630,0,2,2,1,1,5 +8640,0,2,2,1,1,5 +8650,0,2,2,1,1,5 +8660,0,2,2,1,1,5 +8670,0,2,2,1,1,5 +8680,0,2,2,1,1,5 +8690,0,2,2,1,1,5 +8700,0,2,2,1,1,5 +8710,0,2,2,1,1,5 +8720,0,2,2,1,1,5 +8730,0,2,2,1,1,5 +8740,0,2,2,1,1,5 +8750,0,2,2,1,1,5 +8760,0,2,2,1,1,5 +8770,0,2,2,1,1,5 +8780,0,2,2,1,1,5 +8790,0,2,2,1,1,5 +8800,0,2,2,1,1,5 +8810,0,2,2,1,1,5 +8820,0,2,2,1,1,5 +8830,0,2,2,1,1,5 +8840,0,2,2,1,1,5 +8850,0,2,2,1,1,5 +8860,0,2,2,1,1,5 +8870,0,2,2,1,1,5 +8880,0,2,2,1,1,5 +8890,0,2,2,1,1,5 +8900,0,2,2,1,1,5 +8910,0,2,2,1,1,5 +8920,0,2,2,1,1,5 +8930,0,2,2,1,1,5 +8940,0,2,2,1,1,5 +8950,0,2,2,1,1,5 +8960,0,2,2,1,1,5 +8970,0,2,2,1,1,5 +8980,0,2,2,1,1,5 +8990,0,2,2,1,1,5 +9000,0,2,2,1,1,5 +9010,0,2,2,1,1,5 +9020,0,2,2,1,1,5 +9030,0,2,2,1,1,5 +9040,0,2,2,1,1,5 +9050,0,2,2,1,1,5 +9060,0,2,2,1,1,5 +9070,0,2,2,1,1,5 +9080,0,2,2,1,1,5 +9090,0,2,2,1,1,5 +9100,0,2,2,1,1,5 +9110,0,2,2,1,1,5 +9120,0,2,2,1,1,5 +9130,0,2,2,1,1,5 +9140,0,2,2,1,1,5 +9150,0,2,2,1,1,5 +9160,0,2,2,1,1,5 +9170,0,2,2,1,1,5 +9180,0,2,2,1,1,5 +9190,0,2,2,1,1,5 +9200,0,2,2,1,1,5 +9210,0,2,2,1,1,5 +9220,0,2,2,1,1,5 +9230,0,2,2,1,1,5 +9240,0,2,2,1,1,5 +9250,0,2,2,1,1,5 +9260,0,2,2,1,1,5 +9270,0,2,2,1,1,5 +9280,0,2,2,1,1,5 +9290,0,2,2,1,1,5 +9300,0,2,2,1,1,5 +9310,0,2,2,1,1,5 +9320,0,2,2,1,1,5 +9330,0,2,2,1,1,5 +9340,0,2,2,1,1,5 +9350,0,2,2,1,1,5 +9360,0,2,2,1,1,5 +9370,0,2,2,1,1,5 +9380,0,2,2,1,1,5 +9390,0,2,2,1,1,5 +9400,0,2,2,1,1,5 +9410,0,2,2,1,1,5 +9420,0,2,2,1,1,5 +9430,0,2,2,1,1,5 +9440,0,2,2,1,1,5 +9450,0,2,2,1,1,5 +9460,0,2,2,1,1,5 +9470,0,2,2,1,1,5 +9480,0,2,2,1,1,5 +9490,0,2,2,1,1,5 +9500,0,2,2,1,1,5 +9510,0,2,2,1,1,5 +9520,0,2,2,1,1,5 +9530,0,2,2,1,1,5 +9540,0,2,2,1,1,5 +9550,0,2,2,1,1,5 +9560,0,2,2,1,1,5 +9570,0,2,2,1,1,5 +9580,0,2,2,1,1,5 +9590,0,2,2,1,1,5 +9600,0,2,2,1,1,5 +9610,0,2,2,1,1,5 +9620,0,2,2,1,1,5 +9630,0,2,2,1,1,5 +9640,0,2,2,1,1,5 +9650,0,2,2,1,1,5 +9660,0,2,2,1,1,5 +9670,0,2,2,1,1,5 +9680,0,2,2,1,1,5 +9690,0,2,2,1,1,5 +9700,0,2,2,1,1,5 +9710,0,2,2,1,1,5 +9720,0,2,2,1,1,5 +9730,0,2,2,1,1,5 +9740,0,2,2,1,1,5 +9750,0,2,2,1,1,5 +9760,0,2,2,1,1,5 +9770,0,2,2,1,1,5 +9780,0,2,2,1,1,5 +9790,0,2,2,1,1,5 +9800,0,2,2,1,1,5 +9810,0,2,2,1,1,5 +9820,0,2,2,1,1,5 +9830,0,2,2,1,1,5 +9840,0,2,2,1,1,5 +9850,0,2,2,1,1,5 +9860,0,2,2,1,1,5 +9870,0,2,2,1,1,5 +9880,0,2,2,1,1,5 +9890,0,2,2,1,1,5 +9900,0,2,2,1,1,5 +9910,0,2,2,1,1,5 +9920,0,2,2,1,1,5 +9930,0,2,2,1,1,5 +9940,0,2,2,1,1,5 +9950,0,2,2,1,1,5 +9960,0,2,2,1,1,5 +9970,0,2,2,1,1,5 +9980,0,2,2,1,1,5 +9990,0,2,2,1,1,5 +10000,0,2,2,1,1,5 +10010,0,2,2,1,1,5 +10020,0,2,2,1,1,5 +10030,0,2,2,1,1,5 +10040,0,2,2,1,1,5 +10050,0,2,2,1,1,5 +10060,0,2,2,1,1,5 +10070,0,2,2,1,1,5 +10080,0,2,2,1,1,5 +10090,0,2,2,1,1,5 +10100,0,2,2,1,1,5 diff --git a/EC-GN-JA-PCF/.svn/pristine/06/064c7ca321be88cfb10321c9014e66de9a135e0b.svn-base b/EC-GN-JA-PCF/.svn/pristine/06/064c7ca321be88cfb10321c9014e66de9a135e0b.svn-base new file mode 100644 index 0000000..c344eae --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/06/064c7ca321be88cfb10321c9014e66de9a135e0b.svn-base @@ -0,0 +1,18 @@ +record(longin, longin){ + field(SCAN, "Passive") +} +record(longout, longout){ + field(SCAN, "Passive") +} +record(ai, ai){ + field(SCAN, "Passive") +} +record(ao, ao){ + field(SCAN, "Passive") +} +record(stringin, stringin){ + field(SCAN, "Passive") +} +record(stringout, stringout){ + field(SCAN, "Passive") +} \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/07/07b07b24481aa7904c356a5cabed48e261cfdf14.svn-base b/EC-GN-JA-PCF/.svn/pristine/07/07b07b24481aa7904c356a5cabed48e261cfdf14.svn-base new file mode 100644 index 0000000..a31f134 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/07/07b07b24481aa7904c356a5cabed48e261cfdf14.svn-base @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAMessageGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAMessageGAM$(LIBEXT) \ + $(BUILD_DIR)/JAMessageGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/.svn/pristine/08/0846338dfec4bc04fbfab5da8e5b2a0bb40f295b.svn-base b/EC-GN-JA-PCF/.svn/pristine/08/0846338dfec4bc04fbfab5da8e5b2a0bb40f295b.svn-base new file mode 100644 index 0000000..6a59a92 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/08/0846338dfec4bc04fbfab5da8e5b2a0bb40f295b.svn-base @@ -0,0 +1,92 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ColorFontUtil); +// from org.csstudio.opibuilder.scriptUtil import ConsoleUtil + +var func = display.getPropertyValue("name"); +var type = widget.getPropertyValue("name"); +var widgetType = "ellipse"; +var varName = "XXXXXXX"; + +if (type.indexOf("PSH") != -1) { + varName = "-SYSHLTS"; +} +if (type.indexOf("PCF") != -1) { + varName = "-SYSHLTS"; +} +if (type.indexOf("SRV") != -1) { + varName = "-SYSHLTS"; +} +if (type.indexOf("PLC") != -1) { + varName = "-PLCHLTS"; +} +if (type.indexOf("COM") != -1) { + varName = "-SYSHLTS"; +} +if (type.indexOf("CHS") != -1) { + varName = "-SYSHLTS"; +} +// if ("IOM" in type.indexOf() != -1) { +// varName = "-BS"; +if (type.indexOf("CUB") != -1) { + varName = "-CUBHLTS"; +} +if (type.indexOf("Box") != -1) { + widgetType = "rectangle"; +} + +if (triggerPV.getName().indexOf(varName) != -1) { +// ConsoleUtil.writeInfo("Trigger PV found) { " +triggerPV.getName()); + + var s = PVUtil.getSeverity(triggerPV); + + color = ColorFontUtil.WHITE; + if( s == 0) { + color = ColorFontUtil.GREEN; + } + else if( s == 1) { + color = ColorFontUtil.RED; + } + else if( s == 2) { + color = ColorFontUtil.YELLOW; + } + else if( s == 3) { + color = ColorFontUtil.PINK; + } + + if ("ellipse" == widgetType) { + widget.setPropertyValue("foreground_color", color); + } + + var tooltip = PVUtil.getString(triggerPV); + widget.setPropertyValue("tooltip", tooltip); +} + +if (type.indexOf("IOM") != -1) { + if (triggerPV.getName().indexOf(".SIMM") == -1) { + var s = PVUtil.getSeverity(triggerPV); + var color = ColorFontUtil.WHITE; + if( s == 0) { + color = ColorFontUtil.GREEN; + } + else if( s == 1) { + color = ColorFontUtil.RED; + } + else if( s == 2) { + color = ColorFontUtil.YELLOW; + } + else if( s == 3) { + color = ColorFontUtil.PINK; + } + else if( s == 4) { + color = ColorFontUtil.GREEN; + } + + widget.setPropertyValue("foreground_color", color); + + var tooltip = PVUtil.getString(triggerPV); + widget.setPropertyValue("tooltip", tooltip); + } +} + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/09/0936506a2d384aac9e1e815774e0afd031506dc6.svn-base b/EC-GN-JA-PCF/.svn/pristine/09/0936506a2d384aac9e1e815774e0afd031506dc6.svn-base new file mode 100644 index 0000000..ac3464d --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/09/0936506a2d384aac9e1e815774e0afd031506dc6.svn-base @@ -0,0 +1,366 @@ +/** + * @file JAEPICSCAInput.cpp + * @brief Source file for class JAEPICSCAInput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAEPICSCAInput (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAEPICSCAInput.h" + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "MemoryMapInputBroker.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +namespace MARTe { +/** + * @brief Callback function for the ca_create_subscription. Single point of access which + * delegates the events to the corresponding JAEPICSPV instance. + */ +static FastPollingMutexSem eventCallbackFastMux; +/*lint -e{1746} function must match required prototype and thus cannot be changed to constant reference.*/ +void JAEPICSCAInputEventCallback(struct event_handler_args const args) { + (void) eventCallbackFastMux.FastLock(); + PVWrapper *pv = static_cast(args.usr); + if (pv != NULL_PTR(PVWrapper *)) { + (void) MemoryOperationsHelper::Copy(pv->memory, args.dbr, pv->memorySize); + } + eventCallbackFastMux.FastUnLock(); +} +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +JAEPICSCAInput::JAEPICSCAInput() : + DataSourceI(), EmbeddedServiceMethodBinderI(), executor(*this) { + pvs = NULL_PTR(PVWrapper *); + stackSize = THREADS_DEFAULT_STACKSIZE * 4u; + cpuMask = 0xffu; + eventCallbackFastMux.Create(); +} + +/*lint -e{1551} must stop the SingleThreadService in the destructor.*/ +JAEPICSCAInput::~JAEPICSCAInput() { + if (!executor.Stop()) { + if (!executor.Stop()) { + REPORT_ERROR(ErrorManagement::FatalError, "Could not stop SingleThreadService."); + } + } + (void) eventCallbackFastMux.FastLock(); + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + if (pvs[n].memory != NULL_PTR(void *)) { + GlobalObjectsDatabase::Instance()->GetStandardHeap()->Free(pvs[n].memory); + } + } + delete[] pvs; + } + eventCallbackFastMux.FastUnLock(); +} + +bool JAEPICSCAInput::Initialise(StructuredDataI & data) { + bool ok = DataSourceI::Initialise(data); + if (ok) { + if (!data.Read("CPUs", cpuMask)) { + REPORT_ERROR(ErrorManagement::Information, "No CPUs defined. Using default = %d", cpuMask); + } + if (!data.Read("StackSize", stackSize)) { + REPORT_ERROR(ErrorManagement::Information, "No StackSize defined. Using default = %d", stackSize); + } + executor.SetStackSize(stackSize); + executor.SetCPUMask(cpuMask); + } + if (ok) { + ok = data.MoveRelative("Signals"); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Could not move to the Signals section"); + } + if (ok) { + ok = data.Copy(originalSignalInformation); + } + if (ok) { + ok = originalSignalInformation.MoveToRoot(); + } + //Do not allow to add signals in run-time + if (ok) { + ok = signalsDatabase.MoveRelative("Signals"); + } + if (ok) { + ok = signalsDatabase.Write("Locked", 1u); + } + if (ok) { + ok = signalsDatabase.MoveToAncestor(1u); + } + } + if (ok) { + ok = data.MoveToAncestor(1u); + } + return ok; +} + +bool JAEPICSCAInput::SetConfiguredDatabase(StructuredDataI & data) { + bool ok = DataSourceI::SetConfiguredDatabase(data); + //Check the signal index of the timing signal. + uint32 nOfSignals = GetNumberOfSignals(); + if (ok) { + ok = (nOfSignals > 0u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one signal shall be defined"); + } + } + if (ok) { + //Do not allow samples + uint32 functionNumberOfSignals = 0u; + uint32 n; + if (GetFunctionNumberOfSignals(InputSignals, 0u, functionNumberOfSignals)) { + for (n = 0u; (n < functionNumberOfSignals) && (ok); n++) { + uint32 nSamples; + ok = GetFunctionSignalSamples(InputSignals, 0u, n, nSamples); + if (ok) { + ok = (nSamples == 1u); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The number of samples shall be exactly 1"); + } + } + } + } + if (ok) { + pvs = new PVWrapper[nOfSignals]; + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + pvs[n].memory = NULL_PTR(void *); + } + for (n = 0u; (n < nOfSignals) && (ok); n++) { + //Note that the RealTimeApplicationConfigurationBuilder is allowed to change the order of the signals w.r.t. to the originalSignalInformation + StreamString orderedSignalName; + ok = GetSignalName(n, orderedSignalName); + if (ok) { + //Have to mix and match between the original setting of the DataSource signal + //and the ones which are later added by the RealTimeApplicationConfigurationBuilder + ok = originalSignalInformation.MoveRelative(orderedSignalName.Buffer()); + } + StreamString pvName; + if (ok) { + ok = originalSignalInformation.Read("PVName", pvName); + if (!ok) { + uint32 nn = n; + REPORT_ERROR(ErrorManagement::ParametersError, "No PVName specified for signal at index %d", nn); + } + } + TypeDescriptor td = GetSignalType(n); + if (ok) { + (void) StringHelper::CopyN(&pvs[n].pvName[0], pvName.Buffer(), PV_NAME_MAX_SIZE); + if (td == CharString) { + pvs[n].pvType = DBR_STRING; + } + else if (td == Character8Bit) { + pvs[n].pvType = DBR_STRING; + } + else if (td == SignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == UnsignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == SignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == UnsignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == SignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == UnsignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == Float32Bit) { + pvs[n].pvType = DBR_FLOAT; + } + else if (td == Float64Bit) { + pvs[n].pvType = DBR_DOUBLE; + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Type %s is not supported", TypeDescriptor::GetTypeNameFromTypeDescriptor(td)); + ok = false; + } + } + uint32 numberOfElements = 1u; + if (ok) { + ok = GetSignalNumberOfElements(n, numberOfElements); + } + if (ok) { + if (pvs[n].pvType == DBR_STRING) { + ok = (numberOfElements == 40u); + } + if (!ok) { + //Could support arrays of strings with multiples of char8[40] + REPORT_ERROR(ErrorManagement::ParametersError, "Strings shall be defined with 40 elements char8[40]. Arrays of strings are not currently supported"); + } + } + if (ok) { + pvs[n].numberOfElements = numberOfElements; + } + if (ok) { + pvs[n].memorySize = td.numberOfBits; + pvs[n].memorySize /= 8u; + pvs[n].memorySize *= numberOfElements; + pvs[n].memory = GlobalObjectsDatabase::Instance()->GetStandardHeap()->Malloc(pvs[n].memorySize); + ok = originalSignalInformation.MoveToAncestor(1u); + } + } + } + + if (ok) { + ok = (executor.Start() == ErrorManagement::NoError); + } + return ok; +} + +bool JAEPICSCAInput::AllocateMemory() { + return true; +} + +uint32 JAEPICSCAInput::GetNumberOfMemoryBuffers() { + return 1u; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The signalAddress is independent of the bufferIdx.*/ +bool JAEPICSCAInput::GetSignalMemoryBuffer(const uint32 signalIdx, const uint32 bufferIdx, void*& signalAddress) { + bool ok = (pvs != NULL_PTR(PVWrapper *)); + if (ok) { + ok = (signalIdx < GetNumberOfSignals()); + } + if (ok) { + //lint -e{613} pvs cannot as otherwise ok would be false + signalAddress = pvs[signalIdx].memory; + } + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The brokerName only depends on the direction */ +const char8* JAEPICSCAInput::GetBrokerName(StructuredDataI& data, const SignalDirection direction) { + const char8* brokerName = ""; + if (direction == InputSignals) { + brokerName = "MemoryMapInputBroker"; + } + return brokerName; +} + +bool JAEPICSCAInput::GetInputBrokers(ReferenceContainer& inputBrokers, const char8* const functionName, void* const gamMemPtr) { + ReferenceT broker("MemoryMapInputBroker"); + bool ok = broker->Init(InputSignals, *this, functionName, gamMemPtr); + if (ok) { + ok = inputBrokers.Insert(broker); + } + + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: OutputBrokers are not supported. Function returns false irrespectively of the parameters.*/ +bool JAEPICSCAInput::GetOutputBrokers(ReferenceContainer& outputBrokers, const char8* const functionName, void* const gamMemPtr) { + return false; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: NOOP at StateChange, independently of the function parameters.*/ +bool JAEPICSCAInput::PrepareNextState(const char8* const currentStateName, const char8* const nextStateName) { + return true; +} + +ErrorManagement::ErrorType JAEPICSCAInput::Execute(ExecutionInfo& info) { + ErrorManagement::ErrorType err = ErrorManagement::NoError; + if (info.GetStage() == ExecutionInfo::StartupStage) { + (void) eventCallbackFastMux.FastLock(); + /*lint -e{9130} -e{835} -e{845} -e{747} Several false positives. lint is getting confused here for some reason.*/ + if (ca_context_create(ca_enable_preemptive_callback) != ECA_NORMAL) { + err = ErrorManagement::FatalError; + REPORT_ERROR(err, "ca_enable_preemptive_callback failed"); + } + + uint32 n; + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + /*lint -e{9130} -e{835} -e{845} -e{747} Several false positives. lint is getting confused here for some reason.*/ + if (ca_create_channel(&pvs[n].pvName[0], NULL_PTR(caCh *), NULL_PTR(void *), 20u, &pvs[n].pvChid) != ECA_NORMAL) { + err = ErrorManagement::FatalError; + REPORT_ERROR(err, "ca_create_channel failed for PV with name %s", pvs[n].pvName); + } + if (err.ErrorsCleared()) { + /*lint -e{9130} -e{835} -e{845} -e{747} Several false positives. lint is getting confused here for some reason.*/ + if (ca_create_subscription(pvs[n].pvType, pvs[n].numberOfElements, pvs[n].pvChid, DBE_VALUE, &JAEPICSCAInputEventCallback, &pvs[n], + &pvs[n].pvEvid) != ECA_NORMAL) { + err = ErrorManagement::FatalError; + REPORT_ERROR(err, "ca_create_subscription failed for PV %s", pvs[n].pvName); + } + } + } + } + eventCallbackFastMux.FastUnLock(); + } + else if (info.GetStage() != ExecutionInfo::BadTerminationStage) { + Sleep::Sec(1.0F); + } + else { + (void) eventCallbackFastMux.FastLock(); + uint32 n; + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + (void) ca_clear_subscription(pvs[n].pvEvid); + (void) ca_clear_event(pvs[n].pvEvid); + (void) ca_clear_channel(pvs[n].pvChid); + } + } + ca_detach_context(); + ca_context_destroy(); + eventCallbackFastMux.FastUnLock(); + } + + return err; +} + +uint32 JAEPICSCAInput::GetStackSize() const { + return stackSize; +} + +uint32 JAEPICSCAInput::GetCPUMask() const { + return cpuMask; +} + +bool JAEPICSCAInput::Synchronise() { + return false; +} + +CLASS_REGISTER(JAEPICSCAInput, "1.0") + +} + diff --git a/EC-GN-JA-PCF/.svn/pristine/09/09705f4f118007099a767b3d670ccf9beb7e0fc3.svn-base b/EC-GN-JA-PCF/.svn/pristine/09/09705f4f118007099a767b3d670ccf9beb7e0fc3.svn-base new file mode 100644 index 0000000..30d6e02 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/09/09705f4f118007099a767b3d670ccf9beb7e0fc3.svn-base @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/09/098b66d04ddbf07fba4dc6ea76fd29e49a161d11.svn-base b/EC-GN-JA-PCF/.svn/pristine/09/098b66d04ddbf07fba4dc6ea76fd29e49a161d11.svn-base new file mode 100644 index 0000000..06c6d8d --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/09/098b66d04ddbf07fba4dc6ea76fd29e49a161d11.svn-base @@ -0,0 +1 @@ +Last SDD Generation: Tue May 13 15:51:08 UTC 2025 diff --git a/EC-GN-JA-PCF/.svn/pristine/09/09cc9d56d02d385e9dad6e0ab0f25284ad7cb839.svn-base b/EC-GN-JA-PCF/.svn/pristine/09/09cc9d56d02d385e9dad6e0ab0f25284ad7cb839.svn-base new file mode 100644 index 0000000..6fb3d04 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/09/09cc9d56d02d385e9dad6e0ab0f25284ad7cb839.svn-base @@ -0,0 +1,4946 @@ +// LoggerService node: See /var/log/messages file. +// +LoggerService = { +// Class = LoggerService +// CPUs = 0x8000 +// StackSize = 32768 +// NumberOfLogPages = 128 +// +SysLogger = { +// Class = SysLogger +// Format = "EtOoFmC" +// PrintKeys = 1 +// Ident = "JAGyA" +// } +// } + +// StateMachine node ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +Start = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +DISABLED = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITSTANDBY = { + Class = ReferenceContainer + +GoWaitReady = { + Class = StateMachineEvent + NextState = "WAITREADY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitReady + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoDisabled = { + Class = StateMachineEvent + NextState = "DISABLED" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Disabled + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITREADY = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITPERMIT = { + Class = ReferenceContainer + +GoWaitReady = { + Class = StateMachineEvent + NextState = "WAITREADY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitReady + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON = { + Class = StateMachineEvent + NextState = "WAITHVON" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON_SDN = { + Class = StateMachineEvent + NextState = "WAITHVON_SDN" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON_SDN + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON_PREP = { + Class = StateMachineEvent + NextState = "WAITHVON_PREP" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON_PREP + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON_SDN_PREP = { + Class = StateMachineEvent + NextState = "WAITHVON_SDN_PREP" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON_SDN_PREP + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + // HVPS sequence control states. + +WAITHVON = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITHVON_SDN = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITHVON_PREP = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITHVON_SDN_PREP = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + // Error State (Enter by HVPS errors) + +ERROR = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } +} + +// RealTime Application node ++JAGyrotronRTApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + //Timer GAM for thread 1. + +Timer1kHzGAM = { + Class = IOGAM + InputSignals = { + Counter = { + DataSource = Timer1kHz + Type = uint32 + Frequency = 1000 //Hz + } + Time = { + DataSource = Timer1kHz + Type = uint32 + } + } + OutputSignals = { + Counter1kHz = { + DataSource = DDB1 + Type = uint32 + } + Time1kHz = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM to update PCF state-machine state + +InErrorGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 1 + } + } + } + +InDisabledGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 2 + } + } + } + +InWaitStandbyGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 3 + } + } + } + +InWaitReadyGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 4 + } + } + } + +InWaitPermitGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 5 + } + } + } + +InWaitHVONGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 6 + } + } + } + +InWaitHVON_PREPGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 7 + } + } + } + +InWaitHVON_SDNGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 8 + } + } + } + +InWaitHVON_SDN_PREPGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 9 + } + } + } + + // Copy data from DDB1 to EPICSCAOutput DataSource. + +EPICSOutputGAM = { + Class = IOGAM + InputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + } + MCPS_ACT_SP = { + DataSource = DDB1 + Type = uint32 + } + GCPS_ACT_SP = { + DataSource = DDB1 + Type = uint32 + } + BPS_OUT = { + DataSource = DDB1 + Type = float32 + } + APS_OUT = { + DataSource = DDB1 + Type = float32 + } + MCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + GCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + FHPS_REF = { + DataSource = DDB1 + Type = float32 + } + CSV_LOADED = { + DataSource = DDB1 + Type = uint32 + } + CSV_ERR = { + DataSource = DDB1 + Type = uint32 + } + ELAPSED_TIME = { + DataSource = DDB1 + Type = uint32 + } + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + RFON = { + DataSource = DDB1 + Type = uint32 + } + MHVPS_OUT = { + DataSource = DDB1 + Type = float32 + } + PREP_TIME_WF = { + DataSource = DDB1 + Type = int32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + MHVPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + BPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + APS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + MCPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GCPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + FHPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + CCPS_REF = { + DataSource = DDB1 + Type = float32 + } + MHVPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + APS_STOP = { + DataSource = DDB1 + Type = uint32 + } + BPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + BEAM_ON_TIME = { + DataSource = DDB1 + Type = uint32 + } + PCF_FLT = { + DataSource = DDB1 + Type = uint32 + } + BEAM_ON_STAT = { + DataSource = DDB1 + Type = uint32 + } + SHOT_ID = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + FHPS_AUTO_STAT = { + DataSource = DDB1 + Type = uint32 + } + //Add 20201117 + APS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + APS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + MHVPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + PCF_STATE = { + DataSource = EPICSCAOutput + Type = uint32 + } + MCPS_ACT_SP = { + DataSource = EPICSCAOutput + Type = uint32 + } + GCPS_ACT_SP = { + DataSource = EPICSCAOutput + Type = uint32 + } + BPS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + APS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + MCPS_TRG_CURR_SET = { + DataSource = EPICSCAOutput + Type = float32 + } + GCPS_TRG_CURR_SET = { + DataSource = EPICSCAOutput + Type = float32 + } + FHPS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + CSV_LOADED = { + DataSource = EPICSCAOutput + Type = uint32 + } + CSV_ERR = { + DataSource = EPICSCAOutput + Type = uint32 + } + ELAPSED_TIME = { + DataSource = EPICSCAOutput + Type = uint32 + } + HVARMED = { + DataSource = EPICSCAOutput + Type = uint32 + } + HVINJECTION = { + DataSource = EPICSCAOutput + Type = uint32 + } + RFON = { + DataSource = EPICSCAOutput + Type = uint32 + } + + MHVPS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + PREP_TIME_WF = { + DataSource = EPICSCAOutput + } + MHVPS_PREP_WF = { + DataSource = EPICSCAOutput + } + BPS_PREP_WF = { + DataSource = EPICSCAOutput + } + APS_PREP_WF = { + DataSource = EPICSCAOutput + } + MCPS_PREP_WF = { + DataSource = EPICSCAOutput + } + GCPS_PREP_WF = { + DataSource = EPICSCAOutput + } + FHPS_PREP_WF = { + DataSource = EPICSCAOutput + } + CCPS_REF = { + DataSource = EPICSCAOutput + } + MHVPS_STOP = { + DataSource = EPICSCAOutput + Type = uint32 + } + APS_STOP = { + DataSource = EPICSCAOutput + Type = uint32 + } + BPS_STOP = { + DataSource = EPICSCAOutput + Type = uint32 + } + BEAM_ON_TIME = { + DataSource = EPICSCAOutput + Type = uint32 + } + PCF_FLT = { + DataSource = EPICSCAOutput + } + BEAM_ON_STAT = { + DataSource = EPICSCAOutput + } + SHOT_ID = { + DataSource = EPICSCAOutput + } + FHPS_AUTO_STAT = { + DataSource = EPICSCAOutput + } + //Added 20201117 + APS_HVON = { + DataSource = EPICSCAOutput + } + APS_SWON = { + DataSource = EPICSCAOutput + } + BPS_HVON = { + DataSource = EPICSCAOutput + } + BPS_SWON = { + DataSource = EPICSCAOutput + } + MHVPS_HVON = { + DataSource = EPICSCAOutput + } + } + } + + // Message GAM in Disabled state. + +GoWaitStandbyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1} + Comparators = {EQUALS} + InputSignals = { + PLC_SELECT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + +GoWaitStandbyFromReadyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0} + Comparators = {EQUALS} + InputSignals = { + PLC_STANDBY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + + // MCPS, GCPS PV to DDB1 + +GCPSGAM = { + Class = IOGAM + InputSignals = { + GCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + GCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + } + } + +MCPSGAM = { + Class = IOGAM + InputSignals = { + MCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + MCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + } + } + // Message GAM in Standby state. + +GoDisabledGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0} + Comparators = {EQUALS} + InputSignals = { + PLC_SELECT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoDisabled + } + } + + //GAM in WaitReady state. Check MCPS,GCPS,FHPS state for state transition. + +GoWaitReadyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {3 3 1} + ExpectedFloatValues = {0 0 0} + Comparators = {EQUALS GREATER EQUALS GREATER EQUALS GREATER} + InputSignals = { + MCPS_ACT_RB = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_MCPS_CURR_MON = { + DataSource = EPICSCAInput + Type = float32 + } + GCPS_ACT_RB = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_GCPS_CURR_MON = { + DataSource = EPICSCAInput + Type = float32 + } + FHPS_RU = { + DataSource = EPICSCAInput + Type = uint32 + } + FHPS_MEAS_ACV = { + DataSource = EPICSCAInput + Type = float32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitReady + } + } + + //GAM for prepro + +WFRecordGAM = { + Class = JAWFRecordGAM + Directory = "../Configurations" //TODO: Enter directory path for prepro files. + InputSignals = { + CSV_LOAD = { + DataSource = EPICSCAInput + Type = uint32 + } + Filename = { + Alias = CSV_NAME + DataSource = EPICSCAInput + } + } + OutputSignals = { + PREP_TIME_WF = { + DataSource = DDB1 + } + MHVPS_PREP_WF = { + DataSource = DDB1 + } + BPS_PREP_WF = { + DataSource = DDB1 + } + APS_PREP_WF = { + DataSource = DDB1 + } + MCPS_PREP_WF = { + DataSource = DDB1 + } + GCPS_PREP_WF = { + DataSource = DDB1 + } + FHPS_PREP_WF = { + DataSource = DDB1 + } + } + } + +PreProgrammedGAM = { + Class = JAPreProgrammedGAM + Directory = "../Configurations" // TODO: Enter the directory path for prepro files. + PreProgrammedPeriodMs = 1 // Parameter update periods in ms. + InputSignals = { + CSV_LOAD = { + DataSource = EPICSCAInput + Type = uint32 + } + Filename = { + Alias = CSV_NAME + DataSource = EPICSCAInput + } + FHPS_REF = { + Alias = FHPS_AUTO_TAGV + DataSource = EPICSCAInput + Type = float32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + GYA_PREPRO_TIME = { + DataSource = DDB1 + Type = int32 + } + MHVPS_REF = { + DataSource = DDB1 + Type = float32 + } + BPS_REF = { + DataSource = DDB1 + Type = float32 + } + APS_REF = { + DataSource = DDB1 + Type = float32 + } + MCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + GCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + FHPS_PrePro = { + DataSource = DDB1 + Type = float32 + } + CSV_LOADED = { + DataSource = DDB1 + Type = uint32 + } + CSV_ERR = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM in WaitReady state. Check PLC_READY and CCPS_IN_OPERATION status. + +GoWaitPermitGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 1} //20201222 modified. In the past, 0 1. + Comparators = {EQUALS EQUALS} + InputSignals = { + CCPS_IN_OPERATION = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_READY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitPermit + } + } + + //GAM in WaitPermit state. Check Permit and States of Operation Modes. + +GoWaitReadyFromWaitPermitGAM = { + Class = JAMessageGAM + Operation = OR + ExpectedIntValues = {0 0} + Comparators = {EQUALS EQUALS} + InputSignals = { + PLC_STANDBY = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_READY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitReady + } + } + +GoWaitHVONGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0 0 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON + } + } + +GoWaitHVON_PREP_GAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0 1 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON_PREP + } + } + +GoWaitHVON_SDN_GAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 0 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON_SDN + } + } + +GoWaitHVON_SDN_PREP_GAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 1 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON_SDN_PREP + } + } + + //GAM in WaitHVON_xx states. If PLC_READY is zero, goto WaitStandby. + +FromWaitHVONToWaitStandby = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0} + Comparators = {EQUALS} + InputSignals = { + PLC_READY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + //GAM in WaitHVON_xx states. If PLC_PERMIT is zero, goto WaitPermit. + +FromWaitHVONToWaitPermit = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0 0 0 0 0 0} //modified 20201222 + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} //modified 20201222 + InputSignals = { + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + //add 20201222 + APS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + MHVPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + APS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + }//20201222 + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitPermit + } + } + + // Check the selected mode, and check maximum pulse length. Use with a StateMachineGAM + +ModeLimitGAM = { + Class = JAModeControlGAM + InputSignals = { + PLC_MODE1 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD1_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_MODE2 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD2_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_MODE3 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD3_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_MODE4 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD4_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + Time = { + DataSource = DDB1 + Type = uint32 + } + HVInjection = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + MODE_SHOTLEN_FLAG = { + DataSource = DDB1 + Type = uint32 + } + } + } + + // State notify GAMs. These GAMs are in all WaitHVON states. + +writeBeamONStateGAM = { + Class = IOGAM + InputSignals = { + BEAM_ON_STAT = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + BEAM_ON_STAT = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeHVArmedStateGAM = { + Class = IOGAM + InputSignals = { + HVARMED = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeHVInjectionStateGAM = { + Class = IOGAM + InputSignals = { + HVINJECTION = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeRFONStateGAM = { + Class = IOGAM + InputSignals = { + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + RFON = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeBeamONTimeGAM = { + Class = IOGAM + InputSignals = { + BeamONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + ELAPSED_TIME = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeRFONTimeGAM = { + Class = IOGAM + InputSignals = { + RFONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + BEAM_ON_TIME = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM for trianguler waveform generation. + +CCPSWaveformGAM = { + Class = JATriangleWaveGAM + InputSignals = { + Frequency = { + Alias = CCPS_OUTPUT_FREQ + DataSource = EPICSCAInput + Type = float32 + } + Amplitude = { + Alias = CCPS_OUTPUT_AMP + DataSource = EPICSCAInput + Type = float32 + } + Offset = { + Alias = CCPS_OUTPUT_OFFS + DataSource = EPICSCAInput + Type = float32 + } + PLCSTANDBY = { + Alias = PLC_STANDBY + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + CCPS_REF = { + DataSource = DDB1 + Type = float32 + } + } + } + //GAM for FHPS ramping up operation. + +FHPSSetpointGAM = { + Class = IOGAM + InputSignals = { + FHPS_AUTO_TAGV = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + FHPS_TAGV = { + DataSource = DDB1 + Type = float32 + } + } + } + +FHPSRampupGAM = { + Class = JARampupGAM + InputSignals = { + Currspv = { + Alias = FHPS_REF + DataSource = DDB1 + Type = float32 + } + Targetv = { + Alias = FHPS_TAGV + DataSource = DDB1 + Type = float32 + } + Time = { + Alias = FHPS_AUTO_TIME + DataSource = EPICSCAInput + Type = float32 + } + Start = { + Alias = FHPS_AUTO_START + DataSource = EPICSCAInput + Type = uint32 + } + PLC_STANDBY = { + Alias = PLC_STANDBY + DataSource = EPICSCAInput + Type = uint32 + } + MANUAL_AUTO = { + Alias = FHPS_MANM + DataSource = EPICSCAInput + Type = uint32 + } + FHPS_PrePro = { + DataSource = DDB1 + Type = float32 + } + } + OutputSignals = { + FHPS_REF = { + DataSource = DDB1 + Type = float32 + } + FHPS_AUTO_STAT = { + DataSource = DDB1 + Type = uint32 + } + } + } + //GAM for error handling. + // GAM that sets ERROR and STOP FLAGS for APS, BPS and MHVPS when we enter Error state and resets them when we leave Error state + +ErrorGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = AND + ExpectedValues = {1 0 0 0 0 0 0 0 0 0 0} + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} + Values = {0 0 0} + InputSignals = { + // Conditional signals + RESET_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + MHVPS_STOP_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + APS_STOP_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + BPS_STOP_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + MHVPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + APS_STOP = { + DataSource = DDB1 + Type = uint32 + } + BPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + } + } + +StopRequestGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {1 1 1 1 1 1 1 1 1 1} + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} + Values = {1} + InputSignals = { + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + StopRequest_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + StopRequest = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //Test whether board status are stable + +GAMDisplayBoardStatus = { + Class = IOGAM + InputSignals = { + CCPS_OUTPUT_OFFS = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + CCPS_OUTPUT_FREQ_DISP = { + DataSource = Display + Type = float32 + } + } + } + //Check PXI board status. + +PXI6259ErrorGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {0 0 0 0} + Comparators = {GREATER GREATER GREATER GREATER} + Values = {1} + InputSignals = { + // Conditional signals + PXI6259_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6259_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6528_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6528_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + PCF_FLT_6259_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT_6259 = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PXI6368Error03GAM = {// detect Hardware error (status number 3) for PXI6368 boards. + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {3 3} + Comparators = {EQUALS EQUALS} + Values = {1} + InputSignals = { + PXI6368_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6368_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + PCF_FLT_6368_ERRNO_03_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT_6368_ERRNO_03 = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PXI6368Error04GAM = {// detect No board error (status number 4) for PXI6368 boards. + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {4 4} + Comparators = {EQUALS EQUALS} + Values = {1} + InputSignals = { + PXI6368_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6368_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + PCF_FLT_6368_ERRNO_04_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT_6368_ERRNO_04 = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PXIErrorGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {0 0 0} + Comparators = {GREATER GREATER GREATER} + Values = {1} + InputSignals = { + PCF_FLT_6368_ERRNO_03 = { + DataSource = DDB1 + Type = uint32 + } + PCF_FLT_6368_ERRNO_04 = { + DataSource = DDB1 + Type = uint32 + } + PCF_FLT_6259 = { + DataSource = DDB1 + Type = uint32 + } + // Default values + PCF_FLT_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT = { + DataSource = DDB1 + Type = uint32 + } + } + } + + + +FromErrorToWaitStandbyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 0 0 0 0 0 0 0 0 0 0} + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} + InputSignals = { + RESET_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + // From any state to Error state. + +GoErrorGAM = { + Class = JAMessageGAM + Operation = OR + ExpectedIntValues = {1 1 1 1 1 1 1 1 1 1} + InputSignals = { + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoError + } + } + // Reset HVPS outputs. ToDo: Fix to access NI d.s. + +ResetPSsGAM = { + Class = ConstantGAM + OutputSignals = { + MHVPS_HVON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + BPS_HVON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + BPS_SWON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + APS_HVON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + APS_SWON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + } + // Update status. ToDo: Fix to access NI d.s. + +ExitedHVArmedInjectionRFONGAM = { + Class = JAConditionalSignalUpdateGAM + Values = {0 0 0} + InputSignals = { + // Condition signals + // Default output values + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + RFON = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + RFON = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM for SDN communication.(ProcessWF:thread1, Subscribe/Publish:thread2) + +SDNCommandGAM = { + Class = IOGAM + InputSignals = { + Command = { + DataSource = SDNSubCommands + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 64 + Ranges = {{0 0}} + // TODO uncomment this for release/testing + //Frequency = 1 + } + ESDNTime = { + DataSource = SDNSubCommands + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + OutputSignals = { + Command = { + DataSource = RealTimeThreadAsyncBridge + Type = uint16 + } + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + } + } + + +SDNReplyGAM = { + Class = IOGAM + InputSignals = { + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + WaveformPacketID = { + DataSource = DDB1 + Type = uint16 + } + GYA_BPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_BPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_BPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_BPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_APS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_APS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_APS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_APS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC1_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC1_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC1_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC1_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC2_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC2_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC2_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC2_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_MHVPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_MHVPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_MHVPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_MHVPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_MCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYB_MCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYA_GCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYB_GCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYA_FHPS_MEAS_ACI = { + DataSource = EPICSCAInput + } + GYB_FHPS_MEAS_ACI = { + DataSource = EPICSCAInput + } + GYA_CCPS_MEAS_DCI = { + DataSource = EPICSCAInput + } + GYB_CCPS_MEAS_DCI = { + DataSource = EPICSCAInput + } + } + OutputSignals = { + ESDNTime = { + DataSource = SDNReply + Type = uint32 + Trigger = 1 + } + ReplyWaveformAck = { + DataSource = SDNReply + Type = uint16 + } + GYA_BPS_MESVOLT = { + DataSource = SDNReply + } + GYB_BPS_MESVOLT = { + DataSource = SDNReply + } + GYA_BPS_MESCURR = { + DataSource = SDNReply + } + GYB_BPS_MESCURR = { + DataSource = SDNReply + } + GYA_APS_MESVOLT = { + DataSource = SDNReply + } + GYB_APS_MESVOLT = { + DataSource = SDNReply + } + GYA_APS_MESCURR = { + DataSource = SDNReply + } + GYB_APS_MESCURR = { + DataSource = SDNReply + } + GYA_ARC1_MESVOLT = { + DataSource = SDNReply + } + GYB_ARC1_MESVOLT = { + DataSource = SDNReply + } + GYA_ARC1_MESCURR = { + DataSource = SDNReply + } + GYB_ARC1_MESCURR = { + DataSource = SDNReply + } + GYA_ARC2_MESVOLT = { + DataSource = SDNReply + } + GYB_ARC2_MESVOLT = { + DataSource = SDNReply + } + GYA_ARC2_MESCURR = { + DataSource = SDNReply + } + GYB_ARC2_MESCURR = { + DataSource = SDNReply + } + GYA_MHVPS_MESVOLT = { + DataSource = SDNReply + } + GYB_MHVPS_MESVOLT = { + DataSource = SDNReply + } + GYA_MHVPS_MESCURR = { + DataSource = SDNReply + } + GYB_MHVPS_MESCURR = { + DataSource = SDNReply + } + GYA_MCPS_CURR_MON = { + DataSource = SDNReply + } + GYB_MCPS_CURR_MON = { + DataSource = SDNReply + } + GYA_GCPS_CURR_MON = { + DataSource = SDNReply + } + GYB_GCPS_CURR_MON = { + DataSource = SDNReply + } + GYA_FHPS_MEAS_ACI = { + DataSource = SDNReply + } + GYB_FHPS_MEAS_ACI = { + DataSource = SDNReply + } + GYA_CCPS_MEAS_DCI = { + DataSource = SDNReply + } + GYB_CCPS_MEAS_DCI = { + DataSource = SDNReply + } + } + } + //Write SDN waveform data into PS setpoint PV. + + // Timer for SDN thread. + +TimeSDNGAM = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = TimerSDN + Type = uint32 + } + Counter = { + DataSource = TimerSDN + Type = uint32 + Frequency = 1000 //operation:1k(=1ms cyc), debug:10 + } + RTThreadPerf = { + DataSource = Timings + Alias = "WaitHVON.Thread3_CycleTime" + Type = uint32 + } + } + OutputSignals = { + TimeSDN = { + DataSource = DDB1 + Type = uint32 + } + CounterSDN = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerfSDN = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM for realtime statemachine + +Timer100kHzGAM = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = Timer + Type = uint32 + } + Counter = { + DataSource = Timer + Type = uint32 + Frequency = 200000 //operation:100k(=10us cyc), debug:10 + } + RTThreadPerf = { + DataSource = Timings + Alias = "WaitHVON.Thread3_CycleTime" + Type = uint32 + } + } + OutputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerf = { + DataSource = DDB1 + Type = uint32 + } + } + } + + // Digital Output port access. (These GAMs are different from GYA.) + // EPICS PV to one uint8 variable + +NI6528P3GAM = { + Class = JABitSumGAM + InputSignals = { + APS_HVON = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_SWON = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_STOP = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_HVON = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_SWON = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_STOP = { + DataSource = EPICSCAInput + Type = uint32 + } + BEAM_ON_STAT = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV5 = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + NI6528P3CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P4GAM = { + Class = JABitSumGAM + InputSignals = { + DO_REV6 = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV7 = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV8 = { + DataSource = EPICSCAInput + Type = uint32 + } + None1 = { + DataSource = DDB1 + Type = uint32 + Defualt = 0 + } + None2 = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + None3 = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + HVARMED = { + DataSource = EPICSCAInput + Type = uint32 + } + HVINJECTION = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + NI6528P4CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P4GYAGAM = { + Class = JABitSumGAM + InputSignals = { + DO_REV6_GYA = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV7_GYA = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV8_GYA = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_HVON = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_STOP = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_MODSW = { + DataSource = EPICSCAInput + Type = uint32 + } + PCF_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + HVARMED_GYA = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + NI6528P4GYACurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P5GAM = { + Class = JABitSumGAM + InputSignals = { + RFON = { + DataSource = EPICSCAInput + Type = uint32 + } + FHPS_RU = { + DataSource = EPICSCAInput + Type = uint32 + } + SCM_RU = { + DataSource = EPICSCAInput + Type = uint32 + } + CCPS_IN_OPERATION = { + DataSource = EPICSCAInput + Type = uint32 + } + REV2_PLC = { + DataSource = EPICSCAInput + Type = uint32 + } + REV3_PLC = { + DataSource = EPICSCAInput + Type = uint32 + } + None4 = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + None5 = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + NI6528P5CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + // reversed uint8 variable (value to write on port.) + +NI6528P3PV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P3CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P3PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P4PV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P4CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P4PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P4GYAPV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P4GYACurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P4GYAPortValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P5PV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P5CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P5PortValue = { + DataSource = NI6528P5 + Type = uint8 + } + } + } + // write a uint8 port value to PXI data source. + +NI6528P3WriteGAM = { + Class = IOGAM + InputSignals = { + NI6528P3PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P3Value = { + DataSource = NI6528P3 + Type = uint8 + } + } + } + +NI6528P4WriteGAM = { + Class = IOGAM + InputSignals = { + NI6528P4PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P4Value = { + DataSource = NI6528P4 + Type = uint8 + } + } + } + +NI6528P4GYAWriteGAM = { + Class = IOGAM + InputSignals = { + NI6528P4GYAPortValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P4GYAValue = { + DataSource = NI6528P4GYA + Type = uint8 + } + } + } + + //Thread3 pulse parameter EPICS PVs read. + +GAMEPICSCA = { + Class = IOGAM + InputSignals = { + MHVPS_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_HVON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_SWON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_HVON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_SWON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + SHOTLEN = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ON = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + MHVPS_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + SHOTLEN = { + DataSource = DDB1 + Type = uint32 + } + PLC_ON = { + DataSource = DDB1 + Type = uint32 + } + } + } + + // Real-Time state machine GAMs + +GAMRealTimeStateMachine = { + Class = JARTStateMachineGAM + ConditionTrigger = 1 + mhvps_hvon = 4 + aps_hvon = 1 + aps_swon = 16 + bps_hvon = 2 + bps_swon = 8 + InputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + PLC_ON = { + DataSource = DDB1 + Type = uint32 + } + MHVPS_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + SHOTLEN = { + DataSource = DDB1 + Type = uint32 + } + StopRequest = { + DataSource = DDB1 + Type = uint32 + } + MODE_SHOTLEN_FLAG = { + DataSource = DDB1 + Type = uint32 + } + SHORT_PULSE_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + //Add 20210120 + MHVPS_MODSW = { + DataSource = EPICSCAInput + Type = uint32 + } + //Add 20210120 + DO_REV6_GYA = { + DataSource = EPICSCAInput + Type = uint32 + } + + } + OutputSignals = { + RTSMValue = { + DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + BEAM_ON_STAT = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVARMED = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVINJECTION = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BeamONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + SHOT_ID = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + //Added 20201117 + APS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + APS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + MHVPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + NI6259Value = { + DataSource = NI6259 + //DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + NI6528P3Value = { + DataSource = NI6528P3 + //DataSource = DDB1 + Type = uint8 + } + NI6528P4GYAValue = { + DataSource = NI6528P4GYA + //DataSource = DDB1 + Type = uint8 + } + } + } + +GAMSDNRealTimeStateMachine = { + Class = JASDNRTStateMachineGAM + ConditionTrigger = 1 + mhvps_hvon = 4 + aps_hvon = 1 + aps_swon = 16 + bps_hvon = 2 + bps_swon = 8 + InputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + PLC_ON = { + DataSource = DDB1 + Type = uint32 + } + MHVPS_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + SHOTLEN = { + DataSource = DDB1 + Type = uint32 + } + StopRequest = { + DataSource = DDB1 + Type = uint32 + } + MODE_SHOTLEN_FLAG = { + DataSource = DDB1 + Type = uint32 + } + Command = { + DataSource = RealTimeThreadAsyncBridge + Type = uint16 + } + + } + OutputSignals = { + RTSMValue = { + DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + BeamON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVARMED = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVINJECTION = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BeamONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + SHOT_ID = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + } + + //Terminal Interface reads three inputs. + // INPUTs: StateMahine Value, NI6528P3Value and NI6528P4Value + // OUTPUTs: Each NIxxx data sources. + +terminalInterfaceGAM = { + Class = JATerminalInterfaceGAM + mhvps_hvon_term = 4 + aps_hvon_term = 1 + aps_swon_term = 16 + bps_hvon_term = 2 + bps_swon_term = 8 + InputSignals = { + MHVPS_HVON = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON = { + DataSource = DDB1 + Type = uint32 + } + SHORT_PULSE_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + //Input signals about HW terminal. + RTSMValue = { + DataSource = DDB1 + Type = uint32 + } + NI6528P3CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + NI6528P4GYACurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6259Value = { + DataSource = NI6259 + //DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + NI6528P3Value = { + DataSource = NI6528P3 + //DataSource = DDB1 + Type = uint8 + } + NI6528P4GYAValue = { + DataSource = NI6528P4GYA + //DataSource = DDB1 + Type = uint8 + } + } + } + + // Switching AO port source between internal variable and EPICS PV. + +choiseGAM = { + Class = JASourceChoiseGAM + numberOfPVs = 5 + InputSignals = { + BPS_REF = { + DataSource = DDB1 + Type = float32 + } + BPS_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + BPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + APS_REF = { + DataSource = DDB1 + Type = float32 + } + APS_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + APS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + MHVPS_REF = { + DataSource = DDB1 + Type = float32 + } + MHVPS_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + MHVPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + MCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + MCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + MCPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + GCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + GCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + GCPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + } + OutputSignals = { + BPS_OUT = { + DataSource = DDB1 + Type = float32 + } + APS_OUT = { + DataSource = DDB1 + Type = float32 + } + MHVPS_OUT = { + DataSource = DDB1 + Type = float32 + } + MCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + GCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + } + } + + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + AllowNoProducers = 1 + ResetUnusedVariablesAtStateChange = 0 + } + // Timer for thread 1 (Normal RT state execution cycle.) + +Timer1kHz = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x1000 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + +TimerSDN = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x2000 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + // Timer for thread 3 (RTStateMachineGAM execution cycle.) + +Timer = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x4000 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + + +Timings = { + Class = TimingDataSource + } + +Display = { + Class = LoggerDataSource + } + // for data exechange between threads. + +RealTimeThreadAsyncBridge = { + Class = RealTimeThreadAsyncBridge + NumberOfBuffers = 20 + } + // for access ECPIS PV. + +EPICSCAInput = { + Class = "EPICSCA::EPICSCAInput" + CPUMask = "0x1000" //change from 200 + StackSize = "10000000" + Signals = { + // PV for GYA(6528.1 port4) + DO_REV6_GYA = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV6" + Type = uint32 + } + DO_REV7_GYA = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV7" + Type = uint32 + } + DO_REV8_GYA = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV8" + Type = uint32 + } + HVARMED_GYA = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA1" + Type = uint32 + } + // PV for DO + REV2_PLC = { + PVName = "EC-GN-P01-GPS:PLC4110-RV2" + Type = uint32 + } + REV3_PLC = { + PVName = "EC-GN-P01-GPS:PLC4110-RV3" + Type = uint32 + } + // PV for manually setting + BPS_MM = { + PVName = "EC-GN-P01-PB2F:STAT-MANM" + Type = uint32 + } + BPS_MANUAL = { + PVName = "EC-GN-P01-PB2F:PSU2000-EREF-MSP" + Type = float32 + } + APS_MM = { + PVName = "EC-GN-P01-PA2F:STAT-MANM" + Type = uint32 + } + APS_MANUAL = { + PVName = "EC-GN-P01-PA2F:PSU4000-EREF-MSP" + Type = float32 + } + MHVPS_MANUAL = { + PVName = "EC-GN-P01-PMF:PSU0000-EREF-MSP" + Type = float32 + } + MHVPS_MM = { + PVName = "EC-GN-P01-PMF:STAT-MANM" + Type = uint32 + } + // Analog Input PVs. + GYA_BPS_MESVOLT = { + PVName = "EC-GN-P01-PB1F:PSU1000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_BPS_MESVOLT = { + PVName = "EC-GN-P01-PB2F:PSU2000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_BPS_MESCURR = { + PVName = "EC-GN-P01-PB1F:PSU1000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_BPS_MESCURR = { + PVName = "EC-GN-P01-PB2F:PSU2000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_APS_MESVOLT = { + PVName = "EC-GN-P01-PA1F:PSU3000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_APS_MESVOLT = { + PVName = "EC-GN-P01-PA2F:PSU4000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_APS_MESCURR = { + PVName = "EC-GN-P01-PA1F:PSU3000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_APS_MESCURR = { + PVName = "EC-GN-P01-PA2F:PSU4000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC1_MESVOLT = { + PVName = "EC-GN-P01-GAF:MOE2810-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC1_MESVOLT = { + PVName = "EC-GN-P01-GBF:MOE2810-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC1_MESCURR = { + PVName = "EC-GN-P01-GAF:MOE2820-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC1_MESCURR = { + PVName = "EC-GN-P01-GBF:MOE2820-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC2_MESVOLT = { + PVName = "EC-GN-P01-GAF:MOE2830-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC2_MESVOLT = { + PVName = "EC-GN-P01-GBF:MOE2830-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC2_MESCURR = { + PVName = "EC-GN-P01-GAF:MRF2910-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC2_MESCURR = { + PVName = "EC-GN-P01-GBF:MRF2910-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_MHVPS_MESVOLT = { + PVName = "EC-GN-P01-PMF:PSU0000-ET-GA" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_MHVPS_MESVOLT = { + PVName = "EC-GN-P01-PMF:PSU0000-ET-GB" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_MHVPS_MESCURR = { + PVName = "EC-GN-P01-PMF:PSU0000-IT-GA" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_MHVPS_MESCURR = { + PVName = "EC-GN-P01-PMF:PSU0000-IT-GB" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + + //Digital Input PVs in Signal-Variable tab. + APS_READY = { + PVName = "EC-GN-P01-PA2F:PSU4000-YSTA" + Type = uint32 + } + GYA_APS_FLT = { + PVName = "EC-GN-P01-PA1F:PSU3000-YFLT" + Type = uint32 + } + GYB_APS_FLT = { + PVName = "EC-GN-P01-PA2F:PSU4000-YFLT" + Type = uint32 + } + BPS_READY = { + PVName = "EC-GN-P01-PB2F:PSU2000-YSTA" + Type = uint32 + } + GYA_BPS_FLT = { + PVName = "EC-GN-P01-PB1F:PSU1000-YFLT" + Type = uint32 + } + GYB_BPS_FLT = { + PVName = "EC-GN-P01-PB2F:PSU2000-YFLT" + Type = uint32 + } + MHVPS_OV = { + PVName = "EC-GN-P01-GAFP:FMC4310-YFLT-OC" + Type = uint32 + } + MHVPS_OC = { + PVName = "EC-GN-P01-GAFP:FMC4310-YFLT-OV" + Type = uint32 + } + MHVPS_FLT = { + PVName = "EC-GN-P01-PMF:PSU0000-YFLT" + Type = uint32 + } + MHVPS_READY = { + PVName = "EC-GN-P01-PMF:PSU0000-TYSTA" + Type = uint32 + } + MHVPS_MODON = { + PVName = "EC-GN-P01-GPF:PSU0000-YSTA-MOD" + Type = uint32 + } + MIS_ITL = { + PVName = "EC-GN-P01-GAFP:FMC4310-YTRP" + Type = uint32 + } + MISB_ITL = { + PVName = "EC-GN-P01-GBFP:FMC4310-YTRP" + Type = uint32 + } + PLC_ITL = { + PVName = "EC-GN-P01-GPS:PLC4110-YTRP" + Type = uint32 + } + PLC_STANDBY = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-ST1R" + Type = uint32 + } + PLC_READY = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-ST2R" + Type = uint32 + } + PLC_ON = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-ST3R" + Type = uint32 + } + PLC_MODE1 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD1" + Type = uint32 + } + PLC_MODE2 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD2" + Type = uint32 + } + PLC_MODE3 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD3" + Type = uint32 + } + PLC_MODE4 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD4" + Type = uint32 + } + PLC_PERMIT = { + PVName = "EC-GN-P01-GPS:PLC4110-CON-GY2PRM" + Type = uint32 + } + PLC_SELECT = { + PVName = "EC-GN-P01-GPS:PLC4110-CON-OPGY2" + Type = uint32 + } + PLC_SYNCMODE = { + PVName = "EC-GN-P01-GPS:PLC4110-YSTA-MPSS" + Type = uint32 + } + PLC_CCPSON = { + PVName = "EC-GN-P01-GPS:PLC4110-YON-CCPS2" + Type = uint32 + } + EXT_TRIG = { + PVName = "EC-GN-P01-GBF:DIO4900-YON" + Type = uint32 + } + + //Digital Output PVs in Variables-signal tab + APS_HVON = { + PVName = "EC-GN-P01-PA2F:PSU4000-CON-HV" + Type = uint32 + } + APS_SWON = { + PVName = "EC-GN-P01-PA2F:PSU4000-CON-SW" + Type = uint32 + } + APS_STOP = { + PVName = "EC-GN-P01-PA2F:PSU4000-CTRP" + Type = uint32 + } + BPS_HVON = { + PVName = "EC-GN-P01-PB2F:PSU2000-CON-HV" + Type = uint32 + } + BPS_SWON = { + PVName = "EC-GN-P01-PB2F:PSU2000-CON-SW" + Type = uint32 + } + BPS_STOP = { + PVName = "EC-GN-P01-PB2F:PSU2000-CTRP" + Type = uint32 + } + BEAM_ON_STAT = { + PVName = "EC-GN-P01-GBFP:FMC4310-YSTA-GBOP" + Type = uint32 + } + DO_REV5 = { + PVName = "EC-GN-P01-GBFP:FMC4310-RV5" + Type = uint32 + } + DO_REV6 = { + PVName = "EC-GN-P01-GBFP:FMC4310-RV6" + Type = uint32 + } + DO_REV7 = { + PVName = "EC-GN-P01-GBFP:FMC4310-RV7" + Type = uint32 + } + DO_REV8 = { + PVName = "EC-GN-P01-GBFP:FMC4310-RV8" + Type = uint32 + } + MHVPS_HVON = { + PVName = "EC-GN-P01-PMF:PSU0000-CON-SW" + Type = uint32 + } + MHVPS_STOP = { + PVName = "EC-GN-P01-PMF:PSU0000-COFF" + Type = uint32 + } + MHVPS_MODSW = { + PVName = "EC-GN-P01-PMF:PSU0000-CON-MOD" + Type = uint32 + } + PCF_FLT = { + PVName = "EC-GN-P01-GPF:PCF4210-CTRP" + Type = uint32 + } + HVARMED = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GB1" + Type = uint32 + } + HVINJECTION = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GB2" + Type = uint32 + } + RFON = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GB3" + Type = uint32 + } + FHPS_RU = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP" + Type = uint32 + } + SCM_RU = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP" + Type = uint32 + } + SCM_RD = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-YTS-RDOWN" + Type = uint32 + } + CCPS_IN_OPERATION = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-TR" + Type = uint32 + } + //Input PVs in Variables-Operation tab. + PREP_MODE = { + PVName = "EC-GN-P01-GBF:STAT-PREP-MODE" + Type = uint32 + } + SHORT_PULSE_MODE = { + PVName = "EC-GN-P01-GBF:STAT-SHORT-PULSE" + Type = uint32 + } + + MHVPS_DT = { + PVName = "EC-GN-P01-PMF:STAT-DT-HVON" + Type = uint32 + } + APS_HVON_DT = { + PVName = "EC-GN-P01-PA2F:STAT-DT-HVON" + Type = uint32 + } + APS_SWON_DT = { + PVName = "EC-GN-P01-PA2F:STAT-DT-SWON" + Type = uint32 + } + BPS_HVON_DT = { + PVName = "EC-GN-P01-PB2F:STAT-DT-HVON" + Type = uint32 + } + BPS_SWON_DT = { + PVName = "EC-GN-P01-PB2F:STAT-DT-SWON" + Type = uint32 + } + SHOTLEN = { + PVName = "EC-GN-P01-GBF:STAT-DT-SHOTLEN" + Type = uint32 + } + + MD1_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD1-LIM" + Type = uint32 + } + MD2_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD2-LIM" + Type = uint32 + } + MD3_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD3-LIM" + Type = uint32 + } + MD4_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD4-LIM" + Type = uint32 + } + + FHPS_MANM = { + PVName = "EC-GN-P01-GBF-FHPS:STAT-MANM" + Type = uint32 + } + + CSV_LOAD = { + PVName = "EC-GN-P01-GBF:STAT-CSV-LOAD" + Type = uint32 + } + CSV_NAME = { + PVName = "EC-GN-P01-GBF:STAT-CSV-NAME" + Type = char8 + NumberOfElements = 40 + } + RESET_FLT = { + PVName = "EC-GN-P01-GPF:STAT-RST-FLT" + //PVName = "EC-GN-P01-GPS-MEM:CMD-CONALARMRESET-HMI" + Type = uint32 + } + + //Input PVs in Variables-JASTEC tab. + MCPS_ACT_SP = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-ACT-SET-MI" + Type = uint32 + } + MCPS_TRG_CURR_MANUAL = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MI" + Type = float32 + } + MCPS_ACT_RB = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB" + Type = uint32 + } + MCPS_CURR_RB = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-RB" + Type = uint32 + } + GYA_MCPS_CURR_MON = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON" + Type = float32 + } + GYB_MCPS_CURR_MON = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON" + Type = float32 + } + MCPS_VOLT_MON = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-VOLT-MON" + Type = uint32 + } + MCPS_SWP_RB = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-SWP-RB" + Type = uint32 + } + MCPS_SWP_LIM = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-SWP-LIM" + Type = uint32 + } + MCPS_ERR = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-ERR" + Type = uint32 + } + MCPS_MM = { + PVName = "EC-GN-P01-GBF-MCPS:STAT-MANM" + Type = uint32 + } + //GCPS PVs + GCPS_ACT_SP = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MI" + Type = uint32 + } + GCPS_TRG_CURR_MANUAL = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MI" + Type = float32 + } + GCPS_ACT_RB = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB" + Type = uint32 + } + GCPS_CURR_RB = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-RB" + Type = uint32 + } + GYA_GCPS_CURR_MON = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON" + Type = float32 + } + GYB_GCPS_CURR_MON = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON" + Type = float32 + } + GCPS_VOLT_MON = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-VOLT-MON" + Type = uint32 + } + GCPS_SWP_RB = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-SWP-RB" + Type = uint32 + } + GCPS_SWP_LIM = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-SWP-LIM" + Type = uint32 + } + GCPS_ERR = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-ERR" + Type = uint32 + } + GCPS_MM = { + PVName = "EC-GN-P01-GBF-GCPS:STAT-MANM" + Type = uint32 + } + //Input PVs in Variables-kikusui tab. + FHPS_REM_RB = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-REM-RB" + Type = uint32 + } + FHPS_OUTON_RB = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB" + Type = uint32 + } + FHPS_CURR_RB = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-CURR-RB" + Type = uint32 + } + FHPS_ACV_RB = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-ACV-RB" + Type = uint32 + } + FHPS_FRQ_RB = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-FRQ-RB" + Type = uint32 + } + FHPS_SOUR_ON_RB = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-RB" + Type = uint32 + } + FHPS_MEAS_ACV = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV" + Type = float32 + } + GYA_FHPS_MEAS_ACI = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACI" + Type = float32 + } + GYB_FHPS_MEAS_ACI = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACI" + Type = float32 + } + FHPS_MEAS_ACP = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACP" + Type = uint32 + } + FHPS_MEAS_FRQ = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-FRQ" + Type = uint32 + } + FHPS_ERR = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-ERROR" + Type = uint32 + } + FHPS_AUTO_TAGV = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV" + Type = float32 + } + FHPS_AUTO_TIME = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-RU-TIME" + Type = float32 + } + FHPS_AUTO_START = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START" + Type = uint32 + } + + CCPS_REMLOC_RB = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-RB" + Type = uint32 + } + CCPS_OUTON_RB = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-OUTON-RB" + Type = uint32 + } + CCPS_CURR_RB = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-CURR-RB" + Type = uint32 + } + CCPS_DCV_RB = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-DCV-RB" + Type = uint32 + } + CCPS_RANG_RB = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-RANG-RB" + Type = uint32 + } + CCPS_SOUR_ON_RB = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-RB" + Type = uint32 + } + CCPS_MEAS_DCV = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCV" + Type = uint32 + } + GYA_CCPS_MEAS_DCI = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCI" + Type = float32 + } + GYB_CCPS_MEAS_DCI = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCI" + Type = float32 + } + CCPS_MEAS_DCP = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCP" + Type = uint32 + } + CCPS_ERR = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-ERROR" + Type = uint32 + } + CCPS_OUTPUT_AMP = { + PVName = "EC-GN-P01-GBF-CCPS:STAT-AMP" + Type = float32 + } + CCPS_OUTPUT_FREQ = { + PVName = "EC-GN-P01-GBF-CCPS:STAT-FREQ" + Type = float32 + } + CCPS_OUTPUT_OFFS = { + PVName = "EC-GN-P01-GBF-CCPS:STAT-OFFS" + Type = float32 + } + //PXI Board status PVs + PXI6259_0 = { + PVName = "EC-GN-HWCF:6259-0-STATUS" + Type = uint32 + } + PXI6259_1 = { + PVName = "EC-GN-HWCF:6259-1-STATUS" + Type = uint32 + } + PXI6528_0 = { + PVName = "EC-GN-HWCF:6528-0-STATUS" + Type = uint32 + } + PXI6528_1 = { + PVName = "EC-GN-HWCF:6528-1-STATUS" + Type = uint32 + } + PXI6368_0 = { + PVName = "EC-GN-HWCF:6368-0-STATUS" + Type = uint32 + } + PXI6368_1 = { + PVName = "EC-GN-HWCF:6368-1-STATUS" + Type = uint32 + } + } + } + +EPICSCAOutput = { + Class = "EPICSCA::EPICSCAOutput" + CPUMask = "0x1000" //change from 0x200 + StackSize = "10000000" + NumberOfBuffers = 2 + Signals = { + PCF_STATE = { + PVName = "EC-GN-P01-GBF:STAT-SM" + Type = uint32 + } + //Analog Output PVs in Variables-signal tab. + FHPS_REF = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-EREF" + Type = float32 + } + BPS_REF = { + PVName = "EC-GN-P01-PB2F:PSU2000-EREF" + Type = float32 + } + APS_REF = { + PVName = "EC-GN-P01-PA2F:STAT-EREF-CONV.A" + Type = float32 + } + MHVPS_REF = { + PVName = "EC-GN-P01-PMF:STAT-EREF-CALC.B" + Type = float32 + } + + //Digital Output PVs in Variables-signal tab. + APS_STOP = { + PVName = "EC-GN-P01-PA2F:PSU4000-CTRP" + Type = uint32 + } + + BPS_STOP = { + PVName = "EC-GN-P01-PB2F:PSU2000-CTRP" + Type = uint32 + } + + BEAM_ON_STAT = { + PVName = "EC-GN-P01-GBFP:FMC4310-YSTA-GBOP" + Type = uint32 + } + + MHVPS_STOP = { + PVName = "EC-GN-P01-PMF:PSU0000-COFF" + Type = uint32 + } + PCF_FLT = { + PVName = "EC-GN-P01-GPF:PCF4210-CTRP" + Type = uint32 + } + HVARMED = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GB1" + Type = uint32 + } + HVINJECTION = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GB2" + Type = uint32 + } + RFON = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GB3" + Type = uint32 + } + + //Output PVs in Variables-operation tab. + MHVPS_PREP_WF = { + PVName = "EC-GN-P01-PB2F:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + + NumberOfDimensions = 1 + } + BPS_PREP_WF = { + PVName = "EC-GN-P01-PB2F:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + APS_PREP_WF = { + PVName = "EC-GN-P01-PA2F:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + FHPS_PREP_WF = { + PVName = "EC-GN-P01-GBF-FHPS:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + MCPS_PREP_WF = { + PVName = "EC-GN-P01-GBF-MCPS:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GCPS_PREP_WF = { + PVName = "EC-GN-P01-GBF-GCPS:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + PREP_TIME_WF = { + PVName = "EC-GN-P01-GBF:STAT-PREP-TIME-WF" + Type = int32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + BEAM_ON_TIME = { + PVName = "EC-GN-P01-GBF:STAT-BEAMON-TIME" + Type = uint32 + } + ELAPSED_TIME = { + PVName = "EC-GN-P01-GBF:STAT-ELAPSED" + Type = uint32 + } + SHOT_ID = { + PVName = "EC-GN-P01-GBF:STAT-SHOT-ID" + Type = uint32 + } + + CSV_LOADED = { + PVName = "EC-GN-P01-GBF:STAT-CSV-LOADED" + Type = uint32 + } + CSV_ERR = { + PVName = "EC-GN-P01-GBF:STAT-CSV-ERR" + Type = uint32 + } + + //Output PVs in Variables-jastec tab. + MCPS_TRG_CURR_SET = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MO" + Type = float32 + } + MCPS_ACT_SP = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MO" + Type = uint32 + } + GCPS_TRG_CURR_SET = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MO" + Type = float32 + } + GCPS_ACT_SP = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MO" + Type = uint32 + } + + //Output PVs in Variables-kikusui tab. + CCPS_REF = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-EREF" + Type = float32 + } + FHPS_AUTO_STAT = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-STAT" + Type = uint32 + } + //Add 20201117 + APS_HVON = { + PVName = "EC-GN-P01-PA2F:PSU4000-CON-HV" + Type = uint32 + } + APS_SWON = { + PVName = "EC-GN-P01-PA2F:PSU4000-CON-SW" + Type = uint32 + } + BPS_HVON = { + PVName = "EC-GN-P01-PB2F:PSU2000-CON-HV" + Type = uint32 + } + BPS_SWON = { + PVName = "EC-GN-P01-PB2F:PSU2000-CON-SW" + Type = uint32 + } + MHVPS_HVON = { + PVName = "EC-GN-P01-PMF:STAT-HVON-CALC.B" + Type = uint32 + } + } + } + // for ESDN packet subscription/publication. + +SDNSubCommands = { + Class = SDN::SDNSubscriber + Topic = ECPC2SCUJA + Interface = enp27s0f0 + CPUs = 0x2000 + Locked = 1 + Timeout = 2 + Signals = { + Header = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + Command = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 64 + } + } + } + +SDNReply = { + Class = SDN::SDNPublisher + //Topic = SCUJAB2ECPC + Topic = SCUJA2ECPC + Interface = enp27s0f0 + CPUs = 0x2000 + Locked = 1 + Signals = { + Header = { + Type = uint8 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ReplyStatus = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ReplyWaveformAck = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + //Status (26Bytes?) is not assigned + //GyrotronA measurements + //56Bytes are used as Gyrotron1 Measurements (verified on 2020/10/22) + GYA_MHVPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_MHVPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_BPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_BPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_APS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_APS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC1_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC1_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC2_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC2_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_MCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_GCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_FHPS_MEAS_ACI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_CCPS_MEAS_DCI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + //GyrotronB measurements + GYB_MHVPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_MHVPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_BPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_BPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_APS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_APS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC1_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC1_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC2_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC2_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_MCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_GCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_FHPS_MEAS_ACI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_CCPS_MEAS_DCI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + } + + // Direct HW accesses. Follwing device/port assignment must be consistent with actual wiring. + // NI6259.0 + // APS_SWON BoardId=0, PortId=3.0 + +NI6259 = { + Class = NI6259::NI6259DIO + DeviceName = "/dev/pxi6259" + BoardId = 0 + Signals = { + NI6259Value = { + Type = uint32 + Mask = 0xFF + PortId = 0 + } + } + } + + //NI6528 digital output has logic low == 0 == close relay. ((See Driver Manual.) + //When the program send ON signal, this program writes 0 on the data source. + +NI6528P3 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.0" + Port = 3 + NI6528P3Value = { + NI6528P3Value = { + Type = uint8 + } + } + } + //P3.0 APS_HVON + //P3.1 APS_SWON + //P3.2 APS_Shutdown + //P3.3 BPS_HVON + //P3.4 BPS_SWON + //P3.5 BPS_Shutdown + //P3.6 GY1_Beam_ON_status + //P3.7 RV5 _cRIO + + +NI6528P4 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.0" + Port = 4 + NI6528P4Value = { + NI6528P4Value = { + Type = uint8 + } + } + } + //P4.0 RV6 _cRIO + //P4.1 RV7 _cRIO + //P4.2 RV8 _cRIO + //P4.3 emp + //P4.4 emp + //P4.5 emp + //P4.6 HVArmed + //P4.7 HVInjection + + +NI6528P5 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.0" + Port = 5 + NI6528P5Value = { + NI6528P5Value = { + Type = uint8 + } + } + } + //P5.0 RFON + //P5.1 FHPS_Rampup_complete + //P5.2 SCM_RU_Complete + //P5.3 CCPS_IN_OPERATION + //P5.4 REV2 _PLC + //P5.5 REV3 _PLC + //P5.6 None + //P5.7 None + + +NI6528P4GYA = { + Class = NI6528 + DeviceName = "/dev/pxi6528.1" + Port = 4 + NI6528P4GYAValue = { + NI6528P4GYAValue = { + Type = uint8 + } + } + } + //P4.0 RV6 _cRIO + //P4.1 RV7 _cRIO + //P4.2 RV8 _cRIO + //P4.3 MHVPS_HVON + //P4.4 MHVPS_Shutdown + //P4.5 MHVPS_MOD + //P4.6 PCF_FLT + //P4.7 HVArmed_GYA + + } + +States = { + Class = ReferenceContainer + +Disabled = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM GoErrorGAM InDisabledGAM + GoWaitStandbyGAM choiseGAM MCPSGAM GCPSGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM} + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P4GYAPV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM NI6528P4GYAWriteGAM} + CPUs = 0x4000 + } + } + } + +WaitStandby = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM FHPSSetpointGAM FHPSRampupGAM InWaitStandbyGAM + choiseGAM MCPSGAM GCPSGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + GoDisabledGAM GoWaitReadyGAM GoErrorGAM CCPSWaveformGAM } + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P4GYAPV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM NI6528P4GYAWriteGAM} + CPUs = 0x4000 + } + } + } + +WaitReady = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM WFRecordGAM PreProgrammedGAM FHPSSetpointGAM FHPSRampupGAM InWaitReadyGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + GoWaitPermitGAM GoWaitStandbyFromReadyGAM GoErrorGAM } + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P4GYAPV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM NI6528P4GYAWriteGAM} + CPUs = 0x4000 + } + } + } + +WaitPermit = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM WFRecordGAM PreProgrammedGAM FHPSSetpointGAM FHPSRampupGAM InWaitPermitGAM + choiseGAM EPICSOutputGAM GoWaitReadyFromWaitPermitGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + GoWaitHVONGAM GoWaitHVON_PREP_GAM GoWaitHVON_SDN_GAM GoWaitHVON_SDN_PREP_GAM GoErrorGAM } + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P4GYAPV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM NI6528P4GYAWriteGAM} + CPUs = 0x4000 + } + } + } + + //Real-Time state for HVPS sequence timing control. + +WaitHVON = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM FHPSSetpointGAM FHPSRampupGAM InWaitHVONGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM } + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P4PV2PortGAM NI6528P4WriteGAM + GAMRealTimeStateMachine NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x4000 + } + } + } + +WaitHVON_SDN = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM FHPSRampupGAM InWaitHVON_SDNGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM } + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P4PV2PortGAM NI6528P4WriteGAM + GAMSDNRealTimeStateMachine terminalInterfaceGAM NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x4000 + } + } + } + +WaitHVON_PREP = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM PreProgrammedGAM FHPSRampupGAM InWaitHVON_PREPGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM } + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P4PV2PortGAM NI6528P4WriteGAM + GAMRealTimeStateMachine NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x4000 + } + } + } + +WaitHVON_SDN_PREP = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM PreProgrammedGAM FHPSRampupGAM InWaitHVON_SDN_PREPGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM} + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P4PV2PortGAM NI6528P4WriteGAM + GAMSDNRealTimeStateMachine terminalInterfaceGAM NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x4000 + } + } + } + + +Error = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM InErrorGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + ExitedHVArmedInjectionRFONGAM ResetPSsGAM + FromErrorToWaitStandbyGAM ErrorGAM choiseGAM EPICSOutputGAM FHPSSetpointGAM FHPSRampupGAM CCPSWaveformGAM} + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P4GYAPV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM NI6528P4GYAWriteGAM} + CPUs = 0x4000 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} diff --git a/EC-GN-JA-PCF/.svn/pristine/09/09d6370e425fd32419d571f4e915ec808f4a5b39.svn-base b/EC-GN-JA-PCF/.svn/pristine/09/09d6370e425fd32419d571f4e915ec808f4a5b39.svn-base new file mode 100644 index 0000000..9749067 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/09/09d6370e425fd32419d571f4e915ec808f4a5b39.svn-base @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JABitSumGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JABitSumGAM$(LIBEXT) \ + $(BUILD_DIR)/JABitSumGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/.svn/pristine/0a/0a01aaf35817f8a4a4a4b69954331619312a20a2.svn-base b/EC-GN-JA-PCF/.svn/pristine/0a/0a01aaf35817f8a4a4a4b69954331619312a20a2.svn-base new file mode 100644 index 0000000..24ebd5d --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/0a/0a01aaf35817f8a4a4a4b69954331619312a20a2.svn-base @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=NI6528.x + +PACKAGE=DataSources + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(CODAC_ROOT)/include/ + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/NI6528$(LIBEXT) \ + $(BUILD_DIR)/NI6528$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/.svn/pristine/0b/0b344352d251dc031ef0d019c3189c214679491b.svn-base b/EC-GN-JA-PCF/.svn/pristine/0b/0b344352d251dc031ef0d019c3189c214679491b.svn-base new file mode 100644 index 0000000..7c75cd1 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/0b/0b344352d251dc031ef0d019c3189c214679491b.svn-base @@ -0,0 +1,143 @@ +/** + * @file JABitSumGAM.cpp + * @brief Source file for class JABitSumGAM + * @date Feb 10, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JABitSumGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JABitSumGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JABitSumGAM::JABitSumGAM() { + //Input signals. + input0 = NULL_PTR(MARTe::uint32 *); + input1 = NULL_PTR(MARTe::uint32 *); + input2 = NULL_PTR(MARTe::uint32 *); + input3 = NULL_PTR(MARTe::uint32 *); + input4 = NULL_PTR(MARTe::uint32 *); + input5 = NULL_PTR(MARTe::uint32 *); + input6 = NULL_PTR(MARTe::uint32 *); + input7 = NULL_PTR(MARTe::uint32 *); + + //Output signals. + output= NULL_PTR(MARTe::uint8 *); +} + +JABitSumGAM::~JABitSumGAM() { +} + +bool JABitSumGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (!ok){ + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "ParametersError in init."); + } + return ok; +} + +bool JABitSumGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JABitSumGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == 8u); + if (ok) { + ok = (numberOfOutputSignals == 1u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "One output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Eight input signals shall be defined"); + } + // Do type check for input signals. + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32.", signalName.Buffer()); + } + + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint8.", signalName.Buffer()); + } + } + } + // Do type cast. + if (ok) { + input0 = reinterpret_cast(GetInputSignalMemory(0)); + input1 = reinterpret_cast(GetInputSignalMemory(1)); + input2 = reinterpret_cast(GetInputSignalMemory(2)); + input3 = reinterpret_cast(GetInputSignalMemory(3)); + input4 = reinterpret_cast(GetInputSignalMemory(4)); + input5 = reinterpret_cast(GetInputSignalMemory(5)); + input6 = reinterpret_cast(GetInputSignalMemory(6)); + input7 = reinterpret_cast(GetInputSignalMemory(7)); + + output = reinterpret_cast(GetOutputSignalMemory(0)); + } + + return ok; +} + +bool JABitSumGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + *output = *input0 + *input1*2 + *input2*4 + *input3*8 + *input4*16 + + *input5*32 + *input6*64 + *input7*128; + + return true; +} + +CLASS_REGISTER(JABitSumGAM, "1.0") diff --git a/EC-GN-JA-PCF/.svn/pristine/0d/0d0dc5c52be19846ff84957b163a0568ab79a598.svn-base b/EC-GN-JA-PCF/.svn/pristine/0d/0d0dc5c52be19846ff84957b163a0568ab79a598.svn-base new file mode 100644 index 0000000..cf441bb --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/0d/0d0dc5c52be19846ff84957b163a0568ab79a598.svn-base @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JASourceChoiseGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JASourceChoiseGAM$(LIBEXT) \ + $(BUILD_DIR)/JASourceChoiseGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/.svn/pristine/0d/0da35fee105d7b3efc196ed242d1e84fcbc0e744.svn-base b/EC-GN-JA-PCF/.svn/pristine/0d/0da35fee105d7b3efc196ed242d1e84fcbc0e744.svn-base new file mode 100644 index 0000000..0f8c3a7 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/0d/0da35fee105d7b3efc196ed242d1e84fcbc0e744.svn-base @@ -0,0 +1,27 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import DataUtil +from org.csstudio.opibuilder.scriptUtil import ScriptUtil +from org.csstudio.swt.widgets.natives.SpreadSheetTable import ITableSelectionChangedListener +from java.util import Arrays + +table = widget.getTable() +fct_name=display.getPropertyValue("name") +class SelectionListener(ITableSelectionChangedListener): + def selectionChanged(self, selection): + cuName="" + phyName="" + for row in selection: + phyName=row[1] + cuName=row[0]; + # change $(CU) substitution + macroInput = DataUtil.createMacrosInput(True) + macroInput.put("CU", cuName) + macroInput.put("PHY_NAME", phyName) + macroInput.put("FCT_NAME", fct_name) + # open OPI + # see https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-boy/trunk/org.csstudio.opibuilder/src/org/csstudio/opibuilder/scriptUtil/ScriptUtil.java + if cuName.startswith('P'): + ScriptUtil.openOPI(display.getWidget("Table"), fct_name+"-PLCDetails.opi", 1, macroInput) + else: + ScriptUtil.openOPI(display.getWidget("Table"), fct_name+"-CubiclePLCDetails.opi", 0, macroInput) +table.addSelectionChangedListener(SelectionListener()) \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/0d/0dc217ea59e2a87def32095aa7b29e4ad5603780.svn-base b/EC-GN-JA-PCF/.svn/pristine/0d/0dc217ea59e2a87def32095aa7b29e4ad5603780.svn-base new file mode 100644 index 0000000..f0c1369 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/0d/0dc217ea59e2a87def32095aa7b29e4ad5603780.svn-base @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/0e/0e8bbbdf016614bba5453c92baf01cedc4059bd2.svn-base b/EC-GN-JA-PCF/.svn/pristine/0e/0e8bbbdf016614bba5453c92baf01cedc4059bd2.svn-base new file mode 100644 index 0000000..12eb6c5 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/0e/0e8bbbdf016614bba5453c92baf01cedc4059bd2.svn-base @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/0f/0f13403a318be191db56b077383731db398fdc5e.svn-base b/EC-GN-JA-PCF/.svn/pristine/0f/0f13403a318be191db56b077383731db398fdc5e.svn-base new file mode 100644 index 0000000..ff9821d --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/0f/0f13403a318be191db56b077383731db398fdc5e.svn-base @@ -0,0 +1,24 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import DataUtil +from org.csstudio.opibuilder.scriptUtil import ScriptUtil +from org.csstudio.swt.widgets.natives.SpreadSheetTable import ITableSelectionChangedListener +from java.util import Arrays + +table = widget.getTable() +fct_name=display.getPropertyValue("name") +class SelectionListener(ITableSelectionChangedListener): + def selectionChanged(self, selection): + cuIndex="" + phyName="" + for row in selection: + cuIndex=row[0]; + phyName=row[1] + # change $(CU_INDEX) substitution + macroInput = DataUtil.createMacrosInput(True) + macroInput.put("CUB", cuIndex) + macroInput.put("PHY_NAME", phyName) + macroInput.put("FCT_NAME", fct_name) + # open OPI + # see https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-boy/trunk/org.csstudio.opibuilder/src/org/csstudio/opibuilder/scriptUtil/ScriptUtil.java + ScriptUtil.openOPI(display.getWidget("Table"), fct_name+"-CubicleDetails.opi", 1, macroInput) +table.addSelectionChangedListener(SelectionListener()) \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/0f/0f421d10b2977b929feadc2259c550bbefb18348.svn-base b/EC-GN-JA-PCF/.svn/pristine/0f/0f421d10b2977b929feadc2259c550bbefb18348.svn-base new file mode 100644 index 0000000..d223981 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/0f/0f421d10b2977b929feadc2259c550bbefb18348.svn-base @@ -0,0 +1,6 @@ +############################################################################ +## SDD provided PLC or fast controller driver post configuration +############################################################################ + + +#- End-of-file marker - do not delete or add lines below! \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/10/10727d73928301637e4284f1e51fdbdfdad9d09e.svn-base b/EC-GN-JA-PCF/.svn/pristine/10/10727d73928301637e4284f1e51fdbdfdad9d09e.svn-base new file mode 100644 index 0000000..435df16 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/10/10727d73928301637e4284f1e51fdbdfdad9d09e.svn-base @@ -0,0 +1,58 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAEPICSCAOutput.x JAEPICSCAInput.x + +PACKAGE=DataSources + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(EPICS_BASE)/include/ +INCLUDES += -I$(EPICS_BASE)/include/os/Linux/ +INCLUDES += -I$(EPICS_BASE)/include/compiler/gcc/ +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L5GAMs + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAEPICSCA$(LIBEXT) \ + $(BUILD_DIR)/JAEPICSCA$(DLLEXT) + echo $(OBJS) + +include depends.$(TARGET) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/.svn/pristine/10/10a7428bc98f401c160447a8f0b99bb83be9132c.svn-base b/EC-GN-JA-PCF/.svn/pristine/10/10a7428bc98f401c160447a8f0b99bb83be9132c.svn-base new file mode 100644 index 0000000..fde230a --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/10/10a7428bc98f401c160447a8f0b99bb83be9132c.svn-base @@ -0,0 +1,55 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import ColorFontUtil +from org.csstudio.opibuilder.scriptUtil import ConsoleUtil + +table = widget.getTable() +func = display.getPropertyValue("name") + +i = 0 +row = 0 +col = 3 +# ConsoleUtil.writeInfo("Trigger PV : " + triggerPV.getName()); +while triggerPV != pvs[i]: +# ConsoleUtil.writeInfo("pvs[i] : " + pvs[i].getName()); + if col == 5: + if "PLC-IOCHLTS" in pvs[i+1].getName(): + col = col+1 + else: + col = 3 + row = row+1 + elif col == 3: + if "-SYSHLTS" in pvs[i+1].getName() or "-HLTS" in pvs[i+1].getName(): + col =3 + row = row+1 + elif "-IOCHLTS" in pvs[i+1].getName(): + if "CORE-IOCHLTS" in pvs[i+1].getName(): + col = 4 + else: + col = 5 + else: + col += 1 + if col > 5: + row += 1 + col = 3 + else: + col += 1 + if col > 6: + row += 1 + col = 3 + i += 1 + +table.setCellText(row, col, PVUtil.getString(triggerPV)) + +s = PVUtil.getSeverity(triggerPV) + +color = ColorFontUtil.WHITE +if s == 0: + color = ColorFontUtil.GREEN +elif s == 1: + color = ColorFontUtil.RED +elif s == 2: + color = ColorFontUtil.YELLOW +elif s == 3: + color = ColorFontUtil.PINK + +table.setCellBackground(row, col, color) \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/10/10cce328561de5a7edc884ad1facc68ec80f9d99.svn-base b/EC-GN-JA-PCF/.svn/pristine/10/10cce328561de5a7edc884ad1facc68ec80f9d99.svn-base new file mode 100644 index 0000000..0ddfbdf --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/10/10cce328561de5a7edc884ad1facc68ec80f9d99.svn-base @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JASDNRTStateMachineGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JASDNRTStateMachineGAM$(LIBEXT) \ + $(BUILD_DIR)/JASDNRTStateMachineGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/.svn/pristine/11/114be4aabaa53d358f3bc82e0641b0a4cda7a3ac.svn-base b/EC-GN-JA-PCF/.svn/pristine/11/114be4aabaa53d358f3bc82e0641b0a4cda7a3ac.svn-base new file mode 100644 index 0000000..da9dab1 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/11/114be4aabaa53d358f3bc82e0641b0a4cda7a3ac.svn-base @@ -0,0 +1,25 @@ +#====================================================================== +# Loading DBs +#====================================================================== +cd $(TOP)/db + + +#====================================================================== +# Loading Substitution Files +#====================================================================== +cd $(TOP)/iocBoot/$(IOC) + + +#====================================================================== +# PLC Communication Monitoring PVs DB Loading +#====================================================================== +cd $(EPICS_ROOT)/db + + +#====================================================================== +# IOC Monitor +#====================================================================== +cd $(EPICS_ROOT)/db +#dbLoadRecords("iocmon.db","CBS=EC-GN-SYSM, CTRLTYPE=À¹Z°Ï, IDX=0, IOCTYPE=CUB, PP=, PPPP=, NNNN=, TTT=") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/.svn/pristine/11/117ffc64b0ee11e1ee73b96849c7cb93a804340b.svn-base b/EC-GN-JA-PCF/.svn/pristine/11/117ffc64b0ee11e1ee73b96849c7cb93a804340b.svn-base new file mode 100644 index 0000000..093c4b9 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/11/117ffc64b0ee11e1ee73b96849c7cb93a804340b.svn-base @@ -0,0 +1,52 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAModeControlGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAModeControlGAM$(LIBEXT) \ + $(BUILD_DIR)/JAModeControlGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/.svn/pristine/12/128dea0ccc7a0d08fc9f212a66810e56d615f606.svn-base b/EC-GN-JA-PCF/.svn/pristine/12/128dea0ccc7a0d08fc9f212a66810e56d615f606.svn-base new file mode 100644 index 0000000..8e9a7a7 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/12/128dea0ccc7a0d08fc9f212a66810e56d615f606.svn-base @@ -0,0 +1,23557 @@ + + + + + +52 + + + +EC-GN + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +10.136.136.101 + + +52RF01-PSH-4410 + + + + +52RF01-PCF-4210.codac.iter.org + + +52RF01-PCF-4210.codac.iter.org-R1 + + +52RF01-PCF-4210.codac.iter.org-R1 + + + + + +10.136.136.13-T1 + + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-ACQ + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-CONF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-MODE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-ACQ + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-CONF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-MODE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AISTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AOSTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-LDAICF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-LDAOCF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AISTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AOSTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-LDAICF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-LDAOCF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BLKTMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-FTEAALL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-RESET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-TAIUTC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-DMSG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-NS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-DMSG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-NS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AIPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AISMPL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AISR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AITB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AOPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AOTB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-CHAIMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-CHAOMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AIPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AISMPL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AISR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AITB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AOPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AOTB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-CHAIMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-CHAOMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-FILTINT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-POWERP3 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-POWERP4 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-POWERP5 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIINPROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIOUTROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIPCHANGE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIPWDG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIWDGTRIG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-WDGTOUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-FILTINT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-POWERP3 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-POWERP4 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-POWERP5 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIINPROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIOUTROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIPCHANGE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIPWDG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIWDGTRIG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-WDGTOUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BDTM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BDTMN + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BDTMS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BLKTM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-DEVNAME + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-DRIVER + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-FTEMAX + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-FTENUM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-HBDTM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-LVL_ERRS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-SERIAL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-SYNC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-SYNCLOST + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:DIO4900-YON + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-AI-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-AO-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-LOAD + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-LOADED + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DI-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DO-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN-EGU + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-MST-TRIG + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-PREP-MODE + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHORT-PULSE + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-TRIG-SOUR + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2810-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2810-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2820-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2820-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2830-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2830-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MRF2910-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MRF2910-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-BEAMON-TIME + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-ERR + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-NAME + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN-CALC + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN-DAM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-ELAPSED + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-PREHEAT-TIME + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-PREP-TIME-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-FLNK1 + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-FLNK2 + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-ID + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-PLOT + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SM + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-OUTON-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-OUTON-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-RST + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-STAT + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-TR + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-MANM + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-CURR-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-CURR-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-DCV-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-DCV-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-EREF + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-EREF-MSP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-ERROR + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-IDN + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCI + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCV + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-AMP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-FREQ + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-OFFS + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-OP-CALC + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-OP-V-DIFF + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-LOC + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-OUTON-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-REM + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-RST + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-MANM + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-ACV-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-ACV-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-RU-TIME + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-STAT + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-CURR-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-CURR-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-EREF + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-EREF-MSP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-ERROR + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-FRQ-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-FRQ-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-IDN + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACI + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-FRQ + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-AUTO-MODE-SET + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-PREP-WF + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CALC + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-MANM + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MI + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MO + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ERR + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-SWP-LIM + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-SWP-RB + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-RB + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-SWPR-SET + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-VOLT-MON + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-MANM + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MI + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MO + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ERR + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-SWP-LIM + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-SWP-RB + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-RB + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-SWPR-SET + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-VOLT-MON + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-RAMPDWN-CMP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV1 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV2 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV3 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV5 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV6 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV7 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV8 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YFLT-OC + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YFLT-OV + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YSTA-GAOP + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YTRP + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YTRP2 + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:DIO4900-YON + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-AI-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-AO-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-LOAD + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-LOADED + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DI-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DO-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN-EGU + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-MST-TRIG + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-PREP-MODE + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHORT-PULSE + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-TRIG-SOUR + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2810-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2810-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2820-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2820-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2830-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2830-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MRF2910-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MRF2910-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-BEAMON-TIME + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-ERR + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +string +configuration + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-NAME + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN-CALC + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN-DAM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-ELAPSED + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-PREHEAT-TIME + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-PREP-TIME-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-FLNK1 + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-FLNK2 + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-ID + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-PLOT + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SM + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-OUTON-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-OUTON-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-RST + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-STAT + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-TR + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-MANM + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-CURR-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-CURR-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-DCV-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-DCV-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-EREF + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-EREF-MSP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-ERROR + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-IDN + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCI + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCV + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-AMP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-FREQ + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-OFFS + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-OP-CALC + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-OP-V-DIFF + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-LOC + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-OUTON-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-REM + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-RST + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-MANM + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-ACV-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-ACV-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-RU-TIME + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-STAT + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-CURR-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-CURR-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-EREF + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-EREF-MSP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-ERROR + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-FRQ-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-FRQ-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-IDN + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACI + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-FRQ + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-AUTO-MODE-SET + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-PREP-WF + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CALC + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-MANM + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MI + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MO + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ERR + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-SWP-LIM + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-SWP-RB + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-RB + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-SWPR-SET + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-VOLT-MON + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-MANM + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MI + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MO + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ERR + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-SWP-LIM + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-SWP-RB + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-RB + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-SWPR-SET + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-VOLT-MON + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV1 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV2 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV3 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV5 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV6 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV7 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV8 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-YSTA-GBOP + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-YTRP + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-YTRP2 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-CTRP + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GA1 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GA2 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GA3 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GB1 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GB2 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GB3 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PSU0000-YSTA-MOD + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-CONF-STAT + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-RECONF + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SW-TRIG + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-RST-FLT + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-LEN + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-LEN-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-MODE + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-MODE-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-PUB-DLY + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-PUB-DLY-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-STAT + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD1-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD2-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD3-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD4-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-RDY-TOUT + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-GY1PRM + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-GY2PRM + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-OPGY1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-OPGY2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-RV1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-RV2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-RV3 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YON-CCPS1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YON-CCPS2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YSTA-MPSS + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTRP + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD3 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD4 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-ST1R + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-ST2R + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-ST3R + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-CON-HV + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-CON-SW + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-CTRP + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-YFLT + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-YSTA + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-MANM + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-EREF + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-EREF-MSP + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-EREF-P + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-ET + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-ET-WF + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-IT + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-IT-WF + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-DT-HVON + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-DT-SWON + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-EREF-CONV + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-PREP-WF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-CON-HV + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-CON-SW + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-CTRP + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-YFLT + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-YSTA + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-MANM + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-EREF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-EREF-MSP + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-EREF-P + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-ET + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-ET-WF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-IT + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-IT-WF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-DT-HVON + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-DT-SWON + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-EREF-CONV + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-PREP-WF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-CON-HV + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-CON-SW + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-CTRP + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-YFLT + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-YSTA + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-MANM + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-EREF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-EREF-MSP + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-ET + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-ET-WF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-IT + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-IT-WF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-DT-HVON + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-DT-SWON + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-PREP-WF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-CON-HV + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-CON-SW + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-CTRP + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-YFLT + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-YSTA + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-MANM + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-EREF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-EREF-MSP + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-ET + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-ET-WF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-IT + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-IT-WF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-DT-HVON + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-DT-SWON + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-PREP-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-COFF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-CON-MOD + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-CON-SW + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-TYSTA + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-YFLT + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-MANM + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-EREF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-EREF-MSP + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GA + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GA-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GB + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GB-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GA + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GA-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GB + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GB-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-DT-HVON + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-EREF-CALC + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-HVON-CALC + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-PREP-WF + + + + + + + + + + +iocEC-GN-PSH0PCF +PCFCORE IOC +epicsioc +IOC + + + +52RF01-PCF-4210 + +iocEC-GN-PCF0SYSM +PCFSYSM IOC +epicsioc +IOC + + + +52RF01-PSH-4410 + +iocEC-GN-PSH0SYSM +PSHSYSM IOC +epicsioc +IOC + + + +52RF01-PSH-4410 + +iocEC-GN-PSH0CUB +PSHCUB IOC +epicsioc +IOC + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/12/12d128cec8d4b513c3f6b33e1e541bbdaf9f31f5.svn-base b/EC-GN-JA-PCF/.svn/pristine/12/12d128cec8d4b513c3f6b33e1e541bbdaf9f31f5.svn-base new file mode 100644 index 0000000..5853027 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/12/12d128cec8d4b513c3f6b33e1e541bbdaf9f31f5.svn-base @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAConditionalSignalUpdateGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAConditionalSignalUpdateGAM$(LIBEXT) \ + $(BUILD_DIR)/JAConditionalSignalUpdateGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/.svn/pristine/13/1313d0b1a7c2cbc3cc11d4e1286edae9790e6ef1.svn-base b/EC-GN-JA-PCF/.svn/pristine/13/1313d0b1a7c2cbc3cc11d4e1286edae9790e6ef1.svn-base new file mode 100644 index 0000000..3bb3f94 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/13/1313d0b1a7c2cbc3cc11d4e1286edae9790e6ef1.svn-base @@ -0,0 +1,1384 @@ + +record(bo, "EC-GN-P01-GAF:STAT-SHORT-PULSE"){ + field(SCAN, "Passive") + field(ONAM, "SHORT MODE") + field(ZNAM, "LONG MODE") +} + +record(ao, "EC-GN-P01-GAF-FHPS:PSU2320-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-CCPS:PSU2610-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-FHPS:PSU2320-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-CCPS:PSU2610-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PB1F:PSU1000-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PA1F:PSU3000-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PA1F:PSU3000-EREF-P"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PMF:PSU0000-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PB2F:PSU2000-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PA2F:PSU4000-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PA2F:PSU4000-EREF-P"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-FHPS:PSU2610-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-CCPS:PSU2320-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GAF-MCPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PB1F:PSU1000-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PB1F:PSU1000-IT"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PA1F:PSU3000-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PA1F:PSU3000-IT"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF:MOE2810-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF:MOE2820-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF:MOE2830-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF:MRF2910-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PMF:PSU0000-ET-GA"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PMF:PSU0000-IT-GA"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PB2F:PSU2000-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PB2F:PSU2000-IT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PA2F:PSU4000-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PA2F:PSU4000-IT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF:MOE2810-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF:MOE2820-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF:MOE2830-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF:MRF2910-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PMF:PSU0000-ET-GB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PMF:PSU0000-IT-GB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA1F:PSU3000-CON-HV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA1F:PSU3000-CON-SW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA1F:PSU3000-CTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB1F:PSU1000-CON-HV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB1F:PSU1000-CON-SW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB1F:PSU1000-CTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAFP:FMC4310-YSTA-GAOP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAFP:FMC4310-RV5"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAFP:FMC4310-RV6"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAFP:FMC4310-RV7"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAFP:FMC4310-RV8"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PMF:PSU0000-CON-SW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PMF:PSU0000-COFF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PMF:PSU0000-CON-MOD"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-CTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-YTS-GA1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-YTS-GA2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-YTS-GA3"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-CCPS:PSU2320-TR"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA2F:PSU4000-CON-HV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA2F:PSU4000-CON-SW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA2F:PSU4000-CTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB2F:PSU2000-CON-HV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB2F:PSU2000-CON-SW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB2F:PSU2000-CTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBFP:FMC4310-YSTA-GBOP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBFP:FMC4310-RV5"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBFP:FMC4310-RV6"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBFP:FMC4310-RV7"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBFP:FMC4310-RV8"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-YTS-GB1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-YTS-GB2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-YTS-GB3"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-CCPS:PSU2320-TR"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPS:PLC4110-RV2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPS:PLC4110-RV3"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:PCF4210-CTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PA1F:PSU3000-YSTA"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PA1F:PSU3000-YFLT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PB1F:PSU1000-YSTA"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PB1F:PSU1000-YFLT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-YFLT-OC"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-YFLT-OV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PMF:PSU0000-YFLT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PMF:PSU0000-TYSTA"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPF:PSU0000-YSTA-MOD"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-YTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-YTRP2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-RV1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-RV2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-RV3"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-ST1R"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-ST2R"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-ST3R"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-CON-GY1PRM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-CON-OPGY1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YON-CCPS1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YSTA-MPSS"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF:DIO4900-YON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PA2F:PSU4000-YSTA"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PA2F:PSU4000-YFLT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PB2F:PSU2000-YSTA"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PB2F:PSU2000-YFLT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBFP:FMC4310-YTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBFP:FMC4310-YTRP2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBFP:FMC4310-RV1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBFP:FMC4310-RV2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBFP:FMC4310-RV3"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-MD1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-MD2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-MD3"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-MD4"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-CON-GY2PRM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-CON-OPGY2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YON-CCPS2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-RV1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF:DIO4900-YON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PMF:STAT-DT-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PA1F:STAT-DT-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PA1F:STAT-DT-SWON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PB1F:STAT-DT-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PB1F:STAT-DT-SWON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PA2F:STAT-DT-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PA2F:STAT-DT-SWON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PB2F:STAT-DT-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PB2F:STAT-DT-SWON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF:STAT-DT-SHOTLEN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF:STAT-DT-SHOTLEN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF:STAT-BEAMON-TIME"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF:STAT-BEAMON-TIME"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF:STAT-ELAPSED"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF:STAT-ELAPSED"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GPF:STAT-RDY-TOUT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PMF:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA1F:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB1F:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA2F:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB2F:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-MCPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-GCPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-CCPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-MCPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-GCPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-CCPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:STAT-TRIG-SOUR"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF:STAT-TRIG-SOUR"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longin, "EC-GN-P01-GPF:STAT-MD1-LIM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longin, "EC-GN-P01-GPF:STAT-MD2-LIM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longin, "EC-GN-P01-GPF:STST-MD3-LIM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longin, "EC-GN-P01-GPF:STAT-MD4-LIM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:STAT-SIMM-MODE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF:STAT-SIMM-MODE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:STAT-PREP-MODE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF:STAT-PREP-MODE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:STAT-MST-TRIG"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF:STAT-MST-TRIG"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:STAT-RST-FLT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longout, "EC-GN-P01-GAF:STAT-SHOT-ID"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GAF:STAT-FC-SUBSTATE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longin, "EC-GN-P01-GAF:STAT-PREHEAT-TIME"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longout, "EC-GN-P01-GBF:STAT-SHOT-ID"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GBF:STAT-FC-SUBSTATE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longin, "EC-GN-P01-GBF:STAT-PREHEAT-TIME"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA1F:STAT-POLSW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA2F:STAT-POLSW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:STAT-CSV-LOAD"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:STAT-CSV-LOADED"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(stringout, "EC-GN-P01-GAF:STAT-CSV-NAME"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GAF:STAT-CSV-ERR"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF:STAT-CSV-LOAD"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF:STAT-CSV-LOADED"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(stringout, "EC-GN-P01-GBF:STAT-CSV-NAME"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GBF:STAT-CSV-ERR"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longout, "EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GPF:STAT-DAQ-MODE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:STAT-DAQ-SW-TRIG"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GPF:STAT-DAQ-STAT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:STAT-DAQ-CONF-STAT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GPF:STAT-DAQ-LEN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:STAT-DAQ-RECONF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GPF:STAT-DAQ-PUB-DLY"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longout, "EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE-RB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GPF:STAT-DAQ-MODE-RB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY-RB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GPF:STAT-DAQ-LEN-RB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GPF:STAT-DAQ-PUB-DLY-RB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PB1F:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PA1F:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF-FHPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF-CCPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GAF-MCPS:STATPREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF-GCPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF:STAT-PREP-TIME-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "SHORT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PB2F:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PA2F:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF-FHPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF-CCPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF-MCPS:STATPREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF-GCPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF:STAT-PREP-TIME-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-MCPS:PSU2120-TRG-SWPR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbi, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-MCPS:PSU2120-VOLT-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-MCPS:PSU2120-SWP-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-MCPS:PSU2120-SWP-LIM"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GAF-MCPS:PSU2120-ERR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-GCPS:PSU2130-TRG-SWPR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbi, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-GCPS:PSU2130-VOLT-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-GCPS:PSU2130-SWP-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-GCPS:PSU2130-SWP-LIM"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GAF-GCPS:PSU2130-ERR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-MCPS:PSU2120-TRG-SWPR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbi, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-MCPS:PSU2120-VOLT-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-MCPS:PSU2120-SWP-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-MCPS:PSU2120-SWP-LIM"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF-MCPS:PSU2120-ERR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-GCPS:PSU2130-TRG-SWPR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbi, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-GCPS:PSU2130-VOLT-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-GCPS:PSU2130-SWP-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-GCPS:PSU2130-SWP-LIM"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF-GCPS:PSU2130-ERR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GAF-FHPS:PSU2610-IDN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-RST"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-REM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-OUTON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-FHPS:PSU2610-CURR-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-FHPS:PSU2610-ACV-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-FHPS:PSU2610-FRQ-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF-FHPS:PSU2610-REM-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-ACV-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-FRQ-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACI"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACP"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-FRQ"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GAF-FHPS:PSU2610-ERROR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-STAT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-STOP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GAF-CCPS:PSU2320-IDN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-CCPS:PSU2320-RST"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-CCPS:PSU2320-OUTON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-CCPS:PSU2320-CURR-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-CCPS:PSU2320-DCV-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-CCPS:PSU2320-RANG-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF-CCPS:PSU2320-OUTON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:PSU2320-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:PSU2320-DCV-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:PSU2320-RANG-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCV"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCI"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCP"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GAF-CCPS:PSU2320-ERROR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:STAT-AMP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:STAT-FREQ"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GBF-FHPS:PSU2610-IDN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-RST"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-REM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-OUTON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-FHPS:PSU2610-CURR-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-FHPS:PSU2610-ACV-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-FHPS:PSU2610-FRQ-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF-FHPS:PSU2610-REM-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-ACV-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-FRQ-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACI"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACP"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-FRQ"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GBF-FHPS:PSU2610-ERROR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-STAT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-STOP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GBF-CCPS:PSU2320-IDN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-CCPS:PSU2320-RST"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-CCPS:PSU2320-OUTON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-CCPS:PSU2320-CURR-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-CCPS:PSU2320-DCV-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-CCPS:PSU2320-RANG-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF-CCPS:PSU2320-OUTON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:PSU2320-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:PSU2320-DCV-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:PSU2320-RANG-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCV"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCI"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCP"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GBF-CCPS:PSU2320-ERROR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:STAT-AMP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:STAT-FREQ"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PMF:STAT-GYA-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PMF:STAT-GYB-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(calcout, "EC-GN-P01-PMF:STAT-HVON-CALC"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(calcout, "EC-GN-P01-GAF:STAT-MST-TRIG-CALC"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(calcout, "EC-GN-P01-GBF:STAT-MST-TRIG-CALC"){ + field(SCAN, "Passive") + field(PINI, "YES") +} + +record(bi, "EC-GN-P01-GAF-CCPS:PSU2320-STAT"){ + field(SCAN, "Passive") +} +record(bi, "EC-GN-P01-GBF-CCPS:PSU2320-STAT"){ + field(SCAN, "Passive") +} diff --git a/EC-GN-JA-PCF/.svn/pristine/14/1441820775c639982eaafb90a50ddebb134e44d5.svn-base b/EC-GN-JA-PCF/.svn/pristine/14/1441820775c639982eaafb90a50ddebb134e44d5.svn-base new file mode 100644 index 0000000..c1cfdd2 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/14/1441820775c639982eaafb90a50ddebb134e44d5.svn-base @@ -0,0 +1,25 @@ +#====================================================================== +# Loading DBs +#====================================================================== +cd $(TOP)/db + + +#====================================================================== +# Loading Substitution Files +#====================================================================== +cd $(TOP)/iocBoot/$(IOC) + + +#====================================================================== +# PLC Communication Monitoring PVs DB Loading +#====================================================================== +cd $(EPICS_ROOT)/db + + +#====================================================================== +# IOC Monitor +#====================================================================== +cd $(EPICS_ROOT)/db +#dbLoadRecords("iocmon.db","CBS=EC-GN-SYSM, CTRLTYPE=À GäY, IDX=0, IOCTYPE=CUB, PP=, PPPP=, NNNN=, TTT=") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/.svn/pristine/15/159450d2d99b3f026b327006c529d3666e294a03.svn-base b/EC-GN-JA-PCF/.svn/pristine/15/159450d2d99b3f026b327006c529d3666e294a03.svn-base new file mode 100644 index 0000000..59ce9d2 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/15/159450d2d99b3f026b327006c529d3666e294a03.svn-base @@ -0,0 +1,42 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +SPB = RandomDataSource.x NI6528.x JAEPICSCA.x + +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults + +ROOT_DIR=../../../obj +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +all: $(OBJS) $(SUBPROJ) check-env + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + +check-env: +ifndef MARTe2_DIR + $(error MARTe2_DIR is undefined) +endif + diff --git a/EC-GN-JA-PCF/.svn/pristine/15/15bd7766d7916c65a24b54f0a9d37e270f726352.svn-base b/EC-GN-JA-PCF/.svn/pristine/15/15bd7766d7916c65a24b54f0a9d37e270f726352.svn-base new file mode 100644 index 0000000..587d4b8 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/15/15bd7766d7916c65a24b54f0a9d37e270f726352.svn-base @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAPreProgrammedGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAPreProgrammedGAM$(LIBEXT) \ + $(BUILD_DIR)/JAPreProgrammedGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/.svn/pristine/15/15d0643aa3d2a3bea5b22fd2aafbacbfcd37bb9a.svn-base b/EC-GN-JA-PCF/.svn/pristine/15/15d0643aa3d2a3bea5b22fd2aafbacbfcd37bb9a.svn-base new file mode 100644 index 0000000..b26b6bd --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/15/15d0643aa3d2a3bea5b22fd2aafbacbfcd37bb9a.svn-base @@ -0,0 +1,317 @@ +/** + * @file JAWFRecordGAM.cpp + * @brief Source file for class JAWFRecordGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAWFRecordGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAWFRecordGAM.h" + +#include "AdvancedErrorManagement.h" +#include "CLASSMETHODREGISTER.h" +#include "File.h" +#include "MessageI.h" +#include "RegisteredMethodsMessageFilter.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +// How often output signals are updated. +const MARTe::uint32 cycleMs = 10u; + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAWFRecordGAM::JAWFRecordGAM() : + GAM() { + filenameSignalIndex = 0u; + timeSignal = NULL_PTR(MARTe::int32 *); + loadTriggerSignal = NULL_PTR(MARTe::uint32 *); + valueSignals = NULL_PTR(MARTe::float32 **); + maxElements = 0u; + readOnce = true; +} + +JAWFRecordGAM::~JAWFRecordGAM() { + if (valueSignals != NULL_PTR(MARTe::float32 **)) { + delete[] valueSignals; + } +} + +bool JAWFRecordGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("Directory", directory); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Directory shall be specified"); + } + } + return ok; +} + +bool JAWFRecordGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 2u); + if (ok) { + ok = (numberOfOutputSignals > 1u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "At least two output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Two input signal with the filename and file load trigger shall be defined"); + } + if (ok) { + StreamString signalName = "Filename"; + ok = GetSignalIndex(InputSignals, filenameSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Filename input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, filenameSignalIndex); + ok = (inputType == CharString); + if (!ok) { + ok = (inputType == Character8Bit); + } + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, filenameSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as string", signalName.Buffer()); + } + } + } + if (ok) { + StreamString signalName = "CSV_LOAD"; + uint32 loadSignalIndex; + ok = GetSignalIndex(InputSignals, loadSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "CSV_LOAD input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, loadSignalIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, loadSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } else { + loadTriggerSignal = reinterpret_cast(GetInputSignalMemory(loadSignalIndex)); + } + } + } + if (ok) { + TypeDescriptor timeType = GetSignalType(OutputSignals, 0); + + ok = (timeType == SignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, 0, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as int32", signalName.Buffer()); + } + + uint32 i; + for (i = 1u; (i < numberOfOutputSignals) && (ok); i++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, i); + ok = (outputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, i, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } + else { + uint32 dimentionsCount; + ok = GetSignalNumberOfDimensions(OutputSignals, 0u, dimentionsCount); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Output signals shall have 1 dimension."); + } + else { + uint32 elementsCount; + ok = GetSignalNumberOfElements(OutputSignals, 0u, elementsCount); + if (maxElements == 0) { + maxElements = elementsCount; + } + else { + ok = (maxElements == elementsCount); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Output signals shall have consistent number of elements."); + } + } + } + } + } + } + if (ok) { + valueSignals = new float32*[numberOfOutputSignals - 1u]; + uint32 i; + for (i = 1u; i < numberOfOutputSignals; i++) { + valueSignals[i - 1] = reinterpret_cast(GetOutputSignalMemory(i)); + } + timeSignal = reinterpret_cast(GetOutputSignalMemory(0)); + } + return ok; +} + +bool JAWFRecordGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + if (strcmp(nextStateName, "WaitReady") == 0) { + // Reset read once flag when reentering WaitReady state. + readOnce = true; + } + return true; +} + +void JAWFRecordGAM::LoadFile() { + using namespace MARTe; + + bool ok = true; + + const char8 * const filenameSignal = reinterpret_cast(GetInputSignalMemory(filenameSignalIndex)); + StreamString filename = directory; + filename += DIRECTORY_SEPARATOR; + filename += filenameSignal; + REPORT_ERROR(ErrorManagement::Debug, "Opening file %s", filename.Buffer()); + + File f; + ok = f.Open(filename.Buffer(), BasicFile::ACCESS_MODE_R); + + uint32 numberOfPreProgrammedTimeRows = 0u; + int32 *preProgrammedTime; + float32 **preProgrammedValues; + uint32 numberOfPreProgrammedValues = 0u; + + if (ok) { + StreamString tokenLine; + while (f.GetLine(tokenLine)) { + if (tokenLine[0] != '#') { + numberOfPreProgrammedTimeRows++; + } + tokenLine = ""; + } + f.Seek(0); + uint32 t = 0u; + tokenLine = ""; + while ((ok) && (f.GetLine(tokenLine))) { + if (tokenLine[0] == '#') { + tokenLine = ""; + continue; + } + if (numberOfPreProgrammedValues == 0) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + while (tokenLine.GetToken(token, ",", ignored)) { + numberOfPreProgrammedValues++; + token = ""; + } + ok = numberOfPreProgrammedValues == numberOfOutputSignals; + // Remove time from pre-programmed values count. + numberOfPreProgrammedValues -= 1u; + if (ok) { + preProgrammedTime = new int32[maxElements]; + memset(preProgrammedTime, 0, maxElements * sizeof(int32)); + preProgrammedValues = new float32*[numberOfPreProgrammedValues]; + uint32 j; + for (j = 0u; j < numberOfPreProgrammedValues; j++) { + preProgrammedValues[j] = new float32[maxElements]; + memset(preProgrammedValues[j], 0, maxElements * sizeof(float32)); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Number of columns in csv file (%d) is not consistent with the number of output signals (%d)", numberOfPreProgrammedValues, + numberOfOutputSignals - 1u); + } + } + if (ok) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + uint32 idx = 0u; + while (tokenLine.GetToken(token, ",", ignored)) { + if (idx == 0u) { + preProgrammedTime[t] = atoi(token.Buffer()); + } + else { + ok = ((idx - 1) < numberOfPreProgrammedValues); + if (ok) { + preProgrammedValues[idx - 1][t] = static_cast(atof(token.Buffer())); + } + else { + REPORT_ERROR(ErrorManagement::FatalError, "Number of columns in csv file is not consistent with the number of output signals in line %d", t); + } + } + token = ""; + idx++; + } + t++; + } + tokenLine = ""; + } + f.Close(); + } else { + REPORT_ERROR(ErrorManagement::Debug, "Cannot open the file %s", filename.Buffer()); + return; + } + if (numberOfPreProgrammedTimeRows > maxElements) { + REPORT_ERROR(ErrorManagement::Warning, "Only %d (out of %d) of pre-programmed values will be written to waveform record.", + maxElements, numberOfPreProgrammedTimeRows); + } + ok = MemoryOperationsHelper::Copy(timeSignal, preProgrammedTime, maxElements * sizeof(int32)); + uint32 i; + for (i = 0u; (i < numberOfPreProgrammedValues) && (ok); ++i) { + ok = MemoryOperationsHelper::Copy(valueSignals[i], preProgrammedValues[i], maxElements * sizeof(float32)); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::Warning, "Failed to write data to waveform record."); + } + + if (preProgrammedValues != NULL_PTR(float32 **)) { + uint32 i; + for (i = 0u; i < numberOfPreProgrammedValues; i++) { + delete preProgrammedValues[i]; + } + delete[] preProgrammedValues; + } + if (preProgrammedTime != NULL_PTR(int32 *)) { + delete[] preProgrammedTime; + } +} + +bool JAWFRecordGAM::Execute() { + if (*loadTriggerSignal == 1u) { + if (readOnce) { + LoadFile(); + readOnce = false; + } + } else { + // Reset read once flag when loadTriggerSignal is reset. + readOnce = true; + } + return true; +} + +CLASS_REGISTER(JAWFRecordGAM, "1.0") diff --git a/EC-GN-JA-PCF/.svn/pristine/16/1695bd99df0b589cea410b48741efd748faae6f8.svn-base b/EC-GN-JA-PCF/.svn/pristine/16/1695bd99df0b589cea410b48741efd748faae6f8.svn-base new file mode 100644 index 0000000..efa63e1 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/16/1695bd99df0b589cea410b48741efd748faae6f8.svn-base @@ -0,0 +1,31 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.DataUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ScriptUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ConsoleUtil); + +var table = widget.getTable(); +var fct_name=widget.getPropertyValue("name"); +var selectionChanged = new Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener() { + selectionChanged: function(selection) { + + var selectedrow= table.getSelection(); + var cuIndex=selectedrow[0][0]; + var phyName=selectedrow[0][1]; + var loc=selectedrow[0][5]; + var pppp=selectedrow[0][6]; + var pp=selectedrow[0][7]; + var nnnn=selectedrow[0][8]; + + var macroInput = DataUtil.createMacrosInput(true) + macroInput.put("CUB", cuIndex) + macroInput.put("PHY_NAME", phyName) + macroInput.put("FCT_NAME", fct_name) + macroInput.put("PPPP", pppp) + macroInput.put("PP", pp) + macroInput.put("NNNN", nnnn) + macroInput.put("CUB_LOC", "Location: "+loc) + + ScriptUtil.openOPI(widget, fct_name+"-CubicleDetails.opi", 1, macroInput); + } +}; +table.addSelectionChangedListener(selectionChanged); diff --git a/EC-GN-JA-PCF/.svn/pristine/16/16ccca26fcf806f63cf914f82655782e253ccf35.svn-base b/EC-GN-JA-PCF/.svn/pristine/16/16ccca26fcf806f63cf914f82655782e253ccf35.svn-base new file mode 100644 index 0000000..951ed07 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/16/16ccca26fcf806f63cf914f82655782e253ccf35.svn-base @@ -0,0 +1,375 @@ +/** + * @file EPICSCAOutput.cpp + * @brief Source file for class EPICSCAOutput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class EPICSCAOutput (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAEPICSCAOutput.h" + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "MemoryMapAsyncOutputBroker.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +JAEPICSCAOutput::JAEPICSCAOutput() : + DataSourceI() { + pvs = NULL_PTR(PVWrapper *); + stackSize = THREADS_DEFAULT_STACKSIZE * 4u; + cpuMask = 0xffu; + numberOfBuffers = 0u; + ignoreBufferOverrun = 1u; + threadContextSet = false; +} + +/*lint -e{1551} must free the memory allocated to the different PVs.*/ +JAEPICSCAOutput::~JAEPICSCAOutput() { + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + if (pvs[n].pvChid != NULL_PTR(chid)) { + (void) ca_clear_channel(pvs[n].pvChid); + } + if (pvs[n].memory != NULL_PTR(void *)) { + GlobalObjectsDatabase::Instance()->GetStandardHeap()->Free(pvs[n].memory); + GlobalObjectsDatabase::Instance()->GetStandardHeap()->Free(pvs[n].previousValue); + } + } + delete[] pvs; + } +} + +bool JAEPICSCAOutput::Initialise(StructuredDataI & data) { + bool ok = DataSourceI::Initialise(data); + if (ok) { + ok = data.Read("NumberOfBuffers", numberOfBuffers); + + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "NumberOfBuffers shall be specified"); + } + } + if (ok) { + if (!data.Read("CPUs", cpuMask)) { + REPORT_ERROR(ErrorManagement::Information, "No CPUs defined. Using default = %d", cpuMask); + } + if (!data.Read("StackSize", stackSize)) { + REPORT_ERROR(ErrorManagement::Information, "No StackSize defined. Using default = %d", stackSize); + } + if (!data.Read("IgnoreBufferOverrun", ignoreBufferOverrun)) { + REPORT_ERROR(ErrorManagement::Information, "No IgnoreBufferOverrun defined. Using default = %d", ignoreBufferOverrun); + } + + } + if (ok) { + ok = data.MoveRelative("Signals"); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Could not move to the Signals section"); + } + if (ok) { + ok = data.Copy(originalSignalInformation); + } + if (ok) { + ok = originalSignalInformation.MoveToRoot(); + } + //Do not allow to add signals in run-time + if (ok) { + ok = signalsDatabase.MoveRelative("Signals"); + } + if (ok) { + ok = signalsDatabase.Write("Locked", 1u); + } + if (ok) { + ok = signalsDatabase.MoveToAncestor(1u); + } + } + if (ok) { + ok = data.MoveToAncestor(1u); + } + return ok; +} + +bool JAEPICSCAOutput::SetConfiguredDatabase(StructuredDataI & data) { + bool ok = DataSourceI::SetConfiguredDatabase(data); + //Check the signal index of the timing signal. + uint32 nOfSignals = GetNumberOfSignals(); + if (ok) { + ok = (nOfSignals > 0u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one signal shall be defined"); + } + } + if (ok) { + //Do not allow samples + uint32 functionNumberOfSignals = 0u; + uint32 n; + if (GetFunctionNumberOfSignals(OutputSignals, 0u, functionNumberOfSignals)) { + for (n = 0u; (n < functionNumberOfSignals) && (ok); n++) { + uint32 nSamples; + ok = GetFunctionSignalSamples(OutputSignals, 0u, n, nSamples); + if (ok) { + ok = (nSamples == 1u); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The number of samples shall be exactly 1"); + } + } + } + } + //Only one and one GAM allowed to interact with this DataSourceI + if (ok) { + ok = (GetNumberOfFunctions() == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Exactly one Function allowed to interact with this DataSourceI"); + } + } + + if (ok) { + pvs = new PVWrapper[nOfSignals]; + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + pvs[n].memory = NULL_PTR(void *); //value to write PV + pvs[n].previousValue = NULL_PTR(void *); //written value + pvs[n].pvChid = NULL_PTR(chid); + + } + for (n = 0u; (n < nOfSignals) && (ok); n++) { + //Note that the RealTimeApplicationConfigurationBuilder is allowed to change the order of the signals w.r.t. to the originalSignalInformation + StreamString orderedSignalName; + ok = GetSignalName(n, orderedSignalName); + if (ok) { + //Have to mix and match between the original setting of the DataSource signal + //and the ones which are later added by the RealTimeApplicationConfigurationBuilder + ok = originalSignalInformation.MoveRelative(orderedSignalName.Buffer()); + } + StreamString pvName; + if (ok) { + ok = originalSignalInformation.Read("PVName", pvName); + if (!ok) { + uint32 nn = n; + REPORT_ERROR(ErrorManagement::ParametersError, "No PVName specified for signal at index %d", nn); + } + } + TypeDescriptor td = GetSignalType(n); + + if (ok) { + (void) StringHelper::CopyN(&pvs[n].pvName[0], pvName.Buffer(), PV_NAME_MAX_SIZE); + if (td == CharString) { + pvs[n].pvType = DBR_STRING; + } + else if (td == Character8Bit) { + pvs[n].pvType = DBR_STRING; + } + else if (td == SignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == UnsignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == SignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == UnsignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == SignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == UnsignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == Float32Bit) { + pvs[n].pvType = DBR_FLOAT; + } + else if (td == Float64Bit) { + pvs[n].pvType = DBR_DOUBLE; + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Type %s is not supported", TypeDescriptor::GetTypeNameFromTypeDescriptor(td)); + ok = false; + } + } + uint32 numberOfElements = 1u; + if (ok) { + ok = GetSignalNumberOfElements(n, numberOfElements); + } + if (ok) { + if (pvs[n].pvType == DBR_STRING) { + ok = (numberOfElements == 40u); + } + if (!ok) { + //Could support arrays of strings with multiples of char8[40] + REPORT_ERROR(ErrorManagement::ParametersError, + "Strings shall be defined with 40 elements char8[40]. Arrays of strings are not currently supported"); + } + } + if (ok) { + pvs[n].numberOfElements = numberOfElements; + } + if (ok) { + pvs[n].memorySize = td.numberOfBits; + pvs[n].memorySize /= 8u; + pvs[n].memorySize *= numberOfElements; + pvs[n].memory = GlobalObjectsDatabase::Instance()->GetStandardHeap()->Malloc(pvs[n].memorySize); + pvs[n].previousValue = GlobalObjectsDatabase::Instance()->GetStandardHeap()->Malloc(pvs[n].memorySize); + ok = originalSignalInformation.MoveToAncestor(1u); + } + } + } + return ok; +} + +bool JAEPICSCAOutput::AllocateMemory() { + return true; +} + +uint32 JAEPICSCAOutput::GetNumberOfMemoryBuffers() { + return 1u; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The signalAddress is independent of the bufferIdx.*/ +bool JAEPICSCAOutput::GetSignalMemoryBuffer(const uint32 signalIdx, const uint32 bufferIdx, void*& signalAddress) { + bool ok = (pvs != NULL_PTR(PVWrapper *)); + if (ok) { + ok = (signalIdx < GetNumberOfSignals()); + } + if (ok) { + //lint -e{613} pvs cannot as otherwise ok would be false + signalAddress = pvs[signalIdx].memory; + } + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The brokerName only depends on the direction */ +const char8* JAEPICSCAOutput::GetBrokerName(StructuredDataI& data, const SignalDirection direction) { + const char8* brokerName = ""; + if (direction == OutputSignals) { + brokerName = "MemoryMapAsyncOutputBroker"; + } + return brokerName; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: InputBrokers are not supported. Function returns false irrespectively of the parameters.*/ +bool JAEPICSCAOutput::GetInputBrokers(ReferenceContainer& inputBrokers, const char8* const functionName, void* const gamMemPtr) { + return false; +} + +bool JAEPICSCAOutput::GetOutputBrokers(ReferenceContainer& outputBrokers, const char8* const functionName, void* const gamMemPtr) { + ReferenceT broker("MemoryMapAsyncOutputBroker"); + bool ok = broker->InitWithBufferParameters(OutputSignals, *this, functionName, gamMemPtr, numberOfBuffers, cpuMask, stackSize); + if (ok) { + ok = outputBrokers.Insert(broker); + broker->SetIgnoreBufferOverrun(ignoreBufferOverrun == 1u); + } + + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: NOOP at StateChange, independently of the function parameters.*/ +bool JAEPICSCAOutput::PrepareNextState(const char8* const currentStateName, const char8* const nextStateName) { + return true; +} + +uint32 JAEPICSCAOutput::GetStackSize() const { + return stackSize; +} + +uint32 JAEPICSCAOutput::GetCPUMask() const { + return cpuMask; +} + +uint32 JAEPICSCAOutput::GetNumberOfBuffers() const { + return numberOfBuffers; +} + +bool JAEPICSCAOutput::Synchronise() { + bool ok = true; + uint32 n; + uint32 nOfSignals = GetNumberOfSignals(); + if (!threadContextSet) { + ok = (ca_context_create(ca_enable_preemptive_callback) == ECA_NORMAL); + if (!ok) { + REPORT_ERROR(ErrorManagement::FatalError, "ca_enable_preemptive_callback failed"); + } + threadContextSet = ok; + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + ok = (ca_create_channel(&pvs[n].pvName[0], NULL_PTR(caCh *), NULL_PTR(void *), 20u, &pvs[n].pvChid) == ECA_NORMAL); + if (!ok) { + REPORT_ERROR(ErrorManagement::FatalError, "ca_create_channel failed for PV with name %s", pvs[n].pvName); + } + } + } + } + + //Allow to write event at the first time! + if (threadContextSet) { + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + bool isNewValue = true; + if (pvs[n].pvType == DBR_STRING) { + if(strcmp((char*)pvs[n].memory,(char*)pvs[n].previousValue)==0){ + isNewValue = false; + continue; + } + if(isNewValue){ + ok = (ca_put(pvs[n].pvType, pvs[n].pvChid, pvs[n].memory) == ECA_NORMAL); + memcpy(pvs[n].previousValue,pvs[n].memory, pvs[n].numberOfElements); + } + } + else { + if(memcmp(pvs[n].memory, pvs[n].previousValue, pvs[n].numberOfElements)==0){ + isNewValue = false; + continue; + } + if(isNewValue){ + ok = (ca_array_put(pvs[n].pvType, pvs[n].numberOfElements, pvs[n].pvChid, pvs[n].memory) == ECA_NORMAL); + memcpy(pvs[n].previousValue, pvs[n].memory, pvs[n].numberOfElements); + } + } + if (!ok) { + REPORT_ERROR(ErrorManagement::FatalError, "ca_put failed for PV: %s", pvs[n].pvName); + } + (void) ca_pend_io(0.1); + } + } + } + + return ok; +} + +bool JAEPICSCAOutput::IsIgnoringBufferOverrun() const { + return (ignoreBufferOverrun == 1u); +} + +CLASS_REGISTER(JAEPICSCAOutput, "1.0") + +} + diff --git a/EC-GN-JA-PCF/.svn/pristine/17/17e4abb8eea0082bb6e56ec3f600d1cfc4697d51.svn-base b/EC-GN-JA-PCF/.svn/pristine/17/17e4abb8eea0082bb6e56ec3f600d1cfc4697d51.svn-base new file mode 100644 index 0000000..39d71cf --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/17/17e4abb8eea0082bb6e56ec3f600d1cfc4697d51.svn-base @@ -0,0 +1,8 @@ +epicsEnvSet("AUTOSAVE_SYSM_PV_PREFIX", "EC-GN-SYSM:PSH0CUB-") +epicsEnvSet("IOCSH_PS1", "${IOC}> ") +epicsEnvSet("STREAM_PROTOCOL_PATH", "$(TOP)/db:$(EPICS_ROOT)/db") +epicsEnvSet("IPPort_priority","0") +epicsEnvSet("IPPort_noAutoConnect", "0") +epicsEnvSet("IPPort_noProcessEos", "0") + +#- End-of-file marker - do not delete or add lines below! \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/18/18a09f6c3c6f536fa1943892f1e2a5c04126face.svn-base b/EC-GN-JA-PCF/.svn/pristine/18/18a09f6c3c6f536fa1943892f1e2a5c04126face.svn-base new file mode 100644 index 0000000..6305e40 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/18/18a09f6c3c6f536fa1943892f1e2a5c04126face.svn-base @@ -0,0 +1,76 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + + +def test_standby(): + """ + In the WaitStandby State, simulate PLC STANDBY signal. + Turn on FHPS by push auto-on button. + Turn on SCM PSs automatically. + State transition condition is checked at last. + """ + print '---------- Start WatiStandby test ----------' + print '1. Simulate SELECT signal. State should go to WatiStandby from Disabled.' + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1.SVAL 1', shell=True) + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2 1', shell=True) + print 'Enter to continue test' + inpval = raw_input() + print '2. Set MCPS rampup parameter(target current, sweep rate.)' + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MI 4', shell=True) #For A + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-TRG-SWPR-SET 1.69', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MI 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-TRG-SWPR-SET 1.0', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MI 4', shell=True) #For B + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-TRG-SWPR-SET 1.69', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MI 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-TRG-SWPR-SET 1.0', shell=True) + time.sleep(1) + print '3. Simulate STANDBY signal. MCPS, GCPS, FHPS rampup must be started.' + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R.SVAL 1', shell=True) + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R 1', shell=True) + print 'Enter to continue test' + inpval = raw_input() + print '4. Set FHPS rampup parameter and start it.' + #res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV 6', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-AUTO-RU-TIME 60', shell=True) #in second. + #res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START 1', shell=True) #in second. + #res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV 6', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-AUTO-RU-TIME 60', shell=True) #in second. + #res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START 1', shell=True) #in second. + print 'Enter to continue test' + inpval = raw_input() + print '5. Simulate FHPS, MCPS and GCPS state.' + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB.SVAL 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON.SVAL 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON 4', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB.SVAL 3', shell=True) #turn off for GCPS test + #res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB 3', shell=True) #turn off for GCPS test + #res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON.SVAL 4', shell=True)#turn off for GCPS test + #res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON 4', shell=True) #turn off for GCPS test + #res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB.SVAL 1', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB 1', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV.SVAL 6', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV 6', shell=True) + + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB.SVAL 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON.SVAL 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB.SVAL 3', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB 3', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON.SVAL 4', shell=True)#turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON 4', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV.SVAL 6', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV 6', shell=True) + time.sleep(1) + print '6. Confirm FHPS and SCM ramp-up complete. The state goes to WaitREADY from WaitStandby.' + print '---------- END WaitStandby test ----------' + diff --git a/EC-GN-JA-PCF/.svn/pristine/18/18da067aaededbfa075682073eca65b570186bc8.svn-base b/EC-GN-JA-PCF/.svn/pristine/18/18da067aaededbfa075682073eca65b570186bc8.svn-base new file mode 100644 index 0000000..2a4cd80 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/18/18da067aaededbfa075682073eca65b570186bc8.svn-base @@ -0,0 +1,84 @@ +/** + * @file JASourceChoiseGAM.h + * @brief Header file for class JASourceChoiseGAM + * @date Mar 04, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JASourceChoiseGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JASourceChoiseGAM_H_ +#define GAMS_JASourceChoiseGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +class JASourceChoiseGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JASourceChoiseGAM(); + + virtual ~JASourceChoiseGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + //GAM fixed parameters. + MARTe::uint32 numberOfPVs; + + // Input signals + std::vector inputUInt32; + std::vector inputFloat32; + std::vector choise; + + // Output signals + std::vector outputUInt32; + std::vector outputFloat32; + + // Previous Input value + std::vector prevUInt32; + std::vector prevFloat32; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JASourceChoiseGAM_H_ */ diff --git a/EC-GN-JA-PCF/.svn/pristine/1b/1b11db83c998e6b6253b1e9c3cc9f21e4c13a2d9.svn-base b/EC-GN-JA-PCF/.svn/pristine/1b/1b11db83c998e6b6253b1e9c3cc9f21e4c13a2d9.svn-base new file mode 100644 index 0000000..8233fb0 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/1b/1b11db83c998e6b6253b1e9c3cc9f21e4c13a2d9.svn-base @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JARampupGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JARampupGAM$(LIBEXT) \ + $(BUILD_DIR)/JARampupGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/.svn/pristine/1b/1b6d4e1bf35713084a164f5e33aaa0d74132efb4.svn-base b/EC-GN-JA-PCF/.svn/pristine/1b/1b6d4e1bf35713084a164f5e33aaa0d74132efb4.svn-base new file mode 100644 index 0000000..954c588 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/1b/1b6d4e1bf35713084a164f5e33aaa0d74132efb4.svn-base @@ -0,0 +1,103 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,60,45,0,10,10,10 +10,55,40,-2,9,9,9 +20,50,35,-4,8,8,8 +30,45,30,-6,7,7,7 +40,40,25,-8,6,6,6 +50,35,20,-10,5,5,5 +60,30,15,-12,4,4,4 +70,25,10,-14,3,3,3 +80,20,5,-16,2,2,2 +90,15,0,-18,1,1,1 +100,10,-5,-20,0,0,0 +110,5,0,-22,1,1,1 +120,0,5,-20,2,2,2 +130,-5,10,-18,3,3,3 +140,0,15,-16,4,4,4 +150,5,20,-14,5,5,5 +160,10,25,-12,6,6,6 +170,15,30,-10,7,7,7 +180,20,35,-8,8,8,8 +190,25,40,-6,9,9,9 +200,30,45,-4,10,10,10 +210,35,40,-2,9,9,9 +220,40,35,0,8,8,8 +230,45,30,-2,7,7,7 +240,50,25,-4,6,6,6 +250,55,20,-6,5,5,5 +260,60,15,-8,4,4,4 +270,55,10,-10,3,3,3 +280,50,5,-12,2,2,2 +290,45,0,-14,1,1,1 +300,40,-5,-16,0,0,0 +310,35,0,-18,1,1,1 +320,30,5,-20,2,2,2 +330,25,10,-25,3,3,3 +340,20,15,-20,4,4,4 +350,15,20,-18,5,5,5 +360,10,25,-16,6,6,6 +370,5,30,-14,7,7,7 +380,0,35,-12,8,8,8 +390,-5,40,-10,9,9,9 +400,0,45,-8,10,10,10 +410,5,40,-6,9,9,9 +420,10,35,-4,8,8,8 +430,15,30,-2,7,7,7 +440,20,25,0,6,6,6 +450,25,20,-2,5,5,5 +460,30,15,-4,4,4,4 +470,35,10,-6,3,3,3 +480,40,5,-8,2,2,2 +490,45,0,-10,1,1,1 +500,50,-5,-12,0,0,0 +510,55,0,-14,1,1,1 +520,60,5,-16,2,2,2 +530,55,10,-18,3,3,3 +540,50,15,-20,4,4,4 +550,45,20,-30,5,5,5 +560,40,25,-20,6,6,6 +570,35,30,-18,7,7,7 +580,30,35,-16,8,8,8 +590,25,40,-14,9,9,9 +600,20,45,-12,10,10,10 +610,15,40,-10,9,9,9 +620,10,35,-8,8,8,8 +630,5,30,-6,7,7,7 +640,0,25,-4,6,6,6 +650,-5,20,-2,5,5,5 +660,0,15,0,4,4,4 +670,5,10,-2,3,3,3 +680,10,5,-4,2,2,2 +690,15,0,-6,1,1,1 +700,20,-5,-8,0,0,0 +710,25,0,-10,1,1,1 +720,30,5,-12,2,2,2 +730,35,10,-14,3,3,3 +740,40,15,-16,4,4,4 +750,45,20,-18,5,5,5 +760,50,25,-20,6,6,6 +770,55,30,-22,7,7,7 +780,60,35,-20,8,8,8 +790,55,40,-18,9,9,9 +800,50,45,-16,10,10,10 +810,45,40,-14,9,9,9 +820,40,35,-12,8,8,8 +830,35,30,-10,7,7,7 +840,30,25,-8,6,6,6 +850,25,20,-6,5,5,5 +860,20,15,-4,4,4,4 +870,15,10,-2,3,3,3 +880,10,5,0,2,2,2 +890,5,0,-2,1,1,1 +900,0,-5,-4,0,0,0 +910,-5,0,-6,1,1,1 +920,0,5,-8,2,2,2 +930,5,10,-10,3,3,3 +940,10,15,-12,4,4,4 +950,15,20,-14,5,5,5 +960,20,25,-16,6,6,6 +970,25,30,-18,7,7,7 +980,30,35,-20,8,8,8 +990,35,40,-22,9,9,9 +1000,40,45,-20,10,10,10 diff --git a/EC-GN-JA-PCF/.svn/pristine/1b/1be3b45333893d05c418c5f70511953adf6c90d6.svn-base b/EC-GN-JA-PCF/.svn/pristine/1b/1be3b45333893d05c418c5f70511953adf6c90d6.svn-base new file mode 100644 index 0000000..5b7751f --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/1b/1be3b45333893d05c418c5f70511953adf6c90d6.svn-base @@ -0,0 +1,58 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAEPICSCAOutput.x JAEPICSCAInput.x + +PACKAGE=DataSources + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(EPICS_BASE)/include/ +INCLUDES += -I$(EPICS_BASE)/include/os/Linux/ +INCLUDES += -I$(EPICS_BASE)/include/compiler/gcc/ +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L5GAMs + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAEPICSCA$(LIBEXT) \ + $(BUILD_DIR)/JAEPICSCA$(DLLEXT) + echo $(OBJS) + +include depends.$(TARGET) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/.svn/pristine/1c/1ce3c5da2c21037a3b66365bdca7907307d37519.svn-base b/EC-GN-JA-PCF/.svn/pristine/1c/1ce3c5da2c21037a3b66365bdca7907307d37519.svn-base new file mode 100644 index 0000000..1254477 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/1c/1ce3c5da2c21037a3b66365bdca7907307d37519.svn-base @@ -0,0 +1,463 @@ +********** +* EXAMLE * +********** + +State1 // RT application state name +========== +1. // Numbered GAMs in order of execution +if (signal_A == 1) // Execution function of the GAM +{ + set signal_B = 3 + change state to State2 +} +---------- + + + +***************** +* RT APP STATES * +***************** + +WaitStandby +========== +1. // DONE +if (EC-GN-P01-GAF:PLC4110-CON-OPGY1 == 0) //If a Gyrotron is not selected by PLC. +{ + change state to Disabled +} +---------- +2. // DONE +if (EC-GN-P01-GPF:PLC4110-YTS-ST1R == 1) //If STANDBY signal come from PLC, start Coil&Fil PSs. +{ + // TODO should these signals be set only once every time this state is entered? + set signal EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP = 1 + set signal EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP = 1 + set signal EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START = 1 +} +---------- +3. // DONE +if (EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB == 1 + AND + EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON > 0 + AND + EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB == 1 + AND + EC-GN-P01-GAF-FHPS:PSU2610-CURR-RB > 0) +{ + change state to Offline +} +---------- + + + +Disabled +========== +1. // DONE +if (EC-GN-P01-GAF:PLC4110-CON-OPGY1 == 1) +{ + change state to WaitStandby +} +---------- + + + +Offline +========== +1. // DONE +if (EC-GN-P01-GAF:PLC4110-CON-OPGY1 == 0) //If Gyrotron selection is turned off. +{ + change state to Disabled +} +---------- +2. // DONE +// If READY signal come from PLC is equal 1, app starts CCPS. +if (EC-GN-P01-GPF:PLC4110-YTS-ST2R == 1 + AND + EC-GN-P01-GAF-CCPS:PLC4110-YON-CCPS1 == 1) +{ + // TODO should this signal be set only once every time this state is entered? + set signal EC-GN-P01-GAF-CCPS:PSU2320-OUTON-SP = 1 +} +---------- +3. // DONE (with a temporary signal that needs to be changed when the record is added) +// TODO: Do we also have to check, that GAM 2. executed? So do we also have to check that EC-GN-P01-GPF:PLC4110-YTS-ST2R == 1? +if (EC-GN-P01-GAF-CCPS:PSU2320-STAT == 1) // TODO: there is no signal named EC-GN-P01-GAF-CCPS:PSU2320-STAT + // MEMO: I need add this record to check whether CCPS in running or stop. +{ + change state to WaitPermit +} +---------- +4. // DONE +// Wait CSV-LOAD trigger. When the app detect it, save data into the app. +if (EC-GN-P01-GAF:STAT-CSV-LOAD == 1) +{ + open csv file (file name: EC-GN-P01-GAF:STAT-CSV-NAME) + load time series data into memory + write data into EPICS waveform PSs.(EC-GN-P01-???:STAT-PREP-WF) // TODO do we realy write first data here or do we wait for PreHeating? + set signal EC-GN-P01-GAF:STAT-CSV-LOADED = 1 // TODO do we write 1 here? + If there is error, write EC-GN-P01-GAF:STAT-CSV-ERROR. // TODO there is no signal named EC-GN-P01-GAF:STAT-CSV-ERROR +} + + +WaitPermit +========== +1. // DONE +if (EC-GN-P01-GAF:PLC4110-CON-OPGY1 == 0) //If Gyrotron is un-selected. +{ + change state to Disabled +} +---------- +2. // DONE +if (EC-GN-P01-GAF:STAT-PREP-MODE == 1 + AND + EC-GN-P01-GAF:PLC4110-CON-GY1PRM == 1) +{ + change state to PreHeating +} +---------- +3. // DONE +if (EC-GN-P01-GAF:STAT-PREP-MODE == 0 + AND + EC-GN-P01-GAF:PLC4110-CON-GY1PRM == 1) +{ + change state to WaitReady +} +---------- +4. // DONE +if (EC-GN-P01-GAF:STAT-CSV-LOAD == 1) +{ + open csv file (file name: EC-GN-P01-GAF:STAT-CSV-NAME) + load time series data into memory + write data into EPICS waveform PSs.(EC-GN-P01-???:STAT-PREP-WF) + set signal EC-GN-P01-GAF:STAT-CSV-LOADED = 1 + If there is error, write EC-GN-P01-GAF:STAT-CSV-ERROR. +} + +PreHeating +========== +1. // DONE +every 10 ms do +{ + else + { + // TODO do we use float32 for the type of waveform signals? + // TODO is this the right order of columns? Time point is in column 1. + // TODO on what signal do we write time? + set signal EC-GN-P01-PB1F:PSU1000-EREF = setpoint column 2 + set signal EC-GN-P01-PA1F:PSU3000-EREF = setpoint column 3 // TODO there are two EC-GN-P01-PA1F:PSU3000-EREF signals. One ending with -P and one with -N. + set signal EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET = setpoint column 4 + set signal EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET = setpoint column 5 + set signal EC-GN-P01-GAF-FHPS:PSU2320-EREF = setpoint column 6 + } +} +---------- +2. // DONE +if (time == 0) +{ + change state to WaitReady +} +---------- + + +WaitReady +========== +1. // DONE +if (EC-GN-P01-PB1F:PSU1000-YSTA == 1 + AND + EC-GN-P01-PA1F:PSU3000-YSTA == 1) +{ + change state to WaitHVON +} +---------- + + +WaitHVON +========== +1. // DONE +if (EC-GN-P01-GPF:PLC4110-YTS-ST3R == 1)// Check ON signal from PLC. This signal come when PLC check the operation operation possible conditions. +{ + change state to HVArming +} +---------- +2. // DONE +if (EC-GN-P01-GPF:PLC4110-YTS-ST3R == 1) +{ + start HVON timer +} +---------- + + + +HVArming //HVArming is a state to startup HV generation in APS and BPS. +========== +1. +at specified time // TODO: Where do I get this specified time? And is it a countdown time or what? + // MEMO: Time is specified by PVs (EC-GN-P01-PB1F:STAT-DT-HVON). When app detect HVON from PLC, it is t=0. +{ + set signal EC-GN-P01-PB1F:PSU1000-CON-HV = 1 +} +---------- +2. +at specified time // TODO: Where do I get this specified time? And is it a countdown time or what? + // MEMO: Time is specified by PVs (EC-GN-P01-PA1F:STAT-DT-HVON) +{ + set signal EC-GN-P01-PA1F:PSU3000-CON-HV = 1 +} +---------- +3. +if (EC-GN-P01-PB1F:PSU1000-CON-HV == 1 + AND + EC-GN-P01-PA1F:PSU3000-CON-HV == 1 + AND + EC-GN-P01-GPF::PLC4110-YSTA-MPSS == 0) // MEMO: Both HV PVs are 1. i.e.Both PSs are charged HV. and is in async mode. +{ + change state to HVArmed +} +---------- +4. +if (EC-GN-P01-PB1F:PSU1000-CON-HV == 1 + AND + EC-GN-P01-PA1F:PSU3000-CON-HV == 1 + AND + EC-GN-P01-GPF::PLC4110-YSTA-MPSS == 1) // MEMO: HVPS HVs are ON and is in SYNC mode. +{ + Change state to HVArmedESDN +} +---------- +5. + count up elapsed time (time from HVON detection) + Write time to EC-GN-P01-GAF:STAT-ELAPSED + + +HVArmed +========== +1. +if (EC-GN-P01-GPF:PLC4110-YTS-ST3R == 0) // TODO: when do we go from HVArmed to Offline? + // MEMO: move to Offline when ON signal from PLC is turned off. +{ + change state to Offline +} +---------- +2. +// TODO: "(Entry) Write EC-GN-P01-GAF:PCF4210-YTS-GA1" What does Entry mean? Does it mean to do something +// only on the first cycle when we enter this state? What do I write to signal EC-GN-P01-GAF:PCF4210-YTS-GA1? +// MEMO: EC-GN-P01-GAF:PCF4210-YTS-GA1 is a PV that fast controller notifies Gyrotron operation state to PLC. +// When enter the HVArmed state, App writes 1 to this EPICS PV. +---------- +3. +if (EC-GN-P01-PB1F:PSU1000-CON-SW == 1) // TODO: when do we go from HVArmed to HVInjectionBPS? + // MEMO: If MHVPS HV is turned ON first, goto this state. +{ + change state to HVInjectionBPS +} +---------- +4. +if (EC-GN-P01-PMF:PSU0000-CON-SW == 1) // TODO: when do we go from HVArmed to HVInjectionMHVPS? + // MEMO: If BPS HV is turned ON first, goto this state. +{ + change state to HVInjectionMHVPS +} +---------- +5. + count up elapsed time (time from HVON detection) + Write time to EC-GN-P01-GAF:STAT-ELAPSED +---------- +6. +if (EC-GN-P01-GPF::PLC4110-YSTA-MPSS == 1) //When SYNC mode turned ON. +{ + change state to HVArmedESDN +} +---------- + +HVArmedESDN // Start ESDN command, waveform subscription. +========== +1. +if (EC-GN-P01-GPF:PLC4110-YTS-ST3R == 0) +{ + change state to Offline +} +---------- +2. +if (EC-GN-P01-PB1F:PSU1000-CON-SW == 1) +{ + change state to HVInjectionBPSESDN +} +---------- +3. +if (EC-GN-P01-PMF:PSU0000-CON-SW == 1) +{ + change state to HVInjectionMHVPSESDN +} +---------- +4. + count up elapsed time (time from HVON detection) + Write time to EC-GN-P01-GAF:STAT-ELAPSED +---------- +6. +if (EC-GN-P01-GPF::PLC4110-YSTA-MPSS == 0) //When SYNC mode turned ON. +{ + change state to HVArmed +} +---------- + +HVInjectionBPS +========== +HVInjectionMHVPS +========== +1. +// MEMO: Write Gyrotron state PV (HVInjection) to notify PLC. +Write 1 to EC-GN-P01-GAF:PCF4210-YTS-GA2. +---------- +// TODO: Following questions/states are for ALL of the above states +2. (Exist in HVInjection BPS) +set signal EC-GN-P01-PA1F:PSU3000-CON-SW = 1 // TODO when do we set this signal +// MEMO: Countdown time for EC-GN-P01-PA1F:STAT-DT-SWON +---------- +2. (Exist in HVInjection MHVPS) +set signal EC-GN-P01-PB1F:PSU1000-CON-SW = 1 // TODO when do we set this signal +// MEMO: Countdown time for EC-GN-P01-PB1F:STAT-DT-SWON +---------- +3. +set signal EC-GN-P01-PMF:PSU0000-CON-SW = 1 // TODO when do we set this signal +// MEMO: Countdown time for EC-GN-P01-PMF:STAT-DT-SWON +---------- +4. +// TODO when to switch to RFON? +// MEMO: Go to RFON state when All switch PVs are 1. and the mode is async. +if (EC-GN-P01-PA1F:PSU3000-CON-SW == 1 AND + EC-GN-P01-PB1F:PSU1000-CON-SW == 1 AND + EC-GN-P01-PMF:PSU0000-CON-SW == 1) +{ + change state to RFON +} +---------- +5. + count up elapsed time (time from HVON detection) + Write time to EC-GN-P01-GAF:STAT-ELAPSED +---------- + +HVInjectionESDN +========== +1. +// MEMO: Write Gyrotron state PV (HVInjection) to notify PLC. +Write 1 to EC-GN-P01-GAF:PCF4210-YTS-GA2. +---------- +2. +set signal EC-GN-P01-PA1F:PSU3000-CON-SW = 1 +// Write 1 when ESDN command give a command. +---------- +3. +set signal EC-GN-P01-PB1F:PSU1000-CON-SW = 1 +// Write 1 when ESDN command give a command. +---------- +4. +set signal EC-GN-P01-PMF:PSU0000-CON-SW = 1 +// Write 1 when ESDN command give a command. +---------- +5. +// TODO when to switch to RFONESDN? +// MEMO: Go to RFON state when All switch PVs are 1. and the mode is sync.i,e. change from HVInjectionxxxESDN +if (EC-GN-P01-PA1F:PSU3000-CON-SW == 1 AND + EC-GN-P01-PB1F:PSU1000-CON-SW == 1 AND + EC-GN-P01-PMF:PSU0000-CON-SW == 1) +{ + change state to RFONESDN +} +---------- + +RFON +========== +// TODO is this correct? +1. +// This only executes on the last cycle before we move to HVArmed +if (EC-GN-P01-GAF:STAT-BEAMON-TIME >= EC-GN-P01-GAF:STAT-DT-SHOTLEN) +{ + set signal EC-GN-P01-PA1F:PSU3000-CON-SW = 0 + set signal EC-GN-P01-PB1F:PSU1000-CON-SW = 0 + set signal EC-GN-P01-PMF:PSU0000-CON-SW = 0 +} +---------- +2. +if (EC-GN-P01-GAF:STAT-BEAMON-TIME >= EC-GN-P01-GAF:STAT-DT-SHOTLEN) +{ + change state to HVArmed +} +---------- +3. + count up elapsed time (time from HVON detection) + Write time to EC-GN-P01-GAF:STAT-ELAPSED +---------- +4. +When enter the state beam-on timer is set to 0. +count up beam-on time. write the time into EC-GN-P01-GAF:STAT-BEAMON-TIME +---------- + + + +RFONESDN +========== +// TODO is this correct? +// MEMO: In the ESDN sync mode, HVPS turned off by ESDN packet. +// In both mode, there is mode_limit which is given by (EC-GN-P01-GPF:PLC4110-YTS-MD1,2,3,4). +1. +// This only executes on the last cycle before we move to HVArmed +if (EC-GN-P01-GAF:STAT-BEAMON-TIME >= t_mode_limit) // TODO: where do I get t_mode_limit? +{ + set signal EC-GN-P01-PA1F:PSU3000-CON-SW = 0 + set signal EC-GN-P01-PB1F:PSU1000-CON-SW = 0 + set signal EC-GN-P01-PMF:PSU0000-CON-SW = 0 +} +---------- +2. +if (EC-GN-P01-GAF:STAT-BEAMON-TIME >= t_mode_limit) // TODO: where do I get t_mode_limit? +{ + change state to HVArmedESDN +} +---------- +3. +Subscribe ESDN commands. When GAM detect Beam-off command. It turn all HVPS SW OFF. +And change state to HVArmedESDN +---------- +4. + count up elapsed time (time from HVON detection) + Write time to EC-GN-P01-GAF:STAT-ELAPSED +---------- +5. +When enter the state beam-on timer is set to 0. +count up beam-on time. write the time into EC-GN-P01-GAF:STAT-BEAMON-TIME +---------- + + +Error +========== +1. +// Only execute on the first cycle after entering this state +if (first) +{ + set first = false + + set signal EC-GN-P01-PA1F:PUS3000-CON-HV = 0 // TODO: there is no signal named EC-GN-P01-PA1F:PUS3000-CON-HV + set signal EC-GN-P01-PA1F:PSU3000-CON-SW = 0 + set signal EC-GN-P01-PB1F:PSU1000-CON-HV = 0 + set signal EC-GN-P01-PB1F:PSU1000-CON-SW = 0 + set signal EC-GN-P01-PMF:PSU0000-CON-SW = 0 + // MEMO: PA2F and PB2F are component type for gyrotron B. I will remove following action. + set signal EC-GN-P01-PA2F:PUS4000-CON-HV = 0 // TODO: there is no signal named EC-GN-P01-PA2F:PUS4000-CON-HV + set signal EC-GN-P01-PA2F:PSU4000-CON-SW = 0 // TODO: signal EC-GN-P01-PA2F:PSU4000-CON-SW missing in configuration file + set signal EC-GN-P01-PB2F:PSU2000-CON-HV = 0 // TODO: signal EC-GN-P01-PB2F:PSU2000-CON-HV missing in configuration file + set signal EC-GN-P01-PB2F:PSU2000-CON-SW = 0 // TODO: signal EC-GN-P01-PB2F:PSU2000-CON-SW missing in configuration file + + set signal EC-GN-P01-PMF:PSU0000-CON-SW = 1 + set signal EC-GN-P01-PA1F:PSU3000-CTRP = 1 + set signal EC-GN-P01-PB1F:PSU1000-CTRP = 1 + // MEMO: PA2F and PB2F are component type for gyrotron B. I will remove following action. + set signal EC-GN-P01-PA2F:PSU4000-CTRP = 1 // TODO: signal EC-GN-P01-PA2F:PSU4000-CTRP missing in configuration file + set signal EC-GN-P01-PB2F:PSU1000-CTRP = 1 // TODO: there is no signal named EC-GN-P01-PB2F:PSU1000-CTRP +} +---------- +2. +if (EC-GN-P01-GPF:STAT-RST-FLT == 1 && ) // TODO: when do we go to Offline state? +{ + change state to Offline +} +---------- diff --git a/EC-GN-JA-PCF/.svn/pristine/1d/1d77799ecde60f9b08037e10008460665945e390.svn-base b/EC-GN-JA-PCF/.svn/pristine/1d/1d77799ecde60f9b08037e10008460665945e390.svn-base new file mode 100644 index 0000000..dc1af0c --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/1d/1d77799ecde60f9b08037e10008460665945e390.svn-base @@ -0,0 +1,14 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.DataUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ScriptUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ConsoleUtil); + +var table = widget.getTable(); +var fct_name=display.getPropertyValue("name"); +var selectionChanged = new Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener() { + selectionChanged: function(selection) { + var macroInput = DataUtil.createMacrosInput(true) + ScriptUtil.openOPI(display.getWidget("GeneralTable"), "/opt/codac/opi/epics-sysmon/boy/ITER-SYSM-PLC_Mimic.opi", 1, macroInput); + } +}; +table.addSelectionChangedListener(selectionChanged); diff --git a/EC-GN-JA-PCF/.svn/pristine/1e/1e9061dd5e4b673585cd80ede1281ff55b3a2328.svn-base b/EC-GN-JA-PCF/.svn/pristine/1e/1e9061dd5e4b673585cd80ede1281ff55b3a2328.svn-base new file mode 100644 index 0000000..06de1df --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/1e/1e9061dd5e4b673585cd80ede1281ff55b3a2328.svn-base @@ -0,0 +1,460 @@ +/** + * @file JAPreProgrammedGAM.cpp + * @brief Source file for class JAPreProgrammedGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAPreProgrammedGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "CLASSMETHODREGISTER.h" +#include "File.h" +#include "JAPreProgrammedGAM.h" +#include "MessageI.h" +#include "RegisteredMethodsMessageFilter.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +// How often output signals are updated. +const MARTe::uint32 cycleMs = 10u; + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAPreProgrammedGAM::JAPreProgrammedGAM() : + GAM() { + using namespace MARTe; + filenameSignalIndex = 0u; + timeSignal = NULL_PTR(MARTe::int32 *); + loadTriggerSignal = NULL_PTR(MARTe::uint32 *); + fhpsrefSignal = NULL_PTR(MARTe::float32 *); + rfonStateSignal = NULL_PTR(MARTe::uint32 *); + + valueSignals = NULL_PTR(MARTe::float32 **); + preProgrammedValues = NULL_PTR(MARTe::float32 **); + preProgrammedTime = NULL_PTR(MARTe::int32 *); + fileLoadedSignal = NULL_PTR(MARTe::uint32 *); + fileLoadErrorOutput = NULL_PTR(MARTe::uint32 *); + + startTime = 0u; + numberOfPreProgrammedValues = 0u; + numberOfPreProgrammedTimeRows = 0u; + currentRow = 0u; + mode = None; + preProgrammedExecutaionPeriodMs = 0u; + msCounter = 0u; + preProgrammedRow = 0u; + resetOutputSignals = false; + readOnce = true; +} + +JAPreProgrammedGAM::~JAPreProgrammedGAM() { + DeleteArrays(); + if (valueSignals != NULL_PTR(MARTe::float32 **)) { + delete[] valueSignals; + } +} + +bool JAPreProgrammedGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("Directory", directory); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Directory shall be specified"); + } + } + if (ok) { + ok = data.Read("PreProgrammedPeriodMs", preProgrammedExecutaionPeriodMs); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Directory shall be specified"); + } + } + return ok; +} + +bool JAPreProgrammedGAM::Setup() { + using namespace MARTe; + //Signal number check. + bool ok = (numberOfInputSignals == 4u); + if (ok) { + ok = (numberOfOutputSignals > 2u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "At least two output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Four input signals with the filename and file load trigger shall be defined"); + } + //Input signals type consistency check. + if (ok) { + StreamString signalName = "Filename"; + ok = GetSignalIndex(InputSignals, filenameSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Filename input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, filenameSignalIndex); + ok = (inputType == CharString); + if (!ok) { + ok = (inputType == Character8Bit); + } + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, filenameSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as string", signalName.Buffer()); + } + } + } + if (ok) { + StreamString signalName = "CSV_LOAD"; + uint32 loadSignalIndex; + ok = GetSignalIndex(InputSignals, loadSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "CSV_LOAD input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, loadSignalIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, loadSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } else { + loadTriggerSignal = reinterpret_cast(GetInputSignalMemory(loadSignalIndex)); + } + } + } + if (ok) { + StreamString signalName = "FHPS_REF"; + uint32 fhpsrefIndex; + ok = GetSignalIndex(InputSignals, fhpsrefIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "FHPS_REF input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, fhpsrefIndex); + ok = (inputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, fhpsrefIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } else { + fhpsrefSignal = reinterpret_cast(GetInputSignalMemory(fhpsrefIndex)); + } + } + } + if (ok) { + StreamString signalName = "RFON"; + uint32 rfonIndex; + ok = GetSignalIndex(InputSignals, rfonIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "RFON input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, rfonIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, rfonIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } else { + rfonStateSignal = reinterpret_cast(GetInputSignalMemory(rfonIndex)); + } + } + } + + //Output signals type check. + if (ok) { + TypeDescriptor timeType = GetSignalType(OutputSignals, 0); + ok = (timeType == SignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, 0, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as int32", signalName.Buffer()); + } + + uint32 i; + for (i = 1u; (i <= 6) && (ok); i++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, i); + ok = (outputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, i, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } + } + + if (ok) { + TypeDescriptor fileLoadedType = GetSignalType(OutputSignals, 7u); + ok = (fileLoadedType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, 6u, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + if (ok) { + TypeDescriptor fileLoadErrorOutputType = GetSignalType(OutputSignals, 8u); + ok = (fileLoadErrorOutputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, 7u, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + + //Register signal memory + if (ok) { + timeSignal = reinterpret_cast(GetOutputSignalMemory(0)); + valueSignals = new float32*[6u]; + uint32 i; + for (i = 1u; i <= 6u; i++) { + valueSignals[i - 1] = reinterpret_cast(GetOutputSignalMemory(i)); + } + fileLoadedSignal = reinterpret_cast(GetOutputSignalMemory(7u)); + fileLoadErrorOutput = reinterpret_cast(GetOutputSignalMemory(8u)); + } + return ok; +} + +bool JAPreProgrammedGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + bool ok = true; + if (strcmp(nextStateName, "WaitReady") == 0) { + mode = LoadFileMode; + resetOutputSignals = true; + // Reset read once flag when reentering WaitReady state. + readOnce = true; + } else if (strcmp(nextStateName, "WaitPermit") == 0) { + mode = LoadFileMode; + resetOutputSignals = true; + currentRow = 0u; + } else if (strcmp(nextStateName, "WaitHVON_PREP") == 0 || strcmp(nextStateName, "WaitHVON_SDN_PREP") == 0) { + ok = numberOfPreProgrammedTimeRows > 0; + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::IllegalOperation, "Entering PreProgrammed mode without any waveform data."); + } + mode = PreProgrammedMode; + msCounter = cycleMs; + currentRow = 0u; + } else { + mode = None; + } + return ok; +} + +bool JAPreProgrammedGAM::LoadFile() { + using namespace MARTe; + + DeleteArrays(); + + bool ok = true; + + const MARTe::char8 * const filenameSignal = reinterpret_cast(GetInputSignalMemory(filenameSignalIndex)); + //Prepare full path to the configuration file. + StreamString filename = directory; + filename += DIRECTORY_SEPARATOR; + filename += filenameSignal; + REPORT_ERROR(MARTe::ErrorManagement::Debug, "Opening file %s", filename.Buffer()); + + //parse prepro configuration file into two arrays(time, values). + File f; + ok = f.Open(filename.Buffer(), BasicFile::ACCESS_MODE_R); + if (ok) { + //Count up number of file Rows. + numberOfPreProgrammedTimeRows = 0u; + StreamString tokenLine; + while (f.GetLine(tokenLine)) { + if (tokenLine[0] != '#' && tokenLine[0] != '-') { + numberOfPreProgrammedTimeRows++; + } + tokenLine = ""; + } + //Count up number of file lines + numberOfPreProgrammedValues = 0u; + f.Seek(0); + uint32 t = 0u; + tokenLine = ""; + while ((ok) && (f.GetLine(tokenLine))) { + // Skip comment line and minus time + if (tokenLine[0] == '#' || tokenLine[0] == '-') { + tokenLine = ""; + continue; + } + // Prepare two arrays at first. + if (numberOfPreProgrammedValues == 0) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + while (tokenLine.GetToken(token, ",", ignored)) { + numberOfPreProgrammedValues++; + token = ""; + } +REPORT_ERROR(MARTe::ErrorManagement::ParametersError,"numberOfPreProgrammedVal %d", numberOfPreProgrammedValues); + ok = (numberOfPreProgrammedValues == 7u);//From time row to FHPS row. + numberOfPreProgrammedValues -= 1u; //From MHVPS row to FHPS row. + if (ok) { + preProgrammedTime = new int32[numberOfPreProgrammedTimeRows]; + preProgrammedValues = new float32*[numberOfPreProgrammedTimeRows]; + uint32 j; + for (j = 0u; j < numberOfPreProgrammedTimeRows; j++) { + preProgrammedValues[j] = new float32[numberOfPreProgrammedValues]; + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, + "Number of columns in csv file (%d) is not consistent with the number of output signals (%d)", + numberOfPreProgrammedValues, 6u); + *fileLoadErrorOutput = 1; + } + } + // Add loaded data into two arrays. + if (ok) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + uint32 idx = 0u; + while (tokenLine.GetToken(token, ",", ignored)) { + if (idx == 0u) { + preProgrammedTime[t] = atoi(token.Buffer()); + if (t == 0 && preProgrammedTime[0] != 0) { + REPORT_ERROR(MARTe::ErrorManagement::Debug, "Prepro start from none zero time."); + } + } + else { + ok = ((idx - 1) < numberOfPreProgrammedValues); + if (ok) { + preProgrammedValues[t][idx - 1] = static_cast(atof(token.Buffer())); + } + else { + REPORT_ERROR(MARTe::ErrorManagement::FatalError, "Number of columns in csv file is not consistent with the number of output signals in line %d", t); + *fileLoadErrorOutput = 1; + } + } + token = ""; + idx++; + } + t++; + } + tokenLine = ""; + } + f.Close(); + } + if (ok) { + currentRow = 0u; + } + else { + numberOfPreProgrammedTimeRows = 0u; + REPORT_ERROR(ErrorManagement::Warning, "Failed to read waveform data from file."); + *fileLoadErrorOutput = 2; + } + return ok; +} + +bool JAPreProgrammedGAM::Execute() { + using namespace MARTe; + bool ok = true; + + switch (mode) { + case LoadFileMode: { + if (*loadTriggerSignal == 1u) { + if (readOnce) { + *fileLoadErrorOutput = 0; + *fileLoadedSignal = LoadFile() ? 1 : 0; + readOnce = false; + } + } else { + // Reset read once flag when loadTriggerSignal is reset. + readOnce = true; + } + + if (resetOutputSignals) { + // Write default values to output signals + *timeSignal = 0u; + *valueSignals[FHPS-1] = *fhpsrefSignal; + resetOutputSignals = false; + } else { + *valueSignals[FHPS-1] = *fhpsrefSignal; //copy input(2) to val_arr(4) + } + } break; + + case PreProgrammedMode: { + ok = numberOfPreProgrammedTimeRows > 0; + + //add 20210105. Before RFON, prepro setpoints should be same as the values listed at csv first line. + if (ok && *rfonStateSignal == 0) { + uint32 j; + for (j = 0u; j < FHPS; j++) { + *valueSignals[j] = preProgrammedValues[0][j]; + } + } + //end 20210105 + + if (ok && currentRow < numberOfPreProgrammedTimeRows && *rfonStateSignal == 1) { + if (msCounter >= cycleMs) { + msCounter -= cycleMs; + int32 currentTime = preProgrammedTime[currentRow]; + //REPORT_ERROR(MARTe::ErrorManagement::Debug, "Write Time at %d",currentRow); + // Write to output signals + *timeSignal = currentTime; + uint32 j; + for (j = 0u; j < FHPS; j++) { + *valueSignals[j] = preProgrammedValues[currentRow][j]; + //REPORT_ERROR(MARTe::ErrorManagement::Debug, "Write Value %f at row %d",preProgrammedValues[currentRow][j], currentRow); + } + //REPORT_ERROR(MARTe::ErrorManagement::Debug, "Writing pre programmed data for time %d", currentTime); + + // Update row + ++currentRow; + } + msCounter += preProgrammedExecutaionPeriodMs; + } + } break; + default: + // Nothing to do. + REPORT_ERROR(MARTe::ErrorManagement::Warning, "Unhandled mode."); + break; + } + return ok; +} + +void JAPreProgrammedGAM::DeleteArrays() { + if (preProgrammedValues != NULL_PTR(MARTe::float32 **)) { + MARTe::uint32 i; + for (i = 0u; i < numberOfPreProgrammedValues; i++) { + delete preProgrammedValues[i]; + } + delete[] preProgrammedValues; + } + if (preProgrammedTime != NULL_PTR(MARTe::int32 *)) { + delete[] preProgrammedTime; + } +} + +CLASS_REGISTER(JAPreProgrammedGAM, "1.0") diff --git a/EC-GN-JA-PCF/.svn/pristine/1f/1f1e4c219c6cdd09533ef832debe793a1c6a4966.svn-base b/EC-GN-JA-PCF/.svn/pristine/1f/1f1e4c219c6cdd09533ef832debe793a1c6a4966.svn-base new file mode 100644 index 0000000..8a24ff6 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/1f/1f1e4c219c6cdd09533ef832debe793a1c6a4966.svn-base @@ -0,0 +1,49 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import ColorFontUtil +# from org.csstudio.opibuilder.scriptUtil import ConsoleUtil + +table = widget.getTable() + +#Fill PV Name only once +if widget.getVar("firstTime") == None: + widget.setVar("firstTime", True) + i=0 + # Fill table only with non EGU pv's + for pv in pvs: + # earlier when by default pv.getName() was giving name with 'epics://' prefix. Ripping it off before showing was done below + table.setCellText(i, 0, pv.getName().strip()) + if not pv.isConnected(): + table.setCellText(i/2, 1, "Disconnected") + i+=1 + # Based on value of macro SHOW_PLC_IOC, enable visibility of PLCIOCDetailsTable + if widget.getPropertyValue("name") == 'PLCIOCDetailsTable': + if display.getMacroValue("SHOW_PLC_IOC") == "true": + widget.setPropertyValue("visible", "true") + display.getWidget("PLCIOCDetailsLabel").setPropertyValue("visible", "true") + +#find index of the trigger PV +i=0 +while triggerPV != pvs[i]: + i+=1 + +pvValue = PVUtil.getString(triggerPV).strip(); +eugValue = table.getCellText(i, 4); +if eugValue != "": + pvValue = pvValue+" "+eugValue; +table.setCellText(i, 1, pvValue) +table.setCellText(i, 2, PVUtil.getStatus(triggerPV).strip()) +table.setCellText(i, 3, PVUtil.getSeverityString(triggerPV).strip()) + +s = PVUtil.getSeverity(triggerPV) + +color = ColorFontUtil.WHITE +if s == 0: + color = ColorFontUtil.GREEN +elif s == 1: + color = ColorFontUtil.RED +elif s == 2: + color = ColorFontUtil.YELLOW +elif s == 3: + color = ColorFontUtil.PINK + +table.setCellBackground(i, 3, color) \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/21/2136f8fbf603f0ad946d9a6aa78caae806d30763.svn-base b/EC-GN-JA-PCF/.svn/pristine/21/2136f8fbf603f0ad946d9a6aa78caae806d30763.svn-base new file mode 100644 index 0000000..5c6175c --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/21/2136f8fbf603f0ad946d9a6aa78caae806d30763.svn-base @@ -0,0 +1,35 @@ +# Makefile at top of application tree +TOP = . +include $(TOP)/configure/CONFIG + +# Directories to build, any order +DIRS += configure +DIRS += $(wildcard *Sup) +DIRS += $(wildcard *App) +DIRS += $(wildcard *Top) +DIRS += $(wildcard iocBoot) + +# The build order is controlled by these dependency rules: + +# All dirs except configure depend on configure +$(foreach dir, $(filter-out configure, $(DIRS)), \ + $(eval $(dir)_DEPEND_DIRS += configure)) + +# Any *App dirs depend on all *SharedTemplateApp dirs +$(foreach dir, $(filter-out %SharedTemplateApp, $(filter %App, $(DIRS))), \ + $(eval $(dir)_DEPEND_DIRS += $(filter %SharedTemplateApp, $(DIRS)))) + +# Any *App dirs depend on all *Sup dirs +$(foreach dir, $(filter %App, $(DIRS)), \ + $(eval $(dir)_DEPEND_DIRS += $(filter %Sup, $(DIRS)))) + +# Any *Top dirs depend on all *Sup and *App dirs +$(foreach dir, $(filter %Top, $(DIRS)), \ + $(eval $(dir)_DEPEND_DIRS += $(filter %Sup %App, $(DIRS)))) + +# iocBoot depends on all *App dirs +iocBoot_DEPEND_DIRS += $(filter %App,$(DIRS)) + +# Add any additional dependency rules here: + +include $(TOP)/configure/RULES_TOP diff --git a/EC-GN-JA-PCF/.svn/pristine/21/2187012eb95901393499e960ee5d864d08bb7ffb.svn-base b/EC-GN-JA-PCF/.svn/pristine/21/2187012eb95901393499e960ee5d864d08bb7ffb.svn-base new file mode 100644 index 0000000..9d7c2e6 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/21/2187012eb95901393499e960ee5d864d08bb7ffb.svn-base @@ -0,0 +1,1712 @@ +record (bo,"EC-GN-HWCF:6259-0-ACQ") +{ + field(DESC, "Start/Stop data acquisition") + field(DTYP, "ni6259") + field(ONAM, "START-ACQUISITION") + field(OUT, "#C1 S0 @switch_acquisition") + field(PHAS, "2") + field(PINI, "YES") + field(VAL, "1") + field(ZNAM, "STOP-ACQUISITION") +} + +record (bo,"EC-GN-HWCF:6259-0-CONF") +{ + field(DESC, "Load/reset analog input configuration") + field(DTYP, "ni6259") + field(ONAM, "LOAD-CONF") + field(OUT, "#C1 S0 @ai_conf") + field(PHAS, "1") + field(PINI, "YES") + field(VAL, "1") + field(ZNAM, "RESET-CONF") +} + +record (bo,"EC-GN-HWCF:6259-0-MODE") +{ + field(DESC, "continuous or finite mode") + field(DTYP, "ni6259") + field(ONAM, "CONTINUOUS") + field(OUT, "#C1 S0 @daq_mode") + field(PINI, "YES") + field(VAL, "1") + field(ZNAM, "FINITE") +} + +record (bo,"EC-GN-HWCF:6259-1-ACQ") +{ + field(DESC, "Start/Stop data acquisition") + field(DTYP, "ni6259") + field(ONAM, "START-ACQUISITION") + field(OUT, "#C0 S0 @switch_acquisition") + field(PHAS, "2") + field(PINI, "YES") + field(VAL, "1") + field(ZNAM, "STOP-ACQUISITION") +} + +record (bo,"EC-GN-HWCF:6259-1-CONF") +{ + field(DESC, "Load/reset analog input configuration") + field(DTYP, "ni6259") + field(ONAM, "LOAD-CONF") + field(OUT, "#C0 S0 @ai_conf") + field(PHAS, "1") + field(PINI, "YES") + field(VAL, "1") + field(ZNAM, "RESET-CONF") +} + +record (bo,"EC-GN-HWCF:6259-1-MODE") +{ + field(DESC, "continuous or finite mode") + field(DTYP, "ni6259") + field(ONAM, "CONTINUOUS") + field(OUT, "#C0 S0 @daq_mode") + field(PINI, "YES") + field(VAL, "1") + field(ZNAM, "FINITE") +} + +record (bo,"EC-GN-HWCF:6368-0-AISTSP") +{ + field(DESC, "Start/Stop AI Segment") + field(DTYP, "asynInt32") + field(ONAM, "Start") + field(OUT, "@asyn(ni6368_1, 0) start_stop_ai") + field(PHAS, "2") + field(PINI, "YES") + field(VAL, "0") + field(ZNAM, "Stop") +} + +record (bo,"EC-GN-HWCF:6368-0-AOSTSP") +{ + field(DESC, "Start/Stop AO Segment") + field(DTYP, "asynInt32") + field(ONAM, "Start") + field(OUT, "@asyn(ni6368_1, 0) start_stop_ao") + field(VAL, "0") + field(ZNAM, "Stop") +} + +record (bo,"EC-GN-HWCF:6368-0-LDAICF") +{ + field(DESC, "Load/Reset AI Configuration") + field(DTYP, "asynInt32") + field(ONAM, "Load") + field(OUT, "@asyn(ni6368_1, 0) ai_conf") + field(PHAS, "1") + field(PINI, "YES") + field(VAL, "0") + field(ZNAM, "Reset") +} + +record (bo,"EC-GN-HWCF:6368-0-LDAOCF") +{ + field(DESC, "Load/Reset AO Configuration") + field(DTYP, "asynInt32") + field(ONAM, "Load") + field(OUT, "@asyn(ni6368_1, 0) ao_conf") + field(VAL, "0") + field(ZNAM, "Reset") +} + +record (bo,"EC-GN-HWCF:6368-1-AISTSP") +{ + field(DESC, "Start/Stop AI Segment") + field(DTYP, "asynInt32") + field(ONAM, "Start") + field(OUT, "@asyn(ni6368_0, 0) start_stop_ai") + field(PHAS, "2") + field(PINI, "YES") + field(VAL, "0") + field(ZNAM, "Stop") +} + +record (bo,"EC-GN-HWCF:6368-1-AOSTSP") +{ + field(DESC, "Start/Stop AO Segment") + field(DTYP, "asynInt32") + field(ONAM, "Start") + field(OUT, "@asyn(ni6368_0, 0) start_stop_ao") + field(VAL, "0") + field(ZNAM, "Stop") +} + +record (bo,"EC-GN-HWCF:6368-1-LDAICF") +{ + field(DESC, "Load/Reset AI Configuration") + field(DTYP, "asynInt32") + field(ONAM, "Load") + field(OUT, "@asyn(ni6368_0, 0) ai_conf") + field(PHAS, "1") + field(PINI, "YES") + field(VAL, "0") + field(ZNAM, "Reset") +} + +record (bo,"EC-GN-HWCF:6368-1-LDAOCF") +{ + field(DESC, "Load/Reset AO Configuration") + field(DTYP, "asynInt32") + field(ONAM, "Load") + field(OUT, "@asyn(ni6368_0, 0) ao_conf") + field(VAL, "0") + field(ZNAM, "Reset") +} + +record (bi,"EC-GN-HWCF:6683-0-BLKTMO") +{ + field(DESC, "Block until Finished...") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0) waitForTimeOver") + field(SCAN, "I/O Intr") +} + +record (bo,"EC-GN-HWCF:6683-0-FTEAALL") +{ + field(DESC, "Abort all pending FTEs") + field(DTYP, "asynInt32") + field(ONAM, "1") + field(OUT, "@asyn(ni6683h_0,0)abortAllFtes") + field(VAL, "0") + field(ZNAM, "0") +} + +record (bo,"EC-GN-HWCF:6683-0-RESET") +{ + field(DESC, "Reset Board") + field(DTYP, "asynInt32") + field(ONAM, "1") + field(OUT, "@asyn(ni6683h_0,0)resetCard") + field(VAL, "0") + field(ZNAM, "0") +} + +record (bi,"EC-GN-HWCF:6683-0-TAIUTC") +{ + field(DESC, "PXI-6683.0 TAI/UTC Selection") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)taiutcStatus") + field(ONAM, "TAI") + field(OSV, "MINOR") + field(PINI, "YES") + field(SCAN, "10 second") + field(ZNAM, "UTC") + field(ZSV, "NO_ALARM") +} + +record (stringin,"EC-GN-HWCF:6259-0-DMSG") +{ + field(DESC, "Driver Debug Message") + field(DTYP, "ni6259") + field(INP, "#C1 S0 @dsg") + field(SCAN, "1 second") +} + +record (longout,"EC-GN-HWCF:6259-0-NS") +{ + field(DESC, "number of samples to read") + field(DRVH, "32000") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HIGH, "32001") + field(HOPR, "32000") + field(HSV, "MAJOR") + field(LOPR, "0") + field(LOW, "0") + field(LSV, "MAJOR") + field(OUT, "#C1 S0 @num_samples") + field(PINI, "YES") + field(VAL, "5000") +} + +record (longout,"EC-GN-HWCF:6259-0-POST") +{ + field(DESC, "Posttrigger samples") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "#C1 S0 @posttrig_samples") + field(PINI, "YES") + field(VAL, "4000") +} + +record (longout,"EC-GN-HWCF:6259-0-PRET") +{ + field(DESC, "Pretrigger samples") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "#C1 S0 @pretrig_samples") + field(PINI, "YES") + field(VAL, "2000") +} + +record (calcout,"EC-GN-HWCF:6259-0-SCCC") +{ + field(DESC, "") + field(CALC, "(A==11 andand B >7) || (A!=1 andand A!=11) ? 0: B") + field(HOPR, "15") + field(INPA, "EC-GN-HWCF:6259-0-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6259-0-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6259-0-SCCH PP") +} + +record (mbbo,"EC-GN-HWCF:6259-0-SCCH") +{ + field(DESC, "") + field(EIST, "8") + field(EIVL, "8") + field(ELST, "11") + field(ELVL, "11") + field(FFST, "15") + field(FFVL, "15") + field(FLNK, "EC-GN-HWCF:6259-0-SCCO") + field(FRST, "4") + field(FRVL, "4") + field(FTST, "14") + field(FTVL, "14") + field(FVST, "5") + field(FVVL, "5") + field(NIST, "9") + field(NIVL, "9") + field(ONST, "1") + field(ONVL, "1") + field(PINI, "YES") + field(SVST, "7") + field(SVVL, "7") + field(SXST, "6") + field(SXVL, "6") + field(TEST, "10") + field(TEVL, "10") + field(THST, "3") + field(THVL, "3") + field(TTST, "13") + field(TTVL, "13") + field(TVST, "12") + field(TVVL, "12") + field(TWST, "2") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "0") + field(ZRVL, "0") +} + +record (calcout,"EC-GN-HWCF:6259-0-SCCO") +{ + field(DESC, "") + field(CALC, "A==1?(B<10?A+B:B+11):(A==11?(B<7?A+B:(A>7?0:27)):A)") + field(FLNK, "EC-GN-HWCF:6259-0-SCCC") + field(HOPR, "31") + field(INPA, "EC-GN-HWCF:6259-0-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6259-0-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6259-0-SCLK PP") +} + +record (longout,"EC-GN-HWCF:6259-0-SCLK") +{ + field(DESC, "") + field(DRVH, "31") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HOPR, "31") + field(LOPR, "0") + field(OUT, "#C1 S0 @sample_clock_ai") +} + +record (mbbo,"EC-GN-HWCF:6259-0-SCTY") +{ + field(DESC, "") + field(FLNK, "EC-GN-HWCF:6259-0-SCCO") + field(FRST, "STAR_Trigger") + field(FRVL, "20") + field(FVST, "Analog_Trigger") + field(FVVL, "30") + field(ONST, "PFI") + field(ONVL, "1") + field(PINI, "YES") + field(SXST, "Logic_Low") + field(SXVL, "31") + field(THST, "GCRTOUT") + field(THVL, "19") + field(TWST, "PXI_Trigger") + field(TWVL, "11") + field(VAL, "0") + field(ZRST, "Internal") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6259-0-SR") +{ + field(DESC, "ADC Sampling Rate") + field(DTYP, "ni6259") + field(EGU, "Hz") + field(HIGH, "1000001") + field(HSV, "MAJOR") + field(OUT, "#C1 S0 @sample_rate") + field(PINI, "YES") + field(VAL, "1000000") +} + +record (mbbi,"EC-GN-HWCF:6259-0-STATUS") +{ + field(DESC, "PXI-6259.0 Board Status") + field(DTYP, "ni6259") + field(EIST, "ADC Overrun") + field(EISV, "MAJOR") + field(EIVL, "8") + field(ELST, "Reserved1") + field(ELSV, "INVALID") + field(ELVL, "11") + field(FFST, "MSC_Error") + field(FFSV, "MAJOR") + field(FFVL, "15") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FTST, "Reserved4") + field(FTSV, "INVALID") + field(FTVL, "14") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "#C1 S0 @BoardStatus") + field(NIST, "DAC Overrun") + field(NISV, "MAJOR") + field(NIVL, "9") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, ".1 second") + field(SVST, "AI_FIFO Overflow") + field(SVSV, "MAJOR") + field(SVVL, "7") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(TEST, "Reserved0") + field(TESV, "INVALID") + field(TEVL, "10") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TTST, "Reserved3") + field(TTSV, "INVALID") + field(TTVL, "13") + field(TVST, "Reserved2") + field(TVSV, "INVALID") + field(TVVL, "12") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (stringin,"EC-GN-HWCF:6259-1-DMSG") +{ + field(DESC, "Driver Debug Message") + field(DTYP, "ni6259") + field(INP, "#C0 S0 @dsg") + field(SCAN, "1 second") +} + +record (longout,"EC-GN-HWCF:6259-1-NS") +{ + field(DESC, "number of samples to read") + field(DRVH, "32000") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HIGH, "32001") + field(HOPR, "32000") + field(HSV, "MAJOR") + field(LOPR, "0") + field(LOW, "0") + field(LSV, "MAJOR") + field(OUT, "#C0 S0 @num_samples") + field(PINI, "YES") + field(VAL, "5000") +} + +record (longout,"EC-GN-HWCF:6259-1-POST") +{ + field(DESC, "Posttrigger samples") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "#C0 S0 @posttrig_samples") + field(PINI, "YES") + field(VAL, "4000") +} + +record (longout,"EC-GN-HWCF:6259-1-PRET") +{ + field(DESC, "Pretrigger samples") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "#C0 S0 @pretrig_samples") + field(PINI, "YES") + field(VAL, "2000") +} + +record (calcout,"EC-GN-HWCF:6259-1-SCCC") +{ + field(DESC, "") + field(CALC, "(A==11 andand B >7) || (A!=1 andand A!=11) ? 0: B") + field(HOPR, "15") + field(INPA, "EC-GN-HWCF:6259-1-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6259-1-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6259-1-SCCH PP") +} + +record (mbbo,"EC-GN-HWCF:6259-1-SCCH") +{ + field(DESC, "") + field(EIST, "8") + field(EIVL, "8") + field(ELST, "11") + field(ELVL, "11") + field(FFST, "15") + field(FFVL, "15") + field(FLNK, "EC-GN-HWCF:6259-1-SCCO") + field(FRST, "4") + field(FRVL, "4") + field(FTST, "14") + field(FTVL, "14") + field(FVST, "5") + field(FVVL, "5") + field(NIST, "9") + field(NIVL, "9") + field(ONST, "1") + field(ONVL, "1") + field(PINI, "YES") + field(SVST, "7") + field(SVVL, "7") + field(SXST, "6") + field(SXVL, "6") + field(TEST, "10") + field(TEVL, "10") + field(THST, "3") + field(THVL, "3") + field(TTST, "13") + field(TTVL, "13") + field(TVST, "12") + field(TVVL, "12") + field(TWST, "2") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "0") + field(ZRVL, "0") +} + +record (calcout,"EC-GN-HWCF:6259-1-SCCO") +{ + field(DESC, "") + field(CALC, "A==1?(B<10?A+B:B+11):(A==11?(B<7?A+B:(A>7?0:27)):A)") + field(FLNK, "EC-GN-HWCF:6259-1-SCCC") + field(HOPR, "31") + field(INPA, "EC-GN-HWCF:6259-1-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6259-1-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6259-1-SCLK PP") +} + +record (longout,"EC-GN-HWCF:6259-1-SCLK") +{ + field(DESC, "") + field(DRVH, "31") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HOPR, "31") + field(LOPR, "0") + field(OUT, "#C0 S0 @sample_clock_ai") +} + +record (mbbo,"EC-GN-HWCF:6259-1-SCTY") +{ + field(DESC, "") + field(FLNK, "EC-GN-HWCF:6259-1-SCCO") + field(FRST, "STAR_Trigger") + field(FRVL, "20") + field(FVST, "Analog_Trigger") + field(FVVL, "30") + field(ONST, "PFI") + field(ONVL, "1") + field(PINI, "YES") + field(SXST, "Logic_Low") + field(SXVL, "31") + field(THST, "GCRTOUT") + field(THVL, "19") + field(TWST, "PXI_Trigger") + field(TWVL, "11") + field(VAL, "0") + field(ZRST, "Internal") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6259-1-SR") +{ + field(DESC, "ADC Sampling Rate") + field(DTYP, "ni6259") + field(EGU, "Hz") + field(HIGH, "1000001") + field(HSV, "MAJOR") + field(OUT, "#C0 S0 @sample_rate") + field(PINI, "YES") + field(VAL, "1000000") +} + +record (mbbi,"EC-GN-HWCF:6259-1-STATUS") +{ + field(DESC, "PXI-6259.1 Board Status") + field(DTYP, "ni6259") + field(EIST, "ADC Overrun") + field(EISV, "MAJOR") + field(EIVL, "8") + field(ELST, "Reserved1") + field(ELSV, "INVALID") + field(ELVL, "11") + field(FFST, "MSC_Error") + field(FFSV, "MAJOR") + field(FFVL, "15") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FTST, "Reserved4") + field(FTSV, "INVALID") + field(FTVL, "14") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "#C0 S0 @BoardStatus") + field(NIST, "DAC Overrun") + field(NISV, "MAJOR") + field(NIVL, "9") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, ".1 second") + field(SVST, "AI_FIFO Overflow") + field(SVSV, "MAJOR") + field(SVVL, "7") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(TEST, "Reserved0") + field(TESV, "INVALID") + field(TEVL, "10") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TTST, "Reserved3") + field(TTSV, "INVALID") + field(TTVL, "13") + field(TVST, "Reserved2") + field(TVSV, "INVALID") + field(TVVL, "12") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-HWCF:6368-0-AIPU") +{ + field(DESC, "Software Pulse") + field(DTYP, "asynInt32") + field(FRST, "UPDATECLK") + field(FRVL, "4") + field(ONST, "CONVERTERCLK") + field(ONVL, "1") + field(OUT, "@asyn(ni6368_1, 0) pulse_ai") + field(THST, "REFTRIG") + field(THVL, "3") + field(TWST, "STARTTRIG") + field(TWVL, "2") + field(VAL, "2") + field(ZRST, "SAMPLECLK") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6368-0-AISMPL") +{ + field(DESC, "No of AI sample to be acquire in Block") + field(DRVH, "32000") + field(DRVL, "1") + field(DTYP, "asynInt32") + field(HOPR, "32000") + field(LOPR, "1") + field(OUT, "@asyn(ni6368_1, 0) no_of_samples") + field(PINI, "YES") + field(VAL, "1") +} + +record (longout,"EC-GN-HWCF:6368-0-AISR") +{ + field(DESC, "AI Sampling Rate") + field(DRVH, "2000000") + field(DRVL, "1") + field(DTYP, "asynInt32") + field(HOPR, "2000000") + field(LOPR, "1") + field(OUT, "@asyn(ni6368_1, 0) sampling_rate_ai") + field(PINI, "YES") + field(VAL, "1000000") +} + +record (longout,"EC-GN-HWCF:6368-0-AITB") +{ + field(DESC, "AI Timebase source") + field(DRVH, "60") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "60") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 0) timebase_ai") + field(VAL, "0") +} + +record (mbbo,"EC-GN-HWCF:6368-0-AOPU") +{ + field(DESC, "AO Pulse Source") + field(DTYP, "asynInt32") + field(FRST, "UPDATECLK") + field(FRVL, "4") + field(ONST, "CONVERTERCLK") + field(ONVL, "1") + field(OUT, "@asyn(ni6368_1, 0) pulse_ao") + field(THST, "REFTRIG") + field(THVL, "3") + field(TWST, "STARTTRIG") + field(TWVL, "2") + field(VAL, "2") + field(ZRST, "SAMPLECLK") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6368-0-AOTB") +{ + field(DESC, "AO Timebase source") + field(DRVH, "60") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "60") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 0) timebase_ao") + field(VAL, "0") +} + +record (mbbo,"EC-GN-HWCF:6368-0-CHAIMO") +{ + field(DESC, "Change AI Configuration") + field(DTYP, "asynInt32") + field(FRST, "PreTriggered") + field(FRVL, "7") + field(ONST, "ReTrigger") + field(ONVL, "3") + field(OUT, "@asyn(ni6368_1, 0) ai_mode") + field(PINI, "YES") + field(THST, "SoftwareTimed") + field(THVL, "6") + field(TWST, "Continuous") + field(TWVL, "4") + field(VAL, "2") + field(ZRST, "Finite") + field(ZRVL, "2") +} + +record (mbbo,"EC-GN-HWCF:6368-0-CHAOMO") +{ + field(DESC, "Change AO Configuration") + field(DTYP, "asynInt32") + field(FRST, "PreTriggered") + field(FRVL, "7") + field(ONST, "ReTrigger") + field(ONVL, "3") + field(OUT, "@asyn(ni6368_1, 0) ao_mode") + field(THST, "SoftwareTimed") + field(THVL, "6") + field(TWST, "Continuous") + field(TWVL, "4") + field(VAL, "2") + field(ZRST, "Finite") + field(ZRVL, "2") +} + +record (longout,"EC-GN-HWCF:6368-0-POST") +{ + field(DESC, "Number of AI sample to be acquire") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 0) posttrig_samples") + field(PINI, "YES") + field(VAL, "1") +} + +record (longout,"EC-GN-HWCF:6368-0-PRET") +{ + field(DESC, "Number of AI sample to be acquire") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 0) pretrig_samples") + field(PINI, "YES") + field(VAL, "0") +} + +record (calcout,"EC-GN-HWCF:6368-0-SCCC") +{ + field(DESC, "") + field(CALC, "(A==11 andand B >7) || (A!=1 andand A!=11) ? 0: B") + field(HOPR, "15") + field(INPA, "EC-GN-HWCF:6368-0-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6368-0-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6368-0-SCCH PP") +} + +record (mbbo,"EC-GN-HWCF:6368-0-SCCH") +{ + field(DESC, "") + field(EIST, "8") + field(EIVL, "8") + field(ELST, "11") + field(ELVL, "11") + field(FFST, "15") + field(FFVL, "15") + field(FLNK, "EC-GN-HWCF:6368-0-SCCO") + field(FRST, "4") + field(FRVL, "4") + field(FTST, "14") + field(FTVL, "14") + field(FVST, "5") + field(FVVL, "5") + field(NIST, "9") + field(NIVL, "9") + field(ONST, "1") + field(ONVL, "1") + field(PINI, "YES") + field(SVST, "7") + field(SVVL, "7") + field(SXST, "6") + field(SXVL, "6") + field(TEST, "10") + field(TEVL, "10") + field(THST, "3") + field(THVL, "3") + field(TTST, "13") + field(TTVL, "13") + field(TVST, "12") + field(TVVL, "12") + field(TWST, "2") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "0") + field(ZRVL, "0") +} + +record (calcout,"EC-GN-HWCF:6368-0-SCCO") +{ + field(DESC, "") + field(CALC, "A==1?(B<10?A+B:B+11):(A==11?(B<7?A+B:(A>7?0:27)):A)") + field(FLNK, "EC-GN-HWCF:6368-0-SCCC") + field(HOPR, "31") + field(INPA, "EC-GN-HWCF:6368-0-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6368-0-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6368-0-SCLK PP") +} + +record (longout,"EC-GN-HWCF:6368-0-SCLK") +{ + field(DESC, "") + field(DRVH, "31") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "31") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 0)sample_clock_ai") +} + +record (mbbo,"EC-GN-HWCF:6368-0-SCTY") +{ + field(DESC, "") + field(FLNK, "EC-GN-HWCF:6368-0-SCCO") + field(FRST, "STAR_Trigger") + field(FRVL, "20") + field(FVST, "Analog_Trigger") + field(FVVL, "30") + field(ONST, "PFI") + field(ONVL, "1") + field(PINI, "YES") + field(SXST, "Logic_Low") + field(SXVL, "31") + field(THST, "GCRTOUT") + field(THVL, "19") + field(TWST, "PXI_Trigger") + field(TWVL, "11") + field(VAL, "0") + field(ZRST, "Internal") + field(ZRVL, "0") +} + +record (mbbi,"EC-GN-HWCF:6368-0-STATUS") +{ + field(DESC, "PXIe-6368.0 Board Status") + field(DTYP, "asynInt32") + field(EIST, "DIHW_Error") + field(EISV, "MAJOR") + field(EIVL, "8") + field(ELST, "GPCHW_Error") + field(ELSV, "MAJOR") + field(ELVL, "11") + field(FFST, "MSC_Error") + field(FFSV, "MAJOR") + field(FFVL, "15") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FTST, "Reserved2") + field(FTSV, "INVALID") + field(FTVL, "14") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "@asyn(ni6368_1, 0) board_status") + field(NIST, "AOHW_Error") + field(NISV, "MAJOR") + field(NIVL, "9") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, ".1 second") + field(SVST, "AIHW_Error") + field(SVSV, "MAJOR") + field(SVVL, "7") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(TEST, "DOHW_Error") + field(TESV, "MAJOR") + field(TEVL, "10") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TTST, "Reserved1") + field(TTSV, "INVALID") + field(TTVL, "13") + field(TVST, "Reserved0") + field(TVSV, "INVALID") + field(TVVL, "12") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-HWCF:6368-1-AIPU") +{ + field(DESC, "Software Pulse") + field(DTYP, "asynInt32") + field(FRST, "UPDATECLK") + field(FRVL, "4") + field(ONST, "CONVERTERCLK") + field(ONVL, "1") + field(OUT, "@asyn(ni6368_0, 0) pulse_ai") + field(THST, "REFTRIG") + field(THVL, "3") + field(TWST, "STARTTRIG") + field(TWVL, "2") + field(VAL, "2") + field(ZRST, "SAMPLECLK") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6368-1-AISMPL") +{ + field(DESC, "No of AI sample to be acquire in Block") + field(DRVH, "32000") + field(DRVL, "1") + field(DTYP, "asynInt32") + field(HOPR, "32000") + field(LOPR, "1") + field(OUT, "@asyn(ni6368_0, 0) no_of_samples") + field(PINI, "YES") + field(VAL, "1") +} + +record (longout,"EC-GN-HWCF:6368-1-AISR") +{ + field(DESC, "AI Sampling Rate") + field(DRVH, "2000000") + field(DRVL, "1") + field(DTYP, "asynInt32") + field(HOPR, "2000000") + field(LOPR, "1") + field(OUT, "@asyn(ni6368_0, 0) sampling_rate_ai") + field(PINI, "YES") + field(VAL, "1000000") +} + +record (longout,"EC-GN-HWCF:6368-1-AITB") +{ + field(DESC, "AI Timebase source") + field(DRVH, "60") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "60") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_0, 0) timebase_ai") + field(VAL, "0") +} + +record (mbbo,"EC-GN-HWCF:6368-1-AOPU") +{ + field(DESC, "AO Pulse Source") + field(DTYP, "asynInt32") + field(FRST, "UPDATECLK") + field(FRVL, "4") + field(ONST, "CONVERTERCLK") + field(ONVL, "1") + field(OUT, "@asyn(ni6368_0, 0) pulse_ao") + field(THST, "REFTRIG") + field(THVL, "3") + field(TWST, "STARTTRIG") + field(TWVL, "2") + field(VAL, "2") + field(ZRST, "SAMPLECLK") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6368-1-AOTB") +{ + field(DESC, "AO Timebase source") + field(DRVH, "60") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "60") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_0, 0) timebase_ao") + field(VAL, "0") +} + +record (mbbo,"EC-GN-HWCF:6368-1-CHAIMO") +{ + field(DESC, "Change AI Configuration") + field(DTYP, "asynInt32") + field(FRST, "PreTriggered") + field(FRVL, "7") + field(ONST, "ReTrigger") + field(ONVL, "3") + field(OUT, "@asyn(ni6368_0, 0) ai_mode") + field(PINI, "YES") + field(THST, "SoftwareTimed") + field(THVL, "6") + field(TWST, "Continuous") + field(TWVL, "4") + field(VAL, "2") + field(ZRST, "Finite") + field(ZRVL, "2") +} + +record (mbbo,"EC-GN-HWCF:6368-1-CHAOMO") +{ + field(DESC, "Change AO Configuration") + field(DTYP, "asynInt32") + field(FRST, "PreTriggered") + field(FRVL, "7") + field(ONST, "ReTrigger") + field(ONVL, "3") + field(OUT, "@asyn(ni6368_0, 0) ao_mode") + field(THST, "SoftwareTimed") + field(THVL, "6") + field(TWST, "Continuous") + field(TWVL, "4") + field(VAL, "2") + field(ZRST, "Finite") + field(ZRVL, "2") +} + +record (longout,"EC-GN-HWCF:6368-1-POST") +{ + field(DESC, "Number of AI sample to be acquire") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_0, 0) posttrig_samples") + field(PINI, "YES") + field(VAL, "1") +} + +record (longout,"EC-GN-HWCF:6368-1-PRET") +{ + field(DESC, "Number of AI sample to be acquire") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_0, 0) pretrig_samples") + field(PINI, "YES") + field(VAL, "0") +} + +record (calcout,"EC-GN-HWCF:6368-1-SCCC") +{ + field(DESC, "") + field(CALC, "(A==11 andand B >7) || (A!=1 andand A!=11) ? 0: B") + field(HOPR, "15") + field(INPA, "EC-GN-HWCF:6368-1-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6368-1-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6368-1-SCCH PP") +} + +record (mbbo,"EC-GN-HWCF:6368-1-SCCH") +{ + field(DESC, "") + field(EIST, "8") + field(EIVL, "8") + field(ELST, "11") + field(ELVL, "11") + field(FFST, "15") + field(FFVL, "15") + field(FLNK, "EC-GN-HWCF:6368-1-SCCO") + field(FRST, "4") + field(FRVL, "4") + field(FTST, "14") + field(FTVL, "14") + field(FVST, "5") + field(FVVL, "5") + field(NIST, "9") + field(NIVL, "9") + field(ONST, "1") + field(ONVL, "1") + field(PINI, "YES") + field(SVST, "7") + field(SVVL, "7") + field(SXST, "6") + field(SXVL, "6") + field(TEST, "10") + field(TEVL, "10") + field(THST, "3") + field(THVL, "3") + field(TTST, "13") + field(TTVL, "13") + field(TVST, "12") + field(TVVL, "12") + field(TWST, "2") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "0") + field(ZRVL, "0") +} + +record (calcout,"EC-GN-HWCF:6368-1-SCCO") +{ + field(DESC, "") + field(CALC, "A==1?(B<10?A+B:B+11):(A==11?(B<7?A+B:(A>7?0:27)):A)") + field(FLNK, "EC-GN-HWCF:6368-1-SCCC") + field(HOPR, "31") + field(INPA, "EC-GN-HWCF:6368-1-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6368-1-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6368-1-SCLK PP") +} + +record (longout,"EC-GN-HWCF:6368-1-SCLK") +{ + field(DESC, "") + field(DRVH, "31") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "31") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_0, 0)sample_clock_ai") +} + +record (mbbo,"EC-GN-HWCF:6368-1-SCTY") +{ + field(DESC, "") + field(FLNK, "EC-GN-HWCF:6368-1-SCCO") + field(FRST, "STAR_Trigger") + field(FRVL, "20") + field(FVST, "Analog_Trigger") + field(FVVL, "30") + field(ONST, "PFI") + field(ONVL, "1") + field(PINI, "YES") + field(SXST, "Logic_Low") + field(SXVL, "31") + field(THST, "GCRTOUT") + field(THVL, "19") + field(TWST, "PXI_Trigger") + field(TWVL, "11") + field(VAL, "0") + field(ZRST, "Internal") + field(ZRVL, "0") +} + +record (mbbi,"EC-GN-HWCF:6368-1-STATUS") +{ + field(DESC, "PXIe-6368.1 Board Status") + field(DTYP, "asynInt32") + field(EIST, "DIHW_Error") + field(EISV, "MAJOR") + field(EIVL, "8") + field(ELST, "GPCHW_Error") + field(ELSV, "MAJOR") + field(ELVL, "11") + field(FFST, "MSC_Error") + field(FFSV, "MAJOR") + field(FFVL, "15") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FTST, "Reserved2") + field(FTSV, "INVALID") + field(FTVL, "14") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "@asyn(ni6368_0, 0) board_status") + field(NIST, "AOHW_Error") + field(NISV, "MAJOR") + field(NIVL, "9") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, ".1 second") + field(SVST, "AIHW_Error") + field(SVSV, "MAJOR") + field(SVVL, "7") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(TEST, "DOHW_Error") + field(TESV, "MAJOR") + field(TEVL, "10") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TTST, "Reserved1") + field(TTSV, "INVALID") + field(TTVL, "13") + field(TVST, "Reserved0") + field(TVSV, "INVALID") + field(TVVL, "12") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6528-0-FILTINT") +{ + field(DESC, "Set Filter Interval Value") + field(DRVH, "209715200") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "209715200") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setfilterinterval") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-0-POWERP3") +{ + field(DESC, "Power-UP state of Port3") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynUInt32Digital") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asynMask(ni6528_1,3, 0xff) setportpowerup") + field(PINI, "YES") + field(VAL, "255") +} + +record (longout,"EC-GN-HWCF:6528-0-POWERP4") +{ + field(DESC, "Power-UP state of Port4") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynUInt32Digital") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asynMask(ni6528_1,4, 0xff) setportpowerup") + field(PINI, "YES") + field(VAL, "255") +} + +record (longout,"EC-GN-HWCF:6528-0-POWERP5") +{ + field(DESC, "Power-UP state of Port5") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynUInt32Digital") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asynMask(ni6528_1,5, 0xff) setportpowerup") + field(PINI, "YES") + field(VAL, "255") +} + +record (longout,"EC-GN-HWCF:6528-0-RTSIINPROUT") +{ + field(DESC, "Set RTSI Input Route") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setrtsiinputroute") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-0-RTSIOUTROUT") +{ + field(DESC, "Set RTSI Output Route") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setrtsioutputroute") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-0-RTSIPCHANGE") +{ + field(DESC, "Set RTSI Pulse on Change") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setrtsipulseonchange") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-0-RTSIPWDG") +{ + field(DESC, "Set RTSI pulse on watchdog") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setrtsipulseonwatchdog") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-0-RTSIWDGTRIG") +{ + field(DESC, "Set RTSI on Watchdog Trigger") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setrtsiwatchdogtrigger") + field(VAL, "0") +} + +record (mbbi,"EC-GN-HWCF:6528-0-STATUS") +{ + field(DESC, "PXI-6528.0 Board Status") + field(DTYP, "asynInt32") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "@asyn(ni6528_1,1) board_status") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, "1 second") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (ao,"EC-GN-HWCF:6528-0-WDGTOUT") +{ + field(DESC, "Set Watchdog TimeOut") + field(DRVH, "429496729580") + field(DRVL, "0") + field(DTYP, "asynFloat64") + field(HOPR, "429496729580") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setwatchdogtimeout") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-1-FILTINT") +{ + field(DESC, "Set Filter Interval Value") + field(DRVH, "209715200") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "209715200") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setfilterinterval") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-1-POWERP3") +{ + field(DESC, "Power-UP state of Port3") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynUInt32Digital") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asynMask(ni6528_0,3, 0xff) setportpowerup") + field(PINI, "YES") + field(VAL, "255") +} + +record (longout,"EC-GN-HWCF:6528-1-POWERP4") +{ + field(DESC, "Power-UP state of Port4") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynUInt32Digital") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asynMask(ni6528_0,4, 0xff) setportpowerup") + field(PINI, "YES") + field(VAL, "255") +} + +record (longout,"EC-GN-HWCF:6528-1-POWERP5") +{ + field(DESC, "Power-UP state of Port5") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynUInt32Digital") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asynMask(ni6528_0,5, 0xff) setportpowerup") + field(PINI, "YES") + field(VAL, "255") +} + +record (longout,"EC-GN-HWCF:6528-1-RTSIINPROUT") +{ + field(DESC, "Set RTSI Input Route") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setrtsiinputroute") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-1-RTSIOUTROUT") +{ + field(DESC, "Set RTSI Output Route") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setrtsioutputroute") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-1-RTSIPCHANGE") +{ + field(DESC, "Set RTSI Pulse on Change") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setrtsipulseonchange") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-1-RTSIPWDG") +{ + field(DESC, "Set RTSI pulse on watchdog") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setrtsipulseonwatchdog") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-1-RTSIWDGTRIG") +{ + field(DESC, "Set RTSI on Watchdog Trigger") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setrtsiwatchdogtrigger") + field(VAL, "0") +} + +record (mbbi,"EC-GN-HWCF:6528-1-STATUS") +{ + field(DESC, "PXI-6528.1 Board Status") + field(DTYP, "asynInt32") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "@asyn(ni6528_0,0) board_status") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, "1 second") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (ao,"EC-GN-HWCF:6528-1-WDGTOUT") +{ + field(DESC, "Set Watchdog TimeOut") + field(DRVH, "429496729580") + field(DRVL, "0") + field(DTYP, "asynFloat64") + field(HOPR, "429496729580") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setwatchdogtimeout") + field(VAL, "0") +} + +record (waveform,"EC-GN-HWCF:6683-0-BDTM") +{ + field(DESC, "Board time") + field(DTYP, "asynInt32ArrayIn") + field(FTVL, "ULONG") + field(INP, "@asyn(ni6683h_0,0) getTime") + field(NELM, "2") + field(SCAN, ".1 second") +} + +record (subArray,"EC-GN-HWCF:6683-0-BDTMN") +{ + field(DESC, "Board time [ns]") + field(EGU, "ns") + field(FTVL, "ULONG") + field(INP, "EC-GN-HWCF:6683-0-BDTM CP MS") +} + +record (subArray,"EC-GN-HWCF:6683-0-BDTMS") +{ + field(DESC, "Board time [s]") + field(EGU, "s") + field(FTVL, "ULONG") + field(INP, "EC-GN-HWCF:6683-0-BDTM CP MS") +} + +record (waveform,"EC-GN-HWCF:6683-0-BLKTM") +{ + field(DESC, "Block until...") + field(DTYP, "asynInt32ArrayOut") + field(FTVL, "LONG") + field(HOPR, "4503599627370496") + field(INP, "@asyn(ni6683h_0,0) waitForTime") + field(LOPR, "0") + field(NELM, "2") +} + +record (stringin,"EC-GN-HWCF:6683-0-DEVNAME") +{ + field(DESC, "Device name") + field(DTYP, "asynOctetRead") + field(INP, "@asyn(ni6683h_0,0) deviceName") + field(PINI, "YES") + field(SCAN, "Passive") +} + +record (stringin,"EC-GN-HWCF:6683-0-DRIVER") +{ + field(DESC, "Driver version") + field(DTYP, "asynOctetRead") + field(INP, "@asyn(ni6683h_0,0) driverVersion") + field(PINI, "YES") + field(SCAN, "Passive") +} + +record (longin,"EC-GN-HWCF:6683-0-FTEMAX") +{ + field(DESC, "Max number of scheduled FTEs") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)maxScheduledFtes") + field(PINI, "YES") + field(SCAN, "Passive") +} + +record (longin,"EC-GN-HWCF:6683-0-FTENUM") +{ + field(DESC, "Number of pending FTEs") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)numPendingFtes") + field(SCAN, "5 second") +} + +record (stringin,"EC-GN-HWCF:6683-0-HBDTM") +{ + field(DESC, "Board Time") + field(DTYP, "asynOctetRead") + field(INP, "@asyn(ni6683h_0,0) getTime") + field(PINI, "YES") + field(SCAN, ".1 second") +} + +record (longin,"EC-GN-HWCF:6683-0-LVL_ERRS") +{ + field(DESC, "Check number of FTE level errors") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)checkFteLevels") + field(SCAN, "Passive") +} + +record (longin,"EC-GN-HWCF:6683-0-SERIAL") +{ + field(DESC, "Device serial number") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)deviceSerialNumber") + field(PINI, "YES") + field(SCAN, "Passive") +} + +record (mbbi,"EC-GN-HWCF:6683-0-STATUS") +{ + field(DESC, "PXI-6683.0 Device status") + field(DTYP, "asynInt32") + field(EIST, "FIFO overflow") + field(EISV, "MINOR") + field(EIVL, "8") + field(ELST, "Buffer overflow") + field(ELSV, "MINOR") + field(ELVL, "11") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "@asyn(ni6683h_0,0)deviceStatus") + field(NIST, "FPGA not ready") + field(NISV, "MINOR") + field(NIVL, "9") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, "5 second") + field(SVST, "Reserved") + field(SVSV, "INVALID") + field(SVVL, "7") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(TEST, "Ref clk no lock") + field(TESV, "MINOR") + field(TEVL, "10") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbi,"EC-GN-HWCF:6683-0-SYNC") +{ + field(DESC, "PXI-6683.0 Synchronization status") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)syncStatus") + field(ONST, "SYNCING") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, "1 second") + field(THST, "LOST_SYNC") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "SYNCED") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "NOT_SYNCED") + field(ZRSV, "MAJOR") + field(ZRVL, "0") +} + +record (longin,"EC-GN-HWCF:6683-0-SYNCLOST") +{ + field(DESC, "Seconds since lost synchronization") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)secsSinceSync") + field(SCAN, "1 second") +} + diff --git a/EC-GN-JA-PCF/.svn/pristine/22/22517f262b1d1c073748c08caed4b621fafa8d2a.svn-base b/EC-GN-JA-PCF/.svn/pristine/22/22517f262b1d1c073748c08caed4b621fafa8d2a.svn-base new file mode 100644 index 0000000..6d3b3b1 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/22/22517f262b1d1c073748c08caed4b621fafa8d2a.svn-base @@ -0,0 +1,73 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + + +def test_standby(): + """ + In the WaitStandby State, simulate PLC STANDBY signal. + Turn on FHPS by push auto-on button. + Turn on SCM PSs automatically. + State transition condition is checked at last. + """ + print '---------- Start WatiStandby test ----------' + print '1. Simulate SELECT signal. State should go to WatiStandby from Disabled.' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2 1', shell=True) + time.sleep(1) + print '2. Set MCPS rampup parameter(target current, sweep rate.)' + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MI 4', shell=True) #For A + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-TRG-SWPR-SET 1.5', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MI 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-TRG-SWPR-SET 1.5', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MI 4', shell=True) #For B + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-TRG-SWPR-SET 1.5', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MI 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-TRG-SWPR-SET 1.5', shell=True) + time.sleep(1) + print '3. Simulate STANDBY signal. MCPS, GCPS, FHPS rampup must be started.' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R 1', shell=True) + time.sleep(1) + print '4. Set FHPS rampup parameter and start it.' + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV 6', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-AUTO-RU-TIME 10', shell=True) #in second. + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START 1', shell=True) #in second. + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV 6', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-AUTO-RU-TIME 10', shell=True) #in second. + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START 1', shell=True) #in second. + time.sleep(10) + print '5. Simulate FHPS, MCPS and GCPS state.' + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB.SVAL 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON.SVAL 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB.SVAL 3', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB 3', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON.SVAL 4', shell=True)#turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON 4', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV.SVAL 6', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV 6', shell=True) + + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB.SVAL 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON.SVAL 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB.SVAL 3', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB 3', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON.SVAL 4', shell=True)#turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON 4', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV.SVAL 6', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV 6', shell=True) + time.sleep(1) + print '6. Confirm FHPS and SCM ramp-up complete. The state goes to WaitREADY from WaitStandby.' + print '---------- END WaitStandby test ----------' + diff --git a/EC-GN-JA-PCF/.svn/pristine/22/22639e15d0cdcde3541b079abb81090daf9015d5.svn-base b/EC-GN-JA-PCF/.svn/pristine/22/22639e15d0cdcde3541b079abb81090daf9015d5.svn-base new file mode 100644 index 0000000..50ca308 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/22/22639e15d0cdcde3541b079abb81090daf9015d5.svn-base @@ -0,0 +1,347 @@ +/** + * @file JAMessageGAM.cpp + * @brief Source file for class JAMessageGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAMessageGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "JAMessageGAM.h" +#include "MessageI.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +template +bool Compare(JAMessageGAM::ComparisonMode comparator, void *inputSignal, U expectedValue) { + switch (comparator) { + case JAMessageGAM::Equals: + return *static_cast(inputSignal) == expectedValue; + case JAMessageGAM::Not: + return *static_cast(inputSignal) != expectedValue; + case JAMessageGAM::Greater: + return *static_cast(inputSignal) > expectedValue; + case JAMessageGAM::EqualsOrGreater: + return *static_cast(inputSignal) >= expectedValue; + case JAMessageGAM::Less: + return *static_cast(inputSignal) < expectedValue; + default: // case EqualsOrLess: + return *static_cast(inputSignal) <= expectedValue; + } +} + +JAMessageGAM::JAMessageGAM() { + inputSignals = NULL_PTR(void **); + inputSignalTypes = NULL_PTR(MARTe::TypeDescriptor *); + operation = And; + needsReset = false; + expectedValuesInt = NULL_PTR(MARTe::uint64 *); + expectedValuesFloat = NULL_PTR(MARTe::float64 *); + intValuesCount = 0u; + floatValuesCount = 0u; + comparators = NULL_PTR(ComparisonMode *); +} + +JAMessageGAM::~JAMessageGAM() { + if (inputSignals != NULL_PTR(void **)) { + delete[] inputSignals; + } + if (inputSignalTypes != NULL_PTR(MARTe::TypeDescriptor *)) { + delete[] inputSignalTypes; + } + if (expectedValuesInt != NULL_PTR(MARTe::uint64 *)) { + delete[] expectedValuesInt; + } + if (expectedValuesFloat != NULL_PTR(MARTe::float64 *)) { + delete[] expectedValuesFloat; + } + if (comparators != NULL_PTR(ComparisonMode *)) { + delete[] comparators; + } +} + +bool JAMessageGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + // Read expected integer values. + AnyType valuesArray = data.GetType("ExpectedIntValues"); + bool intValuesProvided = (valuesArray.GetDataPointer() != NULL); + + if (intValuesProvided) { + intValuesCount = valuesArray.GetNumberOfElements(0u); + } + if (intValuesProvided) { + expectedValuesInt = new uint64[intValuesCount]; + + Vector valuesVector(expectedValuesInt, intValuesCount); + ok = (data.Read("ExpectedIntValues", valuesVector)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Failed to read ExpectedIntValues."); + return ok; + } + } + // Read expected float values. + valuesArray = data.GetType("ExpectedFloatValues"); + bool floatValuesProvided = (valuesArray.GetDataPointer() != NULL); + + if (floatValuesProvided) { + floatValuesCount = valuesArray.GetNumberOfElements(0u); + } + if (floatValuesProvided) { + expectedValuesFloat = new float64[floatValuesCount]; + + Vector valuesVector(expectedValuesFloat, floatValuesCount); + ok = (data.Read("ExpectedFloatValues", valuesVector)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Failed to read ExpectedFloatValues."); + return ok; + } + } + + ok = (floatValuesCount + intValuesCount) > 0u; + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "ExpectedFloatValues and or ExpectedIntValues shall be defined."); + } + } + if (ok) { + // Read comparators. + AnyType comparatorsArray = data.GetType("Comparators"); + if (comparatorsArray.GetDataPointer() != NULL) { + uint32 count = comparatorsArray.GetNumberOfElements(0u); + ok = count == (intValuesCount + floatValuesCount); + if (ok) { + comparators = new ComparisonMode[count]; + StreamString* comp = new StreamString[count]; + Vector compVector(comp, count); + + ok = (data.Read("Comparators", compVector)); + + if (ok) { + for (uint32 i = 0; i < count; ++i) { + if (comp[i] == "EQUALS") { + comparators[i] = Equals; + } else if (comp[i] == "NOT") { + comparators[i] = Not; + } else if (comp[i] == "GREATER") { + comparators[i] = Greater; + } else if (comp[i] == "EQUALS_OR_GREATER") { + comparators[i] = EqualsOrGreater; + } else if (comp[i] == "LESS") { + comparators[i] = Less; + } else if (comp[i] == "EQUALS_OR_LESS") { + comparators[i] = EqualsOrLess; + } else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Comparator %s is not defined.", comp[i].Buffer()); + } + } + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Expected values and operators shall have the same " + "number of elements."); + } + } else { + uint32 count = intValuesCount + floatValuesCount; + if (ok) { + // Create default comparators (equals) when they aren't provided in the configuration. + comparators = new ComparisonMode[count]; + for (uint32 i = 0; i < count; ++i) { + comparators[i] = Equals; + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Expected values and operators shall have the same " + "number of elements."); + } + } + } + if (ok) { + MARTe::StreamString operationStr; + if (data.Read("Operation", operationStr)) { + if (operationStr == "AND") { + operation = And; + } + else if (operationStr == "OR") { + operation = Or; + } + else if (operationStr == "NOR") { + operation = Nor; + } + else if (operationStr == "XOR") { + operation = Xor; + } + else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Operation %s is not defined", operationStr.Buffer()); + } + } + } + if (ok) { + ok = (Size() == 1); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "A Message object shall be added to this container"); + } + } + if (ok) { + eventMsg = Get(0); + ok = (eventMsg.IsValid()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "A valid Message shall be added to this container"); + } + } + return ok; +} + +bool JAMessageGAM::Setup() { + using namespace MARTe; + bool ok = numberOfInputSignals == (intValuesCount + floatValuesCount); + if (ok) { + ok = numberOfInputSignals > 0u; + if (ok) { + inputSignals = new void*[numberOfInputSignals]; + uint32 i; + for (i = 0u; i < numberOfInputSignals; i++) { + inputSignals[i] = GetInputSignalMemory(i); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one input signal shall be defined"); + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Number of input signals shall be the same as " + "number of expected values."); + } + if (ok) { + inputSignalTypes = new TypeDescriptor[numberOfInputSignals]; + uint32 i; + for (i = 0u; (i < numberOfInputSignals) && (ok); i++) { + TypeDescriptor inputType = GetSignalType(InputSignals, i); + inputSignalTypes[i] = inputType; + ok = (inputType == UnsignedInteger32Bit) || (inputType == SignedInteger32Bit) || + (inputType == UnsignedInteger16Bit) || (inputType == SignedInteger16Bit) || + (inputType == UnsignedInteger8Bit) || (inputType == SignedInteger8Bit) || + (inputType == Float64Bit) || (inputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, i, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "Signal %s shall be defined as 32/16/8 bit signed/unsigned integer " + "or as 64/32 float.", signalName.Buffer()); + } + } + } + + return ok; +} + +bool JAMessageGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + needsReset = false; + return true; +} + +bool JAMessageGAM::Execute() { + using namespace MARTe; + bool ok = true; + bool eventDetected = false; + uint32 inputPortIndex = 0; + uint32 intIndex = 0; + uint32 floatIndex = 0; + if (operation == Or) { + for (inputPortIndex = 0; (inputPortIndex < numberOfInputSignals) && (!eventDetected); inputPortIndex++) { + eventDetected = Compare(inputPortIndex, floatIndex, intIndex); + } + } + else if (operation == Nor) { + for (inputPortIndex = 0; (inputPortIndex < numberOfInputSignals) && (!eventDetected); inputPortIndex++) { + eventDetected = Compare(inputPortIndex, floatIndex, intIndex); + } + eventDetected = !eventDetected; + } + else if (operation == And) { + eventDetected = Compare(0, floatIndex, intIndex); + for (inputPortIndex = 1; (inputPortIndex < numberOfInputSignals); inputPortIndex++) { + eventDetected &= Compare(inputPortIndex, floatIndex, intIndex); + } + } + else if (operation == Xor) { + uint32 eventDetectedUInt32 = Compare(inputPortIndex, floatIndex, intIndex); + for (inputPortIndex = 1; (inputPortIndex < numberOfInputSignals); inputPortIndex++) { + eventDetectedUInt32 ^= Compare(inputPortIndex, floatIndex, intIndex); + } + eventDetected = (eventDetectedUInt32 == 1u); + } + if (eventDetected) { + if (!needsReset) { + ok = (MessageI::SendMessage(eventMsg, this) == ErrorManagement::NoError); + needsReset = true; + } + } + return ok; +} + +bool JAMessageGAM::Compare(MARTe::uint32 inputPortIndex, MARTe::uint32 &floatValueIndex, MARTe::uint32 &intValueIndex) { + using namespace MARTe; + bool ret = false; + if (inputSignalTypes[inputPortIndex] == UnsignedInteger32Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == SignedInteger32Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == UnsignedInteger16Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == SignedInteger16Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == UnsignedInteger8Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == SignedInteger8Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == Float64Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesFloat[floatValueIndex]); + ++floatValueIndex; + } + else { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesFloat[floatValueIndex]); + ++floatValueIndex; + } + return ret; +} + +CLASS_REGISTER(JAMessageGAM, "1.0") diff --git a/EC-GN-JA-PCF/.svn/pristine/24/2465c0b34fdb5167f187933877ccba2f9b347ebd.svn-base b/EC-GN-JA-PCF/.svn/pristine/24/2465c0b34fdb5167f187933877ccba2f9b347ebd.svn-base new file mode 100644 index 0000000..04cde43 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/24/2465c0b34fdb5167f187933877ccba2f9b347ebd.svn-base @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +############################################################# +export TARGET=x86-linux + +include Makefile.inc + diff --git a/EC-GN-JA-PCF/.svn/pristine/24/24fb2a2695ad8c9d803e5d1fe284146eb2c689ab.svn-base b/EC-GN-JA-PCF/.svn/pristine/24/24fb2a2695ad8c9d803e5d1fe284146eb2c689ab.svn-base new file mode 100644 index 0000000..623ae28 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/24/24fb2a2695ad8c9d803e5d1fe284146eb2c689ab.svn-base @@ -0,0 +1,4 @@ +#!/bin/sh + +taskset -c 8-11 ./Main.sh -f ../Configurations/JAGyrotronA_FY19_P1.cfg -l RealTimeLoader -m StateMachine:Start + diff --git a/EC-GN-JA-PCF/.svn/pristine/25/25239d59bd135cb48283949cbba52accd73d141e.svn-base b/EC-GN-JA-PCF/.svn/pristine/25/25239d59bd135cb48283949cbba52accd73d141e.svn-base new file mode 100644 index 0000000..a91120e --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/25/25239d59bd135cb48283949cbba52accd73d141e.svn-base @@ -0,0 +1,52 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAModeControlGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAModeControlGAM$(LIBEXT) \ + $(BUILD_DIR)/JAModeControlGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/.svn/pristine/25/254ff460acd05bd4a7e7b6db5e484ee266f39f29.svn-base b/EC-GN-JA-PCF/.svn/pristine/25/254ff460acd05bd4a7e7b6db5e484ee266f39f29.svn-base new file mode 100644 index 0000000..2e2dfed --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/25/254ff460acd05bd4a7e7b6db5e484ee266f39f29.svn-base @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JATriangleWaveGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JATriangleWaveGAM$(LIBEXT) \ + $(BUILD_DIR)/JATriangleWaveGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/.svn/pristine/26/2659b07cb3871c0d6275d9d5d622e15ec11732f8.svn-base b/EC-GN-JA-PCF/.svn/pristine/26/2659b07cb3871c0d6275d9d5d622e15ec11732f8.svn-base new file mode 100644 index 0000000..e6c9edb --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/26/2659b07cb3871c0d6275d9d5d622e15ec11732f8.svn-base @@ -0,0 +1,51 @@ + +importClass(Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener); +importPackage(Packages.org.csstudio.opibuilder.scriptUtil); + +var table = widget.getTable(); +var fct_name=widget.getPropertyValue("name"); + +var selectionChanged = new Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener() { + selectionChanged: function(selection) { + var selectedrow= table.getSelection(); + var cuName=selectedrow[0][0]; + var phyName=selectedrow[0][1]; + var plcIocHlts =selectedrow[0][6]; + var cuType=selectedrow[0][7]; +// change $(CU) substitution + macroInput = DataUtil.createMacrosInput(true) + macroInput.put("CU", cuName) + macroInput.put("PHY_NAME", phyName) + macroInput.put("FCT_NAME", fct_name) + macroInput.put("CU_TYPE", cuType) + if (plcIocHlts == "") { + macroInput.put("SHOW_PLC_IOC", "false") + } + else { + macroInput.put("SHOW_PLC_IOC", "true") + } + // open OPI + // see https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-boy/trunk/org.csstudio.opibuilder/src/org/csstudio/opibuilder/scriptUtil/ScriptUtil.java + if (cuType == "POC with CA") { + ScriptUtil.openOPI(widget, fct_name + "-" + cuName + "-POCWithCADetails.opi", 1, macroInput) + } + else if (cuType == "POC without CA") { + ScriptUtil.openOPI(widget, fct_name + "-" + cuName + "-POCWithoutCADetails.opi", 1, macroInput) + } + else if (cuType == "Plant System Host") { + ScriptUtil.openOPI(widget, fct_name + "-" + cuName + "-PSHDetails.opi", 1, macroInput) + } + else if (cuType == "Fast Controller") { + ScriptUtil.openOPI(widget, fct_name + "-" + cuName + "-PCFDetails.opi", 1, macroInput) + } + else if (cuType == "Server") { + ScriptUtil.openOPI(widget, fct_name + "-" + cuName + "-SRVDetails.opi", 1, macroInput) + } + else { + ScriptUtil.openOPI(widget, fct_name+"-CtrlUnitDetails.opi", 1, macroInput) + } + + } +}; + +table.addSelectionChangedListener(selectionChanged); diff --git a/EC-GN-JA-PCF/.svn/pristine/26/26b589cf38bc11635855dee60306cc6117ee86c0.svn-base b/EC-GN-JA-PCF/.svn/pristine/26/26b589cf38bc11635855dee60306cc6117ee86c0.svn-base new file mode 100644 index 0000000..926c122 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/26/26b589cf38bc11635855dee60306cc6117ee86c0.svn-base @@ -0,0 +1,87 @@ + + +4.0.0 +org.iter.codac.units +EC-GN +codac +1.0.0 +CODAC Core System EC-GN subsystem +CODAC Core System EC-GN subsystem +http://www.iter.org/ + + + +subsystem +iandc +%(/opt/tools/get-vcs-url.sh --path=${project.basedir}) + + + + +org.iter.codac.units +maven-iter-settings +6.3.0 + + + + + +ferrog + +unit owner + + + + + + + +compile + + + +org.apache.maven.plugins +maven-iter-plugin +true + + + +src +${project.artifactId} +${project.version} +${project.description} + + +${rpm.vcs.url} + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/28/280f6864e791c7319b28df99903d18d5d0e03562.svn-base b/EC-GN-JA-PCF/.svn/pristine/28/280f6864e791c7319b28df99903d18d5d0e03562.svn-base new file mode 100644 index 0000000..aaa1948 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/28/280f6864e791c7319b28df99903d18d5d0e03562.svn-base @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAPreProgrammedGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAPreProgrammedGAM$(LIBEXT) \ + $(BUILD_DIR)/JAPreProgrammedGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/.svn/pristine/29/2919878bb9bfd7fb0f4253def24628423ff56a01.svn-base b/EC-GN-JA-PCF/.svn/pristine/29/2919878bb9bfd7fb0f4253def24628423ff56a01.svn-base new file mode 100644 index 0000000..0beb994 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/29/2919878bb9bfd7fb0f4253def24628423ff56a01.svn-base @@ -0,0 +1,23557 @@ + + + + + +52 + + + +EC-GN + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +10.136.136.101 + + +52RF01-PSH-4410 + + + + +52RF01-PCF-4210.codac.iter.org + + +52RF01-PCF-4210.codac.iter.org-R1 + + +52RF01-PCF-4210.codac.iter.org-R1 + + + + + +10.136.136.13-T1 + + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-ACQ + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-CONF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-MODE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-ACQ + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-CONF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-MODE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AISTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AOSTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-LDAICF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-LDAOCF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AISTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AOSTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-LDAICF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-LDAOCF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BLKTMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-FTEAALL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-RESET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-TAIUTC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-DMSG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-NS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-DMSG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-NS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AIPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AISMPL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AISR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AITB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AOPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AOTB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-CHAIMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-CHAOMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AIPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AISMPL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AISR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AITB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AOPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AOTB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-CHAIMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-CHAOMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-FILTINT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-POWERP3 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-POWERP4 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-POWERP5 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIINPROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIOUTROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIPCHANGE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIPWDG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIWDGTRIG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-WDGTOUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-FILTINT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-POWERP3 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-POWERP4 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-POWERP5 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIINPROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIOUTROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIPCHANGE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIPWDG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIWDGTRIG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-WDGTOUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BDTM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BDTMN + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BDTMS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BLKTM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-DEVNAME + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-DRIVER + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-FTEMAX + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-FTENUM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-HBDTM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-LVL_ERRS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-SERIAL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-SYNC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-SYNCLOST + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:DIO4900-YON + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-AI-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-AO-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-LOAD + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-LOADED + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DI-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DO-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN-EGU + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-MST-TRIG + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-PREP-MODE + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHORT-PULSE + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-TRIG-SOUR + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2810-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2810-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2820-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2820-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2830-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2830-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MRF2910-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MRF2910-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-BEAMON-TIME + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-ERR + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-NAME + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN-CALC + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN-DAM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-ELAPSED + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-PREHEAT-TIME + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-PREP-TIME-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-FLNK1 + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-FLNK2 + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-ID + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-PLOT + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SM + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-OUTON-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-OUTON-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-RST + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-STAT + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-TR + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-MANM + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-CURR-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-CURR-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-DCV-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-DCV-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-EREF + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-EREF-MSP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-ERROR + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-IDN + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCI + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCV + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-AMP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-FREQ + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-OFFS + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-OP-CALC + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-OP-V-DIFF + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-LOC + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-OUTON-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-REM + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-RST + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-MANM + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-ACV-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-ACV-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-RU-TIME + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-STAT + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-CURR-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-CURR-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-EREF + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-EREF-MSP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-ERROR + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-FRQ-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-FRQ-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-IDN + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACI + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-FRQ + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-AUTO-MODE-SET + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-PREP-WF + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CALC + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-MANM + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MI + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MO + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ERR + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-SWP-LIM + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-SWP-RB + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-RB + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-SWPR-SET + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-VOLT-MON + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-MANM + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MI + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MO + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ERR + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-SWP-LIM + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-SWP-RB + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-RB + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-SWPR-SET + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-VOLT-MON + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-RAMPDWN-CMP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV1 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV2 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV3 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV5 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV6 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV7 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV8 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YFLT-OC + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YFLT-OV + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YSTA-GAOP + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YTRP + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YTRP2 + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:DIO4900-YON + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-AI-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-AO-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-LOAD + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-LOADED + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DI-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DO-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN-EGU + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-MST-TRIG + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-PREP-MODE + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHORT-PULSE + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-TRIG-SOUR + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2810-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2810-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2820-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2820-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2830-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2830-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MRF2910-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MRF2910-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-BEAMON-TIME + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-ERR + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +string +configuration + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-NAME + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN-CALC + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN-DAM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-ELAPSED + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-PREHEAT-TIME + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-PREP-TIME-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-FLNK1 + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-FLNK2 + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-ID + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-PLOT + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SM + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-OUTON-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-OUTON-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-RST + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-STAT + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-TR + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-MANM + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-CURR-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-CURR-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-DCV-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-DCV-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-EREF + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-EREF-MSP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-ERROR + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-IDN + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCI + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCV + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-AMP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-FREQ + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-OFFS + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-OP-CALC + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-OP-V-DIFF + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-LOC + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-OUTON-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-REM + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-RST + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-MANM + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-ACV-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-ACV-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-RU-TIME + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-STAT + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-CURR-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-CURR-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-EREF + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-EREF-MSP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-ERROR + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-FRQ-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-FRQ-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-IDN + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACI + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-FRQ + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-AUTO-MODE-SET + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-PREP-WF + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CALC + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-MANM + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MI + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MO + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ERR + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-SWP-LIM + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-SWP-RB + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-RB + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-SWPR-SET + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-VOLT-MON + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-MANM + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MI + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MO + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ERR + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-SWP-LIM + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-SWP-RB + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-RB + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-SWPR-SET + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-VOLT-MON + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV1 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV2 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV3 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV5 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV6 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV7 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV8 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-YSTA-GBOP + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-YTRP + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-YTRP2 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-CTRP + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GA1 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GA2 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GA3 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GB1 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GB2 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GB3 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PSU0000-YSTA-MOD + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-CONF-STAT + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-RECONF + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SW-TRIG + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-RST-FLT + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-LEN + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-LEN-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-MODE + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-MODE-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-PUB-DLY + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-PUB-DLY-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-STAT + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD1-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD2-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD3-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD4-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-RDY-TOUT + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-GY1PRM + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-GY2PRM + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-OPGY1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-OPGY2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-RV1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-RV2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-RV3 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YON-CCPS1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YON-CCPS2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YSTA-MPSS + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTRP + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD3 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD4 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-ST1R + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-ST2R + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-ST3R + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-CON-HV + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-CON-SW + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-CTRP + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-YFLT + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-YSTA + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-MANM + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-EREF + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-EREF-MSP + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-EREF-P + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-ET + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-ET-WF + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-IT + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-IT-WF + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-DT-HVON + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-DT-SWON + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-EREF-CONV + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-PREP-WF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-CON-HV + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-CON-SW + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-CTRP + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-YFLT + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-YSTA + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-MANM + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-EREF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-EREF-MSP + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-EREF-P + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-ET + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-ET-WF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-IT + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-IT-WF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-DT-HVON + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-DT-SWON + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-EREF-CONV + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-PREP-WF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-CON-HV + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-CON-SW + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-CTRP + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-YFLT + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-YSTA + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-MANM + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-EREF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-EREF-MSP + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-ET + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-ET-WF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-IT + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-IT-WF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-DT-HVON + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-DT-SWON + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-PREP-WF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-CON-HV + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-CON-SW + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-CTRP + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-YFLT + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-YSTA + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-MANM + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-EREF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-EREF-MSP + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-ET + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-ET-WF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-IT + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-IT-WF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-DT-HVON + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-DT-SWON + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-PREP-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-COFF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-CON-MOD + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-CON-SW + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-TYSTA + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-YFLT + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-MANM + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-EREF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-EREF-MSP + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GA + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GA-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GB + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GB-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GA + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GA-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GB + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GB-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-DT-HVON + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-EREF-CALC + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-HVON-CALC + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-PREP-WF + + + + + + + + + + +iocEC-GN-PSH0PCF +PCFCORE IOC +epicsioc +IOC + + + +52RF01-PCF-4210 + +iocEC-GN-PCF0SYSM +PCFSYSM IOC +epicsioc +IOC + + + +52RF01-PSH-4410 + +iocEC-GN-PSH0SYSM +PSHSYSM IOC +epicsioc +IOC + + + +52RF01-PSH-4410 + +iocEC-GN-PSH0CUB +PSHCUB IOC +epicsioc +IOC + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/29/295be0cc30fdb38b9d8e582910a31341e4b12297.svn-base b/EC-GN-JA-PCF/.svn/pristine/29/295be0cc30fdb38b9d8e582910a31341e4b12297.svn-base new file mode 100644 index 0000000..28e8d36 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/29/295be0cc30fdb38b9d8e582910a31341e4b12297.svn-base @@ -0,0 +1,26 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import ColorFontUtil + + +table = widget.getTable() +nbColPVs=4 +#find index of the trigger PV +i=0 +while triggerPV != pvs[i]: + i+=1 + +table.setCellText(i/nbColPVs, i%nbColPVs +3, PVUtil.getString(triggerPV)) + +s = PVUtil.getSeverity(triggerPV) + +color = ColorFontUtil.WHITE +if s == 0: + color = ColorFontUtil.GREEN +elif s == 1: + color = ColorFontUtil.RED +elif s == 2: + color = ColorFontUtil.YELLOW +elif s == 3: + color = ColorFontUtil.PINK + +table.setCellBackground(i/nbColPVs, i%nbColPVs + 3, color) \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/2a/2acea19c934c5f71b43af5d78f1b0c45cb721955.svn-base b/EC-GN-JA-PCF/.svn/pristine/2a/2acea19c934c5f71b43af5d78f1b0c45cb721955.svn-base new file mode 100644 index 0000000..bcfc0b0 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/2a/2acea19c934c5f71b43af5d78f1b0c45cb721955.svn-base @@ -0,0 +1,146 @@ +/** + * @file RandomDataSource.cpp + * @brief Source file for class RandomDataSource + * @date 01/03/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class RandomDataSource (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "CompilerTypes.h" +#include "RandomDataSource.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +RandomDataSource::RandomDataSource() : + MARTe::DataSourceI() { + using namespace MARTe; + seed = 0u; + signalPtr = NULL_PTR(MARTe::char8 *); + signalTypeDescriptor = UnsignedInteger8Bit; +} + +RandomDataSource::~RandomDataSource() { + using namespace MARTe; + if (signalPtr) { + delete[] signalPtr; + } +} + +bool RandomDataSource::SetConfiguredDatabase(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = (DataSourceI::SetConfiguredDatabase(data)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "DataSourceI::SetConfiguredDatabas() failed"); + } + if (ok) { + ok = (GetNumberOfSignals() == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetNumberOfSignals() != 1u"); + } + } + if (ok) { + signalTypeDescriptor = GetSignalType(0u); + ok = (signalTypeDescriptor.type == UnsignedInteger); + if (!ok) { + ok = (signalTypeDescriptor.type == SignedInteger); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetSignalType(0u) != Un/SignedInteger"); + } + } + + return ok; +} + +bool RandomDataSource::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = DataSourceI::Initialise(data); + if (ok) { + ok = data.Read("Seed", seed); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The Seed shall be specified"); + } + } + + return ok; +} + +bool RandomDataSource::Synchronise() { + using namespace MARTe; + + if (signalTypeDescriptor.numberOfBits == 8u) { + GetValue(); + } + if (signalTypeDescriptor.numberOfBits == 16u) { + GetValue(); + } + if (signalTypeDescriptor.numberOfBits == 32u) { + GetValue(); + } + if (signalTypeDescriptor.numberOfBits == 64u) { + GetValue(); + } + + return true; +} + +bool RandomDataSource::AllocateMemory() { + signalPtr = new MARTe::char8[signalTypeDescriptor.numberOfBits]; + return true; +} + +bool RandomDataSource::GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress) { + signalAddress = &signalPtr[0]; + return true; +} + +const MARTe::char8 *RandomDataSource::GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction) { + using namespace MARTe; + + static bool firstTime = true; + const char8 * broker;// = NULL_PTR(const char8 *); + if (firstTime) { + broker = "MemoryMapSynchronisedInputBroker"; + } + else { + firstTime = false; + broker = "MemoryMapInputBroker"; + } + return broker; +} + +bool RandomDataSource::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + return true; +} + +CLASS_REGISTER(RandomDataSource, "1.0") + diff --git a/EC-GN-JA-PCF/.svn/pristine/2b/2b001e34b297e2b898182fc0e90d7544485be01d.svn-base b/EC-GN-JA-PCF/.svn/pristine/2b/2b001e34b297e2b898182fc0e90d7544485be01d.svn-base new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/2b/2b001e34b297e2b898182fc0e90d7544485be01d.svn-base @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/2b/2b312fe29ce01389865572d006816e870e2030e2.svn-base b/EC-GN-JA-PCF/.svn/pristine/2b/2b312fe29ce01389865572d006816e870e2030e2.svn-base new file mode 100644 index 0000000..032baf6 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/2b/2b312fe29ce01389865572d006816e870e2030e2.svn-base @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JABitReverseGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JABitReverseGAM$(LIBEXT) \ + $(BUILD_DIR)/JABitReverseGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/.svn/pristine/2b/2b3b6651643f1859516959472a1d2b39e908df45.svn-base b/EC-GN-JA-PCF/.svn/pristine/2b/2b3b6651643f1859516959472a1d2b39e908df45.svn-base new file mode 100644 index 0000000..773cbd6 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/2b/2b3b6651643f1859516959472a1d2b39e908df45.svn-base @@ -0,0 +1,157 @@ +/** + * @file JATerminalInterfaceGAM.h + * @brief Header file for class JATerminalInterfaceGAM + * @date Feb 19, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JATerminalInterfaceGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JATerminalInterfaceGAM_H_ +#define GAMS_JATerminalInterfaceGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM calculates one output value by comparing input value and fixed parameters. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ * 
+ *         +terminalInterfaceGAM = {
+ *           Class = JATerminalInterfaceGAM
+ *           mhvps_hvon_term = 4
+ *           aps_hvon_term = 1
+ *           aps_swon_term = 16
+ *           bps_hvon_term = 2
+ *           bps_swon_term = 8
+ *           InputSignals = {
+ *               MHVPS_HVON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = NI6259
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JATerminalInterfaceGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JATerminalInterfaceGAM(); + + virtual ~JATerminalInterfaceGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + // Fixed GAM input + MARTe::uint32 mhvps_hvon_term; + MARTe::uint32 aps_hvon_term; + MARTe::uint32 aps_swon_term; + MARTe::uint32 bps_hvon_term; + MARTe::uint32 bps_swon_term; + + // Input signals + //MARTe::uint32 *mhvps_manm; + MARTe::uint32 *mhvps_hvon; + + //MARTe::uint32 *aps_manm; + MARTe::uint32 *aps_hvon; + MARTe::uint32 *aps_swon; + + //MARTe::uint32 *bps_manm; + MARTe::uint32 *bps_hvon; + MARTe::uint32 *bps_swon; + + MARTe::uint32 *short_pulse_mode; + + MARTe::uint32 *stateMachineOutput; + MARTe::uint8 *ni6528p3Value; + MARTe::uint8 *ni6528p4Value; + + // Output signals + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JATerminalInterfaceGAM_H_ */ diff --git a/EC-GN-JA-PCF/.svn/pristine/2c/2c30507ec272eb645dfef2975defbd64150f2a4b.svn-base b/EC-GN-JA-PCF/.svn/pristine/2c/2c30507ec272eb645dfef2975defbd64150f2a4b.svn-base new file mode 100644 index 0000000..79c4ce6 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/2c/2c30507ec272eb645dfef2975defbd64150f2a4b.svn-base @@ -0,0 +1,5 @@ +TOP = ../.. +include $(TOP)/configure/CONFIG +ARCH = linux-x86_64 +TARGETS = envPaths +include $(TOP)/configure/RULES.ioc diff --git a/EC-GN-JA-PCF/.svn/pristine/2d/2db2a5d8186712e6c4094db5b3ad553cbe50746f.svn-base b/EC-GN-JA-PCF/.svn/pristine/2d/2db2a5d8186712e6c4094db5b3ad553cbe50746f.svn-base new file mode 100644 index 0000000..fda3c4d --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/2d/2db2a5d8186712e6c4094db5b3ad553cbe50746f.svn-base @@ -0,0 +1,1013 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,0,0.5,0.5,100,1,5 +10,0,0.5,0.5,100,1,5 +20,0,0.5,0.5,100,1,5 +30,0,0.5,0.5,100,1,5 +40,0,0.5,0.5,100,1,5 +50,0,0.5,0.5,100,1,5 +60,0,0.5,0.5,100,1,5 +70,0,0.5,0.5,100,1,5 +80,0,0.5,0.5,100,1,5 +90,0,0.5,0.5,100,1,5 +100,0,0.5,0.5,100,1,5 +110,0,0.5,0.5,100,1,5 +120,0,0.5,0.5,100,1,5 +130,0,0.5,0.5,100,1,5 +140,0,0.5,0.5,100,1,5 +150,0,0.5,0.5,100,1,5 +160,0,0.5,0.5,100,1,5 +170,0,0.5,0.5,100,1,5 +180,0,0.5,0.5,100,1,5 +190,0,0.5,0.5,100,1,5 +200,0,0.5,0.5,100,1,5 +210,0,0.5,0.5,100,1,5 +220,0,0.5,0.5,100,1,5 +230,0,0.5,0.5,100,1,5 +240,0,0.5,0.5,100,1,5 +250,0,0.5,0.5,100,1,5 +260,0,0.5,0.5,100,1,5 +270,0,0.5,0.5,100,1,5 +280,0,0.5,0.5,100,1,5 +290,0,0.5,0.5,100,1,5 +300,0,0.5,0.5,100,1,5 +310,0,0.5,0.5,100,1,5 +320,0,0.5,0.5,100,1,5 +330,0,0.5,0.5,100,1,5 +340,0,0.5,0.5,100,1,5 +350,0,0.5,0.5,100,1,5 +360,0,0.5,0.5,100,1,5 +370,0,0.5,0.5,100,1,5 +380,0,0.5,0.5,100,1,5 +390,0,0.5,0.5,100,1,5 +400,0,0.5,0.5,100,1,5 +410,0,0.5,0.5,100,1,5 +420,0,0.5,0.5,100,1,5 +430,0,0.5,0.5,100,1,5 +440,0,0.5,0.5,100,1,5 +450,0,0.5,0.5,100,1,5 +460,0,0.5,0.5,100,1,5 +470,0,0.5,0.5,100,1,5 +480,0,0.5,0.5,100,1,5 +490,0,0.5,0.5,100,1,5 +500,0,0.5,0.5,100,1,5 +510,0,0.5,0.5,100,1,5 +520,0,0.5,0.5,100,1,5 +530,0,0.5,0.5,100,1,5 +540,0,0.5,0.5,100,1,5 +550,0,0.5,0.5,100,1,5 +560,0,0.5,0.5,100,1,5 +570,0,0.5,0.5,100,1,5 +580,0,0.5,0.5,100,1,5 +590,0,0.5,0.5,100,1,5 +600,0,0.5,0.5,100,1,5 +610,0,0.5,0.5,100,1,5 +620,0,0.5,0.5,100,1,5 +630,0,0.5,0.5,100,1,5 +640,0,0.5,0.5,100,1,5 +650,0,0.5,0.5,100,1,5 +660,0,0.5,0.5,100,1,5 +670,0,0.5,0.5,100,1,5 +680,0,0.5,0.5,100,1,5 +690,0,0.5,0.5,100,1,5 +700,0,0.5,0.5,100,1,5 +710,0,0.5,0.5,100,1,5 +720,0,0.5,0.5,100,1,5 +730,0,0.5,0.5,100,1,5 +740,0,0.5,0.5,100,1,5 +750,0,0.5,0.5,100,1,5 +760,0,0.5,0.5,100,1,5 +770,0,0.5,0.5,100,1,5 +780,0,0.5,0.5,100,1,5 +790,0,0.5,0.5,100,1,5 +800,0,0.5,0.5,100,1,5 +810,0,0.5,0.5,100,1,5 +820,0,0.5,0.5,100,1,5 +830,0,0.5,0.5,100,1,5 +840,0,0.5,0.5,100,1,5 +850,0,0.5,0.5,100,1,5 +860,0,0.5,0.5,100,1,5 +870,0,0.5,0.5,100,1,5 +880,0,0.5,0.5,100,1,5 +890,0,0.5,0.5,100,1,5 +900,0,0.5,0.5,100,1,5 +910,0,0.5,0.5,100,1,5 +920,0,0.5,0.5,100,1,5 +930,0,0.5,0.5,100,1,5 +940,0,0.5,0.5,100,1,5 +950,0,0.5,0.5,100,1,5 +960,0,0.5,0.5,100,1,5 +970,0,0.5,0.5,100,1,5 +980,0,0.5,0.5,100,1,5 +990,0,0.5,0.5,100,1,5 +1000,0,0.5,0.5,100,1,5 +1010,0,1,1,100,1,5 +1020,0,1,1,100,1,5 +1030,0,1,1,100,1,5 +1040,0,1,1,100,1,5 +1050,0,1,1,100,1,5 +1060,0,1,1,100,1,5 +1070,0,1,1,100,1,5 +1080,0,1,1,100,1,5 +1090,0,1,1,100,1,5 +1100,0,1,1,100,1,5 +1110,0,1,1,100,1,5 +1120,0,1,1,100,1,5 +1130,0,1,1,100,1,5 +1140,0,1,1,100,1,5 +1150,0,1,1,100,1,5 +1160,0,1,1,100,1,5 +1170,0,1,1,100,1,5 +1180,0,1,1,100,1,5 +1190,0,1,1,100,1,5 +1200,0,1,1,100,1,5 +1210,0,1,1,100,1,5 +1220,0,1,1,100,1,5 +1230,0,1,1,100,1,5 +1240,0,1,1,100,1,5 +1250,0,1,1,100,1,5 +1260,0,1,1,100,1,5 +1270,0,1,1,100,1,5 +1280,0,1,1,100,1,5 +1290,0,1,1,100,1,5 +1300,0,1,1,100,1,5 +1310,0,1,1,100,1,5 +1320,0,1,1,100,1,5 +1330,0,1,1,100,1,5 +1340,0,1,1,100,1,5 +1350,0,1,1,100,1,5 +1360,0,1,1,100,1,5 +1370,0,1,1,100,1,5 +1380,0,1,1,100,1,5 +1390,0,1,1,100,1,5 +1400,0,1,1,100,1,5 +1410,0,1,1,100,1,5 +1420,0,1,1,100,1,5 +1430,0,1,1,100,1,5 +1440,0,1,1,100,1,5 +1450,0,1,1,100,1,5 +1460,0,1,1,100,1,5 +1470,0,1,1,100,1,5 +1480,0,1,1,100,1,5 +1490,0,1,1,100,1,5 +1500,0,1,1,100,1,5 +1510,0,1,1,100,1,5 +1520,0,1,1,100,1,5 +1530,0,1,1,100,1,5 +1540,0,1,1,100,1,5 +1550,0,1,1,100,1,5 +1560,0,1,1,100,1,5 +1570,0,1,1,100,1,5 +1580,0,1,1,100,1,5 +1590,0,1,1,100,1,5 +1600,0,1,1,100,1,5 +1610,0,1,1,100,1,5 +1620,0,1,1,100,1,5 +1630,0,1,1,100,1,5 +1640,0,1,1,100,1,5 +1650,0,1,1,100,1,5 +1660,0,1,1,100,1,5 +1670,0,1,1,100,1,5 +1680,0,1,1,100,1,5 +1690,0,1,1,100,1,5 +1700,0,1,1,100,1,5 +1710,0,1,1,100,1,5 +1720,0,1,1,100,1,5 +1730,0,1,1,100,1,5 +1740,0,1,1,100,1,5 +1750,0,1,1,100,1,5 +1760,0,1,1,100,1,5 +1770,0,1,1,100,1,5 +1780,0,1,1,100,1,5 +1790,0,1,1,100,1,5 +1800,0,1,1,100,1,5 +1810,0,1,1,100,1,5 +1820,0,1,1,100,1,5 +1830,0,1,1,100,1,5 +1840,0,1,1,100,1,5 +1850,0,1,1,100,1,5 +1860,0,1,1,100,1,5 +1870,0,1,1,100,1,5 +1880,0,1,1,100,1,5 +1890,0,1,1,100,1,5 +1900,0,1,1,100,1,5 +1910,0,1,1,100,1,5 +1920,0,1,1,100,1,5 +1930,0,1,1,100,1,5 +1940,0,1,1,100,1,5 +1950,0,1,1,100,1,5 +1960,0,1,1,100,1,5 +1970,0,1,1,100,1,5 +1980,0,1,1,100,1,5 +1990,0,1,1,100,1,5 +2000,0,1,1,100,1,5 +2010,0,1,1,100,1,5 +2020,0,1,1,100,1,5 +2030,0,1,1,100,1,5 +2040,0,1,1,100,1,5 +2050,0,1,1,100,1,5 +2060,0,1,1,100,1,5 +2070,0,1,1,100,1,5 +2080,0,1,1,100,1,5 +2090,0,1,1,100,1,5 +2100,0,1,1,100,1,5 +2110,0,1,1,100,1,5 +2120,0,1,1,100,1,5 +2130,0,1,1,100,1,5 +2140,0,1,1,100,1,5 +2150,0,1,1,100,1,5 +2160,0,1,1,100,1,5 +2170,0,1,1,100,1,5 +2180,0,1,1,100,1,5 +2190,0,1,1,100,1,5 +2200,0,1,1,100,1,5 +2210,0,1,1,100,1,5 +2220,0,1,1,100,1,5 +2230,0,1,1,100,1,5 +2240,0,1,1,100,1,5 +2250,0,1,1,100,1,5 +2260,0,1,1,100,1,5 +2270,0,1,1,100,1,5 +2280,0,1,1,100,1,5 +2290,0,1,1,100,1,5 +2300,0,1,1,100,1,5 +2310,0,1,1,100,1,5 +2320,0,1,1,100,1,5 +2330,0,1,1,100,1,5 +2340,0,1,1,100,1,5 +2350,0,1,1,100,1,5 +2360,0,1,1,100,1,5 +2370,0,1,1,100,1,5 +2380,0,1,1,100,1,5 +2390,0,1,1,100,1,5 +2400,0,1,1,100,1,5 +2410,0,1,1,100,1,5 +2420,0,1,1,100,1,5 +2430,0,1,1,100,1,5 +2440,0,1,1,100,1,5 +2450,0,1,1,100,1,5 +2460,0,1,1,100,1,5 +2470,0,1,1,100,1,5 +2480,0,1,1,100,1,5 +2490,0,1,1,100,1,5 +2500,0,1,1,100,1,5 +2510,0,1,1,100,1,5 +2520,0,1,1,100,1,5 +2530,0,1,1,100,1,5 +2540,0,1,1,100,1,5 +2550,0,1,1,100,1,5 +2560,0,1,1,100,1,5 +2570,0,1,1,100,1,5 +2580,0,1,1,100,1,5 +2590,0,1,1,100,1,5 +2600,0,1,1,100,1,5 +2610,0,1,1,100,1,5 +2620,0,1,1,100,1,5 +2630,0,1,1,100,1,5 +2640,0,1,1,100,1,5 +2650,0,1,1,100,1,5 +2660,0,1,1,100,1,5 +2670,0,1,1,100,1,5 +2680,0,1,1,100,1,5 +2690,0,1,1,100,1,5 +2700,0,1,1,100,1,5 +2710,0,1,1,100,1,5 +2720,0,1,1,100,1,5 +2730,0,1,1,100,1,5 +2740,0,1,1,100,1,5 +2750,0,1,1,100,1,5 +2760,0,1,1,100,1,5 +2770,0,1,1,100,1,5 +2780,0,1,1,100,1,5 +2790,0,1,1,100,1,5 +2800,0,1,1,100,1,5 +2810,0,1,1,100,1,5 +2820,0,1,1,100,1,5 +2830,0,1,1,100,1,5 +2840,0,1,1,100,1,5 +2850,0,1,1,100,1,5 +2860,0,1,1,100,1,5 +2870,0,1,1,100,1,5 +2880,0,1,1,100,1,5 +2890,0,1,1,100,1,5 +2900,0,1,1,100,1,5 +2910,0,1,1,100,1,5 +2920,0,1,1,100,1,5 +2930,0,1,1,100,1,5 +2940,0,1,1,100,1,5 +2950,0,1,1,100,1,5 +2960,0,1,1,100,1,5 +2970,0,1,1,100,1,5 +2980,0,1,1,100,1,5 +2990,0,1,1,100,1,5 +3000,0,1,1,100,1,5 +3010,0,1,1,100,1,5 +3020,0,1,1,100,1,5 +3030,0,1,1,100,1,5 +3040,0,1,1,100,1,5 +3050,0,1,1,100,1,5 +3060,0,1,1,100,1,5 +3070,0,1,1,100,1,5 +3080,0,1,1,100,1,5 +3090,0,1,1,100,1,5 +3100,0,1,1,100,1,5 +3110,0,1,1,100,1,5 +3120,0,1,1,100,1,5 +3130,0,1,1,100,1,5 +3140,0,1,1,100,1,5 +3150,0,1,1,100,1,5 +3160,0,1,1,100,1,5 +3170,0,1,1,100,1,5 +3180,0,1,1,100,1,5 +3190,0,1,1,100,1,5 +3200,0,1,1,100,1,5 +3210,0,1,1,100,1,5 +3220,0,1,1,100,1,5 +3230,0,1,1,100,1,5 +3240,0,1,1,100,1,5 +3250,0,1,1,100,1,5 +3260,0,1,1,100,1,5 +3270,0,1,1,100,1,5 +3280,0,1,1,100,1,5 +3290,0,1,1,100,1,5 +3300,0,1,1,100,1,5 +3310,0,1,1,100,1,5 +3320,0,1,1,100,1,5 +3330,0,1,1,100,1,5 +3340,0,1,1,100,1,5 +3350,0,1,1,100,1,5 +3360,0,1,1,100,1,5 +3370,0,1,1,100,1,5 +3380,0,1,1,100,1,5 +3390,0,1,1,100,1,5 +3400,0,1,1,100,1,5 +3410,0,1,1,100,1,5 +3420,0,1,1,100,1,5 +3430,0,1,1,100,1,5 +3440,0,1,1,100,1,5 +3450,0,1,1,100,1,5 +3460,0,1,1,100,1,5 +3470,0,1,1,100,1,5 +3480,0,1,1,100,1,5 +3490,0,1,1,100,1,5 +3500,0,1,1,100,1,5 +3510,0,1,1,100,1,5 +3520,0,1,1,100,1,5 +3530,0,1,1,100,1,5 +3540,0,1,1,100,1,5 +3550,0,1,1,100,1,5 +3560,0,1,1,100,1,5 +3570,0,1,1,100,1,5 +3580,0,1,1,100,1,5 +3590,0,1,1,100,1,5 +3600,0,1,1,100,1,5 +3610,0,1,1,100,1,5 +3620,0,1,1,100,1,5 +3630,0,1,1,100,1,5 +3640,0,1,1,100,1,5 +3650,0,1,1,100,1,5 +3660,0,1,1,100,1,5 +3670,0,1,1,100,1,5 +3680,0,1,1,100,1,5 +3690,0,1,1,100,1,5 +3700,0,1,1,100,1,5 +3710,0,1,1,100,1,5 +3720,0,1,1,100,1,5 +3730,0,1,1,100,1,5 +3740,0,1,1,100,1,5 +3750,0,1,1,100,1,5 +3760,0,1,1,100,1,5 +3770,0,1,1,100,1,5 +3780,0,1,1,100,1,5 +3790,0,1,1,100,1,5 +3800,0,1,1,100,1,5 +3810,0,1,1,100,1,5 +3820,0,1,1,100,1,5 +3830,0,1,1,100,1,5 +3840,0,1,1,100,1,5 +3850,0,1,1,100,1,5 +3860,0,1,1,100,1,5 +3870,0,1,1,100,1,5 +3880,0,1,1,100,1,5 +3890,0,1,1,100,1,5 +3900,0,1,1,100,1,5 +3910,0,1,1,100,1,5 +3920,0,1,1,100,1,5 +3930,0,1,1,100,1,5 +3940,0,1,1,100,1,5 +3950,0,1,1,100,1,5 +3960,0,1,1,100,1,5 +3970,0,1,1,100,1,5 +3980,0,1,1,100,1,5 +3990,0,1,1,100,1,5 +4000,0,1,1,100,1,5 +4010,0,1,1,100,1,5 +4020,0,1,1,100,1,5 +4030,0,1,1,100,1,5 +4040,0,1,1,100,1,5 +4050,0,1,1,100,1,5 +4060,0,1,1,100,1,5 +4070,0,1,1,100,1,5 +4080,0,1,1,100,1,5 +4090,0,1,1,100,1,5 +4100,0,1,1,100,1,5 +4110,0,1,1,100,1,5 +4120,0,1,1,100,1,5 +4130,0,1,1,100,1,5 +4140,0,1,1,100,1,5 +4150,0,1,1,100,1,5 +4160,0,1,1,100,1,5 +4170,0,1,1,100,1,5 +4180,0,1,1,100,1,5 +4190,0,1,1,100,1,5 +4200,0,1,1,100,1,5 +4210,0,1,1,100,1,5 +4220,0,1,1,100,1,5 +4230,0,1,1,100,1,5 +4240,0,1,1,100,1,5 +4250,0,1,1,100,1,5 +4260,0,1,1,100,1,5 +4270,0,1,1,100,1,5 +4280,0,1,1,100,1,5 +4290,0,1,1,100,1,5 +4300,0,1,1,100,1,5 +4310,0,1,1,100,1,5 +4320,0,1,1,100,1,5 +4330,0,1,1,100,1,5 +4340,0,1,1,100,1,5 +4350,0,1,1,100,1,5 +4360,0,1,1,100,1,5 +4370,0,1,1,100,1,5 +4380,0,1,1,100,1,5 +4390,0,1,1,100,1,5 +4400,0,1,1,100,1,5 +4410,0,1,1,100,1,5 +4420,0,1,1,100,1,5 +4430,0,1,1,100,1,5 +4440,0,1,1,100,1,5 +4450,0,1,1,100,1,5 +4460,0,1,1,100,1,5 +4470,0,1,1,100,1,5 +4480,0,1,1,100,1,5 +4490,0,1,1,100,1,5 +4500,0,1,1,100,1,5 +4510,0,1,1,100,1,5 +4520,0,1,1,100,1,5 +4530,0,1,1,100,1,5 +4540,0,1,1,100,1,5 +4550,0,1,1,100,1,5 +4560,0,1,1,100,1,5 +4570,0,1,1,100,1,5 +4580,0,1,1,100,1,5 +4590,0,1,1,100,1,5 +4600,0,1,1,100,1,5 +4610,0,1,1,100,1,5 +4620,0,1,1,100,1,5 +4630,0,1,1,100,1,5 +4640,0,1,1,100,1,5 +4650,0,1,1,100,1,5 +4660,0,1,1,100,1,5 +4670,0,1,1,100,1,5 +4680,0,1,1,100,1,5 +4690,0,1,1,100,1,5 +4700,0,1,1,100,1,5 +4710,0,1,1,100,1,5 +4720,0,1,1,100,1,5 +4730,0,1,1,100,1,5 +4740,0,1,1,100,1,5 +4750,0,1,1,100,1,5 +4760,0,1,1,100,1,5 +4770,0,1,1,100,1,5 +4780,0,1,1,100,1,5 +4790,0,1,1,100,1,5 +4800,0,1,1,100,1,5 +4810,0,1,1,100,1,5 +4820,0,1,1,100,1,5 +4830,0,1,1,100,1,5 +4840,0,1,1,100,1,5 +4850,0,1,1,100,1,5 +4860,0,1,1,100,1,5 +4870,0,1,1,100,1,5 +4880,0,1,1,100,1,5 +4890,0,1,1,100,1,5 +4900,0,1,1,100,1,5 +4910,0,1,1,100,1,5 +4920,0,1,1,100,1,5 +4930,0,1,1,100,1,5 +4940,0,1,1,100,1,5 +4950,0,1,1,100,1,5 +4960,0,1,1,100,1,5 +4970,0,1,1,100,1,5 +4980,0,1,1,100,1,5 +4990,0,1,1,100,1,5 +5000,0,2,2,100,1,5 +5010,0,2,2,100,1,5 +5020,0,2,2,100,1,5 +5030,0,2,2,100,1,5 +5040,0,2,2,100,1,5 +5050,0,2,2,100,1,5 +5060,0,2,2,100,1,5 +5070,0,2,2,100,1,5 +5080,0,2,2,100,1,5 +5090,0,2,2,100,1,5 +5100,0,2,2,100,1,5 +5110,0,2,2,100,1,5 +5120,0,2,2,100,1,5 +5130,0,2,2,100,1,5 +5140,0,2,2,100,1,5 +5150,0,2,2,100,1,5 +5160,0,2,2,100,1,5 +5170,0,2,2,100,1,5 +5180,0,2,2,100,1,5 +5190,0,2,2,100,1,5 +5200,0,2,2,100,1,5 +5210,0,2,2,100,1,5 +5220,0,2,2,100,1,5 +5230,0,2,2,100,1,5 +5240,0,2,2,100,1,5 +5250,0,2,2,100,1,5 +5260,0,2,2,100,1,5 +5270,0,2,2,100,1,5 +5280,0,2,2,100,1,5 +5290,0,2,2,100,1,5 +5300,0,2,2,100,1,5 +5310,0,2,2,100,1,5 +5320,0,2,2,100,1,5 +5330,0,2,2,100,1,5 +5340,0,2,2,100,1,5 +5350,0,2,2,100,1,5 +5360,0,2,2,100,1,5 +5370,0,2,2,100,1,5 +5380,0,2,2,100,1,5 +5390,0,2,2,100,1,5 +5400,0,2,2,100,1,5 +5410,0,2,2,100,1,5 +5420,0,2,2,100,1,5 +5430,0,2,2,100,1,5 +5440,0,2,2,100,1,5 +5450,0,2,2,100,1,5 +5460,0,2,2,100,1,5 +5470,0,2,2,100,1,5 +5480,0,2,2,100,1,5 +5490,0,2,2,100,1,5 +5500,0,2,2,100,1,5 +5510,0,2,2,100,1,5 +5520,0,2,2,100,1,5 +5530,0,2,2,100,1,5 +5540,0,2,2,100,1,5 +5550,0,2,2,100,1,5 +5560,0,2,2,100,1,5 +5570,0,2,2,100,1,5 +5580,0,2,2,100,1,5 +5590,0,2,2,100,1,5 +5600,0,2,2,100,1,5 +5610,0,2,2,100,1,5 +5620,0,2,2,100,1,5 +5630,0,2,2,100,1,5 +5640,0,2,2,100,1,5 +5650,0,2,2,100,1,5 +5660,0,2,2,100,1,5 +5670,0,2,2,100,1,5 +5680,0,2,2,100,1,5 +5690,0,2,2,100,1,5 +5700,0,2,2,100,1,5 +5710,0,2,2,100,1,5 +5720,0,2,2,100,1,5 +5730,0,2,2,100,1,5 +5740,0,2,2,100,1,5 +5750,0,2,2,100,1,5 +5760,0,2,2,100,1,5 +5770,0,2,2,100,1,5 +5780,0,2,2,100,1,5 +5790,0,2,2,100,1,5 +5800,0,2,2,100,1,5 +5810,0,2,2,100,1,5 +5820,0,2,2,100,1,5 +5830,0,2,2,100,1,5 +5840,0,2,2,100,1,5 +5850,0,2,2,100,1,5 +5860,0,2,2,100,1,5 +5870,0,2,2,100,1,5 +5880,0,2,2,100,1,5 +5890,0,2,2,100,1,5 +5900,0,2,2,100,1,5 +5910,0,2,2,100,1,5 +5920,0,2,2,100,1,5 +5930,0,2,2,100,1,5 +5940,0,2,2,100,1,5 +5950,0,2,2,100,1,5 +5960,0,2,2,100,1,5 +5970,0,2,2,100,1,5 +5980,0,2,2,100,1,5 +5990,0,2,2,100,1,5 +6000,0,2,2,100,1,5 +6010,0,2,2,100,1,5 +6020,0,2,2,100,1,5 +6030,0,2,2,100,1,5 +6040,0,2,2,100,1,5 +6050,0,2,2,100,1,5 +6060,0,2,2,100,1,5 +6070,0,2,2,100,1,5 +6080,0,2,2,100,1,5 +6090,0,2,2,100,1,5 +6100,0,2,2,100,1,5 +6110,0,2,2,100,1,5 +6120,0,2,2,100,1,5 +6130,0,2,2,100,1,5 +6140,0,2,2,100,1,5 +6150,0,2,2,100,1,5 +6160,0,2,2,100,1,5 +6170,0,2,2,100,1,5 +6180,0,2,2,100,1,5 +6190,0,2,2,100,1,5 +6200,0,2,2,100,1,5 +6210,0,2,2,100,1,5 +6220,0,2,2,100,1,5 +6230,0,2,2,100,1,5 +6240,0,2,2,100,1,5 +6250,0,2,2,100,1,5 +6260,0,2,2,100,1,5 +6270,0,2,2,100,1,5 +6280,0,2,2,100,1,5 +6290,0,2,2,100,1,5 +6300,0,2,2,100,1,5 +6310,0,2,2,100,1,5 +6320,0,2,2,100,1,5 +6330,0,2,2,100,1,5 +6340,0,2,2,100,1,5 +6350,0,2,2,100,1,5 +6360,0,2,2,100,1,5 +6370,0,2,2,100,1,5 +6380,0,2,2,100,1,5 +6390,0,2,2,100,1,5 +6400,0,2,2,100,1,5 +6410,0,2,2,100,1,5 +6420,0,2,2,100,1,5 +6430,0,2,2,100,1,5 +6440,0,2,2,100,1,5 +6450,0,2,2,100,1,5 +6460,0,2,2,100,1,5 +6470,0,2,2,100,1,5 +6480,0,2,2,100,1,5 +6490,0,2,2,100,1,5 +6500,0,2,2,100,1,5 +6510,0,2,2,100,1,5 +6520,0,2,2,100,1,5 +6530,0,2,2,100,1,5 +6540,0,2,2,100,1,5 +6550,0,2,2,100,1,5 +6560,0,2,2,100,1,5 +6570,0,2,2,100,1,5 +6580,0,2,2,100,1,5 +6590,0,2,2,100,1,5 +6600,0,2,2,100,1,5 +6610,0,2,2,100,1,5 +6620,0,2,2,100,1,5 +6630,0,2,2,100,1,5 +6640,0,2,2,100,1,5 +6650,0,2,2,100,1,5 +6660,0,2,2,100,1,5 +6670,0,2,2,100,1,5 +6680,0,2,2,100,1,5 +6690,0,2,2,100,1,5 +6700,0,2,2,100,1,5 +6710,0,2,2,100,1,5 +6720,0,2,2,100,1,5 +6730,0,2,2,100,1,5 +6740,0,2,2,100,1,5 +6750,0,2,2,100,1,5 +6760,0,2,2,100,1,5 +6770,0,2,2,100,1,5 +6780,0,2,2,100,1,5 +6790,0,2,2,100,1,5 +6800,0,2,2,100,1,5 +6810,0,2,2,100,1,5 +6820,0,2,2,100,1,5 +6830,0,2,2,100,1,5 +6840,0,2,2,100,1,5 +6850,0,2,2,100,1,5 +6860,0,2,2,100,1,5 +6870,0,2,2,100,1,5 +6880,0,2,2,100,1,5 +6890,0,2,2,100,1,5 +6900,0,2,2,100,1,5 +6910,0,2,2,100,1,5 +6920,0,2,2,100,1,5 +6930,0,2,2,100,1,5 +6940,0,2,2,100,1,5 +6950,0,2,2,100,1,5 +6960,0,2,2,100,1,5 +6970,0,2,2,100,1,5 +6980,0,2,2,100,1,5 +6990,0,2,2,100,1,5 +7000,0,2,2,100,1,5 +7010,0,2,2,100,1,5 +7020,0,2,2,100,1,5 +7030,0,2,2,100,1,5 +7040,0,2,2,100,1,5 +7050,0,2,2,100,1,5 +7060,0,2,2,100,1,5 +7070,0,2,2,100,1,5 +7080,0,2,2,100,1,5 +7090,0,2,2,100,1,5 +7100,0,2,2,100,1,5 +7110,0,2,2,100,1,5 +7120,0,2,2,100,1,5 +7130,0,2,2,100,1,5 +7140,0,2,2,100,1,5 +7150,0,2,2,100,1,5 +7160,0,2,2,100,1,5 +7170,0,2,2,100,1,5 +7180,0,2,2,100,1,5 +7190,0,2,2,100,1,5 +7200,0,2,2,100,1,5 +7210,0,2,2,100,1,5 +7220,0,2,2,100,1,5 +7230,0,2,2,100,1,5 +7240,0,2,2,100,1,5 +7250,0,2,2,100,1,5 +7260,0,2,2,100,1,5 +7270,0,2,2,100,1,5 +7280,0,2,2,100,1,5 +7290,0,2,2,100,1,5 +7300,0,2,2,100,1,5 +7310,0,2,2,100,1,5 +7320,0,2,2,100,1,5 +7330,0,2,2,100,1,5 +7340,0,2,2,100,1,5 +7350,0,2,2,100,1,5 +7360,0,2,2,100,1,5 +7370,0,2,2,100,1,5 +7380,0,2,2,100,1,5 +7390,0,2,2,100,1,5 +7400,0,2,2,100,1,5 +7410,0,2,2,100,1,5 +7420,0,2,2,100,1,5 +7430,0,2,2,100,1,5 +7440,0,2,2,100,1,5 +7450,0,2,2,100,1,5 +7460,0,2,2,100,1,5 +7470,0,2,2,100,1,5 +7480,0,2,2,100,1,5 +7490,0,2,2,100,1,5 +7500,0,2,2,100,1,5 +7510,0,2,2,100,1,5 +7520,0,2,2,100,1,5 +7530,0,2,2,100,1,5 +7540,0,2,2,100,1,5 +7550,0,2,2,100,1,5 +7560,0,2,2,100,1,5 +7570,0,2,2,100,1,5 +7580,0,2,2,100,1,5 +7590,0,2,2,100,1,5 +7600,0,2,2,100,1,5 +7610,0,2,2,100,1,5 +7620,0,2,2,100,1,5 +7630,0,2,2,100,1,5 +7640,0,2,2,100,1,5 +7650,0,2,2,100,1,5 +7660,0,2,2,100,1,5 +7670,0,2,2,100,1,5 +7680,0,2,2,100,1,5 +7690,0,2,2,100,1,5 +7700,0,2,2,100,1,5 +7710,0,2,2,100,1,5 +7720,0,2,2,100,1,5 +7730,0,2,2,100,1,5 +7740,0,2,2,100,1,5 +7750,0,2,2,100,1,5 +7760,0,2,2,100,1,5 +7770,0,2,2,100,1,5 +7780,0,2,2,100,1,5 +7790,0,2,2,100,1,5 +7800,0,2,2,100,1,5 +7810,0,2,2,100,1,5 +7820,0,2,2,100,1,5 +7830,0,2,2,100,1,5 +7840,0,2,2,100,1,5 +7850,0,2,2,100,1,5 +7860,0,2,2,100,1,5 +7870,0,2,2,100,1,5 +7880,0,2,2,100,1,5 +7890,0,2,2,100,1,5 +7900,0,2,2,100,1,5 +7910,0,2,2,100,1,5 +7920,0,2,2,100,1,5 +7930,0,2,2,100,1,5 +7940,0,2,2,100,1,5 +7950,0,2,2,100,1,5 +7960,0,2,2,100,1,5 +7970,0,2,2,100,1,5 +7980,0,2,2,100,1,5 +7990,0,2,2,100,1,5 +8000,0,2,2,100,1,5 +8010,0,2,2,100,1,5 +8020,0,2,2,100,1,5 +8030,0,2,2,100,1,5 +8040,0,2,2,100,1,5 +8050,0,2,2,100,1,5 +8060,0,2,2,100,1,5 +8070,0,2,2,100,1,5 +8080,0,2,2,100,1,5 +8090,0,2,2,100,1,5 +8100,0,2,2,100,1,5 +8110,0,2,2,100,1,5 +8120,0,2,2,100,1,5 +8130,0,2,2,100,1,5 +8140,0,2,2,100,1,5 +8150,0,2,2,100,1,5 +8160,0,2,2,100,1,5 +8170,0,2,2,100,1,5 +8180,0,2,2,100,1,5 +8190,0,2,2,100,1,5 +8200,0,2,2,100,1,5 +8210,0,2,2,100,1,5 +8220,0,2,2,100,1,5 +8230,0,2,2,100,1,5 +8240,0,2,2,100,1,5 +8250,0,2,2,100,1,5 +8260,0,2,2,100,1,5 +8270,0,2,2,100,1,5 +8280,0,2,2,100,1,5 +8290,0,2,2,100,1,5 +8300,0,2,2,100,1,5 +8310,0,2,2,100,1,5 +8320,0,2,2,100,1,5 +8330,0,2,2,100,1,5 +8340,0,2,2,100,1,5 +8350,0,2,2,100,1,5 +8360,0,2,2,100,1,5 +8370,0,2,2,100,1,5 +8380,0,2,2,100,1,5 +8390,0,2,2,100,1,5 +8400,0,2,2,100,1,5 +8410,0,2,2,100,1,5 +8420,0,2,2,100,1,5 +8430,0,2,2,100,1,5 +8440,0,2,2,100,1,5 +8450,0,2,2,100,1,5 +8460,0,2,2,100,1,5 +8470,0,2,2,100,1,5 +8480,0,2,2,100,1,5 +8490,0,2,2,100,1,5 +8500,0,2,2,100,1,5 +8510,0,2,2,100,1,5 +8520,0,2,2,100,1,5 +8530,0,2,2,100,1,5 +8540,0,2,2,100,1,5 +8550,0,2,2,100,1,5 +8560,0,2,2,100,1,5 +8570,0,2,2,100,1,5 +8580,0,2,2,100,1,5 +8590,0,2,2,100,1,5 +8600,0,2,2,100,1,5 +8610,0,2,2,100,1,5 +8620,0,2,2,100,1,5 +8630,0,2,2,100,1,5 +8640,0,2,2,100,1,5 +8650,0,2,2,100,1,5 +8660,0,2,2,100,1,5 +8670,0,2,2,100,1,5 +8680,0,2,2,100,1,5 +8690,0,2,2,100,1,5 +8700,0,2,2,100,1,5 +8710,0,2,2,100,1,5 +8720,0,2,2,100,1,5 +8730,0,2,2,100,1,5 +8740,0,2,2,100,1,5 +8750,0,2,2,100,1,5 +8760,0,2,2,100,1,5 +8770,0,2,2,100,1,5 +8780,0,2,2,100,1,5 +8790,0,2,2,100,1,5 +8800,0,2,2,100,1,5 +8810,0,2,2,100,1,5 +8820,0,2,2,100,1,5 +8830,0,2,2,100,1,5 +8840,0,2,2,100,1,5 +8850,0,2,2,100,1,5 +8860,0,2,2,100,1,5 +8870,0,2,2,100,1,5 +8880,0,2,2,100,1,5 +8890,0,2,2,100,1,5 +8900,0,2,2,100,1,5 +8910,0,2,2,100,1,5 +8920,0,2,2,100,1,5 +8930,0,2,2,100,1,5 +8940,0,2,2,100,1,5 +8950,0,2,2,100,1,5 +8960,0,2,2,100,1,5 +8970,0,2,2,100,1,5 +8980,0,2,2,100,1,5 +8990,0,2,2,100,1,5 +9000,0,2,2,100,1,5 +9010,0,2,2,100,1,5 +9020,0,2,2,100,1,5 +9030,0,2,2,100,1,5 +9040,0,2,2,100,1,5 +9050,0,2,2,100,1,5 +9060,0,2,2,100,1,5 +9070,0,2,2,100,1,5 +9080,0,2,2,100,1,5 +9090,0,2,2,100,1,5 +9100,0,2,2,100,1,5 +9110,0,2,2,100,1,5 +9120,0,2,2,100,1,5 +9130,0,2,2,100,1,5 +9140,0,2,2,100,1,5 +9150,0,2,2,100,1,5 +9160,0,2,2,100,1,5 +9170,0,2,2,100,1,5 +9180,0,2,2,100,1,5 +9190,0,2,2,100,1,5 +9200,0,2,2,100,1,5 +9210,0,2,2,100,1,5 +9220,0,2,2,100,1,5 +9230,0,2,2,100,1,5 +9240,0,2,2,100,1,5 +9250,0,2,2,100,1,5 +9260,0,2,2,100,1,5 +9270,0,2,2,100,1,5 +9280,0,2,2,100,1,5 +9290,0,2,2,100,1,5 +9300,0,2,2,100,1,5 +9310,0,2,2,100,1,5 +9320,0,2,2,100,1,5 +9330,0,2,2,100,1,5 +9340,0,2,2,100,1,5 +9350,0,2,2,100,1,5 +9360,0,2,2,100,1,5 +9370,0,2,2,100,1,5 +9380,0,2,2,100,1,5 +9390,0,2,2,100,1,5 +9400,0,2,2,100,1,5 +9410,0,2,2,100,1,5 +9420,0,2,2,100,1,5 +9430,0,2,2,100,1,5 +9440,0,2,2,100,1,5 +9450,0,2,2,100,1,5 +9460,0,2,2,100,1,5 +9470,0,2,2,100,1,5 +9480,0,2,2,100,1,5 +9490,0,2,2,100,1,5 +9500,0,2,2,100,1,5 +9510,0,2,2,100,1,5 +9520,0,2,2,100,1,5 +9530,0,2,2,100,1,5 +9540,0,2,2,100,1,5 +9550,0,2,2,100,1,5 +9560,0,2,2,100,1,5 +9570,0,2,2,100,1,5 +9580,0,2,2,100,1,5 +9590,0,2,2,100,1,5 +9600,0,2,2,100,1,5 +9610,0,2,2,100,1,5 +9620,0,2,2,100,1,5 +9630,0,2,2,100,1,5 +9640,0,2,2,100,1,5 +9650,0,2,2,100,1,5 +9660,0,2,2,100,1,5 +9670,0,2,2,100,1,5 +9680,0,2,2,100,1,5 +9690,0,2,2,100,1,5 +9700,0,2,2,100,1,5 +9710,0,2,2,100,1,5 +9720,0,2,2,100,1,5 +9730,0,2,2,100,1,5 +9740,0,2,2,100,1,5 +9750,0,2,2,100,1,5 +9760,0,2,2,100,1,5 +9770,0,2,2,100,1,5 +9780,0,2,2,100,1,5 +9790,0,2,2,100,1,5 +9800,0,2,2,100,1,5 +9810,0,2,2,100,1,5 +9820,0,2,2,100,1,5 +9830,0,2,2,100,1,5 +9840,0,2,2,100,1,5 +9850,0,2,2,100,1,5 +9860,0,2,2,100,1,5 +9870,0,2,2,100,1,5 +9880,0,2,2,100,1,5 +9890,0,2,2,100,1,5 +9900,0,2,2,100,1,5 +9910,0,2,2,100,1,5 +9920,0,2,2,100,1,5 +9930,0,2,2,100,1,5 +9940,0,2,2,100,1,5 +9950,0,2,2,100,1,5 +9960,0,2,2,100,1,5 +9970,0,2,2,100,1,5 +9980,0,2,2,100,1,5 +9990,0,2,2,100,1,5 +10000,0,2,2,100,1,5 +10010,0,2,2,100,1,5 +10020,0,2,2,100,1,5 +10030,0,2,2,100,1,5 +10040,0,2,2,100,1,5 +10050,0,2,2,100,1,5 +10060,0,2,2,100,1,5 +10070,0,2,2,100,1,5 +10080,0,2,2,100,1,5 +10090,0,2,2,100,1,5 +10100,0,2,2,100,1,5 diff --git a/EC-GN-JA-PCF/.svn/pristine/2d/2ded610fa2d2a0912a5b2e2b970829e1b82e3a2c.svn-base b/EC-GN-JA-PCF/.svn/pristine/2d/2ded610fa2d2a0912a5b2e2b970829e1b82e3a2c.svn-base new file mode 100644 index 0000000..1d3f9c1 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/2d/2ded610fa2d2a0912a5b2e2b970829e1b82e3a2c.svn-base @@ -0,0 +1,206 @@ +/** + * @file JATerminalInterfaceGAM.cpp + * @brief Source file for class JATerminalInterfaceGAM + * @date Feb 19, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JATerminalInterfaceGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JATerminalInterfaceGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JATerminalInterfaceGAM::JATerminalInterfaceGAM() { + + // Fixed GAM input + aps_hvon_term = 0; + + // Parameters which get from Input signals. + mhvps_hvon = NULL_PTR(MARTe::uint32 *); + aps_hvon = NULL_PTR(MARTe::uint32 *); + aps_swon = NULL_PTR(MARTe::uint32 *); + bps_hvon = NULL_PTR(MARTe::uint32 *); + bps_swon = NULL_PTR(MARTe::uint32 *); + + stateMachineOutput = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignalNI6259 = NULL_PTR(MARTe::uint32 *); + outputSignalNI6528P3 = NULL_PTR(MARTe::uint8 *); + outputSignalNI6528P4 = NULL_PTR(MARTe::uint8 *); + + aps_hvon_state = 0; + aps_swon_state = 0; + mhvps_hvon_state = 0; + bps_hvon_state = 0; + bps_swon_state = 0; + p3Value = 0; + p4Value = 0; +} + +JATerminalInterfaceGAM::~JATerminalInterfaceGAM() { +} + +bool JATerminalInterfaceGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("mhvps_hvon_term", mhvps_hvon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon_term", aps_hvon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon_term", aps_swon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon_term", bps_hvon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon_term", bps_swon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon_term shall be specified"); + } + } + return ok; +} + +bool JATerminalInterfaceGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JATerminalInterfaceGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 9u); + if (ok) { + ok = (numberOfOutputSignals == 3u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Three output signals shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit || inputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint8", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint8", signalName.Buffer()); + } + } + } + if (ok) { + //mhvps_manm = reinterpret_cast(GetInputSignalMemory(0)); + mhvps_hvon = reinterpret_cast(GetInputSignalMemory(0)); + //aps_manm = reinterpret_cast(GetInputSignalMemory(2)); + aps_hvon = reinterpret_cast(GetInputSignalMemory(1)); + aps_swon = reinterpret_cast(GetInputSignalMemory(2)); + //bps_manm = reinterpret_cast(GetInputSignalMemory(5)); + bps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + bps_swon = reinterpret_cast(GetInputSignalMemory(4)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(5)); + stateMachineOutput = reinterpret_cast(GetInputSignalMemory(6)); + ni6528p3Value = reinterpret_cast(GetInputSignalMemory(7)); + ni6528p4Value = reinterpret_cast(GetInputSignalMemory(8)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(0)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(1)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(2)); + + } + return ok; +} + +bool JATerminalInterfaceGAM::Execute() { + using namespace MARTe; + uint8 sm = *stateMachineOutput; + + + //Update HVPS state + aps_hvon_state = ((sm >> (0))&1); + aps_swon_state = ((sm >> (4))&1); + mhvps_hvon_state = ((sm >> (2))&1); + bps_hvon_state = ((sm >> (1))&1); + bps_swon_state = ((sm >> (3))&1); + + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state; + *outputSignalNI6259 = 1*aps_swon_state; + //uint8 ni6528p3ValueTemp = 0;//*ni6528p3Value; + //ni6528p3ValueTemp &= ~(1<<2); //Does not turn on ni6258 aps switch + //Update terminal value + //*outputSignalNI6528P3 = ~(ni6528p3ValueTemp | p3Value); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + + p4Value = 8*mhvps_hvon_state; + *outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + return true; +} + +CLASS_REGISTER(JATerminalInterfaceGAM, "1.0") diff --git a/EC-GN-JA-PCF/.svn/pristine/2e/2ed144928052118ee7319dac0de6709099277527.svn-base b/EC-GN-JA-PCF/.svn/pristine/2e/2ed144928052118ee7319dac0de6709099277527.svn-base new file mode 100644 index 0000000..1d1e6ee --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/2e/2ed144928052118ee7319dac0de6709099277527.svn-base @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/2f/2f0379f7e9df3871844046ef2e1f3ceada17bd06.svn-base b/EC-GN-JA-PCF/.svn/pristine/2f/2f0379f7e9df3871844046ef2e1f3ceada17bd06.svn-base new file mode 100644 index 0000000..1566c70 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/2f/2f0379f7e9df3871844046ef2e1f3ceada17bd06.svn-base @@ -0,0 +1,396 @@ ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +Start = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "WAITSTANDBY" + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITSTANDBY = { + Class = ReferenceContainer + +Stay = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "WAITSTANDBY" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } +} ++JAGyrotronRTApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + +GAMSDNSubCommand = { + Class = IOGAM + InputSignals = { + Command = { + DataSource = SDNSubCommands + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 64 + Ranges = {{0 0}} + Frequency = 1 + } + ESDNTime = { + DataSource = SDNSubCommands + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTimeDisplay = { + Alias = ESDNTime + DataSource = SDNSubCommands + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + OutputSignals = { + Command = { + DataSource = Display + Type = uint16 + } + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + ESDNTimeDisplay = { + DataSource = Display + Type = uint32 + } + } + } + +GAMSDNSubWaveform = { + Class = IOGAM + InputSignals = { + GYA_FHPS_SP = { + DataSource = SDNSubWaveform + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_MCPS_SP = { + DataSource = SDNSubWaveform + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_CCPS_SP = { + DataSource = SDNSubWaveform + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + MHVPS_SP = { + DataSource = SDNSubWaveform + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_BPS_SP = { + DataSource = SDNSubWaveform + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_APS_SP = { + DataSource = SDNSubWaveform + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + WaveformPacketIDFor1kHz = { + DataSource = SDNSubWaveform + Alias = WaveformPacketID + Type = uint16 + } + } + OutputSignals = { + GYA_FHPS_SP = { + DataSource = DDB1 + Type = float32 + } + GYA_MCPS_SP = { + DataSource = DDB1 + Type = float32 + } + GYA_CCPS_SP = { + DataSource = DDB1 + Type = float32 + } + MHVPS_SP = { + DataSource = DDB1 + Type = float32 + } + GYA_BPS_SP = { + DataSource = DDB1 + Type = float32 + } + GYA_APS_SP = { + DataSource = DDB1 + Type = float32 + } + WaveformPacketIDFor1kHz = { + DataSource = DDB1 + Alias = WaveformPacketID + Type = uint16 + } + } + } + +GAMReply = { + Class = IOGAM + InputSignals = { + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + WaveformPacketID = { + DataSource = DDB1 + Type = uint16 + } + } + OutputSignals = { + ESDNTime = { + DataSource = SDNReply + Type = uint32 + Trigger = 1 + } + ReplyWaveformAck = { + DataSource = SDNReply + Type = uint16 + } + } + } + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + } + +Timings = { + Class = TimingDataSource + } + +Display = { + Class = LoggerDataSource + } + +SDNSubCommands = { + Class = SDN::SDNSubscriber + Topic = ECPC2SCUJA + Interface = lo + CPUs = 0x2 + Locked = 1 + Timeout = 1000 // TODO: change to 1 ms + Signals = { + Header = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + Command = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 64 + } + } + } + +SDNReply = { + Class = SDN::SDNPublisher + Topic = SCUJA2ECPC + Interface = lo + CPUs = 0x8 + Locked = 1 + Signals = { + Header = { + Type = uint8 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ReplyStatus = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ReplyWaveformAck = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + } + +SDNSubWaveform = { + Class = SDN::SDNSubscriber + Topic = ECPC2SCUJAWF + Interface = lo + Locked = 1 + Timeout = 1000 // TODO: change to 1 ms + Signals = { + Header = { + Type = uint8 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + WaveformPacketID = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_MCPS_SP = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_CCPS_SP = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + MHVPS_SP = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_BPS_SP = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_APS_SP = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + } + } + +States = { + Class = ReferenceContainer + +WaitStandby = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {GAMSDNSubCommand GAMSDNSubWaveform GAMReply} + CPUs = 0x1 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/2f/2f7035aa607a78aab64352cf34bd25d8c7fb85fd.svn-base b/EC-GN-JA-PCF/.svn/pristine/2f/2f7035aa607a78aab64352cf34bd25d8c7fb85fd.svn-base new file mode 100644 index 0000000..fc607b1 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/2f/2f7035aa607a78aab64352cf34bd25d8c7fb85fd.svn-base @@ -0,0 +1,68 @@ +//+====================================================================== +// $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-sdd-translator-parts/tags/CODAC-CORE-6.0.0/org.iter.codac.sdd.translators/src/main/resources/templates/sdn/configure_sdn.cpp.vm $ +// $Id: configure_sdn.cpp.vm 83098 2018-01-08 13:23:38Z cesnikt $ +// +// Project : CODAC Core System +// +// Description : SDN Program - Gyrotron01DAN +// +// Author : Kirti Mahajan, Lana Abadie and TCS (link with velocity and SDD model) +// +// Copyright (c) : 2010-2018 ITER Organization, +// CS 90 046 +// 13067 St. Paul-lez-Durance Cedex +// France +// +// This file is part of ITER CODAC software. +// For the terms and conditions of redistribution or use of this software +// refer to the file ITER-LICENSE.TXT located in the top level directory +// of the distribution package. +// +//-====================================================================== + +#include + +#include +#include "includetopics.h" + +using namespace std; + +/* Create variables for the topics on which application is publishing */ +//+P===================================================================== +//-P===================================================================== + +/* Create variables for topics on which application is subscribing */ +//+S===================================================================== +//-S===================================================================== + +int configureSDN() +{ + + SR_RET sr_ret = SR_OK; + + //+P===================================================================== + //-P===================================================================== + + //+S===================================================================== + //-S===================================================================== + + return sr_ret; + +} + +int cleanupSDN() +{ + + SR_RET sr_ret = SR_OK; + + /* Unregister publisher */ + //+P===================================================================== + //-P===================================================================== + + /* Unregister subscriber */ + //+S===================================================================== + //-S===================================================================== + + return sr_ret; + +} \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/2f/2f8c561f13a6de3330f5df21840ddef019a3a467.svn-base b/EC-GN-JA-PCF/.svn/pristine/2f/2f8c561f13a6de3330f5df21840ddef019a3a467.svn-base new file mode 100644 index 0000000..b425a77 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/2f/2f8c561f13a6de3330f5df21840ddef019a3a467.svn-base @@ -0,0 +1,195 @@ +#!/bin/bash +#Arguments -f FILENAME -m MESSAGE [-d cgdb|strace] -x DAN_CONFIG_LOCATION -r root +#-f FILENAME=MARTe configuration file +#-m MESSAGE=Start message +#-d cgdb=Run with cgdb +#-d strace=Run with strace +#-x DAN_CONFIG_LOCATION=Location of the DANConfig.xml (e.g. ~/Projects/ECJASDN/Configurations/DANTestConfig.xml) +#-r run as root + +#Run with cgdb or strace? +DEBUG="" + +#Consume input arguments +while [[ $# -gt 1 ]] +do +key="$1" + +case $key in + -f|--file) + FILE="$2" + shift # past argument + ;; + -m|--message) + MESSAGE="$2" + shift # past argument + ;; + -s|--state) + STATE="$2" + shift # past argument + ;; + -d|--debug) + DEBUG="$2" + shift # past argument + ;; + -x|--dan_config) + DAN_CONFIG_LOCATION="$2" + shift # past argument + ;; + -i|--dan_ip) + DAN_MASTER_IP="$2" + shift # past argument + ;; + -r|--root) + RUN_AS_ROOT="root" + shift # past argument + ;; + --default) + DEFAULT=YES + ;; + *) + # unknown option + ;; +esac +shift # past argument or value +done + +if [ -z ${MARTe2_DIR+x} ]; then + echo "Please set the MARTe2_DIR environment variable"; + exit; +fi + +if [ -z ${MARTe2_Components_DIR+x} ]; then + #Check if this is a CCS deployment + MARTe2_Components_DIR_CSS=$MARTe2_DIR/Build/x86-linux/Components/ + if [ -d ${MARTe2_Components_DIR_CSS+x} ]; then + MARTe2_Components_DIR=$MARTe2_DIR + else + echo "Please set the MARTe2_Components_DIR environment variable"; + exit; + fi +fi + +echo $MARTe2_Components_DIR + +LD_LIBRARY_PATH=. +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_DIR/Build/x86-linux/Core/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/EPICSCA/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/LinuxTimer/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/LoggerDataSource/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/DAN/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/NI6259/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/NI6368/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/SDN/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/UDP/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/MDSWriter/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/RealTimeThreadAsyncBridge/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/RealTimeThreadSynchronisation/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/FileDataSource/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/IOGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/BaseLib2GAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/ConversionGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/FilterGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/StatisticsGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/WaveformGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/ConstantGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/Interfaces/BaseLib2Wrapper/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/Interfaces/SysLogger/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/Interfaces/EPICS/ +### Add own datasource lib path +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/DataSources/RandomDataSource/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/DataSources/NI6528/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/DataSources/JAEPICSCA/ +### Add own GAM lib path +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/ESDNValidationGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAMessageGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAPreProgrammedGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JACountdownGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAWaitStandbyGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAConditionalSignalUpdateGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JATimerGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAESDNProcessCommandGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAModeControlGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JATimedSignalUpdateGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAHVArmedSyncGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JARFONSyncGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAWFRecordGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JATriangleWaveGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JARampupGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JACounterGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JARTStateMachineGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JASDNRTStateMachineGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JATerminalInterfaceGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JABitSumGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JASourceChoiseGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JABitReverseGAM/ +### Add EPICS lib path +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$EPICS_BASE/lib/$EPICS_HOST_ARCH +#LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/FilterDownsamplingGAM/ +#LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/mdsplus/lib64/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$SDN_CORE_LIBRARY_DIR +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/codac/lib/ + + +echo $LD_LIBRARY_PATH +export LD_LIBRARY_PATH=$LD_LIBRARY_PATH + +#Starts the DAN services only if required +if [ ! -z "$DAN_CONFIG_LOCATION" ]; then + export DAN_ARCHIVE_MASTER=$DAN_MASTER_IP + echo $DAN_MASTER_IP + /opt/codac/bin/danApiTool api close + /opt/codac/bin/danApiTool api init $DAN_CONFIG_LOCATION +fi + +NR_CPUS=16 +#Setup performance +#Disable CPU speed changing +#service cpuspeed stop +#memo:Redirecting to /bin/systemctl stop cpuspeed.service +#memo:Failed to stop cpuspeed.service: Unit cpuspeed.service not loaded. +# + +# Migrate irq to CPU0 +#for D in $(ls /proc/irq) +#do +#if [ -x "/proc/irq/$D" ] && [ $D != "0" ] +#then +# echo $D +# echo 1 > /proc/irq/$D/smp_affinity +#fi +#done + + +#Location of the MARTe2 application loader +MARTe2APP=$MARTe2_DIR/Build/x86-linux/App/MARTeApp.ex + +#Start with cgdb or with strace +if [ "$DEBUG" = "cgdb" ]; then + cgdb --args $MARTe2APP -l RealTimeLoader -f $FILE -m $MESSAGE +elif [ "$DEBUG" = "strace" ]; then + strace -o/tmp/strace.err $MARTe2APP -l RealTimeLoader -f $FILE -m $MESSAGE +else + if [ -z ${RUN_AS_ROOT+x} ]; then + if [ -z ${STATE+x} ]; then + echo "taskset was not used." + sleep 1 + $MARTe2APP -l RealTimeLoader -f $FILE -m $MESSAGE + else + $MARTe2APP -l RealTimeLoader -f $FILE -s $STATE + fi + else + if [ -z ${STATE+x} ]; then + echo "taskset was used." + sleep 1 + taskset 1 $MARTe2APP -l RealTimeLoader -f $FILE -m $MESSAGE + else + taskset 1 $MARTe2APP -l RealTimeLoader -f $FILE -s $STATE + fi + fi +fi + + +if [ ! -z "$DAN_CONFIG_LOCATION" ]; then + /opt/codac/bin/danApiTool api close +fi diff --git a/EC-GN-JA-PCF/.svn/pristine/32/32acce34150b68fd7a49f282894aec6a5f2323b3.svn-base b/EC-GN-JA-PCF/.svn/pristine/32/32acce34150b68fd7a49f282894aec6a5f2323b3.svn-base new file mode 100644 index 0000000..4b14a4a --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/32/32acce34150b68fd7a49f282894aec6a5f2323b3.svn-base @@ -0,0 +1,23 @@ +importClass(Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener); +importPackage(Packages.org.csstudio.opibuilder.scriptUtil); + +var table = widget.getTable(); +var fct_name = widget.getPropertyValue("name"); + +var selectionChanged = new Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener() { + selectionChanged: function(selection) { + var selectedrow= table.getSelection(); + var cuIndex=selectedrow[0][0]; + var phyName=selectedrow[0][1]; + + // change $(CU_INDEX) substitution + var macroInput = DataUtil.createMacrosInput(true); + macroInput.put("CUB", cuIndex); + macroInput.put("PHY_NAME", phyName); + macroInput.put("FCT_NAME", fct_name); + // open OPI + // see https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-boy/trunk/org.csstudio.opibuilder/src/org/csstudio/opibuilder/scriptUtil/ScriptUtil.java + ScriptUtil.openOPI(widget, fct_name+"-"+cuIndex+"-CubicleContents.opi", 1, macroInput); + } +}; +table.addSelectionChangedListener(selectionChanged); diff --git a/EC-GN-JA-PCF/.svn/pristine/32/32b72edf89e480b7875d15bae68fe7bdccd6a696.svn-base b/EC-GN-JA-PCF/.svn/pristine/32/32b72edf89e480b7875d15bae68fe7bdccd6a696.svn-base new file mode 100644 index 0000000..983ab3d --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/32/32b72edf89e480b7875d15bae68fe7bdccd6a696.svn-base @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=NI6528.x + +PACKAGE=DataSources + +ROOT_DIR=../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(CODAC_ROOT)/include/ + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/NI6528$(LIBEXT) \ + $(BUILD_DIR)/NI6528$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/.svn/pristine/33/334513d1495cb31abb8c1f8354dd1be38aec2c1b.svn-base b/EC-GN-JA-PCF/.svn/pristine/33/334513d1495cb31abb8c1f8354dd1be38aec2c1b.svn-base new file mode 100644 index 0000000..190c39c --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/33/334513d1495cb31abb8c1f8354dd1be38aec2c1b.svn-base @@ -0,0 +1,93 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +# +# Some EPICS PVs need to be simulation mode when we test code without PXI board. +# When user uses sim mode, new value must be written into PV.SVAL and PV itselfself. +# +print '### Start State Machine Sequence Test ###' + +def test_setup(): + """ + Setup EPICS PVs for testing. + Turn simulation mode ON for unavailable device + """ + print '---------- Start setup for the test ----------' + + print '1. set PVs to simulation mode' + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-AI-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF:STAT-AI-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-DI-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF:STAT-DI-SIMM YES', shell=True) + #temporary commentout 2 lines + #res = subprocess.call('caput EC-GN-P01-GAF-MCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF-MCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-GCPS:STAT-SIMM YES', shell=True) + #temporary commentout following line + #res = subprocess.call('caput EC-GN-P01-GBF-GCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-SIMM YES', shell=True) + #temporary commentout following line + #res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-FHPS:STAT-SIMM YES', shell=True) + #temporary commentout following line + #res = subprocess.call('caput EC-GN-P01-GBF-FHPS:STAT-SIMM YES', shell=True) + time.sleep(1) + print '2. Change SCAN mode from I/O Inter to Passive to write sumulated values.' + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1.SCAN Passive', shell=True)#SELECT + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2.SCAN Passive', shell=True)#SELECT + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R.SCAN Passive', shell=True) #STANDBY + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST2R.SCAN Passive', shell=True) #READY + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SCAN Passive', shell=True) #ON + #res = subprocess.call('caput EC-GN-P01-PMF:PSU0000-TYSTA.SCAN Passive', shell=True) + #res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YSTA.SCAN Passive', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YSTA.SCAN Passive', shell=True) + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SCAN Passive', shell=True) #PERMIT + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SCAN Passive', shell=True) #PERMIT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD2.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD3.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD4.SCAN Passive', shell = True) + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS.SCAN Passive', shell = True) #SYNC/ASYNC + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS1.SCAN Passive', shell=True) #CCPS ON REQUEST + time.sleep(1) + print '3. Set pulse length limit mode value and state.' + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 10000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD2-LIM 100000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD3-LIM 1000000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD4-LIM 10000000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD2.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD2 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD3.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD3 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD4.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD4 0', shell = True) #Pulse lenght mode + print '4. Set other operation modes' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-PREP-MODE 0', shell = True) #Pre-pro mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS.SVAL 0', shell = True) #SYNC/ASYNC mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS 0', shell = True) #SYNC/ASYNC mode + res = subprocess.call('caput EC-GN-P01-GAF:STAT-SHORT-PULSE 0',shell = True) #Short pulse mode + time.sleep(1) + print '5. Set a beam-on schedule(10ms diff + 100ms pulse)' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 10000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 20000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 30000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 40000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 50000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 100000', shell=True) + time.sleep(1) + print '6. Reset PLC INTERLOCK' + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP.SIMM 1', shell=True) #PLC Interlock + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP.SCAN 0', shell=True) + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP.SVAL 0', shell=True) + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP 0', shell=True) #CCPS_IS_OPERATION + #res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP.SIMM 1', shell=True) #cRIO Interlock + #res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP.SCAN 0', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP.SVAL 0', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP 0', shell=True) + #res = subprocess.call('caput EC-GN-P01-GPF:STAT-RST-FLT 1', shell=True) + print '---------- END setup for the test ----------' diff --git a/EC-GN-JA-PCF/.svn/pristine/34/345983ee7146674b868eac46600a4e1651f816e5.svn-base b/EC-GN-JA-PCF/.svn/pristine/34/345983ee7146674b868eac46600a4e1651f816e5.svn-base new file mode 100644 index 0000000..cd7a5f1 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/34/345983ee7146674b868eac46600a4e1651f816e5.svn-base @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAWFRecordGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAWFRecordGAM$(LIBEXT) \ + $(BUILD_DIR)/JAWFRecordGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/.svn/pristine/34/34a02f9d077d9daf7d49899fc84237c00a260668.svn-base b/EC-GN-JA-PCF/.svn/pristine/34/34a02f9d077d9daf7d49899fc84237c00a260668.svn-base new file mode 100644 index 0000000..cea80cf --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/34/34a02f9d077d9daf7d49899fc84237c00a260668.svn-base @@ -0,0 +1,163 @@ ++LoggerService = { + Class = LoggerService + CPUs = 0x1 + StackSize = 32768 + NumberOfLogPages = 128 + +ConLogger = { + Class = ConsoleLogger + Format = "EtOoFmC" + PrintKeys = 1 + } +} ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +START = { + Class = StateMachineEvent + NextState = "RUNNING" + NextStateError = "ERROR" + +PrepareNextStateOnOurRTApp = { + Class = Message + Destination = MyDemoApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = State1 + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = MyDemoApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +RUNNING = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = RUNNING + NextStateError = ERROR + } + } + +ERROR = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = ERROR + NextStateError = ERROR + } + } +} ++MyDemoApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + +GAMTimer = { + Class = IOGAM + InputSignals = { + Time = { //Time attribute is updated with us resolution. + DataSource = Timer + Type = uint32 + } + Counter = { + DataSource = Timer + Type = uint32 + Frequency = 10 //in Hz. Cycle for one state execution. + } + RTThreadPerf = { + DataSource = Timings + Alias = "State1.Thread1_CycleTime" + Type = uint32 + } + } + OutputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerf = { + DataSource = DDB1 + Type = uint32 + } + } + } + +TimerDisplayGAM = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + TimeDISP = { + DataSource = Display + Type = uint32 + } + CounterDISP = { + DataSource = Display + Type = uint32 + } + } + } + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + } + +Timer = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 0 + ExecutionMode = RealTimeThread + CPUMask = 0x1 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + +Display = { + Class = LoggerDataSource + } + +Timings = { + Class = TimingDataSource + } + } + +States = { + Class = ReferenceContainer + +State1 = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {GAMTimer TimerDisplayGAM} + CPUMask = 0x1 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} + diff --git a/EC-GN-JA-PCF/.svn/pristine/34/34c317b3a004ca38e95831a65effbe6a9e6d09eb.svn-base b/EC-GN-JA-PCF/.svn/pristine/34/34c317b3a004ca38e95831a65effbe6a9e6d09eb.svn-base new file mode 100644 index 0000000..347e683 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/34/34c317b3a004ca38e95831a65effbe6a9e6d09eb.svn-base @@ -0,0 +1,8 @@ +############################################################################ +## CODAC specific environment variables +############################################################################ + +epicsEnvSet("AUTOSAVE_SYSM_PV_PREFIX","EC-GN-SYSM:PCF0SYSM-") +epicsEnvSet("IOCSH_PS1","${IOC}> ") +epicsEnvSet("STREAM_PROTOCOL_PATH","$(TOP)/db:$(EPICS_ROOT)/db") + diff --git a/EC-GN-JA-PCF/.svn/pristine/34/34c47aad1b095acb20b58d7edc31b98c07e7445c.svn-base b/EC-GN-JA-PCF/.svn/pristine/34/34c47aad1b095acb20b58d7edc31b98c07e7445c.svn-base new file mode 100644 index 0000000..30adbd0 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/34/34c47aad1b095acb20b58d7edc31b98c07e7445c.svn-base @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=NI6528.x + +PACKAGE=DataSources + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(CODAC_ROOT)/include/ + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/NI6528$(LIBEXT) \ + $(BUILD_DIR)/NI6528$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/.svn/pristine/35/35a0f5c5ce985d21f583f097e8ea5c17106a723e.svn-base b/EC-GN-JA-PCF/.svn/pristine/35/35a0f5c5ce985d21f583f097e8ea5c17106a723e.svn-base new file mode 100644 index 0000000..5763fa5 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/35/35a0f5c5ce985d21f583f097e8ea5c17106a723e.svn-base @@ -0,0 +1,230 @@ +record (bi,"EC-GN-P01-GPS:PLC4110-CON-GY1PRM") +{ + field(DESC, "GY1 Operation Permission") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 18) bitread") + field(ONAM, "PERMITED") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-CON-GY2PRM") +{ + field(DESC, "GY2 Operation Permission") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 18) bitread") + field(ONAM, "PERMITED") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-CON-OPGY1") +{ + field(DESC, "GY1 Selection") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 19) bitread") + field(ONAM, "SELECTED") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-CON-OPGY2") +{ + field(DESC, "GY2 Selection") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 19) bitread") + field(ONAM, "SELECTED") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-RV1") +{ + field(DESC, "Reserved for PLC") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 21) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPS:PLC4110-RV2") +{ + field(DESC, "Reserved for PLC") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPS:PLC4110-RV3") +{ + field(DESC, "Reserved for PLC") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YON-CCPS1") +{ + field(DESC, "GY1 CCPS Start Operation") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 20) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YON-CCPS2") +{ + field(DESC, "GY2 CCPS Start Operation") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 20) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YSTA-MPSS") +{ + field(DESC, "Sync/Asynchronous Flag") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 21) bitread") + field(ONAM, "SYNC") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "ASYNC") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTRP") +{ + field(DESC, "Interlock signal from PLC") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 14) bitread") + field(ONAM, "INTERLOCK") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-MD1") +{ + field(DESC, "Operation Mode 1") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 14) bitread") + field(ONAM, "VSHORT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-MD2") +{ + field(DESC, "Operation Mode 2") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 15) bitread") + field(ONAM, "SHORT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-MD3") +{ + field(DESC, "Operation Mode 3") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 16) bitread") + field(ONAM, "MIDDLE") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-MD4") +{ + field(DESC, "Operation Mode 4") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 17) bitread") + field(ONAM, "LONG") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-ST1R") +{ + field(DESC, "PLC STANDBY state") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 15) bitread") + field(ONAM, "STANDBY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-ST2R") +{ + field(DESC, "PLC READY state") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 16) bitread") + field(ONAM, "READY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-ST3R") +{ + field(DESC, "PLC ON state") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 17) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + diff --git a/EC-GN-JA-PCF/.svn/pristine/37/3703afbfbe9ed60ddbfd2f21ecdc1748a3f4997d.svn-base b/EC-GN-JA-PCF/.svn/pristine/37/3703afbfbe9ed60ddbfd2f21ecdc1748a3f4997d.svn-base new file mode 100644 index 0000000..e7ba9e5 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/37/3703afbfbe9ed60ddbfd2f21ecdc1748a3f4997d.svn-base @@ -0,0 +1,41 @@ +-100,0,0,0,0,0,0 +-90,1,1,1,1,1,1 +-80,2,2,2,2,2,2 +-70,3,3,3,3,3,3 +-60,4,4,4,4,4,4 +-50,5,5,5,5,5,5 +-40,6,6,6,6,6,6 +-30,7,7,7,7,7,7 +-20,8,8,8,8,8,8 +-10,9,9,9,9,9,9 +0,10,10,10,10,10,10 +10,9,9,9,9,9,9 +20,8,8,8,8,8,8 +30,7,7,7,7,7,7 +40,6,6,6,6,6,6 +50,5,5,5,5,5,5 +60,4,4,4,4,4,4 +70,3,3,3,3,3,3 +80,2,2,2,2,2,2 +90,1,1,1,1,1,1 +100,0,0,0,0,0,0 +110,1,1,1,1,1,1 +120,2,2,2,2,2,2 +130,3,3,3,3,3,3 +140,4,4,4,4,4,4 +150,5,5,5,5,5,5 +160,6,6,6,6,6,6 +170,7,7,7,7,7,7 +180,8,8,8,8,8,8 +190,9,9,9,9,9,9 +200,10,10,10,10,10,10 +210,9,9,9,9,9,9 +220,8,8,8,8,8,8 +230,7,7,7,7,7,7 +240,6,6,6,6,6,6 +250,5,5,5,5,5,5 +260,4,4,4,4,4,4 +270,3,3,3,3,3,3 +280,2,2,2,2,2,2 +290,1,1,1,1,1,1 +300,0,0,0,0,0,0 diff --git a/EC-GN-JA-PCF/.svn/pristine/37/37d562b0855d966536fb2fe47245ae93bfaed2b7.svn-base b/EC-GN-JA-PCF/.svn/pristine/37/37d562b0855d966536fb2fe47245ae93bfaed2b7.svn-base new file mode 100644 index 0000000..1efebb0 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/37/37d562b0855d966536fb2fe47245ae93bfaed2b7.svn-base @@ -0,0 +1,1081 @@ +// +LoggerService = { +// Class = LoggerService +// CPUs = 0x1 +// StackSize = 32768 +// NumberOfLogPages = 128 +// +ConLogger = { +// Class = ConsoleLogger +// Format = "EtOoFmC" +// PrintKeys = 1 +// } +// } + ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +START = { + Class = StateMachineEvent + NextState = "RUNNING" + NextStateError = "ERROR" + +PrepareNextStateOnOurRTApp = { + Class = Message + Destination = MyDemoApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = State1 + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = MyDemoApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +RUNNING = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = RUNNING + NextStateError = ERROR + } + } + +ERROR = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = ERROR + NextStateError = ERROR + } + } +} ++MyDemoApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + +GAMTimer = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = Timer + Type = uint32 + } + Counter = { + DataSource = Timer + Type = uint32 + Frequency = 1 //in Hz. Cycle for one state execution. + } + RTThreadPerf = { + DataSource = Timings + Alias = "State1.Thread1_CycleTime" + Type = uint32 + } + } + OutputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerf = { + DataSource = DDB1 + Type = uint32 + } + } + } + //EPICS PV read GAM + +PV2DDB1GAM = { + Class = IOGAM + InputSignals = { + ni6259d0p0do0 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do1 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do2 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do3 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do4 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do5 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do6 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do7 = { + DataSource = EPICSCAInput + Type = uint32 + } + + ni6528d0p3do0 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do1 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do2 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do3 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do4 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do5 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do6 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do7 = { + DataSource = EPICSCAInput + Type = uint32 + } + + ni6528d0p4do0 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do1 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do2 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do3 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do4 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do5 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do6 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do7 = { + DataSource = EPICSCAInput + Type = uint32 + } + + ni6259d1p0do0 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do1 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do2 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do3 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do4 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do5 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do6 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do7 = { + DataSource = EPICSCAInput + Type = uint32 + } + + ni6528d1p3do0 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do1 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do2 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do3 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do4 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do5 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do6 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do7 = { + DataSource = EPICSCAInput + Type = uint32 + } + + ni6528d1p4do0 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do1 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do2 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do3 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do4 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do5 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do6 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do7 = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + ni6259d0p0do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do7 = { + DataSource = DDB1 + Type = uint32 + } + + ni6528d0p3do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do7 = { + DataSource = DDB1 + Type = uint32 + } + + ni6528d0p4do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do7 = { + DataSource = DDB1 + Type = uint32 + } + + ni6259d1p0do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do7 = { + DataSource = DDB1 + Type = uint32 + } + + ni6528d1p3do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do7 = { + DataSource = DDB1 + Type = uint32 + } + + ni6528d1p4do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do7 = { + DataSource = DDB1 + Type = uint32 + } + } + } + //HW Write GAMs + //NI6259 uses uint32, so it is not able to use BitSumGAM + +NI6259D0P0GAM = { + Class = JABitSumGAM + InputSignals = { + ni6259d0p0do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do7 = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + NI6259D0P0Value = { + DataSource = Display + Type = uint8 + } + } + } + +NI6528D0P3GAM = { + Class = JABitSumGAM + InputSignals = { + ni6528d0p3do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do7 = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + NI6528D0P3Value = { + DataSource = Display + Type = uint8 + } + } + } + +NI6528D0P4GAM = { + Class = JABitSumGAM + InputSignals = { + ni6528d0p4do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do7 = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + NI6528D0P4Value = { + DataSource = Display + Type = uint8 + } + } + } + //NI6259 uses uint32, so it is not able to use BitSumGAM + +NI6259D1P0GAM = { + Class = JABitSumGAM + InputSignals = { + ni6259d1p0do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do7 = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + NI6259D1P0Value = { + DataSource = Display + Type = uint8 + } + } + } + +NI6528D1P3GAM = { + Class = JABitSumGAM + InputSignals = { + ni6528d1p3do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do7 = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + NI6528D1P3Value = { + DataSource = Display + Type = uint8 + } + } + } + +NI6528D1P4GAM = { + Class = JABitSumGAM + InputSignals = { + ni6528d1p4do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do7 = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + NI6528D1P4Value = { + DataSource = Display + Type = uint8 + } + } + } + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + } + +Timer = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 0 + ExecutionMode = RealTimeThread + CPUMask = 0x1 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + + /**** + +NI6259D1P0 = { + Class = NI6259::NI6259DIO + DeviceName = "/dev/pxi6259" + BoardId = 1 + Signals = { + NI6269D1P0Value = { + Type = uint32 + Mask = 0xFF + PortId = 0 + } + } + } + +NI6528D1P3 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.1" + Port = 3 + Value = { + NI6528D1P3Value = { + Type = uint32 + } + } + } + +NI6528D1P4 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.1" + Port = 4 + Value = { + NI6528D1P4Value = { + Type = uint32 + } + } + } + +NI6259D0P0 = { + Class = NI6259::NI6259DIO + DeviceName = "/dev/pxi6259" + BoardId = 0 + Signals = { + NI6259D0P0Value = { + Type = uint32 + Mask = 0xFF + PortId = 0 + } + } + } + +NI6528D0P3 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.0" + Port = 3 + Value = { + NI6528D0P3Value = { + Type = uint32 + } + } + } + +NI6528D0P4 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.0" + Port = 4 + Value = { + NI6528D0P4Value = { + Type = uint32 + } + } + } + ***/ + +EPICSCAInput = { + Class = "EPICSCA::EPICSCAInput" + CPUMask = "1" + StackSize = "10000000" + Signals = { + // NI6259 DO PVs + ni6259d0p0do0 = { + PVName = "ni6259:d0:p0:do0" + Type = uint32 + } + ni6259d0p0do1 = { + PVName = "ni6259:d0:p0:do1" + Type = uint32 + } + ni6259d0p0do2 = { + PVName = "ni6259:d0:p0:do2" + Type = uint32 + } + ni6259d0p0do3 = { + PVName = "ni6259:d0:p0:do3" + Type = uint32 + } + ni6259d0p0do4 = { + PVName = "ni6259:d0:p0:do4" + Type = uint32 + } + ni6259d0p0do5 = { + PVName = "ni6259:d0:p0:do5" + Type = uint32 + } + ni6259d0p0do6 = { + PVName = "ni6259:d0:p0:do6" + Type = uint32 + } + ni6259d0p0do7 = { + PVName = "ni6259:d0:p0:do7" + Type = uint32 + } + + // NI6528P3 PVs + ni6528d0p3do0 = { + PVName = "ni6528:d0:p3:do0" + Type = uint32 + } + ni6528d0p3do1 = { + PVName = "ni6528:d0:p3:do1" + Type = uint32 + } + ni6528d0p3do2 = { + PVName = "ni6528:d0:p3:do2" + Type = uint32 + } + ni6528d0p3do3 = { + PVName = "ni6528:d0:p3:do3" + Type = uint32 + } + ni6528d0p3do4 = { + PVName = "ni6528:d0:p3:do4" + Type = uint32 + } + ni6528d0p3do5 = { + PVName = "ni6528:d0:p3:do5" + Type = uint32 + } + ni6528d0p3do6 = { + PVName = "ni6528:d0:p3:do6" + Type = uint32 + } + ni6528d0p3do7 = { + PVName = "ni6528:d0:p3:do7" + Type = uint32 + } + + //NI6528P4 PVs + ni6528d0p4do0 = { + PVName = "ni6528:d0:p4:do0" + Type = uint32 + } + ni6528d0p4do1 = { + PVName = "ni6528:d0:p4:do1" + Type = uint32 + } + ni6528d0p4do2 = { + PVName = "ni6528:d0:p4:do2" + Type = uint32 + } + ni6528d0p4do3 = { + PVName = "ni6528:d0:p4:do3" + Type = uint32 + } + ni6528d0p4do4 = { + PVName = "ni6528:d0:p4:do4" + Type = uint32 + } + ni6528d0p4do5 = { + PVName = "ni6528:d0:p4:do5" + Type = uint32 + } + ni6528d0p4do6 = { + PVName = "ni6528:d0:p4:do6" + Type = uint32 + } + ni6528d0p4do7 = { + PVName = "ni6528:d0:p4:do7" + Type = uint32 + } + + // NI6259 DO PVs + ni6259d1p0do0 = { + PVName = "ni6259:d1:p0:do0" + Type = uint32 + } + ni6259d1p0do1 = { + PVName = "ni6259:d1:p0:do1" + Type = uint32 + } + ni6259d1p0do2 = { + PVName = "ni6259:d1:p0:do2" + Type = uint32 + } + ni6259d1p0do3 = { + PVName = "ni6259:d1:p0:do3" + Type = uint32 + } + ni6259d1p0do4 = { + PVName = "ni6259:d1:p0:do4" + Type = uint32 + } + ni6259d1p0do5 = { + PVName = "ni6259:d1:p0:do5" + Type = uint32 + } + ni6259d1p0do6 = { + PVName = "ni6259:d1:p0:do6" + Type = uint32 + } + ni6259d1p0do7 = { + PVName = "ni6259:d1:p0:do7" + Type = uint32 + } + + // NI6528P3 PVs + ni6528d1p3do0 = { + PVName = "ni6528:d1:p3:do0" + Type = uint32 + } + ni6528d1p3do1 = { + PVName = "ni6528:d1:p3:do1" + Type = uint32 + } + ni6528d1p3do2 = { + PVName = "ni6528:d1:p3:do2" + Type = uint32 + } + ni6528d1p3do3 = { + PVName = "ni6528:d1:p3:do3" + Type = uint32 + } + ni6528d1p3do4 = { + PVName = "ni6528:d1:p3:do4" + Type = uint32 + } + ni6528d1p3do5 = { + PVName = "ni6528:d1:p3:do5" + Type = uint32 + } + ni6528d1p3do6 = { + PVName = "ni6528:d1:p3:do6" + Type = uint32 + } + ni6528d1p3do7 = { + PVName = "ni6528:d1:p3:do7" + Type = uint32 + } + + //NI6528P4 PVs + ni6528d1p4do0 = { + PVName = "ni6528:d1:p4:do0" + Type = uint32 + } + ni6528d1p4do1 = { + PVName = "ni6528:d1:p4:do1" + Type = uint32 + } + ni6528d1p4do2 = { + PVName = "ni6528:d1:p4:do2" + Type = uint32 + } + ni6528d1p4do3 = { + PVName = "ni6528:d1:p4:do3" + Type = uint32 + } + ni6528d1p4do4 = { + PVName = "ni6528:d1:p4:do4" + Type = uint32 + } + ni6528d1p4do5 = { + PVName = "ni6528:d1:p4:do5" + Type = uint32 + } + ni6528d1p4do6 = { + PVName = "ni6528:d1:p4:do6" + Type = uint32 + } + ni6528d1p4do7 = { + PVName = "ni6528:d1:p4:do7" + Type = uint32 + } + } + } + +Display = { + Class = LoggerDataSource + } + +Timings = { + Class = TimingDataSource + } + } + +States = { + Class = ReferenceContainer + +State1 = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {GAMTimer PV2DDB1GAM NI6259D0P0GAM NI6528D0P3GAM NI6528D0P4GAM NI6259D1P0GAM NI6528D1P3GAM NI6528D1P4GAM } + CPUMask = 0x1 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} + diff --git a/EC-GN-JA-PCF/.svn/pristine/3b/3bedbfb4823274165dbb5dcce714578e62d3b27a.svn-base b/EC-GN-JA-PCF/.svn/pristine/3b/3bedbfb4823274165dbb5dcce714578e62d3b27a.svn-base new file mode 100644 index 0000000..1f40d18 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/3b/3bedbfb4823274165dbb5dcce714578e62d3b27a.svn-base @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JASourceChoiseGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JASourceChoiseGAM$(LIBEXT) \ + $(BUILD_DIR)/JASourceChoiseGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/.svn/pristine/3c/3c41f9d04c70edf86536a205a96af7a204fd110b.svn-base b/EC-GN-JA-PCF/.svn/pristine/3c/3c41f9d04c70edf86536a205a96af7a204fd110b.svn-base new file mode 100644 index 0000000..ae06cf5 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/3c/3c41f9d04c70edf86536a205a96af7a204fd110b.svn-base @@ -0,0 +1,4 @@ +#!/bin/sh + +./Main.sh -f ../Configurations/tests/NI6528_test.cfg -l RealTimeLoader -m StateMachine:START + diff --git a/EC-GN-JA-PCF/.svn/pristine/3e/3e6cc0813382efdcc62edcd615d1e4959f221a40.svn-base b/EC-GN-JA-PCF/.svn/pristine/3e/3e6cc0813382efdcc62edcd615d1e4959f221a40.svn-base new file mode 100644 index 0000000..595af96 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/3e/3e6cc0813382efdcc62edcd615d1e4959f221a40.svn-base @@ -0,0 +1,273 @@ + + + + + + + +Connection or frame of the communication for 4110 configuration and state is invalid +true +0 + +4110 communication failed +
The connection for configuration and state to 4110 was broken or the frame is not correct
+
+ +Causes related to the alarm +
Timestamp update error (TIME) +Data block header, footer or length mismatch (FERROR) +Data block version mismatch (FVERS) +Data block alive counter update error (ALIVEC) +Frame lost due (FLOST) +PLC communication broken (CFGSTAT) +Lost a redundant CPU (CPU0-ALIVE, CPU1-ALIVE)
+
+ +Corrective action +
Check whether the PLC is running\n Check whether network is ok\n Contact maintenance service (if needed)
+
+ +4110 State Comm. Alarm OPI +
/opt/codac/opi/boy/resources/alarmpages/healthMonitoring/ITER-SYSM-PLCHLTS_Alarm.opi "CBS1=EC, CBS2=GN, PP=01, NNNN=4110, TTT=PLC, PPPP=52RF, ALARM_PV=EC-GN-SYSM-52RF-01:PLC4110-PLCHLTS, ALARM_PATH=/CODAC_AlarmHandler/EC/EC-GN/EC-GN-SYSM, LEVEL=ITER-EC-GN-SYSM, ALARM_GUIDANCE1_TITLE=PLC communication failed, ALARM_GUIDANCE1_DETAILS=The connection for configuration and state to PLC is broken or the frame is not correct."
+
+
+ +Connection or frame of the communication for PLC Event is invalid +true +0 + +PLC Event communication failed +
The connection for event to PLC was broken or the frame is not correct
+
+ +Causes related to the alarm +
Event Frame count update error (FRAMEC) +PLC Event communication broken (EVTSTAT)
+
+ +Corrective action +
Check whether the PLC is running\n Check whether network is ok\n Contact maintenance service (if needed)
+
+ +PLC Event Comm. Alarm OPI +
/opt/codac/opi/boy/resources/alarmpages/healthMonitoring/ITER-SYSM-EVTHLTS_Alarm.opi "CBS1=EC, CBS2=GN, CBS3=SYSM, PP=01, NNNN=4110, TTT=PLC, PPPP=52RF, ALARM_PV=EC-GN-SYSM-52RF-01:PLC4110-EVTHLTS, ALARM_PATH=/CODAC_AlarmHandler/EC/EC-GN/EC-GN-SYSM, LEVEL=ITER-EC-GN-SYSM, ALARM_GUIDANCE1_TITLE=PLC Event communication failed, ALARM_GUIDANCE1_DETAILS=The connection for event to PLC was broken or the frame is not correct."
+
+
+ +Any one of CPU, MEM, Disk, FD, Process of the host is in alarm state +true +0 + +System is an abnormal state +
Check the mentioned alarm load and identify the cause
+
+ +System resources related to the alarm +
1 - one of CPU, Disk, Memory, FD load is high or necessary process has been stopped +2 - two of CPU, Disk, Memory, FD load are high and/or necessary process has been stopped +3 - three of CPU, Disk, Memory, FD load are high and/or necessary process has been stopped
+
+ +Corrective action +
If any load remains high continuously, contact maintenance service. +In addition, check if the necessary processes are running
+
+ +Temporary actions to suppress +
Change the alarm limits or severity for each load in alarm state. + + Ex1) alarm limits +% caput EC-GN-SYSM-52RF-01:PCF4210-CPUUTL.HIGH 90 +% caput EC-GN-SYSM-52RF-01:PCF4210-CPUUTL.HIHI 100 + + Ex2) alarm severity +% caput EC-GN-SYSM-52RF-01:PCF4210-MEMUTL.HSV NO_ALARM +% caput EC-GN-SYSM-52RF-01:PCF4210-MEMUTL.HHSV NO_ALARM
+
+ +System Health Alarm OPI + +
/opt/codac/opi/boy/resources/alarmpages/healthMonitoring/ITER-SYSM-SHLT_Alarm.opi "CBS=EC-GN-SYSM, PPPP=52RF, PP=01, TTT=PCF, NNNN=4210, ALARM_PV=EC-GN-SYSM-52RF-01:PCF4210-SHLT, ALARM_PATH=/CODAC_AlarmHandler/EC/EC-GN/EC-GN-SYSM, LEVEL=ITER-EC-GN-SYSM, ALARM_GUIDANCE1_TITLE=System resource utilization is high, ALARM_GUIDANCE1_DETAILS=Any one of CPU / MEM / Disk / FD / Process of the host is in alarm state. Check the mentioned alarm load and identify the cause. If any load remains high continuously contact maintenance service."
+
+
+ +Any one of CPU, MEM, Disk or FD of the host is in alarm state +true +0 + +System resource utilization is high +
Check the mentioned alarm load and identify the cause
+
+ +System resources related to the alarm +
1 - CPU utilization high (CPUUTL) : CPU utilization is high +2 - Memory utilization high (MEMUTL) : Memory utilization is high +3 - CPU, Mem util high (CPUUTL, MEMUTL) : CPU and Memory utilizations are high +4 - Disk utilization high (DISKUTL) : Disk utilizations are high +5 - CPU, Disk util high (CPUUTL,DISKUTL) : CPU and Disk utilizations are high +6 - Mem, Disk util high (MEMUTL,DISKUTL) : Memory and Disk utilizations are high +7 - CPU, Mem, Disk util high (CPUUTL,MEMUTL,DISKUTL) : CPU/Memory/Disk utilizations are high +8 - FD utilization high (FDUTL) : FD utilization is high +9 - CPU, FD util high (CPUUTL,FDUTL) : CPU and FD are in alarm state +10 - Mem, FD util high (MEMUTL,FDUTL) : Memory and FD are in alarm state +11 - CPU, Mem, FD alarm (CPUUTL,MEMUTL,FDUTL) : CPU/Memory/FD are in alarm state +12 - Disk, FD util high (DISKUTL,FDUTL) : Disk and FD are in alarm state +13 - CPU, Disk, FD alarm (CPUUTL,DISKUTL,FDUTL) : CPU/Disk/FD are in alarm state +14 - Mem, Disk, FD alarm (MEMUTL,DISKUTL,FDUTL) : Memory/Disk/FD are in alarm state +15 - CPU,Mem,Disk,FD alarm (CPUUTL,MEMUTL,DISKUTL,FDUTL) : CPU/Memory/Disk/FD alarm
+
+ +Corrective action +
If any load remains high continuously, contact maintenance service
+
+ +Temporary actions to suppress +
Change the alarm limits or severity for each load in alarm state. + + Ex1) alarm limits +% caput EC-GN-SYSM-52RF-01:PCF4210-CPUUTL.HIGH 90 +% caput EC-GN-SYSM-52RF-01:PCF4210-CPUUTL.HIHI 100 + + Ex2) alarm severity +% caput EC-GN-SYSM-52RF-01:PCF4210-MEMUTL.HSV NO_ALARM +% caput EC-GN-SYSM-52RF-01:PCF4210-MEMUTL.HHSV NO_ALARM
+
+ +System Health Alarm OPI +
/opt/codac/opi/boy/resources/alarmpages/healthMonitoring/ITER-SYSM-SYSHLTS_Alarm.opi "CBS=EC-GN-SYSM, PPPP=52RF, PP=01, TTT=PCF, NNNN=4210, ALARM_PV=EC-GN-SYSM-52RF-01:PCF4210-SYSHLTS, ALARM_PATH=/CODAC_AlarmHandler/EC/EC-GN/EC-GN-SYSM, LEVEL=ITER-EC-GN-SYSM, ALARM_GUIDANCE1_TITLE=System resource utilization is high, ALARM_GUIDANCE1_DETAILS=Any one of CPU / MEM / Disk / FD of the host is in alarm state. Check the mentioned alarm load and identify the cause. If any load remains high continuously contact maintenance service."
+
+
+ +Current state of TCNd and the synchronization state of the device +true +0 + +System time synchronization is not fully operational +
If status is N/A, then check that tcnd is running. +If status is not operational for some time, please contact maintenance service.
+
+ +Documentation TCNd +
firefox file:///opt/codac/doc/pdf/TCNd_User_Manual.pdf
+
+ +TCNd Sync. Alarm OPI +
/opt/codac/opi/boy/resources/alarmpages/healthMonitoring/ITER-SYSM-TSTATUS_Alarm.opi "CBS=EC-GN-SYSM, PPPP=52RF, PP=01, TTT=PCF, NNNN=4210, ALARM_PV=EC-GN-SYSM-52RF-01:PCF4210-TSTATUS, ALARM_PATH=/CODAC_AlarmHandler/EC/EC-GN/EC-GN-SYSM, LEVEL=ITER-EC-GN-SYSM, ALARM_GUIDANCE1_TITLE=System clock synchronization with respect to ITER time, ALARM_GUIDANCE1_DETAILS=The computer system clock is synchronized to ITER time using the TCN daemon (TCNd) component of CODAC Core SYstem. Please see TCNd User Manual (ITER_D_MUYNT6 - /opt/codac/doc/pdf/TCNd_User_Manual.pdf). +The clock synchronization has been detected to have been in an abnormal state. i.e. STATUS different from 'Operational' after two minutes of uptime."
+
+
+ +Any one of CPU, MEM, Disk, FD, Process of the host is in alarm state +true +0 + +System is an abnormal state +
Check the mentioned alarm load and identify the cause
+
+ +System resources related to the alarm +
1 - one of CPU, Disk, Memory, FD load is high or necessary process has been stopped +2 - two of CPU, Disk, Memory, FD load are high and/or necessary process has been stopped +3 - three of CPU, Disk, Memory, FD load are high and/or necessary process has been stopped
+
+ +Corrective action +
If any load remains high continuously, contact maintenance service. +In addition, check if the necessary processes are running
+
+ +Temporary actions to suppress +
Change the alarm limits or severity for each load in alarm state. + + Ex1) alarm limits +% caput EC-GN-SYSM-52RF-01:PSH4410-CPUUTL.HIGH 90 +% caput EC-GN-SYSM-52RF-01:PSH4410-CPUUTL.HIHI 100 + Ex2) alarm severity +% caput EC-GN-SYSM-52RF-01:PSH4410-MEMUTL.HSV NO_ALARM +% caput EC-GN-SYSM-52RF-01:PSH4410-MEMUTL.HHSV NO_ALARM
+
+ +System Health Alarm OPI +
/opt/codac/opi/boy/resources/alarmpages/healthMonitoring/ITER-SYSM-SHLT_Alarm.opi "CBS=EC-GN-SYSM, PPPP=52RF, PP=01, TTT=PSH, NNNN=4410, ALARM_PV=EC-GN-SYSM-52RF-01:PSH4410-SHLT, ALARM_PATH=/CODAC_AlarmHandler/EC/EC-GN/EC-GN-SYSM, LEVEL=ITER-EC-GN-SYSM, ALARM_GUIDANCE1_TITLE=System resource utilization is high, ALARM_GUIDANCE1_DETAILS=Any one of CPU / MEM / Disk / FD / Process of the host is in alarm state. Check the mentioned alarm load and identify the cause. If any load remains high continuously contact maintenance service."
+
+
+ +Any one of CPU, MEM, Disk or FD of the host is in alarm state +true +0 + +System resource utilization is high +
Check the mentioned alarm load and identify the cause
+
+ +System resources related to the alarm +
1 - CPU utilization high (CPUUTL) : CPU utilization is high +2 - Memory utilization high (MEMUTL) : Memory utilization is high +3 - CPU, Mem util high (CPUUTL, MEMUTL) : CPU and Memory utilizations are high +4 - Disk utilization high (DISKUTL) : Disk utilizations are high +5 - CPU, Disk util high (CPUUTL,DISKUTL) : CPU and Disk utilizations are high +6 - Mem, Disk util high (MEMUTL,DISKUTL) : Memory and Disk utilizations are high +7 - CPU, Mem, Disk util high (CPUUTL,MEMUTL,DISKUTL) : CPU/Memory/Disk utilizations are high +8 - FD utilization high (FDUTL) : FD utilization is high +9 - CPU, FD util high (CPUUTL,FDUTL) : CPU and FD are in alarm state +10 - Mem, FD util high (MEMUTL,FDUTL) : Memory and FD are in alarm state +11 - CPU, Mem, FD alarm (CPUUTL,MEMUTL,FDUTL) : CPU/Memory/FD are in alarm state +12 - Disk, FD util high (DISKUTL,FDUTL) : Disk and FD are in alarm state +13 - CPU, Disk, FD alarm (CPUUTL,DISKUTL,FDUTL) : CPU/Disk/FD are in alarm state +14 - Mem, Disk, FD alarm (MEMUTL,DISKUTL,FDUTL) : Memory/Disk/FD are in alarm state +15 - CPU,Mem,Disk,FD alarm (CPUUTL,MEMUTL,DISKUTL,FDUTL) : CPU/Memory/Disk/FD alarm
+
+ +Corrective action +
If any load remains high continuously, contact maintenance service
+
+ +Temporary actions to suppress +
Change the alarm limits or severity for each load in alarm state. + + Ex1) alarm limits +% caput EC-GN-SYSM-52RF-01:PSH4410-CPUUTL.HIGH 90 +% caput EC-GN-SYSM-52RF-01:PSH4410-CPUUTL.HIHI 100 + + Ex2) alarm severity +% caput EC-GN-SYSM-52RF-01:PSH4410-MEMUTL.HSV NO_ALARM +% caput EC-GN-SYSM-52RF-01:PSH4410-MEMUTL.HHSV NO_ALARM
+
+ +System Health Alarm OPI +
/opt/codac/opi/boy/resources/alarmpages/healthMonitoring/ITER-SYSM-SYSHLTS_Alarm.opi "CBS=EC-GN-SYSM, PPPP=52RF, PP=01, TTT=PSH, NNNN=4410, ALARM_PV=EC-GN-SYSM-52RF-01:PSH4410-SYSHLTS, ALARM_PATH=/CODAC_AlarmHandler/EC/EC-GN/EC-GN-SYSM, LEVEL=ITER-EC-GN-SYSM, ALARM_GUIDANCE1_TITLE=System resource utilization is high, ALARM_GUIDANCE1_DETAILS=Any one of CPU / MEM / Disk / FD of the host is in alarm state. Check the mentioned alarm load and identify the cause. If any load remains high continuously contact maintenance service."
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+
\ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/3f/3f4db3b56cd9ff77536c4ef03db90d604e137565.svn-base b/EC-GN-JA-PCF/.svn/pristine/3f/3f4db3b56cd9ff77536c4ef03db90d604e137565.svn-base new file mode 100644 index 0000000..c9bc4f2 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/3f/3f4db3b56cd9ff77536c4ef03db90d604e137565.svn-base @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JARTSampleGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JARTSampleGAM$(LIBEXT) \ + $(BUILD_DIR)/JARTSampleGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/.svn/pristine/3f/3f9dfae778989e6382bdc7e264248240d52f28d8.svn-base b/EC-GN-JA-PCF/.svn/pristine/3f/3f9dfae778989e6382bdc7e264248240d52f28d8.svn-base new file mode 100644 index 0000000..ccec4a0 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/3f/3f9dfae778989e6382bdc7e264248240d52f28d8.svn-base @@ -0,0 +1,18 @@ +record(bo, "test:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "test:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "test:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(longin, test:doValue){ + field(SCAN, "Passive") +} \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/3f/3fdb6fbb257caa83d471a695487bf999956c1446.svn-base b/EC-GN-JA-PCF/.svn/pristine/3f/3fdb6fbb257caa83d471a695487bf999956c1446.svn-base new file mode 100644 index 0000000..fb91d7c --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/3f/3fdb6fbb257caa83d471a695487bf999956c1446.svn-base @@ -0,0 +1,389 @@ +record (bi,"EC-GN-P01-GAF:DIO4900-YON") +{ + field(DESC, "GY1 External trigger") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 22) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF:STAT-AI-SIMM") +{ + field(DESC, "GY1 AI Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GAF:STAT-AO-SIMM") +{ + field(DESC, "GY1 AO Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GAF:STAT-CSV-LOAD") +{ + field(DESC, "File load trigger") + field(HIGH, "0.1") + field(ONAM, "Loading") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Load") +} + +record (bo,"EC-GN-P01-GAF:STAT-CSV-LOADED") +{ + field(DESC, "File load status") + field(ONAM, "Loaded") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Loading") +} + +record (bo,"EC-GN-P01-GAF:STAT-DI-SIMM") +{ + field(DESC, "GY1 DI Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GAF:STAT-DO-SIMM") +{ + field(DESC, "GY1 DO Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GAF:STAT-DT-SHOTLEN-EGU") +{ + field(DESC, "GY1 egu of shot length") + field(FLNK, "EC-GN-P01-GAF:STAT-DT-SHOTLEN-CALC") + field(ONAM, "s") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "ms") +} + +record (bo,"EC-GN-P01-GAF:STAT-MST-TRIG") +{ + field(DESC, "GY1 Master trigger") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF:STAT-PREP-MODE") +{ + field(DESC, "GY1 Pre-Pro mode ON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF:STAT-SHORT-PULSE") +{ + field(DESC, "GY1 Short Pulse Mode") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF:STAT-TRIG-SOUR") +{ + field(DESC, "GY1 External Trigger Mode SW") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (ai,"EC-GN-P01-GAF:MOE2810-ET") +{ + field(DESC, "GY1 Arc detect signal 1") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GAF:MOE2810-ET-WF") +{ + field(DESC, "GY1 Arc detect signal 1") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GAF:MOE2820-ET") +{ + field(DESC, "GY1 Arc detect signal 2") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GAF:MOE2820-ET-WF") +{ + field(DESC, "GY1 Arc detect signal 2") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GAF:MOE2830-ET") +{ + field(DESC, "GY1 Arc detect signal 3") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GAF:MOE2830-ET-WF") +{ + field(DESC, "GY1 Arc detect signal 3") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GAF:MRF2910-ET") +{ + field(DESC, "GY1 RF Signal") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GAF:MRF2910-ET-WF") +{ + field(DESC, "GY1 RF Signal") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GAF:STAT-BEAMON-TIME") +{ + field(DESC, "GY1 Beam ON time") + field(EGU, "us") + field(HOPR, "3600000000") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (mbbo,"EC-GN-P01-GAF:STAT-CSV-ERR") +{ + field(DESC, "File load error status") + field(FRST, "Format error") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FVST, "Out of range") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(ONST, "Successfully loaded") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(THST, "Empty data") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "Failed to open") + field(TWSV, "MAJOR") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "Not loaded yet") + field(ZRSV, "MINOR") + field(ZRVL, "0") +} + +record (stringout,"EC-GN-P01-GAF:STAT-CSV-NAME") +{ + field(DESC, "CSV file name") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "shot000000") +} + +record (ai,"EC-GN-P01-GAF:STAT-DT-SHOTLEN") +{ + field(DESC, "GY1 Shot length") + field(EGU, "us") + field(HOPR, "3600000000") + field(LOPR, "100") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "1000000") +} + +record (calcout,"EC-GN-P01-GAF:STAT-DT-SHOTLEN-CALC") +{ + field(CALC, "(!A)?1000*B:1000000*B") + field(DESC, "GY1 shot length convert") + field(FLNK, "EC-GN-P01-GAF:STAT-DT-SHOTLEN") + field(INPA, "EC-GN-P01-GAF:STAT-DT-SHOTLEN-EGU") + field(INPB, "EC-GN-P01-GAF:STAT-DT-SHOTLEN-DAM") + field(OUT, "EC-GN-P01-GAF:STAT-DT-SHOTLEN") + field(SCAN, "Passive") +} + +record (ao,"EC-GN-P01-GAF:STAT-DT-SHOTLEN-DAM") +{ + field(DESC, "GY1 shot length without unit") + field(DRVH, "3600") + field(DRVL, "0") + field(FLNK, "EC-GN-P01-GAF:STAT-DT-SHOTLEN-CALC") + field(HOPR, "3600") + field(LOPR, "0") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF:STAT-ELAPSED") +{ + field(DESC, "GY1 Elapsed time") + field(EGU, "us") + field(HOPR, "4000000000") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (longin,"EC-GN-P01-GAF:STAT-PREHEAT-TIME") +{ + field(DESC, "Pre-heating time") + field(HOPR, "999999") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (waveform,"EC-GN-P01-GAF:STAT-PREP-TIME-WF") +{ + field(DESC, "GY1 prepro time schedule") + field(EGU, "ms") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "0") + field(SCAN, "Passive") +} + +record (fanout,"EC-GN-P01-GAF:STAT-SHOT-FLNK1") +{ + field(DESC, "GY1 fanout1 to AI waveform signal") +} + +record (fanout,"EC-GN-P01-GAF:STAT-SHOT-FLNK2") +{ + field(DESC, "GY1 fanout2 to AI waveform signal") +} + +record (longin,"EC-GN-P01-GAF:STAT-SHOT-ID") +{ + field(DESC, "GY1 shot ID") + field(HOPR, "999999") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (calcout,"EC-GN-P01-GAF:STAT-SHOT-PLOT") +{ + field(CALC, "A andand (B >= C)") + field(DESC, "GY1 judge to plot measured values") + field(INPA, "EC-GN-P01-GPS:PLC4110-YTS-ST3R") + field(INPB, "EC-GN-P01-GAF:STAT-BEAMON-TIME") + field(INPC, "6000000") + field(OOPT, "Transition To Non-zero") + field(OUT, "EC-GN-P01-GAF:STAT-SHOT-FLNK1 PP") + field(SCAN, ".1 second") +} + +record (mbbi,"EC-GN-P01-GAF:STAT-SM") +{ + field(DESC, "GY#1 state machine") + field(EIST, "WaitHVON_SDN") + field(EIVL, "8") + field(FLNK, "EC-GN-P01-GAF:STAT-SHOT-PLOT") + field(FRST, "WaitReady") + field(FRVL, "4") + field(FVST, "WaitPermit") + field(FVVL, "5") + field(NIST, "WaitHVON_SDN_PREP") + field(NIVL, "9") + field(ONST, "Error") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(SVST, "WaitHVON_PREP") + field(SVVL, "7") + field(SXST, "WaitHVON") + field(SXVL, "6") + field(THST, "WaitStandby") + field(THVL, "3") + field(TWST, "Disabled") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "Init") + field(ZRVL, "0") +} + diff --git a/EC-GN-JA-PCF/.svn/pristine/40/408ff12f1f4bef1fbd5701ae6126af0d48fd9168.svn-base b/EC-GN-JA-PCF/.svn/pristine/40/408ff12f1f4bef1fbd5701ae6126af0d48fd9168.svn-base new file mode 100644 index 0000000..ebf5a71 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/40/408ff12f1f4bef1fbd5701ae6126af0d48fd9168.svn-base @@ -0,0 +1,97 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +def test_sync(): + """Test Sync Mode""" + print '1. Set beam-on schedule' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 100000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 200000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 300000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 400000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 500000', shell=True) + + res = subprocess.call('caput EC-GN-P01-PA2F:STAT-DT-HVON 100000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:STAT-DT-HVON 200000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:STAT-DT-SWON 400000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA2F:STAT-DT-SWON 500000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 300000000', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-DT-SHOTLEN 300000000', shell=True) + print '2. Set SYNC flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS 1', shell = True) + print '3. Set Mode 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 600000000', shell = True) + print '4. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 1', shell=True) + time.sleep(1) + print '5. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) + print '6. Wait SDN commands.' + print 'Enter to stop operation(Trun off PLC_HVON)' + inpval = raw_input() + print '7. Write 0 to HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(2) + print '8. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 0', shell=True) + print '9. Reset Mode 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 0', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 0', shell = True) + print 'end of sequence.' + +def test_sync_prepro(): + """Test Sync PrePro Mode""" + print '1. Set beam-on schedule' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 100000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 200000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 300000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 400000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 500000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 300000000', shell=True) + print '2. Set SYNC flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS 1', shell = True) + print '3. Set Mode 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 600000000', shell = True) + print '4.Set Pre-Pro flag' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-PREP-MODE 1', shell = True) + time.sleep(1) + print '5. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(1) + print '6. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) + print '7. Wait SDN commands.' + print 'Enter to stop operation(Trun off PLC_HVON)' + inpval = raw_input() + print '8. Write 0 to HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(2) + print '9. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print '10.Reset Pre-Pro flag' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-PREP-MODE 0', shell = True) + time.sleep(1) + print '11. Reset Mode 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 0', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 0', shell = True) + print 'end of sequence.' \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/42/4201267146fc5ac3f8cdfce9473304430564c8fd.svn-base b/EC-GN-JA-PCF/.svn/pristine/42/4201267146fc5ac3f8cdfce9473304430564c8fd.svn-base new file mode 100644 index 0000000..5991673 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/42/4201267146fc5ac3f8cdfce9473304430564c8fd.svn-base @@ -0,0 +1,4 @@ +#!/bin/sh + +./Main.sh -f ../Configurations/tests/NI6528_NI6259_test.cfg -l RealTimeLoader -m StateMachine:START + diff --git a/EC-GN-JA-PCF/.svn/pristine/42/427221460c3ebad8dfdbdb18fd4ecbefb6ea87b0.svn-base b/EC-GN-JA-PCF/.svn/pristine/42/427221460c3ebad8dfdbdb18fd4ecbefb6ea87b0.svn-base new file mode 100644 index 0000000..bb00d97 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/42/427221460c3ebad8dfdbdb18fd4ecbefb6ea87b0.svn-base @@ -0,0 +1,42 @@ +############################################################################ +## Save and restore +############################################################################ + +### save_restore setup +# status-PV prefix +save_restoreSet_status_prefix("$(AUTOSAVE_SYSM_PV_PREFIX)") + +# Use status-PV +save_restoreSet_UseStatusPVs(1) + +# Debug-output level +save_restoreSet_Debug(0) + +# Ok to save/restore save sets with missing values (no CA connection to PV)? +save_restoreSet_IncompleteSetsOk(1) +# Save dated backup files? +save_restoreSet_DatedBackupFiles(1) + +# Number of sequenced backup files to write +save_restoreSet_NumSeqFiles(3) +# Time interval between sequenced backups +save_restoreSet_SeqPeriodInSeconds(300) + +# specify where save files should be +set_savefile_path("$(EPICS_AUTOSAVE_VAR)/$(UNIT_NAME)") + +# specify what save files should be restored. Note these files must be +# in the directory specified in set_savefile_path(), or, if that function +# has not been called, from the directory current when iocInit is invoked + +# Save files associated with the request files 'auto-output.req' and +# 'auto-input.req'. These files are the standard way to use autosave + +set_pass1_restoreFile("iocEC-GN-PSH0PCF.sav") + +# specify directories in which to to search for included request files +set_requestfile_path("./") + +dbLoadRecords("$(EPICS_ROOT)/db/save_restoreStatus.db", "P=$(AUTOSAVE_SYSM_PV_PREFIX)") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/.svn/pristine/42/42cac31e62507cee1d6cad721f8241286a2dcac5.svn-base b/EC-GN-JA-PCF/.svn/pristine/42/42cac31e62507cee1d6cad721f8241286a2dcac5.svn-base new file mode 100644 index 0000000..dd322b8 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/42/42cac31e62507cee1d6cad721f8241286a2dcac5.svn-base @@ -0,0 +1,123 @@ +/** + * @file JABitReverseGAM.cpp + * @brief Source file for class JABitReverseGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JABitReverseGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JABitReverseGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JABitReverseGAM::JABitReverseGAM() { + //Input signals. + input1 = NULL_PTR(MARTe::uint8 *); + + //Output signals. + output1= NULL_PTR(MARTe::uint8 *); +} + +JABitReverseGAM::~JABitReverseGAM() { +} + +bool JABitReverseGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + return ok; +} + +bool JABitReverseGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JABitReverseGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == 1u); + if (ok) { + ok = (numberOfOutputSignals == 1u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "One output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "One input signals shall be defined"); + } + // Do type check for input signals. + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = ((inputType == UnsignedInteger8Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint8.", signalName.Buffer()); + } + + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = ((outputType == UnsignedInteger8Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint8.", signalName.Buffer()); + } + } + } + // Do type cast. + if (ok) { + input1 = reinterpret_cast(GetInputSignalMemory(0)); + + output1 = reinterpret_cast(GetOutputSignalMemory(0)); + } + return ok; +} + +bool JABitReverseGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + *output1 = ~(*input1); + return true; +} + +CLASS_REGISTER(JABitReverseGAM, "1.0") diff --git a/EC-GN-JA-PCF/.svn/pristine/43/43518b3f7985ff1378fe0d78c9f0f5e17a3aa242.svn-base b/EC-GN-JA-PCF/.svn/pristine/43/43518b3f7985ff1378fe0d78c9f0f5e17a3aa242.svn-base new file mode 100644 index 0000000..462f62b --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/43/43518b3f7985ff1378fe0d78c9f0f5e17a3aa242.svn-base @@ -0,0 +1,81 @@ +/** + * @file JABitSumGAM.h + * @brief Header file for class JABitSumGAM + * @date Feb 10, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JABitSumGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JABitSumGAM_H_ +#define GAMS_JABitSumGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include "stdio.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +class JABitSumGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JABitSumGAM(); + + virtual ~JABitSumGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + // Input signals + MARTe::uint32 *input0; + MARTe::uint32 *input1; + MARTe::uint32 *input2; + MARTe::uint32 *input3; + MARTe::uint32 *input4; + MARTe::uint32 *input5; + MARTe::uint32 *input6; + MARTe::uint32 *input7; + + // Output signals + MARTe::uint8 *output; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JABitSumGAM_H_ */ diff --git a/EC-GN-JA-PCF/.svn/pristine/45/45ace7db3804f804773aef9c6ba83dfd6cd27967.svn-base b/EC-GN-JA-PCF/.svn/pristine/45/45ace7db3804f804773aef9c6ba83dfd6cd27967.svn-base new file mode 100644 index 0000000..2bd84d4 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/45/45ace7db3804f804773aef9c6ba83dfd6cd27967.svn-base @@ -0,0 +1,24 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import DataUtil +from org.csstudio.opibuilder.scriptUtil import ScriptUtil +from org.csstudio.swt.widgets.natives.SpreadSheetTable import ITableSelectionChangedListener +from java.util import Arrays + +table = widget.getTable() +fct_name=display.getPropertyValue("name") +class SelectionListener(ITableSelectionChangedListener): + def selectionChanged(self, selection): + cuIndex="" + phyName="" + for row in selection: + cuIndex=row[0]; + phyName=row[1] + # change $(CU_INDEX) substitution + macroInput = DataUtil.createMacrosInput(True) + macroInput.put("CUB", cuIndex) + macroInput.put("PHY_NAME", phyName) + macroInput.put("FCT_NAME", fct_name) + # open OPI + # see https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-boy/trunk/org.csstudio.opibuilder/src/org/csstudio/opibuilder/scriptUtil/ScriptUtil.java + ScriptUtil.openOPI(display.getWidget("Table"), fct_name+"-"+cuIndex+"-CubicleContents.opi", 1, macroInput) +table.addSelectionChangedListener(SelectionListener()) \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/46/462899184ae75716f9a8903e9f3836feef5781ef.svn-base b/EC-GN-JA-PCF/.svn/pristine/46/462899184ae75716f9a8903e9f3836feef5781ef.svn-base new file mode 100644 index 0000000..16a1375 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/46/462899184ae75716f9a8903e9f3836feef5781ef.svn-base @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/46/462d88297695ed1999e9a4cfd4d879d4a75aed50.svn-base b/EC-GN-JA-PCF/.svn/pristine/46/462d88297695ed1999e9a4cfd4d879d4a75aed50.svn-base new file mode 100644 index 0000000..0776c60 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/46/462d88297695ed1999e9a4cfd4d879d4a75aed50.svn-base @@ -0,0 +1,120 @@ +record (bi,"EC-GN-P01-GBFP:FMC4310-RV1") +{ + field(DESC, "Reserved for cRIO") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 11) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBFP:FMC4310-RV2") +{ + field(DESC, "Reserved for cRIO") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 12) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBFP:FMC4310-RV3") +{ + field(DESC, "Reserved for cRIO") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 13) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBFP:FMC4310-RV5") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBFP:FMC4310-RV6") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBFP:FMC4310-RV7") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBFP:FMC4310-RV8") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBFP:FMC4310-YSTA-GBOP") +{ + field(DESC, "GY2 Beam ON Status") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBFP:FMC4310-YTRP") +{ + field(DESC, "Interlock from fast protection 2") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 9) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-GBFP:FMC4310-YTRP2") +{ + field(DESC, "Pause signal from fast protection 2") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 10) bitread") + field(ONAM, "PAUSE") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + diff --git a/EC-GN-JA-PCF/.svn/pristine/46/46a808cfd5beafa5e60aefee867bf92025dc2849.svn-base b/EC-GN-JA-PCF/.svn/pristine/46/46a808cfd5beafa5e60aefee867bf92025dc2849.svn-base new file mode 100644 index 0000000..df999dd --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/46/46a808cfd5beafa5e60aefee867bf92025dc2849.svn-base @@ -0,0 +1 @@ +generic \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/48/485d347b8594a32bbe88fc8140331f42a390a008.svn-base b/EC-GN-JA-PCF/.svn/pristine/48/485d347b8594a32bbe88fc8140331f42a390a008.svn-base new file mode 100644 index 0000000..5598c54 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/48/485d347b8594a32bbe88fc8140331f42a390a008.svn-base @@ -0,0 +1,29 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.DataUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ScriptUtil); + +var table = widget.getTable(); +var fct_name=widget.getPropertyValue("name"); + +var selectionListener = new Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener() { + selectionChanged: function(selection) { + var selectedrow= table.getSelection(); + var cuName=selectedrow[0][0]; + var phyName=selectedrow[0][1]; + + var macroInput = DataUtil.createMacrosInput(true); + macroInput.put("CU", cuName); + macroInput.put("PHY_NAME", phyName); + macroInput.put("FCT_NAME", fct_name); + // open OPI + // see https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-boy/trunk/org.csstudio.opibuilder/src/org/csstudio/opibuilder/scriptUtil/ScriptUtil.java + if (cuName.indexOf("P") == 0) { + ScriptUtil.openOPI(widget, fct_name + "-" + cuName + "-PLCDetails.opi", 1, macroInput); + } + else { + ScriptUtil.openOPI(widget, fct_name+"-CubiclePLCDetails.opi", 0, macroInput); + } + } +}; +table.addSelectionChangedListener(selectionListener); + diff --git a/EC-GN-JA-PCF/.svn/pristine/48/48b543d561b4987879ec76372d7dddeeb902ca4e.svn-base b/EC-GN-JA-PCF/.svn/pristine/48/48b543d561b4987879ec76372d7dddeeb902ca4e.svn-base new file mode 100644 index 0000000..3ba269d --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/48/48b543d561b4987879ec76372d7dddeeb902ca4e.svn-base @@ -0,0 +1,2 @@ +#RULES_DIRS +include $(CONFIG)/RULES_DIRS diff --git a/EC-GN-JA-PCF/.svn/pristine/48/48b6238e3504c525c654bc5f385cfdf2873ae341.svn-base b/EC-GN-JA-PCF/.svn/pristine/48/48b6238e3504c525c654bc5f385cfdf2873ae341.svn-base new file mode 100644 index 0000000..00886e0 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/48/48b6238e3504c525c654bc5f385cfdf2873ae341.svn-base @@ -0,0 +1,15 @@ +#include "sdd-dan.h" +#include +#include "stdlib.h" + +int declareDANStruct(dan_Source ds ){ + + int result=0; + int Cnt=0; + if(ds==NULL){ + log_error("Invalid call to declareDANStruct, dan source not initialized \n "); + return -1; + } + + return 0; + } \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/49/4951acd666b7ef270c97c569ea65f9cff0794f05.svn-base b/EC-GN-JA-PCF/.svn/pristine/49/4951acd666b7ef270c97c569ea65f9cff0794f05.svn-base new file mode 100644 index 0000000..1b2696d --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/49/4951acd666b7ef270c97c569ea65f9cff0794f05.svn-base @@ -0,0 +1,257 @@ +### The board on the Right Side Slots + +# NI6259 P0 PVs +record(bo, "ni6259:d1:p0:do0"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do4"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do5"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do6"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do7"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} + +#NI6528 P3 PVs +record(bo, "ni6528:d1:p3:do0"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do4"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do5"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do6"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do7"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} + + +#NI6528 P4 PVs +record(bo, "ni6528:d1:p4:do0"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do4"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do5"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do6"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do7"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} + + +### Left Side Slots +# NI6259 P0 PVs +record(bo, "ni6259:d0:p0:do0"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do4"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do5"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do6"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do7"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} + +#NI6528 P3 PVs +record(bo, "ni6528:d0:p3:do0"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do4"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do5"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do6"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do7"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} + + +#NI6528 P4 PVs +record(bo, "ni6528:d0:p4:do0"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do4"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do5"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do6"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do7"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} diff --git a/EC-GN-JA-PCF/.svn/pristine/4b/4b097c32839a747f3e9a21cf7a5578b1cde41768.svn-base b/EC-GN-JA-PCF/.svn/pristine/4b/4b097c32839a747f3e9a21cf7a5578b1cde41768.svn-base new file mode 100644 index 0000000..c2d11a9 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/4b/4b097c32839a747f3e9a21cf7a5578b1cde41768.svn-base @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/4b/4ba8746e8a5b1cef852e24ba33f83c3b4871f9e0.svn-base b/EC-GN-JA-PCF/.svn/pristine/4b/4ba8746e8a5b1cef852e24ba33f83c3b4871f9e0.svn-base new file mode 100644 index 0000000..0e1b217 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/4b/4ba8746e8a5b1cef852e24ba33f83c3b4871f9e0.svn-base @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/4b/4bcbb25a3345164e6a381b55704f07fb8e0312de.svn-base b/EC-GN-JA-PCF/.svn/pristine/4b/4bcbb25a3345164e6a381b55704f07fb8e0312de.svn-base new file mode 100644 index 0000000..e9041ce --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/4b/4bcbb25a3345164e6a381b55704f07fb8e0312de.svn-base @@ -0,0 +1,149 @@ +/** + * @file JAModeControlGAM.h + * @brief Header file for class JAModeControlGAM + * @date Jan, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAModeControlGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAMODECONTROLGAM_H_ +#define GAMS_JAMODECONTROLGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that check the pulse lenght limit. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +ModeLimitGAM = {
+ *           Class = JAModeControlGAM
+ *           InputSignals = {
+ *               PLC_MODE1 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD1_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               PLC_MODE2 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD2_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               PLC_MODE3 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD3_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               PLC_MODE4 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD4_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               HVInjection = {
+ *               	DataSource = RealTimeThreadAsyncBridge
+ *               	Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * If MODE1 is ON and Time is exceed MD1_SHOTLEN_LIM, MODE_SHOTLEN_FLAG become ON. + */ + +class JAModeControlGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAModeControlGAM(); + + virtual ~JAModeControlGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + + MARTe::uint32 CalcPulseLengthLimit(MARTe::uint32 **inputSignals); + + // Input signals + MARTe::uint32 **inputSignals; + + // Output signals + MARTe::uint32 *outputSignal; + + // Calculated pulse lenght limit. + MARTe::uint32 pulseLengthLimit; + + // Amount of time passed per execution cycle. + MARTe::uint32 rfonTime; + + // reset flag + bool resetRemainingTime; + MARTe::uint32 previousState; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAMODECONTROLGAM_H_ */ diff --git a/EC-GN-JA-PCF/.svn/pristine/4c/4c008fb086ec9ae271cbafab9e19ae94c0550990.svn-base b/EC-GN-JA-PCF/.svn/pristine/4c/4c008fb086ec9ae271cbafab9e19ae94c0550990.svn-base new file mode 100644 index 0000000..c3eaa05 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/4c/4c008fb086ec9ae271cbafab9e19ae94c0550990.svn-base @@ -0,0 +1,31 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import ColorFontUtil + + +table = widget.getTable() +nbColPVs=2 +#find index of the trigger PV +i=0 +while triggerPV != pvs[i]: + i+=1 + +s = PVUtil.getSeverity(triggerPV) + +color = ColorFontUtil.WHITE +if s == 0: + color = ColorFontUtil.GREEN +elif s == 1: + color = ColorFontUtil.RED +elif s == 2: + color = ColorFontUtil.YELLOW +elif s == 3: + color = ColorFontUtil.PINK +elif s == 4: + color = ColorFontUtil.GREEN +# table.setCellBackground(i/nbColPVs, i%nbColPVs + 3, color) +if "-CUBHLTS" in triggerPV.getName(): + table.setCellText(i/nbColPVs, 3, PVUtil.getString(triggerPV)) + table.setCellBackground(i/nbColPVs, 3, color) +if "-PLCHLTS" in triggerPV.getName(): + table.setCellText(i/nbColPVs, 4, PVUtil.getString(triggerPV)) + table.setCellBackground(i/nbColPVs, 4, color) diff --git a/EC-GN-JA-PCF/.svn/pristine/4c/4c9a1176dcf52d8f864e19529ce95425546b58c2.svn-base b/EC-GN-JA-PCF/.svn/pristine/4c/4c9a1176dcf52d8f864e19529ce95425546b58c2.svn-base new file mode 100644 index 0000000..fa62c0e --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/4c/4c9a1176dcf52d8f864e19529ce95425546b58c2.svn-base @@ -0,0 +1,17 @@ +######################################## +# Program-specific environment variables +######################################## + +# INFO - This file is part of the I&C project. It can be modified without risk of being overwritten. +# INFO - This file is sourced when invoking 'mvn run -Dprog=' to allow for setting development-specific environment variables. + +# Override SDN interface name for test purposes +# Default: lo +# Project: Target host in SDD database +#SDN_INTERFACE_NAME=lo + +# INFO - This file can be further extended with anything specific required by the program. + +#LOG_FILE_ENABLE=false +#LOG_FILTER_LEVEL=info +#LOG_FWD_MODE=asyn diff --git a/EC-GN-JA-PCF/.svn/pristine/4c/4ca6a80f8855bcd5787141444c0a11312ad980b9.svn-base b/EC-GN-JA-PCF/.svn/pristine/4c/4ca6a80f8855bcd5787141444c0a11312ad980b9.svn-base new file mode 100644 index 0000000..7c58c4c --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/4c/4ca6a80f8855bcd5787141444c0a11312ad980b9.svn-base @@ -0,0 +1,1471 @@ + + + + Display + + true + F0 + 52RF01-PCF-4210 + EC-GN-SYSM + 52RF + 01 + 4210 + PCF + + false + + 3236 + + + true + 1760 + true + EC-GN-SYSM + 6 + true + true + 0 + + + + + + + + 0 + false + + + + false + -1 + -1 + + + + + true + Grouping Container + + true + + true + 6 + + true + + 2 + groupHeading + + false + false + false + + + + + true + false + + 0 + + + + + + + 0 + + + + + + 1243 + 50 + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + SystemDetailsLabel + + + false + false + false + + + false + System Information: + + true + 1 + true + Label + 40 + true + + 6 + 55 + + + + + + /opt/codac/opi/epics-sysmon/boy/ITER-SYSM-SYS_Mimic.opi + + true + + 0 + + + + false + + + + 6 + 2 + true + + IO Label + + false + + + + 37 + + Action Button Template + 0 + + + + + false + false + false + + + + More Details + false + $(pv_name) +$(pv_value) + true + Action Button + 279 + 6cb4f02d:15e5c6fbe55:-70fa + 200 + 45 + + + true + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + (%) + sysmon + + + + + + + (°C) + picmg-sensors + + + + + + + (°C) + picmg-sensors + + + + + + + (°C) + picmg-sensors + + + + + + + (MB) + sysmon + + + + + + + (MB) + sysmon + + + + + + + (%) + sysmon + + + + + + + + sysmon + + + + + + + (%) + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + (KB) + sysmon + + + + + + + (KB) + sysmon + + + + + + + (%) + sysmon + + + + + + + (KBps) + sysmon + + + + + + + (KBps) + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon-tcnd + + + + + + + + sysmon + + + + + + + (ns) + sysmon-tcnd + + + + + + + (ns) + sysmon-tcnd + + + + + + + (ns) + sysmon-tcnd + + + + + + + (ns) + sysmon-tcnd + + + + + + + + sysmon-tcnd + + + + + + + (ns) + sysmon-tcnd + + + + + + + (s) + sysmon-tcnd + + + + + + + + sysmon-tcnd + + + + + 1 + + + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-BTIME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CAV1 + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CCSV + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPUUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CTEMPAVG + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CTEMPMAX + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CTEMPMIN + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-DISKFREE + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-DISKMAX + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-DISKUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-EPICSV + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-FDUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-HOSTNAME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-IPADDR + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-KERNELV + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-MEMFREE + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-MEMMAX + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-MEMUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-NRBPS + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-NSBPS + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-OSV + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PROCLST + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PROCSTS + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PS + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SHLT + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TDEVICE + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TIME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TMAXOFF + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TMEANOFF + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TMINOFF + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TOFFSET + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TSTATUS + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TSTDOFF + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TUPTIME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TVERSION + + + 600 + SystemDetailsTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1500 + 6 + + + Name + 200 + no + + + Value + 200 + no + + + Status + 100 + no + + + Severity + 75 + no + + + EGU + 0 + no + + + Template Name + 100 + no + + + false + + 2 + + + + 5 + + 125 + + 6 + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + COREIOCDetailsLabel + + + false + false + false + + + false + CORE IOC: + + true + 1 + true + Label + 40 + true + + 1600 + 55 + + + + + + /opt/codac/opi/epics-sysmon/boy/ITER-SYSM-IOC_Mimic.opi + + true + + 0 + + + + false + + + + 6 + 2 + true + + IO Label + + false + + + + 37 + + Action Button Template + 0 + + + + + false + false + false + + + + More Details + false + $(pv_name) +$(pv_value) + true + Action Button + 279 + 6cb4f02d:15e5c6fbe55:-70fa + 1800 + 45 + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-BECTME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-CACLNTC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-CAPVC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-CONTMO + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-CPUUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-DBCLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-DBDLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-DBRECC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-FDUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-HB + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-IOCDIR.VAL$ + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-MEMUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-PID + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-STTOD + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-SVPORT + + + 600 + COREIOCDetailsTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1500 + 6 + + + Name + 200 + no + + + Value + 200 + no + + + Status + 100 + no + + + Severity + 75 + no + + + EGU + 0 + no + + + false + + 2 + + + + 4 + + 125 + + 1600 + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + SYSMIOCDetailsLabel + + + false + false + false + + + false + SYSM IOC: + + true + 1 + true + Label + 40 + true + + 6 + 750 + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + + + + + + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-BECTME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-CACLNTC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-CAPVC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-CONTMO + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-CPUUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-DBCLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-DBDLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-DBRECC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-FDUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-HB + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-IOCDIR.VAL$ + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-MEMUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-PID + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-STTOD + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-SVPORT + + + 600 + SYSMIOCDetailsTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1500 + 6 + + + Name + 200 + no + + + Value + 200 + no + + + Status + 100 + no + + + Severity + 75 + no + + + EGU + 0 + no + + + false + + 2 + + + + 4 + + 790 + + 6 + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + PLCIOCDetailsLabel + + + false + false + false + + + false + Others: + + true + 1 + true + Label + 40 + true + + 1600 + 750 + + + + true + + + + + + + 600 + PLCIOCDetailsTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1500 + 6 + + + Name + 200 + no + + + Value + 200 + no + + + Status + 100 + no + + + Severity + 75 + no + + + EGU + 0 + no + + + false + + 2 + + + + 4 + + 790 + + 1600 + + + + + + + + true + Grouping Container + + true + + true + 1243 + + false + false + false + + 6 + + true + + 48 + 2 + groupICProjectInfo + + + + true + false + + 1500 + + + + + + + 0 + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 38 + 0 + I&C Project Name: EC-GN, Version: 4 + + + false + false + false + + + false + I&C Project Name: EC-GN, Version: 4 + + true + 1 + true + Label + 3000 + true + + 40 + 0 + + + + + + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/4d/4d0d4a9f9c5419716adc211e5fad73939eb957d5.svn-base b/EC-GN-JA-PCF/.svn/pristine/4d/4d0d4a9f9c5419716adc211e5fad73939eb957d5.svn-base new file mode 100644 index 0000000..f5f01cc --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/4d/4d0d4a9f9c5419716adc211e5fad73939eb957d5.svn-base @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=RandomDataSource.x + +PACKAGE=DataSources + +ROOT_DIR=../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/RandomDataSource$(LIBEXT) \ + $(BUILD_DIR)/RandomDataSource$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/.svn/pristine/4d/4d0efcf04f4bdf1098c1953e08dbce7c37031a73.svn-base b/EC-GN-JA-PCF/.svn/pristine/4d/4d0efcf04f4bdf1098c1953e08dbce7c37031a73.svn-base new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/4d/4d0efcf04f4bdf1098c1953e08dbce7c37031a73.svn-base @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/.svn/pristine/4d/4d38832d2f7f52eeb0a4e98e9ab63d1fa17b661e.svn-base b/EC-GN-JA-PCF/.svn/pristine/4d/4d38832d2f7f52eeb0a4e98e9ab63d1fa17b661e.svn-base new file mode 100644 index 0000000..8f595b2 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/4d/4d38832d2f7f52eeb0a4e98e9ab63d1fa17b661e.svn-base @@ -0,0 +1,414 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + + +def test_async(): + """" + Simulate permit signal and ON signal from PLC. + Confirm pulse generation with async mode. 10ms + """ + print '1.set beam-on schedule (10ms diff + 3s pulse.)' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 10000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 20000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 30000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 40000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 50000000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 1000000', shell=True) + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 10000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(1) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print "end of async, non-prepro mode test!" + +def test_async_limit(): + """" + Mode Limit Stop test. + Pulse lenght was set to 3s, but it stop in 1s because of mode limit. + """ + print '1.set beam-on schedule' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 1000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 11000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 21000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 31000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 41000000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 3000000', shell=True) + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(6) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print "end of async, non-prepro mode test!" + +def test_async_prepro(): + """PrePro mode test""" + print '1.set beam-on schedule' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 100000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 200000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 300000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 400000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 500000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 3000000', shell=True) + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 10000000', shell = True) + time.sleep(1) + print '1.Set Pre-Pro flag' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-PREP-MODE 1', shell = True) + time.sleep(1) + print '2.Reset Mode 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 0', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 0', shell = True) + print '3.Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(2) + print '4.Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) + time.sleep(4) + print '5.Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(3) + print '6.Reset Pre-Pro flag' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-PREP-MODE 0', shell = True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print 'end of async, prepro mode testscript!' + +def test_async_shortpulse(): + """Short Pulse Mode test""" + #print '1.Set puls length to 1ms (1ms diff)' + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-SHORT-PULSE 1', shell=True) #Set short pulse mode. + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 1000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 2000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 3000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 4000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 5000', shell=True) #Should be grater than 1ms. + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 1000', shell=True) + print '1.Set puls length to 100us (100us diff)' + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-SHORT-PULSE 1', shell=True) #Set short pulse mode. + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 100', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 200', shell=True) + #res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 300', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 400', shell=True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 800', shell=True) #Should be grater than 1ms. + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 100', shell=True) + print '1.Set puls length (100us diff)' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-SHORT-PULSE 1', shell=True) #Set short pulse mode. + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 100', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 200', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 300', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 400', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 800', shell=True) #Should be grater than 1ms. + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 500', shell=True) + print '2.Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(1) + print '3.Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(1) + print '4.Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '5.Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print '6.Reset short pulse mode' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-SHORT-PULSE 0', shell=True) #Set short pulse mode. + print "-----------------------------------------\n" + +def test_async_longpulse(): + """" + Simulate permit signal and ON signal from PLC. + Confirm pulse generation with async mode. 10ms + """ + print '1.set beam-on schedule (10ms diff + 50ms pulse.)' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 10000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 20000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 30000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 40000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 50000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 3600000000', shell=True) + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 180000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(185) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print "end of async, non-prepro mode test!" + +def test_async_both(): + """" + Simultanious operation test. + """ + print '1.set beam-on schedule (10ms diff + 500ms pulse.)' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 10000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 20000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 30000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 40000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 50000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 500000', shell=True) + + res = subprocess.call('caput EC-GN-P01-PA2F:STAT-DT-HVON 10000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:STAT-DT-HVON 20000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:STAT-DT-SWON 40000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA2F:STAT-DT-SWON 50000', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-DT-SHOTLEN 500000', shell=True) + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(1) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 0', shell=True) + print "end of async, non-prepro mode test!" + +def test_async_GYA(): + """" + Test GYA operation with Async mode. + """ + #print '1.set beam-on schedule (1s diff + 1s pulse.)' + #print '1.set beam-on schedule (100ms diff + 1s pulse.)' + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 100000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 200000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 300000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 400000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 500000', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 1000000', shell=True) + #print '1.set beam-on schedule (10ms diff + 100ms pulse.)' + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 10000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 20000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 30000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 40000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 50000', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 100000', shell=True) + #print '1.set beam-on schedule (1ms diff + 10ms pulse.)' + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 1000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 2000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 3000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 4000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 5000', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 10000', shell=True) + print '1.set beam-on schedule (1s diff + 20s pulse.)' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 1000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 2000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 3000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 4000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 5000000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 20000000', shell=True) + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(30) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print "end of async, non-prepro mode test!" + +def test_async_GYB(): + """" + Test GYB operation with Async mode. + """ + print '1.set beam-on schedule (1s diff + 1s pulse.)' + res = subprocess.call('caput EC-GN-P01-PA2F:STAT-DT-HVON 1000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:STAT-DT-HVON 2000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 3000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:STAT-DT-SWON 4000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA2F:STAT-DT-SWON 5000000', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-DT-SHOTLEN 20000000', shell=True) + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(30) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 0', shell=True) + print "end of async, non-prepro mode test!" +def test_async_GYA_manual(): + """" + Test GYA operation with Async mode. + """ + print '1.. Set delays and pulse length on HMI and set sleep time here:' + inp_val = raw_input() + try: + sleep_time = float(inp_val) + except: + return + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(sleep_time) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print "end of async, non-prepro mode test!" + +def test_async_GYB_manual(): + """" + Test GYA operation with Async mode. + """ + print '1.. Set delays and pulse length on HMI and set sleep time here:' + inp_val = raw_input() + try: + sleep_time = float(inp_val) + except: + return + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(sleep_time) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 0', shell=True) + print "end of async, non-prepro mode test!" diff --git a/EC-GN-JA-PCF/.svn/pristine/4d/4dca29abe1ea225f0f812da1184a3be00fa23b36.svn-base b/EC-GN-JA-PCF/.svn/pristine/4d/4dca29abe1ea225f0f812da1184a3be00fa23b36.svn-base new file mode 100644 index 0000000..a8af1fe --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/4d/4dca29abe1ea225f0f812da1184a3be00fa23b36.svn-base @@ -0,0 +1,37 @@ +#ifndef SDD_IOMODULE_H +#define SDD_IOMODULE_H + +//include all linux libraries for IO module listed in the programs + + +//max is 15 for component name +#define SDD_CPMAXLENGTH 50 +#define SDD_SERIALNBMAXLENGTH 60 +#define SDD_FDPREFIXMAXLENGTH 100 + +struct SDD_IOModule { + + //name of the module + char name[SDD_CPMAXLENGTH]; + + //type of the module + char modtype[SDD_CPMAXLENGTH]; + + //module index + int fd; + + //file descriptor name + char filedescrip_prefix[SDD_FDPREFIXMAXLENGTH]; + + //serial number + char serial_number [SDD_SERIALNBMAXLENGTH]; + +}; + +//list of symbol for IOModule : IO module type and fd +typedef enum SDD_IOModuleEnum { + + } SDD_IOModuleEnum; + + +#endif /* SDD_IOMODULE_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/4e/4e2dbd52e7f4d44bb897c60332f73ce790c2c609.svn-base b/EC-GN-JA-PCF/.svn/pristine/4e/4e2dbd52e7f4d44bb897c60332f73ce790c2c609.svn-base new file mode 100644 index 0000000..5a244e9 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/4e/4e2dbd52e7f4d44bb897c60332f73ce790c2c609.svn-base @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/50/50914f9ee1d8215fcd85b6d3ff3f49fc18ee48f1.svn-base b/EC-GN-JA-PCF/.svn/pristine/50/50914f9ee1d8215fcd85b6d3ff3f49fc18ee48f1.svn-base new file mode 100644 index 0000000..f143ef0 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/50/50914f9ee1d8215fcd85b6d3ff3f49fc18ee48f1.svn-base @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/51/517cbe55fa5fdb473c64c3e12cc0fbd0791081e8.svn-base b/EC-GN-JA-PCF/.svn/pristine/51/517cbe55fa5fdb473c64c3e12cc0fbd0791081e8.svn-base new file mode 100644 index 0000000..0b30380 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/51/517cbe55fa5fdb473c64c3e12cc0fbd0791081e8.svn-base @@ -0,0 +1,424 @@ +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START") +{ + field(DESC, "Auto rampup start command") + field(HIGH, "0.1") + field(ONAM, "Start") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Stop") +} + +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-LOC") +{ + field(DESC, "Local control on") + field(DTYP, "stream") + field(ONAM, "LOC") + field(OUT, "@PCR500LE.proto setLoc FHPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB") +{ + field(DESC, "Output ON readback") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto getOut FHPS2") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-OUTON-SP") +{ + field(DESC, "Output ON command") + field(DTYP, "stream") + field(ONAM, "REM") + field(OUT, "@PCR500LE.proto setOut FHPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-REM") +{ + field(DESC, "Remote control on") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PCR500LE.proto setRem FHPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-RST") +{ + field(DESC, "Reset command") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PCR500LE.proto resetDevice FHPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-RB") +{ + field(DESC, "External control readback") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto getSourceON FHPS2") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-SP") +{ + field(DESC, "External control ON command") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PCR500LE.proto setSourceON FHPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP") +{ + field(DESC, "GY2 FHPS rampup comp") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY2 FHPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:STAT-SIMM") +{ + field(DESC, "GY2 FHPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-ACV-RB") +{ + field(DESC, "Output Voltage readback") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(INP, "@PCR500LE.proto getVolt FHPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-ACV-SP") +{ + field(DESC, "Output voltage setpoint") + field(DRVH, "300") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(LOPR, "0") + field(OUT, "@PCR500LE.proto setVolt FHPS2") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-AUTO-RU-TIME") +{ + field(DESC, "Auto rampup time") + field(DRVH, "100000") + field(DRVL, "10") + field(EGU, "sec") + field(HOPR, "100000") + field(LOPR, "10") + field(PINI, "NO") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "30") +} + +record (mbbo,"EC-GN-P01-GBF-FHPS:PSU2610-AUTO-STAT") +{ + field(DESC, "Auto rampup status") + field(ONST, "IN OPERATION") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(THST, "ERROR") + field(THVL, "3") + field(TWST, "FINISH") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "NOT IN OPERATION") + field(ZRVL, "0") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV") +{ + field(DESC, "Auto rampup target voltage") + field(DRVH, "300") + field(DRVL, "0.0") + field(EGU, "V") + field(HOPR, "60.0") + field(LOPR, "0.0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-CURR-RB") +{ + field(DESC, "Output Current readback") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "5") + field(INP, "@PCR500LE.proto getCurr FHPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-CURR-SP") +{ + field(DESC, "Output current setpoint") + field(DRVH, "5.0") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "5.0") + field(LOPR, "0") + field(OUT, "@PCR500LE.proto setCurr FHPS2") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-EREF") +{ + field(DESC, "GY2 FHPS voltage setpoint") + field(DRVH, "150") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "150") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-EREF-MSP") +{ + field(DESC, "GY2 FHPS voltage manual setpoint") + field(DRVH, "150") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "150") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (stringin,"EC-GN-P01-GBF-FHPS:PSU2610-ERROR") +{ + field(DESC, "Error code") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto getError FHPS2") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-FRQ-RB") +{ + field(DESC, "Output frequency readback") + field(DTYP, "stream") + field(EGU, "Hz") + field(HOPR, "1000") + field(INP, "@PCR500LE.proto getFreq FHPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-FRQ-SP") +{ + field(DESC, "Output frequency setpoint") + field(DRVH, "999.9") + field(DRVL, "1") + field(DTYP, "stream") + field(EGU, "Hz") + field(HOPR, "1000") + field(LOPR, "0") + field(OUT, "@PCR500LE.proto setFreq FHPS2") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "1") +} + +record (stringin,"EC-GN-P01-GBF-FHPS:PSU2610-IDN") +{ + field(DESC, "IDN") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto readDeviceID FHPS2") + field(PINI, "NO") + field(SCAN, "10 second") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACI") +{ + field(DESC, "Measued AC Current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "5.0") + field(INP, "@PCR500LE.proto getMeasACI FHPS2") + field(LOPR, "-5.0") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACP") +{ + field(DESC, "Measued AC Power") + field(DTYP, "stream") + field(EGU, "W") + field(HOPR, "500") + field(INP, "@PCR500LE.proto getMeasACP FHPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV") +{ + field(DESC, "Measued AC Voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(INP, "@PCR500LE.proto getMeasACV FHPS2") + field(LOPR, "-300") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-MEAS-FRQ") +{ + field(DESC, "Measued Frequency") + field(DTYP, "stream") + field(EGU, "Hz") + field(HOPR, "1000") + field(INP, "@PCR500LE.proto getMeasACF FHPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "1") +} + +record (calcout,"EC-GN-P01-GBF-FHPS:STAT-AUTO-MODE-SET") +{ + field(CALC, "A==1?0:1") + field(DESC, "GYB FHPS rampup comp off") + field(INPA, "EC-GN-P01-GBF:STAT-SM") + field(OOPT, "Transition To Zero") + field(OUT, "EC-GN-P01-GBF-FHPS:STAT-MANM PP") + field(SCAN, "1 second") +} + +record (waveform,"EC-GN-P01-GBF-FHPS:STAT-PREP-WF") +{ + field(DESC, "GY2 FHPS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CALC") +{ + field(CALC, "A==2?1:0") + field(DESC, "GYB FHPS rampup comp check") + field(INPA, "EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CMP") + field(OOPT, "When Non-zero") + field(OUT, "EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP PP") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CMP") +{ + field(CALC, "(ABS(A-B)<0.1*B)?2:((C > D)?1:0);D:=C") + field(DESC, "GYB FHPS rampup stat check") + field(FLNK, "EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CALC") + field(INPA, "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV") + field(INPB, "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV") + field(INPC, "EC-GN-P01-GBF-FHPS:PSU2610-EREF") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GBF-FHPS:STAT-RAMPUP-OFF") +{ + field(CALC, "A==0?0:1") + field(DESC, "GYB FHPS rampup comp off") + field(INPA, "EC-GN-P01-GPS:PLC4110-YTS-ST1R") + field(OOPT, "When Zero") + field(OUT, "EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP PP") + field(SCAN, "1 second") +} + diff --git a/EC-GN-JA-PCF/.svn/pristine/53/5319a1a2d1d0f7173cffb44d2ca7336c2fd927fa.svn-base b/EC-GN-JA-PCF/.svn/pristine/53/5319a1a2d1d0f7173cffb44d2ca7336c2fd927fa.svn-base new file mode 100644 index 0000000..ebe75ef --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/53/5319a1a2d1d0f7173cffb44d2ca7336c2fd927fa.svn-base @@ -0,0 +1,242 @@ + + + + +EC-GN-SYSM + +EC-GN-SYSM-52RF-01:PLC4110-CFGWRCNTR +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PLC4110-PLCHLTS +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PLC4110-EVTHLTS +1.0 +0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-BTIME + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-CCSV + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-CORE-DBDLC + 10.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-CORE-DBRECC + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-CORE-STTOD + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-CPUUTL + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-DISKUTL + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-EPICSV + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-HOSTNAME + 1.0 +0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-MEMUTL + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-NRBPS + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-NSBPS + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-SHLT + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-SYSHLTS + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-SYSM-DBDLC + 10.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-SYSM-DBRECC + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-SYSM-STTOD + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-TDEVICE + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-TOFFSET + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-TSTATUS + 1.0 + 0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-BTIME +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-CCSV +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-CPUUTL +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-DISKUTL +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-EPICSV +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-HOSTNAME +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-MEMUTL +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-NRBPS +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-NSBPS +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-SHLT +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-SYSHLTS +1.0 +0.0 + + + +EC-GN-HWCF + + +EC-GN-P01-GAF + + +EC-GN-P01-GAF-CCPS + + +EC-GN-P01-GAF-FHPS + + +EC-GN-P01-GAF-GCPS + + +EC-GN-P01-GAF-MCPS + + +EC-GN-P01-GAFP + + +EC-GN-P01-GBF + + +EC-GN-P01-GBF-CCPS + + +EC-GN-P01-GBF-FHPS + + +EC-GN-P01-GBF-GCPS + + +EC-GN-P01-GBF-MCPS + + +EC-GN-P01-GBFP + + +EC-GN-P01-GPF + + +EC-GN-P01-GPS + + +EC-GN-P01-PA1F + + +EC-GN-P01-PA2F + + +EC-GN-P01-PB1F + + +EC-GN-P01-PB2F + + +EC-GN-P01-PMF + + diff --git a/EC-GN-JA-PCF/.svn/pristine/54/54771e7a1107a816e88d89281286046ae91019f9.svn-base b/EC-GN-JA-PCF/.svn/pristine/54/54771e7a1107a816e88d89281286046ae91019f9.svn-base new file mode 100644 index 0000000..dbc6b1e --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/54/54771e7a1107a816e88d89281286046ae91019f9.svn-base @@ -0,0 +1,25 @@ +#====================================================================== +# Loading DBs +#====================================================================== +cd $(TOP)/db + + +#====================================================================== +# Loading Substitution Files +#====================================================================== +cd $(TOP)/iocBoot/$(IOC) + + +#====================================================================== +# PLC Communication Monitoring PVs DB Loading +#====================================================================== +cd $(EPICS_ROOT)/db + + +#====================================================================== +# IOC Monitor +#====================================================================== +cd $(EPICS_ROOT)/db +#dbLoadRecords("iocmon.db","CBS=EC-GN-SYSM, CTRLTYPE=Àéï=é, IDX=0, IOCTYPE=CUB, PP=, PPPP=, NNNN=, TTT=") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/.svn/pristine/54/54be21e00f211e3f81a33f1feb6d5ec457bc4580.svn-base b/EC-GN-JA-PCF/.svn/pristine/54/54be21e00f211e3f81a33f1feb6d5ec457bc4580.svn-base new file mode 100644 index 0000000..0c4212c --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/54/54be21e00f211e3f81a33f1feb6d5ec457bc4580.svn-base @@ -0,0 +1,29 @@ +//+====================================================================== +// $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-sdd-translator-parts/tags/CODAC-CORE-6.0.0/org.iter.codac.sdd.translators/src/main/resources/templates/sdn/includetopics.h.vm $ +// $Id: includetopics.h.vm 83098 2018-01-08 13:23:38Z cesnikt $ +// +// Project : CODAC Core System +// +// Description : SDN Program - Gyrotron02DAN +// +// Author : Kirti Mahajan, Lana Abadie and TCS (link with velocity and SDD model) +// +// Copyright (c) : 2010-2018 ITER Organization, +// CS 90 046 +// 13067 St. Paul-lez-Durance Cedex +// France +// +// This file is part of ITER CODAC software. +// For the terms and conditions of redistribution or use of this software +// refer to the file ITER-LICENSE.TXT located in the top level directory +// of the distribution package. +// +//-====================================================================== + +#ifndef INCLUDETOPICS_H +#define INCLUDETOPICS_H + +#include + + +#endif \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/55/55d3ec486070fce2b5a8392ee5c3ed6121017e46.svn-base b/EC-GN-JA-PCF/.svn/pristine/55/55d3ec486070fce2b5a8392ee5c3ed6121017e46.svn-base new file mode 100644 index 0000000..29d9b00 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/55/55d3ec486070fce2b5a8392ee5c3ed6121017e46.svn-base @@ -0,0 +1,6 @@ +############################################################################ +## Thread scheduling configuration for real-time tuning +############################################################################ + + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/.svn/pristine/56/561bdf8242299eac7602f6eb1f790f96fbb19005.svn-base b/EC-GN-JA-PCF/.svn/pristine/56/561bdf8242299eac7602f6eb1f790f96fbb19005.svn-base new file mode 100644 index 0000000..256fd18 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/56/561bdf8242299eac7602f6eb1f790f96fbb19005.svn-base @@ -0,0 +1 @@ +Last SDD Generation: Tue May 13 15:53:47 UTC 2025 diff --git a/EC-GN-JA-PCF/.svn/pristine/56/56c3385c9c5b4d1fefbe2cadf37f5c02fd249a09.svn-base b/EC-GN-JA-PCF/.svn/pristine/56/56c3385c9c5b4d1fefbe2cadf37f5c02fd249a09.svn-base new file mode 100644 index 0000000..4226fef --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/56/56c3385c9c5b4d1fefbe2cadf37f5c02fd249a09.svn-base @@ -0,0 +1,187 @@ +/** + * @file JAPreProgrammedGAM.h + * @brief Header file for class JAPreProgrammedGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAPreProgrammedGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAPREPROGRAMMEDGAM_H_ +#define GAMS_JAPREPROGRAMMEDGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "GAM.h" +#include "Message.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that update PS output value for pre-programmed operation. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +PreProgrammedGAM = {
+ *           Class = JAPreProgrammedGAM
+ *           Directory = "../Configurations" // Directory which has pre-pro configuration file.
+ *           PreProgrammedPeriodMs = 1       // RFON state is executed every millisecond.
+ *           InputSignals = {
+ *               CSV_LOAD = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               Filename = {
+ *                   Alias = CSV_NAME
+ *                   DataSource = EPICSCAInput
+ *               }
+ *               FHPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               GYA_PREHEAT_TIME = {
+ *                   DataSource = DDB1
+ *                   Type = int32
+ *               }
+ *               MHVPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               BPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               APS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               MCPS_TRG_CURR_SET = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               GCPS_TRG_CURR_SET = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               FHPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               CSV_LOADED = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               CSV_ERR = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * + */ + +class JAPreProgrammedGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAPreProgrammedGAM(); + + virtual ~JAPreProgrammedGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + bool LoadFile(); + + void DeleteArrays(); + + //Parameters + MARTe::StreamString directory; //Location for prepro configuration file. + MARTe::uint32 preProgrammedExecutaionPeriodMs; // Time between to execution cycles in milliseconds in pre-programmed mode. + + //Input Signals + MARTe::uint32 *loadTriggerSignal; //index:0 + MARTe::uint32 filenameSignalIndex;//index:1 + MARTe::float32 *fhpsrefSignal; //index:2 + MARTe::uint32 *rfonStateSignal; //index:3 + + //Output Signals + MARTe::int32 *timeSignal; //index:0 + MARTe::float32 **valueSignals; //index:1-5 = BPS,APS,MC,GC,FHPS + MARTe::uint32 *fileLoadedSignal; //index:6 + MARTe::uint32 *fileLoadErrorOutput;//index:7 + + //Internal variables + MARTe::int32 *preProgrammedTime; + MARTe::float32 **preProgrammedValues; + + MARTe::uint32 startTime; + + //Number of columns in csv, EXCLUDING the time + MARTe::uint32 numberOfPreProgrammedValues; //is 5.(BPS, APS, MC, GC, FHPS) + MARTe::uint32 numberOfPreProgrammedTimeRows; //This start from t=0 row. + MARTe::uint32 currentRow; + + // Number of milliseconds since the last time output signals were updated. + MARTe::uint32 msCounter; + + // Row number where the pre-programmed data begins (time == 0). + MARTe::uint32 preProgrammedRow; + + enum OperationMode { + LoadFileMode, PreProgrammedMode, None + }; + enum PreProTableDefinition { + Time, MHVPS, BPS, APS, MCPS, GCPS, FHPS + }; + + OperationMode mode; + + bool resetOutputSignals; + + // Flag determining whether file should be read (so it isn't read multiple time) + bool readOnce; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAPREPROGRAMMEDGAM_H_ */ diff --git a/EC-GN-JA-PCF/.svn/pristine/56/56cbc568d160147013d7797e1d940a2fb77683a3.svn-base b/EC-GN-JA-PCF/.svn/pristine/56/56cbc568d160147013d7797e1d940a2fb77683a3.svn-base new file mode 100644 index 0000000..07d2393 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/56/56cbc568d160147013d7797e1d940a2fb77683a3.svn-base @@ -0,0 +1,103 @@ +#test configuration file2 +#Time,BPS,APS,MC,GC,FHPS +0,10,10,10,10,10 +10,9,9,9,9,9 +20,8,8,8,8,8 +30,7,7,7,7,7 +40,6,6,6,6,6 +50,5,5,5,5,5 +60,4,4,4,4,4 +70,3,3,3,3,3 +80,2,2,2,2,2 +90,1,1,1,1,1 +100,0,0,0,0,0 +110,1,1,1,1,1 +120,2,2,2,2,2 +130,3,3,3,3,3 +140,4,4,4,4,4 +150,5,5,5,5,5 +160,6,6,6,6,6 +170,7,7,7,7,7 +180,8,8,8,8,8 +190,9,9,9,9,9 +200,10,10,10,10,10 +210,9,9,9,9,9 +220,8,8,8,8,8 +230,7,7,7,7,7 +240,6,6,6,6,6 +250,5,5,5,5,5 +260,4,4,4,4,4 +270,3,3,3,3,3 +280,2,2,2,2,2 +290,1,1,1,1,1 +300,0,0,0,0,0 +310,1,1,1,1,1 +320,2,2,2,2,2 +330,3,3,3,3,3 +340,4,4,4,4,4 +350,5,5,5,5,5 +360,6,6,6,6,6 +370,7,7,7,7,7 +380,8,8,8,8,8 +390,9,9,9,9,9 +400,10,10,10,10,10 +410,9,9,9,9,9 +420,8,8,8,8,8 +430,7,7,7,7,7 +440,6,6,6,6,6 +450,5,5,5,5,5 +460,4,4,4,4,4 +470,3,3,3,3,3 +480,2,2,2,2,2 +490,1,1,1,1,1 +500,0,0,0,0,0 +510,1,1,1,1,1 +520,2,2,2,2,2 +530,3,3,3,3,3 +540,4,4,4,4,4 +550,5,5,5,5,5 +560,6,6,6,6,6 +570,7,7,7,7,7 +580,8,8,8,8,8 +590,9,9,9,9,9 +600,10,10,10,10,10 +610,9,9,9,9,9 +620,8,8,8,8,8 +630,7,7,7,7,7 +640,6,6,6,6,6 +650,5,5,5,5,5 +660,4,4,4,4,4 +670,3,3,3,3,3 +680,2,2,2,2,2 +690,1,1,1,1,1 +700,0,0,0,0,0 +710,1,1,1,1,1 +720,2,2,2,2,2 +730,3,3,3,3,3 +740,4,4,4,4,4 +750,5,5,5,5,5 +760,6,6,6,6,6 +770,7,7,7,7,7 +780,8,8,8,8,8 +790,9,9,9,9,9 +800,10,10,10,10,10 +810,9,9,9,9,9 +820,8,8,8,8,8 +830,7,7,7,7,7 +840,6,6,6,6,6 +850,5,5,5,5,5 +860,4,4,4,4,4 +870,3,3,3,3,3 +880,2,2,2,2,2 +890,1,1,1,1,1 +900,0,0,0,0,0 +910,1,1,1,1,1 +920,2,2,2,2,2 +930,3,3,3,3,3 +940,4,4,4,4,4 +950,5,5,5,5,5 +960,6,6,6,6,6 +970,7,7,7,7,7 +980,8,8,8,8,8 +990,9,9,9,9,9 +1000,10,10,10,10,10 diff --git a/EC-GN-JA-PCF/.svn/pristine/58/58cf976a9d738240c1860f6e2df68361584aed3e.svn-base b/EC-GN-JA-PCF/.svn/pristine/58/58cf976a9d738240c1860f6e2df68361584aed3e.svn-base new file mode 100644 index 0000000..3ab70d0 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/58/58cf976a9d738240c1860f6e2df68361584aed3e.svn-base @@ -0,0 +1,188 @@ +/** + * @file JASourceChoiseGAM.cpp + * @brief Source file for class JASourceChoiseGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JASourceChoiseGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JASourceChoiseGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JASourceChoiseGAM::JASourceChoiseGAM() { + // initialize member variables. + numberOfPVs = 0; +} + +JASourceChoiseGAM::~JASourceChoiseGAM() { +} + +bool JASourceChoiseGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("numberOfPVs", numberOfPVs); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The numberOfPVs parameter shall be specified"); + } + } + return ok; +} + +bool JASourceChoiseGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JASourceChoiseGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == numberOfPVs*3u); + if (ok) { + ok = (numberOfOutputSignals == numberOfPVs); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "%d *3 output signals shall be defined", numberOfPVs); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "%d input signals shall be defined", numberOfPVs); + } + // Do type check for input signals. + int int_num = 0; + int float_num = 0; + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + if(inputType == UnsignedInteger32Bit){ + int_num++; + } else if (inputType == Float32Bit) { + float_num++; + } else { + ok = false; + }; + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or flaot32", signalName.Buffer()); + } + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = ((outputType == UnsignedInteger32Bit) || (outputType == Float32Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or float32", signalName.Buffer()); + } + } + } + // Set memory + inputUInt32.resize(numberOfPVs*2); + inputFloat32.resize(numberOfPVs*2); + choise.resize(numberOfPVs); + outputUInt32.resize(numberOfPVs); + outputFloat32.resize(numberOfPVs); + + prevUInt32.resize(numberOfPVs*2); + prevFloat32.resize(numberOfPVs*2); + + if(ok){ + for(uint32 i=0; i(GetInputSignalMemory(3*i)); + inputUInt32[2*i+1] = reinterpret_cast(GetInputSignalMemory(3*i+1)); + choise[i] = reinterpret_cast(GetInputSignalMemory(3*i+2)); + outputUInt32[i] = reinterpret_cast(GetOutputSignalMemory(i)); + } else if(inputType == Float32Bit){ + inputFloat32[2*i] = reinterpret_cast(GetInputSignalMemory(3*i)); + inputFloat32[2*i+1] = reinterpret_cast(GetInputSignalMemory(3*i+1)); + choise[i] = reinterpret_cast(GetInputSignalMemory(3*i+2)); + outputFloat32[i] = reinterpret_cast(GetOutputSignalMemory(i)); + } + prevUInt32[2*i] = 0; + prevUInt32[2*i+1] = 0; + prevFloat32[2*i] = 0; + prevFloat32[2*i+1] = 0; + } + } + return ok; +} + +bool JASourceChoiseGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + + for (uint32 i=0; i < numberOfPVs; i++){ + if(*choise[i]==0){ + if(outputUInt32[i]){ + if(prevUInt32[i*2] != *inputUInt32[i*2]){ + *outputUInt32[i] = *inputUInt32[i*2]; + prevUInt32[i*2] = *inputUInt32[i*2]; + prevUInt32[1+i*2] = *inputUInt32[1+i*2]; + } + } else if(outputFloat32[i]){ + if(prevFloat32[i*2] != *inputFloat32[i*2]){ + *outputFloat32[i] = *inputFloat32[i*2]; + prevFloat32[i*2] = *inputFloat32[i*2]; + prevFloat32[1+i*2] = *inputFloat32[1+i*2]; + } + } + } else { + if(outputUInt32[i]){ + if(prevUInt32[1+i*2] != *inputUInt32[1+i*2]){ + *outputUInt32[i] = *inputUInt32[1+i*2]; + prevUInt32[i*2] = *inputUInt32[i*2]; + prevUInt32[1+i*2] = *inputUInt32[1+i*2]; + } + } else if (outputFloat32[i]){ + if(prevFloat32[1+i*2] != *inputFloat32[1+i*2]){ + *outputFloat32[i] = *inputFloat32[1+i*2]; + prevFloat32[i*2] = *inputFloat32[i*2]; + prevFloat32[1+i*2] = *inputFloat32[1+i*2]; + } + } + } + } + return true; +} + +CLASS_REGISTER(JASourceChoiseGAM, "1.0") diff --git a/EC-GN-JA-PCF/.svn/pristine/59/5970b9108b91382e9bc21a029cf126579f079ce6.svn-base b/EC-GN-JA-PCF/.svn/pristine/59/5970b9108b91382e9bc21a029cf126579f079ce6.svn-base new file mode 100644 index 0000000..ff7c79a --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/59/5970b9108b91382e9bc21a029cf126579f079ce6.svn-base @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JATerminalInterfaceGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JATerminalInterfaceGAM$(LIBEXT) \ + $(BUILD_DIR)/JATerminalInterfaceGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/.svn/pristine/59/59840e5ac0a759251b9daacd2e0c1e6d9a090a77.svn-base b/EC-GN-JA-PCF/.svn/pristine/59/59840e5ac0a759251b9daacd2e0c1e6d9a090a77.svn-base new file mode 100644 index 0000000..30565c2 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/59/59840e5ac0a759251b9daacd2e0c1e6d9a090a77.svn-base @@ -0,0 +1,71 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import ColorFontUtil +# from org.csstudio.opibuilder.scriptUtil import ConsoleUtil + +func = display.getPropertyValue("name") +type = widget.getPropertyValue("name") +widgetType = "ellipse"; +varName = "XXXXXXX"; + +if "PSH" in type: + varName = "-SYSHLTS"; +if "PCF" in type: + varName = "-SYSHLTS"; +if "SRV" in type: + varName = "-SYSHLTS"; +if "PLC" in type: + varName = "-PLCHLTS"; +if "COM" in type: + varName = "-SYSHLTS"; +if "CHS" in type: + varName = "-SYSHLTS"; +# if "IOM" in type: +# varName = "-BS"; +if "CUB" in type: + varName = "-CUBHLTS"; +if "Box" in type: + widgetType = "rectangle"; + +if varName in triggerPV.getName(): +# ConsoleUtil.writeInfo("Trigger PV found: " +triggerPV.getName()); + + s = PVUtil.getSeverity(triggerPV) + + color = ColorFontUtil.WHITE + if s == 0: + color = ColorFontUtil.GREEN + elif s == 1: + color = ColorFontUtil.RED + elif s == 2: + color = ColorFontUtil.YELLOW + elif s == 3: + color = ColorFontUtil.PINK + elif s == 4: + color = ColorFontUtil.GREEN + + if "ellipse" == widgetType: + widget.setPropertyValue("foreground_color", color) + + tooltip = PVUtil.getString(triggerPV) + widget.setPropertyValue("tooltip", tooltip) + +if "IOM" in type: + if ".SIMM" not in triggerPV.getName(): + + s = PVUtil.getSeverity(triggerPV) + color = ColorFontUtil.WHITE + if s == 0: + color = ColorFontUtil.GREEN + elif s == 1: + color = ColorFontUtil.RED + elif s == 2: + color = ColorFontUtil.YELLOW + elif s == 3: + color = ColorFontUtil.PINK + elif s == 4: + color = ColorFontUtil.GREEN + + widget.setPropertyValue("foreground_color", color) + + tooltip = PVUtil.getString(triggerPV) + widget.setPropertyValue("tooltip", tooltip) \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/59/59d513317dcb6ee3262005011911d62689a8b690.svn-base b/EC-GN-JA-PCF/.svn/pristine/59/59d513317dcb6ee3262005011911d62689a8b690.svn-base new file mode 100644 index 0000000..5f84ca9 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/59/59d513317dcb6ee3262005011911d62689a8b690.svn-base @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/5a/5a0b5adfec01b8975b3d744e668eb8bbfa786d5e.svn-base b/EC-GN-JA-PCF/.svn/pristine/5a/5a0b5adfec01b8975b3d744e668eb8bbfa786d5e.svn-base new file mode 100644 index 0000000..d09d668 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/5a/5a0b5adfec01b8975b3d744e668eb8bbfa786d5e.svn-base @@ -0,0 +1,3 @@ +#RULES_TOP +include $(CONFIG)/RULES_TOP + diff --git a/EC-GN-JA-PCF/.svn/pristine/5a/5a9d8cde244a1fbbffafcede7c521c80e1feb54f.svn-base b/EC-GN-JA-PCF/.svn/pristine/5a/5a9d8cde244a1fbbffafcede7c521c80e1feb54f.svn-base new file mode 100644 index 0000000..c7cdc88 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/5a/5a9d8cde244a1fbbffafcede7c521c80e1feb54f.svn-base @@ -0,0 +1,146 @@ +record (bi,"EC-GN-P01-GAFP:FMC4310-RV1") +{ + field(DESC, "Reserved for cRIO") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 11) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAFP:FMC4310-RV2") +{ + field(DESC, "Reserved for cRIO") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 12) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAFP:FMC4310-RV3") +{ + field(DESC, "Reserved for cRIO") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 13) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAFP:FMC4310-RV5") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAFP:FMC4310-RV6") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAFP:FMC4310-RV7") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAFP:FMC4310-RV8") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAFP:FMC4310-YFLT-OC") +{ + field(DESC, "MHVPS OC Detected") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 5) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-GAFP:FMC4310-YFLT-OV") +{ + field(DESC, "MHVPS OV Detected") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 4) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bo,"EC-GN-P01-GAFP:FMC4310-YSTA-GAOP") +{ + field(DESC, "GY1 Beam ON Status") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAFP:FMC4310-YTRP") +{ + field(DESC, "Interlock from fast protection 1") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 9) bitread") + field(ONAM, "INTERLOCK") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-GAFP:FMC4310-YTRP2") +{ + field(DESC, "Pause signal from Fast Protection 1") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 10) bitread") + field(ONAM, "PAUSE") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + diff --git a/EC-GN-JA-PCF/.svn/pristine/5a/5af5f3c387e987f13e2ba0eae94207a440e68703.svn-base b/EC-GN-JA-PCF/.svn/pristine/5a/5af5f3c387e987f13e2ba0eae94207a440e68703.svn-base new file mode 100644 index 0000000..b7aece5 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/5a/5af5f3c387e987f13e2ba0eae94207a440e68703.svn-base @@ -0,0 +1,29 @@ +//+====================================================================== +// $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-sdd-translator-parts/tags/CODAC-CORE-6.0.0/org.iter.codac.sdd.translators/src/main/resources/templates/sdn/includetopics.h.vm $ +// $Id: includetopics.h.vm 83098 2018-01-08 13:23:38Z cesnikt $ +// +// Project : CODAC Core System +// +// Description : SDN Program - Gyrotron01DAN +// +// Author : Kirti Mahajan, Lana Abadie and TCS (link with velocity and SDD model) +// +// Copyright (c) : 2010-2018 ITER Organization, +// CS 90 046 +// 13067 St. Paul-lez-Durance Cedex +// France +// +// This file is part of ITER CODAC software. +// For the terms and conditions of redistribution or use of this software +// refer to the file ITER-LICENSE.TXT located in the top level directory +// of the distribution package. +// +//-====================================================================== + +#ifndef INCLUDETOPICS_H +#define INCLUDETOPICS_H + +#include + + +#endif \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/5b/5b28ad94fff984271989b6d1eb6dc549295a51d7.svn-base b/EC-GN-JA-PCF/.svn/pristine/5b/5b28ad94fff984271989b6d1eb6dc549295a51d7.svn-base new file mode 100644 index 0000000..ed398a9 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/5b/5b28ad94fff984271989b6d1eb6dc549295a51d7.svn-base @@ -0,0 +1,331 @@ +record (bo,"EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN") +{ + field(DESC, "SCM rampdown comp") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP") +{ + field(DESC, "GY1 SCM rampup comp") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-MCPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 MCPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-MCPS:STAT-SIMM") +{ + field(DESC, "GY1 MCPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (mbbi,"EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB") +{ + field(DESC, "GY1 MCPS read ACT") + field(DTYP, "stream") + field(FRST, "ZERO") + field(FRSV, "NO_ALARM") + field(FRVL, "4") + field(INP, "@JASTEC-SCMPS.proto readActivity MC1") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") + field(THST, "FLAT TOP") + field(THSV, "NO_ALARM") + field(THVL, "3") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP") +{ + field(DESC, "GY1 MCPS set ACT") + field(DTYP, "stream") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(OUT, "@JASTEC-SCMPS.proto setActivity MC1") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MI") +{ + field(DESC, "GY1 MCPS ACT set to Marte") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MO") +{ + field(DESC, "GY1 MCPS ACT Marte outputs") + field(FLNK, "EC-GN-P01-GAF-MCPS:STAT-ACT-SP-CALC") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (ai,"EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON") +{ + field(DESC, "GY1 MCPS monitored current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "125") + field(INP, "@JASTEC-SCMPS.proto readMeasCurrent MC1") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") +} + +record (waveform,"EC-GN-P01-GAF-MCPS:PSU2120-ERR") +{ + field(DESC, "GY1 MCPS read error") + field(DTYP, "stream") + field(INP, "@JASTEC-SCMPS.proto readErrStat MC1") + field(NELM, "15") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-MCPS:PSU2120-SWP-LIM") +{ + field(DESC, "GY1 MCPS read sweep limit") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readSweepLim MC1") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-MCPS:PSU2120-SWP-RB") +{ + field(DESC, "GY1 MCPS read targ sweep rate") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readTargSweep MC1") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-RB") +{ + field(DESC, "GY1 MCPS read target current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "120") + field(INP, "@JASTEC-SCMPS.proto readTargCurrent MC1") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET") +{ + field(DESC, "GY1 MCPS set target current") + field(DRVH, "120") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP") + field(HOPR, "125") + field(LOPR, "0") + field(OUT, "@JASTEC-SCMPS.proto setCurrent MC1") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MI") +{ + field(DESC, "GY1 MCPS target current input to Marte") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MO") +{ + field(DESC, "GY1 MCPS target current Marte outputs") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GAF-MCPS:STAT-TRG-CURR-SET-CALC") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-MCPS:PSU2120-TRG-SWPR-SET") +{ + field(DESC, "GY1 MCPS set target swwp rate") + field(DRVH, "5.0") + field(DRVL, "0.01") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(LOPR, "0.01") + field(OUT, "@JASTEC-SCMPS.proto setSweep MC1") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") + field(VAL, "1.69") +} + +record (ai,"EC-GN-P01-GAF-MCPS:PSU2120-VOLT-MON") +{ + field(DESC, "GY1 MCPS monitored voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "10") + field(INP, "@JASTEC-SCMPS.proto readMeasVoltage MC1") + field(LOPR, "-10") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") +} + +record (calcout,"EC-GN-P01-GAF-MCPS:STAT-ACT-SP-CALC") +{ + field(CALC, "A") + field(DESC, "MCPS#1 state set by Marte") + field(INPA, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-GAF-MCPS:STAT-PREP-WF") +{ + field(DESC, "GY1 MCPS prepro schedule") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-GAF-MCPS:STAT-RAMPDWN-CMP") +{ + field(CALC, "(A==4 andand B==4 and C==4 andand D==4)?1:0") + field(DESC, "SMCPS ramp down check") + field(FLNK, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN") + field(INPA, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB") + field(INPB, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB") + field(INPC, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB") + field(INPD, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GAF-MCPS:STAT-RAMPUP-CMP") +{ + field(CALC, "(A==3 andand B==3)?1:0") + field(DESC, "GYA SCMPS rampup check") + field(FLNK, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP") + field(INPA, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB") + field(INPB, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB") + field(OOPT, "When Non-zero") + field(OUT, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GAF-MCPS:STAT-RAMPUP-OFF") +{ + field(CALC, "A==0?0:1") + field(DESC, "GYA MC GC rampup comp off") + field(INPA, "EC-GN-P01-GPS:PLC4110-YTS-ST1R") + field(OOPT, "When Zero") + field(OUT, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP PP") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GAF-MCPS:STAT-TRG-CURR-SET-CALC") +{ + field(CALC, "A") + field(DESC, "MCPS#1 current set by Marte") + field(INPA, "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET PP") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/.svn/pristine/5d/5d5541c92f38a9ad919175fae0f8c865bcc53958.svn-base b/EC-GN-JA-PCF/.svn/pristine/5d/5d5541c92f38a9ad919175fae0f8c865bcc53958.svn-base new file mode 100644 index 0000000..2502e17 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/5d/5d5541c92f38a9ad919175fae0f8c865bcc53958.svn-base @@ -0,0 +1,55 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ColorFontUtil); + + +var table = widget.getTable(); + +//Fill PV Name only once +if (widget.getVar("firstTime") == null) +{ + widget.setVar("firstTime", true); + + for (var i=0;pv=pvs[i];i++) { + // earlier when by default pv.getName() was giving name with 'epics://' prefix. Ripping it off before showing was done below + table.setCellText(i, 0, pv.getName().trim()) + if (!pv.isConnected()) { + table.setCellText(i, 1, "Disconnected"); + } + } + // Based on value of macro SHOW_PLC_IOC, enable visibility of PLCIOCDetailsTable + if (widget.getPropertyValue("name") == 'PLCIOCDetailsTable') { + if (display.getMacroValue("SHOW_PLC_IOC") == "true") { + widget.setPropertyValue("visible", "true"); + display.getWidget("PLCIOCDetailsLabel").setPropertyValue("visible", "true"); + } + } +} + + +//find index of the trigger PV +var i=0; +while (triggerPV != pvs[i]) { + i+=1; +} + +table.setCellText(i, 1, PVUtil.getString(triggerPV).trim()); +table.setCellText(i, 2, PVUtil.getStatus(triggerPV).trim()); +table.setCellText(i, 3, PVUtil.getSeverityString(triggerPV).trim()); + +var s = PVUtil.getSeverity(triggerPV); + +var color = ColorFontUtil.WHITE +color = ColorFontUtil.WHITE; +if( s == 0) { + color = ColorFontUtil.GREEN; +} +else if( s == 1) { + color = ColorFontUtil.RED; +} +else if( s == 2) { + color = ColorFontUtil.YELLOW; +} +else if( s == 3) { + color = ColorFontUtil.PINK; +} +table.setCellBackground(i, 3, color); diff --git a/EC-GN-JA-PCF/.svn/pristine/5d/5d6bbfbd1c25aac56dca7fba976ad4f767c83150.svn-base b/EC-GN-JA-PCF/.svn/pristine/5d/5d6bbfbd1c25aac56dca7fba976ad4f767c83150.svn-base new file mode 100644 index 0000000..2742db7 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/5d/5d6bbfbd1c25aac56dca7fba976ad4f767c83150.svn-base @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +make -f Makefile.gcc diff --git a/EC-GN-JA-PCF/.svn/pristine/5d/5d7e46060a8906957d3220725e70cc61969d9277.svn-base b/EC-GN-JA-PCF/.svn/pristine/5d/5d7e46060a8906957d3220725e70cc61969d9277.svn-base new file mode 100644 index 0000000..30e4bde --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/5d/5d7e46060a8906957d3220725e70cc61969d9277.svn-base @@ -0,0 +1,8 @@ +############################################################################ +## Sequence programs to load +############################################################################ + +## Start any sequence programs +#seq sncxxx,"user=codac-devHost" + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/.svn/pristine/5e/5e0480dc231cd2b9239946aab04a019bda8ff684.svn-base b/EC-GN-JA-PCF/.svn/pristine/5e/5e0480dc231cd2b9239946aab04a019bda8ff684.svn-base new file mode 100644 index 0000000..53f06ad --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/5e/5e0480dc231cd2b9239946aab04a019bda8ff684.svn-base @@ -0,0 +1,122 @@ +/** + * @file JASampleGAM.h + * @brief Header file for class JASampleGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JASampleGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JASampleGAM_H_ +#define GAMS_JASampleGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +/** + * @brief GAM Sample Usage. + * @details Sample + * + * The configuration syntax is: + * + *
+ * +SampleGAM = {
+ *     Class = JASampleGAM
+ *     InputSignals = {
+ *         Input1 = {
+ *             DataSource = "DDB"
+ *             Type = uint32
+ *             Default = 0
+ *         }
+ *         Input2 = {
+ *             DataSource = "DDB"
+ *             Type = float32
+ *             Default = 100
+ *         }
+ *         InputXXX = {
+ *             DataSource = "DDB"
+ *             Type = float32
+ *             NumberOfElements = 1
+ *         }
+ *     }
+ *     OutputSignals = {
+ *         Output1 = {
+ *             DataSource = "DDB"
+ *             Type = uint32
+ *             Default = 0
+ *         }
+ *         Output2 = {
+ *             DataSource = "DDB"
+ *             Type = int32
+ *             Default = 100
+ *         }
+ *     }
+ * }
+ * 
+ */ + + +class JASampleGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JASampleGAM(); + + virtual ~JASampleGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //GAM fixed parameters. + MARTe::uint32 param1; + MARTe::float32 param2; + + // Input signals + MARTe::uint32 *input1; + MARTe::float32 *input2; + MARTe::float32 *inputXXX; + + // Output signals + MARTe::uint32 *output1; + MARTe::float32 *output2; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JASampleGAM_H_ */ diff --git a/EC-GN-JA-PCF/.svn/pristine/5e/5e3ccaf6fff9ff412b7c7b2c25566bc5dc3d13e9.svn-base b/EC-GN-JA-PCF/.svn/pristine/5e/5e3ccaf6fff9ff412b7c7b2c25566bc5dc3d13e9.svn-base new file mode 100644 index 0000000..2cf5c5d --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/5e/5e3ccaf6fff9ff412b7c7b2c25566bc5dc3d13e9.svn-base @@ -0,0 +1,180 @@ +/** + * @file JAConditionalSignalUpdateGAM.h + * @brief Header file for class JAConditionalSignalUpdateGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAConditionalSignalUpdateGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JACONDITIONALSIGNALUPDATEGAM_H_ +#define GAMS_JACONDITIONALSIGNALUPDATEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that writes predefined values to output signals when a condition is met. + * If there are no conditional signals provided, the condition is presumed to be met. + * + * +ASYNCShotlengthControlGAM = { + * Class = JAConditionalSignalUpdateGAM + * Operation = OR // Logical operation performed between conditional signals + * // Supported values: AND, OR, XOR, NOR + * // Default: AND + * ExpectedValues = {1 1} // Values to which conditional signals will be compared. + * Comparators = {EQUALS EQUALS} // Operator between conditional signal an expected value + * // Supported values: EQUALS, NOT, GREATER, EQUALS_OR_GREATER, LESS, EQUALS_OR_LESS + * // Default: EQUALS + * Values = {0 3} // Values that will be written to output signals when condition is met. + * InputSignals = { + * // Conditional Signals + * SHOTLEN_FLAG = { + * DataSource = DDB1 + * Type = uint32 + * } + * MODE_SHOTLEN_FLAG = { + * DataSource = DDB1 + * Type = uint32 + * } + * // Default values (set to output signals before the condition is met) + * APS_SWON = { // APS_SWON will keep the value from previous state. + * DataSource = DDB1 + * Type = uint32 + * } + * BPS_SWON_DEFAULT = { // BPS_SWON will be set to 7 before condition is met. + * DataSource = DDB1 + * Type = uint32 + * Default = 7 + * } + * } + * OutputSignals = { + * APS_SWON = { + * DataSource = DDB1 + * Type = uint32 + * } + * BPS_SWON = { + * DataSource = DDB1 + * Type = uint32 + * } + * } + * } + */ +class JAConditionalSignalUpdateGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAConditionalSignalUpdateGAM(); + + virtual ~JAConditionalSignalUpdateGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + /** + * @brief Does the input signal at provided index have the expected value. + * @param[in] index of the signal. + * @return true if the signal has expected value. + */ + bool Compare(MARTe::uint32 index); + + template + bool Compare(MARTe::uint32 index); + + enum OperationMode { + And, Or, Xor, Nor + }; + + enum ComparisonMode { + Equals, Not, Greater, EqualsOrGreater, Less, EqualsOrLess + }; + + // Input signals + void **inputSignals; + + MARTe::TypeDescriptor *inputSignalTypes; + + // Condition operation. + OperationMode operation; + + // Array of expected values of input signals. + MARTe::uint32* expectedValues; + + // Expected values count (must be equal to numberOfInputSignals) + MARTe::uint32 expectedValuesCount; + + // Array of comparators + ComparisonMode* comparators; + + // Values to be written on output signals when input signal has the expected value. + MARTe::uint32 *values; + + // Number of values (must be equal to numberOfOutputSignals) + MARTe::uint32 valuesCount; + + // Output signals + MARTe::uint32 **outputSignals; + + // Default values of output signals + MARTe::uint32 **defaultValues; + + // Were output signals already set and we are waiting for a state change before they are set again. + bool needsReset; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +template +bool JAConditionalSignalUpdateGAM::Compare(MARTe::uint32 index) { + switch (comparators[index]) { + case Equals: + return *static_cast(inputSignals[index]) == static_cast(expectedValues[index]); + case Not: + return *static_cast(inputSignals[index]) != static_cast(expectedValues[index]); + case Greater: + return *static_cast(inputSignals[index]) > static_cast(expectedValues[index]); + case EqualsOrGreater: + return *static_cast(inputSignals[index]) >= static_cast(expectedValues[index]); + case Less: + return *static_cast(inputSignals[index]) < static_cast(expectedValues[index]); + default: // case EqualsOrLess: + return *static_cast(inputSignals[index]) <= static_cast(expectedValues[index]); + } +} + +#endif /* GAMS_JACONDITIONALSIGNALUPDATEGAM_H_ */ diff --git a/EC-GN-JA-PCF/.svn/pristine/5e/5e811f31da6a173d5418d462856b922e14e1b2b6.svn-base b/EC-GN-JA-PCF/.svn/pristine/5e/5e811f31da6a173d5418d462856b922e14e1b2b6.svn-base new file mode 100644 index 0000000..ee22c1a --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/5e/5e811f31da6a173d5418d462856b922e14e1b2b6.svn-base @@ -0,0 +1,130 @@ +/** + * @file JAWFRecordGAM.h + * @brief Header file for class JAWFRecordGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAWFRecordGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAWFRECORDGAM_H_ +#define GAMS_JAWFRECORDGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include "Message.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that is used for pre-programmed operation. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *       +WFRecordGAM = {
+ *           Class = JAWFRecordGAM
+ *           Directory = "../Configurations" 
+ *           InputSignals = {
+ *               CSV_LOAD = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               Filename = {
+ *                   Alias = CSV_NAME
+ *                   DataSource = EPICSCAInput
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               PREP_TIME_WF = {
+ *                   DataSource = DDB1
+ *               }
+ * *             MHVPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               BPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               APS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               MCPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               GCPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               FHPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *           }
+ *       }
+ * 
+ * + */ + +class JAWFRecordGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAWFRecordGAM(); + + virtual ~JAWFRecordGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + void LoadFile(); + + MARTe::uint32 filenameSignalIndex; + + MARTe::uint32 *loadTriggerSignal; + + MARTe::StreamString directory; + + MARTe::float32 **valueSignals; + + MARTe::int32 *timeSignal; + + MARTe::uint32 maxElements; + + // Flag determining whether file should be read (so it isn't read multiple time) + bool readOnce; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAWFRECORDGAM_H_ */ diff --git a/EC-GN-JA-PCF/.svn/pristine/5f/5f7cd2a3b9ac9d7233b3ea8aceaf9eb4f88df2df.svn-base b/EC-GN-JA-PCF/.svn/pristine/5f/5f7cd2a3b9ac9d7233b3ea8aceaf9eb4f88df2df.svn-base new file mode 100644 index 0000000..2c60bb7 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/5f/5f7cd2a3b9ac9d7233b3ea8aceaf9eb4f88df2df.svn-base @@ -0,0 +1,14 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import ColorFontUtil + +import datetime + +pv = pvs[0] + +s = PVUtil.getTimeInMilliseconds(pv) +t = datetime.datetime.fromtimestamp(float(s)/1000.) + +format = "%H:%M:%S" + +widget.setPropertyValue("on_label", t.strftime(format)) +widget.setPropertyValue("off_label", t.strftime(format)) diff --git a/EC-GN-JA-PCF/.svn/pristine/60/604afcd144772ac58c0d5c165bfefebb37a4dcd8.svn-base b/EC-GN-JA-PCF/.svn/pristine/60/604afcd144772ac58c0d5c165bfefebb37a4dcd8.svn-base new file mode 100644 index 0000000..13fdc95 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/60/604afcd144772ac58c0d5c165bfefebb37a4dcd8.svn-base @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/60/60db156c5956b8db7abf7c96ccb6634c239da122.svn-base b/EC-GN-JA-PCF/.svn/pristine/60/60db156c5956b8db7abf7c96ccb6634c239da122.svn-base new file mode 100644 index 0000000..c66a7fd --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/60/60db156c5956b8db7abf7c96ccb6634c239da122.svn-base @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAConditionalSignalUpdateGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAConditionalSignalUpdateGAM$(LIBEXT) \ + $(BUILD_DIR)/JAConditionalSignalUpdateGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/.svn/pristine/61/61e5f5da23622cd759847804f11a667b20b656d9.svn-base b/EC-GN-JA-PCF/.svn/pristine/61/61e5f5da23622cd759847804f11a667b20b656d9.svn-base new file mode 100644 index 0000000..72c14a3 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/61/61e5f5da23622cd759847804f11a667b20b656d9.svn-base @@ -0,0 +1,180 @@ +record (bo,"EC-GN-P01-PB2F:PSU2000-CON-HV") +{ + field(DESC, "GY2 BPS HVON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PB2F:PSU2000-CON-SW") +{ + field(DESC, "GY2 BPS HV SWON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PB2F:PSU2000-CTRP") +{ + field(DESC, "GY2 BPS Shutdonw request") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-PB2F:PSU2000-YFLT") +{ + field(DESC, "GY2 BPS Fault") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 3) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-PB2F:PSU2000-YSTA") +{ + field(DESC, "GY2 BPS Ready") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 2) bitread") + field(ONAM, "READY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-PB2F:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY2 BPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (ao,"EC-GN-P01-PB2F:PSU2000-EREF") +{ + field(ASLO, "4") + field(DESC, "GY2 BPS voltage setpoint") + field(DRVH, "40") + field(DRVL, "0") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "40") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_0, 0) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PB2F:PSU2000-EREF-MSP") +{ + field(DESC, "GY2 BPS voltage manual setpoint") + field(DRVH, "40") + field(DRVL, "0") + field(EGU, "kV") + field(HOPR, "40") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-PB2F:PSU2000-ET") +{ + field(DESC, "GY2 BPS Measured Voltage") + field(EGU, "kV") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PB2F:PSU2000-ET-WF") +{ + field(DESC, "GY2 BPS Measured Voltage") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PB2F:PSU2000-IT") +{ + field(DESC, "GY2 BPS Measured Current") + field(EGU, "A") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PB2F:PSU2000-IT-WF") +{ + field(DESC, "GY2 BPS Measured Current") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PB2F:STAT-DT-HVON") +{ + field(DESC, "Time diff to GY2 BPS Gate ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "500000") +} + +record (ai,"EC-GN-P01-PB2F:STAT-DT-SWON") +{ + field(DESC, "Time diff to GY2 BPS SW ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "550000") +} + +record (waveform,"EC-GN-P01-PB2F:STAT-PREP-WF") +{ + field(DESC, "GY2 BPS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/.svn/pristine/63/63dc16eaaddf747c1049e35fb5ae3188b2146b1e.svn-base b/EC-GN-JA-PCF/.svn/pristine/63/63dc16eaaddf747c1049e35fb5ae3188b2146b1e.svn-base new file mode 100644 index 0000000..a0574c6 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/63/63dc16eaaddf747c1049e35fb5ae3188b2146b1e.svn-base @@ -0,0 +1,45 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import ColorFontUtil + + +table = widget.getTable() + +#Fill PV Name only once +if widget.getVar("firstTime") == None: + widget.setVar("firstTime", True) + i=0 + for pv in pvs: + # earlier when by default pv.getName() was giving name with 'epics://' prefix. Ripping it off before showing was done below + table.setCellText(i, 0, pv.getName().strip()) + if not pv.isConnected(): + table.setCellText(i, 1, "Disconnected") + i+=1 + # Based on value of macro SHOW_PLC_IOC, enable visibility of PLCIOCDetailsTable + if widget.getPropertyValue("name") == 'PLCIOCDetailsTable': + if display.getMacroValue("SHOW_PLC_IOC") == "true": + widget.setPropertyValue("visible", "true") + display.getWidget("PLCIOCDetailsLabel").setPropertyValue("visible", "true") + + +#find index of the trigger PV +i=0 +while triggerPV != pvs[i]: + i+=1 + +table.setCellText(i, 1, PVUtil.getString(triggerPV).strip()) +table.setCellText(i, 2, PVUtil.getStatus(triggerPV).strip()) +table.setCellText(i, 3, PVUtil.getSeverityString(triggerPV).strip()) + +s = PVUtil.getSeverity(triggerPV) + +color = ColorFontUtil.WHITE +if s == 0: + color = ColorFontUtil.GREEN +elif s == 1: + color = ColorFontUtil.RED +elif s == 2: + color = ColorFontUtil.YELLOW +elif s == 3: + color = ColorFontUtil.PINK + +table.setCellBackground(i, 3, color) \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/64/6494c4c15c01862692d6f55568b066fd2e087a14.svn-base b/EC-GN-JA-PCF/.svn/pristine/64/6494c4c15c01862692d6f55568b066fd2e087a14.svn-base new file mode 100644 index 0000000..91e47d0 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/64/6494c4c15c01862692d6f55568b066fd2e087a14.svn-base @@ -0,0 +1,6 @@ +TOP = .. +include $(TOP)/configure/CONFIG +DIRS += $(wildcard *ioc*) +DIRS += $(wildcard as*) +include $(CONFIG)/RULES_DIRS + diff --git a/EC-GN-JA-PCF/.svn/pristine/66/664c628c0fbe688ad687497e94deb0334ed2c2b2.svn-base b/EC-GN-JA-PCF/.svn/pristine/66/664c628c0fbe688ad687497e94deb0334ed2c2b2.svn-base new file mode 100644 index 0000000..8786feb --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/66/664c628c0fbe688ad687497e94deb0334ed2c2b2.svn-base @@ -0,0 +1,6 @@ +############################################################################ +## User provided PLC or fast controller driver post configuration +############################################################################ + + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/.svn/pristine/67/67caca0a7139cfdf8e6f1d7b38e2ca249317760f.svn-base b/EC-GN-JA-PCF/.svn/pristine/67/67caca0a7139cfdf8e6f1d7b38e2ca249317760f.svn-base new file mode 100644 index 0000000..50056e0 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/67/67caca0a7139cfdf8e6f1d7b38e2ca249317760f.svn-base @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JASDNRTStateMachineGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JASDNRTStateMachineGAM$(LIBEXT) \ + $(BUILD_DIR)/JASDNRTStateMachineGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/.svn/pristine/68/682293df37dc9572bb9b91544a337eff98c80189.svn-base b/EC-GN-JA-PCF/.svn/pristine/68/682293df37dc9572bb9b91544a337eff98c80189.svn-base new file mode 100644 index 0000000..a20f095 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/68/682293df37dc9572bb9b91544a337eff98c80189.svn-base @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JATriangleWaveGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JATriangleWaveGAM$(LIBEXT) \ + $(BUILD_DIR)/JATriangleWaveGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/.svn/pristine/69/6945050cdab49b1abd3f54c9b6ac537aaf7505a4.svn-base b/EC-GN-JA-PCF/.svn/pristine/69/6945050cdab49b1abd3f54c9b6ac537aaf7505a4.svn-base new file mode 100644 index 0000000..e2e2415 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/69/6945050cdab49b1abd3f54c9b6ac537aaf7505a4.svn-base @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAMessageGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAMessageGAM$(LIBEXT) \ + $(BUILD_DIR)/JAMessageGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/.svn/pristine/69/698b97b7cb9cfd63e7642ea7e9584c787b423930.svn-base b/EC-GN-JA-PCF/.svn/pristine/69/698b97b7cb9cfd63e7642ea7e9584c787b423930.svn-base new file mode 100644 index 0000000..3c42493 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/69/698b97b7cb9cfd63e7642ea7e9584c787b423930.svn-base @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/69/69a199e69c3cf96b9e977bf8887ae6b3280ee052.svn-base b/EC-GN-JA-PCF/.svn/pristine/69/69a199e69c3cf96b9e977bf8887ae6b3280ee052.svn-base new file mode 100644 index 0000000..5607efe --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/69/69a199e69c3cf96b9e977bf8887ae6b3280ee052.svn-base @@ -0,0 +1,101 @@ + + + + + 1.0.0 + + + + danInt16 + + 100000 + + + DATA_D0 + + DM_BLOCK2D_VAR + + CHECK_AND_OVERWRITE + + 1000 + + 1 + + UTC + + + + GYBDanSource + + v1.3 + + 0 + + N1134342 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ALL + + + + + + IF_FAIL_NEXT + + ${DAN_ARCHIVE_MASTER} + + ${DAN_ARCHIVE_SLAVE} + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/6a/6a0c699e7c09b531a62d8bd618212f80a85a0851.svn-base b/EC-GN-JA-PCF/.svn/pristine/6a/6a0c699e7c09b531a62d8bd618212f80a85a0851.svn-base new file mode 100644 index 0000000..ba3363d --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/6a/6a0c699e7c09b531a62d8bd618212f80a85a0851.svn-base @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAConditionalSignalUpdateGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAConditionalSignalUpdateGAM$(LIBEXT) \ + $(BUILD_DIR)/JAConditionalSignalUpdateGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/.svn/pristine/6a/6aa6fdf2ef59a2c824eda7d1e8cf863c8f2508cb.svn-base b/EC-GN-JA-PCF/.svn/pristine/6a/6aa6fdf2ef59a2c824eda7d1e8cf863c8f2508cb.svn-base new file mode 100644 index 0000000..114fba6 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/6a/6aa6fdf2ef59a2c824eda7d1e8cf863c8f2508cb.svn-base @@ -0,0 +1,42 @@ +############################################################################ +## Save and restore +############################################################################ + +### save_restore setup +# status-PV prefix +save_restoreSet_status_prefix("$(AUTOSAVE_SYSM_PV_PREFIX)") + +# Use status-PV +save_restoreSet_UseStatusPVs(1) + +# Debug-output level +save_restoreSet_Debug(0) + +# Ok to save/restore save sets with missing values (no CA connection to PV)? +save_restoreSet_IncompleteSetsOk(1) +# Save dated backup files? +save_restoreSet_DatedBackupFiles(1) + +# Number of sequenced backup files to write +save_restoreSet_NumSeqFiles(3) +# Time interval between sequenced backups +save_restoreSet_SeqPeriodInSeconds(300) + +# specify where save files should be +set_savefile_path("$(EPICS_AUTOSAVE_VAR)/$(UNIT_NAME)") + +# specify what save files should be restored. Note these files must be +# in the directory specified in set_savefile_path(), or, if that function +# has not been called, from the directory current when iocInit is invoked + +# Save files associated with the request files 'auto-output.req' and +# 'auto-input.req'. These files are the standard way to use autosave + +set_pass1_restoreFile(".sav") + +# specify directories in which to to search for included request files +set_requestfile_path("./") + +dbLoadRecords("$(EPICS_ROOT)/db/save_restoreStatus.db", "P=$(AUTOSAVE_SYSM_PV_PREFIX)") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/.svn/pristine/6b/6be7746df1ab71f7b4b6b65c291fe9de00babe48.svn-base b/EC-GN-JA-PCF/.svn/pristine/6b/6be7746df1ab71f7b4b6b65c291fe9de00babe48.svn-base new file mode 100644 index 0000000..f57063b --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/6b/6be7746df1ab71f7b4b6b65c291fe9de00babe48.svn-base @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JABitSumGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JABitSumGAM$(LIBEXT) \ + $(BUILD_DIR)/JABitSumGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/.svn/pristine/6d/6d0d4b6785945a002bcf6160c9535cb4bb8dc3e9.svn-base b/EC-GN-JA-PCF/.svn/pristine/6d/6d0d4b6785945a002bcf6160c9535cb4bb8dc3e9.svn-base new file mode 100644 index 0000000..c55e6d0 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/6d/6d0d4b6785945a002bcf6160c9535cb4bb8dc3e9.svn-base @@ -0,0 +1,154 @@ +/** + * @file JAModeControlGAM.cpp + * @brief Source file for class JAModeControlGAM + * @date Jan, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAModeControlGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAModeControlGAM.h" +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAModeControlGAM::JAModeControlGAM() { + inputSignals = NULL_PTR(MARTe::uint32 **); + outputSignal = NULL_PTR(MARTe::uint32 *); + pulseLengthLimit = 360000000u; + resetRemainingTime = true; + previousState = 0u; +} + +JAModeControlGAM::~JAModeControlGAM() { + if (inputSignals != NULL_PTR(MARTe::uint32 **)) { + delete[] inputSignals; + } +} + +bool JAModeControlGAM::Initialise(MARTe::StructuredDataI & data) { + /* read hard coded on cfg file parameter values by using key name. */ + using namespace MARTe; + return GAM::Initialise(data); +} + +bool JAModeControlGAM::Setup() { + /* read GAM Input signal */ + using namespace MARTe; + /* read 4 mode bits and 4 shot length limit values */ + + bool ok = numberOfInputSignals == 11; + if (ok) { + uint32 i; + for (i = 0u; (i < numberOfInputSignals) && (ok); i++) { + TypeDescriptor inputType = GetSignalType(InputSignals, i); + ok = inputType == UnsignedInteger32Bit; + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, i, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "InputSignel %s shall be defined as uint32", signalName.Buffer()); + } + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Eleven input signals shall be defined."); + } + if (ok) { + ok = numberOfOutputSignals == 1; + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "One output signal shall be defined."); + } + else { + TypeDescriptor type = GetSignalType(OutputSignals, 0); + ok = type == UnsignedInteger32Bit; + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, 0, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + inputSignals = new uint32*[numberOfInputSignals]; + uint32 i; + for (i = 0u; i < 11; i++) { + inputSignals[i] = reinterpret_cast(GetInputSignalMemory(i)); + } + } + return ok; +} + +bool JAModeControlGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + *outputSignal = 0u; + previousState = 0u; + resetRemainingTime = true; + return true; +} + +bool JAModeControlGAM::Execute() { + using namespace MARTe; + //When RT state goes to RFON state, update the limit. + if(previousState == 0u && *inputSignals[8] == 1u && resetRemainingTime) { + rfonTime = *inputSignals[9]; + resetRemainingTime = false; + pulseLengthLimit = CalcPulseLengthLimit(inputSignals); + REPORT_ERROR(ErrorManagement::Debug, "Pulse Length was set to Limit:%d", pulseLengthLimit); + } + // Turn on the flag during RFON if the pulse legth over the limit. + if ((*inputSignals[9] - rfonTime <= pulseLengthLimit) && (previousState == 1u)) { + *outputSignal = 0u; + return true; + } else if(*inputSignals[9] == 1u){ + resetRemainingTime = true; + *outputSignal = 1u; + } + + previousState = *inputSignals[8]; + return true; +} + + +MARTe::uint32 JAModeControlGAM::CalcPulseLengthLimit(MARTe::uint32 **inputSignals) { + if (*inputSignals[0] == 1) { + return *inputSignals[1]; + } else if (*inputSignals[2] == 1) { + return *inputSignals[3]; + } else if (*inputSignals[4] == 1) { + return *inputSignals[5]; + } else if (*inputSignals[6] == 1) { + return *inputSignals[7]; + } else { + return 3600000000;//us + } +} + + +CLASS_REGISTER(JAModeControlGAM, "1.0") diff --git a/EC-GN-JA-PCF/.svn/pristine/6e/6e52f1861fcb4106db444c17b8d3947c9646d8ea.svn-base b/EC-GN-JA-PCF/.svn/pristine/6e/6e52f1861fcb4106db444c17b8d3947c9646d8ea.svn-base new file mode 100644 index 0000000..c36ff86 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/6e/6e52f1861fcb4106db444c17b8d3947c9646d8ea.svn-base @@ -0,0 +1,26 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.DataUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ScriptUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ConsoleUtil); + +var table = widget.getTable(); +var fct_name=widget.getPropertyValue("name"); +var selectionChanged = new Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener() { + selectionChanged: function(selection) { + + var selectedrow= table.getSelection(); + var cuName=selectedrow[0][0]; + var phyName=selectedrow[0][1]; + + // change $(CU) substitution + var macroInput = DataUtil.createMacrosInput(true); + macroInput.put("CU", cuName); + macroInput.put("PHY_NAME", phyName) + macroInput.put("FCT_NAME", fct_name); + macroInput.put("SHOW_PLC_IOC", "false"); + // open OPI + // see https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-boy/trunk/org.csstudio.opibuilder/src/org/csstudio/opibuilder/scriptUtil/ScriptUtil.java + ScriptUtil.openOPI(widget, fct_name+"-"+cuName+"-SRVDetails.opi", 1, macroInput); + } +}; +table.addSelectionChangedListener(selectionChanged); diff --git a/EC-GN-JA-PCF/.svn/pristine/6e/6ebcc57b80347d346dfd1d7497f54bb384e9ce0a.svn-base b/EC-GN-JA-PCF/.svn/pristine/6e/6ebcc57b80347d346dfd1d7497f54bb384e9ce0a.svn-base new file mode 100644 index 0000000..99ba1f5 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/6e/6ebcc57b80347d346dfd1d7497f54bb384e9ce0a.svn-base @@ -0,0 +1,309 @@ +/** + * @file JAConditionalSignalUpdateGAM.cpp + * @brief Source file for class JAConditionalSignalUpdateGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAConditionalSignalUpdateGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAConditionalSignalUpdateGAM.h" +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAConditionalSignalUpdateGAM::JAConditionalSignalUpdateGAM() { + inputSignals = NULL_PTR(void **); + inputSignalTypes = NULL_PTR(MARTe::TypeDescriptor *); + values = NULL_PTR(MARTe::uint32 *); + valuesCount = 0u; + outputSignals = NULL_PTR(MARTe::uint32 **); + defaultValues = NULL_PTR(MARTe::uint32 **); + needsReset = false; + expectedValues = NULL_PTR(MARTe::uint32 *); + expectedValuesCount = 0u; + operation = And; + comparators = NULL_PTR(ComparisonMode *); +} + +JAConditionalSignalUpdateGAM::~JAConditionalSignalUpdateGAM() { + if (outputSignals != NULL_PTR(MARTe::uint32 **)) { + delete[] outputSignals; + } + if (inputSignals != NULL_PTR(void **)) { + delete[] inputSignals; + } + if (inputSignalTypes != NULL_PTR(MARTe::TypeDescriptor *)) { + delete[] inputSignalTypes; + } + if (values != NULL_PTR(MARTe::uint32 *)) { + delete[] values; + } + if (comparators != NULL_PTR(ComparisonMode *)) { + delete[] comparators; + } + if (defaultValues != NULL_PTR(MARTe::uint32 **)) { + delete[] defaultValues; + } +} + +bool JAConditionalSignalUpdateGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + // Read expected values. + AnyType valuesArray = data.GetType("ExpectedValues"); + + if (valuesArray.GetDataPointer() != NULL) { + expectedValuesCount = valuesArray.GetNumberOfElements(0u); + + expectedValues = new uint32[expectedValuesCount]; + + Vector valuesVector(expectedValues, expectedValuesCount); + ok = (data.Read("ExpectedValues", valuesVector)); + } + } + if (ok) { + // Read comparators. + AnyType comparatorsArray = data.GetType("Comparators"); + if (comparatorsArray.GetDataPointer() != NULL) { + uint32 count; + if (ok) { + count = comparatorsArray.GetNumberOfElements(0u); + ok = count == expectedValuesCount; + } + if (ok) { + comparators = new ComparisonMode[count]; + StreamString* comp = new StreamString[count]; + Vector compVector(comp, count); + + ok = (data.Read("Comparators", compVector)); + + if (ok) { + for (uint32 i = 0; i < count; ++i) { + if (comp[i] == "EQUALS") { + comparators[i] = Equals; + } else if (comp[i] == "NOT") { + comparators[i] = Not; + } else if (comp[i] == "GREATER") { + comparators[i] = Greater; + } else if (comp[i] == "EQUALS_OR_GREATER") { + comparators[i] = EqualsOrGreater; + } else if (comp[i] == "LESS") { + comparators[i] = Less; + } else if (comp[i] == "EQUALS_OR_LESS") { + comparators[i] = EqualsOrLess; + } else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Comparator %s is not defined.", comp[i].Buffer()); + } + } + } + delete[] comp; + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Expected values and operators shall have the same " + "number of elements."); + } + } else { + // Create default comparators (equals) when they aren't provided in the configuration. + comparators = new ComparisonMode[expectedValuesCount]; + for (uint32 i = 0; i < expectedValuesCount; ++i) { + comparators[i] = Equals; + } + } + } + if (ok) { + MARTe::StreamString operationStr; + if (data.Read("Operation", operationStr)) { + if (operationStr == "AND") { + operation = And; + } + else if (operationStr == "OR") { + operation = Or; + } + else if (operationStr == "NOR") { + operation = Nor; + } + else if (operationStr == "XOR") { + operation = Xor; + } + else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Operation %s is not defined", operationStr.Buffer()); + } + } + } + if (ok) { + // Read output signal values to be set. + AnyType valuesArray = data.GetType("Values"); + ok = (valuesArray.GetDataPointer() != NULL); + + if (ok) { + valuesCount = valuesArray.GetNumberOfElements(0u); + ok = valuesCount > 0u; + } + if (ok) { + values = new uint32[valuesCount]; + + Vector valuesVector(values, valuesCount); + ok = (data.Read("Values", valuesVector)); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Values shall be defined."); + } + } + return ok; +} + +bool JAConditionalSignalUpdateGAM::Setup() { + using namespace MARTe; + bool ok = numberOfInputSignals == (expectedValuesCount + numberOfOutputSignals); + if (ok) { + inputSignals = new void*[expectedValuesCount]; + defaultValues = new uint32*[numberOfOutputSignals]; + uint32 i; + for (i = 0u; i < expectedValuesCount; i++) { + inputSignals[i] = GetInputSignalMemory(i); + } + for (; i < numberOfInputSignals; i++) { + defaultValues[i - expectedValuesCount] = reinterpret_cast(GetInputSignalMemory(i)); + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Number of input signals shall be equal to number " + "of expected values plus number of output signals."); + } + if (ok) { + inputSignalTypes = new TypeDescriptor[expectedValuesCount]; + uint32 i; + for (i = 0u; (i < expectedValuesCount) && (ok); i++) { + inputSignalTypes[i] = GetSignalType(InputSignals, i); + ok = ((inputSignalTypes[i] == UnsignedInteger32Bit) || (inputSignalTypes[i] == UnsignedInteger16Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, i, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint16", signalName.Buffer()); + } + } + } + if (ok) { + ok = numberOfOutputSignals == valuesCount; + if (ok) { + ok = numberOfOutputSignals > 0u; + if (ok) { + outputSignals = new uint32*[numberOfOutputSignals]; + uint32 i; + for (i = 0u; i < numberOfOutputSignals; i++) { + outputSignals[i] = reinterpret_cast(GetOutputSignalMemory(i)); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one output signal shall be defined"); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Number of output signals shall be the same as " + "number of provided values."); + } + } + + return ok; +} + +bool JAConditionalSignalUpdateGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + needsReset = false; + return true; +} + +bool JAConditionalSignalUpdateGAM::Execute() { + if (!needsReset) { + bool eventDetected = expectedValuesCount == 0; + if (!eventDetected) { + if (operation == Or) { + MARTe::uint32 j; + for (j = 0; (j < expectedValuesCount) && (!eventDetected); j++) { + eventDetected = Compare(j); + } + } + else if (operation == Nor) { + MARTe::uint32 j; + for (j = 0; (j < expectedValuesCount) && (!eventDetected); j++) { + eventDetected = Compare(j); + } + eventDetected = !eventDetected; + } + else if (operation == And) { + MARTe::uint32 j; + eventDetected = Compare(0); + for (j = 1; (j < expectedValuesCount); j++) { + eventDetected &= Compare(j); + } + } + else if (operation == Xor) { + MARTe::uint32 j; + MARTe::uint32 eventDetectedUint32; + if (inputSignalTypes[0] == MARTe::UnsignedInteger32Bit) { + eventDetectedUint32 = *static_cast(inputSignals[0]); + } + else { + eventDetectedUint32 = *static_cast(inputSignals[0]); + } + for (j = 1; (j < expectedValuesCount); j++) { + eventDetectedUint32 ^= Compare(j); + } + eventDetected = (eventDetectedUint32 == 1u); + } + } + if (eventDetected) { + needsReset = true; + MARTe::uint32 i; + for (i = 0u; i < numberOfOutputSignals; ++i) { + *outputSignals[i] = values[i]; + MARTe::StreamString signalName; + (void) GetSignalName(MARTe::OutputSignals, i, signalName); + } + } + else { + MARTe::uint32 i; + for (i = 0u; i < numberOfOutputSignals; ++i) { + *outputSignals[i] = *defaultValues[i]; + } + } + } + return true; +} + +bool JAConditionalSignalUpdateGAM::Compare(MARTe::uint32 index) { + if (inputSignalTypes[index] == MARTe::UnsignedInteger32Bit) { + return Compare(index); + } + return Compare(index); +} + +CLASS_REGISTER(JAConditionalSignalUpdateGAM, "1.0") diff --git a/EC-GN-JA-PCF/.svn/pristine/6e/6edb1afabdbe0a722ff0c1477415d37ac7603078.svn-base b/EC-GN-JA-PCF/.svn/pristine/6e/6edb1afabdbe0a722ff0c1477415d37ac7603078.svn-base new file mode 100644 index 0000000..2064aac --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/6e/6edb1afabdbe0a722ff0c1477415d37ac7603078.svn-base @@ -0,0 +1 @@ +QST Gyrotron Fast Controller Implementation with MARTe2 RT Application Framework diff --git a/EC-GN-JA-PCF/.svn/pristine/6f/6f0bdb579866c16ab49369a5963e75483c9d05ab.svn-base b/EC-GN-JA-PCF/.svn/pristine/6f/6f0bdb579866c16ab49369a5963e75483c9d05ab.svn-base new file mode 100644 index 0000000..fed3a3b --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/6f/6f0bdb579866c16ab49369a5963e75483c9d05ab.svn-base @@ -0,0 +1,23557 @@ + + + + + +52 + + + +EC-GN + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +10.136.136.101 + + +52RF01-PSH-4410 + + + + +52RF01-PCF-4210.codac.iter.org + + +52RF01-PCF-4210.codac.iter.org-R1 + + +52RF01-PCF-4210.codac.iter.org-R1 + + + + + +10.136.136.13-T1 + + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-ACQ + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-CONF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-MODE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-ACQ + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-CONF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-MODE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AISTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AOSTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-LDAICF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-LDAOCF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AISTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AOSTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-LDAICF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-LDAOCF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BLKTMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-FTEAALL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-RESET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-TAIUTC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-DMSG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-NS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-DMSG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-NS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AIPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AISMPL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AISR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AITB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AOPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AOTB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-CHAIMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-CHAOMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AIPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AISMPL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AISR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AITB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AOPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AOTB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-CHAIMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-CHAOMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-FILTINT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-POWERP3 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-POWERP4 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-POWERP5 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIINPROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIOUTROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIPCHANGE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIPWDG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIWDGTRIG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-WDGTOUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-FILTINT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-POWERP3 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-POWERP4 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-POWERP5 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIINPROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIOUTROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIPCHANGE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIPWDG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIWDGTRIG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-WDGTOUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BDTM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BDTMN + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BDTMS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BLKTM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-DEVNAME + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-DRIVER + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-FTEMAX + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-FTENUM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-HBDTM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-LVL_ERRS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-SERIAL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-SYNC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-SYNCLOST + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:DIO4900-YON + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-AI-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-AO-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-LOAD + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-LOADED + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DI-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DO-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN-EGU + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-MST-TRIG + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-PREP-MODE + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHORT-PULSE + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-TRIG-SOUR + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2810-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2810-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2820-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2820-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2830-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2830-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MRF2910-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MRF2910-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-BEAMON-TIME + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-ERR + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-NAME + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN-CALC + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN-DAM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-ELAPSED + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-PREHEAT-TIME + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-PREP-TIME-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-FLNK1 + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-FLNK2 + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-ID + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-PLOT + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SM + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-OUTON-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-OUTON-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-RST + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-STAT + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-TR + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-MANM + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-CURR-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-CURR-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-DCV-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-DCV-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-EREF + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-EREF-MSP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-ERROR + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-IDN + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCI + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCV + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-AMP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-FREQ + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-OFFS + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-OP-CALC + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-OP-V-DIFF + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-LOC + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-OUTON-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-REM + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-RST + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-MANM + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-ACV-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-ACV-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-RU-TIME + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-STAT + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-CURR-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-CURR-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-EREF + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-EREF-MSP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-ERROR + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-FRQ-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-FRQ-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-IDN + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACI + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-FRQ + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-AUTO-MODE-SET + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-PREP-WF + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CALC + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-MANM + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MI + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MO + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ERR + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-SWP-LIM + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-SWP-RB + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-RB + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-SWPR-SET + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-VOLT-MON + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-MANM + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MI + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MO + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ERR + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-SWP-LIM + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-SWP-RB + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-RB + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-SWPR-SET + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-VOLT-MON + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-RAMPDWN-CMP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV1 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV2 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV3 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV5 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV6 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV7 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV8 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YFLT-OC + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YFLT-OV + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YSTA-GAOP + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YTRP + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YTRP2 + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:DIO4900-YON + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-AI-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-AO-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-LOAD + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-LOADED + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DI-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DO-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN-EGU + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-MST-TRIG + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-PREP-MODE + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHORT-PULSE + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-TRIG-SOUR + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2810-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2810-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2820-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2820-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2830-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2830-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MRF2910-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MRF2910-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-BEAMON-TIME + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-ERR + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +string +configuration + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-NAME + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN-CALC + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN-DAM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-ELAPSED + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-PREHEAT-TIME + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-PREP-TIME-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-FLNK1 + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-FLNK2 + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-ID + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-PLOT + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SM + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-OUTON-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-OUTON-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-RST + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-STAT + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-TR + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-MANM + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-CURR-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-CURR-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-DCV-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-DCV-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-EREF + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-EREF-MSP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-ERROR + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-IDN + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCI + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCV + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-AMP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-FREQ + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-OFFS + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-OP-CALC + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-OP-V-DIFF + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-LOC + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-OUTON-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-REM + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-RST + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-MANM + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-ACV-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-ACV-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-RU-TIME + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-STAT + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-CURR-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-CURR-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-EREF + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-EREF-MSP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-ERROR + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-FRQ-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-FRQ-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-IDN + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACI + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-FRQ + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-AUTO-MODE-SET + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-PREP-WF + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CALC + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-MANM + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MI + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MO + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ERR + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-SWP-LIM + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-SWP-RB + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-RB + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-SWPR-SET + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-VOLT-MON + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-MANM + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MI + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MO + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ERR + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-SWP-LIM + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-SWP-RB + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-RB + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-SWPR-SET + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-VOLT-MON + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV1 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV2 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV3 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV5 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV6 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV7 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV8 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-YSTA-GBOP + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-YTRP + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-YTRP2 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-CTRP + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GA1 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GA2 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GA3 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GB1 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GB2 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GB3 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PSU0000-YSTA-MOD + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-CONF-STAT + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-RECONF + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SW-TRIG + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-RST-FLT + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-LEN + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-LEN-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-MODE + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-MODE-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-PUB-DLY + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-PUB-DLY-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-STAT + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD1-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD2-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD3-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD4-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-RDY-TOUT + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-GY1PRM + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-GY2PRM + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-OPGY1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-OPGY2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-RV1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-RV2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-RV3 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YON-CCPS1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YON-CCPS2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YSTA-MPSS + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTRP + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD3 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD4 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-ST1R + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-ST2R + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-ST3R + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-CON-HV + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-CON-SW + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-CTRP + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-YFLT + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-YSTA + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-MANM + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-EREF + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-EREF-MSP + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-EREF-P + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-ET + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-ET-WF + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-IT + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-IT-WF + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-DT-HVON + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-DT-SWON + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-EREF-CONV + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-PREP-WF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-CON-HV + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-CON-SW + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-CTRP + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-YFLT + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-YSTA + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-MANM + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-EREF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-EREF-MSP + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-EREF-P + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-ET + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-ET-WF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-IT + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-IT-WF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-DT-HVON + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-DT-SWON + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-EREF-CONV + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-PREP-WF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-CON-HV + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-CON-SW + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-CTRP + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-YFLT + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-YSTA + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-MANM + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-EREF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-EREF-MSP + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-ET + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-ET-WF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-IT + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-IT-WF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-DT-HVON + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-DT-SWON + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-PREP-WF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-CON-HV + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-CON-SW + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-CTRP + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-YFLT + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-YSTA + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-MANM + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-EREF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-EREF-MSP + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-ET + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-ET-WF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-IT + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-IT-WF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-DT-HVON + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-DT-SWON + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-PREP-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-COFF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-CON-MOD + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-CON-SW + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-TYSTA + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-YFLT + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-MANM + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-EREF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-EREF-MSP + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GA + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GA-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GB + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GB-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GA + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GA-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GB + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GB-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-DT-HVON + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-EREF-CALC + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-HVON-CALC + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-PREP-WF + + + + + + + + + + +iocEC-GN-PSH0PCF +PCFCORE IOC +epicsioc +IOC + + + +52RF01-PCF-4210 + +iocEC-GN-PCF0SYSM +PCFSYSM IOC +epicsioc +IOC + + + +52RF01-PSH-4410 + +iocEC-GN-PSH0SYSM +PSHSYSM IOC +epicsioc +IOC + + + +52RF01-PSH-4410 + +iocEC-GN-PSH0CUB +PSHCUB IOC +epicsioc +IOC + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/71/7142a58ecb8d5f67395c4f18731aedda51717653.svn-base b/EC-GN-JA-PCF/.svn/pristine/71/7142a58ecb8d5f67395c4f18731aedda51717653.svn-base new file mode 100644 index 0000000..8847378 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/71/7142a58ecb8d5f67395c4f18731aedda51717653.svn-base @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JABitReverseGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JABitReverseGAM$(LIBEXT) \ + $(BUILD_DIR)/JABitReverseGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/.svn/pristine/71/716d11760dc358c4c01307291ed68bcaa97c7e08.svn-base b/EC-GN-JA-PCF/.svn/pristine/71/716d11760dc358c4c01307291ed68bcaa97c7e08.svn-base new file mode 100644 index 0000000..5293c3f --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/71/716d11760dc358c4c01307291ed68bcaa97c7e08.svn-base @@ -0,0 +1,134 @@ +#+====================================================================== +# $HeadURL: $ +# $Id: $ +# +# Project : ITER I&C Integration +# +# Description : SPEC file for packaging CS-Studio related file artefacts +# +# Author(s) : Bertrand Bauvir (IO) +# +# Copyright (c) : 2010-2021 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== + +%define __spec_install_post %{nil} + +Name: iter-icint-%{project_artifactId} +Version: %{project_version} +Release: %{?rpm_release_num:%{rpm_release_num}}%{!?rpm_release_num:1} +Summary: %{project_description} + +Group: Development/CODAC +Distribution: I&C Applications +#URL: http://www.iter.org/org/team/chd/cid/codac +URL: %{?rpm_vcs_url:%{rpm_vcs_url}}%{!?rpm_vcs_url:undefined} +Vendor: ITER Organization +Packager: ITER Organization +License: ITER License + +Source0: src.tar.gz + +BuildArch: noarch +AutoReq: no + +%provides_self + +%description +%{project_description}. + +%package -n %subpackage opi +Summary: %{project_description} - OPI resources +Group: Development/CODAC +AutoReq: no +Requires: filesystem +%provides_self %subpackage opi + +%description -n %subpackage opi +%{project_description} - OPI resources. + +%package -n %subpackage alarm +Summary: %{project_description} - Alarm configuration +Group: Development/CODAC +AutoReq: no +Requires: filesystem +%provides_self %subpackage alarm + +%description -n %subpackage alarm +%{project_description} - Alarm configuration. + +%package -n %subpackage archive +Summary: %{project_description} - Archive configuration +Group: Development/CODAC +AutoReq: no +Requires: filesystem +%provides_self %subpackage archive + +%description -n %subpackage archive +%{project_description} - Archive configuration. + +%prep +%setup -T -c -a 0 + +%build + +%install +rm -rf %{buildroot} +mkdir -p %{buildroot}/opt/codac/opi/%{project_artifactId} +install -d %{buildroot}/opt/codac/opi/%{project_artifactId} +cp -r src/main/boy %{buildroot}/opt/codac/opi/%{project_artifactId} +mkdir -p %{buildroot}/opt/codac/opi/%{project_artifactId}/epics +cp -r src/main/epics/*App %{buildroot}/opt/codac/opi/%{project_artifactId}/epics || : +mkdir -p %{buildroot}/etc/opt/codac/%{project_artifactId} +install -d %{buildroot}/etc/opt/codac/%{project_artifactId} +cp src/main/beast/* %{buildroot}/etc/opt/codac/%{project_artifactId} +cp src/main/beauty/* %{buildroot}/etc/opt/codac/%{project_artifactId} +mkdir -p %{buildroot}/etc/opt/codac/css/beast/%{project_artifactId} +install -d %{buildroot}/etc/opt/codac/css/beast/%{project_artifactId} +cp src/main/beast/* %{buildroot}/etc/opt/codac/css/beast/%{project_artifactId} +mkdir -p %{buildroot}/etc/opt/codac/css/beauty/%{project_artifactId} +install -d %{buildroot}/etc/opt/codac/css/beauty/%{project_artifactId} +cp src/main/beauty/* %{buildroot}/etc/opt/codac/css/beauty/%{project_artifactId} + +%clean + +%files + +%files -n %subpackage opi +/opt/codac/opi/* + +%files -n %subpackage alarm +/etc/opt/codac/%{project_artifactId}/*beast.xml +/etc/opt/codac/css/beast/%{project_artifactId}/*beast.xml + +%files -n %subpackage archive +/etc/opt/codac/%{project_artifactId}/*beauty.xml +/etc/opt/codac/css/beauty/%{project_artifactId}/*beauty.xml + +%pretrans +%beginlog_pretrans +%endlog + +%posttrans +%beginlog_posttrans +%endlog + +%preun +%beginlog_preun +%endlog + +%postun +%beginlog_postun +%endlog + +%changelog +* Wed Mar 31 2021 Bertrand Bauvir +- Initial version. diff --git a/EC-GN-JA-PCF/.svn/pristine/72/72c1a68f591a72f34ece014e29523c80b81d8b2d.svn-base b/EC-GN-JA-PCF/.svn/pristine/72/72c1a68f591a72f34ece014e29523c80b81d8b2d.svn-base new file mode 100644 index 0000000..212485e --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/72/72c1a68f591a72f34ece014e29523c80b81d8b2d.svn-base @@ -0,0 +1,43 @@ +# CONFIG_SITE + +# Make any application-specific changes to the EPICS build +# configuration variables in this file. +# +# Host/target specific settings can be specified in files named +# CONFIG_SITE.$(EPICS_HOST_ARCH).Common +# CONFIG_SITE.Common.$(T_A) +# CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A) + +# CHECK_RELEASE controls the consistency checking of the support +# applications pointed to by the RELEASE* files. +# Normally CHECK_RELEASE should be set to YES. +# Set CHECK_RELEASE to NO to disable checking completely. +# Set CHECK_RELEASE to WARN to perform consistency checking but +# continue building even if conflicts are found. +CHECK_RELEASE = YES + +# Set this when you only want to compile this application +# for a subset of the cross-compiled target architectures +# that Base is built for. +#CROSS_COMPILER_TARGET_ARCHS = vxWorks-ppc32 + +# To install files into a location other than $(TOP) define +# INSTALL_LOCATION here. +#INSTALL_LOCATION= + +# Set this when the IOC and build host use different paths +# to the install location. This may be needed to boot from +# a Microsoft FTP server say, or on some NFS configurations. +#IOCS_APPL_TOP = + +# For application debugging purposes, override the HOST_OPT and/ +# or CROSS_OPT settings from base/configure/CONFIG_SITE +#HOST_OPT = NO +#CROSS_OPT = NO + +# These allow developers to override the CONFIG_SITE variable +# settings without having to modify the configure/CONFIG_SITE +# file itself. +-include $(TOP)/../CONFIG_SITE.local +-include $(TOP)/configure/CONFIG_SITE.local + diff --git a/EC-GN-JA-PCF/.svn/pristine/73/733053c46c05b598acfa0197c98e7bf3793b4cc7.svn-base b/EC-GN-JA-PCF/.svn/pristine/73/733053c46c05b598acfa0197c98e7bf3793b4cc7.svn-base new file mode 100644 index 0000000..6a74042 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/73/733053c46c05b598acfa0197c98e7bf3793b4cc7.svn-base @@ -0,0 +1,206 @@ +record (bo,"EC-GN-P01-PA2F:PSU4000-CON-HV") +{ + field(DESC, "GY2 APS HVON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PA2F:PSU4000-CON-SW") +{ + field(DESC, "GY2 APS HV SWON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PA2F:PSU4000-CTRP") +{ + field(DESC, "GY2 APS Shutdown request") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-PA2F:PSU4000-YFLT") +{ + field(DESC, "GY2 APS Fault") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 1) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-PA2F:PSU4000-YSTA") +{ + field(DESC, "GY2 APS Ready") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 0) bitread") + field(ONAM, "READY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-PA2F:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY2 APS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (ao,"EC-GN-P01-PA2F:PSU4000-EREF") +{ + field(DESC, "GY2 APS voltage setpoint") + field(DRVH, "10") + field(DRVL, "-20") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "10") + field(LOPR, "-20") + field(OUT, "@asyn(ni6368_0, 1) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PA2F:PSU4000-EREF-MSP") +{ + field(DESC, "GY2 APS voltage manual setpoint") + field(DRVH, "10") + field(DRVL, "-20") + field(EGU, "kV") + field(HOPR, "10") + field(LOPR, "-20") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PA2F:PSU4000-EREF-P") +{ + field(ASLO, "2") + field(DESC, "GY2 APS P-voltage setpoint") + field(DRVH, "0") + field(DRVL, "-20") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "10") + field(LOPR, "-20") + field(OUT, "@asyn(ni6368_0, 2) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-PA2F:PSU4000-ET") +{ + field(DESC, "GY2 APS Measured Volatege") + field(EGU, "kV") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PA2F:PSU4000-ET-WF") +{ + field(DESC, "GY2 APS Measured Volatege") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PA2F:PSU4000-IT") +{ + field(DESC, "GY2 APS Measued Current") + field(EGU, "A") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PA2F:PSU4000-IT-WF") +{ + field(DESC, "GY2 APS Measued Current") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PA2F:STAT-DT-HVON") +{ + field(DESC, "Time diff to GY2 APS Gate ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "500000") +} + +record (ai,"EC-GN-P01-PA2F:STAT-DT-SWON") +{ + field(DESC, "Time diff to GY2 APS SW ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "600000") +} + +record (calcout,"EC-GN-P01-PA2F:STAT-EREF-CONV") +{ + field(CALC, "A>0?A:((A>-20)?A/2:-10)") + field(DESC, "GYB APS engineer value conversion") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-PA2F:PSU4000-EREF PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-PA2F:STAT-PREP-WF") +{ + field(DESC, "GY2 APS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/.svn/pristine/73/7397400233046adceeb850f4ed7fc5d6c7a864b6.svn-base b/EC-GN-JA-PCF/.svn/pristine/73/7397400233046adceeb850f4ed7fc5d6c7a864b6.svn-base new file mode 100644 index 0000000..a6fb765 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/73/7397400233046adceeb850f4ed7fc5d6c7a864b6.svn-base @@ -0,0 +1,3 @@ +#!/bin/sh + +taskset -c 12-15 ./Main.sh -f ../Configurations/JAGyrotronB_FY19_P1.cfg -l RealTimeLoader -m StateMachine:Start diff --git a/EC-GN-JA-PCF/.svn/pristine/73/739a18ad3bbd15629d3d87f896cc710b9b374039.svn-base b/EC-GN-JA-PCF/.svn/pristine/73/739a18ad3bbd15629d3d87f896cc710b9b374039.svn-base new file mode 100644 index 0000000..62ab62d --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/73/739a18ad3bbd15629d3d87f896cc710b9b374039.svn-base @@ -0,0 +1,177 @@ +/** + * @file JASampleGAM.cpp + * @brief Source file for class JASampleGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JASampleGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JASampleGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JASampleGAM::JASampleGAM() { + // initialize member variables. + param1 = 0; + param2 = 0; + + //Input signals. + input1 = NULL_PTR(MARTe::uint32 *); + input2 = NULL_PTR(MARTe::float32 *); + //Output signals. + output1= NULL_PTR(MARTe::uint32 *); + output2 = NULL_PTR(MARTe::float32 *); + +} + +JASampleGAM::~JASampleGAM() { +} + +bool JASampleGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("param1", param1); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The param1 shall be specified"); + } + } + if (ok) { + ok = data.Read("param2", param2); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The param2 shall be specified"); + } + } + return ok; +} + +bool JASampleGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JASampleGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == 2u); + if (ok) { + ok = (numberOfOutputSignals == 2u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Two output signals shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Two input signals shall be defined"); + } + // Do type check for input signals. + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = ((inputType == UnsignedInteger32Bit) || (inputType == Float32Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or flaot32", signalName.Buffer()); + } + + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = ((outputType == UnsignedInteger32Bit) || (outputType == Float32Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or float32", signalName.Buffer()); + } + } + } + + // Signal id can get by signal name in configuration file + if (ok) { + StreamString signalName = "InputXXX"; //Variable name in configuration file. + uint32 signalxxxIndex; //Index is copied to this variable by using signal name. + ok = GetSignalIndex(InputSignals, signalxxxIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "InputXXX input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, signalxxxIndex); + ok = (inputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, signalxxxIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } else { + inputXXX = reinterpret_cast(GetInputSignalMemory(signalxxxIndex)); + } + } + } + + // Do type cast. with explicit signal id. + if (ok) { + input1 = reinterpret_cast(GetInputSignalMemory(0)); + input2 = reinterpret_cast(GetInputSignalMemory(1)); + + output1 = reinterpret_cast(GetOutputSignalMemory(0)); + output2 = reinterpret_cast(GetOutputSignalMemory(1)); + + } + return ok; +} + +bool JASampleGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + REPORT_ERROR(ErrorManagement::Information, "input1 is %d.", *input1); + REPORT_ERROR(ErrorManagement::Information, "input2 is %f.", *input2); + REPORT_ERROR(ErrorManagement::Information, "inputXXX is %f.", *inputXXX); + + REPORT_ERROR(ErrorManagement::Information, "maltiply param value to input."); + + *output1 = *input1 * param1; + *output2 = *input2 * param2; + + REPORT_ERROR(ErrorManagement::Information, "output1 is %d.", *output1); + REPORT_ERROR(ErrorManagement::Information, "output2 is %f.", *output2); + + return true; +} + +CLASS_REGISTER(JASampleGAM, "1.0") diff --git a/EC-GN-JA-PCF/.svn/pristine/74/748386473f6668a9bfd07cc4a1ed52d60a8e27b8.svn-base b/EC-GN-JA-PCF/.svn/pristine/74/748386473f6668a9bfd07cc4a1ed52d60a8e27b8.svn-base new file mode 100644 index 0000000..2ce42cd --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/74/748386473f6668a9bfd07cc4a1ed52d60a8e27b8.svn-base @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/76/76a63875e336f9b543af3a8115e9c643ce2a0395.svn-base b/EC-GN-JA-PCF/.svn/pristine/76/76a63875e336f9b543af3a8115e9c643ce2a0395.svn-base new file mode 100644 index 0000000..c809458 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/76/76a63875e336f9b543af3a8115e9c643ce2a0395.svn-base @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JARTSampleGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JARTSampleGAM$(LIBEXT) \ + $(BUILD_DIR)/JARTSampleGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/.svn/pristine/77/777f69b163c24769b3f933688d39a8d88f1cb32c.svn-base b/EC-GN-JA-PCF/.svn/pristine/77/777f69b163c24769b3f933688d39a8d88f1cb32c.svn-base new file mode 100644 index 0000000..20f083d --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/77/777f69b163c24769b3f933688d39a8d88f1cb32c.svn-base @@ -0,0 +1,34 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ColorFontUtil); +importPackage(Packages.org.csstudio.opibuilder.scriptUtil.*); + +var table = widget.getTable(); +var nbColPVs=4; + +//find index of the trigger PV + +var i=0; +while (triggerPV != pvs[i]) { + i+=1; +} + +table.setCellText(i/nbColPVs, i%nbColPVs +3, PVUtil.getString(triggerPV)); + +var s = PVUtil.getSeverity(triggerPV); + +var color = ColorFontUtil.WHITE; +if( s == 0) { + color = ColorFontUtil.GREEN; +} +else if( s == 1) { + color = ColorFontUtil.RED; +} +else if( s == 2) { + color = ColorFontUtil.YELLOW; +} +else if( s == 3) { + color = ColorFontUtil.PINK; +} + +table.setCellBackground(i/nbColPVs, i%nbColPVs + 3, color); + diff --git a/EC-GN-JA-PCF/.svn/pristine/78/780954360790cd82cadd2850b578af840251fe2f.svn-base b/EC-GN-JA-PCF/.svn/pristine/78/780954360790cd82cadd2850b578af840251fe2f.svn-base new file mode 100644 index 0000000..e0a2fc4 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/78/780954360790cd82cadd2850b578af840251fe2f.svn-base @@ -0,0 +1,26 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +############################################################# + +include Makefile.inc + diff --git a/EC-GN-JA-PCF/.svn/pristine/78/78fcde4103223083f4c567fd6a848f74eb73b4cb.svn-base b/EC-GN-JA-PCF/.svn/pristine/78/78fcde4103223083f4c567fd6a848f74eb73b4cb.svn-base new file mode 100644 index 0000000..1edd319 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/78/78fcde4103223083f4c567fd6a848f74eb73b4cb.svn-base @@ -0,0 +1,25 @@ +/* PLCMain.cpp */ +/* Author: Marty Kraimer Date: 17MAR2000 */ + +#include +#include +#include +#include +#include +#include + +#include "epicsExit.h" +#include "epicsThread.h" +#include "iocsh.h" + +int main(int argc,char *argv[]) +{ + sigset(SIGTERM, epicsExit); + if(argc>=2) { + iocsh(argv[1]); + epicsThreadSleep(.2); + } + iocsh(NULL); + epicsExit(0); + return(0); +} diff --git a/EC-GN-JA-PCF/.svn/pristine/79/799db37bd59cad2842f7a5a27cb9247f7b6e33bb.svn-base b/EC-GN-JA-PCF/.svn/pristine/79/799db37bd59cad2842f7a5a27cb9247f7b6e33bb.svn-base new file mode 100644 index 0000000..d5356be --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/79/799db37bd59cad2842f7a5a27cb9247f7b6e33bb.svn-base @@ -0,0 +1,8 @@ +############################################################################ +## Autosave monitor post setup +############################################################################ + +cd "${TOP}/iocBoot/$(IOC)" +create_monitor_set("iocEC-GN-PSH0PCF.req",30,"P=$(AUTOSAVE_SYSM_PV_PREFIX)") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/.svn/pristine/7a/7a057f520954948457c88ca89b6fd4daeef42b40.svn-base b/EC-GN-JA-PCF/.svn/pristine/7a/7a057f520954948457c88ca89b6fd4daeef42b40.svn-base new file mode 100644 index 0000000..1d2bbcf --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/7a/7a057f520954948457c88ca89b6fd4daeef42b40.svn-base @@ -0,0 +1,75 @@ +/** + * @file JABitReverseGAM.h + * @brief Header file for class JABitReverseGAM + * @date Mar 18, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JABitReverseGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JABitReverseGAM_H_ +#define GAMS_JABitReverseGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +class JABitReverseGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JABitReverseGAM(); + + virtual ~JABitReverseGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + + // Input signals + MARTe::uint8 *input1; + + // Output signals + MARTe::uint8 *output1; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JABitReverseGAM_H_ */ diff --git a/EC-GN-JA-PCF/.svn/pristine/7b/7b019c0cfd645bdae9898985e37060d389767186.svn-base b/EC-GN-JA-PCF/.svn/pristine/7b/7b019c0cfd645bdae9898985e37060d389767186.svn-base new file mode 100644 index 0000000..82a2603 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/7b/7b019c0cfd645bdae9898985e37060d389767186.svn-base @@ -0,0 +1,90 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +import test_async +import test_sync +import test_ready_hw +import test_setup_hw +import test_standby_hw +import test_ready +import test_setup +import test_standby + +# +# Some EPICS PVs need to be simulation mode when we test code without PXI board. +# When user uses sim mode, new value must be written into PV.SVAL and PV itselfself. +# +print '### Start State Machine Sequence Test ###' + +print '---------- Pre setup for the test ----------' +test_setup.test_setup() +#test_setup_hw.test_setup() + +print 'Enter to continue test:' +inpval = raw_input() +################################################################################ +# set SELECT and STANDBY signal +################################################################################ +print '---------- WatiStandby test ----------' +test_standby.test_standby() +#test_standby_hw.test_standby() + +print 'Enter to continue test' +inpval = raw_input() + +################################################################################ +# set READY and CCPS_ON_REQUEST signal +################################################################################ +print '---------- WatiReady test ----------' +test_ready.test_ready() +#test_ready_hw.test_ready() + +print 'Enter to continue test' +inpval = raw_input() +################################################################################ +# set PERMIT and ON signal +################################################################################ +print 'Simulate PERMIT signal. State should go to WaitHVON state' +while(1): + print '''Select test type and push enter key: + 1: GYA / Async mode + 2: GYB / Async mode + 3: Two Gyrotron operation + 4: Mode limit detection + 5: Short pulse + 6: Long pulse + 7: PrePro operation + 8: SYNC mode operation + 9: GYA / Async mode --- operator set delay and pulse length on HMI + 10: GYB / Async mode --- operator set delay and pulse length on HMI + ''' + inpval = raw_input() + + if inpval == "1": + test_async.test_async_GYA() + elif inpval == "2": + test_async.test_async_GYB() + elif inpval == "3": + test_async.test_async_both() + elif inpval == "4": + test_async.test_async_limit() + elif inpval == "5": + test_async.test_async_shortpulse() + elif inpval == "6": + test_async.test_async_longpulse() + elif inpval == "7": + test_async.test_async_prepro() + elif inpval == "8": + test_sync.test_sync() + elif inpval == "9": + test_async.test_async_GYA_manual() + elif inpval == "10": + test_async.test_async_GYB_manual() + else: + print 'invalid value. Enter 1 to 10!' + continue + +print '..... End of test code .....' diff --git a/EC-GN-JA-PCF/.svn/pristine/7b/7b58f2f5abb58491d8db91dc530e75071095b557.svn-base b/EC-GN-JA-PCF/.svn/pristine/7b/7b58f2f5abb58491d8db91dc530e75071095b557.svn-base new file mode 100644 index 0000000..55983f1 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/7b/7b58f2f5abb58491d8db91dc530e75071095b557.svn-base @@ -0,0 +1,409 @@ +/** + * @file JARTStateMachineGAM.cpp + * @brief Source file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JARTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +static MARTe::uint64 getCurrentTimeUs() { + using namespace MARTe; + return static_cast(HighResolutionTimer::Counter() * HighResolutionTimer::Period() * 1e6f + 0.5f); +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARTStateMachineGAM::JARTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + turn_off_delay = 2000; //us + + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + short_pulse_mode = NULL_PTR(MARTe::uint32 *); + + modulation = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + + apsSwonHighResolutionTime = 0; + + aps_hvon_state=0; + aps_swon_state=0; + mhvps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; +} + +JARTStateMachineGAM::~JARTStateMachineGAM() { +} + +bool JARTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JARTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JARTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 13u); + if (ok) { + ok = (numberOfOutputSignals == 16u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined %d",numberOfOutputSignals); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(10)); + modulation = reinterpret_cast(GetInputSignalMemory(11)); + pauseSet = reinterpret_cast(GetInputSignalMemory(12)); + + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + + outputAPSHVON = reinterpret_cast(GetOutputSignalMemory(8)); + outputAPSSWON = reinterpret_cast(GetOutputSignalMemory(9)); + outputBPSHVON = reinterpret_cast(GetOutputSignalMemory(10)); + outputBPSSWON = reinterpret_cast(GetOutputSignalMemory(11)); + outputMHVPSON = reinterpret_cast(GetOutputSignalMemory(12)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(13)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(14)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(15)); + + *shotCounter = 0; + } + return ok; +} + +bool JARTStateMachineGAM::Execute() { + using namespace MARTe; + + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + //REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence at %d.", *currentTime); + plcOnTime = *currentTime; //Save pulse start time. + //*outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS; + } + } + else if (currentState == SwitchingHVPS) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; bps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + *outputBPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; aps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal at %d.", *currentTime); + *outputAPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; bps_swon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + *outputBPSSWON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; mhvps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + *outputMHVPSON=1; + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (plcOnTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; aps_swon_state=1; + apsSwonHighResolutionTime = getCurrentTimeUs(); + apsSwonTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + *outputAPSSWON=1; + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 1; + } + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 1; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *outputBeamON = 1; + *shotCounter += 1; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //Action in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + //debug + //if((*stopRequest != 0)){ + //REPORT_ERROR(ErrorManagement::Debug, "Stop request was called.!!!"); + //} else { + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset.!!!"); + //} + *outputSignal -= aps_swon; + mhvps_hvon_is_on = false; mhvps_hvon_state=0; + aps_hvon_is_on = false; aps_hvon_state=0; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; bps_hvon_state=0; + bps_swon_is_on = false; bps_swon_state=0; + currentState = HVTerminate; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + } + uint32 updatePeriod = 100; // in microsecnds (get this from Timer) + if ((*modePulseLengthLimit == 1u) || (getCurrentTimeUs() + updatePeriod >= (apsSwonHighResolutionTime + *triggerDelay_shotlen))) { + + // Now we do busy wait + while (getCurrentTimeUs() < (apsSwonHighResolutionTime + *triggerDelay_shotlen)) { + //REPORT_ERROR(ErrorManagement::Debug, "!"); + } + // We stop busy waiting #executionOverhead before expected pulse off time + //debug + //if((*modePulseLengthLimit == 1u)){ + // REPORT_ERROR(ErrorManagement::Debug, "Mode limit detected.!!!"); + //} else { + // REPORT_ERROR(ErrorManagement::Debug, "Shot length reached to the setpoint.!!!"); + //} + //debug end. + //Do action + *outputSignal -= aps_swon; //Turn off only APS_SWON first. + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; + bps_swon_is_on = false; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + //REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 1; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + //In the HVTerminate state, turn APS_SWON off first, and wait 1ms. Finally turn other PS off. + //Action in this state. + *outputBeamON = 0; + *outputHVArmed = 0; + *outputHVInjection = 0; + *outputRFON = 0; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + mhvps_hvon_state=0; + aps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset. The State was changed to WaitTrigger at %d.", *currentTime); + } + } + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6259 = 1*aps_swon_state; + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + p4Value = 8*mhvps_hvon_state; + if (modulation) p4Value += 32; + if (pauseSet) p4Value += 1; + //*outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + *outputSignalNI6528P4 = ~p4Value; + return true; +} + +CLASS_REGISTER(JARTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF/.svn/pristine/7f/7f4f0820b2bcf0768b94db3953f0f746a419b3de.svn-base b/EC-GN-JA-PCF/.svn/pristine/7f/7f4f0820b2bcf0768b94db3953f0f746a419b3de.svn-base new file mode 100644 index 0000000..ffd24ee --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/7f/7f4f0820b2bcf0768b94db3953f0f746a419b3de.svn-base @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JATerminalInterfaceGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JATerminalInterfaceGAM$(LIBEXT) \ + $(BUILD_DIR)/JATerminalInterfaceGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/.svn/pristine/81/816e87665ef18f97f83abce3ec13782e575ab786.svn-base b/EC-GN-JA-PCF/.svn/pristine/81/816e87665ef18f97f83abce3ec13782e575ab786.svn-base new file mode 100644 index 0000000..a23d75a --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/81/816e87665ef18f97f83abce3ec13782e575ab786.svn-base @@ -0,0 +1,6 @@ +############################################################################ +## SDD provided sequence programs to load +############################################################################ + + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/.svn/pristine/81/8198339af1c730aa7f3b596b3c4749505f1dbe3d.svn-base b/EC-GN-JA-PCF/.svn/pristine/81/8198339af1c730aa7f3b596b3c4749505f1dbe3d.svn-base new file mode 100644 index 0000000..658d273 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/81/8198339af1c730aa7f3b596b3c4749505f1dbe3d.svn-base @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAMessageGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAMessageGAM$(LIBEXT) \ + $(BUILD_DIR)/JAMessageGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/.svn/pristine/82/82906779cb9ce4d1c006ecbd7461f8b4002b114a.svn-base b/EC-GN-JA-PCF/.svn/pristine/82/82906779cb9ce4d1c006ecbd7461f8b4002b114a.svn-base new file mode 100644 index 0000000..60517bb --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/82/82906779cb9ce4d1c006ecbd7461f8b4002b114a.svn-base @@ -0,0 +1,67 @@ +#!../../bin/linux-x86_64/EC-GN +#+====================================================================== +# $HeadURL: https://svnpub.codac.iter.org/codac/iter/codac/dev/units/m-epics-iter-templates/branches/codac-core-6.1/templates/genericBoot/ioc/st.cmd $ +# $Id: st.cmd 96475 2019-01-09 13:47:38Z sivecm $ +# +# Project : CODAC Core System +# +# Description : ITER ioc template EPICS start up file +# +# Author(s) : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2019 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== + +< envPaths +< envSystem +< envUser + +cd "${TOP}" + +############################################################################ +## Register all support components +############################################################################ + +dbLoadDatabase "dbd/EC-GN.dbd" +EC_GN_registerRecordDeviceDriver pdbbase + +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/sddPreDriverConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/userPreDriverConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/threadSchedulingConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/dbToLoad.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/iocEC-GN-PSH0PCF-preSaveRestore.cmd" + +############################################################################ +## IOC Logging +############################################################################ +iocLogInit +iocLogPrefix "${STY} : " + +############################################################################ +## IOC initialization +############################################################################ +cd "${TOP}/db" +iocInit + +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/iocEC-GN-PSH0PCF-postSaveRestore.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/sddSeqToLoad.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/seqToLoad.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/sddPostDriverConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/userPostDriverConf.cmd" + + +dbl > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbl" +dbla > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbla" +dbior > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbior" +dbhcr > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbhcr" + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/.svn/pristine/83/8331f49fb9bee87c696c009ba0fd85eac418f3b7.svn-base b/EC-GN-JA-PCF/.svn/pristine/83/8331f49fb9bee87c696c009ba0fd85eac418f3b7.svn-base new file mode 100644 index 0000000..6d56e14 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/83/8331f49fb9bee87c696c009ba0fd85eac418f3b7.svn-base @@ -0,0 +1,6 @@ +# RULES + +include $(CONFIG)/RULES + +# Library should be rebuilt because LIBOBJS may have changed. +$(LIBNAME): ../Makefile diff --git a/EC-GN-JA-PCF/.svn/pristine/83/83570b90f2f2ddf5ff699e4c17ac97f6e8a915b2.svn-base b/EC-GN-JA-PCF/.svn/pristine/83/83570b90f2f2ddf5ff699e4c17ac97f6e8a915b2.svn-base new file mode 100644 index 0000000..230aa06 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/83/83570b90f2f2ddf5ff699e4c17ac97f6e8a915b2.svn-base @@ -0,0 +1,8 @@ +#ifndef SDD_DAN_H +#define SDD_DAN_H +#include "dan.h" + +static const char ICProgName[] = "Gyrotron02DAN"; +static const char GYBDanSource[] = "GYBDanSource"; + +#endif /* SDD_DAN_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/83/83fc02d60e8d5dabba73d649217e085164125996.svn-base b/EC-GN-JA-PCF/.svn/pristine/83/83fc02d60e8d5dabba73d649217e085164125996.svn-base new file mode 100644 index 0000000..420177c --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/83/83fc02d60e8d5dabba73d649217e085164125996.svn-base @@ -0,0 +1,67 @@ +#!../../bin/linux-x86_64/EC-GN +#+====================================================================== +# $HeadURL: https://svnpub.codac.iter.org/codac/iter/codac/dev/units/m-epics-iter-templates/branches/codac-core-6.1/templates/genericBoot/ioc/st.cmd $ +# $Id: st.cmd 96475 2019-01-09 13:47:38Z sivecm $ +# +# Project : CODAC Core System +# +# Description : ITER ioc template EPICS start up file +# +# Author(s) : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2019 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== + +< envPaths +< envSystem +< envUser + +cd "${TOP}" + +############################################################################ +## Register all support components +############################################################################ + +dbLoadDatabase "dbd/EC-GN.dbd" +EC_GN_registerRecordDeviceDriver pdbbase + +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/sddPreDriverConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/userPreDriverConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/threadSchedulingConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/dbToLoad.cmd" +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/iocEC-GN-PCF0SYSM-preSaveRestore.cmd" + +############################################################################ +## IOC Logging +############################################################################ +iocLogInit +iocLogPrefix "${STY} : " + +############################################################################ +## IOC initialization +############################################################################ +cd "${TOP}/db" +iocInit + +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/iocEC-GN-PCF0SYSM-postSaveRestore.cmd" +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/sddSeqToLoad.cmd" +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/seqToLoad.cmd" +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/sddPostDriverConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/userPostDriverConf.cmd" + + +dbl > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbl" +dbla > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbla" +dbior > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbior" +dbhcr > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbhcr" + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/.svn/pristine/86/863510893564f7f055425ff8e56b023a4163fdd3.svn-base b/EC-GN-JA-PCF/.svn/pristine/86/863510893564f7f055425ff8e56b023a4163fdd3.svn-base new file mode 100644 index 0000000..7868875 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/86/863510893564f7f055425ff8e56b023a4163fdd3.svn-base @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/87/876a86edeafe4711e6474178e7f0bb448faf79d7.svn-base b/EC-GN-JA-PCF/.svn/pristine/87/876a86edeafe4711e6474178e7f0bb448faf79d7.svn-base new file mode 100644 index 0000000..988dfd2 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/87/876a86edeafe4711e6474178e7f0bb448faf79d7.svn-base @@ -0,0 +1,25 @@ +#====================================================================== +# Loading DBs +#====================================================================== +cd $(TOP)/db + + +#====================================================================== +# Loading Substitution Files +#====================================================================== +cd $(TOP)/iocBoot/$(IOC) + + +#====================================================================== +# PLC Communication Monitoring PVs DB Loading +#====================================================================== +cd $(EPICS_ROOT)/db + + +#====================================================================== +# IOC Monitor +#====================================================================== +cd $(EPICS_ROOT)/db +#dbLoadRecords("iocmon.db","CBS=EC-GN-SYSM, CTRLTYPE=À‰n‰ü~, IDX=0, IOCTYPE=CUB, PP=, PPPP=, NNNN=, TTT=") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/.svn/pristine/87/878a4270b568fd56cc070d9cbde0ad460b2699d5.svn-base b/EC-GN-JA-PCF/.svn/pristine/87/878a4270b568fd56cc070d9cbde0ad460b2699d5.svn-base new file mode 100644 index 0000000..07012f8 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/87/878a4270b568fd56cc070d9cbde0ad460b2699d5.svn-base @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/88/8817d5a0861ab1fbcff80feac46ed370cbac79fe.svn-base b/EC-GN-JA-PCF/.svn/pristine/88/8817d5a0861ab1fbcff80feac46ed370cbac79fe.svn-base new file mode 100644 index 0000000..22e34c3 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/88/8817d5a0861ab1fbcff80feac46ed370cbac79fe.svn-base @@ -0,0 +1,130 @@ +/** + * @file JATriangleWaveGAM.h + * @brief Header file for class JATriangleWaveGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JATriangleWaveGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JATRIANGLEWAVEGAM_H_ +#define GAMS_JATRIANGLEWAVEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM provides triangular waveform output within 1kHz thread. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *      +CCPSWaveformGAM = {
+ *           Class = JATriangleWaveGAM
+ *           InputSignals = {
+ *               Offset = {
+ *                   Alias = OFFSET
+ *                   DataSource = EPICSCAInput
+ *                   Type = float32
+ *               }
+ *               Frequency = {
+ *                   Alias = CCPS_OUTPUT_FREQ
+ *                   DataSource = EPICSCAInput
+ *                   Type = float32
+ *               }
+ *               Amplitude = {
+ *                   Alias = CCPS_OUTPUT_AMP
+ *                   DataSource = EPICSCAInput
+ *                   Type = float32
+ *               }
+ *               PLCCCPSON = {
+ *                   Alias = PLC_CCPSON
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+  *              READY = {
+ *                   Alias = PLC_READY
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               CCPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JATriangleWaveGAM : public MARTe::GAM { +public: + CLASS_REGISTER_DECLARATION() + + JATriangleWaveGAM(); + + virtual ~JATriangleWaveGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); +private: + // Input signal containing the frequency of the waveform. + MARTe::float32 *frequency; + + // Input signal containing the amplitude of the waveform. + MARTe::float32 *amplitude; + + // Input signal cantaining the offset of the waveform. + MARTe::float32 *offset; + + // Input signal containing CCPS_ON_REQUEST + //MARTe::uint32 *plcccpson; + + // Input signal condition CCPS_READY + //MARTe::uint32 *plcReady; + + // Input signal condition CCPS_STANDBY + MARTe::uint32 *plcStandby; + + MARTe::float32 *waveOutput; + + MARTe::float32 time; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JATRIANGLEWAVEGAM_H_ */ diff --git a/EC-GN-JA-PCF/.svn/pristine/88/88c87f05bce8accaad5ffb7de87990ca5432df98.svn-base b/EC-GN-JA-PCF/.svn/pristine/88/88c87f05bce8accaad5ffb7de87990ca5432df98.svn-base new file mode 100644 index 0000000..1a4216b --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/88/88c87f05bce8accaad5ffb7de87990ca5432df98.svn-base @@ -0,0 +1,36 @@ +//+====================================================================== +// $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-sdd-translator-parts/tags/CODAC-CORE-6.0.0/org.iter.codac.sdd.translators/src/main/resources/templates/sdn/topicvars.h.vm $ +// $Id: topicvars.h.vm 83098 2018-01-08 13:23:38Z cesnikt $ +// +// Project : CODAC Core System +// +// Description : SDN Program - Gyrotron02DAN +// +// Author : Kirti Mahajan, Lana Abadie and TCS (link with velocity and SDD model) +// +// Copyright (c) : 2010-2018 ITER Organization, +// CS 90 046 +// 13067 St. Paul-lez-Durance Cedex +// France +// +// This file is part of ITER CODAC software. +// For the terms and conditions of redistribution or use of this software +// refer to the file ITER-LICENSE.TXT located in the top level directory +// of the distribution package. +// +//-====================================================================== + +#ifndef TOPICVARS_H +#define TOPICVARS_H + +#include "includetopics.h" + +/* Declare variables for the topics on which application is publishing. */ +//+P===================================================================== +//-P===================================================================== + +/* Declare variables for the topics to which application is subscribing. */ +//+S===================================================================== +//-S===================================================================== + +#endif diff --git a/EC-GN-JA-PCF/.svn/pristine/89/89404842a9a99b8d182defcdf24697a3eb1147c5.svn-base b/EC-GN-JA-PCF/.svn/pristine/89/89404842a9a99b8d182defcdf24697a3eb1147c5.svn-base new file mode 100644 index 0000000..c141074 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/89/89404842a9a99b8d182defcdf24697a3eb1147c5.svn-base @@ -0,0 +1,2 @@ +./Main.sh -f ../Configurations/tests/EPICS_Test.cfg -l RealTimeLoader -m StateMachine:START + diff --git a/EC-GN-JA-PCF/.svn/pristine/8a/8af3ffb7c7b71295510bc6a903ca963a954b4f1e.svn-base b/EC-GN-JA-PCF/.svn/pristine/8a/8af3ffb7c7b71295510bc6a903ca963a954b4f1e.svn-base new file mode 100644 index 0000000..3be2fb2 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/8a/8af3ffb7c7b71295510bc6a903ca963a954b4f1e.svn-base @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/8a/8af5737f068bad44aaffa4a72d4bb473dd42ff49.svn-base b/EC-GN-JA-PCF/.svn/pristine/8a/8af5737f068bad44aaffa4a72d4bb473dd42ff49.svn-base new file mode 100644 index 0000000..6c9a40e --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/8a/8af5737f068bad44aaffa4a72d4bb473dd42ff49.svn-base @@ -0,0 +1,12 @@ +############################################################################ +## User provided PLC or fast controller driver pre configuration +############################################################################ + +# Enable parallel callback threads to improve 'I/O Intr' record scanning +# see https://bugzilla.iter.org/codac/show_bug.cgi?id=10413 +callbackParallelThreads + +callbackSetQueueSize(100000) +scanOnceSetQueueSize(100000) + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/.svn/pristine/8b/8b53da5e48dbd5bf7ad8f2e0e095e48da7f4442e.svn-base b/EC-GN-JA-PCF/.svn/pristine/8b/8b53da5e48dbd5bf7ad8f2e0e095e48da7f4442e.svn-base new file mode 100644 index 0000000..53595f8 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/8b/8b53da5e48dbd5bf7ad8f2e0e095e48da7f4442e.svn-base @@ -0,0 +1 @@ +Last SDD Generation: Tue May 13 14:02:23 UTC 2025 diff --git a/EC-GN-JA-PCF/.svn/pristine/8c/8cbd4f09a363ba841b5a7420c7f2953833bb8a94.svn-base b/EC-GN-JA-PCF/.svn/pristine/8c/8cbd4f09a363ba841b5a7420c7f2953833bb8a94.svn-base new file mode 100644 index 0000000..178d63c --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/8c/8cbd4f09a363ba841b5a7420c7f2953833bb8a94.svn-base @@ -0,0 +1,25 @@ +/* Main.cpp */ +/* Author: Marty Kraimer Date: 17MAR2000 */ + +#include +#include +#include +#include +#include +#include + +#include "epicsExit.h" +#include "epicsThread.h" +#include "iocsh.h" + +int main(int argc,char *argv[]) +{ + sigset(SIGTERM, epicsExit); + if(argc>=2) { + iocsh(argv[1]); + epicsThreadSleep(.2); + } + iocsh(NULL); + epicsExit(0); + return(0); +} diff --git a/EC-GN-JA-PCF/.svn/pristine/8c/8cc6904688eef8b35d37a4351569381cc7fe6807.svn-base b/EC-GN-JA-PCF/.svn/pristine/8c/8cc6904688eef8b35d37a4351569381cc7fe6807.svn-base new file mode 100644 index 0000000..49f62b1 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/8c/8cc6904688eef8b35d37a4351569381cc7fe6807.svn-base @@ -0,0 +1,141 @@ +/** + * @file NI6528.cpp + * @brief Source file for class NI6528 + * @date 01/03/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class NI6528 (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include +#include +#include +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "CompilerTypes.h" +#include "NI6528.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +NI6528::NI6528() : + MARTe::DataSourceI() { + using namespace MARTe; + previousValue = 0u; + value = 0u; + port = 0u; + boardFileDescriptor = 0; +} + +NI6528::~NI6528() { + using namespace MARTe; + (void) pxi6528_close_device(boardFileDescriptor); +} + +bool NI6528::SetConfiguredDatabase(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = (DataSourceI::SetConfiguredDatabase(data)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "DataSourceI::SetConfiguredDatabas() failed"); + } + if (ok) { + ok = (GetNumberOfSignals() == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetNumberOfSignals() != 1u"); + } + } + if (ok) { + ok = (GetSignalType(0u) == UnsignedInteger8Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetSignalType(0u) != UnsignedInteger8Bit"); + } + } + + return ok; +} + +bool NI6528::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = DataSourceI::Initialise(data); + if (ok) { + ok = data.Read("Port", port); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The Port shall be specified"); + } + } + if (ok) { + ok = data.Read("DeviceName", deviceName); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The DeviceName shall be specified"); + } + } + int32 ret = pxi6528_open_device(&boardFileDescriptor, deviceName.Buffer(), O_NONBLOCK); + ok = (ret == 0); + if (!ok) { + StreamString err = strerror(-ret); + REPORT_ERROR(ErrorManagement::FatalError, "Could not open device (%s) : %s", deviceName.Buffer(), err.Buffer()); + } + return ok; +} + +bool NI6528::Synchronise() { + using namespace MARTe; + if(previousValue != value){ + int32 ret = (pxi6528_write_port(boardFileDescriptor, port, value) > 0); + previousValue = value; + bool ok = (ret > -1); + if (!ok) { + StreamString err = strerror(-ret); + REPORT_ERROR(ErrorManagement::FatalError, "Could not write to device (%s) : %s", deviceName.Buffer(), err.Buffer()); + } + } + + return true; +} + +bool NI6528::AllocateMemory() { + return true; +} + +bool NI6528::GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress) { + signalAddress = &value; + return true; +} + +const MARTe::char8 *NI6528::GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction) { + using namespace MARTe; + return "MemoryMapSynchronisedOutputBroker"; +} + +bool NI6528::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + return true; +} + +CLASS_REGISTER(NI6528, "1.0") + diff --git a/EC-GN-JA-PCF/.svn/pristine/8d/8d0751151d2aceecb03307dd3eb27e2956a4c14c.svn-base b/EC-GN-JA-PCF/.svn/pristine/8d/8d0751151d2aceecb03307dd3eb27e2956a4c14c.svn-base new file mode 100644 index 0000000..06f975b --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/8d/8d0751151d2aceecb03307dd3eb27e2956a4c14c.svn-base @@ -0,0 +1,639 @@ +/****************************************************************************** + * $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp-sdn/main/c++/prog/prog.cpp.template $ + * $Id: prog.cpp.template 83098 2018-01-08 13:23:38Z cesnikt $ + * + * Project : CODAC Core System + * + * Description : GyrotronDAN program + * + * Author : codac-dev + * + * Copyright (c) : 2010-2018 ITER Organization, + * CS 90 046 + * 13067 St. Paul-lez-Durance Cedex + * France + * + * This file is part of ITER CODAC software. + * For the terms and conditions of redistribution or use of this software + * refer to the file ITER-LICENSE.TXT located in the top level directory + * of the distribution package. + ******************************************************************************/ + +/* header files */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +//#include +#define float32_t float32_t1 +#include +#undef float32_t + +#include +#include +#include +#include +#include +#include + +#include + +// global variables +static bool __terminate = false; +char pxie6368_0_ai_fd[] = "/dev/pxie-6368.1.ai"; // ai segment +char pxie6368_0_device[] = "/dev/pxie-6368.1"; // device descriptor + +typedef struct { + int daq_smpl_rate; + int daq_mode; + double daq_smpl_st_dly; + double daq_len; + double daq_pub_dly; +} daq_parameters; + +void signal_handler(int signal) { + log_info("Received signal '%d' to terminate", signal); + __terminate = true; +}; + +// DAN parameter reload function ------------------------------------------------ +int reload_daq_conf(int *aifd, int *ai_chan_fd, daq_parameters *daq_p) { + std::cout << "reload_daq_conf was called \n"; + + // Common variables + int retval; + unsigned long number_of_samples; + int chan_num = 10; // Channel number to add. + uint32_t sample_period_divisor; + uint32_t base_clock = 100000000; // TB3:100MHz, TB2:100 kHz + uint32_t pre_samples = 1000; + uint32_t post_samples = 1000; + char str[40]; + xseries_ai_conf_t conf; // ai segment configuraton data + + // calculate sampling period divisor + if (daq_p->daq_smpl_rate != 0) { + sample_period_divisor = base_clock / daq_p->daq_smpl_rate; + } else { + return 0; + } + + // Stop ai segment---------------------------------------------------------------------- + retval = xseries_stop_ai(*aifd); + if (retval) { + log_error("ai segment stop failed.\n"); + } else { + log_info("ai segment stopped.\n"); + } + + // reset ai segment--------------------------------------------------------------------- + retval = xseries_reset_ai(*aifd); + if (retval) { + log_error("ai segment reset failed.\n"); + return -1; + } + + // Configure AI segment mode ------------------------------------------------------------ + switch (daq_p->daq_mode) { + case 0: + conf = xseries_software_timed_ai(); + log_info("software_timed mode.\n"); + break; + case 1: + conf = xseries_finite_ai(number_of_samples); + log_info("finite mode.\n"); + break; + case 2: + conf = xseries_retriggerable_finite_ai(number_of_samples); + log_info("retriggerable_finite mode.\n"); + break; + case 3: + conf = xseries_continuous_ai(); + log_info("continuous mode.\n"); + break; + case 4: + conf = xseries_reference_ai(pre_samples, post_samples); + log_info("reference mode.\n"); + break; + } + + // disable external gate + retval = xseries_set_ai_external_gate(&conf, + XSERIES_AI_EXTERNAL_GATE_DISABLED, // No external pause signal + XSERIES_AI_POLARITY_ACTIVE_LOW_OR_FALLING_EDGE); // Don't care + if (retval) { + log_error("Cannot set gate trigger.\n"); + return -1; + } + + // select start trigger (START1 signal) + retval = xseries_set_ai_start_trigger(&conf, + XSERIES_AI_START_TRIGGER_SW_PULSE, // Set the line to software-driven + XSERIES_AI_POLARITY_ACTIVE_HIGH_OR_RISING_EDGE, // Make line active on rising... + 1); // ... edge (not high level) + if (retval) { + log_error("Cannot set start trigger.\n"); + return -1; + } + + // set sampling clock source---------------------------------------------------------------------------------------- + retval = xseries_set_ai_sample_clock(&conf, + XSERIES_AI_SAMPLE_CONVERT_CLOCK_INTERNALTIMING, + XSERIES_AI_POLARITY_ACTIVE_HIGH_OR_RISING_EDGE, 1); + if (retval) { + log_error("Cannot configure sampling clock.\n"); + return -1; + } + + // set scan interval ------------------------------------------------------------------------------------------------------------------------- + retval = xseries_set_ai_scan_interval_counter(&conf, + XSERIES_SCAN_INTERVAL_COUNTER_TB3, // TB3 : 100MHz base clock, TB2 : 100kHz base clock + XSERIES_SCAN_INTERVAL_COUNTER_POLARITY_RISING_EDGE, + sample_period_divisor, 2); // Wait 2*100MHz sec after sampling trig. + if (retval) { + log_error("Cannot configure scan counter.\n"); + return -1; + } + + // Set DMA buffer size----------------------------------------------------------------------------------------------------------------------- + retval = xseries_set_ai_attribute(&conf, XSERIES_AI_DMA_BUFFER_SIZE, 1000); + if (retval) { + log_error("DMA configuration was failed.\n"); + return -1; + } + + // Add AI channels --------------------------------------------------------------------------------------------------------------------------- + for (int i = 0; i < chan_num; i++) { + retval = xseries_add_ai_channel(&conf, i, XSERIES_INPUT_RANGE_10V, + XSERIES_AI_CHANNEL_TYPE_DIFFERENTIAL, 0); + if (retval) { + log_error("Add AI channel %d was failed.\n", i); + return -1; + } + } + sleep(3); + + // Load configuration.----------------------------------------------------------------------------------------------------------------------- + retval = xseries_load_ai_conf(*aifd, conf); + if (retval) { + log_error("xseries_load_ai_conf was failed. error code: %d \n", retval); + exit (EXIT_FAILURE); + } + sleep(3); + + // Open channels-------------------------------------------------------------------------------------------------------------------------------- + for (int i = 0; i < chan_num; i++) { + sprintf(str, "%s.ai.%u", pxie6368_0_device, i); + //ai_chan_fd[i] = open(str, O_RDWR | O_NONBLOCK); + ai_chan_fd[i] = open(str, O_RDWR); + if (ai_chan_fd[i] < 0) { + log_error("Cannot open ai channel %d .\n",i); + sleep(1); + exit (EXIT_FAILURE); + } + } + + // start ai segment task----------------------------------------------------------------------------------------------------------------------- + retval = xseries_start_ai(*aifd); + if (retval) { + log_error("ERROR, starting AI segment failed: %s\n", strerror(retval)); + exit (EXIT_FAILURE); + } + + log_info("PXIe-6368 configuration was finished.\n"); + return 0; +}; + + + +int main(int argc, char **argv) { + using namespace std; + unsigned long n_sample_quotient = 0; + + log_initialize(NULL); + + while (!__terminate) { + // Install signal handler to support graceful termination + sigset(SIGTERM, signal_handler); + sigset(SIGINT, signal_handler); + sigset(SIGHUP, signal_handler); + + // ---------------------------------------------------------------------------------------------------------------- + // Running parameter declaration + // ---------------------------------------------------------------------------------------------------------------- + // pxie6368 hardware parameters + int pxie6368_0_device_number = 1; // device discriptor number + int aifd = 0; // ai segment file discriptor + xseries_ai_conf_t conf; // ai segment config + xseries_ai_attribute_t aiatrb; // ai segment attributes + char str[40]; // fd tmp var + int ai_chan_fd[16]; // ai channels file discriptor + int pxie6368_sampling_rate = 1000; // sampling rate Hz + uint32_t sample_period_divisor = 100000000 / pxie6368_sampling_rate; // TB3 100MHz, TB2:100kHz, TB1:20MHz + int sampleSize = 2; // Sample size in bytes <---> uInt16 + int n_channels; // Number of opened channels + struct xseries_dma *dma; // Ptr to dma struct + int chan_num = 10; // Channel number to add. + + // DAN parameters + char dan_source_name[] = "GYBDanSource"; // DAN data source (ds) name + long offset_ai = 0; // offset size in published data + int dma_mode = 1; // 0:All, 1:AI only, 2:AO only + dan_DataCore dc = NULL; // Datacore reference declaration + dan_Source ds = NULL; // DAN source declaration + long samplesCounter = 0; // Total acquired sample size + size_t n_samples; // prepared sample size to publish + + // TCN parameters + uint64_t tBase_old = 0; + uint64_t tBase = 0; // TCN publishing base time + uint64_t nanos; // time length for sampling + hpn_timestamp_t delay = 1e7; // wait for publishing (10ms) + char buf[ISO_8601_LEN]; + uint64_t tBase0 = 0; + + // Operation tmp parameter + int result; // For result values. + int exValue; + bool toterminate = false; + int retval; + bool daq_start = false; + int testcounter = 10000; + + // Connected EPCIS PV + + // DAQ config PVs + chid daq_smpl_rate_id; + chtype daq_smpl_rate_type; + int daq_smpl_rate; + chid daq_smpl_rate_rb_id; + chtype daq_smpl_rate_rb_type; + int daq_smpl_rate_rb; + chid daq_mode_id; + chtype daq_mode_type; + int daq_mode; + chid daq_mode_rb_id; + chtype daq_mode_rb_type; + int daq_mode_rb; + chid daq_sw_trig_id; + chtype daq_sw_trig_type; + int daq_sw_trig; + chid daq_smpl_st_dly_id; + chtype daq_smpl_st_dly_type; + double daq_smpl_st_dly; + chid daq_smpl_st_dly_rb_id; + chtype daq_smpl_st_dly_rb_type; + double daq_smpl_st_dly_rb; + chid daq_len_id; + chtype daq_len_type; + double daq_len; + chid daq_len_rb_id; + chtype daq_len_rb_type; + double daq_len_rb; + chid daq_reconf_id; + chtype daq_reconf_type; + int daq_reconf; + chid daq_pub_dly_id; + chtype daq_pub_dly_type; + double daq_pub_dly; + chid daq_pub_dly_rb_id; + chtype daq_pub_dly_rb_type; + double daq_pub_dly_rb; + + chid daq_stat_id; + chtype daq_stat_type; + int daq_stat; + chid daq_conf_stat_id; + chtype daq_conf_stat_type; + int daq_conf_stat; + + daq_parameters daq_p = { 0 }; // = {daq_smpl_rate, daq_smpl_rate_rb, daq_mode, daq_mode_rb}; + + // ---------------------------------------------------------------------------------------------------------------------------------------------- + // EPICS PV connection + // ---------------------------------------------------------------------------------------------------------------------------------------------- + //Initialize ChannelAccess interface + CAInterface_Initialize(); + + // Connect to EPICS PVs + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE", daq_smpl_rate_id); + daq_smpl_rate_type = DBR_LONG; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE-RB", daq_smpl_rate_rb_id); + daq_smpl_rate_rb_type = DBR_LONG; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-MODE", daq_mode_id); + daq_mode_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-MODE-RB", daq_mode_rb_id); + daq_mode_rb_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-SW-TRIG", daq_sw_trig_id); + daq_sw_trig_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-SMPL-ST-DLY", daq_smpl_st_dly_id); + daq_smpl_st_dly_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-SMPL-ST-DLY-RB", daq_smpl_st_dly_rb_id); + daq_smpl_st_dly_rb_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-LEN", daq_len_id); + daq_len_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-LEN-RB", daq_len_rb_id); + daq_len_rb_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-RECONF", daq_reconf_id); + daq_reconf_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-PUB-DLY", daq_pub_dly_id); + daq_pub_dly_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-PUB-DLY-RB", daq_pub_dly_rb_id); + daq_pub_dly_rb_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-STAT", daq_stat_id); + daq_stat_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-CONF-STAT", daq_conf_stat_id); + daq_conf_stat_type = DBR_ENUM; + + tcn_sleep(3e9);// Wait for a while. + + // ---------------------------------------------------------------------------------------------------------------- + // Initialize tcn library + // ---------------------------------------------------------------------------------------------------------------- + int tcn_err; + tcn_err = tcn_init(); + if (tcn_err != TCN_SUCCESS) { + log_error("TCN Initialization failed.\n"); + exValue = 1; + goto END; + } + + // ---------------------------------------------------------------------------------------------------------------- + // pxie-6368 settings + // ---------------------------------------------------------------------------------------------------------------- + // Open ai segment---------------------------------------------------------------------- + aifd = open(pxie6368_0_ai_fd, O_RDWR); + if (aifd <= 0) { + log_error("Open PXIe6368 AI fd failed.\n"); + exValue = -1; + goto END; + } + + // wait ai segment setup start + do { + CAInterface_ReadVariable(daq_reconf_id, daq_reconf_type, (void*) &daq_reconf); + } while (!daq_reconf and !__terminate); + + // read parameter + result = CAInterface_ReadVariable(daq_smpl_rate_id, daq_smpl_rate_type, (void *) &daq_p.daq_smpl_rate); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_mode_id, daq_mode_type, (void *) &daq_p.daq_mode); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_smpl_st_dly_id, daq_smpl_st_dly_type, (void *) &daq_p.daq_smpl_st_dly); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_len_id, daq_len_type, (void *) &daq_p.daq_len); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_pub_dly_id, daq_pub_dly_type, (void *) &daq_p.daq_pub_dly); + if (!result) { + log_error("CA_READ failed.\n"); + } + + std::cout << "SAMPLE RATE:" << daq_p.daq_smpl_rate << endl; + std::cout << "MODE :" << daq_p.daq_mode << endl; + std::cout << "START DELAY:" <ai.count * sampleSize, 4096); + + //dan_DataCore, ds_name, devName, enum_daq_type refType, long refSize, long refOffset + if (ds == NULL) { + log_error("Error while publishing DAN source %s ", dan_source_name); + exValue = 1; + goto END; + } + + n_channels = dan_publisher_getNumberOfChannels(ds); + + // ------------------------------------------------------------------------------------------------------------------ + // ----- DAN Streamer. + // ------------------------------------------------------------------------------------------------------------------ + // ----- Open a new stream --------------------------------------------------------------------- + dan_publisher_openStream(ds, daq_p.daq_smpl_rate, 0); + sleep(1); + + // ------------------------------------------------------------------------------------------------------------------ + // ----- Main DAN Loop. + // ------------------------------------------------------------------------------------------------------------------ + while (!__terminate) { + // Wait for the master trigger.---------------------------------------------------------------------------- + daq_stat = 1; //0:Not Ready, 1: Waiting trigger, 2:Acquiring 3:Error + CAInterface_WriteVariable(daq_stat_id, daq_stat_type, &daq_stat); + daq_conf_stat = 1; //0:Not ready, 1: Ready + CAInterface_WriteVariable(daq_conf_stat_id, daq_conf_stat_type, &daq_conf_stat); + + // Wait DAQ Start Software Trigger. + do { + // check daq_sw_trigger to start DAQ sequence. + CAInterface_ReadVariable(daq_sw_trig_id, daq_sw_trig_type, (void*) &daq_sw_trig); + tcn_sleep(1e7); // wait 0.01 s + if (daq_sw_trig) { + daq_start = true; + } + } while (daq_start != true and !__terminate); + + daq_start = false; //reset daq_start flag. + delay = (long) (1e6 * daq_p.daq_pub_dly); //check publish period. + + // Wait a time to start DAQ. ---------------------------------------------------------------------------------------------------------------------- + tcn_sleep(daq_p.daq_smpl_st_dly * 1e6); // in ms + + // After the wating, trigger DAQ ------------------------------------------------------------------------------------------------------------------ + retval = xseries_pulse_ai(aifd, XSERIES_START_TRIGGER); + daq_stat = 2; + CAInterface_WriteVariable(daq_stat_id, daq_stat_type, &daq_stat); + if (retval) { + std::cout << "Cannot generate start trigger!\n"; + goto END; + } else { + tcn_get_time(&tBase); // get DAQ start time. + tBase0 = tBase; // save DAQ start time to tBase0; + tBase_old = tBase; + } + + // DAQ Publish Loop. ---------------------------------------------------------------------------------------------------------------------------- + // DAN data publish is executed every delay time interval. + while (!__terminate && (tcn_wait_until_hr((tBase + delay), &tBase, 0) == TCN_SUCCESS)) { + // Get the number of available samples in PXIe6368 buffer. + n_samples = xsereis_ai_dma_samples_in_buffer(dma); // samples + + if (n_samples > dma->ai.count) { + //log_error("DMA Buffer overflow: Number of new samples in buffer = %ld, AI buffer size = %ld,\n", n_samples, dma->ai.count); + } else if (n_samples > 0) { + //log_info("Current Time:\n%s\n", tcn_strftime(tBase, buf, ISO_8601_LEN)); + if (tBase == 0) { + // "tBase was reset.------------------------------------------------------\n"; + tcn_get_time(&tBase); + tBase -= n_samples * 100000000 / pxie6368_sampling_rate; + nanos = 0; + } else { + // update time offset value. + nanos = n_samples * 100000000 / daq_p.daq_smpl_rate; + } + n_sample_quotient = floor(n_samples / chan_num); + n_samples = n_sample_quotient * chan_num; + + // Publish a new data block -------------------------------------------------------------------------------------------------------------------------- + result = dan_publisher_putBlockReference(ds, + tBase_old + nanos, // timestamp in epoch nanoseconds + n_samples * sampleSize, // datablock size in bytes + offset_ai * sampleSize, // Offset in DAQ buffer + NULL); // No datablock header.... + // Detected overflow in pass datablock reference queue + if (result == -1) { + log_info("%s, Queue overflow with policy %d\n", dan_source_name, dan_publisher_getCheckPolicy(ds)); + } else if (result == -2) { + log_info("%s, DAQ buffer overflow with policy %d\n", dan_source_name, dan_publisher_getCheckPolicy(ds)); + } + } + + samplesCounter += n_samples; // Increment total of published sampes + offset_ai = (offset_ai + n_samples) % dma->ai.count; // Update offset of memory + dma->ai.last_transfer_count = samplesCounter; // Update dma last_transfer_count + + // Check exit condition. + if ((daq_p.daq_len * 1e6 <= (tBase - tBase0))) { + retval = xseries_stop_ai(aifd); + if (retval) { + std::cout << "Stop AI segment failed.\n"; + exit (EXIT_FAILURE); + } + + //restart ai segment. + tcn_sleep(1e9); // wait + retval = xseries_start_ai(aifd); + if (retval) { + std::cout << "Start AI segment failed.\n"; + exit (EXIT_FAILURE); + } + //debug + tcn_sleep(1e8); + n_samples = xsereis_ai_dma_samples_in_buffer(dma); + cout << "n_samples check : " << n_samples << endl; + break; + } + tBase_old = tBase; + } // End of DAQ publish loop. + break; + } // End of DAN main loop. + + // ------------------------------------------------------------------------------------------------------------------ + // ----- Closing program. + // ------------------------------------------------------------------------------------------------------------------ + log_info("DAN end of acquisition, closing all resources"); + + //Closing stream + dan_publisher_closeStream(ds); + exValue = 0; + + // Close all channels + for (int channel = 0; channel < chan_num; channel++) { + close(ai_chan_fd[channel]); + } + goto END; + + END: daq_conf_stat = 0; + CAInterface_WriteVariable(daq_conf_stat_id, daq_conf_stat_type, &daq_conf_stat); + daq_stat = 0; + CAInterface_WriteVariable(daq_stat_id, daq_stat_type, &daq_stat); + // Destroy CA context + CAInterface_Finalize(); + // Close pxie6368 + if (dma != NULL) { + xseries_dma_close(dma); + cout << "pxie-6368 dma was clesed.\n"; + } + + close(aifd); + + // Unpublishing source from DAN API + if (ds != NULL) { + dan_publisher_unpublishSource(dc, ds); + } + + // Closing DAN API library + if (dc != NULL) { + dan_closeLibrary(dc); + } + + // Closing TCN library + result = tcn_finalize(); + if (result != TCN_SUCCESS) { + //log_error("Error finalizing TCN lib.\n"); + } + + } // loop end from initialization + return (0); + +} diff --git a/EC-GN-JA-PCF/.svn/pristine/8d/8d41ae78ac5775598b5912322a7b04c0d83c7569.svn-base b/EC-GN-JA-PCF/.svn/pristine/8d/8d41ae78ac5775598b5912322a7b04c0d83c7569.svn-base new file mode 100644 index 0000000..6aee723 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/8d/8d41ae78ac5775598b5912322a7b04c0d83c7569.svn-base @@ -0,0 +1,424 @@ +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START") +{ + field(DESC, "Auto rampup start command") + field(HIGH, "0.1") + field(ONAM, "Start") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Stop") +} + +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-LOC") +{ + field(DESC, "Local control ON") + field(DTYP, "stream") + field(ONAM, "LOC") + field(OUT, "@PCR500LE.proto setLoc FHPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB") +{ + field(DESC, "Output ON readback") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto getOut FHPS1") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-OUTON-SP") +{ + field(DESC, "Output ON command") + field(DTYP, "stream") + field(ONAM, "REM") + field(OUT, "@PCR500LE.proto setOut FHPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-REM") +{ + field(DESC, "Remote control on") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PCR500LE.proto setRem FHPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-RST") +{ + field(DESC, "Reset command") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PCR500LE.proto resetDevice FHPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-RB") +{ + field(DESC, "External control readback") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto getSourceON FHPS1") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-SP") +{ + field(DESC, "External control ON command") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PCR500LE.proto setSourceON FHPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP") +{ + field(DESC, "GY1 FHPS rampup comp") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 FHPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:STAT-SIMM") +{ + field(DESC, "GY1 FHPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-ACV-RB") +{ + field(DESC, "Output Voltage readback") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(INP, "@PCR500LE.proto getVolt FHPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-ACV-SP") +{ + field(DESC, "Output voltage setpoint") + field(DRVH, "300") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(LOPR, "0") + field(OUT, "@PCR500LE.proto setVolt FHPS1") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-AUTO-RU-TIME") +{ + field(DESC, "Auto rampup time") + field(DRVH, "100000") + field(DRVL, "10") + field(EGU, "sec") + field(HOPR, "100000") + field(LOPR, "10") + field(PINI, "NO") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "30") +} + +record (mbbo,"EC-GN-P01-GAF-FHPS:PSU2610-AUTO-STAT") +{ + field(DESC, "Auto rampup status") + field(ONST, "IN OPERATION") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(THST, "ERROR") + field(THVL, "3") + field(TWST, "FINISH") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "NOT IN OPERATION") + field(ZRVL, "0") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV") +{ + field(DESC, "Auto rampup target voltage") + field(DRVH, "60") + field(DRVL, "0.0") + field(EGU, "V") + field(HOPR, "60.0") + field(LOPR, "0.0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(VAL, "5") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-CURR-RB") +{ + field(DESC, "Output Current readback") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "5") + field(INP, "@PCR500LE.proto getCurr FHPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-CURR-SP") +{ + field(DESC, "Output current setpoint") + field(DRVH, "5.0") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "5.0") + field(LOPR, "0") + field(OUT, "@PCR500LE.proto setCurr FHPS1") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-EREF") +{ + field(DESC, "GY1 FHPS voltage setpoint") + field(DRVH, "150") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "150") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-EREF-MSP") +{ + field(DESC, "GY1 FHPS voltage manual setpoint") + field(DRVH, "150") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "150") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (stringin,"EC-GN-P01-GAF-FHPS:PSU2610-ERROR") +{ + field(DESC, "Error code") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto getError FHPS1") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-FRQ-RB") +{ + field(DESC, "Output frequency readback") + field(DTYP, "stream") + field(EGU, "Hz") + field(HOPR, "1000") + field(INP, "@PCR500LE.proto getFreq FHPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-FRQ-SP") +{ + field(DESC, "Output frequency setpoint") + field(DRVH, "999.9") + field(DRVL, "1") + field(DTYP, "stream") + field(EGU, "Hz") + field(HOPR, "1000") + field(LOPR, "0") + field(OUT, "@PCR500LE.proto setFreq FHPS1") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "1") +} + +record (stringin,"EC-GN-P01-GAF-FHPS:PSU2610-IDN") +{ + field(DESC, "IDN") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto readDeviceID FHPS1") + field(PINI, "NO") + field(SCAN, "10 second") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACI") +{ + field(DESC, "Measued AC Current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "5.0") + field(INP, "@PCR500LE.proto getMeasACI FHPS1") + field(LOPR, "-5.0") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACP") +{ + field(DESC, "Measued AC Power") + field(DTYP, "stream") + field(EGU, "W") + field(HOPR, "500") + field(INP, "@PCR500LE.proto getMeasACP FHPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV") +{ + field(DESC, "Measued AC Voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(INP, "@PCR500LE.proto getMeasACV FHPS1") + field(LOPR, "-300") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-MEAS-FRQ") +{ + field(DESC, "Measued Frequency") + field(DTYP, "stream") + field(EGU, "Hz") + field(HOPR, "1000") + field(INP, "@PCR500LE.proto getMeasACF FHPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "1") +} + +record (calcout,"EC-GN-P01-GAF-FHPS:STAT-AUTO-MODE-SET") +{ + field(CALC, "A==1?0:1") + field(DESC, "GYA FHPS rampup comp off") + field(INPA, "EC-GN-P01-GAF:STAT-SM") + field(OOPT, "Transition To Zero") + field(OUT, "EC-GN-P01-GAF-FHPS:STAT-MANM PP") + field(SCAN, "1 second") +} + +record (waveform,"EC-GN-P01-GAF-FHPS:STAT-PREP-WF") +{ + field(DESC, "GY1 FHPS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CALC") +{ + field(CALC, "A==2?1:0") + field(DESC, "GYA FHPS rampup comp check") + field(INPA, "EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CMP") + field(OOPT, "When Non-zero") + field(OUT, "EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP PP") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CMP") +{ + field(CALC, "(ABS(A-B)<0.1*B)?2:((C > D)?1:0);D:=C") + field(DESC, "GYA FHPS rampup stat check") + field(FLNK, "EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CALC") + field(INPA, "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV") + field(INPB, "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV") + field(INPC, "EC-GN-P01-GAF-FHPS:PSU2610-EREF") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GAF-FHPS:STAT-RAMPUP-OFF") +{ + field(CALC, "A==0?0:1") + field(DESC, "GYA FHPS rampup comp off") + field(INPA, "EC-GN-P01-GPS:PLC4110-YTS-ST1R") + field(OOPT, "When Zero") + field(OUT, "EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP PP") + field(SCAN, "1 second") +} + diff --git a/EC-GN-JA-PCF/.svn/pristine/8e/8ebfbb941a921b6e727cdd7071b60096b4585e57.svn-base b/EC-GN-JA-PCF/.svn/pristine/8e/8ebfbb941a921b6e727cdd7071b60096b4585e57.svn-base new file mode 100644 index 0000000..72089d8 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/8e/8ebfbb941a921b6e727cdd7071b60096b4585e57.svn-base @@ -0,0 +1,38 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +def test_ready(): + """In the WaitReady state, simulate READY signal from PLC.""" + print '---------- WatiReady test ----------' + print '1. Simulate READY signal. State should go to WaitPermit state.' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST2R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST2R 1', shell=True) + print '2. Set CCPS trianguler waveform parameters(1V, 1Hz)' + res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-AMP 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-FREQ 1', shell=True) #Hz + res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-AMP 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-FREQ 1', shell=True) #Hz + time.sleep(1) + print '3. load csv file.' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-CSV-NAME test.csv', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-CSV-LOAD 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-CSV-NAME test2.csv', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-CSV-LOAD 1', shell=True) + time.sleep(1) + print '4. Simulate CCPS_ON_REQUEST signal' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS1.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS1 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS2.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS2 1', shell=True) + time.sleep(1) + print '5. Confirm CCPS_ON flag and triangular waveform generation.' + print '6. Simulate CCPS status PVs.' + res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-OP-V-DIFF.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-CCPS:PSU2320-TR 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-OP-V-DIFF.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-CCPS:PSU2320-TR 1', shell=True) + print '7. Confirm PCF state changes to WaitPermit state.' + diff --git a/EC-GN-JA-PCF/.svn/pristine/90/90c6b4911cdf61a3a290499d924bdf9187062bb0.svn-base b/EC-GN-JA-PCF/.svn/pristine/90/90c6b4911cdf61a3a290499d924bdf9187062bb0.svn-base new file mode 100644 index 0000000..c942204 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/90/90c6b4911cdf61a3a290499d924bdf9187062bb0.svn-base @@ -0,0 +1,41 @@ +-100,0,0,0,0,0 +-90,1,1,1,1,1 +-80,2,2,2,2,2 +-70,3,3,3,3,3 +-60,4,4,4,4,4 +-50,5,5,5,5,5 +-40,6,6,6,6,6 +-30,7,7,7,7,7 +-20,8,8,8,8,8 +-10,9,9,9,9,9 +0,10,10,10,10,10 +10,9,9,9,9,9 +20,8,8,8,8,8 +30,7,7,7,7,7 +40,6,6,6,6,6 +50,5,5,5,5,5 +60,4,4,4,4,4 +70,3,3,3,3,3 +80,2,2,2,2,2 +90,1,1,1,1,1 +100,0,0,0,0,0 +110,1,1,1,1,1 +120,2,2,2,2,2 +130,3,3,3,3,3 +140,4,4,4,4,4 +150,5,5,5,5,5 +160,6,6,6,6,6 +170,7,7,7,7,7 +180,8,8,8,8,8 +190,9,9,9,9,9 +200,10,10,10,10,10 +210,9,9,9,9,9 +220,8,8,8,8,8 +230,7,7,7,7,7 +240,6,6,6,6,6 +250,5,5,5,5,5 +260,4,4,4,4,4 +270,3,3,3,3,3 +280,2,2,2,2,2 +290,1,1,1,1,1 +300,0,0,0,0,0 diff --git a/EC-GN-JA-PCF/.svn/pristine/91/913fef48b21bbf86519fc9efb324e75bc11bd6fc.svn-base b/EC-GN-JA-PCF/.svn/pristine/91/913fef48b21bbf86519fc9efb324e75bc11bd6fc.svn-base new file mode 100644 index 0000000..3799297 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/91/913fef48b21bbf86519fc9efb324e75bc11bd6fc.svn-base @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/91/91be254585d5fe85af5832474bd40f96dafcf261.svn-base b/EC-GN-JA-PCF/.svn/pristine/91/91be254585d5fe85af5832474bd40f96dafcf261.svn-base new file mode 100644 index 0000000..9254309 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/91/91be254585d5fe85af5832474bd40f96dafcf261.svn-base @@ -0,0 +1,8 @@ +TOP=.. + +include $(TOP)/configure/CONFIG + +TARGETS = $(CONFIG_TARGETS) +CONFIGS += $(subst ../,,$(wildcard $(CONFIG_INSTALLS))) + +include $(TOP)/configure/RULES diff --git a/EC-GN-JA-PCF/.svn/pristine/91/91d99695ab6991a44e28b917406e8b3c083f9799.svn-base b/EC-GN-JA-PCF/.svn/pristine/91/91d99695ab6991a44e28b917406e8b3c083f9799.svn-base new file mode 100644 index 0000000..a127b25 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/91/91d99695ab6991a44e28b917406e8b3c083f9799.svn-base @@ -0,0 +1,27 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import ColorFontUtil + + +table = widget.getTable() +nbColPVs = 3 +#find index of the trigger PV +i = 0 +while triggerPV != pvs[i]: + i += 1 + + +table.setCellText(i / nbColPVs, i % nbColPVs + 3, PVUtil.getString(triggerPV)) + +s = PVUtil.getSeverity(triggerPV) + +color = ColorFontUtil.WHITE +if s == 0: + color = ColorFontUtil.GREEN +elif s == 1: + color = ColorFontUtil.RED +elif s == 2: + color = ColorFontUtil.YELLOW +elif s == 3: + color = ColorFontUtil.PINK + +table.setCellBackground(i / nbColPVs, i % nbColPVs + 3, color) \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/93/936ed27125b958e3464efd824c6501f2117f1c30.svn-base b/EC-GN-JA-PCF/.svn/pristine/93/936ed27125b958e3464efd824c6501f2117f1c30.svn-base new file mode 100644 index 0000000..56f9b18 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/93/936ed27125b958e3464efd824c6501f2117f1c30.svn-base @@ -0,0 +1,411 @@ +/** + * @file JARTStateMachineGAM.cpp + * @brief Source file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JARTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +static MARTe::uint64 getCurrentTimeUs() { + using namespace MARTe; + return static_cast(HighResolutionTimer::Counter() * HighResolutionTimer::Period() * 1e6f + 0.5f); +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARTStateMachineGAM::JARTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + turn_off_delay = 2000; //us + + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + short_pulse_mode = NULL_PTR(MARTe::uint32 *); + + modulation = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + + apsSwonHighResolutionTime = 0; + + aps_hvon_state=0; + aps_swon_state=0; + mhvps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; +} + +JARTStateMachineGAM::~JARTStateMachineGAM() { +} + +bool JARTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JARTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JARTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 12u); + if (ok) { + ok = (numberOfOutputSignals == 16u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined %d",numberOfOutputSignals); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(10)); + modulation = reinterpret_cast(GetInputSignalMemory(11)); + + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + + outputAPSHVON = reinterpret_cast(GetOutputSignalMemory(8)); + outputAPSSWON = reinterpret_cast(GetOutputSignalMemory(9)); + outputBPSHVON = reinterpret_cast(GetOutputSignalMemory(10)); + outputBPSSWON = reinterpret_cast(GetOutputSignalMemory(11)); + outputMHVPSON = reinterpret_cast(GetOutputSignalMemory(12)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(13)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(14)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(15)); + + *shotCounter = 0; + } + return ok; +} + +bool JARTStateMachineGAM::Execute() { + using namespace MARTe; + + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + //REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence at %d.", *currentTime); + plcOnTime = *currentTime; //Save pulse start time. + //*outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS; + } + } + else if (currentState == SwitchingHVPS) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; bps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + *outputBPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; aps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal at %d.", *currentTime); + *outputAPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; bps_swon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + *outputBPSSWON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; mhvps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + *outputMHVPSON=1; + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (plcOnTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; aps_swon_state=1; + apsSwonHighResolutionTime = getCurrentTimeUs(); + apsSwonTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + *outputAPSSWON=1; + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 1; + } + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 1; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *outputBeamON = 1; + *shotCounter += 1; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //Action in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + //debug + //if((*stopRequest != 0)){ + //REPORT_ERROR(ErrorManagement::Debug, "Stop request was called.!!!"); + //} else { + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset.!!!"); + //} + *outputSignal -= aps_swon; + mhvps_hvon_is_on = false; mhvps_hvon_state=0; + aps_hvon_is_on = false; aps_hvon_state=0; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; bps_hvon_state=0; + bps_swon_is_on = false; bps_swon_state=0; + currentState = HVTerminate; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + } + uint32 updatePeriod = 100; // in microsecnds (get this from Timer) + if ((*modePulseLengthLimit == 1u) || (getCurrentTimeUs() + updatePeriod >= (apsSwonHighResolutionTime + *triggerDelay_shotlen))) { + + // Now we do busy wait + while (getCurrentTimeUs() < (apsSwonHighResolutionTime + *triggerDelay_shotlen)) { + //REPORT_ERROR(ErrorManagement::Debug, "!"); + } + // We stop busy waiting #executionOverhead before expected pulse off time + //debug + //if((*modePulseLengthLimit == 1u)){ + // REPORT_ERROR(ErrorManagement::Debug, "Mode limit detected.!!!"); + //} else { + // REPORT_ERROR(ErrorManagement::Debug, "Shot length reached to the setpoint.!!!"); + //} + //debug end. + //Do action + *outputSignal -= aps_swon; //Turn off only APS_SWON first. + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; + bps_swon_is_on = false; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + //REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 1; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + //In the HVTerminate state, turn APS_SWON off first, and wait 1ms. Finally turn other PS off. + //Action in this state. + *outputBeamON = 0; + *outputHVArmed = 0; + *outputHVInjection = 0; + *outputRFON = 0; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + mhvps_hvon_state=0; + aps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset. The State was changed to WaitTrigger at %d.", *currentTime); + } + } + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6259 = 1*aps_swon_state; + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + if (modulation) { + p4Value = 8*mhvps_hvon_state + 32; + } + else { + p4Value = 8*mhvps_hvon_state; + } + //*outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + *outputSignalNI6528P4 = ~p4Value; + return true; +} + +CLASS_REGISTER(JARTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF/.svn/pristine/94/9436185f1abe8cdcd064bf0c0bb418d78b769586.svn-base b/EC-GN-JA-PCF/.svn/pristine/94/9436185f1abe8cdcd064bf0c0bb418d78b769586.svn-base new file mode 100644 index 0000000..2b1cfbe --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/94/9436185f1abe8cdcd064bf0c0bb418d78b769586.svn-base @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/94/945399a0a40b0724212b241cefe50d3637e3bed3.svn-base b/EC-GN-JA-PCF/.svn/pristine/94/945399a0a40b0724212b241cefe50d3637e3bed3.svn-base new file mode 100644 index 0000000..31d6c69 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/94/945399a0a40b0724212b241cefe50d3637e3bed3.svn-base @@ -0,0 +1 @@ +Last SDD Generation: Tue May 13 13:52:12 UTC 2025 diff --git a/EC-GN-JA-PCF/.svn/pristine/96/969867ecd2546715cbe8ce904621acd7cb454299.svn-base b/EC-GN-JA-PCF/.svn/pristine/96/969867ecd2546715cbe8ce904621acd7cb454299.svn-base new file mode 100644 index 0000000..e3d7232 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/96/969867ecd2546715cbe8ce904621acd7cb454299.svn-base @@ -0,0 +1,74 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ColorFontUtil); +importPackage(Packages.org.csstudio.opibuilder.scriptUtil.*); + +var table = widget.getTable(); +var func = display.getPropertyValue("name"); + +var i = 0; +var row = 0; +var col = 3; +// ConsoleUtil.writeInfo("Trigger PV : " + triggerPV.getName()); +while (triggerPV != pvs[i]) { +// ConsoleUtil.writeInfo("pvs[i] : " + pvs[i].getName()); + if (col == 5) { + if (pvs[i+1].getName().indexOf("PLC-IOCHLTS") != -1) { + col = col+1; + } + else { + col = 3 + row = row+1; + } + } + else if (col == 3) { + if ( (pvs[i+1].getName().indexOf("-SYSHLTS") != -1) || (pvs[i+1].getName().indexOf("-HLTS") != -1)) { + col = 3; + row = row+1; + } + else if (pvs[i+1].getName().indexOf("-IOCHLTS") != -1) { + if (pvs[i+1].getName().indexOf("CORE-IOCHLTS") != -1) { + col = 4; + } + else { + col = 5; + } + } + else { + col += 1; + if (col > 5) { + row += 1; + col = 3; + } + } + } + else { + col += 1; + if (col > 6) { + row += 1; + col = 3; + } + } + i += 1; +} + +table.setCellText(row, col, PVUtil.getString(triggerPV)) + +var s = PVUtil.getSeverity(triggerPV) + +color = ColorFontUtil.WHITE +if( s == 0) { + color = ColorFontUtil.GREEN +} +else if( s == 1) { + color = ColorFontUtil.RED +} +else if( s == 2) { + color = ColorFontUtil.YELLOW +} +else if( s == 3) { + color = ColorFontUtil.PINK +} +else if( s == 3) { + color = ColorFontUtil.PINK +} +table.setCellBackground(row, col, color) diff --git a/EC-GN-JA-PCF/.svn/pristine/96/96a19a2e087efba977f03fe52cee87753146df62.svn-base b/EC-GN-JA-PCF/.svn/pristine/96/96a19a2e087efba977f03fe52cee87753146df62.svn-base new file mode 100644 index 0000000..3a20916 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/96/96a19a2e087efba977f03fe52cee87753146df62.svn-base @@ -0,0 +1,619 @@ + + + + Display + + true + + 3236 + + + true + 1760 + true + EC-GN-SYSM + 6 + true + true + 0 + + + + + + + + 0 + + false + + + + false + -1 + -1 + + + + + + + + true + Grouping Container + + true + + true + 6 + + true + + 2 + + false + false + false + + groupHeading + + + + true + false + + 0 + + + + + + + 0 + + 1243 + 50 + + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + Label Template + + + false + false + false + + + false + Cubicles + + true + 1 + true + Label + 40 + true + + 6 + 54 + + + + + + true + + + + + + + + 1 + + + + + + + + 200 + EC-GN-SYSM + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1400 + 6 + + + Name + 50 + no + + + Physical Name + 120 + + + + Description + 120 + no + + + Cubicle health summary + 100 + no + + + PLC health summary + 100 + no + + + Location + 100 + no + + + Macro PPPP + 0 + no + + + Macro PP + 0 + no + + + Macro NNNN + 0 + no + + + false + + 2 + + + + 7 + + 90 + + 6 + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + Label Template + + + false + false + false + + + false + PLCs + + true + 1 + true + Label + 26 + true + + 6 + 320 + + + + + + true + + + + P0 + 52RF01-PLC-4110 + + + + + + + + + + + + 1 + + + + + EC-GN-SYSM-52RF-01:PLC4110-PLCHLTS +EC-GN-SYSM-52RF-01:PLC4110-EVTHLTS +EC-GN-SYSM-52RF-01:PLC4110-FRAMEC + + + + + 200 + EC-GN-SYSM + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1400 + 6 + + + Name + 50 + no + + + Physical Name + 120 + + + + Description + 120 + no + + + PLC health summary + 100 + no + + + ALIVEC + 100 + no + + + Event health summary + 100 + no + + + FRAMEC + 100 + no + + + false + + 2 + + + + 5 + + 350 + + 6 + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + Label Template + + + false + false + false + + + false + Control Units + + true + 1 + true + Label + 59 + true + + 6 + 570 + + + + + + true + + + + H0 + 52RF01-PSH-4410 + + + + + + Plant System Host + + + + + F0 + 52RF01-PCF-4210 + + + + + + Fast Controller + + + + + + + 1 + + + + EC-GN-SYSM-52RF-01:PCF4210-SYSHLTS +EC-GN-SYSM-52RF-01:PSH4410-SYSHLTS + + + + + + 300 + EC-GN-SYSM + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1400 + 6 + + + Name + 50 + no + + + Physical Name + 120 + + + + Description + 120 + no + + + Controller health summary + 150 + no + + + PSH0CORE IOC health summary + 100 + no + + + Controller IOC health summary + 100 + no + + + PLC IOC health summary + 100 + no + + + Type + 100 + no + + + false + + 2 + + + + 7 + + 600 + + 6 + + + + + true + Grouping Container + + true + + true + 1243 + + false + false + false + + 6 + + true + + 48 + 2 + groupICProjectInfo + + + + true + false + + 1400 + + + + + + + 0 + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 38 + 0 + I&C Project Name: EC-GN, Version: 1 + + + false + false + false + + + false + I&C Project Name: EC-GN, Version: 1 + + true + 1 + true + Label + 3000 + true + + 40 + 0 + + + + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/96/96b9f136f274eb76da18d421f2a0b6ac8f4c3699.svn-base b/EC-GN-JA-PCF/.svn/pristine/96/96b9f136f274eb76da18d421f2a0b6ac8f4c3699.svn-base new file mode 100644 index 0000000..3a5071d --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/96/96b9f136f274eb76da18d421f2a0b6ac8f4c3699.svn-base @@ -0,0 +1,260 @@ +/** + * @file EPICSCAInput.h + * @brief Header file for class EPICSCAInput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class EPICSCAInput + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef JAEPICSCAINPUT_H_ +#define JAEPICSCAINPUT_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" +#include "EmbeddedServiceMethodBinderI.h" +#include "EventSem.h" +#include "SingleThreadService.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +/** + * Maximum size that a PV name may have + */ +/*lint -esym(551, MARTe::PV_NAME_MAX_SIZE) the symbol is used to define the size of PVWrapper below*/ +const uint32 PV_NAME_MAX_SIZE = 64u; + +/** + * Wraps a PV + */ +struct PVWrapper { + /** + * The channel identifier + */ + chid pvChid; + /** + * The event identifier + */ + evid pvEvid; + /** + * The PV type + */ + chtype pvType; + /** + * The memory of the signal associated to this channel + */ + void *memory; + void *previousValue; + /** + * The number of elements > 0 + */ + uint32 numberOfElements; + /** + * The memory size + */ + uint32 memorySize; + /** + * The PV name + */ + char8 pvName[PV_NAME_MAX_SIZE]; +}; + +/** + * @brief A DataSource which allows to retrieved data from any number of PVs using the EPICS channel access client protocol. + * Data is asynchronously retrieved using ca_create_subscriptions in the context of a different thread (w.r.t. to the real-time thread). + * + * The configuration syntax is (names are only given as an example): + * + *
+ * +EPICSCAInput_1 = {
+ *     Class = JAEPICSCA::JAEPICSCAInput
+ *     StackSize = 1048576 //Optional the EmbeddedThread stack size. Default value is THREADS_DEFAULT_STACKSIZE * 4u
+ *     CPUs = 0xff //Optional the affinity of the EmbeddedThread (where the EPICS context is attached).
+ *     Signals = {
+ *          PV1 = { //At least one shall be defined
+ *             PVName = My::PV1 //Compulsory. Name of the PV.
+ *             Type = uint32 //Compulsory. Supported types are char8[40], string[40], uint8, int8, uint16, int16, int32, uint32, uint64, int64, float32 and float64
+ *             NumberOfElements = 1 //Arrays also supported
+ *          }
+ *          ...
+ *     }
+ * }
+ *
+ * 
+ */ +class JAEPICSCAInput: public DataSourceI, public EmbeddedServiceMethodBinderI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Default constructor. NOOP. + */ + JAEPICSCAInput(); + + /** + * @brief Destructor. + * @details TODO. + */ + virtual ~JAEPICSCAInput(); + + /** + * @brief See DataSourceI::AllocateMemory. NOOP. + * @return true. + */ + virtual bool AllocateMemory(); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @return 1. + */ + virtual uint32 GetNumberOfMemoryBuffers(); + + /** + * @brief See DataSourceI::GetSignalMemoryBuffer. + * @pre + * SetConfiguredDatabase + */ + virtual bool GetSignalMemoryBuffer(const uint32 signalIdx, + const uint32 bufferIdx, + void *&signalAddress); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @details Only InputSignals are supported. + * @return MemoryMapInputBroker. + */ + virtual const char8 *GetBrokerName(StructuredDataI &data, + const SignalDirection direction); + + /** + * @brief See DataSourceI::GetInputBrokers. + * @details adds a memory MemoryMapInputBroker instance to the inputBrokers + * @return true. + */ + virtual bool GetInputBrokers(ReferenceContainer &inputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::GetOutputBrokers. + * @return false. + */ + virtual bool GetOutputBrokers(ReferenceContainer &outputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::PrepareNextState. NOOP. + * @return true. + */ + virtual bool PrepareNextState(const char8 * const currentStateName, + const char8 * const nextStateName); + + /** + * @brief Loads and verifies the configuration parameters detailed in the class description. + * @return true if all the mandatory parameters are correctly specified and if the specified optional parameters have valid values. + */ + virtual bool Initialise(StructuredDataI & data); + + /** + * @brief Final verification of all the parameters. Setup of the memory required to hold all the signals. + * @details This method verifies that all the parameters requested by the GAMs interacting with this DataSource + * are valid and consistent with the parameters set during the initialisation phase. + * In particular the following conditions shall be met: + * - All the signals have the PVName defined + * - All the signals have one of the following types: uint32, int32, float32 or float64. + * @return true if all the parameters are valid and the conditions above are met. + */ + virtual bool SetConfiguredDatabase(StructuredDataI & data); + + /** + * @brief Gets the affinity of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + * @return the the affinity of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + */ + uint32 GetCPUMask() const; + + /** + * @brief Gets the stack size of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + * @return the stack size of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + */ + uint32 GetStackSize() const; + + /** + * @brief Provides the context to execute all the EPICS relevant calls. + * @details Executes in the context of a spawned thread the following EPICS calls: + * ca_context_create, ca_create_channel, ca_create_subscription, ca_clear_subscription, + * ca_clear_event, ca_clear_channel, ca_detach_context and ca_context_destroy + * @return ErrorManagement::NoError if all the EPICS calls return without any error. + */ + virtual ErrorManagement::ErrorType Execute(ExecutionInfo & info); + + /** + * @brief See DataSourceI::Synchronise. + * @return false. + */ + virtual bool Synchronise(); + + /** + * @brief Registered as the ca_create_subscription callback function. + * It calls updates the memory of the corresponding PV variable. + */ + friend void JAEPICSCAInputEventCallback(struct event_handler_args args); + +private: + + /** + * List of PVs. + */ + PVWrapper *pvs; + + /** + * The CPU mask for the executor + */ + uint32 cpuMask; + + /** + * The stack size + */ + uint32 stackSize; + + /** + * The EmbeddedThread where the ca_pend_event is executed. + */ + SingleThreadService executor; + + /** + * Stores the configuration information received at Initialise. + */ + ConfigurationDatabase originalSignalInformation; +}; +} + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* EPICSCADATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF/.svn/pristine/96/96d6248672cb516118a1b73999b74d9810164f2c.svn-base b/EC-GN-JA-PCF/.svn/pristine/96/96d6248672cb516118a1b73999b74d9810164f2c.svn-base new file mode 100644 index 0000000..5eba449 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/96/96d6248672cb516118a1b73999b74d9810164f2c.svn-base @@ -0,0 +1,2 @@ +Build/ + diff --git a/EC-GN-JA-PCF/.svn/pristine/98/98804f810ab2c3918bcb2436e9058ed8602f3b00.svn-base b/EC-GN-JA-PCF/.svn/pristine/98/98804f810ab2c3918bcb2436e9058ed8602f3b00.svn-base new file mode 100644 index 0000000..e8a3e8b --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/98/98804f810ab2c3918bcb2436e9058ed8602f3b00.svn-base @@ -0,0 +1,28 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +export TARGET=x86-linux + +make -f Makefile.gcc diff --git a/EC-GN-JA-PCF/.svn/pristine/98/989ce703308abcae4e3b8ec696812b9b0d66566e.svn-base b/EC-GN-JA-PCF/.svn/pristine/98/989ce703308abcae4e3b8ec696812b9b0d66566e.svn-base new file mode 100644 index 0000000..1e256f8 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/98/989ce703308abcae4e3b8ec696812b9b0d66566e.svn-base @@ -0,0 +1,42 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +SPB = DataSources.x GAMs.x + +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults + +ROOT_DIR=. +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +all: $(OBJS) $(SUBPROJ) check-env + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + +check-env: +ifndef MARTe2_DIR + $(error MARTe2_DIR is undefined) +endif + diff --git a/EC-GN-JA-PCF/.svn/pristine/99/99177ee43f02a0371ea6181d96b0b132ecbd74c0.svn-base b/EC-GN-JA-PCF/.svn/pristine/99/99177ee43f02a0371ea6181d96b0b132ecbd74c0.svn-base new file mode 100644 index 0000000..fa87195 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/99/99177ee43f02a0371ea6181d96b0b132ecbd74c0.svn-base @@ -0,0 +1,28 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +export TARGET=x86-linux + +include Makefile.gcc \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/9a/9a3899be8280efae87bac6f8c3f38acca8dbcc7d.svn-base b/EC-GN-JA-PCF/.svn/pristine/9a/9a3899be8280efae87bac6f8c3f38acca8dbcc7d.svn-base new file mode 100644 index 0000000..d0f8af2 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/9a/9a3899be8280efae87bac6f8c3f38acca8dbcc7d.svn-base @@ -0,0 +1,25 @@ +#====================================================================== +# Loading DBs +#====================================================================== +cd $(TOP)/db + + +#====================================================================== +# Loading Substitution Files +#====================================================================== +cd $(TOP)/iocBoot/$(IOC) + + +#====================================================================== +# PLC Communication Monitoring PVs DB Loading +#====================================================================== +cd $(EPICS_ROOT)/db + + +#====================================================================== +# IOC Monitor +#====================================================================== +cd $(EPICS_ROOT)/db +#dbLoadRecords("iocmon.db","CBS=EC-GN-SYSM, CTRLTYPE=À¹é¯ñ, IDX=0, IOCTYPE=CUB, PP=, PPPP=, NNNN=, TTT=") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/.svn/pristine/9a/9ae69c5d94d58e96a1076918cb49b2574c321e9d.svn-base b/EC-GN-JA-PCF/.svn/pristine/9a/9ae69c5d94d58e96a1076918cb49b2574c321e9d.svn-base new file mode 100644 index 0000000..3254982 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/9a/9ae69c5d94d58e96a1076918cb49b2574c321e9d.svn-base @@ -0,0 +1 @@ +./Main.sh -f ../Configurations/tests/ECPCSubscriber.cfg -l RealTimeLoader -m StateMachine:Start \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/9b/9b2611d29b18bc3f2e1700d48f3b73cb8ddc19ff.svn-base b/EC-GN-JA-PCF/.svn/pristine/9b/9b2611d29b18bc3f2e1700d48f3b73cb8ddc19ff.svn-base new file mode 100644 index 0000000..a95be67 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/9b/9b2611d29b18bc3f2e1700d48f3b73cb8ddc19ff.svn-base @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JARTSampleGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JARTSampleGAM$(LIBEXT) \ + $(BUILD_DIR)/JARTSampleGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/.svn/pristine/9c/9c74f59d6857e4fd23f04c657b629891b4b9b36b.svn-base b/EC-GN-JA-PCF/.svn/pristine/9c/9c74f59d6857e4fd23f04c657b629891b4b9b36b.svn-base new file mode 100644 index 0000000..34f5d19 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/9c/9c74f59d6857e4fd23f04c657b629891b4b9b36b.svn-base @@ -0,0 +1,273 @@ +record (bo,"EC-GN-P01-GAF-GCPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 GCPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-GCPS:STAT-SIMM") +{ + field(DESC, "GY1 GCPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (mbbi,"EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB") +{ + field(DESC, "GY1 GCPS read ACT") + field(DTYP, "stream") + field(FRST, "ZERO") + field(FRSV, "NO_ALARM") + field(FRVL, "4") + field(INP, "@JASTEC-SCMPS.proto readActivity GC1") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") + field(THST, "FLAT TOP") + field(THSV, "NO_ALARM") + field(THVL, "3") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP") +{ + field(DESC, "GY1 GCPS set ACT") + field(DTYP, "stream") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(OUT, "@JASTEC-SCMPS.proto setActivity GC1") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MI") +{ + field(DESC, "GY1 GCPS ACT set to Marte") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MO") +{ + field(DESC, "GY1 GCPS ACT Marte outputs") + field(FLNK, "EC-GN-P01-GAF-GCPS:STAT-ACT-SP-CALC") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (ai,"EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON") +{ + field(DESC, "GY1 GCPS monitored current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "125") + field(INP, "@JASTEC-SCMPS.proto readMeasCurrent GC1") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") +} + +record (waveform,"EC-GN-P01-GAF-GCPS:PSU2130-ERR") +{ + field(DESC, "GY1 GCPS read error") + field(DTYP, "stream") + field(INP, "@JASTEC-SCMPS.proto readErrStat GC1") + field(NELM, "15") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-GCPS:PSU2130-SWP-LIM") +{ + field(DESC, "GY1 GCPS read sweep limit") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readSweepLim GC1") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-GCPS:PSU2130-SWP-RB") +{ + field(DESC, "GY1 GCPS read targ sweep rate") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readTargSweep GC1") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-RB") +{ + field(DESC, "GY1 GCPS read target current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "120") + field(INP, "@JASTEC-SCMPS.proto readTargCurrent GC1") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET") +{ + field(DESC, "GY1 GCPS set target current") + field(DRVH, "120") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP") + field(HOPR, "125") + field(LOPR, "0") + field(OUT, "@JASTEC-SCMPS.proto setCurrent GC1") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MI") +{ + field(DESC, "GY1 GCPS target current input to Marte") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MO") +{ + field(DESC, "GY1 GCPS target current Marte outputs") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GAF-GCPS:STAT-TRG-CURR-SET-CALC") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-GCPS:PSU2130-TRG-SWPR-SET") +{ + field(DESC, "GY1 GCPS set target swwp rate") + field(DRVH, "5.0") + field(DRVL, "0.01") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(LOPR, "0.01") + field(OUT, "@JASTEC-SCMPS.proto setSweep GC1") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") + field(VAL, "1") +} + +record (ai,"EC-GN-P01-GAF-GCPS:PSU2130-VOLT-MON") +{ + field(DESC, "GY1 GCPS monitored voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "10") + field(INP, "@JASTEC-SCMPS.proto readMeasVoltage GC1") + field(LOPR, "-10") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") +} + +record (calcout,"EC-GN-P01-GAF-GCPS:STAT-ACT-SP-CALC") +{ + field(CALC, "A") + field(DESC, "GCPS#1 state set by Marte") + field(INPA, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-GAF-GCPS:STAT-PREP-WF") +{ + field(DESC, "GY1 GCPS prepro schedule") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-GAF-GCPS:STAT-TRG-CURR-SET-CALC") +{ + field(CALC, "A") + field(DESC, "GCPS#1 current set by Marte") + field(INPA, "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET PP") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/.svn/pristine/9c/9cac30126cbb343d7d39cd528a0c3ce3c8a75628.svn-base b/EC-GN-JA-PCF/.svn/pristine/9c/9cac30126cbb343d7d39cd528a0c3ce3c8a75628.svn-base new file mode 100644 index 0000000..fb0fc2e --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/9c/9cac30126cbb343d7d39cd528a0c3ce3c8a75628.svn-base @@ -0,0 +1,1405 @@ + + + + Display + + true + H0 + 52RF01-PSH-4410 + EC-GN-SYSM + 52RF + 01 + 4410 + PSH + false + + 3236 + + + true + 1760 + true + EC-GN-SYSM + 6 + true + true + 0 + + + + + + + + 0 + + false + + + + false + -1 + -1 + + + + + + + + true + Grouping Container + + true + + true + 0 + + true + + 2 + + false + false + false + + groupHeading + + + + true + false + + 0 + + + + + + + 0 + + + + + + + 1243 + 50 + + + + + + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + SystemDetailsLabel + + + false + false + false + + + false + System Information: + + true + 1 + true + Label + 40 + true + + 6 + 55 + + + + + + + /opt/codac/opi/epics-sysmon/boy/ITER-SYSM-SYS_Mimic.opi + + true + + 0 + + + + false + + + + 6 + 2 + true + + IO Label + + false + + + + 37 + + Action Button Template + 0 + + + + + false + false + false + + + + More Details + false + $(pv_name) +$(pv_value) + true + Action Button + 279 + 6cb4f02d:15e5c6fbe55:-70fa + 200 + 45 + + + + true + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + (%) + sysmon + + + + + + + (MB) + sysmon + + + + + + + (MB) + sysmon + + + + + + + (%) + sysmon + + + + + + + + sysmon + + + + + + + (%) + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + (KB) + sysmon + + + + + + + (KB) + sysmon + + + + + + + (%) + sysmon + + + + + + + (KBps) + sysmon + + + + + + + (KBps) + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + 1 + + + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-BTIME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CAV1 + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CCSV + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPUUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-DISKFREE + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-DISKMAX + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-DISKUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-EPICSV + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-FDUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-HOSTNAME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-IPADDR + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-KERNELV + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-MEMFREE + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-MEMMAX + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-MEMUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-NRBPS + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-NSBPS + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-OSV + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PROCLST + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PROCSTS + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PS + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SHLT + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TIME + + + 600 + SystemDetailsTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1500 + 6 + + + Name + 200 + no + + + Value + 200 + no + + + Status + 100 + no + + + Severity + 75 + no + + + EGU + 0 + no + + + Template Name + 100 + no + + + false + + 2 + + + + 5 + + 125 + + 6 + + + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + COREIOCDetailsLabel + + + false + false + false + + + false + CORE IOC: + + true + 1 + true + Label + 40 + true + + 1600 + 55 + + + + + + + /opt/codac/opi/epics-sysmon/boy/ITER-SYSM-IOC_Mimic.opi + + true + + 0 + + + + false + + + + 6 + 2 + true + + IO Label + + false + + + + 37 + + Action Button Template + 0 + + + + + false + false + false + + + + More Details + false + $(pv_name) +$(pv_value) + true + Action Button + 279 + 6cb4f02d:15e5c6fbe55:-70fa + 1800 + 45 + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-BECTME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-CACLNTC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-CAPVC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-CONTMO + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-CPUUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-DBCLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-DBDLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-DBRECC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-FDUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-HB + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-IOCDIR.VAL$ + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-MEMUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-PID + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-STTOD + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-SVPORT + + + 600 + COREIOCDetailsTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1500 + 6 + + + Name + 200 + no + + + Value + 200 + no + + + Status + 100 + no + + + Severity + 75 + no + + + EGU + 0 + no + + + false + + 2 + + + + 4 + + 125 + + 1600 + + + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + SYSMIOCDetailsLabel + + + false + false + false + + + false + SYSM IOC: + + true + 1 + true + Label + 40 + true + + 6 + 750 + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + + + + + + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-BECTME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-CACLNTC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-CAPVC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-CONTMO + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-CPUUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-DBCLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-DBDLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-DBRECC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-FDUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-HB + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-IOCDIR.VAL$ + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-MEMUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-PID + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-STTOD + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-SVPORT + + + 600 + SYSMIOCDetailsTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1500 + 6 + + + Name + 200 + no + + + Value + 200 + no + + + Status + 100 + no + + + Severity + 75 + no + + + EGU + 0 + no + + + false + + 2 + + + + 4 + + 790 + + 6 + + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + PLCIOCDetailsLabel + + + false + false + false + + + false + Others: + + true + 1 + true + Label + 40 + true + + 1600 + 750 + + + + + true + + + + + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-BECTME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-CACLNTC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-CAPVC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-CONTMO + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-CPUUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-DBCLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-DBDLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-DBRECC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-FDUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-HB + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-IOCDIR.VAL$ + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-MEMUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-PID + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-STTOD + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-SVPORT + + + 600 + PLCIOCDetailsTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1500 + 6 + + + Name + 200 + no + + + Value + 200 + no + + + Status + 100 + no + + + Severity + 75 + no + + + EGU + 0 + no + + + false + + 2 + + + + 4 + + 790 + + 1600 + + + + + + + + + + + true + Grouping Container + + true + + true + 1243 + + false + false + false + + 0 + + true + + 48 + 2 + groupICProjectInfo + + + + true + false + + 1500 + + + + + + + 0 + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 38 + 0 + I&C Project Name: EC-GN, Version: 1 + + + false + false + false + + + false + I&C Project Name: EC-GN, Version: 1 + + true + 1 + true + Label + 3000 + true + + 40 + 0 + + + + + + + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/9f/9f010f44921da5b733da00173a6af31daa974d7a.svn-base b/EC-GN-JA-PCF/.svn/pristine/9f/9f010f44921da5b733da00173a6af31daa974d7a.svn-base new file mode 100644 index 0000000..ab6bca0 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/9f/9f010f44921da5b733da00173a6af31daa974d7a.svn-base @@ -0,0 +1,68 @@ +#+====================================================================== +# $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp/main/c++/prog/Makefile.template $ +# $Id: Makefile.template 83098 2018-01-08 13:23:38Z cesnikt $ +# +# Project : CODAC Core System +# +# Description : gyrotronDAN Makefile +# +# Author : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2018 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== + +PROGNAME=Gyrotron01DAN + +LIBRARIES=ca dan_api dan_client_api dan_stream dan_base xml2 log sdn sdn-core ccs-core rt pthread tcn nixseries +LIBRARY_DIRS= +INCLUDE_DIRS=. ../include $(CODAC_ROOT)/include $(EPICS_BASE)/include/os/Linux $(EPICS_BASE)/include/compiler/gcc $(EPICS_BASE)/include /usr/include/libxml2 $(SDN_TOPIC_DIRECTORY) + +TARGET=../../../../target +BINARY_DIR=$(TARGET)/bin +OBJECT_DIR=$(TARGET)/obj/$(PROGNAME) +SOURCE_DIR=. + +EXECUTABLE=$(BINARY_DIR)/$(PROGNAME) +INCLUDES=$(foreach inc,$(INCLUDE_DIRS),-I$(inc)) +LDLIBS=-L$(CODAC_ROOT)/lib -L$(EPICS_BASE)/lib/$(EPICS_HOST_ARCH) $(foreach libs,$(LIBRARY_DIRS),-L$(libs) -Wl,-rpath,$(libs)) $(foreach libs,$(LIBRARIES),-l$(libs)) +SOURCES=$(SOURCE_DIR)/$(PROGNAME).cpp $(SOURCE_DIR)/configure_sdn.cpp +# to build executable from all sources in the program directory: +#SOURCES=$(wildcard $(SOURCE_DIR)/*.cpp $(SOURCE_DIR)/*.c) +OBJECTS=$(addprefix $(OBJECT_DIR)/,$(patsubst %.cpp,%.o,$(notdir $(SOURCES)))) + +C=gcc +CC=g++ +CFLAGS=-c -Wall +CCFLAGS=-c -Wall -std=c++11 +LDFLAGS= + +.PHONY: all clean run + +all: $(SOURCES) $(EXECUTABLE) + +clean: + rm -rf "$(EXECUTABLE)" "$(OBJECT_DIR)" + +run: $(SOURCES) $(EXECUTABLE) + $(EXECUTABLE) + +$(EXECUTABLE): $(OBJECTS) + mkdir -p $(BINARY_DIR) + $(CC) $(LDFLAGS) $(LDLIBS) $(OBJECTS) -o $@ + +$(OBJECT_DIR)/%.o: $(SOURCE_DIR)/%.cpp + mkdir -p $(OBJECT_DIR) + $(CC) $(CCFLAGS) $(INCLUDES) $< -o $@ + +$(OBJECT_DIR)/%.o: $(SOURCE_DIR)/%.c + mkdir -p $(OBJECT_DIR) + $(C) $(CFLAGS) $(INCLUDES) $< -o $@ \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/9f/9f34739bbd057f9bea50f88c793463f0e4e0d4a0.svn-base b/EC-GN-JA-PCF/.svn/pristine/9f/9f34739bbd057f9bea50f88c793463f0e4e0d4a0.svn-base new file mode 100644 index 0000000..e761be7 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/9f/9f34739bbd057f9bea50f88c793463f0e4e0d4a0.svn-base @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/a0/a02278d0cde72a2d665b7c89829e554043d90773.svn-base b/EC-GN-JA-PCF/.svn/pristine/a0/a02278d0cde72a2d665b7c89829e554043d90773.svn-base new file mode 100644 index 0000000..3a90691 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/a0/a02278d0cde72a2d665b7c89829e554043d90773.svn-base @@ -0,0 +1,38 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import DataUtil +from org.csstudio.opibuilder.scriptUtil import ScriptUtil +from org.csstudio.swt.widgets.natives.SpreadSheetTable import ITableSelectionChangedListener +from java.util import Arrays + +table = widget.getTable() +fct_name=display.getPropertyValue("name") +class SelectionListener(ITableSelectionChangedListener): + def selectionChanged(self, selection): + cuName="" + phyName="" + plcIocHlts ="" + cuType="" + for row in selection: + phyName=row[1] + cuName=row[0] + plcIocHlts=row[6] + cuType=row[7]; +# change $(CU) substitution + macroInput = DataUtil.createMacrosInput(True) + macroInput.put("CU", cuName) + macroInput.put("PHY_NAME", phyName) + macroInput.put("FCT_NAME", fct_name) + macroInput.put("CU_TYPE", cuType) + if plcIocHlts == "": + macroInput.put("SHOW_PLC_IOC", "false") + else: + macroInput.put("SHOW_PLC_IOC", "true") + # open OPI + # see https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-boy/trunk/org.csstudio.opibuilder/src/org/csstudio/opibuilder/scriptUtil/ScriptUtil.java + if cuType == "POC with CA": + ScriptUtil.openOPI(display.getWidget("Table"), fct_name+"-POCWithCADetails.opi", 1, macroInput) + elif cuType == "POC without CA": + ScriptUtil.openOPI(display.getWidget("Table"), fct_name+"-POCWithoutCADetails.opi", 1, macroInput) + else: + ScriptUtil.openOPI(display.getWidget("Table"), fct_name+"-CtrlUnitDetails.opi", 1, macroInput) +table.addSelectionChangedListener(SelectionListener()) diff --git a/EC-GN-JA-PCF/.svn/pristine/a0/a06678beb0073662e76e011f278f81b6793ed6b4.svn-base b/EC-GN-JA-PCF/.svn/pristine/a0/a06678beb0073662e76e011f278f81b6793ed6b4.svn-base new file mode 100644 index 0000000..8dfc149 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/a0/a06678beb0073662e76e011f278f81b6793ed6b4.svn-base @@ -0,0 +1,45 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +SPB = JAMessageGAM.x JAPreProgrammedGAM.x JAModeControlGAM.x \ + JAWFRecordGAM.x JATriangleWaveGAM.x JARampupGAM.x \ + JARTStateMachineGAM.x JASDNRTStateMachineGAM.x JATerminalInterfaceGAM.x \ + JABitSumGAM.x JAConditionalSignalUpdateGAM.x JASourceChoiseGAM.x JABitReverseGAM.x + +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults + +ROOT_DIR=../../../obj +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +all: $(OBJS) $(SUBPROJ) check-env + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + +check-env: +ifndef MARTe2_DIR + $(error MARTe2_DIR is undefined) +endif diff --git a/EC-GN-JA-PCF/.svn/pristine/a0/a09246348ba58f522f256282d4b788d6ca60779b.svn-base b/EC-GN-JA-PCF/.svn/pristine/a0/a09246348ba58f522f256282d4b788d6ca60779b.svn-base new file mode 100644 index 0000000..0f3e2aa --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/a0/a09246348ba58f522f256282d4b788d6ca60779b.svn-base @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JATerminalInterfaceGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JATerminalInterfaceGAM$(LIBEXT) \ + $(BUILD_DIR)/JATerminalInterfaceGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/.svn/pristine/a1/a1c5fa1fb9465d049d7e1dd2988ee02664ff6fc3.svn-base b/EC-GN-JA-PCF/.svn/pristine/a1/a1c5fa1fb9465d049d7e1dd2988ee02664ff6fc3.svn-base new file mode 100644 index 0000000..ff47dc4 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/a1/a1c5fa1fb9465d049d7e1dd2988ee02664ff6fc3.svn-base @@ -0,0 +1,109 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +# +# Some EPICS PVs need to be simulation mode when we test code without PXI board. +# When user uses sim mode, new value must be written into PV.SVAL and PV itselfself. +# +print '### Start State Machine Sequence Test ###' + +def test_setup(): + """ + Setup EPICS PVs for testing. + Turn simulation mode ON for unavailable device + """ + print '---------- Start setup for the test ----------' + + print '1. set PVs to simulation mode' + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-AI-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF:STAT-AI-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DI-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-DI-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:STAT-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:STAT-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:STAT-SIMM YES', shell=True) #turn off for GCPS test. + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:STAT-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:STAT-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:STAT-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YFLT.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YFLT.SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YFLT.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YFLT 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YFLT.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YFLT.SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YFLT.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YFLT 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PA2F:PSU4000-YFLT.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PA2F:PSU4000-YFLT.SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-PA2F:PSU4000-YFLT.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PA2F:PSU4000-YFLT 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:PSU2000-YFLT.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:PSU2000-YFLT.SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:PSU2000-YFLT.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:PSU2000-YFLT 0', shell=True) + time.sleep(1) + print '2. Change SCAN mode from I/O Inter to Passive to write sumulated values.' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1.SCAN Passive', shell=True)#SELECT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2.SCAN Passive', shell=True)#SELECT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R.SCAN Passive', shell=True) #STANDBY + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST2R.SCAN Passive', shell=True) #READY + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SCAN Passive', shell=True) #ON + res = subprocess.call('caput EC-GN-P01-PMF:PSU0000-TYSTA.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YSTA.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YSTA.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SCAN Passive', shell=True) #PERMIT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SCAN Passive', shell=True) #PERMIT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD2.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD3.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD4.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS.SCAN Passive', shell = True) #SYNC/ASYNC + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS1.SCAN Passive', shell=True) #CCPS ON REQUEST + time.sleep(1) + print '3. Set pulse length limit mode value and state.' + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 10000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD2-LIM 100000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD3-LIM 1000000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD4-LIM 10000000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD2.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD2 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD3.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD3 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD4.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD4 0', shell = True) #Pulse lenght mode + print '4. Set other operation modes' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-PREP-MODE 0', shell = True) #Pre-pro mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS.SVAL 0', shell = True) #SYNC/ASYNC mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS 0', shell = True) #SYNC/ASYNC mode + res = subprocess.call('caput EC-GN-P01-GAF:STAT-SHORT-PULSE 0',shell = True) #Short pulse mode + time.sleep(1) + print '5. Set a beam-on schedule(10ms diff + 100ms pulse)' + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 10000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 20000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 30000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 40000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 50000', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 100000', shell=True) + time.sleep(1) + print '6. Reset PLC INTERLOCK' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP.SIMM 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP.SCAN 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP 0', shell=True) #CCPS_IS_OPERATION + res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP.SIMM 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP.SCAN 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GBFP:FMC4310-YTRP.SIMM 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GBFP:FMC4310-YTRP.SCAN 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GBFP:FMC4310-YTRP.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GBFP:FMC4310-YTRP 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-RST-FLT 1', shell=True) + print '---------- END setup for the test ----------' diff --git a/EC-GN-JA-PCF/.svn/pristine/a1/a1e26a6963a4bea31e9a1418d6d79842a9e1be91.svn-base b/EC-GN-JA-PCF/.svn/pristine/a1/a1e26a6963a4bea31e9a1418d6d79842a9e1be91.svn-base new file mode 100644 index 0000000..9778039 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/a1/a1e26a6963a4bea31e9a1418d6d79842a9e1be91.svn-base @@ -0,0 +1,231 @@ +record (bo,"EC-GN-P01-PMF:PSU0000-COFF") +{ + field(DESC, "MHVPS Shutdown request") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PMF:PSU0000-CON-MOD") +{ + field(DESC, "MHVPS MOD Enable/Disable") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PMF:PSU0000-CON-SW") +{ + field(DESC, "MHVPS Enable/Disable") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-PMF:PSU0000-TYSTA") +{ + field(DESC, "MHVPS Ready status") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 7) bitread") + field(ONAM, "READY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bi,"EC-GN-P01-PMF:PSU0000-YFLT") +{ + field(DESC, "MHVPS Fast Protection Act") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 6) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bo,"EC-GN-P01-PMF:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 APS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (ao,"EC-GN-P01-PMF:PSU0000-EREF") +{ + field(ASLO, "11") + field(DESC, "MHVPS voltage setpoint") + field(DRVH, "55") + field(DRVL, "0") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "55") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 3) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PMF:PSU0000-EREF-MSP") +{ + field(DESC, "MHVPS voltage manual setpoint") + field(DRVH, "55") + field(DRVL, "0") + field(EGU, "kV") + field(HOPR, "55") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-PMF:PSU0000-ET-GA") +{ + field(DESC, "GY1 MHVPS Measued Voltage") + field(EGU, "kV") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PMF:PSU0000-ET-GA-WF") +{ + field(DESC, "GY1 MHVPS Measued Voltage") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PMF:PSU0000-ET-GB") +{ + field(DESC, "GY2 MHVPS Measued Voltage") + field(EGU, "kV") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PMF:PSU0000-ET-GB-WF") +{ + field(DESC, "GY2 MHVPS Measued Voltage") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PMF:PSU0000-IT-GA") +{ + field(DESC, "GY1 MHVPS Measured Current") + field(EGU, "A") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PMF:PSU0000-IT-GA-WF") +{ + field(DESC, "GY1 MHVPS Measured Current") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PMF:PSU0000-IT-GB") +{ + field(DESC, "GY2 MHVPS Measured Current") + field(EGU, "A") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PMF:PSU0000-IT-GB-WF") +{ + field(DESC, "GY2 MHVPS Measured Current") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PMF:STAT-DT-HVON") +{ + field(DESC, "Time diff to MHVPS ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "500000") +} + +record (calcout,"EC-GN-P01-PMF:STAT-EREF-CALC") +{ + field(CALC, "(A!=C)?A:((B!=D)?B:E);C:=A; D:=B") + field(DESC, "determine MHVPS EREF change") + field(INPE, "EC-GN-P01-PMF:PSU0000-EREF") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-PMF:PSU0000-EREF PP") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-PMF:STAT-HVON-CALC") +{ + field(CALC, "(A||B)?1:0") + field(DESC, "determine MHVPS HVON change") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-PMF:PSU0000-CON-SW PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-PMF:STAT-PREP-WF") +{ + field(DESC, "MHVPS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/.svn/pristine/a3/a38b4150db9fb23c0a6d516499b1bafc3dd178a6.svn-base b/EC-GN-JA-PCF/.svn/pristine/a3/a38b4150db9fb23c0a6d516499b1bafc3dd178a6.svn-base new file mode 100644 index 0000000..d889bf8 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/a3/a38b4150db9fb23c0a6d516499b1bafc3dd178a6.svn-base @@ -0,0 +1,45 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +SPB = JAMessageGAM.x JAPreProgrammedGAM.x JAModeControlGAM.x \ + JAWFRecordGAM.x JATriangleWaveGAM.x JARampupGAM.x \ + JARTStateMachineGAM.x JASDNRTStateMachineGAM.x JATerminalInterfaceGAM.x \ + JABitSumGAM.x JAConditionalSignalUpdateGAM.x JASourceChoiseGAM.x JABitReverseGAM.x + +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults + +ROOT_DIR=../../obj +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +all: $(OBJS) $(SUBPROJ) check-env + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + +check-env: +ifndef MARTe2_DIR + $(error MARTe2_DIR is undefined) +endif diff --git a/EC-GN-JA-PCF/.svn/pristine/a4/a473e687dbb266ceb462f472e4eb74868e365e4c.svn-base b/EC-GN-JA-PCF/.svn/pristine/a4/a473e687dbb266ceb462f472e4eb74868e365e4c.svn-base new file mode 100644 index 0000000..44d05b7 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/a4/a473e687dbb266ceb462f472e4eb74868e365e4c.svn-base @@ -0,0 +1,6002 @@ +#t (100ms),EW2-Voset (kV),EW3-VOset (kV),EW101-MC-Ioset (A),EW101-GC-Ioset (A),FPS101-Voset (V) +0,20,15,111.3,1.7,53.2 +1,20.5,14.5,111.3,1.7,62 +2,21,14,111.3,1.7,62 +3,21.5,13.5,111.3,1.7,62 +4,22,13,111.3,1.7,62 +5,22.5,12.5,111.3,1.7,62 +6,23,12,111.3,1.7,62 +7,23.5,11.5,111.3,1.7,62 +8,24,11,111.3,1.7,62 +9,24.5,10.5,111.3,1.7,62 +10,25,10,111.3,1.7,62 +11,25.5,9.5,111.3,1.7,62 +12,26,9,111.3,1.7,62 +13,26.5,8.5,111.3,1.7,62 +14,27,8,111.3,1.7,62 +15,27.5,7.5,111.3,1.7,62 +16,28,7,111.3,1.7,62 +17,28.5,6.5,111.3,1.7,62 +18,29,6,111.3,1.7,62 +19,29.5,5.5,111.3,1.7,62 +20,30,5,111.3,1.7,62 +21,30,4.5,111.3,1.7,62 +22,30,4,111.3,1.7,62 +23,30,4,111.3,1.7,62 +24,30,4,111.3,1.7,62 +25,30,4,111.3,1.7,62 +26,30,4,111.3,1.7,62 +27,30,4,111.3,1.7,62 +28,30,4,111.3,1.7,62 +29,30,4,111.3,1.7,62 +30,30,4,111.3,1.7,62 +31,30,3.4,111.3,1.7,62 +32,30,3.4,111.3,1.7,62 +33,30,3.4,111.3,1.7,62 +34,30,3.4,111.3,1.7,62 +35,30,3.4,111.3,1.7,62 +36,30,3.4,111.3,1.7,62 +37,30,3.4,111.3,1.7,62 +38,30,3.4,111.3,1.7,62 +39,30,3.4,111.3,1.7,62 +40,30,3.4,111.3,1.7,62 +41,30,3.4,111.3,1.7,62 +42,30,3.4,111.3,1.7,62 +43,30,3.4,111.3,1.7,62 +44,30,3.4,111.3,1.7,62 +45,30,3.4,111.3,1.7,62 +46,30,3.4,111.3,1.7,62 +47,30,3.4,111.3,1.7,62 +48,30,3.4,111.3,1.7,62 +49,30,3.4,111.3,1.7,62 +50,30,3.4,111.3,1.7,62 +51,30,3.4,111.3,1.7,62.1 +52,30,3.4,111.3,1.7,62.2 +53,30,3.4,111.3,1.7,62.3 +54,30,3.4,111.3,1.7,62.4 +55,30,3.4,111.3,1.7,62.5 +56,30,3.4,111.3,1.7,62.6 +57,30,3.4,111.3,1.7,62.7 +58,30,3.4,111.3,1.7,62.8 +59,30,3.4,111.3,1.7,62.9 +60,30,3.4,111.3,1.7,63 +61,30,3,111.3,1.7,63.1 +62,30,3,111.3,1.7,63.2 +63,30,3,111.3,1.7,63.3 +64,30,3,111.3,1.7,63.4 +65,30,3,111.3,1.7,63.5 +66,30,3,111.3,1.7,63.6 +67,30,3,111.3,1.7,63.7 +68,30,3,111.3,1.7,63.8 +69,30,3,111.3,1.7,63.9 +70,30,3,111.3,1.7,64 +71,30,3,111.3,1.7,64.1 +72,30,3,111.3,1.7,64.2 +73,30,3,111.3,1.7,64.3 +74,30,3,111.3,1.7,64.4 +75,30,3,111.3,1.7,64.5 +76,30,3,111.3,1.7,64.6 +77,30,3,111.3,1.7,64.7 +78,30,3,111.3,1.7,64.8 +79,30,3,111.3,1.7,64.9 +80,30,3,111.3,1.7,65 +81,30,3,111.3,1.7,65.1 +82,30,3,111.3,1.7,65.2 +83,30,3,111.3,1.7,65.3 +84,30,3,111.3,1.7,65.4 +85,30,3,111.3,1.7,65.5 +86,30,3,111.3,1.7,65.6 +87,30,3,111.3,1.7,65.7 +88,30,3,111.3,1.7,65.8 +89,30,3,111.3,1.7,65.9 +90,30,3,111.3,1.7,66 +91,30,3,111.3,1.7,66.1 +92,30,3,111.3,1.7,66.2 +93,30,3,111.3,1.7,66.3 +94,30,3,111.3,1.7,66.4 +95,30,3,111.3,1.7,66.5 +96,30,3,111.3,1.7,66.6 +97,30,3,111.3,1.7,66.7 +98,30,3,111.3,1.7,66.8 +99,30,3,111.3,1.7,66.9 +100,30,3,111.3,1.7,67 +101,30,3,111.3,1.7,67 +102,30,3,111.3,1.7,67 +103,30,3,111.3,1.7,67 +104,30,3,111.3,1.7,67 +105,30,3,111.3,1.7,67 +106,30,3,111.3,1.7,67 +107,30,3,111.3,1.7,67 +108,30,3,111.3,1.7,67 +109,30,3,111.3,1.7,67 +110,30,3,111.3,1.7,67 +111,30,3,111.3,1.7,67 +112,30,3,111.3,1.7,67 +113,30,3,111.3,1.7,67 +114,30,3,111.3,1.7,67 +115,30,3,111.3,1.7,67 +116,30,3,111.3,1.7,67 +117,30,3,111.3,1.7,67 +118,30,3,111.3,1.7,67 +119,30,3,111.3,1.7,67 +120,30,3,111.3,1.7,67 +121,30,3,111.3,1.7,67 +122,30,3,111.3,1.7,67 +123,30,3,111.3,1.7,67 +124,30,3,111.3,1.7,67 +125,30,3,111.3,1.7,67 +126,30,3,111.3,1.7,67 +127,30,3,111.3,1.7,67 +128,30,3,111.3,1.7,67 +129,30,3,111.3,1.7,67 +130,30,3,111.3,1.7,67 +131,30,3,111.3,1.7,67 +132,30,3,111.3,1.7,67 +133,30,3,111.3,1.7,67 +134,30,3,111.3,1.7,67 +135,30,3,111.3,1.7,67 +136,30,3,111.3,1.7,67 +137,30,3,111.3,1.7,67 +138,30,3,111.3,1.7,67 +139,30,3,111.3,1.7,67 +140,30,3,111.3,1.7,67 +141,30,3,111.3,1.7,67 +142,30,3,111.3,1.7,67 +143,30,3,111.3,1.7,67 +144,30,3,111.3,1.7,67 +145,30,3,111.3,1.7,67 +146,30,3,111.3,1.7,67 +147,30,3,111.3,1.7,67 +148,30,3,111.3,1.7,67 +149,30,3,111.3,1.7,67 +150,30,3,111.3,1.7,67 +151,30,3,111.3,1.7,67 +152,30,3,111.3,1.7,67 +153,30,3,111.3,1.7,67 +154,30,3,111.3,1.7,67 +155,30,3,111.3,1.7,67 +156,30,3,111.3,1.7,67 +157,30,3,111.3,1.7,67 +158,30,3,111.3,1.7,67 +159,30,3,111.3,1.7,67 +160,30,3,111.3,1.7,67 +161,30,3,111.3,1.7,67 +162,30,3,111.3,1.7,67 +163,30,3,111.3,1.7,67 +164,30,3,111.3,1.7,67 +165,30,3,111.3,1.7,67 +166,30,3,111.3,1.7,67 +167,30,3,111.3,1.7,67 +168,30,3,111.3,1.7,67 +169,30,3,111.3,1.7,67 +170,30,3,111.3,1.7,67 +171,30,3,111.3,1.7,67 +172,30,3,111.3,1.7,67 +173,30,3,111.3,1.7,67 +174,30,3,111.3,1.7,67 +175,30,3,111.3,1.7,67 +176,30,3,111.3,1.7,67 +177,30,3,111.3,1.7,67 +178,30,3,111.3,1.7,67 +179,30,3,111.3,1.7,67 +180,30,3,111.3,1.7,67 +181,30,3,111.3,1.7,67 +182,30,3,111.3,1.7,67 +183,30,3,111.3,1.7,67 +184,30,3,111.3,1.7,67 +185,30,3,111.3,1.7,67 +186,30,3,111.3,1.7,67 +187,30,3,111.3,1.7,67 +188,30,3,111.3,1.7,67 +189,30,3,111.3,1.7,67 +190,30,3,111.3,1.7,67 +191,30,3,111.3,1.7,67 +192,30,3,111.3,1.7,67 +193,30,3,111.3,1.7,67 +194,30,3,111.3,1.7,67 +195,30,3,111.3,1.7,67 +196,30,3,111.3,1.7,67 +197,30,3,111.3,1.7,67 +198,30,3,111.3,1.7,67 +199,30,3,111.3,1.7,67 +200,30,2.9,111.3,1.7,67 +201,30,2.9,111.05,1.7,67 +202,30,2.9,111.05,1.7,67 +203,30,2.9,111.05,1.7,67 +204,30,2.9,111.05,1.7,67 +205,30,2.9,111.05,1.7,67 +206,30,2.9,111.05,1.7,67 +207,30,2.9,111.05,1.7,67 +208,30,2.9,111.05,1.7,67 +209,30,2.9,111.05,1.7,67 +210,30,2.9,111.05,1.7,67 +211,30,2.9,111.05,1.7,67 +212,30,2.9,111.05,1.7,67 +213,30,2.9,111.05,1.7,67 +214,30,2.9,111.05,1.7,67 +215,30,2.9,111.05,1.7,67 +216,30,2.9,111.05,1.7,67 +217,30,2.9,111.05,1.7,67 +218,30,2.9,111.05,1.7,67 +219,30,2.9,111.05,1.7,67 +220,30,2.9,111.05,1.7,67 +221,30,2.9,111.05,1.7,67 +222,30,2.9,111.05,1.7,67 +223,30,2.9,111.05,1.7,67 +224,30,2.9,111.05,1.7,67 +225,30,2.9,111.05,1.7,67 +226,30,2.9,111.05,1.7,67 +227,30,2.9,111.05,1.7,67 +228,30,2.9,111.05,1.7,67 +229,30,2.9,111.05,1.7,67 +230,30,2.9,111.05,1.7,67 +231,30,2.9,111.05,1.7,67 +232,30,2.9,111.05,1.7,67 +233,30,2.9,111.05,1.7,67 +234,30,2.9,111.05,1.7,67 +235,30,2.9,111.05,1.7,67 +236,30,2.9,111.05,1.7,67 +237,30,2.9,111.05,1.7,67 +238,30,2.9,111.05,1.7,67 +239,30,2.9,111.05,1.7,67 +240,30,2.9,111.05,1.7,67 +241,30,2.9,111.05,1.7,67 +242,30,2.9,111.05,1.7,67 +243,30,2.9,111.05,1.7,67 +244,30,2.9,111.05,1.7,67 +245,30,2.9,111.05,1.7,67 +246,30,2.9,111.05,1.7,67 +247,30,2.9,111.05,1.7,67 +248,30,2.9,111.05,1.7,67 +249,30,2.9,111.05,1.7,67 +250,30,2.8,111.05,1.7,67 +251,30,2.8,111.05,1.7,67 +252,30,2.8,111.05,1.7,67 +253,30,2.8,111.05,1.7,67 +254,30,2.8,111.05,1.7,67 +255,30,2.8,111.05,1.7,67 +256,30,2.8,111.05,1.7,67 +257,30,2.8,111.05,1.7,67 +258,30,2.8,111.05,1.7,67 +259,30,2.8,111.05,1.7,67 +260,30,2.8,111.05,1.7,67 +261,30,2.8,111.05,1.7,67 +262,30,2.8,111.05,1.7,67 +263,30,2.8,111.05,1.7,67 +264,30,2.8,111.05,1.7,67 +265,30,2.8,111.05,1.7,67 +266,30,2.8,111.05,1.7,67 +267,30,2.8,111.05,1.7,67 +268,30,2.8,111.05,1.7,67 +269,30,2.8,111.05,1.7,67 +270,30,2.8,111.05,1.7,67 +271,30,2.8,111.05,1.7,67 +272,30,2.8,111.05,1.7,67 +273,30,2.8,111.05,1.7,67 +274,30,2.8,111.05,1.7,67 +275,30,2.8,111.05,1.7,67 +276,30,2.8,111.05,1.7,67 +277,30,2.8,111.05,1.7,67 +278,30,2.8,111.05,1.7,67 +279,30,2.8,111.05,1.7,67 +280,30,2.8,111.05,1.7,67 +281,30,2.8,111.05,1.7,67 +282,30,2.8,111.05,1.7,67 +283,30,2.8,111.05,1.7,67 +284,30,2.8,111.05,1.7,67 +285,30,2.8,111.05,1.7,67 +286,30,2.8,111.05,1.7,67 +287,30,2.8,111.05,1.7,67 +288,30,2.8,111.05,1.7,67 +289,30,2.8,111.05,1.7,67 +290,30,2.8,111.05,1.7,67 +291,30,2.8,111.05,1.7,67 +292,30,2.8,111.05,1.7,67 +293,30,2.8,111.05,1.7,67 +294,30,2.8,111.05,1.7,67 +295,30,2.8,111.05,1.7,67 +296,30,2.8,111.05,1.7,67 +297,30,2.8,111.05,1.7,67 +298,30,2.8,111.05,1.7,67 +299,30,2.8,111.05,1.7,67 +300,30,2.7,111.05,1.7,67 +301,30,2.7,111.05,1.7,67 +302,30,2.7,111.05,1.7,67 +303,30,2.7,111.05,1.7,67 +304,30,2.7,111.05,1.7,67 +305,30,2.7,111.05,1.7,67 +306,30,2.7,111.05,1.7,67 +307,30,2.7,111.05,1.7,67 +308,30,2.7,111.05,1.7,67 +309,30,2.7,111.05,1.7,67 +310,30,2.7,111.05,1.7,67 +311,30,2.7,111.05,1.7,67 +312,30,2.7,111.05,1.7,67 +313,30,2.7,111.05,1.7,67 +314,30,2.7,111.05,1.7,67 +315,30,2.7,111.05,1.7,67 +316,30,2.7,111.05,1.7,67 +317,30,2.7,111.05,1.7,67 +318,30,2.7,111.05,1.7,67 +319,30,2.7,111.05,1.7,67 +320,30,2.7,111.05,1.7,67 +321,30,2.7,111.05,1.7,67 +322,30,2.7,111.05,1.7,67 +323,30,2.7,111.05,1.7,67 +324,30,2.7,111.05,1.7,67 +325,30,2.7,111.05,1.7,67 +326,30,2.7,111.05,1.7,67 +327,30,2.7,111.05,1.7,67 +328,30,2.7,111.05,1.7,67 +329,30,2.7,111.05,1.7,67 +330,30,2.7,111.05,1.7,67 +331,30,2.7,111.05,1.7,67 +332,30,2.7,111.05,1.7,67 +333,30,2.7,111.05,1.7,67 +334,30,2.7,111.05,1.7,67 +335,30,2.7,111.05,1.7,67 +336,30,2.7,111.05,1.7,67 +337,30,2.7,111.05,1.7,67 +338,30,2.7,111.05,1.7,67 +339,30,2.7,111.05,1.7,67 +340,30,2.7,111.05,1.7,67 +341,30,2.7,111.05,1.7,67 +342,30,2.7,111.05,1.7,67 +343,30,2.7,111.05,1.7,67 +344,30,2.7,111.05,1.7,67 +345,30,2.7,111.05,1.7,67 +346,30,2.7,111.05,1.7,67 +347,30,2.7,111.05,1.7,67 +348,30,2.7,111.05,1.7,67 +349,30,2.7,111.05,1.7,67 +350,30,2.7,111.05,1.7,67 +351,30,2.7,111.05,1.7,67 +352,30,2.7,111.05,1.7,67 +353,30,2.7,111.05,1.7,67 +354,30,2.7,111.05,1.7,67 +355,30,2.7,111.05,1.7,67 +356,30,2.7,111.05,1.7,67 +357,30,2.7,111.05,1.7,67 +358,30,2.7,111.05,1.7,67 +359,30,2.7,111.05,1.7,67 +360,30,2.7,111.05,1.7,67 +361,30,2.7,111.05,1.7,67 +362,30,2.7,111.05,1.7,67 +363,30,2.7,111.05,1.7,67 +364,30,2.7,111.05,1.7,67 +365,30,2.7,111.05,1.7,67 +366,30,2.7,111.05,1.7,67 +367,30,2.7,111.05,1.7,67 +368,30,2.7,111.05,1.7,67 +369,30,2.7,111.05,1.7,67 +370,30,2.7,111.05,1.7,67 +371,30,2.7,111.05,1.7,67 +372,30,2.7,111.05,1.7,67 +373,30,2.7,111.05,1.7,67 +374,30,2.7,111.05,1.7,67 +375,30,2.7,111.05,1.7,67 +376,30,2.7,111.05,1.7,67 +377,30,2.7,111.05,1.7,67 +378,30,2.7,111.05,1.7,67 +379,30,2.7,111.05,1.7,67 +380,30,2.7,111.05,1.7,67 +381,30,2.7,111.05,1.7,67 +382,30,2.7,111.05,1.7,67 +383,30,2.7,111.05,1.7,67 +384,30,2.7,111.05,1.7,67 +385,30,2.7,111.05,1.7,67 +386,30,2.7,111.05,1.7,67 +387,30,2.7,111.05,1.7,67 +388,30,2.7,111.05,1.7,67 +389,30,2.7,111.05,1.7,67 +390,30,2.7,111.05,1.7,67 +391,30,2.7,111.05,1.7,67 +392,30,2.7,111.05,1.7,67 +393,30,2.7,111.05,1.7,67 +394,30,2.7,111.05,1.7,67 +395,30,2.7,111.05,1.7,67 +396,30,2.7,111.05,1.7,67 +397,30,2.7,111.05,1.7,67 +398,30,2.7,111.05,1.7,67 +399,30,2.7,111.05,1.7,67 +400,30,2.7,111.05,1.7,67 +401,30,2.7,111.05,1.7,66.9975 +402,30,2.7,111.05,1.7,66.995 +403,30,2.7,111.05,1.7,66.9925 +404,30,2.7,111.05,1.7,66.99 +405,30,2.7,111.05,1.7,66.9875 +406,30,2.7,111.05,1.7,66.985 +407,30,2.7,111.05,1.7,66.9825 +408,30,2.7,111.05,1.7,66.98 +409,30,2.7,111.05,1.7,66.9775 +410,30,2.7,111.05,1.7,66.975 +411,30,2.7,111.05,1.7,66.9725 +412,30,2.7,111.05,1.7,66.97 +413,30,2.7,111.05,1.7,66.9675 +414,30,2.7,111.05,1.7,66.965 +415,30,2.7,111.05,1.7,66.9625 +416,30,2.7,111.05,1.7,66.96 +417,30,2.7,111.05,1.7,66.9575 +418,30,2.7,111.05,1.7,66.955 +419,30,2.7,111.05,1.7,66.9525 +420,30,2.7,111.05,1.7,66.95 +421,30,2.7,111.05,1.7,66.9475 +422,30,2.7,111.05,1.7,66.945 +423,30,2.7,111.05,1.7,66.9425 +424,30,2.7,111.05,1.7,66.94 +425,30,2.7,111.05,1.7,66.9375 +426,30,2.7,111.05,1.7,66.935 +427,30,2.7,111.05,1.7,66.9325 +428,30,2.7,111.05,1.7,66.93 +429,30,2.7,111.05,1.7,66.9275 +430,30,2.7,111.05,1.7,66.925 +431,30,2.7,111.05,1.7,66.9225 +432,30,2.7,111.05,1.7,66.92 +433,30,2.7,111.05,1.7,66.9175 +434,30,2.7,111.05,1.7,66.915 +435,30,2.7,111.05,1.7,66.9125 +436,30,2.7,111.05,1.7,66.91 +437,30,2.7,111.05,1.7,66.9075 +438,30,2.7,111.05,1.7,66.905 +439,30,2.7,111.05,1.7,66.9025 +440,30,2.7,111.05,1.7,66.9 +441,30,2.7,111.05,1.7,66.8975 +442,30,2.7,111.05,1.7,66.895 +443,30,2.7,111.05,1.7,66.8925 +444,30,2.7,111.05,1.7,66.89 +445,30,2.7,111.05,1.7,66.8875 +446,30,2.7,111.05,1.7,66.885 +447,30,2.7,111.05,1.7,66.8825 +448,30,2.7,111.05,1.7,66.88 +449,30,2.7,111.05,1.7,66.8775 +450,30,2.7,111.05,1.7,66.875 +451,30,2.7,111.05,1.7,66.8725 +452,30,2.7,111.05,1.7,66.87 +453,30,2.7,111.05,1.7,66.8675 +454,30,2.7,111.05,1.7,66.865 +455,30,2.7,111.05,1.7,66.8625 +456,30,2.7,111.05,1.7,66.86 +457,30,2.7,111.05,1.7,66.8575 +458,30,2.7,111.05,1.7,66.855 +459,30,2.7,111.05,1.7,66.8525 +460,30,2.7,111.05,1.7,66.85 +461,30,2.7,111.05,1.7,66.8475 +462,30,2.7,111.05,1.7,66.845 +463,30,2.7,111.05,1.7,66.8425 +464,30,2.7,111.05,1.7,66.84 +465,30,2.7,111.05,1.7,66.8375 +466,30,2.7,111.05,1.7,66.835 +467,30,2.7,111.05,1.7,66.8325 +468,30,2.7,111.05,1.7,66.83 +469,30,2.7,111.05,1.7,66.8275 +470,30,2.7,111.05,1.7,66.825 +471,30,2.7,111.05,1.7,66.8225 +472,30,2.7,111.05,1.7,66.82 +473,30,2.7,111.05,1.7,66.8175 +474,30,2.7,111.05,1.7,66.815 +475,30,2.7,111.05,1.7,66.8125 +476,30,2.7,111.05,1.7,66.81 +477,30,2.7,111.05,1.7,66.8075 +478,30,2.7,111.05,1.7,66.805 +479,30,2.7,111.05,1.7,66.8025 +480,30,2.7,111.05,1.7,66.8 +481,30,2.7,111.05,1.7,66.7975 +482,30,2.7,111.05,1.7,66.795 +483,30,2.7,111.05,1.7,66.7925 +484,30,2.7,111.05,1.7,66.79 +485,30,2.7,111.05,1.7,66.7875 +486,30,2.7,111.05,1.7,66.785 +487,30,2.7,111.05,1.7,66.7825 +488,30,2.7,111.05,1.7,66.78 +489,30,2.7,111.05,1.7,66.7775 +490,30,2.7,111.05,1.7,66.775 +491,30,2.7,111.05,1.7,66.7725 +492,30,2.7,111.05,1.7,66.77 +493,30,2.7,111.05,1.7,66.7675 +494,30,2.7,111.05,1.7,66.765 +495,30,2.7,111.05,1.7,66.7625 +496,30,2.7,111.05,1.7,66.76 +497,30,2.7,111.05,1.7,66.7575 +498,30,2.7,111.05,1.7,66.755 +499,30,2.7,111.05,1.7,66.7525 +500,30,2.7,111.05,1.7,66.75 +501,30,2.7,111.05,1.7,66.7475 +502,30,2.7,111.05,1.7,66.745 +503,30,2.7,111.05,1.7,66.7425 +504,30,2.7,111.05,1.7,66.74 +505,30,2.7,111.05,1.7,66.7375 +506,30,2.7,111.05,1.7,66.735 +507,30,2.7,111.05,1.7,66.7325 +508,30,2.7,111.05,1.7,66.73 +509,30,2.7,111.05,1.7,66.7275 +510,30,2.7,111.05,1.7,66.725 +511,30,2.7,111.05,1.7,66.7225 +512,30,2.7,111.05,1.7,66.72 +513,30,2.7,111.05,1.7,66.7175 +514,30,2.7,111.05,1.7,66.715 +515,30,2.7,111.05,1.7,66.7125 +516,30,2.7,111.05,1.7,66.71 +517,30,2.7,111.05,1.7,66.7075 +518,30,2.7,111.05,1.7,66.705 +519,30,2.7,111.05,1.7,66.7025 +520,30,2.7,111.05,1.7,66.7 +521,30,2.7,111.05,1.7,66.6975 +522,30,2.7,111.05,1.7,66.695 +523,30,2.7,111.05,1.7,66.6925 +524,30,2.7,111.05,1.7,66.69 +525,30,2.7,111.05,1.7,66.6875 +526,30,2.7,111.05,1.7,66.685 +527,30,2.7,111.05,1.7,66.6825 +528,30,2.7,111.05,1.7,66.68 +529,30,2.7,111.05,1.7,66.6775 +530,30,2.7,111.05,1.7,66.675 +531,30,2.7,111.05,1.7,66.6725 +532,30,2.7,111.05,1.7,66.67 +533,30,2.7,111.05,1.7,66.6675 +534,30,2.7,111.05,1.7,66.665 +535,30,2.7,111.05,1.7,66.6625 +536,30,2.7,111.05,1.7,66.66 +537,30,2.7,111.05,1.7,66.6575 +538,30,2.7,111.05,1.7,66.655 +539,30,2.7,111.05,1.7,66.6525 +540,30,2.7,111.05,1.7,66.65 +541,30,2.7,111.05,1.7,66.6475 +542,30,2.7,111.05,1.7,66.645 +543,30,2.7,111.05,1.7,66.6425 +544,30,2.7,111.05,1.7,66.64 +545,30,2.7,111.05,1.7,66.6375 +546,30,2.7,111.05,1.7,66.635 +547,30,2.7,111.05,1.7,66.6325 +548,30,2.7,111.05,1.7,66.63 +549,30,2.7,111.05,1.7,66.6275 +550,30,2.7,111.05,1.7,66.625 +551,30,2.7,111.05,1.7,66.6225 +552,30,2.7,111.05,1.7,66.62 +553,30,2.7,111.05,1.7,66.6175 +554,30,2.7,111.05,1.7,66.615 +555,30,2.7,111.05,1.7,66.6125 +556,30,2.7,111.05,1.7,66.61 +557,30,2.7,111.05,1.7,66.6075 +558,30,2.7,111.05,1.7,66.605 +559,30,2.7,111.05,1.7,66.6025 +560,30,2.7,111.05,1.7,66.6 +561,30,2.7,111.05,1.7,66.5975 +562,30,2.7,111.05,1.7,66.595 +563,30,2.7,111.05,1.7,66.5925 +564,30,2.7,111.05,1.7,66.59 +565,30,2.7,111.05,1.7,66.5875 +566,30,2.7,111.05,1.7,66.585 +567,30,2.7,111.05,1.7,66.5825 +568,30,2.7,111.05,1.7,66.58 +569,30,2.7,111.05,1.7,66.5775 +570,30,2.7,111.05,1.7,66.575 +571,30,2.7,111.05,1.7,66.5725 +572,30,2.7,111.05,1.7,66.57 +573,30,2.7,111.05,1.7,66.5675 +574,30,2.7,111.05,1.7,66.565 +575,30,2.7,111.05,1.7,66.5625 +576,30,2.7,111.05,1.7,66.56 +577,30,2.7,111.05,1.7,66.5575 +578,30,2.7,111.05,1.7,66.555 +579,30,2.7,111.05,1.7,66.5525 +580,30,2.7,111.05,1.7,66.55 +581,30,2.7,111.05,1.7,66.5475 +582,30,2.7,111.05,1.7,66.545 +583,30,2.7,111.05,1.7,66.5425 +584,30,2.7,111.05,1.7,66.54 +585,30,2.7,111.05,1.7,66.5375 +586,30,2.7,111.05,1.7,66.535 +587,30,2.7,111.05,1.7,66.5325 +588,30,2.7,111.05,1.7,66.53 +589,30,2.7,111.05,1.7,66.5275 +590,30,2.7,111.05,1.7,66.525 +591,30,2.7,111.05,1.7,66.5225 +592,30,2.7,111.05,1.7,66.52 +593,30,2.7,111.05,1.7,66.5175 +594,30,2.7,111.05,1.7,66.515 +595,30,2.7,111.05,1.7,66.5125 +596,30,2.7,111.05,1.7,66.51 +597,30,2.7,111.05,1.7,66.5075 +598,30,2.7,111.05,1.7,66.505 +599,30,2.7,111.05,1.7,66.5025 +600,30,2.7,111.05,1.7,66.5 +601,30,2.7,111.05,1.7,66.495 +602,30,2.7,111.05,1.7,66.49 +603,30,2.7,111.05,1.7,66.485 +604,30,2.7,111.05,1.7,66.48 +605,30,2.7,111.05,1.7,66.475 +606,30,2.7,111.05,1.7,66.47 +607,30,2.7,111.05,1.7,66.465 +608,30,2.7,111.05,1.7,66.46 +609,30,2.7,111.05,1.7,66.455 +610,30,2.7,111.05,1.7,66.45 +611,30,2.7,111.05,1.7,66.445 +612,30,2.7,111.05,1.7,66.44 +613,30,2.7,111.05,1.7,66.435 +614,30,2.7,111.05,1.7,66.43 +615,30,2.7,111.05,1.7,66.425 +616,30,2.7,111.05,1.7,66.42 +617,30,2.7,111.05,1.7,66.415 +618,30,2.7,111.05,1.7,66.41 +619,30,2.7,111.05,1.7,66.405 +620,30,2.7,111.05,1.7,66.4 +621,30,2.7,111.05,1.7,66.395 +622,30,2.7,111.05,1.7,66.39 +623,30,2.7,111.05,1.7,66.385 +624,30,2.7,111.05,1.7,66.38 +625,30,2.7,111.05,1.7,66.375 +626,30,2.7,111.05,1.7,66.37 +627,30,2.7,111.05,1.7,66.365 +628,30,2.7,111.05,1.7,66.36 +629,30,2.7,111.05,1.7,66.355 +630,30,2.7,111.05,1.7,66.35 +631,30,2.7,111.05,1.7,66.345 +632,30,2.7,111.05,1.7,66.34 +633,30,2.7,111.05,1.7,66.335 +634,30,2.7,111.05,1.7,66.33 +635,30,2.7,111.05,1.7,66.325 +636,30,2.7,111.05,1.7,66.32 +637,30,2.7,111.05,1.7,66.315 +638,30,2.7,111.05,1.7,66.31 +639,30,2.7,111.05,1.7,66.305 +640,30,2.7,111.05,1.7,66.3 +641,30,2.7,111.05,1.7,66.295 +642,30,2.7,111.05,1.7,66.29 +643,30,2.7,111.05,1.7,66.285 +644,30,2.7,111.05,1.7,66.28 +645,30,2.7,111.05,1.7,66.275 +646,30,2.7,111.05,1.7,66.27 +647,30,2.7,111.05,1.7,66.265 +648,30,2.7,111.05,1.7,66.26 +649,30,2.7,111.05,1.7,66.255 +650,30,2.7,111.05,1.7,66.25 +651,30,2.7,111.05,1.7,66.245 +652,30,2.7,111.05,1.7,66.24 +653,30,2.7,111.05,1.7,66.235 +654,30,2.7,111.05,1.7,66.23 +655,30,2.7,111.05,1.7,66.225 +656,30,2.7,111.05,1.7,66.22 +657,30,2.7,111.05,1.7,66.215 +658,30,2.7,111.05,1.7,66.21 +659,30,2.7,111.05,1.7,66.205 +660,30,2.7,111.05,1.7,66.2 +661,30,2.7,111.05,1.7,66.195 +662,30,2.7,111.05,1.7,66.19 +663,30,2.7,111.05,1.7,66.185 +664,30,2.7,111.05,1.7,66.18 +665,30,2.7,111.05,1.7,66.175 +666,30,2.7,111.05,1.7,66.17 +667,30,2.7,111.05,1.7,66.165 +668,30,2.7,111.05,1.7,66.16 +669,30,2.7,111.05,1.7,66.155 +670,30,2.7,111.05,1.7,66.15 +671,30,2.7,111.05,1.7,66.145 +672,30,2.7,111.05,1.7,66.14 +673,30,2.7,111.05,1.7,66.135 +674,30,2.7,111.05,1.7,66.13 +675,30,2.7,111.05,1.7,66.125 +676,30,2.7,111.05,1.7,66.12 +677,30,2.7,111.05,1.7,66.115 +678,30,2.7,111.05,1.7,66.11 +679,30,2.7,111.05,1.7,66.105 +680,30,2.7,111.05,1.7,66.1 +681,30,2.7,111.05,1.7,66.095 +682,30,2.7,111.05,1.7,66.09 +683,30,2.7,111.05,1.7,66.085 +684,30,2.7,111.05,1.7,66.08 +685,30,2.7,111.05,1.7,66.075 +686,30,2.7,111.05,1.7,66.07 +687,30,2.7,111.05,1.7,66.065 +688,30,2.7,111.05,1.7,66.06 +689,30,2.7,111.05,1.7,66.055 +690,30,2.7,111.05,1.7,66.05 +691,30,2.7,111.05,1.7,66.045 +692,30,2.7,111.05,1.7,66.04 +693,30,2.7,111.05,1.7,66.035 +694,30,2.7,111.05,1.7,66.03 +695,30,2.7,111.05,1.7,66.025 +696,30,2.7,111.05,1.7,66.02 +697,30,2.7,111.05,1.7,66.015 +698,30,2.7,111.05,1.7,66.01 +699,30,2.7,111.05,1.7,66.005 +700,30,2.7,111.05,1.7,66 +701,30,2.7,111.05,1.7,65.995 +702,30,2.7,111.05,1.7,65.99 +703,30,2.7,111.05,1.7,65.985 +704,30,2.7,111.05,1.7,65.98 +705,30,2.7,111.05,1.7,65.975 +706,30,2.7,111.05,1.7,65.97 +707,30,2.7,111.05,1.7,65.965 +708,30,2.7,111.05,1.7,65.96 +709,30,2.7,111.05,1.7,65.955 +710,30,2.7,111.05,1.7,65.95 +711,30,2.7,111.05,1.7,65.945 +712,30,2.7,111.05,1.7,65.94 +713,30,2.7,111.05,1.7,65.935 +714,30,2.7,111.05,1.7,65.93 +715,30,2.7,111.05,1.7,65.925 +716,30,2.7,111.05,1.7,65.92 +717,30,2.7,111.05,1.7,65.915 +718,30,2.7,111.05,1.7,65.91 +719,30,2.7,111.05,1.7,65.905 +720,30,2.7,111.05,1.7,65.9 +721,30,2.7,111.05,1.7,65.895 +722,30,2.7,111.05,1.7,65.89 +723,30,2.7,111.05,1.7,65.885 +724,30,2.7,111.05,1.7,65.88 +725,30,2.7,111.05,1.7,65.875 +726,30,2.7,111.05,1.7,65.87 +727,30,2.7,111.05,1.7,65.865 +728,30,2.7,111.05,1.7,65.86 +729,30,2.7,111.05,1.7,65.855 +730,30,2.7,111.05,1.7,65.85 +731,30,2.7,111.05,1.7,65.845 +732,30,2.7,111.05,1.7,65.84 +733,30,2.7,111.05,1.7,65.835 +734,30,2.7,111.05,1.7,65.83 +735,30,2.7,111.05,1.7,65.825 +736,30,2.7,111.05,1.7,65.82 +737,30,2.7,111.05,1.7,65.815 +738,30,2.7,111.05,1.7,65.81 +739,30,2.7,111.05,1.7,65.805 +740,30,2.7,111.05,1.7,65.8 +741,30,2.7,111.05,1.7,65.795 +742,30,2.7,111.05,1.7,65.79 +743,30,2.7,111.05,1.7,65.785 +744,30,2.7,111.05,1.7,65.78 +745,30,2.7,111.05,1.7,65.775 +746,30,2.7,111.05,1.7,65.77 +747,30,2.7,111.05,1.7,65.765 +748,30,2.7,111.05,1.7,65.76 +749,30,2.7,111.05,1.7,65.755 +750,30,2.7,111.05,1.7,65.75 +751,30,2.7,111.05,1.7,65.745 +752,30,2.7,111.05,1.7,65.74 +753,30,2.7,111.05,1.7,65.735 +754,30,2.7,111.05,1.7,65.73 +755,30,2.7,111.05,1.7,65.725 +756,30,2.7,111.05,1.7,65.72 +757,30,2.7,111.05,1.7,65.715 +758,30,2.7,111.05,1.7,65.71 +759,30,2.7,111.05,1.7,65.705 +760,30,2.7,111.05,1.7,65.7 +761,30,2.7,111.05,1.7,65.695 +762,30,2.7,111.05,1.7,65.69 +763,30,2.7,111.05,1.7,65.685 +764,30,2.7,111.05,1.7,65.68 +765,30,2.7,111.05,1.7,65.675 +766,30,2.7,111.05,1.7,65.67 +767,30,2.7,111.05,1.7,65.665 +768,30,2.7,111.05,1.7,65.66 +769,30,2.7,111.05,1.7,65.655 +770,30,2.7,111.05,1.7,65.65 +771,30,2.7,111.05,1.7,65.645 +772,30,2.7,111.05,1.7,65.64 +773,30,2.7,111.05,1.7,65.635 +774,30,2.7,111.05,1.7,65.63 +775,30,2.7,111.05,1.7,65.625 +776,30,2.7,111.05,1.7,65.62 +777,30,2.7,111.05,1.7,65.615 +778,30,2.7,111.05,1.7,65.61 +779,30,2.7,111.05,1.7,65.605 +780,30,2.7,111.05,1.7,65.6 +781,30,2.7,111.05,1.7,65.595 +782,30,2.7,111.05,1.7,65.59 +783,30,2.7,111.05,1.7,65.585 +784,30,2.7,111.05,1.7,65.58 +785,30,2.7,111.05,1.7,65.575 +786,30,2.7,111.05,1.7,65.57 +787,30,2.7,111.05,1.7,65.565 +788,30,2.7,111.05,1.7,65.56 +789,30,2.7,111.05,1.7,65.555 +790,30,2.7,111.05,1.7,65.55 +791,30,2.7,111.05,1.7,65.545 +792,30,2.7,111.05,1.7,65.54 +793,30,2.7,111.05,1.7,65.535 +794,30,2.7,111.05,1.7,65.53 +795,30,2.7,111.05,1.7,65.525 +796,30,2.7,111.05,1.7,65.52 +797,30,2.7,111.05,1.7,65.515 +798,30,2.7,111.05,1.7,65.51 +799,30,2.7,111.05,1.7,65.505 +800,30,2.7,111.05,1.7,65.5 +801,30,2.7,111.05,1.7,65.495 +802,30,2.7,111.05,1.7,65.49 +803,30,2.7,111.05,1.7,65.485 +804,30,2.7,111.05,1.7,65.48 +805,30,2.7,111.05,1.7,65.475 +806,30,2.7,111.05,1.7,65.47 +807,30,2.7,111.05,1.7,65.465 +808,30,2.7,111.05,1.7,65.46 +809,30,2.7,111.05,1.7,65.455 +810,30,2.7,111.05,1.7,65.45 +811,30,2.7,111.05,1.7,65.445 +812,30,2.7,111.05,1.7,65.44 +813,30,2.7,111.05,1.7,65.435 +814,30,2.7,111.05,1.7,65.43 +815,30,2.7,111.05,1.7,65.425 +816,30,2.7,111.05,1.7,65.42 +817,30,2.7,111.05,1.7,65.415 +818,30,2.7,111.05,1.7,65.41 +819,30,2.7,111.05,1.7,65.405 +820,30,2.7,111.05,1.7,65.4 +821,30,2.7,111.05,1.7,65.395 +822,30,2.7,111.05,1.7,65.39 +823,30,2.7,111.05,1.7,65.385 +824,30,2.7,111.05,1.7,65.38 +825,30,2.7,111.05,1.7,65.375 +826,30,2.7,111.05,1.7,65.37 +827,30,2.7,111.05,1.7,65.365 +828,30,2.7,111.05,1.7,65.36 +829,30,2.7,111.05,1.7,65.355 +830,30,2.7,111.05,1.7,65.35 +831,30,2.7,111.05,1.7,65.345 +832,30,2.7,111.05,1.7,65.34 +833,30,2.7,111.05,1.7,65.335 +834,30,2.7,111.05,1.7,65.33 +835,30,2.7,111.05,1.7,65.325 +836,30,2.7,111.05,1.7,65.32 +837,30,2.7,111.05,1.7,65.315 +838,30,2.7,111.05,1.7,65.31 +839,30,2.7,111.05,1.7,65.305 +840,30,2.7,111.05,1.7,65.3 +841,30,2.7,111.05,1.7,65.295 +842,30,2.7,111.05,1.7,65.29 +843,30,2.7,111.05,1.7,65.285 +844,30,2.7,111.05,1.7,65.28 +845,30,2.7,111.05,1.7,65.275 +846,30,2.7,111.05,1.7,65.27 +847,30,2.7,111.05,1.7,65.265 +848,30,2.7,111.05,1.7,65.26 +849,30,2.7,111.05,1.7,65.255 +850,30,2.7,111.05,1.7,65.25 +851,30,2.7,111.05,1.7,65.245 +852,30,2.7,111.05,1.7,65.24 +853,30,2.7,111.05,1.7,65.235 +854,30,2.7,111.05,1.7,65.23 +855,30,2.7,111.05,1.7,65.225 +856,30,2.7,111.05,1.7,65.22 +857,30,2.7,111.05,1.7,65.215 +858,30,2.7,111.05,1.7,65.21 +859,30,2.7,111.05,1.7,65.205 +860,30,2.7,111.05,1.7,65.2 +861,30,2.7,111.05,1.7,65.195 +862,30,2.7,111.05,1.7,65.19 +863,30,2.7,111.05,1.7,65.185 +864,30,2.7,111.05,1.7,65.18 +865,30,2.7,111.05,1.7,65.175 +866,30,2.7,111.05,1.7,65.17 +867,30,2.7,111.05,1.7,65.165 +868,30,2.7,111.05,1.7,65.16 +869,30,2.7,111.05,1.7,65.155 +870,30,2.7,111.05,1.7,65.15 +871,30,2.7,111.05,1.7,65.145 +872,30,2.7,111.05,1.7,65.14 +873,30,2.7,111.05,1.7,65.135 +874,30,2.7,111.05,1.7,65.13 +875,30,2.7,111.05,1.7,65.125 +876,30,2.7,111.05,1.7,65.12 +877,30,2.7,111.05,1.7,65.115 +878,30,2.7,111.05,1.7,65.11 +879,30,2.7,111.05,1.7,65.105 +880,30,2.7,111.05,1.7,65.1 +881,30,2.7,111.05,1.7,65.095 +882,30,2.7,111.05,1.7,65.09 +883,30,2.7,111.05,1.7,65.085 +884,30,2.7,111.05,1.7,65.08 +885,30,2.7,111.05,1.7,65.075 +886,30,2.7,111.05,1.7,65.07 +887,30,2.7,111.05,1.7,65.065 +888,30,2.7,111.05,1.7,65.06 +889,30,2.7,111.05,1.7,65.055 +890,30,2.7,111.05,1.7,65.05 +891,30,2.7,111.05,1.7,65.045 +892,30,2.7,111.05,1.7,65.04 +893,30,2.7,111.05,1.7,65.035 +894,30,2.7,111.05,1.7,65.03 +895,30,2.7,111.05,1.7,65.025 +896,30,2.7,111.05,1.7,65.02 +897,30,2.7,111.05,1.7,65.015 +898,30,2.7,111.05,1.7,65.01 +899,30,2.7,111.05,1.7,65.005 +900,30,2.7,111.05,1.7,65 +901,30,2.7,111.05,1.7,64.99833333 +902,30,2.7,111.05,1.7,64.99666667 +903,30,2.7,111.05,1.7,64.995 +904,30,2.7,111.05,1.7,64.99333333 +905,30,2.7,111.05,1.7,64.99166667 +906,30,2.7,111.05,1.7,64.99 +907,30,2.7,111.05,1.7,64.98833333 +908,30,2.7,111.05,1.7,64.98666667 +909,30,2.7,111.05,1.7,64.985 +910,30,2.7,111.05,1.7,64.98333333 +911,30,2.7,111.05,1.7,64.98166667 +912,30,2.7,111.05,1.7,64.98 +913,30,2.7,111.05,1.7,64.97833333 +914,30,2.7,111.05,1.7,64.97666667 +915,30,2.7,111.05,1.7,64.975 +916,30,2.7,111.05,1.7,64.97333333 +917,30,2.7,111.05,1.7,64.97166667 +918,30,2.7,111.05,1.7,64.97 +919,30,2.7,111.05,1.7,64.96833333 +920,30,2.7,111.05,1.7,64.96666667 +921,30,2.7,111.05,1.7,64.965 +922,30,2.7,111.05,1.7,64.96333333 +923,30,2.7,111.05,1.7,64.96166667 +924,30,2.7,111.05,1.7,64.96 +925,30,2.7,111.05,1.7,64.95833333 +926,30,2.7,111.05,1.7,64.95666667 +927,30,2.7,111.05,1.7,64.955 +928,30,2.7,111.05,1.7,64.95333333 +929,30,2.7,111.05,1.7,64.95166667 +930,30,2.7,111.05,1.7,64.95 +931,30,2.7,111.05,1.7,64.94833333 +932,30,2.7,111.05,1.7,64.94666667 +933,30,2.7,111.05,1.7,64.945 +934,30,2.7,111.05,1.7,64.94333333 +935,30,2.7,111.05,1.7,64.94166667 +936,30,2.7,111.05,1.7,64.94 +937,30,2.7,111.05,1.7,64.93833333 +938,30,2.7,111.05,1.7,64.93666667 +939,30,2.7,111.05,1.7,64.935 +940,30,2.7,111.05,1.7,64.93333333 +941,30,2.7,111.05,1.7,64.93166667 +942,30,2.7,111.05,1.7,64.93 +943,30,2.7,111.05,1.7,64.92833333 +944,30,2.7,111.05,1.7,64.92666667 +945,30,2.7,111.05,1.7,64.925 +946,30,2.7,111.05,1.7,64.92333333 +947,30,2.7,111.05,1.7,64.92166667 +948,30,2.7,111.05,1.7,64.92 +949,30,2.7,111.05,1.7,64.91833333 +950,30,2.7,111.05,1.7,64.91666667 +951,30,2.7,111.05,1.7,64.915 +952,30,2.7,111.05,1.7,64.91333333 +953,30,2.7,111.05,1.7,64.91166666 +954,30,2.7,111.05,1.7,64.91 +955,30,2.7,111.05,1.7,64.90833333 +956,30,2.7,111.05,1.7,64.90666666 +957,30,2.7,111.05,1.7,64.905 +958,30,2.7,111.05,1.7,64.90333333 +959,30,2.7,111.05,1.7,64.90166666 +960,30,2.7,111.05,1.7,64.9 +961,30,2.7,111.05,1.7,64.89833333 +962,30,2.7,111.05,1.7,64.89666666 +963,30,2.7,111.05,1.7,64.895 +964,30,2.7,111.05,1.7,64.89333333 +965,30,2.7,111.05,1.7,64.89166666 +966,30,2.7,111.05,1.7,64.89 +967,30,2.7,111.05,1.7,64.88833333 +968,30,2.7,111.05,1.7,64.88666666 +969,30,2.7,111.05,1.7,64.885 +970,30,2.7,111.05,1.7,64.88333333 +971,30,2.7,111.05,1.7,64.88166666 +972,30,2.7,111.05,1.7,64.88 +973,30,2.7,111.05,1.7,64.87833333 +974,30,2.7,111.05,1.7,64.87666666 +975,30,2.7,111.05,1.7,64.875 +976,30,2.7,111.05,1.7,64.87333333 +977,30,2.7,111.05,1.7,64.87166666 +978,30,2.7,111.05,1.7,64.87 +979,30,2.7,111.05,1.7,64.86833333 +980,30,2.7,111.05,1.7,64.86666666 +981,30,2.7,111.05,1.7,64.865 +982,30,2.7,111.05,1.7,64.86333333 +983,30,2.7,111.05,1.7,64.86166666 +984,30,2.7,111.05,1.7,64.86 +985,30,2.7,111.05,1.7,64.85833333 +986,30,2.7,111.05,1.7,64.85666666 +987,30,2.7,111.05,1.7,64.855 +988,30,2.7,111.05,1.7,64.85333333 +989,30,2.7,111.05,1.7,64.85166666 +990,30,2.7,111.05,1.7,64.85 +991,30,2.7,111.05,1.7,64.84833333 +992,30,2.7,111.05,1.7,64.84666666 +993,30,2.7,111.05,1.7,64.845 +994,30,2.7,111.05,1.7,64.84333333 +995,30,2.7,111.05,1.7,64.84166666 +996,30,2.7,111.05,1.7,64.84 +997,30,2.7,111.05,1.7,64.83833333 +998,30,2.7,111.05,1.7,64.83666666 +999,30,2.7,111.05,1.7,64.835 +1000,30,2.7,111.05,1.7,64.83333333 +1001,30,2.7,111.05,1.7,64.83166666 +1002,30,2.7,111.05,1.7,64.83 +1003,30,2.7,111.05,1.7,64.82833333 +1004,30,2.7,111.05,1.7,64.82666666 +1005,30,2.7,111.05,1.7,64.825 +1006,30,2.7,111.05,1.7,64.82333333 +1007,30,2.7,111.05,1.7,64.82166666 +1008,30,2.7,111.05,1.7,64.82 +1009,30,2.7,111.05,1.7,64.81833333 +1010,30,2.7,111.05,1.7,64.81666666 +1011,30,2.7,111.05,1.7,64.815 +1012,30,2.7,111.05,1.7,64.81333333 +1013,30,2.7,111.05,1.7,64.81166666 +1014,30,2.7,111.05,1.7,64.81 +1015,30,2.7,111.05,1.7,64.80833333 +1016,30,2.7,111.05,1.7,64.80666666 +1017,30,2.7,111.05,1.7,64.805 +1018,30,2.7,111.05,1.7,64.80333333 +1019,30,2.7,111.05,1.7,64.80166666 +1020,30,2.7,111.05,1.7,64.8 +1021,30,2.7,111.05,1.7,64.79833333 +1022,30,2.7,111.05,1.7,64.79666666 +1023,30,2.7,111.05,1.7,64.795 +1024,30,2.7,111.05,1.7,64.79333333 +1025,30,2.7,111.05,1.7,64.79166666 +1026,30,2.7,111.05,1.7,64.79 +1027,30,2.7,111.05,1.7,64.78833333 +1028,30,2.7,111.05,1.7,64.78666666 +1029,30,2.7,111.05,1.7,64.785 +1030,30,2.7,111.05,1.7,64.78333333 +1031,30,2.7,111.05,1.7,64.78166666 +1032,30,2.7,111.05,1.7,64.78 +1033,30,2.7,111.05,1.7,64.77833333 +1034,30,2.7,111.05,1.7,64.77666666 +1035,30,2.7,111.05,1.7,64.775 +1036,30,2.7,111.05,1.7,64.77333333 +1037,30,2.7,111.05,1.7,64.77166666 +1038,30,2.7,111.05,1.7,64.77 +1039,30,2.7,111.05,1.7,64.76833333 +1040,30,2.7,111.05,1.7,64.76666666 +1041,30,2.7,111.05,1.7,64.765 +1042,30,2.7,111.05,1.7,64.76333333 +1043,30,2.7,111.05,1.7,64.76166666 +1044,30,2.7,111.05,1.7,64.76 +1045,30,2.7,111.05,1.7,64.75833333 +1046,30,2.7,111.05,1.7,64.75666666 +1047,30,2.7,111.05,1.7,64.755 +1048,30,2.7,111.05,1.7,64.75333333 +1049,30,2.7,111.05,1.7,64.75166666 +1050,30,2.7,111.05,1.7,64.75 +1051,30,2.7,111.05,1.7,64.74833333 +1052,30,2.7,111.05,1.7,64.74666666 +1053,30,2.7,111.05,1.7,64.74499999 +1054,30,2.7,111.05,1.7,64.74333333 +1055,30,2.7,111.05,1.7,64.74166666 +1056,30,2.7,111.05,1.7,64.73999999 +1057,30,2.7,111.05,1.7,64.73833333 +1058,30,2.7,111.05,1.7,64.73666666 +1059,30,2.7,111.05,1.7,64.73499999 +1060,30,2.7,111.05,1.7,64.73333333 +1061,30,2.7,111.05,1.7,64.73166666 +1062,30,2.7,111.05,1.7,64.72999999 +1063,30,2.7,111.05,1.7,64.72833333 +1064,30,2.7,111.05,1.7,64.72666666 +1065,30,2.7,111.05,1.7,64.72499999 +1066,30,2.7,111.05,1.7,64.72333333 +1067,30,2.7,111.05,1.7,64.72166666 +1068,30,2.7,111.05,1.7,64.71999999 +1069,30,2.7,111.05,1.7,64.71833333 +1070,30,2.7,111.05,1.7,64.71666666 +1071,30,2.7,111.05,1.7,64.71499999 +1072,30,2.7,111.05,1.7,64.71333333 +1073,30,2.7,111.05,1.7,64.71166666 +1074,30,2.7,111.05,1.7,64.70999999 +1075,30,2.7,111.05,1.7,64.70833333 +1076,30,2.7,111.05,1.7,64.70666666 +1077,30,2.7,111.05,1.7,64.70499999 +1078,30,2.7,111.05,1.7,64.70333333 +1079,30,2.7,111.05,1.7,64.70166666 +1080,30,2.7,111.05,1.7,64.69999999 +1081,30,2.7,111.05,1.7,64.69833333 +1082,30,2.7,111.05,1.7,64.69666666 +1083,30,2.7,111.05,1.7,64.69499999 +1084,30,2.7,111.05,1.7,64.69333333 +1085,30,2.7,111.05,1.7,64.69166666 +1086,30,2.7,111.05,1.7,64.68999999 +1087,30,2.7,111.05,1.7,64.68833333 +1088,30,2.7,111.05,1.7,64.68666666 +1089,30,2.7,111.05,1.7,64.68499999 +1090,30,2.7,111.05,1.7,64.68333333 +1091,30,2.7,111.05,1.7,64.68166666 +1092,30,2.7,111.05,1.7,64.67999999 +1093,30,2.7,111.05,1.7,64.67833333 +1094,30,2.7,111.05,1.7,64.67666666 +1095,30,2.7,111.05,1.7,64.67499999 +1096,30,2.7,111.05,1.7,64.67333333 +1097,30,2.7,111.05,1.7,64.67166666 +1098,30,2.7,111.05,1.7,64.66999999 +1099,30,2.7,111.05,1.7,64.66833333 +1100,30,2.7,111.05,1.7,64.66666666 +1101,30,2.7,111.05,1.7,64.66499999 +1102,30,2.7,111.05,1.7,64.66333333 +1103,30,2.7,111.05,1.7,64.66166666 +1104,30,2.7,111.05,1.7,64.65999999 +1105,30,2.7,111.05,1.7,64.65833333 +1106,30,2.7,111.05,1.7,64.65666666 +1107,30,2.7,111.05,1.7,64.65499999 +1108,30,2.7,111.05,1.7,64.65333333 +1109,30,2.7,111.05,1.7,64.65166666 +1110,30,2.7,111.05,1.7,64.64999999 +1111,30,2.7,111.05,1.7,64.64833333 +1112,30,2.7,111.05,1.7,64.64666666 +1113,30,2.7,111.05,1.7,64.64499999 +1114,30,2.7,111.05,1.7,64.64333333 +1115,30,2.7,111.05,1.7,64.64166666 +1116,30,2.7,111.05,1.7,64.63999999 +1117,30,2.7,111.05,1.7,64.63833333 +1118,30,2.7,111.05,1.7,64.63666666 +1119,30,2.7,111.05,1.7,64.63499999 +1120,30,2.7,111.05,1.7,64.63333333 +1121,30,2.7,111.05,1.7,64.63166666 +1122,30,2.7,111.05,1.7,64.62999999 +1123,30,2.7,111.05,1.7,64.62833333 +1124,30,2.7,111.05,1.7,64.62666666 +1125,30,2.7,111.05,1.7,64.62499999 +1126,30,2.7,111.05,1.7,64.62333333 +1127,30,2.7,111.05,1.7,64.62166666 +1128,30,2.7,111.05,1.7,64.61999999 +1129,30,2.7,111.05,1.7,64.61833333 +1130,30,2.7,111.05,1.7,64.61666666 +1131,30,2.7,111.05,1.7,64.61499999 +1132,30,2.7,111.05,1.7,64.61333333 +1133,30,2.7,111.05,1.7,64.61166666 +1134,30,2.7,111.05,1.7,64.60999999 +1135,30,2.7,111.05,1.7,64.60833333 +1136,30,2.7,111.05,1.7,64.60666666 +1137,30,2.7,111.05,1.7,64.60499999 +1138,30,2.7,111.05,1.7,64.60333333 +1139,30,2.7,111.05,1.7,64.60166666 +1140,30,2.7,111.05,1.7,64.59999999 +1141,30,2.7,111.05,1.7,64.59833333 +1142,30,2.7,111.05,1.7,64.59666666 +1143,30,2.7,111.05,1.7,64.59499999 +1144,30,2.7,111.05,1.7,64.59333333 +1145,30,2.7,111.05,1.7,64.59166666 +1146,30,2.7,111.05,1.7,64.58999999 +1147,30,2.7,111.05,1.7,64.58833333 +1148,30,2.7,111.05,1.7,64.58666666 +1149,30,2.7,111.05,1.7,64.58499999 +1150,30,2.7,111.05,1.7,64.58333333 +1151,30,2.7,111.05,1.7,64.58166666 +1152,30,2.7,111.05,1.7,64.57999999 +1153,30,2.7,111.05,1.7,64.57833332 +1154,30,2.7,111.05,1.7,64.57666666 +1155,30,2.7,111.05,1.7,64.57499999 +1156,30,2.7,111.05,1.7,64.57333332 +1157,30,2.7,111.05,1.7,64.57166666 +1158,30,2.7,111.05,1.7,64.56999999 +1159,30,2.7,111.05,1.7,64.56833332 +1160,30,2.7,111.05,1.7,64.56666666 +1161,30,2.7,111.05,1.7,64.56499999 +1162,30,2.7,111.05,1.7,64.56333332 +1163,30,2.7,111.05,1.7,64.56166666 +1164,30,2.7,111.05,1.7,64.55999999 +1165,30,2.7,111.05,1.7,64.55833332 +1166,30,2.7,111.05,1.7,64.55666666 +1167,30,2.7,111.05,1.7,64.55499999 +1168,30,2.7,111.05,1.7,64.55333332 +1169,30,2.7,111.05,1.7,64.55166666 +1170,30,2.7,111.05,1.7,64.54999999 +1171,30,2.7,111.05,1.7,64.54833332 +1172,30,2.7,111.05,1.7,64.54666666 +1173,30,2.7,111.05,1.7,64.54499999 +1174,30,2.7,111.05,1.7,64.54333332 +1175,30,2.7,111.05,1.7,64.54166666 +1176,30,2.7,111.05,1.7,64.53999999 +1177,30,2.7,111.05,1.7,64.53833332 +1178,30,2.7,111.05,1.7,64.53666666 +1179,30,2.7,111.05,1.7,64.53499999 +1180,30,2.7,111.05,1.7,64.53333332 +1181,30,2.7,111.05,1.7,64.53166666 +1182,30,2.7,111.05,1.7,64.52999999 +1183,30,2.7,111.05,1.7,64.52833332 +1184,30,2.7,111.05,1.7,64.52666666 +1185,30,2.7,111.05,1.7,64.52499999 +1186,30,2.7,111.05,1.7,64.52333332 +1187,30,2.7,111.05,1.7,64.52166666 +1188,30,2.7,111.05,1.7,64.51999999 +1189,30,2.7,111.05,1.7,64.51833332 +1190,30,2.7,111.05,1.7,64.51666666 +1191,30,2.7,111.05,1.7,64.51499999 +1192,30,2.7,111.05,1.7,64.51333332 +1193,30,2.7,111.05,1.7,64.51166666 +1194,30,2.7,111.05,1.7,64.50999999 +1195,30,2.7,111.05,1.7,64.50833332 +1196,30,2.7,111.05,1.7,64.50666666 +1197,30,2.7,111.05,1.7,64.50499999 +1198,30,2.7,111.05,1.7,64.50333332 +1199,30,2.7,111.05,1.7,64.50166666 +1200,30,2.7,111.05,1.7,64.5 +1201,30,2.7,111.05,1.7,64.499375 +1202,30,2.7,111.05,1.7,64.49875 +1203,30,2.7,111.05,1.7,64.498125 +1204,30,2.7,111.05,1.7,64.4975 +1205,30,2.7,111.05,1.7,64.496875 +1206,30,2.7,111.05,1.7,64.49625 +1207,30,2.7,111.05,1.7,64.495625 +1208,30,2.7,111.05,1.7,64.495 +1209,30,2.7,111.05,1.7,64.494375 +1210,30,2.7,111.05,1.7,64.49375 +1211,30,2.7,111.05,1.7,64.493125 +1212,30,2.7,111.05,1.7,64.4925 +1213,30,2.7,111.05,1.7,64.491875 +1214,30,2.7,111.05,1.7,64.49125 +1215,30,2.7,111.05,1.7,64.490625 +1216,30,2.7,111.05,1.7,64.49 +1217,30,2.7,111.05,1.7,64.489375 +1218,30,2.7,111.05,1.7,64.48875 +1219,30,2.7,111.05,1.7,64.488125 +1220,30,2.7,111.05,1.7,64.4875 +1221,30,2.7,111.05,1.7,64.486875 +1222,30,2.7,111.05,1.7,64.48625 +1223,30,2.7,111.05,1.7,64.485625 +1224,30,2.7,111.05,1.7,64.485 +1225,30,2.7,111.05,1.7,64.484375 +1226,30,2.7,111.05,1.7,64.48375 +1227,30,2.7,111.05,1.7,64.483125 +1228,30,2.7,111.05,1.7,64.4825 +1229,30,2.7,111.05,1.7,64.481875 +1230,30,2.7,111.05,1.7,64.48125 +1231,30,2.7,111.05,1.7,64.480625 +1232,30,2.7,111.05,1.7,64.48 +1233,30,2.7,111.05,1.7,64.479375 +1234,30,2.7,111.05,1.7,64.47875 +1235,30,2.7,111.05,1.7,64.478125 +1236,30,2.7,111.05,1.7,64.4775 +1237,30,2.7,111.05,1.7,64.476875 +1238,30,2.7,111.05,1.7,64.47625 +1239,30,2.7,111.05,1.7,64.475625 +1240,30,2.7,111.05,1.7,64.475 +1241,30,2.7,111.05,1.7,64.474375 +1242,30,2.7,111.05,1.7,64.47375 +1243,30,2.7,111.05,1.7,64.473125 +1244,30,2.7,111.05,1.7,64.4725 +1245,30,2.7,111.05,1.7,64.471875 +1246,30,2.7,111.05,1.7,64.47125 +1247,30,2.7,111.05,1.7,64.470625 +1248,30,2.7,111.05,1.7,64.47 +1249,30,2.7,111.05,1.7,64.469375 +1250,30,2.7,111.05,1.7,64.46875 +1251,30,2.7,111.05,1.7,64.468125 +1252,30,2.7,111.05,1.7,64.4675 +1253,30,2.7,111.05,1.7,64.466875 +1254,30,2.7,111.05,1.7,64.46625 +1255,30,2.7,111.05,1.7,64.465625 +1256,30,2.7,111.05,1.7,64.465 +1257,30,2.7,111.05,1.7,64.464375 +1258,30,2.7,111.05,1.7,64.46375 +1259,30,2.7,111.05,1.7,64.463125 +1260,30,2.7,111.05,1.7,64.4625 +1261,30,2.7,111.05,1.7,64.461875 +1262,30,2.7,111.05,1.7,64.46125 +1263,30,2.7,111.05,1.7,64.460625 +1264,30,2.7,111.05,1.7,64.46 +1265,30,2.7,111.05,1.7,64.459375 +1266,30,2.7,111.05,1.7,64.45875 +1267,30,2.7,111.05,1.7,64.458125 +1268,30,2.7,111.05,1.7,64.4575 +1269,30,2.7,111.05,1.7,64.456875 +1270,30,2.7,111.05,1.7,64.45625 +1271,30,2.7,111.05,1.7,64.455625 +1272,30,2.7,111.05,1.7,64.455 +1273,30,2.7,111.05,1.7,64.454375 +1274,30,2.7,111.05,1.7,64.45375 +1275,30,2.7,111.05,1.7,64.453125 +1276,30,2.7,111.05,1.7,64.4525 +1277,30,2.7,111.05,1.7,64.451875 +1278,30,2.7,111.05,1.7,64.45125 +1279,30,2.7,111.05,1.7,64.450625 +1280,30,2.7,111.05,1.7,64.45 +1281,30,2.7,111.05,1.7,64.449375 +1282,30,2.7,111.05,1.7,64.44875 +1283,30,2.7,111.05,1.7,64.448125 +1284,30,2.7,111.05,1.7,64.4475 +1285,30,2.7,111.05,1.7,64.446875 +1286,30,2.7,111.05,1.7,64.44625 +1287,30,2.7,111.05,1.7,64.445625 +1288,30,2.7,111.05,1.7,64.445 +1289,30,2.7,111.05,1.7,64.444375 +1290,30,2.7,111.05,1.7,64.44375 +1291,30,2.7,111.05,1.7,64.443125 +1292,30,2.7,111.05,1.7,64.4425 +1293,30,2.7,111.05,1.7,64.441875 +1294,30,2.7,111.05,1.7,64.44125 +1295,30,2.7,111.05,1.7,64.440625 +1296,30,2.7,111.05,1.7,64.44 +1297,30,2.7,111.05,1.7,64.439375 +1298,30,2.7,111.05,1.7,64.43875 +1299,30,2.7,111.05,1.7,64.438125 +1300,30,2.7,111.05,1.7,64.4375 +1301,30,2.7,111.05,1.7,64.436875 +1302,30,2.7,111.05,1.7,64.43625 +1303,30,2.7,111.05,1.7,64.435625 +1304,30,2.7,111.05,1.7,64.435 +1305,30,2.7,111.05,1.7,64.434375 +1306,30,2.7,111.05,1.7,64.43375 +1307,30,2.7,111.05,1.7,64.433125 +1308,30,2.7,111.05,1.7,64.4325 +1309,30,2.7,111.05,1.7,64.431875 +1310,30,2.7,111.05,1.7,64.43125 +1311,30,2.7,111.05,1.7,64.430625 +1312,30,2.7,111.05,1.7,64.43 +1313,30,2.7,111.05,1.7,64.429375 +1314,30,2.7,111.05,1.7,64.42875 +1315,30,2.7,111.05,1.7,64.428125 +1316,30,2.7,111.05,1.7,64.4275 +1317,30,2.7,111.05,1.7,64.426875 +1318,30,2.7,111.05,1.7,64.42625 +1319,30,2.7,111.05,1.7,64.425625 +1320,30,2.7,111.05,1.7,64.425 +1321,30,2.7,111.05,1.7,64.424375 +1322,30,2.7,111.05,1.7,64.42375 +1323,30,2.7,111.05,1.7,64.423125 +1324,30,2.7,111.05,1.7,64.4225 +1325,30,2.7,111.05,1.7,64.421875 +1326,30,2.7,111.05,1.7,64.42125 +1327,30,2.7,111.05,1.7,64.420625 +1328,30,2.7,111.05,1.7,64.42 +1329,30,2.7,111.05,1.7,64.419375 +1330,30,2.7,111.05,1.7,64.41875 +1331,30,2.7,111.05,1.7,64.418125 +1332,30,2.7,111.05,1.7,64.4175 +1333,30,2.7,111.05,1.7,64.416875 +1334,30,2.7,111.05,1.7,64.41625 +1335,30,2.7,111.05,1.7,64.415625 +1336,30,2.7,111.05,1.7,64.415 +1337,30,2.7,111.05,1.7,64.414375 +1338,30,2.7,111.05,1.7,64.41375 +1339,30,2.7,111.05,1.7,64.413125 +1340,30,2.7,111.05,1.7,64.4125 +1341,30,2.7,111.05,1.7,64.411875 +1342,30,2.7,111.05,1.7,64.41125 +1343,30,2.7,111.05,1.7,64.410625 +1344,30,2.7,111.05,1.7,64.41 +1345,30,2.7,111.05,1.7,64.409375 +1346,30,2.7,111.05,1.7,64.40875 +1347,30,2.7,111.05,1.7,64.408125 +1348,30,2.7,111.05,1.7,64.4075 +1349,30,2.7,111.05,1.7,64.406875 +1350,30,2.7,111.05,1.7,64.40625 +1351,30,2.7,111.05,1.7,64.405625 +1352,30,2.7,111.05,1.7,64.405 +1353,30,2.7,111.05,1.7,64.404375 +1354,30,2.7,111.05,1.7,64.40375 +1355,30,2.7,111.05,1.7,64.403125 +1356,30,2.7,111.05,1.7,64.4025 +1357,30,2.7,111.05,1.7,64.401875 +1358,30,2.7,111.05,1.7,64.40125 +1359,30,2.7,111.05,1.7,64.400625 +1360,30,2.7,111.05,1.7,64.4 +1361,30,2.7,111.05,1.7,64.399375 +1362,30,2.7,111.05,1.7,64.39875 +1363,30,2.7,111.05,1.7,64.398125 +1364,30,2.7,111.05,1.7,64.3975 +1365,30,2.7,111.05,1.7,64.396875 +1366,30,2.7,111.05,1.7,64.39625 +1367,30,2.7,111.05,1.7,64.395625 +1368,30,2.7,111.05,1.7,64.395 +1369,30,2.7,111.05,1.7,64.394375 +1370,30,2.7,111.05,1.7,64.39375 +1371,30,2.7,111.05,1.7,64.393125 +1372,30,2.7,111.05,1.7,64.3925 +1373,30,2.7,111.05,1.7,64.391875 +1374,30,2.7,111.05,1.7,64.39125 +1375,30,2.7,111.05,1.7,64.390625 +1376,30,2.7,111.05,1.7,64.39 +1377,30,2.7,111.05,1.7,64.389375 +1378,30,2.7,111.05,1.7,64.38875 +1379,30,2.7,111.05,1.7,64.388125 +1380,30,2.7,111.05,1.7,64.3875 +1381,30,2.7,111.05,1.7,64.386875 +1382,30,2.7,111.05,1.7,64.38625 +1383,30,2.7,111.05,1.7,64.385625 +1384,30,2.7,111.05,1.7,64.385 +1385,30,2.7,111.05,1.7,64.384375 +1386,30,2.7,111.05,1.7,64.38375 +1387,30,2.7,111.05,1.7,64.383125 +1388,30,2.7,111.05,1.7,64.3825 +1389,30,2.7,111.05,1.7,64.381875 +1390,30,2.7,111.05,1.7,64.38125 +1391,30,2.7,111.05,1.7,64.380625 +1392,30,2.7,111.05,1.7,64.38 +1393,30,2.7,111.05,1.7,64.379375 +1394,30,2.7,111.05,1.7,64.37875 +1395,30,2.7,111.05,1.7,64.378125 +1396,30,2.7,111.05,1.7,64.3775 +1397,30,2.7,111.05,1.7,64.376875 +1398,30,2.7,111.05,1.7,64.37625 +1399,30,2.7,111.05,1.7,64.375625 +1400,30,2.7,111.05,1.7,64.375 +1401,30,2.7,111.05,1.7,64.374375 +1402,30,2.7,111.05,1.7,64.37375 +1403,30,2.7,111.05,1.7,64.373125 +1404,30,2.7,111.05,1.7,64.3725 +1405,30,2.7,111.05,1.7,64.371875 +1406,30,2.7,111.05,1.7,64.37125 +1407,30,2.7,111.05,1.7,64.370625 +1408,30,2.7,111.05,1.7,64.37 +1409,30,2.7,111.05,1.7,64.369375 +1410,30,2.7,111.05,1.7,64.36875 +1411,30,2.7,111.05,1.7,64.368125 +1412,30,2.7,111.05,1.7,64.3675 +1413,30,2.7,111.05,1.7,64.366875 +1414,30,2.7,111.05,1.7,64.36625 +1415,30,2.7,111.05,1.7,64.365625 +1416,30,2.7,111.05,1.7,64.365 +1417,30,2.7,111.05,1.7,64.364375 +1418,30,2.7,111.05,1.7,64.36375 +1419,30,2.7,111.05,1.7,64.363125 +1420,30,2.7,111.05,1.7,64.3625 +1421,30,2.7,111.05,1.7,64.361875 +1422,30,2.7,111.05,1.7,64.36125 +1423,30,2.7,111.05,1.7,64.360625 +1424,30,2.7,111.05,1.7,64.36 +1425,30,2.7,111.05,1.7,64.359375 +1426,30,2.7,111.05,1.7,64.35875 +1427,30,2.7,111.05,1.7,64.358125 +1428,30,2.7,111.05,1.7,64.3575 +1429,30,2.7,111.05,1.7,64.356875 +1430,30,2.7,111.05,1.7,64.35625 +1431,30,2.7,111.05,1.7,64.355625 +1432,30,2.7,111.05,1.7,64.355 +1433,30,2.7,111.05,1.7,64.354375 +1434,30,2.7,111.05,1.7,64.35375 +1435,30,2.7,111.05,1.7,64.353125 +1436,30,2.7,111.05,1.7,64.3525 +1437,30,2.7,111.05,1.7,64.351875 +1438,30,2.7,111.05,1.7,64.35125 +1439,30,2.7,111.05,1.7,64.350625 +1440,30,2.7,111.05,1.7,64.35 +1441,30,2.7,111.05,1.7,64.349375 +1442,30,2.7,111.05,1.7,64.34875 +1443,30,2.7,111.05,1.7,64.348125 +1444,30,2.7,111.05,1.7,64.3475 +1445,30,2.7,111.05,1.7,64.346875 +1446,30,2.7,111.05,1.7,64.34625 +1447,30,2.7,111.05,1.7,64.345625 +1448,30,2.7,111.05,1.7,64.345 +1449,30,2.7,111.05,1.7,64.344375 +1450,30,2.7,111.05,1.7,64.34375 +1451,30,2.7,111.05,1.7,64.343125 +1452,30,2.7,111.05,1.7,64.3425 +1453,30,2.7,111.05,1.7,64.341875 +1454,30,2.7,111.05,1.7,64.34125 +1455,30,2.7,111.05,1.7,64.340625 +1456,30,2.7,111.05,1.7,64.34 +1457,30,2.7,111.05,1.7,64.339375 +1458,30,2.7,111.05,1.7,64.33875 +1459,30,2.7,111.05,1.7,64.338125 +1460,30,2.7,111.05,1.7,64.3375 +1461,30,2.7,111.05,1.7,64.336875 +1462,30,2.7,111.05,1.7,64.33625 +1463,30,2.7,111.05,1.7,64.335625 +1464,30,2.7,111.05,1.7,64.335 +1465,30,2.7,111.05,1.7,64.334375 +1466,30,2.7,111.05,1.7,64.33375 +1467,30,2.7,111.05,1.7,64.333125 +1468,30,2.7,111.05,1.7,64.3325 +1469,30,2.7,111.05,1.7,64.331875 +1470,30,2.7,111.05,1.7,64.33125 +1471,30,2.7,111.05,1.7,64.330625 +1472,30,2.7,111.05,1.7,64.33 +1473,30,2.7,111.05,1.7,64.329375 +1474,30,2.7,111.05,1.7,64.32875 +1475,30,2.7,111.05,1.7,64.328125 +1476,30,2.7,111.05,1.7,64.3275 +1477,30,2.7,111.05,1.7,64.326875 +1478,30,2.7,111.05,1.7,64.32625 +1479,30,2.7,111.05,1.7,64.325625 +1480,30,2.7,111.05,1.7,64.325 +1481,30,2.7,111.05,1.7,64.324375 +1482,30,2.7,111.05,1.7,64.32375 +1483,30,2.7,111.05,1.7,64.323125 +1484,30,2.7,111.05,1.7,64.3225 +1485,30,2.7,111.05,1.7,64.321875 +1486,30,2.7,111.05,1.7,64.32125 +1487,30,2.7,111.05,1.7,64.320625 +1488,30,2.7,111.05,1.7,64.32 +1489,30,2.7,111.05,1.7,64.319375 +1490,30,2.6,111.05,1.7,64.31875 +1491,30,2.6,111.05,1.7,64.318125 +1492,30,2.6,111.05,1.7,64.3175 +1493,30,2.6,111.05,1.7,64.316875 +1494,30,2.6,111.05,1.7,64.31625 +1495,30,2.6,111.05,1.7,64.315625 +1496,30,2.6,111.05,1.7,64.315 +1497,30,2.6,111.05,1.7,64.314375 +1498,30,2.6,111.05,1.7,64.31375 +1499,30,2.6,111.05,1.7,64.313125 +1500,30,2.6,111.05,1.7,64.3125 +1501,30,2.6,111.05,1.7,64.311875 +1502,30,2.6,111.05,1.7,64.31125 +1503,30,2.6,111.05,1.7,64.310625 +1504,30,2.6,111.05,1.7,64.31 +1505,30,2.6,111.05,1.7,64.309375 +1506,30,2.6,111.05,1.7,64.30875 +1507,30,2.6,111.05,1.7,64.308125 +1508,30,2.6,111.05,1.7,64.3075 +1509,30,2.6,111.05,1.7,64.306875 +1510,30,2.6,111.05,1.7,64.30625 +1511,30,2.6,111.05,1.7,64.305625 +1512,30,2.6,111.05,1.7,64.305 +1513,30,2.6,111.05,1.7,64.304375 +1514,30,2.6,111.05,1.7,64.30375 +1515,30,2.6,111.05,1.7,64.303125 +1516,30,2.6,111.05,1.7,64.3025 +1517,30,2.6,111.05,1.7,64.301875 +1518,30,2.6,111.05,1.7,64.30125 +1519,30,2.6,111.05,1.7,64.300625 +1520,30,2.6,111.05,1.7,64.3 +1521,30,2.6,111.05,1.7,64.299375 +1522,30,2.6,111.05,1.7,64.29875 +1523,30,2.6,111.05,1.7,64.298125 +1524,30,2.6,111.05,1.7,64.2975 +1525,30,2.6,111.05,1.7,64.296875 +1526,30,2.6,111.05,1.7,64.29625 +1527,30,2.6,111.05,1.7,64.295625 +1528,30,2.6,111.05,1.7,64.295 +1529,30,2.6,111.05,1.7,64.294375 +1530,30,2.6,111.05,1.7,64.29375 +1531,30,2.6,111.05,1.7,64.293125 +1532,30,2.6,111.05,1.7,64.2925 +1533,30,2.6,111.05,1.7,64.291875 +1534,30,2.6,111.05,1.7,64.29125 +1535,30,2.6,111.05,1.7,64.290625 +1536,30,2.6,111.05,1.7,64.29 +1537,30,2.6,111.05,1.7,64.289375 +1538,30,2.6,111.05,1.7,64.28875 +1539,30,2.6,111.05,1.7,64.288125 +1540,30,2.6,111.05,1.7,64.2875 +1541,30,2.6,111.05,1.7,64.286875 +1542,30,2.6,111.05,1.7,64.28625 +1543,30,2.6,111.05,1.7,64.285625 +1544,30,2.6,111.05,1.7,64.285 +1545,30,2.6,111.05,1.7,64.284375 +1546,30,2.6,111.05,1.7,64.28375 +1547,30,2.6,111.05,1.7,64.283125 +1548,30,2.6,111.05,1.7,64.2825 +1549,30,2.6,111.05,1.7,64.281875 +1550,30,2.6,111.05,1.7,64.28125 +1551,30,2.6,111.05,1.7,64.280625 +1552,30,2.6,111.05,1.7,64.28 +1553,30,2.6,111.05,1.7,64.279375 +1554,30,2.6,111.05,1.7,64.27875 +1555,30,2.6,111.05,1.7,64.278125 +1556,30,2.6,111.05,1.7,64.2775 +1557,30,2.6,111.05,1.7,64.276875 +1558,30,2.6,111.05,1.7,64.27625 +1559,30,2.6,111.05,1.7,64.275625 +1560,30,2.6,111.05,1.7,64.275 +1561,30,2.6,111.05,1.7,64.274375 +1562,30,2.6,111.05,1.7,64.27375 +1563,30,2.6,111.05,1.7,64.273125 +1564,30,2.6,111.05,1.7,64.2725 +1565,30,2.6,111.05,1.7,64.271875 +1566,30,2.6,111.05,1.7,64.27125 +1567,30,2.6,111.05,1.7,64.270625 +1568,30,2.6,111.05,1.7,64.27 +1569,30,2.6,111.05,1.7,64.269375 +1570,30,2.6,111.05,1.7,64.26875 +1571,30,2.6,111.05,1.7,64.268125 +1572,30,2.6,111.05,1.7,64.2675 +1573,30,2.6,111.05,1.7,64.266875 +1574,30,2.6,111.05,1.7,64.26625 +1575,30,2.6,111.05,1.7,64.265625 +1576,30,2.6,111.05,1.7,64.265 +1577,30,2.6,111.05,1.7,64.264375 +1578,30,2.6,111.05,1.7,64.26375 +1579,30,2.6,111.05,1.7,64.263125 +1580,30,2.6,111.05,1.7,64.2625 +1581,30,2.6,111.05,1.7,64.261875 +1582,30,2.6,111.05,1.7,64.26125 +1583,30,2.6,111.05,1.7,64.260625 +1584,30,2.6,111.05,1.7,64.26 +1585,30,2.6,111.05,1.7,64.259375 +1586,30,2.6,111.05,1.7,64.25875 +1587,30,2.6,111.05,1.7,64.258125 +1588,30,2.6,111.05,1.7,64.2575 +1589,30,2.6,111.05,1.7,64.256875 +1590,30,2.6,111.05,1.7,64.25625 +1591,30,2.6,111.05,1.7,64.255625 +1592,30,2.6,111.05,1.7,64.255 +1593,30,2.6,111.05,1.7,64.254375 +1594,30,2.6,111.05,1.7,64.25375 +1595,30,2.6,111.05,1.7,64.253125 +1596,30,2.6,111.05,1.7,64.2525 +1597,30,2.6,111.05,1.7,64.251875 +1598,30,2.6,111.05,1.7,64.25125 +1599,30,2.6,111.05,1.7,64.250625 +1600,30,2.6,111.05,1.7,64.25 +1601,30,2.6,111.05,1.7,64.249375 +1602,30,2.6,111.05,1.7,64.24875 +1603,30,2.6,111.05,1.7,64.248125 +1604,30,2.6,111.05,1.7,64.2475 +1605,30,2.6,111.05,1.7,64.246875 +1606,30,2.6,111.05,1.7,64.24625 +1607,30,2.6,111.05,1.7,64.245625 +1608,30,2.6,111.05,1.7,64.245 +1609,30,2.6,111.05,1.7,64.244375 +1610,30,2.6,111.05,1.7,64.24375 +1611,30,2.6,111.05,1.7,64.243125 +1612,30,2.6,111.05,1.7,64.2425 +1613,30,2.6,111.05,1.7,64.241875 +1614,30,2.6,111.05,1.7,64.24125 +1615,30,2.6,111.05,1.7,64.240625 +1616,30,2.6,111.05,1.7,64.24 +1617,30,2.6,111.05,1.7,64.239375 +1618,30,2.6,111.05,1.7,64.23875 +1619,30,2.6,111.05,1.7,64.238125 +1620,30,2.6,111.05,1.7,64.2375 +1621,30,2.6,111.05,1.7,64.236875 +1622,30,2.6,111.05,1.7,64.23625 +1623,30,2.6,111.05,1.7,64.235625 +1624,30,2.6,111.05,1.7,64.235 +1625,30,2.6,111.05,1.7,64.234375 +1626,30,2.6,111.05,1.7,64.23375 +1627,30,2.6,111.05,1.7,64.233125 +1628,30,2.6,111.05,1.7,64.2325 +1629,30,2.6,111.05,1.7,64.231875 +1630,30,2.6,111.05,1.7,64.23125 +1631,30,2.6,111.05,1.7,64.230625 +1632,30,2.6,111.05,1.7,64.23 +1633,30,2.6,111.05,1.7,64.229375 +1634,30,2.6,111.05,1.7,64.22875 +1635,30,2.6,111.05,1.7,64.228125 +1636,30,2.6,111.05,1.7,64.2275 +1637,30,2.6,111.05,1.7,64.226875 +1638,30,2.6,111.05,1.7,64.22625 +1639,30,2.6,111.05,1.7,64.225625 +1640,30,2.6,111.05,1.7,64.225 +1641,30,2.6,111.05,1.7,64.224375 +1642,30,2.6,111.05,1.7,64.22375 +1643,30,2.6,111.05,1.7,64.223125 +1644,30,2.6,111.05,1.7,64.2225 +1645,30,2.6,111.05,1.7,64.221875 +1646,30,2.6,111.05,1.7,64.22125 +1647,30,2.6,111.05,1.7,64.220625 +1648,30,2.6,111.05,1.7,64.22 +1649,30,2.6,111.05,1.7,64.219375 +1650,30,2.6,111.05,1.7,64.21875 +1651,30,2.6,111.05,1.7,64.218125 +1652,30,2.6,111.05,1.7,64.2175 +1653,30,2.6,111.05,1.7,64.216875 +1654,30,2.6,111.05,1.7,64.21625 +1655,30,2.6,111.05,1.7,64.215625 +1656,30,2.6,111.05,1.7,64.215 +1657,30,2.6,111.05,1.7,64.214375 +1658,30,2.6,111.05,1.7,64.21375 +1659,30,2.6,111.05,1.7,64.213125 +1660,30,2.6,111.05,1.7,64.2125 +1661,30,2.6,111.05,1.7,64.211875 +1662,30,2.6,111.05,1.7,64.21125 +1663,30,2.6,111.05,1.7,64.210625 +1664,30,2.6,111.05,1.7,64.21 +1665,30,2.6,111.05,1.7,64.209375 +1666,30,2.6,111.05,1.7,64.20875 +1667,30,2.6,111.05,1.7,64.208125 +1668,30,2.6,111.05,1.7,64.2075 +1669,30,2.6,111.05,1.7,64.206875 +1670,30,2.6,111.05,1.7,64.20625 +1671,30,2.6,111.05,1.7,64.205625 +1672,30,2.6,111.05,1.7,64.205 +1673,30,2.6,111.05,1.7,64.204375 +1674,30,2.6,111.05,1.7,64.20375 +1675,30,2.6,111.05,1.7,64.203125 +1676,30,2.6,111.05,1.7,64.2025 +1677,30,2.6,111.05,1.7,64.201875 +1678,30,2.6,111.05,1.7,64.20125 +1679,30,2.6,111.05,1.7,64.200625 +1680,30,2.6,111.05,1.7,64.2 +1681,30,2.6,111.05,1.7,64.199375 +1682,30,2.6,111.05,1.7,64.19875 +1683,30,2.6,111.05,1.7,64.198125 +1684,30,2.6,111.05,1.7,64.1975 +1685,30,2.6,111.05,1.7,64.196875 +1686,30,2.6,111.05,1.7,64.19625 +1687,30,2.6,111.05,1.7,64.195625 +1688,30,2.6,111.05,1.7,64.195 +1689,30,2.6,111.05,1.7,64.194375 +1690,30,2.6,111.05,1.7,64.19375 +1691,30,2.6,111.05,1.7,64.193125 +1692,30,2.6,111.05,1.7,64.1925 +1693,30,2.6,111.05,1.7,64.191875 +1694,30,2.6,111.05,1.7,64.19125 +1695,30,2.6,111.05,1.7,64.190625 +1696,30,2.6,111.05,1.7,64.19 +1697,30,2.6,111.05,1.7,64.189375 +1698,30,2.6,111.05,1.7,64.18875 +1699,30,2.6,111.05,1.7,64.188125 +1700,30,2.6,111.05,1.7,64.1875 +1701,30,2.6,111.05,1.7,64.186875 +1702,30,2.6,111.05,1.7,64.18625 +1703,30,2.6,111.05,1.7,64.185625 +1704,30,2.6,111.05,1.7,64.185 +1705,30,2.6,111.05,1.7,64.184375 +1706,30,2.6,111.05,1.7,64.18375 +1707,30,2.6,111.05,1.7,64.183125 +1708,30,2.6,111.05,1.7,64.1825 +1709,30,2.6,111.05,1.7,64.181875 +1710,30,2.6,111.05,1.7,64.18125 +1711,30,2.6,111.05,1.7,64.180625 +1712,30,2.6,111.05,1.7,64.18 +1713,30,2.6,111.05,1.7,64.179375 +1714,30,2.6,111.05,1.7,64.17875 +1715,30,2.6,111.05,1.7,64.178125 +1716,30,2.6,111.05,1.7,64.1775 +1717,30,2.6,111.05,1.7,64.176875 +1718,30,2.6,111.05,1.7,64.17625 +1719,30,2.6,111.05,1.7,64.175625 +1720,30,2.6,111.05,1.7,64.175 +1721,30,2.6,111.05,1.7,64.174375 +1722,30,2.6,111.05,1.7,64.17375 +1723,30,2.6,111.05,1.7,64.173125 +1724,30,2.6,111.05,1.7,64.1725 +1725,30,2.6,111.05,1.7,64.171875 +1726,30,2.6,111.05,1.7,64.17125 +1727,30,2.6,111.05,1.7,64.170625 +1728,30,2.6,111.05,1.7,64.17 +1729,30,2.6,111.05,1.7,64.169375 +1730,30,2.6,111.05,1.7,64.16875 +1731,30,2.6,111.05,1.7,64.168125 +1732,30,2.6,111.05,1.7,64.1675 +1733,30,2.6,111.05,1.7,64.166875 +1734,30,2.6,111.05,1.7,64.16625 +1735,30,2.6,111.05,1.7,64.165625 +1736,30,2.6,111.05,1.7,64.165 +1737,30,2.6,111.05,1.7,64.164375 +1738,30,2.6,111.05,1.7,64.16375 +1739,30,2.6,111.05,1.7,64.163125 +1740,30,2.6,111.05,1.7,64.1625 +1741,30,2.6,111.05,1.7,64.161875 +1742,30,2.6,111.05,1.7,64.16125 +1743,30,2.6,111.05,1.7,64.160625 +1744,30,2.6,111.05,1.7,64.16 +1745,30,2.6,111.05,1.7,64.159375 +1746,30,2.6,111.05,1.7,64.15875 +1747,30,2.6,111.05,1.7,64.158125 +1748,30,2.6,111.05,1.7,64.1575 +1749,30,2.6,111.05,1.7,64.156875 +1750,30,2.6,111.05,1.7,64.15625 +1751,30,2.6,111.05,1.7,64.155625 +1752,30,2.6,111.05,1.7,64.155 +1753,30,2.6,111.05,1.7,64.154375 +1754,30,2.6,111.05,1.7,64.15375 +1755,30,2.6,111.05,1.7,64.153125 +1756,30,2.6,111.05,1.7,64.1525 +1757,30,2.6,111.05,1.7,64.151875 +1758,30,2.6,111.05,1.7,64.15125 +1759,30,2.6,111.05,1.7,64.150625 +1760,30,2.6,111.05,1.7,64.15 +1761,30,2.6,111.05,1.7,64.149375 +1762,30,2.6,111.05,1.7,64.14875 +1763,30,2.6,111.05,1.7,64.148125 +1764,30,2.6,111.05,1.7,64.1475 +1765,30,2.6,111.05,1.7,64.146875 +1766,30,2.6,111.05,1.7,64.14625 +1767,30,2.6,111.05,1.7,64.145625 +1768,30,2.6,111.05,1.7,64.145 +1769,30,2.6,111.05,1.7,64.144375 +1770,30,2.6,111.05,1.7,64.14375 +1771,30,2.6,111.05,1.7,64.143125 +1772,30,2.6,111.05,1.7,64.1425 +1773,30,2.6,111.05,1.7,64.141875 +1774,30,2.6,111.05,1.7,64.14125 +1775,30,2.6,111.05,1.7,64.140625 +1776,30,2.6,111.05,1.7,64.14 +1777,30,2.6,111.05,1.7,64.139375 +1778,30,2.6,111.05,1.7,64.13875 +1779,30,2.6,111.05,1.7,64.138125 +1780,30,2.6,111.05,1.7,64.1375 +1781,30,2.6,111.05,1.7,64.136875 +1782,30,2.6,111.05,1.7,64.13625 +1783,30,2.6,111.05,1.7,64.135625 +1784,30,2.6,111.05,1.7,64.135 +1785,30,2.6,111.05,1.7,64.134375 +1786,30,2.6,111.05,1.7,64.13375 +1787,30,2.6,111.05,1.7,64.133125 +1788,30,2.6,111.05,1.7,64.1325 +1789,30,2.6,111.05,1.7,64.131875 +1790,30,2.6,111.05,1.7,64.13125 +1791,30,2.6,111.05,1.7,64.130625 +1792,30,2.6,111.05,1.7,64.13 +1793,30,2.6,111.05,1.7,64.129375 +1794,30,2.6,111.05,1.7,64.12875 +1795,30,2.6,111.05,1.7,64.128125 +1796,30,2.6,111.05,1.7,64.1275 +1797,30,2.6,111.05,1.7,64.126875 +1798,30,2.6,111.05,1.7,64.12625 +1799,30,2.6,111.05,1.7,64.125625 +1800,30,2.6,111.05,1.7,64.125 +1801,30,2.6,111.05,1.7,64.124375 +1802,30,2.6,111.05,1.7,64.12375 +1803,30,2.6,111.05,1.7,64.123125 +1804,30,2.6,111.05,1.7,64.1225 +1805,30,2.6,111.05,1.7,64.121875 +1806,30,2.6,111.05,1.7,64.12125 +1807,30,2.6,111.05,1.7,64.120625 +1808,30,2.6,111.05,1.7,64.12 +1809,30,2.6,111.05,1.7,64.119375 +1810,30,2.6,111.05,1.7,64.11875 +1811,30,2.6,111.05,1.7,64.118125 +1812,30,2.6,111.05,1.7,64.1175 +1813,30,2.6,111.05,1.7,64.116875 +1814,30,2.6,111.05,1.7,64.11625 +1815,30,2.6,111.05,1.7,64.115625 +1816,30,2.6,111.05,1.7,64.115 +1817,30,2.6,111.05,1.7,64.114375 +1818,30,2.6,111.05,1.7,64.11375 +1819,30,2.6,111.05,1.7,64.113125 +1820,30,2.6,111.05,1.7,64.1125 +1821,30,2.6,111.05,1.7,64.111875 +1822,30,2.6,111.05,1.7,64.11125 +1823,30,2.6,111.05,1.7,64.110625 +1824,30,2.6,111.05,1.7,64.11 +1825,30,2.6,111.05,1.7,64.109375 +1826,30,2.6,111.05,1.7,64.10875 +1827,30,2.6,111.05,1.7,64.108125 +1828,30,2.6,111.05,1.7,64.1075 +1829,30,2.6,111.05,1.7,64.106875 +1830,30,2.6,111.05,1.7,64.10625 +1831,30,2.6,111.05,1.7,64.105625 +1832,30,2.6,111.05,1.7,64.105 +1833,30,2.6,111.05,1.7,64.104375 +1834,30,2.6,111.05,1.7,64.10375 +1835,30,2.6,111.05,1.7,64.103125 +1836,30,2.6,111.05,1.7,64.1025 +1837,30,2.6,111.05,1.7,64.101875 +1838,30,2.6,111.05,1.7,64.10125 +1839,30,2.6,111.05,1.7,64.100625 +1840,30,2.6,111.05,1.7,64.1 +1841,30,2.6,111.05,1.7,64.099375 +1842,30,2.6,111.05,1.7,64.09875 +1843,30,2.6,111.05,1.7,64.098125 +1844,30,2.6,111.05,1.7,64.0975 +1845,30,2.6,111.05,1.7,64.096875 +1846,30,2.6,111.05,1.7,64.09625 +1847,30,2.6,111.05,1.7,64.095625 +1848,30,2.6,111.05,1.7,64.095 +1849,30,2.6,111.05,1.7,64.094375 +1850,30,2.6,111.05,1.7,64.09375 +1851,30,2.6,111.05,1.7,64.093125 +1852,30,2.6,111.05,1.7,64.0925 +1853,30,2.6,111.05,1.7,64.091875 +1854,30,2.6,111.05,1.7,64.09125 +1855,30,2.6,111.05,1.7,64.090625 +1856,30,2.6,111.05,1.7,64.09 +1857,30,2.6,111.05,1.7,64.089375 +1858,30,2.6,111.05,1.7,64.08875 +1859,30,2.6,111.05,1.7,64.088125 +1860,30,2.6,111.05,1.7,64.0875 +1861,30,2.6,111.05,1.7,64.086875 +1862,30,2.6,111.05,1.7,64.08625 +1863,30,2.6,111.05,1.7,64.085625 +1864,30,2.6,111.05,1.7,64.085 +1865,30,2.6,111.05,1.7,64.084375 +1866,30,2.6,111.05,1.7,64.08375 +1867,30,2.6,111.05,1.7,64.083125 +1868,30,2.6,111.05,1.7,64.0825 +1869,30,2.6,111.05,1.7,64.081875 +1870,30,2.6,111.05,1.7,64.08125 +1871,30,2.6,111.05,1.7,64.080625 +1872,30,2.6,111.05,1.7,64.08 +1873,30,2.6,111.05,1.7,64.079375 +1874,30,2.6,111.05,1.7,64.07875 +1875,30,2.6,111.05,1.7,64.078125 +1876,30,2.6,111.05,1.7,64.0775 +1877,30,2.6,111.05,1.7,64.076875 +1878,30,2.6,111.05,1.7,64.07625 +1879,30,2.6,111.05,1.7,64.075625 +1880,30,2.6,111.05,1.7,64.075 +1881,30,2.6,111.05,1.7,64.074375 +1882,30,2.6,111.05,1.7,64.07375 +1883,30,2.6,111.05,1.7,64.073125 +1884,30,2.6,111.05,1.7,64.0725 +1885,30,2.6,111.05,1.7,64.071875 +1886,30,2.6,111.05,1.7,64.07125 +1887,30,2.6,111.05,1.7,64.070625 +1888,30,2.6,111.05,1.7,64.07 +1889,30,2.6,111.05,1.7,64.069375 +1890,30,2.6,111.05,1.7,64.06875 +1891,30,2.6,111.05,1.7,64.068125 +1892,30,2.6,111.05,1.7,64.0675 +1893,30,2.6,111.05,1.7,64.066875 +1894,30,2.6,111.05,1.7,64.06625 +1895,30,2.6,111.05,1.7,64.065625 +1896,30,2.6,111.05,1.7,64.065 +1897,30,2.6,111.05,1.7,64.064375 +1898,30,2.6,111.05,1.7,64.06375 +1899,30,2.6,111.05,1.7,64.063125 +1900,30,2.6,111.05,1.7,64.0625 +1901,30,2.6,111.05,1.7,64.061875 +1902,30,2.6,111.05,1.7,64.06125 +1903,30,2.6,111.05,1.7,64.060625 +1904,30,2.6,111.05,1.7,64.06 +1905,30,2.6,111.05,1.7,64.059375 +1906,30,2.6,111.05,1.7,64.05875 +1907,30,2.6,111.05,1.7,64.058125 +1908,30,2.6,111.05,1.7,64.0575 +1909,30,2.6,111.05,1.7,64.056875 +1910,30,2.6,111.05,1.7,64.05625 +1911,30,2.6,111.05,1.7,64.055625 +1912,30,2.6,111.05,1.7,64.055 +1913,30,2.6,111.05,1.7,64.054375 +1914,30,2.6,111.05,1.7,64.05375 +1915,30,2.6,111.05,1.7,64.053125 +1916,30,2.6,111.05,1.7,64.0525 +1917,30,2.6,111.05,1.7,64.051875 +1918,30,2.6,111.05,1.7,64.05125 +1919,30,2.6,111.05,1.7,64.050625 +1920,30,2.6,111.05,1.7,64.05 +1921,30,2.6,111.05,1.7,64.049375 +1922,30,2.6,111.05,1.7,64.04875 +1923,30,2.6,111.05,1.7,64.048125 +1924,30,2.6,111.05,1.7,64.0475 +1925,30,2.6,111.05,1.7,64.046875 +1926,30,2.6,111.05,1.7,64.04625 +1927,30,2.6,111.05,1.7,64.045625 +1928,30,2.6,111.05,1.7,64.045 +1929,30,2.6,111.05,1.7,64.044375 +1930,30,2.6,111.05,1.7,64.04375 +1931,30,2.6,111.05,1.7,64.043125 +1932,30,2.6,111.05,1.7,64.0425 +1933,30,2.6,111.05,1.7,64.041875 +1934,30,2.6,111.05,1.7,64.04125 +1935,30,2.6,111.05,1.7,64.040625 +1936,30,2.6,111.05,1.7,64.04 +1937,30,2.6,111.05,1.7,64.039375 +1938,30,2.6,111.05,1.7,64.03875 +1939,30,2.6,111.05,1.7,64.038125 +1940,30,2.6,111.05,1.7,64.0375 +1941,30,2.6,111.05,1.7,64.036875 +1942,30,2.6,111.05,1.7,64.03625 +1943,30,2.6,111.05,1.7,64.035625 +1944,30,2.6,111.05,1.7,64.035 +1945,30,2.6,111.05,1.7,64.034375 +1946,30,2.6,111.05,1.7,64.03375 +1947,30,2.6,111.05,1.7,64.033125 +1948,30,2.6,111.05,1.7,64.0325 +1949,30,2.6,111.05,1.7,64.031875 +1950,30,2.6,111.05,1.7,64.03125 +1951,30,2.6,111.05,1.7,64.030625 +1952,30,2.6,111.05,1.7,64.03 +1953,30,2.6,111.05,1.7,64.029375 +1954,30,2.6,111.05,1.7,64.02875 +1955,30,2.6,111.05,1.7,64.028125 +1956,30,2.6,111.05,1.7,64.0275 +1957,30,2.6,111.05,1.7,64.026875 +1958,30,2.6,111.05,1.7,64.02625 +1959,30,2.6,111.05,1.7,64.025625 +1960,30,2.6,111.05,1.7,64.025 +1961,30,2.6,111.05,1.7,64.024375 +1962,30,2.6,111.05,1.7,64.02375 +1963,30,2.6,111.05,1.7,64.023125 +1964,30,2.6,111.05,1.7,64.0225 +1965,30,2.6,111.05,1.7,64.021875 +1966,30,2.6,111.05,1.7,64.02125 +1967,30,2.6,111.05,1.7,64.020625 +1968,30,2.6,111.05,1.7,64.02 +1969,30,2.6,111.05,1.7,64.019375 +1970,30,2.6,111.05,1.7,64.01875 +1971,30,2.6,111.05,1.7,64.018125 +1972,30,2.6,111.05,1.7,64.0175 +1973,30,2.6,111.05,1.7,64.016875 +1974,30,2.6,111.05,1.7,64.01625 +1975,30,2.6,111.05,1.7,64.015625 +1976,30,2.6,111.05,1.7,64.015 +1977,30,2.6,111.05,1.7,64.014375 +1978,30,2.6,111.05,1.7,64.01375 +1979,30,2.6,111.05,1.7,64.013125 +1980,30,2.6,111.05,1.7,64.0125 +1981,30,2.6,111.05,1.7,64.011875 +1982,30,2.6,111.05,1.7,64.01125 +1983,30,2.6,111.05,1.7,64.010625 +1984,30,2.6,111.05,1.7,64.01 +1985,30,2.6,111.05,1.7,64.009375 +1986,30,2.6,111.05,1.7,64.00875 +1987,30,2.6,111.05,1.7,64.008125 +1988,30,2.6,111.05,1.7,64.0075 +1989,30,2.6,111.05,1.7,64.006875 +1990,30,2.6,111.05,1.7,64.00625 +1991,30,2.6,111.05,1.7,64.005625 +1992,30,2.6,111.05,1.7,64.005 +1993,30,2.6,111.05,1.7,64.004375 +1994,30,2.6,111.05,1.7,64.00375 +1995,30,2.6,111.05,1.7,64.003125 +1996,30,2.6,111.05,1.7,64.0025 +1997,30,2.6,111.05,1.7,64.001875 +1998,30,2.6,111.05,1.7,64.00125 +1999,30,2.6,111.05,1.7,64.000625 +2000,30,2.6,111.05,1.7,64 +2001,30,2.6,111.05,1.7,63.99975 +2002,30,2.6,111.05,1.7,63.9995 +2003,30,2.6,111.05,1.7,63.99925 +2004,30,2.6,111.05,1.7,63.999 +2005,30,2.6,111.05,1.7,63.99875 +2006,30,2.6,111.05,1.7,63.9985 +2007,30,2.6,111.05,1.7,63.99825 +2008,30,2.6,111.05,1.7,63.998 +2009,30,2.6,111.05,1.7,63.99775 +2010,30,2.6,111.05,1.7,63.9975 +2011,30,2.6,111.05,1.7,63.99725 +2012,30,2.6,111.05,1.7,63.997 +2013,30,2.6,111.05,1.7,63.99675 +2014,30,2.6,111.05,1.7,63.9965 +2015,30,2.6,111.05,1.7,63.99625 +2016,30,2.6,111.05,1.7,63.996 +2017,30,2.6,111.05,1.7,63.99575 +2018,30,2.6,111.05,1.7,63.9955 +2019,30,2.6,111.05,1.7,63.99525 +2020,30,2.6,111.05,1.7,63.995 +2021,30,2.6,111.05,1.7,63.99475 +2022,30,2.6,111.05,1.7,63.9945 +2023,30,2.6,111.05,1.7,63.99425 +2024,30,2.6,111.05,1.7,63.994 +2025,30,2.6,111.05,1.7,63.99375 +2026,30,2.6,111.05,1.7,63.9935 +2027,30,2.6,111.05,1.7,63.99325 +2028,30,2.6,111.05,1.7,63.993 +2029,30,2.6,111.05,1.7,63.99275 +2030,30,2.6,111.05,1.7,63.9925 +2031,30,2.6,111.05,1.7,63.99225 +2032,30,2.6,111.05,1.7,63.992 +2033,30,2.6,111.05,1.7,63.99175 +2034,30,2.6,111.05,1.7,63.9915 +2035,30,2.6,111.05,1.7,63.99125 +2036,30,2.6,111.05,1.7,63.991 +2037,30,2.6,111.05,1.7,63.99075 +2038,30,2.6,111.05,1.7,63.9905 +2039,30,2.6,111.05,1.7,63.99025 +2040,30,2.6,111.05,1.7,63.99 +2041,30,2.6,111.05,1.7,63.98975 +2042,30,2.6,111.05,1.7,63.9895 +2043,30,2.6,111.05,1.7,63.98925 +2044,30,2.6,111.05,1.7,63.989 +2045,30,2.6,111.05,1.7,63.98875 +2046,30,2.6,111.05,1.7,63.9885 +2047,30,2.6,111.05,1.7,63.98825 +2048,30,2.6,111.05,1.7,63.988 +2049,30,2.6,111.05,1.7,63.98775 +2050,30,2.6,111.05,1.7,63.9875 +2051,30,2.6,111.05,1.7,63.98725 +2052,30,2.6,111.05,1.7,63.987 +2053,30,2.6,111.05,1.7,63.98675 +2054,30,2.6,111.05,1.7,63.9865 +2055,30,2.6,111.05,1.7,63.98625 +2056,30,2.6,111.05,1.7,63.986 +2057,30,2.6,111.05,1.7,63.98575 +2058,30,2.6,111.05,1.7,63.9855 +2059,30,2.6,111.05,1.7,63.98525 +2060,30,2.6,111.05,1.7,63.985 +2061,30,2.6,111.05,1.7,63.98475 +2062,30,2.6,111.05,1.7,63.9845 +2063,30,2.6,111.05,1.7,63.98425 +2064,30,2.6,111.05,1.7,63.984 +2065,30,2.6,111.05,1.7,63.98375 +2066,30,2.6,111.05,1.7,63.9835 +2067,30,2.6,111.05,1.7,63.98325 +2068,30,2.6,111.05,1.7,63.983 +2069,30,2.6,111.05,1.7,63.98275 +2070,30,2.6,111.05,1.7,63.9825 +2071,30,2.6,111.05,1.7,63.98225 +2072,30,2.6,111.05,1.7,63.982 +2073,30,2.6,111.05,1.7,63.98175 +2074,30,2.6,111.05,1.7,63.9815 +2075,30,2.6,111.05,1.7,63.98125 +2076,30,2.6,111.05,1.7,63.981 +2077,30,2.6,111.05,1.7,63.98075 +2078,30,2.6,111.05,1.7,63.9805 +2079,30,2.6,111.05,1.7,63.98025 +2080,30,2.6,111.05,1.7,63.98 +2081,30,2.6,111.05,1.7,63.97975 +2082,30,2.6,111.05,1.7,63.9795 +2083,30,2.6,111.05,1.7,63.97925 +2084,30,2.6,111.05,1.7,63.979 +2085,30,2.6,111.05,1.7,63.97875 +2086,30,2.6,111.05,1.7,63.9785 +2087,30,2.6,111.05,1.7,63.97825 +2088,30,2.6,111.05,1.7,63.978 +2089,30,2.6,111.05,1.7,63.97775 +2090,30,2.6,111.05,1.7,63.9775 +2091,30,2.6,111.05,1.7,63.97725 +2092,30,2.6,111.05,1.7,63.977 +2093,30,2.6,111.05,1.7,63.97675 +2094,30,2.6,111.05,1.7,63.9765 +2095,30,2.6,111.05,1.7,63.97625 +2096,30,2.6,111.05,1.7,63.976 +2097,30,2.6,111.05,1.7,63.97575 +2098,30,2.6,111.05,1.7,63.9755 +2099,30,2.6,111.05,1.7,63.97525 +2100,30,2.6,111.05,1.7,63.975 +2101,30,2.6,111.05,1.7,63.97475 +2102,30,2.6,111.05,1.7,63.9745 +2103,30,2.6,111.05,1.7,63.97425 +2104,30,2.6,111.05,1.7,63.974 +2105,30,2.6,111.05,1.7,63.97375 +2106,30,2.6,111.05,1.7,63.9735 +2107,30,2.6,111.05,1.7,63.97325 +2108,30,2.6,111.05,1.7,63.973 +2109,30,2.6,111.05,1.7,63.97275 +2110,30,2.6,111.05,1.7,63.9725 +2111,30,2.6,111.05,1.7,63.97225 +2112,30,2.6,111.05,1.7,63.972 +2113,30,2.6,111.05,1.7,63.97175 +2114,30,2.6,111.05,1.7,63.9715 +2115,30,2.6,111.05,1.7,63.97125 +2116,30,2.6,111.05,1.7,63.971 +2117,30,2.6,111.05,1.7,63.97075 +2118,30,2.6,111.05,1.7,63.9705 +2119,30,2.6,111.05,1.7,63.97025 +2120,30,2.6,111.05,1.7,63.97 +2121,30,2.6,111.05,1.7,63.96975 +2122,30,2.6,111.05,1.7,63.9695 +2123,30,2.6,111.05,1.7,63.96925 +2124,30,2.6,111.05,1.7,63.969 +2125,30,2.6,111.05,1.7,63.96875 +2126,30,2.6,111.05,1.7,63.9685 +2127,30,2.6,111.05,1.7,63.96825 +2128,30,2.6,111.05,1.7,63.968 +2129,30,2.6,111.05,1.7,63.96775 +2130,30,2.6,111.05,1.7,63.9675 +2131,30,2.6,111.05,1.7,63.96725 +2132,30,2.6,111.05,1.7,63.967 +2133,30,2.6,111.05,1.7,63.96675 +2134,30,2.6,111.05,1.7,63.9665 +2135,30,2.6,111.05,1.7,63.96625 +2136,30,2.6,111.05,1.7,63.966 +2137,30,2.6,111.05,1.7,63.96575 +2138,30,2.6,111.05,1.7,63.9655 +2139,30,2.6,111.05,1.7,63.96525 +2140,30,2.6,111.05,1.7,63.965 +2141,30,2.6,111.05,1.7,63.96475 +2142,30,2.6,111.05,1.7,63.9645 +2143,30,2.6,111.05,1.7,63.96425 +2144,30,2.6,111.05,1.7,63.964 +2145,30,2.6,111.05,1.7,63.96375 +2146,30,2.6,111.05,1.7,63.9635 +2147,30,2.6,111.05,1.7,63.96325 +2148,30,2.6,111.05,1.7,63.963 +2149,30,2.6,111.05,1.7,63.96275 +2150,30,2.6,111.05,1.7,63.9625 +2151,30,2.6,111.05,1.7,63.96225 +2152,30,2.6,111.05,1.7,63.962 +2153,30,2.6,111.05,1.7,63.96175 +2154,30,2.6,111.05,1.7,63.9615 +2155,30,2.6,111.05,1.7,63.96125 +2156,30,2.6,111.05,1.7,63.961 +2157,30,2.6,111.05,1.7,63.96075 +2158,30,2.6,111.05,1.7,63.9605 +2159,30,2.6,111.05,1.7,63.96025 +2160,30,2.6,111.05,1.7,63.96 +2161,30,2.6,111.05,1.7,63.95975 +2162,30,2.6,111.05,1.7,63.9595 +2163,30,2.6,111.05,1.7,63.95925 +2164,30,2.6,111.05,1.7,63.959 +2165,30,2.6,111.05,1.7,63.95875 +2166,30,2.6,111.05,1.7,63.9585 +2167,30,2.6,111.05,1.7,63.95825 +2168,30,2.6,111.05,1.7,63.958 +2169,30,2.6,111.05,1.7,63.95775 +2170,30,2.6,111.05,1.7,63.9575 +2171,30,2.6,111.05,1.7,63.95725 +2172,30,2.6,111.05,1.7,63.957 +2173,30,2.6,111.05,1.7,63.95675 +2174,30,2.6,111.05,1.7,63.9565 +2175,30,2.6,111.05,1.7,63.95625 +2176,30,2.6,111.05,1.7,63.956 +2177,30,2.6,111.05,1.7,63.95575 +2178,30,2.6,111.05,1.7,63.9555 +2179,30,2.6,111.05,1.7,63.95525 +2180,30,2.6,111.05,1.7,63.955 +2181,30,2.6,111.05,1.7,63.95475 +2182,30,2.6,111.05,1.7,63.9545 +2183,30,2.6,111.05,1.7,63.95425 +2184,30,2.6,111.05,1.7,63.954 +2185,30,2.6,111.05,1.7,63.95375 +2186,30,2.6,111.05,1.7,63.9535 +2187,30,2.6,111.05,1.7,63.95325 +2188,30,2.6,111.05,1.7,63.953 +2189,30,2.6,111.05,1.7,63.95275 +2190,30,2.6,111.05,1.7,63.9525 +2191,30,2.6,111.05,1.7,63.95225 +2192,30,2.6,111.05,1.7,63.952 +2193,30,2.6,111.05,1.7,63.95175 +2194,30,2.6,111.05,1.7,63.9515 +2195,30,2.6,111.05,1.7,63.95125 +2196,30,2.6,111.05,1.7,63.951 +2197,30,2.6,111.05,1.7,63.95075 +2198,30,2.6,111.05,1.7,63.9505 +2199,30,2.6,111.05,1.7,63.95025 +2200,30,2.6,111.05,1.7,63.95 +2201,30,2.6,111.05,1.7,63.94975 +2202,30,2.6,111.05,1.7,63.9495 +2203,30,2.6,111.05,1.7,63.94925 +2204,30,2.6,111.05,1.7,63.949 +2205,30,2.6,111.05,1.7,63.94875 +2206,30,2.6,111.05,1.7,63.9485 +2207,30,2.6,111.05,1.7,63.94825 +2208,30,2.6,111.05,1.7,63.948 +2209,30,2.6,111.05,1.7,63.94775 +2210,30,2.6,111.05,1.7,63.9475 +2211,30,2.6,111.05,1.7,63.94725 +2212,30,2.6,111.05,1.7,63.947 +2213,30,2.6,111.05,1.7,63.94675 +2214,30,2.6,111.05,1.7,63.9465 +2215,30,2.6,111.05,1.7,63.94625 +2216,30,2.6,111.05,1.7,63.946 +2217,30,2.6,111.05,1.7,63.94575 +2218,30,2.6,111.05,1.7,63.9455 +2219,30,2.6,111.05,1.7,63.94525 +2220,30,2.6,111.05,1.7,63.945 +2221,30,2.6,111.05,1.7,63.94475 +2222,30,2.6,111.05,1.7,63.9445 +2223,30,2.6,111.05,1.7,63.94425 +2224,30,2.6,111.05,1.7,63.944 +2225,30,2.6,111.05,1.7,63.94375 +2226,30,2.6,111.05,1.7,63.9435 +2227,30,2.6,111.05,1.7,63.94325 +2228,30,2.6,111.05,1.7,63.943 +2229,30,2.6,111.05,1.7,63.94275 +2230,30,2.6,111.05,1.7,63.9425 +2231,30,2.6,111.05,1.7,63.94225 +2232,30,2.6,111.05,1.7,63.942 +2233,30,2.6,111.05,1.7,63.94175 +2234,30,2.6,111.05,1.7,63.9415 +2235,30,2.6,111.05,1.7,63.94125 +2236,30,2.6,111.05,1.7,63.941 +2237,30,2.6,111.05,1.7,63.94075 +2238,30,2.6,111.05,1.7,63.9405 +2239,30,2.6,111.05,1.7,63.94025 +2240,30,2.6,111.05,1.7,63.94 +2241,30,2.6,111.05,1.7,63.93975 +2242,30,2.6,111.05,1.7,63.9395 +2243,30,2.6,111.05,1.7,63.93925 +2244,30,2.6,111.05,1.7,63.939 +2245,30,2.6,111.05,1.7,63.93875 +2246,30,2.6,111.05,1.7,63.9385 +2247,30,2.6,111.05,1.7,63.93825 +2248,30,2.6,111.05,1.7,63.938 +2249,30,2.6,111.05,1.7,63.93775 +2250,30,2.6,111.05,1.7,63.9375 +2251,30,2.6,111.05,1.7,63.93725 +2252,30,2.6,111.05,1.7,63.937 +2253,30,2.6,111.05,1.7,63.93675 +2254,30,2.6,111.05,1.7,63.9365 +2255,30,2.6,111.05,1.7,63.93625 +2256,30,2.6,111.05,1.7,63.936 +2257,30,2.6,111.05,1.7,63.93575 +2258,30,2.6,111.05,1.7,63.9355 +2259,30,2.6,111.05,1.7,63.93525 +2260,30,2.6,111.05,1.7,63.935 +2261,30,2.6,111.05,1.7,63.93475 +2262,30,2.6,111.05,1.7,63.9345 +2263,30,2.6,111.05,1.7,63.93425 +2264,30,2.6,111.05,1.7,63.934 +2265,30,2.6,111.05,1.7,63.93375 +2266,30,2.6,111.05,1.7,63.9335 +2267,30,2.6,111.05,1.7,63.93325 +2268,30,2.6,111.05,1.7,63.933 +2269,30,2.6,111.05,1.7,63.93275 +2270,30,2.6,111.05,1.7,63.9325 +2271,30,2.6,111.05,1.7,63.93225 +2272,30,2.6,111.05,1.7,63.932 +2273,30,2.6,111.05,1.7,63.93175 +2274,30,2.6,111.05,1.7,63.9315 +2275,30,2.6,111.05,1.7,63.93125 +2276,30,2.6,111.05,1.7,63.931 +2277,30,2.6,111.05,1.7,63.93075 +2278,30,2.6,111.05,1.7,63.9305 +2279,30,2.6,111.05,1.7,63.93025 +2280,30,2.6,111.05,1.7,63.93 +2281,30,2.6,111.05,1.7,63.92975 +2282,30,2.6,111.05,1.7,63.9295 +2283,30,2.6,111.05,1.7,63.92925 +2284,30,2.6,111.05,1.7,63.929 +2285,30,2.6,111.05,1.7,63.92875 +2286,30,2.6,111.05,1.7,63.9285 +2287,30,2.6,111.05,1.7,63.92825 +2288,30,2.6,111.05,1.7,63.928 +2289,30,2.6,111.05,1.7,63.92775 +2290,30,2.6,111.05,1.7,63.9275 +2291,30,2.6,111.05,1.7,63.92725 +2292,30,2.6,111.05,1.7,63.927 +2293,30,2.6,111.05,1.7,63.92675 +2294,30,2.6,111.05,1.7,63.9265 +2295,30,2.6,111.05,1.7,63.92625 +2296,30,2.6,111.05,1.7,63.926 +2297,30,2.6,111.05,1.7,63.92575 +2298,30,2.6,111.05,1.7,63.9255 +2299,30,2.6,111.05,1.7,63.92525 +2300,30,2.6,111.05,1.7,63.925 +2301,30,2.6,111.05,1.7,63.92475 +2302,30,2.6,111.05,1.7,63.9245 +2303,30,2.6,111.05,1.7,63.92425 +2304,30,2.6,111.05,1.7,63.924 +2305,30,2.6,111.05,1.7,63.92375 +2306,30,2.6,111.05,1.7,63.9235 +2307,30,2.6,111.05,1.7,63.92325 +2308,30,2.6,111.05,1.7,63.923 +2309,30,2.6,111.05,1.7,63.92275 +2310,30,2.6,111.05,1.7,63.9225 +2311,30,2.6,111.05,1.7,63.92225 +2312,30,2.6,111.05,1.7,63.922 +2313,30,2.6,111.05,1.7,63.92175 +2314,30,2.6,111.05,1.7,63.9215 +2315,30,2.6,111.05,1.7,63.92125 +2316,30,2.6,111.05,1.7,63.921 +2317,30,2.6,111.05,1.7,63.92075 +2318,30,2.6,111.05,1.7,63.9205 +2319,30,2.6,111.05,1.7,63.92025 +2320,30,2.6,111.05,1.7,63.92 +2321,30,2.6,111.05,1.7,63.91975 +2322,30,2.6,111.05,1.7,63.9195 +2323,30,2.6,111.05,1.7,63.91925 +2324,30,2.6,111.05,1.7,63.919 +2325,30,2.6,111.05,1.7,63.91875 +2326,30,2.6,111.05,1.7,63.9185 +2327,30,2.6,111.05,1.7,63.91825 +2328,30,2.6,111.05,1.7,63.918 +2329,30,2.6,111.05,1.7,63.91775 +2330,30,2.6,111.05,1.7,63.9175 +2331,30,2.6,111.05,1.7,63.91725 +2332,30,2.6,111.05,1.7,63.917 +2333,30,2.6,111.05,1.7,63.91675 +2334,30,2.6,111.05,1.7,63.9165 +2335,30,2.6,111.05,1.7,63.91625 +2336,30,2.6,111.05,1.7,63.916 +2337,30,2.6,111.05,1.7,63.91575 +2338,30,2.6,111.05,1.7,63.9155 +2339,30,2.6,111.05,1.7,63.91525 +2340,30,2.6,111.05,1.7,63.915 +2341,30,2.6,111.05,1.7,63.91475 +2342,30,2.6,111.05,1.7,63.9145 +2343,30,2.6,111.05,1.7,63.91425 +2344,30,2.6,111.05,1.7,63.914 +2345,30,2.6,111.05,1.7,63.91375 +2346,30,2.6,111.05,1.7,63.9135 +2347,30,2.6,111.05,1.7,63.91325 +2348,30,2.6,111.05,1.7,63.913 +2349,30,2.6,111.05,1.7,63.91275 +2350,30,2.6,111.05,1.7,63.9125 +2351,30,2.6,111.05,1.7,63.91225 +2352,30,2.6,111.05,1.7,63.912 +2353,30,2.6,111.05,1.7,63.91175 +2354,30,2.6,111.05,1.7,63.9115 +2355,30,2.6,111.05,1.7,63.91125 +2356,30,2.6,111.05,1.7,63.911 +2357,30,2.6,111.05,1.7,63.91075 +2358,30,2.6,111.05,1.7,63.9105 +2359,30,2.6,111.05,1.7,63.91025 +2360,30,2.6,111.05,1.7,63.91 +2361,30,2.6,111.05,1.7,63.90975 +2362,30,2.6,111.05,1.7,63.9095 +2363,30,2.6,111.05,1.7,63.90925 +2364,30,2.6,111.05,1.7,63.909 +2365,30,2.6,111.05,1.7,63.90875 +2366,30,2.6,111.05,1.7,63.9085 +2367,30,2.6,111.05,1.7,63.90825 +2368,30,2.6,111.05,1.7,63.908 +2369,30,2.6,111.05,1.7,63.90775 +2370,30,2.6,111.05,1.7,63.9075 +2371,30,2.6,111.05,1.7,63.90725 +2372,30,2.6,111.05,1.7,63.907 +2373,30,2.6,111.05,1.7,63.90675 +2374,30,2.6,111.05,1.7,63.9065 +2375,30,2.6,111.05,1.7,63.90625 +2376,30,2.6,111.05,1.7,63.906 +2377,30,2.6,111.05,1.7,63.90575 +2378,30,2.6,111.05,1.7,63.9055 +2379,30,2.6,111.05,1.7,63.90525 +2380,30,2.6,111.05,1.7,63.905 +2381,30,2.6,111.05,1.7,63.90475 +2382,30,2.6,111.05,1.7,63.9045 +2383,30,2.6,111.05,1.7,63.90425 +2384,30,2.6,111.05,1.7,63.904 +2385,30,2.6,111.05,1.7,63.90375 +2386,30,2.6,111.05,1.7,63.9035 +2387,30,2.6,111.05,1.7,63.90325 +2388,30,2.6,111.05,1.7,63.903 +2389,30,2.6,111.05,1.7,63.90275 +2390,30,2.6,111.05,1.7,63.9025 +2391,30,2.6,111.05,1.7,63.90225 +2392,30,2.6,111.05,1.7,63.902 +2393,30,2.6,111.05,1.7,63.90175 +2394,30,2.6,111.05,1.7,63.9015 +2395,30,2.6,111.05,1.7,63.90125 +2396,30,2.6,111.05,1.7,63.901 +2397,30,2.6,111.05,1.7,63.90075 +2398,30,2.6,111.05,1.7,63.9005 +2399,30,2.6,111.05,1.7,63.90025 +2400,30,2.6,111.05,1.7,63.9 +2401,30,2.6,111.05,1.7,63.89975 +2402,30,2.6,111.05,1.7,63.8995 +2403,30,2.6,111.05,1.7,63.89925 +2404,30,2.6,111.05,1.7,63.899 +2405,30,2.6,111.05,1.7,63.89875 +2406,30,2.6,111.05,1.7,63.8985 +2407,30,2.6,111.05,1.7,63.89825 +2408,30,2.6,111.05,1.7,63.898 +2409,30,2.6,111.05,1.7,63.89775 +2410,30,2.6,111.05,1.7,63.8975 +2411,30,2.6,111.05,1.7,63.89725 +2412,30,2.6,111.05,1.7,63.897 +2413,30,2.6,111.05,1.7,63.89675 +2414,30,2.6,111.05,1.7,63.8965 +2415,30,2.6,111.05,1.7,63.89625 +2416,30,2.6,111.05,1.7,63.896 +2417,30,2.6,111.05,1.7,63.89575 +2418,30,2.6,111.05,1.7,63.8955 +2419,30,2.6,111.05,1.7,63.89525 +2420,30,2.6,111.05,1.7,63.895 +2421,30,2.6,111.05,1.7,63.89475 +2422,30,2.6,111.05,1.7,63.8945 +2423,30,2.6,111.05,1.7,63.89425 +2424,30,2.6,111.05,1.7,63.894 +2425,30,2.6,111.05,1.7,63.89375 +2426,30,2.6,111.05,1.7,63.8935 +2427,30,2.6,111.05,1.7,63.89325 +2428,30,2.6,111.05,1.7,63.893 +2429,30,2.6,111.05,1.7,63.89275 +2430,30,2.6,111.05,1.7,63.8925 +2431,30,2.6,111.05,1.7,63.89225 +2432,30,2.6,111.05,1.7,63.892 +2433,30,2.6,111.05,1.7,63.89175 +2434,30,2.6,111.05,1.7,63.8915 +2435,30,2.6,111.05,1.7,63.89125 +2436,30,2.6,111.05,1.7,63.891 +2437,30,2.6,111.05,1.7,63.89075 +2438,30,2.6,111.05,1.7,63.8905 +2439,30,2.6,111.05,1.7,63.89025 +2440,30,2.6,111.05,1.7,63.89 +2441,30,2.6,111.05,1.7,63.88975 +2442,30,2.6,111.05,1.7,63.8895 +2443,30,2.6,111.05,1.7,63.88925 +2444,30,2.6,111.05,1.7,63.889 +2445,30,2.6,111.05,1.7,63.88875 +2446,30,2.6,111.05,1.7,63.8885 +2447,30,2.6,111.05,1.7,63.88825 +2448,30,2.6,111.05,1.7,63.888 +2449,30,2.6,111.05,1.7,63.88775 +2450,30,2.6,111.05,1.7,63.8875 +2451,30,2.6,111.05,1.7,63.88725 +2452,30,2.6,111.05,1.7,63.887 +2453,30,2.6,111.05,1.7,63.88675 +2454,30,2.6,111.05,1.7,63.8865 +2455,30,2.6,111.05,1.7,63.88625 +2456,30,2.6,111.05,1.7,63.886 +2457,30,2.6,111.05,1.7,63.88575 +2458,30,2.6,111.05,1.7,63.8855 +2459,30,2.6,111.05,1.7,63.88525 +2460,30,2.6,111.05,1.7,63.885 +2461,30,2.6,111.05,1.7,63.88475 +2462,30,2.6,111.05,1.7,63.8845 +2463,30,2.6,111.05,1.7,63.88425 +2464,30,2.6,111.05,1.7,63.884 +2465,30,2.6,111.05,1.7,63.88375 +2466,30,2.6,111.05,1.7,63.8835 +2467,30,2.6,111.05,1.7,63.88325 +2468,30,2.6,111.05,1.7,63.883 +2469,30,2.6,111.05,1.7,63.88275 +2470,30,2.6,111.05,1.7,63.8825 +2471,30,2.6,111.05,1.7,63.88225 +2472,30,2.6,111.05,1.7,63.882 +2473,30,2.6,111.05,1.7,63.88175 +2474,30,2.6,111.05,1.7,63.8815 +2475,30,2.6,111.05,1.7,63.88125 +2476,30,2.6,111.05,1.7,63.881 +2477,30,2.6,111.05,1.7,63.88075 +2478,30,2.6,111.05,1.7,63.8805 +2479,30,2.6,111.05,1.7,63.88025 +2480,30,2.6,111.05,1.7,63.88 +2481,30,2.6,111.05,1.7,63.87975 +2482,30,2.6,111.05,1.7,63.8795 +2483,30,2.6,111.05,1.7,63.87925 +2484,30,2.6,111.05,1.7,63.879 +2485,30,2.6,111.05,1.7,63.87875 +2486,30,2.6,111.05,1.7,63.8785 +2487,30,2.6,111.05,1.7,63.87825 +2488,30,2.6,111.05,1.7,63.878 +2489,30,2.6,111.05,1.7,63.87775 +2490,30,2.5,111.05,1.7,63.8775 +2491,30,2.5,111.05,1.7,63.87725 +2492,30,2.5,111.05,1.7,63.877 +2493,30,2.5,111.05,1.7,63.87675 +2494,30,2.5,111.05,1.7,63.8765 +2495,30,2.5,111.05,1.7,63.87625 +2496,30,2.5,111.05,1.7,63.876 +2497,30,2.5,111.05,1.7,63.87575 +2498,30,2.5,111.05,1.7,63.8755 +2499,30,2.5,111.05,1.7,63.87525 +2500,30,2.5,111.05,1.7,63.875 +2501,30,2.5,111.05,1.7,63.87475 +2502,30,2.5,111.05,1.7,63.8745 +2503,30,2.5,111.05,1.7,63.87425 +2504,30,2.5,111.05,1.7,63.874 +2505,30,2.5,111.05,1.7,63.87375 +2506,30,2.5,111.05,1.7,63.8735 +2507,30,2.5,111.05,1.7,63.87325 +2508,30,2.5,111.05,1.7,63.873 +2509,30,2.5,111.05,1.7,63.87275 +2510,30,2.5,111.05,1.7,63.8725 +2511,30,2.5,111.05,1.7,63.87225 +2512,30,2.5,111.05,1.7,63.872 +2513,30,2.5,111.05,1.7,63.87175 +2514,30,2.5,111.05,1.7,63.8715 +2515,30,2.5,111.05,1.7,63.87125 +2516,30,2.5,111.05,1.7,63.871 +2517,30,2.5,111.05,1.7,63.87075 +2518,30,2.5,111.05,1.7,63.8705 +2519,30,2.5,111.05,1.7,63.87025 +2520,30,2.5,111.05,1.7,63.87 +2521,30,2.5,111.05,1.7,63.86975 +2522,30,2.5,111.05,1.7,63.8695 +2523,30,2.5,111.05,1.7,63.86925 +2524,30,2.5,111.05,1.7,63.869 +2525,30,2.5,111.05,1.7,63.86875 +2526,30,2.5,111.05,1.7,63.8685 +2527,30,2.5,111.05,1.7,63.86825 +2528,30,2.5,111.05,1.7,63.868 +2529,30,2.5,111.05,1.7,63.86775 +2530,30,2.5,111.05,1.7,63.8675 +2531,30,2.5,111.05,1.7,63.86725 +2532,30,2.5,111.05,1.7,63.867 +2533,30,2.5,111.05,1.7,63.86675 +2534,30,2.5,111.05,1.7,63.8665 +2535,30,2.5,111.05,1.7,63.86625 +2536,30,2.5,111.05,1.7,63.866 +2537,30,2.5,111.05,1.7,63.86575 +2538,30,2.5,111.05,1.7,63.8655 +2539,30,2.5,111.05,1.7,63.86525 +2540,30,2.5,111.05,1.7,63.865 +2541,30,2.5,111.05,1.7,63.86475 +2542,30,2.5,111.05,1.7,63.8645 +2543,30,2.5,111.05,1.7,63.86425 +2544,30,2.5,111.05,1.7,63.864 +2545,30,2.5,111.05,1.7,63.86375 +2546,30,2.5,111.05,1.7,63.8635 +2547,30,2.5,111.05,1.7,63.86325 +2548,30,2.5,111.05,1.7,63.863 +2549,30,2.5,111.05,1.7,63.86275 +2550,30,2.5,111.05,1.7,63.8625 +2551,30,2.5,111.05,1.7,63.86225 +2552,30,2.5,111.05,1.7,63.862 +2553,30,2.5,111.05,1.7,63.86175 +2554,30,2.5,111.05,1.7,63.8615 +2555,30,2.5,111.05,1.7,63.86125 +2556,30,2.5,111.05,1.7,63.861 +2557,30,2.5,111.05,1.7,63.86075 +2558,30,2.5,111.05,1.7,63.8605 +2559,30,2.5,111.05,1.7,63.86025 +2560,30,2.5,111.05,1.7,63.86 +2561,30,2.5,111.05,1.7,63.85975 +2562,30,2.5,111.05,1.7,63.8595 +2563,30,2.5,111.05,1.7,63.85925 +2564,30,2.5,111.05,1.7,63.859 +2565,30,2.5,111.05,1.7,63.85875 +2566,30,2.5,111.05,1.7,63.8585 +2567,30,2.5,111.05,1.7,63.85825 +2568,30,2.5,111.05,1.7,63.858 +2569,30,2.5,111.05,1.7,63.85775 +2570,30,2.5,111.05,1.7,63.8575 +2571,30,2.5,111.05,1.7,63.85725 +2572,30,2.5,111.05,1.7,63.857 +2573,30,2.5,111.05,1.7,63.85675 +2574,30,2.5,111.05,1.7,63.8565 +2575,30,2.5,111.05,1.7,63.85625 +2576,30,2.5,111.05,1.7,63.856 +2577,30,2.5,111.05,1.7,63.85575 +2578,30,2.5,111.05,1.7,63.8555 +2579,30,2.5,111.05,1.7,63.85525 +2580,30,2.5,111.05,1.7,63.855 +2581,30,2.5,111.05,1.7,63.85475 +2582,30,2.5,111.05,1.7,63.8545 +2583,30,2.5,111.05,1.7,63.85425 +2584,30,2.5,111.05,1.7,63.854 +2585,30,2.5,111.05,1.7,63.85375 +2586,30,2.5,111.05,1.7,63.8535 +2587,30,2.5,111.05,1.7,63.85325 +2588,30,2.5,111.05,1.7,63.853 +2589,30,2.5,111.05,1.7,63.85275 +2590,30,2.5,111.05,1.7,63.8525 +2591,30,2.5,111.05,1.7,63.85225 +2592,30,2.5,111.05,1.7,63.852 +2593,30,2.5,111.05,1.7,63.85175 +2594,30,2.5,111.05,1.7,63.8515 +2595,30,2.5,111.05,1.7,63.85125 +2596,30,2.5,111.05,1.7,63.851 +2597,30,2.5,111.05,1.7,63.85075 +2598,30,2.5,111.05,1.7,63.8505 +2599,30,2.5,111.05,1.7,63.85025 +2600,30,2.5,111.05,1.7,63.85 +2601,30,2.5,111.05,1.7,63.84975 +2602,30,2.5,111.05,1.7,63.8495 +2603,30,2.5,111.05,1.7,63.84925 +2604,30,2.5,111.05,1.7,63.849 +2605,30,2.5,111.05,1.7,63.84875 +2606,30,2.5,111.05,1.7,63.8485 +2607,30,2.5,111.05,1.7,63.84825 +2608,30,2.5,111.05,1.7,63.848 +2609,30,2.5,111.05,1.7,63.84775 +2610,30,2.5,111.05,1.7,63.8475 +2611,30,2.5,111.05,1.7,63.84725 +2612,30,2.5,111.05,1.7,63.847 +2613,30,2.5,111.05,1.7,63.84675 +2614,30,2.5,111.05,1.7,63.8465 +2615,30,2.5,111.05,1.7,63.84625 +2616,30,2.5,111.05,1.7,63.846 +2617,30,2.5,111.05,1.7,63.84575 +2618,30,2.5,111.05,1.7,63.8455 +2619,30,2.5,111.05,1.7,63.84525 +2620,30,2.5,111.05,1.7,63.845 +2621,30,2.5,111.05,1.7,63.84475 +2622,30,2.5,111.05,1.7,63.8445 +2623,30,2.5,111.05,1.7,63.84425 +2624,30,2.5,111.05,1.7,63.844 +2625,30,2.5,111.05,1.7,63.84375 +2626,30,2.5,111.05,1.7,63.8435 +2627,30,2.5,111.05,1.7,63.84325 +2628,30,2.5,111.05,1.7,63.843 +2629,30,2.5,111.05,1.7,63.84275 +2630,30,2.5,111.05,1.7,63.8425 +2631,30,2.5,111.05,1.7,63.84225 +2632,30,2.5,111.05,1.7,63.842 +2633,30,2.5,111.05,1.7,63.84175 +2634,30,2.5,111.05,1.7,63.8415 +2635,30,2.5,111.05,1.7,63.84125 +2636,30,2.5,111.05,1.7,63.841 +2637,30,2.5,111.05,1.7,63.84075 +2638,30,2.5,111.05,1.7,63.8405 +2639,30,2.5,111.05,1.7,63.84025 +2640,30,2.5,111.05,1.7,63.84 +2641,30,2.5,111.05,1.7,63.83975 +2642,30,2.5,111.05,1.7,63.8395 +2643,30,2.5,111.05,1.7,63.83925 +2644,30,2.5,111.05,1.7,63.839 +2645,30,2.5,111.05,1.7,63.83875 +2646,30,2.5,111.05,1.7,63.8385 +2647,30,2.5,111.05,1.7,63.83825 +2648,30,2.5,111.05,1.7,63.838 +2649,30,2.5,111.05,1.7,63.83775 +2650,30,2.5,111.05,1.7,63.8375 +2651,30,2.5,111.05,1.7,63.83725 +2652,30,2.5,111.05,1.7,63.837 +2653,30,2.5,111.05,1.7,63.83675 +2654,30,2.5,111.05,1.7,63.8365 +2655,30,2.5,111.05,1.7,63.83625 +2656,30,2.5,111.05,1.7,63.836 +2657,30,2.5,111.05,1.7,63.83575 +2658,30,2.5,111.05,1.7,63.8355 +2659,30,2.5,111.05,1.7,63.83525 +2660,30,2.5,111.05,1.7,63.835 +2661,30,2.5,111.05,1.7,63.83475 +2662,30,2.5,111.05,1.7,63.8345 +2663,30,2.5,111.05,1.7,63.83425 +2664,30,2.5,111.05,1.7,63.834 +2665,30,2.5,111.05,1.7,63.83375 +2666,30,2.5,111.05,1.7,63.8335 +2667,30,2.5,111.05,1.7,63.83325 +2668,30,2.5,111.05,1.7,63.833 +2669,30,2.5,111.05,1.7,63.83275 +2670,30,2.5,111.05,1.7,63.8325 +2671,30,2.5,111.05,1.7,63.83225 +2672,30,2.5,111.05,1.7,63.832 +2673,30,2.5,111.05,1.7,63.83175 +2674,30,2.5,111.05,1.7,63.8315 +2675,30,2.5,111.05,1.7,63.83125 +2676,30,2.5,111.05,1.7,63.831 +2677,30,2.5,111.05,1.7,63.83075 +2678,30,2.5,111.05,1.7,63.8305 +2679,30,2.5,111.05,1.7,63.83025 +2680,30,2.5,111.05,1.7,63.83 +2681,30,2.5,111.05,1.7,63.82975 +2682,30,2.5,111.05,1.7,63.8295 +2683,30,2.5,111.05,1.7,63.82925 +2684,30,2.5,111.05,1.7,63.829 +2685,30,2.5,111.05,1.7,63.82875 +2686,30,2.5,111.05,1.7,63.8285 +2687,30,2.5,111.05,1.7,63.82825 +2688,30,2.5,111.05,1.7,63.828 +2689,30,2.5,111.05,1.7,63.82775 +2690,30,2.5,111.05,1.7,63.8275 +2691,30,2.5,111.05,1.7,63.82725 +2692,30,2.5,111.05,1.7,63.827 +2693,30,2.5,111.05,1.7,63.82675 +2694,30,2.5,111.05,1.7,63.8265 +2695,30,2.5,111.05,1.7,63.82625 +2696,30,2.5,111.05,1.7,63.826 +2697,30,2.5,111.05,1.7,63.82575 +2698,30,2.5,111.05,1.7,63.8255 +2699,30,2.5,111.05,1.7,63.82525 +2700,30,2.5,111.05,1.7,63.825 +2701,30,2.5,111.05,1.7,63.82475 +2702,30,2.5,111.05,1.7,63.8245 +2703,30,2.5,111.05,1.7,63.82425 +2704,30,2.5,111.05,1.7,63.824 +2705,30,2.5,111.05,1.7,63.82375 +2706,30,2.5,111.05,1.7,63.8235 +2707,30,2.5,111.05,1.7,63.82325 +2708,30,2.5,111.05,1.7,63.823 +2709,30,2.5,111.05,1.7,63.82275 +2710,30,2.5,111.05,1.7,63.8225 +2711,30,2.5,111.05,1.7,63.82225 +2712,30,2.5,111.05,1.7,63.822 +2713,30,2.5,111.05,1.7,63.82175 +2714,30,2.5,111.05,1.7,63.8215 +2715,30,2.5,111.05,1.7,63.82125 +2716,30,2.5,111.05,1.7,63.821 +2717,30,2.5,111.05,1.7,63.82075 +2718,30,2.5,111.05,1.7,63.8205 +2719,30,2.5,111.05,1.7,63.82025 +2720,30,2.5,111.05,1.7,63.82 +2721,30,2.5,111.05,1.7,63.81975 +2722,30,2.5,111.05,1.7,63.8195 +2723,30,2.5,111.05,1.7,63.81925 +2724,30,2.5,111.05,1.7,63.819 +2725,30,2.5,111.05,1.7,63.81875 +2726,30,2.5,111.05,1.7,63.8185 +2727,30,2.5,111.05,1.7,63.81825 +2728,30,2.5,111.05,1.7,63.818 +2729,30,2.5,111.05,1.7,63.81775 +2730,30,2.5,111.05,1.7,63.8175 +2731,30,2.5,111.05,1.7,63.81725 +2732,30,2.5,111.05,1.7,63.817 +2733,30,2.5,111.05,1.7,63.81675 +2734,30,2.5,111.05,1.7,63.8165 +2735,30,2.5,111.05,1.7,63.81625 +2736,30,2.5,111.05,1.7,63.816 +2737,30,2.5,111.05,1.7,63.81575 +2738,30,2.5,111.05,1.7,63.8155 +2739,30,2.5,111.05,1.7,63.81525 +2740,30,2.5,111.05,1.7,63.815 +2741,30,2.5,111.05,1.7,63.81475 +2742,30,2.5,111.05,1.7,63.8145 +2743,30,2.5,111.05,1.7,63.81425 +2744,30,2.5,111.05,1.7,63.814 +2745,30,2.5,111.05,1.7,63.81375 +2746,30,2.5,111.05,1.7,63.8135 +2747,30,2.5,111.05,1.7,63.81325 +2748,30,2.5,111.05,1.7,63.813 +2749,30,2.5,111.05,1.7,63.81275 +2750,30,2.5,111.05,1.7,63.8125 +2751,30,2.5,111.05,1.7,63.81225 +2752,30,2.5,111.05,1.7,63.812 +2753,30,2.5,111.05,1.7,63.81175 +2754,30,2.5,111.05,1.7,63.8115 +2755,30,2.5,111.05,1.7,63.81125 +2756,30,2.5,111.05,1.7,63.811 +2757,30,2.5,111.05,1.7,63.81075 +2758,30,2.5,111.05,1.7,63.8105 +2759,30,2.5,111.05,1.7,63.81025 +2760,30,2.5,111.05,1.7,63.81 +2761,30,2.5,111.05,1.7,63.80975 +2762,30,2.5,111.05,1.7,63.8095 +2763,30,2.5,111.05,1.7,63.80925 +2764,30,2.5,111.05,1.7,63.809 +2765,30,2.5,111.05,1.7,63.80875 +2766,30,2.5,111.05,1.7,63.8085 +2767,30,2.5,111.05,1.7,63.80825 +2768,30,2.5,111.05,1.7,63.808 +2769,30,2.5,111.05,1.7,63.80775 +2770,30,2.5,111.05,1.7,63.8075 +2771,30,2.5,111.05,1.7,63.80725 +2772,30,2.5,111.05,1.7,63.807 +2773,30,2.5,111.05,1.7,63.80675 +2774,30,2.5,111.05,1.7,63.8065 +2775,30,2.5,111.05,1.7,63.80625 +2776,30,2.5,111.05,1.7,63.806 +2777,30,2.5,111.05,1.7,63.80575 +2778,30,2.5,111.05,1.7,63.8055 +2779,30,2.5,111.05,1.7,63.80525 +2780,30,2.5,111.05,1.7,63.805 +2781,30,2.5,111.05,1.7,63.80475 +2782,30,2.5,111.05,1.7,63.8045 +2783,30,2.5,111.05,1.7,63.80425 +2784,30,2.5,111.05,1.7,63.804 +2785,30,2.5,111.05,1.7,63.80375 +2786,30,2.5,111.05,1.7,63.8035 +2787,30,2.5,111.05,1.7,63.80325 +2788,30,2.5,111.05,1.7,63.803 +2789,30,2.5,111.05,1.7,63.80275 +2790,30,2.5,111.05,1.7,63.8025 +2791,30,2.5,111.05,1.7,63.80225 +2792,30,2.5,111.05,1.7,63.802 +2793,30,2.5,111.05,1.7,63.80175 +2794,30,2.5,111.05,1.7,63.8015 +2795,30,2.5,111.05,1.7,63.80125 +2796,30,2.5,111.05,1.7,63.801 +2797,30,2.5,111.05,1.7,63.80075 +2798,30,2.5,111.05,1.7,63.8005 +2799,30,2.5,111.05,1.7,63.80025 +2800,30,2.5,111.05,1.7,63.8 +2801,30,2.5,111.05,1.7,63.79975 +2802,30,2.5,111.05,1.7,63.7995 +2803,30,2.5,111.05,1.7,63.79925 +2804,30,2.5,111.05,1.7,63.799 +2805,30,2.5,111.05,1.7,63.79875 +2806,30,2.5,111.05,1.7,63.7985 +2807,30,2.5,111.05,1.7,63.79825 +2808,30,2.5,111.05,1.7,63.798 +2809,30,2.5,111.05,1.7,63.79775 +2810,30,2.5,111.05,1.7,63.7975 +2811,30,2.5,111.05,1.7,63.79725 +2812,30,2.5,111.05,1.7,63.797 +2813,30,2.5,111.05,1.7,63.79675 +2814,30,2.5,111.05,1.7,63.7965 +2815,30,2.5,111.05,1.7,63.79625 +2816,30,2.5,111.05,1.7,63.796 +2817,30,2.5,111.05,1.7,63.79575 +2818,30,2.5,111.05,1.7,63.7955 +2819,30,2.5,111.05,1.7,63.79525 +2820,30,2.5,111.05,1.7,63.795 +2821,30,2.5,111.05,1.7,63.79475 +2822,30,2.5,111.05,1.7,63.7945 +2823,30,2.5,111.05,1.7,63.79425 +2824,30,2.5,111.05,1.7,63.794 +2825,30,2.5,111.05,1.7,63.79375 +2826,30,2.5,111.05,1.7,63.7935 +2827,30,2.5,111.05,1.7,63.79325 +2828,30,2.5,111.05,1.7,63.793 +2829,30,2.5,111.05,1.7,63.79275 +2830,30,2.5,111.05,1.7,63.7925 +2831,30,2.5,111.05,1.7,63.79225 +2832,30,2.5,111.05,1.7,63.792 +2833,30,2.5,111.05,1.7,63.79175 +2834,30,2.5,111.05,1.7,63.7915 +2835,30,2.5,111.05,1.7,63.79125 +2836,30,2.5,111.05,1.7,63.791 +2837,30,2.5,111.05,1.7,63.79075 +2838,30,2.5,111.05,1.7,63.7905 +2839,30,2.5,111.05,1.7,63.79025 +2840,30,2.5,111.05,1.7,63.79 +2841,30,2.5,111.05,1.7,63.78975 +2842,30,2.5,111.05,1.7,63.7895 +2843,30,2.5,111.05,1.7,63.78925 +2844,30,2.5,111.05,1.7,63.789 +2845,30,2.5,111.05,1.7,63.78875 +2846,30,2.5,111.05,1.7,63.7885 +2847,30,2.5,111.05,1.7,63.78825 +2848,30,2.5,111.05,1.7,63.788 +2849,30,2.5,111.05,1.7,63.78775 +2850,30,2.5,111.05,1.7,63.7875 +2851,30,2.5,111.05,1.7,63.78725 +2852,30,2.5,111.05,1.7,63.787 +2853,30,2.5,111.05,1.7,63.78675 +2854,30,2.5,111.05,1.7,63.7865 +2855,30,2.5,111.05,1.7,63.78625 +2856,30,2.5,111.05,1.7,63.786 +2857,30,2.5,111.05,1.7,63.78575 +2858,30,2.5,111.05,1.7,63.7855 +2859,30,2.5,111.05,1.7,63.78525 +2860,30,2.5,111.05,1.7,63.785 +2861,30,2.5,111.05,1.7,63.78475 +2862,30,2.5,111.05,1.7,63.7845 +2863,30,2.5,111.05,1.7,63.78425 +2864,30,2.5,111.05,1.7,63.784 +2865,30,2.5,111.05,1.7,63.78375 +2866,30,2.5,111.05,1.7,63.7835 +2867,30,2.5,111.05,1.7,63.78325 +2868,30,2.5,111.05,1.7,63.783 +2869,30,2.5,111.05,1.7,63.78275 +2870,30,2.5,111.05,1.7,63.7825 +2871,30,2.5,111.05,1.7,63.78225 +2872,30,2.5,111.05,1.7,63.782 +2873,30,2.5,111.05,1.7,63.78175 +2874,30,2.5,111.05,1.7,63.7815 +2875,30,2.5,111.05,1.7,63.78125 +2876,30,2.5,111.05,1.7,63.781 +2877,30,2.5,111.05,1.7,63.78075 +2878,30,2.5,111.05,1.7,63.7805 +2879,30,2.5,111.05,1.7,63.78025 +2880,30,2.5,111.05,1.7,63.78 +2881,30,2.5,111.05,1.7,63.77975 +2882,30,2.5,111.05,1.7,63.7795 +2883,30,2.5,111.05,1.7,63.77925 +2884,30,2.5,111.05,1.7,63.779 +2885,30,2.5,111.05,1.7,63.77875 +2886,30,2.5,111.05,1.7,63.7785 +2887,30,2.5,111.05,1.7,63.77825 +2888,30,2.5,111.05,1.7,63.778 +2889,30,2.5,111.05,1.7,63.77775 +2890,30,2.5,111.05,1.7,63.7775 +2891,30,2.5,111.05,1.7,63.77725 +2892,30,2.5,111.05,1.7,63.777 +2893,30,2.5,111.05,1.7,63.77675 +2894,30,2.5,111.05,1.7,63.7765 +2895,30,2.5,111.05,1.7,63.77625 +2896,30,2.5,111.05,1.7,63.776 +2897,30,2.5,111.05,1.7,63.77575 +2898,30,2.5,111.05,1.7,63.7755 +2899,30,2.5,111.05,1.7,63.77525 +2900,30,2.5,111.05,1.7,63.775 +2901,30,2.5,111.05,1.7,63.77475 +2902,30,2.5,111.05,1.7,63.7745 +2903,30,2.5,111.05,1.7,63.77425 +2904,30,2.5,111.05,1.7,63.774 +2905,30,2.5,111.05,1.7,63.77375 +2906,30,2.5,111.05,1.7,63.7735 +2907,30,2.5,111.05,1.7,63.77325 +2908,30,2.5,111.05,1.7,63.773 +2909,30,2.5,111.05,1.7,63.77275 +2910,30,2.5,111.05,1.7,63.7725 +2911,30,2.5,111.05,1.7,63.77225 +2912,30,2.5,111.05,1.7,63.772 +2913,30,2.5,111.05,1.7,63.77175 +2914,30,2.5,111.05,1.7,63.7715 +2915,30,2.5,111.05,1.7,63.77125 +2916,30,2.5,111.05,1.7,63.771 +2917,30,2.5,111.05,1.7,63.77075 +2918,30,2.5,111.05,1.7,63.7705 +2919,30,2.5,111.05,1.7,63.77025 +2920,30,2.5,111.05,1.7,63.77 +2921,30,2.5,111.05,1.7,63.76975 +2922,30,2.5,111.05,1.7,63.7695 +2923,30,2.5,111.05,1.7,63.76925 +2924,30,2.5,111.05,1.7,63.769 +2925,30,2.5,111.05,1.7,63.76875 +2926,30,2.5,111.05,1.7,63.7685 +2927,30,2.5,111.05,1.7,63.76825 +2928,30,2.5,111.05,1.7,63.768 +2929,30,2.5,111.05,1.7,63.76775 +2930,30,2.5,111.05,1.7,63.7675 +2931,30,2.5,111.05,1.7,63.76725 +2932,30,2.5,111.05,1.7,63.767 +2933,30,2.5,111.05,1.7,63.76675 +2934,30,2.5,111.05,1.7,63.7665 +2935,30,2.5,111.05,1.7,63.76625 +2936,30,2.5,111.05,1.7,63.766 +2937,30,2.5,111.05,1.7,63.76575 +2938,30,2.5,111.05,1.7,63.7655 +2939,30,2.5,111.05,1.7,63.76525 +2940,30,2.5,111.05,1.7,63.765 +2941,30,2.5,111.05,1.7,63.76475 +2942,30,2.5,111.05,1.7,63.7645 +2943,30,2.5,111.05,1.7,63.76425 +2944,30,2.5,111.05,1.7,63.764 +2945,30,2.5,111.05,1.7,63.76375 +2946,30,2.5,111.05,1.7,63.7635 +2947,30,2.5,111.05,1.7,63.76325 +2948,30,2.5,111.05,1.7,63.763 +2949,30,2.5,111.05,1.7,63.76275 +2950,30,2.5,111.05,1.7,63.7625 +2951,30,2.5,111.05,1.7,63.76225 +2952,30,2.5,111.05,1.7,63.762 +2953,30,2.5,111.05,1.7,63.76175 +2954,30,2.5,111.05,1.7,63.7615 +2955,30,2.5,111.05,1.7,63.76125 +2956,30,2.5,111.05,1.7,63.761 +2957,30,2.5,111.05,1.7,63.76075 +2958,30,2.5,111.05,1.7,63.7605 +2959,30,2.5,111.05,1.7,63.76025 +2960,30,2.5,111.05,1.7,63.76 +2961,30,2.5,111.05,1.7,63.75975 +2962,30,2.5,111.05,1.7,63.7595 +2963,30,2.5,111.05,1.7,63.75925 +2964,30,2.5,111.05,1.7,63.759 +2965,30,2.5,111.05,1.7,63.75875 +2966,30,2.5,111.05,1.7,63.7585 +2967,30,2.5,111.05,1.7,63.75825 +2968,30,2.5,111.05,1.7,63.758 +2969,30,2.5,111.05,1.7,63.75775 +2970,30,2.5,111.05,1.7,63.7575 +2971,30,2.5,111.05,1.7,63.75725 +2972,30,2.5,111.05,1.7,63.757 +2973,30,2.5,111.05,1.7,63.75675 +2974,30,2.5,111.05,1.7,63.7565 +2975,30,2.5,111.05,1.7,63.75625 +2976,30,2.5,111.05,1.7,63.756 +2977,30,2.5,111.05,1.7,63.75575 +2978,30,2.5,111.05,1.7,63.7555 +2979,30,2.5,111.05,1.7,63.75525 +2980,30,2.5,111.05,1.7,63.755 +2981,30,2.5,111.05,1.7,63.75475 +2982,30,2.5,111.05,1.7,63.7545 +2983,30,2.5,111.05,1.7,63.75425 +2984,30,2.5,111.05,1.7,63.754 +2985,30,2.5,111.05,1.7,63.75375 +2986,30,2.5,111.05,1.7,63.7535 +2987,30,2.5,111.05,1.7,63.75325 +2988,30,2.5,111.05,1.7,63.753 +2989,30,2.5,111.05,1.7,63.75275 +2990,30,2.5,111.05,1.7,63.7525 +2991,30,2.5,111.05,1.7,63.75225 +2992,30,2.5,111.05,1.7,63.752 +2993,30,2.5,111.05,1.7,63.75175 +2994,30,2.5,111.05,1.7,63.7515 +2995,30,2.5,111.05,1.7,63.75125 +2996,30,2.5,111.05,1.7,63.751 +2997,30,2.5,111.05,1.7,63.75075 +2998,30,2.5,111.05,1.7,63.7505 +2999,30,2.5,111.05,1.7,63.75025 +3000,30,2.5,111.05,1.7,63.75 +3001,30,2.5,111.05,1.7,63.75 +3002,30,2.5,111.05,1.7,63.75 +3003,30,2.5,111.05,1.7,63.75 +3004,30,2.5,111.05,1.7,63.75 +3005,30,2.5,111.05,1.7,63.75 +3006,30,2.5,111.05,1.7,63.75 +3007,30,2.5,111.05,1.7,63.75 +3008,30,2.5,111.05,1.7,63.75 +3009,30,2.5,111.05,1.7,63.75 +3010,30,2.5,111.05,1.7,63.75 +3011,30,2.5,111.05,1.7,63.75 +3012,30,2.5,111.05,1.7,63.75 +3013,30,2.5,111.05,1.7,63.75 +3014,30,2.5,111.05,1.7,63.75 +3015,30,2.5,111.05,1.7,63.75 +3016,30,2.5,111.05,1.7,63.75 +3017,30,2.5,111.05,1.7,63.75 +3018,30,2.5,111.05,1.7,63.75 +3019,30,2.5,111.05,1.7,63.75 +3020,30,2.5,111.05,1.7,63.75 +3021,30,2.5,111.05,1.7,63.75 +3022,30,2.5,111.05,1.7,63.75 +3023,30,2.5,111.05,1.7,63.75 +3024,30,2.5,111.05,1.7,63.75 +3025,30,2.5,111.05,1.7,63.75 +3026,30,2.5,111.05,1.7,63.75 +3027,30,2.5,111.05,1.7,63.75 +3028,30,2.5,111.05,1.7,63.75 +3029,30,2.5,111.05,1.7,63.75 +3030,30,2.5,111.05,1.7,63.75 +3031,30,2.5,111.05,1.7,63.75 +3032,30,2.5,111.05,1.7,63.75 +3033,30,2.5,111.05,1.7,63.75 +3034,30,2.5,111.05,1.7,63.75 +3035,30,2.5,111.05,1.7,63.75 +3036,30,2.5,111.05,1.7,63.75 +3037,30,2.5,111.05,1.7,63.75 +3038,30,2.5,111.05,1.7,63.75 +3039,30,2.5,111.05,1.7,63.75 +3040,30,2.5,111.05,1.7,63.75 +3041,30,2.5,111.05,1.7,63.75 +3042,30,2.5,111.05,1.7,63.75 +3043,30,2.5,111.05,1.7,63.75 +3044,30,2.5,111.05,1.7,63.75 +3045,30,2.5,111.05,1.7,63.75 +3046,30,2.5,111.05,1.7,63.75 +3047,30,2.5,111.05,1.7,63.75 +3048,30,2.5,111.05,1.7,63.75 +3049,30,2.5,111.05,1.7,63.75 +3050,30,2.5,111.05,1.7,63.75 +3051,30,2.5,111.05,1.7,63.75 +3052,30,2.5,111.05,1.7,63.75 +3053,30,2.5,111.05,1.7,63.75 +3054,30,2.5,111.05,1.7,63.75 +3055,30,2.5,111.05,1.7,63.75 +3056,30,2.5,111.05,1.7,63.75 +3057,30,2.5,111.05,1.7,63.75 +3058,30,2.5,111.05,1.7,63.75 +3059,30,2.5,111.05,1.7,63.75 +3060,30,2.5,111.05,1.7,63.75 +3061,30,2.5,111.05,1.7,63.75 +3062,30,2.5,111.05,1.7,63.75 +3063,30,2.5,111.05,1.7,63.75 +3064,30,2.5,111.05,1.7,63.75 +3065,30,2.5,111.05,1.7,63.75 +3066,30,2.5,111.05,1.7,63.75 +3067,30,2.5,111.05,1.7,63.75 +3068,30,2.5,111.05,1.7,63.75 +3069,30,2.5,111.05,1.7,63.75 +3070,30,2.5,111.05,1.7,63.75 +3071,30,2.5,111.05,1.7,63.75 +3072,30,2.5,111.05,1.7,63.75 +3073,30,2.5,111.05,1.7,63.75 +3074,30,2.5,111.05,1.7,63.75 +3075,30,2.5,111.05,1.7,63.75 +3076,30,2.5,111.05,1.7,63.75 +3077,30,2.5,111.05,1.7,63.75 +3078,30,2.5,111.05,1.7,63.75 +3079,30,2.5,111.05,1.7,63.75 +3080,30,2.5,111.05,1.7,63.75 +3081,30,2.5,111.05,1.7,63.75 +3082,30,2.5,111.05,1.7,63.75 +3083,30,2.5,111.05,1.7,63.75 +3084,30,2.5,111.05,1.7,63.75 +3085,30,2.5,111.05,1.7,63.75 +3086,30,2.5,111.05,1.7,63.75 +3087,30,2.5,111.05,1.7,63.75 +3088,30,2.5,111.05,1.7,63.75 +3089,30,2.5,111.05,1.7,63.75 +3090,30,2.5,111.05,1.7,63.75 +3091,30,2.5,111.05,1.7,63.75 +3092,30,2.5,111.05,1.7,63.75 +3093,30,2.5,111.05,1.7,63.75 +3094,30,2.5,111.05,1.7,63.75 +3095,30,2.5,111.05,1.7,63.75 +3096,30,2.5,111.05,1.7,63.75 +3097,30,2.5,111.05,1.7,63.75 +3098,30,2.5,111.05,1.7,63.75 +3099,30,2.5,111.05,1.7,63.75 +3100,30,2.5,111.05,1.7,63.75 +3101,30,2.5,111.05,1.7,63.75 +3102,30,2.5,111.05,1.7,63.75 +3103,30,2.5,111.05,1.7,63.75 +3104,30,2.5,111.05,1.7,63.75 +3105,30,2.5,111.05,1.7,63.75 +3106,30,2.5,111.05,1.7,63.75 +3107,30,2.5,111.05,1.7,63.75 +3108,30,2.5,111.05,1.7,63.75 +3109,30,2.5,111.05,1.7,63.75 +3110,30,2.5,111.05,1.7,63.75 +3111,30,2.5,111.05,1.7,63.75 +3112,30,2.5,111.05,1.7,63.75 +3113,30,2.5,111.05,1.7,63.75 +3114,30,2.5,111.05,1.7,63.75 +3115,30,2.5,111.05,1.7,63.75 +3116,30,2.5,111.05,1.7,63.75 +3117,30,2.5,111.05,1.7,63.75 +3118,30,2.5,111.05,1.7,63.75 +3119,30,2.5,111.05,1.7,63.75 +3120,30,2.5,111.05,1.7,63.75 +3121,30,2.5,111.05,1.7,63.75 +3122,30,2.5,111.05,1.7,63.75 +3123,30,2.5,111.05,1.7,63.75 +3124,30,2.5,111.05,1.7,63.75 +3125,30,2.5,111.05,1.7,63.75 +3126,30,2.5,111.05,1.7,63.75 +3127,30,2.5,111.05,1.7,63.75 +3128,30,2.5,111.05,1.7,63.75 +3129,30,2.5,111.05,1.7,63.75 +3130,30,2.5,111.05,1.7,63.75 +3131,30,2.5,111.05,1.7,63.75 +3132,30,2.5,111.05,1.7,63.75 +3133,30,2.5,111.05,1.7,63.75 +3134,30,2.5,111.05,1.7,63.75 +3135,30,2.5,111.05,1.7,63.75 +3136,30,2.5,111.05,1.7,63.75 +3137,30,2.5,111.05,1.7,63.75 +3138,30,2.5,111.05,1.7,63.75 +3139,30,2.5,111.05,1.7,63.75 +3140,30,2.5,111.05,1.7,63.75 +3141,30,2.5,111.05,1.7,63.75 +3142,30,2.5,111.05,1.7,63.75 +3143,30,2.5,111.05,1.7,63.75 +3144,30,2.5,111.05,1.7,63.75 +3145,30,2.5,111.05,1.7,63.75 +3146,30,2.5,111.05,1.7,63.75 +3147,30,2.5,111.05,1.7,63.75 +3148,30,2.5,111.05,1.7,63.75 +3149,30,2.5,111.05,1.7,63.75 +3150,30,2.5,111.05,1.7,63.75 +3151,30,2.5,111.05,1.7,63.75 +3152,30,2.5,111.05,1.7,63.75 +3153,30,2.5,111.05,1.7,63.75 +3154,30,2.5,111.05,1.7,63.75 +3155,30,2.5,111.05,1.7,63.75 +3156,30,2.5,111.05,1.7,63.75 +3157,30,2.5,111.05,1.7,63.75 +3158,30,2.5,111.05,1.7,63.75 +3159,30,2.5,111.05,1.7,63.75 +3160,30,2.5,111.05,1.7,63.75 +3161,30,2.5,111.05,1.7,63.75 +3162,30,2.5,111.05,1.7,63.75 +3163,30,2.5,111.05,1.7,63.75 +3164,30,2.5,111.05,1.7,63.75 +3165,30,2.5,111.05,1.7,63.75 +3166,30,2.5,111.05,1.7,63.75 +3167,30,2.5,111.05,1.7,63.75 +3168,30,2.5,111.05,1.7,63.75 +3169,30,2.5,111.05,1.7,63.75 +3170,30,2.5,111.05,1.7,63.75 +3171,30,2.5,111.05,1.7,63.75 +3172,30,2.5,111.05,1.7,63.75 +3173,30,2.5,111.05,1.7,63.75 +3174,30,2.5,111.05,1.7,63.75 +3175,30,2.5,111.05,1.7,63.75 +3176,30,2.5,111.05,1.7,63.75 +3177,30,2.5,111.05,1.7,63.75 +3178,30,2.5,111.05,1.7,63.75 +3179,30,2.5,111.05,1.7,63.75 +3180,30,2.5,111.05,1.7,63.75 +3181,30,2.5,111.05,1.7,63.75 +3182,30,2.5,111.05,1.7,63.75 +3183,30,2.5,111.05,1.7,63.75 +3184,30,2.5,111.05,1.7,63.75 +3185,30,2.5,111.05,1.7,63.75 +3186,30,2.5,111.05,1.7,63.75 +3187,30,2.5,111.05,1.7,63.75 +3188,30,2.5,111.05,1.7,63.75 +3189,30,2.5,111.05,1.7,63.75 +3190,30,2.5,111.05,1.7,63.75 +3191,30,2.5,111.05,1.7,63.75 +3192,30,2.5,111.05,1.7,63.75 +3193,30,2.5,111.05,1.7,63.75 +3194,30,2.5,111.05,1.7,63.75 +3195,30,2.5,111.05,1.7,63.75 +3196,30,2.5,111.05,1.7,63.75 +3197,30,2.5,111.05,1.7,63.75 +3198,30,2.5,111.05,1.7,63.75 +3199,30,2.5,111.05,1.7,63.75 +3200,30,2.5,111.05,1.7,63.75 +3201,30,2.5,111.05,1.7,63.75 +3202,30,2.5,111.05,1.7,63.75 +3203,30,2.5,111.05,1.7,63.75 +3204,30,2.5,111.05,1.7,63.75 +3205,30,2.5,111.05,1.7,63.75 +3206,30,2.5,111.05,1.7,63.75 +3207,30,2.5,111.05,1.7,63.75 +3208,30,2.5,111.05,1.7,63.75 +3209,30,2.5,111.05,1.7,63.75 +3210,30,2.5,111.05,1.7,63.75 +3211,30,2.5,111.05,1.7,63.75 +3212,30,2.5,111.05,1.7,63.75 +3213,30,2.5,111.05,1.7,63.75 +3214,30,2.5,111.05,1.7,63.75 +3215,30,2.5,111.05,1.7,63.75 +3216,30,2.5,111.05,1.7,63.75 +3217,30,2.5,111.05,1.7,63.75 +3218,30,2.5,111.05,1.7,63.75 +3219,30,2.5,111.05,1.7,63.75 +3220,30,2.5,111.05,1.7,63.75 +3221,30,2.5,111.05,1.7,63.75 +3222,30,2.5,111.05,1.7,63.75 +3223,30,2.5,111.05,1.7,63.75 +3224,30,2.5,111.05,1.7,63.75 +3225,30,2.5,111.05,1.7,63.75 +3226,30,2.5,111.05,1.7,63.75 +3227,30,2.5,111.05,1.7,63.75 +3228,30,2.5,111.05,1.7,63.75 +3229,30,2.5,111.05,1.7,63.75 +3230,30,2.5,111.05,1.7,63.75 +3231,30,2.5,111.05,1.7,63.75 +3232,30,2.5,111.05,1.7,63.75 +3233,30,2.5,111.05,1.7,63.75 +3234,30,2.5,111.05,1.7,63.75 +3235,30,2.5,111.05,1.7,63.75 +3236,30,2.5,111.05,1.7,63.75 +3237,30,2.5,111.05,1.7,63.75 +3238,30,2.5,111.05,1.7,63.75 +3239,30,2.5,111.05,1.7,63.75 +3240,30,2.5,111.05,1.7,63.75 +3241,30,2.5,111.05,1.7,63.75 +3242,30,2.5,111.05,1.7,63.75 +3243,30,2.5,111.05,1.7,63.75 +3244,30,2.5,111.05,1.7,63.75 +3245,30,2.5,111.05,1.7,63.75 +3246,30,2.5,111.05,1.7,63.75 +3247,30,2.5,111.05,1.7,63.75 +3248,30,2.5,111.05,1.7,63.75 +3249,30,2.5,111.05,1.7,63.75 +3250,30,2.5,111.05,1.7,63.75 +3251,30,2.5,111.05,1.7,63.75 +3252,30,2.5,111.05,1.7,63.75 +3253,30,2.5,111.05,1.7,63.75 +3254,30,2.5,111.05,1.7,63.75 +3255,30,2.5,111.05,1.7,63.75 +3256,30,2.5,111.05,1.7,63.75 +3257,30,2.5,111.05,1.7,63.75 +3258,30,2.5,111.05,1.7,63.75 +3259,30,2.5,111.05,1.7,63.75 +3260,30,2.5,111.05,1.7,63.75 +3261,30,2.5,111.05,1.7,63.75 +3262,30,2.5,111.05,1.7,63.75 +3263,30,2.5,111.05,1.7,63.75 +3264,30,2.5,111.05,1.7,63.75 +3265,30,2.5,111.05,1.7,63.75 +3266,30,2.5,111.05,1.7,63.75 +3267,30,2.5,111.05,1.7,63.75 +3268,30,2.5,111.05,1.7,63.75 +3269,30,2.5,111.05,1.7,63.75 +3270,30,2.5,111.05,1.7,63.75 +3271,30,2.5,111.05,1.7,63.75 +3272,30,2.5,111.05,1.7,63.75 +3273,30,2.5,111.05,1.7,63.75 +3274,30,2.5,111.05,1.7,63.75 +3275,30,2.5,111.05,1.7,63.75 +3276,30,2.5,111.05,1.7,63.75 +3277,30,2.5,111.05,1.7,63.75 +3278,30,2.5,111.05,1.7,63.75 +3279,30,2.5,111.05,1.7,63.75 +3280,30,2.5,111.05,1.7,63.75 +3281,30,2.5,111.05,1.7,63.75 +3282,30,2.5,111.05,1.7,63.75 +3283,30,2.5,111.05,1.7,63.75 +3284,30,2.5,111.05,1.7,63.75 +3285,30,2.5,111.05,1.7,63.75 +3286,30,2.5,111.05,1.7,63.75 +3287,30,2.5,111.05,1.7,63.75 +3288,30,2.5,111.05,1.7,63.75 +3289,30,2.5,111.05,1.7,63.75 +3290,30,2.5,111.05,1.7,63.75 +3291,30,2.5,111.05,1.7,63.75 +3292,30,2.5,111.05,1.7,63.75 +3293,30,2.5,111.05,1.7,63.75 +3294,30,2.5,111.05,1.7,63.75 +3295,30,2.5,111.05,1.7,63.75 +3296,30,2.5,111.05,1.7,63.75 +3297,30,2.5,111.05,1.7,63.75 +3298,30,2.5,111.05,1.7,63.75 +3299,30,2.5,111.05,1.7,63.75 +3300,30,2.5,111.05,1.7,63.75 +3301,30,2.5,111.05,1.7,63.75 +3302,30,2.5,111.05,1.7,63.75 +3303,30,2.5,111.05,1.7,63.75 +3304,30,2.5,111.05,1.7,63.75 +3305,30,2.5,111.05,1.7,63.75 +3306,30,2.5,111.05,1.7,63.75 +3307,30,2.5,111.05,1.7,63.75 +3308,30,2.5,111.05,1.7,63.75 +3309,30,2.5,111.05,1.7,63.75 +3310,30,2.5,111.05,1.7,63.75 +3311,30,2.5,111.05,1.7,63.75 +3312,30,2.5,111.05,1.7,63.75 +3313,30,2.5,111.05,1.7,63.75 +3314,30,2.5,111.05,1.7,63.75 +3315,30,2.5,111.05,1.7,63.75 +3316,30,2.5,111.05,1.7,63.75 +3317,30,2.5,111.05,1.7,63.75 +3318,30,2.5,111.05,1.7,63.75 +3319,30,2.5,111.05,1.7,63.75 +3320,30,2.5,111.05,1.7,63.75 +3321,30,2.5,111.05,1.7,63.75 +3322,30,2.5,111.05,1.7,63.75 +3323,30,2.5,111.05,1.7,63.75 +3324,30,2.5,111.05,1.7,63.75 +3325,30,2.5,111.05,1.7,63.75 +3326,30,2.5,111.05,1.7,63.75 +3327,30,2.5,111.05,1.7,63.75 +3328,30,2.5,111.05,1.7,63.75 +3329,30,2.5,111.05,1.7,63.75 +3330,30,2.5,111.05,1.7,63.75 +3331,30,2.5,111.05,1.7,63.75 +3332,30,2.5,111.05,1.7,63.75 +3333,30,2.5,111.05,1.7,63.75 +3334,30,2.5,111.05,1.7,63.75 +3335,30,2.5,111.05,1.7,63.75 +3336,30,2.5,111.05,1.7,63.75 +3337,30,2.5,111.05,1.7,63.75 +3338,30,2.5,111.05,1.7,63.75 +3339,30,2.5,111.05,1.7,63.75 +3340,30,2.5,111.05,1.7,63.75 +3341,30,2.5,111.05,1.7,63.75 +3342,30,2.5,111.05,1.7,63.75 +3343,30,2.5,111.05,1.7,63.75 +3344,30,2.5,111.05,1.7,63.75 +3345,30,2.5,111.05,1.7,63.75 +3346,30,2.5,111.05,1.7,63.75 +3347,30,2.5,111.05,1.7,63.75 +3348,30,2.5,111.05,1.7,63.75 +3349,30,2.5,111.05,1.7,63.75 +3350,30,2.5,111.05,1.7,63.75 +3351,30,2.5,111.05,1.7,63.75 +3352,30,2.5,111.05,1.7,63.75 +3353,30,2.5,111.05,1.7,63.75 +3354,30,2.5,111.05,1.7,63.75 +3355,30,2.5,111.05,1.7,63.75 +3356,30,2.5,111.05,1.7,63.75 +3357,30,2.5,111.05,1.7,63.75 +3358,30,2.5,111.05,1.7,63.75 +3359,30,2.5,111.05,1.7,63.75 +3360,30,2.5,111.05,1.7,63.75 +3361,30,2.5,111.05,1.7,63.75 +3362,30,2.5,111.05,1.7,63.75 +3363,30,2.5,111.05,1.7,63.75 +3364,30,2.5,111.05,1.7,63.75 +3365,30,2.5,111.05,1.7,63.75 +3366,30,2.5,111.05,1.7,63.75 +3367,30,2.5,111.05,1.7,63.75 +3368,30,2.5,111.05,1.7,63.75 +3369,30,2.5,111.05,1.7,63.75 +3370,30,2.5,111.05,1.7,63.75 +3371,30,2.5,111.05,1.7,63.75 +3372,30,2.5,111.05,1.7,63.75 +3373,30,2.5,111.05,1.7,63.75 +3374,30,2.5,111.05,1.7,63.75 +3375,30,2.5,111.05,1.7,63.75 +3376,30,2.5,111.05,1.7,63.75 +3377,30,2.5,111.05,1.7,63.75 +3378,30,2.5,111.05,1.7,63.75 +3379,30,2.5,111.05,1.7,63.75 +3380,30,2.5,111.05,1.7,63.75 +3381,30,2.5,111.05,1.7,63.75 +3382,30,2.5,111.05,1.7,63.75 +3383,30,2.5,111.05,1.7,63.75 +3384,30,2.5,111.05,1.7,63.75 +3385,30,2.5,111.05,1.7,63.75 +3386,30,2.5,111.05,1.7,63.75 +3387,30,2.5,111.05,1.7,63.75 +3388,30,2.5,111.05,1.7,63.75 +3389,30,2.5,111.05,1.7,63.75 +3390,30,2.5,111.05,1.7,63.75 +3391,30,2.5,111.05,1.7,63.75 +3392,30,2.5,111.05,1.7,63.75 +3393,30,2.5,111.05,1.7,63.75 +3394,30,2.5,111.05,1.7,63.75 +3395,30,2.5,111.05,1.7,63.75 +3396,30,2.5,111.05,1.7,63.75 +3397,30,2.5,111.05,1.7,63.75 +3398,30,2.5,111.05,1.7,63.75 +3399,30,2.5,111.05,1.7,63.75 +3400,30,2.5,111.05,1.7,63.75 +3401,30,2.5,111.05,1.7,63.75 +3402,30,2.5,111.05,1.7,63.75 +3403,30,2.5,111.05,1.7,63.75 +3404,30,2.5,111.05,1.7,63.75 +3405,30,2.5,111.05,1.7,63.75 +3406,30,2.5,111.05,1.7,63.75 +3407,30,2.5,111.05,1.7,63.75 +3408,30,2.5,111.05,1.7,63.75 +3409,30,2.5,111.05,1.7,63.75 +3410,30,2.5,111.05,1.7,63.75 +3411,30,2.5,111.05,1.7,63.75 +3412,30,2.5,111.05,1.7,63.75 +3413,30,2.5,111.05,1.7,63.75 +3414,30,2.5,111.05,1.7,63.75 +3415,30,2.5,111.05,1.7,63.75 +3416,30,2.5,111.05,1.7,63.75 +3417,30,2.5,111.05,1.7,63.75 +3418,30,2.5,111.05,1.7,63.75 +3419,30,2.5,111.05,1.7,63.75 +3420,30,2.5,111.05,1.7,63.75 +3421,30,2.5,111.05,1.7,63.75 +3422,30,2.5,111.05,1.7,63.75 +3423,30,2.5,111.05,1.7,63.75 +3424,30,2.5,111.05,1.7,63.75 +3425,30,2.5,111.05,1.7,63.75 +3426,30,2.5,111.05,1.7,63.75 +3427,30,2.5,111.05,1.7,63.75 +3428,30,2.5,111.05,1.7,63.75 +3429,30,2.5,111.05,1.7,63.75 +3430,30,2.5,111.05,1.7,63.75 +3431,30,2.5,111.05,1.7,63.75 +3432,30,2.5,111.05,1.7,63.75 +3433,30,2.5,111.05,1.7,63.75 +3434,30,2.5,111.05,1.7,63.75 +3435,30,2.5,111.05,1.7,63.75 +3436,30,2.5,111.05,1.7,63.75 +3437,30,2.5,111.05,1.7,63.75 +3438,30,2.5,111.05,1.7,63.75 +3439,30,2.5,111.05,1.7,63.75 +3440,30,2.5,111.05,1.7,63.75 +3441,30,2.5,111.05,1.7,63.75 +3442,30,2.5,111.05,1.7,63.75 +3443,30,2.5,111.05,1.7,63.75 +3444,30,2.5,111.05,1.7,63.75 +3445,30,2.5,111.05,1.7,63.75 +3446,30,2.5,111.05,1.7,63.75 +3447,30,2.5,111.05,1.7,63.75 +3448,30,2.5,111.05,1.7,63.75 +3449,30,2.5,111.05,1.7,63.75 +3450,30,2.5,111.05,1.7,63.75 +3451,30,2.5,111.05,1.7,63.75 +3452,30,2.5,111.05,1.7,63.75 +3453,30,2.5,111.05,1.7,63.75 +3454,30,2.5,111.05,1.7,63.75 +3455,30,2.5,111.05,1.7,63.75 +3456,30,2.5,111.05,1.7,63.75 +3457,30,2.5,111.05,1.7,63.75 +3458,30,2.5,111.05,1.7,63.75 +3459,30,2.5,111.05,1.7,63.75 +3460,30,2.5,111.05,1.7,63.75 +3461,30,2.5,111.05,1.7,63.75 +3462,30,2.5,111.05,1.7,63.75 +3463,30,2.5,111.05,1.7,63.75 +3464,30,2.5,111.05,1.7,63.75 +3465,30,2.5,111.05,1.7,63.75 +3466,30,2.5,111.05,1.7,63.75 +3467,30,2.5,111.05,1.7,63.75 +3468,30,2.5,111.05,1.7,63.75 +3469,30,2.5,111.05,1.7,63.75 +3470,30,2.5,111.05,1.7,63.75 +3471,30,2.5,111.05,1.7,63.75 +3472,30,2.5,111.05,1.7,63.75 +3473,30,2.5,111.05,1.7,63.75 +3474,30,2.5,111.05,1.7,63.75 +3475,30,2.5,111.05,1.7,63.75 +3476,30,2.5,111.05,1.7,63.75 +3477,30,2.5,111.05,1.7,63.75 +3478,30,2.5,111.05,1.7,63.75 +3479,30,2.5,111.05,1.7,63.75 +3480,30,2.5,111.05,1.7,63.75 +3481,30,2.5,111.05,1.7,63.75 +3482,30,2.5,111.05,1.7,63.75 +3483,30,2.5,111.05,1.7,63.75 +3484,30,2.5,111.05,1.7,63.75 +3485,30,2.5,111.05,1.7,63.75 +3486,30,2.5,111.05,1.7,63.75 +3487,30,2.5,111.05,1.7,63.75 +3488,30,2.5,111.05,1.7,63.75 +3489,30,2.5,111.05,1.7,63.75 +3490,30,2.5,111.05,1.7,63.75 +3491,30,2.5,111.05,1.7,63.75 +3492,30,2.5,111.05,1.7,63.75 +3493,30,2.5,111.05,1.7,63.75 +3494,30,2.5,111.05,1.7,63.75 +3495,30,2.5,111.05,1.7,63.75 +3496,30,2.5,111.05,1.7,63.75 +3497,30,2.5,111.05,1.7,63.75 +3498,30,2.5,111.05,1.7,63.75 +3499,30,2.5,111.05,1.7,63.75 +3500,30,2.5,111.05,1.7,63.75 +3501,30,2.5,111.05,1.7,63.75 +3502,30,2.5,111.05,1.7,63.75 +3503,30,2.5,111.05,1.7,63.75 +3504,30,2.5,111.05,1.7,63.75 +3505,30,2.5,111.05,1.7,63.75 +3506,30,2.5,111.05,1.7,63.75 +3507,30,2.5,111.05,1.7,63.75 +3508,30,2.5,111.05,1.7,63.75 +3509,30,2.5,111.05,1.7,63.75 +3510,30,2.5,111.05,1.7,63.75 +3511,30,2.5,111.05,1.7,63.75 +3512,30,2.5,111.05,1.7,63.75 +3513,30,2.5,111.05,1.7,63.75 +3514,30,2.5,111.05,1.7,63.75 +3515,30,2.5,111.05,1.7,63.75 +3516,30,2.5,111.05,1.7,63.75 +3517,30,2.5,111.05,1.7,63.75 +3518,30,2.5,111.05,1.7,63.75 +3519,30,2.5,111.05,1.7,63.75 +3520,30,2.5,111.05,1.7,63.75 +3521,30,2.5,111.05,1.7,63.75 +3522,30,2.5,111.05,1.7,63.75 +3523,30,2.5,111.05,1.7,63.75 +3524,30,2.5,111.05,1.7,63.75 +3525,30,2.5,111.05,1.7,63.75 +3526,30,2.5,111.05,1.7,63.75 +3527,30,2.5,111.05,1.7,63.75 +3528,30,2.5,111.05,1.7,63.75 +3529,30,2.5,111.05,1.7,63.75 +3530,30,2.5,111.05,1.7,63.75 +3531,30,2.5,111.05,1.7,63.75 +3532,30,2.5,111.05,1.7,63.75 +3533,30,2.5,111.05,1.7,63.75 +3534,30,2.5,111.05,1.7,63.75 +3535,30,2.5,111.05,1.7,63.75 +3536,30,2.5,111.05,1.7,63.75 +3537,30,2.5,111.05,1.7,63.75 +3538,30,2.5,111.05,1.7,63.75 +3539,30,2.5,111.05,1.7,63.75 +3540,30,2.5,111.05,1.7,63.75 +3541,30,2.5,111.05,1.7,63.75 +3542,30,2.5,111.05,1.7,63.75 +3543,30,2.5,111.05,1.7,63.75 +3544,30,2.5,111.05,1.7,63.75 +3545,30,2.5,111.05,1.7,63.75 +3546,30,2.5,111.05,1.7,63.75 +3547,30,2.5,111.05,1.7,63.75 +3548,30,2.5,111.05,1.7,63.75 +3549,30,2.5,111.05,1.7,63.75 +3550,30,2.5,111.05,1.7,63.75 +3551,30,2.5,111.05,1.7,63.75 +3552,30,2.5,111.05,1.7,63.75 +3553,30,2.5,111.05,1.7,63.75 +3554,30,2.5,111.05,1.7,63.75 +3555,30,2.5,111.05,1.7,63.75 +3556,30,2.5,111.05,1.7,63.75 +3557,30,2.5,111.05,1.7,63.75 +3558,30,2.5,111.05,1.7,63.75 +3559,30,2.5,111.05,1.7,63.75 +3560,30,2.5,111.05,1.7,63.75 +3561,30,2.5,111.05,1.7,63.75 +3562,30,2.5,111.05,1.7,63.75 +3563,30,2.5,111.05,1.7,63.75 +3564,30,2.5,111.05,1.7,63.75 +3565,30,2.5,111.05,1.7,63.75 +3566,30,2.5,111.05,1.7,63.75 +3567,30,2.5,111.05,1.7,63.75 +3568,30,2.5,111.05,1.7,63.75 +3569,30,2.5,111.05,1.7,63.75 +3570,30,2.5,111.05,1.7,63.75 +3571,30,2.5,111.05,1.7,63.75 +3572,30,2.5,111.05,1.7,63.75 +3573,30,2.5,111.05,1.7,63.75 +3574,30,2.5,111.05,1.7,63.75 +3575,30,2.5,111.05,1.7,63.75 +3576,30,2.5,111.05,1.7,63.75 +3577,30,2.5,111.05,1.7,63.75 +3578,30,2.5,111.05,1.7,63.75 +3579,30,2.5,111.05,1.7,63.75 +3580,30,2.5,111.05,1.7,63.75 +3581,30,2.5,111.05,1.7,63.75 +3582,30,2.5,111.05,1.7,63.75 +3583,30,2.5,111.05,1.7,63.75 +3584,30,2.5,111.05,1.7,63.75 +3585,30,2.5,111.05,1.7,63.75 +3586,30,2.5,111.05,1.7,63.75 +3587,30,2.5,111.05,1.7,63.75 +3588,30,2.5,111.05,1.7,63.75 +3589,30,2.5,111.05,1.7,63.75 +3590,30,2.5,111.05,1.7,63.75 +3591,30,2.5,111.05,1.7,63.75 +3592,30,2.5,111.05,1.7,63.75 +3593,30,2.5,111.05,1.7,63.75 +3594,30,2.5,111.05,1.7,63.75 +3595,30,2.5,111.05,1.7,63.75 +3596,30,2.5,111.05,1.7,63.75 +3597,30,2.5,111.05,1.7,63.75 +3598,30,2.5,111.05,1.7,63.75 +3599,30,2.5,111.05,1.7,63.75 +3600,30,2.5,111.05,1.7,63.75 +3601,30,2.5,111.05,1.7,63.75 +3602,30,2.5,111.05,1.7,63.75 +3603,30,2.5,111.05,1.7,63.75 +3604,30,2.5,111.05,1.7,63.75 +3605,30,2.5,111.05,1.7,63.75 +3606,30,2.5,111.05,1.7,63.75 +3607,30,2.5,111.05,1.7,63.75 +3608,30,2.5,111.05,1.7,63.75 +3609,30,2.5,111.05,1.7,63.75 +3610,30,2.5,111.05,1.7,63.75 +3611,30,2.5,111.05,1.7,63.75 +3612,30,2.5,111.05,1.7,63.75 +3613,30,2.5,111.05,1.7,63.75 +3614,30,2.5,111.05,1.7,63.75 +3615,30,2.5,111.05,1.7,63.75 +3616,30,2.5,111.05,1.7,63.75 +3617,30,2.5,111.05,1.7,63.75 +3618,30,2.5,111.05,1.7,63.75 +3619,30,2.5,111.05,1.7,63.75 +3620,30,2.5,111.05,1.7,63.75 +3621,30,2.5,111.05,1.7,63.75 +3622,30,2.5,111.05,1.7,63.75 +3623,30,2.5,111.05,1.7,63.75 +3624,30,2.5,111.05,1.7,63.75 +3625,30,2.5,111.05,1.7,63.75 +3626,30,2.5,111.05,1.7,63.75 +3627,30,2.5,111.05,1.7,63.75 +3628,30,2.5,111.05,1.7,63.75 +3629,30,2.5,111.05,1.7,63.75 +3630,30,2.5,111.05,1.7,63.75 +3631,30,2.5,111.05,1.7,63.75 +3632,30,2.5,111.05,1.7,63.75 +3633,30,2.5,111.05,1.7,63.75 +3634,30,2.5,111.05,1.7,63.75 +3635,30,2.5,111.05,1.7,63.75 +3636,30,2.5,111.05,1.7,63.75 +3637,30,2.5,111.05,1.7,63.75 +3638,30,2.5,111.05,1.7,63.75 +3639,30,2.5,111.05,1.7,63.75 +3640,30,2.5,111.05,1.7,63.75 +3641,30,2.5,111.05,1.7,63.75 +3642,30,2.5,111.05,1.7,63.75 +3643,30,2.5,111.05,1.7,63.75 +3644,30,2.5,111.05,1.7,63.75 +3645,30,2.5,111.05,1.7,63.75 +3646,30,2.5,111.05,1.7,63.75 +3647,30,2.5,111.05,1.7,63.75 +3648,30,2.5,111.05,1.7,63.75 +3649,30,2.5,111.05,1.7,63.75 +3650,30,2.5,111.05,1.7,63.75 +3651,30,2.5,111.05,1.7,63.75 +3652,30,2.5,111.05,1.7,63.75 +3653,30,2.5,111.05,1.7,63.75 +3654,30,2.5,111.05,1.7,63.75 +3655,30,2.5,111.05,1.7,63.75 +3656,30,2.5,111.05,1.7,63.75 +3657,30,2.5,111.05,1.7,63.75 +3658,30,2.5,111.05,1.7,63.75 +3659,30,2.5,111.05,1.7,63.75 +3660,30,2.5,111.05,1.7,63.75 +3661,30,2.5,111.05,1.7,63.75 +3662,30,2.5,111.05,1.7,63.75 +3663,30,2.5,111.05,1.7,63.75 +3664,30,2.5,111.05,1.7,63.75 +3665,30,2.5,111.05,1.7,63.75 +3666,30,2.5,111.05,1.7,63.75 +3667,30,2.5,111.05,1.7,63.75 +3668,30,2.5,111.05,1.7,63.75 +3669,30,2.5,111.05,1.7,63.75 +3670,30,2.5,111.05,1.7,63.75 +3671,30,2.5,111.05,1.7,63.75 +3672,30,2.5,111.05,1.7,63.75 +3673,30,2.5,111.05,1.7,63.75 +3674,30,2.5,111.05,1.7,63.75 +3675,30,2.5,111.05,1.7,63.75 +3676,30,2.5,111.05,1.7,63.75 +3677,30,2.5,111.05,1.7,63.75 +3678,30,2.5,111.05,1.7,63.75 +3679,30,2.5,111.05,1.7,63.75 +3680,30,2.5,111.05,1.7,63.75 +3681,30,2.5,111.05,1.7,63.75 +3682,30,2.5,111.05,1.7,63.75 +3683,30,2.5,111.05,1.7,63.75 +3684,30,2.5,111.05,1.7,63.75 +3685,30,2.5,111.05,1.7,63.75 +3686,30,2.5,111.05,1.7,63.75 +3687,30,2.5,111.05,1.7,63.75 +3688,30,2.5,111.05,1.7,63.75 +3689,30,2.5,111.05,1.7,63.75 +3690,30,2.5,111.05,1.7,63.75 +3691,30,2.5,111.05,1.7,63.75 +3692,30,2.5,111.05,1.7,63.75 +3693,30,2.5,111.05,1.7,63.75 +3694,30,2.5,111.05,1.7,63.75 +3695,30,2.5,111.05,1.7,63.75 +3696,30,2.5,111.05,1.7,63.75 +3697,30,2.5,111.05,1.7,63.75 +3698,30,2.5,111.05,1.7,63.75 +3699,30,2.5,111.05,1.7,63.75 +3700,30,2.5,111.05,1.7,63.75 +3701,30,2.5,111.05,1.7,63.75 +3702,30,2.5,111.05,1.7,63.75 +3703,30,2.5,111.05,1.7,63.75 +3704,30,2.5,111.05,1.7,63.75 +3705,30,2.5,111.05,1.7,63.75 +3706,30,2.5,111.05,1.7,63.75 +3707,30,2.5,111.05,1.7,63.75 +3708,30,2.5,111.05,1.7,63.75 +3709,30,2.5,111.05,1.7,63.75 +3710,30,2.5,111.05,1.7,63.75 +3711,30,2.5,111.05,1.7,63.75 +3712,30,2.5,111.05,1.7,63.75 +3713,30,2.5,111.05,1.7,63.75 +3714,30,2.5,111.05,1.7,63.75 +3715,30,2.5,111.05,1.7,63.75 +3716,30,2.5,111.05,1.7,63.75 +3717,30,2.5,111.05,1.7,63.75 +3718,30,2.5,111.05,1.7,63.75 +3719,30,2.5,111.05,1.7,63.75 +3720,30,2.5,111.05,1.7,63.75 +3721,30,2.5,111.05,1.7,63.75 +3722,30,2.5,111.05,1.7,63.75 +3723,30,2.5,111.05,1.7,63.75 +3724,30,2.5,111.05,1.7,63.75 +3725,30,2.5,111.05,1.7,63.75 +3726,30,2.5,111.05,1.7,63.75 +3727,30,2.5,111.05,1.7,63.75 +3728,30,2.5,111.05,1.7,63.75 +3729,30,2.5,111.05,1.7,63.75 +3730,30,2.5,111.05,1.7,63.75 +3731,30,2.5,111.05,1.7,63.75 +3732,30,2.5,111.05,1.7,63.75 +3733,30,2.5,111.05,1.7,63.75 +3734,30,2.5,111.05,1.7,63.75 +3735,30,2.5,111.05,1.7,63.75 +3736,30,2.5,111.05,1.7,63.75 +3737,30,2.5,111.05,1.7,63.75 +3738,30,2.5,111.05,1.7,63.75 +3739,30,2.5,111.05,1.7,63.75 +3740,30,2.5,111.05,1.7,63.75 +3741,30,2.5,111.05,1.7,63.75 +3742,30,2.5,111.05,1.7,63.75 +3743,30,2.5,111.05,1.7,63.75 +3744,30,2.5,111.05,1.7,63.75 +3745,30,2.5,111.05,1.7,63.75 +3746,30,2.5,111.05,1.7,63.75 +3747,30,2.5,111.05,1.7,63.75 +3748,30,2.5,111.05,1.7,63.75 +3749,30,2.5,111.05,1.7,63.75 +3750,30,2.5,111.05,1.7,63.75 +3751,30,2.5,111.05,1.7,63.75 +3752,30,2.5,111.05,1.7,63.75 +3753,30,2.5,111.05,1.7,63.75 +3754,30,2.5,111.05,1.7,63.75 +3755,30,2.5,111.05,1.7,63.75 +3756,30,2.5,111.05,1.7,63.75 +3757,30,2.5,111.05,1.7,63.75 +3758,30,2.5,111.05,1.7,63.75 +3759,30,2.5,111.05,1.7,63.75 +3760,30,2.5,111.05,1.7,63.75 +3761,30,2.5,111.05,1.7,63.75 +3762,30,2.5,111.05,1.7,63.75 +3763,30,2.5,111.05,1.7,63.75 +3764,30,2.5,111.05,1.7,63.75 +3765,30,2.5,111.05,1.7,63.75 +3766,30,2.5,111.05,1.7,63.75 +3767,30,2.5,111.05,1.7,63.75 +3768,30,2.5,111.05,1.7,63.75 +3769,30,2.5,111.05,1.7,63.75 +3770,30,2.5,111.05,1.7,63.75 +3771,30,2.5,111.05,1.7,63.75 +3772,30,2.5,111.05,1.7,63.75 +3773,30,2.5,111.05,1.7,63.75 +3774,30,2.5,111.05,1.7,63.75 +3775,30,2.5,111.05,1.7,63.75 +3776,30,2.5,111.05,1.7,63.75 +3777,30,2.5,111.05,1.7,63.75 +3778,30,2.5,111.05,1.7,63.75 +3779,30,2.5,111.05,1.7,63.75 +3780,30,2.5,111.05,1.7,63.75 +3781,30,2.5,111.05,1.7,63.75 +3782,30,2.5,111.05,1.7,63.75 +3783,30,2.5,111.05,1.7,63.75 +3784,30,2.5,111.05,1.7,63.75 +3785,30,2.5,111.05,1.7,63.75 +3786,30,2.5,111.05,1.7,63.75 +3787,30,2.5,111.05,1.7,63.75 +3788,30,2.5,111.05,1.7,63.75 +3789,30,2.5,111.05,1.7,63.75 +3790,30,2.5,111.05,1.7,63.75 +3791,30,2.5,111.05,1.7,63.75 +3792,30,2.5,111.05,1.7,63.75 +3793,30,2.5,111.05,1.7,63.75 +3794,30,2.5,111.05,1.7,63.75 +3795,30,2.5,111.05,1.7,63.75 +3796,30,2.5,111.05,1.7,63.75 +3797,30,2.5,111.05,1.7,63.75 +3798,30,2.5,111.05,1.7,63.75 +3799,30,2.5,111.05,1.7,63.75 +3800,30,2.5,111.05,1.7,63.75 +3801,30,2.5,111.05,1.7,63.75 +3802,30,2.5,111.05,1.7,63.75 +3803,30,2.5,111.05,1.7,63.75 +3804,30,2.5,111.05,1.7,63.75 +3805,30,2.5,111.05,1.7,63.75 +3806,30,2.5,111.05,1.7,63.75 +3807,30,2.5,111.05,1.7,63.75 +3808,30,2.5,111.05,1.7,63.75 +3809,30,2.5,111.05,1.7,63.75 +3810,30,2.5,111.05,1.7,63.75 +3811,30,2.5,111.05,1.7,63.75 +3812,30,2.5,111.05,1.7,63.75 +3813,30,2.5,111.05,1.7,63.75 +3814,30,2.5,111.05,1.7,63.75 +3815,30,2.5,111.05,1.7,63.75 +3816,30,2.5,111.05,1.7,63.75 +3817,30,2.5,111.05,1.7,63.75 +3818,30,2.5,111.05,1.7,63.75 +3819,30,2.5,111.05,1.7,63.75 +3820,30,2.5,111.05,1.7,63.75 +3821,30,2.5,111.05,1.7,63.75 +3822,30,2.5,111.05,1.7,63.75 +3823,30,2.5,111.05,1.7,63.75 +3824,30,2.5,111.05,1.7,63.75 +3825,30,2.5,111.05,1.7,63.75 +3826,30,2.5,111.05,1.7,63.75 +3827,30,2.5,111.05,1.7,63.75 +3828,30,2.5,111.05,1.7,63.75 +3829,30,2.5,111.05,1.7,63.75 +3830,30,2.5,111.05,1.7,63.75 +3831,30,2.5,111.05,1.7,63.75 +3832,30,2.5,111.05,1.7,63.75 +3833,30,2.5,111.05,1.7,63.75 +3834,30,2.5,111.05,1.7,63.75 +3835,30,2.5,111.05,1.7,63.75 +3836,30,2.5,111.05,1.7,63.75 +3837,30,2.5,111.05,1.7,63.75 +3838,30,2.5,111.05,1.7,63.75 +3839,30,2.5,111.05,1.7,63.75 +3840,30,2.5,111.05,1.7,63.75 +3841,30,2.5,111.05,1.7,63.75 +3842,30,2.5,111.05,1.7,63.75 +3843,30,2.5,111.05,1.7,63.75 +3844,30,2.5,111.05,1.7,63.75 +3845,30,2.5,111.05,1.7,63.75 +3846,30,2.5,111.05,1.7,63.75 +3847,30,2.5,111.05,1.7,63.75 +3848,30,2.5,111.05,1.7,63.75 +3849,30,2.5,111.05,1.7,63.75 +3850,30,2.5,111.05,1.7,63.75 +3851,30,2.5,111.05,1.7,63.75 +3852,30,2.5,111.05,1.7,63.75 +3853,30,2.5,111.05,1.7,63.75 +3854,30,2.5,111.05,1.7,63.75 +3855,30,2.5,111.05,1.7,63.75 +3856,30,2.5,111.05,1.7,63.75 +3857,30,2.5,111.05,1.7,63.75 +3858,30,2.5,111.05,1.7,63.75 +3859,30,2.5,111.05,1.7,63.75 +3860,30,2.5,111.05,1.7,63.75 +3861,30,2.5,111.05,1.7,63.75 +3862,30,2.5,111.05,1.7,63.75 +3863,30,2.5,111.05,1.7,63.75 +3864,30,2.5,111.05,1.7,63.75 +3865,30,2.5,111.05,1.7,63.75 +3866,30,2.5,111.05,1.7,63.75 +3867,30,2.5,111.05,1.7,63.75 +3868,30,2.5,111.05,1.7,63.75 +3869,30,2.5,111.05,1.7,63.75 +3870,30,2.5,111.05,1.7,63.75 +3871,30,2.5,111.05,1.7,63.75 +3872,30,2.5,111.05,1.7,63.75 +3873,30,2.5,111.05,1.7,63.75 +3874,30,2.5,111.05,1.7,63.75 +3875,30,2.5,111.05,1.7,63.75 +3876,30,2.5,111.05,1.7,63.75 +3877,30,2.5,111.05,1.7,63.75 +3878,30,2.5,111.05,1.7,63.75 +3879,30,2.5,111.05,1.7,63.75 +3880,30,2.5,111.05,1.7,63.75 +3881,30,2.5,111.05,1.7,63.75 +3882,30,2.5,111.05,1.7,63.75 +3883,30,2.5,111.05,1.7,63.75 +3884,30,2.5,111.05,1.7,63.75 +3885,30,2.5,111.05,1.7,63.75 +3886,30,2.5,111.05,1.7,63.75 +3887,30,2.5,111.05,1.7,63.75 +3888,30,2.5,111.05,1.7,63.75 +3889,30,2.5,111.05,1.7,63.75 +3890,30,2.5,111.05,1.7,63.75 +3891,30,2.5,111.05,1.7,63.75 +3892,30,2.5,111.05,1.7,63.75 +3893,30,2.5,111.05,1.7,63.75 +3894,30,2.5,111.05,1.7,63.75 +3895,30,2.5,111.05,1.7,63.75 +3896,30,2.5,111.05,1.7,63.75 +3897,30,2.5,111.05,1.7,63.75 +3898,30,2.5,111.05,1.7,63.75 +3899,30,2.5,111.05,1.7,63.75 +3900,30,2.5,111.05,1.7,63.75 +3901,30,2.5,111.05,1.7,63.75 +3902,30,2.5,111.05,1.7,63.75 +3903,30,2.5,111.05,1.7,63.75 +3904,30,2.5,111.05,1.7,63.75 +3905,30,2.5,111.05,1.7,63.75 +3906,30,2.5,111.05,1.7,63.75 +3907,30,2.5,111.05,1.7,63.75 +3908,30,2.5,111.05,1.7,63.75 +3909,30,2.5,111.05,1.7,63.75 +3910,30,2.5,111.05,1.7,63.75 +3911,30,2.5,111.05,1.7,63.75 +3912,30,2.5,111.05,1.7,63.75 +3913,30,2.5,111.05,1.7,63.75 +3914,30,2.5,111.05,1.7,63.75 +3915,30,2.5,111.05,1.7,63.75 +3916,30,2.5,111.05,1.7,63.75 +3917,30,2.5,111.05,1.7,63.75 +3918,30,2.5,111.05,1.7,63.75 +3919,30,2.5,111.05,1.7,63.75 +3920,30,2.5,111.05,1.7,63.75 +3921,30,2.5,111.05,1.7,63.75 +3922,30,2.5,111.05,1.7,63.75 +3923,30,2.5,111.05,1.7,63.75 +3924,30,2.5,111.05,1.7,63.75 +3925,30,2.5,111.05,1.7,63.75 +3926,30,2.5,111.05,1.7,63.75 +3927,30,2.5,111.05,1.7,63.75 +3928,30,2.5,111.05,1.7,63.75 +3929,30,2.5,111.05,1.7,63.75 +3930,30,2.5,111.05,1.7,63.75 +3931,30,2.5,111.05,1.7,63.75 +3932,30,2.5,111.05,1.7,63.75 +3933,30,2.5,111.05,1.7,63.75 +3934,30,2.5,111.05,1.7,63.75 +3935,30,2.5,111.05,1.7,63.75 +3936,30,2.5,111.05,1.7,63.75 +3937,30,2.5,111.05,1.7,63.75 +3938,30,2.5,111.05,1.7,63.75 +3939,30,2.5,111.05,1.7,63.75 +3940,30,2.5,111.05,1.7,63.75 +3941,30,2.5,111.05,1.7,63.75 +3942,30,2.5,111.05,1.7,63.75 +3943,30,2.5,111.05,1.7,63.75 +3944,30,2.5,111.05,1.7,63.75 +3945,30,2.5,111.05,1.7,63.75 +3946,30,2.5,111.05,1.7,63.75 +3947,30,2.5,111.05,1.7,63.75 +3948,30,2.5,111.05,1.7,63.75 +3949,30,2.5,111.05,1.7,63.75 +3950,30,2.5,111.05,1.7,63.75 +3951,30,2.5,111.05,1.7,63.75 +3952,30,2.5,111.05,1.7,63.75 +3953,30,2.5,111.05,1.7,63.75 +3954,30,2.5,111.05,1.7,63.75 +3955,30,2.5,111.05,1.7,63.75 +3956,30,2.5,111.05,1.7,63.75 +3957,30,2.5,111.05,1.7,63.75 +3958,30,2.5,111.05,1.7,63.75 +3959,30,2.5,111.05,1.7,63.75 +3960,30,2.5,111.05,1.7,63.75 +3961,30,2.5,111.05,1.7,63.75 +3962,30,2.5,111.05,1.7,63.75 +3963,30,2.5,111.05,1.7,63.75 +3964,30,2.5,111.05,1.7,63.75 +3965,30,2.5,111.05,1.7,63.75 +3966,30,2.5,111.05,1.7,63.75 +3967,30,2.5,111.05,1.7,63.75 +3968,30,2.5,111.05,1.7,63.75 +3969,30,2.5,111.05,1.7,63.75 +3970,30,2.5,111.05,1.7,63.75 +3971,30,2.5,111.05,1.7,63.75 +3972,30,2.5,111.05,1.7,63.75 +3973,30,2.5,111.05,1.7,63.75 +3974,30,2.5,111.05,1.7,63.75 +3975,30,2.5,111.05,1.7,63.75 +3976,30,2.5,111.05,1.7,63.75 +3977,30,2.5,111.05,1.7,63.75 +3978,30,2.5,111.05,1.7,63.75 +3979,30,2.5,111.05,1.7,63.75 +3980,30,2.5,111.05,1.7,63.75 +3981,30,2.5,111.05,1.7,63.75 +3982,30,2.5,111.05,1.7,63.75 +3983,30,2.5,111.05,1.7,63.75 +3984,30,2.5,111.05,1.7,63.75 +3985,30,2.5,111.05,1.7,63.75 +3986,30,2.5,111.05,1.7,63.75 +3987,30,2.5,111.05,1.7,63.75 +3988,30,2.5,111.05,1.7,63.75 +3989,30,2.5,111.05,1.7,63.75 +3990,30,2.5,111.05,1.7,63.75 +3991,30,2.5,111.05,1.7,63.75 +3992,30,2.5,111.05,1.7,63.75 +3993,30,2.5,111.05,1.7,63.75 +3994,30,2.5,111.05,1.7,63.75 +3995,30,2.5,111.05,1.7,63.75 +3996,30,2.5,111.05,1.7,63.75 +3997,30,2.5,111.05,1.7,63.75 +3998,30,2.5,111.05,1.7,63.75 +3999,30,2.5,111.05,1.7,63.75 +4000,30,2.5,111.05,1.7,63.75 +4001,30,2.5,111.05,1.7,63.75 +4002,30,2.5,111.05,1.7,63.75 +4003,30,2.5,111.05,1.7,63.75 +4004,30,2.5,111.05,1.7,63.75 +4005,30,2.5,111.05,1.7,63.75 +4006,30,2.5,111.05,1.7,63.75 +4007,30,2.5,111.05,1.7,63.75 +4008,30,2.5,111.05,1.7,63.75 +4009,30,2.5,111.05,1.7,63.75 +4010,30,2.5,111.05,1.7,63.75 +4011,30,2.5,111.05,1.7,63.75 +4012,30,2.5,111.05,1.7,63.75 +4013,30,2.5,111.05,1.7,63.75 +4014,30,2.5,111.05,1.7,63.75 +4015,30,2.5,111.05,1.7,63.75 +4016,30,2.5,111.05,1.7,63.75 +4017,30,2.5,111.05,1.7,63.75 +4018,30,2.5,111.05,1.7,63.75 +4019,30,2.5,111.05,1.7,63.75 +4020,30,2.5,111.05,1.7,63.75 +4021,30,2.5,111.05,1.7,63.75 +4022,30,2.5,111.05,1.7,63.75 +4023,30,2.5,111.05,1.7,63.75 +4024,30,2.5,111.05,1.7,63.75 +4025,30,2.5,111.05,1.7,63.75 +4026,30,2.5,111.05,1.7,63.75 +4027,30,2.5,111.05,1.7,63.75 +4028,30,2.5,111.05,1.7,63.75 +4029,30,2.5,111.05,1.7,63.75 +4030,30,2.5,111.05,1.7,63.75 +4031,30,2.5,111.05,1.7,63.75 +4032,30,2.5,111.05,1.7,63.75 +4033,30,2.5,111.05,1.7,63.75 +4034,30,2.5,111.05,1.7,63.75 +4035,30,2.5,111.05,1.7,63.75 +4036,30,2.5,111.05,1.7,63.75 +4037,30,2.5,111.05,1.7,63.75 +4038,30,2.5,111.05,1.7,63.75 +4039,30,2.5,111.05,1.7,63.75 +4040,30,2.5,111.05,1.7,63.75 +4041,30,2.5,111.05,1.7,63.75 +4042,30,2.5,111.05,1.7,63.75 +4043,30,2.5,111.05,1.7,63.75 +4044,30,2.5,111.05,1.7,63.75 +4045,30,2.5,111.05,1.7,63.75 +4046,30,2.5,111.05,1.7,63.75 +4047,30,2.5,111.05,1.7,63.75 +4048,30,2.5,111.05,1.7,63.75 +4049,30,2.5,111.05,1.7,63.75 +4050,30,2.5,111.05,1.7,63.75 +4051,30,2.5,111.05,1.7,63.75 +4052,30,2.5,111.05,1.7,63.75 +4053,30,2.5,111.05,1.7,63.75 +4054,30,2.5,111.05,1.7,63.75 +4055,30,2.5,111.05,1.7,63.75 +4056,30,2.5,111.05,1.7,63.75 +4057,30,2.5,111.05,1.7,63.75 +4058,30,2.5,111.05,1.7,63.75 +4059,30,2.5,111.05,1.7,63.75 +4060,30,2.5,111.05,1.7,63.75 +4061,30,2.5,111.05,1.7,63.75 +4062,30,2.5,111.05,1.7,63.75 +4063,30,2.5,111.05,1.7,63.75 +4064,30,2.5,111.05,1.7,63.75 +4065,30,2.5,111.05,1.7,63.75 +4066,30,2.5,111.05,1.7,63.75 +4067,30,2.5,111.05,1.7,63.75 +4068,30,2.5,111.05,1.7,63.75 +4069,30,2.5,111.05,1.7,63.75 +4070,30,2.5,111.05,1.7,63.75 +4071,30,2.5,111.05,1.7,63.75 +4072,30,2.5,111.05,1.7,63.75 +4073,30,2.5,111.05,1.7,63.75 +4074,30,2.5,111.05,1.7,63.75 +4075,30,2.5,111.05,1.7,63.75 +4076,30,2.5,111.05,1.7,63.75 +4077,30,2.5,111.05,1.7,63.75 +4078,30,2.5,111.05,1.7,63.75 +4079,30,2.5,111.05,1.7,63.75 +4080,30,2.5,111.05,1.7,63.75 +4081,30,2.5,111.05,1.7,63.75 +4082,30,2.5,111.05,1.7,63.75 +4083,30,2.5,111.05,1.7,63.75 +4084,30,2.5,111.05,1.7,63.75 +4085,30,2.5,111.05,1.7,63.75 +4086,30,2.5,111.05,1.7,63.75 +4087,30,2.5,111.05,1.7,63.75 +4088,30,2.5,111.05,1.7,63.75 +4089,30,2.5,111.05,1.7,63.75 +4090,30,2.5,111.05,1.7,63.75 +4091,30,2.5,111.05,1.7,63.75 +4092,30,2.5,111.05,1.7,63.75 +4093,30,2.5,111.05,1.7,63.75 +4094,30,2.5,111.05,1.7,63.75 +4095,30,2.5,111.05,1.7,63.75 +4096,30,2.5,111.05,1.7,63.75 +4097,30,2.5,111.05,1.7,63.75 +4098,30,2.5,111.05,1.7,63.75 +4099,30,2.5,111.05,1.7,63.75 +4100,30,2.5,111.05,1.7,63.75 +4101,30,2.5,111.05,1.7,63.75 +4102,30,2.5,111.05,1.7,63.75 +4103,30,2.5,111.05,1.7,63.75 +4104,30,2.5,111.05,1.7,63.75 +4105,30,2.5,111.05,1.7,63.75 +4106,30,2.5,111.05,1.7,63.75 +4107,30,2.5,111.05,1.7,63.75 +4108,30,2.5,111.05,1.7,63.75 +4109,30,2.5,111.05,1.7,63.75 +4110,30,2.5,111.05,1.7,63.75 +4111,30,2.5,111.05,1.7,63.75 +4112,30,2.5,111.05,1.7,63.75 +4113,30,2.5,111.05,1.7,63.75 +4114,30,2.5,111.05,1.7,63.75 +4115,30,2.5,111.05,1.7,63.75 +4116,30,2.5,111.05,1.7,63.75 +4117,30,2.5,111.05,1.7,63.75 +4118,30,2.5,111.05,1.7,63.75 +4119,30,2.5,111.05,1.7,63.75 +4120,30,2.5,111.05,1.7,63.75 +4121,30,2.5,111.05,1.7,63.75 +4122,30,2.5,111.05,1.7,63.75 +4123,30,2.5,111.05,1.7,63.75 +4124,30,2.5,111.05,1.7,63.75 +4125,30,2.5,111.05,1.7,63.75 +4126,30,2.5,111.05,1.7,63.75 +4127,30,2.5,111.05,1.7,63.75 +4128,30,2.5,111.05,1.7,63.75 +4129,30,2.5,111.05,1.7,63.75 +4130,30,2.5,111.05,1.7,63.75 +4131,30,2.5,111.05,1.7,63.75 +4132,30,2.5,111.05,1.7,63.75 +4133,30,2.5,111.05,1.7,63.75 +4134,30,2.5,111.05,1.7,63.75 +4135,30,2.5,111.05,1.7,63.75 +4136,30,2.5,111.05,1.7,63.75 +4137,30,2.5,111.05,1.7,63.75 +4138,30,2.5,111.05,1.7,63.75 +4139,30,2.5,111.05,1.7,63.75 +4140,30,2.5,111.05,1.7,63.75 +4141,30,2.5,111.05,1.7,63.75 +4142,30,2.5,111.05,1.7,63.75 +4143,30,2.5,111.05,1.7,63.75 +4144,30,2.5,111.05,1.7,63.75 +4145,30,2.5,111.05,1.7,63.75 +4146,30,2.5,111.05,1.7,63.75 +4147,30,2.5,111.05,1.7,63.75 +4148,30,2.5,111.05,1.7,63.75 +4149,30,2.5,111.05,1.7,63.75 +4150,30,2.5,111.05,1.7,63.75 +4151,30,2.5,111.05,1.7,63.75 +4152,30,2.5,111.05,1.7,63.75 +4153,30,2.5,111.05,1.7,63.75 +4154,30,2.5,111.05,1.7,63.75 +4155,30,2.5,111.05,1.7,63.75 +4156,30,2.5,111.05,1.7,63.75 +4157,30,2.5,111.05,1.7,63.75 +4158,30,2.5,111.05,1.7,63.75 +4159,30,2.5,111.05,1.7,63.75 +4160,30,2.5,111.05,1.7,63.75 +4161,30,2.5,111.05,1.7,63.75 +4162,30,2.5,111.05,1.7,63.75 +4163,30,2.5,111.05,1.7,63.75 +4164,30,2.5,111.05,1.7,63.75 +4165,30,2.5,111.05,1.7,63.75 +4166,30,2.5,111.05,1.7,63.75 +4167,30,2.5,111.05,1.7,63.75 +4168,30,2.5,111.05,1.7,63.75 +4169,30,2.5,111.05,1.7,63.75 +4170,30,2.5,111.05,1.7,63.75 +4171,30,2.5,111.05,1.7,63.75 +4172,30,2.5,111.05,1.7,63.75 +4173,30,2.5,111.05,1.7,63.75 +4174,30,2.5,111.05,1.7,63.75 +4175,30,2.5,111.05,1.7,63.75 +4176,30,2.5,111.05,1.7,63.75 +4177,30,2.5,111.05,1.7,63.75 +4178,30,2.5,111.05,1.7,63.75 +4179,30,2.5,111.05,1.7,63.75 +4180,30,2.5,111.05,1.7,63.75 +4181,30,2.5,111.05,1.7,63.75 +4182,30,2.5,111.05,1.7,63.75 +4183,30,2.5,111.05,1.7,63.75 +4184,30,2.5,111.05,1.7,63.75 +4185,30,2.5,111.05,1.7,63.75 +4186,30,2.5,111.05,1.7,63.75 +4187,30,2.5,111.05,1.7,63.75 +4188,30,2.5,111.05,1.7,63.75 +4189,30,2.5,111.05,1.7,63.75 +4190,30,2.5,111.05,1.7,63.75 +4191,30,2.5,111.05,1.7,63.75 +4192,30,2.5,111.05,1.7,63.75 +4193,30,2.5,111.05,1.7,63.75 +4194,30,2.5,111.05,1.7,63.75 +4195,30,2.5,111.05,1.7,63.75 +4196,30,2.5,111.05,1.7,63.75 +4197,30,2.5,111.05,1.7,63.75 +4198,30,2.5,111.05,1.7,63.75 +4199,30,2.5,111.05,1.7,63.75 +4200,30,2.5,111.05,1.7,63.75 +4201,30,2.5,111.05,1.7,63.75 +4202,30,2.5,111.05,1.7,63.75 +4203,30,2.5,111.05,1.7,63.75 +4204,30,2.5,111.05,1.7,63.75 +4205,30,2.5,111.05,1.7,63.75 +4206,30,2.5,111.05,1.7,63.75 +4207,30,2.5,111.05,1.7,63.75 +4208,30,2.5,111.05,1.7,63.75 +4209,30,2.5,111.05,1.7,63.75 +4210,30,2.5,111.05,1.7,63.75 +4211,30,2.5,111.05,1.7,63.75 +4212,30,2.5,111.05,1.7,63.75 +4213,30,2.5,111.05,1.7,63.75 +4214,30,2.5,111.05,1.7,63.75 +4215,30,2.5,111.05,1.7,63.75 +4216,30,2.5,111.05,1.7,63.75 +4217,30,2.5,111.05,1.7,63.75 +4218,30,2.5,111.05,1.7,63.75 +4219,30,2.5,111.05,1.7,63.75 +4220,30,2.5,111.05,1.7,63.75 +4221,30,2.5,111.05,1.7,63.75 +4222,30,2.5,111.05,1.7,63.75 +4223,30,2.5,111.05,1.7,63.75 +4224,30,2.5,111.05,1.7,63.75 +4225,30,2.5,111.05,1.7,63.75 +4226,30,2.5,111.05,1.7,63.75 +4227,30,2.5,111.05,1.7,63.75 +4228,30,2.5,111.05,1.7,63.75 +4229,30,2.5,111.05,1.7,63.75 +4230,30,2.5,111.05,1.7,63.75 +4231,30,2.5,111.05,1.7,63.75 +4232,30,2.5,111.05,1.7,63.75 +4233,30,2.5,111.05,1.7,63.75 +4234,30,2.5,111.05,1.7,63.75 +4235,30,2.5,111.05,1.7,63.75 +4236,30,2.5,111.05,1.7,63.75 +4237,30,2.5,111.05,1.7,63.75 +4238,30,2.5,111.05,1.7,63.75 +4239,30,2.5,111.05,1.7,63.75 +4240,30,2.5,111.05,1.7,63.75 +4241,30,2.5,111.05,1.7,63.75 +4242,30,2.5,111.05,1.7,63.75 +4243,30,2.5,111.05,1.7,63.75 +4244,30,2.5,111.05,1.7,63.75 +4245,30,2.5,111.05,1.7,63.75 +4246,30,2.5,111.05,1.7,63.75 +4247,30,2.5,111.05,1.7,63.75 +4248,30,2.5,111.05,1.7,63.75 +4249,30,2.5,111.05,1.7,63.75 +4250,30,2.5,111.05,1.7,63.75 +4251,30,2.5,111.05,1.7,63.75 +4252,30,2.5,111.05,1.7,63.75 +4253,30,2.5,111.05,1.7,63.75 +4254,30,2.5,111.05,1.7,63.75 +4255,30,2.5,111.05,1.7,63.75 +4256,30,2.5,111.05,1.7,63.75 +4257,30,2.5,111.05,1.7,63.75 +4258,30,2.5,111.05,1.7,63.75 +4259,30,2.5,111.05,1.7,63.75 +4260,30,2.5,111.05,1.7,63.75 +4261,30,2.5,111.05,1.7,63.75 +4262,30,2.5,111.05,1.7,63.75 +4263,30,2.5,111.05,1.7,63.75 +4264,30,2.5,111.05,1.7,63.75 +4265,30,2.5,111.05,1.7,63.75 +4266,30,2.5,111.05,1.7,63.75 +4267,30,2.5,111.05,1.7,63.75 +4268,30,2.5,111.05,1.7,63.75 +4269,30,2.5,111.05,1.7,63.75 +4270,30,2.5,111.05,1.7,63.75 +4271,30,2.5,111.05,1.7,63.75 +4272,30,2.5,111.05,1.7,63.75 +4273,30,2.5,111.05,1.7,63.75 +4274,30,2.5,111.05,1.7,63.75 +4275,30,2.5,111.05,1.7,63.75 +4276,30,2.5,111.05,1.7,63.75 +4277,30,2.5,111.05,1.7,63.75 +4278,30,2.5,111.05,1.7,63.75 +4279,30,2.5,111.05,1.7,63.75 +4280,30,2.5,111.05,1.7,63.75 +4281,30,2.5,111.05,1.7,63.75 +4282,30,2.5,111.05,1.7,63.75 +4283,30,2.5,111.05,1.7,63.75 +4284,30,2.5,111.05,1.7,63.75 +4285,30,2.5,111.05,1.7,63.75 +4286,30,2.5,111.05,1.7,63.75 +4287,30,2.5,111.05,1.7,63.75 +4288,30,2.5,111.05,1.7,63.75 +4289,30,2.5,111.05,1.7,63.75 +4290,30,2.5,111.05,1.7,63.75 +4291,30,2.5,111.05,1.7,63.75 +4292,30,2.5,111.05,1.7,63.75 +4293,30,2.5,111.05,1.7,63.75 +4294,30,2.5,111.05,1.7,63.75 +4295,30,2.5,111.05,1.7,63.75 +4296,30,2.5,111.05,1.7,63.75 +4297,30,2.5,111.05,1.7,63.75 +4298,30,2.5,111.05,1.7,63.75 +4299,30,2.5,111.05,1.7,63.75 +4300,30,2.5,111.05,1.7,63.75 +4301,30,2.5,111.05,1.7,63.75 +4302,30,2.5,111.05,1.7,63.75 +4303,30,2.5,111.05,1.7,63.75 +4304,30,2.5,111.05,1.7,63.75 +4305,30,2.5,111.05,1.7,63.75 +4306,30,2.5,111.05,1.7,63.75 +4307,30,2.5,111.05,1.7,63.75 +4308,30,2.5,111.05,1.7,63.75 +4309,30,2.5,111.05,1.7,63.75 +4310,30,2.5,111.05,1.7,63.75 +4311,30,2.5,111.05,1.7,63.75 +4312,30,2.5,111.05,1.7,63.75 +4313,30,2.5,111.05,1.7,63.75 +4314,30,2.5,111.05,1.7,63.75 +4315,30,2.5,111.05,1.7,63.75 +4316,30,2.5,111.05,1.7,63.75 +4317,30,2.5,111.05,1.7,63.75 +4318,30,2.5,111.05,1.7,63.75 +4319,30,2.5,111.05,1.7,63.75 +4320,30,2.5,111.05,1.7,63.75 +4321,30,2.5,111.05,1.7,63.75 +4322,30,2.5,111.05,1.7,63.75 +4323,30,2.5,111.05,1.7,63.75 +4324,30,2.5,111.05,1.7,63.75 +4325,30,2.5,111.05,1.7,63.75 +4326,30,2.5,111.05,1.7,63.75 +4327,30,2.5,111.05,1.7,63.75 +4328,30,2.5,111.05,1.7,63.75 +4329,30,2.5,111.05,1.7,63.75 +4330,30,2.5,111.05,1.7,63.75 +4331,30,2.5,111.05,1.7,63.75 +4332,30,2.5,111.05,1.7,63.75 +4333,30,2.5,111.05,1.7,63.75 +4334,30,2.5,111.05,1.7,63.75 +4335,30,2.5,111.05,1.7,63.75 +4336,30,2.5,111.05,1.7,63.75 +4337,30,2.5,111.05,1.7,63.75 +4338,30,2.5,111.05,1.7,63.75 +4339,30,2.5,111.05,1.7,63.75 +4340,30,2.5,111.05,1.7,63.75 +4341,30,2.5,111.05,1.7,63.75 +4342,30,2.5,111.05,1.7,63.75 +4343,30,2.5,111.05,1.7,63.75 +4344,30,2.5,111.05,1.7,63.75 +4345,30,2.5,111.05,1.7,63.75 +4346,30,2.5,111.05,1.7,63.75 +4347,30,2.5,111.05,1.7,63.75 +4348,30,2.5,111.05,1.7,63.75 +4349,30,2.5,111.05,1.7,63.75 +4350,30,2.5,111.05,1.7,63.75 +4351,30,2.5,111.05,1.7,63.75 +4352,30,2.5,111.05,1.7,63.75 +4353,30,2.5,111.05,1.7,63.75 +4354,30,2.5,111.05,1.7,63.75 +4355,30,2.5,111.05,1.7,63.75 +4356,30,2.5,111.05,1.7,63.75 +4357,30,2.5,111.05,1.7,63.75 +4358,30,2.5,111.05,1.7,63.75 +4359,30,2.5,111.05,1.7,63.75 +4360,30,2.5,111.05,1.7,63.75 +4361,30,2.5,111.05,1.7,63.75 +4362,30,2.5,111.05,1.7,63.75 +4363,30,2.5,111.05,1.7,63.75 +4364,30,2.5,111.05,1.7,63.75 +4365,30,2.5,111.05,1.7,63.75 +4366,30,2.5,111.05,1.7,63.75 +4367,30,2.5,111.05,1.7,63.75 +4368,30,2.5,111.05,1.7,63.75 +4369,30,2.5,111.05,1.7,63.75 +4370,30,2.5,111.05,1.7,63.75 +4371,30,2.5,111.05,1.7,63.75 +4372,30,2.5,111.05,1.7,63.75 +4373,30,2.5,111.05,1.7,63.75 +4374,30,2.5,111.05,1.7,63.75 +4375,30,2.5,111.05,1.7,63.75 +4376,30,2.5,111.05,1.7,63.75 +4377,30,2.5,111.05,1.7,63.75 +4378,30,2.5,111.05,1.7,63.75 +4379,30,2.5,111.05,1.7,63.75 +4380,30,2.5,111.05,1.7,63.75 +4381,30,2.5,111.05,1.7,63.75 +4382,30,2.5,111.05,1.7,63.75 +4383,30,2.5,111.05,1.7,63.75 +4384,30,2.5,111.05,1.7,63.75 +4385,30,2.5,111.05,1.7,63.75 +4386,30,2.5,111.05,1.7,63.75 +4387,30,2.5,111.05,1.7,63.75 +4388,30,2.5,111.05,1.7,63.75 +4389,30,2.5,111.05,1.7,63.75 +4390,30,2.5,111.05,1.7,63.75 +4391,30,2.5,111.05,1.7,63.75 +4392,30,2.5,111.05,1.7,63.75 +4393,30,2.5,111.05,1.7,63.75 +4394,30,2.5,111.05,1.7,63.75 +4395,30,2.5,111.05,1.7,63.75 +4396,30,2.5,111.05,1.7,63.75 +4397,30,2.5,111.05,1.7,63.75 +4398,30,2.5,111.05,1.7,63.75 +4399,30,2.5,111.05,1.7,63.75 +4400,30,2.5,111.05,1.7,63.75 +4401,30,2.5,111.05,1.7,63.75 +4402,30,2.5,111.05,1.7,63.75 +4403,30,2.5,111.05,1.7,63.75 +4404,30,2.5,111.05,1.7,63.75 +4405,30,2.5,111.05,1.7,63.75 +4406,30,2.5,111.05,1.7,63.75 +4407,30,2.5,111.05,1.7,63.75 +4408,30,2.5,111.05,1.7,63.75 +4409,30,2.5,111.05,1.7,63.75 +4410,30,2.5,111.05,1.7,63.75 +4411,30,2.5,111.05,1.7,63.75 +4412,30,2.5,111.05,1.7,63.75 +4413,30,2.5,111.05,1.7,63.75 +4414,30,2.5,111.05,1.7,63.75 +4415,30,2.5,111.05,1.7,63.75 +4416,30,2.5,111.05,1.7,63.75 +4417,30,2.5,111.05,1.7,63.75 +4418,30,2.5,111.05,1.7,63.75 +4419,30,2.5,111.05,1.7,63.75 +4420,30,2.5,111.05,1.7,63.75 +4421,30,2.5,111.05,1.7,63.75 +4422,30,2.5,111.05,1.7,63.75 +4423,30,2.5,111.05,1.7,63.75 +4424,30,2.5,111.05,1.7,63.75 +4425,30,2.5,111.05,1.7,63.75 +4426,30,2.5,111.05,1.7,63.75 +4427,30,2.5,111.05,1.7,63.75 +4428,30,2.5,111.05,1.7,63.75 +4429,30,2.5,111.05,1.7,63.75 +4430,30,2.5,111.05,1.7,63.75 +4431,30,2.5,111.05,1.7,63.75 +4432,30,2.5,111.05,1.7,63.75 +4433,30,2.5,111.05,1.7,63.75 +4434,30,2.5,111.05,1.7,63.75 +4435,30,2.5,111.05,1.7,63.75 +4436,30,2.5,111.05,1.7,63.75 +4437,30,2.5,111.05,1.7,63.75 +4438,30,2.5,111.05,1.7,63.75 +4439,30,2.5,111.05,1.7,63.75 +4440,30,2.5,111.05,1.7,63.75 +4441,30,2.5,111.05,1.7,63.75 +4442,30,2.5,111.05,1.7,63.75 +4443,30,2.5,111.05,1.7,63.75 +4444,30,2.5,111.05,1.7,63.75 +4445,30,2.5,111.05,1.7,63.75 +4446,30,2.5,111.05,1.7,63.75 +4447,30,2.5,111.05,1.7,63.75 +4448,30,2.5,111.05,1.7,63.75 +4449,30,2.5,111.05,1.7,63.75 +4450,30,2.5,111.05,1.7,63.75 +4451,30,2.5,111.05,1.7,63.75 +4452,30,2.5,111.05,1.7,63.75 +4453,30,2.5,111.05,1.7,63.75 +4454,30,2.5,111.05,1.7,63.75 +4455,30,2.5,111.05,1.7,63.75 +4456,30,2.5,111.05,1.7,63.75 +4457,30,2.5,111.05,1.7,63.75 +4458,30,2.5,111.05,1.7,63.75 +4459,30,2.5,111.05,1.7,63.75 +4460,30,2.5,111.05,1.7,63.75 +4461,30,2.5,111.05,1.7,63.75 +4462,30,2.5,111.05,1.7,63.75 +4463,30,2.5,111.05,1.7,63.75 +4464,30,2.5,111.05,1.7,63.75 +4465,30,2.5,111.05,1.7,63.75 +4466,30,2.5,111.05,1.7,63.75 +4467,30,2.5,111.05,1.7,63.75 +4468,30,2.5,111.05,1.7,63.75 +4469,30,2.5,111.05,1.7,63.75 +4470,30,2.5,111.05,1.7,63.75 +4471,30,2.5,111.05,1.7,63.75 +4472,30,2.5,111.05,1.7,63.75 +4473,30,2.5,111.05,1.7,63.75 +4474,30,2.5,111.05,1.7,63.75 +4475,30,2.5,111.05,1.7,63.75 +4476,30,2.5,111.05,1.7,63.75 +4477,30,2.5,111.05,1.7,63.75 +4478,30,2.5,111.05,1.7,63.75 +4479,30,2.5,111.05,1.7,63.75 +4480,30,2.5,111.05,1.7,63.75 +4481,30,2.5,111.05,1.7,63.75 +4482,30,2.5,111.05,1.7,63.75 +4483,30,2.5,111.05,1.7,63.75 +4484,30,2.5,111.05,1.7,63.75 +4485,30,2.5,111.05,1.7,63.75 +4486,30,2.5,111.05,1.7,63.75 +4487,30,2.5,111.05,1.7,63.75 +4488,30,2.5,111.05,1.7,63.75 +4489,30,2.5,111.05,1.7,63.75 +4490,30,2.5,111.05,1.7,63.75 +4491,30,2.5,111.05,1.7,63.75 +4492,30,2.5,111.05,1.7,63.75 +4493,30,2.5,111.05,1.7,63.75 +4494,30,2.5,111.05,1.7,63.75 +4495,30,2.5,111.05,1.7,63.75 +4496,30,2.5,111.05,1.7,63.75 +4497,30,2.5,111.05,1.7,63.75 +4498,30,2.5,111.05,1.7,63.75 +4499,30,2.5,111.05,1.7,63.75 +4500,30,2.5,111.05,1.7,63.75 +4501,30,2.5,111.05,1.7,63.75 +4502,30,2.5,111.05,1.7,63.75 +4503,30,2.5,111.05,1.7,63.75 +4504,30,2.5,111.05,1.7,63.75 +4505,30,2.5,111.05,1.7,63.75 +4506,30,2.5,111.05,1.7,63.75 +4507,30,2.5,111.05,1.7,63.75 +4508,30,2.5,111.05,1.7,63.75 +4509,30,2.5,111.05,1.7,63.75 +4510,30,2.5,111.05,1.7,63.75 +4511,30,2.5,111.05,1.7,63.75 +4512,30,2.5,111.05,1.7,63.75 +4513,30,2.5,111.05,1.7,63.75 +4514,30,2.5,111.05,1.7,63.75 +4515,30,2.5,111.05,1.7,63.75 +4516,30,2.5,111.05,1.7,63.75 +4517,30,2.5,111.05,1.7,63.75 +4518,30,2.5,111.05,1.7,63.75 +4519,30,2.5,111.05,1.7,63.75 +4520,30,2.5,111.05,1.7,63.75 +4521,30,2.5,111.05,1.7,63.75 +4522,30,2.5,111.05,1.7,63.75 +4523,30,2.5,111.05,1.7,63.75 +4524,30,2.5,111.05,1.7,63.75 +4525,30,2.5,111.05,1.7,63.75 +4526,30,2.5,111.05,1.7,63.75 +4527,30,2.5,111.05,1.7,63.75 +4528,30,2.5,111.05,1.7,63.75 +4529,30,2.5,111.05,1.7,63.75 +4530,30,2.5,111.05,1.7,63.75 +4531,30,2.5,111.05,1.7,63.75 +4532,30,2.5,111.05,1.7,63.75 +4533,30,2.5,111.05,1.7,63.75 +4534,30,2.5,111.05,1.7,63.75 +4535,30,2.5,111.05,1.7,63.75 +4536,30,2.5,111.05,1.7,63.75 +4537,30,2.5,111.05,1.7,63.75 +4538,30,2.5,111.05,1.7,63.75 +4539,30,2.5,111.05,1.7,63.75 +4540,30,2.5,111.05,1.7,63.75 +4541,30,2.5,111.05,1.7,63.75 +4542,30,2.5,111.05,1.7,63.75 +4543,30,2.5,111.05,1.7,63.75 +4544,30,2.5,111.05,1.7,63.75 +4545,30,2.5,111.05,1.7,63.75 +4546,30,2.5,111.05,1.7,63.75 +4547,30,2.5,111.05,1.7,63.75 +4548,30,2.5,111.05,1.7,63.75 +4549,30,2.5,111.05,1.7,63.75 +4550,30,2.5,111.05,1.7,63.75 +4551,30,2.5,111.05,1.7,63.75 +4552,30,2.5,111.05,1.7,63.75 +4553,30,2.5,111.05,1.7,63.75 +4554,30,2.5,111.05,1.7,63.75 +4555,30,2.5,111.05,1.7,63.75 +4556,30,2.5,111.05,1.7,63.75 +4557,30,2.5,111.05,1.7,63.75 +4558,30,2.5,111.05,1.7,63.75 +4559,30,2.5,111.05,1.7,63.75 +4560,30,2.5,111.05,1.7,63.75 +4561,30,2.5,111.05,1.7,63.75 +4562,30,2.5,111.05,1.7,63.75 +4563,30,2.5,111.05,1.7,63.75 +4564,30,2.5,111.05,1.7,63.75 +4565,30,2.5,111.05,1.7,63.75 +4566,30,2.5,111.05,1.7,63.75 +4567,30,2.5,111.05,1.7,63.75 +4568,30,2.5,111.05,1.7,63.75 +4569,30,2.5,111.05,1.7,63.75 +4570,30,2.5,111.05,1.7,63.75 +4571,30,2.5,111.05,1.7,63.75 +4572,30,2.5,111.05,1.7,63.75 +4573,30,2.5,111.05,1.7,63.75 +4574,30,2.5,111.05,1.7,63.75 +4575,30,2.5,111.05,1.7,63.75 +4576,30,2.5,111.05,1.7,63.75 +4577,30,2.5,111.05,1.7,63.75 +4578,30,2.5,111.05,1.7,63.75 +4579,30,2.5,111.05,1.7,63.75 +4580,30,2.5,111.05,1.7,63.75 +4581,30,2.5,111.05,1.7,63.75 +4582,30,2.5,111.05,1.7,63.75 +4583,30,2.5,111.05,1.7,63.75 +4584,30,2.5,111.05,1.7,63.75 +4585,30,2.5,111.05,1.7,63.75 +4586,30,2.5,111.05,1.7,63.75 +4587,30,2.5,111.05,1.7,63.75 +4588,30,2.5,111.05,1.7,63.75 +4589,30,2.5,111.05,1.7,63.75 +4590,30,2.5,111.05,1.7,63.75 +4591,30,2.5,111.05,1.7,63.75 +4592,30,2.5,111.05,1.7,63.75 +4593,30,2.5,111.05,1.7,63.75 +4594,30,2.5,111.05,1.7,63.75 +4595,30,2.5,111.05,1.7,63.75 +4596,30,2.5,111.05,1.7,63.75 +4597,30,2.5,111.05,1.7,63.75 +4598,30,2.5,111.05,1.7,63.75 +4599,30,2.5,111.05,1.7,63.75 +4600,30,2.5,111.05,1.7,63.75 +4601,30,2.5,111.05,1.7,63.75 +4602,30,2.5,111.05,1.7,63.75 +4603,30,2.5,111.05,1.7,63.75 +4604,30,2.5,111.05,1.7,63.75 +4605,30,2.5,111.05,1.7,63.75 +4606,30,2.5,111.05,1.7,63.75 +4607,30,2.5,111.05,1.7,63.75 +4608,30,2.5,111.05,1.7,63.75 +4609,30,2.5,111.05,1.7,63.75 +4610,30,2.5,111.05,1.7,63.75 +4611,30,2.5,111.05,1.7,63.75 +4612,30,2.5,111.05,1.7,63.75 +4613,30,2.5,111.05,1.7,63.75 +4614,30,2.5,111.05,1.7,63.75 +4615,30,2.5,111.05,1.7,63.75 +4616,30,2.5,111.05,1.7,63.75 +4617,30,2.5,111.05,1.7,63.75 +4618,30,2.5,111.05,1.7,63.75 +4619,30,2.5,111.05,1.7,63.75 +4620,30,2.5,111.05,1.7,63.75 +4621,30,2.5,111.05,1.7,63.75 +4622,30,2.5,111.05,1.7,63.75 +4623,30,2.5,111.05,1.7,63.75 +4624,30,2.5,111.05,1.7,63.75 +4625,30,2.5,111.05,1.7,63.75 +4626,30,2.5,111.05,1.7,63.75 +4627,30,2.5,111.05,1.7,63.75 +4628,30,2.5,111.05,1.7,63.75 +4629,30,2.5,111.05,1.7,63.75 +4630,30,2.5,111.05,1.7,63.75 +4631,30,2.5,111.05,1.7,63.75 +4632,30,2.5,111.05,1.7,63.75 +4633,30,2.5,111.05,1.7,63.75 +4634,30,2.5,111.05,1.7,63.75 +4635,30,2.5,111.05,1.7,63.75 +4636,30,2.5,111.05,1.7,63.75 +4637,30,2.5,111.05,1.7,63.75 +4638,30,2.5,111.05,1.7,63.75 +4639,30,2.5,111.05,1.7,63.75 +4640,30,2.5,111.05,1.7,63.75 +4641,30,2.5,111.05,1.7,63.75 +4642,30,2.5,111.05,1.7,63.75 +4643,30,2.5,111.05,1.7,63.75 +4644,30,2.5,111.05,1.7,63.75 +4645,30,2.5,111.05,1.7,63.75 +4646,30,2.5,111.05,1.7,63.75 +4647,30,2.5,111.05,1.7,63.75 +4648,30,2.5,111.05,1.7,63.75 +4649,30,2.5,111.05,1.7,63.75 +4650,30,2.5,111.05,1.7,63.75 +4651,30,2.5,111.05,1.7,63.75 +4652,30,2.5,111.05,1.7,63.75 +4653,30,2.5,111.05,1.7,63.75 +4654,30,2.5,111.05,1.7,63.75 +4655,30,2.5,111.05,1.7,63.75 +4656,30,2.5,111.05,1.7,63.75 +4657,30,2.5,111.05,1.7,63.75 +4658,30,2.5,111.05,1.7,63.75 +4659,30,2.5,111.05,1.7,63.75 +4660,30,2.5,111.05,1.7,63.75 +4661,30,2.5,111.05,1.7,63.75 +4662,30,2.5,111.05,1.7,63.75 +4663,30,2.5,111.05,1.7,63.75 +4664,30,2.5,111.05,1.7,63.75 +4665,30,2.5,111.05,1.7,63.75 +4666,30,2.5,111.05,1.7,63.75 +4667,30,2.5,111.05,1.7,63.75 +4668,30,2.5,111.05,1.7,63.75 +4669,30,2.5,111.05,1.7,63.75 +4670,30,2.5,111.05,1.7,63.75 +4671,30,2.5,111.05,1.7,63.75 +4672,30,2.5,111.05,1.7,63.75 +4673,30,2.5,111.05,1.7,63.75 +4674,30,2.5,111.05,1.7,63.75 +4675,30,2.5,111.05,1.7,63.75 +4676,30,2.5,111.05,1.7,63.75 +4677,30,2.5,111.05,1.7,63.75 +4678,30,2.5,111.05,1.7,63.75 +4679,30,2.5,111.05,1.7,63.75 +4680,30,2.5,111.05,1.7,63.75 +4681,30,2.5,111.05,1.7,63.75 +4682,30,2.5,111.05,1.7,63.75 +4683,30,2.5,111.05,1.7,63.75 +4684,30,2.5,111.05,1.7,63.75 +4685,30,2.5,111.05,1.7,63.75 +4686,30,2.5,111.05,1.7,63.75 +4687,30,2.5,111.05,1.7,63.75 +4688,30,2.5,111.05,1.7,63.75 +4689,30,2.5,111.05,1.7,63.75 +4690,30,2.5,111.05,1.7,63.75 +4691,30,2.5,111.05,1.7,63.75 +4692,30,2.5,111.05,1.7,63.75 +4693,30,2.5,111.05,1.7,63.75 +4694,30,2.5,111.05,1.7,63.75 +4695,30,2.5,111.05,1.7,63.75 +4696,30,2.5,111.05,1.7,63.75 +4697,30,2.5,111.05,1.7,63.75 +4698,30,2.5,111.05,1.7,63.75 +4699,30,2.5,111.05,1.7,63.75 +4700,30,2.5,111.05,1.7,63.75 +4701,30,2.5,111.05,1.7,63.75 +4702,30,2.5,111.05,1.7,63.75 +4703,30,2.5,111.05,1.7,63.75 +4704,30,2.5,111.05,1.7,63.75 +4705,30,2.5,111.05,1.7,63.75 +4706,30,2.5,111.05,1.7,63.75 +4707,30,2.5,111.05,1.7,63.75 +4708,30,2.5,111.05,1.7,63.75 +4709,30,2.5,111.05,1.7,63.75 +4710,30,2.5,111.05,1.7,63.75 +4711,30,2.5,111.05,1.7,63.75 +4712,30,2.5,111.05,1.7,63.75 +4713,30,2.5,111.05,1.7,63.75 +4714,30,2.5,111.05,1.7,63.75 +4715,30,2.5,111.05,1.7,63.75 +4716,30,2.5,111.05,1.7,63.75 +4717,30,2.5,111.05,1.7,63.75 +4718,30,2.5,111.05,1.7,63.75 +4719,30,2.5,111.05,1.7,63.75 +4720,30,2.5,111.05,1.7,63.75 +4721,30,2.5,111.05,1.7,63.75 +4722,30,2.5,111.05,1.7,63.75 +4723,30,2.5,111.05,1.7,63.75 +4724,30,2.5,111.05,1.7,63.75 +4725,30,2.5,111.05,1.7,63.75 +4726,30,2.5,111.05,1.7,63.75 +4727,30,2.5,111.05,1.7,63.75 +4728,30,2.5,111.05,1.7,63.75 +4729,30,2.5,111.05,1.7,63.75 +4730,30,2.5,111.05,1.7,63.75 +4731,30,2.5,111.05,1.7,63.75 +4732,30,2.5,111.05,1.7,63.75 +4733,30,2.5,111.05,1.7,63.75 +4734,30,2.5,111.05,1.7,63.75 +4735,30,2.5,111.05,1.7,63.75 +4736,30,2.5,111.05,1.7,63.75 +4737,30,2.5,111.05,1.7,63.75 +4738,30,2.5,111.05,1.7,63.75 +4739,30,2.5,111.05,1.7,63.75 +4740,30,2.5,111.05,1.7,63.75 +4741,30,2.5,111.05,1.7,63.75 +4742,30,2.5,111.05,1.7,63.75 +4743,30,2.5,111.05,1.7,63.75 +4744,30,2.5,111.05,1.7,63.75 +4745,30,2.5,111.05,1.7,63.75 +4746,30,2.5,111.05,1.7,63.75 +4747,30,2.5,111.05,1.7,63.75 +4748,30,2.5,111.05,1.7,63.75 +4749,30,2.5,111.05,1.7,63.75 +4750,30,2.5,111.05,1.7,63.75 +4751,30,2.5,111.05,1.7,63.75 +4752,30,2.5,111.05,1.7,63.75 +4753,30,2.5,111.05,1.7,63.75 +4754,30,2.5,111.05,1.7,63.75 +4755,30,2.5,111.05,1.7,63.75 +4756,30,2.5,111.05,1.7,63.75 +4757,30,2.5,111.05,1.7,63.75 +4758,30,2.5,111.05,1.7,63.75 +4759,30,2.5,111.05,1.7,63.75 +4760,30,2.5,111.05,1.7,63.75 +4761,30,2.5,111.05,1.7,63.75 +4762,30,2.5,111.05,1.7,63.75 +4763,30,2.5,111.05,1.7,63.75 +4764,30,2.5,111.05,1.7,63.75 +4765,30,2.5,111.05,1.7,63.75 +4766,30,2.5,111.05,1.7,63.75 +4767,30,2.5,111.05,1.7,63.75 +4768,30,2.5,111.05,1.7,63.75 +4769,30,2.5,111.05,1.7,63.75 +4770,30,2.5,111.05,1.7,63.75 +4771,30,2.5,111.05,1.7,63.75 +4772,30,2.5,111.05,1.7,63.75 +4773,30,2.5,111.05,1.7,63.75 +4774,30,2.5,111.05,1.7,63.75 +4775,30,2.5,111.05,1.7,63.75 +4776,30,2.5,111.05,1.7,63.75 +4777,30,2.5,111.05,1.7,63.75 +4778,30,2.5,111.05,1.7,63.75 +4779,30,2.5,111.05,1.7,63.75 +4780,30,2.5,111.05,1.7,63.75 +4781,30,2.5,111.05,1.7,63.75 +4782,30,2.5,111.05,1.7,63.75 +4783,30,2.5,111.05,1.7,63.75 +4784,30,2.5,111.05,1.7,63.75 +4785,30,2.5,111.05,1.7,63.75 +4786,30,2.5,111.05,1.7,63.75 +4787,30,2.5,111.05,1.7,63.75 +4788,30,2.5,111.05,1.7,63.75 +4789,30,2.5,111.05,1.7,63.75 +4790,30,2.5,111.05,1.7,63.75 +4791,30,2.5,111.05,1.7,63.75 +4792,30,2.5,111.05,1.7,63.75 +4793,30,2.5,111.05,1.7,63.75 +4794,30,2.5,111.05,1.7,63.75 +4795,30,2.5,111.05,1.7,63.75 +4796,30,2.5,111.05,1.7,63.75 +4797,30,2.5,111.05,1.7,63.75 +4798,30,2.5,111.05,1.7,63.75 +4799,30,2.5,111.05,1.7,63.75 +4800,30,2.5,111.05,1.7,63.75 +4801,30,2.5,111.05,1.7,63.75 +4802,30,2.5,111.05,1.7,63.75 +4803,30,2.5,111.05,1.7,63.75 +4804,30,2.5,111.05,1.7,63.75 +4805,30,2.5,111.05,1.7,63.75 +4806,30,2.5,111.05,1.7,63.75 +4807,30,2.5,111.05,1.7,63.75 +4808,30,2.5,111.05,1.7,63.75 +4809,30,2.5,111.05,1.7,63.75 +4810,30,2.5,111.05,1.7,63.75 +4811,30,2.5,111.05,1.7,63.75 +4812,30,2.5,111.05,1.7,63.75 +4813,30,2.5,111.05,1.7,63.75 +4814,30,2.5,111.05,1.7,63.75 +4815,30,2.5,111.05,1.7,63.75 +4816,30,2.5,111.05,1.7,63.75 +4817,30,2.5,111.05,1.7,63.75 +4818,30,2.5,111.05,1.7,63.75 +4819,30,2.5,111.05,1.7,63.75 +4820,30,2.5,111.05,1.7,63.75 +4821,30,2.5,111.05,1.7,63.75 +4822,30,2.5,111.05,1.7,63.75 +4823,30,2.5,111.05,1.7,63.75 +4824,30,2.5,111.05,1.7,63.75 +4825,30,2.5,111.05,1.7,63.75 +4826,30,2.5,111.05,1.7,63.75 +4827,30,2.5,111.05,1.7,63.75 +4828,30,2.5,111.05,1.7,63.75 +4829,30,2.5,111.05,1.7,63.75 +4830,30,2.5,111.05,1.7,63.75 +4831,30,2.5,111.05,1.7,63.75 +4832,30,2.5,111.05,1.7,63.75 +4833,30,2.5,111.05,1.7,63.75 +4834,30,2.5,111.05,1.7,63.75 +4835,30,2.5,111.05,1.7,63.75 +4836,30,2.5,111.05,1.7,63.75 +4837,30,2.5,111.05,1.7,63.75 +4838,30,2.5,111.05,1.7,63.75 +4839,30,2.5,111.05,1.7,63.75 +4840,30,2.5,111.05,1.7,63.75 +4841,30,2.5,111.05,1.7,63.75 +4842,30,2.5,111.05,1.7,63.75 +4843,30,2.5,111.05,1.7,63.75 +4844,30,2.5,111.05,1.7,63.75 +4845,30,2.5,111.05,1.7,63.75 +4846,30,2.5,111.05,1.7,63.75 +4847,30,2.5,111.05,1.7,63.75 +4848,30,2.5,111.05,1.7,63.75 +4849,30,2.5,111.05,1.7,63.75 +4850,30,2.5,111.05,1.7,63.75 +4851,30,2.5,111.05,1.7,63.75 +4852,30,2.5,111.05,1.7,63.75 +4853,30,2.5,111.05,1.7,63.75 +4854,30,2.5,111.05,1.7,63.75 +4855,30,2.5,111.05,1.7,63.75 +4856,30,2.5,111.05,1.7,63.75 +4857,30,2.5,111.05,1.7,63.75 +4858,30,2.5,111.05,1.7,63.75 +4859,30,2.5,111.05,1.7,63.75 +4860,30,2.5,111.05,1.7,63.75 +4861,30,2.5,111.05,1.7,63.75 +4862,30,2.5,111.05,1.7,63.75 +4863,30,2.5,111.05,1.7,63.75 +4864,30,2.5,111.05,1.7,63.75 +4865,30,2.5,111.05,1.7,63.75 +4866,30,2.5,111.05,1.7,63.75 +4867,30,2.5,111.05,1.7,63.75 +4868,30,2.5,111.05,1.7,63.75 +4869,30,2.5,111.05,1.7,63.75 +4870,30,2.5,111.05,1.7,63.75 +4871,30,2.5,111.05,1.7,63.75 +4872,30,2.5,111.05,1.7,63.75 +4873,30,2.5,111.05,1.7,63.75 +4874,30,2.5,111.05,1.7,63.75 +4875,30,2.5,111.05,1.7,63.75 +4876,30,2.5,111.05,1.7,63.75 +4877,30,2.5,111.05,1.7,63.75 +4878,30,2.5,111.05,1.7,63.75 +4879,30,2.5,111.05,1.7,63.75 +4880,30,2.5,111.05,1.7,63.75 +4881,30,2.5,111.05,1.7,63.75 +4882,30,2.5,111.05,1.7,63.75 +4883,30,2.5,111.05,1.7,63.75 +4884,30,2.5,111.05,1.7,63.75 +4885,30,2.5,111.05,1.7,63.75 +4886,30,2.5,111.05,1.7,63.75 +4887,30,2.5,111.05,1.7,63.75 +4888,30,2.5,111.05,1.7,63.75 +4889,30,2.5,111.05,1.7,63.75 +4890,30,2.5,111.05,1.7,63.75 +4891,30,2.5,111.05,1.7,63.75 +4892,30,2.5,111.05,1.7,63.75 +4893,30,2.5,111.05,1.7,63.75 +4894,30,2.5,111.05,1.7,63.75 +4895,30,2.5,111.05,1.7,63.75 +4896,30,2.5,111.05,1.7,63.75 +4897,30,2.5,111.05,1.7,63.75 +4898,30,2.5,111.05,1.7,63.75 +4899,30,2.5,111.05,1.7,63.75 +4900,30,2.5,111.05,1.7,63.75 +4901,30,2.5,111.05,1.7,63.75 +4902,30,2.5,111.05,1.7,63.75 +4903,30,2.5,111.05,1.7,63.75 +4904,30,2.5,111.05,1.7,63.75 +4905,30,2.5,111.05,1.7,63.75 +4906,30,2.5,111.05,1.7,63.75 +4907,30,2.5,111.05,1.7,63.75 +4908,30,2.5,111.05,1.7,63.75 +4909,30,2.5,111.05,1.7,63.75 +4910,30,2.5,111.05,1.7,63.75 +4911,30,2.5,111.05,1.7,63.75 +4912,30,2.5,111.05,1.7,63.75 +4913,30,2.5,111.05,1.7,63.75 +4914,30,2.5,111.05,1.7,63.75 +4915,30,2.5,111.05,1.7,63.75 +4916,30,2.5,111.05,1.7,63.75 +4917,30,2.5,111.05,1.7,63.75 +4918,30,2.5,111.05,1.7,63.75 +4919,30,2.5,111.05,1.7,63.75 +4920,30,2.5,111.05,1.7,63.75 +4921,30,2.5,111.05,1.7,63.75 +4922,30,2.5,111.05,1.7,63.75 +4923,30,2.5,111.05,1.7,63.75 +4924,30,2.5,111.05,1.7,63.75 +4925,30,2.5,111.05,1.7,63.75 +4926,30,2.5,111.05,1.7,63.75 +4927,30,2.5,111.05,1.7,63.75 +4928,30,2.5,111.05,1.7,63.75 +4929,30,2.5,111.05,1.7,63.75 +4930,30,2.5,111.05,1.7,63.75 +4931,30,2.5,111.05,1.7,63.75 +4932,30,2.5,111.05,1.7,63.75 +4933,30,2.5,111.05,1.7,63.75 +4934,30,2.5,111.05,1.7,63.75 +4935,30,2.5,111.05,1.7,63.75 +4936,30,2.5,111.05,1.7,63.75 +4937,30,2.5,111.05,1.7,63.75 +4938,30,2.5,111.05,1.7,63.75 +4939,30,2.5,111.05,1.7,63.75 +4940,30,2.5,111.05,1.7,63.75 +4941,30,2.5,111.05,1.7,63.75 +4942,30,2.5,111.05,1.7,63.75 +4943,30,2.5,111.05,1.7,63.75 +4944,30,2.5,111.05,1.7,63.75 +4945,30,2.5,111.05,1.7,63.75 +4946,30,2.5,111.05,1.7,63.75 +4947,30,2.5,111.05,1.7,63.75 +4948,30,2.5,111.05,1.7,63.75 +4949,30,2.5,111.05,1.7,63.75 +4950,30,2.5,111.05,1.7,63.75 +4951,30,2.5,111.05,1.7,63.75 +4952,30,2.5,111.05,1.7,63.75 +4953,30,2.5,111.05,1.7,63.75 +4954,30,2.5,111.05,1.7,63.75 +4955,30,2.5,111.05,1.7,63.75 +4956,30,2.5,111.05,1.7,63.75 +4957,30,2.5,111.05,1.7,63.75 +4958,30,2.5,111.05,1.7,63.75 +4959,30,2.5,111.05,1.7,63.75 +4960,30,2.5,111.05,1.7,63.75 +4961,30,2.5,111.05,1.7,63.75 +4962,30,2.5,111.05,1.7,63.75 +4963,30,2.5,111.05,1.7,63.75 +4964,30,2.5,111.05,1.7,63.75 +4965,30,2.5,111.05,1.7,63.75 +4966,30,2.5,111.05,1.7,63.75 +4967,30,2.5,111.05,1.7,63.75 +4968,30,2.5,111.05,1.7,63.75 +4969,30,2.5,111.05,1.7,63.75 +4970,30,2.5,111.05,1.7,63.75 +4971,30,2.5,111.05,1.7,63.75 +4972,30,2.5,111.05,1.7,63.75 +4973,30,2.5,111.05,1.7,63.75 +4974,30,2.5,111.05,1.7,63.75 +4975,30,2.5,111.05,1.7,63.75 +4976,30,2.5,111.05,1.7,63.75 +4977,30,2.5,111.05,1.7,63.75 +4978,30,2.5,111.05,1.7,63.75 +4979,30,2.5,111.05,1.7,63.75 +4980,30,2.5,111.05,1.7,63.75 +4981,30,2.5,111.05,1.7,63.75 +4982,30,2.5,111.05,1.7,63.75 +4983,30,2.5,111.05,1.7,63.75 +4984,30,2.5,111.05,1.7,63.75 +4985,30,2.5,111.05,1.7,63.75 +4986,30,2.5,111.05,1.7,63.75 +4987,30,2.5,111.05,1.7,63.75 +4988,30,2.5,111.05,1.7,63.75 +4989,30,2.5,111.05,1.7,63.75 +4990,30,2.5,111.05,1.7,63.75 +4991,30,2.5,111.05,1.7,63.75 +4992,30,2.5,111.05,1.7,63.75 +4993,30,2.5,111.05,1.7,63.75 +4994,30,2.5,111.05,1.7,63.75 +4995,30,2.5,111.05,1.7,63.75 +4996,30,2.5,111.05,1.7,63.75 +4997,30,2.5,111.05,1.7,63.75 +4998,30,2.5,111.05,1.7,63.75 +4999,30,2.5,111.05,1.7,63.75 +5000,30,2.5,111.05,1.7,63.75 +5001,30,2.5,111.05,1.7,63.75 +5002,30,2.5,111.05,1.7,63.75 +5003,30,2.5,111.05,1.7,63.75 +5004,30,2.5,111.05,1.7,63.75 +5005,30,2.5,111.05,1.7,63.75 +5006,30,2.5,111.05,1.7,63.75 +5007,30,2.5,111.05,1.7,63.75 +5008,30,2.5,111.05,1.7,63.75 +5009,30,2.5,111.05,1.7,63.75 +5010,30,2.5,111.05,1.7,63.75 +5011,30,2.5,111.05,1.7,63.75 +5012,30,2.5,111.05,1.7,63.75 +5013,30,2.5,111.05,1.7,63.75 +5014,30,2.5,111.05,1.7,63.75 +5015,30,2.5,111.05,1.7,63.75 +5016,30,2.5,111.05,1.7,63.75 +5017,30,2.5,111.05,1.7,63.75 +5018,30,2.5,111.05,1.7,63.75 +5019,30,2.5,111.05,1.7,63.75 +5020,30,2.5,111.05,1.7,63.75 +5021,30,2.5,111.05,1.7,63.75 +5022,30,2.5,111.05,1.7,63.75 +5023,30,2.5,111.05,1.7,63.75 +5024,30,2.5,111.05,1.7,63.75 +5025,30,2.5,111.05,1.7,63.75 +5026,30,2.5,111.05,1.7,63.75 +5027,30,2.5,111.05,1.7,63.75 +5028,30,2.5,111.05,1.7,63.75 +5029,30,2.5,111.05,1.7,63.75 +5030,30,2.5,111.05,1.7,63.75 +5031,30,2.5,111.05,1.7,63.75 +5032,30,2.5,111.05,1.7,63.75 +5033,30,2.5,111.05,1.7,63.75 +5034,30,2.5,111.05,1.7,63.75 +5035,30,2.5,111.05,1.7,63.75 +5036,30,2.5,111.05,1.7,63.75 +5037,30,2.5,111.05,1.7,63.75 +5038,30,2.5,111.05,1.7,63.75 +5039,30,2.5,111.05,1.7,63.75 +5040,30,2.5,111.05,1.7,63.75 +5041,30,2.5,111.05,1.7,63.75 +5042,30,2.5,111.05,1.7,63.75 +5043,30,2.5,111.05,1.7,63.75 +5044,30,2.5,111.05,1.7,63.75 +5045,30,2.5,111.05,1.7,63.75 +5046,30,2.5,111.05,1.7,63.75 +5047,30,2.5,111.05,1.7,63.75 +5048,30,2.5,111.05,1.7,63.75 +5049,30,2.5,111.05,1.7,63.75 +5050,30,2.5,111.05,1.7,63.75 +5051,30,2.5,111.05,1.7,63.75 +5052,30,2.5,111.05,1.7,63.75 +5053,30,2.5,111.05,1.7,63.75 +5054,30,2.5,111.05,1.7,63.75 +5055,30,2.5,111.05,1.7,63.75 +5056,30,2.5,111.05,1.7,63.75 +5057,30,2.5,111.05,1.7,63.75 +5058,30,2.5,111.05,1.7,63.75 +5059,30,2.5,111.05,1.7,63.75 +5060,30,2.5,111.05,1.7,63.75 +5061,30,2.5,111.05,1.7,63.75 +5062,30,2.5,111.05,1.7,63.75 +5063,30,2.5,111.05,1.7,63.75 +5064,30,2.5,111.05,1.7,63.75 +5065,30,2.5,111.05,1.7,63.75 +5066,30,2.5,111.05,1.7,63.75 +5067,30,2.5,111.05,1.7,63.75 +5068,30,2.5,111.05,1.7,63.75 +5069,30,2.5,111.05,1.7,63.75 +5070,30,2.5,111.05,1.7,63.75 +5071,30,2.5,111.05,1.7,63.75 +5072,30,2.5,111.05,1.7,63.75 +5073,30,2.5,111.05,1.7,63.75 +5074,30,2.5,111.05,1.7,63.75 +5075,30,2.5,111.05,1.7,63.75 +5076,30,2.5,111.05,1.7,63.75 +5077,30,2.5,111.05,1.7,63.75 +5078,30,2.5,111.05,1.7,63.75 +5079,30,2.5,111.05,1.7,63.75 +5080,30,2.5,111.05,1.7,63.75 +5081,30,2.5,111.05,1.7,63.75 +5082,30,2.5,111.05,1.7,63.75 +5083,30,2.5,111.05,1.7,63.75 +5084,30,2.5,111.05,1.7,63.75 +5085,30,2.5,111.05,1.7,63.75 +5086,30,2.5,111.05,1.7,63.75 +5087,30,2.5,111.05,1.7,63.75 +5088,30,2.5,111.05,1.7,63.75 +5089,30,2.5,111.05,1.7,63.75 +5090,30,2.5,111.05,1.7,63.75 +5091,30,2.5,111.05,1.7,63.75 +5092,30,2.5,111.05,1.7,63.75 +5093,30,2.5,111.05,1.7,63.75 +5094,30,2.5,111.05,1.7,63.75 +5095,30,2.5,111.05,1.7,63.75 +5096,30,2.5,111.05,1.7,63.75 +5097,30,2.5,111.05,1.7,63.75 +5098,30,2.5,111.05,1.7,63.75 +5099,30,2.5,111.05,1.7,63.75 +5100,30,2.5,111.05,1.7,63.75 +5101,30,2.5,111.05,1.7,63.75 +5102,30,2.5,111.05,1.7,63.75 +5103,30,2.5,111.05,1.7,63.75 +5104,30,2.5,111.05,1.7,63.75 +5105,30,2.5,111.05,1.7,63.75 +5106,30,2.5,111.05,1.7,63.75 +5107,30,2.5,111.05,1.7,63.75 +5108,30,2.5,111.05,1.7,63.75 +5109,30,2.5,111.05,1.7,63.75 +5110,30,2.5,111.05,1.7,63.75 +5111,30,2.5,111.05,1.7,63.75 +5112,30,2.5,111.05,1.7,63.75 +5113,30,2.5,111.05,1.7,63.75 +5114,30,2.5,111.05,1.7,63.75 +5115,30,2.5,111.05,1.7,63.75 +5116,30,2.5,111.05,1.7,63.75 +5117,30,2.5,111.05,1.7,63.75 +5118,30,2.5,111.05,1.7,63.75 +5119,30,2.5,111.05,1.7,63.75 +5120,30,2.5,111.05,1.7,63.75 +5121,30,2.5,111.05,1.7,63.75 +5122,30,2.5,111.05,1.7,63.75 +5123,30,2.5,111.05,1.7,63.75 +5124,30,2.5,111.05,1.7,63.75 +5125,30,2.5,111.05,1.7,63.75 +5126,30,2.5,111.05,1.7,63.75 +5127,30,2.5,111.05,1.7,63.75 +5128,30,2.5,111.05,1.7,63.75 +5129,30,2.5,111.05,1.7,63.75 +5130,30,2.5,111.05,1.7,63.75 +5131,30,2.5,111.05,1.7,63.75 +5132,30,2.5,111.05,1.7,63.75 +5133,30,2.5,111.05,1.7,63.75 +5134,30,2.5,111.05,1.7,63.75 +5135,30,2.5,111.05,1.7,63.75 +5136,30,2.5,111.05,1.7,63.75 +5137,30,2.5,111.05,1.7,63.75 +5138,30,2.5,111.05,1.7,63.75 +5139,30,2.5,111.05,1.7,63.75 +5140,30,2.5,111.05,1.7,63.75 +5141,30,2.5,111.05,1.7,63.75 +5142,30,2.5,111.05,1.7,63.75 +5143,30,2.5,111.05,1.7,63.75 +5144,30,2.5,111.05,1.7,63.75 +5145,30,2.5,111.05,1.7,63.75 +5146,30,2.5,111.05,1.7,63.75 +5147,30,2.5,111.05,1.7,63.75 +5148,30,2.5,111.05,1.7,63.75 +5149,30,2.5,111.05,1.7,63.75 +5150,30,2.5,111.05,1.7,63.75 +5151,30,2.5,111.05,1.7,63.75 +5152,30,2.5,111.05,1.7,63.75 +5153,30,2.5,111.05,1.7,63.75 +5154,30,2.5,111.05,1.7,63.75 +5155,30,2.5,111.05,1.7,63.75 +5156,30,2.5,111.05,1.7,63.75 +5157,30,2.5,111.05,1.7,63.75 +5158,30,2.5,111.05,1.7,63.75 +5159,30,2.5,111.05,1.7,63.75 +5160,30,2.5,111.05,1.7,63.75 +5161,30,2.5,111.05,1.7,63.75 +5162,30,2.5,111.05,1.7,63.75 +5163,30,2.5,111.05,1.7,63.75 +5164,30,2.5,111.05,1.7,63.75 +5165,30,2.5,111.05,1.7,63.75 +5166,30,2.5,111.05,1.7,63.75 +5167,30,2.5,111.05,1.7,63.75 +5168,30,2.5,111.05,1.7,63.75 +5169,30,2.5,111.05,1.7,63.75 +5170,30,2.5,111.05,1.7,63.75 +5171,30,2.5,111.05,1.7,63.75 +5172,30,2.5,111.05,1.7,63.75 +5173,30,2.5,111.05,1.7,63.75 +5174,30,2.5,111.05,1.7,63.75 +5175,30,2.5,111.05,1.7,63.75 +5176,30,2.5,111.05,1.7,63.75 +5177,30,2.5,111.05,1.7,63.75 +5178,30,2.5,111.05,1.7,63.75 +5179,30,2.5,111.05,1.7,63.75 +5180,30,2.5,111.05,1.7,63.75 +5181,30,2.5,111.05,1.7,63.75 +5182,30,2.5,111.05,1.7,63.75 +5183,30,2.5,111.05,1.7,63.75 +5184,30,2.5,111.05,1.7,63.75 +5185,30,2.5,111.05,1.7,63.75 +5186,30,2.5,111.05,1.7,63.75 +5187,30,2.5,111.05,1.7,63.75 +5188,30,2.5,111.05,1.7,63.75 +5189,30,2.5,111.05,1.7,63.75 +5190,30,2.5,111.05,1.7,63.75 +5191,30,2.5,111.05,1.7,63.75 +5192,30,2.5,111.05,1.7,63.75 +5193,30,2.5,111.05,1.7,63.75 +5194,30,2.5,111.05,1.7,63.75 +5195,30,2.5,111.05,1.7,63.75 +5196,30,2.5,111.05,1.7,63.75 +5197,30,2.5,111.05,1.7,63.75 +5198,30,2.5,111.05,1.7,63.75 +5199,30,2.5,111.05,1.7,63.75 +5200,30,2.5,111.05,1.7,63.75 +5201,30,2.5,111.05,1.7,63.75 +5202,30,2.5,111.05,1.7,63.75 +5203,30,2.5,111.05,1.7,63.75 +5204,30,2.5,111.05,1.7,63.75 +5205,30,2.5,111.05,1.7,63.75 +5206,30,2.5,111.05,1.7,63.75 +5207,30,2.5,111.05,1.7,63.75 +5208,30,2.5,111.05,1.7,63.75 +5209,30,2.5,111.05,1.7,63.75 +5210,30,2.5,111.05,1.7,63.75 +5211,30,2.5,111.05,1.7,63.75 +5212,30,2.5,111.05,1.7,63.75 +5213,30,2.5,111.05,1.7,63.75 +5214,30,2.5,111.05,1.7,63.75 +5215,30,2.5,111.05,1.7,63.75 +5216,30,2.5,111.05,1.7,63.75 +5217,30,2.5,111.05,1.7,63.75 +5218,30,2.5,111.05,1.7,63.75 +5219,30,2.5,111.05,1.7,63.75 +5220,30,2.5,111.05,1.7,63.75 +5221,30,2.5,111.05,1.7,63.75 +5222,30,2.5,111.05,1.7,63.75 +5223,30,2.5,111.05,1.7,63.75 +5224,30,2.5,111.05,1.7,63.75 +5225,30,2.5,111.05,1.7,63.75 +5226,30,2.5,111.05,1.7,63.75 +5227,30,2.5,111.05,1.7,63.75 +5228,30,2.5,111.05,1.7,63.75 +5229,30,2.5,111.05,1.7,63.75 +5230,30,2.5,111.05,1.7,63.75 +5231,30,2.5,111.05,1.7,63.75 +5232,30,2.5,111.05,1.7,63.75 +5233,30,2.5,111.05,1.7,63.75 +5234,30,2.5,111.05,1.7,63.75 +5235,30,2.5,111.05,1.7,63.75 +5236,30,2.5,111.05,1.7,63.75 +5237,30,2.5,111.05,1.7,63.75 +5238,30,2.5,111.05,1.7,63.75 +5239,30,2.5,111.05,1.7,63.75 +5240,30,2.5,111.05,1.7,63.75 +5241,30,2.5,111.05,1.7,63.75 +5242,30,2.5,111.05,1.7,63.75 +5243,30,2.5,111.05,1.7,63.75 +5244,30,2.5,111.05,1.7,63.75 +5245,30,2.5,111.05,1.7,63.75 +5246,30,2.5,111.05,1.7,63.75 +5247,30,2.5,111.05,1.7,63.75 +5248,30,2.5,111.05,1.7,63.75 +5249,30,2.5,111.05,1.7,63.75 +5250,30,2.5,111.05,1.7,63.75 +5251,30,2.5,111.05,1.7,63.75 +5252,30,2.5,111.05,1.7,63.75 +5253,30,2.5,111.05,1.7,63.75 +5254,30,2.5,111.05,1.7,63.75 +5255,30,2.5,111.05,1.7,63.75 +5256,30,2.5,111.05,1.7,63.75 +5257,30,2.5,111.05,1.7,63.75 +5258,30,2.5,111.05,1.7,63.75 +5259,30,2.5,111.05,1.7,63.75 +5260,30,2.5,111.05,1.7,63.75 +5261,30,2.5,111.05,1.7,63.75 +5262,30,2.5,111.05,1.7,63.75 +5263,30,2.5,111.05,1.7,63.75 +5264,30,2.5,111.05,1.7,63.75 +5265,30,2.5,111.05,1.7,63.75 +5266,30,2.5,111.05,1.7,63.75 +5267,30,2.5,111.05,1.7,63.75 +5268,30,2.5,111.05,1.7,63.75 +5269,30,2.5,111.05,1.7,63.75 +5270,30,2.5,111.05,1.7,63.75 +5271,30,2.5,111.05,1.7,63.75 +5272,30,2.5,111.05,1.7,63.75 +5273,30,2.5,111.05,1.7,63.75 +5274,30,2.5,111.05,1.7,63.75 +5275,30,2.5,111.05,1.7,63.75 +5276,30,2.5,111.05,1.7,63.75 +5277,30,2.5,111.05,1.7,63.75 +5278,30,2.5,111.05,1.7,63.75 +5279,30,2.5,111.05,1.7,63.75 +5280,30,2.5,111.05,1.7,63.75 +5281,30,2.5,111.05,1.7,63.75 +5282,30,2.5,111.05,1.7,63.75 +5283,30,2.5,111.05,1.7,63.75 +5284,30,2.5,111.05,1.7,63.75 +5285,30,2.5,111.05,1.7,63.75 +5286,30,2.5,111.05,1.7,63.75 +5287,30,2.5,111.05,1.7,63.75 +5288,30,2.5,111.05,1.7,63.75 +5289,30,2.5,111.05,1.7,63.75 +5290,30,2.5,111.05,1.7,63.75 +5291,30,2.5,111.05,1.7,63.75 +5292,30,2.5,111.05,1.7,63.75 +5293,30,2.5,111.05,1.7,63.75 +5294,30,2.5,111.05,1.7,63.75 +5295,30,2.5,111.05,1.7,63.75 +5296,30,2.5,111.05,1.7,63.75 +5297,30,2.5,111.05,1.7,63.75 +5298,30,2.5,111.05,1.7,63.75 +5299,30,2.5,111.05,1.7,63.75 +5300,30,2.5,111.05,1.7,63.75 +5301,30,2.5,111.05,1.7,63.75 +5302,30,2.5,111.05,1.7,63.75 +5303,30,2.5,111.05,1.7,63.75 +5304,30,2.5,111.05,1.7,63.75 +5305,30,2.5,111.05,1.7,63.75 +5306,30,2.5,111.05,1.7,63.75 +5307,30,2.5,111.05,1.7,63.75 +5308,30,2.5,111.05,1.7,63.75 +5309,30,2.5,111.05,1.7,63.75 +5310,30,2.5,111.05,1.7,63.75 +5311,30,2.5,111.05,1.7,63.75 +5312,30,2.5,111.05,1.7,63.75 +5313,30,2.5,111.05,1.7,63.75 +5314,30,2.5,111.05,1.7,63.75 +5315,30,2.5,111.05,1.7,63.75 +5316,30,2.5,111.05,1.7,63.75 +5317,30,2.5,111.05,1.7,63.75 +5318,30,2.5,111.05,1.7,63.75 +5319,30,2.5,111.05,1.7,63.75 +5320,30,2.5,111.05,1.7,63.75 +5321,30,2.5,111.05,1.7,63.75 +5322,30,2.5,111.05,1.7,63.75 +5323,30,2.5,111.05,1.7,63.75 +5324,30,2.5,111.05,1.7,63.75 +5325,30,2.5,111.05,1.7,63.75 +5326,30,2.5,111.05,1.7,63.75 +5327,30,2.5,111.05,1.7,63.75 +5328,30,2.5,111.05,1.7,63.75 +5329,30,2.5,111.05,1.7,63.75 +5330,30,2.5,111.05,1.7,63.75 +5331,30,2.5,111.05,1.7,63.75 +5332,30,2.5,111.05,1.7,63.75 +5333,30,2.5,111.05,1.7,63.75 +5334,30,2.5,111.05,1.7,63.75 +5335,30,2.5,111.05,1.7,63.75 +5336,30,2.5,111.05,1.7,63.75 +5337,30,2.5,111.05,1.7,63.75 +5338,30,2.5,111.05,1.7,63.75 +5339,30,2.5,111.05,1.7,63.75 +5340,30,2.5,111.05,1.7,63.75 +5341,30,2.5,111.05,1.7,63.75 +5342,30,2.5,111.05,1.7,63.75 +5343,30,2.5,111.05,1.7,63.75 +5344,30,2.5,111.05,1.7,63.75 +5345,30,2.5,111.05,1.7,63.75 +5346,30,2.5,111.05,1.7,63.75 +5347,30,2.5,111.05,1.7,63.75 +5348,30,2.5,111.05,1.7,63.75 +5349,30,2.5,111.05,1.7,63.75 +5350,30,2.5,111.05,1.7,63.75 +5351,30,2.5,111.05,1.7,63.75 +5352,30,2.5,111.05,1.7,63.75 +5353,30,2.5,111.05,1.7,63.75 +5354,30,2.5,111.05,1.7,63.75 +5355,30,2.5,111.05,1.7,63.75 +5356,30,2.5,111.05,1.7,63.75 +5357,30,2.5,111.05,1.7,63.75 +5358,30,2.5,111.05,1.7,63.75 +5359,30,2.5,111.05,1.7,63.75 +5360,30,2.5,111.05,1.7,63.75 +5361,30,2.5,111.05,1.7,63.75 +5362,30,2.5,111.05,1.7,63.75 +5363,30,2.5,111.05,1.7,63.75 +5364,30,2.5,111.05,1.7,63.75 +5365,30,2.5,111.05,1.7,63.75 +5366,30,2.5,111.05,1.7,63.75 +5367,30,2.5,111.05,1.7,63.75 +5368,30,2.5,111.05,1.7,63.75 +5369,30,2.5,111.05,1.7,63.75 +5370,30,2.5,111.05,1.7,63.75 +5371,30,2.5,111.05,1.7,63.75 +5372,30,2.5,111.05,1.7,63.75 +5373,30,2.5,111.05,1.7,63.75 +5374,30,2.5,111.05,1.7,63.75 +5375,30,2.5,111.05,1.7,63.75 +5376,30,2.5,111.05,1.7,63.75 +5377,30,2.5,111.05,1.7,63.75 +5378,30,2.5,111.05,1.7,63.75 +5379,30,2.5,111.05,1.7,63.75 +5380,30,2.5,111.05,1.7,63.75 +5381,30,2.5,111.05,1.7,63.75 +5382,30,2.5,111.05,1.7,63.75 +5383,30,2.5,111.05,1.7,63.75 +5384,30,2.5,111.05,1.7,63.75 +5385,30,2.5,111.05,1.7,63.75 +5386,30,2.5,111.05,1.7,63.75 +5387,30,2.5,111.05,1.7,63.75 +5388,30,2.5,111.05,1.7,63.75 +5389,30,2.5,111.05,1.7,63.75 +5390,30,2.5,111.05,1.7,63.75 +5391,30,2.5,111.05,1.7,63.75 +5392,30,2.5,111.05,1.7,63.75 +5393,30,2.5,111.05,1.7,63.75 +5394,30,2.5,111.05,1.7,63.75 +5395,30,2.5,111.05,1.7,63.75 +5396,30,2.5,111.05,1.7,63.75 +5397,30,2.5,111.05,1.7,63.75 +5398,30,2.5,111.05,1.7,63.75 +5399,30,2.5,111.05,1.7,63.75 +5400,30,2.5,111.05,1.7,63.75 +5401,30,2.5,111.05,1.7,63.75 +5402,30,2.5,111.05,1.7,63.75 +5403,30,2.5,111.05,1.7,63.75 +5404,30,2.5,111.05,1.7,63.75 +5405,30,2.5,111.05,1.7,63.75 +5406,30,2.5,111.05,1.7,63.75 +5407,30,2.5,111.05,1.7,63.75 +5408,30,2.5,111.05,1.7,63.75 +5409,30,2.5,111.05,1.7,63.75 +5410,30,2.5,111.05,1.7,63.75 +5411,30,2.5,111.05,1.7,63.75 +5412,30,2.5,111.05,1.7,63.75 +5413,30,2.5,111.05,1.7,63.75 +5414,30,2.5,111.05,1.7,63.75 +5415,30,2.5,111.05,1.7,63.75 +5416,30,2.5,111.05,1.7,63.75 +5417,30,2.5,111.05,1.7,63.75 +5418,30,2.5,111.05,1.7,63.75 +5419,30,2.5,111.05,1.7,63.75 +5420,30,2.5,111.05,1.7,63.75 +5421,30,2.5,111.05,1.7,63.75 +5422,30,2.5,111.05,1.7,63.75 +5423,30,2.5,111.05,1.7,63.75 +5424,30,2.5,111.05,1.7,63.75 +5425,30,2.5,111.05,1.7,63.75 +5426,30,2.5,111.05,1.7,63.75 +5427,30,2.5,111.05,1.7,63.75 +5428,30,2.5,111.05,1.7,63.75 +5429,30,2.5,111.05,1.7,63.75 +5430,30,2.5,111.05,1.7,63.75 +5431,30,2.5,111.05,1.7,63.75 +5432,30,2.5,111.05,1.7,63.75 +5433,30,2.5,111.05,1.7,63.75 +5434,30,2.5,111.05,1.7,63.75 +5435,30,2.5,111.05,1.7,63.75 +5436,30,2.5,111.05,1.7,63.75 +5437,30,2.5,111.05,1.7,63.75 +5438,30,2.5,111.05,1.7,63.75 +5439,30,2.5,111.05,1.7,63.75 +5440,30,2.5,111.05,1.7,63.75 +5441,30,2.5,111.05,1.7,63.75 +5442,30,2.5,111.05,1.7,63.75 +5443,30,2.5,111.05,1.7,63.75 +5444,30,2.5,111.05,1.7,63.75 +5445,30,2.5,111.05,1.7,63.75 +5446,30,2.5,111.05,1.7,63.75 +5447,30,2.5,111.05,1.7,63.75 +5448,30,2.5,111.05,1.7,63.75 +5449,30,2.5,111.05,1.7,63.75 +5450,30,2.5,111.05,1.7,63.75 +5451,30,2.5,111.05,1.7,63.75 +5452,30,2.5,111.05,1.7,63.75 +5453,30,2.5,111.05,1.7,63.75 +5454,30,2.5,111.05,1.7,63.75 +5455,30,2.5,111.05,1.7,63.75 +5456,30,2.5,111.05,1.7,63.75 +5457,30,2.5,111.05,1.7,63.75 +5458,30,2.5,111.05,1.7,63.75 +5459,30,2.5,111.05,1.7,63.75 +5460,30,2.5,111.05,1.7,63.75 +5461,30,2.5,111.05,1.7,63.75 +5462,30,2.5,111.05,1.7,63.75 +5463,30,2.5,111.05,1.7,63.75 +5464,30,2.5,111.05,1.7,63.75 +5465,30,2.5,111.05,1.7,63.75 +5466,30,2.5,111.05,1.7,63.75 +5467,30,2.5,111.05,1.7,63.75 +5468,30,2.5,111.05,1.7,63.75 +5469,30,2.5,111.05,1.7,63.75 +5470,30,2.5,111.05,1.7,63.75 +5471,30,2.5,111.05,1.7,63.75 +5472,30,2.5,111.05,1.7,63.75 +5473,30,2.5,111.05,1.7,63.75 +5474,30,2.5,111.05,1.7,63.75 +5475,30,2.5,111.05,1.7,63.75 +5476,30,2.5,111.05,1.7,63.75 +5477,30,2.5,111.05,1.7,63.75 +5478,30,2.5,111.05,1.7,63.75 +5479,30,2.5,111.05,1.7,63.75 +5480,30,2.5,111.05,1.7,63.75 +5481,30,2.5,111.05,1.7,63.75 +5482,30,2.5,111.05,1.7,63.75 +5483,30,2.5,111.05,1.7,63.75 +5484,30,2.5,111.05,1.7,63.75 +5485,30,2.5,111.05,1.7,63.75 +5486,30,2.5,111.05,1.7,63.75 +5487,30,2.5,111.05,1.7,63.75 +5488,30,2.5,111.05,1.7,63.75 +5489,30,2.5,111.05,1.7,63.75 +5490,30,2.5,111.05,1.7,63.75 +5491,30,2.5,111.05,1.7,63.75 +5492,30,2.5,111.05,1.7,63.75 +5493,30,2.5,111.05,1.7,63.75 +5494,30,2.5,111.05,1.7,63.75 +5495,30,2.5,111.05,1.7,63.75 +5496,30,2.5,111.05,1.7,63.75 +5497,30,2.5,111.05,1.7,63.75 +5498,30,2.5,111.05,1.7,63.75 +5499,30,2.5,111.05,1.7,63.75 +5500,30,2.5,111.05,1.7,63.75 +5501,30,2.5,111.05,1.7,63.75 +5502,30,2.5,111.05,1.7,63.75 +5503,30,2.5,111.05,1.7,63.75 +5504,30,2.5,111.05,1.7,63.75 +5505,30,2.5,111.05,1.7,63.75 +5506,30,2.5,111.05,1.7,63.75 +5507,30,2.5,111.05,1.7,63.75 +5508,30,2.5,111.05,1.7,63.75 +5509,30,2.5,111.05,1.7,63.75 +5510,30,2.5,111.05,1.7,63.75 +5511,30,2.5,111.05,1.7,63.75 +5512,30,2.5,111.05,1.7,63.75 +5513,30,2.5,111.05,1.7,63.75 +5514,30,2.5,111.05,1.7,63.75 +5515,30,2.5,111.05,1.7,63.75 +5516,30,2.5,111.05,1.7,63.75 +5517,30,2.5,111.05,1.7,63.75 +5518,30,2.5,111.05,1.7,63.75 +5519,30,2.5,111.05,1.7,63.75 +5520,30,2.5,111.05,1.7,63.75 +5521,30,2.5,111.05,1.7,63.75 +5522,30,2.5,111.05,1.7,63.75 +5523,30,2.5,111.05,1.7,63.75 +5524,30,2.5,111.05,1.7,63.75 +5525,30,2.5,111.05,1.7,63.75 +5526,30,2.5,111.05,1.7,63.75 +5527,30,2.5,111.05,1.7,63.75 +5528,30,2.5,111.05,1.7,63.75 +5529,30,2.5,111.05,1.7,63.75 +5530,30,2.5,111.05,1.7,63.75 +5531,30,2.5,111.05,1.7,63.75 +5532,30,2.5,111.05,1.7,63.75 +5533,30,2.5,111.05,1.7,63.75 +5534,30,2.5,111.05,1.7,63.75 +5535,30,2.5,111.05,1.7,63.75 +5536,30,2.5,111.05,1.7,63.75 +5537,30,2.5,111.05,1.7,63.75 +5538,30,2.5,111.05,1.7,63.75 +5539,30,2.5,111.05,1.7,63.75 +5540,30,2.5,111.05,1.7,63.75 +5541,30,2.5,111.05,1.7,63.75 +5542,30,2.5,111.05,1.7,63.75 +5543,30,2.5,111.05,1.7,63.75 +5544,30,2.5,111.05,1.7,63.75 +5545,30,2.5,111.05,1.7,63.75 +5546,30,2.5,111.05,1.7,63.75 +5547,30,2.5,111.05,1.7,63.75 +5548,30,2.5,111.05,1.7,63.75 +5549,30,2.5,111.05,1.7,63.75 +5550,30,2.5,111.05,1.7,63.75 +5551,30,2.5,111.05,1.7,63.75 +5552,30,2.5,111.05,1.7,63.75 +5553,30,2.5,111.05,1.7,63.75 +5554,30,2.5,111.05,1.7,63.75 +5555,30,2.5,111.05,1.7,63.75 +5556,30,2.5,111.05,1.7,63.75 +5557,30,2.5,111.05,1.7,63.75 +5558,30,2.5,111.05,1.7,63.75 +5559,30,2.5,111.05,1.7,63.75 +5560,30,2.5,111.05,1.7,63.75 +5561,30,2.5,111.05,1.7,63.75 +5562,30,2.5,111.05,1.7,63.75 +5563,30,2.5,111.05,1.7,63.75 +5564,30,2.5,111.05,1.7,63.75 +5565,30,2.5,111.05,1.7,63.75 +5566,30,2.5,111.05,1.7,63.75 +5567,30,2.5,111.05,1.7,63.75 +5568,30,2.5,111.05,1.7,63.75 +5569,30,2.5,111.05,1.7,63.75 +5570,30,2.5,111.05,1.7,63.75 +5571,30,2.5,111.05,1.7,63.75 +5572,30,2.5,111.05,1.7,63.75 +5573,30,2.5,111.05,1.7,63.75 +5574,30,2.5,111.05,1.7,63.75 +5575,30,2.5,111.05,1.7,63.75 +5576,30,2.5,111.05,1.7,63.75 +5577,30,2.5,111.05,1.7,63.75 +5578,30,2.5,111.05,1.7,63.75 +5579,30,2.5,111.05,1.7,63.75 +5580,30,2.5,111.05,1.7,63.75 +5581,30,2.5,111.05,1.7,63.75 +5582,30,2.5,111.05,1.7,63.75 +5583,30,2.5,111.05,1.7,63.75 +5584,30,2.5,111.05,1.7,63.75 +5585,30,2.5,111.05,1.7,63.75 +5586,30,2.5,111.05,1.7,63.75 +5587,30,2.5,111.05,1.7,63.75 +5588,30,2.5,111.05,1.7,63.75 +5589,30,2.5,111.05,1.7,63.75 +5590,30,2.5,111.05,1.7,63.75 +5591,30,2.5,111.05,1.7,63.75 +5592,30,2.5,111.05,1.7,63.75 +5593,30,2.5,111.05,1.7,63.75 +5594,30,2.5,111.05,1.7,63.75 +5595,30,2.5,111.05,1.7,63.75 +5596,30,2.5,111.05,1.7,63.75 +5597,30,2.5,111.05,1.7,63.75 +5598,30,2.5,111.05,1.7,63.75 +5599,30,2.5,111.05,1.7,63.75 +5600,30,2.5,111.05,1.7,63.75 +5601,30,2.5,111.05,1.7,63.75 +5602,30,2.5,111.05,1.7,63.75 +5603,30,2.5,111.05,1.7,63.75 +5604,30,2.5,111.05,1.7,63.75 +5605,30,2.5,111.05,1.7,63.75 +5606,30,2.5,111.05,1.7,63.75 +5607,30,2.5,111.05,1.7,63.75 +5608,30,2.5,111.05,1.7,63.75 +5609,30,2.5,111.05,1.7,63.75 +5610,30,2.5,111.05,1.7,63.75 +5611,30,2.5,111.05,1.7,63.75 +5612,30,2.5,111.05,1.7,63.75 +5613,30,2.5,111.05,1.7,63.75 +5614,30,2.5,111.05,1.7,63.75 +5615,30,2.5,111.05,1.7,63.75 +5616,30,2.5,111.05,1.7,63.75 +5617,30,2.5,111.05,1.7,63.75 +5618,30,2.5,111.05,1.7,63.75 +5619,30,2.5,111.05,1.7,63.75 +5620,30,2.5,111.05,1.7,63.75 +5621,30,2.5,111.05,1.7,63.75 +5622,30,2.5,111.05,1.7,63.75 +5623,30,2.5,111.05,1.7,63.75 +5624,30,2.5,111.05,1.7,63.75 +5625,30,2.5,111.05,1.7,63.75 +5626,30,2.5,111.05,1.7,63.75 +5627,30,2.5,111.05,1.7,63.75 +5628,30,2.5,111.05,1.7,63.75 +5629,30,2.5,111.05,1.7,63.75 +5630,30,2.5,111.05,1.7,63.75 +5631,30,2.5,111.05,1.7,63.75 +5632,30,2.5,111.05,1.7,63.75 +5633,30,2.5,111.05,1.7,63.75 +5634,30,2.5,111.05,1.7,63.75 +5635,30,2.5,111.05,1.7,63.75 +5636,30,2.5,111.05,1.7,63.75 +5637,30,2.5,111.05,1.7,63.75 +5638,30,2.5,111.05,1.7,63.75 +5639,30,2.5,111.05,1.7,63.75 +5640,30,2.5,111.05,1.7,63.75 +5641,30,2.5,111.05,1.7,63.75 +5642,30,2.5,111.05,1.7,63.75 +5643,30,2.5,111.05,1.7,63.75 +5644,30,2.5,111.05,1.7,63.75 +5645,30,2.5,111.05,1.7,63.75 +5646,30,2.5,111.05,1.7,63.75 +5647,30,2.5,111.05,1.7,63.75 +5648,30,2.5,111.05,1.7,63.75 +5649,30,2.5,111.05,1.7,63.75 +5650,30,2.5,111.05,1.7,63.75 +5651,30,2.5,111.05,1.7,63.75 +5652,30,2.5,111.05,1.7,63.75 +5653,30,2.5,111.05,1.7,63.75 +5654,30,2.5,111.05,1.7,63.75 +5655,30,2.5,111.05,1.7,63.75 +5656,30,2.5,111.05,1.7,63.75 +5657,30,2.5,111.05,1.7,63.75 +5658,30,2.5,111.05,1.7,63.75 +5659,30,2.5,111.05,1.7,63.75 +5660,30,2.5,111.05,1.7,63.75 +5661,30,2.5,111.05,1.7,63.75 +5662,30,2.5,111.05,1.7,63.75 +5663,30,2.5,111.05,1.7,63.75 +5664,30,2.5,111.05,1.7,63.75 +5665,30,2.5,111.05,1.7,63.75 +5666,30,2.5,111.05,1.7,63.75 +5667,30,2.5,111.05,1.7,63.75 +5668,30,2.5,111.05,1.7,63.75 +5669,30,2.5,111.05,1.7,63.75 +5670,30,2.5,111.05,1.7,63.75 +5671,30,2.5,111.05,1.7,63.75 +5672,30,2.5,111.05,1.7,63.75 +5673,30,2.5,111.05,1.7,63.75 +5674,30,2.5,111.05,1.7,63.75 +5675,30,2.5,111.05,1.7,63.75 +5676,30,2.5,111.05,1.7,63.75 +5677,30,2.5,111.05,1.7,63.75 +5678,30,2.5,111.05,1.7,63.75 +5679,30,2.5,111.05,1.7,63.75 +5680,30,2.5,111.05,1.7,63.75 +5681,30,2.5,111.05,1.7,63.75 +5682,30,2.5,111.05,1.7,63.75 +5683,30,2.5,111.05,1.7,63.75 +5684,30,2.5,111.05,1.7,63.75 +5685,30,2.5,111.05,1.7,63.75 +5686,30,2.5,111.05,1.7,63.75 +5687,30,2.5,111.05,1.7,63.75 +5688,30,2.5,111.05,1.7,63.75 +5689,30,2.5,111.05,1.7,63.75 +5690,30,2.5,111.05,1.7,63.75 +5691,30,2.5,111.05,1.7,63.75 +5692,30,2.5,111.05,1.7,63.75 +5693,30,2.5,111.05,1.7,63.75 +5694,30,2.5,111.05,1.7,63.75 +5695,30,2.5,111.05,1.7,63.75 +5696,30,2.5,111.05,1.7,63.75 +5697,30,2.5,111.05,1.7,63.75 +5698,30,2.5,111.05,1.7,63.75 +5699,30,2.5,111.05,1.7,63.75 +5700,30,2.5,111.05,1.7,63.75 +5701,30,2.5,111.05,1.7,63.75 +5702,30,2.5,111.05,1.7,63.75 +5703,30,2.5,111.05,1.7,63.75 +5704,30,2.5,111.05,1.7,63.75 +5705,30,2.5,111.05,1.7,63.75 +5706,30,2.5,111.05,1.7,63.75 +5707,30,2.5,111.05,1.7,63.75 +5708,30,2.5,111.05,1.7,63.75 +5709,30,2.5,111.05,1.7,63.75 +5710,30,2.5,111.05,1.7,63.75 +5711,30,2.5,111.05,1.7,63.75 +5712,30,2.5,111.05,1.7,63.75 +5713,30,2.5,111.05,1.7,63.75 +5714,30,2.5,111.05,1.7,63.75 +5715,30,2.5,111.05,1.7,63.75 +5716,30,2.5,111.05,1.7,63.75 +5717,30,2.5,111.05,1.7,63.75 +5718,30,2.5,111.05,1.7,63.75 +5719,30,2.5,111.05,1.7,63.75 +5720,30,2.5,111.05,1.7,63.75 +5721,30,2.5,111.05,1.7,63.75 +5722,30,2.5,111.05,1.7,63.75 +5723,30,2.5,111.05,1.7,63.75 +5724,30,2.5,111.05,1.7,63.75 +5725,30,2.5,111.05,1.7,63.75 +5726,30,2.5,111.05,1.7,63.75 +5727,30,2.5,111.05,1.7,63.75 +5728,30,2.5,111.05,1.7,63.75 +5729,30,2.5,111.05,1.7,63.75 +5730,30,2.5,111.05,1.7,63.75 +5731,30,2.5,111.05,1.7,63.75 +5732,30,2.5,111.05,1.7,63.75 +5733,30,2.5,111.05,1.7,63.75 +5734,30,2.5,111.05,1.7,63.75 +5735,30,2.5,111.05,1.7,63.75 +5736,30,2.5,111.05,1.7,63.75 +5737,30,2.5,111.05,1.7,63.75 +5738,30,2.5,111.05,1.7,63.75 +5739,30,2.5,111.05,1.7,63.75 +5740,30,2.5,111.05,1.7,63.75 +5741,30,2.5,111.05,1.7,63.75 +5742,30,2.5,111.05,1.7,63.75 +5743,30,2.5,111.05,1.7,63.75 +5744,30,2.5,111.05,1.7,63.75 +5745,30,2.5,111.05,1.7,63.75 +5746,30,2.5,111.05,1.7,63.75 +5747,30,2.5,111.05,1.7,63.75 +5748,30,2.5,111.05,1.7,63.75 +5749,30,2.5,111.05,1.7,63.75 +5750,30,2.5,111.05,1.7,63.75 +5751,30,2.5,111.05,1.7,63.75 +5752,30,2.5,111.05,1.7,63.75 +5753,30,2.5,111.05,1.7,63.75 +5754,30,2.5,111.05,1.7,63.75 +5755,30,2.5,111.05,1.7,63.75 +5756,30,2.5,111.05,1.7,63.75 +5757,30,2.5,111.05,1.7,63.75 +5758,30,2.5,111.05,1.7,63.75 +5759,30,2.5,111.05,1.7,63.75 +5760,30,2.5,111.05,1.7,63.75 +5761,30,2.5,111.05,1.7,63.75 +5762,30,2.5,111.05,1.7,63.75 +5763,30,2.5,111.05,1.7,63.75 +5764,30,2.5,111.05,1.7,63.75 +5765,30,2.5,111.05,1.7,63.75 +5766,30,2.5,111.05,1.7,63.75 +5767,30,2.5,111.05,1.7,63.75 +5768,30,2.5,111.05,1.7,63.75 +5769,30,2.5,111.05,1.7,63.75 +5770,30,2.5,111.05,1.7,63.75 +5771,30,2.5,111.05,1.7,63.75 +5772,30,2.5,111.05,1.7,63.75 +5773,30,2.5,111.05,1.7,63.75 +5774,30,2.5,111.05,1.7,63.75 +5775,30,2.5,111.05,1.7,63.75 +5776,30,2.5,111.05,1.7,63.75 +5777,30,2.5,111.05,1.7,63.75 +5778,30,2.5,111.05,1.7,63.75 +5779,30,2.5,111.05,1.7,63.75 +5780,30,2.5,111.05,1.7,63.75 +5781,30,2.5,111.05,1.7,63.75 +5782,30,2.5,111.05,1.7,63.75 +5783,30,2.5,111.05,1.7,63.75 +5784,30,2.5,111.05,1.7,63.75 +5785,30,2.5,111.05,1.7,63.75 +5786,30,2.5,111.05,1.7,63.75 +5787,30,2.5,111.05,1.7,63.75 +5788,30,2.5,111.05,1.7,63.75 +5789,30,2.5,111.05,1.7,63.75 +5790,30,2.5,111.05,1.7,63.75 +5791,30,2.5,111.05,1.7,63.75 +5792,30,2.5,111.05,1.7,63.75 +5793,30,2.5,111.05,1.7,63.75 +5794,30,2.5,111.05,1.7,63.75 +5795,30,2.5,111.05,1.7,63.75 +5796,30,2.5,111.05,1.7,63.75 +5797,30,2.5,111.05,1.7,63.75 +5798,30,2.5,111.05,1.7,63.75 +5799,30,2.5,111.05,1.7,63.75 +5800,30,2.5,111.05,1.7,63.75 +5801,30,2.5,111.05,1.7,63.75 +5802,30,2.5,111.05,1.7,63.75 +5803,30,2.5,111.05,1.7,63.75 +5804,30,2.5,111.05,1.7,63.75 +5805,30,2.5,111.05,1.7,63.75 +5806,30,2.5,111.05,1.7,63.75 +5807,30,2.5,111.05,1.7,63.75 +5808,30,2.5,111.05,1.7,63.75 +5809,30,2.5,111.05,1.7,63.75 +5810,30,2.5,111.05,1.7,63.75 +5811,30,2.5,111.05,1.7,63.75 +5812,30,2.5,111.05,1.7,63.75 +5813,30,2.5,111.05,1.7,63.75 +5814,30,2.5,111.05,1.7,63.75 +5815,30,2.5,111.05,1.7,63.75 +5816,30,2.5,111.05,1.7,63.75 +5817,30,2.5,111.05,1.7,63.75 +5818,30,2.5,111.05,1.7,63.75 +5819,30,2.5,111.05,1.7,63.75 +5820,30,2.5,111.05,1.7,63.75 +5821,30,2.5,111.05,1.7,63.75 +5822,30,2.5,111.05,1.7,63.75 +5823,30,2.5,111.05,1.7,63.75 +5824,30,2.5,111.05,1.7,63.75 +5825,30,2.5,111.05,1.7,63.75 +5826,30,2.5,111.05,1.7,63.75 +5827,30,2.5,111.05,1.7,63.75 +5828,30,2.5,111.05,1.7,63.75 +5829,30,2.5,111.05,1.7,63.75 +5830,30,2.5,111.05,1.7,63.75 +5831,30,2.5,111.05,1.7,63.75 +5832,30,2.5,111.05,1.7,63.75 +5833,30,2.5,111.05,1.7,63.75 +5834,30,2.5,111.05,1.7,63.75 +5835,30,2.5,111.05,1.7,63.75 +5836,30,2.5,111.05,1.7,63.75 +5837,30,2.5,111.05,1.7,63.75 +5838,30,2.5,111.05,1.7,63.75 +5839,30,2.5,111.05,1.7,63.75 +5840,30,2.5,111.05,1.7,63.75 +5841,30,2.5,111.05,1.7,63.75 +5842,30,2.5,111.05,1.7,63.75 +5843,30,2.5,111.05,1.7,63.75 +5844,30,2.5,111.05,1.7,63.75 +5845,30,2.5,111.05,1.7,63.75 +5846,30,2.5,111.05,1.7,63.75 +5847,30,2.5,111.05,1.7,63.75 +5848,30,2.5,111.05,1.7,63.75 +5849,30,2.5,111.05,1.7,63.75 +5850,30,2.5,111.05,1.7,63.75 +5851,30,2.5,111.05,1.7,63.75 +5852,30,2.5,111.05,1.7,63.75 +5853,30,2.5,111.05,1.7,63.75 +5854,30,2.5,111.05,1.7,63.75 +5855,30,2.5,111.05,1.7,63.75 +5856,30,2.5,111.05,1.7,63.75 +5857,30,2.5,111.05,1.7,63.75 +5858,30,2.5,111.05,1.7,63.75 +5859,30,2.5,111.05,1.7,63.75 +5860,30,2.5,111.05,1.7,63.75 +5861,30,2.5,111.05,1.7,63.75 +5862,30,2.5,111.05,1.7,63.75 +5863,30,2.5,111.05,1.7,63.75 +5864,30,2.5,111.05,1.7,63.75 +5865,30,2.5,111.05,1.7,63.75 +5866,30,2.5,111.05,1.7,63.75 +5867,30,2.5,111.05,1.7,63.75 +5868,30,2.5,111.05,1.7,63.75 +5869,30,2.5,111.05,1.7,63.75 +5870,30,2.5,111.05,1.7,63.75 +5871,30,2.5,111.05,1.7,63.75 +5872,30,2.5,111.05,1.7,63.75 +5873,30,2.5,111.05,1.7,63.75 +5874,30,2.5,111.05,1.7,63.75 +5875,30,2.5,111.05,1.7,63.75 +5876,30,2.5,111.05,1.7,63.75 +5877,30,2.5,111.05,1.7,63.75 +5878,30,2.5,111.05,1.7,63.75 +5879,30,2.5,111.05,1.7,63.75 +5880,30,2.5,111.05,1.7,63.75 +5881,30,2.5,111.05,1.7,63.75 +5882,30,2.5,111.05,1.7,63.75 +5883,30,2.5,111.05,1.7,63.75 +5884,30,2.5,111.05,1.7,63.75 +5885,30,2.5,111.05,1.7,63.75 +5886,30,2.5,111.05,1.7,63.75 +5887,30,2.5,111.05,1.7,63.75 +5888,30,2.5,111.05,1.7,63.75 +5889,30,2.5,111.05,1.7,63.75 +5890,30,2.5,111.05,1.7,63.75 +5891,30,2.5,111.05,1.7,63.75 +5892,30,2.5,111.05,1.7,63.75 +5893,30,2.5,111.05,1.7,63.75 +5894,30,2.5,111.05,1.7,63.75 +5895,30,2.5,111.05,1.7,63.75 +5896,30,2.5,111.05,1.7,63.75 +5897,30,2.5,111.05,1.7,63.75 +5898,30,2.5,111.05,1.7,63.75 +5899,30,2.5,111.05,1.7,63.75 +5900,30,2.5,111.05,1.7,63.75 +5901,30,2.5,111.05,1.7,63.75 +5902,30,2.5,111.05,1.7,63.75 +5903,30,2.5,111.05,1.7,63.75 +5904,30,2.5,111.05,1.7,63.75 +5905,30,2.5,111.05,1.7,63.75 +5906,30,2.5,111.05,1.7,63.75 +5907,30,2.5,111.05,1.7,63.75 +5908,30,2.5,111.05,1.7,63.75 +5909,30,2.5,111.05,1.7,63.75 +5910,30,2.5,111.05,1.7,63.75 +5911,30,2.5,111.05,1.7,63.75 +5912,30,2.5,111.05,1.7,63.75 +5913,30,2.5,111.05,1.7,63.75 +5914,30,2.5,111.05,1.7,63.75 +5915,30,2.5,111.05,1.7,63.75 +5916,30,2.5,111.05,1.7,63.75 +5917,30,2.5,111.05,1.7,63.75 +5918,30,2.5,111.05,1.7,63.75 +5919,30,2.5,111.05,1.7,63.75 +5920,30,2.5,111.05,1.7,63.75 +5921,30,2.5,111.05,1.7,63.75 +5922,30,2.5,111.05,1.7,63.75 +5923,30,2.5,111.05,1.7,63.75 +5924,30,2.5,111.05,1.7,63.75 +5925,30,2.5,111.05,1.7,63.75 +5926,30,2.5,111.05,1.7,63.75 +5927,30,2.5,111.05,1.7,63.75 +5928,30,2.5,111.05,1.7,63.75 +5929,30,2.5,111.05,1.7,63.75 +5930,30,2.5,111.05,1.7,63.75 +5931,30,2.5,111.05,1.7,63.75 +5932,30,2.5,111.05,1.7,63.75 +5933,30,2.5,111.05,1.7,63.75 +5934,30,2.5,111.05,1.7,63.75 +5935,30,2.5,111.05,1.7,63.75 +5936,30,2.5,111.05,1.7,63.75 +5937,30,2.5,111.05,1.7,63.75 +5938,30,2.5,111.05,1.7,63.75 +5939,30,2.5,111.05,1.7,63.75 +5940,30,2.5,111.05,1.7,63.75 +5941,30,2.5,111.05,1.7,63.75 +5942,30,2.5,111.05,1.7,63.75 +5943,30,2.5,111.05,1.7,63.75 +5944,30,2.5,111.05,1.7,63.75 +5945,30,2.5,111.05,1.7,63.75 +5946,30,2.5,111.05,1.7,63.75 +5947,30,2.5,111.05,1.7,63.75 +5948,30,2.5,111.05,1.7,63.75 +5949,30,2.5,111.05,1.7,63.75 +5950,30,2.5,111.05,1.7,63.75 +5951,30,2.5,111.05,1.7,63.75 +5952,30,2.5,111.05,1.7,63.75 +5953,30,2.5,111.05,1.7,63.75 +5954,30,2.5,111.05,1.7,63.75 +5955,30,2.5,111.05,1.7,63.75 +5956,30,2.5,111.05,1.7,63.75 +5957,30,2.5,111.05,1.7,63.75 +5958,30,2.5,111.05,1.7,63.75 +5959,30,2.5,111.05,1.7,63.75 +5960,30,2.5,111.05,1.7,63.75 +5961,30,2.5,111.05,1.7,63.75 +5962,30,2.5,111.05,1.7,63.75 +5963,30,2.5,111.05,1.7,63.75 +5964,30,2.5,111.05,1.7,63.75 +5965,30,2.5,111.05,1.7,63.75 +5966,30,2.5,111.05,1.7,63.75 +5967,30,2.5,111.05,1.7,63.75 +5968,30,2.5,111.05,1.7,63.75 +5969,30,2.5,111.05,1.7,63.75 +5970,30,2.5,111.05,1.7,63.75 +5971,30,2.5,111.05,1.7,63.75 +5972,30,2.5,111.05,1.7,63.75 +5973,30,2.5,111.05,1.7,63.75 +5974,30,2.5,111.05,1.7,63.75 +5975,30,2.5,111.05,1.7,63.75 +5976,30,2.5,111.05,1.7,63.75 +5977,30,2.5,111.05,1.7,63.75 +5978,30,2.5,111.05,1.7,63.75 +5979,30,2.5,111.05,1.7,63.75 +5980,30,2.5,111.05,1.7,63.75 +5981,30,2.5,111.05,1.7,63.75 +5982,30,2.5,111.05,1.7,63.75 +5983,30,2.5,111.05,1.7,63.75 +5984,30,2.5,111.05,1.7,63.75 +5985,30,2.5,111.05,1.7,63.75 +5986,30,2.5,111.05,1.7,63.75 +5987,30,2.5,111.05,1.7,63.75 +5988,30,2.5,111.05,1.7,63.75 +5989,30,2.5,111.05,1.7,63.75 +5990,30,2.5,111.05,1.7,63.75 +5991,30,2.5,111.05,1.7,63.75 +5992,30,2.5,111.05,1.7,63.75 +5993,30,2.5,111.05,1.7,63.75 +5994,30,2.5,111.05,1.7,63.75 +5995,30,2.5,111.05,1.7,63.75 +5996,30,2.5,111.05,1.7,63.75 +5997,30,2.5,111.05,1.7,63.75 +5998,30,2.5,111.05,1.7,63.75 +5999,30,2.5,111.05,1.7,63.75 +6000,30,2.5,111.05,1.7,63.75 diff --git a/EC-GN-JA-PCF/.svn/pristine/a5/a5cfe2b070cb3723929ae807df3990f4c43f0018.svn-base b/EC-GN-JA-PCF/.svn/pristine/a5/a5cfe2b070cb3723929ae807df3990f4c43f0018.svn-base new file mode 100644 index 0000000..e764f01 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/a5/a5cfe2b070cb3723929ae807df3990f4c43f0018.svn-base @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JABitReverseGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JABitReverseGAM$(LIBEXT) \ + $(BUILD_DIR)/JABitReverseGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/.svn/pristine/a5/a5ebf1a1b4b35a849f57294b275cdd97720d5eb4.svn-base b/EC-GN-JA-PCF/.svn/pristine/a5/a5ebf1a1b4b35a849f57294b275cdd97720d5eb4.svn-base new file mode 100644 index 0000000..7074477 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/a5/a5ebf1a1b4b35a849f57294b275cdd97720d5eb4.svn-base @@ -0,0 +1,143 @@ +/** + * @file NI6528.h + * @brief Header file for class NI6528 + * @date 07/06/2018 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class NI6528 + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef RANDOM_DATASOURCE_H_ +#define RANDOM_DATASOURCE_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +/** + * @brief NI6528 simplified data source implementation. + * + * The configuration syntax is (names and signal quantities are only given as an example): + * +NI6528 = { + * Class = NI6528 + * DeviceName = "/dev/pxi6528.0" //Mandatory + * Port = 0 //The port where to write + * Signals = { + * currentValue = {Type = uint8} + * bitmask = {Type = uint8} + * Value = {Type = uint8} + * } + * } + */ +class NI6528: public MARTe::DataSourceI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Constructor. NOOP. + */ +NI6528 (); + + /** + * @brief Destructor. NOOP. + */ + virtual ~NI6528(); + + /** + * @brief The configuration data detailed in the class description + * @return true if all the compulsory parameters are set. + */ + virtual bool Initialise(MARTe::StructuredDataI & data); + + /** + * @brief Verifies that at most one signal has been set with the correct type (i.e. any integer). + * @return true if the above conditions are met. + */ + virtual bool SetConfiguredDatabase(MARTe::StructuredDataI & data); + + /** + * @brief @see DataSourceI::Synchronise + */ + virtual bool Synchronise(); + + /** + * @brief @see DataSourceI::AllocateMemory + */ + virtual bool AllocateMemory(); + + /** + * @brief @see DataSourceI::GetSignalMemoryBuffer + */ + virtual bool GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress); + + /** + * @return "MemoryMapSynchronisedInputBroker" + */ + virtual const MARTe::char8 *GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction); + + /** + * @brief NOOP + */ + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName); + +private: + /** + * The previous value to write. + */ + MARTe::uint8 previousValue; + + /** + * The bitmask to write value. (new value) = (current value) || (bitmask) && (write value) + */ + MARTe::uint8 bitmask; + + /** + * The value to write. + */ + MARTe::uint8 value; + + /** + * The port number + */ + MARTe::uint32 port; + + /** + * The board file descriptor + */ + pxi6528_device_t boardFileDescriptor; + + /** + * The device name + */ + MARTe::StreamString deviceName; +}; + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* RANDOM_DATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF/.svn/pristine/a6/a64751839ba1d5bbffb568065acdfca7d49d612a.svn-base b/EC-GN-JA-PCF/.svn/pristine/a6/a64751839ba1d5bbffb568065acdfca7d49d612a.svn-base new file mode 100644 index 0000000..ed94286 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/a6/a64751839ba1d5bbffb568065acdfca7d49d612a.svn-base @@ -0,0 +1,23557 @@ + + + + + +52 + + + +EC-GN + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +10.136.136.101 + + +52RF01-PSH-4410 + + + + +52RF01-PCF-4210.codac.iter.org + + +52RF01-PCF-4210.codac.iter.org-R1 + + +52RF01-PCF-4210.codac.iter.org-R1 + + + + + +10.136.136.13-T1 + + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-ACQ + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-CONF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-MODE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-ACQ + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-CONF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-MODE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AISTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AOSTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-LDAICF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-LDAOCF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AISTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AOSTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-LDAICF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-LDAOCF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BLKTMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-FTEAALL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-RESET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-TAIUTC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-DMSG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-NS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-DMSG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-NS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AIPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AISMPL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AISR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AITB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AOPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AOTB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-CHAIMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-CHAOMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AIPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AISMPL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AISR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AITB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AOPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AOTB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-CHAIMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-CHAOMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-FILTINT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-POWERP3 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-POWERP4 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-POWERP5 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIINPROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIOUTROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIPCHANGE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIPWDG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIWDGTRIG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-WDGTOUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-FILTINT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-POWERP3 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-POWERP4 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-POWERP5 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIINPROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIOUTROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIPCHANGE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIPWDG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIWDGTRIG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-WDGTOUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BDTM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BDTMN + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BDTMS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BLKTM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-DEVNAME + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-DRIVER + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-FTEMAX + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-FTENUM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-HBDTM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-LVL_ERRS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-SERIAL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-SYNC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-SYNCLOST + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:DIO4900-YON + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-AI-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-AO-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-LOAD + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-LOADED + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DI-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DO-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN-EGU + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-MST-TRIG + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-PREP-MODE + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHORT-PULSE + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-TRIG-SOUR + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2810-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2810-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2820-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2820-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2830-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2830-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MRF2910-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MRF2910-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-BEAMON-TIME + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-ERR + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-NAME + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN-CALC + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN-DAM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-ELAPSED + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-PREHEAT-TIME + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-PREP-TIME-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-FLNK1 + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-FLNK2 + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-ID + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-PLOT + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SM + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-OUTON-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-OUTON-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-RST + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-STAT + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-TR + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-MANM + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-CURR-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-CURR-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-DCV-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-DCV-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-EREF + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-EREF-MSP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-ERROR + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-IDN + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCI + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCV + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-AMP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-FREQ + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-OFFS + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-OP-CALC + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-OP-V-DIFF + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-LOC + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-OUTON-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-REM + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-RST + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-MANM + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-ACV-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-ACV-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-RU-TIME + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-STAT + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-CURR-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-CURR-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-EREF + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-EREF-MSP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-ERROR + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-FRQ-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-FRQ-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-IDN + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACI + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-FRQ + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-AUTO-MODE-SET + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-PREP-WF + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CALC + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-MANM + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MI + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MO + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ERR + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-SWP-LIM + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-SWP-RB + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-RB + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-SWPR-SET + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-VOLT-MON + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-MANM + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MI + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MO + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ERR + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-SWP-LIM + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-SWP-RB + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-RB + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-SWPR-SET + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-VOLT-MON + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-RAMPDWN-CMP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV1 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV2 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV3 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV5 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV6 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV7 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV8 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YFLT-OC + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YFLT-OV + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YSTA-GAOP + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YTRP + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YTRP2 + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:DIO4900-YON + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-AI-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-AO-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-LOAD + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-LOADED + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DI-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DO-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN-EGU + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-MST-TRIG + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-PREP-MODE + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHORT-PULSE + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-TRIG-SOUR + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2810-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2810-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2820-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2820-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2830-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2830-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MRF2910-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MRF2910-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-BEAMON-TIME + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-ERR + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +string +configuration + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-NAME + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN-CALC + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN-DAM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-ELAPSED + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-PREHEAT-TIME + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-PREP-TIME-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-FLNK1 + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-FLNK2 + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-ID + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-PLOT + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SM + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-OUTON-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-OUTON-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-RST + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-STAT + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-TR + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-MANM + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-CURR-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-CURR-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-DCV-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-DCV-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-EREF + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-EREF-MSP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-ERROR + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-IDN + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCI + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCV + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-AMP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-FREQ + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-OFFS + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-OP-CALC + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-OP-V-DIFF + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-LOC + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-OUTON-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-REM + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-RST + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-MANM + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-ACV-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-ACV-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-RU-TIME + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-STAT + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-CURR-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-CURR-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-EREF + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-EREF-MSP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-ERROR + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-FRQ-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-FRQ-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-IDN + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACI + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-FRQ + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-AUTO-MODE-SET + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-PREP-WF + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CALC + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-MANM + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MI + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MO + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ERR + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-SWP-LIM + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-SWP-RB + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-RB + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-SWPR-SET + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-VOLT-MON + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-MANM + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MI + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MO + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ERR + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-SWP-LIM + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-SWP-RB + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-RB + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-SWPR-SET + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-VOLT-MON + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV1 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV2 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV3 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV5 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV6 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV7 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV8 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-YSTA-GBOP + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-YTRP + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-YTRP2 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-CTRP + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GA1 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GA2 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GA3 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GB1 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GB2 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GB3 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PSU0000-YSTA-MOD + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-CONF-STAT + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-RECONF + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SW-TRIG + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-RST-FLT + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-LEN + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-LEN-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-MODE + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-MODE-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-PUB-DLY + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-PUB-DLY-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-STAT + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD1-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD2-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD3-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD4-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-RDY-TOUT + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-GY1PRM + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-GY2PRM + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-OPGY1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-OPGY2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-RV1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-RV2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-RV3 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YON-CCPS1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YON-CCPS2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YSTA-MPSS + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTRP + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD3 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD4 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-ST1R + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-ST2R + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-ST3R + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-CON-HV + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-CON-SW + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-CTRP + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-YFLT + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-YSTA + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-MANM + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-EREF + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-EREF-MSP + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-EREF-P + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-ET + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-ET-WF + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-IT + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-IT-WF + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-DT-HVON + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-DT-SWON + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-EREF-CONV + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-PREP-WF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-CON-HV + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-CON-SW + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-CTRP + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-YFLT + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-YSTA + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-MANM + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-EREF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-EREF-MSP + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-EREF-P + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-ET + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-ET-WF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-IT + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-IT-WF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-DT-HVON + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-DT-SWON + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-EREF-CONV + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-PREP-WF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-CON-HV + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-CON-SW + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-CTRP + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-YFLT + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-YSTA + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-MANM + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-EREF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-EREF-MSP + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-ET + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-ET-WF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-IT + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-IT-WF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-DT-HVON + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-DT-SWON + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-PREP-WF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-CON-HV + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-CON-SW + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-CTRP + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-YFLT + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-YSTA + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-MANM + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-EREF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-EREF-MSP + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-ET + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-ET-WF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-IT + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-IT-WF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-DT-HVON + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-DT-SWON + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-PREP-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-COFF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-CON-MOD + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-CON-SW + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-TYSTA + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-YFLT + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-MANM + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-EREF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-EREF-MSP + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GA + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GA-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GB + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GB-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GA + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GA-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GB + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GB-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-DT-HVON + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-EREF-CALC + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-HVON-CALC + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-PREP-WF + + + + + + + + + + +iocEC-GN-PSH0PCF +PCFCORE IOC +epicsioc +IOC + + + +52RF01-PCF-4210 + +iocEC-GN-PCF0SYSM +PCFSYSM IOC +epicsioc +IOC + + + +52RF01-PSH-4410 + +iocEC-GN-PSH0SYSM +PSHSYSM IOC +epicsioc +IOC + + + +52RF01-PSH-4410 + +iocEC-GN-PSH0CUB +PSHCUB IOC +epicsioc +IOC + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/a6/a66a87d9d4843e8580baddd3cd2472838701740e.svn-base b/EC-GN-JA-PCF/.svn/pristine/a6/a66a87d9d4843e8580baddd3cd2472838701740e.svn-base new file mode 100644 index 0000000..e968f39 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/a6/a66a87d9d4843e8580baddd3cd2472838701740e.svn-base @@ -0,0 +1,262 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARTSTATEMACHINEGAM_H_ +#define GAMS_JARTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that provides real-time state machine. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMRealTimeStateMachine = {
+ *           Class = JARTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BEAM_ON_STAT = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JARTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARTStateMachineGAM(); + + virtual ~JARTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS = 1, + RFON = 2, + HVTerminate = 3 + }; + + //The current rtState + JARealTimeState currentState; + + //A given condition + MARTe::uint32 conditionTrigger; + + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + + //Time signal + MARTe::uint32 *currentTime; + + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for short pulse mode. + MARTe::uint32 *short_pulse_mode; + // Input signal for modulation pv. + MARTe::uint32 *modulation; + + // Output signal to which the output value will be written. + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + // Added for HVPS state (20201117) + MARTe::uint32 *outputAPSHVON; + MARTe::uint32 *outputAPSSWON; + MARTe::uint32 *outputBPSHVON; + MARTe::uint32 *outputBPSSWON; + MARTe::uint32 *outputMHVPSON; + + // Output signals for NI devices + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + MARTe::uint64 apsSwonHighResolutionTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + + // terminal values + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF/.svn/pristine/a6/a66d04843ca0edcd2e4ad68cbbdba2a0c4de095d.svn-base b/EC-GN-JA-PCF/.svn/pristine/a6/a66d04843ca0edcd2e4ad68cbbdba2a0c4de095d.svn-base new file mode 100644 index 0000000..c78bf18 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/a6/a66d04843ca0edcd2e4ad68cbbdba2a0c4de095d.svn-base @@ -0,0 +1,59 @@ +TOP=../.. + +include $(TOP)/configure/CONFIG +#---------------------------------------- +# ADD MACRO DEFINITIONS AFTER THIS LINE +#======================================== + +#======================================== +# Build the IOC application + +PROD_IOC = PLC +# PLC.dbd will be created and installed +DBD += PLC.dbd + +# PLC.dbd will be made up from these files: +-include $(EPICS_ROOT)/mk/codac-common.mk + + +# Add all the support libraries needed by this IOC +-include $(EPICS_ROOT)/mk/asyn.mk +-include $(EPICS_ROOT)/mk/s7PLCAsyn.mk + +PLC_DBD += $(CODAC_DBD) +PLC_LIBS += $(CODAC_LIBS) + +# # SNCSEQ +# _SNCFLAGS += +r -c +d +# PLC_DBD += .dbd +# PLC_SRCS += .stt +# PLC_LIBS += seq pv + + +# PLC_registerRecordDeviceDriver.cpp derives from PLC.dbd +PLC_SRCS += PLC_registerRecordDeviceDriver.cpp + +# Build the main IOC entry point on workstation OSs. +PLC_SRCS_DEFAULT += PLCMain.cpp +PLC_SRCS_vxWorks += -nil- + +# Add support from base/src/vxWorks if needed +#PLC_OBJS_vxWorks += $(EPICS_BASE_BIN)/vxComLibrary + +#============================= +# Include SNL program makefile snippets + +-include ../*.snlprog + +#============================= + + +# Finally link to the EPICS Base libraries +PLC_LIBS += $(EPICS_BASE_IOC_LIBS) + +#=========================== + +include $(TOP)/configure/RULES +#---------------------------------------- +# ADD RULES AFTER THIS LINE +#---------------------------------------- diff --git a/EC-GN-JA-PCF/.svn/pristine/a7/a70329ca2d1cdc224df268b12185f139e877d639.svn-base b/EC-GN-JA-PCF/.svn/pristine/a7/a70329ca2d1cdc224df268b12185f139e877d639.svn-base new file mode 100644 index 0000000..91b4199 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/a7/a70329ca2d1cdc224df268b12185f139e877d639.svn-base @@ -0,0 +1,250 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JASDNRTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JASDNRTSTATEMACHINEGAM_H_ +#define GAMS_JASDNRTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM provides real-time state machine that communicate with SDN packet. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMSDNRealTimeStateMachine = {
+ *           Class = JASDNRTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               Command = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint16
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   //DataSource = NI6259
+ *                   DataSource = Display
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BeamON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * + */ + +class JASDNRTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JASDNRTStateMachineGAM(); + + virtual ~JASDNRTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS_HVON = 1, + WaitSDNTrigger = 2, + SwitchingHVPS_SWON = 3, + RFON = 4, + HVTerminate = 5 + }; + + //The current rtState + JARealTimeState currentState; + + ///////////////////////////////////////////////// + // Static parameter given by cfg File + ///////////////////////////////////////////////// + //A given condition + MARTe::uint32 conditionTrigger; + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + ///////////////////////////////////////////////// + // Input signals + ///////////////////////////////////////////////// + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + //Time signal (Time from TimerGAM) + MARTe::uint32 *currentTime; + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for SDN commands. + MARTe::uint16 *sdnCommand; + + ///////////////////////////////////////////////////////////// + // Output signal to which the output value will be written. + ///////////////////////////////////////////////////////////// + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //SDN trigger command arrival time. + MARTe::uint32 sdnTriggerTime; + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JASDNRTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF/.svn/pristine/a8/a8272b0c0938b20be3b9d5c2ab0a12fd429a5957.svn-base b/EC-GN-JA-PCF/.svn/pristine/a8/a8272b0c0938b20be3b9d5c2ab0a12fd429a5957.svn-base new file mode 100644 index 0000000..73f755b --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/a8/a8272b0c0938b20be3b9d5c2ab0a12fd429a5957.svn-base @@ -0,0 +1,14 @@ +#ifndef SDD_DATA_H +#define SDD_DATA_H + +#include "sdd-pon-if.h" +#include "sdd-iomodule.h" + +static SDD_PONVar pvlist []={ + + }; + +static SDD_IOModule iomlist []={ + }; + +#endif /* SDD_DATA_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/a8/a8bb09e1da20a5b6b3f248fd27dfe7c1f134db23.svn-base b/EC-GN-JA-PCF/.svn/pristine/a8/a8bb09e1da20a5b6b3f248fd27dfe7c1f134db23.svn-base new file mode 100644 index 0000000..4de6bdb --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/a8/a8bb09e1da20a5b6b3f248fd27dfe7c1f134db23.svn-base @@ -0,0 +1,707 @@ + + + + Display + + true + P0 + 52RF01-PLC-4110 + EC-GN-SYSM + 52RF + 01 + 4110 + PLC + EC + GN + SYSM + + 3236 + + + true + 1760 + true + EC-GN-SYSM + 6 + true + true + 0 + + + + + + + + 0 + + false + + + + false + -1 + -1 + + + + + + + true + Grouping Container + + true + + true + 6 + + true + + 2 + + false + false + false + + groupHeading + + + + true + false + + 0 + + + + + + + 0 + + 1243 + 50 + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + Configuration Control: + + + false + false + false + + + false + Configuration Control: + + true + 1 + true + Label + 40 + true + + 6 + 90 + + + + + false + true + + + + 0 + false + + + + 0 + 2 + Are you sure you want to do this? + 0 + true + true + + IO Label + + false + + + + 38 + false + boolButton$(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CFGWRCNTR + + + + Check Configuration + + + + Configuration OK + + 0 + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CFGWRCNTR + + 0 + + + false + false + false + + + true + 1 + true + true + true + $(pv_name) $(pv_value) + true + Boolean Button + 210 + + 250 + 90 + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + PLC Variable Communication: + + + false + false + false + + + false + PLC Variable Communication: + + true + 1 + true + Label + 40 + true + + 6 + 240 + + + + + + + /opt/codac/opi/epics-sysmon/boy/ITER-SYSM-PLC_Mimic.opi + + true + + 0 + + + + false + + + + 6 + 2 + true + + IO Label + + false + + + + 37 + + Action Button Template + 0 + + + + + false + false + false + + + + More Details + false + $(pv_name) + $(pv_value) + true + Action Button + 279 + 6cb4f02d:15e5c6fbe55:-70fa + 400 + 230 + + + + + true + + + + + + + + + + + 1 + + + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CFGBC + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CFGSTAT + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPU0-ALIVE + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPU0-MASTER + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPU0-RUN + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPU0-VALID + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPU1-ALIVE + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPU1-MASTER + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPU1-RUN + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPU1-VALID + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-FERROR + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-FLENGTH + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-FLOST + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-FVERS + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SIM-NOPLC + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TIME + + + + 300 + GeneralTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 2000 + 6 + + + Name + 250 + no + + + Value + 280 + no + + + Status + 200 + no + + + Severity + 140 + no + + + false + + 2 + + + + 4 + + 290 + + 6 + + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + PLC Command Communication: + + + false + false + false + + + false + PLC Command Communication: + + true + 1 + true + Label + 40 + true + + 6 + 640 + + + + + + + true + + + + + + + + + + + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CMDBC + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CMDSTAT + + + + 300 + GeneralTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 2000 + 6 + + + Name + 250 + no + + + Value + 280 + no + + + Status + 200 + no + + + Severity + 140 + no + + + false + + 2 + + + + 4 + + 690 + + 6 + + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + PLC Event Communication: + + + false + false + false + + + false + PLC Event Communication: + + true + 1 + true + Label + 40 + true + + 6 + 1040 + + + + + + + true + + + + + + + + + + + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-EFLOST + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-EVTBC + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-EVTSTAT + + + + 300 + GeneralTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 2000 + 6 + + + Name + 250 + no + + + Value + 280 + no + + + Status + 200 + no + + + Severity + 140 + no + + + false + + 2 + + + + 4 + + 1090 + + 6 + + + + + true + Grouping Container + + true + + true + 1243 + + false + false + false + + 6 + + true + + 48 + 2 + groupICProjectInfo + + + + true + false + + 1500 + + + + + + + 0 + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 38 + 0 + I&C Project Name: EC-GN, Version: 1 + + + false + false + false + + + false + I&C Project Name: EC-GN, Version: 1 + + true + 1 + true + Label + 3000 + true + + 40 + 0 + + + + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/aa/aa43469fcb91225938c3771e34a83e21c77074dd.svn-base b/EC-GN-JA-PCF/.svn/pristine/aa/aa43469fcb91225938c3771e34a83e21c77074dd.svn-base new file mode 100644 index 0000000..2ac80fa --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/aa/aa43469fcb91225938c3771e34a83e21c77074dd.svn-base @@ -0,0 +1,191 @@ ++LoggerService = { + Class = LoggerService + CPUs = 0x1 + StackSize = 32768 + NumberOfLogPages = 128 + +ConLogger = { + Class = ConsoleLogger + Format = "EtOoFmC" + PrintKeys = 1 + } +} ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +START = { + Class = StateMachineEvent + NextState = "RUNNING" + NextStateError = "ERROR" + +PrepareNextStateOnOurRTApp = { + Class = Message + Destination = MyDemoApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = State1 + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = MyDemoApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +RUNNING = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = RUNNING + NextStateError = ERROR + } + } + +ERROR = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = ERROR + NextStateError = ERROR + } + } +} ++MyDemoApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + +GAMTimer = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = Timer + Type = uint32 + } + Counter = { + DataSource = Timer + Type = uint32 + Frequency = 1 //in Hz. Cycle for one state execution. + } + RTThreadPerf = { + DataSource = Timings + Alias = "State1.Thread1_CycleTime" + Type = uint32 + } + } + OutputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerf = { + DataSource = DDB1 + Type = uint32 + } + } + } + +GAMEPICSCA = { + Class = IOGAM + InputSignals = { + doValue = { + DataSource = EPICSCAInput + Type = uint8 + } + } + OutputSignals = { + Value = { + DataSource = DDB1 + Type = uint8 + } + } + } + +GAMDebug = { + Class = IOGAM + InputSignals = { + Value = { + DataSource = DDB1 + Type = uint8 + } + + } + OutputSignals = { + Value = { + DataSource = NI6528 + Type = uint8 + } + } + } + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + } + +Timer = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 0 + ExecutionMode = RealTimeThread + CPUMask = 0x1 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + +NI6528 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.0" + Port = 3 + Value = { + Counter = { + Type = uint8 + } + } + } + +EPICSCAInput = { + Class = "EPICSCA::EPICSCAInput" + CPUMask = "1" + StackSize = "10000000" + Signals = { + doValue = { + PVName = "test:doValue" + } + } + } + +Display = { + Class = LoggerDataSource + } + +Timings = { + Class = TimingDataSource + } + } + +States = { + Class = ReferenceContainer + +State1 = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {GAMTimer GAMEPICSCA GAMDebug} + CPUMask = 0x1 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} + diff --git a/EC-GN-JA-PCF/.svn/pristine/aa/aad892fd0db0322af5975ea3a79ee406a924ac2e.svn-base b/EC-GN-JA-PCF/.svn/pristine/aa/aad892fd0db0322af5975ea3a79ee406a924ac2e.svn-base new file mode 100644 index 0000000..9fe5dd3 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/aa/aad892fd0db0322af5975ea3a79ee406a924ac2e.svn-base @@ -0,0 +1,349 @@ +record (bo,"EC-GN-P01-GPF:PCF4210-CTRP") +{ + field(DESC, "Fast Controller Fault") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:PCF4210-YTS-GA1") +{ + field(DESC, "GY1 HV Armed") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:PCF4210-YTS-GA2") +{ + field(DESC, "GY1 HV Injection") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:PCF4210-YTS-GA3") +{ + field(DESC, "GY1 in RFON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:PCF4210-YTS-GB1") +{ + field(DESC, "GY2 HV Armed") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:PCF4210-YTS-GB2") +{ + field(DESC, "GY2 HV Injection") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:PCF4210-YTS-GB3") +{ + field(DESC, "GY2 RFON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPF:PSU0000-YSTA-MOD") +{ + field(DESC, "MHVPS modulation en/disable from ECPC") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 8) bitread") + field(ONAM, "ENABLE") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "DISABLE") +} + +record (bo,"EC-GN-P01-GPF:STAT-DAQ-CONF-STAT") +{ + field(DESC, "DAQ config state") + field(ONAM, "Ready") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Not ready") +} + +record (bo,"EC-GN-P01-GPF:STAT-DAQ-RECONF") +{ + field(DESC, "Reset and configure DAQ") + field(HIGH, "0.1") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:STAT-DAQ-SW-TRIG") +{ + field(DESC, "software trigger for DAQ start") + field(HIGH, "0.1") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:STAT-RST-FLT") +{ + field(DESC, "Reset Fault command") + field(HIGH, "0.1") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (ao,"EC-GN-P01-GPF:STAT-DAQ-LEN") +{ + field(DESC, "DAQ sampling time length") + field(DRVH, "3600000") + field(DRVL, "0.01") + field(EGU, "ms") + field(HOPR, "3600000") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "1000.0") +} + +record (ao,"EC-GN-P01-GPF:STAT-DAQ-LEN-RB") +{ + field(DESC, "DAQ sampling time length readback") + field(DRVH, "3600000") + field(DRVL, "0.01") + field(EGU, "ms") + field(HOPR, "3600000") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "1000.0") +} + +record (mbbo,"EC-GN-P01-GPF:STAT-DAQ-MODE") +{ + field(DESC, "DAQ mode") + field(FRST, "Reference") + field(FRVL, "4") + field(ONST, "Finite") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(THST, "Continuous") + field(THVL, "3") + field(TWST, "Retriggerable") + field(TWVL, "2") + field(VAL, "3") + field(ZRST, "Software_triggered") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GPF:STAT-DAQ-MODE-RB") +{ + field(DESC, "DAQ mode readback") + field(FRST, "Reference") + field(FRVL, "4") + field(ONST, "Finite") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(THST, "Continuous") + field(THVL, "3") + field(TWST, "Retriggerable") + field(TWVL, "2") + field(VAL, "3") + field(ZRST, "Software_triggered") + field(ZRVL, "0") +} + +record (ao,"EC-GN-P01-GPF:STAT-DAQ-PUB-DLY") +{ + field(DESC, "DAN publish delay") + field(DRVH, "1000") + field(DRVL, "0.1") + field(EGU, "ms") + field(HOPR, "1000") + field(LOPR, "0.1") + field(PINI, "YES") + field(PREC, "1") + field(SCAN, "Passive") + field(VAL, "10.0") +} + +record (ao,"EC-GN-P01-GPF:STAT-DAQ-PUB-DLY-RB") +{ + field(DESC, "DAN publish delay") + field(DRVH, "1000") + field(DRVL, "0.1") + field(EGU, "ms") + field(HOPR, "1000") + field(LOPR, "0.1") + field(PINI, "YES") + field(PREC, "1") + field(SCAN, "Passive") + field(VAL, "10.0") +} + +record (longout,"EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE") +{ + field(DESC, "sampling rate") + field(DRVH, "1000000000") + field(DRVL, "1") + field(HOPR, "100000000") + field(LOPR, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1000") +} + +record (longout,"EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE-RB") +{ + field(DESC, "sampling rate readback") + field(DRVH, "1000000000") + field(DRVL, "1") + field(HOPR, "100000000") + field(LOPR, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1000") +} + +record (ao,"EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY") +{ + field(DESC, "DAQ start delay") + field(DRVH, "3600000") + field(DRVL, "0.01") + field(EGU, "ms") + field(HOPR, "3600000") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "1.0") +} + +record (ao,"EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY-RB") +{ + field(DESC, "DAQ start delay readback") + field(DRVH, "3600000") + field(DRVL, "0.01") + field(EGU, "ms") + field(HOPR, "3600000") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "1.0") +} + +record (mbbo,"EC-GN-P01-GPF:STAT-DAQ-STAT") +{ + field(DESC, "DAQ operation state") + field(FRSV, "NO_ALARM") + field(ONST, "Waiting trigger") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(THST, "Error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "Aquiring") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(VAL, "3") + field(ZRST, "Not ready") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (longin,"EC-GN-P01-GPF:STAT-MD1-LIM") +{ + field(DESC, "MD1 Pulse Len Limit") + field(HOPR, "500000000") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "10000") +} + +record (longin,"EC-GN-P01-GPF:STAT-MD2-LIM") +{ + field(DESC, "MD2 Pulse Len Limit") + field(HOPR, "500000000") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "100000") +} + +record (longin,"EC-GN-P01-GPF:STAT-MD3-LIM") +{ + field(DESC, "MD3 Pulse Len Limit") + field(HOPR, "500000000") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "30000000") +} + +record (longin,"EC-GN-P01-GPF:STAT-MD4-LIM") +{ + field(DESC, "MD4 Pulse Len Limit") + field(HOPR, "500000000") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "300000000") +} + +record (ai,"EC-GN-P01-GPF:STAT-RDY-TOUT") +{ + field(DESC, "Gyrotron operation ready timeout") + field(EGU, "s") + field(HOPR, "600") + field(LOPR, "1") + field(PINI, "YES") + field(PREC, "1") + field(SCAN, "Passive") + field(VAL, "30.0") +} + diff --git a/EC-GN-JA-PCF/.svn/pristine/ab/abab6377f3e6038fdc2a20372de412544715a018.svn-base b/EC-GN-JA-PCF/.svn/pristine/ab/abab6377f3e6038fdc2a20372de412544715a018.svn-base new file mode 100644 index 0000000..5141753 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/ab/abab6377f3e6038fdc2a20372de412544715a018.svn-base @@ -0,0 +1,20 @@ +/* +Copyright (c) : 2010-2019 ITER Organization, +CS 90 046 +13067 St. Paul-lez-Durance Cedex +France + +This product is part of ITER CODAC software. +For the terms and conditions of redistribution or use of this software +refer to the file ITER-LICENSE.TXT located in the top level directory +of the distribution package. +*/ + + +importPackage(Packages.org.csstudio.opibuilder.scriptUtil); + +var t = new Date(PVUtil.getTimeInMilliseconds(pvs[0])).toTimeString(); +var st = t.split(" "); + +widget.setPropertyValue("on_label", st[0]); +widget.setPropertyValue("off_label", st[0]); diff --git a/EC-GN-JA-PCF/.svn/pristine/ac/ac41b7cd0b9f506f1433a0174614fcb72d68ffc7.svn-base b/EC-GN-JA-PCF/.svn/pristine/ac/ac41b7cd0b9f506f1433a0174614fcb72d68ffc7.svn-base new file mode 100644 index 0000000..9088cc2 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/ac/ac41b7cd0b9f506f1433a0174614fcb72d68ffc7.svn-base @@ -0,0 +1,68 @@ +//+====================================================================== +// $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-sdd-translator-parts/tags/CODAC-CORE-6.0.0/org.iter.codac.sdd.translators/src/main/resources/templates/sdn/configure_sdn.cpp.vm $ +// $Id: configure_sdn.cpp.vm 83098 2018-01-08 13:23:38Z cesnikt $ +// +// Project : CODAC Core System +// +// Description : SDN Program - Gyrotron02DAN +// +// Author : Kirti Mahajan, Lana Abadie and TCS (link with velocity and SDD model) +// +// Copyright (c) : 2010-2018 ITER Organization, +// CS 90 046 +// 13067 St. Paul-lez-Durance Cedex +// France +// +// This file is part of ITER CODAC software. +// For the terms and conditions of redistribution or use of this software +// refer to the file ITER-LICENSE.TXT located in the top level directory +// of the distribution package. +// +//-====================================================================== + +#include + +#include +#include "includetopics.h" + +using namespace std; + +/* Create variables for the topics on which application is publishing */ +//+P===================================================================== +//-P===================================================================== + +/* Create variables for topics on which application is subscribing */ +//+S===================================================================== +//-S===================================================================== + +int configureSDN() +{ + + SR_RET sr_ret = SR_OK; + + //+P===================================================================== + //-P===================================================================== + + //+S===================================================================== + //-S===================================================================== + + return sr_ret; + +} + +int cleanupSDN() +{ + + SR_RET sr_ret = SR_OK; + + /* Unregister publisher */ + //+P===================================================================== + //-P===================================================================== + + /* Unregister subscriber */ + //+S===================================================================== + //-S===================================================================== + + return sr_ret; + +} \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/ac/ac8122b593bd4ad2bc0745276fed1416dc1e44b1.svn-base b/EC-GN-JA-PCF/.svn/pristine/ac/ac8122b593bd4ad2bc0745276fed1416dc1e44b1.svn-base new file mode 100644 index 0000000..aed4fec --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/ac/ac8122b593bd4ad2bc0745276fed1416dc1e44b1.svn-base @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/ac/acbe2a47fac2075780d10b34cdd9dc036718cdba.svn-base b/EC-GN-JA-PCF/.svn/pristine/ac/acbe2a47fac2075780d10b34cdd9dc036718cdba.svn-base new file mode 100644 index 0000000..501ad2c --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/ac/acbe2a47fac2075780d10b34cdd9dc036718cdba.svn-base @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JARTStateMachineGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JARTStateMachineGAM$(LIBEXT) \ + $(BUILD_DIR)/JARTStateMachineGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/.svn/pristine/ad/ad2d5ded68a2af05d20d38bfd9ab122c0335821b.svn-base b/EC-GN-JA-PCF/.svn/pristine/ad/ad2d5ded68a2af05d20d38bfd9ab122c0335821b.svn-base new file mode 100644 index 0000000..a526c7e --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/ad/ad2d5ded68a2af05d20d38bfd9ab122c0335821b.svn-base @@ -0,0 +1,44 @@ +TOP=../.. +include $(TOP)/configure/CONFIG +#---------------------------------------- +# ADD MACRO DEFINITIONS AFTER THIS LINE + +#---------------------------------------------------- +# Optimization of db files using dbst (DEFAULT: NO) +#DB_OPT = YES + +#---------------------------------------------------- +# Create and install (or just install) into /db +# databases, templates, substitutions like this +DB += PCF0-EC-GN-HWCF-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GAF-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GAF-CCPS-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GAF-FHPS-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GAF-GCPS-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GAF-MCPS-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GAFP-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GBF-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GBF-CCPS-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GBF-FHPS-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GBF-GCPS-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GBF-MCPS-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GBFP-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GPF-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GPS-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-PA1F-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-PA2F-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-PB1F-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-PB2F-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-PMF-iocEC-GN-PSH0PCF.db + + +# Automagically install .proto files +DB += $(notdir $(wildcard ../*.proto)) + +#---------------------------------------------------- +# If .db template is not named *.template add +# _template = + +include $(TOP)/configure/RULES +#---------------------------------------- +# ADD RULES AFTER THIS LINE diff --git a/EC-GN-JA-PCF/.svn/pristine/ad/adb829b8f40d9a90fd571b77d153a87022fa2c87.svn-base b/EC-GN-JA-PCF/.svn/pristine/ad/adb829b8f40d9a90fd571b77d153a87022fa2c87.svn-base new file mode 100644 index 0000000..0833f11 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/ad/adb829b8f40d9a90fd571b77d153a87022fa2c87.svn-base @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=RandomDataSource.x + +PACKAGE=DataSources + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/RandomDataSource$(LIBEXT) \ + $(BUILD_DIR)/RandomDataSource$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/.svn/pristine/ae/ae338b0976bb0b0fa102a36a6538ec14b98d5f0b.svn-base b/EC-GN-JA-PCF/.svn/pristine/ae/ae338b0976bb0b0fa102a36a6538ec14b98d5f0b.svn-base new file mode 100644 index 0000000..6504a77 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/ae/ae338b0976bb0b0fa102a36a6538ec14b98d5f0b.svn-base @@ -0,0 +1,29 @@ +#+====================================================================== +# $HeadURL: https://svnpub.codac.iter.org/codac/iter/codac/dev/units/m-epics-iter-templates/branches/codac-core-6.1/templates/genericApp/Makefile $ +# $Id: Makefile 96475 2019-01-09 13:47:38Z sivecm $ +# +# Project : CODAC Core System +# +# Description : Makefile +# +# Author(s) : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2019 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== +TOP = .. +include $(TOP)/configure/CONFIG +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *src*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *Src*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *db*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *Db*)) +include $(TOP)/configure/RULES_DIRS + diff --git a/EC-GN-JA-PCF/.svn/pristine/af/af34be3bf1ef151878fdf9e79fbe61df6800a0fc.svn-base b/EC-GN-JA-PCF/.svn/pristine/af/af34be3bf1ef151878fdf9e79fbe61df6800a0fc.svn-base new file mode 100644 index 0000000..1be9058 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/af/af34be3bf1ef151878fdf9e79fbe61df6800a0fc.svn-base @@ -0,0 +1,23557 @@ + + + + + +52 + + + +EC-GN + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +10.136.136.101 + + +52RF01-PSH-4410 + + + + +52RF01-PCF-4210.codac.iter.org + + +52RF01-PCF-4210.codac.iter.org-R1 + + +52RF01-PCF-4210.codac.iter.org-R1 + + + + + +10.136.136.13-T1 + + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-ACQ + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-CONF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-MODE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-ACQ + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-CONF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-MODE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AISTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AOSTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-LDAICF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-LDAOCF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AISTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AOSTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-LDAICF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-LDAOCF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BLKTMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-FTEAALL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-RESET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-TAIUTC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-DMSG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-NS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-DMSG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-NS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AIPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AISMPL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AISR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AITB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AOPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AOTB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-CHAIMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-CHAOMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AIPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AISMPL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AISR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AITB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AOPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AOTB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-CHAIMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-CHAOMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-FILTINT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-POWERP3 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-POWERP4 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-POWERP5 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIINPROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIOUTROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIPCHANGE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIPWDG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIWDGTRIG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-WDGTOUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-FILTINT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-POWERP3 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-POWERP4 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-POWERP5 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIINPROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIOUTROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIPCHANGE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIPWDG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIWDGTRIG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-WDGTOUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BDTM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BDTMN + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BDTMS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BLKTM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-DEVNAME + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-DRIVER + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-FTEMAX + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-FTENUM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-HBDTM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-LVL_ERRS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-SERIAL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-SYNC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-SYNCLOST + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:DIO4900-YON + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-AI-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-AO-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-LOAD + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-LOADED + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DI-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DO-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN-EGU + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-MST-TRIG + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-PREP-MODE + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHORT-PULSE + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-TRIG-SOUR + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2810-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2810-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2820-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2820-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2830-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2830-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MRF2910-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MRF2910-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-BEAMON-TIME + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-ERR + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-NAME + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN-CALC + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN-DAM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-ELAPSED + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-PREHEAT-TIME + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-PREP-TIME-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-FLNK1 + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-FLNK2 + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-ID + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-PLOT + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SM + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-OUTON-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-OUTON-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-RST + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-STAT + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-TR + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-MANM + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-CURR-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-CURR-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-DCV-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-DCV-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-EREF + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-EREF-MSP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-ERROR + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-IDN + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCI + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCV + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-AMP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-FREQ + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-OFFS + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-OP-CALC + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-OP-V-DIFF + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-LOC + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-OUTON-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-REM + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-RST + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-MANM + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-ACV-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-ACV-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-RU-TIME + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-STAT + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-CURR-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-CURR-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-EREF + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-EREF-MSP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-ERROR + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-FRQ-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-FRQ-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-IDN + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACI + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-FRQ + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-AUTO-MODE-SET + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-PREP-WF + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CALC + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-MANM + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MI + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MO + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ERR + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-SWP-LIM + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-SWP-RB + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-RB + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-SWPR-SET + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-VOLT-MON + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-MANM + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MI + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MO + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ERR + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-SWP-LIM + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-SWP-RB + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-RB + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-SWPR-SET + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-VOLT-MON + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-RAMPDWN-CMP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV1 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV2 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV3 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV5 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV6 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV7 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV8 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YFLT-OC + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YFLT-OV + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YSTA-GAOP + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YTRP + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YTRP2 + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:DIO4900-YON + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-AI-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-AO-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-LOAD + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-LOADED + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DI-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DO-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN-EGU + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-MST-TRIG + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-PREP-MODE + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHORT-PULSE + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-TRIG-SOUR + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2810-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2810-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2820-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2820-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2830-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2830-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MRF2910-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MRF2910-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-BEAMON-TIME + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-ERR + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +string +configuration + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-NAME + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN-CALC + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN-DAM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-ELAPSED + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-PREHEAT-TIME + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-PREP-TIME-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-FLNK1 + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-FLNK2 + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-ID + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-PLOT + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SM + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-OUTON-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-OUTON-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-RST + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-STAT + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-TR + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-MANM + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-CURR-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-CURR-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-DCV-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-DCV-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-EREF + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-EREF-MSP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-ERROR + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-IDN + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCI + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCV + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-AMP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-FREQ + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-OFFS + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-OP-CALC + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-OP-V-DIFF + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-LOC + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-OUTON-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-REM + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-RST + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-MANM + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-ACV-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-ACV-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-RU-TIME + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-STAT + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-CURR-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-CURR-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-EREF + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-EREF-MSP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-ERROR + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-FRQ-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-FRQ-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-IDN + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACI + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-FRQ + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-AUTO-MODE-SET + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-PREP-WF + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CALC + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-MANM + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MI + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MO + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ERR + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-SWP-LIM + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-SWP-RB + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-RB + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-SWPR-SET + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-VOLT-MON + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-MANM + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MI + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MO + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ERR + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-SWP-LIM + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-SWP-RB + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-RB + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-SWPR-SET + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-VOLT-MON + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV1 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV2 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV3 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV5 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV6 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV7 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV8 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-YSTA-GBOP + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-YTRP + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-YTRP2 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-CTRP + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GA1 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GA2 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GA3 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GB1 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GB2 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GB3 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PSU0000-YSTA-MOD + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-CONF-STAT + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-RECONF + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SW-TRIG + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-RST-FLT + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-LEN + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-LEN-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-MODE + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-MODE-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-PUB-DLY + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-PUB-DLY-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-STAT + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD1-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD2-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD3-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD4-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-RDY-TOUT + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-GY1PRM + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-GY2PRM + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-OPGY1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-OPGY2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-RV1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-RV2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-RV3 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YON-CCPS1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YON-CCPS2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YSTA-MPSS + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTRP + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD3 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD4 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-ST1R + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-ST2R + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-ST3R + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-CON-HV + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-CON-SW + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-CTRP + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-YFLT + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-YSTA + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-MANM + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-EREF + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-EREF-MSP + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-EREF-P + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-ET + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-ET-WF + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-IT + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-IT-WF + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-DT-HVON + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-DT-SWON + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-EREF-CONV + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-PREP-WF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-CON-HV + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-CON-SW + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-CTRP + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-YFLT + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-YSTA + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-MANM + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-EREF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-EREF-MSP + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-EREF-P + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-ET + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-ET-WF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-IT + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-IT-WF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-DT-HVON + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-DT-SWON + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-EREF-CONV + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-PREP-WF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-CON-HV + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-CON-SW + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-CTRP + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-YFLT + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-YSTA + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-MANM + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-EREF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-EREF-MSP + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-ET + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-ET-WF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-IT + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-IT-WF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-DT-HVON + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-DT-SWON + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-PREP-WF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-CON-HV + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-CON-SW + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-CTRP + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-YFLT + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-YSTA + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-MANM + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-EREF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-EREF-MSP + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-ET + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-ET-WF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-IT + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-IT-WF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-DT-HVON + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-DT-SWON + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-PREP-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-COFF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-CON-MOD + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-CON-SW + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-TYSTA + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-YFLT + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-MANM + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-EREF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-EREF-MSP + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GA + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GA-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GB + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GB-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GA + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GA-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GB + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GB-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-DT-HVON + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-EREF-CALC + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-HVON-CALC + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-PREP-WF + + + + + + + + + + +iocEC-GN-PSH0PCF +PCFCORE IOC +epicsioc +IOC + + + +52RF01-PCF-4210 + +iocEC-GN-PCF0SYSM +PCFSYSM IOC +epicsioc +IOC + + + +52RF01-PSH-4410 + +iocEC-GN-PSH0SYSM +PSHSYSM IOC +epicsioc +IOC + + + +52RF01-PSH-4410 + +iocEC-GN-PSH0CUB +PSHCUB IOC +epicsioc +IOC + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/b0/b01fe26e4854e520bbfd22f5525aef323c450779.svn-base b/EC-GN-JA-PCF/.svn/pristine/b0/b01fe26e4854e520bbfd22f5525aef323c450779.svn-base new file mode 100644 index 0000000..b4a5c3f --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/b0/b01fe26e4854e520bbfd22f5525aef323c450779.svn-base @@ -0,0 +1,14 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.DataUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ScriptUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ConsoleUtil); + +var table = widget.getTable(); +var fct_name=display.getPropertyValue("name"); +var selectionChanged = new Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener() { + selectionChanged: function(selection) { + var macroInput = DataUtil.createMacrosInput(true) + ScriptUtil.openOPI(display.getWidget("SystemDetailsTable"), "/opt/codac/opi/epics-sysmon/boy/ITER-SYSM-SYS_Mimic.opi", 1, macroInput); + } +}; +table.addSelectionChangedListener(selectionChanged); diff --git a/EC-GN-JA-PCF/.svn/pristine/b0/b0db51d656a890dcfeb61ca4e7b8d12f601ceb3b.svn-base b/EC-GN-JA-PCF/.svn/pristine/b0/b0db51d656a890dcfeb61ca4e7b8d12f601ceb3b.svn-base new file mode 100644 index 0000000..09162c9 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/b0/b0db51d656a890dcfeb61ca4e7b8d12f601ceb3b.svn-base @@ -0,0 +1,58 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAEPICSCAOutput.x JAEPICSCAInput.x + +PACKAGE=DataSources + +ROOT_DIR=../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(EPICS_BASE)/include/ +INCLUDES += -I$(EPICS_BASE)/include/os/Linux/ +INCLUDES += -I$(EPICS_BASE)/include/compiler/gcc/ +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L5GAMs + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAEPICSCA$(LIBEXT) \ + $(BUILD_DIR)/JAEPICSCA$(DLLEXT) + echo $(OBJS) + +include depends.$(TARGET) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/.svn/pristine/b0/b0edf9bc3e4788141fc4e258e6f16fbddfc00f41.svn-base b/EC-GN-JA-PCF/.svn/pristine/b0/b0edf9bc3e4788141fc4e258e6f16fbddfc00f41.svn-base new file mode 100644 index 0000000..c0544f2 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/b0/b0edf9bc3e4788141fc4e258e6f16fbddfc00f41.svn-base @@ -0,0 +1 @@ +Last SDD Generation: Tue May 13 15:43:02 UTC 2025 diff --git a/EC-GN-JA-PCF/.svn/pristine/b0/b0f5a3439016bf6392a5685fb6fcdca50ba48b1d.svn-base b/EC-GN-JA-PCF/.svn/pristine/b0/b0f5a3439016bf6392a5685fb6fcdca50ba48b1d.svn-base new file mode 100644 index 0000000..d164e89 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/b0/b0f5a3439016bf6392a5685fb6fcdca50ba48b1d.svn-base @@ -0,0 +1,361 @@ +/** + * @file JASDNRTStateMachineGAM.cpp + * @brief Source file for class JASDNRTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JASDNRTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JASDNRTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JASDNRTStateMachineGAM::JASDNRTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + sdnTriggerTime = 0; + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + sdnCommand = NULL_PTR(MARTe::uint16 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; +} + +JASDNRTStateMachineGAM::~JASDNRTStateMachineGAM() { +} + +bool JASDNRTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JASDNRTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JASDNRTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 11u); + if (ok) { + ok = (numberOfOutputSignals == 8u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit || inputType == UnsignedInteger16Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint16", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + sdnCommand = reinterpret_cast(GetInputSignalMemory(10)); + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + *shotCounter = 0; + } + return ok; +} + +bool JASDNRTStateMachineGAM::Execute() { + using namespace MARTe; + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence in SDN mode."); + plcOnTime = *currentTime; //Save pulse start time. + *outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS_HVON; + } + } + else if (currentState == SwitchingHVPS_HVON) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal -= aps_swon; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal."); + } + + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 0; + currentState = WaitSDNTrigger; + } + + } + else if (currentState == WaitSDNTrigger) { + + // Action in this state + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + + // State change conditions + if (*sdnCommand == 1){ + sdnTriggerTime = *currentTime; + currentState = SwitchingHVPS_SWON; + } + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + } + else if (currentState == SwitchingHVPS_SWON) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + + if (*currentTime >= (sdnTriggerTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + } + if (*currentTime >= (sdnTriggerTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (sdnTriggerTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; + apsSwonTime = *currentTime; + REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 0; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *shotCounter += 1; + REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //SDN command processing. + if (*sdnCommand == 4 && aps_swon_is_on) { + *outputSignal -= aps_swon; + aps_swon_is_on = false; + REPORT_ERROR(ErrorManagement::Debug, "sdn command was 4"); + } + if (*sdnCommand == 3 && !aps_swon_is_on) { + *outputSignal += aps_swon; + aps_swon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "sdn command was 3"); + } + + //Action in this state. + if ((*sdnCommand == 2) || (*modePulseLengthLimit == 1u) || (*currentTime >= (sdnTriggerTime + *triggerDelay_aps_swon + *triggerDelay_shotlen))) { + REPORT_ERROR(ErrorManagement::Debug, "shotlen: %d", *triggerDelay_shotlen); + if (*sdnCommand == 2) { + REPORT_ERROR(ErrorManagement::Information, "sdn command was 2"); + } else if (*currentTime >= (sdnTriggerTime + *triggerDelay_aps_swon + *triggerDelay_shotlen)){ + REPORT_ERROR(ErrorManagement::Information, "pulse length reached setpoint."); + } + //Do action + *outputSignal -= aps_swon; //Turn off only aps_swon + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 0; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + REPORT_ERROR(ErrorManagement::Information, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + + //Action in this state. + *outputBeamON = 1; + *outputHVArmed = 1; + *outputHVInjection = 1; + *outputRFON = 1; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + REPORT_ERROR(ErrorManagement::Debug, "state was changed to WaitTrigger"); + } + } + + return true; +} + +CLASS_REGISTER(JASDNRTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF/.svn/pristine/b1/b13b2154693fc8ac91a2e29a0c8f12c80d68ffcb.svn-base b/EC-GN-JA-PCF/.svn/pristine/b1/b13b2154693fc8ac91a2e29a0c8f12c80d68ffcb.svn-base new file mode 100644 index 0000000..1fa4757 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/b1/b13b2154693fc8ac91a2e29a0c8f12c80d68ffcb.svn-base @@ -0,0 +1,103 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,60,45,10,10,10,10 +10,55,40,7,9,9,9 +20,50,35,4,8,8,8 +30,45,30,1,7,7,7 +40,40,25,-2,6,6,6 +50,35,20,-5,5,5,5 +60,30,15,-8,4,4,4 +70,25,10,-11,3,3,3 +80,20,5,-14,2,2,2 +90,15,0,-17,1,1,1 +100,10,-5,-20,0,0,0 +110,5,0,-23,1,1,1 +120,0,5,-20,2,2,2 +130,-5,10,-17,3,3,3 +140,0,15,-14,4,4,4 +150,5,20,-11,5,5,5 +160,10,25,-8,6,6,6 +170,15,30,-5,7,7,7 +180,20,35,-2,8,8,8 +190,25,40,1,9,9,9 +200,30,45,4,10,10,10 +210,35,40,7,9,9,9 +220,40,35,10,8,8,8 +230,45,30,13,7,7,7 +240,50,25,10,6,6,6 +250,55,20,7,5,5,5 +260,60,15,4,4,4,4 +270,55,10,1,3,3,3 +280,50,5,-2,2,2,2 +290,45,0,-5,1,1,1 +300,40,-5,-8,0,0,0 +310,35,0,-11,1,1,1 +320,30,5,-14,2,2,2 +330,25,10,-17,3,3,3 +340,20,15,-20,4,4,4 +350,15,20,-23,5,5,5 +360,10,25,-20,6,6,6 +370,5,30,-17,7,7,7 +380,0,35,-14,8,8,8 +390,-5,40,-11,9,9,9 +400,0,45,-8,10,10,10 +410,5,40,-5,9,9,9 +420,10,35,-2,8,8,8 +430,15,30,1,7,7,7 +440,20,25,4,6,6,6 +450,25,20,7,5,5,5 +460,30,15,10,4,4,4 +470,35,10,13,3,3,3 +480,40,5,10,2,2,2 +490,45,0,7,1,1,1 +500,50,-5,4,0,0,0 +510,55,0,1,1,1,1 +520,60,5,-2,2,2,2 +530,55,10,-5,3,3,3 +540,50,15,-8,4,4,4 +550,45,20,-11,5,5,5 +560,40,25,-14,6,6,6 +570,35,30,-17,7,7,7 +580,30,35,-20,8,8,8 +590,25,40,-23,9,9,9 +600,20,45,-20,10,10,10 +610,15,40,-17,9,9,9 +620,10,35,-14,8,8,8 +630,5,30,-11,7,7,7 +640,0,25,-8,6,6,6 +650,-5,20,-5,5,5,5 +660,0,15,-2,4,4,4 +670,5,10,1,3,3,3 +680,10,5,4,2,2,2 +690,15,0,7,1,1,1 +700,20,-5,10,0,0,0 +710,25,0,13,1,1,1 +720,30,5,10,2,2,2 +730,35,10,7,3,3,3 +740,40,15,4,4,4,4 +750,45,20,1,5,5,5 +760,50,25,-2,6,6,6 +770,55,30,-5,7,7,7 +780,60,35,-8,8,8,8 +790,55,40,-11,9,9,9 +800,50,45,-14,10,10,10 +810,45,40,-17,9,9,9 +820,40,35,-20,8,8,8 +830,35,30,-23,7,7,7 +840,30,25,-20,6,6,6 +850,25,20,-17,5,5,5 +860,20,15,-14,4,4,4 +870,15,10,-11,3,3,3 +880,10,5,-8,2,2,2 +890,5,0,-5,1,1,1 +900,0,-5,-2,0,0,0 +910,-5,0,1,1,1,1 +920,0,5,4,2,2,2 +930,5,10,7,3,3,3 +940,10,15,10,4,4,4 +950,15,20,13,5,5,5 +960,20,25,10,6,6,6 +970,25,30,7,7,7,7 +980,30,35,4,8,8,8 +990,35,40,1,9,9,9 +1000,40,45,-2,10,10,10 diff --git a/EC-GN-JA-PCF/.svn/pristine/b2/b25738fa03468d13c4af01226df634946f6090b8.svn-base b/EC-GN-JA-PCF/.svn/pristine/b2/b25738fa03468d13c4af01226df634946f6090b8.svn-base new file mode 100644 index 0000000..2340b6e --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/b2/b25738fa03468d13c4af01226df634946f6090b8.svn-base @@ -0,0 +1,2 @@ + +#- End-of-file marker - do not delete or add lines below! \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/b5/b56093c38b973391a51b4fa9e0f9d86169e59b3b.svn-base b/EC-GN-JA-PCF/.svn/pristine/b5/b56093c38b973391a51b4fa9e0f9d86169e59b3b.svn-base new file mode 100644 index 0000000..0645fab --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/b5/b56093c38b973391a51b4fa9e0f9d86169e59b3b.svn-base @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/b5/b562fc468f0123c32d2db9a815f8d2ef9077ec0c.svn-base b/EC-GN-JA-PCF/.svn/pristine/b5/b562fc468f0123c32d2db9a815f8d2ef9077ec0c.svn-base new file mode 100644 index 0000000..495d6ae --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/b5/b562fc468f0123c32d2db9a815f8d2ef9077ec0c.svn-base @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JATriangleWaveGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JATriangleWaveGAM$(LIBEXT) \ + $(BUILD_DIR)/JATriangleWaveGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/.svn/pristine/b7/b783d699d0ada739184e69969f7ebd3fdd3ad805.svn-base b/EC-GN-JA-PCF/.svn/pristine/b7/b783d699d0ada739184e69969f7ebd3fdd3ad805.svn-base new file mode 100644 index 0000000..2654a66 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/b7/b783d699d0ada739184e69969f7ebd3fdd3ad805.svn-base @@ -0,0 +1,52 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAModeControlGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAModeControlGAM$(LIBEXT) \ + $(BUILD_DIR)/JAModeControlGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/.svn/pristine/b7/b7aeec8df74ca0850e77f0a341d6983baa91bd59.svn-base b/EC-GN-JA-PCF/.svn/pristine/b7/b7aeec8df74ca0850e77f0a341d6983baa91bd59.svn-base new file mode 100644 index 0000000..ec4fc1c --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/b7/b7aeec8df74ca0850e77f0a341d6983baa91bd59.svn-base @@ -0,0 +1,273 @@ +record (bo,"EC-GN-P01-GBF-GCPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY2 GCPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-GCPS:STAT-SIMM") +{ + field(DESC, "GY2 GCPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (mbbi,"EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB") +{ + field(DESC, "GY2 GCPS read act") + field(DTYP, "stream") + field(FRST, "ZERO") + field(FRSV, "NO_ALARM") + field(FRVL, "4") + field(INP, "@JASTEC-SCMPS.proto readActivity GC2") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") + field(THST, "FLAT TOP") + field(THSV, "NO_ALARM") + field(THVL, "3") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP") +{ + field(DESC, "GY2 GCPS set ACT") + field(DTYP, "stream") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(OUT, "@JASTEC-SCMPS.proto setActivity GC2") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MI") +{ + field(DESC, "GY2 GCPS ACT set to Marte") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MO") +{ + field(DESC, "GY2 GCPS ACT Marte outputs") + field(FLNK, "EC-GN-P01-GBF-GCPS:STAT-ACT-SP-CALC") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (ai,"EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON") +{ + field(DESC, "GY2 GCPS monitored current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "125") + field(INP, "@JASTEC-SCMPS.proto readMeasCurrent GC2") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") +} + +record (waveform,"EC-GN-P01-GBF-GCPS:PSU2130-ERR") +{ + field(DESC, "GY2 GCPS read error") + field(DTYP, "stream") + field(INP, "@JASTEC-SCMPS.proto readErrStat GC2") + field(NELM, "15") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-GCPS:PSU2130-SWP-LIM") +{ + field(DESC, "GY2 GCPS read sweep limit") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readSweepLim GC2") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-GCPS:PSU2130-SWP-RB") +{ + field(DESC, "GY2 GCPS read targ sweep rate") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readTargSweep GC2") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-RB") +{ + field(DESC, "GY2 GCPS read target current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "120") + field(INP, "@JASTEC-SCMPS.proto readTargCurrent GC2") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET") +{ + field(DESC, "GY2 GCPS set target current") + field(DRVH, "120") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP") + field(HOPR, "125") + field(LOPR, "0") + field(OUT, "@JASTEC-SCMPS.proto setCurrent GC2") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MI") +{ + field(DESC, "GY2 GCPS target current input to Marte") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MO") +{ + field(DESC, "GY2 GCPS target current Marte outputs") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GBF-GCPS:STAT-TRG-CURR-SET-CALC") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-GCPS:PSU2130-TRG-SWPR-SET") +{ + field(DESC, "GY2 GCPS set target swwp rate") + field(DRVH, "5.0") + field(DRVL, "0.01") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(LOPR, "0.01") + field(OUT, "@JASTEC-SCMPS.proto setSweep GC2") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") + field(VAL, "1") +} + +record (ai,"EC-GN-P01-GBF-GCPS:PSU2130-VOLT-MON") +{ + field(DESC, "GY2 GCPS monitored voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "10") + field(INP, "@JASTEC-SCMPS.proto readMeasVoltage GC2") + field(LOPR, "-10") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") +} + +record (calcout,"EC-GN-P01-GBF-GCPS:STAT-ACT-SP-CALC") +{ + field(CALC, "A") + field(DESC, "GCPS#2 state set by Marte") + field(INPA, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-GBF-GCPS:STAT-PREP-WF") +{ + field(DESC, "GY2 GCPS prepro schedule") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-GBF-GCPS:STAT-TRG-CURR-SET-CALC") +{ + field(CALC, "A") + field(DESC, "GCPS#2 current set by Mate") + field(INPA, "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET PP") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/.svn/pristine/b8/b861dac560043f1c137671a33f763d8fc20ef310.svn-base b/EC-GN-JA-PCF/.svn/pristine/b8/b861dac560043f1c137671a33f763d8fc20ef310.svn-base new file mode 100644 index 0000000..d05acb7 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/b8/b861dac560043f1c137671a33f763d8fc20ef310.svn-base @@ -0,0 +1,103 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,10,10,10,10,10,10 +10,9,9,9,9,9,9 +20,8,8,8,8,8,8 +30,7,7,7,7,7,7 +40,6,6,6,6,6,6 +50,5,5,5,5,5,5 +60,4,4,4,4,4,4 +70,3,3,3,3,3,3 +80,2,2,2,2,2,2 +90,1,1,1,1,1,1 +100,0,0,0,0,0,0 +110,1,1,1,1,1,1 +120,2,2,2,2,2,2 +130,3,3,3,3,3,3 +140,4,4,4,4,4,4 +150,5,5,5,5,5,5 +160,6,6,6,6,6,6 +170,7,7,7,7,7,7 +180,8,8,8,8,8,8 +190,9,9,9,9,9,9 +200,10,10,10,10,10,10 +210,9,9,9,9,9,9 +220,8,8,8,8,8,8 +230,7,7,7,7,7,7 +240,6,6,6,6,6,6 +250,5,5,5,5,5,5 +260,4,4,4,4,4,4 +270,3,3,3,3,3,3 +280,2,2,2,2,2,2 +290,1,1,1,1,1,1 +300,0,0,0,0,0,0 +310,1,1,1,1,1,1 +320,2,2,2,2,2,2 +330,3,3,3,3,3,3 +340,4,4,4,4,4,4 +350,5,5,5,5,5,5 +360,6,6,6,6,6,6 +370,7,7,7,7,7,7 +380,8,8,8,8,8,8 +390,9,9,9,9,9,9 +400,10,10,10,10,10,10 +410,9,9,9,9,9,9 +420,8,8,8,8,8,8 +430,7,7,7,7,7,7 +440,6,6,6,6,6,6 +450,5,5,5,5,5,5 +460,4,4,4,4,4,4 +470,3,3,3,3,3,3 +480,2,2,2,2,2,2 +490,1,1,1,1,1,1 +500,0,0,0,0,0,0 +510,1,1,1,1,1,1 +520,2,2,2,2,2,2 +530,3,3,3,3,3,3 +540,4,4,4,4,4,4 +550,5,5,5,5,5,5 +560,6,6,6,6,6,6 +570,7,7,7,7,7,7 +580,8,8,8,8,8,8 +590,9,9,9,9,9,9 +600,10,10,10,10,10,10 +610,9,9,9,9,9,9 +620,8,8,8,8,8,8 +630,7,7,7,7,7,7 +640,6,6,6,6,6,6 +650,5,5,5,5,5,5 +660,4,4,4,4,4,4 +670,3,3,3,3,3,3 +680,2,2,2,2,2,2 +690,1,1,1,1,1,1 +700,0,0,0,0,0,0 +710,1,1,1,1,1,1 +720,2,2,2,2,2,2 +730,3,3,3,3,3,3 +740,4,4,4,4,4,4 +750,5,5,5,5,5,5 +760,6,6,6,6,6,6 +770,7,7,7,7,7,7 +780,8,8,8,8,8,8 +790,9,9,9,9,9,9 +800,10,10,10,10,10,10 +810,9,9,9,9,9,9 +820,8,8,8,8,8,8 +830,7,7,7,7,7,7 +840,6,6,6,6,6,6 +850,5,5,5,5,5,5 +860,4,4,4,4,4,4 +870,3,3,3,3,3,3 +880,2,2,2,2,2,2 +890,1,1,1,1,1,1 +900,0,0,0,0,0,0 +910,1,1,1,1,1,1 +920,2,2,2,2,2,2 +930,3,3,3,3,3,3 +940,4,4,4,4,4,4 +950,5,5,5,5,5,5 +960,6,6,6,6,6,6 +970,7,7,7,7,7,7 +980,8,8,8,8,8,8 +990,9,9,9,9,9,9 +1000,10,10,10,10,10,10 diff --git a/EC-GN-JA-PCF/.svn/pristine/b8/b89bc977d64f5802c6f619d46638867975102f98.svn-base b/EC-GN-JA-PCF/.svn/pristine/b8/b89bc977d64f5802c6f619d46638867975102f98.svn-base new file mode 100644 index 0000000..234a3d6 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/b8/b89bc977d64f5802c6f619d46638867975102f98.svn-base @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JARTStateMachineGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JARTStateMachineGAM$(LIBEXT) \ + $(BUILD_DIR)/JARTStateMachineGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/.svn/pristine/ba/ba7f381da19b7a751c3d85acc850f6db8f931b0f.svn-base b/EC-GN-JA-PCF/.svn/pristine/ba/ba7f381da19b7a751c3d85acc850f6db8f931b0f.svn-base new file mode 100644 index 0000000..61a2101 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/ba/ba7f381da19b7a751c3d85acc850f6db8f931b0f.svn-base @@ -0,0 +1,28 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +export TARGET=x86-linux + +include Makefile.gcc diff --git a/EC-GN-JA-PCF/.svn/pristine/bc/bceb9cabc263569cc5f7c8a167793e4e3a170203.svn-base b/EC-GN-JA-PCF/.svn/pristine/bc/bceb9cabc263569cc5f7c8a167793e4e3a170203.svn-base new file mode 100644 index 0000000..6d3bf93 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/bc/bceb9cabc263569cc5f7c8a167793e4e3a170203.svn-base @@ -0,0 +1,23557 @@ + + + + + +52 + + + +EC-GN + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +10.136.136.101 + + +52RF01-PSH-4410 + + + + +52RF01-PCF-4210.codac.iter.org + + +52RF01-PCF-4210.codac.iter.org-R1 + + +52RF01-PCF-4210.codac.iter.org-R1 + + + + + +10.136.136.13-T1 + + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-ACQ + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-CONF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-MODE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-ACQ + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-CONF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-MODE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AISTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AOSTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-LDAICF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-LDAOCF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AISTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AOSTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-LDAICF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-LDAOCF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BLKTMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-FTEAALL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-RESET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-TAIUTC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-DMSG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-NS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-DMSG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-NS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AIPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AISMPL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AISR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AITB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AOPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AOTB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-CHAIMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-CHAOMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AIPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AISMPL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AISR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AITB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AOPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AOTB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-CHAIMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-CHAOMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-FILTINT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-POWERP3 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-POWERP4 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-POWERP5 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIINPROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIOUTROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIPCHANGE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIPWDG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIWDGTRIG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-WDGTOUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-FILTINT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-POWERP3 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-POWERP4 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-POWERP5 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIINPROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIOUTROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIPCHANGE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIPWDG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIWDGTRIG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-WDGTOUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BDTM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BDTMN + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BDTMS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BLKTM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-DEVNAME + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-DRIVER + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-FTEMAX + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-FTENUM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-HBDTM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-LVL_ERRS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-SERIAL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-SYNC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-SYNCLOST + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:DIO4900-YON + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-AI-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-AO-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-LOAD + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-LOADED + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DI-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DO-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN-EGU + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-MST-TRIG + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-PREP-MODE + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHORT-PULSE + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-TRIG-SOUR + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2810-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2810-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2820-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2820-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2830-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2830-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MRF2910-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MRF2910-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-BEAMON-TIME + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-ERR + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-NAME + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN-CALC + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN-DAM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-ELAPSED + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-PREHEAT-TIME + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-PREP-TIME-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-FLNK1 + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-FLNK2 + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-ID + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-PLOT + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SM + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-OUTON-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-OUTON-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-RST + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-STAT + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-TR + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-MANM + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-CURR-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-CURR-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-DCV-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-DCV-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-EREF + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-EREF-MSP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-ERROR + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-IDN + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCI + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCV + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-AMP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-FREQ + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-OFFS + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-OP-CALC + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-OP-V-DIFF + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-LOC + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-OUTON-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-REM + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-RST + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-MANM + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-ACV-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-ACV-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-RU-TIME + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-STAT + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-CURR-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-CURR-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-EREF + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-EREF-MSP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-ERROR + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-FRQ-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-FRQ-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-IDN + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACI + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-FRQ + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-AUTO-MODE-SET + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-PREP-WF + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CALC + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-MANM + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MI + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MO + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ERR + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-SWP-LIM + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-SWP-RB + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-RB + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-SWPR-SET + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-VOLT-MON + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-MANM + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MI + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MO + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ERR + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-SWP-LIM + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-SWP-RB + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-RB + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-SWPR-SET + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-VOLT-MON + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-RAMPDWN-CMP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV1 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV2 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV3 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV5 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV6 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV7 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV8 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YFLT-OC + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YFLT-OV + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YSTA-GAOP + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YTRP + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YTRP2 + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:DIO4900-YON + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-AI-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-AO-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-LOAD + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-LOADED + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DI-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DO-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN-EGU + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-MST-TRIG + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-PREP-MODE + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHORT-PULSE + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-TRIG-SOUR + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2810-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2810-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2820-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2820-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2830-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2830-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MRF2910-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MRF2910-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-BEAMON-TIME + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-ERR + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +string +configuration + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-NAME + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN-CALC + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN-DAM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-ELAPSED + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-PREHEAT-TIME + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-PREP-TIME-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-FLNK1 + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-FLNK2 + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-ID + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-PLOT + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SM + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-OUTON-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-OUTON-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-RST + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-STAT + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-TR + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-MANM + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-CURR-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-CURR-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-DCV-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-DCV-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-EREF + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-EREF-MSP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-ERROR + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-IDN + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCI + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCV + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-AMP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-FREQ + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-OFFS + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-OP-CALC + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-OP-V-DIFF + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-LOC + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-OUTON-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-REM + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-RST + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-MANM + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-ACV-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-ACV-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-RU-TIME + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-STAT + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-CURR-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-CURR-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-EREF + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-EREF-MSP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-ERROR + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-FRQ-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-FRQ-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-IDN + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACI + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-FRQ + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-AUTO-MODE-SET + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-PREP-WF + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CALC + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-MANM + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MI + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MO + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ERR + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-SWP-LIM + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-SWP-RB + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-RB + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-SWPR-SET + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-VOLT-MON + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-MANM + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MI + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MO + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ERR + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-SWP-LIM + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-SWP-RB + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-RB + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-SWPR-SET + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-VOLT-MON + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV1 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV2 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV3 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV5 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV6 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV7 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV8 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-YSTA-GBOP + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-YTRP + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-YTRP2 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-CTRP + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GA1 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GA2 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GA3 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GB1 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GB2 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GB3 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PSU0000-YSTA-MOD + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-CONF-STAT + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-RECONF + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SW-TRIG + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-RST-FLT + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-LEN + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-LEN-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-MODE + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-MODE-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-PUB-DLY + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-PUB-DLY-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-STAT + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD1-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD2-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD3-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD4-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-RDY-TOUT + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-GY1PRM + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-GY2PRM + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-OPGY1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-OPGY2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-RV1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-RV2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-RV3 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YON-CCPS1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YON-CCPS2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YSTA-MPSS + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTRP + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD3 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD4 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-ST1R + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-ST2R + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-ST3R + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-CON-HV + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-CON-SW + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-CTRP + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-YFLT + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-YSTA + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-MANM + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-EREF + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-EREF-MSP + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-EREF-P + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-ET + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-ET-WF + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-IT + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-IT-WF + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-DT-HVON + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-DT-SWON + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-EREF-CONV + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-PREP-WF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-CON-HV + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-CON-SW + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-CTRP + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-YFLT + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-YSTA + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-MANM + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-EREF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-EREF-MSP + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-EREF-P + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-ET + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-ET-WF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-IT + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-IT-WF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-DT-HVON + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-DT-SWON + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-EREF-CONV + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-PREP-WF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-CON-HV + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-CON-SW + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-CTRP + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-YFLT + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-YSTA + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-MANM + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-EREF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-EREF-MSP + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-ET + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-ET-WF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-IT + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-IT-WF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-DT-HVON + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-DT-SWON + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-PREP-WF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-CON-HV + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-CON-SW + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-CTRP + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-YFLT + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-YSTA + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-MANM + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-EREF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-EREF-MSP + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-ET + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-ET-WF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-IT + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-IT-WF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-DT-HVON + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-DT-SWON + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-PREP-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-COFF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-CON-MOD + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-CON-SW + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-TYSTA + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-YFLT + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-MANM + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-EREF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-EREF-MSP + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GA + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GA-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GB + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GB-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GA + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GA-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GB + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GB-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-DT-HVON + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-EREF-CALC + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-HVON-CALC + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-PREP-WF + + + + + + + + + + +iocEC-GN-PSH0PCF +PCFCORE IOC +epicsioc +IOC + + + +52RF01-PCF-4210 + +iocEC-GN-PCF0SYSM +PCFSYSM IOC +epicsioc +IOC + + + +52RF01-PSH-4410 + +iocEC-GN-PSH0SYSM +PSHSYSM IOC +epicsioc +IOC + + + +52RF01-PSH-4410 + +iocEC-GN-PSH0CUB +PSHCUB IOC +epicsioc +IOC + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/bf/bf9e48c011cb795633e6f2916d27758ffea3bb0f.svn-base b/EC-GN-JA-PCF/.svn/pristine/bf/bf9e48c011cb795633e6f2916d27758ffea3bb0f.svn-base new file mode 100644 index 0000000..9d1b3a8 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/bf/bf9e48c011cb795633e6f2916d27758ffea3bb0f.svn-base @@ -0,0 +1,8 @@ +#ifndef SDD_DAN_H +#define SDD_DAN_H +#include "dan.h" + +static const char ICProgName[] = "Gyrotron01DAN"; +static const char GYADanSource[] = "GYADanSource"; + +#endif /* SDD_DAN_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/c1/c104719b6713251909929c68882bb38165d935e4.svn-base b/EC-GN-JA-PCF/.svn/pristine/c1/c104719b6713251909929c68882bb38165d935e4.svn-base new file mode 100644 index 0000000..7136451 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/c1/c104719b6713251909929c68882bb38165d935e4.svn-base @@ -0,0 +1,57 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ColorFontUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ConsoleUtil); + +var table = widget.getTable(); +var nbColPVs=2; +// find index of the trigger PV +var i=0; +while (i< pvs.length) { +if(pvs[i].isConnected()==true){ + + +var s = PVUtil.getSeverity(pvs[i]); +}else{ + +var s =3; +} + +var color = ColorFontUtil.WHITE; +if( s == 0) { + color = ColorFontUtil.GREEN; +} +else if( s == 1) { + color = ColorFontUtil.RED; +} +else if( s == 2) { + color = ColorFontUtil.YELLOW; +} +else if( s == 3) { + color = ColorFontUtil.PINK; +} +else if( s == 3) { + color = ColorFontUtil.PINK; +} +else if( s == 4) { + color = ColorFontUtil.GREEN; +} + + +if (pvs[i].getName().indexOf("-CUBHLTS") != -1) { + if(pvs[i].isConnected()==true){ + table.setCellText(i/nbColPVs, 3, PVUtil.getString(pvs[i])); + }else{ + table.setCellText(i/nbColPVs, 3, "disconnected"); + } + table.setCellBackground(i/nbColPVs, 3, color); +} +if (pvs[i].getName().indexOf("-PLCHLTS") != -1) { +if(pvs[i].isConnected()==true){ + table.setCellText(i/nbColPVs, 4, PVUtil.getString(pvs[i])); + }else{ + table.setCellText(i/nbColPVs, 4, "disconnected"); + } + table.setCellBackground(i/nbColPVs, 4, color); +} +i=i+1; +} diff --git a/EC-GN-JA-PCF/.svn/pristine/c2/c273d2aff295fabd70fd071026672887a7ad44c2.svn-base b/EC-GN-JA-PCF/.svn/pristine/c2/c273d2aff295fabd70fd071026672887a7ad44c2.svn-base new file mode 100644 index 0000000..2f10a54 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/c2/c273d2aff295fabd70fd071026672887a7ad44c2.svn-base @@ -0,0 +1,36 @@ +#ifndef CCS_HEADERS_H +#define CCS_HEADERS_H + +/****************************************************************************** +* $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp/main/c++/include/ccs-headers.h $ +* $Id: ccs-headers.h 83715 2018-01-30 16:31:40Z abadiel $ +* +* Project : CODAC Core System +* +* Description : CODAC Core System - Commonly used program headers +* +* Author : Bertrand Bauvir +* +* Copyright (c) : 2010-2018 ITER Organization, +* CS 90 046 +* 13067 St. Paul-lez-Durance Cedex +* France +* +* This file is part of ITER CODAC software. +* For the terms and conditions of redistribution or use of this software +* refer to the file ITER-LICENSE.TXT located in the top level directory +* of the distribution package. +******************************************************************************/ + +/* log.h -- Part of CCS. It includes the declaration of the logging library API. */ +#include /* This file is mandatory to compile this program against the logging library and API. */ + +/* sdn.h -- Part of CCS. It includes the declaration of the SDN library API. */ +#include /* This file is mandatory to compile this program against the SDN core library and API. */ + +/* tcn.h -- Part of CCS. It includes the declaration of the TCN library API. */ +#include /* This file is optional and can be removed if the program does not need to handle ITER time or operate on it. */ + +/* dan.h -- part of CCS. It includes the declaration of the DAN library API. */ +#include /* This file is optional and can be removed if the program does not need to handle ITER time or operate on it. */ +#endif /* CCS_HEADERS_H */ diff --git a/EC-GN-JA-PCF/.svn/pristine/c4/c42c6af959d2ee9284a237cc5096caa1b43daf39.svn-base b/EC-GN-JA-PCF/.svn/pristine/c4/c42c6af959d2ee9284a237cc5096caa1b43daf39.svn-base new file mode 100644 index 0000000..4d784c4 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/c4/c42c6af959d2ee9284a237cc5096caa1b43daf39.svn-base @@ -0,0 +1,25 @@ +#====================================================================== +# Loading DBs +#====================================================================== +cd $(TOP)/db + + +#====================================================================== +# Loading Substitution Files +#====================================================================== +cd $(TOP)/iocBoot/$(IOC) + + +#====================================================================== +# PLC Communication Monitoring PVs DB Loading +#====================================================================== +cd $(EPICS_ROOT)/db + + +#====================================================================== +# IOC Monitor +#====================================================================== +cd $(EPICS_ROOT)/db +#dbLoadRecords("iocmon.db","CBS=EC-GN-SYSM, CTRLTYPE=ÀYØ4¾, IDX=0, IOCTYPE=CUB, PP=, PPPP=, NNNN=, TTT=") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/.svn/pristine/c4/c4ae97c141476887e31583a185b9bb971cd7dff9.svn-base b/EC-GN-JA-PCF/.svn/pristine/c4/c4ae97c141476887e31583a185b9bb971cd7dff9.svn-base new file mode 100644 index 0000000..3f14868 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/c4/c4ae97c141476887e31583a185b9bb971cd7dff9.svn-base @@ -0,0 +1,106 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +# +# Some EPICS PVs need to be simulation mode when we test code without PXI board. +# When user uses sim mode, new value must be written into PV.SVAL and PV itselfself. +# +print '### Start State Machine Sequence Test ###' + +def test_setup(): + """ + Setup EPICS PVs for testing. + Turn simulation mode ON for unavailable device + """ + print '---------- Start setup for the test ----------' + + print '1. set PVs to simulation mode' + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-AI-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF:STAT-AI-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DI-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-DI-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-MCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF-MCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-GCPS:STAT-SIMM YES', shell=True) #turn off for GCPS test. + #res = subprocess.call('caput EC-GN-P01-GBF-GCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-FHPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF-FHPS:STAT-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YFLT.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YFLT.SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YFLT.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YFLT 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YFLT.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YFLT.SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YFLT.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YFLT 0', shell=True) + time.sleep(1) + print '2. Change SCAN mode from I/O Inter to Passive to write sumulated values.' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1.SCAN Passive', shell=True)#SELECT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2.SCAN Passive', shell=True)#SELECT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R.SCAN Passive', shell=True) #STANDBY + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST2R.SCAN Passive', shell=True) #READY + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SCAN Passive', shell=True) #ON + res = subprocess.call('caput EC-GN-P01-PMF:PSU0000-TYSTA.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YSTA.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YSTA.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SCAN Passive', shell=True) #PERMIT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SCAN Passive', shell=True) #PERMIT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD2.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD3.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD4.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS.SCAN Passive', shell = True) #SYNC/ASYNC + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS1.SCAN Passive', shell=True) #CCPS ON REQUEST + time.sleep(1) + print '3. Set pulse length limit mode value and state.' + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 10000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD2-LIM 100000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD3-LIM 1000000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD4-LIM 10000000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD2.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD2 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD3.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD3 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD4.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD4 0', shell = True) #Pulse lenght mode + print '4. Set other operation modes' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-PREP-MODE 0', shell = True) #Pre-pro mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS.SVAL 0', shell = True) #SYNC/ASYNC mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS 0', shell = True) #SYNC/ASYNC mode + res = subprocess.call('caput EC-GN-P01-GAF:STAT-SHORT-PULSE 0',shell = True) #Short pulse mode + time.sleep(1) + print '5. Set a beam-on schedule(10ms diff + 100ms pulse)' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 10000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 20000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 30000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 40000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 50000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 100000', shell=True) + time.sleep(1) + print '6. Reset PLC INTERLOCK' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP.SIMM 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP.SCAN 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP 0', shell=True) #CCPS_IS_OPERATION + res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP.SIMM 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP.SCAN 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-RST-FLT 1', shell=True) + print '7. Simulate SELECT signal. State should go to WatiStandby from Disabled.' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2 1', shell=True) + time.sleep(1) + print '8. Simulate STANDBY signal. MCPS, GCPS, FHPS rampup must be started.' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R 1', shell=True) + print '---------- END setup for the test ----------' diff --git a/EC-GN-JA-PCF/.svn/pristine/c7/c7436143922a00bce89d661c4b722102e758dff3.svn-base b/EC-GN-JA-PCF/.svn/pristine/c7/c7436143922a00bce89d661c4b722102e758dff3.svn-base new file mode 100644 index 0000000..00318e3 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/c7/c7436143922a00bce89d661c4b722102e758dff3.svn-base @@ -0,0 +1,32 @@ +#ifndef SYS_HEADERS_H +#define SYS_HEADERS_H + +/****************************************************************************** +* $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp/main/c++/include/sys-headers.h $ +* $Id: sys-headers.h 83098 2018-01-08 13:23:38Z cesnikt $ +* +* Project : CODAC Core System +* +* Description : CODAC Core System - Commonly used program headers +* +* Author : Bertrand Bauvir +* +* Copyright (c) : 2010-2018 ITER Organization, +* CS 90 046 +* 13067 St. Paul-lez-Durance Cedex +* France +* +* This file is part of ITER CODAC software. +* For the terms and conditions of redistribution or use of this software +* refer to the file ITER-LICENSE.TXT located in the top level directory +* of the distribution package. +******************************************************************************/ + +#include +#include /* sscanf, printf, etc. */ +//#include +#include /* strncpy, etc. */ +#include /* va_start, etc. */ +#include /* sigset, etc. */ + +#endif /* SYS_HEADERS_H */ diff --git a/EC-GN-JA-PCF/.svn/pristine/ca/ca30d17a17178bbf2edc49b4a3024e1e2e99889b.svn-base b/EC-GN-JA-PCF/.svn/pristine/ca/ca30d17a17178bbf2edc49b4a3024e1e2e99889b.svn-base new file mode 100644 index 0000000..0cdb315 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/ca/ca30d17a17178bbf2edc49b4a3024e1e2e99889b.svn-base @@ -0,0 +1,149 @@ +/** + * @file JAMessageGAM.h + * @brief Header file for class JAMessageGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAMessageGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAMESSAGEGAM_H_ +#define GAMS_JAMESSAGEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include "Message.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that sends a message when input signals have expected values. Message will not be sent multiple + * times without first changing the application state. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ * +MessageGAM = {
+ *      Class = JAMessageGAM
+ *      Operation = AND // Accepted values are: AND, OR, XOR, NOR. Default value is AND.
+ *      ExpectedIntValues = {1 10} // Expected values for input signals of integral type.
+ *      ExpectedFloatValues = {3.5} // Expected values for float signals of floting point type.
+ *      Comparators = {EQUALS GREATER NOT} // Accepted values are: EQUALS, NOT, GREATER, EQUALS_OR_GREATER, LESS, EQUALS_OR_LESS
+ *                                         // Comparators element is optional. Default comparator is EQUALS.
+ *      InputSignals = {
+ *          Sig1 = {
+ *              DataSource = EPICSCAInput
+ *              Type = uint32
+ *          }
+ *          Sig2 = {
+ *              DataSource = EPICSCAInput
+ *              Type = float32
+ *          }
+ *          Sig3 = {
+ *              DataSource = EPICSCAInput
+ *              Type = uint32
+ *          }
+ *      }
+ *      +Event = { // Message to be sent when condition is true.
+ *          Class = Message
+ *          Destination = StateMachine
+ *          Function = GoDisabled
+ *      }
+ *  }
+ * 
+ * This example will send Event message when Sig1 == 1 && Sig2 > 3.5 && Sig3 != 10 + */ +class JAMessageGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAMessageGAM(); + + virtual ~JAMessageGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + + enum ComparisonMode { + Equals, Not, Greater, EqualsOrGreater, Less, EqualsOrLess + }; + +private: + /** + * @brief Does the input signal at provided index have the expected value. + * @param[in] index of the signal. + * @param[out] floatValueIndex lookup index for expected float values array. + * @param[out] intValueIndex lookup index for expected integer values array. + * @return true if the signal has expected value. + */ + bool Compare(MARTe::uint32 index, MARTe::uint32 &floatValueIndex, MARTe::uint32 &intValueIndex); + + enum OperationMode { + And, Or, Xor, Nor + }; + + // Input signals + void **inputSignals; + + MARTe::TypeDescriptor *inputSignalTypes; + + // Condition operation. + OperationMode operation; + + // Message to be sent when conditions are met. + MARTe::ReferenceT eventMsg; + + // Was the message already sent and we are waiting for a state change before next message can be sent. + bool needsReset; + + // Array of expected integer values of input signals. + MARTe::uint64* expectedValuesInt; + + // Array of expected float values for input signals. + MARTe::float64* expectedValuesFloat; + + // Expected integer values count (must be equal to numberOfInputSignals - floatValuesCount) + MARTe::uint32 intValuesCount; + + // Expected integer values count (must be equal to numberOfInputSignals - floatValuesCount) + MARTe::uint32 floatValuesCount; + + // Array of comparators + ComparisonMode* comparators; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAMESSAGEGAM_H_ */ diff --git a/EC-GN-JA-PCF/.svn/pristine/ca/ca5dc532dbe795f4eb83484ec8aef850a7cf4e67.svn-base b/EC-GN-JA-PCF/.svn/pristine/ca/ca5dc532dbe795f4eb83484ec8aef850a7cf4e67.svn-base new file mode 100644 index 0000000..9dc4a82 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/ca/ca5dc532dbe795f4eb83484ec8aef850a7cf4e67.svn-base @@ -0,0 +1,59 @@ +TOP=../.. + +include $(TOP)/configure/CONFIG +#---------------------------------------- +# ADD MACRO DEFINITIONS AFTER THIS LINE +#======================================== + +#======================================== +# Build the IOC application + +PROD_IOC = CUB +# CUB.dbd will be created and installed +DBD += CUB.dbd + +# CUB.dbd will be made up from these files: +-include $(EPICS_ROOT)/mk/codac-common.mk + + +# Add all the support libraries needed by this IOC +-include $(EPICS_ROOT)/mk/asyn.mk +-include $(EPICS_ROOT)/mk/s7PLCAsyn.mk + +CUB_DBD += $(CODAC_DBD) +CUB_LIBS += $(CODAC_LIBS) + +# # SNCSEQ +# _SNCFLAGS += +r -c +d +# CUB_DBD += .dbd +# CUB_SRCS += .stt +# CUB_LIBS += seq pv + + +# CUB_registerRecordDeviceDriver.cpp derives from CUB.dbd +CUB_SRCS += CUB_registerRecordDeviceDriver.cpp + +# Build the main IOC entry point on workstation OSs. +CUB_SRCS_DEFAULT += CUBMain.cpp +CUB_SRCS_vxWorks += -nil- + +# Add support from base/src/vxWorks if needed +#CUB_OBJS_vxWorks += $(EPICS_BASE_BIN)/vxComLibrary + +#============================= +# Include SNL program makefile snippets + +-include ../*.snlprog + +#============================= + + +# Finally link to the EPICS Base libraries +CUB_LIBS += $(EPICS_BASE_IOC_LIBS) + +#=========================== + +include $(TOP)/configure/RULES +#---------------------------------------- +# ADD RULES AFTER THIS LINE +#---------------------------------------- diff --git a/EC-GN-JA-PCF/.svn/pristine/ca/cad518d744dc85470d5eea99f31be471f2356cf9.svn-base b/EC-GN-JA-PCF/.svn/pristine/ca/cad518d744dc85470d5eea99f31be471f2356cf9.svn-base new file mode 100644 index 0000000..01ec4d2 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/ca/cad518d744dc85470d5eea99f31be471f2356cf9.svn-base @@ -0,0 +1,29 @@ +ECPCSubscriber.cfg is a configuration for testing ECPC simulator (JAECPCSimulator.cfg). + +Setup: +1) Run softIoc. In qst-gyrotron-fast-controller/Configurations execute command: + softIoc -d ECPC_IOC.db + +2) Run ECPC simulator. In qst-gyrotron-fast-controller/Startup execute command: + ./Main.sh -f ../Configurations/JAECPCSimulator.cfg -l RealTimeLoader -m StateMachine:Start + +3) Run ECPC subscriber. In qst-gyrotron-fast-controller/Startup execute command: + ./Main.sh -f ../Configurations/tests/ECPCSubscriber.cfg -l RealTimeLoader -m StateMachine:Start + +The ECPC simulator should automatically start sending waveforms, which will be printed by the ECPC subscriber every 10 milliseconds. +The ECPC simulator will also be sending command, which is printed by the ECPC subscriber every millisecond. + +To change command that is being sent, you have to caput 1 to one of following PVs: +MHVPS_ON (command 1) +GYA_BPS_SWON (command 2) +GYA_APS_SWON (command 3) +GYB_BPS_SWON (command 4) +GYB_APS_SWON (command 5) +GYA_BPS_SWOFF (command 6) +GYA_APS_SWOFF (command 7) +GYB_BPS_SWOFF (command 8) +GYB_APS_SWOFF (command 9) +RF_OFF (command 10) + +To stop sending that command, caput 0 to that PV. + diff --git a/EC-GN-JA-PCF/.svn/pristine/cb/cb1f791eb00445bace8999bd50e16522cbc87f99.svn-base b/EC-GN-JA-PCF/.svn/pristine/cb/cb1f791eb00445bace8999bd50e16522cbc87f99.svn-base new file mode 100644 index 0000000..78526fd --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/cb/cb1f791eb00445bace8999bd50e16522cbc87f99.svn-base @@ -0,0 +1,43 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +def test_ready(): + """In the WaitReady state, simulate READY signal from PLC.""" + print '---------- WatiReady test ----------' + print '1. Simulate READY signal. State should go to WaitPermit state.' + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST2R.SVAL 1', shell=True) + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST2R 1', shell=True) + print 'Enter to continue test' + inpval = raw_input() + print '2. Set CCPS trianguler waveform parameters(1V, 1Hz)' + #res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-AMP 3', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-FREQ 1', shell=True) #Hz + #res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-AMP 4', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-FREQ 1', shell=True) #Hz + print 'Enter to continue test' + inpval = raw_input() + time.sleep(1) + print '3. load csv file.' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-CSV-NAME test.csv', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-CSV-LOAD 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-CSV-NAME test2.csv', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-CSV-LOAD 1', shell=True) + time.sleep(1) + print '4. Simulate CCPS_ON_REQUEST signal' + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS1.SVAL 1', shell=True) + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS1 1', shell=True) + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS2.SVAL 1', shell=True) + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS2 1', shell=True) + print 'Enter to continue test' + inpval = raw_input() + print '5. Confirm CCPS_ON flag and triangular waveform generation.' + print '6. Simulate CCPS status PVs.' + #res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-OP-V-DIFF.SCAN Passive', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-CCPS:PSU2320-TR 0', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-OP-V-DIFF.SCAN Passive', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF-CCPS:PSU2320-TR 0', shell=True) + print '7. Confirm PCF state changes to WaitPermit state.' + diff --git a/EC-GN-JA-PCF/.svn/pristine/cb/cbb7bc0c0bb2d5d0d5233f52170f3335b40afe8d.svn-base b/EC-GN-JA-PCF/.svn/pristine/cb/cbb7bc0c0bb2d5d0d5233f52170f3335b40afe8d.svn-base new file mode 100644 index 0000000..01faa30 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/cb/cbb7bc0c0bb2d5d0d5233f52170f3335b40afe8d.svn-base @@ -0,0 +1,101 @@ + + + + + 1.0.0 + + + + danInt16 + + 100000 + + + DATA_D0 + + DM_BLOCK2D_VAR + + CHECK_AND_OVERWRITE + + 1000 + + 1 + + UTC + + + + GYADanSource + + v1.3 + + 0 + + N1134342 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ALL + + + + + + IF_FAIL_NEXT + + ${DAN_ARCHIVE_MASTER} + + ${DAN_ARCHIVE_SLAVE} + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/cc/cc1c88c23613945661b5e1bc7edee04d371610ce.svn-base b/EC-GN-JA-PCF/.svn/pristine/cc/cc1c88c23613945661b5e1bc7edee04d371610ce.svn-base new file mode 100644 index 0000000..b716b6d --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/cc/cc1c88c23613945661b5e1bc7edee04d371610ce.svn-base @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAWFRecordGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAWFRecordGAM$(LIBEXT) \ + $(BUILD_DIR)/JAWFRecordGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/.svn/pristine/cc/cca5db322c57f63aab6017e57baf90fed76c6952.svn-base b/EC-GN-JA-PCF/.svn/pristine/cc/cca5db322c57f63aab6017e57baf90fed76c6952.svn-base new file mode 100644 index 0000000..0a725f5 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/cc/cca5db322c57f63aab6017e57baf90fed76c6952.svn-base @@ -0,0 +1,31 @@ +#+====================================================================== +# $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp/main/c++/Makefile $ +# $Id: Makefile 83098 2018-01-08 13:23:38Z cesnikt $ +# +# Project : CODAC Core System +# +# Description : C++ Makefile +# +# Author : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2018 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== + +SUBDIRS=$(dir $(wildcard */Makefile)) + +BOLD=\e[1m +NC=\e[0m + +all: + +%: + @$(foreach dir, $(SUBDIRS), echo -e "$(BOLD)Building $(dir:/=)...$(NC)" && $(MAKE) -C $(dir) $@ &&) : diff --git a/EC-GN-JA-PCF/.svn/pristine/cc/cccbe1ccf2685647b1af06ba7330a9c55ab3fa15.svn-base b/EC-GN-JA-PCF/.svn/pristine/cc/cccbe1ccf2685647b1af06ba7330a9c55ab3fa15.svn-base new file mode 100644 index 0000000..884f5e7 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/cc/cccbe1ccf2685647b1af06ba7330a9c55ab3fa15.svn-base @@ -0,0 +1,57 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ColorFontUtil); + +var table = widget.getTable(); + +//Fill PV Name only once +if (widget.getVar("firstTime") == null) { + widget.setVar("firstTime", true); + // Fill table only with non EGU pv's + for (var i=0;pv=pvs[i];i++) { + // earlier when by default pv.getName() was giving name with 'epics://' prefix. Ripping it off before showing was done below + table.setCellText(i, 0, pv.getName().trim()); + if (!pv.isConnected()) { + table.setCellText(i/2, 1, "Disconnected"); + } + } + // Based on value of macro SHOW_PLC_IOC, enable visibility of PLCIOCDetailsTable + if (widget.getPropertyValue("name") == 'PLCIOCDetailsTable') { + if (display.getMacroValue("SHOW_PLC_IOC") == "true") { + widget.setPropertyValue("visible", "true"); + display.getWidget("PLCIOCDetailsLabel").setPropertyValue("visible", "true"); + } + } +} +//find index of the trigger PV +var i=0; +while (triggerPV != pvs[i]) { + i+=1; +} + +var pvValue = PVUtil.getString(triggerPV).trim(); +var eugValue = table.getCellText(i, 4); +if (eugValue != "") { + pvValue = pvValue+" "+eugValue; +} +table.setCellText(i, 1, pvValue); +table.setCellText(i, 2, PVUtil.getStatus(triggerPV).trim()); +table.setCellText(i, 3, PVUtil.getSeverityString(triggerPV).trim()); + +var s = PVUtil.getSeverity(triggerPV); + +color = ColorFontUtil.WHITE; +if( s == 0) { + color = ColorFontUtil.GREEN; +} +else if( s == 1) { + color = ColorFontUtil.RED; +} +else if( s == 2) { + color = ColorFontUtil.YELLOW; +} +else if( s == 3) { + color = ColorFontUtil.PINK; +} + + +table.setCellBackground(i, 3, color); diff --git a/EC-GN-JA-PCF/.svn/pristine/ce/ce837356346d9ef0e93d5a1cb7987482d60baacc.svn-base b/EC-GN-JA-PCF/.svn/pristine/ce/ce837356346d9ef0e93d5a1cb7987482d60baacc.svn-base new file mode 100644 index 0000000..7004a1f --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/ce/ce837356346d9ef0e93d5a1cb7987482d60baacc.svn-base @@ -0,0 +1,178 @@ +/** + * @file JATriangleWaveGAM.cpp + * @brief Source file for class JATriangleWaveGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JATriangleWaveGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "AdvancedErrorManagement.h" +#include "JATriangleWaveGAM.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +MARTe::float32 absFloat(MARTe::float32 x) { + if (x < 0.0f) { + return -x; + } + return x; +} + +JATriangleWaveGAM::JATriangleWaveGAM() { + frequency = NULL_PTR(MARTe::float32 *); + amplitude = NULL_PTR(MARTe::float32 *); + offset = NULL_PTR(MARTe::float32 *); + plcStandby = NULL_PTR(MARTe::uint32 *); + waveOutput = NULL_PTR(MARTe::float32 *); + time = 0.0f; +} + +JATriangleWaveGAM::~JATriangleWaveGAM() { +} + +bool JATriangleWaveGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + return GAM::Initialise(data); +} + +bool JATriangleWaveGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 4u); + if (ok) { + ok = (numberOfOutputSignals == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "One output signal shall be defined."); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Four input signals shall be defined."); + } + uint32 freqIndex; + uint32 ampIndex; + uint32 offsetIndex; + uint32 plcStandbyIndex; + if (ok) { + StreamString signalName = "Frequency"; + ok = GetSignalIndex(InputSignals, freqIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Frequency input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, freqIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Frequency shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Amplitude"; + ok = GetSignalIndex(InputSignals, ampIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Amplitude input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, ampIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Amplitude shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Offset"; + ok = GetSignalIndex(InputSignals, offsetIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Offset input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, offsetIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Offset shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "PLCSTANDBY"; + ok = GetSignalIndex(InputSignals, plcStandbyIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLCSTANDBY input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, plcStandbyIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLCSTANDBY shall be defined as uint32."); + } + } + } + if (ok) { + TypeDescriptor inputType = GetSignalType(OutputSignals, 0); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Amplitude shall be defined as float32."); + } + } + if (ok) { + frequency = reinterpret_cast(GetInputSignalMemory(freqIndex)); + amplitude = reinterpret_cast(GetInputSignalMemory(ampIndex)); + offset = reinterpret_cast(GetInputSignalMemory(offsetIndex)); + plcStandby = reinterpret_cast(GetInputSignalMemory(plcStandbyIndex)); + waveOutput = reinterpret_cast(GetOutputSignalMemory(0)); + } + return ok; +} + +bool JATriangleWaveGAM::Execute() { + using namespace MARTe; + // If frequency is not set, output 0. + if (*frequency <= 0.0f || *plcStandby == 0u) { + *waveOutput = 0.0f; + return true; + } + // Increase the current time. + ++time; + // Calculate the period in milliseconds + float32 periodMs = 1000.0 / *frequency; + // Make sure the time is on [0, periodMs] interval. + while (time > periodMs) { + time -= periodMs; + } + // Formula: + // f(x) = |x - 0.5| * 2 * amplitude + // where x is between 0 and 1 + *waveOutput = absFloat((time / periodMs) - 0.5f) * 2.0f * (*amplitude) + *offset; + return true; +} + +CLASS_REGISTER(JATriangleWaveGAM, "1.0") diff --git a/EC-GN-JA-PCF/.svn/pristine/cf/cf009a9240ccf0821dd62abad31f96fbb776f34c.svn-base b/EC-GN-JA-PCF/.svn/pristine/cf/cf009a9240ccf0821dd62abad31f96fbb776f34c.svn-base new file mode 100644 index 0000000..71c7669 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/cf/cf009a9240ccf0821dd62abad31f96fbb776f34c.svn-base @@ -0,0 +1,402 @@ +/** + * @file JARTStateMachineGAM.cpp + * @brief Source file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JARTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +static MARTe::uint64 getCurrentTimeUs() { + using namespace MARTe; + return static_cast(HighResolutionTimer::Counter() * HighResolutionTimer::Period() * 1e6f + 0.5f); +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARTStateMachineGAM::JARTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + turn_off_delay = 2000; //us + + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + + apsSwonHighResolutionTime = 0; + + aps_hvon_state=0; + aps_swon_state=0; + mhvps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; +} + +JARTStateMachineGAM::~JARTStateMachineGAM() { +} + +bool JARTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JARTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JARTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 11u); + if (ok) { + ok = (numberOfOutputSignals == 16u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined %d",numberOfOutputSignals); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(10)); + + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + + outputAPSHVON = reinterpret_cast(GetOutputSignalMemory(8)); + outputAPSSWON = reinterpret_cast(GetOutputSignalMemory(9)); + outputBPSHVON = reinterpret_cast(GetOutputSignalMemory(10)); + outputBPSSWON = reinterpret_cast(GetOutputSignalMemory(11)); + outputMHVPSON = reinterpret_cast(GetOutputSignalMemory(12)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(13)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(14)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(15)); + + *shotCounter = 0; + } + return ok; +} + +bool JARTStateMachineGAM::Execute() { + using namespace MARTe; + + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + //REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence at %d.", *currentTime); + plcOnTime = *currentTime; //Save pulse start time. + //*outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS; + } + } + else if (currentState == SwitchingHVPS) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; bps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + *outputBPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; aps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal at %d.", *currentTime); + *outputAPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; bps_swon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + *outputBPSSWON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; mhvps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + *outputMHVPSON=1; + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (plcOnTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; aps_swon_state=1; + apsSwonHighResolutionTime = getCurrentTimeUs(); + apsSwonTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + *outputAPSSWON=1; + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 1; + } + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 1; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *outputBeamON = 1; + *shotCounter += 1; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //Action in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + //debug + //if((*stopRequest != 0)){ + //REPORT_ERROR(ErrorManagement::Debug, "Stop request was called.!!!"); + //} else { + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset.!!!"); + //} + *outputSignal -= aps_swon; + mhvps_hvon_is_on = false; mhvps_hvon_state=0; + aps_hvon_is_on = false; aps_hvon_state=0; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; bps_hvon_state=0; + bps_swon_is_on = false; bps_swon_state=0; + currentState = HVTerminate; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + } + uint32 updatePeriod = 100; // in microsecnds (get this from Timer) + if ((*modePulseLengthLimit == 1u) || (getCurrentTimeUs() + updatePeriod >= (apsSwonHighResolutionTime + *triggerDelay_shotlen))) { + + // Now we do busy wait + while (getCurrentTimeUs() < (apsSwonHighResolutionTime + *triggerDelay_shotlen)) { + //REPORT_ERROR(ErrorManagement::Debug, "!"); + } + // We stop busy waiting #executionOverhead before expected pulse off time + //debug + //if((*modePulseLengthLimit == 1u)){ + // REPORT_ERROR(ErrorManagement::Debug, "Mode limit detected.!!!"); + //} else { + // REPORT_ERROR(ErrorManagement::Debug, "Shot length reached to the setpoint.!!!"); + //} + //debug end. + //Do action + *outputSignal -= aps_swon; //Turn off only APS_SWON first. + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; + bps_swon_is_on = false; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + //REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 1; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + //In the HVTerminate state, turn APS_SWON off first, and wait 1ms. Finally turn other PS off. + //Action in this state. + *outputBeamON = 0; + *outputHVArmed = 0; + *outputHVInjection = 0; + *outputRFON = 0; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + mhvps_hvon_state=0; + aps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset. The State was changed to WaitTrigger at %d.", *currentTime); + } + } + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6259 = 1*aps_swon_state; + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + p4Value = 8*mhvps_hvon_state; + //*outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + *outputSignalNI6528P4 = ~p4Value; + return true; +} + +CLASS_REGISTER(JARTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF/.svn/pristine/cf/cf9306a7be95871b2911c3082f94fc90551de48f.svn-base b/EC-GN-JA-PCF/.svn/pristine/cf/cf9306a7be95871b2911c3082f94fc90551de48f.svn-base new file mode 100644 index 0000000..11cade5 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/cf/cf9306a7be95871b2911c3082f94fc90551de48f.svn-base @@ -0,0 +1,137 @@ +/** + * @file RandomDataSource.h + * @brief Header file for class RandomDataSource + * @date 07/06/2018 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class RandomDataSource + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef RANDOM_DATASOURCE_H_ +#define RANDOM_DATASOURCE_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +/** + * @brief DataDource which generates random numbers against a given seed. + * + * The configuration syntax is (names and signal quantities are only given as an example): + * +RandomDataSource = { + * Class = RandomDataSource + * Seed = 8 //Seed against which the the seed will be generated. Note that each signal + * Signals = { + * Random1 = { //Maximum one signal + * Type = uint64 //All the integer types are supported + * } + * } + * } + */ +class RandomDataSource: public MARTe::DataSourceI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Constructor. NOOP. + */ +RandomDataSource (); + + /** + * @brief Destructor. NOOP. + */ + virtual ~RandomDataSource(); + + /** + * @brief The configuration data detailed in the class description + * @return true if all the compulsory parameters are set. + */ + virtual bool Initialise(MARTe::StructuredDataI & data); + + /** + * @brief Verifies that at most one signal has been set with the correct type (i.e. any integer). + * @return true if the above conditions are met. + */ + virtual bool SetConfiguredDatabase(MARTe::StructuredDataI & data); + + /** + * @brief @see DataSourceI::Synchronise + */ + virtual bool Synchronise(); + + /** + * @brief @see DataSourceI::AllocateMemory + */ + virtual bool AllocateMemory(); + + /** + * @brief @see DataSourceI::GetSignalMemoryBuffer + */ + virtual bool GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress); + + /** + * @return "MemoryMapSynchronisedInputBroker" + */ + virtual const MARTe::char8 *GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction); + + /** + * @brief NOOP + */ + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName); + +private: + /** + * The seed to compute the signals. + */ + MARTe::uint32 seed; + + /** + * The signal pointer + */ + MARTe::char8 *signalPtr; + + /** + * The signal type descriptor. + */ + MARTe::TypeDescriptor signalTypeDescriptor; + + /** + * Compute the random value + */ + template + void GetValue(); + +}; + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ +template +void RandomDataSource::GetValue() { + *(reinterpret_cast(&signalPtr[0u])) = static_cast(rand_r(&seed)); +} + +#endif /* RANDOM_DATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF/.svn/pristine/cf/cfa4fdc02470be38b6a8b3e6bd16b7d368fdc035.svn-base b/EC-GN-JA-PCF/.svn/pristine/cf/cfa4fdc02470be38b6a8b3e6bd16b7d368fdc035.svn-base new file mode 100644 index 0000000..76c1402 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/cf/cfa4fdc02470be38b6a8b3e6bd16b7d368fdc035.svn-base @@ -0,0 +1,14 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.DataUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ScriptUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ConsoleUtil); + +var table = widget.getTable(); +var fct_name=display.getPropertyValue("name"); +var selectionChanged = new Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener() { + selectionChanged: function(selection) { + var macroInput = DataUtil.createMacrosInput(true) + ScriptUtil.openOPI(display.getWidget("CubicleDetailsTable"), "/opt/codac/opi/epics-sysmon/boy/ITER-SYSM-CUB_Mimic.opi", 1, macroInput); + } +}; +table.addSelectionChangedListener(selectionChanged); diff --git a/EC-GN-JA-PCF/.svn/pristine/d1/d1780ac853ec028db7e87977050d69672efeffa3.svn-base b/EC-GN-JA-PCF/.svn/pristine/d1/d1780ac853ec028db7e87977050d69672efeffa3.svn-base new file mode 100644 index 0000000..9dfc5c1 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/d1/d1780ac853ec028db7e87977050d69672efeffa3.svn-base @@ -0,0 +1,45 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +SPB = JAMessageGAM.x JAPreProgrammedGAM.x JAModeControlGAM.x \ + JAWFRecordGAM.x JATriangleWaveGAM.x JARampupGAM.x \ + JARTStateMachineGAM.x JASDNRTStateMachineGAM.x JATerminalInterfaceGAM.x \ + JABitSumGAM.x JAConditionalSignalUpdateGAM.x JASourceChoiseGAM.x JABitReverseGAM.x + +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults + +ROOT_DIR=.. +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +all: $(OBJS) $(SUBPROJ) check-env + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + +check-env: +ifndef MARTe2_DIR + $(error MARTe2_DIR is undefined) +endif diff --git a/EC-GN-JA-PCF/.svn/pristine/d1/d1aa005c240f820b888eb6b57a0ab2208705e074.svn-base b/EC-GN-JA-PCF/.svn/pristine/d1/d1aa005c240f820b888eb6b57a0ab2208705e074.svn-base new file mode 100644 index 0000000..dfaf406 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/d1/d1aa005c240f820b888eb6b57a0ab2208705e074.svn-base @@ -0,0 +1,1023 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,60,45,10,10,10,10 +10,55,40,7,9,9,9 +20,50,35,4,8,8,8 +30,45,30,1,7,7,7 +40,40,25,-2,6,6,6 +50,35,20,-5,5,5,5 +60,30,15,-8,4,4,4 +70,25,10,-11,3,3,3 +80,20,5,-14,2,2,2 +90,15,0,-17,1,1,1 +100,10,-5,-20,0,0,0 +110,5,0,-23,1,1,1 +120,0,5,-20,2,2,2 +130,-5,10,-17,3,3,3 +140,0,15,-14,4,4,4 +150,5,20,-11,5,5,5 +160,10,25,-8,6,6,6 +170,15,30,-5,7,7,7 +180,20,35,-2,8,8,8 +190,25,40,1,9,9,9 +200,30,45,4,10,10,10 +210,35,40,7,9,9,9 +220,40,35,10,8,8,8 +230,45,30,13,7,7,7 +240,50,25,10,6,6,6 +250,55,20,7,5,5,5 +260,60,15,4,4,4,4 +270,55,10,1,3,3,3 +280,50,5,-2,2,2,2 +290,45,0,-5,1,1,1 +300,40,-5,-8,0,0,0 +310,35,0,-11,1,1,1 +320,30,5,-14,2,2,2 +330,25,10,-17,3,3,3 +340,20,15,-20,4,4,4 +350,15,20,-23,5,5,5 +360,10,25,-20,6,6,6 +370,5,30,-17,7,7,7 +380,0,35,-14,8,8,8 +390,-5,40,-11,9,9,9 +400,0,45,-8,10,10,10 +410,5,40,-5,9,9,9 +420,10,35,-2,8,8,8 +430,15,30,1,7,7,7 +440,20,25,4,6,6,6 +450,25,20,7,5,5,5 +460,30,15,10,4,4,4 +470,35,10,13,3,3,3 +480,40,5,10,2,2,2 +490,45,0,7,1,1,1 +500,50,-5,4,0,0,0 +510,55,0,1,1,1,1 +520,60,5,-2,2,2,2 +530,55,10,-5,3,3,3 +540,50,15,-8,4,4,4 +550,45,20,-11,5,5,5 +560,40,25,-14,6,6,6 +570,35,30,-17,7,7,7 +580,30,35,-20,8,8,8 +590,25,40,-23,9,9,9 +600,20,45,-20,10,10,10 +610,15,40,-17,9,9,9 +620,10,35,-14,8,8,8 +630,5,30,-11,7,7,7 +640,0,25,-8,6,6,6 +650,-5,20,-5,5,5,5 +660,0,15,-2,4,4,4 +670,5,10,1,3,3,3 +680,10,5,4,2,2,2 +690,15,0,7,1,1,1 +700,20,-5,10,0,0,0 +710,25,0,13,1,1,1 +720,30,5,10,2,2,2 +730,35,10,7,3,3,3 +740,40,15,4,4,4,4 +750,45,20,1,5,5,5 +760,50,25,-2,6,6,6 +770,55,30,-5,7,7,7 +780,60,35,-8,8,8,8 +790,55,40,-11,9,9,9 +800,50,45,-14,10,10,10 +810,45,40,-17,9,9,9 +820,40,35,-20,8,8,8 +830,35,30,-23,7,7,7 +840,30,25,-20,6,6,6 +850,25,20,-17,5,5,5 +860,20,15,-14,4,4,4 +870,15,10,-11,3,3,3 +880,10,5,-8,2,2,2 +890,5,0,-5,1,1,1 +900,0,-5,-2,0,0,0 +910,-5,0,1,1,1,1 +920,0,5,4,2,2,2 +930,5,10,7,3,3,3 +940,10,15,10,4,4,4 +950,15,20,13,5,5,5 +960,20,25,10,6,6,6 +970,25,30,7,7,7,7 +980,30,35,4,8,8,8 +990,35,40,1,9,9,9 +1000,40,45,-2,10,10,10 +1010,10,20,30,40,50,60 +1020,10,20,30,40,50,60 +1030,10,20,30,40,50,60 +1040,10,20,30,40,50,60 +1050,10,20,30,40,50,60 +1060,10,20,30,40,50,60 +1070,10,20,30,40,50,60 +1080,10,20,30,40,50,60 +1090,10,20,30,40,50,60 +1100,10,20,30,40,50,60 +1110,10,20,30,40,50,60 +1120,10,20,30,40,50,60 +1130,10,20,30,40,50,60 +1140,10,20,30,40,50,60 +1150,10,20,30,40,50,60 +1160,10,20,30,40,50,60 +1170,10,20,30,40,50,60 +1180,10,20,30,40,50,60 +1190,10,20,30,40,50,60 +1200,10,20,30,40,50,60 +1210,10,20,30,40,50,60 +1220,10,20,30,40,50,60 +1230,10,20,30,40,50,60 +1240,10,20,30,40,50,60 +1250,10,20,30,40,50,60 +1260,10,20,30,40,50,60 +1270,10,20,30,40,50,60 +1280,10,20,30,40,50,60 +1290,10,20,30,40,50,60 +1300,10,20,30,40,50,60 +1310,10,20,30,40,50,60 +1320,10,20,30,40,50,60 +1330,10,20,30,40,50,60 +1340,10,20,30,40,50,60 +1350,10,20,30,40,50,60 +1360,10,20,30,40,50,60 +1370,10,20,30,40,50,60 +1380,10,20,30,40,50,60 +1390,10,20,30,40,50,60 +1400,10,20,30,40,50,60 +1410,10,20,30,40,50,60 +1420,10,20,30,40,50,60 +1430,10,20,30,40,50,60 +1440,10,20,30,40,50,60 +1450,10,20,30,40,50,60 +1460,10,20,30,40,50,60 +1470,10,20,30,40,50,60 +1480,10,20,30,40,50,60 +1490,10,20,30,40,50,60 +1500,10,20,30,40,50,60 +1510,10,20,30,40,50,60 +1520,10,20,30,40,50,60 +1530,10,20,30,40,50,60 +1540,10,20,30,40,50,60 +1550,10,20,30,40,50,60 +1560,10,20,30,40,50,60 +1570,10,20,30,40,50,60 +1580,10,20,30,40,50,60 +1590,10,20,30,40,50,60 +1600,10,20,30,40,50,60 +1610,10,20,30,40,50,60 +1620,10,20,30,40,50,60 +1630,10,20,30,40,50,60 +1640,10,20,30,40,50,60 +1650,10,20,30,40,50,60 +1660,10,20,30,40,50,60 +1670,10,20,30,40,50,60 +1680,10,20,30,40,50,60 +1690,10,20,30,40,50,60 +1700,10,20,30,40,50,60 +1710,10,20,30,40,50,60 +1720,10,20,30,40,50,60 +1730,10,20,30,40,50,60 +1740,10,20,30,40,50,60 +1750,10,20,30,40,50,60 +1760,10,20,30,40,50,60 +1770,10,20,30,40,50,60 +1780,10,20,30,40,50,60 +1790,10,20,30,40,50,60 +1800,10,20,30,40,50,60 +1810,10,20,30,40,50,60 +1820,10,20,30,40,50,60 +1830,10,20,30,40,50,60 +1840,10,20,30,40,50,60 +1850,10,20,30,40,50,60 +1860,10,20,30,40,50,60 +1870,10,20,30,40,50,60 +1880,10,20,30,40,50,60 +1890,10,20,30,40,50,60 +1900,10,20,30,40,50,60 +1910,10,20,30,40,50,60 +1920,10,20,30,40,50,60 +1930,10,20,30,40,50,60 +1940,10,20,30,40,50,60 +1950,10,20,30,40,50,60 +1960,10,20,30,40,50,60 +1970,10,20,30,40,50,60 +1980,10,20,30,40,50,60 +1990,10,20,30,40,50,60 +2000,10,20,30,40,50,60 +2010,10,20,30,40,50,60 +2020,10,20,30,40,50,60 +2030,10,20,30,40,50,60 +2040,10,20,30,40,50,60 +2050,10,20,30,40,50,60 +2060,10,20,30,40,50,60 +2070,10,20,30,40,50,60 +2080,10,20,30,40,50,60 +2090,10,20,30,40,50,60 +2100,10,20,30,40,50,60 +2110,10,20,30,40,50,60 +2120,10,20,30,40,50,60 +2130,10,20,30,40,50,60 +2140,10,20,30,40,50,60 +2150,10,20,30,40,50,60 +2160,10,20,30,40,50,60 +2170,10,20,30,40,50,60 +2180,10,20,30,40,50,60 +2190,10,20,30,40,50,60 +2200,10,20,30,40,50,60 +2210,10,20,30,40,50,60 +2220,10,20,30,40,50,60 +2230,10,20,30,40,50,60 +2240,10,20,30,40,50,60 +2250,10,20,30,40,50,60 +2260,10,20,30,40,50,60 +2270,10,20,30,40,50,60 +2280,10,20,30,40,50,60 +2290,10,20,30,40,50,60 +2300,10,20,30,40,50,60 +2310,10,20,30,40,50,60 +2320,10,20,30,40,50,60 +2330,10,20,30,40,50,60 +2340,10,20,30,40,50,60 +2350,10,20,30,40,50,60 +2360,10,20,30,40,50,60 +2370,10,20,30,40,50,60 +2380,10,20,30,40,50,60 +2390,10,20,30,40,50,60 +2400,10,20,30,40,50,60 +2410,10,20,30,40,50,60 +2420,10,20,30,40,50,60 +2430,10,20,30,40,50,60 +2440,10,20,30,40,50,60 +2450,10,20,30,40,50,60 +2460,10,20,30,40,50,60 +2470,10,20,30,40,50,60 +2480,10,20,30,40,50,60 +2490,10,20,30,40,50,60 +2500,10,20,30,40,50,60 +2510,10,20,30,40,50,60 +2520,10,20,30,40,50,60 +2530,10,20,30,40,50,60 +2540,10,20,30,40,50,60 +2550,10,20,30,40,50,60 +2560,10,20,30,40,50,60 +2570,10,20,30,40,50,60 +2580,10,20,30,40,50,60 +2590,10,20,30,40,50,60 +2600,10,20,30,40,50,60 +2610,10,20,30,40,50,60 +2620,10,20,30,40,50,60 +2630,10,20,30,40,50,60 +2640,10,20,30,40,50,60 +2650,10,20,30,40,50,60 +2660,10,20,30,40,50,60 +2670,10,20,30,40,50,60 +2680,10,20,30,40,50,60 +2690,10,20,30,40,50,60 +2700,10,20,30,40,50,60 +2710,10,20,30,40,50,60 +2720,10,20,30,40,50,60 +2730,10,20,30,40,50,60 +2740,10,20,30,40,50,60 +2750,10,20,30,40,50,60 +2760,10,20,30,40,50,60 +2770,10,20,30,40,50,60 +2780,10,20,30,40,50,60 +2790,10,20,30,40,50,60 +2800,10,20,30,40,50,60 +2810,10,20,30,40,50,60 +2820,10,20,30,40,50,60 +2830,10,20,30,40,50,60 +2840,10,20,30,40,50,60 +2850,10,20,30,40,50,60 +2860,10,20,30,40,50,60 +2870,10,20,30,40,50,60 +2880,10,20,30,40,50,60 +2890,10,20,30,40,50,60 +2900,10,20,30,40,50,60 +2910,10,20,30,40,50,60 +2920,10,20,30,40,50,60 +2930,10,20,30,40,50,60 +2940,10,20,30,40,50,60 +2950,10,20,30,40,50,60 +2960,10,20,30,40,50,60 +2970,10,20,30,40,50,60 +2980,10,20,30,40,50,60 +2990,10,20,30,40,50,60 +3000,10,20,30,40,50,60 +3010,10,20,30,40,50,60 +3020,10,20,30,40,50,60 +3030,10,20,30,40,50,60 +3040,10,20,30,40,50,60 +3050,10,20,30,40,50,60 +3060,10,20,30,40,50,60 +3070,10,20,30,40,50,60 +3080,10,20,30,40,50,60 +3090,10,20,30,40,50,60 +3100,10,20,30,40,50,60 +3110,10,20,30,40,50,60 +3120,10,20,30,40,50,60 +3130,10,20,30,40,50,60 +3140,10,20,30,40,50,60 +3150,10,20,30,40,50,60 +3160,10,20,30,40,50,60 +3170,10,20,30,40,50,60 +3180,10,20,30,40,50,60 +3190,10,20,30,40,50,60 +3200,10,20,30,40,50,60 +3210,10,20,30,40,50,60 +3220,10,20,30,40,50,60 +3230,10,20,30,40,50,60 +3240,10,20,30,40,50,60 +3250,10,20,30,40,50,60 +3260,10,20,30,40,50,60 +3270,10,20,30,40,50,60 +3280,10,20,30,40,50,60 +3290,10,20,30,40,50,60 +3300,10,20,30,40,50,60 +3310,10,20,30,40,50,60 +3320,10,20,30,40,50,60 +3330,10,20,30,40,50,60 +3340,10,20,30,40,50,60 +3350,10,20,30,40,50,60 +3360,10,20,30,40,50,60 +3370,10,20,30,40,50,60 +3380,10,20,30,40,50,60 +3390,10,20,30,40,50,60 +3400,10,20,30,40,50,60 +3410,10,20,30,40,50,60 +3420,10,20,30,40,50,60 +3430,10,20,30,40,50,60 +3440,10,20,30,40,50,60 +3450,10,20,30,40,50,60 +3460,10,20,30,40,50,60 +3470,10,20,30,40,50,60 +3480,10,20,30,40,50,60 +3490,10,20,30,40,50,60 +3500,10,20,30,40,50,60 +3510,10,20,30,40,50,60 +3520,10,20,30,40,50,60 +3530,10,20,30,40,50,60 +3540,10,20,30,40,50,60 +3550,10,20,30,40,50,60 +3560,10,20,30,40,50,60 +3570,10,20,30,40,50,60 +3580,10,20,30,40,50,60 +3590,10,20,30,40,50,60 +3600,10,20,30,40,50,60 +3610,10,20,30,40,50,60 +3620,10,20,30,40,50,60 +3630,10,20,30,40,50,60 +3640,10,20,30,40,50,60 +3650,10,20,30,40,50,60 +3660,10,20,30,40,50,60 +3670,10,20,30,40,50,60 +3680,10,20,30,40,50,60 +3690,10,20,30,40,50,60 +3700,10,20,30,40,50,60 +3710,10,20,30,40,50,60 +3720,10,20,30,40,50,60 +3730,10,20,30,40,50,60 +3740,10,20,30,40,50,60 +3750,10,20,30,40,50,60 +3760,10,20,30,40,50,60 +3770,10,20,30,40,50,60 +3780,10,20,30,40,50,60 +3790,10,20,30,40,50,60 +3800,10,20,30,40,50,60 +3810,10,20,30,40,50,60 +3820,10,20,30,40,50,60 +3830,10,20,30,40,50,60 +3840,10,20,30,40,50,60 +3850,10,20,30,40,50,60 +3860,10,20,30,40,50,60 +3870,10,20,30,40,50,60 +3880,10,20,30,40,50,60 +3890,10,20,30,40,50,60 +3900,10,20,30,40,50,60 +3910,10,20,30,40,50,60 +3920,10,20,30,40,50,60 +3930,10,20,30,40,50,60 +3940,10,20,30,40,50,60 +3950,10,20,30,40,50,60 +3960,10,20,30,40,50,60 +3970,10,20,30,40,50,60 +3980,10,20,30,40,50,60 +3990,10,20,30,40,50,60 +4000,10,20,30,40,50,60 +4010,10,20,30,40,50,60 +4020,10,20,30,40,50,60 +4030,10,20,30,40,50,60 +4040,10,20,30,40,50,60 +4050,10,20,30,40,50,60 +4060,10,20,30,40,50,60 +4070,10,20,30,40,50,60 +4080,10,20,30,40,50,60 +4090,10,20,30,40,50,60 +4100,10,20,30,40,50,60 +4110,10,20,30,40,50,60 +4120,10,20,30,40,50,60 +4130,10,20,30,40,50,60 +4140,10,20,30,40,50,60 +4150,10,20,30,40,50,60 +4160,10,20,30,40,50,60 +4170,10,20,30,40,50,60 +4180,10,20,30,40,50,60 +4190,10,20,30,40,50,60 +4200,10,20,30,40,50,60 +4210,10,20,30,40,50,60 +4220,10,20,30,40,50,60 +4230,10,20,30,40,50,60 +4240,10,20,30,40,50,60 +4250,10,20,30,40,50,60 +4260,10,20,30,40,50,60 +4270,10,20,30,40,50,60 +4280,10,20,30,40,50,60 +4290,10,20,30,40,50,60 +4300,10,20,30,40,50,60 +4310,10,20,30,40,50,60 +4320,10,20,30,40,50,60 +4330,10,20,30,40,50,60 +4340,10,20,30,40,50,60 +4350,10,20,30,40,50,60 +4360,10,20,30,40,50,60 +4370,10,20,30,40,50,60 +4380,10,20,30,40,50,60 +4390,10,20,30,40,50,60 +4400,10,20,30,40,50,60 +4410,10,20,30,40,50,60 +4420,10,20,30,40,50,60 +4430,10,20,30,40,50,60 +4440,10,20,30,40,50,60 +4450,10,20,30,40,50,60 +4460,10,20,30,40,50,60 +4470,10,20,30,40,50,60 +4480,10,20,30,40,50,60 +4490,10,20,30,40,50,60 +4500,10,20,30,40,50,60 +4510,10,20,30,40,50,60 +4520,10,20,30,40,50,60 +4530,10,20,30,40,50,60 +4540,10,20,30,40,50,60 +4550,10,20,30,40,50,60 +4560,10,20,30,40,50,60 +4570,10,20,30,40,50,60 +4580,10,20,30,40,50,60 +4590,10,20,30,40,50,60 +4600,10,20,30,40,50,60 +4610,10,20,30,40,50,60 +4620,10,20,30,40,50,60 +4630,10,20,30,40,50,60 +4640,10,20,30,40,50,60 +4650,10,20,30,40,50,60 +4660,10,20,30,40,50,60 +4670,10,20,30,40,50,60 +4680,10,20,30,40,50,60 +4690,10,20,30,40,50,60 +4700,10,20,30,40,50,60 +4710,10,20,30,40,50,60 +4720,10,20,30,40,50,60 +4730,10,20,30,40,50,60 +4740,10,20,30,40,50,60 +4750,10,20,30,40,50,60 +4760,10,20,30,40,50,60 +4770,10,20,30,40,50,60 +4780,10,20,30,40,50,60 +4790,10,20,30,40,50,60 +4800,10,20,30,40,50,60 +4810,10,20,30,40,50,60 +4820,10,20,30,40,50,60 +4830,10,20,30,40,50,60 +4840,10,20,30,40,50,60 +4850,10,20,30,40,50,60 +4860,10,20,30,40,50,60 +4870,10,20,30,40,50,60 +4880,10,20,30,40,50,60 +4890,10,20,30,40,50,60 +4900,10,20,30,40,50,60 +4910,10,20,30,40,50,60 +4920,10,20,30,40,50,60 +4930,10,20,30,40,50,60 +4940,10,20,30,40,50,60 +4950,10,20,30,40,50,60 +4960,10,20,30,40,50,60 +4970,10,20,30,40,50,60 +4980,10,20,30,40,50,60 +4990,10,20,30,40,50,60 +5000,10,20,30,40,50,60 +5010,10,20,30,40,50,60 +5020,10,20,30,40,50,60 +5030,10,20,30,40,50,60 +5040,10,20,30,40,50,60 +5050,10,20,30,40,50,60 +5060,10,20,30,40,50,60 +5070,10,20,30,40,50,60 +5080,10,20,30,40,50,60 +5090,10,20,30,40,50,60 +5100,10,20,30,40,50,60 +5110,10,20,30,40,50,60 +5120,10,20,30,40,50,60 +5130,10,20,30,40,50,60 +5140,10,20,30,40,50,60 +5150,10,20,30,40,50,60 +5160,10,20,30,40,50,60 +5170,10,20,30,40,50,60 +5180,10,20,30,40,50,60 +5190,10,20,30,40,50,60 +5200,10,20,30,40,50,60 +5210,10,20,30,40,50,60 +5220,10,20,30,40,50,60 +5230,10,20,30,40,50,60 +5240,10,20,30,40,50,60 +5250,10,20,30,40,50,60 +5260,10,20,30,40,50,60 +5270,10,20,30,40,50,60 +5280,10,20,30,40,50,60 +5290,10,20,30,40,50,60 +5300,10,20,30,40,50,60 +5310,10,20,30,40,50,60 +5320,10,20,30,40,50,60 +5330,10,20,30,40,50,60 +5340,10,20,30,40,50,60 +5350,10,20,30,40,50,60 +5360,10,20,30,40,50,60 +5370,10,20,30,40,50,60 +5380,10,20,30,40,50,60 +5390,10,20,30,40,50,60 +5400,10,20,30,40,50,60 +5410,10,20,30,40,50,60 +5420,10,20,30,40,50,60 +5430,10,20,30,40,50,60 +5440,10,20,30,40,50,60 +5450,10,20,30,40,50,60 +5460,10,20,30,40,50,60 +5470,10,20,30,40,50,60 +5480,10,20,30,40,50,60 +5490,10,20,30,40,50,60 +5500,10,20,30,40,50,60 +5510,10,20,30,40,50,60 +5520,10,20,30,40,50,60 +5530,10,20,30,40,50,60 +5540,10,20,30,40,50,60 +5550,10,20,30,40,50,60 +5560,10,20,30,40,50,60 +5570,10,20,30,40,50,60 +5580,10,20,30,40,50,60 +5590,10,20,30,40,50,60 +5600,10,20,30,40,50,60 +5610,10,20,30,40,50,60 +5620,10,20,30,40,50,60 +5630,10,20,30,40,50,60 +5640,10,20,30,40,50,60 +5650,10,20,30,40,50,60 +5660,10,20,30,40,50,60 +5670,10,20,30,40,50,60 +5680,10,20,30,40,50,60 +5690,10,20,30,40,50,60 +5700,10,20,30,40,50,60 +5710,10,20,30,40,50,60 +5720,10,20,30,40,50,60 +5730,10,20,30,40,50,60 +5740,10,20,30,40,50,60 +5750,10,20,30,40,50,60 +5760,10,20,30,40,50,60 +5770,10,20,30,40,50,60 +5780,10,20,30,40,50,60 +5790,10,20,30,40,50,60 +5800,10,20,30,40,50,60 +5810,10,20,30,40,50,60 +5820,10,20,30,40,50,60 +5830,10,20,30,40,50,60 +5840,10,20,30,40,50,60 +5850,10,20,30,40,50,60 +5860,10,20,30,40,50,60 +5870,10,20,30,40,50,60 +5880,10,20,30,40,50,60 +5890,10,20,30,40,50,60 +5900,10,20,30,40,50,60 +5910,10,20,30,40,50,60 +5920,10,20,30,40,50,60 +5930,10,20,30,40,50,60 +5940,10,20,30,40,50,60 +5950,10,20,30,40,50,60 +5960,10,20,30,40,50,60 +5970,10,20,30,40,50,60 +5980,10,20,30,40,50,60 +5990,10,20,30,40,50,60 +6000,10,20,30,40,50,60 +6010,10,20,30,40,50,60 +6020,10,20,30,40,50,60 +6030,10,20,30,40,50,60 +6040,10,20,30,40,50,60 +6050,10,20,30,40,50,60 +6060,10,20,30,40,50,60 +6070,10,20,30,40,50,60 +6080,10,20,30,40,50,60 +6090,10,20,30,40,50,60 +6100,10,20,30,40,50,60 +6110,10,20,30,40,50,60 +6120,10,20,30,40,50,60 +6130,10,20,30,40,50,60 +6140,10,20,30,40,50,60 +6150,10,20,30,40,50,60 +6160,10,20,30,40,50,60 +6170,10,20,30,40,50,60 +6180,10,20,30,40,50,60 +6190,10,20,30,40,50,60 +6200,10,20,30,40,50,60 +6210,10,20,30,40,50,60 +6220,10,20,30,40,50,60 +6230,10,20,30,40,50,60 +6240,10,20,30,40,50,60 +6250,10,20,30,40,50,60 +6260,10,20,30,40,50,60 +6270,10,20,30,40,50,60 +6280,10,20,30,40,50,60 +6290,10,20,30,40,50,60 +6300,10,20,30,40,50,60 +6310,10,20,30,40,50,60 +6320,10,20,30,40,50,60 +6330,10,20,30,40,50,60 +6340,10,20,30,40,50,60 +6350,10,20,30,40,50,60 +6360,10,20,30,40,50,60 +6370,10,20,30,40,50,60 +6380,10,20,30,40,50,60 +6390,10,20,30,40,50,60 +6400,10,20,30,40,50,60 +6410,10,20,30,40,50,60 +6420,10,20,30,40,50,60 +6430,10,20,30,40,50,60 +6440,10,20,30,40,50,60 +6450,10,20,30,40,50,60 +6460,10,20,30,40,50,60 +6470,10,20,30,40,50,60 +6480,10,20,30,40,50,60 +6490,10,20,30,40,50,60 +6500,10,20,30,40,50,60 +6510,10,20,30,40,50,60 +6520,10,20,30,40,50,60 +6530,10,20,30,40,50,60 +6540,10,20,30,40,50,60 +6550,10,20,30,40,50,60 +6560,10,20,30,40,50,60 +6570,10,20,30,40,50,60 +6580,10,20,30,40,50,60 +6590,10,20,30,40,50,60 +6600,10,20,30,40,50,60 +6610,10,20,30,40,50,60 +6620,10,20,30,40,50,60 +6630,10,20,30,40,50,60 +6640,10,20,30,40,50,60 +6650,10,20,30,40,50,60 +6660,10,20,30,40,50,60 +6670,10,20,30,40,50,60 +6680,10,20,30,40,50,60 +6690,10,20,30,40,50,60 +6700,10,20,30,40,50,60 +6710,10,20,30,40,50,60 +6720,10,20,30,40,50,60 +6730,10,20,30,40,50,60 +6740,10,20,30,40,50,60 +6750,10,20,30,40,50,60 +6760,10,20,30,40,50,60 +6770,10,20,30,40,50,60 +6780,10,20,30,40,50,60 +6790,10,20,30,40,50,60 +6800,10,20,30,40,50,60 +6810,10,20,30,40,50,60 +6820,10,20,30,40,50,60 +6830,10,20,30,40,50,60 +6840,10,20,30,40,50,60 +6850,10,20,30,40,50,60 +6860,10,20,30,40,50,60 +6870,10,20,30,40,50,60 +6880,10,20,30,40,50,60 +6890,10,20,30,40,50,60 +6900,10,20,30,40,50,60 +6910,10,20,30,40,50,60 +6920,10,20,30,40,50,60 +6930,10,20,30,40,50,60 +6940,10,20,30,40,50,60 +6950,10,20,30,40,50,60 +6960,10,20,30,40,50,60 +6970,10,20,30,40,50,60 +6980,10,20,30,40,50,60 +6990,10,20,30,40,50,60 +7000,10,20,30,40,50,60 +7010,10,20,30,40,50,60 +7020,10,20,30,40,50,60 +7030,10,20,30,40,50,60 +7040,10,20,30,40,50,60 +7050,10,20,30,40,50,60 +7060,10,20,30,40,50,60 +7070,10,20,30,40,50,60 +7080,10,20,30,40,50,60 +7090,10,20,30,40,50,60 +7100,10,20,30,40,50,60 +7110,10,20,30,40,50,60 +7120,10,20,30,40,50,60 +7130,10,20,30,40,50,60 +7140,10,20,30,40,50,60 +7150,10,20,30,40,50,60 +7160,10,20,30,40,50,60 +7170,10,20,30,40,50,60 +7180,10,20,30,40,50,60 +7190,10,20,30,40,50,60 +7200,10,20,30,40,50,60 +7210,10,20,30,40,50,60 +7220,10,20,30,40,50,60 +7230,10,20,30,40,50,60 +7240,10,20,30,40,50,60 +7250,10,20,30,40,50,60 +7260,10,20,30,40,50,60 +7270,10,20,30,40,50,60 +7280,10,20,30,40,50,60 +7290,10,20,30,40,50,60 +7300,10,20,30,40,50,60 +7310,10,20,30,40,50,60 +7320,10,20,30,40,50,60 +7330,10,20,30,40,50,60 +7340,10,20,30,40,50,60 +7350,10,20,30,40,50,60 +7360,10,20,30,40,50,60 +7370,10,20,30,40,50,60 +7380,10,20,30,40,50,60 +7390,10,20,30,40,50,60 +7400,10,20,30,40,50,60 +7410,10,20,30,40,50,60 +7420,10,20,30,40,50,60 +7430,10,20,30,40,50,60 +7440,10,20,30,40,50,60 +7450,10,20,30,40,50,60 +7460,10,20,30,40,50,60 +7470,10,20,30,40,50,60 +7480,10,20,30,40,50,60 +7490,10,20,30,40,50,60 +7500,10,20,30,40,50,60 +7510,10,20,30,40,50,60 +7520,10,20,30,40,50,60 +7530,10,20,30,40,50,60 +7540,10,20,30,40,50,60 +7550,10,20,30,40,50,60 +7560,10,20,30,40,50,60 +7570,10,20,30,40,50,60 +7580,10,20,30,40,50,60 +7590,10,20,30,40,50,60 +7600,10,20,30,40,50,60 +7610,10,20,30,40,50,60 +7620,10,20,30,40,50,60 +7630,10,20,30,40,50,60 +7640,10,20,30,40,50,60 +7650,10,20,30,40,50,60 +7660,10,20,30,40,50,60 +7670,10,20,30,40,50,60 +7680,10,20,30,40,50,60 +7690,10,20,30,40,50,60 +7700,10,20,30,40,50,60 +7710,10,20,30,40,50,60 +7720,10,20,30,40,50,60 +7730,10,20,30,40,50,60 +7740,10,20,30,40,50,60 +7750,10,20,30,40,50,60 +7760,10,20,30,40,50,60 +7770,10,20,30,40,50,60 +7780,10,20,30,40,50,60 +7790,10,20,30,40,50,60 +7800,10,20,30,40,50,60 +7810,10,20,30,40,50,60 +7820,10,20,30,40,50,60 +7830,10,20,30,40,50,60 +7840,10,20,30,40,50,60 +7850,10,20,30,40,50,60 +7860,10,20,30,40,50,60 +7870,10,20,30,40,50,60 +7880,10,20,30,40,50,60 +7890,10,20,30,40,50,60 +7900,10,20,30,40,50,60 +7910,10,20,30,40,50,60 +7920,10,20,30,40,50,60 +7930,10,20,30,40,50,60 +7940,10,20,30,40,50,60 +7950,10,20,30,40,50,60 +7960,10,20,30,40,50,60 +7970,10,20,30,40,50,60 +7980,10,20,30,40,50,60 +7990,10,20,30,40,50,60 +8000,10,20,30,40,50,60 +8010,10,20,30,40,50,60 +8020,10,20,30,40,50,60 +8030,10,20,30,40,50,60 +8040,10,20,30,40,50,60 +8050,10,20,30,40,50,60 +8060,10,20,30,40,50,60 +8070,10,20,30,40,50,60 +8080,10,20,30,40,50,60 +8090,10,20,30,40,50,60 +8100,10,20,30,40,50,60 +8110,10,20,30,40,50,60 +8120,10,20,30,40,50,60 +8130,10,20,30,40,50,60 +8140,10,20,30,40,50,60 +8150,10,20,30,40,50,60 +8160,10,20,30,40,50,60 +8170,10,20,30,40,50,60 +8180,10,20,30,40,50,60 +8190,10,20,30,40,50,60 +8200,10,20,30,40,50,60 +8210,10,20,30,40,50,60 +8220,10,20,30,40,50,60 +8230,10,20,30,40,50,60 +8240,10,20,30,40,50,60 +8250,10,20,30,40,50,60 +8260,10,20,30,40,50,60 +8270,10,20,30,40,50,60 +8280,10,20,30,40,50,60 +8290,10,20,30,40,50,60 +8300,10,20,30,40,50,60 +8310,10,20,30,40,50,60 +8320,10,20,30,40,50,60 +8330,10,20,30,40,50,60 +8340,10,20,30,40,50,60 +8350,10,20,30,40,50,60 +8360,10,20,30,40,50,60 +8370,10,20,30,40,50,60 +8380,10,20,30,40,50,60 +8390,10,20,30,40,50,60 +8400,10,20,30,40,50,60 +8410,10,20,30,40,50,60 +8420,10,20,30,40,50,60 +8430,10,20,30,40,50,60 +8440,10,20,30,40,50,60 +8450,10,20,30,40,50,60 +8460,10,20,30,40,50,60 +8470,10,20,30,40,50,60 +8480,10,20,30,40,50,60 +8490,10,20,30,40,50,60 +8500,10,20,30,40,50,60 +8510,10,20,30,40,50,60 +8520,10,20,30,40,50,60 +8530,10,20,30,40,50,60 +8540,10,20,30,40,50,60 +8550,10,20,30,40,50,60 +8560,10,20,30,40,50,60 +8570,10,20,30,40,50,60 +8580,10,20,30,40,50,60 +8590,10,20,30,40,50,60 +8600,10,20,30,40,50,60 +8610,10,20,30,40,50,60 +8620,10,20,30,40,50,60 +8630,10,20,30,40,50,60 +8640,10,20,30,40,50,60 +8650,10,20,30,40,50,60 +8660,10,20,30,40,50,60 +8670,10,20,30,40,50,60 +8680,10,20,30,40,50,60 +8690,10,20,30,40,50,60 +8700,10,20,30,40,50,60 +8710,10,20,30,40,50,60 +8720,10,20,30,40,50,60 +8730,10,20,30,40,50,60 +8740,10,20,30,40,50,60 +8750,10,20,30,40,50,60 +8760,10,20,30,40,50,60 +8770,10,20,30,40,50,60 +8780,10,20,30,40,50,60 +8790,10,20,30,40,50,60 +8800,10,20,30,40,50,60 +8810,10,20,30,40,50,60 +8820,10,20,30,40,50,60 +8830,10,20,30,40,50,60 +8840,10,20,30,40,50,60 +8850,10,20,30,40,50,60 +8860,10,20,30,40,50,60 +8870,10,20,30,40,50,60 +8880,10,20,30,40,50,60 +8890,10,20,30,40,50,60 +8900,10,20,30,40,50,60 +8910,10,20,30,40,50,60 +8920,10,20,30,40,50,60 +8930,10,20,30,40,50,60 +8940,10,20,30,40,50,60 +8950,10,20,30,40,50,60 +8960,10,20,30,40,50,60 +8970,10,20,30,40,50,60 +8980,10,20,30,40,50,60 +8990,10,20,30,40,50,60 +9000,10,20,30,40,50,60 +9010,10,20,30,40,50,60 +9020,10,20,30,40,50,60 +9030,10,20,30,40,50,60 +9040,10,20,30,40,50,60 +9050,10,20,30,40,50,60 +9060,10,20,30,40,50,60 +9070,10,20,30,40,50,60 +9080,10,20,30,40,50,60 +9090,10,20,30,40,50,60 +9100,10,20,30,40,50,60 +9110,10,20,30,40,50,60 +9120,10,20,30,40,50,60 +9130,10,20,30,40,50,60 +9140,10,20,30,40,50,60 +9150,10,20,30,40,50,60 +9160,10,20,30,40,50,60 +9170,10,20,30,40,50,60 +9180,10,20,30,40,50,60 +9190,10,20,30,40,50,60 +9200,10,20,30,40,50,60 +9210,10,20,30,40,50,60 +9220,10,20,30,40,50,60 +9230,10,20,30,40,50,60 +9240,10,20,30,40,50,60 +9250,10,20,30,40,50,60 +9260,10,20,30,40,50,60 +9270,10,20,30,40,50,60 +9280,10,20,30,40,50,60 +9290,10,20,30,40,50,60 +9300,10,20,30,40,50,60 +9310,10,20,30,40,50,60 +9320,10,20,30,40,50,60 +9330,10,20,30,40,50,60 +9340,10,20,30,40,50,60 +9350,10,20,30,40,50,60 +9360,10,20,30,40,50,60 +9370,10,20,30,40,50,60 +9380,10,20,30,40,50,60 +9390,10,20,30,40,50,60 +9400,10,20,30,40,50,60 +9410,10,20,30,40,50,60 +9420,10,20,30,40,50,60 +9430,10,20,30,40,50,60 +9440,10,20,30,40,50,60 +9450,10,20,30,40,50,60 +9460,10,20,30,40,50,60 +9470,10,20,30,40,50,60 +9480,10,20,30,40,50,60 +9490,10,20,30,40,50,60 +9500,10,20,30,40,50,60 +9510,10,20,30,40,50,60 +9520,10,20,30,40,50,60 +9530,10,20,30,40,50,60 +9540,10,20,30,40,50,60 +9550,10,20,30,40,50,60 +9560,10,20,30,40,50,60 +9570,10,20,30,40,50,60 +9580,10,20,30,40,50,60 +9590,10,20,30,40,50,60 +9600,10,20,30,40,50,60 +9610,10,20,30,40,50,60 +9620,10,20,30,40,50,60 +9630,10,20,30,40,50,60 +9640,10,20,30,40,50,60 +9650,10,20,30,40,50,60 +9660,10,20,30,40,50,60 +9670,10,20,30,40,50,60 +9680,10,20,30,40,50,60 +9690,10,20,30,40,50,60 +9700,10,20,30,40,50,60 +9710,10,20,30,40,50,60 +9720,10,20,30,40,50,60 +9730,10,20,30,40,50,60 +9740,10,20,30,40,50,60 +9750,10,20,30,40,50,60 +9760,10,20,30,40,50,60 +9770,10,20,30,40,50,60 +9780,10,20,30,40,50,60 +9790,10,20,30,40,50,60 +9800,10,20,30,40,50,60 +9810,10,20,30,40,50,60 +9820,10,20,30,40,50,60 +9830,10,20,30,40,50,60 +9840,10,20,30,40,50,60 +9850,10,20,30,40,50,60 +9860,10,20,30,40,50,60 +9870,10,20,30,40,50,60 +9880,10,20,30,40,50,60 +9890,10,20,30,40,50,60 +9900,10,20,30,40,50,60 +9910,10,20,30,40,50,60 +9920,10,20,30,40,50,60 +9930,10,20,30,40,50,60 +9940,10,20,30,40,50,60 +9950,10,20,30,40,50,60 +9960,10,20,30,40,50,60 +9970,10,20,30,40,50,60 +9980,10,20,30,40,50,60 +9981,11,21,31,41,51,61 +9982,12,22,32,42,52,62 +9983,13,23,33,43,53,63 +9984,14,24,34,44,54,64 +9985,15,25,35,45,55,65 +9986,16,26,36,46,56,66 +9987,17,27,37,47,57,67 +9988,18,28,38,48,58,68 +9989,19,29,39,49,59,69 +9990,20,30,40,50,60,70 +9991,21,31,41,51,61,71 +9992,22,32,42,52,62,72 +9993,23,33,43,53,63,73 +9994,24,34,44,54,64,74 +9995,25,35,45,55,65,75 +9996,26,36,46,56,66,76 +9997,27,37,47,57,67,77 +9998,28,38,48,58,68,78 +9999,29,39,49,59,69,79 +10000,30,40,50,60,70,80 +10001,31,41,51,61,71,81 +10002,32,42,52,62,72,82 diff --git a/EC-GN-JA-PCF/.svn/pristine/d3/d319b38075ac787db211d8b37636f916cd37864b.svn-base b/EC-GN-JA-PCF/.svn/pristine/d3/d319b38075ac787db211d8b37636f916cd37864b.svn-base new file mode 100644 index 0000000..3bcbb4d --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/d3/d319b38075ac787db211d8b37636f916cd37864b.svn-base @@ -0,0 +1,165 @@ +#ifndef CA_IF_H +#define CA_IF_H + +/****************************************************************************** + * $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-log-lib/trunk/src/main/c++/include/tools/any-type.h $ + * $Id: any-type.h 50547 2014-10-09 12:09:51Z bauvirb $ + * + * Project : CODAC Core System + * + * Description : Channel Access Interface + * + * Author : Bertrand Bauvir + * + * Copyright (c) : 2010-2014 ITER Organization, + * CS 90 046 + * 13067 St. Paul-lez-Durance Cedex + * France + * + * This file is part of ITER CODAC software. + * For the terms and conditions of redistribution or use of this software + * refer to the file ITER-LICENSE.TXT located in the top level directory + * of the distribution package. + ******************************************************************************/ + +/* Global header files */ +#include +#include /* Channel Access API definition, etc. */ +//#include /* CCS logging library */ + +/* Local header files */ + +/* Constants */ + +#ifndef log_trace +#define log_trace(arg_msg...) {} +#endif + +#ifndef log_error +#define log_error(arg_msg...){} +#endif + +/* Type definition */ + +/* Global variables */ + +/* Public function declaration */ + +static inline bool CAInterface_Initialize(void) { + bool status = false; + ca_context_create (ca_disable_preemptive_callback); //Default + //ca_context_create(ca_enable_preemptive_callback); + status = true; + + return status; +}; + +static inline bool CAInterface_Finalize(void) { + bool status = false; + ca_context_destroy(); + status = true; + + return status; +}; + +static inline bool CAInterface_ConnectVariable(char* name, chid& id) { + bool status = false; + /* Connect to channels */ + if (ca_create_channel(name, NULL, NULL, 10, &id) != ECA_NORMAL) { + return status; + } + + /* Wait for connections */ + if (ca_pend_io(1) != ECA_NORMAL) { + log_error("%s - ca_pend_io failed", __FUNCTION__); + return status; + } + + /* Verify channel */ + if (ca_state(id) != cs_conn) { + //log_warning("Connection to channel '%s' has not been successful", name); + } else { + //log_info("Connection to channel '%s' has been successfully verified", name); + } + + status = true; + + return status; +}; + +static inline bool CAInterface_ReadVariable(chid channel, chtype type, + void* p_value) { + bool status = false; + if (ca_state(channel) != cs_conn) { + //log_error("%s - Connection to channel has been lost"); + return status; + } + + if (ca_get(type, channel, p_value) != ECA_NORMAL) { + //log_error("%s - ca_get failed", __FUNCTION__); + return status; + } + + /* Flush the requests */ + if (ca_pend_io(1) != ECA_NORMAL) { + //log_error("%s - ca_pend_io failed", __FUNCTION__); + return status; + } + + status = true; + + return status; +}; + +static inline bool CAInterface_WriteVariable(chid channel, chtype type, + void* p_value) { + bool status = false; + + if (ca_state(channel) != cs_conn) { + //log_error("%s - Connection to channel has been lost", __FUNCTION__); + return status; + } + + if (ca_put(type, channel, p_value) != ECA_NORMAL) { + //log_warning("%s - ca_put failed", __FUNCTION__); + } + + /* Flush the requests */ + if (ca_pend_io(1) != ECA_NORMAL) { + //log_error("%s - ca_pend_io failed", __FUNCTION__); + return status; + } + + status = true; + + return status; +}; + +typedef void (*pCallBack)(struct event_handler_args); + +static inline bool CAInterface_SubscribeVariable(chid channel, chtype type, + pCallBack cb_func, void* p_value) { + bool status = false; + if (ca_state(channel) != cs_conn) { + //log_error("%s - Connection to channel has been lost", __FUNCTION__); + return status; + } + + if (ca_create_subscription(type, 0, channel, DBE_VALUE, cb_func, NULL, NULL) + != ECA_NORMAL) { + //log_error("%s - ca_create_subscription failed", __FUNCTION__); + return status; + + } + /* + if(ca_pend_event(0.0) != ECA_NORMAL){ + //log_error("%s - ca_pend_event failed", __FUNCTION__); + return status; + } + */ + status = true; + + return status; +}; + +#endif /* CA_IF_H */ diff --git a/EC-GN-JA-PCF/.svn/pristine/d5/d5b600e8557a0ab7f71c73eb227710b912f26fdd.svn-base b/EC-GN-JA-PCF/.svn/pristine/d5/d5b600e8557a0ab7f71c73eb227710b912f26fdd.svn-base new file mode 100644 index 0000000..ae4a27b --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/d5/d5b600e8557a0ab7f71c73eb227710b912f26fdd.svn-base @@ -0,0 +1,249 @@ +// +LoggerService = { +// Class = LoggerService +// CPUs = 0x1 +// StackSize = 32768 +// NumberOfLogPages = 128 +// +ConLogger = { +// Class = ConsoleLogger +// Format = "EtOoFmC" +// PrintKeys = 1 +// } +// } ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +START = { + Class = StateMachineEvent + NextState = "RUNNING" + NextStateError = "ERROR" + +PrepareNextStateOnOurRTApp = { + Class = Message + Destination = MyDemoApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = State1 + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = MyDemoApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +RUNNING = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = RUNNING + NextStateError = ERROR + } + } + +ERROR = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = ERROR + NextStateError = ERROR + } + } +} ++MyDemoApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + +GAMTimer = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = Timer + Type = uint32 + } + Counter = { + DataSource = Timer + Type = uint32 + Frequency = 1 //in Hz. Cycle for one state execution. + } + RTThreadPerf = { + DataSource = Timings + Alias = "State1.Thread1_CycleTime" + Type = uint32 + } + } + OutputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerf = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PV2DDB1 = { + Class = IOGAM + InputSignals = { + AiValue = { + DataSource = EPICSCAInput + Type = float32 + } + LongInValue = { + DataSource = EPICSCAInput + Type = uint32 + } + StringInValue = { + DataSource = EPICSCAInput + Type = char8 + NumberOfElements = 40 + } + } + OutputSignals = { + AValue = { + DataSource = DDB1 + Type = float32 + } + LValue = { + DataSource = DDB1 + Type = uint32 + } + SValue = { + DataSource = DDB1 + Type = char8 + NumberOfElements = 40 + } + } + } + +DDB12PV = { + Class = IOGAM + InputSignals = { + AValue = { + DataSource = DDB1 + Type = float32 + } + LValue = { + DataSource = DDB1 + Type = uint32 + } + SValue = { + DataSource = DDB1 + Type = char8 + NumberOfElements = 40 + } + } + OutputSignals = { + AoValue = { + DataSource = EPICSCAOutput + Type = float32 + } + LongOutValue = { + DataSource = EPICSCAOutput + Type = uint32 + } + StringOutValue = { + DataSource = EPICSCAOutput + Type = char8 + NumberOfElements = 40 + } + } + } + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + } + +Timer = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 0 + ExecutionMode = RealTimeThread + CPUMask = 0x1 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + +EPICSCAInput = { + //Class = "EPICSCA::EPICSCAInput" + Class = "JAEPICSCA::JAEPICSCAInput" + CPUMask = "1" + StackSize = "10000000" + Signals = { + AiValue = { + PVName = "ai" + Type = float32 + } + LongInValue = { + PVName = "longin" + Type = uint32 + } + StringInValue = { + PVName = "stringin" + Type = char8 + NumberOfElements = 40 + } + } + } + +EPICSCAOutput = { + //Class = "EPICSCA::EPICSCAOutput" + Class = "JAEPICSCA::JAEPICSCAOutput" + CPUMask = "1" + StackSize = "10000000" + NumberOfBuffers = 2 + Signals = { + AoValue = { + PVName = "ao" + Type = float32 + } + LongOutValue = { + PVName = "longout" + Type = uint32 + } + StringOutValue = { + PVName = "stringout" + Type = char8 + NumberOfElements = 40 + } + } + } + +Display = { + Class = LoggerDataSource + } + +Timings = { + Class = TimingDataSource + } + } + +States = { + Class = ReferenceContainer + +State1 = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {GAMTimer PV2DDB1 DDB12PV} + CPUMask = 0x1 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} + diff --git a/EC-GN-JA-PCF/.svn/pristine/d8/d820ae71e21c99c88d92ed2da5cf4f1352cde446.svn-base b/EC-GN-JA-PCF/.svn/pristine/d8/d820ae71e21c99c88d92ed2da5cf4f1352cde446.svn-base new file mode 100644 index 0000000..6b73f87 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/d8/d820ae71e21c99c88d92ed2da5cf4f1352cde446.svn-base @@ -0,0 +1,57 @@ +TOP=../.. + +include $(TOP)/configure/CONFIG +#---------------------------------------- +# ADD MACRO DEFINITIONS AFTER THIS LINE +#======================================== + +#======================================== +# Build the IOC application + +PROD_IOC = EC-GN +# EC-GN.dbd will be created and installed +DBD += EC-GN.dbd + +# EC-GN.dbd will be made up from these files: +-include $(EPICS_ROOT)/mk/codac-common.mk + + +# Add all the support libraries needed by this IOC + +EC-GN_DBD += $(CODAC_DBD) +EC-GN_LIBS += $(CODAC_LIBS) + +# # SNCSEQ +# _SNCFLAGS += +r -c +d +# EC-GN_DBD += .dbd +# EC-GN_SRCS += .stt +# EC-GN_LIBS += seq pv + + +# EC-GN_registerRecordDeviceDriver.cpp derives from EC-GN.dbd +EC-GN_SRCS += EC-GN_registerRecordDeviceDriver.cpp + +# Build the main IOC entry point on workstation OSs. +EC-GN_SRCS_DEFAULT += EC-GNMain.cpp +EC-GN_SRCS_vxWorks += -nil- + +# Add support from base/src/vxWorks if needed +#EC-GN_OBJS_vxWorks += $(EPICS_BASE_BIN)/vxComLibrary + +#============================= +# Include SNL program makefile snippets + +-include ../*.snlprog + +#============================= + + +# Finally link to the EPICS Base libraries +EC-GN_LIBS += $(EPICS_BASE_IOC_LIBS) + +#=========================== + +include $(TOP)/configure/RULES +#---------------------------------------- +# ADD RULES AFTER THIS LINE +#---------------------------------------- \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/da/da39a3ee5e6b4b0d3255bfef95601890afd80709.svn-base b/EC-GN-JA-PCF/.svn/pristine/da/da39a3ee5e6b4b0d3255bfef95601890afd80709.svn-base new file mode 100644 index 0000000..e69de29 diff --git a/EC-GN-JA-PCF/.svn/pristine/da/da6d368651b29b5505ee066bedb3f09c5a80e12a.svn-base b/EC-GN-JA-PCF/.svn/pristine/da/da6d368651b29b5505ee066bedb3f09c5a80e12a.svn-base new file mode 100644 index 0000000..901987c --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/da/da6d368651b29b5505ee066bedb3f09c5a80e12a.svn-base @@ -0,0 +1,2 @@ +#RULES.ioc +include $(CONFIG)/RULES.ioc diff --git a/EC-GN-JA-PCF/.svn/pristine/dc/dc260e4036a2aa463ca538dbb90838aa3928a1bf.svn-base b/EC-GN-JA-PCF/.svn/pristine/dc/dc260e4036a2aa463ca538dbb90838aa3928a1bf.svn-base new file mode 100644 index 0000000..2f1534c --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/dc/dc260e4036a2aa463ca538dbb90838aa3928a1bf.svn-base @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=RandomDataSource.x + +PACKAGE=DataSources + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/RandomDataSource$(LIBEXT) \ + $(BUILD_DIR)/RandomDataSource$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/.svn/pristine/dc/dc944d9311fea0f8b3d549f15c1f59fe0787a2e8.svn-base b/EC-GN-JA-PCF/.svn/pristine/dc/dc944d9311fea0f8b3d549f15c1f59fe0787a2e8.svn-base new file mode 100644 index 0000000..98003a2 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/dc/dc944d9311fea0f8b3d549f15c1f59fe0787a2e8.svn-base @@ -0,0 +1,295 @@ +/** + * @file JARampupGAM.cpp + * @brief Source file for class JARampupGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARampupGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "AdvancedErrorManagement.h" +#include "JARampupGAM.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARampupGAM::JARampupGAM() : GAM() { + current_setpoint = NULL_PTR(MARTe::float32 *); + target_value = NULL_PTR(MARTe::float32 *); + rampup_time = NULL_PTR(MARTe::float32 *); + start = NULL_PTR(MARTe::uint32 *); + standby = NULL_PTR(MARTe::uint32 *); + isAuto = NULL_PTR(MARTe::uint32 *); + FHPS_PrePro = NULL_PTR(MARTe::float32 *); + + output = NULL_PTR(MARTe::float32 *); + state = NULL_PTR(MARTe::uint32 *); + + rampup_rate = 0.0f; + inRampup = false; + resetFlag = true; + inWaitHVON = false; + inWaitStandby = false; +} + +JARampupGAM::~JARampupGAM() { +} + +bool JARampupGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + return GAM::Initialise(data); +} + +bool JARampupGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 7u); + if (ok) { + ok = (numberOfOutputSignals == 2u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Two output signals shall be defined."); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Six input signals shall be defined."); + } + uint32 currentspvIndex; + uint32 targetvIndex; + uint32 timeIndex; + uint32 startIndex; + uint32 standbyIndex; + uint32 isAutoIndex; + uint32 fhpsPreProIndex; + + if (ok) { + StreamString signalName = "Currspv"; + ok = GetSignalIndex(InputSignals, currentspvIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Currspv input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, currentspvIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Currspv shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Targetv"; + ok = GetSignalIndex(InputSignals, targetvIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Targetv input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, targetvIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Targetv shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Time"; + ok = GetSignalIndex(InputSignals, timeIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Time input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, timeIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Time shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Start"; + ok = GetSignalIndex(InputSignals, startIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Start input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, startIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Start shall be defined as uint32."); + } + } + } + if (ok) { + StreamString signalName = "PLC_STANDBY"; + ok = GetSignalIndex(InputSignals, standbyIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLC_STANDBY input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, standbyIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLC_STANDBY shall be defined as uint32."); + } + } + } + if (ok) { + StreamString signalName = "MANUAL_AUTO"; + ok = GetSignalIndex(InputSignals, isAutoIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "MANUAL_AUTO input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, isAutoIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "MANUAL_AUTO shall be defined as uint32."); + } + } + } + if (ok) { + StreamString signalName = "FHPS_PrePro"; + ok = GetSignalIndex(InputSignals, fhpsPreProIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "FHPS_PrePro input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, fhpsPreProIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal FHPS_PrePro shall be defined as float32."); + } + } + } + + if (ok) { + TypeDescriptor inputType = GetSignalType(OutputSignals, 0); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Output shall be defined as float32."); + } + } + if (ok) { + TypeDescriptor inputType = GetSignalType(OutputSignals, 1); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal state shall be defined as float32."); + } + } + + if (ok) { + current_setpoint = reinterpret_cast(GetInputSignalMemory(currentspvIndex)); + target_value = reinterpret_cast(GetInputSignalMemory(targetvIndex)); + rampup_time = reinterpret_cast(GetInputSignalMemory(timeIndex)); + start = reinterpret_cast(GetInputSignalMemory(startIndex)); + standby = reinterpret_cast(GetInputSignalMemory(standbyIndex)); + isAuto = reinterpret_cast(GetInputSignalMemory(isAutoIndex)); + FHPS_PrePro = reinterpret_cast(GetInputSignalMemory(fhpsPreProIndex)); + + output = reinterpret_cast(GetOutputSignalMemory(0)); + state = reinterpret_cast(GetOutputSignalMemory(1)); + } + return ok; +} + +bool JARampupGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName){ + if(strcmp(nextStateName, "WaitHVON_PREP")==0 || strcmp(nextStateName, "WaitHVON_SDN_PREP")==0 || + strcmp(nextStateName, "WaitHVON")==0 || strcmp(nextStateName, "WaitHVON_SDN")==0){ + inWaitHVON = true; + inWaitStandby = false; + } else{ + inWaitHVON = false; + if(strcmp(nextStateName,"WaitStandby")==0 ){ + inWaitStandby = true; + } else { + inWaitStandby = false; + } + } + return true; +} + +bool JARampupGAM::Execute() { + using namespace MARTe; + if(!inWaitHVON){ + if (*target_value <= 0.0f || *standby == 0u) { + *output = 0.0f; + rampup_rate = 0.0f; + if(*target_value <= 0.0f){ + *state = 3u; + } else { + *state = 0u; + } + return true; + } + + if(*start == 1u && *isAuto==0u){ //isAuto = 1.Manual, 0.auto-rampup. + inRampup = true; + resetFlag = true; + *output = 0.0f; //Enable if it should start always zero. + } + + // Calcrate new rampup rate. + if(*rampup_time != 0 && resetFlag == true){ + rampup_rate = (*target_value - *current_setpoint) / *rampup_time/1000.0f; // Volt/msec + resetFlag = false; + } + + // Update Parameter + if(*standby == 1u ){ + if(*isAuto == 1u){ + if (inWaitStandby){ + *output = *target_value; + } else{ + *output = *FHPS_PrePro; + } + //*output = *target_value; + *state = 0u; + return true; + } + else if (inRampup){ + if (*output + rampup_rate < *target_value && *rampup_time != 0){ + *output = *output + rampup_rate; + *state = 1u; + } else { + *output = *target_value; + *state = 2u; + inRampup = false; + } + } + } + return true; + } else { + if(*isAuto == 0){ + *output = *FHPS_PrePro; + } else{ + *output = *target_value; + } + return true; + } +} + +CLASS_REGISTER(JARampupGAM, "1.0") diff --git a/EC-GN-JA-PCF/.svn/pristine/dd/dd3df36f741de9cc146fa5d8218d1af0fb4908b5.svn-base b/EC-GN-JA-PCF/.svn/pristine/dd/dd3df36f741de9cc146fa5d8218d1af0fb4908b5.svn-base new file mode 100644 index 0000000..e59f3fa --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/dd/dd3df36f741de9cc146fa5d8218d1af0fb4908b5.svn-base @@ -0,0 +1,260 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARTSTATEMACHINEGAM_H_ +#define GAMS_JARTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that provides real-time state machine. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMRealTimeStateMachine = {
+ *           Class = JARTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BEAM_ON_STAT = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JARTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARTStateMachineGAM(); + + virtual ~JARTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS = 1, + RFON = 2, + HVTerminate = 3 + }; + + //The current rtState + JARealTimeState currentState; + + //A given condition + MARTe::uint32 conditionTrigger; + + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + + //Time signal + MARTe::uint32 *currentTime; + + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for short pulse mode. + MARTe::uint32 *short_pulse_mode; + + // Output signal to which the output value will be written. + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + // Added for HVPS state (20201117) + MARTe::uint32 *outputAPSHVON; + MARTe::uint32 *outputAPSSWON; + MARTe::uint32 *outputBPSHVON; + MARTe::uint32 *outputBPSSWON; + MARTe::uint32 *outputMHVPSON; + + // Output signals for NI devices + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + MARTe::uint64 apsSwonHighResolutionTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + + // terminal values + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF/.svn/pristine/dd/dda01edf690c7a29a6b5fa244fbb3da7d22be4cb.svn-base b/EC-GN-JA-PCF/.svn/pristine/dd/dda01edf690c7a29a6b5fa244fbb3da7d22be4cb.svn-base new file mode 100644 index 0000000..66c756d --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/dd/dda01edf690c7a29a6b5fa244fbb3da7d22be4cb.svn-base @@ -0,0 +1,180 @@ +record (bo,"EC-GN-P01-PB1F:PSU1000-CON-HV") +{ + field(DESC, "GY1 BPS HVON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PB1F:PSU1000-CON-SW") +{ + field(DESC, "GY1 BPS HV SWON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PB1F:PSU1000-CTRP") +{ + field(DESC, "GY1 BPS Shutdonw request") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-PB1F:PSU1000-YFLT") +{ + field(DESC, "GY1 BPS Fault") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 3) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-PB1F:PSU1000-YSTA") +{ + field(DESC, "GY1 BPS Ready") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 2) bitread") + field(ONAM, "READY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-PB1F:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 BPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (ao,"EC-GN-P01-PB1F:PSU1000-EREF") +{ + field(ASLO, "4") + field(DESC, "GY1 BPS voltage setpoint") + field(DRVH, "40") + field(DRVL, "0") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "40") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 0) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PB1F:PSU1000-EREF-MSP") +{ + field(DESC, "GY1 BPS voltage manual setpoint") + field(DRVH, "40") + field(DRVL, "0") + field(EGU, "kV") + field(HOPR, "40") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-PB1F:PSU1000-ET") +{ + field(DESC, "GY1 BPS Measured Voltage") + field(EGU, "kV") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PB1F:PSU1000-ET-WF") +{ + field(DESC, "GY1 BPS Measured Voltage") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PB1F:PSU1000-IT") +{ + field(DESC, "GY1 BPS Measured Current") + field(EGU, "A") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PB1F:PSU1000-IT-WF") +{ + field(DESC, "GY1 BPS Measured Current") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PB1F:STAT-DT-HVON") +{ + field(DESC, "Time diff to GY1 BPS Gate ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "500000") +} + +record (ai,"EC-GN-P01-PB1F:STAT-DT-SWON") +{ + field(DESC, "Time diff to GY1 BPS SW ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "550000") +} + +record (waveform,"EC-GN-P01-PB1F:STAT-PREP-WF") +{ + field(DESC, "GY1 BPS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/.svn/pristine/dd/ddad8773ee392ef8c0f08d479ac3fc9777e60f01.svn-base b/EC-GN-JA-PCF/.svn/pristine/dd/ddad8773ee392ef8c0f08d479ac3fc9777e60f01.svn-base new file mode 100644 index 0000000..e012c40 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/dd/ddad8773ee392ef8c0f08d479ac3fc9777e60f01.svn-base @@ -0,0 +1,17 @@ + +#====================================================================== +# SYS Monitor +#====================================================================== +cd $(EPICS_ROOT)/db +#dbLoadRecords("picmg-sensors.db","CBS=EC-GN-SYSM, CTRLTYPE=F, IDX=0, PP=01, PPPP=52RF, NNNN=4210, TTT=PCF") +#dbLoadRecords("sysmon.db","CBS=EC-GN-SYSM, CTRLTYPE=F, IDX=0, PP=01, PPPP=52RF, NNNN=4210, TTT=PCF") + + +#====================================================================== +# IOC Monitor +#====================================================================== +cd $(EPICS_ROOT)/db +dbLoadRecords("iocmon.db","CBS=EC-GN-SYSM, CTRLTYPE=F, IDX=0, IOCTYPE=SYSM, PP=01, PPPP=52RF, NNNN=4210, TTT=PCF") + + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/.svn/pristine/de/de09da43274ec7bd28a10842d3068f8391320552.svn-base b/EC-GN-JA-PCF/.svn/pristine/de/de09da43274ec7bd28a10842d3068f8391320552.svn-base new file mode 100644 index 0000000..b38d99d --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/de/de09da43274ec7bd28a10842d3068f8391320552.svn-base @@ -0,0 +1,29 @@ +#+====================================================================== +# $HeadURL: https://svnpub.codac.iter.org/codac/iter/codac/dev/units/m-epics-iter-templates/branches/codac-core-6.1/templates/sddconfApp/Makefile $ +# $Id: Makefile 96475 2019-01-09 13:47:38Z sivecm $ +# +# Project : CODAC Core System +# +# Description : Makefile +# +# Author(s) : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2019 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== +TOP = .. +include $(TOP)/configure/CONFIG +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *src*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *Src*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *db*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *Db*)) +include $(TOP)/configure/RULES_DIRS + diff --git a/EC-GN-JA-PCF/.svn/pristine/de/deb81eb2eaafc1b450d2c4e9891f8d64ab85a068.svn-base b/EC-GN-JA-PCF/.svn/pristine/de/deb81eb2eaafc1b450d2c4e9891f8d64ab85a068.svn-base new file mode 100644 index 0000000..b958fd0 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/de/deb81eb2eaafc1b450d2c4e9891f8d64ab85a068.svn-base @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/e0/e074104f0bb084fa70d278cebd9165b958cb09f4.svn-base b/EC-GN-JA-PCF/.svn/pristine/e0/e074104f0bb084fa70d278cebd9165b958cb09f4.svn-base new file mode 100644 index 0000000..443faa9 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/e0/e074104f0bb084fa70d278cebd9165b958cb09f4.svn-base @@ -0,0 +1,67 @@ +#!../../bin/linux-x86_64/EC-GN +#+====================================================================== +# $HeadURL: https://svnpub.codac.iter.org/codac/iter/codac/dev/units/m-epics-iter-templates/branches/codac-core-6.1/templates/genericBoot/ioc/st.cmd $ +# $Id: st.cmd 96475 2019-01-09 13:47:38Z sivecm $ +# +# Project : CODAC Core System +# +# Description : ITER ioc template EPICS start up file +# +# Author(s) : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2019 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== + +< envPaths +< envSystem +< envUser + +cd "${TOP}" + +############################################################################ +## Register all support components +############################################################################ + +dbLoadDatabase "dbd/CUB.dbd" +EC_GN_registerRecordDeviceDriver pdbbase + +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/sddPreDriverConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/userPreDriverConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/threadSchedulingConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/dbToLoad.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/iocEC-GN-PSH0CUB-preSaveRestore.cmd" + +############################################################################ +## IOC Logging +############################################################################ +iocLogInit +iocLogPrefix "${STY} : " + +############################################################################ +## IOC initialization +############################################################################ +cd "${TOP}/db" +iocInit + +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/iocEC-GN-PSH0CUB-postSaveRestore.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/sddSeqToLoad.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/seqToLoad.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/sddPostDriverConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/userPostDriverConf.cmd" + + +dbl > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbl" +dbla > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbla" +dbior > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbior" +dbhcr > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbhcr" + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/.svn/pristine/e1/e17b3fc0466760609c22ed79800279a211b6d996.svn-base b/EC-GN-JA-PCF/.svn/pristine/e1/e17b3fc0466760609c22ed79800279a211b6d996.svn-base new file mode 100644 index 0000000..52d83e4 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/e1/e17b3fc0466760609c22ed79800279a211b6d996.svn-base @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JASourceChoiseGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JASourceChoiseGAM$(LIBEXT) \ + $(BUILD_DIR)/JASourceChoiseGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/.svn/pristine/e1/e1b0e6f2dcc39a75644d36ca8ebda7a68f4d43e9.svn-base b/EC-GN-JA-PCF/.svn/pristine/e1/e1b0e6f2dcc39a75644d36ca8ebda7a68f4d43e9.svn-base new file mode 100644 index 0000000..d766295 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/e1/e1b0e6f2dcc39a75644d36ca8ebda7a68f4d43e9.svn-base @@ -0,0 +1,306 @@ +record (bo,"EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP") +{ + field(DESC, "GY2 SCM rampup comp") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-MCPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY2 MCPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-MCPS:STAT-SIMM") +{ + field(DESC, "GY2 MCPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (mbbi,"EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB") +{ + field(DESC, "GY2 MCPS read act") + field(DTYP, "stream") + field(FRST, "ZERO") + field(FRSV, "NO_ALARM") + field(FRVL, "4") + field(INP, "@JASTEC-SCMPS.proto readActivity MC2") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") + field(THST, "FLAT TOP") + field(THSV, "NO_ALARM") + field(THVL, "3") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP") +{ + field(DESC, "GY2 MCPS set ACT") + field(DTYP, "stream") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(OUT, "@JASTEC-SCMPS.proto setActivity MC2") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MI") +{ + field(DESC, "GY2 MCPS ACT set to Marte") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MO") +{ + field(DESC, "GY2 MCPS ACT Marte outputs") + field(FLNK, "EC-GN-P01-GBF-MCPS:STAT-ACT-SP-CALC") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (ai,"EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON") +{ + field(DESC, "GY2 MCPS monitored current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "125") + field(INP, "@JASTEC-SCMPS.proto readMeasCurrent MC2") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") +} + +record (waveform,"EC-GN-P01-GBF-MCPS:PSU2120-ERR") +{ + field(DESC, "GY2 MCPS read error") + field(DTYP, "stream") + field(INP, "@JASTEC-SCMPS.proto readErrStat MC2") + field(NELM, "15") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-MCPS:PSU2120-SWP-LIM") +{ + field(DESC, "GY2 MCPS read sweep limit") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readSweepLim MC2") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-MCPS:PSU2120-SWP-RB") +{ + field(DESC, "GY2 MCPS read targ sweep rate") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readTargSweep MC2") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-RB") +{ + field(DESC, "GY2 MCPS read target current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "120") + field(INP, "@JASTEC-SCMPS.proto readTargCurrent MC2") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET") +{ + field(DESC, "GY2 MCPS set target current") + field(DRVH, "120") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP") + field(HOPR, "125") + field(LOPR, "0") + field(OUT, "@JASTEC-SCMPS.proto setCurrent MC2") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MI") +{ + field(DESC, "GY2 MCPS target current input to Marte") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MO") +{ + field(DESC, "GY2 MCPS target current Marte outputs") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GBF-MCPS:STAT-TRG-CURR-SET-CALC") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-MCPS:PSU2120-TRG-SWPR-SET") +{ + field(DESC, "GY2 MCPS set target swwp rate") + field(DRVH, "5.0") + field(DRVL, "0.01") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(LOPR, "0.01") + field(OUT, "@JASTEC-SCMPS.proto setSweep MC2") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") + field(VAL, "1.69") +} + +record (ai,"EC-GN-P01-GBF-MCPS:PSU2120-VOLT-MON") +{ + field(DESC, "GY2 MCPS monitored voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "10") + field(INP, "@JASTEC-SCMPS.proto readMeasVoltage MC2") + field(LOPR, "-10") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") +} + +record (calcout,"EC-GN-P01-GBF-MCPS:STAT-ACT-SP-CALC") +{ + field(CALC, "A") + field(DESC, "MCPS#2 state set by Marte") + field(INPA, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-GBF-MCPS:STAT-PREP-WF") +{ + field(DESC, "GY2 MCPS prepro schedule") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-GBF-MCPS:STAT-RAMPUP-CMP") +{ + field(CALC, "(A==3 andand B==3)?1:0") + field(DESC, "GYB SMCPS rampup check") + field(FLNK, "EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP") + field(INPA, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB") + field(INPB, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB") + field(OOPT, "When Non-zero") + field(OUT, "EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GBF-MCPS:STAT-RAMPUP-OFF") +{ + field(CALC, "A==0?0:1") + field(DESC, "GYB MC GC rampup comp off") + field(INPA, "EC-GN-P01-GPS:PLC4110-YTS-ST1R") + field(OOPT, "When Zero") + field(OUT, "EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP PP") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GBF-MCPS:STAT-TRG-CURR-SET-CALC") +{ + field(CALC, "A") + field(DESC, "MCPS#2 current set by Marte") + field(INPA, "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET PP") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/.svn/pristine/e1/e1e36616e63e4c70302b3140c389829d49715350.svn-base b/EC-GN-JA-PCF/.svn/pristine/e1/e1e36616e63e4c70302b3140c389829d49715350.svn-base new file mode 100644 index 0000000..9bf127b --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/e1/e1e36616e63e4c70302b3140c389829d49715350.svn-base @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JARampupGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JARampupGAM$(LIBEXT) \ + $(BUILD_DIR)/JARampupGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/.svn/pristine/e3/e37a1f7ac8c50aa9f02b7243b5d3353649883620.svn-base b/EC-GN-JA-PCF/.svn/pristine/e3/e37a1f7ac8c50aa9f02b7243b5d3353649883620.svn-base new file mode 100644 index 0000000..8bb8ee7 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/e3/e37a1f7ac8c50aa9f02b7243b5d3353649883620.svn-base @@ -0,0 +1,42 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +SPB = RandomDataSource.x NI6528.x JAEPICSCA.x + +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults + +ROOT_DIR=.. +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +all: $(OBJS) $(SUBPROJ) check-env + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + +check-env: +ifndef MARTe2_DIR + $(error MARTe2_DIR is undefined) +endif + diff --git a/EC-GN-JA-PCF/.svn/pristine/e5/e558be4b9f763d656bef4bf2411a250ee2ef085c.svn-base b/EC-GN-JA-PCF/.svn/pristine/e5/e558be4b9f763d656bef4bf2411a250ee2ef085c.svn-base new file mode 100644 index 0000000..29201d0 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/e5/e558be4b9f763d656bef4bf2411a250ee2ef085c.svn-base @@ -0,0 +1,30 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc + +LIBRARIES += -L$(CODAC_ROOT)/lib/ -lpxi6528 + diff --git a/EC-GN-JA-PCF/.svn/pristine/e6/e60bff214c8e82c54b77a0e9c6b08fc1e5de2e68.svn-base b/EC-GN-JA-PCF/.svn/pristine/e6/e60bff214c8e82c54b77a0e9c6b08fc1e5de2e68.svn-base new file mode 100644 index 0000000..354029a --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/e6/e60bff214c8e82c54b77a0e9c6b08fc1e5de2e68.svn-base @@ -0,0 +1,310 @@ +record (bi,"EC-GN-P01-GBF-CCPS:PSU2320-OUTON-RB") +{ + field(DESC, "GY2 CCPS Output ON status") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getOut CCPS2") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-CCPS:PSU2320-OUTON-SP") +{ + field(DESC, "GY2 CCPS Output ON") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PWX1500ML.proto setOut CCPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-RB") +{ + field(DESC, "GY2 CCPS remote readback") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getRem CCPS2") + field(ONAM, "REM") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(ZNAM, "LOC") +} + +record (bo,"EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-SP") +{ + field(DESC, "GY2 CCPS remote control on") + field(DTYP, "stream") + field(ONAM, "REM") + field(OUT, "@PWX1500ML.proto setRem CCPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(ZNAM, "LOC") +} + +record (bo,"EC-GN-P01-GBF-CCPS:PSU2320-RST") +{ + field(DESC, "GY2 CCPS reset device") + field(DTYP, "stream") + field(OUT, "@PWX1500ML.proto resetDevice CCPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") +} + +record (bi,"EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-RB") +{ + field(DESC, "GY2 CCPS signal source on") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getSourceON CCPS2") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-SP") +{ + field(DESC, "GY2 CCPS signal source on") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PWX1500ML.proto setSourceON CCPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBF-CCPS:PSU2320-STAT") +{ + field(DESC, "CCPS2 is running") + field(ONAM, "ON") + field(SCAN, "Passive") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-CCPS:PSU2320-TR") +{ + field(DESC, "GY2 CCPS in Operation") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-CCPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY2 CCPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-CCPS:STAT-SIMM") +{ + field(DESC, "GY2 CCPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (ai,"EC-GN-P01-GBF-CCPS:PSU2320-CURR-RB") +{ + field(DESC, "GY2 CCPS Output current readback") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "60.0") + field(INP, "@PWX1500ML.proto getCurr CCPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-CCPS:PSU2320-CURR-SP") +{ + field(DESC, "GY2 CCPS Output current setpoint") + field(DRVH, "58.8") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "58.8") + field(LOPR, "0") + field(OUT, "@PWX1500ML.proto setCurr CCPS2") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-CCPS:PSU2320-DCV-RB") +{ + field(DESC, "GY2 CCPS V range readback") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(INP, "@PWX1500ML.proto getVolt CCPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-CCPS:PSU2320-DCV-SP") +{ + field(DESC, "GY2 CCPS V range readback") + field(DRVH, "84") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "84") + field(LOPR, "0") + field(OUT, "@PWX1500ML.proto setVolt CCPS2") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-CCPS:PSU2320-EREF") +{ + field(DESC, "GY2 CCPS voltage setpoint") + field(DRVH, "80") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "80") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-CCPS:PSU2320-EREF-MSP") +{ + field(DESC, "GY2 CCPS voltage manual setpoint") + field(DRVH, "80") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "80") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (stringin,"EC-GN-P01-GBF-CCPS:PSU2320-ERROR") +{ + field(DESC, "GY2 CCPS Error message") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getError CCPS2") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") +} + +record (stringin,"EC-GN-P01-GBF-CCPS:PSU2320-IDN") +{ + field(DESC, "GY2 CCPS IDN") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto readDeviceID CCPS2") + field(PINI, "NO") + field(SCAN, "10 second") +} + +record (ai,"EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCI") +{ + field(DESC, "GY2 CCPS Measued DC Current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "58.8") + field(INP, "@PWX1500ML.proto getMeasDCI CCPS2") + field(LOPR, "-58.8") + field(PINI, "NO") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCV") +{ + field(DESC, "GY2 CCPS Measued DC Voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "200") + field(INP, "@PWX1500ML.proto getMeasDCV CCPS2") + field(LOPR, "-200") + field(PINI, "NO") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-CCPS:STAT-AMP") +{ + field(DESC, "Amplitude") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "3.5") +} + +record (ai,"EC-GN-P01-GBF-CCPS:STAT-FREQ") +{ + field(DESC, "Frequency") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "1") +} + +record (ai,"EC-GN-P01-GBF-CCPS:STAT-OFFS") +{ + field(DESC, "Offset") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "1") +} + +record (calcout,"EC-GN-P01-GBF-CCPS:STAT-OP-CALC") +{ + field(CALC, "(A==1 || B==1 || C==1)?1:0; C:=B; B:=A") + field(DESC, "GYB CCPS operation check") + field(FLNK, "EC-GN-P01-GBF-CCPS:PSU2320-TR") + field(INPA, "EC-GN-P01-GBF-CCPS:STAT-OP-V-DIFF") + field(INPB, "0") + field(INPC, "0") + field(OUT, "EC-GN-P01-GBF-CCPS:PSU2320-TR") + field(SCAN, "Passive") +} + +record (calc,"EC-GN-P01-GBF-CCPS:STAT-OP-V-DIFF") +{ + field(CALC, "(A==1 andand ABS(B-C)>0.1)?1:0; C:=B") + field(DESC, "GYB CCPS operation check") + field(FLNK, "EC-GN-P01-GBF-CCPS:STAT-OP-CALC") + field(INPA, "EC-GN-P01-GBF-CCPS:PSU2320-OUTON-RB") + field(INPB, "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCV PP") + field(SCAN, ".1 second") +} + diff --git a/EC-GN-JA-PCF/.svn/pristine/e7/e765ae1bc60a4221433c4deb5486dd9ca02f2e9b.svn-base b/EC-GN-JA-PCF/.svn/pristine/e7/e765ae1bc60a4221433c4deb5486dd9ca02f2e9b.svn-base new file mode 100644 index 0000000..98fb573 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/e7/e765ae1bc60a4221433c4deb5486dd9ca02f2e9b.svn-base @@ -0,0 +1,1013 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,60,45,10,10,10,10 +10,55,40,9,9,9,9 +20,50,35,8,8,8,8 +30,45,30,7,7,7,7 +40,40,25,6,6,6,6 +50,35,20,5,5,5,5 +60,30,15,4,4,4,4 +70,25,10,3,3,3,3 +80,20,5,2,2,2,2 +90,15,0,1,1,1,1 +100,10,-5,0,0,0,0 +110,5,0,1,1,1,1 +120,0,5,2,2,2,2 +130,-5,10,3,3,3,3 +140,0,15,4,4,4,4 +150,5,20,5,5,5,5 +160,10,25,6,6,6,6 +170,15,30,7,7,7,7 +180,20,35,8,8,8,8 +190,25,40,9,9,9,9 +200,30,45,10,10,10,10 +210,35,40,11,9,9,9 +220,40,35,12,8,8,8 +230,45,30,11,7,7,7 +240,50,25,10,6,6,6 +250,55,20,9,5,5,5 +260,60,15,8,4,4,4 +270,55,10,7,3,3,3 +280,50,5,6,2,2,2 +290,45,0,5,1,1,1 +300,40,-5,4,0,0,0 +310,35,0,3,1,1,1 +320,30,5,2,2,2,2 +330,25,10,1,3,3,3 +340,20,15,0,4,4,4 +350,15,20,1,5,5,5 +360,10,25,2,6,6,6 +370,5,30,3,7,7,7 +380,0,35,4,8,8,8 +390,-5,40,5,9,9,9 +400,0,45,6,10,10,10 +410,5,40,7,9,9,9 +420,10,35,8,8,8,8 +430,15,30,9,7,7,7 +440,20,25,10,6,6,6 +450,25,20,11,5,5,5 +460,30,15,12,4,4,4 +470,35,10,11,3,3,3 +480,40,5,10,2,2,2 +490,45,0,9,1,1,1 +500,50,-5,8,0,0,0 +510,55,0,7,1,1,1 +520,60,5,6,2,2,2 +530,55,10,5,3,3,3 +540,50,15,4,4,4,4 +550,45,20,3,5,5,5 +560,40,25,2,6,6,6 +570,35,30,1,7,7,7 +580,30,35,0,8,8,8 +590,25,40,1,9,9,9 +600,20,45,2,10,10,10 +610,15,40,3,9,9,9 +620,10,35,4,8,8,8 +630,5,30,5,7,7,7 +640,0,25,6,6,6,6 +650,-5,20,7,5,5,5 +660,0,15,8,4,4,4 +670,5,10,9,3,3,3 +680,10,5,10,2,2,2 +690,15,0,11,1,1,1 +700,20,-5,12,0,0,0 +710,25,0,11,1,1,1 +720,30,5,10,2,2,2 +730,35,10,9,3,3,3 +740,40,15,8,4,4,4 +750,45,20,7,5,5,5 +760,50,25,6,6,6,6 +770,55,30,5,7,7,7 +780,60,35,4,8,8,8 +790,55,40,3,9,9,9 +800,50,45,2,10,10,10 +810,45,40,1,9,9,9 +820,40,35,0,8,8,8 +830,35,30,1,7,7,7 +840,30,25,2,6,6,6 +850,25,20,3,5,5,5 +860,20,15,4,4,4,4 +870,15,10,5,3,3,3 +880,10,5,6,2,2,2 +890,5,0,7,1,1,1 +900,0,-5,8,0,0,0 +910,-5,0,9,1,1,1 +920,0,5,10,2,2,2 +930,5,10,11,3,3,3 +940,10,15,12,4,4,4 +950,15,20,11,5,5,5 +960,20,25,10,6,6,6 +970,25,30,9,7,7,7 +980,30,35,8,8,8,8 +990,35,40,7,9,9,9 +1000,40,45,6,10,10,10 +1010,30,20,10,10,10,10 +1020,30,20,10,10,10,10 +1030,30,20,10,10,10,10 +1040,30,20,10,10,10,10 +1050,30,20,10,10,10,10 +1060,30,20,10,10,10,10 +1070,30,20,10,10,10,10 +1080,30,20,10,10,10,10 +1090,30,20,10,10,10,10 +1100,30,20,10,10,10,10 +1110,30,20,10,10,10,10 +1120,30,20,10,10,10,10 +1130,30,20,10,10,10,10 +1140,30,20,10,10,10,10 +1150,30,20,10,10,10,10 +1160,30,20,10,10,10,10 +1170,30,20,10,10,10,10 +1180,30,20,10,10,10,10 +1190,30,20,10,10,10,10 +1200,30,20,10,10,10,10 +1210,30,20,10,10,10,10 +1220,30,20,10,10,10,10 +1230,30,20,10,10,10,10 +1240,30,20,10,10,10,10 +1250,30,20,10,10,10,10 +1260,30,20,10,10,10,10 +1270,30,20,10,10,10,10 +1280,30,20,10,10,10,10 +1290,30,20,10,10,10,10 +1300,30,20,10,10,10,10 +1310,30,20,10,10,10,10 +1320,30,20,10,10,10,10 +1330,30,20,10,10,10,10 +1340,30,20,10,10,10,10 +1350,30,20,10,10,10,10 +1360,30,20,10,10,10,10 +1370,30,20,10,10,10,10 +1380,30,20,10,10,10,10 +1390,30,20,10,10,10,10 +1400,30,20,10,10,10,10 +1410,30,20,10,10,10,10 +1420,30,20,10,10,10,10 +1430,30,20,10,10,10,10 +1440,30,20,10,10,10,10 +1450,30,20,10,10,10,10 +1460,30,20,10,10,10,10 +1470,30,20,10,10,10,10 +1480,30,20,10,10,10,10 +1490,30,20,10,10,10,10 +1500,30,20,10,10,10,10 +1510,30,20,10,10,10,10 +1520,30,20,10,10,10,10 +1530,30,20,10,10,10,10 +1540,30,20,10,10,10,10 +1550,30,20,10,10,10,10 +1560,30,20,10,10,10,10 +1570,30,20,10,10,10,10 +1580,30,20,10,10,10,10 +1590,30,20,10,10,10,10 +1600,30,20,10,10,10,10 +1610,30,20,10,10,10,10 +1620,30,20,10,10,10,10 +1630,30,20,10,10,10,10 +1640,30,20,10,10,10,10 +1650,30,20,10,10,10,10 +1660,30,20,10,10,10,10 +1670,30,20,10,10,10,10 +1680,30,20,10,10,10,10 +1690,30,20,10,10,10,10 +1700,30,20,10,10,10,10 +1710,30,20,10,10,10,10 +1720,30,20,10,10,10,10 +1730,30,20,10,10,10,10 +1740,30,20,10,10,10,10 +1750,30,20,10,10,10,10 +1760,30,20,10,10,10,10 +1770,30,20,10,10,10,10 +1780,30,20,10,10,10,10 +1790,30,20,10,10,10,10 +1800,30,20,10,10,10,10 +1810,30,20,10,10,10,10 +1820,30,20,10,10,10,10 +1830,30,20,10,10,10,10 +1840,30,20,10,10,10,10 +1850,30,20,10,10,10,10 +1860,30,20,10,10,10,10 +1870,30,20,10,10,10,10 +1880,30,20,10,10,10,10 +1890,30,20,10,10,10,10 +1900,30,20,10,10,10,10 +1910,30,20,10,10,10,10 +1920,30,20,10,10,10,10 +1930,30,20,10,10,10,10 +1940,30,20,10,10,10,10 +1950,30,20,10,10,10,10 +1960,30,20,10,10,10,10 +1970,30,20,10,10,10,10 +1980,30,20,10,10,10,10 +1990,30,20,10,10,10,10 +2000,30,20,10,10,10,10 +2010,30,20,10,10,10,10 +2020,30,20,10,10,10,10 +2030,30,20,10,10,10,10 +2040,30,20,10,10,10,10 +2050,30,20,10,10,10,10 +2060,30,20,10,10,10,10 +2070,30,20,10,10,10,10 +2080,30,20,10,10,10,10 +2090,30,20,10,10,10,10 +2100,30,20,10,10,10,10 +2110,30,20,10,10,10,10 +2120,30,20,10,10,10,10 +2130,30,20,10,10,10,10 +2140,30,20,10,10,10,10 +2150,30,20,10,10,10,10 +2160,30,20,10,10,10,10 +2170,30,20,10,10,10,10 +2180,30,20,10,10,10,10 +2190,30,20,10,10,10,10 +2200,30,20,10,10,10,10 +2210,30,20,10,10,10,10 +2220,30,20,10,10,10,10 +2230,30,20,10,10,10,10 +2240,30,20,10,10,10,10 +2250,30,20,10,10,10,10 +2260,30,20,10,10,10,10 +2270,30,20,10,10,10,10 +2280,30,20,10,10,10,10 +2290,30,20,10,10,10,10 +2300,30,20,10,10,10,10 +2310,30,20,10,10,10,10 +2320,30,20,10,10,10,10 +2330,30,20,10,10,10,10 +2340,30,20,10,10,10,10 +2350,30,20,10,10,10,10 +2360,30,20,10,10,10,10 +2370,30,20,10,10,10,10 +2380,30,20,10,10,10,10 +2390,30,20,10,10,10,10 +2400,30,20,10,10,10,10 +2410,30,20,10,10,10,10 +2420,30,20,10,10,10,10 +2430,30,20,10,10,10,10 +2440,30,20,10,10,10,10 +2450,30,20,10,10,10,10 +2460,30,20,10,10,10,10 +2470,30,20,10,10,10,10 +2480,30,20,10,10,10,10 +2490,30,20,10,10,10,10 +2500,30,20,10,10,10,10 +2510,30,20,10,10,10,10 +2520,30,20,10,10,10,10 +2530,30,20,10,10,10,10 +2540,30,20,10,10,10,10 +2550,30,20,10,10,10,10 +2560,30,20,10,10,10,10 +2570,30,20,10,10,10,10 +2580,30,20,10,10,10,10 +2590,30,20,10,10,10,10 +2600,30,20,10,10,10,10 +2610,30,20,10,10,10,10 +2620,30,20,10,10,10,10 +2630,30,20,10,10,10,10 +2640,30,20,10,10,10,10 +2650,30,20,10,10,10,10 +2660,30,20,10,10,10,10 +2670,30,20,10,10,10,10 +2680,30,20,10,10,10,10 +2690,30,20,10,10,10,10 +2700,30,20,10,10,10,10 +2710,30,20,10,10,10,10 +2720,30,20,10,10,10,10 +2730,30,20,10,10,10,10 +2740,30,20,10,10,10,10 +2750,30,20,10,10,10,10 +2760,30,20,10,10,10,10 +2770,30,20,10,10,10,10 +2780,30,20,10,10,10,10 +2790,30,20,10,10,10,10 +2800,30,20,10,10,10,10 +2810,30,20,10,10,10,10 +2820,30,20,10,10,10,10 +2830,30,20,10,10,10,10 +2840,30,20,10,10,10,10 +2850,30,20,10,10,10,10 +2860,30,20,10,10,10,10 +2870,30,20,10,10,10,10 +2880,30,20,10,10,10,10 +2890,30,20,10,10,10,10 +2900,30,20,10,10,10,10 +2910,30,20,10,10,10,10 +2920,30,20,10,10,10,10 +2930,30,20,10,10,10,10 +2940,30,20,10,10,10,10 +2950,30,20,10,10,10,10 +2960,30,20,10,10,10,10 +2970,30,20,10,10,10,10 +2980,30,20,10,10,10,10 +2990,30,20,10,10,10,10 +3000,30,20,10,10,10,10 +3010,30,20,10,10,10,10 +3020,30,20,10,10,10,10 +3030,30,20,10,10,10,10 +3040,30,20,10,10,10,10 +3050,30,20,10,10,10,10 +3060,30,20,10,10,10,10 +3070,30,20,10,10,10,10 +3080,30,20,10,10,10,10 +3090,30,20,10,10,10,10 +3100,30,20,10,10,10,10 +3110,30,20,10,10,10,10 +3120,30,20,10,10,10,10 +3130,30,20,10,10,10,10 +3140,30,20,10,10,10,10 +3150,30,20,10,10,10,10 +3160,30,20,10,10,10,10 +3170,30,20,10,10,10,10 +3180,30,20,10,10,10,10 +3190,30,20,10,10,10,10 +3200,30,20,10,10,10,10 +3210,30,20,10,10,10,10 +3220,30,20,10,10,10,10 +3230,30,20,10,10,10,10 +3240,30,20,10,10,10,10 +3250,30,20,10,10,10,10 +3260,30,20,10,10,10,10 +3270,30,20,10,10,10,10 +3280,30,20,10,10,10,10 +3290,30,20,10,10,10,10 +3300,30,20,10,10,10,10 +3310,30,20,10,10,10,10 +3320,30,20,10,10,10,10 +3330,30,20,10,10,10,10 +3340,30,20,10,10,10,10 +3350,30,20,10,10,10,10 +3360,30,20,10,10,10,10 +3370,30,20,10,10,10,10 +3380,30,20,10,10,10,10 +3390,30,20,10,10,10,10 +3400,30,20,10,10,10,10 +3410,30,20,10,10,10,10 +3420,30,20,10,10,10,10 +3430,30,20,10,10,10,10 +3440,30,20,10,10,10,10 +3450,30,20,10,10,10,10 +3460,30,20,10,10,10,10 +3470,30,20,10,10,10,10 +3480,30,20,10,10,10,10 +3490,30,20,10,10,10,10 +3500,30,20,10,10,10,10 +3510,30,20,10,10,10,10 +3520,30,20,10,10,10,10 +3530,30,20,10,10,10,10 +3540,30,20,10,10,10,10 +3550,30,20,10,10,10,10 +3560,30,20,10,10,10,10 +3570,30,20,10,10,10,10 +3580,30,20,10,10,10,10 +3590,30,20,10,10,10,10 +3600,30,20,10,10,10,10 +3610,30,20,10,10,10,10 +3620,30,20,10,10,10,10 +3630,30,20,10,10,10,10 +3640,30,20,10,10,10,10 +3650,30,20,10,10,10,10 +3660,30,20,10,10,10,10 +3670,30,20,10,10,10,10 +3680,30,20,10,10,10,10 +3690,30,20,10,10,10,10 +3700,30,20,10,10,10,10 +3710,30,20,10,10,10,10 +3720,30,20,10,10,10,10 +3730,30,20,10,10,10,10 +3740,30,20,10,10,10,10 +3750,30,20,10,10,10,10 +3760,30,20,10,10,10,10 +3770,30,20,10,10,10,10 +3780,30,20,10,10,10,10 +3790,30,20,10,10,10,10 +3800,30,20,10,10,10,10 +3810,30,20,10,10,10,10 +3820,30,20,10,10,10,10 +3830,30,20,10,10,10,10 +3840,30,20,10,10,10,10 +3850,30,20,10,10,10,10 +3860,30,20,10,10,10,10 +3870,30,20,10,10,10,10 +3880,30,20,10,10,10,10 +3890,30,20,10,10,10,10 +3900,30,20,10,10,10,10 +3910,30,20,10,10,10,10 +3920,30,20,10,10,10,10 +3930,30,20,10,10,10,10 +3940,30,20,10,10,10,10 +3950,30,20,10,10,10,10 +3960,30,20,10,10,10,10 +3970,30,20,10,10,10,10 +3980,30,20,10,10,10,10 +3990,30,20,10,10,10,10 +4000,30,20,10,10,10,10 +4010,30,20,10,10,10,10 +4020,30,20,10,10,10,10 +4030,30,20,10,10,10,10 +4040,30,20,10,10,10,10 +4050,30,20,10,10,10,10 +4060,30,20,10,10,10,10 +4070,30,20,10,10,10,10 +4080,30,20,10,10,10,10 +4090,30,20,10,10,10,10 +4100,30,20,10,10,10,10 +4110,30,20,10,10,10,10 +4120,30,20,10,10,10,10 +4130,30,20,10,10,10,10 +4140,30,20,10,10,10,10 +4150,30,20,10,10,10,10 +4160,30,20,10,10,10,10 +4170,30,20,10,10,10,10 +4180,30,20,10,10,10,10 +4190,30,20,10,10,10,10 +4200,30,20,10,10,10,10 +4210,30,20,10,10,10,10 +4220,30,20,10,10,10,10 +4230,30,20,10,10,10,10 +4240,30,20,10,10,10,10 +4250,30,20,10,10,10,10 +4260,30,20,10,10,10,10 +4270,30,20,10,10,10,10 +4280,30,20,10,10,10,10 +4290,30,20,10,10,10,10 +4300,30,20,10,10,10,10 +4310,30,20,10,10,10,10 +4320,30,20,10,10,10,10 +4330,30,20,10,10,10,10 +4340,30,20,10,10,10,10 +4350,30,20,10,10,10,10 +4360,30,20,10,10,10,10 +4370,30,20,10,10,10,10 +4380,30,20,10,10,10,10 +4390,30,20,10,10,10,10 +4400,30,20,10,10,10,10 +4410,30,20,10,10,10,10 +4420,30,20,10,10,10,10 +4430,30,20,10,10,10,10 +4440,30,20,10,10,10,10 +4450,30,20,10,10,10,10 +4460,30,20,10,10,10,10 +4470,30,20,10,10,10,10 +4480,30,20,10,10,10,10 +4490,30,20,10,10,10,10 +4500,30,20,10,10,10,10 +4510,30,20,10,10,10,10 +4520,30,20,10,10,10,10 +4530,30,20,10,10,10,10 +4540,30,20,10,10,10,10 +4550,30,20,10,10,10,10 +4560,30,20,10,10,10,10 +4570,30,20,10,10,10,10 +4580,30,20,10,10,10,10 +4590,30,20,10,10,10,10 +4600,30,20,10,10,10,10 +4610,30,20,10,10,10,10 +4620,30,20,10,10,10,10 +4630,30,20,10,10,10,10 +4640,30,20,10,10,10,10 +4650,30,20,10,10,10,10 +4660,30,20,10,10,10,10 +4670,30,20,10,10,10,10 +4680,30,20,10,10,10,10 +4690,30,20,10,10,10,10 +4700,30,20,10,10,10,10 +4710,30,20,10,10,10,10 +4720,30,20,10,10,10,10 +4730,30,20,10,10,10,10 +4740,30,20,10,10,10,10 +4750,30,20,10,10,10,10 +4760,30,20,10,10,10,10 +4770,30,20,10,10,10,10 +4780,30,20,10,10,10,10 +4790,30,20,10,10,10,10 +4800,30,20,10,10,10,10 +4810,30,20,10,10,10,10 +4820,30,20,10,10,10,10 +4830,30,20,10,10,10,10 +4840,30,20,10,10,10,10 +4850,30,20,10,10,10,10 +4860,30,20,10,10,10,10 +4870,30,20,10,10,10,10 +4880,30,20,10,10,10,10 +4890,30,20,10,10,10,10 +4900,30,20,10,10,10,10 +4910,30,20,10,10,10,10 +4920,30,20,10,10,10,10 +4930,30,20,10,10,10,10 +4940,30,20,10,10,10,10 +4950,30,20,10,10,10,10 +4960,30,20,10,10,10,10 +4970,30,20,10,10,10,10 +4980,30,20,10,10,10,10 +4990,30,20,10,10,10,10 +5000,30,20,10,10,10,10 +5010,30,20,10,10,10,10 +5020,30,20,10,10,10,10 +5030,30,20,10,10,10,10 +5040,30,20,10,10,10,10 +5050,30,20,10,10,10,10 +5060,30,20,10,10,10,10 +5070,30,20,10,10,10,10 +5080,30,20,10,10,10,10 +5090,30,20,10,10,10,10 +5100,30,20,10,10,10,10 +5110,30,20,10,10,10,10 +5120,30,20,10,10,10,10 +5130,30,20,10,10,10,10 +5140,30,20,10,10,10,10 +5150,30,20,10,10,10,10 +5160,30,20,10,10,10,10 +5170,30,20,10,10,10,10 +5180,30,20,10,10,10,10 +5190,30,20,10,10,10,10 +5200,30,20,10,10,10,10 +5210,30,20,10,10,10,10 +5220,30,20,10,10,10,10 +5230,30,20,10,10,10,10 +5240,30,20,10,10,10,10 +5250,30,20,10,10,10,10 +5260,30,20,10,10,10,10 +5270,30,20,10,10,10,10 +5280,30,20,10,10,10,10 +5290,30,20,10,10,10,10 +5300,30,20,10,10,10,10 +5310,30,20,10,10,10,10 +5320,30,20,10,10,10,10 +5330,30,20,10,10,10,10 +5340,30,20,10,10,10,10 +5350,30,20,10,10,10,10 +5360,30,20,10,10,10,10 +5370,30,20,10,10,10,10 +5380,30,20,10,10,10,10 +5390,30,20,10,10,10,10 +5400,30,20,10,10,10,10 +5410,30,20,10,10,10,10 +5420,30,20,10,10,10,10 +5430,30,20,10,10,10,10 +5440,30,20,10,10,10,10 +5450,30,20,10,10,10,10 +5460,30,20,10,10,10,10 +5470,30,20,10,10,10,10 +5480,30,20,10,10,10,10 +5490,30,20,10,10,10,10 +5500,30,20,10,10,10,10 +5510,30,20,10,10,10,10 +5520,30,20,10,10,10,10 +5530,30,20,10,10,10,10 +5540,30,20,10,10,10,10 +5550,30,20,10,10,10,10 +5560,30,20,10,10,10,10 +5570,30,20,10,10,10,10 +5580,30,20,10,10,10,10 +5590,30,20,10,10,10,10 +5600,30,20,10,10,10,10 +5610,30,20,10,10,10,10 +5620,30,20,10,10,10,10 +5630,30,20,10,10,10,10 +5640,30,20,10,10,10,10 +5650,30,20,10,10,10,10 +5660,30,20,10,10,10,10 +5670,30,20,10,10,10,10 +5680,30,20,10,10,10,10 +5690,30,20,10,10,10,10 +5700,30,20,10,10,10,10 +5710,30,20,10,10,10,10 +5720,30,20,10,10,10,10 +5730,30,20,10,10,10,10 +5740,30,20,10,10,10,10 +5750,30,20,10,10,10,10 +5760,30,20,10,10,10,10 +5770,30,20,10,10,10,10 +5780,30,20,10,10,10,10 +5790,30,20,10,10,10,10 +5800,30,20,10,10,10,10 +5810,30,20,10,10,10,10 +5820,30,20,10,10,10,10 +5830,30,20,10,10,10,10 +5840,30,20,10,10,10,10 +5850,30,20,10,10,10,10 +5860,30,20,10,10,10,10 +5870,30,20,10,10,10,10 +5880,30,20,10,10,10,10 +5890,30,20,10,10,10,10 +5900,30,20,10,10,10,10 +5910,30,20,10,10,10,10 +5920,30,20,10,10,10,10 +5930,30,20,10,10,10,10 +5940,30,20,10,10,10,10 +5950,30,20,10,10,10,10 +5960,30,20,10,10,10,10 +5970,30,20,10,10,10,10 +5980,30,20,10,10,10,10 +5990,30,20,10,10,10,10 +6000,30,20,10,10,10,10 +6010,30,20,10,10,10,10 +6020,30,20,10,10,10,10 +6030,30,20,10,10,10,10 +6040,30,20,10,10,10,10 +6050,30,20,10,10,10,10 +6060,30,20,10,10,10,10 +6070,30,20,10,10,10,10 +6080,30,20,10,10,10,10 +6090,30,20,10,10,10,10 +6100,30,20,10,10,10,10 +6110,30,20,10,10,10,10 +6120,30,20,10,10,10,10 +6130,30,20,10,10,10,10 +6140,30,20,10,10,10,10 +6150,30,20,10,10,10,10 +6160,30,20,10,10,10,10 +6170,30,20,10,10,10,10 +6180,30,20,10,10,10,10 +6190,30,20,10,10,10,10 +6200,30,20,10,10,10,10 +6210,30,20,10,10,10,10 +6220,30,20,10,10,10,10 +6230,30,20,10,10,10,10 +6240,30,20,10,10,10,10 +6250,30,20,10,10,10,10 +6260,30,20,10,10,10,10 +6270,30,20,10,10,10,10 +6280,30,20,10,10,10,10 +6290,30,20,10,10,10,10 +6300,30,20,10,10,10,10 +6310,30,20,10,10,10,10 +6320,30,20,10,10,10,10 +6330,30,20,10,10,10,10 +6340,30,20,10,10,10,10 +6350,30,20,10,10,10,10 +6360,30,20,10,10,10,10 +6370,30,20,10,10,10,10 +6380,30,20,10,10,10,10 +6390,30,20,10,10,10,10 +6400,30,20,10,10,10,10 +6410,30,20,10,10,10,10 +6420,30,20,10,10,10,10 +6430,30,20,10,10,10,10 +6440,30,20,10,10,10,10 +6450,30,20,10,10,10,10 +6460,30,20,10,10,10,10 +6470,30,20,10,10,10,10 +6480,30,20,10,10,10,10 +6490,30,20,10,10,10,10 +6500,30,20,10,10,10,10 +6510,30,20,10,10,10,10 +6520,30,20,10,10,10,10 +6530,30,20,10,10,10,10 +6540,30,20,10,10,10,10 +6550,30,20,10,10,10,10 +6560,30,20,10,10,10,10 +6570,30,20,10,10,10,10 +6580,30,20,10,10,10,10 +6590,30,20,10,10,10,10 +6600,30,20,10,10,10,10 +6610,30,20,10,10,10,10 +6620,30,20,10,10,10,10 +6630,30,20,10,10,10,10 +6640,30,20,10,10,10,10 +6650,30,20,10,10,10,10 +6660,30,20,10,10,10,10 +6670,30,20,10,10,10,10 +6680,30,20,10,10,10,10 +6690,30,20,10,10,10,10 +6700,30,20,10,10,10,10 +6710,30,20,10,10,10,10 +6720,30,20,10,10,10,10 +6730,30,20,10,10,10,10 +6740,30,20,10,10,10,10 +6750,30,20,10,10,10,10 +6760,30,20,10,10,10,10 +6770,30,20,10,10,10,10 +6780,30,20,10,10,10,10 +6790,30,20,10,10,10,10 +6800,30,20,10,10,10,10 +6810,30,20,10,10,10,10 +6820,30,20,10,10,10,10 +6830,30,20,10,10,10,10 +6840,30,20,10,10,10,10 +6850,30,20,10,10,10,10 +6860,30,20,10,10,10,10 +6870,30,20,10,10,10,10 +6880,30,20,10,10,10,10 +6890,30,20,10,10,10,10 +6900,30,20,10,10,10,10 +6910,30,20,10,10,10,10 +6920,30,20,10,10,10,10 +6930,30,20,10,10,10,10 +6940,30,20,10,10,10,10 +6950,30,20,10,10,10,10 +6960,30,20,10,10,10,10 +6970,30,20,10,10,10,10 +6980,30,20,10,10,10,10 +6990,30,20,10,10,10,10 +7000,30,20,10,10,10,10 +7010,30,20,10,10,10,10 +7020,30,20,10,10,10,10 +7030,30,20,10,10,10,10 +7040,30,20,10,10,10,10 +7050,30,20,10,10,10,10 +7060,30,20,10,10,10,10 +7070,30,20,10,10,10,10 +7080,30,20,10,10,10,10 +7090,30,20,10,10,10,10 +7100,30,20,10,10,10,10 +7110,30,20,10,10,10,10 +7120,30,20,10,10,10,10 +7130,30,20,10,10,10,10 +7140,30,20,10,10,10,10 +7150,30,20,10,10,10,10 +7160,30,20,10,10,10,10 +7170,30,20,10,10,10,10 +7180,30,20,10,10,10,10 +7190,30,20,10,10,10,10 +7200,30,20,10,10,10,10 +7210,30,20,10,10,10,10 +7220,30,20,10,10,10,10 +7230,30,20,10,10,10,10 +7240,30,20,10,10,10,10 +7250,30,20,10,10,10,10 +7260,30,20,10,10,10,10 +7270,30,20,10,10,10,10 +7280,30,20,10,10,10,10 +7290,30,20,10,10,10,10 +7300,30,20,10,10,10,10 +7310,30,20,10,10,10,10 +7320,30,20,10,10,10,10 +7330,30,20,10,10,10,10 +7340,30,20,10,10,10,10 +7350,30,20,10,10,10,10 +7360,30,20,10,10,10,10 +7370,30,20,10,10,10,10 +7380,30,20,10,10,10,10 +7390,30,20,10,10,10,10 +7400,30,20,10,10,10,10 +7410,30,20,10,10,10,10 +7420,30,20,10,10,10,10 +7430,30,20,10,10,10,10 +7440,30,20,10,10,10,10 +7450,30,20,10,10,10,10 +7460,30,20,10,10,10,10 +7470,30,20,10,10,10,10 +7480,30,20,10,10,10,10 +7490,30,20,10,10,10,10 +7500,30,20,10,10,10,10 +7510,30,20,10,10,10,10 +7520,30,20,10,10,10,10 +7530,30,20,10,10,10,10 +7540,30,20,10,10,10,10 +7550,30,20,10,10,10,10 +7560,30,20,10,10,10,10 +7570,30,20,10,10,10,10 +7580,30,20,10,10,10,10 +7590,30,20,10,10,10,10 +7600,30,20,10,10,10,10 +7610,30,20,10,10,10,10 +7620,30,20,10,10,10,10 +7630,30,20,10,10,10,10 +7640,30,20,10,10,10,10 +7650,30,20,10,10,10,10 +7660,30,20,10,10,10,10 +7670,30,20,10,10,10,10 +7680,30,20,10,10,10,10 +7690,30,20,10,10,10,10 +7700,30,20,10,10,10,10 +7710,30,20,10,10,10,10 +7720,30,20,10,10,10,10 +7730,30,20,10,10,10,10 +7740,30,20,10,10,10,10 +7750,30,20,10,10,10,10 +7760,30,20,10,10,10,10 +7770,30,20,10,10,10,10 +7780,30,20,10,10,10,10 +7790,30,20,10,10,10,10 +7800,30,20,10,10,10,10 +7810,30,20,10,10,10,10 +7820,30,20,10,10,10,10 +7830,30,20,10,10,10,10 +7840,30,20,10,10,10,10 +7850,30,20,10,10,10,10 +7860,30,20,10,10,10,10 +7870,30,20,10,10,10,10 +7880,30,20,10,10,10,10 +7890,30,20,10,10,10,10 +7900,30,20,10,10,10,10 +7910,30,20,10,10,10,10 +7920,30,20,10,10,10,10 +7930,30,20,10,10,10,10 +7940,30,20,10,10,10,10 +7950,30,20,10,10,10,10 +7960,30,20,10,10,10,10 +7970,30,20,10,10,10,10 +7980,30,20,10,10,10,10 +7990,30,20,10,10,10,10 +8000,30,20,10,10,10,10 +8010,30,20,10,10,10,10 +8020,30,20,10,10,10,10 +8030,30,20,10,10,10,10 +8040,30,20,10,10,10,10 +8050,30,20,10,10,10,10 +8060,30,20,10,10,10,10 +8070,30,20,10,10,10,10 +8080,30,20,10,10,10,10 +8090,30,20,10,10,10,10 +8100,30,20,10,10,10,10 +8110,30,20,10,10,10,10 +8120,30,20,10,10,10,10 +8130,30,20,10,10,10,10 +8140,30,20,10,10,10,10 +8150,30,20,10,10,10,10 +8160,30,20,10,10,10,10 +8170,30,20,10,10,10,10 +8180,30,20,10,10,10,10 +8190,30,20,10,10,10,10 +8200,30,20,10,10,10,10 +8210,30,20,10,10,10,10 +8220,30,20,10,10,10,10 +8230,30,20,10,10,10,10 +8240,30,20,10,10,10,10 +8250,30,20,10,10,10,10 +8260,30,20,10,10,10,10 +8270,30,20,10,10,10,10 +8280,30,20,10,10,10,10 +8290,30,20,10,10,10,10 +8300,30,20,10,10,10,10 +8310,30,20,10,10,10,10 +8320,30,20,10,10,10,10 +8330,30,20,10,10,10,10 +8340,30,20,10,10,10,10 +8350,30,20,10,10,10,10 +8360,30,20,10,10,10,10 +8370,30,20,10,10,10,10 +8380,30,20,10,10,10,10 +8390,30,20,10,10,10,10 +8400,30,20,10,10,10,10 +8410,30,20,10,10,10,10 +8420,30,20,10,10,10,10 +8430,30,20,10,10,10,10 +8440,30,20,10,10,10,10 +8450,30,20,10,10,10,10 +8460,30,20,10,10,10,10 +8470,30,20,10,10,10,10 +8480,30,20,10,10,10,10 +8490,30,20,10,10,10,10 +8500,30,20,10,10,10,10 +8510,30,20,10,10,10,10 +8520,30,20,10,10,10,10 +8530,30,20,10,10,10,10 +8540,30,20,10,10,10,10 +8550,30,20,10,10,10,10 +8560,30,20,10,10,10,10 +8570,30,20,10,10,10,10 +8580,30,20,10,10,10,10 +8590,30,20,10,10,10,10 +8600,30,20,10,10,10,10 +8610,30,20,10,10,10,10 +8620,30,20,10,10,10,10 +8630,30,20,10,10,10,10 +8640,30,20,10,10,10,10 +8650,30,20,10,10,10,10 +8660,30,20,10,10,10,10 +8670,30,20,10,10,10,10 +8680,30,20,10,10,10,10 +8690,30,20,10,10,10,10 +8700,30,20,10,10,10,10 +8710,30,20,10,10,10,10 +8720,30,20,10,10,10,10 +8730,30,20,10,10,10,10 +8740,30,20,10,10,10,10 +8750,30,20,10,10,10,10 +8760,30,20,10,10,10,10 +8770,30,20,10,10,10,10 +8780,30,20,10,10,10,10 +8790,30,20,10,10,10,10 +8800,30,20,10,10,10,10 +8810,30,20,10,10,10,10 +8820,30,20,10,10,10,10 +8830,30,20,10,10,10,10 +8840,30,20,10,10,10,10 +8850,30,20,10,10,10,10 +8860,30,20,10,10,10,10 +8870,30,20,10,10,10,10 +8880,30,20,10,10,10,10 +8890,30,20,10,10,10,10 +8900,30,20,10,10,10,10 +8910,30,20,10,10,10,10 +8920,30,20,10,10,10,10 +8930,30,20,10,10,10,10 +8940,30,20,10,10,10,10 +8950,30,20,10,10,10,10 +8960,30,20,10,10,10,10 +8970,30,20,10,10,10,10 +8980,30,20,10,10,10,10 +8990,30,20,10,10,10,10 +9000,30,20,10,10,10,10 +9010,30,20,10,10,10,10 +9020,30,20,10,10,10,10 +9030,30,20,10,10,10,10 +9040,30,20,10,10,10,10 +9050,30,20,10,10,10,10 +9060,30,20,10,10,10,10 +9070,30,20,10,10,10,10 +9080,30,20,10,10,10,10 +9090,30,20,10,10,10,10 +9100,30,20,10,10,10,10 +9110,30,20,10,10,10,10 +9120,30,20,10,10,10,10 +9130,30,20,10,10,10,10 +9140,30,20,10,10,10,10 +9150,30,20,10,10,10,10 +9160,30,20,10,10,10,10 +9170,30,20,10,10,10,10 +9180,30,20,10,10,10,10 +9190,30,20,10,10,10,10 +9200,30,20,10,10,10,10 +9210,30,20,10,10,10,10 +9220,30,20,10,10,10,10 +9230,30,20,10,10,10,10 +9240,30,20,10,10,10,10 +9250,30,20,10,10,10,10 +9260,30,20,10,10,10,10 +9270,30,20,10,10,10,10 +9280,30,20,10,10,10,10 +9290,30,20,10,10,10,10 +9300,30,20,10,10,10,10 +9310,30,20,10,10,10,10 +9320,30,20,10,10,10,10 +9330,30,20,10,10,10,10 +9340,30,20,10,10,10,10 +9350,30,20,10,10,10,10 +9360,30,20,10,10,10,10 +9370,30,20,10,10,10,10 +9380,30,20,10,10,10,10 +9390,30,20,10,10,10,10 +9400,30,20,10,10,10,10 +9410,30,20,10,10,10,10 +9420,30,20,10,10,10,10 +9430,30,20,10,10,10,10 +9440,30,20,10,10,10,10 +9450,30,20,10,10,10,10 +9460,30,20,10,10,10,10 +9470,30,20,10,10,10,10 +9480,30,20,10,10,10,10 +9490,30,20,10,10,10,10 +9500,30,20,10,10,10,10 +9510,30,20,10,10,10,10 +9520,30,20,10,10,10,10 +9530,30,20,10,10,10,10 +9540,30,20,10,10,10,10 +9550,30,20,10,10,10,10 +9560,30,20,10,10,10,10 +9570,30,20,10,10,10,10 +9580,30,20,10,10,10,10 +9590,30,20,10,10,10,10 +9600,30,20,10,10,10,10 +9610,30,20,10,10,10,10 +9620,30,20,10,10,10,10 +9630,30,20,10,10,10,10 +9640,30,20,10,10,10,10 +9650,30,20,10,10,10,10 +9660,30,20,10,10,10,10 +9670,30,20,10,10,10,10 +9680,30,20,10,10,10,10 +9690,30,20,10,10,10,10 +9700,30,20,10,10,10,10 +9710,30,20,10,10,10,10 +9720,30,20,10,10,10,10 +9730,30,20,10,10,10,10 +9740,30,20,10,10,10,10 +9750,30,20,10,10,10,10 +9760,30,20,10,10,10,10 +9770,30,20,10,10,10,10 +9780,30,20,10,10,10,10 +9790,30,20,10,10,10,10 +9800,30,20,10,10,10,10 +9810,30,20,10,10,10,10 +9820,30,20,10,10,10,10 +9830,30,20,10,10,10,10 +9840,30,20,10,10,10,10 +9850,30,20,10,10,10,10 +9860,30,20,10,10,10,10 +9870,30,20,10,10,10,10 +9880,30,20,10,10,10,10 +9890,30,20,10,10,10,10 +9900,30,20,10,10,10,10 +9910,30,20,10,10,10,10 +9920,30,20,10,10,10,10 +9930,30,20,10,10,10,10 +9940,30,20,10,10,10,10 +9950,30,20,10,10,10,10 +9960,30,20,10,10,10,10 +9970,30,20,10,10,10,10 +9980,30,20,10,10,10,10 +9990,30,20,10,10,10,10 +10000,30,20,10,10,10,10 +10010,30,20,10,10,10,10 +10020,30,20,10,10,10,10 +10030,30,20,10,10,10,10 +10040,30,20,10,10,10,10 +10050,30,20,10,10,10,10 +10060,30,20,10,10,10,10 +10070,30,20,10,10,10,10 +10080,30,20,10,10,10,10 +10090,30,20,10,10,10,10 +10100,30,20,10,10,10,10 diff --git a/EC-GN-JA-PCF/.svn/pristine/e7/e7efc3f123087046e7714587975f66f8ccdee824.svn-base b/EC-GN-JA-PCF/.svn/pristine/e7/e7efc3f123087046e7714587975f66f8ccdee824.svn-base new file mode 100644 index 0000000..a94ca00 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/e7/e7efc3f123087046e7714587975f66f8ccdee824.svn-base @@ -0,0 +1,31 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ColorFontUtil); + + +var table = widget.getTable(); +var nbColPVs=3; +//find index of the trigger PV +var i=0; +while (triggerPV != pvs[i]) { + i+=1; +} + +table.setCellText(i/nbColPVs, i%nbColPVs +3, PVUtil.getString(triggerPV)); + +var s = PVUtil.getSeverity(triggerPV); + +var color = ColorFontUtil.WHITE; +if( s == 0) { + color = ColorFontUtil.GREEN; +} +else if( s == 1) { + color = ColorFontUtil.RED; +} +else if( s == 2) { + color = ColorFontUtil.YELLOW; +} +else if( s == 3) { + color = ColorFontUtil.PINK; +} + +table.setCellBackground(i/nbColPVs, i%nbColPVs + 3, color); diff --git a/EC-GN-JA-PCF/.svn/pristine/e8/e847560c1a6b1ed165c05336e3858d334fda3159.svn-base b/EC-GN-JA-PCF/.svn/pristine/e8/e847560c1a6b1ed165c05336e3858d334fda3159.svn-base new file mode 100644 index 0000000..cf9e32c --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/e8/e847560c1a6b1ed165c05336e3858d334fda3159.svn-base @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JASDNRTStateMachineGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JASDNRTStateMachineGAM$(LIBEXT) \ + $(BUILD_DIR)/JASDNRTStateMachineGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/.svn/pristine/eb/eb3994f73a03ca0789a3e237791edbe21cf0b88b.svn-base b/EC-GN-JA-PCF/.svn/pristine/eb/eb3994f73a03ca0789a3e237791edbe21cf0b88b.svn-base new file mode 100644 index 0000000..bf77d44 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/eb/eb3994f73a03ca0789a3e237791edbe21cf0b88b.svn-base @@ -0,0 +1,26 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import DataUtil +from org.csstudio.opibuilder.scriptUtil import ScriptUtil +from org.csstudio.swt.widgets.natives.SpreadSheetTable import ITableSelectionChangedListener +from java.util import Arrays + +table = widget.getTable() +fct_name=display.getPropertyValue("name") +class SelectionListener(ITableSelectionChangedListener): + def selectionChanged(self, selection): + cuName="" + phyName="" + for row in selection: + phyName=row[1] + cuName=row[0] + + # change $(CU) substitution + macroInput = DataUtil.createMacrosInput(True) + macroInput.put("CU", cuName) + macroInput.put("PHY_NAME", phyName) + macroInput.put("FCT_NAME", fct_name) + macroInput.put("SHOW_PLC_IOC", "false") + # open OPI + # see https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-boy/trunk/org.csstudio.opibuilder/src/org/csstudio/opibuilder/scriptUtil/ScriptUtil.java + ScriptUtil.openOPI(display.getWidget("Table"), fct_name+"-CtrlUnitDetails.opi", 1, macroInput) +table.addSelectionChangedListener(SelectionListener()) diff --git a/EC-GN-JA-PCF/.svn/pristine/ec/ecda2f44745800d870621b3ec0ffe0386f1e68b4.svn-base b/EC-GN-JA-PCF/.svn/pristine/ec/ecda2f44745800d870621b3ec0ffe0386f1e68b4.svn-base new file mode 100644 index 0000000..ea459e6 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/ec/ecda2f44745800d870621b3ec0ffe0386f1e68b4.svn-base @@ -0,0 +1,36 @@ +#ifndef SDD_PON_IF_H +#define SDD_PON_IF_H + +#include /* Channel Access API definition, etc. */ + + +#define SDD_PVMAXLENGTH 40 +#define SDD_STRING_MAX_LENGTH 100 +#define SDD_NB_OF_PONVAR 0 //generated by SDD + +struct SDD_PONVar { + + char name[SDD_PVMAXLENGTH]; + + //if read-> monitor=yes otherwise false + bool isMonitored; + + chtype type; + + //the code can cast + char initialvalue[SDD_STRING_MAX_LENGTH]; + +}; + +//list of symbols +typedef enum SDD_PONVarEnum { + + +} SDD_PONVarEnum; + +//for each enum (bi/bo/mbbi/mbbo) name is symbolname suffix with _enum + + + + +#endif /* SDD_PON_IF_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/ed/edc485fc5433b23466f2df6c00ad647033edd493.svn-base b/EC-GN-JA-PCF/.svn/pristine/ed/edc485fc5433b23466f2df6c00ad647033edd493.svn-base new file mode 100644 index 0000000..761e26b --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/ed/edc485fc5433b23466f2df6c00ad647033edd493.svn-base @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/ee/eea4071b77c1ca53dd89b518e97a3aa71c59439d.svn-base b/EC-GN-JA-PCF/.svn/pristine/ee/eea4071b77c1ca53dd89b518e97a3aa71c59439d.svn-base new file mode 100644 index 0000000..e9ce666 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/ee/eea4071b77c1ca53dd89b518e97a3aa71c59439d.svn-base @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JARampupGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JARampupGAM$(LIBEXT) \ + $(BUILD_DIR)/JARampupGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/.svn/pristine/f0/f029c3c55fa13e62ee5ccdb0120bc2716d80b108.svn-base b/EC-GN-JA-PCF/.svn/pristine/f0/f029c3c55fa13e62ee5ccdb0120bc2716d80b108.svn-base new file mode 100644 index 0000000..46ae827 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/f0/f029c3c55fa13e62ee5ccdb0120bc2716d80b108.svn-base @@ -0,0 +1,639 @@ +/****************************************************************************** + * $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp-sdn/main/c++/prog/prog.cpp.template $ + * $Id: prog.cpp.template 83098 2018-01-08 13:23:38Z cesnikt $ + * + * Project : CODAC Core System + * + * Description : GyrotronDAN program + * + * Author : codac-dev + * + * Copyright (c) : 2010-2018 ITER Organization, + * CS 90 046 + * 13067 St. Paul-lez-Durance Cedex + * France + * + * This file is part of ITER CODAC software. + * For the terms and conditions of redistribution or use of this software + * refer to the file ITER-LICENSE.TXT located in the top level directory + * of the distribution package. + ******************************************************************************/ + +/* header files */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +//#include +#define float32_t float32_t1 +#include +#undef float32_t + +#include +#include +#include +#include +#include +#include + +#include + +// global variables +static bool __terminate = false; +char pxie6368_0_ai_fd[] = "/dev/pxie-6368.0.ai"; // ai segment +char pxie6368_0_device[] = "/dev/pxie-6368.0"; // device descriptor + +typedef struct { + int daq_smpl_rate; + int daq_mode; + double daq_smpl_st_dly; + double daq_len; + double daq_pub_dly; +} daq_parameters; + +void signal_handler(int signal) { + log_info("Received signal '%d' to terminate", signal); + __terminate = true; +}; + +// DAN parameter reload function ------------------------------------------------ +int reload_daq_conf(int *aifd, int *ai_chan_fd, daq_parameters *daq_p) { + std::cout << "reload_daq_conf was called \n"; + + // Common variables + int retval; + unsigned long number_of_samples; + int chan_num = 10; // Channel number to add. + uint32_t sample_period_divisor; + uint32_t base_clock = 100000000; // TB3:100MHz, TB2:100 kHz + uint32_t pre_samples = 1000; + uint32_t post_samples = 1000; + char str[40]; + xseries_ai_conf_t conf; // ai segment configuraton data + + // calculate sampling period divisor + if (daq_p->daq_smpl_rate != 0) { + sample_period_divisor = base_clock / daq_p->daq_smpl_rate; + } else { + return 0; + } + + // Stop ai segment---------------------------------------------------------------------- + retval = xseries_stop_ai(*aifd); + if (retval) { + log_error("ai segment stop failed.\n"); + } else { + log_info("ai segment stopped.\n"); + } + + // reset ai segment--------------------------------------------------------------------- + retval = xseries_reset_ai(*aifd); + if (retval) { + log_error("ai segment reset failed.\n"); + return -1; + } + + // Configure AI segment mode ------------------------------------------------------------ + switch (daq_p->daq_mode) { + case 0: + conf = xseries_software_timed_ai(); + log_info("software_timed mode.\n"); + break; + case 1: + conf = xseries_finite_ai(number_of_samples); + log_info("finite mode.\n"); + break; + case 2: + conf = xseries_retriggerable_finite_ai(number_of_samples); + log_info("retriggerable_finite mode.\n"); + break; + case 3: + conf = xseries_continuous_ai(); + log_info("continuous mode.\n"); + break; + case 4: + conf = xseries_reference_ai(pre_samples, post_samples); + log_info("reference mode.\n"); + break; + } + + // disable external gate + retval = xseries_set_ai_external_gate(&conf, + XSERIES_AI_EXTERNAL_GATE_DISABLED, // No external pause signal + XSERIES_AI_POLARITY_ACTIVE_LOW_OR_FALLING_EDGE); // Don't care + if (retval) { + log_error("Cannot set gate trigger.\n"); + return -1; + } + + // select start trigger (START1 signal) + retval = xseries_set_ai_start_trigger(&conf, + XSERIES_AI_START_TRIGGER_SW_PULSE, // Set the line to software-driven + XSERIES_AI_POLARITY_ACTIVE_HIGH_OR_RISING_EDGE, // Make line active on rising... + 1); // ... edge (not high level) + if (retval) { + log_error("Cannot set start trigger.\n"); + return -1; + } + + // set sampling clock source---------------------------------------------------------------------------------------- + retval = xseries_set_ai_sample_clock(&conf, + XSERIES_AI_SAMPLE_CONVERT_CLOCK_INTERNALTIMING, + XSERIES_AI_POLARITY_ACTIVE_HIGH_OR_RISING_EDGE, 1); + if (retval) { + log_error("Cannot configure sampling clock.\n"); + return -1; + } + + // set scan interval ------------------------------------------------------------------------------------------------------------------------- + retval = xseries_set_ai_scan_interval_counter(&conf, + XSERIES_SCAN_INTERVAL_COUNTER_TB3, // TB3 : 100MHz base clock, TB2 : 100kHz base clock + XSERIES_SCAN_INTERVAL_COUNTER_POLARITY_RISING_EDGE, + sample_period_divisor, 2); // Wait 2*100MHz sec after sampling trig. + if (retval) { + log_error("Cannot configure scan counter.\n"); + return -1; + } + + // Set DMA buffer size----------------------------------------------------------------------------------------------------------------------- + retval = xseries_set_ai_attribute(&conf, XSERIES_AI_DMA_BUFFER_SIZE, 1000); + if (retval) { + log_error("DMA configuration was failed.\n"); + return -1; + } + + // Add AI channels --------------------------------------------------------------------------------------------------------------------------- + for (int i = 0; i < chan_num; i++) { + retval = xseries_add_ai_channel(&conf, i, XSERIES_INPUT_RANGE_10V, + XSERIES_AI_CHANNEL_TYPE_DIFFERENTIAL, 0); + if (retval) { + log_error("Add AI channel %d was failed.\n", i); + return -1; + } + } + sleep(3); + + // Load configuration.----------------------------------------------------------------------------------------------------------------------- + retval = xseries_load_ai_conf(*aifd, conf); + if (retval) { + log_error("xseries_load_ai_conf was failed. error code: %d \n", retval); + exit (EXIT_FAILURE); + } + sleep(3); + + // Open channels-------------------------------------------------------------------------------------------------------------------------------- + for (int i = 0; i < chan_num; i++) { + sprintf(str, "%s.ai.%u", pxie6368_0_device, i); + //ai_chan_fd[i] = open(str, O_RDWR | O_NONBLOCK); + ai_chan_fd[i] = open(str, O_RDWR); + if (ai_chan_fd[i] < 0) { + log_error("Cannot open ai channel %d .\n",i); + sleep(1); + exit (EXIT_FAILURE); + } + } + + // start ai segment task----------------------------------------------------------------------------------------------------------------------- + retval = xseries_start_ai(*aifd); + if (retval) { + log_error("ERROR, starting AI segment failed: %s\n", strerror(retval)); + exit (EXIT_FAILURE); + } + + log_info("PXIe-6368 configuration was finished.\n"); + return 0; +}; + + + +int main(int argc, char **argv) { + using namespace std; + unsigned long n_sample_quotient = 0; + + log_initialize(NULL); + + while (!__terminate) { + // Install signal handler to support graceful termination + sigset(SIGTERM, signal_handler); + sigset(SIGINT, signal_handler); + sigset(SIGHUP, signal_handler); + + // ---------------------------------------------------------------------------------------------------------------- + // Running parameter declaration + // ---------------------------------------------------------------------------------------------------------------- + // pxie6368 hardware parameters + int pxie6368_0_device_number = 0; // device discriptor number + int aifd = 0; // ai segment file discriptor + xseries_ai_conf_t conf; // ai segment config + xseries_ai_attribute_t aiatrb; // ai segment attributes + char str[40]; // fd tmp var + int ai_chan_fd[16]; // ai channels file discriptor + int pxie6368_sampling_rate = 1000; // sampling rate Hz + uint32_t sample_period_divisor = 100000000 / pxie6368_sampling_rate; // TB3 100MHz, TB2:100kHz, TB1:20MHz + int sampleSize = 2; // Sample size in bytes <---> uInt16 + int n_channels; // Number of opened channels + struct xseries_dma *dma; // Ptr to dma struct + int chan_num = 10; // Channel number to add. + + // DAN parameters + char dan_source_name[] = "GYADanSource"; // DAN data source (ds) name + long offset_ai = 0; // offset size in published data + int dma_mode = 1; // 0:All, 1:AI only, 2:AO only + dan_DataCore dc = NULL; // Datacore reference declaration + dan_Source ds = NULL; // DAN source declaration + long samplesCounter = 0; // Total acquired sample size + size_t n_samples; // prepared sample size to publish + + // TCN parameters + uint64_t tBase_old = 0; + uint64_t tBase = 0; // TCN publishing base time + uint64_t nanos; // time length for sampling + hpn_timestamp_t delay = 1e7; // wait for publishing (10ms) + char buf[ISO_8601_LEN]; + uint64_t tBase0 = 0; + + // Operation tmp parameter + int result; // For result values. + int exValue; + bool toterminate = false; + int retval; + bool daq_start = false; + int testcounter = 10000; + + // Connected EPCIS PV + + // DAQ config PVs + chid daq_smpl_rate_id; + chtype daq_smpl_rate_type; + int daq_smpl_rate; + chid daq_smpl_rate_rb_id; + chtype daq_smpl_rate_rb_type; + int daq_smpl_rate_rb; + chid daq_mode_id; + chtype daq_mode_type; + int daq_mode; + chid daq_mode_rb_id; + chtype daq_mode_rb_type; + int daq_mode_rb; + chid daq_sw_trig_id; + chtype daq_sw_trig_type; + int daq_sw_trig; + chid daq_smpl_st_dly_id; + chtype daq_smpl_st_dly_type; + double daq_smpl_st_dly; + chid daq_smpl_st_dly_rb_id; + chtype daq_smpl_st_dly_rb_type; + double daq_smpl_st_dly_rb; + chid daq_len_id; + chtype daq_len_type; + double daq_len; + chid daq_len_rb_id; + chtype daq_len_rb_type; + double daq_len_rb; + chid daq_reconf_id; + chtype daq_reconf_type; + int daq_reconf; + chid daq_pub_dly_id; + chtype daq_pub_dly_type; + double daq_pub_dly; + chid daq_pub_dly_rb_id; + chtype daq_pub_dly_rb_type; + double daq_pub_dly_rb; + + chid daq_stat_id; + chtype daq_stat_type; + int daq_stat; + chid daq_conf_stat_id; + chtype daq_conf_stat_type; + int daq_conf_stat; + + daq_parameters daq_p = { 0 }; // = {daq_smpl_rate, daq_smpl_rate_rb, daq_mode, daq_mode_rb}; + + // ---------------------------------------------------------------------------------------------------------------------------------------------- + // EPICS PV connection + // ---------------------------------------------------------------------------------------------------------------------------------------------- + //Initialize ChannelAccess interface + CAInterface_Initialize(); + + // Connect to EPICS PVs + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE", daq_smpl_rate_id); + daq_smpl_rate_type = DBR_LONG; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE-RB", daq_smpl_rate_rb_id); + daq_smpl_rate_rb_type = DBR_LONG; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-MODE", daq_mode_id); + daq_mode_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-MODE-RB", daq_mode_rb_id); + daq_mode_rb_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-SW-TRIG", daq_sw_trig_id); + daq_sw_trig_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-SMPL-ST-DLY", daq_smpl_st_dly_id); + daq_smpl_st_dly_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-SMPL-ST-DLY-RB", daq_smpl_st_dly_rb_id); + daq_smpl_st_dly_rb_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-LEN", daq_len_id); + daq_len_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-LEN-RB", daq_len_rb_id); + daq_len_rb_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-RECONF", daq_reconf_id); + daq_reconf_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-PUB-DLY", daq_pub_dly_id); + daq_pub_dly_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-PUB-DLY-RB", daq_pub_dly_rb_id); + daq_pub_dly_rb_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-STAT", daq_stat_id); + daq_stat_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-CONF-STAT", daq_conf_stat_id); + daq_conf_stat_type = DBR_ENUM; + + tcn_sleep(3e9);// Wait for a while. + + // ---------------------------------------------------------------------------------------------------------------- + // Initialize tcn library + // ---------------------------------------------------------------------------------------------------------------- + int tcn_err; + tcn_err = tcn_init(); + if (tcn_err != TCN_SUCCESS) { + log_error("TCN Initialization failed.\n"); + exValue = 1; + goto END; + } + + // ---------------------------------------------------------------------------------------------------------------- + // pxie-6368 settings + // ---------------------------------------------------------------------------------------------------------------- + // Open ai segment---------------------------------------------------------------------- + aifd = open(pxie6368_0_ai_fd, O_RDWR); + if (aifd <= 0) { + log_error("Open PXIe6368 AI fd failed.\n"); + exValue = -1; + goto END; + } + + // wait ai segment setup start + do { + CAInterface_ReadVariable(daq_reconf_id, daq_reconf_type, (void*) &daq_reconf); + } while (!daq_reconf and !__terminate); + + // read parameter + result = CAInterface_ReadVariable(daq_smpl_rate_id, daq_smpl_rate_type, (void *) &daq_p.daq_smpl_rate); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_mode_id, daq_mode_type, (void *) &daq_p.daq_mode); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_smpl_st_dly_id, daq_smpl_st_dly_type, (void *) &daq_p.daq_smpl_st_dly); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_len_id, daq_len_type, (void *) &daq_p.daq_len); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_pub_dly_id, daq_pub_dly_type, (void *) &daq_p.daq_pub_dly); + if (!result) { + log_error("CA_READ failed.\n"); + } + + std::cout << "SAMPLE RATE:" << daq_p.daq_smpl_rate << endl; + std::cout << "MODE :" << daq_p.daq_mode << endl; + std::cout << "START DELAY:" <ai.count * sampleSize, 4096); + + //dan_DataCore, ds_name, devName, enum_daq_type refType, long refSize, long refOffset + if (ds == NULL) { + log_error("Error while publishing DAN source %s ", dan_source_name); + exValue = 1; + goto END; + } + + n_channels = dan_publisher_getNumberOfChannels(ds); + + // ------------------------------------------------------------------------------------------------------------------ + // ----- DAN Streamer. + // ------------------------------------------------------------------------------------------------------------------ + // ----- Open a new stream --------------------------------------------------------------------- + dan_publisher_openStream(ds, daq_p.daq_smpl_rate, 0); + sleep(1); + + // ------------------------------------------------------------------------------------------------------------------ + // ----- Main DAN Loop. + // ------------------------------------------------------------------------------------------------------------------ + while (!__terminate) { + // Wait for the master trigger.---------------------------------------------------------------------------- + daq_stat = 1; //0:Not Ready, 1: Waiting trigger, 2:Acquiring 3:Error + CAInterface_WriteVariable(daq_stat_id, daq_stat_type, &daq_stat); + daq_conf_stat = 1; //0:Not ready, 1: Ready + CAInterface_WriteVariable(daq_conf_stat_id, daq_conf_stat_type, &daq_conf_stat); + + // Wait DAQ Start Software Trigger. + do { + // check daq_sw_trigger to start DAQ sequence. + CAInterface_ReadVariable(daq_sw_trig_id, daq_sw_trig_type, (void*) &daq_sw_trig); + tcn_sleep(1e7); // wait 0.01 s + if (daq_sw_trig) { + daq_start = true; + } + } while (daq_start != true and !__terminate); + + daq_start = false; //reset daq_start flag. + delay = (long) (1e6 * daq_p.daq_pub_dly); //check publish period. + + // Wait a time to start DAQ. ---------------------------------------------------------------------------------------------------------------------- + tcn_sleep(daq_p.daq_smpl_st_dly * 1e6); // in ms + + // After the wating, trigger DAQ ------------------------------------------------------------------------------------------------------------------ + retval = xseries_pulse_ai(aifd, XSERIES_START_TRIGGER); + daq_stat = 2; + CAInterface_WriteVariable(daq_stat_id, daq_stat_type, &daq_stat); + if (retval) { + std::cout << "Cannot generate start trigger!\n"; + goto END; + } else { + tcn_get_time(&tBase); // get DAQ start time. + tBase0 = tBase; // save DAQ start time to tBase0; + tBase_old = tBase; + } + + // DAQ Publish Loop. ---------------------------------------------------------------------------------------------------------------------------- + // DAN data publish is executed every delay time interval. + while (!__terminate && (tcn_wait_until_hr((tBase + delay), &tBase, 0) == TCN_SUCCESS)) { + // Get the number of available samples in PXIe6368 buffer. + n_samples = xsereis_ai_dma_samples_in_buffer(dma); // samples + + if (n_samples > dma->ai.count) { + //log_error("DMA Buffer overflow: Number of new samples in buffer = %ld, AI buffer size = %ld,\n", n_samples, dma->ai.count); + } else if (n_samples > 0) { + //log_info("Current Time:\n%s\n", tcn_strftime(tBase, buf, ISO_8601_LEN)); + if (tBase == 0) { + // "tBase was reset.------------------------------------------------------\n"; + tcn_get_time(&tBase); + tBase -= n_samples * 100000000 / pxie6368_sampling_rate; + nanos = 0; + } else { + // update time offset value. + nanos = n_samples * 100000000 / daq_p.daq_smpl_rate; + } + n_sample_quotient = floor(n_samples / chan_num); + n_samples = n_sample_quotient * chan_num; + + // Publish a new data block -------------------------------------------------------------------------------------------------------------------------- + result = dan_publisher_putBlockReference(ds, + tBase_old + nanos, // timestamp in epoch nanoseconds + n_samples * sampleSize, // datablock size in bytes + offset_ai * sampleSize, // Offset in DAQ buffer + NULL); // No datablock header.... + // Detected overflow in pass datablock reference queue + if (result == -1) { + log_info("%s, Queue overflow with policy %d\n", dan_source_name, dan_publisher_getCheckPolicy(ds)); + } else if (result == -2) { + log_info("%s, DAQ buffer overflow with policy %d\n", dan_source_name, dan_publisher_getCheckPolicy(ds)); + } + } + + samplesCounter += n_samples; // Increment total of published sampes + offset_ai = (offset_ai + n_samples) % dma->ai.count; // Update offset of memory + dma->ai.last_transfer_count = samplesCounter; // Update dma last_transfer_count + + // Check exit condition. + if ((daq_p.daq_len * 1e6 <= (tBase - tBase0))) { + retval = xseries_stop_ai(aifd); + if (retval) { + std::cout << "Stop AI segment failed.\n"; + exit (EXIT_FAILURE); + } + + //restart ai segment. + tcn_sleep(1e9); // wait + retval = xseries_start_ai(aifd); + if (retval) { + std::cout << "Start AI segment failed.\n"; + exit (EXIT_FAILURE); + } + //debug + tcn_sleep(1e8); + n_samples = xsereis_ai_dma_samples_in_buffer(dma); + cout << "n_samples check : " << n_samples << endl; + break; + } + tBase_old = tBase; + } // End of DAQ publish loop. + break; + } // End of DAN main loop. + + // ------------------------------------------------------------------------------------------------------------------ + // ----- Closing program. + // ------------------------------------------------------------------------------------------------------------------ + log_info("DAN end of acquisition, closing all resources"); + + //Closing stream + dan_publisher_closeStream(ds); + exValue = 0; + + // Close all channels + for (int channel = 0; channel < chan_num; channel++) { + close(ai_chan_fd[channel]); + } + goto END; + + END: daq_conf_stat = 0; + CAInterface_WriteVariable(daq_conf_stat_id, daq_conf_stat_type, &daq_conf_stat); + daq_stat = 0; + CAInterface_WriteVariable(daq_stat_id, daq_stat_type, &daq_stat); + // Destroy CA context + CAInterface_Finalize(); + // Close pxie6368 + if (dma != NULL) { + xseries_dma_close(dma); + cout << "pxie-6368 dma was clesed.\n"; + } + + close(aifd); + + // Unpublishing source from DAN API + if (ds != NULL) { + dan_publisher_unpublishSource(dc, ds); + } + + // Closing DAN API library + if (dc != NULL) { + dan_closeLibrary(dc); + } + + // Closing TCN library + result = tcn_finalize(); + if (result != TCN_SUCCESS) { + //log_error("Error finalizing TCN lib.\n"); + } + + } // loop end from initialization + return (0); + +} diff --git a/EC-GN-JA-PCF/.svn/pristine/f0/f0377310880622e2eca172bb88b190f207f88547.svn-base b/EC-GN-JA-PCF/.svn/pristine/f0/f0377310880622e2eca172bb88b190f207f88547.svn-base new file mode 100644 index 0000000..608ea6c --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/f0/f0377310880622e2eca172bb88b190f207f88547.svn-base @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAWFRecordGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAWFRecordGAM$(LIBEXT) \ + $(BUILD_DIR)/JAWFRecordGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/.svn/pristine/f0/f03902d7f7bafd1fdafea86ccf9bef15bbd9c555.svn-base b/EC-GN-JA-PCF/.svn/pristine/f0/f03902d7f7bafd1fdafea86ccf9bef15bbd9c555.svn-base new file mode 100644 index 0000000..609ad23 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/f0/f03902d7f7bafd1fdafea86ccf9bef15bbd9c555.svn-base @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JARTStateMachineGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JARTStateMachineGAM$(LIBEXT) \ + $(BUILD_DIR)/JARTStateMachineGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/.svn/pristine/f0/f0efe0862364f2316a46e63f3634e9b3a9db69f9.svn-base b/EC-GN-JA-PCF/.svn/pristine/f0/f0efe0862364f2316a46e63f3634e9b3a9db69f9.svn-base new file mode 100644 index 0000000..ef13828 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/f0/f0efe0862364f2316a46e63f3634e9b3a9db69f9.svn-base @@ -0,0 +1,25 @@ +#====================================================================== +# Loading DBs +#====================================================================== +cd $(TOP)/db + + +#====================================================================== +# Loading Substitution Files +#====================================================================== +cd $(TOP)/iocBoot/$(IOC) + + +#====================================================================== +# PLC Communication Monitoring PVs DB Loading +#====================================================================== +cd $(EPICS_ROOT)/db + + +#====================================================================== +# IOC Monitor +#====================================================================== +cd $(EPICS_ROOT)/db +#dbLoadRecords("iocmon.db","CBS=EC-GN-SYSM, CTRLTYPE=À)ú, IDX=0, IOCTYPE=CUB, PP=, PPPP=, NNNN=, TTT=") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/.svn/pristine/f2/f20905aaddc1b55f5073a97b1b2cb437f045ca4d.svn-base b/EC-GN-JA-PCF/.svn/pristine/f2/f20905aaddc1b55f5073a97b1b2cb437f045ca4d.svn-base new file mode 100644 index 0000000..475274d --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/f2/f20905aaddc1b55f5073a97b1b2cb437f045ca4d.svn-base @@ -0,0 +1,42 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +SPB = RandomDataSource.x NI6528.x JAEPICSCA.x + +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults + +ROOT_DIR=../../obj +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +all: $(OBJS) $(SUBPROJ) check-env + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + +check-env: +ifndef MARTe2_DIR + $(error MARTe2_DIR is undefined) +endif + diff --git a/EC-GN-JA-PCF/.svn/pristine/f2/f27171deb4191a528c6ebb16845fb8b759eefd29.svn-base b/EC-GN-JA-PCF/.svn/pristine/f2/f27171deb4191a528c6ebb16845fb8b759eefd29.svn-base new file mode 100644 index 0000000..a3e2747 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/f2/f27171deb4191a528c6ebb16845fb8b759eefd29.svn-base @@ -0,0 +1,415 @@ + + + + Display + + true + EC + GN + SYSM + + 3236 + + + true + 1760 + true + EC-GN-SYSM + 6 + true + true + 0 + + + + + + + + 0 + false + + + + false + -1 + -1 + + + + + true + Grouping Container + + true + + true + 0 + + true + + 2 + groupHeading + + + + true + + false + false + false + + false + + 0 + + + + + + + 0 + + 1243 + 50 + + + + + + true + 1 + true + + 13 + CubicleDetailsLabel + + false + false + false + + true + false + + + + + + + Label + false + Cubicle Details: + + IO Normal + + 40 + 0 + + 2 + + + + 0 + + 55 + true + + 6 + + + + + /opt/codac/opi/epics-sysmon/boy/ITER-SYSM-CUB_Mimic.opi + + true + + 0 + + + + false + + + + 6 + 2 + true + + IO Label + + false + + + + 37 + + Action Button Template + 0 + + + + + false + false + false + + + + More Details + false + $(pv_name) +$(pv_value) + true + Action Button + 279 + 6cb4f02d:15e5c6fbe55:-70fa + 200 + 45 + + + + + true + 1 + true + + 13 + CubicleDetailsLabel + + false + false + false + + true + false + + + + + + + Label + false + $(CUB_LOC) + + IO Normal + + 40 + 0 + + 2 + + + + 0 + + 55 + true + + 600 + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + (ºC) + + + + + + + + + + + + 1 + + + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):CU$(NNNN)-HTH-CY1 + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):CU$(NNNN)-HTH-CY2 + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):CU$(NNNN)-HTH-FAN + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):CU$(NNNN)-HTH-TT + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):CU$(NNNN)-SHLT + + + 1000 + CubicleDetailsTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1000 + 0 + + + Name + 200 + no + + + Value + 200 + no + + + Status + 100 + no + + + Severity + 100 + no + + + EGU + 0 + no + + + false + + 2 + + + + 4 + + 125 + + 6 + + + + + + + + true + Grouping Container + + true + + true + 1243 + + false + false + false + + 0 + + true + + 26 + 2 + groupICProjectInfo + + + + true + false + + 1500 + + + + + + + 0 + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 38 + 0 + I&C Project Name: EC-GN, Version: 4 + + + false + false + false + + + false + I&C Project Name: EC-GN, Version: 4 + + true + 1 + true + Label + 3000 + true + + 40 + 0 + + + + + + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/f3/f32c802bbf846018a091da9bca15df6cc9c92ed9.svn-base b/EC-GN-JA-PCF/.svn/pristine/f3/f32c802bbf846018a091da9bca15df6cc9c92ed9.svn-base new file mode 100644 index 0000000..c812fc7 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/f3/f32c802bbf846018a091da9bca15df6cc9c92ed9.svn-base @@ -0,0 +1,310 @@ +record (bi,"EC-GN-P01-GAF-CCPS:PSU2320-OUTON-RB") +{ + field(DESC, "GY1 CCPS Output ON status") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getOut CCPS1") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-CCPS:PSU2320-OUTON-SP") +{ + field(DESC, "GY1 CCPS Output ON") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PWX1500ML.proto setOut CCPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-RB") +{ + field(DESC, "GY1 CCPS remote readback") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getRem CCPS1") + field(ONAM, "REM") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(ZNAM, "LOC") +} + +record (bo,"EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-SP") +{ + field(DESC, "GY1 CCPS remote control on") + field(DTYP, "stream") + field(ONAM, "REM") + field(OUT, "@PWX1500ML.proto setRem CCPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(ZNAM, "LOC") +} + +record (bo,"EC-GN-P01-GAF-CCPS:PSU2320-RST") +{ + field(DESC, "GY1 CCPS reset device") + field(DTYP, "stream") + field(OUT, "@PWX1500ML.proto resetDevice CCPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") +} + +record (bi,"EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-RB") +{ + field(DESC, "GY1 CCPS signal source on") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getSourceON CCPS1") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-SP") +{ + field(DESC, "GY1 CCPS signal source on") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PWX1500ML.proto setSourceON CCPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAF-CCPS:PSU2320-STAT") +{ + field(DESC, "CCPS1 is running") + field(ONAM, "ON") + field(SCAN, "Passive") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-CCPS:PSU2320-TR") +{ + field(DESC, "GY1 CCPS in Operation") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-CCPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 CCPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-CCPS:STAT-SIMM") +{ + field(DESC, "GY1 CCPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (ai,"EC-GN-P01-GAF-CCPS:PSU2320-CURR-RB") +{ + field(DESC, "GY1 CCPS Output current readback") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "60.0") + field(INP, "@PWX1500ML.proto getCurr CCPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-CCPS:PSU2320-CURR-SP") +{ + field(DESC, "GY1 CCPS Output current setpoint") + field(DRVH, "58.8") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "58.8") + field(LOPR, "0") + field(OUT, "@PWX1500ML.proto setCurr CCPS1") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF-CCPS:PSU2320-DCV-RB") +{ + field(DESC, "GY1 CCPS DCV range readback") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(INP, "@PWX1500ML.proto getVolt CCPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-CCPS:PSU2320-DCV-SP") +{ + field(DESC, "GY1 CCPS Output DCV setpoint") + field(DRVH, "84") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "84") + field(LOPR, "0") + field(OUT, "@PWX1500ML.proto setVolt CCPS1") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-CCPS:PSU2320-EREF") +{ + field(DESC, "GY1 CCPS voltage setpoint") + field(DRVH, "80") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "80") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-CCPS:PSU2320-EREF-MSP") +{ + field(DESC, "GY1 CCPS voltage manual setpoint") + field(DRVH, "80") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "80") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (stringin,"EC-GN-P01-GAF-CCPS:PSU2320-ERROR") +{ + field(DESC, "GY1 CCPS Error message") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getError CCPS1") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") +} + +record (stringin,"EC-GN-P01-GAF-CCPS:PSU2320-IDN") +{ + field(DESC, "GY1 CCPS IDN") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto readDeviceID CCPS1") + field(PINI, "NO") + field(SCAN, "10 second") +} + +record (ai,"EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCI") +{ + field(DESC, "GY1 CCPS Measued DC Current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "58.8") + field(INP, "@PWX1500ML.proto getMeasDCI CCPS1") + field(LOPR, "-58.8") + field(PINI, "NO") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCV") +{ + field(DESC, "GY1 CCPS Measued DC Voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "200") + field(INP, "@PWX1500ML.proto getMeasDCV CCPS1") + field(LOPR, "-200") + field(PINI, "NO") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF-CCPS:STAT-AMP") +{ + field(DESC, "Amplitude") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "3.5") +} + +record (ai,"EC-GN-P01-GAF-CCPS:STAT-FREQ") +{ + field(DESC, "Frequency") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "1") +} + +record (ai,"EC-GN-P01-GAF-CCPS:STAT-OFFS") +{ + field(DESC, "Offset") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "1") +} + +record (calcout,"EC-GN-P01-GAF-CCPS:STAT-OP-CALC") +{ + field(CALC, "(A==1 || B==1 || C==1)?1:0; C:=B; B:=A") + field(DESC, "GYA CCPS operation check") + field(FLNK, "EC-GN-P01-GAF-CCPS:PSU2320-TR") + field(INPA, "EC-GN-P01-GAF-CCPS:STAT-OP-V-DIFF") + field(INPB, "0") + field(INPC, "0") + field(OUT, "EC-GN-P01-GAF-CCPS:PSU2320-TR") + field(SCAN, "Passive") +} + +record (calc,"EC-GN-P01-GAF-CCPS:STAT-OP-V-DIFF") +{ + field(CALC, "(A==1 andand ABS(B-C)>0.1)?1:0; C:=B") + field(DESC, "GYA CCPS operation check") + field(FLNK, "EC-GN-P01-GAF-CCPS:STAT-OP-CALC") + field(INPA, "EC-GN-P01-GAF-CCPS:PSU2320-OUTON-RB") + field(INPB, "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCV PP") + field(SCAN, ".1 second") +} + diff --git a/EC-GN-JA-PCF/.svn/pristine/f3/f3c1364581e86c750d0983d3fdceeb2e6031861a.svn-base b/EC-GN-JA-PCF/.svn/pristine/f3/f3c1364581e86c750d0983d3fdceeb2e6031861a.svn-base new file mode 100644 index 0000000..dc0b827 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/f3/f3c1364581e86c750d0983d3fdceeb2e6031861a.svn-base @@ -0,0 +1,36 @@ +//+====================================================================== +// $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-sdd-translator-parts/tags/CODAC-CORE-6.0.0/org.iter.codac.sdd.translators/src/main/resources/templates/sdn/topicvars.h.vm $ +// $Id: topicvars.h.vm 83098 2018-01-08 13:23:38Z cesnikt $ +// +// Project : CODAC Core System +// +// Description : SDN Program - Gyrotron01DAN +// +// Author : Kirti Mahajan, Lana Abadie and TCS (link with velocity and SDD model) +// +// Copyright (c) : 2010-2018 ITER Organization, +// CS 90 046 +// 13067 St. Paul-lez-Durance Cedex +// France +// +// This file is part of ITER CODAC software. +// For the terms and conditions of redistribution or use of this software +// refer to the file ITER-LICENSE.TXT located in the top level directory +// of the distribution package. +// +//-====================================================================== + +#ifndef TOPICVARS_H +#define TOPICVARS_H + +#include "includetopics.h" + +/* Declare variables for the topics on which application is publishing. */ +//+P===================================================================== +//-P===================================================================== + +/* Declare variables for the topics to which application is subscribing. */ +//+S===================================================================== +//-S===================================================================== + +#endif diff --git a/EC-GN-JA-PCF/.svn/pristine/f5/f509fcf27142ed712c031f1726608af3779a9d71.svn-base b/EC-GN-JA-PCF/.svn/pristine/f5/f509fcf27142ed712c031f1726608af3779a9d71.svn-base new file mode 100644 index 0000000..4e9e67d --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/f5/f509fcf27142ed712c031f1726608af3779a9d71.svn-base @@ -0,0 +1,25 @@ +/* CUBMain.cpp */ +/* Author: Marty Kraimer Date: 17MAR2000 */ + +#include +#include +#include +#include +#include +#include + +#include "epicsExit.h" +#include "epicsThread.h" +#include "iocsh.h" + +int main(int argc,char *argv[]) +{ + sigset(SIGTERM, epicsExit); + if(argc>=2) { + iocsh(argv[1]); + epicsThreadSleep(.2); + } + iocsh(NULL); + epicsExit(0); + return(0); +} diff --git a/EC-GN-JA-PCF/.svn/pristine/f5/f54562cad53678797b8e28923d1b18b1d2816add.svn-base b/EC-GN-JA-PCF/.svn/pristine/f5/f54562cad53678797b8e28923d1b18b1d2816add.svn-base new file mode 100644 index 0000000..cf99a15 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/f5/f54562cad53678797b8e28923d1b18b1d2816add.svn-base @@ -0,0 +1,28 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +import test_async +import test_sync +import test_ready_hw +import test_setup_hw +import test_standby_hw +import test_ready +import test_setup +import test_standby +import test_setup_rup_confirm + +# +# Some EPICS PVs need to be simulation mode when we test code without PXI board. +# When user uses sim mode, new value must be written into PV.SVAL and PV itselfself. +# +print '### Start State Machine Sequence Test ###' + +print '---------- Pre setup for the test ----------' +test_setup_rup_confirm.test_setup() +#test_setup.test_setup() +#test_setup_hw.test_setup() + + diff --git a/EC-GN-JA-PCF/.svn/pristine/f5/f55388950989e12fd6e95f5628233cafc0b783b0.svn-base b/EC-GN-JA-PCF/.svn/pristine/f5/f55388950989e12fd6e95f5628233cafc0b783b0.svn-base new file mode 100644 index 0000000..e981b6d --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/f5/f55388950989e12fd6e95f5628233cafc0b783b0.svn-base @@ -0,0 +1,1013 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,0,1,1,100,1,5 +10,0,1,1,100,1,5 +20,0,1,1,100,1,5 +30,0,1,1,100,1,5 +40,0,1,1,100,1,5 +50,0,1,1,100,1,5 +60,0,1,1,100,1,5 +70,0,1,1,100,1,5 +80,0,1,1,100,1,5 +90,0,1,1,100,1,5 +100,0,1,1,100,1,5 +110,0,1,1,100,1,5 +120,0,1,1,100,1,5 +130,0,1,1,100,1,5 +140,0,1,1,100,1,5 +150,0,1,1,100,1,5 +160,0,1,1,100,1,5 +170,0,1,1,100,1,5 +180,0,1,1,100,1,5 +190,0,1,1,100,1,5 +200,0,1,1,100,1,5 +210,0,1,1,100,1,5 +220,0,1,1,100,1,5 +230,0,1,1,100,1,5 +240,0,1,1,100,1,5 +250,0,1,1,100,1,5 +260,0,1,1,100,1,5 +270,0,1,1,100,1,5 +280,0,1,1,100,1,5 +290,0,1,1,100,1,5 +300,0,1,1,100,1,5 +310,0,1,1,100,1,5 +320,0,1,1,100,1,5 +330,0,1,1,100,1,5 +340,0,1,1,100,1,5 +350,0,1,1,100,1,5 +360,0,1,1,100,1,5 +370,0,1,1,100,1,5 +380,0,1,1,100,1,5 +390,0,1,1,100,1,5 +400,0,1,1,100,1,5 +410,0,1,1,100,1,5 +420,0,1,1,100,1,5 +430,0,1,1,100,1,5 +440,0,1,1,100,1,5 +450,0,1,1,100,1,5 +460,0,1,1,100,1,5 +470,0,1,1,100,1,5 +480,0,1,1,100,1,5 +490,0,1,1,100,1,5 +500,0,1,1,100,1,5 +510,0,1,1,100,1,5 +520,0,1,1,100,1,5 +530,0,1,1,100,1,5 +540,0,1,1,100,1,5 +550,0,1,1,100,1,5 +560,0,1,1,100,1,5 +570,0,1,1,100,1,5 +580,0,1,1,100,1,5 +590,0,1,1,100,1,5 +600,0,1,1,100,1,5 +610,0,1,1,100,1,5 +620,0,1,1,100,1,5 +630,0,1,1,100,1,5 +640,0,1,1,100,1,5 +650,0,1,1,100,1,5 +660,0,1,1,100,1,5 +670,0,1,1,100,1,5 +680,0,1,1,100,1,5 +690,0,1,1,100,1,5 +700,0,1,1,100,1,5 +710,0,1,1,100,1,5 +720,0,1,1,100,1,5 +730,0,1,1,100,1,5 +740,0,1,1,100,1,5 +750,0,1,1,100,1,5 +760,0,1,1,100,1,5 +770,0,1,1,100,1,5 +780,0,1,1,100,1,5 +790,0,1,1,100,1,5 +800,0,1,1,100,1,5 +810,0,1,1,100,1,5 +820,0,1,1,100,1,5 +830,0,1,1,100,1,5 +840,0,1,1,100,1,5 +850,0,1,1,100,1,5 +860,0,1,1,100,1,5 +870,0,1,1,100,1,5 +880,0,1,1,100,1,5 +890,0,1,1,100,1,5 +900,0,1,1,100,1,5 +910,0,1,1,100,1,5 +920,0,1,1,100,1,5 +930,0,1,1,100,1,5 +940,0,1,1,100,1,5 +950,0,1,1,100,1,5 +960,0,1,1,100,1,5 +970,0,1,1,100,1,5 +980,0,1,1,100,1,5 +990,0,1,1,100,1,5 +1000,0,1,1,100,1,5 +1010,0,1,1,100,1,5 +1020,0,1,1,100,1,5 +1030,0,1,1,100,1,5 +1040,0,1,1,100,1,5 +1050,0,1,1,100,1,5 +1060,0,1,1,100,1,5 +1070,0,1,1,100,1,5 +1080,0,1,1,100,1,5 +1090,0,1,1,100,1,5 +1100,0,1,1,100,1,5 +1110,0,1,1,100,1,5 +1120,0,1,1,100,1,5 +1130,0,1,1,100,1,5 +1140,0,1,1,100,1,5 +1150,0,1,1,100,1,5 +1160,0,1,1,100,1,5 +1170,0,1,1,100,1,5 +1180,0,1,1,100,1,5 +1190,0,1,1,100,1,5 +1200,0,1,1,100,1,5 +1210,0,1,1,100,1,5 +1220,0,1,1,100,1,5 +1230,0,1,1,100,1,5 +1240,0,1,1,100,1,5 +1250,0,1,1,100,1,5 +1260,0,1,1,100,1,5 +1270,0,1,1,100,1,5 +1280,0,1,1,100,1,5 +1290,0,1,1,100,1,5 +1300,0,1,1,100,1,5 +1310,0,1,1,100,1,5 +1320,0,1,1,100,1,5 +1330,0,1,1,100,1,5 +1340,0,1,1,100,1,5 +1350,0,1,1,100,1,5 +1360,0,1,1,100,1,5 +1370,0,1,1,100,1,5 +1380,0,1,1,100,1,5 +1390,0,1,1,100,1,5 +1400,0,1,1,100,1,5 +1410,0,1,1,100,1,5 +1420,0,1,1,100,1,5 +1430,0,1,1,100,1,5 +1440,0,1,1,100,1,5 +1450,0,1,1,100,1,5 +1460,0,1,1,100,1,5 +1470,0,1,1,100,1,5 +1480,0,1,1,100,1,5 +1490,0,1,1,100,1,5 +1500,0,1,1,100,1,5 +1510,0,1,1,100,1,5 +1520,0,1,1,100,1,5 +1530,0,1,1,100,1,5 +1540,0,1,1,100,1,5 +1550,0,1,1,100,1,5 +1560,0,1,1,100,1,5 +1570,0,1,1,100,1,5 +1580,0,1,1,100,1,5 +1590,0,1,1,100,1,5 +1600,0,1,1,100,1,5 +1610,0,1,1,100,1,5 +1620,0,1,1,100,1,5 +1630,0,1,1,100,1,5 +1640,0,1,1,100,1,5 +1650,0,1,1,100,1,5 +1660,0,1,1,100,1,5 +1670,0,1,1,100,1,5 +1680,0,1,1,100,1,5 +1690,0,1,1,100,1,5 +1700,0,1,1,100,1,5 +1710,0,1,1,100,1,5 +1720,0,1,1,100,1,5 +1730,0,1,1,100,1,5 +1740,0,1,1,100,1,5 +1750,0,1,1,100,1,5 +1760,0,1,1,100,1,5 +1770,0,1,1,100,1,5 +1780,0,1,1,100,1,5 +1790,0,1,1,100,1,5 +1800,0,1,1,100,1,5 +1810,0,1,1,100,1,5 +1820,0,1,1,100,1,5 +1830,0,1,1,100,1,5 +1840,0,1,1,100,1,5 +1850,0,1,1,100,1,5 +1860,0,1,1,100,1,5 +1870,0,1,1,100,1,5 +1880,0,1,1,100,1,5 +1890,0,1,1,100,1,5 +1900,0,1,1,100,1,5 +1910,0,1,1,100,1,5 +1920,0,1,1,100,1,5 +1930,0,1,1,100,1,5 +1940,0,1,1,100,1,5 +1950,0,1,1,100,1,5 +1960,0,1,1,100,1,5 +1970,0,1,1,100,1,5 +1980,0,1,1,100,1,5 +1990,0,1,1,100,1,5 +2000,0,1,1,100,1,5 +2010,0,1,1,100,1,5 +2020,0,1,1,100,1,5 +2030,0,1,1,100,1,5 +2040,0,1,1,100,1,5 +2050,0,1,1,100,1,5 +2060,0,1,1,100,1,5 +2070,0,1,1,100,1,5 +2080,0,1,1,100,1,5 +2090,0,1,1,100,1,5 +2100,0,1,1,100,1,5 +2110,0,1,1,100,1,5 +2120,0,1,1,100,1,5 +2130,0,1,1,100,1,5 +2140,0,1,1,100,1,5 +2150,0,1,1,100,1,5 +2160,0,1,1,100,1,5 +2170,0,1,1,100,1,5 +2180,0,1,1,100,1,5 +2190,0,1,1,100,1,5 +2200,0,1,1,100,1,5 +2210,0,1,1,100,1,5 +2220,0,1,1,100,1,5 +2230,0,1,1,100,1,5 +2240,0,1,1,100,1,5 +2250,0,1,1,100,1,5 +2260,0,1,1,100,1,5 +2270,0,1,1,100,1,5 +2280,0,1,1,100,1,5 +2290,0,1,1,100,1,5 +2300,0,1,1,100,1,5 +2310,0,1,1,100,1,5 +2320,0,1,1,100,1,5 +2330,0,1,1,100,1,5 +2340,0,1,1,100,1,5 +2350,0,1,1,100,1,5 +2360,0,1,1,100,1,5 +2370,0,1,1,100,1,5 +2380,0,1,1,100,1,5 +2390,0,1,1,100,1,5 +2400,0,1,1,100,1,5 +2410,0,1,1,100,1,5 +2420,0,1,1,100,1,5 +2430,0,1,1,100,1,5 +2440,0,1,1,100,1,5 +2450,0,1,1,100,1,5 +2460,0,1,1,100,1,5 +2470,0,1,1,100,1,5 +2480,0,1,1,100,1,5 +2490,0,1,1,100,1,5 +2500,0,1,1,100,1,5 +2510,0,1,1,100,1,5 +2520,0,1,1,100,1,5 +2530,0,1,1,100,1,5 +2540,0,1,1,100,1,5 +2550,0,1,1,100,1,5 +2560,0,1,1,100,1,5 +2570,0,1,1,100,1,5 +2580,0,1,1,100,1,5 +2590,0,1,1,100,1,5 +2600,0,1,1,100,1,5 +2610,0,1,1,100,1,5 +2620,0,1,1,100,1,5 +2630,0,1,1,100,1,5 +2640,0,1,1,100,1,5 +2650,0,1,1,100,1,5 +2660,0,1,1,100,1,5 +2670,0,1,1,100,1,5 +2680,0,1,1,100,1,5 +2690,0,1,1,100,1,5 +2700,0,1,1,100,1,5 +2710,0,1,1,100,1,5 +2720,0,1,1,100,1,5 +2730,0,1,1,100,1,5 +2740,0,1,1,100,1,5 +2750,0,1,1,100,1,5 +2760,0,1,1,100,1,5 +2770,0,1,1,100,1,5 +2780,0,1,1,100,1,5 +2790,0,1,1,100,1,5 +2800,0,1,1,100,1,5 +2810,0,1,1,100,1,5 +2820,0,1,1,100,1,5 +2830,0,1,1,100,1,5 +2840,0,1,1,100,1,5 +2850,0,1,1,100,1,5 +2860,0,1,1,100,1,5 +2870,0,1,1,100,1,5 +2880,0,1,1,100,1,5 +2890,0,1,1,100,1,5 +2900,0,1,1,100,1,5 +2910,0,1,1,100,1,5 +2920,0,1,1,100,1,5 +2930,0,1,1,100,1,5 +2940,0,1,1,100,1,5 +2950,0,1,1,100,1,5 +2960,0,1,1,100,1,5 +2970,0,1,1,100,1,5 +2980,0,1,1,100,1,5 +2990,0,1,1,100,1,5 +3000,0,1,1,100,1,5 +3010,0,1,1,100,1,5 +3020,0,1,1,100,1,5 +3030,0,1,1,100,1,5 +3040,0,1,1,100,1,5 +3050,0,1,1,100,1,5 +3060,0,1,1,100,1,5 +3070,0,1,1,100,1,5 +3080,0,1,1,100,1,5 +3090,0,1,1,100,1,5 +3100,0,1,1,100,1,5 +3110,0,1,1,100,1,5 +3120,0,1,1,100,1,5 +3130,0,1,1,100,1,5 +3140,0,1,1,100,1,5 +3150,0,1,1,100,1,5 +3160,0,1,1,100,1,5 +3170,0,1,1,100,1,5 +3180,0,1,1,100,1,5 +3190,0,1,1,100,1,5 +3200,0,1,1,100,1,5 +3210,0,1,1,100,1,5 +3220,0,1,1,100,1,5 +3230,0,1,1,100,1,5 +3240,0,1,1,100,1,5 +3250,0,1,1,100,1,5 +3260,0,1,1,100,1,5 +3270,0,1,1,100,1,5 +3280,0,1,1,100,1,5 +3290,0,1,1,100,1,5 +3300,0,1,1,100,1,5 +3310,0,1,1,100,1,5 +3320,0,1,1,100,1,5 +3330,0,1,1,100,1,5 +3340,0,1,1,100,1,5 +3350,0,1,1,100,1,5 +3360,0,1,1,100,1,5 +3370,0,1,1,100,1,5 +3380,0,1,1,100,1,5 +3390,0,1,1,100,1,5 +3400,0,1,1,100,1,5 +3410,0,1,1,100,1,5 +3420,0,1,1,100,1,5 +3430,0,1,1,100,1,5 +3440,0,1,1,100,1,5 +3450,0,1,1,100,1,5 +3460,0,1,1,100,1,5 +3470,0,1,1,100,1,5 +3480,0,1,1,100,1,5 +3490,0,1,1,100,1,5 +3500,0,1,1,100,1,5 +3510,0,1,1,100,1,5 +3520,0,1,1,100,1,5 +3530,0,1,1,100,1,5 +3540,0,1,1,100,1,5 +3550,0,1,1,100,1,5 +3560,0,1,1,100,1,5 +3570,0,1,1,100,1,5 +3580,0,1,1,100,1,5 +3590,0,1,1,100,1,5 +3600,0,1,1,100,1,5 +3610,0,1,1,100,1,5 +3620,0,1,1,100,1,5 +3630,0,1,1,100,1,5 +3640,0,1,1,100,1,5 +3650,0,1,1,100,1,5 +3660,0,1,1,100,1,5 +3670,0,1,1,100,1,5 +3680,0,1,1,100,1,5 +3690,0,1,1,100,1,5 +3700,0,1,1,100,1,5 +3710,0,1,1,100,1,5 +3720,0,1,1,100,1,5 +3730,0,1,1,100,1,5 +3740,0,1,1,100,1,5 +3750,0,1,1,100,1,5 +3760,0,1,1,100,1,5 +3770,0,1,1,100,1,5 +3780,0,1,1,100,1,5 +3790,0,1,1,100,1,5 +3800,0,1,1,100,1,5 +3810,0,1,1,100,1,5 +3820,0,1,1,100,1,5 +3830,0,1,1,100,1,5 +3840,0,1,1,100,1,5 +3850,0,1,1,100,1,5 +3860,0,1,1,100,1,5 +3870,0,1,1,100,1,5 +3880,0,1,1,100,1,5 +3890,0,1,1,100,1,5 +3900,0,1,1,100,1,5 +3910,0,1,1,100,1,5 +3920,0,1,1,100,1,5 +3930,0,1,1,100,1,5 +3940,0,1,1,100,1,5 +3950,0,1,1,100,1,5 +3960,0,1,1,100,1,5 +3970,0,1,1,100,1,5 +3980,0,1,1,100,1,5 +3990,0,1,1,100,1,5 +4000,0,1,1,100,1,5 +4010,0,1,1,100,1,5 +4020,0,1,1,100,1,5 +4030,0,1,1,100,1,5 +4040,0,1,1,100,1,5 +4050,0,1,1,100,1,5 +4060,0,1,1,100,1,5 +4070,0,1,1,100,1,5 +4080,0,1,1,100,1,5 +4090,0,1,1,100,1,5 +4100,0,1,1,100,1,5 +4110,0,1,1,100,1,5 +4120,0,1,1,100,1,5 +4130,0,1,1,100,1,5 +4140,0,1,1,100,1,5 +4150,0,1,1,100,1,5 +4160,0,1,1,100,1,5 +4170,0,1,1,100,1,5 +4180,0,1,1,100,1,5 +4190,0,1,1,100,1,5 +4200,0,1,1,100,1,5 +4210,0,1,1,100,1,5 +4220,0,1,1,100,1,5 +4230,0,1,1,100,1,5 +4240,0,1,1,100,1,5 +4250,0,1,1,100,1,5 +4260,0,1,1,100,1,5 +4270,0,1,1,100,1,5 +4280,0,1,1,100,1,5 +4290,0,1,1,100,1,5 +4300,0,1,1,100,1,5 +4310,0,1,1,100,1,5 +4320,0,1,1,100,1,5 +4330,0,1,1,100,1,5 +4340,0,1,1,100,1,5 +4350,0,1,1,100,1,5 +4360,0,1,1,100,1,5 +4370,0,1,1,100,1,5 +4380,0,1,1,100,1,5 +4390,0,1,1,100,1,5 +4400,0,1,1,100,1,5 +4410,0,1,1,100,1,5 +4420,0,1,1,100,1,5 +4430,0,1,1,100,1,5 +4440,0,1,1,100,1,5 +4450,0,1,1,100,1,5 +4460,0,1,1,100,1,5 +4470,0,1,1,100,1,5 +4480,0,1,1,100,1,5 +4490,0,1,1,100,1,5 +4500,0,1,1,100,1,5 +4510,0,1,1,100,1,5 +4520,0,1,1,100,1,5 +4530,0,1,1,100,1,5 +4540,0,1,1,100,1,5 +4550,0,1,1,100,1,5 +4560,0,1,1,100,1,5 +4570,0,1,1,100,1,5 +4580,0,1,1,100,1,5 +4590,0,1,1,100,1,5 +4600,0,1,1,100,1,5 +4610,0,1,1,100,1,5 +4620,0,1,1,100,1,5 +4630,0,1,1,100,1,5 +4640,0,1,1,100,1,5 +4650,0,1,1,100,1,5 +4660,0,1,1,100,1,5 +4670,0,1,1,100,1,5 +4680,0,1,1,100,1,5 +4690,0,1,1,100,1,5 +4700,0,1,1,100,1,5 +4710,0,1,1,100,1,5 +4720,0,1,1,100,1,5 +4730,0,1,1,100,1,5 +4740,0,1,1,100,1,5 +4750,0,1,1,100,1,5 +4760,0,1,1,100,1,5 +4770,0,1,1,100,1,5 +4780,0,1,1,100,1,5 +4790,0,1,1,100,1,5 +4800,0,1,1,100,1,5 +4810,0,1,1,100,1,5 +4820,0,1,1,100,1,5 +4830,0,1,1,100,1,5 +4840,0,1,1,100,1,5 +4850,0,1,1,100,1,5 +4860,0,1,1,100,1,5 +4870,0,1,1,100,1,5 +4880,0,1,1,100,1,5 +4890,0,1,1,100,1,5 +4900,0,1,1,100,1,5 +4910,0,1,1,100,1,5 +4920,0,1,1,100,1,5 +4930,0,1,1,100,1,5 +4940,0,1,1,100,1,5 +4950,0,1,1,100,1,5 +4960,0,1,1,100,1,5 +4970,0,1,1,100,1,5 +4980,0,1,1,100,1,5 +4990,0,1,1,100,1,5 +5000,0,2,2,100,1,5 +5010,0,2,2,100,1,5 +5020,0,2,2,100,1,5 +5030,0,2,2,100,1,5 +5040,0,2,2,100,1,5 +5050,0,2,2,100,1,5 +5060,0,2,2,100,1,5 +5070,0,2,2,100,1,5 +5080,0,2,2,100,1,5 +5090,0,2,2,100,1,5 +5100,0,2,2,100,1,5 +5110,0,2,2,100,1,5 +5120,0,2,2,100,1,5 +5130,0,2,2,100,1,5 +5140,0,2,2,100,1,5 +5150,0,2,2,100,1,5 +5160,0,2,2,100,1,5 +5170,0,2,2,100,1,5 +5180,0,2,2,100,1,5 +5190,0,2,2,100,1,5 +5200,0,2,2,100,1,5 +5210,0,2,2,100,1,5 +5220,0,2,2,100,1,5 +5230,0,2,2,100,1,5 +5240,0,2,2,100,1,5 +5250,0,2,2,100,1,5 +5260,0,2,2,100,1,5 +5270,0,2,2,100,1,5 +5280,0,2,2,100,1,5 +5290,0,2,2,100,1,5 +5300,0,2,2,100,1,5 +5310,0,2,2,100,1,5 +5320,0,2,2,100,1,5 +5330,0,2,2,100,1,5 +5340,0,2,2,100,1,5 +5350,0,2,2,100,1,5 +5360,0,2,2,100,1,5 +5370,0,2,2,100,1,5 +5380,0,2,2,100,1,5 +5390,0,2,2,100,1,5 +5400,0,2,2,100,1,5 +5410,0,2,2,100,1,5 +5420,0,2,2,100,1,5 +5430,0,2,2,100,1,5 +5440,0,2,2,100,1,5 +5450,0,2,2,100,1,5 +5460,0,2,2,100,1,5 +5470,0,2,2,100,1,5 +5480,0,2,2,100,1,5 +5490,0,2,2,100,1,5 +5500,0,2,2,100,1,5 +5510,0,2,2,100,1,5 +5520,0,2,2,100,1,5 +5530,0,2,2,100,1,5 +5540,0,2,2,100,1,5 +5550,0,2,2,100,1,5 +5560,0,2,2,100,1,5 +5570,0,2,2,100,1,5 +5580,0,2,2,100,1,5 +5590,0,2,2,100,1,5 +5600,0,2,2,100,1,5 +5610,0,2,2,100,1,5 +5620,0,2,2,100,1,5 +5630,0,2,2,100,1,5 +5640,0,2,2,100,1,5 +5650,0,2,2,100,1,5 +5660,0,2,2,100,1,5 +5670,0,2,2,100,1,5 +5680,0,2,2,100,1,5 +5690,0,2,2,100,1,5 +5700,0,2,2,100,1,5 +5710,0,2,2,100,1,5 +5720,0,2,2,100,1,5 +5730,0,2,2,100,1,5 +5740,0,2,2,100,1,5 +5750,0,2,2,100,1,5 +5760,0,2,2,100,1,5 +5770,0,2,2,100,1,5 +5780,0,2,2,100,1,5 +5790,0,2,2,100,1,5 +5800,0,2,2,100,1,5 +5810,0,2,2,100,1,5 +5820,0,2,2,100,1,5 +5830,0,2,2,100,1,5 +5840,0,2,2,100,1,5 +5850,0,2,2,100,1,5 +5860,0,2,2,100,1,5 +5870,0,2,2,100,1,5 +5880,0,2,2,100,1,5 +5890,0,2,2,100,1,5 +5900,0,2,2,100,1,5 +5910,0,2,2,100,1,5 +5920,0,2,2,100,1,5 +5930,0,2,2,100,1,5 +5940,0,2,2,100,1,5 +5950,0,2,2,100,1,5 +5960,0,2,2,100,1,5 +5970,0,2,2,100,1,5 +5980,0,2,2,100,1,5 +5990,0,2,2,100,1,5 +6000,0,2,2,100,1,5 +6010,0,2,2,100,1,5 +6020,0,2,2,100,1,5 +6030,0,2,2,100,1,5 +6040,0,2,2,100,1,5 +6050,0,2,2,100,1,5 +6060,0,2,2,100,1,5 +6070,0,2,2,100,1,5 +6080,0,2,2,100,1,5 +6090,0,2,2,100,1,5 +6100,0,2,2,100,1,5 +6110,0,2,2,100,1,5 +6120,0,2,2,100,1,5 +6130,0,2,2,100,1,5 +6140,0,2,2,100,1,5 +6150,0,2,2,100,1,5 +6160,0,2,2,100,1,5 +6170,0,2,2,100,1,5 +6180,0,2,2,100,1,5 +6190,0,2,2,100,1,5 +6200,0,2,2,100,1,5 +6210,0,2,2,100,1,5 +6220,0,2,2,100,1,5 +6230,0,2,2,100,1,5 +6240,0,2,2,100,1,5 +6250,0,2,2,100,1,5 +6260,0,2,2,100,1,5 +6270,0,2,2,100,1,5 +6280,0,2,2,100,1,5 +6290,0,2,2,100,1,5 +6300,0,2,2,100,1,5 +6310,0,2,2,100,1,5 +6320,0,2,2,100,1,5 +6330,0,2,2,100,1,5 +6340,0,2,2,100,1,5 +6350,0,2,2,100,1,5 +6360,0,2,2,100,1,5 +6370,0,2,2,100,1,5 +6380,0,2,2,100,1,5 +6390,0,2,2,100,1,5 +6400,0,2,2,100,1,5 +6410,0,2,2,100,1,5 +6420,0,2,2,100,1,5 +6430,0,2,2,100,1,5 +6440,0,2,2,100,1,5 +6450,0,2,2,100,1,5 +6460,0,2,2,100,1,5 +6470,0,2,2,100,1,5 +6480,0,2,2,100,1,5 +6490,0,2,2,100,1,5 +6500,0,2,2,100,1,5 +6510,0,2,2,100,1,5 +6520,0,2,2,100,1,5 +6530,0,2,2,100,1,5 +6540,0,2,2,100,1,5 +6550,0,2,2,100,1,5 +6560,0,2,2,100,1,5 +6570,0,2,2,100,1,5 +6580,0,2,2,100,1,5 +6590,0,2,2,100,1,5 +6600,0,2,2,100,1,5 +6610,0,2,2,100,1,5 +6620,0,2,2,100,1,5 +6630,0,2,2,100,1,5 +6640,0,2,2,100,1,5 +6650,0,2,2,100,1,5 +6660,0,2,2,100,1,5 +6670,0,2,2,100,1,5 +6680,0,2,2,100,1,5 +6690,0,2,2,100,1,5 +6700,0,2,2,100,1,5 +6710,0,2,2,100,1,5 +6720,0,2,2,100,1,5 +6730,0,2,2,100,1,5 +6740,0,2,2,100,1,5 +6750,0,2,2,100,1,5 +6760,0,2,2,100,1,5 +6770,0,2,2,100,1,5 +6780,0,2,2,100,1,5 +6790,0,2,2,100,1,5 +6800,0,2,2,100,1,5 +6810,0,2,2,100,1,5 +6820,0,2,2,100,1,5 +6830,0,2,2,100,1,5 +6840,0,2,2,100,1,5 +6850,0,2,2,100,1,5 +6860,0,2,2,100,1,5 +6870,0,2,2,100,1,5 +6880,0,2,2,100,1,5 +6890,0,2,2,100,1,5 +6900,0,2,2,100,1,5 +6910,0,2,2,100,1,5 +6920,0,2,2,100,1,5 +6930,0,2,2,100,1,5 +6940,0,2,2,100,1,5 +6950,0,2,2,100,1,5 +6960,0,2,2,100,1,5 +6970,0,2,2,100,1,5 +6980,0,2,2,100,1,5 +6990,0,2,2,100,1,5 +7000,0,2,2,100,1,5 +7010,0,2,2,100,1,5 +7020,0,2,2,100,1,5 +7030,0,2,2,100,1,5 +7040,0,2,2,100,1,5 +7050,0,2,2,100,1,5 +7060,0,2,2,100,1,5 +7070,0,2,2,100,1,5 +7080,0,2,2,100,1,5 +7090,0,2,2,100,1,5 +7100,0,2,2,100,1,5 +7110,0,2,2,100,1,5 +7120,0,2,2,100,1,5 +7130,0,2,2,100,1,5 +7140,0,2,2,100,1,5 +7150,0,2,2,100,1,5 +7160,0,2,2,100,1,5 +7170,0,2,2,100,1,5 +7180,0,2,2,100,1,5 +7190,0,2,2,100,1,5 +7200,0,2,2,100,1,5 +7210,0,2,2,100,1,5 +7220,0,2,2,100,1,5 +7230,0,2,2,100,1,5 +7240,0,2,2,100,1,5 +7250,0,2,2,100,1,5 +7260,0,2,2,100,1,5 +7270,0,2,2,100,1,5 +7280,0,2,2,100,1,5 +7290,0,2,2,100,1,5 +7300,0,2,2,100,1,5 +7310,0,2,2,100,1,5 +7320,0,2,2,100,1,5 +7330,0,2,2,100,1,5 +7340,0,2,2,100,1,5 +7350,0,2,2,100,1,5 +7360,0,2,2,100,1,5 +7370,0,2,2,100,1,5 +7380,0,2,2,100,1,5 +7390,0,2,2,100,1,5 +7400,0,2,2,100,1,5 +7410,0,2,2,100,1,5 +7420,0,2,2,100,1,5 +7430,0,2,2,100,1,5 +7440,0,2,2,100,1,5 +7450,0,2,2,100,1,5 +7460,0,2,2,100,1,5 +7470,0,2,2,100,1,5 +7480,0,2,2,100,1,5 +7490,0,2,2,100,1,5 +7500,0,2,2,100,1,5 +7510,0,2,2,100,1,5 +7520,0,2,2,100,1,5 +7530,0,2,2,100,1,5 +7540,0,2,2,100,1,5 +7550,0,2,2,100,1,5 +7560,0,2,2,100,1,5 +7570,0,2,2,100,1,5 +7580,0,2,2,100,1,5 +7590,0,2,2,100,1,5 +7600,0,2,2,100,1,5 +7610,0,2,2,100,1,5 +7620,0,2,2,100,1,5 +7630,0,2,2,100,1,5 +7640,0,2,2,100,1,5 +7650,0,2,2,100,1,5 +7660,0,2,2,100,1,5 +7670,0,2,2,100,1,5 +7680,0,2,2,100,1,5 +7690,0,2,2,100,1,5 +7700,0,2,2,100,1,5 +7710,0,2,2,100,1,5 +7720,0,2,2,100,1,5 +7730,0,2,2,100,1,5 +7740,0,2,2,100,1,5 +7750,0,2,2,100,1,5 +7760,0,2,2,100,1,5 +7770,0,2,2,100,1,5 +7780,0,2,2,100,1,5 +7790,0,2,2,100,1,5 +7800,0,2,2,100,1,5 +7810,0,2,2,100,1,5 +7820,0,2,2,100,1,5 +7830,0,2,2,100,1,5 +7840,0,2,2,100,1,5 +7850,0,2,2,100,1,5 +7860,0,2,2,100,1,5 +7870,0,2,2,100,1,5 +7880,0,2,2,100,1,5 +7890,0,2,2,100,1,5 +7900,0,2,2,100,1,5 +7910,0,2,2,100,1,5 +7920,0,2,2,100,1,5 +7930,0,2,2,100,1,5 +7940,0,2,2,100,1,5 +7950,0,2,2,100,1,5 +7960,0,2,2,100,1,5 +7970,0,2,2,100,1,5 +7980,0,2,2,100,1,5 +7990,0,2,2,100,1,5 +8000,0,2,2,100,1,5 +8010,0,2,2,100,1,5 +8020,0,2,2,100,1,5 +8030,0,2,2,100,1,5 +8040,0,2,2,100,1,5 +8050,0,2,2,100,1,5 +8060,0,2,2,100,1,5 +8070,0,2,2,100,1,5 +8080,0,2,2,100,1,5 +8090,0,2,2,100,1,5 +8100,0,2,2,100,1,5 +8110,0,2,2,100,1,5 +8120,0,2,2,100,1,5 +8130,0,2,2,100,1,5 +8140,0,2,2,100,1,5 +8150,0,2,2,100,1,5 +8160,0,2,2,100,1,5 +8170,0,2,2,100,1,5 +8180,0,2,2,100,1,5 +8190,0,2,2,100,1,5 +8200,0,2,2,100,1,5 +8210,0,2,2,100,1,5 +8220,0,2,2,100,1,5 +8230,0,2,2,100,1,5 +8240,0,2,2,100,1,5 +8250,0,2,2,100,1,5 +8260,0,2,2,100,1,5 +8270,0,2,2,100,1,5 +8280,0,2,2,100,1,5 +8290,0,2,2,100,1,5 +8300,0,2,2,100,1,5 +8310,0,2,2,100,1,5 +8320,0,2,2,100,1,5 +8330,0,2,2,100,1,5 +8340,0,2,2,100,1,5 +8350,0,2,2,100,1,5 +8360,0,2,2,100,1,5 +8370,0,2,2,100,1,5 +8380,0,2,2,100,1,5 +8390,0,2,2,100,1,5 +8400,0,2,2,100,1,5 +8410,0,2,2,100,1,5 +8420,0,2,2,100,1,5 +8430,0,2,2,100,1,5 +8440,0,2,2,100,1,5 +8450,0,2,2,100,1,5 +8460,0,2,2,100,1,5 +8470,0,2,2,100,1,5 +8480,0,2,2,100,1,5 +8490,0,2,2,100,1,5 +8500,0,2,2,100,1,5 +8510,0,2,2,100,1,5 +8520,0,2,2,100,1,5 +8530,0,2,2,100,1,5 +8540,0,2,2,100,1,5 +8550,0,2,2,100,1,5 +8560,0,2,2,100,1,5 +8570,0,2,2,100,1,5 +8580,0,2,2,100,1,5 +8590,0,2,2,100,1,5 +8600,0,2,2,100,1,5 +8610,0,2,2,100,1,5 +8620,0,2,2,100,1,5 +8630,0,2,2,100,1,5 +8640,0,2,2,100,1,5 +8650,0,2,2,100,1,5 +8660,0,2,2,100,1,5 +8670,0,2,2,100,1,5 +8680,0,2,2,100,1,5 +8690,0,2,2,100,1,5 +8700,0,2,2,100,1,5 +8710,0,2,2,100,1,5 +8720,0,2,2,100,1,5 +8730,0,2,2,100,1,5 +8740,0,2,2,100,1,5 +8750,0,2,2,100,1,5 +8760,0,2,2,100,1,5 +8770,0,2,2,100,1,5 +8780,0,2,2,100,1,5 +8790,0,2,2,100,1,5 +8800,0,2,2,100,1,5 +8810,0,2,2,100,1,5 +8820,0,2,2,100,1,5 +8830,0,2,2,100,1,5 +8840,0,2,2,100,1,5 +8850,0,2,2,100,1,5 +8860,0,2,2,100,1,5 +8870,0,2,2,100,1,5 +8880,0,2,2,100,1,5 +8890,0,2,2,100,1,5 +8900,0,2,2,100,1,5 +8910,0,2,2,100,1,5 +8920,0,2,2,100,1,5 +8930,0,2,2,100,1,5 +8940,0,2,2,100,1,5 +8950,0,2,2,100,1,5 +8960,0,2,2,100,1,5 +8970,0,2,2,100,1,5 +8980,0,2,2,100,1,5 +8990,0,2,2,100,1,5 +9000,0,2,2,100,1,5 +9010,0,2,2,100,1,5 +9020,0,2,2,100,1,5 +9030,0,2,2,100,1,5 +9040,0,2,2,100,1,5 +9050,0,2,2,100,1,5 +9060,0,2,2,100,1,5 +9070,0,2,2,100,1,5 +9080,0,2,2,100,1,5 +9090,0,2,2,100,1,5 +9100,0,2,2,100,1,5 +9110,0,2,2,100,1,5 +9120,0,2,2,100,1,5 +9130,0,2,2,100,1,5 +9140,0,2,2,100,1,5 +9150,0,2,2,100,1,5 +9160,0,2,2,100,1,5 +9170,0,2,2,100,1,5 +9180,0,2,2,100,1,5 +9190,0,2,2,100,1,5 +9200,0,2,2,100,1,5 +9210,0,2,2,100,1,5 +9220,0,2,2,100,1,5 +9230,0,2,2,100,1,5 +9240,0,2,2,100,1,5 +9250,0,2,2,100,1,5 +9260,0,2,2,100,1,5 +9270,0,2,2,100,1,5 +9280,0,2,2,100,1,5 +9290,0,2,2,100,1,5 +9300,0,2,2,100,1,5 +9310,0,2,2,100,1,5 +9320,0,2,2,100,1,5 +9330,0,2,2,100,1,5 +9340,0,2,2,100,1,5 +9350,0,2,2,100,1,5 +9360,0,2,2,100,1,5 +9370,0,2,2,100,1,5 +9380,0,2,2,100,1,5 +9390,0,2,2,100,1,5 +9400,0,2,2,100,1,5 +9410,0,2,2,100,1,5 +9420,0,2,2,100,1,5 +9430,0,2,2,100,1,5 +9440,0,2,2,100,1,5 +9450,0,2,2,100,1,5 +9460,0,2,2,100,1,5 +9470,0,2,2,100,1,5 +9480,0,2,2,100,1,5 +9490,0,2,2,100,1,5 +9500,0,2,2,100,1,5 +9510,0,2,2,100,1,5 +9520,0,2,2,100,1,5 +9530,0,2,2,100,1,5 +9540,0,2,2,100,1,5 +9550,0,2,2,100,1,5 +9560,0,2,2,100,1,5 +9570,0,2,2,100,1,5 +9580,0,2,2,100,1,5 +9590,0,2,2,100,1,5 +9600,0,2,2,100,1,5 +9610,0,2,2,100,1,5 +9620,0,2,2,100,1,5 +9630,0,2,2,100,1,5 +9640,0,2,2,100,1,5 +9650,0,2,2,100,1,5 +9660,0,2,2,100,1,5 +9670,0,2,2,100,1,5 +9680,0,2,2,100,1,5 +9690,0,2,2,100,1,5 +9700,0,2,2,100,1,5 +9710,0,2,2,100,1,5 +9720,0,2,2,100,1,5 +9730,0,2,2,100,1,5 +9740,0,2,2,100,1,5 +9750,0,2,2,100,1,5 +9760,0,2,2,100,1,5 +9770,0,2,2,100,1,5 +9780,0,2,2,100,1,5 +9790,0,2,2,100,1,5 +9800,0,2,2,100,1,5 +9810,0,2,2,100,1,5 +9820,0,2,2,100,1,5 +9830,0,2,2,100,1,5 +9840,0,2,2,100,1,5 +9850,0,2,2,100,1,5 +9860,0,2,2,100,1,5 +9870,0,2,2,100,1,5 +9880,0,2,2,100,1,5 +9890,0,2,2,100,1,5 +9900,0,2,2,100,1,5 +9910,0,2,2,100,1,5 +9920,0,2,2,100,1,5 +9930,0,2,2,100,1,5 +9940,0,2,2,100,1,5 +9950,0,2,2,100,1,5 +9960,0,2,2,100,1,5 +9970,0,2,2,100,1,5 +9980,0,2,2,100,1,5 +9990,0,2,2,100,1,5 +10000,0,2,2,100,1,5 +10010,0,2,2,100,1,5 +10020,0,2,2,100,1,5 +10030,0,2,2,100,1,5 +10040,0,2,2,100,1,5 +10050,0,2,2,100,1,5 +10060,0,2,2,100,1,5 +10070,0,2,2,100,1,5 +10080,0,2,2,100,1,5 +10090,0,2,2,100,1,5 +10100,0,2,2,100,1,5 diff --git a/EC-GN-JA-PCF/.svn/pristine/f5/f5734b484968e75ba2471ee8a12c0a164d2ae5a4.svn-base b/EC-GN-JA-PCF/.svn/pristine/f5/f5734b484968e75ba2471ee8a12c0a164d2ae5a4.svn-base new file mode 100644 index 0000000..3ef937f --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/f5/f5734b484968e75ba2471ee8a12c0a164d2ae5a4.svn-base @@ -0,0 +1,24 @@ +TOP=../.. +include $(TOP)/configure/CONFIG +#---------------------------------------- +# ADD MACRO DEFINITIONS AFTER THIS LINE + +#---------------------------------------------------- +# Optimization of db files using dbst (DEFAULT: NO) +#DB_OPT = YES + +#---------------------------------------------------- +# Create and install (or just install) +# databases, templates, substitutions like this + + +# Automagically install .proto files +DB += $(notdir $(wildcard ../*.proto)) + +#---------------------------------------------------- +# If .db template is not named *.template add +# _TEMPLATE = + +include $(TOP)/configure/RULES +#---------------------------------------- +# ADD RULES AFTER THIS LINE diff --git a/EC-GN-JA-PCF/.svn/pristine/f5/f59bb5fc97d94c9b9bd06be509db615897457ed2.svn-base b/EC-GN-JA-PCF/.svn/pristine/f5/f59bb5fc97d94c9b9bd06be509db615897457ed2.svn-base new file mode 100644 index 0000000..1c65faf --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/f5/f59bb5fc97d94c9b9bd06be509db615897457ed2.svn-base @@ -0,0 +1,29 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc + +LIBRARIES += -L$(EPICS_BASE)/lib/$(EPICS_HOST_ARCH)/ -lca diff --git a/EC-GN-JA-PCF/.svn/pristine/f5/f5cbd48402d7062edcdc464f7c1b946d73c2fb8d.svn-base b/EC-GN-JA-PCF/.svn/pristine/f5/f5cbd48402d7062edcdc464f7c1b946d73c2fb8d.svn-base new file mode 100644 index 0000000..a4cf645 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/f5/f5cbd48402d7062edcdc464f7c1b946d73c2fb8d.svn-base @@ -0,0 +1,4981 @@ +// LoggerService node: See /var/log/messages file. +// +LoggerService = { +// Class = LoggerService +// CPUs = 0x800 +// StackSize = 32768 +// NumberOfLogPages = 128 +// +SysLogger = { +// Class = SysLogger +// Format = "EtOoFmC" +// PrintKeys = 1 +// Ident = "JAGyA" +// } +// } + +// StateMachine node ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +Start = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +DISABLED = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITSTANDBY = { + Class = ReferenceContainer + +GoWaitReady = { + Class = StateMachineEvent + NextState = "WAITREADY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitReady + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoDisabled = { + Class = StateMachineEvent + NextState = "DISABLED" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Disabled + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITREADY = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITPERMIT = { + Class = ReferenceContainer + +GoWaitReady = { + Class = StateMachineEvent + NextState = "WAITREADY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitReady + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON = { + Class = StateMachineEvent + NextState = "WAITHVON" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON_SDN = { + Class = StateMachineEvent + NextState = "WAITHVON_SDN" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON_SDN + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON_PREP = { + Class = StateMachineEvent + NextState = "WAITHVON_PREP" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON_PREP + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON_SDN_PREP = { + Class = StateMachineEvent + NextState = "WAITHVON_SDN_PREP" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON_SDN_PREP + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + // HVPS sequence control states. + +WAITHVON = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITHVON_SDN = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITHVON_PREP = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITHVON_SDN_PREP = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + // Error State (Enter by HVPS errors) + +ERROR = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } +} + +// RealTime Application node ++JAGyrotronRTApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + //Timer GAM for thread 1. + +Timer1kHzGAM = { + Class = IOGAM + InputSignals = { + Counter = { + DataSource = Timer1kHz + Type = uint32 + Frequency = 1000 //Hz + } + Time = { + DataSource = Timer1kHz + Type = uint32 + } + } + OutputSignals = { + Counter1kHz = { + DataSource = DDB1 + Type = uint32 + } + Time1kHz = { + DataSource = DDB1 + Type = uint32 + } + } + } + +Timer10HzGAM = { + Class = IOGAM + InputSignals = { + Counter = { + DataSource = Timer10Hz + Type = uint32 + Frequency = 1 //Hz + } + Time = { + DataSource = Timer10Hz + Type = uint32 + } + } + OutputSignals = { + Counter10Hz = { + DataSource = DDB1 + Type = uint32 + } + Time1Hz = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM to update PCF state-machine state + +InErrorGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 1 + } + } + } + +InDisabledGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 2 + } + } + } + +InWaitStandbyGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 3 + } + } + } + +InWaitReadyGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 4 + } + } + } + +InWaitPermitGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 5 + } + } + } + +InWaitHVONGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 6 + } + } + } + +InWaitHVON_PREPGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 7 + } + } + } + +InWaitHVON_SDNGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 8 + } + } + } + +InWaitHVON_SDN_PREPGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 9 + } + } + } + + // Copy data from DDB1 to EPICSCAOutput DataSource. + +EPICSOutputGAM = { + Class = IOGAM + InputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + } + MCPS_ACT_SP = { + DataSource = DDB1 + Type = uint32 + } + GCPS_ACT_SP = { + DataSource = DDB1 + Type = uint32 + } + BPS_OUT = { + DataSource = DDB1 + Type = float32 + } + APS_OUT = { + DataSource = DDB1 + Type = float32 + } + MCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + GCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + FHPS_REF = { + DataSource = DDB1 + Type = float32 + } + CSV_LOADED = { + DataSource = DDB1 + Type = uint32 + } + CSV_ERR = { + DataSource = DDB1 + Type = uint32 + } + ELAPSED_TIME = { + DataSource = DDB1 + Type = uint32 + } + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + RFON = { + DataSource = DDB1 + Type = uint32 + } + MHVPS_OUT = { + DataSource = DDB1 + Type = float32 + } + PREP_TIME_WF = { + DataSource = DDB1 + Type = int32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + MHVPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + BPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + APS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + MCPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GCPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + FHPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + CCPS_REF = { + DataSource = DDB1 + Type = float32 + } + MHVPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + APS_STOP = { + DataSource = DDB1 + Type = uint32 + } + BPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + BEAM_ON_TIME = { + DataSource = DDB1 + Type = uint32 + } + PCF_FLT = { + DataSource = DDB1 + Type = uint32 + } + BEAM_ON_STAT = { + DataSource = DDB1 + Type = uint32 + } + SHOT_ID = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + FHPS_AUTO_STAT = { + DataSource = DDB1 + Type = uint32 + } + //Add 20201117 + APS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + APS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + MHVPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + PCF_STATE = { + DataSource = EPICSCAOutput + Type = uint32 + } + MCPS_ACT_SP = { + DataSource = EPICSCAOutput + Type = uint32 + } + GCPS_ACT_SP = { + DataSource = EPICSCAOutput + Type = uint32 + } + BPS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + APS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + MCPS_TRG_CURR_SET = { + DataSource = EPICSCAOutput + Type = float32 + } + GCPS_TRG_CURR_SET = { + DataSource = EPICSCAOutput + Type = float32 + } + FHPS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + CSV_LOADED = { + DataSource = EPICSCAOutput + Type = uint32 + } + CSV_ERR = { + DataSource = EPICSCAOutput + Type = uint32 + } + ELAPSED_TIME = { + DataSource = EPICSCAOutput + Type = uint32 + } + HVARMED = { + DataSource = EPICSCAOutput + Type = uint32 + } + HVINJECTION = { + DataSource = EPICSCAOutput + Type = uint32 + } + RFON = { + DataSource = EPICSCAOutput + Type = uint32 + } + + MHVPS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + PREP_TIME_WF = { + DataSource = EPICSCAOutput + } + MHVPS_PREP_WF = { + DataSource = EPICSCAOutput + } + BPS_PREP_WF = { + DataSource = EPICSCAOutput + } + APS_PREP_WF = { + DataSource = EPICSCAOutput + } + MCPS_PREP_WF = { + DataSource = EPICSCAOutput + } + GCPS_PREP_WF = { + DataSource = EPICSCAOutput + } + FHPS_PREP_WF = { + DataSource = EPICSCAOutput + } + CCPS_REF = { + DataSource = EPICSCAOutput + } + MHVPS_STOP = { + DataSource = EPICSCAOutput + Type = uint32 + } + APS_STOP = { + DataSource = EPICSCAOutput + Type = uint32 + } + BPS_STOP = { + DataSource = EPICSCAOutput + Type = uint32 + } + BEAM_ON_TIME = { + DataSource = EPICSCAOutput + Type = uint32 + } + PCF_FLT = { + DataSource = EPICSCAOutput + } + BEAM_ON_STAT = { + DataSource = EPICSCAOutput + } + SHOT_ID = { + DataSource = EPICSCAOutput + } + FHPS_AUTO_STAT = { + DataSource = EPICSCAOutput + } + //Added 20201117 + APS_HVON = { + DataSource = EPICSCAOutput + } + APS_SWON = { + DataSource = EPICSCAOutput + } + BPS_HVON = { + DataSource = EPICSCAOutput + } + BPS_SWON = { + DataSource = EPICSCAOutput + } + MHVPS_HVON = { + DataSource = EPICSCAOutput + } + } + } + + // Message GAM in Disabled state. + +GoWaitStandbyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1} + Comparators = {EQUALS} + InputSignals = { + PLC_SELECT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + +GoWaitStandbyFromReadyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0} + Comparators = {EQUALS} + InputSignals = { + PLC_STANDBY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + + // MCPS, GCPS PV to DDB1 + +GCPSGAM = { + Class = IOGAM + InputSignals = { + GCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + GCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + } + } + +MCPSGAM = { + Class = IOGAM + InputSignals = { + MCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + MCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + } + } + // Message GAM in Standby state. + +GoDisabledGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0} + Comparators = {EQUALS} + InputSignals = { + PLC_SELECT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoDisabled + } + } + + //GAM in WaitReady state. Check MCPS,GCPS,FHPS state for state transition. + +GoWaitReadyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {3 3 1} + ExpectedFloatValues = {0 0 0} + Comparators = {EQUALS GREATER EQUALS GREATER EQUALS GREATER} + InputSignals = { + MCPS_ACT_RB = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_MCPS_CURR_MON = { + DataSource = EPICSCAInput + Type = float32 + } + GCPS_ACT_RB = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_GCPS_CURR_MON = { + DataSource = EPICSCAInput + Type = float32 + } + FHPS_RU = { + DataSource = EPICSCAInput + Type = uint32 + } + FHPS_MEAS_ACV = { + DataSource = EPICSCAInput + Type = float32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitReady + } + } + + //GAM for prepro + +WFRecordGAM = { + Class = JAWFRecordGAM + Directory = "../Configurations" //TODO: Enter directory path for prepro files. + InputSignals = { + CSV_LOAD = { + DataSource = EPICSCAInput + Type = uint32 + } + Filename = { + Alias = CSV_NAME + DataSource = EPICSCAInput + } + } + OutputSignals = { + PREP_TIME_WF = { + DataSource = DDB1 + } + MHVPS_PREP_WF = { + DataSource = DDB1 + } + BPS_PREP_WF = { + DataSource = DDB1 + } + APS_PREP_WF = { + DataSource = DDB1 + } + MCPS_PREP_WF = { + DataSource = DDB1 + } + GCPS_PREP_WF = { + DataSource = DDB1 + } + FHPS_PREP_WF = { + DataSource = DDB1 + } + } + } + +PreProgrammedGAM = { + Class = JAPreProgrammedGAM + Directory = "../Configurations" // TODO: Enter the directory path for prepro files. + PreProgrammedPeriodMs = 1 // Parameter update periods in ms. + InputSignals = { + CSV_LOAD = { + DataSource = EPICSCAInput + Type = uint32 + } + Filename = { + Alias = CSV_NAME + DataSource = EPICSCAInput + } + FHPS_REF = { + Alias = FHPS_AUTO_TAGV + DataSource = EPICSCAInput + Type = float32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + GYA_PREPRO_TIME = { + DataSource = DDB1 + Type = int32 + } + MHVPS_REF = { + DataSource = DDB1 + Type = float32 + } + BPS_REF = { + DataSource = DDB1 + Type = float32 + } + APS_REF = { + DataSource = DDB1 + Type = float32 + } + MCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + GCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + FHPS_PrePro = { + DataSource = DDB1 + Type = float32 + } + CSV_LOADED = { + DataSource = DDB1 + Type = uint32 + } + CSV_ERR = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM in WaitReady state. Check PLC_READY and CCPS_IN_OPERATION status. + +GoWaitPermitGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 1} //20201222 modified. In the past, 0 1. + Comparators = {EQUALS EQUALS} + InputSignals = { + CCPS_IN_OPERATION = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_READY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitPermit + } + } + + //GAM in WaitPermit state. Check Permit and States of Operation Modes. + +GoWaitReadyFromWaitPermitGAM = { + Class = JAMessageGAM + Operation = OR + ExpectedIntValues = {0 0} + Comparators = {EQUALS EQUALS} + InputSignals = { + PLC_STANDBY = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_READY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitReady + } + } + +GoWaitHVONGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0 0 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON + } + } + +GoWaitHVON_PREP_GAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0 1 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON_PREP + } + } + +GoWaitHVON_SDN_GAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 0 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON_SDN + } + } + +GoWaitHVON_SDN_PREP_GAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 1 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON_SDN_PREP + } + } + + //GAM in WaitHVON_xx states. If PLC_READY is zero, goto WaitStandby. + +FromWaitHVONToWaitStandby = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0} + Comparators = {EQUALS} + InputSignals = { + PLC_READY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + //GAM in WaitHVON_xx states. If PLC_PERMIT is zero, goto WaitPermit. + +FromWaitHVONToWaitPermit = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0 0 0 0 0 0} //modified 20201222 + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} //modified 20201222 + InputSignals = { + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + //add 20201222 + APS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + MHVPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + APS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + }//20201222 + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitPermit + } + } + + // Check the selected mode, and check maximum pulse length. Use with a StateMachineGAM + +ModeLimitGAM = { + Class = JAModeControlGAM + InputSignals = { + PLC_MODE1 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD1_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_MODE2 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD2_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_MODE3 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD3_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_MODE4 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD4_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + Time = { + DataSource = DDB1 + Type = uint32 + } + HVInjection = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + MODE_SHOTLEN_FLAG = { + DataSource = DDB1 + Type = uint32 + } + } + } + + // State notify GAMs. These GAMs are in all WaitHVON states. + +writeBeamONStateGAM = { + Class = IOGAM + InputSignals = { + BEAM_ON_STAT = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + BEAM_ON_STAT = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeHVArmedStateGAM = { + Class = IOGAM + InputSignals = { + HVARMED = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeHVInjectionStateGAM = { + Class = IOGAM + InputSignals = { + HVINJECTION = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeRFONStateGAM = { + Class = IOGAM + InputSignals = { + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + RFON = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeBeamONTimeGAM = { + Class = IOGAM + InputSignals = { + BeamONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + ELAPSED_TIME = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeRFONTimeGAM = { + Class = IOGAM + InputSignals = { + RFONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + BEAM_ON_TIME = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM for trianguler waveform generation. + +CCPSWaveformGAM = { + Class = JATriangleWaveGAM + InputSignals = { + Frequency = { + Alias = CCPS_OUTPUT_FREQ + DataSource = EPICSCAInput + Type = float32 + } + Amplitude = { + Alias = CCPS_OUTPUT_AMP + DataSource = EPICSCAInput + Type = float32 + } + Offset = { + Alias = CCPS_OUTPUT_OFFS + DataSource = EPICSCAInput + Type = float32 + } + PLCSTANDBY = { + Alias = PLC_STANDBY + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + CCPS_REF = { + DataSource = DDB1 + Type = float32 + } + } + } + //GAM for FHPS ramping up operation. + +FHPSSetpointGAM = { + Class = IOGAM + InputSignals = { + FHPS_AUTO_TAGV = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + FHPS_TAGV = { + DataSource = DDB1 + Type = float32 + } + } + } + +FHPSRampupGAM = { + Class = JARampupGAM + InputSignals = { + Currspv = { + Alias = FHPS_REF + DataSource = DDB1 + Type = float32 + } + Targetv = { + Alias = FHPS_TAGV + DataSource = DDB1 + Type = float32 + } + Time = { + Alias = FHPS_AUTO_TIME + DataSource = EPICSCAInput + Type = float32 + } + Start = { + Alias = FHPS_AUTO_START + DataSource = EPICSCAInput + Type = uint32 + } + PLC_STANDBY = { + Alias = PLC_STANDBY + DataSource = EPICSCAInput + Type = uint32 + } + MANUAL_AUTO = { + Alias = FHPS_MANM + DataSource = EPICSCAInput + Type = uint32 + } + FHPS_PrePro = { + DataSource = DDB1 + Type = float32 + } + } + OutputSignals = { + FHPS_REF = { + DataSource = DDB1 + Type = float32 + } + FHPS_AUTO_STAT = { + DataSource = DDB1 + Type = uint32 + } + } + } + //GAM for error handling. + // GAM that sets ERROR and STOP FLAGS for APS, BPS and MHVPS when we enter Error state and resets them when we leave Error state + +ErrorGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = AND + ExpectedValues = {1 0 0 0 0 0 0 0 0 0 0} + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} + Values = {0 0 0} + InputSignals = { + // Conditional signals + RESET_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + MHVPS_STOP_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + APS_STOP_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + BPS_STOP_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + MHVPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + APS_STOP = { + DataSource = DDB1 + Type = uint32 + } + BPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + } + } + +StopRequestGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {1 1 1 1 1 1 1 1 1 1} + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} + Values = {1} + InputSignals = { + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + StopRequest_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + StopRequest = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //Test whether board status are stable + +GAMDisplayDebug = { + Class = IOGAM + InputSignals = { + RESET_FLT = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + RESET_FLT_DISP = { + DataSource = Display + Type = uint32 + } + } + } + //Check PXI board status. + +PXI6259ErrorGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {0 0 0 0} + Comparators = {GREATER GREATER GREATER GREATER} + Values = {1} + InputSignals = { + // Conditional signals + PXI6259_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6259_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6528_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6528_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + PCF_FLT_6259_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT_6259 = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PXI6368Error03GAM = {// detect Hardware error (status number 3) for PXI6368 boards. + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {3 3} + Comparators = {EQUALS EQUALS} + Values = {1} + InputSignals = { + PXI6368_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6368_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + PCF_FLT_6368_ERRNO_03_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT_6368_ERRNO_03 = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PXI6368Error04GAM = {// detect No board error (status number 4) for PXI6368 boards. + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {4 4} + Comparators = {EQUALS EQUALS} + Values = {1} + InputSignals = { + PXI6368_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6368_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + PCF_FLT_6368_ERRNO_04_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT_6368_ERRNO_04 = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PXIErrorGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {0 0 0} + Comparators = {GREATER GREATER GREATER} + Values = {1} + InputSignals = { + PCF_FLT_6368_ERRNO_03 = { + DataSource = DDB1 + Type = uint32 + } + PCF_FLT_6368_ERRNO_04 = { + DataSource = DDB1 + Type = uint32 + } + PCF_FLT_6259 = { + DataSource = DDB1 + Type = uint32 + } + // Default values + PCF_FLT_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT = { + DataSource = DDB1 + Type = uint32 + } + } + } + + + +FromErrorToWaitStandbyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 0 0 0 0 0 0 0 0 0 0} + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} + InputSignals = { + RESET_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + // From any state to Error state. + +GoErrorGAM = { + Class = JAMessageGAM + Operation = OR + ExpectedIntValues = {1 1 1 1 1 1 1 1 1 1} + InputSignals = { + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoError + } + } + // Reset HVPS outputs. ToDo: Fix to access NI d.s. + +ResetPSsGAM = { + Class = ConstantGAM + OutputSignals = { + MHVPS_HVON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + BPS_HVON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + BPS_SWON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + APS_HVON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + APS_SWON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + //here + } + } + // Update status. ToDo: Fix to access NI d.s. + +ExitedHVArmedInjectionRFONGAM = { + Class = JAConditionalSignalUpdateGAM + Values = {0 0 0} + InputSignals = { + // Condition signals + // Default output values + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + RFON = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + RFON = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM for SDN communication.(ProcessWF:thread1, Subscribe/Publish:thread2) + +SDNCommandGAM = { + Class = IOGAM + InputSignals = { + Command = { + DataSource = SDNSubCommands + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 64 + Ranges = {{0 0}} + // TODO uncomment this for release/testing + //Frequency = 1 + } + ESDNTime = { + DataSource = SDNSubCommands + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + OutputSignals = { + Command = { + DataSource = RealTimeThreadAsyncBridge + Type = uint16 + } + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + } + } + +debugSDNGAM = {//for debug + Class = IOGAM + InputSignals = { + Command = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + Command_DISP = { + DataSource = Display + Type = float32 + } + ESDNTime_DISP = { + DataSource = Display + Type = uint32 + } + } + } + +SDNReplyGAM = { + Class = IOGAM + InputSignals = { + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + WaveformPacketID = { + DataSource = DDB1 + Type = uint16 + } + GYA_BPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_BPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_BPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_BPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_APS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_APS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_APS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_APS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC1_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC1_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC1_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC1_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC2_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC2_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC2_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC2_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_MHVPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_MHVPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_MHVPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_MHVPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_MCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYB_MCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYA_GCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYB_GCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYA_FHPS_MEAS_ACI = { + DataSource = EPICSCAInput + } + GYB_FHPS_MEAS_ACI = { + DataSource = EPICSCAInput + } + GYA_CCPS_MEAS_DCI = { + DataSource = EPICSCAInput + } + GYB_CCPS_MEAS_DCI = { + DataSource = EPICSCAInput + } + } + OutputSignals = { + ESDNTime = { + DataSource = SDNReply + Type = uint32 + Trigger = 1 + } + ReplyWaveformAck = { + DataSource = SDNReply + Type = uint16 + } + GYA_BPS_MESVOLT = { + DataSource = SDNReply + } + GYB_BPS_MESVOLT = { + DataSource = SDNReply + } + GYA_BPS_MESCURR = { + DataSource = SDNReply + } + GYB_BPS_MESCURR = { + DataSource = SDNReply + } + GYA_APS_MESVOLT = { + DataSource = SDNReply + } + GYB_APS_MESVOLT = { + DataSource = SDNReply + } + GYA_APS_MESCURR = { + DataSource = SDNReply + } + GYB_APS_MESCURR = { + DataSource = SDNReply + } + GYA_ARC1_MESVOLT = { + DataSource = SDNReply + } + GYB_ARC1_MESVOLT = { + DataSource = SDNReply + } + GYA_ARC1_MESCURR = { + DataSource = SDNReply + } + GYB_ARC1_MESCURR = { + DataSource = SDNReply + } + GYA_ARC2_MESVOLT = { + DataSource = SDNReply + } + GYB_ARC2_MESVOLT = { + DataSource = SDNReply + } + GYA_ARC2_MESCURR = { + DataSource = SDNReply + } + GYB_ARC2_MESCURR = { + DataSource = SDNReply + } + GYA_MHVPS_MESVOLT = { + DataSource = SDNReply + } + GYB_MHVPS_MESVOLT = { + DataSource = SDNReply + } + GYA_MHVPS_MESCURR = { + DataSource = SDNReply + } + GYB_MHVPS_MESCURR = { + DataSource = SDNReply + } + GYA_MCPS_CURR_MON = { + DataSource = SDNReply + } + GYB_MCPS_CURR_MON = { + DataSource = SDNReply + } + GYA_GCPS_CURR_MON = { + DataSource = SDNReply + } + GYB_GCPS_CURR_MON = { + DataSource = SDNReply + } + GYA_FHPS_MEAS_ACI = { + DataSource = SDNReply + } + GYB_FHPS_MEAS_ACI = { + DataSource = SDNReply + } + GYA_CCPS_MEAS_DCI = { + DataSource = SDNReply + } + GYB_CCPS_MEAS_DCI = { + DataSource = SDNReply + } + } + } + //Write SDN waveform data into PS setpoint PV. + + // Timer for SDN thread. + +TimeSDNGAM = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = TimerSDN + Type = uint32 + } + Counter = { + DataSource = TimerSDN + Type = uint32 + Frequency = 1000 //operation:1k(=1ms cyc), debug:10 + } + } + OutputSignals = { + TimeSDN = { + DataSource = DDB1 + Type = uint32 + } + CounterSDN = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM for realtime statemachine + +Timer100kHzGAM = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = Timer + Type = uint32 + } + Counter = { + DataSource = Timer + Type = uint32 + Frequency = 200000 //operation:10k(=100us cyc) + //Frequency = 100000 //operation:100k(=10us cyc) + } + RTThreadPerf = { + DataSource = Timings + Alias = "WaitHVON.Thread3_CycleTime" + Type = uint32 + } + } + OutputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerf = { + DataSource = DDB1 + Type = uint32 + } + } + } + + // Digital Output port access. + // EPICS PV to one uint8 variable + +NI6528P3GAM = { + Class = JABitSumGAM + InputSignals = { + APS_HVON = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_SWON = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_STOP = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_HVON = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_SWON = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_STOP = { + DataSource = EPICSCAInput + Type = uint32 + } + BEAM_ON_STAT = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV5 = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + NI6528P3CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P4GAM = { + Class = JABitSumGAM + InputSignals = { + DO_REV6 = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV7 = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV8 = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_HVON = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_STOP = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_MODSW = { + DataSource = EPICSCAInput + Type = uint32 + } + PCF_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + HVARMED = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + NI6528P4CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P5GAM = { + Class = JABitSumGAM + InputSignals = { + HVINJECTION = { + DataSource = EPICSCAInput + Type = uint32 + } + RFON = { + DataSource = EPICSCAInput + Type = uint32 + } + FHPS_RU = { + DataSource = EPICSCAInput + Type = uint32 + } + SCM_RU = { + DataSource = EPICSCAInput + Type = uint32 + } + SCM_RD = { + DataSource = EPICSCAInput + Type = uint32 + } + CCPS_IN_OPERATION = { + DataSource = EPICSCAInput + Type = uint32 + } + NONE1 = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + NONE2 = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + NI6528P5CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + // reversed uint8 variable (value to write on port.) + +NI6528P3PV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P3CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P3PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P4PV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P4CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P4PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P5PV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P5CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P5PortValue = { + DataSource = NI6528P5 + Type = uint8 + } + } + } + // write a uint8 port value to PXI data source. + +NI6528P3WriteGAM = { + Class = IOGAM + InputSignals = { + NI6528P3PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P3Value = { + DataSource = NI6528P3 + Type = uint8 + } + } + } + +NI6528P4WriteGAM = { + Class = IOGAM + InputSignals = { + NI6528P4PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P4Value = { + DataSource = NI6528P4 + Type = uint8 + } + } + } + + //Thread3 pulse parameter EPICS PVs read. + +GAMEPICSCA = { + Class = IOGAM + InputSignals = { + MHVPS_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_HVON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_SWON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_HVON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_SWON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + SHOTLEN = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ON = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + MHVPS_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + SHOTLEN = { + DataSource = DDB1 + Type = uint32 + } + PLC_ON = { + DataSource = DDB1 + Type = uint32 + } + } + } + + // Real-Time state machine GAMs + +GAMRealTimeStateMachine = { + Class = JARTStateMachineGAM + ConditionTrigger = 1 + mhvps_hvon = 4 + aps_hvon = 1 + aps_swon = 16 + bps_hvon = 2 + bps_swon = 8 + InputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + PLC_ON = { + DataSource = DDB1 + Type = uint32 + } + MHVPS_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + SHOTLEN = { + DataSource = DDB1 + Type = uint32 + } + StopRequest = { + DataSource = DDB1 + Type = uint32 + } + MODE_SHOTLEN_FLAG = { + DataSource = DDB1 + Type = uint32 + } + SHORT_PULSE_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + //Add 20210120 + MHVPS_MODSW = { + DataSource = EPICSCAInput + Type = uint32 + } + //Add 20210121 + DO_REV6 = { + DataSource = EPICSCAInput + Type = uint32 + } + + } + OutputSignals = { + RTSMValue = { + DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + BEAM_ON_STAT = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVARMED = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVINJECTION = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BeamONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + SHOT_ID = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + //Added 20201117 + APS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + APS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + MHVPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + NI6259Value = { + DataSource = NI6259 + //DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + NI6528P3Value = { + DataSource = NI6528P3 + //DataSource = DDB1 + Type = uint8 + } + NI6528P4Value = { + DataSource = NI6528P4 + //DataSource = DDB1 + Type = uint8 + } + } + } + +GAMSDNRealTimeStateMachine = { + Class = JASDNRTStateMachineGAM + ConditionTrigger = 1 + mhvps_hvon = 4 + aps_hvon = 1 + aps_swon = 16 + bps_hvon = 2 + bps_swon = 8 + InputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + PLC_ON = { + DataSource = DDB1 + Type = uint32 + } + MHVPS_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + SHOTLEN = { + DataSource = DDB1 + Type = uint32 + } + StopRequest = { + DataSource = DDB1 + Type = uint32 + } + MODE_SHOTLEN_FLAG = { + DataSource = DDB1 + Type = uint32 + } + Command = { + DataSource = RealTimeThreadAsyncBridge + Type = uint16 + } + + } + OutputSignals = { + RTSMValue = { + DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + BeamON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVARMED = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVINJECTION = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BeamONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + SHOT_ID = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + } + + //Terminal Interface reads three inputs. + // INPUTs: StateMahine Value, NI6528P3Value and NI6528P4Value + // OUTPUTs: Each NIxxx data sources. + +terminalInterfaceGAM = { + Class = JATerminalInterfaceGAM + mhvps_hvon_term = 4 + aps_hvon_term = 1 + aps_swon_term = 16 + bps_hvon_term = 2 + bps_swon_term = 8 + InputSignals = { + MHVPS_HVON = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON = { + DataSource = DDB1 + Type = uint32 + } + SHORT_PULSE_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + //Input signals about HW terminal. + RTSMValue = { + DataSource = DDB1 + Type = uint32 + } + NI6528P3CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + NI6528P4CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6259Value = { + DataSource = NI6259 + //DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + NI6528P3Value = { + DataSource = NI6528P3 + //DataSource = DDB1 + Type = uint8 + } + NI6528P4Value = { + DataSource = NI6528P4 + //DataSource = DDB1 + Type = uint8 + } + } + } + + // Switching AO port source between internal variable and EPICS PV. + +choiseGAM = { + Class = JASourceChoiseGAM + numberOfPVs = 5 + InputSignals = { + BPS_REF = { + DataSource = DDB1 + Type = float32 + } + BPS_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + BPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + APS_REF = { + DataSource = DDB1 + Type = float32 + } + APS_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + APS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + MHVPS_REF = { + DataSource = DDB1 + Type = float32 + } + MHVPS_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + MHVPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + MCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + MCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + MCPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + GCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + GCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + GCPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + } + OutputSignals = { + BPS_OUT = { + DataSource = DDB1 + Type = float32 + } + APS_OUT = { + DataSource = DDB1 + Type = float32 + } + MHVPS_OUT = { + DataSource = DDB1 + Type = float32 + } + MCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + GCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + } + } + + //debug + +debugTimerGAM = { + Class = IOGAM + InputSignals = { + Time1kHz = { + DataSource = DDB1 + Type = uint32 + } + TimeSDN = { + DataSource = DDB1 + Type = uint32 + } + Time = { + DataSource = DDB1 + Type = uint32 + } + Time1Hz = { + DataSource = DDB1 + Type = uint32 + } + + } + OutputSignals = { + T1_time = { + DataSource = Display + Type = uint32 + } + T2_time = { + DataSource = Display + Type = uint32 + } + T3_time = { + DataSource = Display + Type = uint32 + } + T4_time = { + DataSource = Display + Type = uint32 + } + } + } + +GAMExecTime = {//debug + Class = IOGAM + InputSignals = { + GAMEPICSCA_ExecTime = { + DataSource = Timings + Type = uint32 + } + StopRequestGAM_ExecTime = { + DataSource = Timings + Type = uint32 + } + ModeLimitGAM_ExecTime = { + DataSource = Timings + Type = uint32 + } + NI6528P3GAM_ExecTime = { + DataSource = Timings + Type = uint32 + } + terminalInterfaceGAM_ExecTime = { + DataSource = Timings + Type = uint32 + } + GAMRealTimeStateMachine_ExecTime = { + DataSource = Timings + Type = uint32 + } + + } + OutputSignals = { + GAMEPICSCA_ExecTime = { + DataSource = Display + Type = uint32 + } + StopRequestGAM_ExecTime = { + DataSource = Display + Type = uint32 + } + ModeLimitGAM_ExecTime = { + DataSource = Display + Type = uint32 + } + NI6528P3GAM_ExecTime = { + DataSource = Display + Type = uint32 + } + terminalInterfaceGAM_ExecTime = { + DataSource = Display + Type = uint32 + } + GAMRealTimeStateMachine_ExecTime = { + DataSource = Display + Type = uint32 + } + } + } + + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + AllowNoProducers = 1 + ResetUnusedVariablesAtStateChange = 0 + } + // Timer for thread 1 (Normal RT state execution cycle.) + +Timer1kHz = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x100 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + +TimerSDN = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x200 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + +Timer10Hz = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x800 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + // Timer for thread 3 (RTStateMachineGAM execution cycle.) + +Timer = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x400 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + + +Timings = { + Class = TimingDataSource + } + +Display = { + Class = LoggerDataSource + } + // for data exechange between threads. + +RealTimeThreadAsyncBridge = { + Class = RealTimeThreadAsyncBridge + NumberOfBuffers = 20 + } + // for access ECPIS PV. + +EPICSCAInput = { + Class = "EPICSCA::EPICSCAInput" + CPUMask = "0x100" //change from 200 + StackSize = "10000000" + Signals = { + // PV for manually setting + BPS_MM = { + PVName = "EC-GN-P01-PB1F:STAT-MANM" + Type = uint32 + } + BPS_MANUAL = { + PVName = "EC-GN-P01-PB1F:PSU1000-EREF-MSP" + Type = float32 + } + APS_MM = { + PVName = "EC-GN-P01-PA1F:STAT-MANM" + Type = uint32 + } + APS_MANUAL = { + PVName = "EC-GN-P01-PA1F:PSU3000-EREF-MSP" + Type = float32 + } + MHVPS_MANUAL = { + PVName = "EC-GN-P01-PMF:PSU0000-EREF-MSP" + Type = float32 + } + MHVPS_MM = { + PVName = "EC-GN-P01-PMF:STAT-MANM" + Type = uint32 + } + // Analog Input PVs. + GYA_BPS_MESVOLT = { + PVName = "EC-GN-P01-PB1F:PSU1000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_BPS_MESVOLT = { + PVName = "EC-GN-P01-PB2F:PSU2000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_BPS_MESCURR = { + PVName = "EC-GN-P01-PB1F:PSU1000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_BPS_MESCURR = { + PVName = "EC-GN-P01-PB2F:PSU2000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_APS_MESVOLT = { + PVName = "EC-GN-P01-PA1F:PSU3000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_APS_MESVOLT = { + PVName = "EC-GN-P01-PA2F:PSU4000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_APS_MESCURR = { + PVName = "EC-GN-P01-PA1F:PSU3000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_APS_MESCURR = { + PVName = "EC-GN-P01-PA2F:PSU4000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC1_MESVOLT = { + PVName = "EC-GN-P01-GAF:MOE2810-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC1_MESVOLT = { + PVName = "EC-GN-P01-GBF:MOE2810-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC1_MESCURR = { + PVName = "EC-GN-P01-GAF:MOE2820-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC1_MESCURR = { + PVName = "EC-GN-P01-GBF:MOE2820-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC2_MESVOLT = { + PVName = "EC-GN-P01-GAF:MOE2830-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC2_MESVOLT = { + PVName = "EC-GN-P01-GBF:MOE2830-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC2_MESCURR = { + PVName = "EC-GN-P01-GAF:MRF2910-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC2_MESCURR = { + PVName = "EC-GN-P01-GBF:MRF2910-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_MHVPS_MESVOLT = { + PVName = "EC-GN-P01-PMF:PSU0000-ET-GA" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_MHVPS_MESVOLT = { + PVName = "EC-GN-P01-PMF:PSU0000-ET-GB" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_MHVPS_MESCURR = { + PVName = "EC-GN-P01-PMF:PSU0000-IT-GA" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_MHVPS_MESCURR = { + PVName = "EC-GN-P01-PMF:PSU0000-IT-GB" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + + //Digital Input PVs in Signal-Variable tab. + APS_READY = { + PVName = "EC-GN-P01-PA1F:PSU3000-YSTA" + Type = uint32 + } + GYA_APS_FLT = { + PVName = "EC-GN-P01-PA1F:PSU3000-YFLT" + Type = uint32 + } + GYB_APS_FLT = { + PVName = "EC-GN-P01-PA2F:PSU4000-YFLT" + Type = uint32 + } + BPS_READY = { + PVName = "EC-GN-P01-PB1F:PSU1000-YSTA" + Type = uint32 + } + GYA_BPS_FLT = { + PVName = "EC-GN-P01-PB1F:PSU1000-YFLT" + Type = uint32 + } + GYB_BPS_FLT = { + PVName = "EC-GN-P01-PB2F:PSU2000-YFLT" + Type = uint32 + } + MHVPS_OV = { + PVName = "EC-GN-P01-GAFP:FMC4310-YFLT-OC" + Type = uint32 + } + MHVPS_OC = { + PVName = "EC-GN-P01-GAFP:FMC4310-YFLT-OV" + Type = uint32 + } + MHVPS_FLT = { + PVName = "EC-GN-P01-PMF:PSU0000-YFLT" + Type = uint32 + } + MHVPS_READY = { + PVName = "EC-GN-P01-PMF:PSU0000-TYSTA" + Type = uint32 + } + MHVPS_MODON = { + PVName = "EC-GN-P01-GPF:PSU0000-YSTA-MOD" + Type = uint32 + } + MIS_ITL = { + PVName = "EC-GN-P01-GAFP:FMC4310-YTRP" + Type = uint32 + } + MISB_ITL = { + PVName = "EC-GN-P01-GBFP:FMC4310-YTRP" + Type = uint32 + } + PLC_ITL = { + PVName = "EC-GN-P01-GPS:PLC4110-YTRP" + Type = uint32 + } + PLC_STANDBY = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-ST1R" + Type = uint32 + } + PLC_READY = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-ST2R" + Type = uint32 + } + PLC_ON = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-ST3R" + Type = uint32 + } + PLC_MODE1 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD1" + Type = uint32 + } + PLC_MODE2 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD2" + Type = uint32 + } + PLC_MODE3 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD3" + Type = uint32 + } + PLC_MODE4 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD4" + Type = uint32 + } + PLC_PERMIT = { + PVName = "EC-GN-P01-GPS:PLC4110-CON-GY1PRM" + Type = uint32 + } + PLC_SELECT = { + PVName = "EC-GN-P01-GPS:PLC4110-CON-OPGY1" + Type = uint32 + } + PLC_SYNCMODE = { + PVName = "EC-GN-P01-GPS:PLC4110-YSTA-MPSS" + Type = uint32 + } + PLC_CCPSON = { + PVName = "EC-GN-P01-GPS:PLC4110-YON-CCPS1" + Type = uint32 + } + EXT_TRIG = { + PVName = "EC-GN-P01-GAF:DIO4900-YON" + Type = uint32 + } + + //Digital Output PVs in Variables-signal tab + APS_HVON = { + PVName = "EC-GN-P01-PA1F:PSU3000-CON-HV" + Type = uint32 + } + APS_SWON = { + PVName = "EC-GN-P01-PA1F:PSU3000-CON-SW" + Type = uint32 + } + APS_STOP = { + PVName = "EC-GN-P01-PA1F:PSU3000-CTRP" + Type = uint32 + } + BPS_HVON = { + PVName = "EC-GN-P01-PB1F:PSU1000-CON-HV" + Type = uint32 + } + BPS_SWON = { + PVName = "EC-GN-P01-PB1F:PSU1000-CON-SW" + Type = uint32 + } + BPS_STOP = { + PVName = "EC-GN-P01-PB1F:PSU1000-CTRP" + Type = uint32 + } + BEAM_ON_STAT = { + PVName = "EC-GN-P01-GAFP:FMC4310-YSTA-GAOP" + Type = uint32 + } + DO_REV5 = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV5" + Type = uint32 + } + DO_REV6 = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV6" + Type = uint32 + } + DO_REV7 = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV7" + Type = uint32 + } + DO_REV8 = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV8" + Type = uint32 + } + MHVPS_HVON = { + PVName = "EC-GN-P01-PMF:PSU0000-CON-SW" + Type = uint32 + } + MHVPS_STOP = { + PVName = "EC-GN-P01-PMF:PSU0000-COFF" + Type = uint32 + } + MHVPS_MODSW = { + PVName = "EC-GN-P01-PMF:PSU0000-CON-MOD" + Type = uint32 + } + PCF_FLT = { + PVName = "EC-GN-P01-GPF:PCF4210-CTRP" + Type = uint32 + } + HVARMED = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA1" + Type = uint32 + } + HVINJECTION = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA2" + Type = uint32 + } + RFON = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA3" + Type = uint32 + } + FHPS_RU = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP" + Type = uint32 + } + SCM_RU = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP" + Type = uint32 + } + SCM_RD = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN" + Type = uint32 + } + CCPS_IN_OPERATION = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-TR" + Type = uint32 + } + //Input PVs in Variables-Operation tab. + PREP_MODE = { + PVName = "EC-GN-P01-GAF:STAT-PREP-MODE" + Type = uint32 + } + SHORT_PULSE_MODE = { + PVName = "EC-GN-P01-GAF:STAT-SHORT-PULSE" + Type = uint32 + } + + MHVPS_DT = { + PVName = "EC-GN-P01-PMF:STAT-DT-HVON" + Type = uint32 + } + APS_HVON_DT = { + PVName = "EC-GN-P01-PA1F:STAT-DT-HVON" + Type = uint32 + } + APS_SWON_DT = { + PVName = "EC-GN-P01-PA1F:STAT-DT-SWON" + Type = uint32 + } + BPS_HVON_DT = { + PVName = "EC-GN-P01-PB1F:STAT-DT-HVON" + Type = uint32 + } + BPS_SWON_DT = { + PVName = "EC-GN-P01-PB1F:STAT-DT-SWON" + Type = uint32 + } + SHOTLEN = { + PVName = "EC-GN-P01-GAF:STAT-DT-SHOTLEN" + Type = uint32 + } + + MD1_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD1-LIM" + Type = uint32 + } + MD2_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD2-LIM" + Type = uint32 + } + MD3_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD3-LIM" + Type = uint32 + } + MD4_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD4-LIM" + Type = uint32 + } + + FHPS_MANM = { + PVName = "EC-GN-P01-GAF-FHPS:STAT-MANM" + Type = uint32 + } + + CSV_LOAD = { + PVName = "EC-GN-P01-GAF:STAT-CSV-LOAD" + Type = uint32 + } + CSV_NAME = { + PVName = "EC-GN-P01-GAF:STAT-CSV-NAME" + Type = char8 + NumberOfElements = 40 + } + RESET_FLT = { + PVName = "EC-GN-P01-GPF:STAT-RST-FLT" + //PVName = "EC-GN-P01-GPS-MEM:CMD-CONALARMRESET-HMI" + Type = uint32 + } + + //Input PVs in Variables-JASTEC tab. + MCPS_ACT_SP = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-ACT-SET-MI" + Type = uint32 + } + MCPS_TRG_CURR_MANUAL = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MI" + Type = float32 + } + MCPS_ACT_RB = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB" + Type = uint32 + } + MCPS_CURR_RB = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-RB" + Type = uint32 + } + GYA_MCPS_CURR_MON = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON" + Type = float32 + } + GYB_MCPS_CURR_MON = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON" + Type = float32 + } + MCPS_VOLT_MON = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-VOLT-MON" + Type = uint32 + } + MCPS_SWP_RB = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-SWP-RB" + Type = uint32 + } + MCPS_SWP_LIM = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-SWP-LIM" + Type = uint32 + } + MCPS_ERR = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-ERR" + Type = uint32 + } + MCPS_MM = { + PVName = "EC-GN-P01-GAF-MCPS:STAT-MANM" + Type = uint32 + } + //GCPS PVs + GCPS_ACT_SP = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MI" + Type = uint32 + } + GCPS_TRG_CURR_MANUAL = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MI" + Type = float32 + } + GCPS_ACT_RB = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB" + Type = uint32 + } + GCPS_CURR_RB = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-RB" + Type = uint32 + } + GYA_GCPS_CURR_MON = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON" + Type = float32 + } + GYB_GCPS_CURR_MON = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON" + Type = float32 + } + GCPS_VOLT_MON = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-VOLT-MON" + Type = uint32 + } + GCPS_SWP_RB = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-SWP-RB" + Type = uint32 + } + GCPS_SWP_LIM = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-SWP-LIM" + Type = uint32 + } + GCPS_ERR = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-ERR" + Type = uint32 + } + GCPS_MM = { + PVName = "EC-GN-P01-GAF-GCPS:STAT-MANM" + Type = uint32 + } + //Input PVs in Variables-kikusui tab. + FHPS_REM_RB = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-REM-RB" + Type = uint32 + } + FHPS_OUTON_RB = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB" + Type = uint32 + } + FHPS_CURR_RB = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-CURR-RB" + Type = uint32 + } + FHPS_ACV_RB = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-ACV-RB" + Type = uint32 + } + FHPS_FRQ_RB = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-FRQ-RB" + Type = uint32 + } + FHPS_SOUR_ON_RB = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-RB" + Type = uint32 + } + FHPS_MEAS_ACV = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV" + Type = float32 + } + GYA_FHPS_MEAS_ACI = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACI" + Type = float32 + } + GYB_FHPS_MEAS_ACI = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACI" + Type = float32 + } + FHPS_MEAS_ACP = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACP" + Type = uint32 + } + FHPS_MEAS_FRQ = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-FRQ" + Type = uint32 + } + FHPS_ERR = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-ERROR" + Type = uint32 + } + FHPS_AUTO_TAGV = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV" + Type = float32 + } + FHPS_AUTO_TIME = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-RU-TIME" + Type = float32 + } + FHPS_AUTO_START = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START" + Type = uint32 + } + + CCPS_REMLOC_RB = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-RB" + Type = uint32 + } + CCPS_OUTON_RB = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-OUTON-RB" + Type = uint32 + } + CCPS_CURR_RB = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-CURR-RB" + Type = uint32 + } + CCPS_DCV_RB = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-DCV-RB" + Type = uint32 + } + CCPS_RANG_RB = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-RANG-RB" + Type = uint32 + } + CCPS_SOUR_ON_RB = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-RB" + Type = uint32 + } + CCPS_MEAS_DCV = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCV" + Type = uint32 + } + GYA_CCPS_MEAS_DCI = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCI" + Type = float32 + } + GYB_CCPS_MEAS_DCI = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCI" + Type = float32 + } + CCPS_MEAS_DCP = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCP" + Type = uint32 + } + CCPS_ERR = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-ERROR" + Type = uint32 + } + CCPS_OUTPUT_AMP = { + PVName = "EC-GN-P01-GAF-CCPS:STAT-AMP" + Type = float32 + } + CCPS_OUTPUT_FREQ = { + PVName = "EC-GN-P01-GAF-CCPS:STAT-FREQ" + Type = float32 + } + CCPS_OUTPUT_OFFS = { + PVName = "EC-GN-P01-GAF-CCPS:STAT-OFFS" + Type = float32 + } + //PXI Board status PVs + PXI6259_0 = { + PVName = "EC-GN-HWCF:6259-0-STATUS" + Type = uint32 + } + PXI6259_1 = { + PVName = "EC-GN-HWCF:6259-1-STATUS" + Type = uint32 + } + PXI6528_0 = { + PVName = "EC-GN-HWCF:6528-0-STATUS" + Type = uint32 + } + PXI6528_1 = { + PVName = "EC-GN-HWCF:6528-1-STATUS" + Type = uint32 + } + PXI6368_0 = { + PVName = "EC-GN-HWCF:6368-0-STATUS" + Type = uint32 + } + PXI6368_1 = { + PVName = "EC-GN-HWCF:6368-1-STATUS" + Type = uint32 + } + } + } + +EPICSCAOutput = { + Class = "EPICSCA::EPICSCAOutput" + CPUMask = "0x100" //change from 0x200 + StackSize = "10000000" + NumberOfBuffers = 2 + Signals = { + PCF_STATE = { + PVName = "EC-GN-P01-GAF:STAT-SM" + Type = uint32 + } + //Analog Output PVs in Variables-signal tab. + FHPS_REF = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-EREF" + Type = float32 + } + BPS_REF = { + PVName = "EC-GN-P01-PB1F:PSU1000-EREF" + Type = float32 + } + APS_REF = { + PVName = "EC-GN-P01-PA1F:STAT-EREF-CONV.A" + Type = float32 + } + MHVPS_REF = { + PVName = "EC-GN-P01-PMF:STAT-EREF-CALC.A" + Type = float32 + } + + //Digital Output PVs in Variables-signal tab. + APS_STOP = { + PVName = "EC-GN-P01-PA1F:PSU3000-CTRP" + Type = uint32 + } + + BPS_STOP = { + PVName = "EC-GN-P01-PB1F:PSU1000-CTRP" + Type = uint32 + } + + BEAM_ON_STAT = { + PVName = "EC-GN-P01-GAFP:FMC4310-YSTA-GAOP" + Type = uint32 + } + + MHVPS_STOP = { + PVName = "EC-GN-P01-PMF:PSU0000-COFF" + Type = uint32 + } + PCF_FLT = { + PVName = "EC-GN-P01-GPF:PCF4210-CTRP" + Type = uint32 + } + HVARMED = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA1" + Type = uint32 + } + HVINJECTION = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA2" + Type = uint32 + } + RFON = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA3" + Type = uint32 + } + + //Output PVs in Variables-operation tab. + MHVPS_PREP_WF = { + PVName = "EC-GN-P01-PMF:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + + } + BPS_PREP_WF = { + PVName = "EC-GN-P01-PB1F:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + APS_PREP_WF = { + PVName = "EC-GN-P01-PA1F:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + FHPS_PREP_WF = { + PVName = "EC-GN-P01-GAF-FHPS:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + MCPS_PREP_WF = { + PVName = "EC-GN-P01-GAF-MCPS:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GCPS_PREP_WF = { + PVName = "EC-GN-P01-GAF-GCPS:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + PREP_TIME_WF = { + PVName = "EC-GN-P01-GAF:STAT-PREP-TIME-WF" + Type = int32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + BEAM_ON_TIME = { + PVName = "EC-GN-P01-GAF:STAT-BEAMON-TIME" + Type = uint32 + } + ELAPSED_TIME = { + PVName = "EC-GN-P01-GAF:STAT-ELAPSED" + Type = uint32 + } + SHOT_ID = { + PVName = "EC-GN-P01-GAF:STAT-SHOT-ID" + Type = uint32 + } + + CSV_LOADED = { + PVName = "EC-GN-P01-GAF:STAT-CSV-LOADED" + Type = uint32 + } + CSV_ERR = { + PVName = "EC-GN-P01-GAF:STAT-CSV-ERR" + Type = uint32 + } + + //Output PVs in Variables-jastec tab. + MCPS_TRG_CURR_SET = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MO" + Type = float32 + } + MCPS_ACT_SP = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MO" + Type = uint32 + } + GCPS_TRG_CURR_SET = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MO" + Type = float32 + } + GCPS_ACT_SP = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MO" + Type = uint32 + } + + //Output PVs in Variables-kikusui tab. + CCPS_REF = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-EREF" + Type = float32 + } + FHPS_AUTO_STAT = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-STAT" + Type = uint32 + } + //Add 20201117 + APS_HVON = { + PVName = "EC-GN-P01-PA1F:PSU3000-CON-HV" + Type = uint32 + } + APS_SWON = { + PVName = "EC-GN-P01-PA1F:PSU3000-CON-SW" + Type = uint32 + } + BPS_HVON = { + PVName = "EC-GN-P01-PB1F:PSU1000-CON-HV" + Type = uint32 + } + BPS_SWON = { + PVName = "EC-GN-P01-PB1F:PSU1000-CON-SW" + Type = uint32 + } + MHVPS_HVON = { + PVName = "EC-GN-P01-PMF:STAT-HVON-CALC.A" + Type = uint32 + } + } + } + // for ESDN packet subscription/publication. + +SDNSubCommands = { + Class = SDN::SDNSubscriber + Topic = ECPC2SCUJA + Interface = enp27s0f0 + CPUs = 0x200 //change from 100 + Locked = 1 + Timeout = 2 + Signals = { + Header = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + Command = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 64 + } + } + } + +SDNReply = { + Class = SDN::SDNPublisher + Topic = SCUJA2ECPC + Interface = enp27s0f0 + CPUs = 0x200 //changed from 0x100 + Locked = 1 + Signals = { + Header = { + Type = uint8 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ReplyStatus = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ReplyWaveformAck = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + //Status (26Bytes?) is not assigned + //GyrotronA measurements + //56Bytes are used as Gyrotron1 Measurements (verified on 2020/10/22) + GYA_MHVPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_MHVPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_BPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_BPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_APS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_APS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC1_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC1_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC2_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC2_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_MCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_GCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_FHPS_MEAS_ACI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_CCPS_MEAS_DCI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + //GyrotronB measurements + GYB_MHVPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_MHVPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_BPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_BPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_APS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_APS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC1_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC1_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC2_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC2_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_MCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_GCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_FHPS_MEAS_ACI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_CCPS_MEAS_DCI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + } + + // Direct HW accesses. Follwing device/port assignment must be consistent with actual wiring. + // NI6259.0 + // APS_SWON BoardId=0, PortId=3.0 + +NI6259 = { + Class = NI6259::NI6259DIO + DeviceName = "/dev/pxi6259" + BoardId = 1 + Signals = { + NI6259Value = { + Type = uint32 + Mask = 0xFF + PortId = 0 + } + } + } + + //NI6528 digital output has logic low == 0 == close relay. ((See Driver Manual.) + //When the program send ON signal, this program writes 0 on the data source. + +NI6528P3 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.1" + Port = 3 + NI6528P3Value = { + NI6528P3Value = { + Type = uint8 + } + } + } + //P3.0 APS_HVON + //P3.1 APS_SWON + //P3.2 APS_Shutdown + //P3.3 BPS_HVON + //P3.4 BPS_SWON + //P3.5 BPS_Shutdown + //P3.6 GY1_Beam_ON_status + //P3.7 RV5 _cRIO + + +NI6528P4 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.1" + Port = 4 + NI6528P4Value = { + NI6528P4Value = { + Type = uint8 + } + } + } + //P4.0 RV6 _cRIO + //P4.1 RV7 _cRIO + //P4.2 RV8 _cRIO + //P4.3 MHVPS_HVON + //P4.4 MHVPS_Shutdown + //P4.5 MHVPS_MOD + //P4.6 PCF_FLT + //P4.7 HVArmed + + +NI6528P5 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.1" + Port = 5 + NI6528P5Value = { + NI6528P5Value = { + Type = uint8 + } + } + } + //P5.0 HVInjection + //P5.1 RFON + //P5.2 FHPS_Rampup_complete + //P5.3 SCM_RU_Complete + //P5.4 SCM_RD_Complete + //P5.5 CCPS_IN_OPERATION + //P5.6 None + //P5.7 None + + } + +States = { + Class = ReferenceContainer + +Disabled = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM GoErrorGAM InDisabledGAM + GoWaitStandbyGAM choiseGAM MCPSGAM GCPSGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM} + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM } + CPUs = 0x400 + } + } + } + +WaitStandby = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM FHPSSetpointGAM FHPSRampupGAM InWaitStandbyGAM + choiseGAM MCPSGAM GCPSGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + GoDisabledGAM GoWaitReadyGAM GoErrorGAM } + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM } + CPUs = 0x400 + } + } + } + +WaitReady = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM WFRecordGAM PreProgrammedGAM FHPSSetpointGAM FHPSRampupGAM InWaitReadyGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + GoWaitPermitGAM GoWaitStandbyFromReadyGAM GoErrorGAM } + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM } + CPUs = 0x400 + } + } + } + +WaitPermit = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM WFRecordGAM PreProgrammedGAM FHPSSetpointGAM FHPSRampupGAM InWaitPermitGAM + choiseGAM EPICSOutputGAM GoWaitReadyFromWaitPermitGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + GoWaitHVONGAM GoWaitHVON_PREP_GAM GoWaitHVON_SDN_GAM GoWaitHVON_SDN_PREP_GAM GoErrorGAM } + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM } + CPUs = 0x400 + } + } + } + + //Real-Time state for HVPS sequence timing control. + +WaitHVON = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM FHPSSetpointGAM FHPSRampupGAM InWaitHVONGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM } + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM + GAMRealTimeStateMachine NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x400 + } +// +Thread4 = { +// Class = RealTimeThread +// Functions = {Timer10HzGAM GAMExecTime } +// CPUs = 0x800 +// } + } + } + +WaitHVON_SDN = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM FHPSRampupGAM InWaitHVON_SDNGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM } + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM + GAMSDNRealTimeStateMachine terminalInterfaceGAM NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x400 + } + } + } + +WaitHVON_PREP = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM PreProgrammedGAM FHPSRampupGAM InWaitHVON_PREPGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM } + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM + GAMRealTimeStateMachine NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x400 + } + } + } + +WaitHVON_SDN_PREP = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM PreProgrammedGAM FHPSRampupGAM InWaitHVON_SDN_PREPGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM} + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM + GAMSDNRealTimeStateMachine terminalInterfaceGAM NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x400 + } + } + } + + +Error = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM InErrorGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + ExitedHVArmedInjectionRFONGAM ResetPSsGAM + FromErrorToWaitStandbyGAM ErrorGAM choiseGAM EPICSOutputGAM FHPSSetpointGAM FHPSRampupGAM CCPSWaveformGAM} + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM } + CPUs = 0x400 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} diff --git a/EC-GN-JA-PCF/.svn/pristine/f5/f5e2f843ad2ebec2c0e0942cf9b73760fbfdc391.svn-base b/EC-GN-JA-PCF/.svn/pristine/f5/f5e2f843ad2ebec2c0e0942cf9b73760fbfdc391.svn-base new file mode 100644 index 0000000..c6da874 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/f5/f5e2f843ad2ebec2c0e0942cf9b73760fbfdc391.svn-base @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/f7/f78215091b2ca375b6d286aa857252c3654696b5.svn-base b/EC-GN-JA-PCF/.svn/pristine/f7/f78215091b2ca375b6d286aa857252c3654696b5.svn-base new file mode 100644 index 0000000..9ae00ed --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/f7/f78215091b2ca375b6d286aa857252c3654696b5.svn-base @@ -0,0 +1,103 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,60,45,10,10,10,10 +10,55,40,9,9,9,9 +20,50,35,8,8,8,8 +30,45,30,7,7,7,7 +40,40,25,6,6,6,6 +50,35,20,5,5,5,5 +60,30,15,4,4,4,4 +70,25,10,3,3,3,3 +80,20,5,2,2,2,2 +90,15,0,1,1,1,1 +100,10,-5,0,0,0,0 +110,5,0,1,1,1,1 +120,0,5,2,2,2,2 +130,-5,10,3,3,3,3 +140,0,15,4,4,4,4 +150,5,20,5,5,5,5 +160,10,25,6,6,6,6 +170,15,30,7,7,7,7 +180,20,35,8,8,8,8 +190,25,40,9,9,9,9 +200,30,45,10,10,10,10 +210,35,40,11,9,9,9 +220,40,35,12,8,8,8 +230,45,30,11,7,7,7 +240,50,25,10,6,6,6 +250,55,20,9,5,5,5 +260,60,15,8,4,4,4 +270,55,10,7,3,3,3 +280,50,5,6,2,2,2 +290,45,0,5,1,1,1 +300,40,-5,4,0,0,0 +310,35,0,3,1,1,1 +320,30,5,2,2,2,2 +330,25,10,1,3,3,3 +340,20,15,0,4,4,4 +350,15,20,1,5,5,5 +360,10,25,2,6,6,6 +370,5,30,3,7,7,7 +380,0,35,4,8,8,8 +390,-5,40,5,9,9,9 +400,0,45,6,10,10,10 +410,5,40,7,9,9,9 +420,10,35,8,8,8,8 +430,15,30,9,7,7,7 +440,20,25,10,6,6,6 +450,25,20,11,5,5,5 +460,30,15,12,4,4,4 +470,35,10,11,3,3,3 +480,40,5,10,2,2,2 +490,45,0,9,1,1,1 +500,50,-5,8,0,0,0 +510,55,0,7,1,1,1 +520,60,5,6,2,2,2 +530,55,10,5,3,3,3 +540,50,15,4,4,4,4 +550,45,20,3,5,5,5 +560,40,25,2,6,6,6 +570,35,30,1,7,7,7 +580,30,35,0,8,8,8 +590,25,40,1,9,9,9 +600,20,45,2,10,10,10 +610,15,40,3,9,9,9 +620,10,35,4,8,8,8 +630,5,30,5,7,7,7 +640,0,25,6,6,6,6 +650,-5,20,7,5,5,5 +660,0,15,8,4,4,4 +670,5,10,9,3,3,3 +680,10,5,10,2,2,2 +690,15,0,11,1,1,1 +700,20,-5,12,0,0,0 +710,25,0,11,1,1,1 +720,30,5,10,2,2,2 +730,35,10,9,3,3,3 +740,40,15,8,4,4,4 +750,45,20,7,5,5,5 +760,50,25,6,6,6,6 +770,55,30,5,7,7,7 +780,60,35,4,8,8,8 +790,55,40,3,9,9,9 +800,50,45,2,10,10,10 +810,45,40,1,9,9,9 +820,40,35,0,8,8,8 +830,35,30,1,7,7,7 +840,30,25,2,6,6,6 +850,25,20,3,5,5,5 +860,20,15,4,4,4,4 +870,15,10,5,3,3,3 +880,10,5,6,2,2,2 +890,5,0,7,1,1,1 +900,0,-5,8,0,0,0 +910,-5,0,9,1,1,1 +920,0,5,10,2,2,2 +930,5,10,11,3,3,3 +940,10,15,12,4,4,4 +950,15,20,11,5,5,5 +960,20,25,10,6,6,6 +970,25,30,9,7,7,7 +980,30,35,8,8,8,8 +990,35,40,7,9,9,9 +1000,40,45,6,10,10,10 diff --git a/EC-GN-JA-PCF/.svn/pristine/f7/f793e20f38d901e56bd8139d9e42fce7bdafb813.svn-base b/EC-GN-JA-PCF/.svn/pristine/f7/f793e20f38d901e56bd8139d9e42fce7bdafb813.svn-base new file mode 100644 index 0000000..90477ef --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/f7/f793e20f38d901e56bd8139d9e42fce7bdafb813.svn-base @@ -0,0 +1,51 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +import test_async +import test_sync +import test_ready_hw +import test_setup_hw +import test_standby_hw +import test_ready +import test_setup +import test_standby + + +"""" +Test GYB operation with Async mode. +This code can be executed when WaitPermit state. +""" +# turn on permit +print '2.. set PulseLengthLimitMode to 1 flag' +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) +res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) +time.sleep(1) +print '3. Write PERMIT' +#res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SCAN Passive', shell=True) +#res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SIML ', shell=True) +#res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SIMM 1', shell=True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 1', shell=True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 1', shell=True) +time.sleep(1) +# trun on HVON trigger +print '4. Write HVON' +#res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SCAN Passive', shell=True) +#res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SIML ', shell=True) +#res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SIMM 1', shell=True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC +time.sleep(11) +print '5. Confirm generated pulse' +print '6. Reset HVON' +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) +time.sleep(1) +print '7. Reset PERMIT' +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 0', shell=True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 0', shell=True) +print "end of async, non-prepro mode test!" + diff --git a/EC-GN-JA-PCF/.svn/pristine/f8/f857620d5b68a92beb7a69cd53009febfd5e4aa2.svn-base b/EC-GN-JA-PCF/.svn/pristine/f8/f857620d5b68a92beb7a69cd53009febfd5e4aa2.svn-base new file mode 100644 index 0000000..770f841 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/f8/f857620d5b68a92beb7a69cd53009febfd5e4aa2.svn-base @@ -0,0 +1,86 @@ +#====================================================================== +# PLC(s) driver configuration commands +#====================================================================== +# level=-1: no output +# level=0: errors only +# level=1: startup messages +# level=2: + output record processing +# level=3: + input record processing +# level=4: + driver calls +# level=5: + io printout +# be careful using level>1 since many messages may introduce delays + +# var s7plcDebug 2 + +# s7plcConfigure name,IPaddr,port,inSize,outSize,bigEndian,recvTimeout,sendIntervall, configversion +# connects to PLC on address port +# : size of data block PLC -> IOC [bytes] +# : size of data block IOC -> PLC [bytes] +# =1 : motorola format data (MSB first) +# =0 : intel format data (LSB first) +# : receive buffer interval [ms] (Default : 50ms) +# : time to wait before sending new data to PLC [ms] +# : database configuration version + +# s7plcConfigureCmd name,IPaddr,port,outSize,bigEndian,sendIntervall +# connects to PLC on address port +# : size of data block IOC -> PLC [bytes] +# =1 : motorola format data (MSB first) +# =0 : intel format data (LSB first) +# : time to wait before sending new data to PLC [ms] + + + +#============================================================================ +# s7plc asyn driver configuration commands +#============================================================================ + +#============================================================================ +# NI-6259 DAQ I/O Module driver configuration commands +#============================================================================ +# Reference: ITER_D_3DEY52 v1.3 - NI PXI-6259 EPICS Driver User’s Guide + +# For analogue input, analogue output, waveform, initialize using below function +# pxi6259_ai_init(uint8 cardnumber, uint32 range, uint32 clk_source, uint32 clk_edge); +# Example: pxi6259_ai_init(0, 1, 0, 0) + +# For binary input, binary output, multi-bit binary input, multi bit binary output, initialize using below function +# pxi6259init(uint8 cardnumber, uint32 portmask0, uint8 portmask1, uint8 portmask2); +# Example: pxi6259_bio_init(0, 0xFF000000, 0xFF, 0xFF) + + +#============================================================================ +# NI-6682 Timing and Synchronization I/O Module driver configuration commands +#============================================================================ +# Reference ITER_D_33Q5TX v1.7 - NI Sync EPICS Driver User’s Guide + +# nisyncDrvInit(string port, char* type, int cardNumber); +# Example: nisyncDrvInit("S0", "PXI-6682", "0"); +# Example: nisyncDrvInit("S0", "PXI-6683H", "0"); +# nisyncTimeInit(int cardID, char* type, int cardNumber); +# Example: nisyncTimeInit("0", "PXI-6682", "0") +# Example: nisyncTimeInit("0", "PXI-6683H", "0") + + +#============================================================================================ +# NI-6368 X Series - Multifunction Data Acquisition I/O Module driver configuration commands +#============================================================================================ +# Reference ITER_D_3P4N3R v1.2 - NI X Series EPICS Driver User’s Guide + +# nixseriesInit(char *portName, char *nix6368Card); +# Example: nixseriesInit("ni6368_0", "/dev/ni6368.0"); + + +#============================================================================ +# NI-6528 DAQ I/O Module driver configuration commands +#============================================================================ +# Reference ITER_D_433VEW - NI PXI-6528 EPICS Driver User's Manual +# ni6528_init(char *portName, char *ni6528Card); +# Example: pxi6528_init("ni6528_0", "/dev/ni6528.0") +# asynSetTraceMask("",0,255) +# Example: asynSetTraceMask("pxi6528_0",0,255) +# pxi6528_reset(char *portName) +# Example: pxi6528_reset("pxi6528_0") + + +#- End-of-file marker - do not delete or add lines below! \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/f8/f876b4440a9e137f5a0eebf48d374470bc16442f.svn-base b/EC-GN-JA-PCF/.svn/pristine/f8/f876b4440a9e137f5a0eebf48d374470bc16442f.svn-base new file mode 100644 index 0000000..0973323 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/f8/f876b4440a9e137f5a0eebf48d374470bc16442f.svn-base @@ -0,0 +1 @@ +Last SDD Generation: Tue May 13 13:54:39 UTC 2025 diff --git a/EC-GN-JA-PCF/.svn/pristine/f9/f92eb213b939c6244c4b7fac9a484391ee831af3.svn-base b/EC-GN-JA-PCF/.svn/pristine/f9/f92eb213b939c6244c4b7fac9a484391ee831af3.svn-base new file mode 100644 index 0000000..4ff855f --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/f9/f92eb213b939c6244c4b7fac9a484391ee831af3.svn-base @@ -0,0 +1,389 @@ +record (bi,"EC-GN-P01-GBF:DIO4900-YON") +{ + field(DESC, "GY3 External trigger") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 22) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF:STAT-AI-SIMM") +{ + field(DESC, "GY2 AI Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GBF:STAT-AO-SIMM") +{ + field(DESC, "GY2 AO Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GBF:STAT-CSV-LOAD") +{ + field(DESC, "File load trigger") + field(HIGH, "0.1") + field(ONAM, "Loading") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Load") +} + +record (bo,"EC-GN-P01-GBF:STAT-CSV-LOADED") +{ + field(DESC, "File load status") + field(ONAM, "Loaded") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Loading") +} + +record (bo,"EC-GN-P01-GBF:STAT-DI-SIMM") +{ + field(DESC, "GY2 DI Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GBF:STAT-DO-SIMM") +{ + field(DESC, "GY2 DO Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GBF:STAT-DT-SHOTLEN-EGU") +{ + field(DESC, "GY2 egu of shot length") + field(FLNK, "EC-GN-P01-GBF:STAT-DT-SHOTLEN-CALC") + field(ONAM, "s") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "ms") +} + +record (bo,"EC-GN-P01-GBF:STAT-MST-TRIG") +{ + field(DESC, "GY2 Master trigger") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF:STAT-PREP-MODE") +{ + field(DESC, "GY2 Pre-Pro mode ON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF:STAT-SHORT-PULSE") +{ + field(DESC, "GY2 Short Pulse Mode") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF:STAT-TRIG-SOUR") +{ + field(DESC, "GY2 External Trigger Mode SW") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (ai,"EC-GN-P01-GBF:MOE2810-ET") +{ + field(DESC, "GY2 Arc detect signal 1") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GBF:MOE2810-ET-WF") +{ + field(DESC, "GY2 Arc detect signal 1") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GBF:MOE2820-ET") +{ + field(DESC, "GY2 Arc detect signal 2") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GBF:MOE2820-ET-WF") +{ + field(DESC, "GY2 Arc detect signal 2") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GBF:MOE2830-ET") +{ + field(DESC, "GY2 Arc detect signal 3") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GBF:MOE2830-ET-WF") +{ + field(DESC, "GY2 Arc detect signal 3") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GBF:MRF2910-ET") +{ + field(DESC, "GY2 RF Signal") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GBF:MRF2910-ET-WF") +{ + field(DESC, "GY2 RF Signal") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GBF:STAT-BEAMON-TIME") +{ + field(DESC, "GY2 Beam ON time") + field(EGU, "us") + field(HOPR, "3600000000") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (mbbo,"EC-GN-P01-GBF:STAT-CSV-ERR") +{ + field(DESC, "File load error status") + field(FRST, "Format error") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FVST, "Out of range") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(ONST, "Successfully loaded") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(THST, "Empty data") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "Failed to open") + field(TWSV, "MAJOR") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "Not loaded yet") + field(ZRSV, "MINOR") + field(ZRVL, "0") +} + +record (stringout,"EC-GN-P01-GBF:STAT-CSV-NAME") +{ + field(DESC, "CSV file name") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "shot000000") +} + +record (ai,"EC-GN-P01-GBF:STAT-DT-SHOTLEN") +{ + field(DESC, "GY2 Shot length") + field(EGU, "us") + field(HOPR, "3600000000") + field(LOPR, "100") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "1000000") +} + +record (calcout,"EC-GN-P01-GBF:STAT-DT-SHOTLEN-CALC") +{ + field(CALC, "(!A)?1000*B:1000000*B") + field(DESC, "GY2 shot length convert") + field(FLNK, "EC-GN-P01-GBF:STAT-DT-SHOTLEN") + field(INPA, "EC-GN-P01-GBF:STAT-DT-SHOTLEN-EGU") + field(INPB, "EC-GN-P01-GBF:STAT-DT-SHOTLEN-DAM") + field(OUT, "EC-GN-P01-GBF:STAT-DT-SHOTLEN") + field(SCAN, "Passive") +} + +record (ao,"EC-GN-P01-GBF:STAT-DT-SHOTLEN-DAM") +{ + field(DESC, "GY2 shot length without unit") + field(DRVH, "3600") + field(DRVL, "0") + field(FLNK, "EC-GN-P01-GBF:STAT-DT-SHOTLEN-CALC") + field(HOPR, "3600") + field(LOPR, "0") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF:STAT-ELAPSED") +{ + field(DESC, "GY2 Elapsed time") + field(EGU, "us") + field(HOPR, "4000000000") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (longin,"EC-GN-P01-GBF:STAT-PREHEAT-TIME") +{ + field(DESC, "Pre-heating time") + field(HOPR, "999999") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (waveform,"EC-GN-P01-GBF:STAT-PREP-TIME-WF") +{ + field(DESC, "GY2 prepro time schedule") + field(EGU, "ms") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "0") + field(SCAN, "Passive") +} + +record (fanout,"EC-GN-P01-GBF:STAT-SHOT-FLNK1") +{ + field(DESC, "GY2 fanout1 to AI waveform signal") +} + +record (fanout,"EC-GN-P01-GBF:STAT-SHOT-FLNK2") +{ + field(DESC, "GY2 fanout2 to AI waveform signal") +} + +record (longin,"EC-GN-P01-GBF:STAT-SHOT-ID") +{ + field(DESC, "GY2 shot ID") + field(HOPR, "999999") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (calcout,"EC-GN-P01-GBF:STAT-SHOT-PLOT") +{ + field(CALC, "A andand (B >= C)") + field(DESC, "GY2 judge to plot measured values") + field(INPA, "EC-GN-P01-GPS:PLC4110-YTS-ST3R") + field(INPB, "EC-GN-P01-GBF:STAT-BEAMON-TIME") + field(INPC, "6000000") + field(OOPT, "Transition To Non-zero") + field(OUT, "EC-GN-P01-GBF:STAT-SHOT-FLNK1 PP") + field(SCAN, ".1 second") +} + +record (mbbi,"EC-GN-P01-GBF:STAT-SM") +{ + field(DESC, "GY#2 state machine") + field(EIST, "WaitHVON_SDN") + field(EIVL, "8") + field(FLNK, "EC-GN-P01-GBF:STAT-SHOT-PLOT") + field(FRST, "WaitReady") + field(FRVL, "4") + field(FVST, "WaitPermit") + field(FVVL, "5") + field(NIST, "WaitHVON_SDN_PREP") + field(NIVL, "9") + field(ONST, "Error") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(SVST, "WaitHVON_PREP") + field(SVVL, "7") + field(SXST, "WaitHVON") + field(SXVL, "6") + field(THST, "WaitStandby") + field(THVL, "3") + field(TWST, "Disabled") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "Init") + field(ZRVL, "0") +} + diff --git a/EC-GN-JA-PCF/.svn/pristine/f9/f94cc269b31ef6a419187174b4870486ce197549.svn-base b/EC-GN-JA-PCF/.svn/pristine/f9/f94cc269b31ef6a419187174b4870486ce197549.svn-base new file mode 100644 index 0000000..876d64e --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/f9/f94cc269b31ef6a419187174b4870486ce197549.svn-base @@ -0,0 +1,264 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARTSTATEMACHINEGAM_H_ +#define GAMS_JARTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that provides real-time state machine. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMRealTimeStateMachine = {
+ *           Class = JARTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BEAM_ON_STAT = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JARTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARTStateMachineGAM(); + + virtual ~JARTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS = 1, + RFON = 2, + HVTerminate = 3 + }; + + //The current rtState + JARealTimeState currentState; + + //A given condition + MARTe::uint32 conditionTrigger; + + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + + //Time signal + MARTe::uint32 *currentTime; + + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for short pulse mode. + MARTe::uint32 *short_pulse_mode; + // Input signal for modulation pv. + MARTe::uint32 *modulation; + // Input signal for pause signal set pv. + MARTe::uint32 *pauseSet; + + // Output signal to which the output value will be written. + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + // Added for HVPS state (20201117) + MARTe::uint32 *outputAPSHVON; + MARTe::uint32 *outputAPSSWON; + MARTe::uint32 *outputBPSHVON; + MARTe::uint32 *outputBPSSWON; + MARTe::uint32 *outputMHVPSON; + + // Output signals for NI devices + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + MARTe::uint64 apsSwonHighResolutionTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + + // terminal values + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF/.svn/pristine/f9/f9668ddac31145540c01cf0d1c9d000321a10adc.svn-base b/EC-GN-JA-PCF/.svn/pristine/f9/f9668ddac31145540c01cf0d1c9d000321a10adc.svn-base new file mode 100644 index 0000000..9a1eb6b --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/f9/f9668ddac31145540c01cf0d1c9d000321a10adc.svn-base @@ -0,0 +1,45 @@ +#====================================================================== +# Loading DBs +#====================================================================== +cd $(TOP)/db +dbLoadRecords("PCF0-EC-GN-HWCF-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GAF-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GAF-CCPS-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GAF-FHPS-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GAF-GCPS-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GAF-MCPS-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GAFP-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GBF-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GBF-CCPS-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GBF-FHPS-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GBF-GCPS-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GBF-MCPS-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GBFP-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GPF-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GPS-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-PA1F-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-PA2F-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-PB1F-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-PB2F-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-PMF-iocEC-GN-PSH0PCF.db") + + +#====================================================================== +# Loading Substitution Files +#====================================================================== +cd $(TOP)/iocBoot/$(IOC) + + +#====================================================================== +# PLC Communication Monitoring PVs DB Loading +#====================================================================== +cd $(EPICS_ROOT)/db + + +#====================================================================== +# IOC Monitor +#====================================================================== +cd $(EPICS_ROOT)/db +#dbLoadRecords("iocmon.db","CBS=EC-GN-SYSM, CTRLTYPE=F, IDX=0, IOCTYPE=CORE, PP=01, PPPP=52RF, NNNN=4210, TTT=PCF") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/.svn/pristine/f9/f9718c0f3bd0ea1f577124c91d43093b1c5f5567.svn-base b/EC-GN-JA-PCF/.svn/pristine/f9/f9718c0f3bd0ea1f577124c91d43093b1c5f5567.svn-base new file mode 100644 index 0000000..5c2de87 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/f9/f9718c0f3bd0ea1f577124c91d43093b1c5f5567.svn-base @@ -0,0 +1,233 @@ +/** + * @file EPICSCAOutput.h + * @brief Header file for class EPICSCAOutput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class EPICSCAOutput + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef JAEPICSCAOutput_H_ +#define JAEPICSCAOutput_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" +#include "JAEPICSCAInput.h" +#include "EmbeddedServiceMethodBinderI.h" +#include "EventSem.h" +#include "SingleThreadService.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +//Maximum size that a PV name may have + +/** + * @brief A DataSource which allows to output data into any number of PVs using the EPICS channel access client protocol. + * Data is asynchronously ca_put in the context of a different thread (w.r.t. to the real-time thread). + * + * The configuration syntax is (names are only given as an example): + * + *
+ * +EPICSCAOutput_1 = {
+ *     Class = EPICSCA::EPICSCAOutput
+ *     StackSize = 1048576 //Optional the EmbeddedThread stack size. Default value is THREADS_DEFAULT_STACKSIZE * 4u
+ *     CPUs = 0xff //Optional the affinity of the EmbeddedThread (where the EPICS context is attached).
+ *     IgnoreBufferOverrun = 1 //Optional. If true no error will be triggered when the thread that writes into EPICS does not consume the data fast enough.
+ *     NumberOfBuffers = 10 //Compulsory. Number of buffers in a circular buffer that asynchronously writes the PV values. Each buffer is capable of holding a copy of all the DataSourceI signals.
+ *     Signals = {
+ *          PV1 = { //At least one shall be defined
+ *             PVName = My::PV1 //Compulsory. Name of the PV.
+ *             Type = uint32 //Compulsory. Supported types are char8[40], string[40], uint8, int8, uint16, int16, int32, uint32, float32 and float64
+ *          }
+ *          ...
+ *     }
+ * }
+ *
+ * 
+ */ +class JAEPICSCAOutput: public DataSourceI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Default constructor. NOOP. + */ + JAEPICSCAOutput(); + + /** + * @brief Destructor. + * @details TODO. + */ + virtual ~JAEPICSCAOutput(); + + /** + * @brief See DataSourceI::AllocateMemory. NOOP. + * @return true. + */ + virtual bool AllocateMemory(); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @return 1. + */ + virtual uint32 GetNumberOfMemoryBuffers(); + + /** + * @brief See DataSourceI::GetSignalMemoryBuffer. + * @pre + * SetConfiguredDatabase + */ + virtual bool GetSignalMemoryBuffer(const uint32 signalIdx, + const uint32 bufferIdx, + void *&signalAddress); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @details Only OutputSignals are supported. + * @return MemoryMapAsyncOutputBroker. + */ + virtual const char8 *GetBrokerName(StructuredDataI &data, + const SignalDirection direction); + + /** + * @brief See DataSourceI::GetInputBrokers. + * @return false. + */ + virtual bool GetInputBrokers(ReferenceContainer &inputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::GetOutputBrokers. + * @details adds a memory MemoryMapOutputBroker instance to the outputBrokers + * @return true. + */ + virtual bool GetOutputBrokers(ReferenceContainer &outputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::PrepareNextState. NOOP. + * @return true. + */ + virtual bool PrepareNextState(const char8 * const currentStateName, + const char8 * const nextStateName); + + /** + * @brief Loads and verifies the configuration parameters detailed in the class description. + * @return true if all the mandatory parameters are correctly specified and if the specified optional parameters have valid values. + */ + virtual bool Initialise(StructuredDataI & data); + + /** + * @brief Final verification of all the parameters. Setup of the memory required to hold all the signals. + * @details This method verifies that all the parameters requested by the GAMs interacting with this DataSource + * are valid and consistent with the parameters set during the initialisation phase. + * In particular the following conditions shall be met: + * - All the signals have the PVName defined + * - All the signals have one of the following types: uint32, int32, float32 or float64. + * @return true if all the parameters are valid and the conditions above are met. + */ + virtual bool SetConfiguredDatabase(StructuredDataI & data); + + /** + * @brief Gets the affinity of the thread which is going to be used to asynchronously write data with ca_put. + * @return the affinity of the thread which is going to be used to asynchronously write data with ca_put. + */ + uint32 GetCPUMask() const; + + /** + * @brief Gets the stack size of the thread which is going to be used to asynchronously write data with ca_put. + * @return the stack size of the thread which is going to be used to asynchronously write data with ca_put. + */ + uint32 GetStackSize() const; + + /** + * @brief Gets the number of buffers in the circular buffer that asynchronously writes the PV values. + * @return the number of buffers in the circular buffer that asynchronously writes the PV values. + */ + uint32 GetNumberOfBuffers() const; + + /** + * @brief Provides the context to execute all the EPICS ca_put calls. + * @details Executes in the context of the MemoryMapAsyncOutputBroker thread the following EPICS calls: + * ca_context_create, ca_create_channel, ca_create_subscription, ca_clear_subscription, + * ca_clear_event, ca_clear_channel, ca_detach_context and ca_context_destroy + * @return true if all the EPICS calls return without any error. + */ + virtual bool Synchronise(); + + /** + * @brief Gets if buffer overruns is being ignored (i.e. the consumer thread which writes into EPICS is not consuming the data fast enough). + * @return if true no error is to be triggered when there is a buffer overrun. + */ + bool IsIgnoringBufferOverrun() const; + + +private: + /** + * List of PVs. + */ + PVWrapper *pvs; + + /** + * The CPU mask for the executor + */ + uint32 cpuMask; + + /** + * The stack size + */ + uint32 stackSize; + + /** + * Stores the configuration information received at Initialise. + */ + ConfigurationDatabase originalSignalInformation; + + /** + * The number of buffers for the circular buffer that flushes data into EPICS + */ + uint32 numberOfBuffers; + + /** + * True once the epics thread context is set + */ + bool threadContextSet; + + /** + * If true no error will be triggered when the data cannot be consumed by the thread doing the caputs. + */ + uint32 ignoreBufferOverrun; +}; +} + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* EPICSCADATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF/.svn/pristine/fc/fc72bf70c2b1641f01f53d70c4434251ac91c48c.svn-base b/EC-GN-JA-PCF/.svn/pristine/fc/fc72bf70c2b1641f01f53d70c4434251ac91c48c.svn-base new file mode 100644 index 0000000..5ed5d9a --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/fc/fc72bf70c2b1641f01f53d70c4434251ac91c48c.svn-base @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAPreProgrammedGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAPreProgrammedGAM$(LIBEXT) \ + $(BUILD_DIR)/JAPreProgrammedGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/.svn/pristine/fd/fd0b92393cb9493bab3cfc5acbd87baf25b6b0b3.svn-base b/EC-GN-JA-PCF/.svn/pristine/fd/fd0b92393cb9493bab3cfc5acbd87baf25b6b0b3.svn-base new file mode 100644 index 0000000..5dc56ee --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/fd/fd0b92393cb9493bab3cfc5acbd87baf25b6b0b3.svn-base @@ -0,0 +1,10 @@ +############################################################################ +## CODAC specific environment variables +############################################################################ + +epicsEnvSet("AUTOSAVE_SYSM_PV_PREFIX","EC-GN-SYSM:PCF0CORE-") +epicsEnvSet("IOCSH_PS1","${IOC}> ") +epicsEnvSet("STREAM_PROTOCOL_PATH","$(TOP)/db:$(EPICS_ROOT)/db") + + +#- End-of-file marker - do not delete or add lines below! \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/fd/fd457b8be97664469d62dd37b2c7128e729ca9d7.svn-base b/EC-GN-JA-PCF/.svn/pristine/fd/fd457b8be97664469d62dd37b2c7128e729ca9d7.svn-base new file mode 100644 index 0000000..7e7b51c --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/fd/fd457b8be97664469d62dd37b2c7128e729ca9d7.svn-base @@ -0,0 +1,14 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.DataUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ScriptUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ConsoleUtil); + +var table = widget.getTable(); +var fct_name=display.getPropertyValue("name"); +var selectionChanged = new Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener() { + selectionChanged: function(selection) { + var macroInput = DataUtil.createMacrosInput(true) + ScriptUtil.openOPI(display.getWidget("SystemDetailsTable"), "/opt/codac/opi/epics-sysmon/boy/ITER-SYSM-IOC_Mimic.opi", 1, macroInput); + } +}; +table.addSelectionChangedListener(selectionChanged); diff --git a/EC-GN-JA-PCF/.svn/pristine/fd/fde3b008976e0fee8c8b75ff0d3124af4cd3aafa.svn-base b/EC-GN-JA-PCF/.svn/pristine/fd/fde3b008976e0fee8c8b75ff0d3124af4cd3aafa.svn-base new file mode 100644 index 0000000..5ea32f6 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/fd/fde3b008976e0fee8c8b75ff0d3124af4cd3aafa.svn-base @@ -0,0 +1,23557 @@ + + + + + +52 + + + +EC-GN + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +10.136.136.101 + + +52RF01-PSH-4410 + + + + +52RF01-PCF-4210.codac.iter.org + + +52RF01-PCF-4210.codac.iter.org-R1 + + +52RF01-PCF-4210.codac.iter.org-R1 + + + + + +10.136.136.13-T1 + + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-ACQ + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-CONF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-MODE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-ACQ + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-CONF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-MODE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AISTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AOSTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-LDAICF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-LDAOCF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AISTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AOSTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-LDAICF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-LDAOCF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BLKTMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-FTEAALL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-RESET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-TAIUTC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-DMSG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-NS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-DMSG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-NS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AIPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AISMPL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AISR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AITB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AOPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AOTB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-CHAIMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-CHAOMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AIPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AISMPL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AISR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AITB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AOPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AOTB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-CHAIMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-CHAOMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-FILTINT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-POWERP3 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-POWERP4 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-POWERP5 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIINPROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIOUTROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIPCHANGE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIPWDG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIWDGTRIG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-WDGTOUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-FILTINT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-POWERP3 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-POWERP4 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-POWERP5 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIINPROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIOUTROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIPCHANGE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIPWDG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIWDGTRIG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-WDGTOUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BDTM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BDTMN + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BDTMS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BLKTM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-DEVNAME + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-DRIVER + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-FTEMAX + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-FTENUM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-HBDTM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-LVL_ERRS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-SERIAL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-SYNC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-SYNCLOST + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:DIO4900-YON + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-AI-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-AO-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-LOAD + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-LOADED + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DI-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DO-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN-EGU + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-MST-TRIG + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-PREP-MODE + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHORT-PULSE + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-TRIG-SOUR + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2810-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2810-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2820-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2820-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2830-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2830-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MRF2910-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MRF2910-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-BEAMON-TIME + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-ERR + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-NAME + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN-CALC + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN-DAM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-ELAPSED + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-PREHEAT-TIME + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-PREP-TIME-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-FLNK1 + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-FLNK2 + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-ID + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-PLOT + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SM + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-OUTON-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-OUTON-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-RST + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-STAT + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-TR + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-MANM + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-CURR-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-CURR-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-DCV-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-DCV-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-EREF + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-EREF-MSP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-ERROR + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-IDN + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCI + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCV + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-AMP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-FREQ + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-OFFS + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-OP-CALC + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-OP-V-DIFF + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-LOC + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-OUTON-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-REM + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-RST + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-MANM + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-ACV-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-ACV-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-RU-TIME + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-STAT + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-CURR-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-CURR-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-EREF + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-EREF-MSP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-ERROR + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-FRQ-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-FRQ-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-IDN + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACI + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-FRQ + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-AUTO-MODE-SET + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-PREP-WF + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CALC + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-MANM + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MI + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MO + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ERR + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-SWP-LIM + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-SWP-RB + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-RB + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-SWPR-SET + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-VOLT-MON + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-MANM + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MI + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MO + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ERR + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-SWP-LIM + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-SWP-RB + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-RB + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-SWPR-SET + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-VOLT-MON + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-RAMPDWN-CMP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV1 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV2 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV3 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV5 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV6 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV7 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV8 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YFLT-OC + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YFLT-OV + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YSTA-GAOP + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YTRP + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YTRP2 + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:DIO4900-YON + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-AI-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-AO-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-LOAD + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-LOADED + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DI-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DO-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN-EGU + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-MST-TRIG + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-PREP-MODE + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHORT-PULSE + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-TRIG-SOUR + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2810-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2810-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2820-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2820-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2830-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2830-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MRF2910-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MRF2910-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-BEAMON-TIME + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-ERR + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +string +configuration + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-NAME + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN-CALC + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN-DAM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-ELAPSED + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-PREHEAT-TIME + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-PREP-TIME-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-FLNK1 + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-FLNK2 + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-ID + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-PLOT + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SM + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-OUTON-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-OUTON-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-RST + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-STAT + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-TR + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-MANM + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-CURR-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-CURR-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-DCV-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-DCV-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-EREF + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-EREF-MSP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-ERROR + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-IDN + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCI + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCV + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-AMP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-FREQ + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-OFFS + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-OP-CALC + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-OP-V-DIFF + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-LOC + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-OUTON-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-REM + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-RST + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-MANM + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-ACV-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-ACV-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-RU-TIME + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-STAT + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-CURR-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-CURR-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-EREF + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-EREF-MSP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-ERROR + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-FRQ-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-FRQ-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-IDN + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACI + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-FRQ + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-AUTO-MODE-SET + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-PREP-WF + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CALC + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-MANM + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MI + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MO + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ERR + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-SWP-LIM + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-SWP-RB + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-RB + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-SWPR-SET + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-VOLT-MON + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-MANM + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MI + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MO + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ERR + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-SWP-LIM + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-SWP-RB + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-RB + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-SWPR-SET + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-VOLT-MON + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV1 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV2 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV3 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV5 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV6 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV7 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV8 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-YSTA-GBOP + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-YTRP + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-YTRP2 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-CTRP + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GA1 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GA2 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GA3 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GB1 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GB2 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GB3 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PSU0000-YSTA-MOD + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-CONF-STAT + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-RECONF + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SW-TRIG + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-RST-FLT + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-LEN + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-LEN-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-MODE + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-MODE-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-PUB-DLY + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-PUB-DLY-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-STAT + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD1-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD2-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD3-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD4-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-RDY-TOUT + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-GY1PRM + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-GY2PRM + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-OPGY1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-OPGY2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-RV1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-RV2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-RV3 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YON-CCPS1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YON-CCPS2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YSTA-MPSS + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTRP + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD3 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD4 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-ST1R + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-ST2R + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-ST3R + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-CON-HV + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-CON-SW + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-CTRP + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-YFLT + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-YSTA + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-MANM + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-EREF + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-EREF-MSP + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-EREF-P + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-ET + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-ET-WF + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-IT + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-IT-WF + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-DT-HVON + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-DT-SWON + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-EREF-CONV + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-PREP-WF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-CON-HV + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-CON-SW + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-CTRP + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-YFLT + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-YSTA + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-MANM + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-EREF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-EREF-MSP + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-EREF-P + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-ET + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-ET-WF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-IT + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-IT-WF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-DT-HVON + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-DT-SWON + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-EREF-CONV + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-PREP-WF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-CON-HV + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-CON-SW + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-CTRP + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-YFLT + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-YSTA + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-MANM + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-EREF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-EREF-MSP + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-ET + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-ET-WF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-IT + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-IT-WF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-DT-HVON + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-DT-SWON + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-PREP-WF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-CON-HV + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-CON-SW + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-CTRP + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-YFLT + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-YSTA + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-MANM + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-EREF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-EREF-MSP + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-ET + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-ET-WF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-IT + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-IT-WF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-DT-HVON + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-DT-SWON + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-PREP-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-COFF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-CON-MOD + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-CON-SW + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-TYSTA + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-YFLT + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-MANM + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-EREF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-EREF-MSP + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GA + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GA-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GB + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GB-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GA + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GA-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GB + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GB-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-DT-HVON + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-EREF-CALC + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-HVON-CALC + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-PREP-WF + + + + + + + + + + +iocEC-GN-PSH0PCF +PCFCORE IOC +epicsioc +IOC + + + +52RF01-PCF-4210 + +iocEC-GN-PCF0SYSM +PCFSYSM IOC +epicsioc +IOC + + + +52RF01-PSH-4410 + +iocEC-GN-PSH0SYSM +PSHSYSM IOC +epicsioc +IOC + + + +52RF01-PSH-4410 + +iocEC-GN-PSH0CUB +PSHCUB IOC +epicsioc +IOC + + + + + + diff --git a/EC-GN-JA-PCF/.svn/pristine/fe/fe8153aa8f3140970beef51d066617b03961950e.svn-base b/EC-GN-JA-PCF/.svn/pristine/fe/fe8153aa8f3140970beef51d066617b03961950e.svn-base new file mode 100644 index 0000000..ab5d5da --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/fe/fe8153aa8f3140970beef51d066617b03961950e.svn-base @@ -0,0 +1,14 @@ +############################################ +# I&C project-specific environment variables +############################################ + +# INFO - This file is part of the I&C project. It can be modified without risk of being overwritten. +# INFO - This file is sourced when invoking 'mvn run' to allow for setting development-specific environment variables. + +# INFO - This file can be further extended with anything specific required by the I&C project. + +#LOG_FILE_ENABLE=false +#LOG_FILTER_LEVEL=info +#LOG_FWD_MODE=asyn + +export DAN_ARCHIVE_MASTER=192.168.102.3:9999 \ No newline at end of file diff --git a/EC-GN-JA-PCF/.svn/pristine/fe/fe9c11d5f1c5a761427b0891a8982ea94aef42c5.svn-base b/EC-GN-JA-PCF/.svn/pristine/fe/fe9c11d5f1c5a761427b0891a8982ea94aef42c5.svn-base new file mode 100644 index 0000000..42b3063 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/fe/fe9c11d5f1c5a761427b0891a8982ea94aef42c5.svn-base @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JABitSumGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JABitSumGAM$(LIBEXT) \ + $(BUILD_DIR)/JABitSumGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/.svn/pristine/fe/fec88461f29a6a16b338343b2c69ddb664838b13.svn-base b/EC-GN-JA-PCF/.svn/pristine/fe/fec88461f29a6a16b338343b2c69ddb664838b13.svn-base new file mode 100644 index 0000000..6751924 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/fe/fec88461f29a6a16b338343b2c69ddb664838b13.svn-base @@ -0,0 +1,6002 @@ +t (100ms),EW6-Voset (kV),EW2-Voset (kV),EW3-VOset (kV),EW101-MC-Ioset (A),EW101-GC-Ioset (A),FPS101-Voset (V) +0,46,20,15,111.3,1.7,53.2 +1,46,20.5,14.5,111.3,1.7,62 +2,46,21,14,111.3,1.7,62 +3,46,21.5,13.5,111.3,1.7,62 +4,46,22,13,111.3,1.7,62 +5,46,22.5,12.5,111.3,1.7,62 +6,46,23,12,111.3,1.7,62 +7,46,23.5,11.5,111.3,1.7,62 +8,46,24,11,111.3,1.7,62 +9,46,24.5,10.5,111.3,1.7,62 +10,46,25,10,111.3,1.7,62 +11,46,25.5,9.5,111.3,1.7,62 +12,46,26,9,111.3,1.7,62 +13,46,26.5,8.5,111.3,1.7,62 +14,46,27,8,111.3,1.7,62 +15,46,27.5,7.5,111.3,1.7,62 +16,46,28,7,111.3,1.7,62 +17,46,28.5,6.5,111.3,1.7,62 +18,46,29,6,111.3,1.7,62 +19,46,29.5,5.5,111.3,1.7,62 +20,46,30,5,111.3,1.7,62 +21,46,30,4.5,111.3,1.7,62 +22,46,30,4,111.3,1.7,62 +23,46,30,4,111.3,1.7,62 +24,46,30,4,111.3,1.7,62 +25,46,30,4,111.3,1.7,62 +26,46,30,4,111.3,1.7,62 +27,46,30,4,111.3,1.7,62 +28,46,30,4,111.3,1.7,62 +29,46,30,4,111.3,1.7,62 +30,46,30,4,111.3,1.7,62 +31,46,30,3.4,111.3,1.7,62 +32,46,30,3.4,111.3,1.7,62 +33,46,30,3.4,111.3,1.7,62 +34,46,30,3.4,111.3,1.7,62 +35,46,30,3.4,111.3,1.7,62 +36,46,30,3.4,111.3,1.7,62 +37,46,30,3.4,111.3,1.7,62 +38,46,30,3.4,111.3,1.7,62 +39,46,30,3.4,111.3,1.7,62 +40,46,30,3.4,111.3,1.7,62 +41,46,30,3.4,111.3,1.7,62 +42,46,30,3.4,111.3,1.7,62 +43,46,30,3.4,111.3,1.7,62 +44,46,30,3.4,111.3,1.7,62 +45,46,30,3.4,111.3,1.7,62 +46,46,30,3.4,111.3,1.7,62 +47,46,30,3.4,111.3,1.7,62 +48,46,30,3.4,111.3,1.7,62 +49,46,30,3.4,111.3,1.7,62 +50,46,30,3.4,111.3,1.7,62 +51,46,30,3.4,111.3,1.7,62.1 +52,46,30,3.4,111.3,1.7,62.2 +53,46,30,3.4,111.3,1.7,62.3 +54,46,30,3.4,111.3,1.7,62.4 +55,46,30,3.4,111.3,1.7,62.5 +56,46,30,3.4,111.3,1.7,62.6 +57,46,30,3.4,111.3,1.7,62.7 +58,46,30,3.4,111.3,1.7,62.8 +59,46,30,3.4,111.3,1.7,62.9 +60,46,30,3.4,111.3,1.7,63 +61,46,30,3,111.3,1.7,63.1 +62,46,30,3,111.3,1.7,63.2 +63,46,30,3,111.3,1.7,63.3 +64,46,30,3,111.3,1.7,63.4 +65,46,30,3,111.3,1.7,63.5 +66,46,30,3,111.3,1.7,63.6 +67,46,30,3,111.3,1.7,63.7 +68,46,30,3,111.3,1.7,63.8 +69,46,30,3,111.3,1.7,63.9 +70,46,30,3,111.3,1.7,64 +71,46,30,3,111.3,1.7,64.1 +72,46,30,3,111.3,1.7,64.2 +73,46,30,3,111.3,1.7,64.3 +74,46,30,3,111.3,1.7,64.4 +75,46,30,3,111.3,1.7,64.5 +76,46,30,3,111.3,1.7,64.6 +77,46,30,3,111.3,1.7,64.7 +78,46,30,3,111.3,1.7,64.8 +79,46,30,3,111.3,1.7,64.9 +80,46,30,3,111.3,1.7,65 +81,46,30,3,111.3,1.7,65.1 +82,46,30,3,111.3,1.7,65.2 +83,46,30,3,111.3,1.7,65.3 +84,46,30,3,111.3,1.7,65.4 +85,46,30,3,111.3,1.7,65.5 +86,46,30,3,111.3,1.7,65.6 +87,46,30,3,111.3,1.7,65.7 +88,46,30,3,111.3,1.7,65.8 +89,46,30,3,111.3,1.7,65.9 +90,46,30,3,111.3,1.7,66 +91,46,30,3,111.3,1.7,66.1 +92,46,30,3,111.3,1.7,66.2 +93,46,30,3,111.3,1.7,66.3 +94,46,30,3,111.3,1.7,66.4 +95,46,30,3,111.3,1.7,66.5 +96,46,30,3,111.3,1.7,66.6 +97,46,30,3,111.3,1.7,66.7 +98,46,30,3,111.3,1.7,66.8 +99,46,30,3,111.3,1.7,66.9 +100,46,30,3,111.3,1.7,67 +101,46,30,3,111.3,1.7,67 +102,46,30,3,111.3,1.7,67 +103,46,30,3,111.3,1.7,67 +104,46,30,3,111.3,1.7,67 +105,46,30,3,111.3,1.7,67 +106,46,30,3,111.3,1.7,67 +107,46,30,3,111.3,1.7,67 +108,46,30,3,111.3,1.7,67 +109,46,30,3,111.3,1.7,67 +110,46,30,3,111.3,1.7,67 +111,46,30,3,111.3,1.7,67 +112,46,30,3,111.3,1.7,67 +113,46,30,3,111.3,1.7,67 +114,46,30,3,111.3,1.7,67 +115,46,30,3,111.3,1.7,67 +116,46,30,3,111.3,1.7,67 +117,46,30,3,111.3,1.7,67 +118,46,30,3,111.3,1.7,67 +119,46,30,3,111.3,1.7,67 +120,46,30,3,111.3,1.7,67 +121,46,30,3,111.3,1.7,67 +122,46,30,3,111.3,1.7,67 +123,46,30,3,111.3,1.7,67 +124,46,30,3,111.3,1.7,67 +125,46,30,3,111.3,1.7,67 +126,46,30,3,111.3,1.7,67 +127,46,30,3,111.3,1.7,67 +128,46,30,3,111.3,1.7,67 +129,46,30,3,111.3,1.7,67 +130,46,30,3,111.3,1.7,67 +131,46,30,3,111.3,1.7,67 +132,46,30,3,111.3,1.7,67 +133,46,30,3,111.3,1.7,67 +134,46,30,3,111.3,1.7,67 +135,46,30,3,111.3,1.7,67 +136,46,30,3,111.3,1.7,67 +137,46,30,3,111.3,1.7,67 +138,46,30,3,111.3,1.7,67 +139,46,30,3,111.3,1.7,67 +140,46,30,3,111.3,1.7,67 +141,46,30,3,111.3,1.7,67 +142,46,30,3,111.3,1.7,67 +143,46,30,3,111.3,1.7,67 +144,46,30,3,111.3,1.7,67 +145,46,30,3,111.3,1.7,67 +146,46,30,3,111.3,1.7,67 +147,46,30,3,111.3,1.7,67 +148,46,30,3,111.3,1.7,67 +149,46,30,3,111.3,1.7,67 +150,46,30,3,111.3,1.7,67 +151,46,30,3,111.3,1.7,67 +152,46,30,3,111.3,1.7,67 +153,46,30,3,111.3,1.7,67 +154,46,30,3,111.3,1.7,67 +155,46,30,3,111.3,1.7,67 +156,46,30,3,111.3,1.7,67 +157,46,30,3,111.3,1.7,67 +158,46,30,3,111.3,1.7,67 +159,46,30,3,111.3,1.7,67 +160,46,30,3,111.3,1.7,67 +161,46,30,3,111.3,1.7,67 +162,46,30,3,111.3,1.7,67 +163,46,30,3,111.3,1.7,67 +164,46,30,3,111.3,1.7,67 +165,46,30,3,111.3,1.7,67 +166,46,30,3,111.3,1.7,67 +167,46,30,3,111.3,1.7,67 +168,46,30,3,111.3,1.7,67 +169,46,30,3,111.3,1.7,67 +170,46,30,3,111.3,1.7,67 +171,46,30,3,111.3,1.7,67 +172,46,30,3,111.3,1.7,67 +173,46,30,3,111.3,1.7,67 +174,46,30,3,111.3,1.7,67 +175,46,30,3,111.3,1.7,67 +176,46,30,3,111.3,1.7,67 +177,46,30,3,111.3,1.7,67 +178,46,30,3,111.3,1.7,67 +179,46,30,3,111.3,1.7,67 +180,46,30,3,111.3,1.7,67 +181,46,30,3,111.3,1.7,67 +182,46,30,3,111.3,1.7,67 +183,46,30,3,111.3,1.7,67 +184,46,30,3,111.3,1.7,67 +185,46,30,3,111.3,1.7,67 +186,46,30,3,111.3,1.7,67 +187,46,30,3,111.3,1.7,67 +188,46,30,3,111.3,1.7,67 +189,46,30,3,111.3,1.7,67 +190,46,30,3,111.3,1.7,67 +191,46,30,3,111.3,1.7,67 +192,46,30,3,111.3,1.7,67 +193,46,30,3,111.3,1.7,67 +194,46,30,3,111.3,1.7,67 +195,46,30,3,111.3,1.7,67 +196,46,30,3,111.3,1.7,67 +197,46,30,3,111.3,1.7,67 +198,46,30,3,111.3,1.7,67 +199,46,30,3,111.3,1.7,67 +200,46,30,2.9,111.3,1.7,67 +201,46,30,2.9,111.05,1.7,67 +202,46,30,2.9,111.05,1.7,67 +203,46,30,2.9,111.05,1.7,67 +204,46,30,2.9,111.05,1.7,67 +205,46,30,2.9,111.05,1.7,67 +206,46,30,2.9,111.05,1.7,67 +207,46,30,2.9,111.05,1.7,67 +208,46,30,2.9,111.05,1.7,67 +209,46,30,2.9,111.05,1.7,67 +210,46,30,2.9,111.05,1.7,67 +211,46,30,2.9,111.05,1.7,67 +212,46,30,2.9,111.05,1.7,67 +213,46,30,2.9,111.05,1.7,67 +214,46,30,2.9,111.05,1.7,67 +215,46,30,2.9,111.05,1.7,67 +216,46,30,2.9,111.05,1.7,67 +217,46,30,2.9,111.05,1.7,67 +218,46,30,2.9,111.05,1.7,67 +219,46,30,2.9,111.05,1.7,67 +220,46,30,2.9,111.05,1.7,67 +221,46,30,2.9,111.05,1.7,67 +222,46,30,2.9,111.05,1.7,67 +223,46,30,2.9,111.05,1.7,67 +224,46,30,2.9,111.05,1.7,67 +225,46,30,2.9,111.05,1.7,67 +226,46,30,2.9,111.05,1.7,67 +227,46,30,2.9,111.05,1.7,67 +228,46,30,2.9,111.05,1.7,67 +229,46,30,2.9,111.05,1.7,67 +230,46,30,2.9,111.05,1.7,67 +231,46,30,2.9,111.05,1.7,67 +232,46,30,2.9,111.05,1.7,67 +233,46,30,2.9,111.05,1.7,67 +234,46,30,2.9,111.05,1.7,67 +235,46,30,2.9,111.05,1.7,67 +236,46,30,2.9,111.05,1.7,67 +237,46,30,2.9,111.05,1.7,67 +238,46,30,2.9,111.05,1.7,67 +239,46,30,2.9,111.05,1.7,67 +240,46,30,2.9,111.05,1.7,67 +241,46,30,2.9,111.05,1.7,67 +242,46,30,2.9,111.05,1.7,67 +243,46,30,2.9,111.05,1.7,67 +244,46,30,2.9,111.05,1.7,67 +245,46,30,2.9,111.05,1.7,67 +246,46,30,2.9,111.05,1.7,67 +247,46,30,2.9,111.05,1.7,67 +248,46,30,2.9,111.05,1.7,67 +249,46,30,2.9,111.05,1.7,67 +250,46,30,2.8,111.05,1.7,67 +251,46,30,2.8,111.05,1.7,67 +252,46,30,2.8,111.05,1.7,67 +253,46,30,2.8,111.05,1.7,67 +254,46,30,2.8,111.05,1.7,67 +255,46,30,2.8,111.05,1.7,67 +256,46,30,2.8,111.05,1.7,67 +257,46,30,2.8,111.05,1.7,67 +258,46,30,2.8,111.05,1.7,67 +259,46,30,2.8,111.05,1.7,67 +260,46,30,2.8,111.05,1.7,67 +261,46,30,2.8,111.05,1.7,67 +262,46,30,2.8,111.05,1.7,67 +263,46,30,2.8,111.05,1.7,67 +264,46,30,2.8,111.05,1.7,67 +265,46,30,2.8,111.05,1.7,67 +266,46,30,2.8,111.05,1.7,67 +267,46,30,2.8,111.05,1.7,67 +268,46,30,2.8,111.05,1.7,67 +269,46,30,2.8,111.05,1.7,67 +270,46,30,2.8,111.05,1.7,67 +271,46,30,2.8,111.05,1.7,67 +272,46,30,2.8,111.05,1.7,67 +273,46,30,2.8,111.05,1.7,67 +274,46,30,2.8,111.05,1.7,67 +275,46,30,2.8,111.05,1.7,67 +276,46,30,2.8,111.05,1.7,67 +277,46,30,2.8,111.05,1.7,67 +278,46,30,2.8,111.05,1.7,67 +279,46,30,2.8,111.05,1.7,67 +280,46,30,2.8,111.05,1.7,67 +281,46,30,2.8,111.05,1.7,67 +282,46,30,2.8,111.05,1.7,67 +283,46,30,2.8,111.05,1.7,67 +284,46,30,2.8,111.05,1.7,67 +285,46,30,2.8,111.05,1.7,67 +286,46,30,2.8,111.05,1.7,67 +287,46,30,2.8,111.05,1.7,67 +288,46,30,2.8,111.05,1.7,67 +289,46,30,2.8,111.05,1.7,67 +290,46,30,2.8,111.05,1.7,67 +291,46,30,2.8,111.05,1.7,67 +292,46,30,2.8,111.05,1.7,67 +293,46,30,2.8,111.05,1.7,67 +294,46,30,2.8,111.05,1.7,67 +295,46,30,2.8,111.05,1.7,67 +296,46,30,2.8,111.05,1.7,67 +297,46,30,2.8,111.05,1.7,67 +298,46,30,2.8,111.05,1.7,67 +299,46,30,2.8,111.05,1.7,67 +300,46,30,2.7,111.05,1.7,67 +301,46,30,2.7,111.05,1.7,67 +302,46,30,2.7,111.05,1.7,67 +303,46,30,2.7,111.05,1.7,67 +304,46,30,2.7,111.05,1.7,67 +305,46,30,2.7,111.05,1.7,67 +306,46,30,2.7,111.05,1.7,67 +307,46,30,2.7,111.05,1.7,67 +308,46,30,2.7,111.05,1.7,67 +309,46,30,2.7,111.05,1.7,67 +310,46,30,2.7,111.05,1.7,67 +311,46,30,2.7,111.05,1.7,67 +312,46,30,2.7,111.05,1.7,67 +313,46,30,2.7,111.05,1.7,67 +314,46,30,2.7,111.05,1.7,67 +315,46,30,2.7,111.05,1.7,67 +316,46,30,2.7,111.05,1.7,67 +317,46,30,2.7,111.05,1.7,67 +318,46,30,2.7,111.05,1.7,67 +319,46,30,2.7,111.05,1.7,67 +320,46,30,2.7,111.05,1.7,67 +321,46,30,2.7,111.05,1.7,67 +322,46,30,2.7,111.05,1.7,67 +323,46,30,2.7,111.05,1.7,67 +324,46,30,2.7,111.05,1.7,67 +325,46,30,2.7,111.05,1.7,67 +326,46,30,2.7,111.05,1.7,67 +327,46,30,2.7,111.05,1.7,67 +328,46,30,2.7,111.05,1.7,67 +329,46,30,2.7,111.05,1.7,67 +330,46,30,2.7,111.05,1.7,67 +331,46,30,2.7,111.05,1.7,67 +332,46,30,2.7,111.05,1.7,67 +333,46,30,2.7,111.05,1.7,67 +334,46,30,2.7,111.05,1.7,67 +335,46,30,2.7,111.05,1.7,67 +336,46,30,2.7,111.05,1.7,67 +337,46,30,2.7,111.05,1.7,67 +338,46,30,2.7,111.05,1.7,67 +339,46,30,2.7,111.05,1.7,67 +340,46,30,2.7,111.05,1.7,67 +341,46,30,2.7,111.05,1.7,67 +342,46,30,2.7,111.05,1.7,67 +343,46,30,2.7,111.05,1.7,67 +344,46,30,2.7,111.05,1.7,67 +345,46,30,2.7,111.05,1.7,67 +346,46,30,2.7,111.05,1.7,67 +347,46,30,2.7,111.05,1.7,67 +348,46,30,2.7,111.05,1.7,67 +349,46,30,2.7,111.05,1.7,67 +350,46,30,2.7,111.05,1.7,67 +351,46,30,2.7,111.05,1.7,67 +352,46,30,2.7,111.05,1.7,67 +353,46,30,2.7,111.05,1.7,67 +354,46,30,2.7,111.05,1.7,67 +355,46,30,2.7,111.05,1.7,67 +356,46,30,2.7,111.05,1.7,67 +357,46,30,2.7,111.05,1.7,67 +358,46,30,2.7,111.05,1.7,67 +359,46,30,2.7,111.05,1.7,67 +360,46,30,2.7,111.05,1.7,67 +361,46,30,2.7,111.05,1.7,67 +362,46,30,2.7,111.05,1.7,67 +363,46,30,2.7,111.05,1.7,67 +364,46,30,2.7,111.05,1.7,67 +365,46,30,2.7,111.05,1.7,67 +366,46,30,2.7,111.05,1.7,67 +367,46,30,2.7,111.05,1.7,67 +368,46,30,2.7,111.05,1.7,67 +369,46,30,2.7,111.05,1.7,67 +370,46,30,2.7,111.05,1.7,67 +371,46,30,2.7,111.05,1.7,67 +372,46,30,2.7,111.05,1.7,67 +373,46,30,2.7,111.05,1.7,67 +374,46,30,2.7,111.05,1.7,67 +375,46,30,2.7,111.05,1.7,67 +376,46,30,2.7,111.05,1.7,67 +377,46,30,2.7,111.05,1.7,67 +378,46,30,2.7,111.05,1.7,67 +379,46,30,2.7,111.05,1.7,67 +380,46,30,2.7,111.05,1.7,67 +381,46,30,2.7,111.05,1.7,67 +382,46,30,2.7,111.05,1.7,67 +383,46,30,2.7,111.05,1.7,67 +384,46,30,2.7,111.05,1.7,67 +385,46,30,2.7,111.05,1.7,67 +386,46,30,2.7,111.05,1.7,67 +387,46,30,2.7,111.05,1.7,67 +388,46,30,2.7,111.05,1.7,67 +389,46,30,2.7,111.05,1.7,67 +390,46,30,2.7,111.05,1.7,67 +391,46,30,2.7,111.05,1.7,67 +392,46,30,2.7,111.05,1.7,67 +393,46,30,2.7,111.05,1.7,67 +394,46,30,2.7,111.05,1.7,67 +395,46,30,2.7,111.05,1.7,67 +396,46,30,2.7,111.05,1.7,67 +397,46,30,2.7,111.05,1.7,67 +398,46,30,2.7,111.05,1.7,67 +399,46,30,2.7,111.05,1.7,67 +400,46,30,2.7,111.05,1.7,67 +401,46,30,2.7,111.05,1.7,66.9975 +402,46,30,2.7,111.05,1.7,66.995 +403,46,30,2.7,111.05,1.7,66.9925 +404,46,30,2.7,111.05,1.7,66.99 +405,46,30,2.7,111.05,1.7,66.9875 +406,46,30,2.7,111.05,1.7,66.985 +407,46,30,2.7,111.05,1.7,66.9825 +408,46,30,2.7,111.05,1.7,66.98 +409,46,30,2.7,111.05,1.7,66.9775 +410,46,30,2.7,111.05,1.7,66.975 +411,46,30,2.7,111.05,1.7,66.9725 +412,46,30,2.7,111.05,1.7,66.97 +413,46,30,2.7,111.05,1.7,66.9675 +414,46,30,2.7,111.05,1.7,66.965 +415,46,30,2.7,111.05,1.7,66.9625 +416,46,30,2.7,111.05,1.7,66.96 +417,46,30,2.7,111.05,1.7,66.9575 +418,46,30,2.7,111.05,1.7,66.955 +419,46,30,2.7,111.05,1.7,66.9525 +420,46,30,2.7,111.05,1.7,66.95 +421,46,30,2.7,111.05,1.7,66.9475 +422,46,30,2.7,111.05,1.7,66.945 +423,46,30,2.7,111.05,1.7,66.9425 +424,46,30,2.7,111.05,1.7,66.94 +425,46,30,2.7,111.05,1.7,66.9375 +426,46,30,2.7,111.05,1.7,66.935 +427,46,30,2.7,111.05,1.7,66.9325 +428,46,30,2.7,111.05,1.7,66.93 +429,46,30,2.7,111.05,1.7,66.9275 +430,46,30,2.7,111.05,1.7,66.925 +431,46,30,2.7,111.05,1.7,66.9225 +432,46,30,2.7,111.05,1.7,66.92 +433,46,30,2.7,111.05,1.7,66.9175 +434,46,30,2.7,111.05,1.7,66.915 +435,46,30,2.7,111.05,1.7,66.9125 +436,46,30,2.7,111.05,1.7,66.91 +437,46,30,2.7,111.05,1.7,66.9075 +438,46,30,2.7,111.05,1.7,66.905 +439,46,30,2.7,111.05,1.7,66.9025 +440,46,30,2.7,111.05,1.7,66.9 +441,46,30,2.7,111.05,1.7,66.8975 +442,46,30,2.7,111.05,1.7,66.895 +443,46,30,2.7,111.05,1.7,66.8925 +444,46,30,2.7,111.05,1.7,66.89 +445,46,30,2.7,111.05,1.7,66.8875 +446,46,30,2.7,111.05,1.7,66.885 +447,46,30,2.7,111.05,1.7,66.8825 +448,46,30,2.7,111.05,1.7,66.88 +449,46,30,2.7,111.05,1.7,66.8775 +450,46,30,2.7,111.05,1.7,66.875 +451,46,30,2.7,111.05,1.7,66.8725 +452,46,30,2.7,111.05,1.7,66.87 +453,46,30,2.7,111.05,1.7,66.8675 +454,46,30,2.7,111.05,1.7,66.865 +455,46,30,2.7,111.05,1.7,66.8625 +456,46,30,2.7,111.05,1.7,66.86 +457,46,30,2.7,111.05,1.7,66.8575 +458,46,30,2.7,111.05,1.7,66.855 +459,46,30,2.7,111.05,1.7,66.8525 +460,46,30,2.7,111.05,1.7,66.85 +461,46,30,2.7,111.05,1.7,66.8475 +462,46,30,2.7,111.05,1.7,66.845 +463,46,30,2.7,111.05,1.7,66.8425 +464,46,30,2.7,111.05,1.7,66.84 +465,46,30,2.7,111.05,1.7,66.8375 +466,46,30,2.7,111.05,1.7,66.835 +467,46,30,2.7,111.05,1.7,66.8325 +468,46,30,2.7,111.05,1.7,66.83 +469,46,30,2.7,111.05,1.7,66.8275 +470,46,30,2.7,111.05,1.7,66.825 +471,46,30,2.7,111.05,1.7,66.8225 +472,46,30,2.7,111.05,1.7,66.82 +473,46,30,2.7,111.05,1.7,66.8175 +474,46,30,2.7,111.05,1.7,66.815 +475,46,30,2.7,111.05,1.7,66.8125 +476,46,30,2.7,111.05,1.7,66.81 +477,46,30,2.7,111.05,1.7,66.8075 +478,46,30,2.7,111.05,1.7,66.805 +479,46,30,2.7,111.05,1.7,66.8025 +480,46,30,2.7,111.05,1.7,66.8 +481,46,30,2.7,111.05,1.7,66.7975 +482,46,30,2.7,111.05,1.7,66.795 +483,46,30,2.7,111.05,1.7,66.7925 +484,46,30,2.7,111.05,1.7,66.79 +485,46,30,2.7,111.05,1.7,66.7875 +486,46,30,2.7,111.05,1.7,66.785 +487,46,30,2.7,111.05,1.7,66.7825 +488,46,30,2.7,111.05,1.7,66.78 +489,46,30,2.7,111.05,1.7,66.7775 +490,46,30,2.7,111.05,1.7,66.775 +491,46,30,2.7,111.05,1.7,66.7725 +492,46,30,2.7,111.05,1.7,66.77 +493,46,30,2.7,111.05,1.7,66.7675 +494,46,30,2.7,111.05,1.7,66.765 +495,46,30,2.7,111.05,1.7,66.7625 +496,46,30,2.7,111.05,1.7,66.76 +497,46,30,2.7,111.05,1.7,66.7575 +498,46,30,2.7,111.05,1.7,66.755 +499,46,30,2.7,111.05,1.7,66.7525 +500,46,30,2.7,111.05,1.7,66.75 +501,46,30,2.7,111.05,1.7,66.7475 +502,46,30,2.7,111.05,1.7,66.745 +503,46,30,2.7,111.05,1.7,66.7425 +504,46,30,2.7,111.05,1.7,66.74 +505,46,30,2.7,111.05,1.7,66.7375 +506,46,30,2.7,111.05,1.7,66.735 +507,46,30,2.7,111.05,1.7,66.7325 +508,46,30,2.7,111.05,1.7,66.73 +509,46,30,2.7,111.05,1.7,66.7275 +510,46,30,2.7,111.05,1.7,66.725 +511,46,30,2.7,111.05,1.7,66.7225 +512,46,30,2.7,111.05,1.7,66.72 +513,46,30,2.7,111.05,1.7,66.7175 +514,46,30,2.7,111.05,1.7,66.715 +515,46,30,2.7,111.05,1.7,66.7125 +516,46,30,2.7,111.05,1.7,66.71 +517,46,30,2.7,111.05,1.7,66.7075 +518,46,30,2.7,111.05,1.7,66.705 +519,46,30,2.7,111.05,1.7,66.7025 +520,46,30,2.7,111.05,1.7,66.7 +521,46,30,2.7,111.05,1.7,66.6975 +522,46,30,2.7,111.05,1.7,66.695 +523,46,30,2.7,111.05,1.7,66.6925 +524,46,30,2.7,111.05,1.7,66.69 +525,46,30,2.7,111.05,1.7,66.6875 +526,46,30,2.7,111.05,1.7,66.685 +527,46,30,2.7,111.05,1.7,66.6825 +528,46,30,2.7,111.05,1.7,66.68 +529,46,30,2.7,111.05,1.7,66.6775 +530,46,30,2.7,111.05,1.7,66.675 +531,46,30,2.7,111.05,1.7,66.6725 +532,46,30,2.7,111.05,1.7,66.67 +533,46,30,2.7,111.05,1.7,66.6675 +534,46,30,2.7,111.05,1.7,66.665 +535,46,30,2.7,111.05,1.7,66.6625 +536,46,30,2.7,111.05,1.7,66.66 +537,46,30,2.7,111.05,1.7,66.6575 +538,46,30,2.7,111.05,1.7,66.655 +539,46,30,2.7,111.05,1.7,66.6525 +540,46,30,2.7,111.05,1.7,66.65 +541,46,30,2.7,111.05,1.7,66.6475 +542,46,30,2.7,111.05,1.7,66.645 +543,46,30,2.7,111.05,1.7,66.6425 +544,46,30,2.7,111.05,1.7,66.64 +545,46,30,2.7,111.05,1.7,66.6375 +546,46,30,2.7,111.05,1.7,66.635 +547,46,30,2.7,111.05,1.7,66.6325 +548,46,30,2.7,111.05,1.7,66.63 +549,46,30,2.7,111.05,1.7,66.6275 +550,46,30,2.7,111.05,1.7,66.625 +551,46,30,2.7,111.05,1.7,66.6225 +552,46,30,2.7,111.05,1.7,66.62 +553,46,30,2.7,111.05,1.7,66.6175 +554,46,30,2.7,111.05,1.7,66.615 +555,46,30,2.7,111.05,1.7,66.6125 +556,46,30,2.7,111.05,1.7,66.61 +557,46,30,2.7,111.05,1.7,66.6075 +558,46,30,2.7,111.05,1.7,66.605 +559,46,30,2.7,111.05,1.7,66.6025 +560,46,30,2.7,111.05,1.7,66.6 +561,46,30,2.7,111.05,1.7,66.5975 +562,46,30,2.7,111.05,1.7,66.595 +563,46,30,2.7,111.05,1.7,66.5925 +564,46,30,2.7,111.05,1.7,66.59 +565,46,30,2.7,111.05,1.7,66.5875 +566,46,30,2.7,111.05,1.7,66.585 +567,46,30,2.7,111.05,1.7,66.5825 +568,46,30,2.7,111.05,1.7,66.58 +569,46,30,2.7,111.05,1.7,66.5775 +570,46,30,2.7,111.05,1.7,66.575 +571,46,30,2.7,111.05,1.7,66.5725 +572,46,30,2.7,111.05,1.7,66.57 +573,46,30,2.7,111.05,1.7,66.5675 +574,46,30,2.7,111.05,1.7,66.565 +575,46,30,2.7,111.05,1.7,66.5625 +576,46,30,2.7,111.05,1.7,66.56 +577,46,30,2.7,111.05,1.7,66.5575 +578,46,30,2.7,111.05,1.7,66.555 +579,46,30,2.7,111.05,1.7,66.5525 +580,46,30,2.7,111.05,1.7,66.55 +581,46,30,2.7,111.05,1.7,66.5475 +582,46,30,2.7,111.05,1.7,66.545 +583,46,30,2.7,111.05,1.7,66.5425 +584,46,30,2.7,111.05,1.7,66.54 +585,46,30,2.7,111.05,1.7,66.5375 +586,46,30,2.7,111.05,1.7,66.535 +587,46,30,2.7,111.05,1.7,66.5325 +588,46,30,2.7,111.05,1.7,66.53 +589,46,30,2.7,111.05,1.7,66.5275 +590,46,30,2.7,111.05,1.7,66.525 +591,46,30,2.7,111.05,1.7,66.5225 +592,46,30,2.7,111.05,1.7,66.52 +593,46,30,2.7,111.05,1.7,66.5175 +594,46,30,2.7,111.05,1.7,66.515 +595,46,30,2.7,111.05,1.7,66.5125 +596,46,30,2.7,111.05,1.7,66.51 +597,46,30,2.7,111.05,1.7,66.5075 +598,46,30,2.7,111.05,1.7,66.505 +599,46,30,2.7,111.05,1.7,66.5025 +600,46,30,2.7,111.05,1.7,66.5 +601,46,30,2.7,111.05,1.7,66.495 +602,46,30,2.7,111.05,1.7,66.49 +603,46,30,2.7,111.05,1.7,66.485 +604,46,30,2.7,111.05,1.7,66.48 +605,46,30,2.7,111.05,1.7,66.475 +606,46,30,2.7,111.05,1.7,66.47 +607,46,30,2.7,111.05,1.7,66.465 +608,46,30,2.7,111.05,1.7,66.46 +609,46,30,2.7,111.05,1.7,66.455 +610,46,30,2.7,111.05,1.7,66.45 +611,46,30,2.7,111.05,1.7,66.445 +612,46,30,2.7,111.05,1.7,66.44 +613,46,30,2.7,111.05,1.7,66.435 +614,46,30,2.7,111.05,1.7,66.43 +615,46,30,2.7,111.05,1.7,66.425 +616,46,30,2.7,111.05,1.7,66.42 +617,46,30,2.7,111.05,1.7,66.415 +618,46,30,2.7,111.05,1.7,66.41 +619,46,30,2.7,111.05,1.7,66.405 +620,46,30,2.7,111.05,1.7,66.4 +621,46,30,2.7,111.05,1.7,66.395 +622,46,30,2.7,111.05,1.7,66.39 +623,46,30,2.7,111.05,1.7,66.385 +624,46,30,2.7,111.05,1.7,66.38 +625,46,30,2.7,111.05,1.7,66.375 +626,46,30,2.7,111.05,1.7,66.37 +627,46,30,2.7,111.05,1.7,66.365 +628,46,30,2.7,111.05,1.7,66.36 +629,46,30,2.7,111.05,1.7,66.355 +630,46,30,2.7,111.05,1.7,66.35 +631,46,30,2.7,111.05,1.7,66.345 +632,46,30,2.7,111.05,1.7,66.34 +633,46,30,2.7,111.05,1.7,66.335 +634,46,30,2.7,111.05,1.7,66.33 +635,46,30,2.7,111.05,1.7,66.325 +636,46,30,2.7,111.05,1.7,66.32 +637,46,30,2.7,111.05,1.7,66.315 +638,46,30,2.7,111.05,1.7,66.31 +639,46,30,2.7,111.05,1.7,66.305 +640,46,30,2.7,111.05,1.7,66.3 +641,46,30,2.7,111.05,1.7,66.295 +642,46,30,2.7,111.05,1.7,66.29 +643,46,30,2.7,111.05,1.7,66.285 +644,46,30,2.7,111.05,1.7,66.28 +645,46,30,2.7,111.05,1.7,66.275 +646,46,30,2.7,111.05,1.7,66.27 +647,46,30,2.7,111.05,1.7,66.265 +648,46,30,2.7,111.05,1.7,66.26 +649,46,30,2.7,111.05,1.7,66.255 +650,46,30,2.7,111.05,1.7,66.25 +651,46,30,2.7,111.05,1.7,66.245 +652,46,30,2.7,111.05,1.7,66.24 +653,46,30,2.7,111.05,1.7,66.235 +654,46,30,2.7,111.05,1.7,66.23 +655,46,30,2.7,111.05,1.7,66.225 +656,46,30,2.7,111.05,1.7,66.22 +657,46,30,2.7,111.05,1.7,66.215 +658,46,30,2.7,111.05,1.7,66.21 +659,46,30,2.7,111.05,1.7,66.205 +660,46,30,2.7,111.05,1.7,66.2 +661,46,30,2.7,111.05,1.7,66.195 +662,46,30,2.7,111.05,1.7,66.19 +663,46,30,2.7,111.05,1.7,66.185 +664,46,30,2.7,111.05,1.7,66.18 +665,46,30,2.7,111.05,1.7,66.175 +666,46,30,2.7,111.05,1.7,66.17 +667,46,30,2.7,111.05,1.7,66.165 +668,46,30,2.7,111.05,1.7,66.16 +669,46,30,2.7,111.05,1.7,66.155 +670,46,30,2.7,111.05,1.7,66.15 +671,46,30,2.7,111.05,1.7,66.145 +672,46,30,2.7,111.05,1.7,66.14 +673,46,30,2.7,111.05,1.7,66.135 +674,46,30,2.7,111.05,1.7,66.13 +675,46,30,2.7,111.05,1.7,66.125 +676,46,30,2.7,111.05,1.7,66.12 +677,46,30,2.7,111.05,1.7,66.115 +678,46,30,2.7,111.05,1.7,66.11 +679,46,30,2.7,111.05,1.7,66.105 +680,46,30,2.7,111.05,1.7,66.1 +681,46,30,2.7,111.05,1.7,66.095 +682,46,30,2.7,111.05,1.7,66.09 +683,46,30,2.7,111.05,1.7,66.085 +684,46,30,2.7,111.05,1.7,66.08 +685,46,30,2.7,111.05,1.7,66.075 +686,46,30,2.7,111.05,1.7,66.07 +687,46,30,2.7,111.05,1.7,66.065 +688,46,30,2.7,111.05,1.7,66.06 +689,46,30,2.7,111.05,1.7,66.055 +690,46,30,2.7,111.05,1.7,66.05 +691,46,30,2.7,111.05,1.7,66.045 +692,46,30,2.7,111.05,1.7,66.04 +693,46,30,2.7,111.05,1.7,66.035 +694,46,30,2.7,111.05,1.7,66.03 +695,46,30,2.7,111.05,1.7,66.025 +696,46,30,2.7,111.05,1.7,66.02 +697,46,30,2.7,111.05,1.7,66.015 +698,46,30,2.7,111.05,1.7,66.01 +699,46,30,2.7,111.05,1.7,66.005 +700,46,30,2.7,111.05,1.7,66 +701,46,30,2.7,111.05,1.7,65.995 +702,46,30,2.7,111.05,1.7,65.99 +703,46,30,2.7,111.05,1.7,65.985 +704,46,30,2.7,111.05,1.7,65.98 +705,46,30,2.7,111.05,1.7,65.975 +706,46,30,2.7,111.05,1.7,65.97 +707,46,30,2.7,111.05,1.7,65.965 +708,46,30,2.7,111.05,1.7,65.96 +709,46,30,2.7,111.05,1.7,65.955 +710,46,30,2.7,111.05,1.7,65.95 +711,46,30,2.7,111.05,1.7,65.945 +712,46,30,2.7,111.05,1.7,65.94 +713,46,30,2.7,111.05,1.7,65.935 +714,46,30,2.7,111.05,1.7,65.93 +715,46,30,2.7,111.05,1.7,65.925 +716,46,30,2.7,111.05,1.7,65.92 +717,46,30,2.7,111.05,1.7,65.915 +718,46,30,2.7,111.05,1.7,65.91 +719,46,30,2.7,111.05,1.7,65.905 +720,46,30,2.7,111.05,1.7,65.9 +721,46,30,2.7,111.05,1.7,65.895 +722,46,30,2.7,111.05,1.7,65.89 +723,46,30,2.7,111.05,1.7,65.885 +724,46,30,2.7,111.05,1.7,65.88 +725,46,30,2.7,111.05,1.7,65.875 +726,46,30,2.7,111.05,1.7,65.87 +727,46,30,2.7,111.05,1.7,65.865 +728,46,30,2.7,111.05,1.7,65.86 +729,46,30,2.7,111.05,1.7,65.855 +730,46,30,2.7,111.05,1.7,65.85 +731,46,30,2.7,111.05,1.7,65.845 +732,46,30,2.7,111.05,1.7,65.84 +733,46,30,2.7,111.05,1.7,65.835 +734,46,30,2.7,111.05,1.7,65.83 +735,46,30,2.7,111.05,1.7,65.825 +736,46,30,2.7,111.05,1.7,65.82 +737,46,30,2.7,111.05,1.7,65.815 +738,46,30,2.7,111.05,1.7,65.81 +739,46,30,2.7,111.05,1.7,65.805 +740,46,30,2.7,111.05,1.7,65.8 +741,46,30,2.7,111.05,1.7,65.795 +742,46,30,2.7,111.05,1.7,65.79 +743,46,30,2.7,111.05,1.7,65.785 +744,46,30,2.7,111.05,1.7,65.78 +745,46,30,2.7,111.05,1.7,65.775 +746,46,30,2.7,111.05,1.7,65.77 +747,46,30,2.7,111.05,1.7,65.765 +748,46,30,2.7,111.05,1.7,65.76 +749,46,30,2.7,111.05,1.7,65.755 +750,46,30,2.7,111.05,1.7,65.75 +751,46,30,2.7,111.05,1.7,65.745 +752,46,30,2.7,111.05,1.7,65.74 +753,46,30,2.7,111.05,1.7,65.735 +754,46,30,2.7,111.05,1.7,65.73 +755,46,30,2.7,111.05,1.7,65.725 +756,46,30,2.7,111.05,1.7,65.72 +757,46,30,2.7,111.05,1.7,65.715 +758,46,30,2.7,111.05,1.7,65.71 +759,46,30,2.7,111.05,1.7,65.705 +760,46,30,2.7,111.05,1.7,65.7 +761,46,30,2.7,111.05,1.7,65.695 +762,46,30,2.7,111.05,1.7,65.69 +763,46,30,2.7,111.05,1.7,65.685 +764,46,30,2.7,111.05,1.7,65.68 +765,46,30,2.7,111.05,1.7,65.675 +766,46,30,2.7,111.05,1.7,65.67 +767,46,30,2.7,111.05,1.7,65.665 +768,46,30,2.7,111.05,1.7,65.66 +769,46,30,2.7,111.05,1.7,65.655 +770,46,30,2.7,111.05,1.7,65.65 +771,46,30,2.7,111.05,1.7,65.645 +772,46,30,2.7,111.05,1.7,65.64 +773,46,30,2.7,111.05,1.7,65.635 +774,46,30,2.7,111.05,1.7,65.63 +775,46,30,2.7,111.05,1.7,65.625 +776,46,30,2.7,111.05,1.7,65.62 +777,46,30,2.7,111.05,1.7,65.615 +778,46,30,2.7,111.05,1.7,65.61 +779,46,30,2.7,111.05,1.7,65.605 +780,46,30,2.7,111.05,1.7,65.6 +781,46,30,2.7,111.05,1.7,65.595 +782,46,30,2.7,111.05,1.7,65.59 +783,46,30,2.7,111.05,1.7,65.585 +784,46,30,2.7,111.05,1.7,65.58 +785,46,30,2.7,111.05,1.7,65.575 +786,46,30,2.7,111.05,1.7,65.57 +787,46,30,2.7,111.05,1.7,65.565 +788,46,30,2.7,111.05,1.7,65.56 +789,46,30,2.7,111.05,1.7,65.555 +790,46,30,2.7,111.05,1.7,65.55 +791,46,30,2.7,111.05,1.7,65.545 +792,46,30,2.7,111.05,1.7,65.54 +793,46,30,2.7,111.05,1.7,65.535 +794,46,30,2.7,111.05,1.7,65.53 +795,46,30,2.7,111.05,1.7,65.525 +796,46,30,2.7,111.05,1.7,65.52 +797,46,30,2.7,111.05,1.7,65.515 +798,46,30,2.7,111.05,1.7,65.51 +799,46,30,2.7,111.05,1.7,65.505 +800,46,30,2.7,111.05,1.7,65.5 +801,46,30,2.7,111.05,1.7,65.495 +802,46,30,2.7,111.05,1.7,65.49 +803,46,30,2.7,111.05,1.7,65.485 +804,46,30,2.7,111.05,1.7,65.48 +805,46,30,2.7,111.05,1.7,65.475 +806,46,30,2.7,111.05,1.7,65.47 +807,46,30,2.7,111.05,1.7,65.465 +808,46,30,2.7,111.05,1.7,65.46 +809,46,30,2.7,111.05,1.7,65.455 +810,46,30,2.7,111.05,1.7,65.45 +811,46,30,2.7,111.05,1.7,65.445 +812,46,30,2.7,111.05,1.7,65.44 +813,46,30,2.7,111.05,1.7,65.435 +814,46,30,2.7,111.05,1.7,65.43 +815,46,30,2.7,111.05,1.7,65.425 +816,46,30,2.7,111.05,1.7,65.42 +817,46,30,2.7,111.05,1.7,65.415 +818,46,30,2.7,111.05,1.7,65.41 +819,46,30,2.7,111.05,1.7,65.405 +820,46,30,2.7,111.05,1.7,65.4 +821,46,30,2.7,111.05,1.7,65.395 +822,46,30,2.7,111.05,1.7,65.39 +823,46,30,2.7,111.05,1.7,65.385 +824,46,30,2.7,111.05,1.7,65.38 +825,46,30,2.7,111.05,1.7,65.375 +826,46,30,2.7,111.05,1.7,65.37 +827,46,30,2.7,111.05,1.7,65.365 +828,46,30,2.7,111.05,1.7,65.36 +829,46,30,2.7,111.05,1.7,65.355 +830,46,30,2.7,111.05,1.7,65.35 +831,46,30,2.7,111.05,1.7,65.345 +832,46,30,2.7,111.05,1.7,65.34 +833,46,30,2.7,111.05,1.7,65.335 +834,46,30,2.7,111.05,1.7,65.33 +835,46,30,2.7,111.05,1.7,65.325 +836,46,30,2.7,111.05,1.7,65.32 +837,46,30,2.7,111.05,1.7,65.315 +838,46,30,2.7,111.05,1.7,65.31 +839,46,30,2.7,111.05,1.7,65.305 +840,46,30,2.7,111.05,1.7,65.3 +841,46,30,2.7,111.05,1.7,65.295 +842,46,30,2.7,111.05,1.7,65.29 +843,46,30,2.7,111.05,1.7,65.285 +844,46,30,2.7,111.05,1.7,65.28 +845,46,30,2.7,111.05,1.7,65.275 +846,46,30,2.7,111.05,1.7,65.27 +847,46,30,2.7,111.05,1.7,65.265 +848,46,30,2.7,111.05,1.7,65.26 +849,46,30,2.7,111.05,1.7,65.255 +850,46,30,2.7,111.05,1.7,65.25 +851,46,30,2.7,111.05,1.7,65.245 +852,46,30,2.7,111.05,1.7,65.24 +853,46,30,2.7,111.05,1.7,65.235 +854,46,30,2.7,111.05,1.7,65.23 +855,46,30,2.7,111.05,1.7,65.225 +856,46,30,2.7,111.05,1.7,65.22 +857,46,30,2.7,111.05,1.7,65.215 +858,46,30,2.7,111.05,1.7,65.21 +859,46,30,2.7,111.05,1.7,65.205 +860,46,30,2.7,111.05,1.7,65.2 +861,46,30,2.7,111.05,1.7,65.195 +862,46,30,2.7,111.05,1.7,65.19 +863,46,30,2.7,111.05,1.7,65.185 +864,46,30,2.7,111.05,1.7,65.18 +865,46,30,2.7,111.05,1.7,65.175 +866,46,30,2.7,111.05,1.7,65.17 +867,46,30,2.7,111.05,1.7,65.165 +868,46,30,2.7,111.05,1.7,65.16 +869,46,30,2.7,111.05,1.7,65.155 +870,46,30,2.7,111.05,1.7,65.15 +871,46,30,2.7,111.05,1.7,65.145 +872,46,30,2.7,111.05,1.7,65.14 +873,46,30,2.7,111.05,1.7,65.135 +874,46,30,2.7,111.05,1.7,65.13 +875,46,30,2.7,111.05,1.7,65.125 +876,46,30,2.7,111.05,1.7,65.12 +877,46,30,2.7,111.05,1.7,65.115 +878,46,30,2.7,111.05,1.7,65.11 +879,46,30,2.7,111.05,1.7,65.105 +880,46,30,2.7,111.05,1.7,65.1 +881,46,30,2.7,111.05,1.7,65.095 +882,46,30,2.7,111.05,1.7,65.09 +883,46,30,2.7,111.05,1.7,65.085 +884,46,30,2.7,111.05,1.7,65.08 +885,46,30,2.7,111.05,1.7,65.075 +886,46,30,2.7,111.05,1.7,65.07 +887,46,30,2.7,111.05,1.7,65.065 +888,46,30,2.7,111.05,1.7,65.06 +889,46,30,2.7,111.05,1.7,65.055 +890,46,30,2.7,111.05,1.7,65.05 +891,46,30,2.7,111.05,1.7,65.045 +892,46,30,2.7,111.05,1.7,65.04 +893,46,30,2.7,111.05,1.7,65.035 +894,46,30,2.7,111.05,1.7,65.03 +895,46,30,2.7,111.05,1.7,65.025 +896,46,30,2.7,111.05,1.7,65.02 +897,46,30,2.7,111.05,1.7,65.015 +898,46,30,2.7,111.05,1.7,65.01 +899,46,30,2.7,111.05,1.7,65.005 +900,46,30,2.7,111.05,1.7,65 +901,46,30,2.7,111.05,1.7,64.99833333 +902,46,30,2.7,111.05,1.7,64.99666667 +903,46,30,2.7,111.05,1.7,64.995 +904,46,30,2.7,111.05,1.7,64.99333333 +905,46,30,2.7,111.05,1.7,64.99166667 +906,46,30,2.7,111.05,1.7,64.99 +907,46,30,2.7,111.05,1.7,64.98833333 +908,46,30,2.7,111.05,1.7,64.98666667 +909,46,30,2.7,111.05,1.7,64.985 +910,46,30,2.7,111.05,1.7,64.98333333 +911,46,30,2.7,111.05,1.7,64.98166667 +912,46,30,2.7,111.05,1.7,64.98 +913,46,30,2.7,111.05,1.7,64.97833333 +914,46,30,2.7,111.05,1.7,64.97666667 +915,46,30,2.7,111.05,1.7,64.975 +916,46,30,2.7,111.05,1.7,64.97333333 +917,46,30,2.7,111.05,1.7,64.97166667 +918,46,30,2.7,111.05,1.7,64.97 +919,46,30,2.7,111.05,1.7,64.96833333 +920,46,30,2.7,111.05,1.7,64.96666667 +921,46,30,2.7,111.05,1.7,64.965 +922,46,30,2.7,111.05,1.7,64.96333333 +923,46,30,2.7,111.05,1.7,64.96166667 +924,46,30,2.7,111.05,1.7,64.96 +925,46,30,2.7,111.05,1.7,64.95833333 +926,46,30,2.7,111.05,1.7,64.95666667 +927,46,30,2.7,111.05,1.7,64.955 +928,46,30,2.7,111.05,1.7,64.95333333 +929,46,30,2.7,111.05,1.7,64.95166667 +930,46,30,2.7,111.05,1.7,64.95 +931,46,30,2.7,111.05,1.7,64.94833333 +932,46,30,2.7,111.05,1.7,64.94666667 +933,46,30,2.7,111.05,1.7,64.945 +934,46,30,2.7,111.05,1.7,64.94333333 +935,46,30,2.7,111.05,1.7,64.94166667 +936,46,30,2.7,111.05,1.7,64.94 +937,46,30,2.7,111.05,1.7,64.93833333 +938,46,30,2.7,111.05,1.7,64.93666667 +939,46,30,2.7,111.05,1.7,64.935 +940,46,30,2.7,111.05,1.7,64.93333333 +941,46,30,2.7,111.05,1.7,64.93166667 +942,46,30,2.7,111.05,1.7,64.93 +943,46,30,2.7,111.05,1.7,64.92833333 +944,46,30,2.7,111.05,1.7,64.92666667 +945,46,30,2.7,111.05,1.7,64.925 +946,46,30,2.7,111.05,1.7,64.92333333 +947,46,30,2.7,111.05,1.7,64.92166667 +948,46,30,2.7,111.05,1.7,64.92 +949,46,30,2.7,111.05,1.7,64.91833333 +950,46,30,2.7,111.05,1.7,64.91666667 +951,46,30,2.7,111.05,1.7,64.915 +952,46,30,2.7,111.05,1.7,64.91333333 +953,46,30,2.7,111.05,1.7,64.91166666 +954,46,30,2.7,111.05,1.7,64.91 +955,46,30,2.7,111.05,1.7,64.90833333 +956,46,30,2.7,111.05,1.7,64.90666666 +957,46,30,2.7,111.05,1.7,64.905 +958,46,30,2.7,111.05,1.7,64.90333333 +959,46,30,2.7,111.05,1.7,64.90166666 +960,46,30,2.7,111.05,1.7,64.9 +961,46,30,2.7,111.05,1.7,64.89833333 +962,46,30,2.7,111.05,1.7,64.89666666 +963,46,30,2.7,111.05,1.7,64.895 +964,46,30,2.7,111.05,1.7,64.89333333 +965,46,30,2.7,111.05,1.7,64.89166666 +966,46,30,2.7,111.05,1.7,64.89 +967,46,30,2.7,111.05,1.7,64.88833333 +968,46,30,2.7,111.05,1.7,64.88666666 +969,46,30,2.7,111.05,1.7,64.885 +970,46,30,2.7,111.05,1.7,64.88333333 +971,46,30,2.7,111.05,1.7,64.88166666 +972,46,30,2.7,111.05,1.7,64.88 +973,46,30,2.7,111.05,1.7,64.87833333 +974,46,30,2.7,111.05,1.7,64.87666666 +975,46,30,2.7,111.05,1.7,64.875 +976,46,30,2.7,111.05,1.7,64.87333333 +977,46,30,2.7,111.05,1.7,64.87166666 +978,46,30,2.7,111.05,1.7,64.87 +979,46,30,2.7,111.05,1.7,64.86833333 +980,46,30,2.7,111.05,1.7,64.86666666 +981,46,30,2.7,111.05,1.7,64.865 +982,46,30,2.7,111.05,1.7,64.86333333 +983,46,30,2.7,111.05,1.7,64.86166666 +984,46,30,2.7,111.05,1.7,64.86 +985,46,30,2.7,111.05,1.7,64.85833333 +986,46,30,2.7,111.05,1.7,64.85666666 +987,46,30,2.7,111.05,1.7,64.855 +988,46,30,2.7,111.05,1.7,64.85333333 +989,46,30,2.7,111.05,1.7,64.85166666 +990,46,30,2.7,111.05,1.7,64.85 +991,46,30,2.7,111.05,1.7,64.84833333 +992,46,30,2.7,111.05,1.7,64.84666666 +993,46,30,2.7,111.05,1.7,64.845 +994,46,30,2.7,111.05,1.7,64.84333333 +995,46,30,2.7,111.05,1.7,64.84166666 +996,46,30,2.7,111.05,1.7,64.84 +997,46,30,2.7,111.05,1.7,64.83833333 +998,46,30,2.7,111.05,1.7,64.83666666 +999,46,30,2.7,111.05,1.7,64.835 +1000,46,30,2.7,111.05,1.7,64.83333333 +1001,46,30,2.7,111.05,1.7,64.83166666 +1002,46,30,2.7,111.05,1.7,64.83 +1003,46,30,2.7,111.05,1.7,64.82833333 +1004,46,30,2.7,111.05,1.7,64.82666666 +1005,46,30,2.7,111.05,1.7,64.825 +1006,46,30,2.7,111.05,1.7,64.82333333 +1007,46,30,2.7,111.05,1.7,64.82166666 +1008,46,30,2.7,111.05,1.7,64.82 +1009,46,30,2.7,111.05,1.7,64.81833333 +1010,46,30,2.7,111.05,1.7,64.81666666 +1011,46,30,2.7,111.05,1.7,64.815 +1012,46,30,2.7,111.05,1.7,64.81333333 +1013,46,30,2.7,111.05,1.7,64.81166666 +1014,46,30,2.7,111.05,1.7,64.81 +1015,46,30,2.7,111.05,1.7,64.80833333 +1016,46,30,2.7,111.05,1.7,64.80666666 +1017,46,30,2.7,111.05,1.7,64.805 +1018,46,30,2.7,111.05,1.7,64.80333333 +1019,46,30,2.7,111.05,1.7,64.80166666 +1020,46,30,2.7,111.05,1.7,64.8 +1021,46,30,2.7,111.05,1.7,64.79833333 +1022,46,30,2.7,111.05,1.7,64.79666666 +1023,46,30,2.7,111.05,1.7,64.795 +1024,46,30,2.7,111.05,1.7,64.79333333 +1025,46,30,2.7,111.05,1.7,64.79166666 +1026,46,30,2.7,111.05,1.7,64.79 +1027,46,30,2.7,111.05,1.7,64.78833333 +1028,46,30,2.7,111.05,1.7,64.78666666 +1029,46,30,2.7,111.05,1.7,64.785 +1030,46,30,2.7,111.05,1.7,64.78333333 +1031,46,30,2.7,111.05,1.7,64.78166666 +1032,46,30,2.7,111.05,1.7,64.78 +1033,46,30,2.7,111.05,1.7,64.77833333 +1034,46,30,2.7,111.05,1.7,64.77666666 +1035,46,30,2.7,111.05,1.7,64.775 +1036,46,30,2.7,111.05,1.7,64.77333333 +1037,46,30,2.7,111.05,1.7,64.77166666 +1038,46,30,2.7,111.05,1.7,64.77 +1039,46,30,2.7,111.05,1.7,64.76833333 +1040,46,30,2.7,111.05,1.7,64.76666666 +1041,46,30,2.7,111.05,1.7,64.765 +1042,46,30,2.7,111.05,1.7,64.76333333 +1043,46,30,2.7,111.05,1.7,64.76166666 +1044,46,30,2.7,111.05,1.7,64.76 +1045,46,30,2.7,111.05,1.7,64.75833333 +1046,46,30,2.7,111.05,1.7,64.75666666 +1047,46,30,2.7,111.05,1.7,64.755 +1048,46,30,2.7,111.05,1.7,64.75333333 +1049,46,30,2.7,111.05,1.7,64.75166666 +1050,46,30,2.7,111.05,1.7,64.75 +1051,46,30,2.7,111.05,1.7,64.74833333 +1052,46,30,2.7,111.05,1.7,64.74666666 +1053,46,30,2.7,111.05,1.7,64.74499999 +1054,46,30,2.7,111.05,1.7,64.74333333 +1055,46,30,2.7,111.05,1.7,64.74166666 +1056,46,30,2.7,111.05,1.7,64.73999999 +1057,46,30,2.7,111.05,1.7,64.73833333 +1058,46,30,2.7,111.05,1.7,64.73666666 +1059,46,30,2.7,111.05,1.7,64.73499999 +1060,46,30,2.7,111.05,1.7,64.73333333 +1061,46,30,2.7,111.05,1.7,64.73166666 +1062,46,30,2.7,111.05,1.7,64.72999999 +1063,46,30,2.7,111.05,1.7,64.72833333 +1064,46,30,2.7,111.05,1.7,64.72666666 +1065,46,30,2.7,111.05,1.7,64.72499999 +1066,46,30,2.7,111.05,1.7,64.72333333 +1067,46,30,2.7,111.05,1.7,64.72166666 +1068,46,30,2.7,111.05,1.7,64.71999999 +1069,46,30,2.7,111.05,1.7,64.71833333 +1070,46,30,2.7,111.05,1.7,64.71666666 +1071,46,30,2.7,111.05,1.7,64.71499999 +1072,46,30,2.7,111.05,1.7,64.71333333 +1073,46,30,2.7,111.05,1.7,64.71166666 +1074,46,30,2.7,111.05,1.7,64.70999999 +1075,46,30,2.7,111.05,1.7,64.70833333 +1076,46,30,2.7,111.05,1.7,64.70666666 +1077,46,30,2.7,111.05,1.7,64.70499999 +1078,46,30,2.7,111.05,1.7,64.70333333 +1079,46,30,2.7,111.05,1.7,64.70166666 +1080,46,30,2.7,111.05,1.7,64.69999999 +1081,46,30,2.7,111.05,1.7,64.69833333 +1082,46,30,2.7,111.05,1.7,64.69666666 +1083,46,30,2.7,111.05,1.7,64.69499999 +1084,46,30,2.7,111.05,1.7,64.69333333 +1085,46,30,2.7,111.05,1.7,64.69166666 +1086,46,30,2.7,111.05,1.7,64.68999999 +1087,46,30,2.7,111.05,1.7,64.68833333 +1088,46,30,2.7,111.05,1.7,64.68666666 +1089,46,30,2.7,111.05,1.7,64.68499999 +1090,46,30,2.7,111.05,1.7,64.68333333 +1091,46,30,2.7,111.05,1.7,64.68166666 +1092,46,30,2.7,111.05,1.7,64.67999999 +1093,46,30,2.7,111.05,1.7,64.67833333 +1094,46,30,2.7,111.05,1.7,64.67666666 +1095,46,30,2.7,111.05,1.7,64.67499999 +1096,46,30,2.7,111.05,1.7,64.67333333 +1097,46,30,2.7,111.05,1.7,64.67166666 +1098,46,30,2.7,111.05,1.7,64.66999999 +1099,46,30,2.7,111.05,1.7,64.66833333 +1100,46,30,2.7,111.05,1.7,64.66666666 +1101,46,30,2.7,111.05,1.7,64.66499999 +1102,46,30,2.7,111.05,1.7,64.66333333 +1103,46,30,2.7,111.05,1.7,64.66166666 +1104,46,30,2.7,111.05,1.7,64.65999999 +1105,46,30,2.7,111.05,1.7,64.65833333 +1106,46,30,2.7,111.05,1.7,64.65666666 +1107,46,30,2.7,111.05,1.7,64.65499999 +1108,46,30,2.7,111.05,1.7,64.65333333 +1109,46,30,2.7,111.05,1.7,64.65166666 +1110,46,30,2.7,111.05,1.7,64.64999999 +1111,46,30,2.7,111.05,1.7,64.64833333 +1112,46,30,2.7,111.05,1.7,64.64666666 +1113,46,30,2.7,111.05,1.7,64.64499999 +1114,46,30,2.7,111.05,1.7,64.64333333 +1115,46,30,2.7,111.05,1.7,64.64166666 +1116,46,30,2.7,111.05,1.7,64.63999999 +1117,46,30,2.7,111.05,1.7,64.63833333 +1118,46,30,2.7,111.05,1.7,64.63666666 +1119,46,30,2.7,111.05,1.7,64.63499999 +1120,46,30,2.7,111.05,1.7,64.63333333 +1121,46,30,2.7,111.05,1.7,64.63166666 +1122,46,30,2.7,111.05,1.7,64.62999999 +1123,46,30,2.7,111.05,1.7,64.62833333 +1124,46,30,2.7,111.05,1.7,64.62666666 +1125,46,30,2.7,111.05,1.7,64.62499999 +1126,46,30,2.7,111.05,1.7,64.62333333 +1127,46,30,2.7,111.05,1.7,64.62166666 +1128,46,30,2.7,111.05,1.7,64.61999999 +1129,46,30,2.7,111.05,1.7,64.61833333 +1130,46,30,2.7,111.05,1.7,64.61666666 +1131,46,30,2.7,111.05,1.7,64.61499999 +1132,46,30,2.7,111.05,1.7,64.61333333 +1133,46,30,2.7,111.05,1.7,64.61166666 +1134,46,30,2.7,111.05,1.7,64.60999999 +1135,46,30,2.7,111.05,1.7,64.60833333 +1136,46,30,2.7,111.05,1.7,64.60666666 +1137,46,30,2.7,111.05,1.7,64.60499999 +1138,46,30,2.7,111.05,1.7,64.60333333 +1139,46,30,2.7,111.05,1.7,64.60166666 +1140,46,30,2.7,111.05,1.7,64.59999999 +1141,46,30,2.7,111.05,1.7,64.59833333 +1142,46,30,2.7,111.05,1.7,64.59666666 +1143,46,30,2.7,111.05,1.7,64.59499999 +1144,46,30,2.7,111.05,1.7,64.59333333 +1145,46,30,2.7,111.05,1.7,64.59166666 +1146,46,30,2.7,111.05,1.7,64.58999999 +1147,46,30,2.7,111.05,1.7,64.58833333 +1148,46,30,2.7,111.05,1.7,64.58666666 +1149,46,30,2.7,111.05,1.7,64.58499999 +1150,46,30,2.7,111.05,1.7,64.58333333 +1151,46,30,2.7,111.05,1.7,64.58166666 +1152,46,30,2.7,111.05,1.7,64.57999999 +1153,46,30,2.7,111.05,1.7,64.57833332 +1154,46,30,2.7,111.05,1.7,64.57666666 +1155,46,30,2.7,111.05,1.7,64.57499999 +1156,46,30,2.7,111.05,1.7,64.57333332 +1157,46,30,2.7,111.05,1.7,64.57166666 +1158,46,30,2.7,111.05,1.7,64.56999999 +1159,46,30,2.7,111.05,1.7,64.56833332 +1160,46,30,2.7,111.05,1.7,64.56666666 +1161,46,30,2.7,111.05,1.7,64.56499999 +1162,46,30,2.7,111.05,1.7,64.56333332 +1163,46,30,2.7,111.05,1.7,64.56166666 +1164,46,30,2.7,111.05,1.7,64.55999999 +1165,46,30,2.7,111.05,1.7,64.55833332 +1166,46,30,2.7,111.05,1.7,64.55666666 +1167,46,30,2.7,111.05,1.7,64.55499999 +1168,46,30,2.7,111.05,1.7,64.55333332 +1169,46,30,2.7,111.05,1.7,64.55166666 +1170,46,30,2.7,111.05,1.7,64.54999999 +1171,46,30,2.7,111.05,1.7,64.54833332 +1172,46,30,2.7,111.05,1.7,64.54666666 +1173,46,30,2.7,111.05,1.7,64.54499999 +1174,46,30,2.7,111.05,1.7,64.54333332 +1175,46,30,2.7,111.05,1.7,64.54166666 +1176,46,30,2.7,111.05,1.7,64.53999999 +1177,46,30,2.7,111.05,1.7,64.53833332 +1178,46,30,2.7,111.05,1.7,64.53666666 +1179,46,30,2.7,111.05,1.7,64.53499999 +1180,46,30,2.7,111.05,1.7,64.53333332 +1181,46,30,2.7,111.05,1.7,64.53166666 +1182,46,30,2.7,111.05,1.7,64.52999999 +1183,46,30,2.7,111.05,1.7,64.52833332 +1184,46,30,2.7,111.05,1.7,64.52666666 +1185,46,30,2.7,111.05,1.7,64.52499999 +1186,46,30,2.7,111.05,1.7,64.52333332 +1187,46,30,2.7,111.05,1.7,64.52166666 +1188,46,30,2.7,111.05,1.7,64.51999999 +1189,46,30,2.7,111.05,1.7,64.51833332 +1190,46,30,2.7,111.05,1.7,64.51666666 +1191,46,30,2.7,111.05,1.7,64.51499999 +1192,46,30,2.7,111.05,1.7,64.51333332 +1193,46,30,2.7,111.05,1.7,64.51166666 +1194,46,30,2.7,111.05,1.7,64.50999999 +1195,46,30,2.7,111.05,1.7,64.50833332 +1196,46,30,2.7,111.05,1.7,64.50666666 +1197,46,30,2.7,111.05,1.7,64.50499999 +1198,46,30,2.7,111.05,1.7,64.50333332 +1199,46,30,2.7,111.05,1.7,64.50166666 +1200,46,30,2.7,111.05,1.7,64.5 +1201,46,30,2.7,111.05,1.7,64.499375 +1202,46,30,2.7,111.05,1.7,64.49875 +1203,46,30,2.7,111.05,1.7,64.498125 +1204,46,30,2.7,111.05,1.7,64.4975 +1205,46,30,2.7,111.05,1.7,64.496875 +1206,46,30,2.7,111.05,1.7,64.49625 +1207,46,30,2.7,111.05,1.7,64.495625 +1208,46,30,2.7,111.05,1.7,64.495 +1209,46,30,2.7,111.05,1.7,64.494375 +1210,46,30,2.7,111.05,1.7,64.49375 +1211,46,30,2.7,111.05,1.7,64.493125 +1212,46,30,2.7,111.05,1.7,64.4925 +1213,46,30,2.7,111.05,1.7,64.491875 +1214,46,30,2.7,111.05,1.7,64.49125 +1215,46,30,2.7,111.05,1.7,64.490625 +1216,46,30,2.7,111.05,1.7,64.49 +1217,46,30,2.7,111.05,1.7,64.489375 +1218,46,30,2.7,111.05,1.7,64.48875 +1219,46,30,2.7,111.05,1.7,64.488125 +1220,46,30,2.7,111.05,1.7,64.4875 +1221,46,30,2.7,111.05,1.7,64.486875 +1222,46,30,2.7,111.05,1.7,64.48625 +1223,46,30,2.7,111.05,1.7,64.485625 +1224,46,30,2.7,111.05,1.7,64.485 +1225,46,30,2.7,111.05,1.7,64.484375 +1226,46,30,2.7,111.05,1.7,64.48375 +1227,46,30,2.7,111.05,1.7,64.483125 +1228,46,30,2.7,111.05,1.7,64.4825 +1229,46,30,2.7,111.05,1.7,64.481875 +1230,46,30,2.7,111.05,1.7,64.48125 +1231,46,30,2.7,111.05,1.7,64.480625 +1232,46,30,2.7,111.05,1.7,64.48 +1233,46,30,2.7,111.05,1.7,64.479375 +1234,46,30,2.7,111.05,1.7,64.47875 +1235,46,30,2.7,111.05,1.7,64.478125 +1236,46,30,2.7,111.05,1.7,64.4775 +1237,46,30,2.7,111.05,1.7,64.476875 +1238,46,30,2.7,111.05,1.7,64.47625 +1239,46,30,2.7,111.05,1.7,64.475625 +1240,46,30,2.7,111.05,1.7,64.475 +1241,46,30,2.7,111.05,1.7,64.474375 +1242,46,30,2.7,111.05,1.7,64.47375 +1243,46,30,2.7,111.05,1.7,64.473125 +1244,46,30,2.7,111.05,1.7,64.4725 +1245,46,30,2.7,111.05,1.7,64.471875 +1246,46,30,2.7,111.05,1.7,64.47125 +1247,46,30,2.7,111.05,1.7,64.470625 +1248,46,30,2.7,111.05,1.7,64.47 +1249,46,30,2.7,111.05,1.7,64.469375 +1250,46,30,2.7,111.05,1.7,64.46875 +1251,46,30,2.7,111.05,1.7,64.468125 +1252,46,30,2.7,111.05,1.7,64.4675 +1253,46,30,2.7,111.05,1.7,64.466875 +1254,46,30,2.7,111.05,1.7,64.46625 +1255,46,30,2.7,111.05,1.7,64.465625 +1256,46,30,2.7,111.05,1.7,64.465 +1257,46,30,2.7,111.05,1.7,64.464375 +1258,46,30,2.7,111.05,1.7,64.46375 +1259,46,30,2.7,111.05,1.7,64.463125 +1260,46,30,2.7,111.05,1.7,64.4625 +1261,46,30,2.7,111.05,1.7,64.461875 +1262,46,30,2.7,111.05,1.7,64.46125 +1263,46,30,2.7,111.05,1.7,64.460625 +1264,46,30,2.7,111.05,1.7,64.46 +1265,46,30,2.7,111.05,1.7,64.459375 +1266,46,30,2.7,111.05,1.7,64.45875 +1267,46,30,2.7,111.05,1.7,64.458125 +1268,46,30,2.7,111.05,1.7,64.4575 +1269,46,30,2.7,111.05,1.7,64.456875 +1270,46,30,2.7,111.05,1.7,64.45625 +1271,46,30,2.7,111.05,1.7,64.455625 +1272,46,30,2.7,111.05,1.7,64.455 +1273,46,30,2.7,111.05,1.7,64.454375 +1274,46,30,2.7,111.05,1.7,64.45375 +1275,46,30,2.7,111.05,1.7,64.453125 +1276,46,30,2.7,111.05,1.7,64.4525 +1277,46,30,2.7,111.05,1.7,64.451875 +1278,46,30,2.7,111.05,1.7,64.45125 +1279,46,30,2.7,111.05,1.7,64.450625 +1280,46,30,2.7,111.05,1.7,64.45 +1281,46,30,2.7,111.05,1.7,64.449375 +1282,46,30,2.7,111.05,1.7,64.44875 +1283,46,30,2.7,111.05,1.7,64.448125 +1284,46,30,2.7,111.05,1.7,64.4475 +1285,46,30,2.7,111.05,1.7,64.446875 +1286,46,30,2.7,111.05,1.7,64.44625 +1287,46,30,2.7,111.05,1.7,64.445625 +1288,46,30,2.7,111.05,1.7,64.445 +1289,46,30,2.7,111.05,1.7,64.444375 +1290,46,30,2.7,111.05,1.7,64.44375 +1291,46,30,2.7,111.05,1.7,64.443125 +1292,46,30,2.7,111.05,1.7,64.4425 +1293,46,30,2.7,111.05,1.7,64.441875 +1294,46,30,2.7,111.05,1.7,64.44125 +1295,46,30,2.7,111.05,1.7,64.440625 +1296,46,30,2.7,111.05,1.7,64.44 +1297,46,30,2.7,111.05,1.7,64.439375 +1298,46,30,2.7,111.05,1.7,64.43875 +1299,46,30,2.7,111.05,1.7,64.438125 +1300,46,30,2.7,111.05,1.7,64.4375 +1301,46,30,2.7,111.05,1.7,64.436875 +1302,46,30,2.7,111.05,1.7,64.43625 +1303,46,30,2.7,111.05,1.7,64.435625 +1304,46,30,2.7,111.05,1.7,64.435 +1305,46,30,2.7,111.05,1.7,64.434375 +1306,46,30,2.7,111.05,1.7,64.43375 +1307,46,30,2.7,111.05,1.7,64.433125 +1308,46,30,2.7,111.05,1.7,64.4325 +1309,46,30,2.7,111.05,1.7,64.431875 +1310,46,30,2.7,111.05,1.7,64.43125 +1311,46,30,2.7,111.05,1.7,64.430625 +1312,46,30,2.7,111.05,1.7,64.43 +1313,46,30,2.7,111.05,1.7,64.429375 +1314,46,30,2.7,111.05,1.7,64.42875 +1315,46,30,2.7,111.05,1.7,64.428125 +1316,46,30,2.7,111.05,1.7,64.4275 +1317,46,30,2.7,111.05,1.7,64.426875 +1318,46,30,2.7,111.05,1.7,64.42625 +1319,46,30,2.7,111.05,1.7,64.425625 +1320,46,30,2.7,111.05,1.7,64.425 +1321,46,30,2.7,111.05,1.7,64.424375 +1322,46,30,2.7,111.05,1.7,64.42375 +1323,46,30,2.7,111.05,1.7,64.423125 +1324,46,30,2.7,111.05,1.7,64.4225 +1325,46,30,2.7,111.05,1.7,64.421875 +1326,46,30,2.7,111.05,1.7,64.42125 +1327,46,30,2.7,111.05,1.7,64.420625 +1328,46,30,2.7,111.05,1.7,64.42 +1329,46,30,2.7,111.05,1.7,64.419375 +1330,46,30,2.7,111.05,1.7,64.41875 +1331,46,30,2.7,111.05,1.7,64.418125 +1332,46,30,2.7,111.05,1.7,64.4175 +1333,46,30,2.7,111.05,1.7,64.416875 +1334,46,30,2.7,111.05,1.7,64.41625 +1335,46,30,2.7,111.05,1.7,64.415625 +1336,46,30,2.7,111.05,1.7,64.415 +1337,46,30,2.7,111.05,1.7,64.414375 +1338,46,30,2.7,111.05,1.7,64.41375 +1339,46,30,2.7,111.05,1.7,64.413125 +1340,46,30,2.7,111.05,1.7,64.4125 +1341,46,30,2.7,111.05,1.7,64.411875 +1342,46,30,2.7,111.05,1.7,64.41125 +1343,46,30,2.7,111.05,1.7,64.410625 +1344,46,30,2.7,111.05,1.7,64.41 +1345,46,30,2.7,111.05,1.7,64.409375 +1346,46,30,2.7,111.05,1.7,64.40875 +1347,46,30,2.7,111.05,1.7,64.408125 +1348,46,30,2.7,111.05,1.7,64.4075 +1349,46,30,2.7,111.05,1.7,64.406875 +1350,46,30,2.7,111.05,1.7,64.40625 +1351,46,30,2.7,111.05,1.7,64.405625 +1352,46,30,2.7,111.05,1.7,64.405 +1353,46,30,2.7,111.05,1.7,64.404375 +1354,46,30,2.7,111.05,1.7,64.40375 +1355,46,30,2.7,111.05,1.7,64.403125 +1356,46,30,2.7,111.05,1.7,64.4025 +1357,46,30,2.7,111.05,1.7,64.401875 +1358,46,30,2.7,111.05,1.7,64.40125 +1359,46,30,2.7,111.05,1.7,64.400625 +1360,46,30,2.7,111.05,1.7,64.4 +1361,46,30,2.7,111.05,1.7,64.399375 +1362,46,30,2.7,111.05,1.7,64.39875 +1363,46,30,2.7,111.05,1.7,64.398125 +1364,46,30,2.7,111.05,1.7,64.3975 +1365,46,30,2.7,111.05,1.7,64.396875 +1366,46,30,2.7,111.05,1.7,64.39625 +1367,46,30,2.7,111.05,1.7,64.395625 +1368,46,30,2.7,111.05,1.7,64.395 +1369,46,30,2.7,111.05,1.7,64.394375 +1370,46,30,2.7,111.05,1.7,64.39375 +1371,46,30,2.7,111.05,1.7,64.393125 +1372,46,30,2.7,111.05,1.7,64.3925 +1373,46,30,2.7,111.05,1.7,64.391875 +1374,46,30,2.7,111.05,1.7,64.39125 +1375,46,30,2.7,111.05,1.7,64.390625 +1376,46,30,2.7,111.05,1.7,64.39 +1377,46,30,2.7,111.05,1.7,64.389375 +1378,46,30,2.7,111.05,1.7,64.38875 +1379,46,30,2.7,111.05,1.7,64.388125 +1380,46,30,2.7,111.05,1.7,64.3875 +1381,46,30,2.7,111.05,1.7,64.386875 +1382,46,30,2.7,111.05,1.7,64.38625 +1383,46,30,2.7,111.05,1.7,64.385625 +1384,46,30,2.7,111.05,1.7,64.385 +1385,46,30,2.7,111.05,1.7,64.384375 +1386,46,30,2.7,111.05,1.7,64.38375 +1387,46,30,2.7,111.05,1.7,64.383125 +1388,46,30,2.7,111.05,1.7,64.3825 +1389,46,30,2.7,111.05,1.7,64.381875 +1390,46,30,2.7,111.05,1.7,64.38125 +1391,46,30,2.7,111.05,1.7,64.380625 +1392,46,30,2.7,111.05,1.7,64.38 +1393,46,30,2.7,111.05,1.7,64.379375 +1394,46,30,2.7,111.05,1.7,64.37875 +1395,46,30,2.7,111.05,1.7,64.378125 +1396,46,30,2.7,111.05,1.7,64.3775 +1397,46,30,2.7,111.05,1.7,64.376875 +1398,46,30,2.7,111.05,1.7,64.37625 +1399,46,30,2.7,111.05,1.7,64.375625 +1400,46,30,2.7,111.05,1.7,64.375 +1401,46,30,2.7,111.05,1.7,64.374375 +1402,46,30,2.7,111.05,1.7,64.37375 +1403,46,30,2.7,111.05,1.7,64.373125 +1404,46,30,2.7,111.05,1.7,64.3725 +1405,46,30,2.7,111.05,1.7,64.371875 +1406,46,30,2.7,111.05,1.7,64.37125 +1407,46,30,2.7,111.05,1.7,64.370625 +1408,46,30,2.7,111.05,1.7,64.37 +1409,46,30,2.7,111.05,1.7,64.369375 +1410,46,30,2.7,111.05,1.7,64.36875 +1411,46,30,2.7,111.05,1.7,64.368125 +1412,46,30,2.7,111.05,1.7,64.3675 +1413,46,30,2.7,111.05,1.7,64.366875 +1414,46,30,2.7,111.05,1.7,64.36625 +1415,46,30,2.7,111.05,1.7,64.365625 +1416,46,30,2.7,111.05,1.7,64.365 +1417,46,30,2.7,111.05,1.7,64.364375 +1418,46,30,2.7,111.05,1.7,64.36375 +1419,46,30,2.7,111.05,1.7,64.363125 +1420,46,30,2.7,111.05,1.7,64.3625 +1421,46,30,2.7,111.05,1.7,64.361875 +1422,46,30,2.7,111.05,1.7,64.36125 +1423,46,30,2.7,111.05,1.7,64.360625 +1424,46,30,2.7,111.05,1.7,64.36 +1425,46,30,2.7,111.05,1.7,64.359375 +1426,46,30,2.7,111.05,1.7,64.35875 +1427,46,30,2.7,111.05,1.7,64.358125 +1428,46,30,2.7,111.05,1.7,64.3575 +1429,46,30,2.7,111.05,1.7,64.356875 +1430,46,30,2.7,111.05,1.7,64.35625 +1431,46,30,2.7,111.05,1.7,64.355625 +1432,46,30,2.7,111.05,1.7,64.355 +1433,46,30,2.7,111.05,1.7,64.354375 +1434,46,30,2.7,111.05,1.7,64.35375 +1435,46,30,2.7,111.05,1.7,64.353125 +1436,46,30,2.7,111.05,1.7,64.3525 +1437,46,30,2.7,111.05,1.7,64.351875 +1438,46,30,2.7,111.05,1.7,64.35125 +1439,46,30,2.7,111.05,1.7,64.350625 +1440,46,30,2.7,111.05,1.7,64.35 +1441,46,30,2.7,111.05,1.7,64.349375 +1442,46,30,2.7,111.05,1.7,64.34875 +1443,46,30,2.7,111.05,1.7,64.348125 +1444,46,30,2.7,111.05,1.7,64.3475 +1445,46,30,2.7,111.05,1.7,64.346875 +1446,46,30,2.7,111.05,1.7,64.34625 +1447,46,30,2.7,111.05,1.7,64.345625 +1448,46,30,2.7,111.05,1.7,64.345 +1449,46,30,2.7,111.05,1.7,64.344375 +1450,46,30,2.7,111.05,1.7,64.34375 +1451,46,30,2.7,111.05,1.7,64.343125 +1452,46,30,2.7,111.05,1.7,64.3425 +1453,46,30,2.7,111.05,1.7,64.341875 +1454,46,30,2.7,111.05,1.7,64.34125 +1455,46,30,2.7,111.05,1.7,64.340625 +1456,46,30,2.7,111.05,1.7,64.34 +1457,46,30,2.7,111.05,1.7,64.339375 +1458,46,30,2.7,111.05,1.7,64.33875 +1459,46,30,2.7,111.05,1.7,64.338125 +1460,46,30,2.7,111.05,1.7,64.3375 +1461,46,30,2.7,111.05,1.7,64.336875 +1462,46,30,2.7,111.05,1.7,64.33625 +1463,46,30,2.7,111.05,1.7,64.335625 +1464,46,30,2.7,111.05,1.7,64.335 +1465,46,30,2.7,111.05,1.7,64.334375 +1466,46,30,2.7,111.05,1.7,64.33375 +1467,46,30,2.7,111.05,1.7,64.333125 +1468,46,30,2.7,111.05,1.7,64.3325 +1469,46,30,2.7,111.05,1.7,64.331875 +1470,46,30,2.7,111.05,1.7,64.33125 +1471,46,30,2.7,111.05,1.7,64.330625 +1472,46,30,2.7,111.05,1.7,64.33 +1473,46,30,2.7,111.05,1.7,64.329375 +1474,46,30,2.7,111.05,1.7,64.32875 +1475,46,30,2.7,111.05,1.7,64.328125 +1476,46,30,2.7,111.05,1.7,64.3275 +1477,46,30,2.7,111.05,1.7,64.326875 +1478,46,30,2.7,111.05,1.7,64.32625 +1479,46,30,2.7,111.05,1.7,64.325625 +1480,46,30,2.7,111.05,1.7,64.325 +1481,46,30,2.7,111.05,1.7,64.324375 +1482,46,30,2.7,111.05,1.7,64.32375 +1483,46,30,2.7,111.05,1.7,64.323125 +1484,46,30,2.7,111.05,1.7,64.3225 +1485,46,30,2.7,111.05,1.7,64.321875 +1486,46,30,2.7,111.05,1.7,64.32125 +1487,46,30,2.7,111.05,1.7,64.320625 +1488,46,30,2.7,111.05,1.7,64.32 +1489,46,30,2.7,111.05,1.7,64.319375 +1490,46,30,2.6,111.05,1.7,64.31875 +1491,46,30,2.6,111.05,1.7,64.318125 +1492,46,30,2.6,111.05,1.7,64.3175 +1493,46,30,2.6,111.05,1.7,64.316875 +1494,46,30,2.6,111.05,1.7,64.31625 +1495,46,30,2.6,111.05,1.7,64.315625 +1496,46,30,2.6,111.05,1.7,64.315 +1497,46,30,2.6,111.05,1.7,64.314375 +1498,46,30,2.6,111.05,1.7,64.31375 +1499,46,30,2.6,111.05,1.7,64.313125 +1500,46,30,2.6,111.05,1.7,64.3125 +1501,46,30,2.6,111.05,1.7,64.311875 +1502,46,30,2.6,111.05,1.7,64.31125 +1503,46,30,2.6,111.05,1.7,64.310625 +1504,46,30,2.6,111.05,1.7,64.31 +1505,46,30,2.6,111.05,1.7,64.309375 +1506,46,30,2.6,111.05,1.7,64.30875 +1507,46,30,2.6,111.05,1.7,64.308125 +1508,46,30,2.6,111.05,1.7,64.3075 +1509,46,30,2.6,111.05,1.7,64.306875 +1510,46,30,2.6,111.05,1.7,64.30625 +1511,46,30,2.6,111.05,1.7,64.305625 +1512,46,30,2.6,111.05,1.7,64.305 +1513,46,30,2.6,111.05,1.7,64.304375 +1514,46,30,2.6,111.05,1.7,64.30375 +1515,46,30,2.6,111.05,1.7,64.303125 +1516,46,30,2.6,111.05,1.7,64.3025 +1517,46,30,2.6,111.05,1.7,64.301875 +1518,46,30,2.6,111.05,1.7,64.30125 +1519,46,30,2.6,111.05,1.7,64.300625 +1520,46,30,2.6,111.05,1.7,64.3 +1521,46,30,2.6,111.05,1.7,64.299375 +1522,46,30,2.6,111.05,1.7,64.29875 +1523,46,30,2.6,111.05,1.7,64.298125 +1524,46,30,2.6,111.05,1.7,64.2975 +1525,46,30,2.6,111.05,1.7,64.296875 +1526,46,30,2.6,111.05,1.7,64.29625 +1527,46,30,2.6,111.05,1.7,64.295625 +1528,46,30,2.6,111.05,1.7,64.295 +1529,46,30,2.6,111.05,1.7,64.294375 +1530,46,30,2.6,111.05,1.7,64.29375 +1531,46,30,2.6,111.05,1.7,64.293125 +1532,46,30,2.6,111.05,1.7,64.2925 +1533,46,30,2.6,111.05,1.7,64.291875 +1534,46,30,2.6,111.05,1.7,64.29125 +1535,46,30,2.6,111.05,1.7,64.290625 +1536,46,30,2.6,111.05,1.7,64.29 +1537,46,30,2.6,111.05,1.7,64.289375 +1538,46,30,2.6,111.05,1.7,64.28875 +1539,46,30,2.6,111.05,1.7,64.288125 +1540,46,30,2.6,111.05,1.7,64.2875 +1541,46,30,2.6,111.05,1.7,64.286875 +1542,46,30,2.6,111.05,1.7,64.28625 +1543,46,30,2.6,111.05,1.7,64.285625 +1544,46,30,2.6,111.05,1.7,64.285 +1545,46,30,2.6,111.05,1.7,64.284375 +1546,46,30,2.6,111.05,1.7,64.28375 +1547,46,30,2.6,111.05,1.7,64.283125 +1548,46,30,2.6,111.05,1.7,64.2825 +1549,46,30,2.6,111.05,1.7,64.281875 +1550,46,30,2.6,111.05,1.7,64.28125 +1551,46,30,2.6,111.05,1.7,64.280625 +1552,46,30,2.6,111.05,1.7,64.28 +1553,46,30,2.6,111.05,1.7,64.279375 +1554,46,30,2.6,111.05,1.7,64.27875 +1555,46,30,2.6,111.05,1.7,64.278125 +1556,46,30,2.6,111.05,1.7,64.2775 +1557,46,30,2.6,111.05,1.7,64.276875 +1558,46,30,2.6,111.05,1.7,64.27625 +1559,46,30,2.6,111.05,1.7,64.275625 +1560,46,30,2.6,111.05,1.7,64.275 +1561,46,30,2.6,111.05,1.7,64.274375 +1562,46,30,2.6,111.05,1.7,64.27375 +1563,46,30,2.6,111.05,1.7,64.273125 +1564,46,30,2.6,111.05,1.7,64.2725 +1565,46,30,2.6,111.05,1.7,64.271875 +1566,46,30,2.6,111.05,1.7,64.27125 +1567,46,30,2.6,111.05,1.7,64.270625 +1568,46,30,2.6,111.05,1.7,64.27 +1569,46,30,2.6,111.05,1.7,64.269375 +1570,46,30,2.6,111.05,1.7,64.26875 +1571,46,30,2.6,111.05,1.7,64.268125 +1572,46,30,2.6,111.05,1.7,64.2675 +1573,46,30,2.6,111.05,1.7,64.266875 +1574,46,30,2.6,111.05,1.7,64.26625 +1575,46,30,2.6,111.05,1.7,64.265625 +1576,46,30,2.6,111.05,1.7,64.265 +1577,46,30,2.6,111.05,1.7,64.264375 +1578,46,30,2.6,111.05,1.7,64.26375 +1579,46,30,2.6,111.05,1.7,64.263125 +1580,46,30,2.6,111.05,1.7,64.2625 +1581,46,30,2.6,111.05,1.7,64.261875 +1582,46,30,2.6,111.05,1.7,64.26125 +1583,46,30,2.6,111.05,1.7,64.260625 +1584,46,30,2.6,111.05,1.7,64.26 +1585,46,30,2.6,111.05,1.7,64.259375 +1586,46,30,2.6,111.05,1.7,64.25875 +1587,46,30,2.6,111.05,1.7,64.258125 +1588,46,30,2.6,111.05,1.7,64.2575 +1589,46,30,2.6,111.05,1.7,64.256875 +1590,46,30,2.6,111.05,1.7,64.25625 +1591,46,30,2.6,111.05,1.7,64.255625 +1592,46,30,2.6,111.05,1.7,64.255 +1593,46,30,2.6,111.05,1.7,64.254375 +1594,46,30,2.6,111.05,1.7,64.25375 +1595,46,30,2.6,111.05,1.7,64.253125 +1596,46,30,2.6,111.05,1.7,64.2525 +1597,46,30,2.6,111.05,1.7,64.251875 +1598,46,30,2.6,111.05,1.7,64.25125 +1599,46,30,2.6,111.05,1.7,64.250625 +1600,46,30,2.6,111.05,1.7,64.25 +1601,46,30,2.6,111.05,1.7,64.249375 +1602,46,30,2.6,111.05,1.7,64.24875 +1603,46,30,2.6,111.05,1.7,64.248125 +1604,46,30,2.6,111.05,1.7,64.2475 +1605,46,30,2.6,111.05,1.7,64.246875 +1606,46,30,2.6,111.05,1.7,64.24625 +1607,46,30,2.6,111.05,1.7,64.245625 +1608,46,30,2.6,111.05,1.7,64.245 +1609,46,30,2.6,111.05,1.7,64.244375 +1610,46,30,2.6,111.05,1.7,64.24375 +1611,46,30,2.6,111.05,1.7,64.243125 +1612,46,30,2.6,111.05,1.7,64.2425 +1613,46,30,2.6,111.05,1.7,64.241875 +1614,46,30,2.6,111.05,1.7,64.24125 +1615,46,30,2.6,111.05,1.7,64.240625 +1616,46,30,2.6,111.05,1.7,64.24 +1617,46,30,2.6,111.05,1.7,64.239375 +1618,46,30,2.6,111.05,1.7,64.23875 +1619,46,30,2.6,111.05,1.7,64.238125 +1620,46,30,2.6,111.05,1.7,64.2375 +1621,46,30,2.6,111.05,1.7,64.236875 +1622,46,30,2.6,111.05,1.7,64.23625 +1623,46,30,2.6,111.05,1.7,64.235625 +1624,46,30,2.6,111.05,1.7,64.235 +1625,46,30,2.6,111.05,1.7,64.234375 +1626,46,30,2.6,111.05,1.7,64.23375 +1627,46,30,2.6,111.05,1.7,64.233125 +1628,46,30,2.6,111.05,1.7,64.2325 +1629,46,30,2.6,111.05,1.7,64.231875 +1630,46,30,2.6,111.05,1.7,64.23125 +1631,46,30,2.6,111.05,1.7,64.230625 +1632,46,30,2.6,111.05,1.7,64.23 +1633,46,30,2.6,111.05,1.7,64.229375 +1634,46,30,2.6,111.05,1.7,64.22875 +1635,46,30,2.6,111.05,1.7,64.228125 +1636,46,30,2.6,111.05,1.7,64.2275 +1637,46,30,2.6,111.05,1.7,64.226875 +1638,46,30,2.6,111.05,1.7,64.22625 +1639,46,30,2.6,111.05,1.7,64.225625 +1640,46,30,2.6,111.05,1.7,64.225 +1641,46,30,2.6,111.05,1.7,64.224375 +1642,46,30,2.6,111.05,1.7,64.22375 +1643,46,30,2.6,111.05,1.7,64.223125 +1644,46,30,2.6,111.05,1.7,64.2225 +1645,46,30,2.6,111.05,1.7,64.221875 +1646,46,30,2.6,111.05,1.7,64.22125 +1647,46,30,2.6,111.05,1.7,64.220625 +1648,46,30,2.6,111.05,1.7,64.22 +1649,46,30,2.6,111.05,1.7,64.219375 +1650,46,30,2.6,111.05,1.7,64.21875 +1651,46,30,2.6,111.05,1.7,64.218125 +1652,46,30,2.6,111.05,1.7,64.2175 +1653,46,30,2.6,111.05,1.7,64.216875 +1654,46,30,2.6,111.05,1.7,64.21625 +1655,46,30,2.6,111.05,1.7,64.215625 +1656,46,30,2.6,111.05,1.7,64.215 +1657,46,30,2.6,111.05,1.7,64.214375 +1658,46,30,2.6,111.05,1.7,64.21375 +1659,46,30,2.6,111.05,1.7,64.213125 +1660,46,30,2.6,111.05,1.7,64.2125 +1661,46,30,2.6,111.05,1.7,64.211875 +1662,46,30,2.6,111.05,1.7,64.21125 +1663,46,30,2.6,111.05,1.7,64.210625 +1664,46,30,2.6,111.05,1.7,64.21 +1665,46,30,2.6,111.05,1.7,64.209375 +1666,46,30,2.6,111.05,1.7,64.20875 +1667,46,30,2.6,111.05,1.7,64.208125 +1668,46,30,2.6,111.05,1.7,64.2075 +1669,46,30,2.6,111.05,1.7,64.206875 +1670,46,30,2.6,111.05,1.7,64.20625 +1671,46,30,2.6,111.05,1.7,64.205625 +1672,46,30,2.6,111.05,1.7,64.205 +1673,46,30,2.6,111.05,1.7,64.204375 +1674,46,30,2.6,111.05,1.7,64.20375 +1675,46,30,2.6,111.05,1.7,64.203125 +1676,46,30,2.6,111.05,1.7,64.2025 +1677,46,30,2.6,111.05,1.7,64.201875 +1678,46,30,2.6,111.05,1.7,64.20125 +1679,46,30,2.6,111.05,1.7,64.200625 +1680,46,30,2.6,111.05,1.7,64.2 +1681,46,30,2.6,111.05,1.7,64.199375 +1682,46,30,2.6,111.05,1.7,64.19875 +1683,46,30,2.6,111.05,1.7,64.198125 +1684,46,30,2.6,111.05,1.7,64.1975 +1685,46,30,2.6,111.05,1.7,64.196875 +1686,46,30,2.6,111.05,1.7,64.19625 +1687,46,30,2.6,111.05,1.7,64.195625 +1688,46,30,2.6,111.05,1.7,64.195 +1689,46,30,2.6,111.05,1.7,64.194375 +1690,46,30,2.6,111.05,1.7,64.19375 +1691,46,30,2.6,111.05,1.7,64.193125 +1692,46,30,2.6,111.05,1.7,64.1925 +1693,46,30,2.6,111.05,1.7,64.191875 +1694,46,30,2.6,111.05,1.7,64.19125 +1695,46,30,2.6,111.05,1.7,64.190625 +1696,46,30,2.6,111.05,1.7,64.19 +1697,46,30,2.6,111.05,1.7,64.189375 +1698,46,30,2.6,111.05,1.7,64.18875 +1699,46,30,2.6,111.05,1.7,64.188125 +1700,46,30,2.6,111.05,1.7,64.1875 +1701,46,30,2.6,111.05,1.7,64.186875 +1702,46,30,2.6,111.05,1.7,64.18625 +1703,46,30,2.6,111.05,1.7,64.185625 +1704,46,30,2.6,111.05,1.7,64.185 +1705,46,30,2.6,111.05,1.7,64.184375 +1706,46,30,2.6,111.05,1.7,64.18375 +1707,46,30,2.6,111.05,1.7,64.183125 +1708,46,30,2.6,111.05,1.7,64.1825 +1709,46,30,2.6,111.05,1.7,64.181875 +1710,46,30,2.6,111.05,1.7,64.18125 +1711,46,30,2.6,111.05,1.7,64.180625 +1712,46,30,2.6,111.05,1.7,64.18 +1713,46,30,2.6,111.05,1.7,64.179375 +1714,46,30,2.6,111.05,1.7,64.17875 +1715,46,30,2.6,111.05,1.7,64.178125 +1716,46,30,2.6,111.05,1.7,64.1775 +1717,46,30,2.6,111.05,1.7,64.176875 +1718,46,30,2.6,111.05,1.7,64.17625 +1719,46,30,2.6,111.05,1.7,64.175625 +1720,46,30,2.6,111.05,1.7,64.175 +1721,46,30,2.6,111.05,1.7,64.174375 +1722,46,30,2.6,111.05,1.7,64.17375 +1723,46,30,2.6,111.05,1.7,64.173125 +1724,46,30,2.6,111.05,1.7,64.1725 +1725,46,30,2.6,111.05,1.7,64.171875 +1726,46,30,2.6,111.05,1.7,64.17125 +1727,46,30,2.6,111.05,1.7,64.170625 +1728,46,30,2.6,111.05,1.7,64.17 +1729,46,30,2.6,111.05,1.7,64.169375 +1730,46,30,2.6,111.05,1.7,64.16875 +1731,46,30,2.6,111.05,1.7,64.168125 +1732,46,30,2.6,111.05,1.7,64.1675 +1733,46,30,2.6,111.05,1.7,64.166875 +1734,46,30,2.6,111.05,1.7,64.16625 +1735,46,30,2.6,111.05,1.7,64.165625 +1736,46,30,2.6,111.05,1.7,64.165 +1737,46,30,2.6,111.05,1.7,64.164375 +1738,46,30,2.6,111.05,1.7,64.16375 +1739,46,30,2.6,111.05,1.7,64.163125 +1740,46,30,2.6,111.05,1.7,64.1625 +1741,46,30,2.6,111.05,1.7,64.161875 +1742,46,30,2.6,111.05,1.7,64.16125 +1743,46,30,2.6,111.05,1.7,64.160625 +1744,46,30,2.6,111.05,1.7,64.16 +1745,46,30,2.6,111.05,1.7,64.159375 +1746,46,30,2.6,111.05,1.7,64.15875 +1747,46,30,2.6,111.05,1.7,64.158125 +1748,46,30,2.6,111.05,1.7,64.1575 +1749,46,30,2.6,111.05,1.7,64.156875 +1750,46,30,2.6,111.05,1.7,64.15625 +1751,46,30,2.6,111.05,1.7,64.155625 +1752,46,30,2.6,111.05,1.7,64.155 +1753,46,30,2.6,111.05,1.7,64.154375 +1754,46,30,2.6,111.05,1.7,64.15375 +1755,46,30,2.6,111.05,1.7,64.153125 +1756,46,30,2.6,111.05,1.7,64.1525 +1757,46,30,2.6,111.05,1.7,64.151875 +1758,46,30,2.6,111.05,1.7,64.15125 +1759,46,30,2.6,111.05,1.7,64.150625 +1760,46,30,2.6,111.05,1.7,64.15 +1761,46,30,2.6,111.05,1.7,64.149375 +1762,46,30,2.6,111.05,1.7,64.14875 +1763,46,30,2.6,111.05,1.7,64.148125 +1764,46,30,2.6,111.05,1.7,64.1475 +1765,46,30,2.6,111.05,1.7,64.146875 +1766,46,30,2.6,111.05,1.7,64.14625 +1767,46,30,2.6,111.05,1.7,64.145625 +1768,46,30,2.6,111.05,1.7,64.145 +1769,46,30,2.6,111.05,1.7,64.144375 +1770,46,30,2.6,111.05,1.7,64.14375 +1771,46,30,2.6,111.05,1.7,64.143125 +1772,46,30,2.6,111.05,1.7,64.1425 +1773,46,30,2.6,111.05,1.7,64.141875 +1774,46,30,2.6,111.05,1.7,64.14125 +1775,46,30,2.6,111.05,1.7,64.140625 +1776,46,30,2.6,111.05,1.7,64.14 +1777,46,30,2.6,111.05,1.7,64.139375 +1778,46,30,2.6,111.05,1.7,64.13875 +1779,46,30,2.6,111.05,1.7,64.138125 +1780,46,30,2.6,111.05,1.7,64.1375 +1781,46,30,2.6,111.05,1.7,64.136875 +1782,46,30,2.6,111.05,1.7,64.13625 +1783,46,30,2.6,111.05,1.7,64.135625 +1784,46,30,2.6,111.05,1.7,64.135 +1785,46,30,2.6,111.05,1.7,64.134375 +1786,46,30,2.6,111.05,1.7,64.13375 +1787,46,30,2.6,111.05,1.7,64.133125 +1788,46,30,2.6,111.05,1.7,64.1325 +1789,46,30,2.6,111.05,1.7,64.131875 +1790,46,30,2.6,111.05,1.7,64.13125 +1791,46,30,2.6,111.05,1.7,64.130625 +1792,46,30,2.6,111.05,1.7,64.13 +1793,46,30,2.6,111.05,1.7,64.129375 +1794,46,30,2.6,111.05,1.7,64.12875 +1795,46,30,2.6,111.05,1.7,64.128125 +1796,46,30,2.6,111.05,1.7,64.1275 +1797,46,30,2.6,111.05,1.7,64.126875 +1798,46,30,2.6,111.05,1.7,64.12625 +1799,46,30,2.6,111.05,1.7,64.125625 +1800,46,30,2.6,111.05,1.7,64.125 +1801,46,30,2.6,111.05,1.7,64.124375 +1802,46,30,2.6,111.05,1.7,64.12375 +1803,46,30,2.6,111.05,1.7,64.123125 +1804,46,30,2.6,111.05,1.7,64.1225 +1805,46,30,2.6,111.05,1.7,64.121875 +1806,46,30,2.6,111.05,1.7,64.12125 +1807,46,30,2.6,111.05,1.7,64.120625 +1808,46,30,2.6,111.05,1.7,64.12 +1809,46,30,2.6,111.05,1.7,64.119375 +1810,46,30,2.6,111.05,1.7,64.11875 +1811,46,30,2.6,111.05,1.7,64.118125 +1812,46,30,2.6,111.05,1.7,64.1175 +1813,46,30,2.6,111.05,1.7,64.116875 +1814,46,30,2.6,111.05,1.7,64.11625 +1815,46,30,2.6,111.05,1.7,64.115625 +1816,46,30,2.6,111.05,1.7,64.115 +1817,46,30,2.6,111.05,1.7,64.114375 +1818,46,30,2.6,111.05,1.7,64.11375 +1819,46,30,2.6,111.05,1.7,64.113125 +1820,46,30,2.6,111.05,1.7,64.1125 +1821,46,30,2.6,111.05,1.7,64.111875 +1822,46,30,2.6,111.05,1.7,64.11125 +1823,46,30,2.6,111.05,1.7,64.110625 +1824,46,30,2.6,111.05,1.7,64.11 +1825,46,30,2.6,111.05,1.7,64.109375 +1826,46,30,2.6,111.05,1.7,64.10875 +1827,46,30,2.6,111.05,1.7,64.108125 +1828,46,30,2.6,111.05,1.7,64.1075 +1829,46,30,2.6,111.05,1.7,64.106875 +1830,46,30,2.6,111.05,1.7,64.10625 +1831,46,30,2.6,111.05,1.7,64.105625 +1832,46,30,2.6,111.05,1.7,64.105 +1833,46,30,2.6,111.05,1.7,64.104375 +1834,46,30,2.6,111.05,1.7,64.10375 +1835,46,30,2.6,111.05,1.7,64.103125 +1836,46,30,2.6,111.05,1.7,64.1025 +1837,46,30,2.6,111.05,1.7,64.101875 +1838,46,30,2.6,111.05,1.7,64.10125 +1839,46,30,2.6,111.05,1.7,64.100625 +1840,46,30,2.6,111.05,1.7,64.1 +1841,46,30,2.6,111.05,1.7,64.099375 +1842,46,30,2.6,111.05,1.7,64.09875 +1843,46,30,2.6,111.05,1.7,64.098125 +1844,46,30,2.6,111.05,1.7,64.0975 +1845,46,30,2.6,111.05,1.7,64.096875 +1846,46,30,2.6,111.05,1.7,64.09625 +1847,46,30,2.6,111.05,1.7,64.095625 +1848,46,30,2.6,111.05,1.7,64.095 +1849,46,30,2.6,111.05,1.7,64.094375 +1850,46,30,2.6,111.05,1.7,64.09375 +1851,46,30,2.6,111.05,1.7,64.093125 +1852,46,30,2.6,111.05,1.7,64.0925 +1853,46,30,2.6,111.05,1.7,64.091875 +1854,46,30,2.6,111.05,1.7,64.09125 +1855,46,30,2.6,111.05,1.7,64.090625 +1856,46,30,2.6,111.05,1.7,64.09 +1857,46,30,2.6,111.05,1.7,64.089375 +1858,46,30,2.6,111.05,1.7,64.08875 +1859,46,30,2.6,111.05,1.7,64.088125 +1860,46,30,2.6,111.05,1.7,64.0875 +1861,46,30,2.6,111.05,1.7,64.086875 +1862,46,30,2.6,111.05,1.7,64.08625 +1863,46,30,2.6,111.05,1.7,64.085625 +1864,46,30,2.6,111.05,1.7,64.085 +1865,46,30,2.6,111.05,1.7,64.084375 +1866,46,30,2.6,111.05,1.7,64.08375 +1867,46,30,2.6,111.05,1.7,64.083125 +1868,46,30,2.6,111.05,1.7,64.0825 +1869,46,30,2.6,111.05,1.7,64.081875 +1870,46,30,2.6,111.05,1.7,64.08125 +1871,46,30,2.6,111.05,1.7,64.080625 +1872,46,30,2.6,111.05,1.7,64.08 +1873,46,30,2.6,111.05,1.7,64.079375 +1874,46,30,2.6,111.05,1.7,64.07875 +1875,46,30,2.6,111.05,1.7,64.078125 +1876,46,30,2.6,111.05,1.7,64.0775 +1877,46,30,2.6,111.05,1.7,64.076875 +1878,46,30,2.6,111.05,1.7,64.07625 +1879,46,30,2.6,111.05,1.7,64.075625 +1880,46,30,2.6,111.05,1.7,64.075 +1881,46,30,2.6,111.05,1.7,64.074375 +1882,46,30,2.6,111.05,1.7,64.07375 +1883,46,30,2.6,111.05,1.7,64.073125 +1884,46,30,2.6,111.05,1.7,64.0725 +1885,46,30,2.6,111.05,1.7,64.071875 +1886,46,30,2.6,111.05,1.7,64.07125 +1887,46,30,2.6,111.05,1.7,64.070625 +1888,46,30,2.6,111.05,1.7,64.07 +1889,46,30,2.6,111.05,1.7,64.069375 +1890,46,30,2.6,111.05,1.7,64.06875 +1891,46,30,2.6,111.05,1.7,64.068125 +1892,46,30,2.6,111.05,1.7,64.0675 +1893,46,30,2.6,111.05,1.7,64.066875 +1894,46,30,2.6,111.05,1.7,64.06625 +1895,46,30,2.6,111.05,1.7,64.065625 +1896,46,30,2.6,111.05,1.7,64.065 +1897,46,30,2.6,111.05,1.7,64.064375 +1898,46,30,2.6,111.05,1.7,64.06375 +1899,46,30,2.6,111.05,1.7,64.063125 +1900,46,30,2.6,111.05,1.7,64.0625 +1901,46,30,2.6,111.05,1.7,64.061875 +1902,46,30,2.6,111.05,1.7,64.06125 +1903,46,30,2.6,111.05,1.7,64.060625 +1904,46,30,2.6,111.05,1.7,64.06 +1905,46,30,2.6,111.05,1.7,64.059375 +1906,46,30,2.6,111.05,1.7,64.05875 +1907,46,30,2.6,111.05,1.7,64.058125 +1908,46,30,2.6,111.05,1.7,64.0575 +1909,46,30,2.6,111.05,1.7,64.056875 +1910,46,30,2.6,111.05,1.7,64.05625 +1911,46,30,2.6,111.05,1.7,64.055625 +1912,46,30,2.6,111.05,1.7,64.055 +1913,46,30,2.6,111.05,1.7,64.054375 +1914,46,30,2.6,111.05,1.7,64.05375 +1915,46,30,2.6,111.05,1.7,64.053125 +1916,46,30,2.6,111.05,1.7,64.0525 +1917,46,30,2.6,111.05,1.7,64.051875 +1918,46,30,2.6,111.05,1.7,64.05125 +1919,46,30,2.6,111.05,1.7,64.050625 +1920,46,30,2.6,111.05,1.7,64.05 +1921,46,30,2.6,111.05,1.7,64.049375 +1922,46,30,2.6,111.05,1.7,64.04875 +1923,46,30,2.6,111.05,1.7,64.048125 +1924,46,30,2.6,111.05,1.7,64.0475 +1925,46,30,2.6,111.05,1.7,64.046875 +1926,46,30,2.6,111.05,1.7,64.04625 +1927,46,30,2.6,111.05,1.7,64.045625 +1928,46,30,2.6,111.05,1.7,64.045 +1929,46,30,2.6,111.05,1.7,64.044375 +1930,46,30,2.6,111.05,1.7,64.04375 +1931,46,30,2.6,111.05,1.7,64.043125 +1932,46,30,2.6,111.05,1.7,64.0425 +1933,46,30,2.6,111.05,1.7,64.041875 +1934,46,30,2.6,111.05,1.7,64.04125 +1935,46,30,2.6,111.05,1.7,64.040625 +1936,46,30,2.6,111.05,1.7,64.04 +1937,46,30,2.6,111.05,1.7,64.039375 +1938,46,30,2.6,111.05,1.7,64.03875 +1939,46,30,2.6,111.05,1.7,64.038125 +1940,46,30,2.6,111.05,1.7,64.0375 +1941,46,30,2.6,111.05,1.7,64.036875 +1942,46,30,2.6,111.05,1.7,64.03625 +1943,46,30,2.6,111.05,1.7,64.035625 +1944,46,30,2.6,111.05,1.7,64.035 +1945,46,30,2.6,111.05,1.7,64.034375 +1946,46,30,2.6,111.05,1.7,64.03375 +1947,46,30,2.6,111.05,1.7,64.033125 +1948,46,30,2.6,111.05,1.7,64.0325 +1949,46,30,2.6,111.05,1.7,64.031875 +1950,46,30,2.6,111.05,1.7,64.03125 +1951,46,30,2.6,111.05,1.7,64.030625 +1952,46,30,2.6,111.05,1.7,64.03 +1953,46,30,2.6,111.05,1.7,64.029375 +1954,46,30,2.6,111.05,1.7,64.02875 +1955,46,30,2.6,111.05,1.7,64.028125 +1956,46,30,2.6,111.05,1.7,64.0275 +1957,46,30,2.6,111.05,1.7,64.026875 +1958,46,30,2.6,111.05,1.7,64.02625 +1959,46,30,2.6,111.05,1.7,64.025625 +1960,46,30,2.6,111.05,1.7,64.025 +1961,46,30,2.6,111.05,1.7,64.024375 +1962,46,30,2.6,111.05,1.7,64.02375 +1963,46,30,2.6,111.05,1.7,64.023125 +1964,46,30,2.6,111.05,1.7,64.0225 +1965,46,30,2.6,111.05,1.7,64.021875 +1966,46,30,2.6,111.05,1.7,64.02125 +1967,46,30,2.6,111.05,1.7,64.020625 +1968,46,30,2.6,111.05,1.7,64.02 +1969,46,30,2.6,111.05,1.7,64.019375 +1970,46,30,2.6,111.05,1.7,64.01875 +1971,46,30,2.6,111.05,1.7,64.018125 +1972,46,30,2.6,111.05,1.7,64.0175 +1973,46,30,2.6,111.05,1.7,64.016875 +1974,46,30,2.6,111.05,1.7,64.01625 +1975,46,30,2.6,111.05,1.7,64.015625 +1976,46,30,2.6,111.05,1.7,64.015 +1977,46,30,2.6,111.05,1.7,64.014375 +1978,46,30,2.6,111.05,1.7,64.01375 +1979,46,30,2.6,111.05,1.7,64.013125 +1980,46,30,2.6,111.05,1.7,64.0125 +1981,46,30,2.6,111.05,1.7,64.011875 +1982,46,30,2.6,111.05,1.7,64.01125 +1983,46,30,2.6,111.05,1.7,64.010625 +1984,46,30,2.6,111.05,1.7,64.01 +1985,46,30,2.6,111.05,1.7,64.009375 +1986,46,30,2.6,111.05,1.7,64.00875 +1987,46,30,2.6,111.05,1.7,64.008125 +1988,46,30,2.6,111.05,1.7,64.0075 +1989,46,30,2.6,111.05,1.7,64.006875 +1990,46,30,2.6,111.05,1.7,64.00625 +1991,46,30,2.6,111.05,1.7,64.005625 +1992,46,30,2.6,111.05,1.7,64.005 +1993,46,30,2.6,111.05,1.7,64.004375 +1994,46,30,2.6,111.05,1.7,64.00375 +1995,46,30,2.6,111.05,1.7,64.003125 +1996,46,30,2.6,111.05,1.7,64.0025 +1997,46,30,2.6,111.05,1.7,64.001875 +1998,46,30,2.6,111.05,1.7,64.00125 +1999,46,30,2.6,111.05,1.7,64.000625 +2000,46,30,2.6,111.05,1.7,64 +2001,46,30,2.6,111.05,1.7,63.99975 +2002,46,30,2.6,111.05,1.7,63.9995 +2003,46,30,2.6,111.05,1.7,63.99925 +2004,46,30,2.6,111.05,1.7,63.999 +2005,46,30,2.6,111.05,1.7,63.99875 +2006,46,30,2.6,111.05,1.7,63.9985 +2007,46,30,2.6,111.05,1.7,63.99825 +2008,46,30,2.6,111.05,1.7,63.998 +2009,46,30,2.6,111.05,1.7,63.99775 +2010,46,30,2.6,111.05,1.7,63.9975 +2011,46,30,2.6,111.05,1.7,63.99725 +2012,46,30,2.6,111.05,1.7,63.997 +2013,46,30,2.6,111.05,1.7,63.99675 +2014,46,30,2.6,111.05,1.7,63.9965 +2015,46,30,2.6,111.05,1.7,63.99625 +2016,46,30,2.6,111.05,1.7,63.996 +2017,46,30,2.6,111.05,1.7,63.99575 +2018,46,30,2.6,111.05,1.7,63.9955 +2019,46,30,2.6,111.05,1.7,63.99525 +2020,46,30,2.6,111.05,1.7,63.995 +2021,46,30,2.6,111.05,1.7,63.99475 +2022,46,30,2.6,111.05,1.7,63.9945 +2023,46,30,2.6,111.05,1.7,63.99425 +2024,46,30,2.6,111.05,1.7,63.994 +2025,46,30,2.6,111.05,1.7,63.99375 +2026,46,30,2.6,111.05,1.7,63.9935 +2027,46,30,2.6,111.05,1.7,63.99325 +2028,46,30,2.6,111.05,1.7,63.993 +2029,46,30,2.6,111.05,1.7,63.99275 +2030,46,30,2.6,111.05,1.7,63.9925 +2031,46,30,2.6,111.05,1.7,63.99225 +2032,46,30,2.6,111.05,1.7,63.992 +2033,46,30,2.6,111.05,1.7,63.99175 +2034,46,30,2.6,111.05,1.7,63.9915 +2035,46,30,2.6,111.05,1.7,63.99125 +2036,46,30,2.6,111.05,1.7,63.991 +2037,46,30,2.6,111.05,1.7,63.99075 +2038,46,30,2.6,111.05,1.7,63.9905 +2039,46,30,2.6,111.05,1.7,63.99025 +2040,46,30,2.6,111.05,1.7,63.99 +2041,46,30,2.6,111.05,1.7,63.98975 +2042,46,30,2.6,111.05,1.7,63.9895 +2043,46,30,2.6,111.05,1.7,63.98925 +2044,46,30,2.6,111.05,1.7,63.989 +2045,46,30,2.6,111.05,1.7,63.98875 +2046,46,30,2.6,111.05,1.7,63.9885 +2047,46,30,2.6,111.05,1.7,63.98825 +2048,46,30,2.6,111.05,1.7,63.988 +2049,46,30,2.6,111.05,1.7,63.98775 +2050,46,30,2.6,111.05,1.7,63.9875 +2051,46,30,2.6,111.05,1.7,63.98725 +2052,46,30,2.6,111.05,1.7,63.987 +2053,46,30,2.6,111.05,1.7,63.98675 +2054,46,30,2.6,111.05,1.7,63.9865 +2055,46,30,2.6,111.05,1.7,63.98625 +2056,46,30,2.6,111.05,1.7,63.986 +2057,46,30,2.6,111.05,1.7,63.98575 +2058,46,30,2.6,111.05,1.7,63.9855 +2059,46,30,2.6,111.05,1.7,63.98525 +2060,46,30,2.6,111.05,1.7,63.985 +2061,46,30,2.6,111.05,1.7,63.98475 +2062,46,30,2.6,111.05,1.7,63.9845 +2063,46,30,2.6,111.05,1.7,63.98425 +2064,46,30,2.6,111.05,1.7,63.984 +2065,46,30,2.6,111.05,1.7,63.98375 +2066,46,30,2.6,111.05,1.7,63.9835 +2067,46,30,2.6,111.05,1.7,63.98325 +2068,46,30,2.6,111.05,1.7,63.983 +2069,46,30,2.6,111.05,1.7,63.98275 +2070,46,30,2.6,111.05,1.7,63.9825 +2071,46,30,2.6,111.05,1.7,63.98225 +2072,46,30,2.6,111.05,1.7,63.982 +2073,46,30,2.6,111.05,1.7,63.98175 +2074,46,30,2.6,111.05,1.7,63.9815 +2075,46,30,2.6,111.05,1.7,63.98125 +2076,46,30,2.6,111.05,1.7,63.981 +2077,46,30,2.6,111.05,1.7,63.98075 +2078,46,30,2.6,111.05,1.7,63.9805 +2079,46,30,2.6,111.05,1.7,63.98025 +2080,46,30,2.6,111.05,1.7,63.98 +2081,46,30,2.6,111.05,1.7,63.97975 +2082,46,30,2.6,111.05,1.7,63.9795 +2083,46,30,2.6,111.05,1.7,63.97925 +2084,46,30,2.6,111.05,1.7,63.979 +2085,46,30,2.6,111.05,1.7,63.97875 +2086,46,30,2.6,111.05,1.7,63.9785 +2087,46,30,2.6,111.05,1.7,63.97825 +2088,46,30,2.6,111.05,1.7,63.978 +2089,46,30,2.6,111.05,1.7,63.97775 +2090,46,30,2.6,111.05,1.7,63.9775 +2091,46,30,2.6,111.05,1.7,63.97725 +2092,46,30,2.6,111.05,1.7,63.977 +2093,46,30,2.6,111.05,1.7,63.97675 +2094,46,30,2.6,111.05,1.7,63.9765 +2095,46,30,2.6,111.05,1.7,63.97625 +2096,46,30,2.6,111.05,1.7,63.976 +2097,46,30,2.6,111.05,1.7,63.97575 +2098,46,30,2.6,111.05,1.7,63.9755 +2099,46,30,2.6,111.05,1.7,63.97525 +2100,46,30,2.6,111.05,1.7,63.975 +2101,46,30,2.6,111.05,1.7,63.97475 +2102,46,30,2.6,111.05,1.7,63.9745 +2103,46,30,2.6,111.05,1.7,63.97425 +2104,46,30,2.6,111.05,1.7,63.974 +2105,46,30,2.6,111.05,1.7,63.97375 +2106,46,30,2.6,111.05,1.7,63.9735 +2107,46,30,2.6,111.05,1.7,63.97325 +2108,46,30,2.6,111.05,1.7,63.973 +2109,46,30,2.6,111.05,1.7,63.97275 +2110,46,30,2.6,111.05,1.7,63.9725 +2111,46,30,2.6,111.05,1.7,63.97225 +2112,46,30,2.6,111.05,1.7,63.972 +2113,46,30,2.6,111.05,1.7,63.97175 +2114,46,30,2.6,111.05,1.7,63.9715 +2115,46,30,2.6,111.05,1.7,63.97125 +2116,46,30,2.6,111.05,1.7,63.971 +2117,46,30,2.6,111.05,1.7,63.97075 +2118,46,30,2.6,111.05,1.7,63.9705 +2119,46,30,2.6,111.05,1.7,63.97025 +2120,46,30,2.6,111.05,1.7,63.97 +2121,46,30,2.6,111.05,1.7,63.96975 +2122,46,30,2.6,111.05,1.7,63.9695 +2123,46,30,2.6,111.05,1.7,63.96925 +2124,46,30,2.6,111.05,1.7,63.969 +2125,46,30,2.6,111.05,1.7,63.96875 +2126,46,30,2.6,111.05,1.7,63.9685 +2127,46,30,2.6,111.05,1.7,63.96825 +2128,46,30,2.6,111.05,1.7,63.968 +2129,46,30,2.6,111.05,1.7,63.96775 +2130,46,30,2.6,111.05,1.7,63.9675 +2131,46,30,2.6,111.05,1.7,63.96725 +2132,46,30,2.6,111.05,1.7,63.967 +2133,46,30,2.6,111.05,1.7,63.96675 +2134,46,30,2.6,111.05,1.7,63.9665 +2135,46,30,2.6,111.05,1.7,63.96625 +2136,46,30,2.6,111.05,1.7,63.966 +2137,46,30,2.6,111.05,1.7,63.96575 +2138,46,30,2.6,111.05,1.7,63.9655 +2139,46,30,2.6,111.05,1.7,63.96525 +2140,46,30,2.6,111.05,1.7,63.965 +2141,46,30,2.6,111.05,1.7,63.96475 +2142,46,30,2.6,111.05,1.7,63.9645 +2143,46,30,2.6,111.05,1.7,63.96425 +2144,46,30,2.6,111.05,1.7,63.964 +2145,46,30,2.6,111.05,1.7,63.96375 +2146,46,30,2.6,111.05,1.7,63.9635 +2147,46,30,2.6,111.05,1.7,63.96325 +2148,46,30,2.6,111.05,1.7,63.963 +2149,46,30,2.6,111.05,1.7,63.96275 +2150,46,30,2.6,111.05,1.7,63.9625 +2151,46,30,2.6,111.05,1.7,63.96225 +2152,46,30,2.6,111.05,1.7,63.962 +2153,46,30,2.6,111.05,1.7,63.96175 +2154,46,30,2.6,111.05,1.7,63.9615 +2155,46,30,2.6,111.05,1.7,63.96125 +2156,46,30,2.6,111.05,1.7,63.961 +2157,46,30,2.6,111.05,1.7,63.96075 +2158,46,30,2.6,111.05,1.7,63.9605 +2159,46,30,2.6,111.05,1.7,63.96025 +2160,46,30,2.6,111.05,1.7,63.96 +2161,46,30,2.6,111.05,1.7,63.95975 +2162,46,30,2.6,111.05,1.7,63.9595 +2163,46,30,2.6,111.05,1.7,63.95925 +2164,46,30,2.6,111.05,1.7,63.959 +2165,46,30,2.6,111.05,1.7,63.95875 +2166,46,30,2.6,111.05,1.7,63.9585 +2167,46,30,2.6,111.05,1.7,63.95825 +2168,46,30,2.6,111.05,1.7,63.958 +2169,46,30,2.6,111.05,1.7,63.95775 +2170,46,30,2.6,111.05,1.7,63.9575 +2171,46,30,2.6,111.05,1.7,63.95725 +2172,46,30,2.6,111.05,1.7,63.957 +2173,46,30,2.6,111.05,1.7,63.95675 +2174,46,30,2.6,111.05,1.7,63.9565 +2175,46,30,2.6,111.05,1.7,63.95625 +2176,46,30,2.6,111.05,1.7,63.956 +2177,46,30,2.6,111.05,1.7,63.95575 +2178,46,30,2.6,111.05,1.7,63.9555 +2179,46,30,2.6,111.05,1.7,63.95525 +2180,46,30,2.6,111.05,1.7,63.955 +2181,46,30,2.6,111.05,1.7,63.95475 +2182,46,30,2.6,111.05,1.7,63.9545 +2183,46,30,2.6,111.05,1.7,63.95425 +2184,46,30,2.6,111.05,1.7,63.954 +2185,46,30,2.6,111.05,1.7,63.95375 +2186,46,30,2.6,111.05,1.7,63.9535 +2187,46,30,2.6,111.05,1.7,63.95325 +2188,46,30,2.6,111.05,1.7,63.953 +2189,46,30,2.6,111.05,1.7,63.95275 +2190,46,30,2.6,111.05,1.7,63.9525 +2191,46,30,2.6,111.05,1.7,63.95225 +2192,46,30,2.6,111.05,1.7,63.952 +2193,46,30,2.6,111.05,1.7,63.95175 +2194,46,30,2.6,111.05,1.7,63.9515 +2195,46,30,2.6,111.05,1.7,63.95125 +2196,46,30,2.6,111.05,1.7,63.951 +2197,46,30,2.6,111.05,1.7,63.95075 +2198,46,30,2.6,111.05,1.7,63.9505 +2199,46,30,2.6,111.05,1.7,63.95025 +2200,46,30,2.6,111.05,1.7,63.95 +2201,46,30,2.6,111.05,1.7,63.94975 +2202,46,30,2.6,111.05,1.7,63.9495 +2203,46,30,2.6,111.05,1.7,63.94925 +2204,46,30,2.6,111.05,1.7,63.949 +2205,46,30,2.6,111.05,1.7,63.94875 +2206,46,30,2.6,111.05,1.7,63.9485 +2207,46,30,2.6,111.05,1.7,63.94825 +2208,46,30,2.6,111.05,1.7,63.948 +2209,46,30,2.6,111.05,1.7,63.94775 +2210,46,30,2.6,111.05,1.7,63.9475 +2211,46,30,2.6,111.05,1.7,63.94725 +2212,46,30,2.6,111.05,1.7,63.947 +2213,46,30,2.6,111.05,1.7,63.94675 +2214,46,30,2.6,111.05,1.7,63.9465 +2215,46,30,2.6,111.05,1.7,63.94625 +2216,46,30,2.6,111.05,1.7,63.946 +2217,46,30,2.6,111.05,1.7,63.94575 +2218,46,30,2.6,111.05,1.7,63.9455 +2219,46,30,2.6,111.05,1.7,63.94525 +2220,46,30,2.6,111.05,1.7,63.945 +2221,46,30,2.6,111.05,1.7,63.94475 +2222,46,30,2.6,111.05,1.7,63.9445 +2223,46,30,2.6,111.05,1.7,63.94425 +2224,46,30,2.6,111.05,1.7,63.944 +2225,46,30,2.6,111.05,1.7,63.94375 +2226,46,30,2.6,111.05,1.7,63.9435 +2227,46,30,2.6,111.05,1.7,63.94325 +2228,46,30,2.6,111.05,1.7,63.943 +2229,46,30,2.6,111.05,1.7,63.94275 +2230,46,30,2.6,111.05,1.7,63.9425 +2231,46,30,2.6,111.05,1.7,63.94225 +2232,46,30,2.6,111.05,1.7,63.942 +2233,46,30,2.6,111.05,1.7,63.94175 +2234,46,30,2.6,111.05,1.7,63.9415 +2235,46,30,2.6,111.05,1.7,63.94125 +2236,46,30,2.6,111.05,1.7,63.941 +2237,46,30,2.6,111.05,1.7,63.94075 +2238,46,30,2.6,111.05,1.7,63.9405 +2239,46,30,2.6,111.05,1.7,63.94025 +2240,46,30,2.6,111.05,1.7,63.94 +2241,46,30,2.6,111.05,1.7,63.93975 +2242,46,30,2.6,111.05,1.7,63.9395 +2243,46,30,2.6,111.05,1.7,63.93925 +2244,46,30,2.6,111.05,1.7,63.939 +2245,46,30,2.6,111.05,1.7,63.93875 +2246,46,30,2.6,111.05,1.7,63.9385 +2247,46,30,2.6,111.05,1.7,63.93825 +2248,46,30,2.6,111.05,1.7,63.938 +2249,46,30,2.6,111.05,1.7,63.93775 +2250,46,30,2.6,111.05,1.7,63.9375 +2251,46,30,2.6,111.05,1.7,63.93725 +2252,46,30,2.6,111.05,1.7,63.937 +2253,46,30,2.6,111.05,1.7,63.93675 +2254,46,30,2.6,111.05,1.7,63.9365 +2255,46,30,2.6,111.05,1.7,63.93625 +2256,46,30,2.6,111.05,1.7,63.936 +2257,46,30,2.6,111.05,1.7,63.93575 +2258,46,30,2.6,111.05,1.7,63.9355 +2259,46,30,2.6,111.05,1.7,63.93525 +2260,46,30,2.6,111.05,1.7,63.935 +2261,46,30,2.6,111.05,1.7,63.93475 +2262,46,30,2.6,111.05,1.7,63.9345 +2263,46,30,2.6,111.05,1.7,63.93425 +2264,46,30,2.6,111.05,1.7,63.934 +2265,46,30,2.6,111.05,1.7,63.93375 +2266,46,30,2.6,111.05,1.7,63.9335 +2267,46,30,2.6,111.05,1.7,63.93325 +2268,46,30,2.6,111.05,1.7,63.933 +2269,46,30,2.6,111.05,1.7,63.93275 +2270,46,30,2.6,111.05,1.7,63.9325 +2271,46,30,2.6,111.05,1.7,63.93225 +2272,46,30,2.6,111.05,1.7,63.932 +2273,46,30,2.6,111.05,1.7,63.93175 +2274,46,30,2.6,111.05,1.7,63.9315 +2275,46,30,2.6,111.05,1.7,63.93125 +2276,46,30,2.6,111.05,1.7,63.931 +2277,46,30,2.6,111.05,1.7,63.93075 +2278,46,30,2.6,111.05,1.7,63.9305 +2279,46,30,2.6,111.05,1.7,63.93025 +2280,46,30,2.6,111.05,1.7,63.93 +2281,46,30,2.6,111.05,1.7,63.92975 +2282,46,30,2.6,111.05,1.7,63.9295 +2283,46,30,2.6,111.05,1.7,63.92925 +2284,46,30,2.6,111.05,1.7,63.929 +2285,46,30,2.6,111.05,1.7,63.92875 +2286,46,30,2.6,111.05,1.7,63.9285 +2287,46,30,2.6,111.05,1.7,63.92825 +2288,46,30,2.6,111.05,1.7,63.928 +2289,46,30,2.6,111.05,1.7,63.92775 +2290,46,30,2.6,111.05,1.7,63.9275 +2291,46,30,2.6,111.05,1.7,63.92725 +2292,46,30,2.6,111.05,1.7,63.927 +2293,46,30,2.6,111.05,1.7,63.92675 +2294,46,30,2.6,111.05,1.7,63.9265 +2295,46,30,2.6,111.05,1.7,63.92625 +2296,46,30,2.6,111.05,1.7,63.926 +2297,46,30,2.6,111.05,1.7,63.92575 +2298,46,30,2.6,111.05,1.7,63.9255 +2299,46,30,2.6,111.05,1.7,63.92525 +2300,46,30,2.6,111.05,1.7,63.925 +2301,46,30,2.6,111.05,1.7,63.92475 +2302,46,30,2.6,111.05,1.7,63.9245 +2303,46,30,2.6,111.05,1.7,63.92425 +2304,46,30,2.6,111.05,1.7,63.924 +2305,46,30,2.6,111.05,1.7,63.92375 +2306,46,30,2.6,111.05,1.7,63.9235 +2307,46,30,2.6,111.05,1.7,63.92325 +2308,46,30,2.6,111.05,1.7,63.923 +2309,46,30,2.6,111.05,1.7,63.92275 +2310,46,30,2.6,111.05,1.7,63.9225 +2311,46,30,2.6,111.05,1.7,63.92225 +2312,46,30,2.6,111.05,1.7,63.922 +2313,46,30,2.6,111.05,1.7,63.92175 +2314,46,30,2.6,111.05,1.7,63.9215 +2315,46,30,2.6,111.05,1.7,63.92125 +2316,46,30,2.6,111.05,1.7,63.921 +2317,46,30,2.6,111.05,1.7,63.92075 +2318,46,30,2.6,111.05,1.7,63.9205 +2319,46,30,2.6,111.05,1.7,63.92025 +2320,46,30,2.6,111.05,1.7,63.92 +2321,46,30,2.6,111.05,1.7,63.91975 +2322,46,30,2.6,111.05,1.7,63.9195 +2323,46,30,2.6,111.05,1.7,63.91925 +2324,46,30,2.6,111.05,1.7,63.919 +2325,46,30,2.6,111.05,1.7,63.91875 +2326,46,30,2.6,111.05,1.7,63.9185 +2327,46,30,2.6,111.05,1.7,63.91825 +2328,46,30,2.6,111.05,1.7,63.918 +2329,46,30,2.6,111.05,1.7,63.91775 +2330,46,30,2.6,111.05,1.7,63.9175 +2331,46,30,2.6,111.05,1.7,63.91725 +2332,46,30,2.6,111.05,1.7,63.917 +2333,46,30,2.6,111.05,1.7,63.91675 +2334,46,30,2.6,111.05,1.7,63.9165 +2335,46,30,2.6,111.05,1.7,63.91625 +2336,46,30,2.6,111.05,1.7,63.916 +2337,46,30,2.6,111.05,1.7,63.91575 +2338,46,30,2.6,111.05,1.7,63.9155 +2339,46,30,2.6,111.05,1.7,63.91525 +2340,46,30,2.6,111.05,1.7,63.915 +2341,46,30,2.6,111.05,1.7,63.91475 +2342,46,30,2.6,111.05,1.7,63.9145 +2343,46,30,2.6,111.05,1.7,63.91425 +2344,46,30,2.6,111.05,1.7,63.914 +2345,46,30,2.6,111.05,1.7,63.91375 +2346,46,30,2.6,111.05,1.7,63.9135 +2347,46,30,2.6,111.05,1.7,63.91325 +2348,46,30,2.6,111.05,1.7,63.913 +2349,46,30,2.6,111.05,1.7,63.91275 +2350,46,30,2.6,111.05,1.7,63.9125 +2351,46,30,2.6,111.05,1.7,63.91225 +2352,46,30,2.6,111.05,1.7,63.912 +2353,46,30,2.6,111.05,1.7,63.91175 +2354,46,30,2.6,111.05,1.7,63.9115 +2355,46,30,2.6,111.05,1.7,63.91125 +2356,46,30,2.6,111.05,1.7,63.911 +2357,46,30,2.6,111.05,1.7,63.91075 +2358,46,30,2.6,111.05,1.7,63.9105 +2359,46,30,2.6,111.05,1.7,63.91025 +2360,46,30,2.6,111.05,1.7,63.91 +2361,46,30,2.6,111.05,1.7,63.90975 +2362,46,30,2.6,111.05,1.7,63.9095 +2363,46,30,2.6,111.05,1.7,63.90925 +2364,46,30,2.6,111.05,1.7,63.909 +2365,46,30,2.6,111.05,1.7,63.90875 +2366,46,30,2.6,111.05,1.7,63.9085 +2367,46,30,2.6,111.05,1.7,63.90825 +2368,46,30,2.6,111.05,1.7,63.908 +2369,46,30,2.6,111.05,1.7,63.90775 +2370,46,30,2.6,111.05,1.7,63.9075 +2371,46,30,2.6,111.05,1.7,63.90725 +2372,46,30,2.6,111.05,1.7,63.907 +2373,46,30,2.6,111.05,1.7,63.90675 +2374,46,30,2.6,111.05,1.7,63.9065 +2375,46,30,2.6,111.05,1.7,63.90625 +2376,46,30,2.6,111.05,1.7,63.906 +2377,46,30,2.6,111.05,1.7,63.90575 +2378,46,30,2.6,111.05,1.7,63.9055 +2379,46,30,2.6,111.05,1.7,63.90525 +2380,46,30,2.6,111.05,1.7,63.905 +2381,46,30,2.6,111.05,1.7,63.90475 +2382,46,30,2.6,111.05,1.7,63.9045 +2383,46,30,2.6,111.05,1.7,63.90425 +2384,46,30,2.6,111.05,1.7,63.904 +2385,46,30,2.6,111.05,1.7,63.90375 +2386,46,30,2.6,111.05,1.7,63.9035 +2387,46,30,2.6,111.05,1.7,63.90325 +2388,46,30,2.6,111.05,1.7,63.903 +2389,46,30,2.6,111.05,1.7,63.90275 +2390,46,30,2.6,111.05,1.7,63.9025 +2391,46,30,2.6,111.05,1.7,63.90225 +2392,46,30,2.6,111.05,1.7,63.902 +2393,46,30,2.6,111.05,1.7,63.90175 +2394,46,30,2.6,111.05,1.7,63.9015 +2395,46,30,2.6,111.05,1.7,63.90125 +2396,46,30,2.6,111.05,1.7,63.901 +2397,46,30,2.6,111.05,1.7,63.90075 +2398,46,30,2.6,111.05,1.7,63.9005 +2399,46,30,2.6,111.05,1.7,63.90025 +2400,46,30,2.6,111.05,1.7,63.9 +2401,46,30,2.6,111.05,1.7,63.89975 +2402,46,30,2.6,111.05,1.7,63.8995 +2403,46,30,2.6,111.05,1.7,63.89925 +2404,46,30,2.6,111.05,1.7,63.899 +2405,46,30,2.6,111.05,1.7,63.89875 +2406,46,30,2.6,111.05,1.7,63.8985 +2407,46,30,2.6,111.05,1.7,63.89825 +2408,46,30,2.6,111.05,1.7,63.898 +2409,46,30,2.6,111.05,1.7,63.89775 +2410,46,30,2.6,111.05,1.7,63.8975 +2411,46,30,2.6,111.05,1.7,63.89725 +2412,46,30,2.6,111.05,1.7,63.897 +2413,46,30,2.6,111.05,1.7,63.89675 +2414,46,30,2.6,111.05,1.7,63.8965 +2415,46,30,2.6,111.05,1.7,63.89625 +2416,46,30,2.6,111.05,1.7,63.896 +2417,46,30,2.6,111.05,1.7,63.89575 +2418,46,30,2.6,111.05,1.7,63.8955 +2419,46,30,2.6,111.05,1.7,63.89525 +2420,46,30,2.6,111.05,1.7,63.895 +2421,46,30,2.6,111.05,1.7,63.89475 +2422,46,30,2.6,111.05,1.7,63.8945 +2423,46,30,2.6,111.05,1.7,63.89425 +2424,46,30,2.6,111.05,1.7,63.894 +2425,46,30,2.6,111.05,1.7,63.89375 +2426,46,30,2.6,111.05,1.7,63.8935 +2427,46,30,2.6,111.05,1.7,63.89325 +2428,46,30,2.6,111.05,1.7,63.893 +2429,46,30,2.6,111.05,1.7,63.89275 +2430,46,30,2.6,111.05,1.7,63.8925 +2431,46,30,2.6,111.05,1.7,63.89225 +2432,46,30,2.6,111.05,1.7,63.892 +2433,46,30,2.6,111.05,1.7,63.89175 +2434,46,30,2.6,111.05,1.7,63.8915 +2435,46,30,2.6,111.05,1.7,63.89125 +2436,46,30,2.6,111.05,1.7,63.891 +2437,46,30,2.6,111.05,1.7,63.89075 +2438,46,30,2.6,111.05,1.7,63.8905 +2439,46,30,2.6,111.05,1.7,63.89025 +2440,46,30,2.6,111.05,1.7,63.89 +2441,46,30,2.6,111.05,1.7,63.88975 +2442,46,30,2.6,111.05,1.7,63.8895 +2443,46,30,2.6,111.05,1.7,63.88925 +2444,46,30,2.6,111.05,1.7,63.889 +2445,46,30,2.6,111.05,1.7,63.88875 +2446,46,30,2.6,111.05,1.7,63.8885 +2447,46,30,2.6,111.05,1.7,63.88825 +2448,46,30,2.6,111.05,1.7,63.888 +2449,46,30,2.6,111.05,1.7,63.88775 +2450,46,30,2.6,111.05,1.7,63.8875 +2451,46,30,2.6,111.05,1.7,63.88725 +2452,46,30,2.6,111.05,1.7,63.887 +2453,46,30,2.6,111.05,1.7,63.88675 +2454,46,30,2.6,111.05,1.7,63.8865 +2455,46,30,2.6,111.05,1.7,63.88625 +2456,46,30,2.6,111.05,1.7,63.886 +2457,46,30,2.6,111.05,1.7,63.88575 +2458,46,30,2.6,111.05,1.7,63.8855 +2459,46,30,2.6,111.05,1.7,63.88525 +2460,46,30,2.6,111.05,1.7,63.885 +2461,46,30,2.6,111.05,1.7,63.88475 +2462,46,30,2.6,111.05,1.7,63.8845 +2463,46,30,2.6,111.05,1.7,63.88425 +2464,46,30,2.6,111.05,1.7,63.884 +2465,46,30,2.6,111.05,1.7,63.88375 +2466,46,30,2.6,111.05,1.7,63.8835 +2467,46,30,2.6,111.05,1.7,63.88325 +2468,46,30,2.6,111.05,1.7,63.883 +2469,46,30,2.6,111.05,1.7,63.88275 +2470,46,30,2.6,111.05,1.7,63.8825 +2471,46,30,2.6,111.05,1.7,63.88225 +2472,46,30,2.6,111.05,1.7,63.882 +2473,46,30,2.6,111.05,1.7,63.88175 +2474,46,30,2.6,111.05,1.7,63.8815 +2475,46,30,2.6,111.05,1.7,63.88125 +2476,46,30,2.6,111.05,1.7,63.881 +2477,46,30,2.6,111.05,1.7,63.88075 +2478,46,30,2.6,111.05,1.7,63.8805 +2479,46,30,2.6,111.05,1.7,63.88025 +2480,46,30,2.6,111.05,1.7,63.88 +2481,46,30,2.6,111.05,1.7,63.87975 +2482,46,30,2.6,111.05,1.7,63.8795 +2483,46,30,2.6,111.05,1.7,63.87925 +2484,46,30,2.6,111.05,1.7,63.879 +2485,46,30,2.6,111.05,1.7,63.87875 +2486,46,30,2.6,111.05,1.7,63.8785 +2487,46,30,2.6,111.05,1.7,63.87825 +2488,46,30,2.6,111.05,1.7,63.878 +2489,46,30,2.6,111.05,1.7,63.87775 +2490,46,30,2.5,111.05,1.7,63.8775 +2491,46,30,2.5,111.05,1.7,63.87725 +2492,46,30,2.5,111.05,1.7,63.877 +2493,46,30,2.5,111.05,1.7,63.87675 +2494,46,30,2.5,111.05,1.7,63.8765 +2495,46,30,2.5,111.05,1.7,63.87625 +2496,46,30,2.5,111.05,1.7,63.876 +2497,46,30,2.5,111.05,1.7,63.87575 +2498,46,30,2.5,111.05,1.7,63.8755 +2499,46,30,2.5,111.05,1.7,63.87525 +2500,46,30,2.5,111.05,1.7,63.875 +2501,46,30,2.5,111.05,1.7,63.87475 +2502,46,30,2.5,111.05,1.7,63.8745 +2503,46,30,2.5,111.05,1.7,63.87425 +2504,46,30,2.5,111.05,1.7,63.874 +2505,46,30,2.5,111.05,1.7,63.87375 +2506,46,30,2.5,111.05,1.7,63.8735 +2507,46,30,2.5,111.05,1.7,63.87325 +2508,46,30,2.5,111.05,1.7,63.873 +2509,46,30,2.5,111.05,1.7,63.87275 +2510,46,30,2.5,111.05,1.7,63.8725 +2511,46,30,2.5,111.05,1.7,63.87225 +2512,46,30,2.5,111.05,1.7,63.872 +2513,46,30,2.5,111.05,1.7,63.87175 +2514,46,30,2.5,111.05,1.7,63.8715 +2515,46,30,2.5,111.05,1.7,63.87125 +2516,46,30,2.5,111.05,1.7,63.871 +2517,46,30,2.5,111.05,1.7,63.87075 +2518,46,30,2.5,111.05,1.7,63.8705 +2519,46,30,2.5,111.05,1.7,63.87025 +2520,46,30,2.5,111.05,1.7,63.87 +2521,46,30,2.5,111.05,1.7,63.86975 +2522,46,30,2.5,111.05,1.7,63.8695 +2523,46,30,2.5,111.05,1.7,63.86925 +2524,46,30,2.5,111.05,1.7,63.869 +2525,46,30,2.5,111.05,1.7,63.86875 +2526,46,30,2.5,111.05,1.7,63.8685 +2527,46,30,2.5,111.05,1.7,63.86825 +2528,46,30,2.5,111.05,1.7,63.868 +2529,46,30,2.5,111.05,1.7,63.86775 +2530,46,30,2.5,111.05,1.7,63.8675 +2531,46,30,2.5,111.05,1.7,63.86725 +2532,46,30,2.5,111.05,1.7,63.867 +2533,46,30,2.5,111.05,1.7,63.86675 +2534,46,30,2.5,111.05,1.7,63.8665 +2535,46,30,2.5,111.05,1.7,63.86625 +2536,46,30,2.5,111.05,1.7,63.866 +2537,46,30,2.5,111.05,1.7,63.86575 +2538,46,30,2.5,111.05,1.7,63.8655 +2539,46,30,2.5,111.05,1.7,63.86525 +2540,46,30,2.5,111.05,1.7,63.865 +2541,46,30,2.5,111.05,1.7,63.86475 +2542,46,30,2.5,111.05,1.7,63.8645 +2543,46,30,2.5,111.05,1.7,63.86425 +2544,46,30,2.5,111.05,1.7,63.864 +2545,46,30,2.5,111.05,1.7,63.86375 +2546,46,30,2.5,111.05,1.7,63.8635 +2547,46,30,2.5,111.05,1.7,63.86325 +2548,46,30,2.5,111.05,1.7,63.863 +2549,46,30,2.5,111.05,1.7,63.86275 +2550,46,30,2.5,111.05,1.7,63.8625 +2551,46,30,2.5,111.05,1.7,63.86225 +2552,46,30,2.5,111.05,1.7,63.862 +2553,46,30,2.5,111.05,1.7,63.86175 +2554,46,30,2.5,111.05,1.7,63.8615 +2555,46,30,2.5,111.05,1.7,63.86125 +2556,46,30,2.5,111.05,1.7,63.861 +2557,46,30,2.5,111.05,1.7,63.86075 +2558,46,30,2.5,111.05,1.7,63.8605 +2559,46,30,2.5,111.05,1.7,63.86025 +2560,46,30,2.5,111.05,1.7,63.86 +2561,46,30,2.5,111.05,1.7,63.85975 +2562,46,30,2.5,111.05,1.7,63.8595 +2563,46,30,2.5,111.05,1.7,63.85925 +2564,46,30,2.5,111.05,1.7,63.859 +2565,46,30,2.5,111.05,1.7,63.85875 +2566,46,30,2.5,111.05,1.7,63.8585 +2567,46,30,2.5,111.05,1.7,63.85825 +2568,46,30,2.5,111.05,1.7,63.858 +2569,46,30,2.5,111.05,1.7,63.85775 +2570,46,30,2.5,111.05,1.7,63.8575 +2571,46,30,2.5,111.05,1.7,63.85725 +2572,46,30,2.5,111.05,1.7,63.857 +2573,46,30,2.5,111.05,1.7,63.85675 +2574,46,30,2.5,111.05,1.7,63.8565 +2575,46,30,2.5,111.05,1.7,63.85625 +2576,46,30,2.5,111.05,1.7,63.856 +2577,46,30,2.5,111.05,1.7,63.85575 +2578,46,30,2.5,111.05,1.7,63.8555 +2579,46,30,2.5,111.05,1.7,63.85525 +2580,46,30,2.5,111.05,1.7,63.855 +2581,46,30,2.5,111.05,1.7,63.85475 +2582,46,30,2.5,111.05,1.7,63.8545 +2583,46,30,2.5,111.05,1.7,63.85425 +2584,46,30,2.5,111.05,1.7,63.854 +2585,46,30,2.5,111.05,1.7,63.85375 +2586,46,30,2.5,111.05,1.7,63.8535 +2587,46,30,2.5,111.05,1.7,63.85325 +2588,46,30,2.5,111.05,1.7,63.853 +2589,46,30,2.5,111.05,1.7,63.85275 +2590,46,30,2.5,111.05,1.7,63.8525 +2591,46,30,2.5,111.05,1.7,63.85225 +2592,46,30,2.5,111.05,1.7,63.852 +2593,46,30,2.5,111.05,1.7,63.85175 +2594,46,30,2.5,111.05,1.7,63.8515 +2595,46,30,2.5,111.05,1.7,63.85125 +2596,46,30,2.5,111.05,1.7,63.851 +2597,46,30,2.5,111.05,1.7,63.85075 +2598,46,30,2.5,111.05,1.7,63.8505 +2599,46,30,2.5,111.05,1.7,63.85025 +2600,46,30,2.5,111.05,1.7,63.85 +2601,46,30,2.5,111.05,1.7,63.84975 +2602,46,30,2.5,111.05,1.7,63.8495 +2603,46,30,2.5,111.05,1.7,63.84925 +2604,46,30,2.5,111.05,1.7,63.849 +2605,46,30,2.5,111.05,1.7,63.84875 +2606,46,30,2.5,111.05,1.7,63.8485 +2607,46,30,2.5,111.05,1.7,63.84825 +2608,46,30,2.5,111.05,1.7,63.848 +2609,46,30,2.5,111.05,1.7,63.84775 +2610,46,30,2.5,111.05,1.7,63.8475 +2611,46,30,2.5,111.05,1.7,63.84725 +2612,46,30,2.5,111.05,1.7,63.847 +2613,46,30,2.5,111.05,1.7,63.84675 +2614,46,30,2.5,111.05,1.7,63.8465 +2615,46,30,2.5,111.05,1.7,63.84625 +2616,46,30,2.5,111.05,1.7,63.846 +2617,46,30,2.5,111.05,1.7,63.84575 +2618,46,30,2.5,111.05,1.7,63.8455 +2619,46,30,2.5,111.05,1.7,63.84525 +2620,46,30,2.5,111.05,1.7,63.845 +2621,46,30,2.5,111.05,1.7,63.84475 +2622,46,30,2.5,111.05,1.7,63.8445 +2623,46,30,2.5,111.05,1.7,63.84425 +2624,46,30,2.5,111.05,1.7,63.844 +2625,46,30,2.5,111.05,1.7,63.84375 +2626,46,30,2.5,111.05,1.7,63.8435 +2627,46,30,2.5,111.05,1.7,63.84325 +2628,46,30,2.5,111.05,1.7,63.843 +2629,46,30,2.5,111.05,1.7,63.84275 +2630,46,30,2.5,111.05,1.7,63.8425 +2631,46,30,2.5,111.05,1.7,63.84225 +2632,46,30,2.5,111.05,1.7,63.842 +2633,46,30,2.5,111.05,1.7,63.84175 +2634,46,30,2.5,111.05,1.7,63.8415 +2635,46,30,2.5,111.05,1.7,63.84125 +2636,46,30,2.5,111.05,1.7,63.841 +2637,46,30,2.5,111.05,1.7,63.84075 +2638,46,30,2.5,111.05,1.7,63.8405 +2639,46,30,2.5,111.05,1.7,63.84025 +2640,46,30,2.5,111.05,1.7,63.84 +2641,46,30,2.5,111.05,1.7,63.83975 +2642,46,30,2.5,111.05,1.7,63.8395 +2643,46,30,2.5,111.05,1.7,63.83925 +2644,46,30,2.5,111.05,1.7,63.839 +2645,46,30,2.5,111.05,1.7,63.83875 +2646,46,30,2.5,111.05,1.7,63.8385 +2647,46,30,2.5,111.05,1.7,63.83825 +2648,46,30,2.5,111.05,1.7,63.838 +2649,46,30,2.5,111.05,1.7,63.83775 +2650,46,30,2.5,111.05,1.7,63.8375 +2651,46,30,2.5,111.05,1.7,63.83725 +2652,46,30,2.5,111.05,1.7,63.837 +2653,46,30,2.5,111.05,1.7,63.83675 +2654,46,30,2.5,111.05,1.7,63.8365 +2655,46,30,2.5,111.05,1.7,63.83625 +2656,46,30,2.5,111.05,1.7,63.836 +2657,46,30,2.5,111.05,1.7,63.83575 +2658,46,30,2.5,111.05,1.7,63.8355 +2659,46,30,2.5,111.05,1.7,63.83525 +2660,46,30,2.5,111.05,1.7,63.835 +2661,46,30,2.5,111.05,1.7,63.83475 +2662,46,30,2.5,111.05,1.7,63.8345 +2663,46,30,2.5,111.05,1.7,63.83425 +2664,46,30,2.5,111.05,1.7,63.834 +2665,46,30,2.5,111.05,1.7,63.83375 +2666,46,30,2.5,111.05,1.7,63.8335 +2667,46,30,2.5,111.05,1.7,63.83325 +2668,46,30,2.5,111.05,1.7,63.833 +2669,46,30,2.5,111.05,1.7,63.83275 +2670,46,30,2.5,111.05,1.7,63.8325 +2671,46,30,2.5,111.05,1.7,63.83225 +2672,46,30,2.5,111.05,1.7,63.832 +2673,46,30,2.5,111.05,1.7,63.83175 +2674,46,30,2.5,111.05,1.7,63.8315 +2675,46,30,2.5,111.05,1.7,63.83125 +2676,46,30,2.5,111.05,1.7,63.831 +2677,46,30,2.5,111.05,1.7,63.83075 +2678,46,30,2.5,111.05,1.7,63.8305 +2679,46,30,2.5,111.05,1.7,63.83025 +2680,46,30,2.5,111.05,1.7,63.83 +2681,46,30,2.5,111.05,1.7,63.82975 +2682,46,30,2.5,111.05,1.7,63.8295 +2683,46,30,2.5,111.05,1.7,63.82925 +2684,46,30,2.5,111.05,1.7,63.829 +2685,46,30,2.5,111.05,1.7,63.82875 +2686,46,30,2.5,111.05,1.7,63.8285 +2687,46,30,2.5,111.05,1.7,63.82825 +2688,46,30,2.5,111.05,1.7,63.828 +2689,46,30,2.5,111.05,1.7,63.82775 +2690,46,30,2.5,111.05,1.7,63.8275 +2691,46,30,2.5,111.05,1.7,63.82725 +2692,46,30,2.5,111.05,1.7,63.827 +2693,46,30,2.5,111.05,1.7,63.82675 +2694,46,30,2.5,111.05,1.7,63.8265 +2695,46,30,2.5,111.05,1.7,63.82625 +2696,46,30,2.5,111.05,1.7,63.826 +2697,46,30,2.5,111.05,1.7,63.82575 +2698,46,30,2.5,111.05,1.7,63.8255 +2699,46,30,2.5,111.05,1.7,63.82525 +2700,46,30,2.5,111.05,1.7,63.825 +2701,46,30,2.5,111.05,1.7,63.82475 +2702,46,30,2.5,111.05,1.7,63.8245 +2703,46,30,2.5,111.05,1.7,63.82425 +2704,46,30,2.5,111.05,1.7,63.824 +2705,46,30,2.5,111.05,1.7,63.82375 +2706,46,30,2.5,111.05,1.7,63.8235 +2707,46,30,2.5,111.05,1.7,63.82325 +2708,46,30,2.5,111.05,1.7,63.823 +2709,46,30,2.5,111.05,1.7,63.82275 +2710,46,30,2.5,111.05,1.7,63.8225 +2711,46,30,2.5,111.05,1.7,63.82225 +2712,46,30,2.5,111.05,1.7,63.822 +2713,46,30,2.5,111.05,1.7,63.82175 +2714,46,30,2.5,111.05,1.7,63.8215 +2715,46,30,2.5,111.05,1.7,63.82125 +2716,46,30,2.5,111.05,1.7,63.821 +2717,46,30,2.5,111.05,1.7,63.82075 +2718,46,30,2.5,111.05,1.7,63.8205 +2719,46,30,2.5,111.05,1.7,63.82025 +2720,46,30,2.5,111.05,1.7,63.82 +2721,46,30,2.5,111.05,1.7,63.81975 +2722,46,30,2.5,111.05,1.7,63.8195 +2723,46,30,2.5,111.05,1.7,63.81925 +2724,46,30,2.5,111.05,1.7,63.819 +2725,46,30,2.5,111.05,1.7,63.81875 +2726,46,30,2.5,111.05,1.7,63.8185 +2727,46,30,2.5,111.05,1.7,63.81825 +2728,46,30,2.5,111.05,1.7,63.818 +2729,46,30,2.5,111.05,1.7,63.81775 +2730,46,30,2.5,111.05,1.7,63.8175 +2731,46,30,2.5,111.05,1.7,63.81725 +2732,46,30,2.5,111.05,1.7,63.817 +2733,46,30,2.5,111.05,1.7,63.81675 +2734,46,30,2.5,111.05,1.7,63.8165 +2735,46,30,2.5,111.05,1.7,63.81625 +2736,46,30,2.5,111.05,1.7,63.816 +2737,46,30,2.5,111.05,1.7,63.81575 +2738,46,30,2.5,111.05,1.7,63.8155 +2739,46,30,2.5,111.05,1.7,63.81525 +2740,46,30,2.5,111.05,1.7,63.815 +2741,46,30,2.5,111.05,1.7,63.81475 +2742,46,30,2.5,111.05,1.7,63.8145 +2743,46,30,2.5,111.05,1.7,63.81425 +2744,46,30,2.5,111.05,1.7,63.814 +2745,46,30,2.5,111.05,1.7,63.81375 +2746,46,30,2.5,111.05,1.7,63.8135 +2747,46,30,2.5,111.05,1.7,63.81325 +2748,46,30,2.5,111.05,1.7,63.813 +2749,46,30,2.5,111.05,1.7,63.81275 +2750,46,30,2.5,111.05,1.7,63.8125 +2751,46,30,2.5,111.05,1.7,63.81225 +2752,46,30,2.5,111.05,1.7,63.812 +2753,46,30,2.5,111.05,1.7,63.81175 +2754,46,30,2.5,111.05,1.7,63.8115 +2755,46,30,2.5,111.05,1.7,63.81125 +2756,46,30,2.5,111.05,1.7,63.811 +2757,46,30,2.5,111.05,1.7,63.81075 +2758,46,30,2.5,111.05,1.7,63.8105 +2759,46,30,2.5,111.05,1.7,63.81025 +2760,46,30,2.5,111.05,1.7,63.81 +2761,46,30,2.5,111.05,1.7,63.80975 +2762,46,30,2.5,111.05,1.7,63.8095 +2763,46,30,2.5,111.05,1.7,63.80925 +2764,46,30,2.5,111.05,1.7,63.809 +2765,46,30,2.5,111.05,1.7,63.80875 +2766,46,30,2.5,111.05,1.7,63.8085 +2767,46,30,2.5,111.05,1.7,63.80825 +2768,46,30,2.5,111.05,1.7,63.808 +2769,46,30,2.5,111.05,1.7,63.80775 +2770,46,30,2.5,111.05,1.7,63.8075 +2771,46,30,2.5,111.05,1.7,63.80725 +2772,46,30,2.5,111.05,1.7,63.807 +2773,46,30,2.5,111.05,1.7,63.80675 +2774,46,30,2.5,111.05,1.7,63.8065 +2775,46,30,2.5,111.05,1.7,63.80625 +2776,46,30,2.5,111.05,1.7,63.806 +2777,46,30,2.5,111.05,1.7,63.80575 +2778,46,30,2.5,111.05,1.7,63.8055 +2779,46,30,2.5,111.05,1.7,63.80525 +2780,46,30,2.5,111.05,1.7,63.805 +2781,46,30,2.5,111.05,1.7,63.80475 +2782,46,30,2.5,111.05,1.7,63.8045 +2783,46,30,2.5,111.05,1.7,63.80425 +2784,46,30,2.5,111.05,1.7,63.804 +2785,46,30,2.5,111.05,1.7,63.80375 +2786,46,30,2.5,111.05,1.7,63.8035 +2787,46,30,2.5,111.05,1.7,63.80325 +2788,46,30,2.5,111.05,1.7,63.803 +2789,46,30,2.5,111.05,1.7,63.80275 +2790,46,30,2.5,111.05,1.7,63.8025 +2791,46,30,2.5,111.05,1.7,63.80225 +2792,46,30,2.5,111.05,1.7,63.802 +2793,46,30,2.5,111.05,1.7,63.80175 +2794,46,30,2.5,111.05,1.7,63.8015 +2795,46,30,2.5,111.05,1.7,63.80125 +2796,46,30,2.5,111.05,1.7,63.801 +2797,46,30,2.5,111.05,1.7,63.80075 +2798,46,30,2.5,111.05,1.7,63.8005 +2799,46,30,2.5,111.05,1.7,63.80025 +2800,46,30,2.5,111.05,1.7,63.8 +2801,46,30,2.5,111.05,1.7,63.79975 +2802,46,30,2.5,111.05,1.7,63.7995 +2803,46,30,2.5,111.05,1.7,63.79925 +2804,46,30,2.5,111.05,1.7,63.799 +2805,46,30,2.5,111.05,1.7,63.79875 +2806,46,30,2.5,111.05,1.7,63.7985 +2807,46,30,2.5,111.05,1.7,63.79825 +2808,46,30,2.5,111.05,1.7,63.798 +2809,46,30,2.5,111.05,1.7,63.79775 +2810,46,30,2.5,111.05,1.7,63.7975 +2811,46,30,2.5,111.05,1.7,63.79725 +2812,46,30,2.5,111.05,1.7,63.797 +2813,46,30,2.5,111.05,1.7,63.79675 +2814,46,30,2.5,111.05,1.7,63.7965 +2815,46,30,2.5,111.05,1.7,63.79625 +2816,46,30,2.5,111.05,1.7,63.796 +2817,46,30,2.5,111.05,1.7,63.79575 +2818,46,30,2.5,111.05,1.7,63.7955 +2819,46,30,2.5,111.05,1.7,63.79525 +2820,46,30,2.5,111.05,1.7,63.795 +2821,46,30,2.5,111.05,1.7,63.79475 +2822,46,30,2.5,111.05,1.7,63.7945 +2823,46,30,2.5,111.05,1.7,63.79425 +2824,46,30,2.5,111.05,1.7,63.794 +2825,46,30,2.5,111.05,1.7,63.79375 +2826,46,30,2.5,111.05,1.7,63.7935 +2827,46,30,2.5,111.05,1.7,63.79325 +2828,46,30,2.5,111.05,1.7,63.793 +2829,46,30,2.5,111.05,1.7,63.79275 +2830,46,30,2.5,111.05,1.7,63.7925 +2831,46,30,2.5,111.05,1.7,63.79225 +2832,46,30,2.5,111.05,1.7,63.792 +2833,46,30,2.5,111.05,1.7,63.79175 +2834,46,30,2.5,111.05,1.7,63.7915 +2835,46,30,2.5,111.05,1.7,63.79125 +2836,46,30,2.5,111.05,1.7,63.791 +2837,46,30,2.5,111.05,1.7,63.79075 +2838,46,30,2.5,111.05,1.7,63.7905 +2839,46,30,2.5,111.05,1.7,63.79025 +2840,46,30,2.5,111.05,1.7,63.79 +2841,46,30,2.5,111.05,1.7,63.78975 +2842,46,30,2.5,111.05,1.7,63.7895 +2843,46,30,2.5,111.05,1.7,63.78925 +2844,46,30,2.5,111.05,1.7,63.789 +2845,46,30,2.5,111.05,1.7,63.78875 +2846,46,30,2.5,111.05,1.7,63.7885 +2847,46,30,2.5,111.05,1.7,63.78825 +2848,46,30,2.5,111.05,1.7,63.788 +2849,46,30,2.5,111.05,1.7,63.78775 +2850,46,30,2.5,111.05,1.7,63.7875 +2851,46,30,2.5,111.05,1.7,63.78725 +2852,46,30,2.5,111.05,1.7,63.787 +2853,46,30,2.5,111.05,1.7,63.78675 +2854,46,30,2.5,111.05,1.7,63.7865 +2855,46,30,2.5,111.05,1.7,63.78625 +2856,46,30,2.5,111.05,1.7,63.786 +2857,46,30,2.5,111.05,1.7,63.78575 +2858,46,30,2.5,111.05,1.7,63.7855 +2859,46,30,2.5,111.05,1.7,63.78525 +2860,46,30,2.5,111.05,1.7,63.785 +2861,46,30,2.5,111.05,1.7,63.78475 +2862,46,30,2.5,111.05,1.7,63.7845 +2863,46,30,2.5,111.05,1.7,63.78425 +2864,46,30,2.5,111.05,1.7,63.784 +2865,46,30,2.5,111.05,1.7,63.78375 +2866,46,30,2.5,111.05,1.7,63.7835 +2867,46,30,2.5,111.05,1.7,63.78325 +2868,46,30,2.5,111.05,1.7,63.783 +2869,46,30,2.5,111.05,1.7,63.78275 +2870,46,30,2.5,111.05,1.7,63.7825 +2871,46,30,2.5,111.05,1.7,63.78225 +2872,46,30,2.5,111.05,1.7,63.782 +2873,46,30,2.5,111.05,1.7,63.78175 +2874,46,30,2.5,111.05,1.7,63.7815 +2875,46,30,2.5,111.05,1.7,63.78125 +2876,46,30,2.5,111.05,1.7,63.781 +2877,46,30,2.5,111.05,1.7,63.78075 +2878,46,30,2.5,111.05,1.7,63.7805 +2879,46,30,2.5,111.05,1.7,63.78025 +2880,46,30,2.5,111.05,1.7,63.78 +2881,46,30,2.5,111.05,1.7,63.77975 +2882,46,30,2.5,111.05,1.7,63.7795 +2883,46,30,2.5,111.05,1.7,63.77925 +2884,46,30,2.5,111.05,1.7,63.779 +2885,46,30,2.5,111.05,1.7,63.77875 +2886,46,30,2.5,111.05,1.7,63.7785 +2887,46,30,2.5,111.05,1.7,63.77825 +2888,46,30,2.5,111.05,1.7,63.778 +2889,46,30,2.5,111.05,1.7,63.77775 +2890,46,30,2.5,111.05,1.7,63.7775 +2891,46,30,2.5,111.05,1.7,63.77725 +2892,46,30,2.5,111.05,1.7,63.777 +2893,46,30,2.5,111.05,1.7,63.77675 +2894,46,30,2.5,111.05,1.7,63.7765 +2895,46,30,2.5,111.05,1.7,63.77625 +2896,46,30,2.5,111.05,1.7,63.776 +2897,46,30,2.5,111.05,1.7,63.77575 +2898,46,30,2.5,111.05,1.7,63.7755 +2899,46,30,2.5,111.05,1.7,63.77525 +2900,46,30,2.5,111.05,1.7,63.775 +2901,46,30,2.5,111.05,1.7,63.77475 +2902,46,30,2.5,111.05,1.7,63.7745 +2903,46,30,2.5,111.05,1.7,63.77425 +2904,46,30,2.5,111.05,1.7,63.774 +2905,46,30,2.5,111.05,1.7,63.77375 +2906,46,30,2.5,111.05,1.7,63.7735 +2907,46,30,2.5,111.05,1.7,63.77325 +2908,46,30,2.5,111.05,1.7,63.773 +2909,46,30,2.5,111.05,1.7,63.77275 +2910,46,30,2.5,111.05,1.7,63.7725 +2911,46,30,2.5,111.05,1.7,63.77225 +2912,46,30,2.5,111.05,1.7,63.772 +2913,46,30,2.5,111.05,1.7,63.77175 +2914,46,30,2.5,111.05,1.7,63.7715 +2915,46,30,2.5,111.05,1.7,63.77125 +2916,46,30,2.5,111.05,1.7,63.771 +2917,46,30,2.5,111.05,1.7,63.77075 +2918,46,30,2.5,111.05,1.7,63.7705 +2919,46,30,2.5,111.05,1.7,63.77025 +2920,46,30,2.5,111.05,1.7,63.77 +2921,46,30,2.5,111.05,1.7,63.76975 +2922,46,30,2.5,111.05,1.7,63.7695 +2923,46,30,2.5,111.05,1.7,63.76925 +2924,46,30,2.5,111.05,1.7,63.769 +2925,46,30,2.5,111.05,1.7,63.76875 +2926,46,30,2.5,111.05,1.7,63.7685 +2927,46,30,2.5,111.05,1.7,63.76825 +2928,46,30,2.5,111.05,1.7,63.768 +2929,46,30,2.5,111.05,1.7,63.76775 +2930,46,30,2.5,111.05,1.7,63.7675 +2931,46,30,2.5,111.05,1.7,63.76725 +2932,46,30,2.5,111.05,1.7,63.767 +2933,46,30,2.5,111.05,1.7,63.76675 +2934,46,30,2.5,111.05,1.7,63.7665 +2935,46,30,2.5,111.05,1.7,63.76625 +2936,46,30,2.5,111.05,1.7,63.766 +2937,46,30,2.5,111.05,1.7,63.76575 +2938,46,30,2.5,111.05,1.7,63.7655 +2939,46,30,2.5,111.05,1.7,63.76525 +2940,46,30,2.5,111.05,1.7,63.765 +2941,46,30,2.5,111.05,1.7,63.76475 +2942,46,30,2.5,111.05,1.7,63.7645 +2943,46,30,2.5,111.05,1.7,63.76425 +2944,46,30,2.5,111.05,1.7,63.764 +2945,46,30,2.5,111.05,1.7,63.76375 +2946,46,30,2.5,111.05,1.7,63.7635 +2947,46,30,2.5,111.05,1.7,63.76325 +2948,46,30,2.5,111.05,1.7,63.763 +2949,46,30,2.5,111.05,1.7,63.76275 +2950,46,30,2.5,111.05,1.7,63.7625 +2951,46,30,2.5,111.05,1.7,63.76225 +2952,46,30,2.5,111.05,1.7,63.762 +2953,46,30,2.5,111.05,1.7,63.76175 +2954,46,30,2.5,111.05,1.7,63.7615 +2955,46,30,2.5,111.05,1.7,63.76125 +2956,46,30,2.5,111.05,1.7,63.761 +2957,46,30,2.5,111.05,1.7,63.76075 +2958,46,30,2.5,111.05,1.7,63.7605 +2959,46,30,2.5,111.05,1.7,63.76025 +2960,46,30,2.5,111.05,1.7,63.76 +2961,46,30,2.5,111.05,1.7,63.75975 +2962,46,30,2.5,111.05,1.7,63.7595 +2963,46,30,2.5,111.05,1.7,63.75925 +2964,46,30,2.5,111.05,1.7,63.759 +2965,46,30,2.5,111.05,1.7,63.75875 +2966,46,30,2.5,111.05,1.7,63.7585 +2967,46,30,2.5,111.05,1.7,63.75825 +2968,46,30,2.5,111.05,1.7,63.758 +2969,46,30,2.5,111.05,1.7,63.75775 +2970,46,30,2.5,111.05,1.7,63.7575 +2971,46,30,2.5,111.05,1.7,63.75725 +2972,46,30,2.5,111.05,1.7,63.757 +2973,46,30,2.5,111.05,1.7,63.75675 +2974,46,30,2.5,111.05,1.7,63.7565 +2975,46,30,2.5,111.05,1.7,63.75625 +2976,46,30,2.5,111.05,1.7,63.756 +2977,46,30,2.5,111.05,1.7,63.75575 +2978,46,30,2.5,111.05,1.7,63.7555 +2979,46,30,2.5,111.05,1.7,63.75525 +2980,46,30,2.5,111.05,1.7,63.755 +2981,46,30,2.5,111.05,1.7,63.75475 +2982,46,30,2.5,111.05,1.7,63.7545 +2983,46,30,2.5,111.05,1.7,63.75425 +2984,46,30,2.5,111.05,1.7,63.754 +2985,46,30,2.5,111.05,1.7,63.75375 +2986,46,30,2.5,111.05,1.7,63.7535 +2987,46,30,2.5,111.05,1.7,63.75325 +2988,46,30,2.5,111.05,1.7,63.753 +2989,46,30,2.5,111.05,1.7,63.75275 +2990,46,30,2.5,111.05,1.7,63.7525 +2991,46,30,2.5,111.05,1.7,63.75225 +2992,46,30,2.5,111.05,1.7,63.752 +2993,46,30,2.5,111.05,1.7,63.75175 +2994,46,30,2.5,111.05,1.7,63.7515 +2995,46,30,2.5,111.05,1.7,63.75125 +2996,46,30,2.5,111.05,1.7,63.751 +2997,46,30,2.5,111.05,1.7,63.75075 +2998,46,30,2.5,111.05,1.7,63.7505 +2999,46,30,2.5,111.05,1.7,63.75025 +3000,46,30,2.5,111.05,1.7,63.75 +3001,46,30,2.5,111.05,1.7,63.75 +3002,46,30,2.5,111.05,1.7,63.75 +3003,46,30,2.5,111.05,1.7,63.75 +3004,46,30,2.5,111.05,1.7,63.75 +3005,46,30,2.5,111.05,1.7,63.75 +3006,46,30,2.5,111.05,1.7,63.75 +3007,46,30,2.5,111.05,1.7,63.75 +3008,46,30,2.5,111.05,1.7,63.75 +3009,46,30,2.5,111.05,1.7,63.75 +3010,46,30,2.5,111.05,1.7,63.75 +3011,46,30,2.5,111.05,1.7,63.75 +3012,46,30,2.5,111.05,1.7,63.75 +3013,46,30,2.5,111.05,1.7,63.75 +3014,46,30,2.5,111.05,1.7,63.75 +3015,46,30,2.5,111.05,1.7,63.75 +3016,46,30,2.5,111.05,1.7,63.75 +3017,46,30,2.5,111.05,1.7,63.75 +3018,46,30,2.5,111.05,1.7,63.75 +3019,46,30,2.5,111.05,1.7,63.75 +3020,46,30,2.5,111.05,1.7,63.75 +3021,46,30,2.5,111.05,1.7,63.75 +3022,46,30,2.5,111.05,1.7,63.75 +3023,46,30,2.5,111.05,1.7,63.75 +3024,46,30,2.5,111.05,1.7,63.75 +3025,46,30,2.5,111.05,1.7,63.75 +3026,46,30,2.5,111.05,1.7,63.75 +3027,46,30,2.5,111.05,1.7,63.75 +3028,46,30,2.5,111.05,1.7,63.75 +3029,46,30,2.5,111.05,1.7,63.75 +3030,46,30,2.5,111.05,1.7,63.75 +3031,46,30,2.5,111.05,1.7,63.75 +3032,46,30,2.5,111.05,1.7,63.75 +3033,46,30,2.5,111.05,1.7,63.75 +3034,46,30,2.5,111.05,1.7,63.75 +3035,46,30,2.5,111.05,1.7,63.75 +3036,46,30,2.5,111.05,1.7,63.75 +3037,46,30,2.5,111.05,1.7,63.75 +3038,46,30,2.5,111.05,1.7,63.75 +3039,46,30,2.5,111.05,1.7,63.75 +3040,46,30,2.5,111.05,1.7,63.75 +3041,46,30,2.5,111.05,1.7,63.75 +3042,46,30,2.5,111.05,1.7,63.75 +3043,46,30,2.5,111.05,1.7,63.75 +3044,46,30,2.5,111.05,1.7,63.75 +3045,46,30,2.5,111.05,1.7,63.75 +3046,46,30,2.5,111.05,1.7,63.75 +3047,46,30,2.5,111.05,1.7,63.75 +3048,46,30,2.5,111.05,1.7,63.75 +3049,46,30,2.5,111.05,1.7,63.75 +3050,46,30,2.5,111.05,1.7,63.75 +3051,46,30,2.5,111.05,1.7,63.75 +3052,46,30,2.5,111.05,1.7,63.75 +3053,46,30,2.5,111.05,1.7,63.75 +3054,46,30,2.5,111.05,1.7,63.75 +3055,46,30,2.5,111.05,1.7,63.75 +3056,46,30,2.5,111.05,1.7,63.75 +3057,46,30,2.5,111.05,1.7,63.75 +3058,46,30,2.5,111.05,1.7,63.75 +3059,46,30,2.5,111.05,1.7,63.75 +3060,46,30,2.5,111.05,1.7,63.75 +3061,46,30,2.5,111.05,1.7,63.75 +3062,46,30,2.5,111.05,1.7,63.75 +3063,46,30,2.5,111.05,1.7,63.75 +3064,46,30,2.5,111.05,1.7,63.75 +3065,46,30,2.5,111.05,1.7,63.75 +3066,46,30,2.5,111.05,1.7,63.75 +3067,46,30,2.5,111.05,1.7,63.75 +3068,46,30,2.5,111.05,1.7,63.75 +3069,46,30,2.5,111.05,1.7,63.75 +3070,46,30,2.5,111.05,1.7,63.75 +3071,46,30,2.5,111.05,1.7,63.75 +3072,46,30,2.5,111.05,1.7,63.75 +3073,46,30,2.5,111.05,1.7,63.75 +3074,46,30,2.5,111.05,1.7,63.75 +3075,46,30,2.5,111.05,1.7,63.75 +3076,46,30,2.5,111.05,1.7,63.75 +3077,46,30,2.5,111.05,1.7,63.75 +3078,46,30,2.5,111.05,1.7,63.75 +3079,46,30,2.5,111.05,1.7,63.75 +3080,46,30,2.5,111.05,1.7,63.75 +3081,46,30,2.5,111.05,1.7,63.75 +3082,46,30,2.5,111.05,1.7,63.75 +3083,46,30,2.5,111.05,1.7,63.75 +3084,46,30,2.5,111.05,1.7,63.75 +3085,46,30,2.5,111.05,1.7,63.75 +3086,46,30,2.5,111.05,1.7,63.75 +3087,46,30,2.5,111.05,1.7,63.75 +3088,46,30,2.5,111.05,1.7,63.75 +3089,46,30,2.5,111.05,1.7,63.75 +3090,46,30,2.5,111.05,1.7,63.75 +3091,46,30,2.5,111.05,1.7,63.75 +3092,46,30,2.5,111.05,1.7,63.75 +3093,46,30,2.5,111.05,1.7,63.75 +3094,46,30,2.5,111.05,1.7,63.75 +3095,46,30,2.5,111.05,1.7,63.75 +3096,46,30,2.5,111.05,1.7,63.75 +3097,46,30,2.5,111.05,1.7,63.75 +3098,46,30,2.5,111.05,1.7,63.75 +3099,46,30,2.5,111.05,1.7,63.75 +3100,46,30,2.5,111.05,1.7,63.75 +3101,46,30,2.5,111.05,1.7,63.75 +3102,46,30,2.5,111.05,1.7,63.75 +3103,46,30,2.5,111.05,1.7,63.75 +3104,46,30,2.5,111.05,1.7,63.75 +3105,46,30,2.5,111.05,1.7,63.75 +3106,46,30,2.5,111.05,1.7,63.75 +3107,46,30,2.5,111.05,1.7,63.75 +3108,46,30,2.5,111.05,1.7,63.75 +3109,46,30,2.5,111.05,1.7,63.75 +3110,46,30,2.5,111.05,1.7,63.75 +3111,46,30,2.5,111.05,1.7,63.75 +3112,46,30,2.5,111.05,1.7,63.75 +3113,46,30,2.5,111.05,1.7,63.75 +3114,46,30,2.5,111.05,1.7,63.75 +3115,46,30,2.5,111.05,1.7,63.75 +3116,46,30,2.5,111.05,1.7,63.75 +3117,46,30,2.5,111.05,1.7,63.75 +3118,46,30,2.5,111.05,1.7,63.75 +3119,46,30,2.5,111.05,1.7,63.75 +3120,46,30,2.5,111.05,1.7,63.75 +3121,46,30,2.5,111.05,1.7,63.75 +3122,46,30,2.5,111.05,1.7,63.75 +3123,46,30,2.5,111.05,1.7,63.75 +3124,46,30,2.5,111.05,1.7,63.75 +3125,46,30,2.5,111.05,1.7,63.75 +3126,46,30,2.5,111.05,1.7,63.75 +3127,46,30,2.5,111.05,1.7,63.75 +3128,46,30,2.5,111.05,1.7,63.75 +3129,46,30,2.5,111.05,1.7,63.75 +3130,46,30,2.5,111.05,1.7,63.75 +3131,46,30,2.5,111.05,1.7,63.75 +3132,46,30,2.5,111.05,1.7,63.75 +3133,46,30,2.5,111.05,1.7,63.75 +3134,46,30,2.5,111.05,1.7,63.75 +3135,46,30,2.5,111.05,1.7,63.75 +3136,46,30,2.5,111.05,1.7,63.75 +3137,46,30,2.5,111.05,1.7,63.75 +3138,46,30,2.5,111.05,1.7,63.75 +3139,46,30,2.5,111.05,1.7,63.75 +3140,46,30,2.5,111.05,1.7,63.75 +3141,46,30,2.5,111.05,1.7,63.75 +3142,46,30,2.5,111.05,1.7,63.75 +3143,46,30,2.5,111.05,1.7,63.75 +3144,46,30,2.5,111.05,1.7,63.75 +3145,46,30,2.5,111.05,1.7,63.75 +3146,46,30,2.5,111.05,1.7,63.75 +3147,46,30,2.5,111.05,1.7,63.75 +3148,46,30,2.5,111.05,1.7,63.75 +3149,46,30,2.5,111.05,1.7,63.75 +3150,46,30,2.5,111.05,1.7,63.75 +3151,46,30,2.5,111.05,1.7,63.75 +3152,46,30,2.5,111.05,1.7,63.75 +3153,46,30,2.5,111.05,1.7,63.75 +3154,46,30,2.5,111.05,1.7,63.75 +3155,46,30,2.5,111.05,1.7,63.75 +3156,46,30,2.5,111.05,1.7,63.75 +3157,46,30,2.5,111.05,1.7,63.75 +3158,46,30,2.5,111.05,1.7,63.75 +3159,46,30,2.5,111.05,1.7,63.75 +3160,46,30,2.5,111.05,1.7,63.75 +3161,46,30,2.5,111.05,1.7,63.75 +3162,46,30,2.5,111.05,1.7,63.75 +3163,46,30,2.5,111.05,1.7,63.75 +3164,46,30,2.5,111.05,1.7,63.75 +3165,46,30,2.5,111.05,1.7,63.75 +3166,46,30,2.5,111.05,1.7,63.75 +3167,46,30,2.5,111.05,1.7,63.75 +3168,46,30,2.5,111.05,1.7,63.75 +3169,46,30,2.5,111.05,1.7,63.75 +3170,46,30,2.5,111.05,1.7,63.75 +3171,46,30,2.5,111.05,1.7,63.75 +3172,46,30,2.5,111.05,1.7,63.75 +3173,46,30,2.5,111.05,1.7,63.75 +3174,46,30,2.5,111.05,1.7,63.75 +3175,46,30,2.5,111.05,1.7,63.75 +3176,46,30,2.5,111.05,1.7,63.75 +3177,46,30,2.5,111.05,1.7,63.75 +3178,46,30,2.5,111.05,1.7,63.75 +3179,46,30,2.5,111.05,1.7,63.75 +3180,46,30,2.5,111.05,1.7,63.75 +3181,46,30,2.5,111.05,1.7,63.75 +3182,46,30,2.5,111.05,1.7,63.75 +3183,46,30,2.5,111.05,1.7,63.75 +3184,46,30,2.5,111.05,1.7,63.75 +3185,46,30,2.5,111.05,1.7,63.75 +3186,46,30,2.5,111.05,1.7,63.75 +3187,46,30,2.5,111.05,1.7,63.75 +3188,46,30,2.5,111.05,1.7,63.75 +3189,46,30,2.5,111.05,1.7,63.75 +3190,46,30,2.5,111.05,1.7,63.75 +3191,46,30,2.5,111.05,1.7,63.75 +3192,46,30,2.5,111.05,1.7,63.75 +3193,46,30,2.5,111.05,1.7,63.75 +3194,46,30,2.5,111.05,1.7,63.75 +3195,46,30,2.5,111.05,1.7,63.75 +3196,46,30,2.5,111.05,1.7,63.75 +3197,46,30,2.5,111.05,1.7,63.75 +3198,46,30,2.5,111.05,1.7,63.75 +3199,46,30,2.5,111.05,1.7,63.75 +3200,46,30,2.5,111.05,1.7,63.75 +3201,46,30,2.5,111.05,1.7,63.75 +3202,46,30,2.5,111.05,1.7,63.75 +3203,46,30,2.5,111.05,1.7,63.75 +3204,46,30,2.5,111.05,1.7,63.75 +3205,46,30,2.5,111.05,1.7,63.75 +3206,46,30,2.5,111.05,1.7,63.75 +3207,46,30,2.5,111.05,1.7,63.75 +3208,46,30,2.5,111.05,1.7,63.75 +3209,46,30,2.5,111.05,1.7,63.75 +3210,46,30,2.5,111.05,1.7,63.75 +3211,46,30,2.5,111.05,1.7,63.75 +3212,46,30,2.5,111.05,1.7,63.75 +3213,46,30,2.5,111.05,1.7,63.75 +3214,46,30,2.5,111.05,1.7,63.75 +3215,46,30,2.5,111.05,1.7,63.75 +3216,46,30,2.5,111.05,1.7,63.75 +3217,46,30,2.5,111.05,1.7,63.75 +3218,46,30,2.5,111.05,1.7,63.75 +3219,46,30,2.5,111.05,1.7,63.75 +3220,46,30,2.5,111.05,1.7,63.75 +3221,46,30,2.5,111.05,1.7,63.75 +3222,46,30,2.5,111.05,1.7,63.75 +3223,46,30,2.5,111.05,1.7,63.75 +3224,46,30,2.5,111.05,1.7,63.75 +3225,46,30,2.5,111.05,1.7,63.75 +3226,46,30,2.5,111.05,1.7,63.75 +3227,46,30,2.5,111.05,1.7,63.75 +3228,46,30,2.5,111.05,1.7,63.75 +3229,46,30,2.5,111.05,1.7,63.75 +3230,46,30,2.5,111.05,1.7,63.75 +3231,46,30,2.5,111.05,1.7,63.75 +3232,46,30,2.5,111.05,1.7,63.75 +3233,46,30,2.5,111.05,1.7,63.75 +3234,46,30,2.5,111.05,1.7,63.75 +3235,46,30,2.5,111.05,1.7,63.75 +3236,46,30,2.5,111.05,1.7,63.75 +3237,46,30,2.5,111.05,1.7,63.75 +3238,46,30,2.5,111.05,1.7,63.75 +3239,46,30,2.5,111.05,1.7,63.75 +3240,46,30,2.5,111.05,1.7,63.75 +3241,46,30,2.5,111.05,1.7,63.75 +3242,46,30,2.5,111.05,1.7,63.75 +3243,46,30,2.5,111.05,1.7,63.75 +3244,46,30,2.5,111.05,1.7,63.75 +3245,46,30,2.5,111.05,1.7,63.75 +3246,46,30,2.5,111.05,1.7,63.75 +3247,46,30,2.5,111.05,1.7,63.75 +3248,46,30,2.5,111.05,1.7,63.75 +3249,46,30,2.5,111.05,1.7,63.75 +3250,46,30,2.5,111.05,1.7,63.75 +3251,46,30,2.5,111.05,1.7,63.75 +3252,46,30,2.5,111.05,1.7,63.75 +3253,46,30,2.5,111.05,1.7,63.75 +3254,46,30,2.5,111.05,1.7,63.75 +3255,46,30,2.5,111.05,1.7,63.75 +3256,46,30,2.5,111.05,1.7,63.75 +3257,46,30,2.5,111.05,1.7,63.75 +3258,46,30,2.5,111.05,1.7,63.75 +3259,46,30,2.5,111.05,1.7,63.75 +3260,46,30,2.5,111.05,1.7,63.75 +3261,46,30,2.5,111.05,1.7,63.75 +3262,46,30,2.5,111.05,1.7,63.75 +3263,46,30,2.5,111.05,1.7,63.75 +3264,46,30,2.5,111.05,1.7,63.75 +3265,46,30,2.5,111.05,1.7,63.75 +3266,46,30,2.5,111.05,1.7,63.75 +3267,46,30,2.5,111.05,1.7,63.75 +3268,46,30,2.5,111.05,1.7,63.75 +3269,46,30,2.5,111.05,1.7,63.75 +3270,46,30,2.5,111.05,1.7,63.75 +3271,46,30,2.5,111.05,1.7,63.75 +3272,46,30,2.5,111.05,1.7,63.75 +3273,46,30,2.5,111.05,1.7,63.75 +3274,46,30,2.5,111.05,1.7,63.75 +3275,46,30,2.5,111.05,1.7,63.75 +3276,46,30,2.5,111.05,1.7,63.75 +3277,46,30,2.5,111.05,1.7,63.75 +3278,46,30,2.5,111.05,1.7,63.75 +3279,46,30,2.5,111.05,1.7,63.75 +3280,46,30,2.5,111.05,1.7,63.75 +3281,46,30,2.5,111.05,1.7,63.75 +3282,46,30,2.5,111.05,1.7,63.75 +3283,46,30,2.5,111.05,1.7,63.75 +3284,46,30,2.5,111.05,1.7,63.75 +3285,46,30,2.5,111.05,1.7,63.75 +3286,46,30,2.5,111.05,1.7,63.75 +3287,46,30,2.5,111.05,1.7,63.75 +3288,46,30,2.5,111.05,1.7,63.75 +3289,46,30,2.5,111.05,1.7,63.75 +3290,46,30,2.5,111.05,1.7,63.75 +3291,46,30,2.5,111.05,1.7,63.75 +3292,46,30,2.5,111.05,1.7,63.75 +3293,46,30,2.5,111.05,1.7,63.75 +3294,46,30,2.5,111.05,1.7,63.75 +3295,46,30,2.5,111.05,1.7,63.75 +3296,46,30,2.5,111.05,1.7,63.75 +3297,46,30,2.5,111.05,1.7,63.75 +3298,46,30,2.5,111.05,1.7,63.75 +3299,46,30,2.5,111.05,1.7,63.75 +3300,46,30,2.5,111.05,1.7,63.75 +3301,46,30,2.5,111.05,1.7,63.75 +3302,46,30,2.5,111.05,1.7,63.75 +3303,46,30,2.5,111.05,1.7,63.75 +3304,46,30,2.5,111.05,1.7,63.75 +3305,46,30,2.5,111.05,1.7,63.75 +3306,46,30,2.5,111.05,1.7,63.75 +3307,46,30,2.5,111.05,1.7,63.75 +3308,46,30,2.5,111.05,1.7,63.75 +3309,46,30,2.5,111.05,1.7,63.75 +3310,46,30,2.5,111.05,1.7,63.75 +3311,46,30,2.5,111.05,1.7,63.75 +3312,46,30,2.5,111.05,1.7,63.75 +3313,46,30,2.5,111.05,1.7,63.75 +3314,46,30,2.5,111.05,1.7,63.75 +3315,46,30,2.5,111.05,1.7,63.75 +3316,46,30,2.5,111.05,1.7,63.75 +3317,46,30,2.5,111.05,1.7,63.75 +3318,46,30,2.5,111.05,1.7,63.75 +3319,46,30,2.5,111.05,1.7,63.75 +3320,46,30,2.5,111.05,1.7,63.75 +3321,46,30,2.5,111.05,1.7,63.75 +3322,46,30,2.5,111.05,1.7,63.75 +3323,46,30,2.5,111.05,1.7,63.75 +3324,46,30,2.5,111.05,1.7,63.75 +3325,46,30,2.5,111.05,1.7,63.75 +3326,46,30,2.5,111.05,1.7,63.75 +3327,46,30,2.5,111.05,1.7,63.75 +3328,46,30,2.5,111.05,1.7,63.75 +3329,46,30,2.5,111.05,1.7,63.75 +3330,46,30,2.5,111.05,1.7,63.75 +3331,46,30,2.5,111.05,1.7,63.75 +3332,46,30,2.5,111.05,1.7,63.75 +3333,46,30,2.5,111.05,1.7,63.75 +3334,46,30,2.5,111.05,1.7,63.75 +3335,46,30,2.5,111.05,1.7,63.75 +3336,46,30,2.5,111.05,1.7,63.75 +3337,46,30,2.5,111.05,1.7,63.75 +3338,46,30,2.5,111.05,1.7,63.75 +3339,46,30,2.5,111.05,1.7,63.75 +3340,46,30,2.5,111.05,1.7,63.75 +3341,46,30,2.5,111.05,1.7,63.75 +3342,46,30,2.5,111.05,1.7,63.75 +3343,46,30,2.5,111.05,1.7,63.75 +3344,46,30,2.5,111.05,1.7,63.75 +3345,46,30,2.5,111.05,1.7,63.75 +3346,46,30,2.5,111.05,1.7,63.75 +3347,46,30,2.5,111.05,1.7,63.75 +3348,46,30,2.5,111.05,1.7,63.75 +3349,46,30,2.5,111.05,1.7,63.75 +3350,46,30,2.5,111.05,1.7,63.75 +3351,46,30,2.5,111.05,1.7,63.75 +3352,46,30,2.5,111.05,1.7,63.75 +3353,46,30,2.5,111.05,1.7,63.75 +3354,46,30,2.5,111.05,1.7,63.75 +3355,46,30,2.5,111.05,1.7,63.75 +3356,46,30,2.5,111.05,1.7,63.75 +3357,46,30,2.5,111.05,1.7,63.75 +3358,46,30,2.5,111.05,1.7,63.75 +3359,46,30,2.5,111.05,1.7,63.75 +3360,46,30,2.5,111.05,1.7,63.75 +3361,46,30,2.5,111.05,1.7,63.75 +3362,46,30,2.5,111.05,1.7,63.75 +3363,46,30,2.5,111.05,1.7,63.75 +3364,46,30,2.5,111.05,1.7,63.75 +3365,46,30,2.5,111.05,1.7,63.75 +3366,46,30,2.5,111.05,1.7,63.75 +3367,46,30,2.5,111.05,1.7,63.75 +3368,46,30,2.5,111.05,1.7,63.75 +3369,46,30,2.5,111.05,1.7,63.75 +3370,46,30,2.5,111.05,1.7,63.75 +3371,46,30,2.5,111.05,1.7,63.75 +3372,46,30,2.5,111.05,1.7,63.75 +3373,46,30,2.5,111.05,1.7,63.75 +3374,46,30,2.5,111.05,1.7,63.75 +3375,46,30,2.5,111.05,1.7,63.75 +3376,46,30,2.5,111.05,1.7,63.75 +3377,46,30,2.5,111.05,1.7,63.75 +3378,46,30,2.5,111.05,1.7,63.75 +3379,46,30,2.5,111.05,1.7,63.75 +3380,46,30,2.5,111.05,1.7,63.75 +3381,46,30,2.5,111.05,1.7,63.75 +3382,46,30,2.5,111.05,1.7,63.75 +3383,46,30,2.5,111.05,1.7,63.75 +3384,46,30,2.5,111.05,1.7,63.75 +3385,46,30,2.5,111.05,1.7,63.75 +3386,46,30,2.5,111.05,1.7,63.75 +3387,46,30,2.5,111.05,1.7,63.75 +3388,46,30,2.5,111.05,1.7,63.75 +3389,46,30,2.5,111.05,1.7,63.75 +3390,46,30,2.5,111.05,1.7,63.75 +3391,46,30,2.5,111.05,1.7,63.75 +3392,46,30,2.5,111.05,1.7,63.75 +3393,46,30,2.5,111.05,1.7,63.75 +3394,46,30,2.5,111.05,1.7,63.75 +3395,46,30,2.5,111.05,1.7,63.75 +3396,46,30,2.5,111.05,1.7,63.75 +3397,46,30,2.5,111.05,1.7,63.75 +3398,46,30,2.5,111.05,1.7,63.75 +3399,46,30,2.5,111.05,1.7,63.75 +3400,46,30,2.5,111.05,1.7,63.75 +3401,46,30,2.5,111.05,1.7,63.75 +3402,46,30,2.5,111.05,1.7,63.75 +3403,46,30,2.5,111.05,1.7,63.75 +3404,46,30,2.5,111.05,1.7,63.75 +3405,46,30,2.5,111.05,1.7,63.75 +3406,46,30,2.5,111.05,1.7,63.75 +3407,46,30,2.5,111.05,1.7,63.75 +3408,46,30,2.5,111.05,1.7,63.75 +3409,46,30,2.5,111.05,1.7,63.75 +3410,46,30,2.5,111.05,1.7,63.75 +3411,46,30,2.5,111.05,1.7,63.75 +3412,46,30,2.5,111.05,1.7,63.75 +3413,46,30,2.5,111.05,1.7,63.75 +3414,46,30,2.5,111.05,1.7,63.75 +3415,46,30,2.5,111.05,1.7,63.75 +3416,46,30,2.5,111.05,1.7,63.75 +3417,46,30,2.5,111.05,1.7,63.75 +3418,46,30,2.5,111.05,1.7,63.75 +3419,46,30,2.5,111.05,1.7,63.75 +3420,46,30,2.5,111.05,1.7,63.75 +3421,46,30,2.5,111.05,1.7,63.75 +3422,46,30,2.5,111.05,1.7,63.75 +3423,46,30,2.5,111.05,1.7,63.75 +3424,46,30,2.5,111.05,1.7,63.75 +3425,46,30,2.5,111.05,1.7,63.75 +3426,46,30,2.5,111.05,1.7,63.75 +3427,46,30,2.5,111.05,1.7,63.75 +3428,46,30,2.5,111.05,1.7,63.75 +3429,46,30,2.5,111.05,1.7,63.75 +3430,46,30,2.5,111.05,1.7,63.75 +3431,46,30,2.5,111.05,1.7,63.75 +3432,46,30,2.5,111.05,1.7,63.75 +3433,46,30,2.5,111.05,1.7,63.75 +3434,46,30,2.5,111.05,1.7,63.75 +3435,46,30,2.5,111.05,1.7,63.75 +3436,46,30,2.5,111.05,1.7,63.75 +3437,46,30,2.5,111.05,1.7,63.75 +3438,46,30,2.5,111.05,1.7,63.75 +3439,46,30,2.5,111.05,1.7,63.75 +3440,46,30,2.5,111.05,1.7,63.75 +3441,46,30,2.5,111.05,1.7,63.75 +3442,46,30,2.5,111.05,1.7,63.75 +3443,46,30,2.5,111.05,1.7,63.75 +3444,46,30,2.5,111.05,1.7,63.75 +3445,46,30,2.5,111.05,1.7,63.75 +3446,46,30,2.5,111.05,1.7,63.75 +3447,46,30,2.5,111.05,1.7,63.75 +3448,46,30,2.5,111.05,1.7,63.75 +3449,46,30,2.5,111.05,1.7,63.75 +3450,46,30,2.5,111.05,1.7,63.75 +3451,46,30,2.5,111.05,1.7,63.75 +3452,46,30,2.5,111.05,1.7,63.75 +3453,46,30,2.5,111.05,1.7,63.75 +3454,46,30,2.5,111.05,1.7,63.75 +3455,46,30,2.5,111.05,1.7,63.75 +3456,46,30,2.5,111.05,1.7,63.75 +3457,46,30,2.5,111.05,1.7,63.75 +3458,46,30,2.5,111.05,1.7,63.75 +3459,46,30,2.5,111.05,1.7,63.75 +3460,46,30,2.5,111.05,1.7,63.75 +3461,46,30,2.5,111.05,1.7,63.75 +3462,46,30,2.5,111.05,1.7,63.75 +3463,46,30,2.5,111.05,1.7,63.75 +3464,46,30,2.5,111.05,1.7,63.75 +3465,46,30,2.5,111.05,1.7,63.75 +3466,46,30,2.5,111.05,1.7,63.75 +3467,46,30,2.5,111.05,1.7,63.75 +3468,46,30,2.5,111.05,1.7,63.75 +3469,46,30,2.5,111.05,1.7,63.75 +3470,46,30,2.5,111.05,1.7,63.75 +3471,46,30,2.5,111.05,1.7,63.75 +3472,46,30,2.5,111.05,1.7,63.75 +3473,46,30,2.5,111.05,1.7,63.75 +3474,46,30,2.5,111.05,1.7,63.75 +3475,46,30,2.5,111.05,1.7,63.75 +3476,46,30,2.5,111.05,1.7,63.75 +3477,46,30,2.5,111.05,1.7,63.75 +3478,46,30,2.5,111.05,1.7,63.75 +3479,46,30,2.5,111.05,1.7,63.75 +3480,46,30,2.5,111.05,1.7,63.75 +3481,46,30,2.5,111.05,1.7,63.75 +3482,46,30,2.5,111.05,1.7,63.75 +3483,46,30,2.5,111.05,1.7,63.75 +3484,46,30,2.5,111.05,1.7,63.75 +3485,46,30,2.5,111.05,1.7,63.75 +3486,46,30,2.5,111.05,1.7,63.75 +3487,46,30,2.5,111.05,1.7,63.75 +3488,46,30,2.5,111.05,1.7,63.75 +3489,46,30,2.5,111.05,1.7,63.75 +3490,46,30,2.5,111.05,1.7,63.75 +3491,46,30,2.5,111.05,1.7,63.75 +3492,46,30,2.5,111.05,1.7,63.75 +3493,46,30,2.5,111.05,1.7,63.75 +3494,46,30,2.5,111.05,1.7,63.75 +3495,46,30,2.5,111.05,1.7,63.75 +3496,46,30,2.5,111.05,1.7,63.75 +3497,46,30,2.5,111.05,1.7,63.75 +3498,46,30,2.5,111.05,1.7,63.75 +3499,46,30,2.5,111.05,1.7,63.75 +3500,46,30,2.5,111.05,1.7,63.75 +3501,46,30,2.5,111.05,1.7,63.75 +3502,46,30,2.5,111.05,1.7,63.75 +3503,46,30,2.5,111.05,1.7,63.75 +3504,46,30,2.5,111.05,1.7,63.75 +3505,46,30,2.5,111.05,1.7,63.75 +3506,46,30,2.5,111.05,1.7,63.75 +3507,46,30,2.5,111.05,1.7,63.75 +3508,46,30,2.5,111.05,1.7,63.75 +3509,46,30,2.5,111.05,1.7,63.75 +3510,46,30,2.5,111.05,1.7,63.75 +3511,46,30,2.5,111.05,1.7,63.75 +3512,46,30,2.5,111.05,1.7,63.75 +3513,46,30,2.5,111.05,1.7,63.75 +3514,46,30,2.5,111.05,1.7,63.75 +3515,46,30,2.5,111.05,1.7,63.75 +3516,46,30,2.5,111.05,1.7,63.75 +3517,46,30,2.5,111.05,1.7,63.75 +3518,46,30,2.5,111.05,1.7,63.75 +3519,46,30,2.5,111.05,1.7,63.75 +3520,46,30,2.5,111.05,1.7,63.75 +3521,46,30,2.5,111.05,1.7,63.75 +3522,46,30,2.5,111.05,1.7,63.75 +3523,46,30,2.5,111.05,1.7,63.75 +3524,46,30,2.5,111.05,1.7,63.75 +3525,46,30,2.5,111.05,1.7,63.75 +3526,46,30,2.5,111.05,1.7,63.75 +3527,46,30,2.5,111.05,1.7,63.75 +3528,46,30,2.5,111.05,1.7,63.75 +3529,46,30,2.5,111.05,1.7,63.75 +3530,46,30,2.5,111.05,1.7,63.75 +3531,46,30,2.5,111.05,1.7,63.75 +3532,46,30,2.5,111.05,1.7,63.75 +3533,46,30,2.5,111.05,1.7,63.75 +3534,46,30,2.5,111.05,1.7,63.75 +3535,46,30,2.5,111.05,1.7,63.75 +3536,46,30,2.5,111.05,1.7,63.75 +3537,46,30,2.5,111.05,1.7,63.75 +3538,46,30,2.5,111.05,1.7,63.75 +3539,46,30,2.5,111.05,1.7,63.75 +3540,46,30,2.5,111.05,1.7,63.75 +3541,46,30,2.5,111.05,1.7,63.75 +3542,46,30,2.5,111.05,1.7,63.75 +3543,46,30,2.5,111.05,1.7,63.75 +3544,46,30,2.5,111.05,1.7,63.75 +3545,46,30,2.5,111.05,1.7,63.75 +3546,46,30,2.5,111.05,1.7,63.75 +3547,46,30,2.5,111.05,1.7,63.75 +3548,46,30,2.5,111.05,1.7,63.75 +3549,46,30,2.5,111.05,1.7,63.75 +3550,46,30,2.5,111.05,1.7,63.75 +3551,46,30,2.5,111.05,1.7,63.75 +3552,46,30,2.5,111.05,1.7,63.75 +3553,46,30,2.5,111.05,1.7,63.75 +3554,46,30,2.5,111.05,1.7,63.75 +3555,46,30,2.5,111.05,1.7,63.75 +3556,46,30,2.5,111.05,1.7,63.75 +3557,46,30,2.5,111.05,1.7,63.75 +3558,46,30,2.5,111.05,1.7,63.75 +3559,46,30,2.5,111.05,1.7,63.75 +3560,46,30,2.5,111.05,1.7,63.75 +3561,46,30,2.5,111.05,1.7,63.75 +3562,46,30,2.5,111.05,1.7,63.75 +3563,46,30,2.5,111.05,1.7,63.75 +3564,46,30,2.5,111.05,1.7,63.75 +3565,46,30,2.5,111.05,1.7,63.75 +3566,46,30,2.5,111.05,1.7,63.75 +3567,46,30,2.5,111.05,1.7,63.75 +3568,46,30,2.5,111.05,1.7,63.75 +3569,46,30,2.5,111.05,1.7,63.75 +3570,46,30,2.5,111.05,1.7,63.75 +3571,46,30,2.5,111.05,1.7,63.75 +3572,46,30,2.5,111.05,1.7,63.75 +3573,46,30,2.5,111.05,1.7,63.75 +3574,46,30,2.5,111.05,1.7,63.75 +3575,46,30,2.5,111.05,1.7,63.75 +3576,46,30,2.5,111.05,1.7,63.75 +3577,46,30,2.5,111.05,1.7,63.75 +3578,46,30,2.5,111.05,1.7,63.75 +3579,46,30,2.5,111.05,1.7,63.75 +3580,46,30,2.5,111.05,1.7,63.75 +3581,46,30,2.5,111.05,1.7,63.75 +3582,46,30,2.5,111.05,1.7,63.75 +3583,46,30,2.5,111.05,1.7,63.75 +3584,46,30,2.5,111.05,1.7,63.75 +3585,46,30,2.5,111.05,1.7,63.75 +3586,46,30,2.5,111.05,1.7,63.75 +3587,46,30,2.5,111.05,1.7,63.75 +3588,46,30,2.5,111.05,1.7,63.75 +3589,46,30,2.5,111.05,1.7,63.75 +3590,46,30,2.5,111.05,1.7,63.75 +3591,46,30,2.5,111.05,1.7,63.75 +3592,46,30,2.5,111.05,1.7,63.75 +3593,46,30,2.5,111.05,1.7,63.75 +3594,46,30,2.5,111.05,1.7,63.75 +3595,46,30,2.5,111.05,1.7,63.75 +3596,46,30,2.5,111.05,1.7,63.75 +3597,46,30,2.5,111.05,1.7,63.75 +3598,46,30,2.5,111.05,1.7,63.75 +3599,46,30,2.5,111.05,1.7,63.75 +3600,46,30,2.5,111.05,1.7,63.75 +3601,46,30,2.5,111.05,1.7,63.75 +3602,46,30,2.5,111.05,1.7,63.75 +3603,46,30,2.5,111.05,1.7,63.75 +3604,46,30,2.5,111.05,1.7,63.75 +3605,46,30,2.5,111.05,1.7,63.75 +3606,46,30,2.5,111.05,1.7,63.75 +3607,46,30,2.5,111.05,1.7,63.75 +3608,46,30,2.5,111.05,1.7,63.75 +3609,46,30,2.5,111.05,1.7,63.75 +3610,46,30,2.5,111.05,1.7,63.75 +3611,46,30,2.5,111.05,1.7,63.75 +3612,46,30,2.5,111.05,1.7,63.75 +3613,46,30,2.5,111.05,1.7,63.75 +3614,46,30,2.5,111.05,1.7,63.75 +3615,46,30,2.5,111.05,1.7,63.75 +3616,46,30,2.5,111.05,1.7,63.75 +3617,46,30,2.5,111.05,1.7,63.75 +3618,46,30,2.5,111.05,1.7,63.75 +3619,46,30,2.5,111.05,1.7,63.75 +3620,46,30,2.5,111.05,1.7,63.75 +3621,46,30,2.5,111.05,1.7,63.75 +3622,46,30,2.5,111.05,1.7,63.75 +3623,46,30,2.5,111.05,1.7,63.75 +3624,46,30,2.5,111.05,1.7,63.75 +3625,46,30,2.5,111.05,1.7,63.75 +3626,46,30,2.5,111.05,1.7,63.75 +3627,46,30,2.5,111.05,1.7,63.75 +3628,46,30,2.5,111.05,1.7,63.75 +3629,46,30,2.5,111.05,1.7,63.75 +3630,46,30,2.5,111.05,1.7,63.75 +3631,46,30,2.5,111.05,1.7,63.75 +3632,46,30,2.5,111.05,1.7,63.75 +3633,46,30,2.5,111.05,1.7,63.75 +3634,46,30,2.5,111.05,1.7,63.75 +3635,46,30,2.5,111.05,1.7,63.75 +3636,46,30,2.5,111.05,1.7,63.75 +3637,46,30,2.5,111.05,1.7,63.75 +3638,46,30,2.5,111.05,1.7,63.75 +3639,46,30,2.5,111.05,1.7,63.75 +3640,46,30,2.5,111.05,1.7,63.75 +3641,46,30,2.5,111.05,1.7,63.75 +3642,46,30,2.5,111.05,1.7,63.75 +3643,46,30,2.5,111.05,1.7,63.75 +3644,46,30,2.5,111.05,1.7,63.75 +3645,46,30,2.5,111.05,1.7,63.75 +3646,46,30,2.5,111.05,1.7,63.75 +3647,46,30,2.5,111.05,1.7,63.75 +3648,46,30,2.5,111.05,1.7,63.75 +3649,46,30,2.5,111.05,1.7,63.75 +3650,46,30,2.5,111.05,1.7,63.75 +3651,46,30,2.5,111.05,1.7,63.75 +3652,46,30,2.5,111.05,1.7,63.75 +3653,46,30,2.5,111.05,1.7,63.75 +3654,46,30,2.5,111.05,1.7,63.75 +3655,46,30,2.5,111.05,1.7,63.75 +3656,46,30,2.5,111.05,1.7,63.75 +3657,46,30,2.5,111.05,1.7,63.75 +3658,46,30,2.5,111.05,1.7,63.75 +3659,46,30,2.5,111.05,1.7,63.75 +3660,46,30,2.5,111.05,1.7,63.75 +3661,46,30,2.5,111.05,1.7,63.75 +3662,46,30,2.5,111.05,1.7,63.75 +3663,46,30,2.5,111.05,1.7,63.75 +3664,46,30,2.5,111.05,1.7,63.75 +3665,46,30,2.5,111.05,1.7,63.75 +3666,46,30,2.5,111.05,1.7,63.75 +3667,46,30,2.5,111.05,1.7,63.75 +3668,46,30,2.5,111.05,1.7,63.75 +3669,46,30,2.5,111.05,1.7,63.75 +3670,46,30,2.5,111.05,1.7,63.75 +3671,46,30,2.5,111.05,1.7,63.75 +3672,46,30,2.5,111.05,1.7,63.75 +3673,46,30,2.5,111.05,1.7,63.75 +3674,46,30,2.5,111.05,1.7,63.75 +3675,46,30,2.5,111.05,1.7,63.75 +3676,46,30,2.5,111.05,1.7,63.75 +3677,46,30,2.5,111.05,1.7,63.75 +3678,46,30,2.5,111.05,1.7,63.75 +3679,46,30,2.5,111.05,1.7,63.75 +3680,46,30,2.5,111.05,1.7,63.75 +3681,46,30,2.5,111.05,1.7,63.75 +3682,46,30,2.5,111.05,1.7,63.75 +3683,46,30,2.5,111.05,1.7,63.75 +3684,46,30,2.5,111.05,1.7,63.75 +3685,46,30,2.5,111.05,1.7,63.75 +3686,46,30,2.5,111.05,1.7,63.75 +3687,46,30,2.5,111.05,1.7,63.75 +3688,46,30,2.5,111.05,1.7,63.75 +3689,46,30,2.5,111.05,1.7,63.75 +3690,46,30,2.5,111.05,1.7,63.75 +3691,46,30,2.5,111.05,1.7,63.75 +3692,46,30,2.5,111.05,1.7,63.75 +3693,46,30,2.5,111.05,1.7,63.75 +3694,46,30,2.5,111.05,1.7,63.75 +3695,46,30,2.5,111.05,1.7,63.75 +3696,46,30,2.5,111.05,1.7,63.75 +3697,46,30,2.5,111.05,1.7,63.75 +3698,46,30,2.5,111.05,1.7,63.75 +3699,46,30,2.5,111.05,1.7,63.75 +3700,46,30,2.5,111.05,1.7,63.75 +3701,46,30,2.5,111.05,1.7,63.75 +3702,46,30,2.5,111.05,1.7,63.75 +3703,46,30,2.5,111.05,1.7,63.75 +3704,46,30,2.5,111.05,1.7,63.75 +3705,46,30,2.5,111.05,1.7,63.75 +3706,46,30,2.5,111.05,1.7,63.75 +3707,46,30,2.5,111.05,1.7,63.75 +3708,46,30,2.5,111.05,1.7,63.75 +3709,46,30,2.5,111.05,1.7,63.75 +3710,46,30,2.5,111.05,1.7,63.75 +3711,46,30,2.5,111.05,1.7,63.75 +3712,46,30,2.5,111.05,1.7,63.75 +3713,46,30,2.5,111.05,1.7,63.75 +3714,46,30,2.5,111.05,1.7,63.75 +3715,46,30,2.5,111.05,1.7,63.75 +3716,46,30,2.5,111.05,1.7,63.75 +3717,46,30,2.5,111.05,1.7,63.75 +3718,46,30,2.5,111.05,1.7,63.75 +3719,46,30,2.5,111.05,1.7,63.75 +3720,46,30,2.5,111.05,1.7,63.75 +3721,46,30,2.5,111.05,1.7,63.75 +3722,46,30,2.5,111.05,1.7,63.75 +3723,46,30,2.5,111.05,1.7,63.75 +3724,46,30,2.5,111.05,1.7,63.75 +3725,46,30,2.5,111.05,1.7,63.75 +3726,46,30,2.5,111.05,1.7,63.75 +3727,46,30,2.5,111.05,1.7,63.75 +3728,46,30,2.5,111.05,1.7,63.75 +3729,46,30,2.5,111.05,1.7,63.75 +3730,46,30,2.5,111.05,1.7,63.75 +3731,46,30,2.5,111.05,1.7,63.75 +3732,46,30,2.5,111.05,1.7,63.75 +3733,46,30,2.5,111.05,1.7,63.75 +3734,46,30,2.5,111.05,1.7,63.75 +3735,46,30,2.5,111.05,1.7,63.75 +3736,46,30,2.5,111.05,1.7,63.75 +3737,46,30,2.5,111.05,1.7,63.75 +3738,46,30,2.5,111.05,1.7,63.75 +3739,46,30,2.5,111.05,1.7,63.75 +3740,46,30,2.5,111.05,1.7,63.75 +3741,46,30,2.5,111.05,1.7,63.75 +3742,46,30,2.5,111.05,1.7,63.75 +3743,46,30,2.5,111.05,1.7,63.75 +3744,46,30,2.5,111.05,1.7,63.75 +3745,46,30,2.5,111.05,1.7,63.75 +3746,46,30,2.5,111.05,1.7,63.75 +3747,46,30,2.5,111.05,1.7,63.75 +3748,46,30,2.5,111.05,1.7,63.75 +3749,46,30,2.5,111.05,1.7,63.75 +3750,46,30,2.5,111.05,1.7,63.75 +3751,46,30,2.5,111.05,1.7,63.75 +3752,46,30,2.5,111.05,1.7,63.75 +3753,46,30,2.5,111.05,1.7,63.75 +3754,46,30,2.5,111.05,1.7,63.75 +3755,46,30,2.5,111.05,1.7,63.75 +3756,46,30,2.5,111.05,1.7,63.75 +3757,46,30,2.5,111.05,1.7,63.75 +3758,46,30,2.5,111.05,1.7,63.75 +3759,46,30,2.5,111.05,1.7,63.75 +3760,46,30,2.5,111.05,1.7,63.75 +3761,46,30,2.5,111.05,1.7,63.75 +3762,46,30,2.5,111.05,1.7,63.75 +3763,46,30,2.5,111.05,1.7,63.75 +3764,46,30,2.5,111.05,1.7,63.75 +3765,46,30,2.5,111.05,1.7,63.75 +3766,46,30,2.5,111.05,1.7,63.75 +3767,46,30,2.5,111.05,1.7,63.75 +3768,46,30,2.5,111.05,1.7,63.75 +3769,46,30,2.5,111.05,1.7,63.75 +3770,46,30,2.5,111.05,1.7,63.75 +3771,46,30,2.5,111.05,1.7,63.75 +3772,46,30,2.5,111.05,1.7,63.75 +3773,46,30,2.5,111.05,1.7,63.75 +3774,46,30,2.5,111.05,1.7,63.75 +3775,46,30,2.5,111.05,1.7,63.75 +3776,46,30,2.5,111.05,1.7,63.75 +3777,46,30,2.5,111.05,1.7,63.75 +3778,46,30,2.5,111.05,1.7,63.75 +3779,46,30,2.5,111.05,1.7,63.75 +3780,46,30,2.5,111.05,1.7,63.75 +3781,46,30,2.5,111.05,1.7,63.75 +3782,46,30,2.5,111.05,1.7,63.75 +3783,46,30,2.5,111.05,1.7,63.75 +3784,46,30,2.5,111.05,1.7,63.75 +3785,46,30,2.5,111.05,1.7,63.75 +3786,46,30,2.5,111.05,1.7,63.75 +3787,46,30,2.5,111.05,1.7,63.75 +3788,46,30,2.5,111.05,1.7,63.75 +3789,46,30,2.5,111.05,1.7,63.75 +3790,46,30,2.5,111.05,1.7,63.75 +3791,46,30,2.5,111.05,1.7,63.75 +3792,46,30,2.5,111.05,1.7,63.75 +3793,46,30,2.5,111.05,1.7,63.75 +3794,46,30,2.5,111.05,1.7,63.75 +3795,46,30,2.5,111.05,1.7,63.75 +3796,46,30,2.5,111.05,1.7,63.75 +3797,46,30,2.5,111.05,1.7,63.75 +3798,46,30,2.5,111.05,1.7,63.75 +3799,46,30,2.5,111.05,1.7,63.75 +3800,46,30,2.5,111.05,1.7,63.75 +3801,46,30,2.5,111.05,1.7,63.75 +3802,46,30,2.5,111.05,1.7,63.75 +3803,46,30,2.5,111.05,1.7,63.75 +3804,46,30,2.5,111.05,1.7,63.75 +3805,46,30,2.5,111.05,1.7,63.75 +3806,46,30,2.5,111.05,1.7,63.75 +3807,46,30,2.5,111.05,1.7,63.75 +3808,46,30,2.5,111.05,1.7,63.75 +3809,46,30,2.5,111.05,1.7,63.75 +3810,46,30,2.5,111.05,1.7,63.75 +3811,46,30,2.5,111.05,1.7,63.75 +3812,46,30,2.5,111.05,1.7,63.75 +3813,46,30,2.5,111.05,1.7,63.75 +3814,46,30,2.5,111.05,1.7,63.75 +3815,46,30,2.5,111.05,1.7,63.75 +3816,46,30,2.5,111.05,1.7,63.75 +3817,46,30,2.5,111.05,1.7,63.75 +3818,46,30,2.5,111.05,1.7,63.75 +3819,46,30,2.5,111.05,1.7,63.75 +3820,46,30,2.5,111.05,1.7,63.75 +3821,46,30,2.5,111.05,1.7,63.75 +3822,46,30,2.5,111.05,1.7,63.75 +3823,46,30,2.5,111.05,1.7,63.75 +3824,46,30,2.5,111.05,1.7,63.75 +3825,46,30,2.5,111.05,1.7,63.75 +3826,46,30,2.5,111.05,1.7,63.75 +3827,46,30,2.5,111.05,1.7,63.75 +3828,46,30,2.5,111.05,1.7,63.75 +3829,46,30,2.5,111.05,1.7,63.75 +3830,46,30,2.5,111.05,1.7,63.75 +3831,46,30,2.5,111.05,1.7,63.75 +3832,46,30,2.5,111.05,1.7,63.75 +3833,46,30,2.5,111.05,1.7,63.75 +3834,46,30,2.5,111.05,1.7,63.75 +3835,46,30,2.5,111.05,1.7,63.75 +3836,46,30,2.5,111.05,1.7,63.75 +3837,46,30,2.5,111.05,1.7,63.75 +3838,46,30,2.5,111.05,1.7,63.75 +3839,46,30,2.5,111.05,1.7,63.75 +3840,46,30,2.5,111.05,1.7,63.75 +3841,46,30,2.5,111.05,1.7,63.75 +3842,46,30,2.5,111.05,1.7,63.75 +3843,46,30,2.5,111.05,1.7,63.75 +3844,46,30,2.5,111.05,1.7,63.75 +3845,46,30,2.5,111.05,1.7,63.75 +3846,46,30,2.5,111.05,1.7,63.75 +3847,46,30,2.5,111.05,1.7,63.75 +3848,46,30,2.5,111.05,1.7,63.75 +3849,46,30,2.5,111.05,1.7,63.75 +3850,46,30,2.5,111.05,1.7,63.75 +3851,46,30,2.5,111.05,1.7,63.75 +3852,46,30,2.5,111.05,1.7,63.75 +3853,46,30,2.5,111.05,1.7,63.75 +3854,46,30,2.5,111.05,1.7,63.75 +3855,46,30,2.5,111.05,1.7,63.75 +3856,46,30,2.5,111.05,1.7,63.75 +3857,46,30,2.5,111.05,1.7,63.75 +3858,46,30,2.5,111.05,1.7,63.75 +3859,46,30,2.5,111.05,1.7,63.75 +3860,46,30,2.5,111.05,1.7,63.75 +3861,46,30,2.5,111.05,1.7,63.75 +3862,46,30,2.5,111.05,1.7,63.75 +3863,46,30,2.5,111.05,1.7,63.75 +3864,46,30,2.5,111.05,1.7,63.75 +3865,46,30,2.5,111.05,1.7,63.75 +3866,46,30,2.5,111.05,1.7,63.75 +3867,46,30,2.5,111.05,1.7,63.75 +3868,46,30,2.5,111.05,1.7,63.75 +3869,46,30,2.5,111.05,1.7,63.75 +3870,46,30,2.5,111.05,1.7,63.75 +3871,46,30,2.5,111.05,1.7,63.75 +3872,46,30,2.5,111.05,1.7,63.75 +3873,46,30,2.5,111.05,1.7,63.75 +3874,46,30,2.5,111.05,1.7,63.75 +3875,46,30,2.5,111.05,1.7,63.75 +3876,46,30,2.5,111.05,1.7,63.75 +3877,46,30,2.5,111.05,1.7,63.75 +3878,46,30,2.5,111.05,1.7,63.75 +3879,46,30,2.5,111.05,1.7,63.75 +3880,46,30,2.5,111.05,1.7,63.75 +3881,46,30,2.5,111.05,1.7,63.75 +3882,46,30,2.5,111.05,1.7,63.75 +3883,46,30,2.5,111.05,1.7,63.75 +3884,46,30,2.5,111.05,1.7,63.75 +3885,46,30,2.5,111.05,1.7,63.75 +3886,46,30,2.5,111.05,1.7,63.75 +3887,46,30,2.5,111.05,1.7,63.75 +3888,46,30,2.5,111.05,1.7,63.75 +3889,46,30,2.5,111.05,1.7,63.75 +3890,46,30,2.5,111.05,1.7,63.75 +3891,46,30,2.5,111.05,1.7,63.75 +3892,46,30,2.5,111.05,1.7,63.75 +3893,46,30,2.5,111.05,1.7,63.75 +3894,46,30,2.5,111.05,1.7,63.75 +3895,46,30,2.5,111.05,1.7,63.75 +3896,46,30,2.5,111.05,1.7,63.75 +3897,46,30,2.5,111.05,1.7,63.75 +3898,46,30,2.5,111.05,1.7,63.75 +3899,46,30,2.5,111.05,1.7,63.75 +3900,46,30,2.5,111.05,1.7,63.75 +3901,46,30,2.5,111.05,1.7,63.75 +3902,46,30,2.5,111.05,1.7,63.75 +3903,46,30,2.5,111.05,1.7,63.75 +3904,46,30,2.5,111.05,1.7,63.75 +3905,46,30,2.5,111.05,1.7,63.75 +3906,46,30,2.5,111.05,1.7,63.75 +3907,46,30,2.5,111.05,1.7,63.75 +3908,46,30,2.5,111.05,1.7,63.75 +3909,46,30,2.5,111.05,1.7,63.75 +3910,46,30,2.5,111.05,1.7,63.75 +3911,46,30,2.5,111.05,1.7,63.75 +3912,46,30,2.5,111.05,1.7,63.75 +3913,46,30,2.5,111.05,1.7,63.75 +3914,46,30,2.5,111.05,1.7,63.75 +3915,46,30,2.5,111.05,1.7,63.75 +3916,46,30,2.5,111.05,1.7,63.75 +3917,46,30,2.5,111.05,1.7,63.75 +3918,46,30,2.5,111.05,1.7,63.75 +3919,46,30,2.5,111.05,1.7,63.75 +3920,46,30,2.5,111.05,1.7,63.75 +3921,46,30,2.5,111.05,1.7,63.75 +3922,46,30,2.5,111.05,1.7,63.75 +3923,46,30,2.5,111.05,1.7,63.75 +3924,46,30,2.5,111.05,1.7,63.75 +3925,46,30,2.5,111.05,1.7,63.75 +3926,46,30,2.5,111.05,1.7,63.75 +3927,46,30,2.5,111.05,1.7,63.75 +3928,46,30,2.5,111.05,1.7,63.75 +3929,46,30,2.5,111.05,1.7,63.75 +3930,46,30,2.5,111.05,1.7,63.75 +3931,46,30,2.5,111.05,1.7,63.75 +3932,46,30,2.5,111.05,1.7,63.75 +3933,46,30,2.5,111.05,1.7,63.75 +3934,46,30,2.5,111.05,1.7,63.75 +3935,46,30,2.5,111.05,1.7,63.75 +3936,46,30,2.5,111.05,1.7,63.75 +3937,46,30,2.5,111.05,1.7,63.75 +3938,46,30,2.5,111.05,1.7,63.75 +3939,46,30,2.5,111.05,1.7,63.75 +3940,46,30,2.5,111.05,1.7,63.75 +3941,46,30,2.5,111.05,1.7,63.75 +3942,46,30,2.5,111.05,1.7,63.75 +3943,46,30,2.5,111.05,1.7,63.75 +3944,46,30,2.5,111.05,1.7,63.75 +3945,46,30,2.5,111.05,1.7,63.75 +3946,46,30,2.5,111.05,1.7,63.75 +3947,46,30,2.5,111.05,1.7,63.75 +3948,46,30,2.5,111.05,1.7,63.75 +3949,46,30,2.5,111.05,1.7,63.75 +3950,46,30,2.5,111.05,1.7,63.75 +3951,46,30,2.5,111.05,1.7,63.75 +3952,46,30,2.5,111.05,1.7,63.75 +3953,46,30,2.5,111.05,1.7,63.75 +3954,46,30,2.5,111.05,1.7,63.75 +3955,46,30,2.5,111.05,1.7,63.75 +3956,46,30,2.5,111.05,1.7,63.75 +3957,46,30,2.5,111.05,1.7,63.75 +3958,46,30,2.5,111.05,1.7,63.75 +3959,46,30,2.5,111.05,1.7,63.75 +3960,46,30,2.5,111.05,1.7,63.75 +3961,46,30,2.5,111.05,1.7,63.75 +3962,46,30,2.5,111.05,1.7,63.75 +3963,46,30,2.5,111.05,1.7,63.75 +3964,46,30,2.5,111.05,1.7,63.75 +3965,46,30,2.5,111.05,1.7,63.75 +3966,46,30,2.5,111.05,1.7,63.75 +3967,46,30,2.5,111.05,1.7,63.75 +3968,46,30,2.5,111.05,1.7,63.75 +3969,46,30,2.5,111.05,1.7,63.75 +3970,46,30,2.5,111.05,1.7,63.75 +3971,46,30,2.5,111.05,1.7,63.75 +3972,46,30,2.5,111.05,1.7,63.75 +3973,46,30,2.5,111.05,1.7,63.75 +3974,46,30,2.5,111.05,1.7,63.75 +3975,46,30,2.5,111.05,1.7,63.75 +3976,46,30,2.5,111.05,1.7,63.75 +3977,46,30,2.5,111.05,1.7,63.75 +3978,46,30,2.5,111.05,1.7,63.75 +3979,46,30,2.5,111.05,1.7,63.75 +3980,46,30,2.5,111.05,1.7,63.75 +3981,46,30,2.5,111.05,1.7,63.75 +3982,46,30,2.5,111.05,1.7,63.75 +3983,46,30,2.5,111.05,1.7,63.75 +3984,46,30,2.5,111.05,1.7,63.75 +3985,46,30,2.5,111.05,1.7,63.75 +3986,46,30,2.5,111.05,1.7,63.75 +3987,46,30,2.5,111.05,1.7,63.75 +3988,46,30,2.5,111.05,1.7,63.75 +3989,46,30,2.5,111.05,1.7,63.75 +3990,46,30,2.5,111.05,1.7,63.75 +3991,46,30,2.5,111.05,1.7,63.75 +3992,46,30,2.5,111.05,1.7,63.75 +3993,46,30,2.5,111.05,1.7,63.75 +3994,46,30,2.5,111.05,1.7,63.75 +3995,46,30,2.5,111.05,1.7,63.75 +3996,46,30,2.5,111.05,1.7,63.75 +3997,46,30,2.5,111.05,1.7,63.75 +3998,46,30,2.5,111.05,1.7,63.75 +3999,46,30,2.5,111.05,1.7,63.75 +4000,46,30,2.5,111.05,1.7,63.75 +4001,46,30,2.5,111.05,1.7,63.75 +4002,46,30,2.5,111.05,1.7,63.75 +4003,46,30,2.5,111.05,1.7,63.75 +4004,46,30,2.5,111.05,1.7,63.75 +4005,46,30,2.5,111.05,1.7,63.75 +4006,46,30,2.5,111.05,1.7,63.75 +4007,46,30,2.5,111.05,1.7,63.75 +4008,46,30,2.5,111.05,1.7,63.75 +4009,46,30,2.5,111.05,1.7,63.75 +4010,46,30,2.5,111.05,1.7,63.75 +4011,46,30,2.5,111.05,1.7,63.75 +4012,46,30,2.5,111.05,1.7,63.75 +4013,46,30,2.5,111.05,1.7,63.75 +4014,46,30,2.5,111.05,1.7,63.75 +4015,46,30,2.5,111.05,1.7,63.75 +4016,46,30,2.5,111.05,1.7,63.75 +4017,46,30,2.5,111.05,1.7,63.75 +4018,46,30,2.5,111.05,1.7,63.75 +4019,46,30,2.5,111.05,1.7,63.75 +4020,46,30,2.5,111.05,1.7,63.75 +4021,46,30,2.5,111.05,1.7,63.75 +4022,46,30,2.5,111.05,1.7,63.75 +4023,46,30,2.5,111.05,1.7,63.75 +4024,46,30,2.5,111.05,1.7,63.75 +4025,46,30,2.5,111.05,1.7,63.75 +4026,46,30,2.5,111.05,1.7,63.75 +4027,46,30,2.5,111.05,1.7,63.75 +4028,46,30,2.5,111.05,1.7,63.75 +4029,46,30,2.5,111.05,1.7,63.75 +4030,46,30,2.5,111.05,1.7,63.75 +4031,46,30,2.5,111.05,1.7,63.75 +4032,46,30,2.5,111.05,1.7,63.75 +4033,46,30,2.5,111.05,1.7,63.75 +4034,46,30,2.5,111.05,1.7,63.75 +4035,46,30,2.5,111.05,1.7,63.75 +4036,46,30,2.5,111.05,1.7,63.75 +4037,46,30,2.5,111.05,1.7,63.75 +4038,46,30,2.5,111.05,1.7,63.75 +4039,46,30,2.5,111.05,1.7,63.75 +4040,46,30,2.5,111.05,1.7,63.75 +4041,46,30,2.5,111.05,1.7,63.75 +4042,46,30,2.5,111.05,1.7,63.75 +4043,46,30,2.5,111.05,1.7,63.75 +4044,46,30,2.5,111.05,1.7,63.75 +4045,46,30,2.5,111.05,1.7,63.75 +4046,46,30,2.5,111.05,1.7,63.75 +4047,46,30,2.5,111.05,1.7,63.75 +4048,46,30,2.5,111.05,1.7,63.75 +4049,46,30,2.5,111.05,1.7,63.75 +4050,46,30,2.5,111.05,1.7,63.75 +4051,46,30,2.5,111.05,1.7,63.75 +4052,46,30,2.5,111.05,1.7,63.75 +4053,46,30,2.5,111.05,1.7,63.75 +4054,46,30,2.5,111.05,1.7,63.75 +4055,46,30,2.5,111.05,1.7,63.75 +4056,46,30,2.5,111.05,1.7,63.75 +4057,46,30,2.5,111.05,1.7,63.75 +4058,46,30,2.5,111.05,1.7,63.75 +4059,46,30,2.5,111.05,1.7,63.75 +4060,46,30,2.5,111.05,1.7,63.75 +4061,46,30,2.5,111.05,1.7,63.75 +4062,46,30,2.5,111.05,1.7,63.75 +4063,46,30,2.5,111.05,1.7,63.75 +4064,46,30,2.5,111.05,1.7,63.75 +4065,46,30,2.5,111.05,1.7,63.75 +4066,46,30,2.5,111.05,1.7,63.75 +4067,46,30,2.5,111.05,1.7,63.75 +4068,46,30,2.5,111.05,1.7,63.75 +4069,46,30,2.5,111.05,1.7,63.75 +4070,46,30,2.5,111.05,1.7,63.75 +4071,46,30,2.5,111.05,1.7,63.75 +4072,46,30,2.5,111.05,1.7,63.75 +4073,46,30,2.5,111.05,1.7,63.75 +4074,46,30,2.5,111.05,1.7,63.75 +4075,46,30,2.5,111.05,1.7,63.75 +4076,46,30,2.5,111.05,1.7,63.75 +4077,46,30,2.5,111.05,1.7,63.75 +4078,46,30,2.5,111.05,1.7,63.75 +4079,46,30,2.5,111.05,1.7,63.75 +4080,46,30,2.5,111.05,1.7,63.75 +4081,46,30,2.5,111.05,1.7,63.75 +4082,46,30,2.5,111.05,1.7,63.75 +4083,46,30,2.5,111.05,1.7,63.75 +4084,46,30,2.5,111.05,1.7,63.75 +4085,46,30,2.5,111.05,1.7,63.75 +4086,46,30,2.5,111.05,1.7,63.75 +4087,46,30,2.5,111.05,1.7,63.75 +4088,46,30,2.5,111.05,1.7,63.75 +4089,46,30,2.5,111.05,1.7,63.75 +4090,46,30,2.5,111.05,1.7,63.75 +4091,46,30,2.5,111.05,1.7,63.75 +4092,46,30,2.5,111.05,1.7,63.75 +4093,46,30,2.5,111.05,1.7,63.75 +4094,46,30,2.5,111.05,1.7,63.75 +4095,46,30,2.5,111.05,1.7,63.75 +4096,46,30,2.5,111.05,1.7,63.75 +4097,46,30,2.5,111.05,1.7,63.75 +4098,46,30,2.5,111.05,1.7,63.75 +4099,46,30,2.5,111.05,1.7,63.75 +4100,46,30,2.5,111.05,1.7,63.75 +4101,46,30,2.5,111.05,1.7,63.75 +4102,46,30,2.5,111.05,1.7,63.75 +4103,46,30,2.5,111.05,1.7,63.75 +4104,46,30,2.5,111.05,1.7,63.75 +4105,46,30,2.5,111.05,1.7,63.75 +4106,46,30,2.5,111.05,1.7,63.75 +4107,46,30,2.5,111.05,1.7,63.75 +4108,46,30,2.5,111.05,1.7,63.75 +4109,46,30,2.5,111.05,1.7,63.75 +4110,46,30,2.5,111.05,1.7,63.75 +4111,46,30,2.5,111.05,1.7,63.75 +4112,46,30,2.5,111.05,1.7,63.75 +4113,46,30,2.5,111.05,1.7,63.75 +4114,46,30,2.5,111.05,1.7,63.75 +4115,46,30,2.5,111.05,1.7,63.75 +4116,46,30,2.5,111.05,1.7,63.75 +4117,46,30,2.5,111.05,1.7,63.75 +4118,46,30,2.5,111.05,1.7,63.75 +4119,46,30,2.5,111.05,1.7,63.75 +4120,46,30,2.5,111.05,1.7,63.75 +4121,46,30,2.5,111.05,1.7,63.75 +4122,46,30,2.5,111.05,1.7,63.75 +4123,46,30,2.5,111.05,1.7,63.75 +4124,46,30,2.5,111.05,1.7,63.75 +4125,46,30,2.5,111.05,1.7,63.75 +4126,46,30,2.5,111.05,1.7,63.75 +4127,46,30,2.5,111.05,1.7,63.75 +4128,46,30,2.5,111.05,1.7,63.75 +4129,46,30,2.5,111.05,1.7,63.75 +4130,46,30,2.5,111.05,1.7,63.75 +4131,46,30,2.5,111.05,1.7,63.75 +4132,46,30,2.5,111.05,1.7,63.75 +4133,46,30,2.5,111.05,1.7,63.75 +4134,46,30,2.5,111.05,1.7,63.75 +4135,46,30,2.5,111.05,1.7,63.75 +4136,46,30,2.5,111.05,1.7,63.75 +4137,46,30,2.5,111.05,1.7,63.75 +4138,46,30,2.5,111.05,1.7,63.75 +4139,46,30,2.5,111.05,1.7,63.75 +4140,46,30,2.5,111.05,1.7,63.75 +4141,46,30,2.5,111.05,1.7,63.75 +4142,46,30,2.5,111.05,1.7,63.75 +4143,46,30,2.5,111.05,1.7,63.75 +4144,46,30,2.5,111.05,1.7,63.75 +4145,46,30,2.5,111.05,1.7,63.75 +4146,46,30,2.5,111.05,1.7,63.75 +4147,46,30,2.5,111.05,1.7,63.75 +4148,46,30,2.5,111.05,1.7,63.75 +4149,46,30,2.5,111.05,1.7,63.75 +4150,46,30,2.5,111.05,1.7,63.75 +4151,46,30,2.5,111.05,1.7,63.75 +4152,46,30,2.5,111.05,1.7,63.75 +4153,46,30,2.5,111.05,1.7,63.75 +4154,46,30,2.5,111.05,1.7,63.75 +4155,46,30,2.5,111.05,1.7,63.75 +4156,46,30,2.5,111.05,1.7,63.75 +4157,46,30,2.5,111.05,1.7,63.75 +4158,46,30,2.5,111.05,1.7,63.75 +4159,46,30,2.5,111.05,1.7,63.75 +4160,46,30,2.5,111.05,1.7,63.75 +4161,46,30,2.5,111.05,1.7,63.75 +4162,46,30,2.5,111.05,1.7,63.75 +4163,46,30,2.5,111.05,1.7,63.75 +4164,46,30,2.5,111.05,1.7,63.75 +4165,46,30,2.5,111.05,1.7,63.75 +4166,46,30,2.5,111.05,1.7,63.75 +4167,46,30,2.5,111.05,1.7,63.75 +4168,46,30,2.5,111.05,1.7,63.75 +4169,46,30,2.5,111.05,1.7,63.75 +4170,46,30,2.5,111.05,1.7,63.75 +4171,46,30,2.5,111.05,1.7,63.75 +4172,46,30,2.5,111.05,1.7,63.75 +4173,46,30,2.5,111.05,1.7,63.75 +4174,46,30,2.5,111.05,1.7,63.75 +4175,46,30,2.5,111.05,1.7,63.75 +4176,46,30,2.5,111.05,1.7,63.75 +4177,46,30,2.5,111.05,1.7,63.75 +4178,46,30,2.5,111.05,1.7,63.75 +4179,46,30,2.5,111.05,1.7,63.75 +4180,46,30,2.5,111.05,1.7,63.75 +4181,46,30,2.5,111.05,1.7,63.75 +4182,46,30,2.5,111.05,1.7,63.75 +4183,46,30,2.5,111.05,1.7,63.75 +4184,46,30,2.5,111.05,1.7,63.75 +4185,46,30,2.5,111.05,1.7,63.75 +4186,46,30,2.5,111.05,1.7,63.75 +4187,46,30,2.5,111.05,1.7,63.75 +4188,46,30,2.5,111.05,1.7,63.75 +4189,46,30,2.5,111.05,1.7,63.75 +4190,46,30,2.5,111.05,1.7,63.75 +4191,46,30,2.5,111.05,1.7,63.75 +4192,46,30,2.5,111.05,1.7,63.75 +4193,46,30,2.5,111.05,1.7,63.75 +4194,46,30,2.5,111.05,1.7,63.75 +4195,46,30,2.5,111.05,1.7,63.75 +4196,46,30,2.5,111.05,1.7,63.75 +4197,46,30,2.5,111.05,1.7,63.75 +4198,46,30,2.5,111.05,1.7,63.75 +4199,46,30,2.5,111.05,1.7,63.75 +4200,46,30,2.5,111.05,1.7,63.75 +4201,46,30,2.5,111.05,1.7,63.75 +4202,46,30,2.5,111.05,1.7,63.75 +4203,46,30,2.5,111.05,1.7,63.75 +4204,46,30,2.5,111.05,1.7,63.75 +4205,46,30,2.5,111.05,1.7,63.75 +4206,46,30,2.5,111.05,1.7,63.75 +4207,46,30,2.5,111.05,1.7,63.75 +4208,46,30,2.5,111.05,1.7,63.75 +4209,46,30,2.5,111.05,1.7,63.75 +4210,46,30,2.5,111.05,1.7,63.75 +4211,46,30,2.5,111.05,1.7,63.75 +4212,46,30,2.5,111.05,1.7,63.75 +4213,46,30,2.5,111.05,1.7,63.75 +4214,46,30,2.5,111.05,1.7,63.75 +4215,46,30,2.5,111.05,1.7,63.75 +4216,46,30,2.5,111.05,1.7,63.75 +4217,46,30,2.5,111.05,1.7,63.75 +4218,46,30,2.5,111.05,1.7,63.75 +4219,46,30,2.5,111.05,1.7,63.75 +4220,46,30,2.5,111.05,1.7,63.75 +4221,46,30,2.5,111.05,1.7,63.75 +4222,46,30,2.5,111.05,1.7,63.75 +4223,46,30,2.5,111.05,1.7,63.75 +4224,46,30,2.5,111.05,1.7,63.75 +4225,46,30,2.5,111.05,1.7,63.75 +4226,46,30,2.5,111.05,1.7,63.75 +4227,46,30,2.5,111.05,1.7,63.75 +4228,46,30,2.5,111.05,1.7,63.75 +4229,46,30,2.5,111.05,1.7,63.75 +4230,46,30,2.5,111.05,1.7,63.75 +4231,46,30,2.5,111.05,1.7,63.75 +4232,46,30,2.5,111.05,1.7,63.75 +4233,46,30,2.5,111.05,1.7,63.75 +4234,46,30,2.5,111.05,1.7,63.75 +4235,46,30,2.5,111.05,1.7,63.75 +4236,46,30,2.5,111.05,1.7,63.75 +4237,46,30,2.5,111.05,1.7,63.75 +4238,46,30,2.5,111.05,1.7,63.75 +4239,46,30,2.5,111.05,1.7,63.75 +4240,46,30,2.5,111.05,1.7,63.75 +4241,46,30,2.5,111.05,1.7,63.75 +4242,46,30,2.5,111.05,1.7,63.75 +4243,46,30,2.5,111.05,1.7,63.75 +4244,46,30,2.5,111.05,1.7,63.75 +4245,46,30,2.5,111.05,1.7,63.75 +4246,46,30,2.5,111.05,1.7,63.75 +4247,46,30,2.5,111.05,1.7,63.75 +4248,46,30,2.5,111.05,1.7,63.75 +4249,46,30,2.5,111.05,1.7,63.75 +4250,46,30,2.5,111.05,1.7,63.75 +4251,46,30,2.5,111.05,1.7,63.75 +4252,46,30,2.5,111.05,1.7,63.75 +4253,46,30,2.5,111.05,1.7,63.75 +4254,46,30,2.5,111.05,1.7,63.75 +4255,46,30,2.5,111.05,1.7,63.75 +4256,46,30,2.5,111.05,1.7,63.75 +4257,46,30,2.5,111.05,1.7,63.75 +4258,46,30,2.5,111.05,1.7,63.75 +4259,46,30,2.5,111.05,1.7,63.75 +4260,46,30,2.5,111.05,1.7,63.75 +4261,46,30,2.5,111.05,1.7,63.75 +4262,46,30,2.5,111.05,1.7,63.75 +4263,46,30,2.5,111.05,1.7,63.75 +4264,46,30,2.5,111.05,1.7,63.75 +4265,46,30,2.5,111.05,1.7,63.75 +4266,46,30,2.5,111.05,1.7,63.75 +4267,46,30,2.5,111.05,1.7,63.75 +4268,46,30,2.5,111.05,1.7,63.75 +4269,46,30,2.5,111.05,1.7,63.75 +4270,46,30,2.5,111.05,1.7,63.75 +4271,46,30,2.5,111.05,1.7,63.75 +4272,46,30,2.5,111.05,1.7,63.75 +4273,46,30,2.5,111.05,1.7,63.75 +4274,46,30,2.5,111.05,1.7,63.75 +4275,46,30,2.5,111.05,1.7,63.75 +4276,46,30,2.5,111.05,1.7,63.75 +4277,46,30,2.5,111.05,1.7,63.75 +4278,46,30,2.5,111.05,1.7,63.75 +4279,46,30,2.5,111.05,1.7,63.75 +4280,46,30,2.5,111.05,1.7,63.75 +4281,46,30,2.5,111.05,1.7,63.75 +4282,46,30,2.5,111.05,1.7,63.75 +4283,46,30,2.5,111.05,1.7,63.75 +4284,46,30,2.5,111.05,1.7,63.75 +4285,46,30,2.5,111.05,1.7,63.75 +4286,46,30,2.5,111.05,1.7,63.75 +4287,46,30,2.5,111.05,1.7,63.75 +4288,46,30,2.5,111.05,1.7,63.75 +4289,46,30,2.5,111.05,1.7,63.75 +4290,46,30,2.5,111.05,1.7,63.75 +4291,46,30,2.5,111.05,1.7,63.75 +4292,46,30,2.5,111.05,1.7,63.75 +4293,46,30,2.5,111.05,1.7,63.75 +4294,46,30,2.5,111.05,1.7,63.75 +4295,46,30,2.5,111.05,1.7,63.75 +4296,46,30,2.5,111.05,1.7,63.75 +4297,46,30,2.5,111.05,1.7,63.75 +4298,46,30,2.5,111.05,1.7,63.75 +4299,46,30,2.5,111.05,1.7,63.75 +4300,46,30,2.5,111.05,1.7,63.75 +4301,46,30,2.5,111.05,1.7,63.75 +4302,46,30,2.5,111.05,1.7,63.75 +4303,46,30,2.5,111.05,1.7,63.75 +4304,46,30,2.5,111.05,1.7,63.75 +4305,46,30,2.5,111.05,1.7,63.75 +4306,46,30,2.5,111.05,1.7,63.75 +4307,46,30,2.5,111.05,1.7,63.75 +4308,46,30,2.5,111.05,1.7,63.75 +4309,46,30,2.5,111.05,1.7,63.75 +4310,46,30,2.5,111.05,1.7,63.75 +4311,46,30,2.5,111.05,1.7,63.75 +4312,46,30,2.5,111.05,1.7,63.75 +4313,46,30,2.5,111.05,1.7,63.75 +4314,46,30,2.5,111.05,1.7,63.75 +4315,46,30,2.5,111.05,1.7,63.75 +4316,46,30,2.5,111.05,1.7,63.75 +4317,46,30,2.5,111.05,1.7,63.75 +4318,46,30,2.5,111.05,1.7,63.75 +4319,46,30,2.5,111.05,1.7,63.75 +4320,46,30,2.5,111.05,1.7,63.75 +4321,46,30,2.5,111.05,1.7,63.75 +4322,46,30,2.5,111.05,1.7,63.75 +4323,46,30,2.5,111.05,1.7,63.75 +4324,46,30,2.5,111.05,1.7,63.75 +4325,46,30,2.5,111.05,1.7,63.75 +4326,46,30,2.5,111.05,1.7,63.75 +4327,46,30,2.5,111.05,1.7,63.75 +4328,46,30,2.5,111.05,1.7,63.75 +4329,46,30,2.5,111.05,1.7,63.75 +4330,46,30,2.5,111.05,1.7,63.75 +4331,46,30,2.5,111.05,1.7,63.75 +4332,46,30,2.5,111.05,1.7,63.75 +4333,46,30,2.5,111.05,1.7,63.75 +4334,46,30,2.5,111.05,1.7,63.75 +4335,46,30,2.5,111.05,1.7,63.75 +4336,46,30,2.5,111.05,1.7,63.75 +4337,46,30,2.5,111.05,1.7,63.75 +4338,46,30,2.5,111.05,1.7,63.75 +4339,46,30,2.5,111.05,1.7,63.75 +4340,46,30,2.5,111.05,1.7,63.75 +4341,46,30,2.5,111.05,1.7,63.75 +4342,46,30,2.5,111.05,1.7,63.75 +4343,46,30,2.5,111.05,1.7,63.75 +4344,46,30,2.5,111.05,1.7,63.75 +4345,46,30,2.5,111.05,1.7,63.75 +4346,46,30,2.5,111.05,1.7,63.75 +4347,46,30,2.5,111.05,1.7,63.75 +4348,46,30,2.5,111.05,1.7,63.75 +4349,46,30,2.5,111.05,1.7,63.75 +4350,46,30,2.5,111.05,1.7,63.75 +4351,46,30,2.5,111.05,1.7,63.75 +4352,46,30,2.5,111.05,1.7,63.75 +4353,46,30,2.5,111.05,1.7,63.75 +4354,46,30,2.5,111.05,1.7,63.75 +4355,46,30,2.5,111.05,1.7,63.75 +4356,46,30,2.5,111.05,1.7,63.75 +4357,46,30,2.5,111.05,1.7,63.75 +4358,46,30,2.5,111.05,1.7,63.75 +4359,46,30,2.5,111.05,1.7,63.75 +4360,46,30,2.5,111.05,1.7,63.75 +4361,46,30,2.5,111.05,1.7,63.75 +4362,46,30,2.5,111.05,1.7,63.75 +4363,46,30,2.5,111.05,1.7,63.75 +4364,46,30,2.5,111.05,1.7,63.75 +4365,46,30,2.5,111.05,1.7,63.75 +4366,46,30,2.5,111.05,1.7,63.75 +4367,46,30,2.5,111.05,1.7,63.75 +4368,46,30,2.5,111.05,1.7,63.75 +4369,46,30,2.5,111.05,1.7,63.75 +4370,46,30,2.5,111.05,1.7,63.75 +4371,46,30,2.5,111.05,1.7,63.75 +4372,46,30,2.5,111.05,1.7,63.75 +4373,46,30,2.5,111.05,1.7,63.75 +4374,46,30,2.5,111.05,1.7,63.75 +4375,46,30,2.5,111.05,1.7,63.75 +4376,46,30,2.5,111.05,1.7,63.75 +4377,46,30,2.5,111.05,1.7,63.75 +4378,46,30,2.5,111.05,1.7,63.75 +4379,46,30,2.5,111.05,1.7,63.75 +4380,46,30,2.5,111.05,1.7,63.75 +4381,46,30,2.5,111.05,1.7,63.75 +4382,46,30,2.5,111.05,1.7,63.75 +4383,46,30,2.5,111.05,1.7,63.75 +4384,46,30,2.5,111.05,1.7,63.75 +4385,46,30,2.5,111.05,1.7,63.75 +4386,46,30,2.5,111.05,1.7,63.75 +4387,46,30,2.5,111.05,1.7,63.75 +4388,46,30,2.5,111.05,1.7,63.75 +4389,46,30,2.5,111.05,1.7,63.75 +4390,46,30,2.5,111.05,1.7,63.75 +4391,46,30,2.5,111.05,1.7,63.75 +4392,46,30,2.5,111.05,1.7,63.75 +4393,46,30,2.5,111.05,1.7,63.75 +4394,46,30,2.5,111.05,1.7,63.75 +4395,46,30,2.5,111.05,1.7,63.75 +4396,46,30,2.5,111.05,1.7,63.75 +4397,46,30,2.5,111.05,1.7,63.75 +4398,46,30,2.5,111.05,1.7,63.75 +4399,46,30,2.5,111.05,1.7,63.75 +4400,46,30,2.5,111.05,1.7,63.75 +4401,46,30,2.5,111.05,1.7,63.75 +4402,46,30,2.5,111.05,1.7,63.75 +4403,46,30,2.5,111.05,1.7,63.75 +4404,46,30,2.5,111.05,1.7,63.75 +4405,46,30,2.5,111.05,1.7,63.75 +4406,46,30,2.5,111.05,1.7,63.75 +4407,46,30,2.5,111.05,1.7,63.75 +4408,46,30,2.5,111.05,1.7,63.75 +4409,46,30,2.5,111.05,1.7,63.75 +4410,46,30,2.5,111.05,1.7,63.75 +4411,46,30,2.5,111.05,1.7,63.75 +4412,46,30,2.5,111.05,1.7,63.75 +4413,46,30,2.5,111.05,1.7,63.75 +4414,46,30,2.5,111.05,1.7,63.75 +4415,46,30,2.5,111.05,1.7,63.75 +4416,46,30,2.5,111.05,1.7,63.75 +4417,46,30,2.5,111.05,1.7,63.75 +4418,46,30,2.5,111.05,1.7,63.75 +4419,46,30,2.5,111.05,1.7,63.75 +4420,46,30,2.5,111.05,1.7,63.75 +4421,46,30,2.5,111.05,1.7,63.75 +4422,46,30,2.5,111.05,1.7,63.75 +4423,46,30,2.5,111.05,1.7,63.75 +4424,46,30,2.5,111.05,1.7,63.75 +4425,46,30,2.5,111.05,1.7,63.75 +4426,46,30,2.5,111.05,1.7,63.75 +4427,46,30,2.5,111.05,1.7,63.75 +4428,46,30,2.5,111.05,1.7,63.75 +4429,46,30,2.5,111.05,1.7,63.75 +4430,46,30,2.5,111.05,1.7,63.75 +4431,46,30,2.5,111.05,1.7,63.75 +4432,46,30,2.5,111.05,1.7,63.75 +4433,46,30,2.5,111.05,1.7,63.75 +4434,46,30,2.5,111.05,1.7,63.75 +4435,46,30,2.5,111.05,1.7,63.75 +4436,46,30,2.5,111.05,1.7,63.75 +4437,46,30,2.5,111.05,1.7,63.75 +4438,46,30,2.5,111.05,1.7,63.75 +4439,46,30,2.5,111.05,1.7,63.75 +4440,46,30,2.5,111.05,1.7,63.75 +4441,46,30,2.5,111.05,1.7,63.75 +4442,46,30,2.5,111.05,1.7,63.75 +4443,46,30,2.5,111.05,1.7,63.75 +4444,46,30,2.5,111.05,1.7,63.75 +4445,46,30,2.5,111.05,1.7,63.75 +4446,46,30,2.5,111.05,1.7,63.75 +4447,46,30,2.5,111.05,1.7,63.75 +4448,46,30,2.5,111.05,1.7,63.75 +4449,46,30,2.5,111.05,1.7,63.75 +4450,46,30,2.5,111.05,1.7,63.75 +4451,46,30,2.5,111.05,1.7,63.75 +4452,46,30,2.5,111.05,1.7,63.75 +4453,46,30,2.5,111.05,1.7,63.75 +4454,46,30,2.5,111.05,1.7,63.75 +4455,46,30,2.5,111.05,1.7,63.75 +4456,46,30,2.5,111.05,1.7,63.75 +4457,46,30,2.5,111.05,1.7,63.75 +4458,46,30,2.5,111.05,1.7,63.75 +4459,46,30,2.5,111.05,1.7,63.75 +4460,46,30,2.5,111.05,1.7,63.75 +4461,46,30,2.5,111.05,1.7,63.75 +4462,46,30,2.5,111.05,1.7,63.75 +4463,46,30,2.5,111.05,1.7,63.75 +4464,46,30,2.5,111.05,1.7,63.75 +4465,46,30,2.5,111.05,1.7,63.75 +4466,46,30,2.5,111.05,1.7,63.75 +4467,46,30,2.5,111.05,1.7,63.75 +4468,46,30,2.5,111.05,1.7,63.75 +4469,46,30,2.5,111.05,1.7,63.75 +4470,46,30,2.5,111.05,1.7,63.75 +4471,46,30,2.5,111.05,1.7,63.75 +4472,46,30,2.5,111.05,1.7,63.75 +4473,46,30,2.5,111.05,1.7,63.75 +4474,46,30,2.5,111.05,1.7,63.75 +4475,46,30,2.5,111.05,1.7,63.75 +4476,46,30,2.5,111.05,1.7,63.75 +4477,46,30,2.5,111.05,1.7,63.75 +4478,46,30,2.5,111.05,1.7,63.75 +4479,46,30,2.5,111.05,1.7,63.75 +4480,46,30,2.5,111.05,1.7,63.75 +4481,46,30,2.5,111.05,1.7,63.75 +4482,46,30,2.5,111.05,1.7,63.75 +4483,46,30,2.5,111.05,1.7,63.75 +4484,46,30,2.5,111.05,1.7,63.75 +4485,46,30,2.5,111.05,1.7,63.75 +4486,46,30,2.5,111.05,1.7,63.75 +4487,46,30,2.5,111.05,1.7,63.75 +4488,46,30,2.5,111.05,1.7,63.75 +4489,46,30,2.5,111.05,1.7,63.75 +4490,46,30,2.5,111.05,1.7,63.75 +4491,46,30,2.5,111.05,1.7,63.75 +4492,46,30,2.5,111.05,1.7,63.75 +4493,46,30,2.5,111.05,1.7,63.75 +4494,46,30,2.5,111.05,1.7,63.75 +4495,46,30,2.5,111.05,1.7,63.75 +4496,46,30,2.5,111.05,1.7,63.75 +4497,46,30,2.5,111.05,1.7,63.75 +4498,46,30,2.5,111.05,1.7,63.75 +4499,46,30,2.5,111.05,1.7,63.75 +4500,46,30,2.5,111.05,1.7,63.75 +4501,46,30,2.5,111.05,1.7,63.75 +4502,46,30,2.5,111.05,1.7,63.75 +4503,46,30,2.5,111.05,1.7,63.75 +4504,46,30,2.5,111.05,1.7,63.75 +4505,46,30,2.5,111.05,1.7,63.75 +4506,46,30,2.5,111.05,1.7,63.75 +4507,46,30,2.5,111.05,1.7,63.75 +4508,46,30,2.5,111.05,1.7,63.75 +4509,46,30,2.5,111.05,1.7,63.75 +4510,46,30,2.5,111.05,1.7,63.75 +4511,46,30,2.5,111.05,1.7,63.75 +4512,46,30,2.5,111.05,1.7,63.75 +4513,46,30,2.5,111.05,1.7,63.75 +4514,46,30,2.5,111.05,1.7,63.75 +4515,46,30,2.5,111.05,1.7,63.75 +4516,46,30,2.5,111.05,1.7,63.75 +4517,46,30,2.5,111.05,1.7,63.75 +4518,46,30,2.5,111.05,1.7,63.75 +4519,46,30,2.5,111.05,1.7,63.75 +4520,46,30,2.5,111.05,1.7,63.75 +4521,46,30,2.5,111.05,1.7,63.75 +4522,46,30,2.5,111.05,1.7,63.75 +4523,46,30,2.5,111.05,1.7,63.75 +4524,46,30,2.5,111.05,1.7,63.75 +4525,46,30,2.5,111.05,1.7,63.75 +4526,46,30,2.5,111.05,1.7,63.75 +4527,46,30,2.5,111.05,1.7,63.75 +4528,46,30,2.5,111.05,1.7,63.75 +4529,46,30,2.5,111.05,1.7,63.75 +4530,46,30,2.5,111.05,1.7,63.75 +4531,46,30,2.5,111.05,1.7,63.75 +4532,46,30,2.5,111.05,1.7,63.75 +4533,46,30,2.5,111.05,1.7,63.75 +4534,46,30,2.5,111.05,1.7,63.75 +4535,46,30,2.5,111.05,1.7,63.75 +4536,46,30,2.5,111.05,1.7,63.75 +4537,46,30,2.5,111.05,1.7,63.75 +4538,46,30,2.5,111.05,1.7,63.75 +4539,46,30,2.5,111.05,1.7,63.75 +4540,46,30,2.5,111.05,1.7,63.75 +4541,46,30,2.5,111.05,1.7,63.75 +4542,46,30,2.5,111.05,1.7,63.75 +4543,46,30,2.5,111.05,1.7,63.75 +4544,46,30,2.5,111.05,1.7,63.75 +4545,46,30,2.5,111.05,1.7,63.75 +4546,46,30,2.5,111.05,1.7,63.75 +4547,46,30,2.5,111.05,1.7,63.75 +4548,46,30,2.5,111.05,1.7,63.75 +4549,46,30,2.5,111.05,1.7,63.75 +4550,46,30,2.5,111.05,1.7,63.75 +4551,46,30,2.5,111.05,1.7,63.75 +4552,46,30,2.5,111.05,1.7,63.75 +4553,46,30,2.5,111.05,1.7,63.75 +4554,46,30,2.5,111.05,1.7,63.75 +4555,46,30,2.5,111.05,1.7,63.75 +4556,46,30,2.5,111.05,1.7,63.75 +4557,46,30,2.5,111.05,1.7,63.75 +4558,46,30,2.5,111.05,1.7,63.75 +4559,46,30,2.5,111.05,1.7,63.75 +4560,46,30,2.5,111.05,1.7,63.75 +4561,46,30,2.5,111.05,1.7,63.75 +4562,46,30,2.5,111.05,1.7,63.75 +4563,46,30,2.5,111.05,1.7,63.75 +4564,46,30,2.5,111.05,1.7,63.75 +4565,46,30,2.5,111.05,1.7,63.75 +4566,46,30,2.5,111.05,1.7,63.75 +4567,46,30,2.5,111.05,1.7,63.75 +4568,46,30,2.5,111.05,1.7,63.75 +4569,46,30,2.5,111.05,1.7,63.75 +4570,46,30,2.5,111.05,1.7,63.75 +4571,46,30,2.5,111.05,1.7,63.75 +4572,46,30,2.5,111.05,1.7,63.75 +4573,46,30,2.5,111.05,1.7,63.75 +4574,46,30,2.5,111.05,1.7,63.75 +4575,46,30,2.5,111.05,1.7,63.75 +4576,46,30,2.5,111.05,1.7,63.75 +4577,46,30,2.5,111.05,1.7,63.75 +4578,46,30,2.5,111.05,1.7,63.75 +4579,46,30,2.5,111.05,1.7,63.75 +4580,46,30,2.5,111.05,1.7,63.75 +4581,46,30,2.5,111.05,1.7,63.75 +4582,46,30,2.5,111.05,1.7,63.75 +4583,46,30,2.5,111.05,1.7,63.75 +4584,46,30,2.5,111.05,1.7,63.75 +4585,46,30,2.5,111.05,1.7,63.75 +4586,46,30,2.5,111.05,1.7,63.75 +4587,46,30,2.5,111.05,1.7,63.75 +4588,46,30,2.5,111.05,1.7,63.75 +4589,46,30,2.5,111.05,1.7,63.75 +4590,46,30,2.5,111.05,1.7,63.75 +4591,46,30,2.5,111.05,1.7,63.75 +4592,46,30,2.5,111.05,1.7,63.75 +4593,46,30,2.5,111.05,1.7,63.75 +4594,46,30,2.5,111.05,1.7,63.75 +4595,46,30,2.5,111.05,1.7,63.75 +4596,46,30,2.5,111.05,1.7,63.75 +4597,46,30,2.5,111.05,1.7,63.75 +4598,46,30,2.5,111.05,1.7,63.75 +4599,46,30,2.5,111.05,1.7,63.75 +4600,46,30,2.5,111.05,1.7,63.75 +4601,46,30,2.5,111.05,1.7,63.75 +4602,46,30,2.5,111.05,1.7,63.75 +4603,46,30,2.5,111.05,1.7,63.75 +4604,46,30,2.5,111.05,1.7,63.75 +4605,46,30,2.5,111.05,1.7,63.75 +4606,46,30,2.5,111.05,1.7,63.75 +4607,46,30,2.5,111.05,1.7,63.75 +4608,46,30,2.5,111.05,1.7,63.75 +4609,46,30,2.5,111.05,1.7,63.75 +4610,46,30,2.5,111.05,1.7,63.75 +4611,46,30,2.5,111.05,1.7,63.75 +4612,46,30,2.5,111.05,1.7,63.75 +4613,46,30,2.5,111.05,1.7,63.75 +4614,46,30,2.5,111.05,1.7,63.75 +4615,46,30,2.5,111.05,1.7,63.75 +4616,46,30,2.5,111.05,1.7,63.75 +4617,46,30,2.5,111.05,1.7,63.75 +4618,46,30,2.5,111.05,1.7,63.75 +4619,46,30,2.5,111.05,1.7,63.75 +4620,46,30,2.5,111.05,1.7,63.75 +4621,46,30,2.5,111.05,1.7,63.75 +4622,46,30,2.5,111.05,1.7,63.75 +4623,46,30,2.5,111.05,1.7,63.75 +4624,46,30,2.5,111.05,1.7,63.75 +4625,46,30,2.5,111.05,1.7,63.75 +4626,46,30,2.5,111.05,1.7,63.75 +4627,46,30,2.5,111.05,1.7,63.75 +4628,46,30,2.5,111.05,1.7,63.75 +4629,46,30,2.5,111.05,1.7,63.75 +4630,46,30,2.5,111.05,1.7,63.75 +4631,46,30,2.5,111.05,1.7,63.75 +4632,46,30,2.5,111.05,1.7,63.75 +4633,46,30,2.5,111.05,1.7,63.75 +4634,46,30,2.5,111.05,1.7,63.75 +4635,46,30,2.5,111.05,1.7,63.75 +4636,46,30,2.5,111.05,1.7,63.75 +4637,46,30,2.5,111.05,1.7,63.75 +4638,46,30,2.5,111.05,1.7,63.75 +4639,46,30,2.5,111.05,1.7,63.75 +4640,46,30,2.5,111.05,1.7,63.75 +4641,46,30,2.5,111.05,1.7,63.75 +4642,46,30,2.5,111.05,1.7,63.75 +4643,46,30,2.5,111.05,1.7,63.75 +4644,46,30,2.5,111.05,1.7,63.75 +4645,46,30,2.5,111.05,1.7,63.75 +4646,46,30,2.5,111.05,1.7,63.75 +4647,46,30,2.5,111.05,1.7,63.75 +4648,46,30,2.5,111.05,1.7,63.75 +4649,46,30,2.5,111.05,1.7,63.75 +4650,46,30,2.5,111.05,1.7,63.75 +4651,46,30,2.5,111.05,1.7,63.75 +4652,46,30,2.5,111.05,1.7,63.75 +4653,46,30,2.5,111.05,1.7,63.75 +4654,46,30,2.5,111.05,1.7,63.75 +4655,46,30,2.5,111.05,1.7,63.75 +4656,46,30,2.5,111.05,1.7,63.75 +4657,46,30,2.5,111.05,1.7,63.75 +4658,46,30,2.5,111.05,1.7,63.75 +4659,46,30,2.5,111.05,1.7,63.75 +4660,46,30,2.5,111.05,1.7,63.75 +4661,46,30,2.5,111.05,1.7,63.75 +4662,46,30,2.5,111.05,1.7,63.75 +4663,46,30,2.5,111.05,1.7,63.75 +4664,46,30,2.5,111.05,1.7,63.75 +4665,46,30,2.5,111.05,1.7,63.75 +4666,46,30,2.5,111.05,1.7,63.75 +4667,46,30,2.5,111.05,1.7,63.75 +4668,46,30,2.5,111.05,1.7,63.75 +4669,46,30,2.5,111.05,1.7,63.75 +4670,46,30,2.5,111.05,1.7,63.75 +4671,46,30,2.5,111.05,1.7,63.75 +4672,46,30,2.5,111.05,1.7,63.75 +4673,46,30,2.5,111.05,1.7,63.75 +4674,46,30,2.5,111.05,1.7,63.75 +4675,46,30,2.5,111.05,1.7,63.75 +4676,46,30,2.5,111.05,1.7,63.75 +4677,46,30,2.5,111.05,1.7,63.75 +4678,46,30,2.5,111.05,1.7,63.75 +4679,46,30,2.5,111.05,1.7,63.75 +4680,46,30,2.5,111.05,1.7,63.75 +4681,46,30,2.5,111.05,1.7,63.75 +4682,46,30,2.5,111.05,1.7,63.75 +4683,46,30,2.5,111.05,1.7,63.75 +4684,46,30,2.5,111.05,1.7,63.75 +4685,46,30,2.5,111.05,1.7,63.75 +4686,46,30,2.5,111.05,1.7,63.75 +4687,46,30,2.5,111.05,1.7,63.75 +4688,46,30,2.5,111.05,1.7,63.75 +4689,46,30,2.5,111.05,1.7,63.75 +4690,46,30,2.5,111.05,1.7,63.75 +4691,46,30,2.5,111.05,1.7,63.75 +4692,46,30,2.5,111.05,1.7,63.75 +4693,46,30,2.5,111.05,1.7,63.75 +4694,46,30,2.5,111.05,1.7,63.75 +4695,46,30,2.5,111.05,1.7,63.75 +4696,46,30,2.5,111.05,1.7,63.75 +4697,46,30,2.5,111.05,1.7,63.75 +4698,46,30,2.5,111.05,1.7,63.75 +4699,46,30,2.5,111.05,1.7,63.75 +4700,46,30,2.5,111.05,1.7,63.75 +4701,46,30,2.5,111.05,1.7,63.75 +4702,46,30,2.5,111.05,1.7,63.75 +4703,46,30,2.5,111.05,1.7,63.75 +4704,46,30,2.5,111.05,1.7,63.75 +4705,46,30,2.5,111.05,1.7,63.75 +4706,46,30,2.5,111.05,1.7,63.75 +4707,46,30,2.5,111.05,1.7,63.75 +4708,46,30,2.5,111.05,1.7,63.75 +4709,46,30,2.5,111.05,1.7,63.75 +4710,46,30,2.5,111.05,1.7,63.75 +4711,46,30,2.5,111.05,1.7,63.75 +4712,46,30,2.5,111.05,1.7,63.75 +4713,46,30,2.5,111.05,1.7,63.75 +4714,46,30,2.5,111.05,1.7,63.75 +4715,46,30,2.5,111.05,1.7,63.75 +4716,46,30,2.5,111.05,1.7,63.75 +4717,46,30,2.5,111.05,1.7,63.75 +4718,46,30,2.5,111.05,1.7,63.75 +4719,46,30,2.5,111.05,1.7,63.75 +4720,46,30,2.5,111.05,1.7,63.75 +4721,46,30,2.5,111.05,1.7,63.75 +4722,46,30,2.5,111.05,1.7,63.75 +4723,46,30,2.5,111.05,1.7,63.75 +4724,46,30,2.5,111.05,1.7,63.75 +4725,46,30,2.5,111.05,1.7,63.75 +4726,46,30,2.5,111.05,1.7,63.75 +4727,46,30,2.5,111.05,1.7,63.75 +4728,46,30,2.5,111.05,1.7,63.75 +4729,46,30,2.5,111.05,1.7,63.75 +4730,46,30,2.5,111.05,1.7,63.75 +4731,46,30,2.5,111.05,1.7,63.75 +4732,46,30,2.5,111.05,1.7,63.75 +4733,46,30,2.5,111.05,1.7,63.75 +4734,46,30,2.5,111.05,1.7,63.75 +4735,46,30,2.5,111.05,1.7,63.75 +4736,46,30,2.5,111.05,1.7,63.75 +4737,46,30,2.5,111.05,1.7,63.75 +4738,46,30,2.5,111.05,1.7,63.75 +4739,46,30,2.5,111.05,1.7,63.75 +4740,46,30,2.5,111.05,1.7,63.75 +4741,46,30,2.5,111.05,1.7,63.75 +4742,46,30,2.5,111.05,1.7,63.75 +4743,46,30,2.5,111.05,1.7,63.75 +4744,46,30,2.5,111.05,1.7,63.75 +4745,46,30,2.5,111.05,1.7,63.75 +4746,46,30,2.5,111.05,1.7,63.75 +4747,46,30,2.5,111.05,1.7,63.75 +4748,46,30,2.5,111.05,1.7,63.75 +4749,46,30,2.5,111.05,1.7,63.75 +4750,46,30,2.5,111.05,1.7,63.75 +4751,46,30,2.5,111.05,1.7,63.75 +4752,46,30,2.5,111.05,1.7,63.75 +4753,46,30,2.5,111.05,1.7,63.75 +4754,46,30,2.5,111.05,1.7,63.75 +4755,46,30,2.5,111.05,1.7,63.75 +4756,46,30,2.5,111.05,1.7,63.75 +4757,46,30,2.5,111.05,1.7,63.75 +4758,46,30,2.5,111.05,1.7,63.75 +4759,46,30,2.5,111.05,1.7,63.75 +4760,46,30,2.5,111.05,1.7,63.75 +4761,46,30,2.5,111.05,1.7,63.75 +4762,46,30,2.5,111.05,1.7,63.75 +4763,46,30,2.5,111.05,1.7,63.75 +4764,46,30,2.5,111.05,1.7,63.75 +4765,46,30,2.5,111.05,1.7,63.75 +4766,46,30,2.5,111.05,1.7,63.75 +4767,46,30,2.5,111.05,1.7,63.75 +4768,46,30,2.5,111.05,1.7,63.75 +4769,46,30,2.5,111.05,1.7,63.75 +4770,46,30,2.5,111.05,1.7,63.75 +4771,46,30,2.5,111.05,1.7,63.75 +4772,46,30,2.5,111.05,1.7,63.75 +4773,46,30,2.5,111.05,1.7,63.75 +4774,46,30,2.5,111.05,1.7,63.75 +4775,46,30,2.5,111.05,1.7,63.75 +4776,46,30,2.5,111.05,1.7,63.75 +4777,46,30,2.5,111.05,1.7,63.75 +4778,46,30,2.5,111.05,1.7,63.75 +4779,46,30,2.5,111.05,1.7,63.75 +4780,46,30,2.5,111.05,1.7,63.75 +4781,46,30,2.5,111.05,1.7,63.75 +4782,46,30,2.5,111.05,1.7,63.75 +4783,46,30,2.5,111.05,1.7,63.75 +4784,46,30,2.5,111.05,1.7,63.75 +4785,46,30,2.5,111.05,1.7,63.75 +4786,46,30,2.5,111.05,1.7,63.75 +4787,46,30,2.5,111.05,1.7,63.75 +4788,46,30,2.5,111.05,1.7,63.75 +4789,46,30,2.5,111.05,1.7,63.75 +4790,46,30,2.5,111.05,1.7,63.75 +4791,46,30,2.5,111.05,1.7,63.75 +4792,46,30,2.5,111.05,1.7,63.75 +4793,46,30,2.5,111.05,1.7,63.75 +4794,46,30,2.5,111.05,1.7,63.75 +4795,46,30,2.5,111.05,1.7,63.75 +4796,46,30,2.5,111.05,1.7,63.75 +4797,46,30,2.5,111.05,1.7,63.75 +4798,46,30,2.5,111.05,1.7,63.75 +4799,46,30,2.5,111.05,1.7,63.75 +4800,46,30,2.5,111.05,1.7,63.75 +4801,46,30,2.5,111.05,1.7,63.75 +4802,46,30,2.5,111.05,1.7,63.75 +4803,46,30,2.5,111.05,1.7,63.75 +4804,46,30,2.5,111.05,1.7,63.75 +4805,46,30,2.5,111.05,1.7,63.75 +4806,46,30,2.5,111.05,1.7,63.75 +4807,46,30,2.5,111.05,1.7,63.75 +4808,46,30,2.5,111.05,1.7,63.75 +4809,46,30,2.5,111.05,1.7,63.75 +4810,46,30,2.5,111.05,1.7,63.75 +4811,46,30,2.5,111.05,1.7,63.75 +4812,46,30,2.5,111.05,1.7,63.75 +4813,46,30,2.5,111.05,1.7,63.75 +4814,46,30,2.5,111.05,1.7,63.75 +4815,46,30,2.5,111.05,1.7,63.75 +4816,46,30,2.5,111.05,1.7,63.75 +4817,46,30,2.5,111.05,1.7,63.75 +4818,46,30,2.5,111.05,1.7,63.75 +4819,46,30,2.5,111.05,1.7,63.75 +4820,46,30,2.5,111.05,1.7,63.75 +4821,46,30,2.5,111.05,1.7,63.75 +4822,46,30,2.5,111.05,1.7,63.75 +4823,46,30,2.5,111.05,1.7,63.75 +4824,46,30,2.5,111.05,1.7,63.75 +4825,46,30,2.5,111.05,1.7,63.75 +4826,46,30,2.5,111.05,1.7,63.75 +4827,46,30,2.5,111.05,1.7,63.75 +4828,46,30,2.5,111.05,1.7,63.75 +4829,46,30,2.5,111.05,1.7,63.75 +4830,46,30,2.5,111.05,1.7,63.75 +4831,46,30,2.5,111.05,1.7,63.75 +4832,46,30,2.5,111.05,1.7,63.75 +4833,46,30,2.5,111.05,1.7,63.75 +4834,46,30,2.5,111.05,1.7,63.75 +4835,46,30,2.5,111.05,1.7,63.75 +4836,46,30,2.5,111.05,1.7,63.75 +4837,46,30,2.5,111.05,1.7,63.75 +4838,46,30,2.5,111.05,1.7,63.75 +4839,46,30,2.5,111.05,1.7,63.75 +4840,46,30,2.5,111.05,1.7,63.75 +4841,46,30,2.5,111.05,1.7,63.75 +4842,46,30,2.5,111.05,1.7,63.75 +4843,46,30,2.5,111.05,1.7,63.75 +4844,46,30,2.5,111.05,1.7,63.75 +4845,46,30,2.5,111.05,1.7,63.75 +4846,46,30,2.5,111.05,1.7,63.75 +4847,46,30,2.5,111.05,1.7,63.75 +4848,46,30,2.5,111.05,1.7,63.75 +4849,46,30,2.5,111.05,1.7,63.75 +4850,46,30,2.5,111.05,1.7,63.75 +4851,46,30,2.5,111.05,1.7,63.75 +4852,46,30,2.5,111.05,1.7,63.75 +4853,46,30,2.5,111.05,1.7,63.75 +4854,46,30,2.5,111.05,1.7,63.75 +4855,46,30,2.5,111.05,1.7,63.75 +4856,46,30,2.5,111.05,1.7,63.75 +4857,46,30,2.5,111.05,1.7,63.75 +4858,46,30,2.5,111.05,1.7,63.75 +4859,46,30,2.5,111.05,1.7,63.75 +4860,46,30,2.5,111.05,1.7,63.75 +4861,46,30,2.5,111.05,1.7,63.75 +4862,46,30,2.5,111.05,1.7,63.75 +4863,46,30,2.5,111.05,1.7,63.75 +4864,46,30,2.5,111.05,1.7,63.75 +4865,46,30,2.5,111.05,1.7,63.75 +4866,46,30,2.5,111.05,1.7,63.75 +4867,46,30,2.5,111.05,1.7,63.75 +4868,46,30,2.5,111.05,1.7,63.75 +4869,46,30,2.5,111.05,1.7,63.75 +4870,46,30,2.5,111.05,1.7,63.75 +4871,46,30,2.5,111.05,1.7,63.75 +4872,46,30,2.5,111.05,1.7,63.75 +4873,46,30,2.5,111.05,1.7,63.75 +4874,46,30,2.5,111.05,1.7,63.75 +4875,46,30,2.5,111.05,1.7,63.75 +4876,46,30,2.5,111.05,1.7,63.75 +4877,46,30,2.5,111.05,1.7,63.75 +4878,46,30,2.5,111.05,1.7,63.75 +4879,46,30,2.5,111.05,1.7,63.75 +4880,46,30,2.5,111.05,1.7,63.75 +4881,46,30,2.5,111.05,1.7,63.75 +4882,46,30,2.5,111.05,1.7,63.75 +4883,46,30,2.5,111.05,1.7,63.75 +4884,46,30,2.5,111.05,1.7,63.75 +4885,46,30,2.5,111.05,1.7,63.75 +4886,46,30,2.5,111.05,1.7,63.75 +4887,46,30,2.5,111.05,1.7,63.75 +4888,46,30,2.5,111.05,1.7,63.75 +4889,46,30,2.5,111.05,1.7,63.75 +4890,46,30,2.5,111.05,1.7,63.75 +4891,46,30,2.5,111.05,1.7,63.75 +4892,46,30,2.5,111.05,1.7,63.75 +4893,46,30,2.5,111.05,1.7,63.75 +4894,46,30,2.5,111.05,1.7,63.75 +4895,46,30,2.5,111.05,1.7,63.75 +4896,46,30,2.5,111.05,1.7,63.75 +4897,46,30,2.5,111.05,1.7,63.75 +4898,46,30,2.5,111.05,1.7,63.75 +4899,46,30,2.5,111.05,1.7,63.75 +4900,46,30,2.5,111.05,1.7,63.75 +4901,46,30,2.5,111.05,1.7,63.75 +4902,46,30,2.5,111.05,1.7,63.75 +4903,46,30,2.5,111.05,1.7,63.75 +4904,46,30,2.5,111.05,1.7,63.75 +4905,46,30,2.5,111.05,1.7,63.75 +4906,46,30,2.5,111.05,1.7,63.75 +4907,46,30,2.5,111.05,1.7,63.75 +4908,46,30,2.5,111.05,1.7,63.75 +4909,46,30,2.5,111.05,1.7,63.75 +4910,46,30,2.5,111.05,1.7,63.75 +4911,46,30,2.5,111.05,1.7,63.75 +4912,46,30,2.5,111.05,1.7,63.75 +4913,46,30,2.5,111.05,1.7,63.75 +4914,46,30,2.5,111.05,1.7,63.75 +4915,46,30,2.5,111.05,1.7,63.75 +4916,46,30,2.5,111.05,1.7,63.75 +4917,46,30,2.5,111.05,1.7,63.75 +4918,46,30,2.5,111.05,1.7,63.75 +4919,46,30,2.5,111.05,1.7,63.75 +4920,46,30,2.5,111.05,1.7,63.75 +4921,46,30,2.5,111.05,1.7,63.75 +4922,46,30,2.5,111.05,1.7,63.75 +4923,46,30,2.5,111.05,1.7,63.75 +4924,46,30,2.5,111.05,1.7,63.75 +4925,46,30,2.5,111.05,1.7,63.75 +4926,46,30,2.5,111.05,1.7,63.75 +4927,46,30,2.5,111.05,1.7,63.75 +4928,46,30,2.5,111.05,1.7,63.75 +4929,46,30,2.5,111.05,1.7,63.75 +4930,46,30,2.5,111.05,1.7,63.75 +4931,46,30,2.5,111.05,1.7,63.75 +4932,46,30,2.5,111.05,1.7,63.75 +4933,46,30,2.5,111.05,1.7,63.75 +4934,46,30,2.5,111.05,1.7,63.75 +4935,46,30,2.5,111.05,1.7,63.75 +4936,46,30,2.5,111.05,1.7,63.75 +4937,46,30,2.5,111.05,1.7,63.75 +4938,46,30,2.5,111.05,1.7,63.75 +4939,46,30,2.5,111.05,1.7,63.75 +4940,46,30,2.5,111.05,1.7,63.75 +4941,46,30,2.5,111.05,1.7,63.75 +4942,46,30,2.5,111.05,1.7,63.75 +4943,46,30,2.5,111.05,1.7,63.75 +4944,46,30,2.5,111.05,1.7,63.75 +4945,46,30,2.5,111.05,1.7,63.75 +4946,46,30,2.5,111.05,1.7,63.75 +4947,46,30,2.5,111.05,1.7,63.75 +4948,46,30,2.5,111.05,1.7,63.75 +4949,46,30,2.5,111.05,1.7,63.75 +4950,46,30,2.5,111.05,1.7,63.75 +4951,46,30,2.5,111.05,1.7,63.75 +4952,46,30,2.5,111.05,1.7,63.75 +4953,46,30,2.5,111.05,1.7,63.75 +4954,46,30,2.5,111.05,1.7,63.75 +4955,46,30,2.5,111.05,1.7,63.75 +4956,46,30,2.5,111.05,1.7,63.75 +4957,46,30,2.5,111.05,1.7,63.75 +4958,46,30,2.5,111.05,1.7,63.75 +4959,46,30,2.5,111.05,1.7,63.75 +4960,46,30,2.5,111.05,1.7,63.75 +4961,46,30,2.5,111.05,1.7,63.75 +4962,46,30,2.5,111.05,1.7,63.75 +4963,46,30,2.5,111.05,1.7,63.75 +4964,46,30,2.5,111.05,1.7,63.75 +4965,46,30,2.5,111.05,1.7,63.75 +4966,46,30,2.5,111.05,1.7,63.75 +4967,46,30,2.5,111.05,1.7,63.75 +4968,46,30,2.5,111.05,1.7,63.75 +4969,46,30,2.5,111.05,1.7,63.75 +4970,46,30,2.5,111.05,1.7,63.75 +4971,46,30,2.5,111.05,1.7,63.75 +4972,46,30,2.5,111.05,1.7,63.75 +4973,46,30,2.5,111.05,1.7,63.75 +4974,46,30,2.5,111.05,1.7,63.75 +4975,46,30,2.5,111.05,1.7,63.75 +4976,46,30,2.5,111.05,1.7,63.75 +4977,46,30,2.5,111.05,1.7,63.75 +4978,46,30,2.5,111.05,1.7,63.75 +4979,46,30,2.5,111.05,1.7,63.75 +4980,46,30,2.5,111.05,1.7,63.75 +4981,46,30,2.5,111.05,1.7,63.75 +4982,46,30,2.5,111.05,1.7,63.75 +4983,46,30,2.5,111.05,1.7,63.75 +4984,46,30,2.5,111.05,1.7,63.75 +4985,46,30,2.5,111.05,1.7,63.75 +4986,46,30,2.5,111.05,1.7,63.75 +4987,46,30,2.5,111.05,1.7,63.75 +4988,46,30,2.5,111.05,1.7,63.75 +4989,46,30,2.5,111.05,1.7,63.75 +4990,46,30,2.5,111.05,1.7,63.75 +4991,46,30,2.5,111.05,1.7,63.75 +4992,46,30,2.5,111.05,1.7,63.75 +4993,46,30,2.5,111.05,1.7,63.75 +4994,46,30,2.5,111.05,1.7,63.75 +4995,46,30,2.5,111.05,1.7,63.75 +4996,46,30,2.5,111.05,1.7,63.75 +4997,46,30,2.5,111.05,1.7,63.75 +4998,46,30,2.5,111.05,1.7,63.75 +4999,46,30,2.5,111.05,1.7,63.75 +5000,46,30,2.5,111.05,1.7,63.75 +5001,46,30,2.5,111.05,1.7,63.75 +5002,46,30,2.5,111.05,1.7,63.75 +5003,46,30,2.5,111.05,1.7,63.75 +5004,46,30,2.5,111.05,1.7,63.75 +5005,46,30,2.5,111.05,1.7,63.75 +5006,46,30,2.5,111.05,1.7,63.75 +5007,46,30,2.5,111.05,1.7,63.75 +5008,46,30,2.5,111.05,1.7,63.75 +5009,46,30,2.5,111.05,1.7,63.75 +5010,46,30,2.5,111.05,1.7,63.75 +5011,46,30,2.5,111.05,1.7,63.75 +5012,46,30,2.5,111.05,1.7,63.75 +5013,46,30,2.5,111.05,1.7,63.75 +5014,46,30,2.5,111.05,1.7,63.75 +5015,46,30,2.5,111.05,1.7,63.75 +5016,46,30,2.5,111.05,1.7,63.75 +5017,46,30,2.5,111.05,1.7,63.75 +5018,46,30,2.5,111.05,1.7,63.75 +5019,46,30,2.5,111.05,1.7,63.75 +5020,46,30,2.5,111.05,1.7,63.75 +5021,46,30,2.5,111.05,1.7,63.75 +5022,46,30,2.5,111.05,1.7,63.75 +5023,46,30,2.5,111.05,1.7,63.75 +5024,46,30,2.5,111.05,1.7,63.75 +5025,46,30,2.5,111.05,1.7,63.75 +5026,46,30,2.5,111.05,1.7,63.75 +5027,46,30,2.5,111.05,1.7,63.75 +5028,46,30,2.5,111.05,1.7,63.75 +5029,46,30,2.5,111.05,1.7,63.75 +5030,46,30,2.5,111.05,1.7,63.75 +5031,46,30,2.5,111.05,1.7,63.75 +5032,46,30,2.5,111.05,1.7,63.75 +5033,46,30,2.5,111.05,1.7,63.75 +5034,46,30,2.5,111.05,1.7,63.75 +5035,46,30,2.5,111.05,1.7,63.75 +5036,46,30,2.5,111.05,1.7,63.75 +5037,46,30,2.5,111.05,1.7,63.75 +5038,46,30,2.5,111.05,1.7,63.75 +5039,46,30,2.5,111.05,1.7,63.75 +5040,46,30,2.5,111.05,1.7,63.75 +5041,46,30,2.5,111.05,1.7,63.75 +5042,46,30,2.5,111.05,1.7,63.75 +5043,46,30,2.5,111.05,1.7,63.75 +5044,46,30,2.5,111.05,1.7,63.75 +5045,46,30,2.5,111.05,1.7,63.75 +5046,46,30,2.5,111.05,1.7,63.75 +5047,46,30,2.5,111.05,1.7,63.75 +5048,46,30,2.5,111.05,1.7,63.75 +5049,46,30,2.5,111.05,1.7,63.75 +5050,46,30,2.5,111.05,1.7,63.75 +5051,46,30,2.5,111.05,1.7,63.75 +5052,46,30,2.5,111.05,1.7,63.75 +5053,46,30,2.5,111.05,1.7,63.75 +5054,46,30,2.5,111.05,1.7,63.75 +5055,46,30,2.5,111.05,1.7,63.75 +5056,46,30,2.5,111.05,1.7,63.75 +5057,46,30,2.5,111.05,1.7,63.75 +5058,46,30,2.5,111.05,1.7,63.75 +5059,46,30,2.5,111.05,1.7,63.75 +5060,46,30,2.5,111.05,1.7,63.75 +5061,46,30,2.5,111.05,1.7,63.75 +5062,46,30,2.5,111.05,1.7,63.75 +5063,46,30,2.5,111.05,1.7,63.75 +5064,46,30,2.5,111.05,1.7,63.75 +5065,46,30,2.5,111.05,1.7,63.75 +5066,46,30,2.5,111.05,1.7,63.75 +5067,46,30,2.5,111.05,1.7,63.75 +5068,46,30,2.5,111.05,1.7,63.75 +5069,46,30,2.5,111.05,1.7,63.75 +5070,46,30,2.5,111.05,1.7,63.75 +5071,46,30,2.5,111.05,1.7,63.75 +5072,46,30,2.5,111.05,1.7,63.75 +5073,46,30,2.5,111.05,1.7,63.75 +5074,46,30,2.5,111.05,1.7,63.75 +5075,46,30,2.5,111.05,1.7,63.75 +5076,46,30,2.5,111.05,1.7,63.75 +5077,46,30,2.5,111.05,1.7,63.75 +5078,46,30,2.5,111.05,1.7,63.75 +5079,46,30,2.5,111.05,1.7,63.75 +5080,46,30,2.5,111.05,1.7,63.75 +5081,46,30,2.5,111.05,1.7,63.75 +5082,46,30,2.5,111.05,1.7,63.75 +5083,46,30,2.5,111.05,1.7,63.75 +5084,46,30,2.5,111.05,1.7,63.75 +5085,46,30,2.5,111.05,1.7,63.75 +5086,46,30,2.5,111.05,1.7,63.75 +5087,46,30,2.5,111.05,1.7,63.75 +5088,46,30,2.5,111.05,1.7,63.75 +5089,46,30,2.5,111.05,1.7,63.75 +5090,46,30,2.5,111.05,1.7,63.75 +5091,46,30,2.5,111.05,1.7,63.75 +5092,46,30,2.5,111.05,1.7,63.75 +5093,46,30,2.5,111.05,1.7,63.75 +5094,46,30,2.5,111.05,1.7,63.75 +5095,46,30,2.5,111.05,1.7,63.75 +5096,46,30,2.5,111.05,1.7,63.75 +5097,46,30,2.5,111.05,1.7,63.75 +5098,46,30,2.5,111.05,1.7,63.75 +5099,46,30,2.5,111.05,1.7,63.75 +5100,46,30,2.5,111.05,1.7,63.75 +5101,46,30,2.5,111.05,1.7,63.75 +5102,46,30,2.5,111.05,1.7,63.75 +5103,46,30,2.5,111.05,1.7,63.75 +5104,46,30,2.5,111.05,1.7,63.75 +5105,46,30,2.5,111.05,1.7,63.75 +5106,46,30,2.5,111.05,1.7,63.75 +5107,46,30,2.5,111.05,1.7,63.75 +5108,46,30,2.5,111.05,1.7,63.75 +5109,46,30,2.5,111.05,1.7,63.75 +5110,46,30,2.5,111.05,1.7,63.75 +5111,46,30,2.5,111.05,1.7,63.75 +5112,46,30,2.5,111.05,1.7,63.75 +5113,46,30,2.5,111.05,1.7,63.75 +5114,46,30,2.5,111.05,1.7,63.75 +5115,46,30,2.5,111.05,1.7,63.75 +5116,46,30,2.5,111.05,1.7,63.75 +5117,46,30,2.5,111.05,1.7,63.75 +5118,46,30,2.5,111.05,1.7,63.75 +5119,46,30,2.5,111.05,1.7,63.75 +5120,46,30,2.5,111.05,1.7,63.75 +5121,46,30,2.5,111.05,1.7,63.75 +5122,46,30,2.5,111.05,1.7,63.75 +5123,46,30,2.5,111.05,1.7,63.75 +5124,46,30,2.5,111.05,1.7,63.75 +5125,46,30,2.5,111.05,1.7,63.75 +5126,46,30,2.5,111.05,1.7,63.75 +5127,46,30,2.5,111.05,1.7,63.75 +5128,46,30,2.5,111.05,1.7,63.75 +5129,46,30,2.5,111.05,1.7,63.75 +5130,46,30,2.5,111.05,1.7,63.75 +5131,46,30,2.5,111.05,1.7,63.75 +5132,46,30,2.5,111.05,1.7,63.75 +5133,46,30,2.5,111.05,1.7,63.75 +5134,46,30,2.5,111.05,1.7,63.75 +5135,46,30,2.5,111.05,1.7,63.75 +5136,46,30,2.5,111.05,1.7,63.75 +5137,46,30,2.5,111.05,1.7,63.75 +5138,46,30,2.5,111.05,1.7,63.75 +5139,46,30,2.5,111.05,1.7,63.75 +5140,46,30,2.5,111.05,1.7,63.75 +5141,46,30,2.5,111.05,1.7,63.75 +5142,46,30,2.5,111.05,1.7,63.75 +5143,46,30,2.5,111.05,1.7,63.75 +5144,46,30,2.5,111.05,1.7,63.75 +5145,46,30,2.5,111.05,1.7,63.75 +5146,46,30,2.5,111.05,1.7,63.75 +5147,46,30,2.5,111.05,1.7,63.75 +5148,46,30,2.5,111.05,1.7,63.75 +5149,46,30,2.5,111.05,1.7,63.75 +5150,46,30,2.5,111.05,1.7,63.75 +5151,46,30,2.5,111.05,1.7,63.75 +5152,46,30,2.5,111.05,1.7,63.75 +5153,46,30,2.5,111.05,1.7,63.75 +5154,46,30,2.5,111.05,1.7,63.75 +5155,46,30,2.5,111.05,1.7,63.75 +5156,46,30,2.5,111.05,1.7,63.75 +5157,46,30,2.5,111.05,1.7,63.75 +5158,46,30,2.5,111.05,1.7,63.75 +5159,46,30,2.5,111.05,1.7,63.75 +5160,46,30,2.5,111.05,1.7,63.75 +5161,46,30,2.5,111.05,1.7,63.75 +5162,46,30,2.5,111.05,1.7,63.75 +5163,46,30,2.5,111.05,1.7,63.75 +5164,46,30,2.5,111.05,1.7,63.75 +5165,46,30,2.5,111.05,1.7,63.75 +5166,46,30,2.5,111.05,1.7,63.75 +5167,46,30,2.5,111.05,1.7,63.75 +5168,46,30,2.5,111.05,1.7,63.75 +5169,46,30,2.5,111.05,1.7,63.75 +5170,46,30,2.5,111.05,1.7,63.75 +5171,46,30,2.5,111.05,1.7,63.75 +5172,46,30,2.5,111.05,1.7,63.75 +5173,46,30,2.5,111.05,1.7,63.75 +5174,46,30,2.5,111.05,1.7,63.75 +5175,46,30,2.5,111.05,1.7,63.75 +5176,46,30,2.5,111.05,1.7,63.75 +5177,46,30,2.5,111.05,1.7,63.75 +5178,46,30,2.5,111.05,1.7,63.75 +5179,46,30,2.5,111.05,1.7,63.75 +5180,46,30,2.5,111.05,1.7,63.75 +5181,46,30,2.5,111.05,1.7,63.75 +5182,46,30,2.5,111.05,1.7,63.75 +5183,46,30,2.5,111.05,1.7,63.75 +5184,46,30,2.5,111.05,1.7,63.75 +5185,46,30,2.5,111.05,1.7,63.75 +5186,46,30,2.5,111.05,1.7,63.75 +5187,46,30,2.5,111.05,1.7,63.75 +5188,46,30,2.5,111.05,1.7,63.75 +5189,46,30,2.5,111.05,1.7,63.75 +5190,46,30,2.5,111.05,1.7,63.75 +5191,46,30,2.5,111.05,1.7,63.75 +5192,46,30,2.5,111.05,1.7,63.75 +5193,46,30,2.5,111.05,1.7,63.75 +5194,46,30,2.5,111.05,1.7,63.75 +5195,46,30,2.5,111.05,1.7,63.75 +5196,46,30,2.5,111.05,1.7,63.75 +5197,46,30,2.5,111.05,1.7,63.75 +5198,46,30,2.5,111.05,1.7,63.75 +5199,46,30,2.5,111.05,1.7,63.75 +5200,46,30,2.5,111.05,1.7,63.75 +5201,46,30,2.5,111.05,1.7,63.75 +5202,46,30,2.5,111.05,1.7,63.75 +5203,46,30,2.5,111.05,1.7,63.75 +5204,46,30,2.5,111.05,1.7,63.75 +5205,46,30,2.5,111.05,1.7,63.75 +5206,46,30,2.5,111.05,1.7,63.75 +5207,46,30,2.5,111.05,1.7,63.75 +5208,46,30,2.5,111.05,1.7,63.75 +5209,46,30,2.5,111.05,1.7,63.75 +5210,46,30,2.5,111.05,1.7,63.75 +5211,46,30,2.5,111.05,1.7,63.75 +5212,46,30,2.5,111.05,1.7,63.75 +5213,46,30,2.5,111.05,1.7,63.75 +5214,46,30,2.5,111.05,1.7,63.75 +5215,46,30,2.5,111.05,1.7,63.75 +5216,46,30,2.5,111.05,1.7,63.75 +5217,46,30,2.5,111.05,1.7,63.75 +5218,46,30,2.5,111.05,1.7,63.75 +5219,46,30,2.5,111.05,1.7,63.75 +5220,46,30,2.5,111.05,1.7,63.75 +5221,46,30,2.5,111.05,1.7,63.75 +5222,46,30,2.5,111.05,1.7,63.75 +5223,46,30,2.5,111.05,1.7,63.75 +5224,46,30,2.5,111.05,1.7,63.75 +5225,46,30,2.5,111.05,1.7,63.75 +5226,46,30,2.5,111.05,1.7,63.75 +5227,46,30,2.5,111.05,1.7,63.75 +5228,46,30,2.5,111.05,1.7,63.75 +5229,46,30,2.5,111.05,1.7,63.75 +5230,46,30,2.5,111.05,1.7,63.75 +5231,46,30,2.5,111.05,1.7,63.75 +5232,46,30,2.5,111.05,1.7,63.75 +5233,46,30,2.5,111.05,1.7,63.75 +5234,46,30,2.5,111.05,1.7,63.75 +5235,46,30,2.5,111.05,1.7,63.75 +5236,46,30,2.5,111.05,1.7,63.75 +5237,46,30,2.5,111.05,1.7,63.75 +5238,46,30,2.5,111.05,1.7,63.75 +5239,46,30,2.5,111.05,1.7,63.75 +5240,46,30,2.5,111.05,1.7,63.75 +5241,46,30,2.5,111.05,1.7,63.75 +5242,46,30,2.5,111.05,1.7,63.75 +5243,46,30,2.5,111.05,1.7,63.75 +5244,46,30,2.5,111.05,1.7,63.75 +5245,46,30,2.5,111.05,1.7,63.75 +5246,46,30,2.5,111.05,1.7,63.75 +5247,46,30,2.5,111.05,1.7,63.75 +5248,46,30,2.5,111.05,1.7,63.75 +5249,46,30,2.5,111.05,1.7,63.75 +5250,46,30,2.5,111.05,1.7,63.75 +5251,46,30,2.5,111.05,1.7,63.75 +5252,46,30,2.5,111.05,1.7,63.75 +5253,46,30,2.5,111.05,1.7,63.75 +5254,46,30,2.5,111.05,1.7,63.75 +5255,46,30,2.5,111.05,1.7,63.75 +5256,46,30,2.5,111.05,1.7,63.75 +5257,46,30,2.5,111.05,1.7,63.75 +5258,46,30,2.5,111.05,1.7,63.75 +5259,46,30,2.5,111.05,1.7,63.75 +5260,46,30,2.5,111.05,1.7,63.75 +5261,46,30,2.5,111.05,1.7,63.75 +5262,46,30,2.5,111.05,1.7,63.75 +5263,46,30,2.5,111.05,1.7,63.75 +5264,46,30,2.5,111.05,1.7,63.75 +5265,46,30,2.5,111.05,1.7,63.75 +5266,46,30,2.5,111.05,1.7,63.75 +5267,46,30,2.5,111.05,1.7,63.75 +5268,46,30,2.5,111.05,1.7,63.75 +5269,46,30,2.5,111.05,1.7,63.75 +5270,46,30,2.5,111.05,1.7,63.75 +5271,46,30,2.5,111.05,1.7,63.75 +5272,46,30,2.5,111.05,1.7,63.75 +5273,46,30,2.5,111.05,1.7,63.75 +5274,46,30,2.5,111.05,1.7,63.75 +5275,46,30,2.5,111.05,1.7,63.75 +5276,46,30,2.5,111.05,1.7,63.75 +5277,46,30,2.5,111.05,1.7,63.75 +5278,46,30,2.5,111.05,1.7,63.75 +5279,46,30,2.5,111.05,1.7,63.75 +5280,46,30,2.5,111.05,1.7,63.75 +5281,46,30,2.5,111.05,1.7,63.75 +5282,46,30,2.5,111.05,1.7,63.75 +5283,46,30,2.5,111.05,1.7,63.75 +5284,46,30,2.5,111.05,1.7,63.75 +5285,46,30,2.5,111.05,1.7,63.75 +5286,46,30,2.5,111.05,1.7,63.75 +5287,46,30,2.5,111.05,1.7,63.75 +5288,46,30,2.5,111.05,1.7,63.75 +5289,46,30,2.5,111.05,1.7,63.75 +5290,46,30,2.5,111.05,1.7,63.75 +5291,46,30,2.5,111.05,1.7,63.75 +5292,46,30,2.5,111.05,1.7,63.75 +5293,46,30,2.5,111.05,1.7,63.75 +5294,46,30,2.5,111.05,1.7,63.75 +5295,46,30,2.5,111.05,1.7,63.75 +5296,46,30,2.5,111.05,1.7,63.75 +5297,46,30,2.5,111.05,1.7,63.75 +5298,46,30,2.5,111.05,1.7,63.75 +5299,46,30,2.5,111.05,1.7,63.75 +5300,46,30,2.5,111.05,1.7,63.75 +5301,46,30,2.5,111.05,1.7,63.75 +5302,46,30,2.5,111.05,1.7,63.75 +5303,46,30,2.5,111.05,1.7,63.75 +5304,46,30,2.5,111.05,1.7,63.75 +5305,46,30,2.5,111.05,1.7,63.75 +5306,46,30,2.5,111.05,1.7,63.75 +5307,46,30,2.5,111.05,1.7,63.75 +5308,46,30,2.5,111.05,1.7,63.75 +5309,46,30,2.5,111.05,1.7,63.75 +5310,46,30,2.5,111.05,1.7,63.75 +5311,46,30,2.5,111.05,1.7,63.75 +5312,46,30,2.5,111.05,1.7,63.75 +5313,46,30,2.5,111.05,1.7,63.75 +5314,46,30,2.5,111.05,1.7,63.75 +5315,46,30,2.5,111.05,1.7,63.75 +5316,46,30,2.5,111.05,1.7,63.75 +5317,46,30,2.5,111.05,1.7,63.75 +5318,46,30,2.5,111.05,1.7,63.75 +5319,46,30,2.5,111.05,1.7,63.75 +5320,46,30,2.5,111.05,1.7,63.75 +5321,46,30,2.5,111.05,1.7,63.75 +5322,46,30,2.5,111.05,1.7,63.75 +5323,46,30,2.5,111.05,1.7,63.75 +5324,46,30,2.5,111.05,1.7,63.75 +5325,46,30,2.5,111.05,1.7,63.75 +5326,46,30,2.5,111.05,1.7,63.75 +5327,46,30,2.5,111.05,1.7,63.75 +5328,46,30,2.5,111.05,1.7,63.75 +5329,46,30,2.5,111.05,1.7,63.75 +5330,46,30,2.5,111.05,1.7,63.75 +5331,46,30,2.5,111.05,1.7,63.75 +5332,46,30,2.5,111.05,1.7,63.75 +5333,46,30,2.5,111.05,1.7,63.75 +5334,46,30,2.5,111.05,1.7,63.75 +5335,46,30,2.5,111.05,1.7,63.75 +5336,46,30,2.5,111.05,1.7,63.75 +5337,46,30,2.5,111.05,1.7,63.75 +5338,46,30,2.5,111.05,1.7,63.75 +5339,46,30,2.5,111.05,1.7,63.75 +5340,46,30,2.5,111.05,1.7,63.75 +5341,46,30,2.5,111.05,1.7,63.75 +5342,46,30,2.5,111.05,1.7,63.75 +5343,46,30,2.5,111.05,1.7,63.75 +5344,46,30,2.5,111.05,1.7,63.75 +5345,46,30,2.5,111.05,1.7,63.75 +5346,46,30,2.5,111.05,1.7,63.75 +5347,46,30,2.5,111.05,1.7,63.75 +5348,46,30,2.5,111.05,1.7,63.75 +5349,46,30,2.5,111.05,1.7,63.75 +5350,46,30,2.5,111.05,1.7,63.75 +5351,46,30,2.5,111.05,1.7,63.75 +5352,46,30,2.5,111.05,1.7,63.75 +5353,46,30,2.5,111.05,1.7,63.75 +5354,46,30,2.5,111.05,1.7,63.75 +5355,46,30,2.5,111.05,1.7,63.75 +5356,46,30,2.5,111.05,1.7,63.75 +5357,46,30,2.5,111.05,1.7,63.75 +5358,46,30,2.5,111.05,1.7,63.75 +5359,46,30,2.5,111.05,1.7,63.75 +5360,46,30,2.5,111.05,1.7,63.75 +5361,46,30,2.5,111.05,1.7,63.75 +5362,46,30,2.5,111.05,1.7,63.75 +5363,46,30,2.5,111.05,1.7,63.75 +5364,46,30,2.5,111.05,1.7,63.75 +5365,46,30,2.5,111.05,1.7,63.75 +5366,46,30,2.5,111.05,1.7,63.75 +5367,46,30,2.5,111.05,1.7,63.75 +5368,46,30,2.5,111.05,1.7,63.75 +5369,46,30,2.5,111.05,1.7,63.75 +5370,46,30,2.5,111.05,1.7,63.75 +5371,46,30,2.5,111.05,1.7,63.75 +5372,46,30,2.5,111.05,1.7,63.75 +5373,46,30,2.5,111.05,1.7,63.75 +5374,46,30,2.5,111.05,1.7,63.75 +5375,46,30,2.5,111.05,1.7,63.75 +5376,46,30,2.5,111.05,1.7,63.75 +5377,46,30,2.5,111.05,1.7,63.75 +5378,46,30,2.5,111.05,1.7,63.75 +5379,46,30,2.5,111.05,1.7,63.75 +5380,46,30,2.5,111.05,1.7,63.75 +5381,46,30,2.5,111.05,1.7,63.75 +5382,46,30,2.5,111.05,1.7,63.75 +5383,46,30,2.5,111.05,1.7,63.75 +5384,46,30,2.5,111.05,1.7,63.75 +5385,46,30,2.5,111.05,1.7,63.75 +5386,46,30,2.5,111.05,1.7,63.75 +5387,46,30,2.5,111.05,1.7,63.75 +5388,46,30,2.5,111.05,1.7,63.75 +5389,46,30,2.5,111.05,1.7,63.75 +5390,46,30,2.5,111.05,1.7,63.75 +5391,46,30,2.5,111.05,1.7,63.75 +5392,46,30,2.5,111.05,1.7,63.75 +5393,46,30,2.5,111.05,1.7,63.75 +5394,46,30,2.5,111.05,1.7,63.75 +5395,46,30,2.5,111.05,1.7,63.75 +5396,46,30,2.5,111.05,1.7,63.75 +5397,46,30,2.5,111.05,1.7,63.75 +5398,46,30,2.5,111.05,1.7,63.75 +5399,46,30,2.5,111.05,1.7,63.75 +5400,46,30,2.5,111.05,1.7,63.75 +5401,46,30,2.5,111.05,1.7,63.75 +5402,46,30,2.5,111.05,1.7,63.75 +5403,46,30,2.5,111.05,1.7,63.75 +5404,46,30,2.5,111.05,1.7,63.75 +5405,46,30,2.5,111.05,1.7,63.75 +5406,46,30,2.5,111.05,1.7,63.75 +5407,46,30,2.5,111.05,1.7,63.75 +5408,46,30,2.5,111.05,1.7,63.75 +5409,46,30,2.5,111.05,1.7,63.75 +5410,46,30,2.5,111.05,1.7,63.75 +5411,46,30,2.5,111.05,1.7,63.75 +5412,46,30,2.5,111.05,1.7,63.75 +5413,46,30,2.5,111.05,1.7,63.75 +5414,46,30,2.5,111.05,1.7,63.75 +5415,46,30,2.5,111.05,1.7,63.75 +5416,46,30,2.5,111.05,1.7,63.75 +5417,46,30,2.5,111.05,1.7,63.75 +5418,46,30,2.5,111.05,1.7,63.75 +5419,46,30,2.5,111.05,1.7,63.75 +5420,46,30,2.5,111.05,1.7,63.75 +5421,46,30,2.5,111.05,1.7,63.75 +5422,46,30,2.5,111.05,1.7,63.75 +5423,46,30,2.5,111.05,1.7,63.75 +5424,46,30,2.5,111.05,1.7,63.75 +5425,46,30,2.5,111.05,1.7,63.75 +5426,46,30,2.5,111.05,1.7,63.75 +5427,46,30,2.5,111.05,1.7,63.75 +5428,46,30,2.5,111.05,1.7,63.75 +5429,46,30,2.5,111.05,1.7,63.75 +5430,46,30,2.5,111.05,1.7,63.75 +5431,46,30,2.5,111.05,1.7,63.75 +5432,46,30,2.5,111.05,1.7,63.75 +5433,46,30,2.5,111.05,1.7,63.75 +5434,46,30,2.5,111.05,1.7,63.75 +5435,46,30,2.5,111.05,1.7,63.75 +5436,46,30,2.5,111.05,1.7,63.75 +5437,46,30,2.5,111.05,1.7,63.75 +5438,46,30,2.5,111.05,1.7,63.75 +5439,46,30,2.5,111.05,1.7,63.75 +5440,46,30,2.5,111.05,1.7,63.75 +5441,46,30,2.5,111.05,1.7,63.75 +5442,46,30,2.5,111.05,1.7,63.75 +5443,46,30,2.5,111.05,1.7,63.75 +5444,46,30,2.5,111.05,1.7,63.75 +5445,46,30,2.5,111.05,1.7,63.75 +5446,46,30,2.5,111.05,1.7,63.75 +5447,46,30,2.5,111.05,1.7,63.75 +5448,46,30,2.5,111.05,1.7,63.75 +5449,46,30,2.5,111.05,1.7,63.75 +5450,46,30,2.5,111.05,1.7,63.75 +5451,46,30,2.5,111.05,1.7,63.75 +5452,46,30,2.5,111.05,1.7,63.75 +5453,46,30,2.5,111.05,1.7,63.75 +5454,46,30,2.5,111.05,1.7,63.75 +5455,46,30,2.5,111.05,1.7,63.75 +5456,46,30,2.5,111.05,1.7,63.75 +5457,46,30,2.5,111.05,1.7,63.75 +5458,46,30,2.5,111.05,1.7,63.75 +5459,46,30,2.5,111.05,1.7,63.75 +5460,46,30,2.5,111.05,1.7,63.75 +5461,46,30,2.5,111.05,1.7,63.75 +5462,46,30,2.5,111.05,1.7,63.75 +5463,46,30,2.5,111.05,1.7,63.75 +5464,46,30,2.5,111.05,1.7,63.75 +5465,46,30,2.5,111.05,1.7,63.75 +5466,46,30,2.5,111.05,1.7,63.75 +5467,46,30,2.5,111.05,1.7,63.75 +5468,46,30,2.5,111.05,1.7,63.75 +5469,46,30,2.5,111.05,1.7,63.75 +5470,46,30,2.5,111.05,1.7,63.75 +5471,46,30,2.5,111.05,1.7,63.75 +5472,46,30,2.5,111.05,1.7,63.75 +5473,46,30,2.5,111.05,1.7,63.75 +5474,46,30,2.5,111.05,1.7,63.75 +5475,46,30,2.5,111.05,1.7,63.75 +5476,46,30,2.5,111.05,1.7,63.75 +5477,46,30,2.5,111.05,1.7,63.75 +5478,46,30,2.5,111.05,1.7,63.75 +5479,46,30,2.5,111.05,1.7,63.75 +5480,46,30,2.5,111.05,1.7,63.75 +5481,46,30,2.5,111.05,1.7,63.75 +5482,46,30,2.5,111.05,1.7,63.75 +5483,46,30,2.5,111.05,1.7,63.75 +5484,46,30,2.5,111.05,1.7,63.75 +5485,46,30,2.5,111.05,1.7,63.75 +5486,46,30,2.5,111.05,1.7,63.75 +5487,46,30,2.5,111.05,1.7,63.75 +5488,46,30,2.5,111.05,1.7,63.75 +5489,46,30,2.5,111.05,1.7,63.75 +5490,46,30,2.5,111.05,1.7,63.75 +5491,46,30,2.5,111.05,1.7,63.75 +5492,46,30,2.5,111.05,1.7,63.75 +5493,46,30,2.5,111.05,1.7,63.75 +5494,46,30,2.5,111.05,1.7,63.75 +5495,46,30,2.5,111.05,1.7,63.75 +5496,46,30,2.5,111.05,1.7,63.75 +5497,46,30,2.5,111.05,1.7,63.75 +5498,46,30,2.5,111.05,1.7,63.75 +5499,46,30,2.5,111.05,1.7,63.75 +5500,46,30,2.5,111.05,1.7,63.75 +5501,46,30,2.5,111.05,1.7,63.75 +5502,46,30,2.5,111.05,1.7,63.75 +5503,46,30,2.5,111.05,1.7,63.75 +5504,46,30,2.5,111.05,1.7,63.75 +5505,46,30,2.5,111.05,1.7,63.75 +5506,46,30,2.5,111.05,1.7,63.75 +5507,46,30,2.5,111.05,1.7,63.75 +5508,46,30,2.5,111.05,1.7,63.75 +5509,46,30,2.5,111.05,1.7,63.75 +5510,46,30,2.5,111.05,1.7,63.75 +5511,46,30,2.5,111.05,1.7,63.75 +5512,46,30,2.5,111.05,1.7,63.75 +5513,46,30,2.5,111.05,1.7,63.75 +5514,46,30,2.5,111.05,1.7,63.75 +5515,46,30,2.5,111.05,1.7,63.75 +5516,46,30,2.5,111.05,1.7,63.75 +5517,46,30,2.5,111.05,1.7,63.75 +5518,46,30,2.5,111.05,1.7,63.75 +5519,46,30,2.5,111.05,1.7,63.75 +5520,46,30,2.5,111.05,1.7,63.75 +5521,46,30,2.5,111.05,1.7,63.75 +5522,46,30,2.5,111.05,1.7,63.75 +5523,46,30,2.5,111.05,1.7,63.75 +5524,46,30,2.5,111.05,1.7,63.75 +5525,46,30,2.5,111.05,1.7,63.75 +5526,46,30,2.5,111.05,1.7,63.75 +5527,46,30,2.5,111.05,1.7,63.75 +5528,46,30,2.5,111.05,1.7,63.75 +5529,46,30,2.5,111.05,1.7,63.75 +5530,46,30,2.5,111.05,1.7,63.75 +5531,46,30,2.5,111.05,1.7,63.75 +5532,46,30,2.5,111.05,1.7,63.75 +5533,46,30,2.5,111.05,1.7,63.75 +5534,46,30,2.5,111.05,1.7,63.75 +5535,46,30,2.5,111.05,1.7,63.75 +5536,46,30,2.5,111.05,1.7,63.75 +5537,46,30,2.5,111.05,1.7,63.75 +5538,46,30,2.5,111.05,1.7,63.75 +5539,46,30,2.5,111.05,1.7,63.75 +5540,46,30,2.5,111.05,1.7,63.75 +5541,46,30,2.5,111.05,1.7,63.75 +5542,46,30,2.5,111.05,1.7,63.75 +5543,46,30,2.5,111.05,1.7,63.75 +5544,46,30,2.5,111.05,1.7,63.75 +5545,46,30,2.5,111.05,1.7,63.75 +5546,46,30,2.5,111.05,1.7,63.75 +5547,46,30,2.5,111.05,1.7,63.75 +5548,46,30,2.5,111.05,1.7,63.75 +5549,46,30,2.5,111.05,1.7,63.75 +5550,46,30,2.5,111.05,1.7,63.75 +5551,46,30,2.5,111.05,1.7,63.75 +5552,46,30,2.5,111.05,1.7,63.75 +5553,46,30,2.5,111.05,1.7,63.75 +5554,46,30,2.5,111.05,1.7,63.75 +5555,46,30,2.5,111.05,1.7,63.75 +5556,46,30,2.5,111.05,1.7,63.75 +5557,46,30,2.5,111.05,1.7,63.75 +5558,46,30,2.5,111.05,1.7,63.75 +5559,46,30,2.5,111.05,1.7,63.75 +5560,46,30,2.5,111.05,1.7,63.75 +5561,46,30,2.5,111.05,1.7,63.75 +5562,46,30,2.5,111.05,1.7,63.75 +5563,46,30,2.5,111.05,1.7,63.75 +5564,46,30,2.5,111.05,1.7,63.75 +5565,46,30,2.5,111.05,1.7,63.75 +5566,46,30,2.5,111.05,1.7,63.75 +5567,46,30,2.5,111.05,1.7,63.75 +5568,46,30,2.5,111.05,1.7,63.75 +5569,46,30,2.5,111.05,1.7,63.75 +5570,46,30,2.5,111.05,1.7,63.75 +5571,46,30,2.5,111.05,1.7,63.75 +5572,46,30,2.5,111.05,1.7,63.75 +5573,46,30,2.5,111.05,1.7,63.75 +5574,46,30,2.5,111.05,1.7,63.75 +5575,46,30,2.5,111.05,1.7,63.75 +5576,46,30,2.5,111.05,1.7,63.75 +5577,46,30,2.5,111.05,1.7,63.75 +5578,46,30,2.5,111.05,1.7,63.75 +5579,46,30,2.5,111.05,1.7,63.75 +5580,46,30,2.5,111.05,1.7,63.75 +5581,46,30,2.5,111.05,1.7,63.75 +5582,46,30,2.5,111.05,1.7,63.75 +5583,46,30,2.5,111.05,1.7,63.75 +5584,46,30,2.5,111.05,1.7,63.75 +5585,46,30,2.5,111.05,1.7,63.75 +5586,46,30,2.5,111.05,1.7,63.75 +5587,46,30,2.5,111.05,1.7,63.75 +5588,46,30,2.5,111.05,1.7,63.75 +5589,46,30,2.5,111.05,1.7,63.75 +5590,46,30,2.5,111.05,1.7,63.75 +5591,46,30,2.5,111.05,1.7,63.75 +5592,46,30,2.5,111.05,1.7,63.75 +5593,46,30,2.5,111.05,1.7,63.75 +5594,46,30,2.5,111.05,1.7,63.75 +5595,46,30,2.5,111.05,1.7,63.75 +5596,46,30,2.5,111.05,1.7,63.75 +5597,46,30,2.5,111.05,1.7,63.75 +5598,46,30,2.5,111.05,1.7,63.75 +5599,46,30,2.5,111.05,1.7,63.75 +5600,46,30,2.5,111.05,1.7,63.75 +5601,46,30,2.5,111.05,1.7,63.75 +5602,46,30,2.5,111.05,1.7,63.75 +5603,46,30,2.5,111.05,1.7,63.75 +5604,46,30,2.5,111.05,1.7,63.75 +5605,46,30,2.5,111.05,1.7,63.75 +5606,46,30,2.5,111.05,1.7,63.75 +5607,46,30,2.5,111.05,1.7,63.75 +5608,46,30,2.5,111.05,1.7,63.75 +5609,46,30,2.5,111.05,1.7,63.75 +5610,46,30,2.5,111.05,1.7,63.75 +5611,46,30,2.5,111.05,1.7,63.75 +5612,46,30,2.5,111.05,1.7,63.75 +5613,46,30,2.5,111.05,1.7,63.75 +5614,46,30,2.5,111.05,1.7,63.75 +5615,46,30,2.5,111.05,1.7,63.75 +5616,46,30,2.5,111.05,1.7,63.75 +5617,46,30,2.5,111.05,1.7,63.75 +5618,46,30,2.5,111.05,1.7,63.75 +5619,46,30,2.5,111.05,1.7,63.75 +5620,46,30,2.5,111.05,1.7,63.75 +5621,46,30,2.5,111.05,1.7,63.75 +5622,46,30,2.5,111.05,1.7,63.75 +5623,46,30,2.5,111.05,1.7,63.75 +5624,46,30,2.5,111.05,1.7,63.75 +5625,46,30,2.5,111.05,1.7,63.75 +5626,46,30,2.5,111.05,1.7,63.75 +5627,46,30,2.5,111.05,1.7,63.75 +5628,46,30,2.5,111.05,1.7,63.75 +5629,46,30,2.5,111.05,1.7,63.75 +5630,46,30,2.5,111.05,1.7,63.75 +5631,46,30,2.5,111.05,1.7,63.75 +5632,46,30,2.5,111.05,1.7,63.75 +5633,46,30,2.5,111.05,1.7,63.75 +5634,46,30,2.5,111.05,1.7,63.75 +5635,46,30,2.5,111.05,1.7,63.75 +5636,46,30,2.5,111.05,1.7,63.75 +5637,46,30,2.5,111.05,1.7,63.75 +5638,46,30,2.5,111.05,1.7,63.75 +5639,46,30,2.5,111.05,1.7,63.75 +5640,46,30,2.5,111.05,1.7,63.75 +5641,46,30,2.5,111.05,1.7,63.75 +5642,46,30,2.5,111.05,1.7,63.75 +5643,46,30,2.5,111.05,1.7,63.75 +5644,46,30,2.5,111.05,1.7,63.75 +5645,46,30,2.5,111.05,1.7,63.75 +5646,46,30,2.5,111.05,1.7,63.75 +5647,46,30,2.5,111.05,1.7,63.75 +5648,46,30,2.5,111.05,1.7,63.75 +5649,46,30,2.5,111.05,1.7,63.75 +5650,46,30,2.5,111.05,1.7,63.75 +5651,46,30,2.5,111.05,1.7,63.75 +5652,46,30,2.5,111.05,1.7,63.75 +5653,46,30,2.5,111.05,1.7,63.75 +5654,46,30,2.5,111.05,1.7,63.75 +5655,46,30,2.5,111.05,1.7,63.75 +5656,46,30,2.5,111.05,1.7,63.75 +5657,46,30,2.5,111.05,1.7,63.75 +5658,46,30,2.5,111.05,1.7,63.75 +5659,46,30,2.5,111.05,1.7,63.75 +5660,46,30,2.5,111.05,1.7,63.75 +5661,46,30,2.5,111.05,1.7,63.75 +5662,46,30,2.5,111.05,1.7,63.75 +5663,46,30,2.5,111.05,1.7,63.75 +5664,46,30,2.5,111.05,1.7,63.75 +5665,46,30,2.5,111.05,1.7,63.75 +5666,46,30,2.5,111.05,1.7,63.75 +5667,46,30,2.5,111.05,1.7,63.75 +5668,46,30,2.5,111.05,1.7,63.75 +5669,46,30,2.5,111.05,1.7,63.75 +5670,46,30,2.5,111.05,1.7,63.75 +5671,46,30,2.5,111.05,1.7,63.75 +5672,46,30,2.5,111.05,1.7,63.75 +5673,46,30,2.5,111.05,1.7,63.75 +5674,46,30,2.5,111.05,1.7,63.75 +5675,46,30,2.5,111.05,1.7,63.75 +5676,46,30,2.5,111.05,1.7,63.75 +5677,46,30,2.5,111.05,1.7,63.75 +5678,46,30,2.5,111.05,1.7,63.75 +5679,46,30,2.5,111.05,1.7,63.75 +5680,46,30,2.5,111.05,1.7,63.75 +5681,46,30,2.5,111.05,1.7,63.75 +5682,46,30,2.5,111.05,1.7,63.75 +5683,46,30,2.5,111.05,1.7,63.75 +5684,46,30,2.5,111.05,1.7,63.75 +5685,46,30,2.5,111.05,1.7,63.75 +5686,46,30,2.5,111.05,1.7,63.75 +5687,46,30,2.5,111.05,1.7,63.75 +5688,46,30,2.5,111.05,1.7,63.75 +5689,46,30,2.5,111.05,1.7,63.75 +5690,46,30,2.5,111.05,1.7,63.75 +5691,46,30,2.5,111.05,1.7,63.75 +5692,46,30,2.5,111.05,1.7,63.75 +5693,46,30,2.5,111.05,1.7,63.75 +5694,46,30,2.5,111.05,1.7,63.75 +5695,46,30,2.5,111.05,1.7,63.75 +5696,46,30,2.5,111.05,1.7,63.75 +5697,46,30,2.5,111.05,1.7,63.75 +5698,46,30,2.5,111.05,1.7,63.75 +5699,46,30,2.5,111.05,1.7,63.75 +5700,46,30,2.5,111.05,1.7,63.75 +5701,46,30,2.5,111.05,1.7,63.75 +5702,46,30,2.5,111.05,1.7,63.75 +5703,46,30,2.5,111.05,1.7,63.75 +5704,46,30,2.5,111.05,1.7,63.75 +5705,46,30,2.5,111.05,1.7,63.75 +5706,46,30,2.5,111.05,1.7,63.75 +5707,46,30,2.5,111.05,1.7,63.75 +5708,46,30,2.5,111.05,1.7,63.75 +5709,46,30,2.5,111.05,1.7,63.75 +5710,46,30,2.5,111.05,1.7,63.75 +5711,46,30,2.5,111.05,1.7,63.75 +5712,46,30,2.5,111.05,1.7,63.75 +5713,46,30,2.5,111.05,1.7,63.75 +5714,46,30,2.5,111.05,1.7,63.75 +5715,46,30,2.5,111.05,1.7,63.75 +5716,46,30,2.5,111.05,1.7,63.75 +5717,46,30,2.5,111.05,1.7,63.75 +5718,46,30,2.5,111.05,1.7,63.75 +5719,46,30,2.5,111.05,1.7,63.75 +5720,46,30,2.5,111.05,1.7,63.75 +5721,46,30,2.5,111.05,1.7,63.75 +5722,46,30,2.5,111.05,1.7,63.75 +5723,46,30,2.5,111.05,1.7,63.75 +5724,46,30,2.5,111.05,1.7,63.75 +5725,46,30,2.5,111.05,1.7,63.75 +5726,46,30,2.5,111.05,1.7,63.75 +5727,46,30,2.5,111.05,1.7,63.75 +5728,46,30,2.5,111.05,1.7,63.75 +5729,46,30,2.5,111.05,1.7,63.75 +5730,46,30,2.5,111.05,1.7,63.75 +5731,46,30,2.5,111.05,1.7,63.75 +5732,46,30,2.5,111.05,1.7,63.75 +5733,46,30,2.5,111.05,1.7,63.75 +5734,46,30,2.5,111.05,1.7,63.75 +5735,46,30,2.5,111.05,1.7,63.75 +5736,46,30,2.5,111.05,1.7,63.75 +5737,46,30,2.5,111.05,1.7,63.75 +5738,46,30,2.5,111.05,1.7,63.75 +5739,46,30,2.5,111.05,1.7,63.75 +5740,46,30,2.5,111.05,1.7,63.75 +5741,46,30,2.5,111.05,1.7,63.75 +5742,46,30,2.5,111.05,1.7,63.75 +5743,46,30,2.5,111.05,1.7,63.75 +5744,46,30,2.5,111.05,1.7,63.75 +5745,46,30,2.5,111.05,1.7,63.75 +5746,46,30,2.5,111.05,1.7,63.75 +5747,46,30,2.5,111.05,1.7,63.75 +5748,46,30,2.5,111.05,1.7,63.75 +5749,46,30,2.5,111.05,1.7,63.75 +5750,46,30,2.5,111.05,1.7,63.75 +5751,46,30,2.5,111.05,1.7,63.75 +5752,46,30,2.5,111.05,1.7,63.75 +5753,46,30,2.5,111.05,1.7,63.75 +5754,46,30,2.5,111.05,1.7,63.75 +5755,46,30,2.5,111.05,1.7,63.75 +5756,46,30,2.5,111.05,1.7,63.75 +5757,46,30,2.5,111.05,1.7,63.75 +5758,46,30,2.5,111.05,1.7,63.75 +5759,46,30,2.5,111.05,1.7,63.75 +5760,46,30,2.5,111.05,1.7,63.75 +5761,46,30,2.5,111.05,1.7,63.75 +5762,46,30,2.5,111.05,1.7,63.75 +5763,46,30,2.5,111.05,1.7,63.75 +5764,46,30,2.5,111.05,1.7,63.75 +5765,46,30,2.5,111.05,1.7,63.75 +5766,46,30,2.5,111.05,1.7,63.75 +5767,46,30,2.5,111.05,1.7,63.75 +5768,46,30,2.5,111.05,1.7,63.75 +5769,46,30,2.5,111.05,1.7,63.75 +5770,46,30,2.5,111.05,1.7,63.75 +5771,46,30,2.5,111.05,1.7,63.75 +5772,46,30,2.5,111.05,1.7,63.75 +5773,46,30,2.5,111.05,1.7,63.75 +5774,46,30,2.5,111.05,1.7,63.75 +5775,46,30,2.5,111.05,1.7,63.75 +5776,46,30,2.5,111.05,1.7,63.75 +5777,46,30,2.5,111.05,1.7,63.75 +5778,46,30,2.5,111.05,1.7,63.75 +5779,46,30,2.5,111.05,1.7,63.75 +5780,46,30,2.5,111.05,1.7,63.75 +5781,46,30,2.5,111.05,1.7,63.75 +5782,46,30,2.5,111.05,1.7,63.75 +5783,46,30,2.5,111.05,1.7,63.75 +5784,46,30,2.5,111.05,1.7,63.75 +5785,46,30,2.5,111.05,1.7,63.75 +5786,46,30,2.5,111.05,1.7,63.75 +5787,46,30,2.5,111.05,1.7,63.75 +5788,46,30,2.5,111.05,1.7,63.75 +5789,46,30,2.5,111.05,1.7,63.75 +5790,46,30,2.5,111.05,1.7,63.75 +5791,46,30,2.5,111.05,1.7,63.75 +5792,46,30,2.5,111.05,1.7,63.75 +5793,46,30,2.5,111.05,1.7,63.75 +5794,46,30,2.5,111.05,1.7,63.75 +5795,46,30,2.5,111.05,1.7,63.75 +5796,46,30,2.5,111.05,1.7,63.75 +5797,46,30,2.5,111.05,1.7,63.75 +5798,46,30,2.5,111.05,1.7,63.75 +5799,46,30,2.5,111.05,1.7,63.75 +5800,46,30,2.5,111.05,1.7,63.75 +5801,46,30,2.5,111.05,1.7,63.75 +5802,46,30,2.5,111.05,1.7,63.75 +5803,46,30,2.5,111.05,1.7,63.75 +5804,46,30,2.5,111.05,1.7,63.75 +5805,46,30,2.5,111.05,1.7,63.75 +5806,46,30,2.5,111.05,1.7,63.75 +5807,46,30,2.5,111.05,1.7,63.75 +5808,46,30,2.5,111.05,1.7,63.75 +5809,46,30,2.5,111.05,1.7,63.75 +5810,46,30,2.5,111.05,1.7,63.75 +5811,46,30,2.5,111.05,1.7,63.75 +5812,46,30,2.5,111.05,1.7,63.75 +5813,46,30,2.5,111.05,1.7,63.75 +5814,46,30,2.5,111.05,1.7,63.75 +5815,46,30,2.5,111.05,1.7,63.75 +5816,46,30,2.5,111.05,1.7,63.75 +5817,46,30,2.5,111.05,1.7,63.75 +5818,46,30,2.5,111.05,1.7,63.75 +5819,46,30,2.5,111.05,1.7,63.75 +5820,46,30,2.5,111.05,1.7,63.75 +5821,46,30,2.5,111.05,1.7,63.75 +5822,46,30,2.5,111.05,1.7,63.75 +5823,46,30,2.5,111.05,1.7,63.75 +5824,46,30,2.5,111.05,1.7,63.75 +5825,46,30,2.5,111.05,1.7,63.75 +5826,46,30,2.5,111.05,1.7,63.75 +5827,46,30,2.5,111.05,1.7,63.75 +5828,46,30,2.5,111.05,1.7,63.75 +5829,46,30,2.5,111.05,1.7,63.75 +5830,46,30,2.5,111.05,1.7,63.75 +5831,46,30,2.5,111.05,1.7,63.75 +5832,46,30,2.5,111.05,1.7,63.75 +5833,46,30,2.5,111.05,1.7,63.75 +5834,46,30,2.5,111.05,1.7,63.75 +5835,46,30,2.5,111.05,1.7,63.75 +5836,46,30,2.5,111.05,1.7,63.75 +5837,46,30,2.5,111.05,1.7,63.75 +5838,46,30,2.5,111.05,1.7,63.75 +5839,46,30,2.5,111.05,1.7,63.75 +5840,46,30,2.5,111.05,1.7,63.75 +5841,46,30,2.5,111.05,1.7,63.75 +5842,46,30,2.5,111.05,1.7,63.75 +5843,46,30,2.5,111.05,1.7,63.75 +5844,46,30,2.5,111.05,1.7,63.75 +5845,46,30,2.5,111.05,1.7,63.75 +5846,46,30,2.5,111.05,1.7,63.75 +5847,46,30,2.5,111.05,1.7,63.75 +5848,46,30,2.5,111.05,1.7,63.75 +5849,46,30,2.5,111.05,1.7,63.75 +5850,46,30,2.5,111.05,1.7,63.75 +5851,46,30,2.5,111.05,1.7,63.75 +5852,46,30,2.5,111.05,1.7,63.75 +5853,46,30,2.5,111.05,1.7,63.75 +5854,46,30,2.5,111.05,1.7,63.75 +5855,46,30,2.5,111.05,1.7,63.75 +5856,46,30,2.5,111.05,1.7,63.75 +5857,46,30,2.5,111.05,1.7,63.75 +5858,46,30,2.5,111.05,1.7,63.75 +5859,46,30,2.5,111.05,1.7,63.75 +5860,46,30,2.5,111.05,1.7,63.75 +5861,46,30,2.5,111.05,1.7,63.75 +5862,46,30,2.5,111.05,1.7,63.75 +5863,46,30,2.5,111.05,1.7,63.75 +5864,46,30,2.5,111.05,1.7,63.75 +5865,46,30,2.5,111.05,1.7,63.75 +5866,46,30,2.5,111.05,1.7,63.75 +5867,46,30,2.5,111.05,1.7,63.75 +5868,46,30,2.5,111.05,1.7,63.75 +5869,46,30,2.5,111.05,1.7,63.75 +5870,46,30,2.5,111.05,1.7,63.75 +5871,46,30,2.5,111.05,1.7,63.75 +5872,46,30,2.5,111.05,1.7,63.75 +5873,46,30,2.5,111.05,1.7,63.75 +5874,46,30,2.5,111.05,1.7,63.75 +5875,46,30,2.5,111.05,1.7,63.75 +5876,46,30,2.5,111.05,1.7,63.75 +5877,46,30,2.5,111.05,1.7,63.75 +5878,46,30,2.5,111.05,1.7,63.75 +5879,46,30,2.5,111.05,1.7,63.75 +5880,46,30,2.5,111.05,1.7,63.75 +5881,46,30,2.5,111.05,1.7,63.75 +5882,46,30,2.5,111.05,1.7,63.75 +5883,46,30,2.5,111.05,1.7,63.75 +5884,46,30,2.5,111.05,1.7,63.75 +5885,46,30,2.5,111.05,1.7,63.75 +5886,46,30,2.5,111.05,1.7,63.75 +5887,46,30,2.5,111.05,1.7,63.75 +5888,46,30,2.5,111.05,1.7,63.75 +5889,46,30,2.5,111.05,1.7,63.75 +5890,46,30,2.5,111.05,1.7,63.75 +5891,46,30,2.5,111.05,1.7,63.75 +5892,46,30,2.5,111.05,1.7,63.75 +5893,46,30,2.5,111.05,1.7,63.75 +5894,46,30,2.5,111.05,1.7,63.75 +5895,46,30,2.5,111.05,1.7,63.75 +5896,46,30,2.5,111.05,1.7,63.75 +5897,46,30,2.5,111.05,1.7,63.75 +5898,46,30,2.5,111.05,1.7,63.75 +5899,46,30,2.5,111.05,1.7,63.75 +5900,46,30,2.5,111.05,1.7,63.75 +5901,46,30,2.5,111.05,1.7,63.75 +5902,46,30,2.5,111.05,1.7,63.75 +5903,46,30,2.5,111.05,1.7,63.75 +5904,46,30,2.5,111.05,1.7,63.75 +5905,46,30,2.5,111.05,1.7,63.75 +5906,46,30,2.5,111.05,1.7,63.75 +5907,46,30,2.5,111.05,1.7,63.75 +5908,46,30,2.5,111.05,1.7,63.75 +5909,46,30,2.5,111.05,1.7,63.75 +5910,46,30,2.5,111.05,1.7,63.75 +5911,46,30,2.5,111.05,1.7,63.75 +5912,46,30,2.5,111.05,1.7,63.75 +5913,46,30,2.5,111.05,1.7,63.75 +5914,46,30,2.5,111.05,1.7,63.75 +5915,46,30,2.5,111.05,1.7,63.75 +5916,46,30,2.5,111.05,1.7,63.75 +5917,46,30,2.5,111.05,1.7,63.75 +5918,46,30,2.5,111.05,1.7,63.75 +5919,46,30,2.5,111.05,1.7,63.75 +5920,46,30,2.5,111.05,1.7,63.75 +5921,46,30,2.5,111.05,1.7,63.75 +5922,46,30,2.5,111.05,1.7,63.75 +5923,46,30,2.5,111.05,1.7,63.75 +5924,46,30,2.5,111.05,1.7,63.75 +5925,46,30,2.5,111.05,1.7,63.75 +5926,46,30,2.5,111.05,1.7,63.75 +5927,46,30,2.5,111.05,1.7,63.75 +5928,46,30,2.5,111.05,1.7,63.75 +5929,46,30,2.5,111.05,1.7,63.75 +5930,46,30,2.5,111.05,1.7,63.75 +5931,46,30,2.5,111.05,1.7,63.75 +5932,46,30,2.5,111.05,1.7,63.75 +5933,46,30,2.5,111.05,1.7,63.75 +5934,46,30,2.5,111.05,1.7,63.75 +5935,46,30,2.5,111.05,1.7,63.75 +5936,46,30,2.5,111.05,1.7,63.75 +5937,46,30,2.5,111.05,1.7,63.75 +5938,46,30,2.5,111.05,1.7,63.75 +5939,46,30,2.5,111.05,1.7,63.75 +5940,46,30,2.5,111.05,1.7,63.75 +5941,46,30,2.5,111.05,1.7,63.75 +5942,46,30,2.5,111.05,1.7,63.75 +5943,46,30,2.5,111.05,1.7,63.75 +5944,46,30,2.5,111.05,1.7,63.75 +5945,46,30,2.5,111.05,1.7,63.75 +5946,46,30,2.5,111.05,1.7,63.75 +5947,46,30,2.5,111.05,1.7,63.75 +5948,46,30,2.5,111.05,1.7,63.75 +5949,46,30,2.5,111.05,1.7,63.75 +5950,46,30,2.5,111.05,1.7,63.75 +5951,46,30,2.5,111.05,1.7,63.75 +5952,46,30,2.5,111.05,1.7,63.75 +5953,46,30,2.5,111.05,1.7,63.75 +5954,46,30,2.5,111.05,1.7,63.75 +5955,46,30,2.5,111.05,1.7,63.75 +5956,46,30,2.5,111.05,1.7,63.75 +5957,46,30,2.5,111.05,1.7,63.75 +5958,46,30,2.5,111.05,1.7,63.75 +5959,46,30,2.5,111.05,1.7,63.75 +5960,46,30,2.5,111.05,1.7,63.75 +5961,46,30,2.5,111.05,1.7,63.75 +5962,46,30,2.5,111.05,1.7,63.75 +5963,46,30,2.5,111.05,1.7,63.75 +5964,46,30,2.5,111.05,1.7,63.75 +5965,46,30,2.5,111.05,1.7,63.75 +5966,46,30,2.5,111.05,1.7,63.75 +5967,46,30,2.5,111.05,1.7,63.75 +5968,46,30,2.5,111.05,1.7,63.75 +5969,46,30,2.5,111.05,1.7,63.75 +5970,46,30,2.5,111.05,1.7,63.75 +5971,46,30,2.5,111.05,1.7,63.75 +5972,46,30,2.5,111.05,1.7,63.75 +5973,46,30,2.5,111.05,1.7,63.75 +5974,46,30,2.5,111.05,1.7,63.75 +5975,46,30,2.5,111.05,1.7,63.75 +5976,46,30,2.5,111.05,1.7,63.75 +5977,46,30,2.5,111.05,1.7,63.75 +5978,46,30,2.5,111.05,1.7,63.75 +5979,46,30,2.5,111.05,1.7,63.75 +5980,46,30,2.5,111.05,1.7,63.75 +5981,46,30,2.5,111.05,1.7,63.75 +5982,46,30,2.5,111.05,1.7,63.75 +5983,46,30,2.5,111.05,1.7,63.75 +5984,46,30,2.5,111.05,1.7,63.75 +5985,46,30,2.5,111.05,1.7,63.75 +5986,46,30,2.5,111.05,1.7,63.75 +5987,46,30,2.5,111.05,1.7,63.75 +5988,46,30,2.5,111.05,1.7,63.75 +5989,46,30,2.5,111.05,1.7,63.75 +5990,46,30,2.5,111.05,1.7,63.75 +5991,46,30,2.5,111.05,1.7,63.75 +5992,46,30,2.5,111.05,1.7,63.75 +5993,46,30,2.5,111.05,1.7,63.75 +5994,46,30,2.5,111.05,1.7,63.75 +5995,46,30,2.5,111.05,1.7,63.75 +5996,46,30,2.5,111.05,1.7,63.75 +5997,46,30,2.5,111.05,1.7,63.75 +5998,46,30,2.5,111.05,1.7,63.75 +5999,46,30,2.5,111.05,1.7,63.75 +6000,46,30,2.5,111.05,1.7,63.75 diff --git a/EC-GN-JA-PCF/.svn/pristine/ff/ff406d08d84f4e651ba42a2c25882683d5424a9b.svn-base b/EC-GN-JA-PCF/.svn/pristine/ff/ff406d08d84f4e651ba42a2c25882683d5424a9b.svn-base new file mode 100644 index 0000000..90ddfc7 --- /dev/null +++ b/EC-GN-JA-PCF/.svn/pristine/ff/ff406d08d84f4e651ba42a2c25882683d5424a9b.svn-base @@ -0,0 +1,9 @@ +############################################################################ +## User provided environment variables +############################################################################ + +#epicsEnvSet("EPICS_CA_SERVER_PORT", "5064") +#epicsEnvSet("EPICS_CA_ADDR_LIST", "") +#epicsEnvSet("EPICS_CA_AUTO_ADDR_LIST", "YES") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/.svn/wc.db b/EC-GN-JA-PCF/.svn/wc.db new file mode 100644 index 0000000000000000000000000000000000000000..7e0fbe8a80269db09b44ec5fc09198a4accbdcc5 GIT binary patch literal 535552 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 + +4.0.0 +org.iter.codac.units +EC-GN +codac +1.0.0 +CODAC Core System EC-GN subsystem +CODAC Core System EC-GN subsystem +http://www.iter.org/ + + + +subsystem +iandc +%(/opt/tools/get-vcs-url.sh --path=${project.basedir}) + + + + +org.iter.codac.units +maven-iter-settings +6.3.0 + + + + + +ferrog + +unit owner + + + + + + + +compile + + + +org.apache.maven.plugins +maven-iter-plugin +true + + + +src +${project.artifactId} +${project.version} +${project.description} + + +${rpm.vcs.url} + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/pom_13-05-25_15-59-1747151989_659047792.xml b/EC-GN-JA-PCF/pom_13-05-25_15-59-1747151989_659047792.xml new file mode 100755 index 0000000..926c122 --- /dev/null +++ b/EC-GN-JA-PCF/pom_13-05-25_15-59-1747151989_659047792.xml @@ -0,0 +1,87 @@ + + +4.0.0 +org.iter.codac.units +EC-GN +codac +1.0.0 +CODAC Core System EC-GN subsystem +CODAC Core System EC-GN subsystem +http://www.iter.org/ + + + +subsystem +iandc +%(/opt/tools/get-vcs-url.sh --path=${project.basedir}) + + + + +org.iter.codac.units +maven-iter-settings +6.3.0 + + + + + +ferrog + +unit owner + + + + + + + +compile + + + +org.apache.maven.plugins +maven-iter-plugin +true + + + +src +${project.artifactId} +${project.version} +${project.description} + + +${rpm.vcs.url} + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/sdd.xml b/EC-GN-JA-PCF/sdd.xml new file mode 100755 index 0000000..ed94286 --- /dev/null +++ b/EC-GN-JA-PCF/sdd.xml @@ -0,0 +1,23557 @@ + + + + + +52 + + + +EC-GN + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +10.136.136.101 + + +52RF01-PSH-4410 + + + + +52RF01-PCF-4210.codac.iter.org + + +52RF01-PCF-4210.codac.iter.org-R1 + + +52RF01-PCF-4210.codac.iter.org-R1 + + + + + +10.136.136.13-T1 + + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-ACQ + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-CONF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-MODE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-ACQ + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-CONF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-MODE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AISTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AOSTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-LDAICF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-LDAOCF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AISTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AOSTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-LDAICF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-LDAOCF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BLKTMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-FTEAALL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-RESET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-TAIUTC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-DMSG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-NS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-DMSG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-NS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AIPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AISMPL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AISR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AITB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AOPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AOTB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-CHAIMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-CHAOMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AIPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AISMPL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AISR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AITB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AOPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AOTB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-CHAIMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-CHAOMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-FILTINT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-POWERP3 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-POWERP4 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-POWERP5 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIINPROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIOUTROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIPCHANGE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIPWDG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIWDGTRIG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-WDGTOUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-FILTINT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-POWERP3 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-POWERP4 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-POWERP5 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIINPROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIOUTROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIPCHANGE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIPWDG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIWDGTRIG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-WDGTOUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BDTM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BDTMN + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BDTMS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BLKTM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-DEVNAME + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-DRIVER + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-FTEMAX + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-FTENUM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-HBDTM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-LVL_ERRS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-SERIAL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-SYNC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-SYNCLOST + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:DIO4900-YON + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-AI-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-AO-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-LOAD + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-LOADED + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DI-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DO-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN-EGU + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-MST-TRIG + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-PREP-MODE + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHORT-PULSE + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-TRIG-SOUR + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2810-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2810-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2820-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2820-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2830-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2830-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MRF2910-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MRF2910-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-BEAMON-TIME + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-ERR + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-NAME + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN-CALC + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN-DAM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-ELAPSED + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-PREHEAT-TIME + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-PREP-TIME-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-FLNK1 + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-FLNK2 + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-ID + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-PLOT + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SM + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-OUTON-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-OUTON-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-RST + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-STAT + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-TR + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-MANM + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-CURR-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-CURR-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-DCV-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-DCV-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-EREF + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-EREF-MSP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-ERROR + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-IDN + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCI + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCV + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-AMP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-FREQ + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-OFFS + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-OP-CALC + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-OP-V-DIFF + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-LOC + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-OUTON-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-REM + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-RST + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-MANM + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-ACV-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-ACV-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-RU-TIME + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-STAT + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-CURR-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-CURR-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-EREF + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-EREF-MSP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-ERROR + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-FRQ-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-FRQ-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-IDN + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACI + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-FRQ + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-AUTO-MODE-SET + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-PREP-WF + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CALC + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-MANM + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MI + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MO + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ERR + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-SWP-LIM + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-SWP-RB + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-RB + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-SWPR-SET + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-VOLT-MON + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-MANM + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MI + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MO + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ERR + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-SWP-LIM + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-SWP-RB + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-RB + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-SWPR-SET + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-VOLT-MON + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-RAMPDWN-CMP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV1 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV2 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV3 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV5 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV6 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV7 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV8 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YFLT-OC + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YFLT-OV + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YSTA-GAOP + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YTRP + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YTRP2 + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:DIO4900-YON + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-AI-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-AO-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-LOAD + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-LOADED + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DI-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DO-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN-EGU + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-MST-TRIG + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-PREP-MODE + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHORT-PULSE + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-TRIG-SOUR + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2810-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2810-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2820-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2820-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2830-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2830-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MRF2910-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MRF2910-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-BEAMON-TIME + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-ERR + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +string +configuration + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-NAME + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN-CALC + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN-DAM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-ELAPSED + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-PREHEAT-TIME + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-PREP-TIME-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-FLNK1 + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-FLNK2 + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-ID + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-PLOT + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SM + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-OUTON-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-OUTON-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-RST + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-STAT + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-TR + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-MANM + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-CURR-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-CURR-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-DCV-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-DCV-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-EREF + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-EREF-MSP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-ERROR + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-IDN + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCI + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCV + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-AMP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-FREQ + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-OFFS + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-OP-CALC + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-OP-V-DIFF + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-LOC + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-OUTON-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-REM + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-RST + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-MANM + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-ACV-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-ACV-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-RU-TIME + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-STAT + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-CURR-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-CURR-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-EREF + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-EREF-MSP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-ERROR + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-FRQ-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-FRQ-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-IDN + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACI + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-FRQ + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-AUTO-MODE-SET + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-PREP-WF + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CALC + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-MANM + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MI + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MO + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ERR + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-SWP-LIM + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-SWP-RB + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-RB + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-SWPR-SET + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-VOLT-MON + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-MANM + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MI + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MO + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ERR + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-SWP-LIM + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-SWP-RB + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-RB + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-SWPR-SET + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-VOLT-MON + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV1 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV2 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV3 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV5 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV6 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV7 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV8 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-YSTA-GBOP + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-YTRP + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-YTRP2 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-CTRP + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GA1 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GA2 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GA3 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GB1 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GB2 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GB3 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PSU0000-YSTA-MOD + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-CONF-STAT + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-RECONF + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SW-TRIG + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-RST-FLT + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-LEN + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-LEN-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-MODE + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-MODE-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-PUB-DLY + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-PUB-DLY-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-STAT + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD1-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD2-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD3-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD4-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-RDY-TOUT + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-GY1PRM + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-GY2PRM + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-OPGY1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-OPGY2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-RV1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-RV2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-RV3 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YON-CCPS1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YON-CCPS2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YSTA-MPSS + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTRP + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD3 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD4 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-ST1R + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-ST2R + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-ST3R + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-CON-HV + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-CON-SW + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-CTRP + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-YFLT + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-YSTA + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-MANM + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-EREF + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-EREF-MSP + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-EREF-P + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-ET + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-ET-WF + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-IT + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-IT-WF + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-DT-HVON + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-DT-SWON + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-EREF-CONV + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-PREP-WF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-CON-HV + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-CON-SW + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-CTRP + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-YFLT + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-YSTA + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-MANM + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-EREF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-EREF-MSP + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-EREF-P + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-ET + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-ET-WF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-IT + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-IT-WF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-DT-HVON + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-DT-SWON + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-EREF-CONV + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-PREP-WF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-CON-HV + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-CON-SW + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-CTRP + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-YFLT + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-YSTA + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-MANM + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-EREF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-EREF-MSP + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-ET + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-ET-WF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-IT + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-IT-WF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-DT-HVON + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-DT-SWON + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-PREP-WF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-CON-HV + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-CON-SW + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-CTRP + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-YFLT + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-YSTA + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-MANM + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-EREF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-EREF-MSP + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-ET + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-ET-WF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-IT + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-IT-WF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-DT-HVON + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-DT-SWON + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-PREP-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-COFF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-CON-MOD + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-CON-SW + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-TYSTA + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-YFLT + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-MANM + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-EREF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-EREF-MSP + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GA + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GA-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GB + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GB-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GA + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GA-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GB + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GB-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-DT-HVON + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-EREF-CALC + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-HVON-CALC + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-PREP-WF + + + + + + + + + + +iocEC-GN-PSH0PCF +PCFCORE IOC +epicsioc +IOC + + + +52RF01-PCF-4210 + +iocEC-GN-PCF0SYSM +PCFSYSM IOC +epicsioc +IOC + + + +52RF01-PSH-4410 + +iocEC-GN-PSH0SYSM +PSHSYSM IOC +epicsioc +IOC + + + +52RF01-PSH-4410 + +iocEC-GN-PSH0CUB +PSHCUB IOC +epicsioc +IOC + + + + + + diff --git a/EC-GN-JA-PCF/sdd_13-05-25_15-59-1747151989_678406675.xml b/EC-GN-JA-PCF/sdd_13-05-25_15-59-1747151989_678406675.xml new file mode 100755 index 0000000..ed94286 --- /dev/null +++ b/EC-GN-JA-PCF/sdd_13-05-25_15-59-1747151989_678406675.xml @@ -0,0 +1,23557 @@ + + + + + +52 + + + +EC-GN + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +10.136.136.101 + + +52RF01-PSH-4410 + + + + +52RF01-PCF-4210.codac.iter.org + + +52RF01-PCF-4210.codac.iter.org-R1 + + +52RF01-PCF-4210.codac.iter.org-R1 + + + + + +10.136.136.13-T1 + + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-ACQ + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-CONF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-MODE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-ACQ + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-CONF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-MODE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AISTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AOSTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-LDAICF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-LDAOCF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AISTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AOSTSP + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-LDAICF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-LDAOCF + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BLKTMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-FTEAALL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-RESET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-TAIUTC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-DMSG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-NS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-SR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-DMSG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-NS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-SR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6259-1-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AIPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AISMPL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AISR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AITB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AOPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-AOTB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-CHAIMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-CHAOMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AIPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AISMPL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AISR + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AITB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AOPU + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-AOTB + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-CHAIMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-CHAOMO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-POST + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-PRET + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCCC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCCH + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCCO + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCLK + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-SCTY + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6368-1-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-FILTINT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-POWERP3 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-POWERP4 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-POWERP5 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIINPROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIOUTROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIPCHANGE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIPWDG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-RTSIWDGTRIG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-0-WDGTOUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-FILTINT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-POWERP3 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-POWERP4 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-POWERP5 + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIINPROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIOUTROUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIPCHANGE + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIPWDG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-RTSIWDGTRIG + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6528-1-WDGTOUT + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BDTM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BDTMN + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BDTMS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-BLKTM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-DEVNAME + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-DRIVER + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-FTEMAX + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-FTENUM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-HBDTM + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-LVL_ERRS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-SERIAL + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-STATUS + + + +true +EC-GN-HWCF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-SYNC + + + +true +EC-GN-HWCF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-HWCF:6683-0-SYNCLOST + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:DIO4900-YON + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-AI-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-AO-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-LOAD + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-LOADED + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DI-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DO-SIMM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN-EGU + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-MST-TRIG + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-PREP-MODE + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHORT-PULSE + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-TRIG-SOUR + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2810-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2810-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2820-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2820-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2830-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MOE2830-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MRF2910-ET + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:MRF2910-ET-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-BEAMON-TIME + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-ERR + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-CSV-NAME + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN-CALC + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-DT-SHOTLEN-DAM + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-ELAPSED + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-PREHEAT-TIME + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-PREP-TIME-WF + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-FLNK1 + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-FLNK2 + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-ID + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SHOT-PLOT + + + +true +EC-GN-P01-GAF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF:STAT-SM + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-OUTON-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-OUTON-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-RST + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-STAT + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-TR + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-MANM + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-CURR-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-CURR-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-DCV-RB + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-DCV-SP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-EREF + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-EREF-MSP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-ERROR + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-IDN + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCI + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCV + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-AMP + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-FREQ + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-OFFS + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-OP-CALC + + + +true +EC-GN-P01-GAF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-CCPS:STAT-OP-V-DIFF + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-LOC + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-OUTON-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-REM + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-RST + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-MANM + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-ACV-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-ACV-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-RU-TIME + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-STAT + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-CURR-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-CURR-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-EREF + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-EREF-MSP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-ERROR + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-FRQ-RB + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-FRQ-SP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-IDN + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACI + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:PSU2610-MEAS-FRQ + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-AUTO-MODE-SET + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-PREP-WF + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CALC + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GAF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-FHPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-MANM + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MI + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MO + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-ERR + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-SWP-LIM + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-SWP-RB + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-RB + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-TRG-SWPR-SET + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:PSU2130-VOLT-MON + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GAF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-GCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-MANM + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-SIMM + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MI + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MO + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-ERR + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-SWP-LIM + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-SWP-RB + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-RB + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-TRG-SWPR-SET + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:PSU2120-VOLT-MON + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-RAMPDWN-CMP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GAF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAF-MCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV1 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV2 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV3 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV5 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV6 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV7 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-RV8 + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YFLT-OC + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YFLT-OV + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YSTA-GAOP + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YTRP + + + +true +EC-GN-P01-GAFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GAFP:FMC4310-YTRP2 + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:DIO4900-YON + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-AI-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-AO-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-LOAD + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-LOADED + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DI-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DO-SIMM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN-EGU + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-MST-TRIG + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-PREP-MODE + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHORT-PULSE + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-TRIG-SOUR + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2810-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2810-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2820-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2820-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2830-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MOE2830-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MRF2910-ET + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:MRF2910-ET-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-BEAMON-TIME + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-ERR + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +string +configuration + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-CSV-NAME + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN-CALC + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-DT-SHOTLEN-DAM + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-ELAPSED + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-PREHEAT-TIME + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-PREP-TIME-WF + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-FLNK1 + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-FLNK2 + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-ID + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SHOT-PLOT + + + +true +EC-GN-P01-GBF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF:STAT-SM + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-OUTON-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-OUTON-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-RST + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-STAT + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-TR + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-MANM + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-CURR-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-CURR-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-DCV-RB + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-DCV-SP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-EREF + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-EREF-MSP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-ERROR + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-IDN + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCI + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCV + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-AMP + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-FREQ + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-OFFS + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-OP-CALC + + + +true +EC-GN-P01-GBF-CCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-CCPS:STAT-OP-V-DIFF + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-LOC + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-OUTON-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-REM + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-RST + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-MANM + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-ACV-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-ACV-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-RU-TIME + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-STAT + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-CURR-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-CURR-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-EREF + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-EREF-MSP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-ERROR + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-FRQ-RB + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-FRQ-SP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +string +state + +string +STRING40 +320 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-IDN + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACI + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:PSU2610-MEAS-FRQ + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-AUTO-MODE-SET + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-PREP-WF + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CALC + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GBF-FHPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-FHPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-MANM + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MI + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MO + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-ERR + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-SWP-LIM + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-SWP-RB + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-RB + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-TRG-SWPR-SET + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:PSU2130-VOLT-MON + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GBF-GCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-GCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-MANM + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-SIMM + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MI + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MO + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-ERR + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-SWP-LIM + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-SWP-RB + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-RB + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MI + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MO + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-TRG-SWPR-SET + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:PSU2120-VOLT-MON + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-ACT-SP-CALC + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-PREP-WF + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-RAMPUP-CMP + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-RAMPUP-OFF + + + +true +EC-GN-P01-GBF-MCPS +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBF-MCPS:STAT-TRG-CURR-SET-CALC + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV1 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV2 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV3 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV5 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV6 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV7 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-RV8 + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-YSTA-GBOP + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-YTRP + + + +true +EC-GN-P01-GBFP +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GBFP:FMC4310-YTRP2 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-CTRP + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GA1 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GA2 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GA3 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GB1 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GB2 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PCF4210-YTS-GB3 + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:PSU0000-YSTA-MOD + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-CONF-STAT + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-RECONF + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SW-TRIG + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-RST-FLT + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-LEN + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-LEN-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-MODE + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete multi-state +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-MODE-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-PUB-DLY + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-PUB-DLY-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY-RB + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +discrete multi-state +configuration + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-DAQ-STAT + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD1-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD2-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD3-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +continuous +state + +uint +ULONG +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-MD4-LIM + + + +true +EC-GN-P01-GPF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPF:STAT-RDY-TOUT + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-GY1PRM + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-GY2PRM + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-OPGY1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-CON-OPGY2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-RV1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-RV2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-RV3 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YON-CCPS1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YON-CCPS2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YSTA-MPSS + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTRP + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD1 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD2 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD3 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-MD4 + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-ST1R + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-ST2R + + + +true +EC-GN-P01-GPS +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-GPS:PLC4110-YTS-ST3R + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-CON-HV + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-CON-SW + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-CTRP + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-YFLT + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-YSTA + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-MANM + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-EREF + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-EREF-MSP + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-EREF-P + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-ET + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-ET-WF + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-IT + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:PSU3000-IT-WF + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-DT-HVON + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-DT-SWON + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-EREF-CONV + + + +true +EC-GN-P01-PA1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA1F:STAT-PREP-WF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-CON-HV + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-CON-SW + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-CTRP + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-YFLT + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-YSTA + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-MANM + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-EREF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-EREF-MSP + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-EREF-P + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-ET + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-ET-WF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-IT + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:PSU4000-IT-WF + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-DT-HVON + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-DT-SWON + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-EREF-CONV + + + +true +EC-GN-P01-PA2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PA2F:STAT-PREP-WF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-CON-HV + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-CON-SW + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-CTRP + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-YFLT + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-YSTA + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-MANM + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-EREF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-EREF-MSP + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-ET + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-ET-WF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-IT + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:PSU1000-IT-WF + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-DT-HVON + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-DT-SWON + + + +true +EC-GN-P01-PB1F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB1F:STAT-PREP-WF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-CON-HV + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-CON-SW + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-CTRP + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-YFLT + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-YSTA + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-MANM + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-EREF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-EREF-MSP + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-ET + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-ET-WF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-IT + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:PSU2000-IT-WF + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-DT-HVON + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-DT-SWON + + + +true +EC-GN-P01-PB2F +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PB2F:STAT-PREP-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-COFF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-CON-MOD + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +configuration + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-CON-SW + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-TYSTA + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-YFLT + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +discrete two-state +state + +uint +UCHAR +8 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-MANM + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-EREF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +configuration + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-EREF-MSP + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GA + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GA-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GB + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-ET-GB-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GA + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GA-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GB + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:PSU0000-IT-GB-WF + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +countinuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-DT-HVON + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-EREF-CALC + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-HVON-CALC + + + +true +EC-GN-P01-PMF +conventional +PON +0 +true +continuous +state + +float +FLOAT +32 + + +0.0 + +volatile + + + + + + + + + + + + + +false + + + +52RF01-PCF-4210 + + +iocEC-GN-PSH0PCF +EC-GN-P01-PMF:STAT-PREP-WF + + + + + + + + + + +iocEC-GN-PSH0PCF +PCFCORE IOC +epicsioc +IOC + + + +52RF01-PCF-4210 + +iocEC-GN-PCF0SYSM +PCFSYSM IOC +epicsioc +IOC + + + +52RF01-PSH-4410 + +iocEC-GN-PSH0SYSM +PSHSYSM IOC +epicsioc +IOC + + + +52RF01-PSH-4410 + +iocEC-GN-PSH0CUB +PSHCUB IOC +epicsioc +IOC + + + + + + diff --git a/EC-GN-JA-PCF/src/main/beast/EC-beast.xml b/EC-GN-JA-PCF/src/main/beast/EC-beast.xml new file mode 100644 index 0000000..595af96 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/beast/EC-beast.xml @@ -0,0 +1,273 @@ + + + + + + + +Connection or frame of the communication for 4110 configuration and state is invalid +true +0 + +4110 communication failed +

The connection for configuration and state to 4110 was broken or the frame is not correct
+ + +Causes related to the alarm +
Timestamp update error (TIME) +Data block header, footer or length mismatch (FERROR) +Data block version mismatch (FVERS) +Data block alive counter update error (ALIVEC) +Frame lost due (FLOST) +PLC communication broken (CFGSTAT) +Lost a redundant CPU (CPU0-ALIVE, CPU1-ALIVE)
+
+ +Corrective action +
Check whether the PLC is running\n Check whether network is ok\n Contact maintenance service (if needed)
+
+ +4110 State Comm. Alarm OPI +
/opt/codac/opi/boy/resources/alarmpages/healthMonitoring/ITER-SYSM-PLCHLTS_Alarm.opi "CBS1=EC, CBS2=GN, PP=01, NNNN=4110, TTT=PLC, PPPP=52RF, ALARM_PV=EC-GN-SYSM-52RF-01:PLC4110-PLCHLTS, ALARM_PATH=/CODAC_AlarmHandler/EC/EC-GN/EC-GN-SYSM, LEVEL=ITER-EC-GN-SYSM, ALARM_GUIDANCE1_TITLE=PLC communication failed, ALARM_GUIDANCE1_DETAILS=The connection for configuration and state to PLC is broken or the frame is not correct."
+
+ + +Connection or frame of the communication for PLC Event is invalid +true +0 + +PLC Event communication failed +
The connection for event to PLC was broken or the frame is not correct
+
+ +Causes related to the alarm +
Event Frame count update error (FRAMEC) +PLC Event communication broken (EVTSTAT)
+
+ +Corrective action +
Check whether the PLC is running\n Check whether network is ok\n Contact maintenance service (if needed)
+
+ +PLC Event Comm. Alarm OPI +
/opt/codac/opi/boy/resources/alarmpages/healthMonitoring/ITER-SYSM-EVTHLTS_Alarm.opi "CBS1=EC, CBS2=GN, CBS3=SYSM, PP=01, NNNN=4110, TTT=PLC, PPPP=52RF, ALARM_PV=EC-GN-SYSM-52RF-01:PLC4110-EVTHLTS, ALARM_PATH=/CODAC_AlarmHandler/EC/EC-GN/EC-GN-SYSM, LEVEL=ITER-EC-GN-SYSM, ALARM_GUIDANCE1_TITLE=PLC Event communication failed, ALARM_GUIDANCE1_DETAILS=The connection for event to PLC was broken or the frame is not correct."
+
+
+ +Any one of CPU, MEM, Disk, FD, Process of the host is in alarm state +true +0 + +System is an abnormal state +
Check the mentioned alarm load and identify the cause
+
+ +System resources related to the alarm +
1 - one of CPU, Disk, Memory, FD load is high or necessary process has been stopped +2 - two of CPU, Disk, Memory, FD load are high and/or necessary process has been stopped +3 - three of CPU, Disk, Memory, FD load are high and/or necessary process has been stopped
+
+ +Corrective action +
If any load remains high continuously, contact maintenance service. +In addition, check if the necessary processes are running
+
+ +Temporary actions to suppress +
Change the alarm limits or severity for each load in alarm state. + + Ex1) alarm limits +% caput EC-GN-SYSM-52RF-01:PCF4210-CPUUTL.HIGH 90 +% caput EC-GN-SYSM-52RF-01:PCF4210-CPUUTL.HIHI 100 + + Ex2) alarm severity +% caput EC-GN-SYSM-52RF-01:PCF4210-MEMUTL.HSV NO_ALARM +% caput EC-GN-SYSM-52RF-01:PCF4210-MEMUTL.HHSV NO_ALARM
+
+ +System Health Alarm OPI + +
/opt/codac/opi/boy/resources/alarmpages/healthMonitoring/ITER-SYSM-SHLT_Alarm.opi "CBS=EC-GN-SYSM, PPPP=52RF, PP=01, TTT=PCF, NNNN=4210, ALARM_PV=EC-GN-SYSM-52RF-01:PCF4210-SHLT, ALARM_PATH=/CODAC_AlarmHandler/EC/EC-GN/EC-GN-SYSM, LEVEL=ITER-EC-GN-SYSM, ALARM_GUIDANCE1_TITLE=System resource utilization is high, ALARM_GUIDANCE1_DETAILS=Any one of CPU / MEM / Disk / FD / Process of the host is in alarm state. Check the mentioned alarm load and identify the cause. If any load remains high continuously contact maintenance service."
+
+
+ +Any one of CPU, MEM, Disk or FD of the host is in alarm state +true +0 + +System resource utilization is high +
Check the mentioned alarm load and identify the cause
+
+ +System resources related to the alarm +
1 - CPU utilization high (CPUUTL) : CPU utilization is high +2 - Memory utilization high (MEMUTL) : Memory utilization is high +3 - CPU, Mem util high (CPUUTL, MEMUTL) : CPU and Memory utilizations are high +4 - Disk utilization high (DISKUTL) : Disk utilizations are high +5 - CPU, Disk util high (CPUUTL,DISKUTL) : CPU and Disk utilizations are high +6 - Mem, Disk util high (MEMUTL,DISKUTL) : Memory and Disk utilizations are high +7 - CPU, Mem, Disk util high (CPUUTL,MEMUTL,DISKUTL) : CPU/Memory/Disk utilizations are high +8 - FD utilization high (FDUTL) : FD utilization is high +9 - CPU, FD util high (CPUUTL,FDUTL) : CPU and FD are in alarm state +10 - Mem, FD util high (MEMUTL,FDUTL) : Memory and FD are in alarm state +11 - CPU, Mem, FD alarm (CPUUTL,MEMUTL,FDUTL) : CPU/Memory/FD are in alarm state +12 - Disk, FD util high (DISKUTL,FDUTL) : Disk and FD are in alarm state +13 - CPU, Disk, FD alarm (CPUUTL,DISKUTL,FDUTL) : CPU/Disk/FD are in alarm state +14 - Mem, Disk, FD alarm (MEMUTL,DISKUTL,FDUTL) : Memory/Disk/FD are in alarm state +15 - CPU,Mem,Disk,FD alarm (CPUUTL,MEMUTL,DISKUTL,FDUTL) : CPU/Memory/Disk/FD alarm
+
+ +Corrective action +
If any load remains high continuously, contact maintenance service
+
+ +Temporary actions to suppress +
Change the alarm limits or severity for each load in alarm state. + + Ex1) alarm limits +% caput EC-GN-SYSM-52RF-01:PCF4210-CPUUTL.HIGH 90 +% caput EC-GN-SYSM-52RF-01:PCF4210-CPUUTL.HIHI 100 + + Ex2) alarm severity +% caput EC-GN-SYSM-52RF-01:PCF4210-MEMUTL.HSV NO_ALARM +% caput EC-GN-SYSM-52RF-01:PCF4210-MEMUTL.HHSV NO_ALARM
+
+ +System Health Alarm OPI +
/opt/codac/opi/boy/resources/alarmpages/healthMonitoring/ITER-SYSM-SYSHLTS_Alarm.opi "CBS=EC-GN-SYSM, PPPP=52RF, PP=01, TTT=PCF, NNNN=4210, ALARM_PV=EC-GN-SYSM-52RF-01:PCF4210-SYSHLTS, ALARM_PATH=/CODAC_AlarmHandler/EC/EC-GN/EC-GN-SYSM, LEVEL=ITER-EC-GN-SYSM, ALARM_GUIDANCE1_TITLE=System resource utilization is high, ALARM_GUIDANCE1_DETAILS=Any one of CPU / MEM / Disk / FD of the host is in alarm state. Check the mentioned alarm load and identify the cause. If any load remains high continuously contact maintenance service."
+
+
+ +Current state of TCNd and the synchronization state of the device +true +0 + +System time synchronization is not fully operational +
If status is N/A, then check that tcnd is running. +If status is not operational for some time, please contact maintenance service.
+
+ +Documentation TCNd +
firefox file:///opt/codac/doc/pdf/TCNd_User_Manual.pdf
+
+ +TCNd Sync. Alarm OPI +
/opt/codac/opi/boy/resources/alarmpages/healthMonitoring/ITER-SYSM-TSTATUS_Alarm.opi "CBS=EC-GN-SYSM, PPPP=52RF, PP=01, TTT=PCF, NNNN=4210, ALARM_PV=EC-GN-SYSM-52RF-01:PCF4210-TSTATUS, ALARM_PATH=/CODAC_AlarmHandler/EC/EC-GN/EC-GN-SYSM, LEVEL=ITER-EC-GN-SYSM, ALARM_GUIDANCE1_TITLE=System clock synchronization with respect to ITER time, ALARM_GUIDANCE1_DETAILS=The computer system clock is synchronized to ITER time using the TCN daemon (TCNd) component of CODAC Core SYstem. Please see TCNd User Manual (ITER_D_MUYNT6 - /opt/codac/doc/pdf/TCNd_User_Manual.pdf). +The clock synchronization has been detected to have been in an abnormal state. i.e. STATUS different from 'Operational' after two minutes of uptime."
+
+
+ +Any one of CPU, MEM, Disk, FD, Process of the host is in alarm state +true +0 + +System is an abnormal state +
Check the mentioned alarm load and identify the cause
+
+ +System resources related to the alarm +
1 - one of CPU, Disk, Memory, FD load is high or necessary process has been stopped +2 - two of CPU, Disk, Memory, FD load are high and/or necessary process has been stopped +3 - three of CPU, Disk, Memory, FD load are high and/or necessary process has been stopped
+
+ +Corrective action +
If any load remains high continuously, contact maintenance service. +In addition, check if the necessary processes are running
+
+ +Temporary actions to suppress +
Change the alarm limits or severity for each load in alarm state. + + Ex1) alarm limits +% caput EC-GN-SYSM-52RF-01:PSH4410-CPUUTL.HIGH 90 +% caput EC-GN-SYSM-52RF-01:PSH4410-CPUUTL.HIHI 100 + Ex2) alarm severity +% caput EC-GN-SYSM-52RF-01:PSH4410-MEMUTL.HSV NO_ALARM +% caput EC-GN-SYSM-52RF-01:PSH4410-MEMUTL.HHSV NO_ALARM
+
+ +System Health Alarm OPI +
/opt/codac/opi/boy/resources/alarmpages/healthMonitoring/ITER-SYSM-SHLT_Alarm.opi "CBS=EC-GN-SYSM, PPPP=52RF, PP=01, TTT=PSH, NNNN=4410, ALARM_PV=EC-GN-SYSM-52RF-01:PSH4410-SHLT, ALARM_PATH=/CODAC_AlarmHandler/EC/EC-GN/EC-GN-SYSM, LEVEL=ITER-EC-GN-SYSM, ALARM_GUIDANCE1_TITLE=System resource utilization is high, ALARM_GUIDANCE1_DETAILS=Any one of CPU / MEM / Disk / FD / Process of the host is in alarm state. Check the mentioned alarm load and identify the cause. If any load remains high continuously contact maintenance service."
+
+
+ +Any one of CPU, MEM, Disk or FD of the host is in alarm state +true +0 + +System resource utilization is high +
Check the mentioned alarm load and identify the cause
+
+ +System resources related to the alarm +
1 - CPU utilization high (CPUUTL) : CPU utilization is high +2 - Memory utilization high (MEMUTL) : Memory utilization is high +3 - CPU, Mem util high (CPUUTL, MEMUTL) : CPU and Memory utilizations are high +4 - Disk utilization high (DISKUTL) : Disk utilizations are high +5 - CPU, Disk util high (CPUUTL,DISKUTL) : CPU and Disk utilizations are high +6 - Mem, Disk util high (MEMUTL,DISKUTL) : Memory and Disk utilizations are high +7 - CPU, Mem, Disk util high (CPUUTL,MEMUTL,DISKUTL) : CPU/Memory/Disk utilizations are high +8 - FD utilization high (FDUTL) : FD utilization is high +9 - CPU, FD util high (CPUUTL,FDUTL) : CPU and FD are in alarm state +10 - Mem, FD util high (MEMUTL,FDUTL) : Memory and FD are in alarm state +11 - CPU, Mem, FD alarm (CPUUTL,MEMUTL,FDUTL) : CPU/Memory/FD are in alarm state +12 - Disk, FD util high (DISKUTL,FDUTL) : Disk and FD are in alarm state +13 - CPU, Disk, FD alarm (CPUUTL,DISKUTL,FDUTL) : CPU/Disk/FD are in alarm state +14 - Mem, Disk, FD alarm (MEMUTL,DISKUTL,FDUTL) : Memory/Disk/FD are in alarm state +15 - CPU,Mem,Disk,FD alarm (CPUUTL,MEMUTL,DISKUTL,FDUTL) : CPU/Memory/Disk/FD alarm
+
+ +Corrective action +
If any load remains high continuously, contact maintenance service
+
+ +Temporary actions to suppress +
Change the alarm limits or severity for each load in alarm state. + + Ex1) alarm limits +% caput EC-GN-SYSM-52RF-01:PSH4410-CPUUTL.HIGH 90 +% caput EC-GN-SYSM-52RF-01:PSH4410-CPUUTL.HIHI 100 + + Ex2) alarm severity +% caput EC-GN-SYSM-52RF-01:PSH4410-MEMUTL.HSV NO_ALARM +% caput EC-GN-SYSM-52RF-01:PSH4410-MEMUTL.HHSV NO_ALARM
+
+ +System Health Alarm OPI +
/opt/codac/opi/boy/resources/alarmpages/healthMonitoring/ITER-SYSM-SYSHLTS_Alarm.opi "CBS=EC-GN-SYSM, PPPP=52RF, PP=01, TTT=PSH, NNNN=4410, ALARM_PV=EC-GN-SYSM-52RF-01:PSH4410-SYSHLTS, ALARM_PATH=/CODAC_AlarmHandler/EC/EC-GN/EC-GN-SYSM, LEVEL=ITER-EC-GN-SYSM, ALARM_GUIDANCE1_TITLE=System resource utilization is high, ALARM_GUIDANCE1_DETAILS=Any one of CPU / MEM / Disk / FD of the host is in alarm state. Check the mentioned alarm load and identify the cause. If any load remains high continuously contact maintenance service."
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/beauty/EC-beauty.xml b/EC-GN-JA-PCF/src/main/beauty/EC-beauty.xml new file mode 100755 index 0000000..ebe75ef --- /dev/null +++ b/EC-GN-JA-PCF/src/main/beauty/EC-beauty.xml @@ -0,0 +1,242 @@ + + + + +EC-GN-SYSM + +EC-GN-SYSM-52RF-01:PLC4110-CFGWRCNTR +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PLC4110-PLCHLTS +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PLC4110-EVTHLTS +1.0 +0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-BTIME + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-CCSV + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-CORE-DBDLC + 10.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-CORE-DBRECC + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-CORE-STTOD + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-CPUUTL + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-DISKUTL + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-EPICSV + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-HOSTNAME + 1.0 +0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-MEMUTL + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-NRBPS + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-NSBPS + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-SHLT + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-SYSHLTS + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-SYSM-DBDLC + 10.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-SYSM-DBRECC + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-SYSM-STTOD + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-TDEVICE + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-TOFFSET + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-TSTATUS + 1.0 + 0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-BTIME +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-CCSV +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-CPUUTL +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-DISKUTL +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-EPICSV +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-HOSTNAME +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-MEMUTL +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-NRBPS +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-NSBPS +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-SHLT +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-SYSHLTS +1.0 +0.0 + + + +EC-GN-HWCF + + +EC-GN-P01-GAF + + +EC-GN-P01-GAF-CCPS + + +EC-GN-P01-GAF-FHPS + + +EC-GN-P01-GAF-GCPS + + +EC-GN-P01-GAF-MCPS + + +EC-GN-P01-GAFP + + +EC-GN-P01-GBF + + +EC-GN-P01-GBF-CCPS + + +EC-GN-P01-GBF-FHPS + + +EC-GN-P01-GBF-GCPS + + +EC-GN-P01-GBF-MCPS + + +EC-GN-P01-GBFP + + +EC-GN-P01-GPF + + +EC-GN-P01-GPS + + +EC-GN-P01-PA1F + + +EC-GN-P01-PA2F + + +EC-GN-P01-PB1F + + +EC-GN-P01-PB2F + + +EC-GN-P01-PMF + + diff --git a/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-HWCF_Mimic.opi b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-HWCF_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-HWCF_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GAF-CCPS_Mimic.opi b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GAF-CCPS_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GAF-CCPS_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GAF-FHPS_Mimic.opi b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GAF-FHPS_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GAF-FHPS_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GAF-GCPS_Mimic.opi b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GAF-GCPS_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GAF-GCPS_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GAF-MCPS_Mimic.opi b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GAF-MCPS_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GAF-MCPS_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GAFP_Mimic.opi b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GAFP_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GAFP_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GAF_Mimic.opi b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GAF_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GAF_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GBF-CCPS_Mimic.opi b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GBF-CCPS_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GBF-CCPS_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GBF-FHPS_Mimic.opi b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GBF-FHPS_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GBF-FHPS_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GBF-GCPS_Mimic.opi b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GBF-GCPS_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GBF-GCPS_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GBF-MCPS_Mimic.opi b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GBF-MCPS_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GBF-MCPS_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GBFP_Mimic.opi b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GBFP_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GBFP_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GBF_Mimic.opi b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GBF_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GBF_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GPF_Mimic.opi b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GPF_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GPF_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GPS_Mimic.opi b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GPS_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-GPS_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-PA1F_Mimic.opi b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-PA1F_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-PA1F_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-PA2F_Mimic.opi b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-PA2F_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-PA2F_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-PB1F_Mimic.opi b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-PB1F_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-PB1F_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-PB2F_Mimic.opi b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-PB2F_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-PB2F_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-PMF_Mimic.opi b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-PMF_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01-PMF_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01_Mimic.opi b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN-P01_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN_Mimic.opi b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC-GN_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC_Mimic.opi b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/empty/ITER-EC_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/navigation/Navigation.xml b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation.xml new file mode 100755 index 0000000..2b1cfbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-HWCF.xml b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-HWCF.xml new file mode 100755 index 0000000..12eb6c5 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-HWCF.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GAF-CCPS.xml b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GAF-CCPS.xml new file mode 100755 index 0000000..f0c1369 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GAF-CCPS.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GAF-FHPS.xml b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GAF-FHPS.xml new file mode 100755 index 0000000..0645fab --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GAF-FHPS.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GAF-GCPS.xml b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GAF-GCPS.xml new file mode 100755 index 0000000..30d6e02 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GAF-GCPS.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GAF-MCPS.xml b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GAF-MCPS.xml new file mode 100755 index 0000000..7868875 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GAF-MCPS.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GAF.xml b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GAF.xml new file mode 100755 index 0000000..07012f8 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GAF.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GAFP.xml b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GAFP.xml new file mode 100755 index 0000000..3c42493 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GAFP.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GBF-CCPS.xml b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GBF-CCPS.xml new file mode 100755 index 0000000..e761be7 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GBF-CCPS.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GBF-FHPS.xml b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GBF-FHPS.xml new file mode 100755 index 0000000..aed4fec --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GBF-FHPS.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GBF-GCPS.xml b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GBF-GCPS.xml new file mode 100755 index 0000000..3799297 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GBF-GCPS.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GBF-MCPS.xml b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GBF-MCPS.xml new file mode 100755 index 0000000..b958fd0 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GBF-MCPS.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GBF.xml b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GBF.xml new file mode 100755 index 0000000..0e1b217 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GBF.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GBFP.xml b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GBFP.xml new file mode 100755 index 0000000..2ce42cd --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GBFP.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GPF.xml b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GPF.xml new file mode 100755 index 0000000..761e26b --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GPF.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GPS.xml b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GPS.xml new file mode 100755 index 0000000..c6da874 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-GPS.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-PA1F.xml b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-PA1F.xml new file mode 100755 index 0000000..13fdc95 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-PA1F.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-PA2F.xml b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-PA2F.xml new file mode 100755 index 0000000..f143ef0 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-PA2F.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-PB1F.xml b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-PB1F.xml new file mode 100755 index 0000000..16a1375 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-PB1F.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-PB2F.xml b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-PB2F.xml new file mode 100755 index 0000000..2c215fe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-PB2F.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-PMF.xml b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-PMF.xml new file mode 100755 index 0000000..5f84ca9 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01-PMF.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01.xml b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01.xml new file mode 100755 index 0000000..1d1e6ee --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN-P01.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN.xml b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN.xml new file mode 100755 index 0000000..c2d11a9 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC-GN.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC.xml b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC.xml new file mode 100755 index 0000000..3be2fb2 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/navigation/Navigation_EC.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/EC-GN-SYSM-CubicleDetails.opi b/EC-GN-JA-PCF/src/main/boy/sysm/EC-GN-SYSM-CubicleDetails.opi new file mode 100755 index 0000000..a3e2747 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/EC-GN-SYSM-CubicleDetails.opi @@ -0,0 +1,415 @@ + + + + Display + + true + EC + GN + SYSM + + 3236 + + + true + 1760 + true + EC-GN-SYSM + 6 + true + true + 0 + + + + + + + + 0 + false + + + + false + -1 + -1 + + + + + true + Grouping Container + + true + + true + 0 + + true + + 2 + groupHeading + + + + true + + false + false + false + + false + + 0 + + + + + + + 0 + + 1243 + 50 + + + + + + true + 1 + true + + 13 + CubicleDetailsLabel + + false + false + false + + true + false + + + + + + + Label + false + Cubicle Details: + + IO Normal + + 40 + 0 + + 2 + + + + 0 + + 55 + true + + 6 + + + + + /opt/codac/opi/epics-sysmon/boy/ITER-SYSM-CUB_Mimic.opi + + true + + 0 + + + + false + + + + 6 + 2 + true + + IO Label + + false + + + + 37 + + Action Button Template + 0 + + + + + false + false + false + + + + More Details + false + $(pv_name) +$(pv_value) + true + Action Button + 279 + 6cb4f02d:15e5c6fbe55:-70fa + 200 + 45 + + + + + true + 1 + true + + 13 + CubicleDetailsLabel + + false + false + false + + true + false + + + + + + + Label + false + $(CUB_LOC) + + IO Normal + + 40 + 0 + + 2 + + + + 0 + + 55 + true + + 600 + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + (ºC) + + + + + + + + + + + + 1 + + + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):CU$(NNNN)-HTH-CY1 + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):CU$(NNNN)-HTH-CY2 + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):CU$(NNNN)-HTH-FAN + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):CU$(NNNN)-HTH-TT + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):CU$(NNNN)-SHLT + + + 1000 + CubicleDetailsTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1000 + 0 + + + Name + 200 + no + + + Value + 200 + no + + + Status + 100 + no + + + Severity + 100 + no + + + EGU + 0 + no + + + false + + 2 + + + + 4 + + 125 + + 6 + + + + + + + + true + Grouping Container + + true + + true + 1243 + + false + false + false + + 0 + + true + + 26 + 2 + groupICProjectInfo + + + + true + false + + 1500 + + + + + + + 0 + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 38 + 0 + I&C Project Name: EC-GN, Version: 4 + + + false + false + false + + + false + I&C Project Name: EC-GN, Version: 4 + + true + 1 + true + Label + 3000 + true + + 40 + 0 + + + + + + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/EC-GN-SYSM-F0-PCFDetails.opi b/EC-GN-JA-PCF/src/main/boy/sysm/EC-GN-SYSM-F0-PCFDetails.opi new file mode 100755 index 0000000..7c58c4c --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/EC-GN-SYSM-F0-PCFDetails.opi @@ -0,0 +1,1471 @@ + + + + Display + + true + F0 + 52RF01-PCF-4210 + EC-GN-SYSM + 52RF + 01 + 4210 + PCF + + false + + 3236 + + + true + 1760 + true + EC-GN-SYSM + 6 + true + true + 0 + + + + + + + + 0 + false + + + + false + -1 + -1 + + + + + true + Grouping Container + + true + + true + 6 + + true + + 2 + groupHeading + + false + false + false + + + + + true + false + + 0 + + + + + + + 0 + + + + + + 1243 + 50 + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + SystemDetailsLabel + + + false + false + false + + + false + System Information: + + true + 1 + true + Label + 40 + true + + 6 + 55 + + + + + + /opt/codac/opi/epics-sysmon/boy/ITER-SYSM-SYS_Mimic.opi + + true + + 0 + + + + false + + + + 6 + 2 + true + + IO Label + + false + + + + 37 + + Action Button Template + 0 + + + + + false + false + false + + + + More Details + false + $(pv_name) +$(pv_value) + true + Action Button + 279 + 6cb4f02d:15e5c6fbe55:-70fa + 200 + 45 + + + true + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + (%) + sysmon + + + + + + + (°C) + picmg-sensors + + + + + + + (°C) + picmg-sensors + + + + + + + (°C) + picmg-sensors + + + + + + + (MB) + sysmon + + + + + + + (MB) + sysmon + + + + + + + (%) + sysmon + + + + + + + + sysmon + + + + + + + (%) + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + (KB) + sysmon + + + + + + + (KB) + sysmon + + + + + + + (%) + sysmon + + + + + + + (KBps) + sysmon + + + + + + + (KBps) + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon-tcnd + + + + + + + + sysmon + + + + + + + (ns) + sysmon-tcnd + + + + + + + (ns) + sysmon-tcnd + + + + + + + (ns) + sysmon-tcnd + + + + + + + (ns) + sysmon-tcnd + + + + + + + + sysmon-tcnd + + + + + + + (ns) + sysmon-tcnd + + + + + + + (s) + sysmon-tcnd + + + + + + + + sysmon-tcnd + + + + + 1 + + + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-BTIME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CAV1 + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CCSV + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPUUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CTEMPAVG + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CTEMPMAX + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CTEMPMIN + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-DISKFREE + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-DISKMAX + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-DISKUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-EPICSV + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-FDUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-HOSTNAME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-IPADDR + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-KERNELV + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-MEMFREE + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-MEMMAX + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-MEMUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-NRBPS + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-NSBPS + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-OSV + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PROCLST + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PROCSTS + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PS + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SHLT + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TDEVICE + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TIME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TMAXOFF + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TMEANOFF + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TMINOFF + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TOFFSET + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TSTATUS + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TSTDOFF + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TUPTIME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TVERSION + + + 600 + SystemDetailsTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1500 + 6 + + + Name + 200 + no + + + Value + 200 + no + + + Status + 100 + no + + + Severity + 75 + no + + + EGU + 0 + no + + + Template Name + 100 + no + + + false + + 2 + + + + 5 + + 125 + + 6 + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + COREIOCDetailsLabel + + + false + false + false + + + false + CORE IOC: + + true + 1 + true + Label + 40 + true + + 1600 + 55 + + + + + + /opt/codac/opi/epics-sysmon/boy/ITER-SYSM-IOC_Mimic.opi + + true + + 0 + + + + false + + + + 6 + 2 + true + + IO Label + + false + + + + 37 + + Action Button Template + 0 + + + + + false + false + false + + + + More Details + false + $(pv_name) +$(pv_value) + true + Action Button + 279 + 6cb4f02d:15e5c6fbe55:-70fa + 1800 + 45 + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-BECTME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-CACLNTC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-CAPVC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-CONTMO + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-CPUUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-DBCLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-DBDLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-DBRECC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-FDUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-HB + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-IOCDIR.VAL$ + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-MEMUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-PID + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-STTOD + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-SVPORT + + + 600 + COREIOCDetailsTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1500 + 6 + + + Name + 200 + no + + + Value + 200 + no + + + Status + 100 + no + + + Severity + 75 + no + + + EGU + 0 + no + + + false + + 2 + + + + 4 + + 125 + + 1600 + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + SYSMIOCDetailsLabel + + + false + false + false + + + false + SYSM IOC: + + true + 1 + true + Label + 40 + true + + 6 + 750 + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + + + + + + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-BECTME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-CACLNTC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-CAPVC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-CONTMO + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-CPUUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-DBCLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-DBDLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-DBRECC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-FDUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-HB + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-IOCDIR.VAL$ + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-MEMUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-PID + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-STTOD + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-SVPORT + + + 600 + SYSMIOCDetailsTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1500 + 6 + + + Name + 200 + no + + + Value + 200 + no + + + Status + 100 + no + + + Severity + 75 + no + + + EGU + 0 + no + + + false + + 2 + + + + 4 + + 790 + + 6 + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + PLCIOCDetailsLabel + + + false + false + false + + + false + Others: + + true + 1 + true + Label + 40 + true + + 1600 + 750 + + + + true + + + + + + + 600 + PLCIOCDetailsTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1500 + 6 + + + Name + 200 + no + + + Value + 200 + no + + + Status + 100 + no + + + Severity + 75 + no + + + EGU + 0 + no + + + false + + 2 + + + + 4 + + 790 + + 1600 + + + + + + + + true + Grouping Container + + true + + true + 1243 + + false + false + false + + 6 + + true + + 48 + 2 + groupICProjectInfo + + + + true + false + + 1500 + + + + + + + 0 + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 38 + 0 + I&C Project Name: EC-GN, Version: 4 + + + false + false + false + + + false + I&C Project Name: EC-GN, Version: 4 + + true + 1 + true + Label + 3000 + true + + 40 + 0 + + + + + + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/EC-GN-SYSM-H0-PSHDetails.opi b/EC-GN-JA-PCF/src/main/boy/sysm/EC-GN-SYSM-H0-PSHDetails.opi new file mode 100755 index 0000000..fb0fc2e --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/EC-GN-SYSM-H0-PSHDetails.opi @@ -0,0 +1,1405 @@ + + + + Display + + true + H0 + 52RF01-PSH-4410 + EC-GN-SYSM + 52RF + 01 + 4410 + PSH + false + + 3236 + + + true + 1760 + true + EC-GN-SYSM + 6 + true + true + 0 + + + + + + + + 0 + + false + + + + false + -1 + -1 + + + + + + + + true + Grouping Container + + true + + true + 0 + + true + + 2 + + false + false + false + + groupHeading + + + + true + false + + 0 + + + + + + + 0 + + + + + + + 1243 + 50 + + + + + + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + SystemDetailsLabel + + + false + false + false + + + false + System Information: + + true + 1 + true + Label + 40 + true + + 6 + 55 + + + + + + + /opt/codac/opi/epics-sysmon/boy/ITER-SYSM-SYS_Mimic.opi + + true + + 0 + + + + false + + + + 6 + 2 + true + + IO Label + + false + + + + 37 + + Action Button Template + 0 + + + + + false + false + false + + + + More Details + false + $(pv_name) +$(pv_value) + true + Action Button + 279 + 6cb4f02d:15e5c6fbe55:-70fa + 200 + 45 + + + + true + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + (%) + sysmon + + + + + + + (MB) + sysmon + + + + + + + (MB) + sysmon + + + + + + + (%) + sysmon + + + + + + + + sysmon + + + + + + + (%) + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + (KB) + sysmon + + + + + + + (KB) + sysmon + + + + + + + (%) + sysmon + + + + + + + (KBps) + sysmon + + + + + + + (KBps) + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + 1 + + + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-BTIME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CAV1 + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CCSV + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPUUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-DISKFREE + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-DISKMAX + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-DISKUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-EPICSV + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-FDUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-HOSTNAME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-IPADDR + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-KERNELV + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-MEMFREE + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-MEMMAX + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-MEMUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-NRBPS + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-NSBPS + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-OSV + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PROCLST + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PROCSTS + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PS + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SHLT + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TIME + + + 600 + SystemDetailsTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1500 + 6 + + + Name + 200 + no + + + Value + 200 + no + + + Status + 100 + no + + + Severity + 75 + no + + + EGU + 0 + no + + + Template Name + 100 + no + + + false + + 2 + + + + 5 + + 125 + + 6 + + + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + COREIOCDetailsLabel + + + false + false + false + + + false + CORE IOC: + + true + 1 + true + Label + 40 + true + + 1600 + 55 + + + + + + + /opt/codac/opi/epics-sysmon/boy/ITER-SYSM-IOC_Mimic.opi + + true + + 0 + + + + false + + + + 6 + 2 + true + + IO Label + + false + + + + 37 + + Action Button Template + 0 + + + + + false + false + false + + + + More Details + false + $(pv_name) +$(pv_value) + true + Action Button + 279 + 6cb4f02d:15e5c6fbe55:-70fa + 1800 + 45 + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-BECTME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-CACLNTC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-CAPVC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-CONTMO + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-CPUUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-DBCLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-DBDLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-DBRECC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-FDUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-HB + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-IOCDIR.VAL$ + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-MEMUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-PID + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-STTOD + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-SVPORT + + + 600 + COREIOCDetailsTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1500 + 6 + + + Name + 200 + no + + + Value + 200 + no + + + Status + 100 + no + + + Severity + 75 + no + + + EGU + 0 + no + + + false + + 2 + + + + 4 + + 125 + + 1600 + + + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + SYSMIOCDetailsLabel + + + false + false + false + + + false + SYSM IOC: + + true + 1 + true + Label + 40 + true + + 6 + 750 + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + + + + + + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-BECTME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-CACLNTC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-CAPVC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-CONTMO + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-CPUUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-DBCLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-DBDLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-DBRECC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-FDUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-HB + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-IOCDIR.VAL$ + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-MEMUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-PID + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-STTOD + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-SVPORT + + + 600 + SYSMIOCDetailsTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1500 + 6 + + + Name + 200 + no + + + Value + 200 + no + + + Status + 100 + no + + + Severity + 75 + no + + + EGU + 0 + no + + + false + + 2 + + + + 4 + + 790 + + 6 + + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + PLCIOCDetailsLabel + + + false + false + false + + + false + Others: + + true + 1 + true + Label + 40 + true + + 1600 + 750 + + + + + true + + + + + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-BECTME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-CACLNTC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-CAPVC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-CONTMO + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-CPUUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-DBCLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-DBDLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-DBRECC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-FDUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-HB + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-IOCDIR.VAL$ + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-MEMUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-PID + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-STTOD + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-SVPORT + + + 600 + PLCIOCDetailsTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1500 + 6 + + + Name + 200 + no + + + Value + 200 + no + + + Status + 100 + no + + + Severity + 75 + no + + + EGU + 0 + no + + + false + + 2 + + + + 4 + + 790 + + 1600 + + + + + + + + + + + true + Grouping Container + + true + + true + 1243 + + false + false + false + + 0 + + true + + 48 + 2 + groupICProjectInfo + + + + true + false + + 1500 + + + + + + + 0 + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 38 + 0 + I&C Project Name: EC-GN, Version: 1 + + + false + false + false + + + false + I&C Project Name: EC-GN, Version: 1 + + true + 1 + true + Label + 3000 + true + + 40 + 0 + + + + + + + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/EC-GN-SYSM-P0-PLCDetails.opi b/EC-GN-JA-PCF/src/main/boy/sysm/EC-GN-SYSM-P0-PLCDetails.opi new file mode 100755 index 0000000..4de6bdb --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/EC-GN-SYSM-P0-PLCDetails.opi @@ -0,0 +1,707 @@ + + + + Display + + true + P0 + 52RF01-PLC-4110 + EC-GN-SYSM + 52RF + 01 + 4110 + PLC + EC + GN + SYSM + + 3236 + + + true + 1760 + true + EC-GN-SYSM + 6 + true + true + 0 + + + + + + + + 0 + + false + + + + false + -1 + -1 + + + + + + + true + Grouping Container + + true + + true + 6 + + true + + 2 + + false + false + false + + groupHeading + + + + true + false + + 0 + + + + + + + 0 + + 1243 + 50 + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + Configuration Control: + + + false + false + false + + + false + Configuration Control: + + true + 1 + true + Label + 40 + true + + 6 + 90 + + + + + false + true + + + + 0 + false + + + + 0 + 2 + Are you sure you want to do this? + 0 + true + true + + IO Label + + false + + + + 38 + false + boolButton$(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CFGWRCNTR + + + + Check Configuration + + + + Configuration OK + + 0 + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CFGWRCNTR + + 0 + + + false + false + false + + + true + 1 + true + true + true + $(pv_name) $(pv_value) + true + Boolean Button + 210 + + 250 + 90 + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + PLC Variable Communication: + + + false + false + false + + + false + PLC Variable Communication: + + true + 1 + true + Label + 40 + true + + 6 + 240 + + + + + + + /opt/codac/opi/epics-sysmon/boy/ITER-SYSM-PLC_Mimic.opi + + true + + 0 + + + + false + + + + 6 + 2 + true + + IO Label + + false + + + + 37 + + Action Button Template + 0 + + + + + false + false + false + + + + More Details + false + $(pv_name) + $(pv_value) + true + Action Button + 279 + 6cb4f02d:15e5c6fbe55:-70fa + 400 + 230 + + + + + true + + + + + + + + + + + 1 + + + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CFGBC + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CFGSTAT + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPU0-ALIVE + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPU0-MASTER + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPU0-RUN + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPU0-VALID + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPU1-ALIVE + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPU1-MASTER + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPU1-RUN + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPU1-VALID + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-FERROR + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-FLENGTH + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-FLOST + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-FVERS + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SIM-NOPLC + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TIME + + + + 300 + GeneralTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 2000 + 6 + + + Name + 250 + no + + + Value + 280 + no + + + Status + 200 + no + + + Severity + 140 + no + + + false + + 2 + + + + 4 + + 290 + + 6 + + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + PLC Command Communication: + + + false + false + false + + + false + PLC Command Communication: + + true + 1 + true + Label + 40 + true + + 6 + 640 + + + + + + + true + + + + + + + + + + + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CMDBC + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CMDSTAT + + + + 300 + GeneralTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 2000 + 6 + + + Name + 250 + no + + + Value + 280 + no + + + Status + 200 + no + + + Severity + 140 + no + + + false + + 2 + + + + 4 + + 690 + + 6 + + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + PLC Event Communication: + + + false + false + false + + + false + PLC Event Communication: + + true + 1 + true + Label + 40 + true + + 6 + 1040 + + + + + + + true + + + + + + + + + + + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-EFLOST + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-EVTBC + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-EVTSTAT + + + + 300 + GeneralTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 2000 + 6 + + + Name + 250 + no + + + Value + 280 + no + + + Status + 200 + no + + + Severity + 140 + no + + + false + + 2 + + + + 4 + + 1090 + + 6 + + + + + true + Grouping Container + + true + + true + 1243 + + false + false + false + + 6 + + true + + 48 + 2 + groupICProjectInfo + + + + true + false + + 1500 + + + + + + + 0 + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 38 + 0 + I&C Project Name: EC-GN, Version: 1 + + + false + false + false + + + false + I&C Project Name: EC-GN, Version: 1 + + true + 1 + true + Label + 3000 + true + + 40 + 0 + + + + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/EC-GN-SYSM.opi b/EC-GN-JA-PCF/src/main/boy/sysm/EC-GN-SYSM.opi new file mode 100755 index 0000000..3a20916 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/EC-GN-SYSM.opi @@ -0,0 +1,619 @@ + + + + Display + + true + + 3236 + + + true + 1760 + true + EC-GN-SYSM + 6 + true + true + 0 + + + + + + + + 0 + + false + + + + false + -1 + -1 + + + + + + + + true + Grouping Container + + true + + true + 6 + + true + + 2 + + false + false + false + + groupHeading + + + + true + false + + 0 + + + + + + + 0 + + 1243 + 50 + + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + Label Template + + + false + false + false + + + false + Cubicles + + true + 1 + true + Label + 40 + true + + 6 + 54 + + + + + + true + + + + + + + + 1 + + + + + + + + 200 + EC-GN-SYSM + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1400 + 6 + + + Name + 50 + no + + + Physical Name + 120 + + + + Description + 120 + no + + + Cubicle health summary + 100 + no + + + PLC health summary + 100 + no + + + Location + 100 + no + + + Macro PPPP + 0 + no + + + Macro PP + 0 + no + + + Macro NNNN + 0 + no + + + false + + 2 + + + + 7 + + 90 + + 6 + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + Label Template + + + false + false + false + + + false + PLCs + + true + 1 + true + Label + 26 + true + + 6 + 320 + + + + + + true + + + + P0 + 52RF01-PLC-4110 + + + + + + + + + + + + 1 + + + + + EC-GN-SYSM-52RF-01:PLC4110-PLCHLTS +EC-GN-SYSM-52RF-01:PLC4110-EVTHLTS +EC-GN-SYSM-52RF-01:PLC4110-FRAMEC + + + + + 200 + EC-GN-SYSM + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1400 + 6 + + + Name + 50 + no + + + Physical Name + 120 + + + + Description + 120 + no + + + PLC health summary + 100 + no + + + ALIVEC + 100 + no + + + Event health summary + 100 + no + + + FRAMEC + 100 + no + + + false + + 2 + + + + 5 + + 350 + + 6 + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + Label Template + + + false + false + false + + + false + Control Units + + true + 1 + true + Label + 59 + true + + 6 + 570 + + + + + + true + + + + H0 + 52RF01-PSH-4410 + + + + + + Plant System Host + + + + + F0 + 52RF01-PCF-4210 + + + + + + Fast Controller + + + + + + + 1 + + + + EC-GN-SYSM-52RF-01:PCF4210-SYSHLTS +EC-GN-SYSM-52RF-01:PSH4410-SYSHLTS + + + + + + 300 + EC-GN-SYSM + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1400 + 6 + + + Name + 50 + no + + + Physical Name + 120 + + + + Description + 120 + no + + + Controller health summary + 150 + no + + + PSH0CORE IOC health summary + 100 + no + + + Controller IOC health summary + 100 + no + + + PLC IOC health summary + 100 + no + + + Type + 100 + no + + + false + + 2 + + + + 7 + + 600 + + 6 + + + + + true + Grouping Container + + true + + true + 1243 + + false + false + false + + 6 + + true + + 48 + 2 + groupICProjectInfo + + + + true + false + + 1400 + + + + + + + 0 + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 38 + 0 + I&C Project Name: EC-GN, Version: 1 + + + false + false + false + + + false + I&C Project Name: EC-GN, Version: 1 + + true + 1 + true + Label + 3000 + true + + 40 + 0 + + + + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/AlarmShortFormat.js b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/AlarmShortFormat.js new file mode 100644 index 0000000..5141753 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/AlarmShortFormat.js @@ -0,0 +1,20 @@ +/* +Copyright (c) : 2010-2019 ITER Organization, +CS 90 046 +13067 St. Paul-lez-Durance Cedex +France + +This product is part of ITER CODAC software. +For the terms and conditions of redistribution or use of this software +refer to the file ITER-LICENSE.TXT located in the top level directory +of the distribution package. +*/ + + +importPackage(Packages.org.csstudio.opibuilder.scriptUtil); + +var t = new Date(PVUtil.getTimeInMilliseconds(pvs[0])).toTimeString(); +var st = t.split(" "); + +widget.setPropertyValue("on_label", st[0]); +widget.setPropertyValue("off_label", st[0]); diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/CUDetailsTableSelectionMonitor.js b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/CUDetailsTableSelectionMonitor.js new file mode 100644 index 0000000..b4a5c3f --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/CUDetailsTableSelectionMonitor.js @@ -0,0 +1,14 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.DataUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ScriptUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ConsoleUtil); + +var table = widget.getTable(); +var fct_name=display.getPropertyValue("name"); +var selectionChanged = new Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener() { + selectionChanged: function(selection) { + var macroInput = DataUtil.createMacrosInput(true) + ScriptUtil.openOPI(display.getWidget("SystemDetailsTable"), "/opt/codac/opi/epics-sysmon/boy/ITER-SYSM-SYS_Mimic.opi", 1, macroInput); + } +}; +table.addSelectionChangedListener(selectionChanged); diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/ControlUnitsTableSelectionMonitor.js b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/ControlUnitsTableSelectionMonitor.js new file mode 100644 index 0000000..e6c9edb --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/ControlUnitsTableSelectionMonitor.js @@ -0,0 +1,51 @@ + +importClass(Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener); +importPackage(Packages.org.csstudio.opibuilder.scriptUtil); + +var table = widget.getTable(); +var fct_name=widget.getPropertyValue("name"); + +var selectionChanged = new Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener() { + selectionChanged: function(selection) { + var selectedrow= table.getSelection(); + var cuName=selectedrow[0][0]; + var phyName=selectedrow[0][1]; + var plcIocHlts =selectedrow[0][6]; + var cuType=selectedrow[0][7]; +// change $(CU) substitution + macroInput = DataUtil.createMacrosInput(true) + macroInput.put("CU", cuName) + macroInput.put("PHY_NAME", phyName) + macroInput.put("FCT_NAME", fct_name) + macroInput.put("CU_TYPE", cuType) + if (plcIocHlts == "") { + macroInput.put("SHOW_PLC_IOC", "false") + } + else { + macroInput.put("SHOW_PLC_IOC", "true") + } + // open OPI + // see https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-boy/trunk/org.csstudio.opibuilder/src/org/csstudio/opibuilder/scriptUtil/ScriptUtil.java + if (cuType == "POC with CA") { + ScriptUtil.openOPI(widget, fct_name + "-" + cuName + "-POCWithCADetails.opi", 1, macroInput) + } + else if (cuType == "POC without CA") { + ScriptUtil.openOPI(widget, fct_name + "-" + cuName + "-POCWithoutCADetails.opi", 1, macroInput) + } + else if (cuType == "Plant System Host") { + ScriptUtil.openOPI(widget, fct_name + "-" + cuName + "-PSHDetails.opi", 1, macroInput) + } + else if (cuType == "Fast Controller") { + ScriptUtil.openOPI(widget, fct_name + "-" + cuName + "-PCFDetails.opi", 1, macroInput) + } + else if (cuType == "Server") { + ScriptUtil.openOPI(widget, fct_name + "-" + cuName + "-SRVDetails.opi", 1, macroInput) + } + else { + ScriptUtil.openOPI(widget, fct_name+"-CtrlUnitDetails.opi", 1, macroInput) + } + + } +}; + +table.addSelectionChangedListener(selectionChanged); diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/ControlUnitsTableSelectionMonitor.py b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/ControlUnitsTableSelectionMonitor.py new file mode 100644 index 0000000..3a90691 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/ControlUnitsTableSelectionMonitor.py @@ -0,0 +1,38 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import DataUtil +from org.csstudio.opibuilder.scriptUtil import ScriptUtil +from org.csstudio.swt.widgets.natives.SpreadSheetTable import ITableSelectionChangedListener +from java.util import Arrays + +table = widget.getTable() +fct_name=display.getPropertyValue("name") +class SelectionListener(ITableSelectionChangedListener): + def selectionChanged(self, selection): + cuName="" + phyName="" + plcIocHlts ="" + cuType="" + for row in selection: + phyName=row[1] + cuName=row[0] + plcIocHlts=row[6] + cuType=row[7]; +# change $(CU) substitution + macroInput = DataUtil.createMacrosInput(True) + macroInput.put("CU", cuName) + macroInput.put("PHY_NAME", phyName) + macroInput.put("FCT_NAME", fct_name) + macroInput.put("CU_TYPE", cuType) + if plcIocHlts == "": + macroInput.put("SHOW_PLC_IOC", "false") + else: + macroInput.put("SHOW_PLC_IOC", "true") + # open OPI + # see https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-boy/trunk/org.csstudio.opibuilder/src/org/csstudio/opibuilder/scriptUtil/ScriptUtil.java + if cuType == "POC with CA": + ScriptUtil.openOPI(display.getWidget("Table"), fct_name+"-POCWithCADetails.opi", 1, macroInput) + elif cuType == "POC without CA": + ScriptUtil.openOPI(display.getWidget("Table"), fct_name+"-POCWithoutCADetails.opi", 1, macroInput) + else: + ScriptUtil.openOPI(display.getWidget("Table"), fct_name+"-CtrlUnitDetails.opi", 1, macroInput) +table.addSelectionChangedListener(SelectionListener()) diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/CubiclesContentSummaryTableSelectionMonitor.js b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/CubiclesContentSummaryTableSelectionMonitor.js new file mode 100644 index 0000000..4b14a4a --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/CubiclesContentSummaryTableSelectionMonitor.js @@ -0,0 +1,23 @@ +importClass(Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener); +importPackage(Packages.org.csstudio.opibuilder.scriptUtil); + +var table = widget.getTable(); +var fct_name = widget.getPropertyValue("name"); + +var selectionChanged = new Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener() { + selectionChanged: function(selection) { + var selectedrow= table.getSelection(); + var cuIndex=selectedrow[0][0]; + var phyName=selectedrow[0][1]; + + // change $(CU_INDEX) substitution + var macroInput = DataUtil.createMacrosInput(true); + macroInput.put("CUB", cuIndex); + macroInput.put("PHY_NAME", phyName); + macroInput.put("FCT_NAME", fct_name); + // open OPI + // see https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-boy/trunk/org.csstudio.opibuilder/src/org/csstudio/opibuilder/scriptUtil/ScriptUtil.java + ScriptUtil.openOPI(widget, fct_name+"-"+cuIndex+"-CubicleContents.opi", 1, macroInput); + } +}; +table.addSelectionChangedListener(selectionChanged); diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/CubiclesContentSummaryTableSelectionMonitor.py b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/CubiclesContentSummaryTableSelectionMonitor.py new file mode 100644 index 0000000..2bd84d4 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/CubiclesContentSummaryTableSelectionMonitor.py @@ -0,0 +1,24 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import DataUtil +from org.csstudio.opibuilder.scriptUtil import ScriptUtil +from org.csstudio.swt.widgets.natives.SpreadSheetTable import ITableSelectionChangedListener +from java.util import Arrays + +table = widget.getTable() +fct_name=display.getPropertyValue("name") +class SelectionListener(ITableSelectionChangedListener): + def selectionChanged(self, selection): + cuIndex="" + phyName="" + for row in selection: + cuIndex=row[0]; + phyName=row[1] + # change $(CU_INDEX) substitution + macroInput = DataUtil.createMacrosInput(True) + macroInput.put("CUB", cuIndex) + macroInput.put("PHY_NAME", phyName) + macroInput.put("FCT_NAME", fct_name) + # open OPI + # see https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-boy/trunk/org.csstudio.opibuilder/src/org/csstudio/opibuilder/scriptUtil/ScriptUtil.java + ScriptUtil.openOPI(display.getWidget("Table"), fct_name+"-"+cuIndex+"-CubicleContents.opi", 1, macroInput) +table.addSelectionChangedListener(SelectionListener()) \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/CubiclesDetailsTableSelectionMonitor.js b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/CubiclesDetailsTableSelectionMonitor.js new file mode 100644 index 0000000..76c1402 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/CubiclesDetailsTableSelectionMonitor.js @@ -0,0 +1,14 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.DataUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ScriptUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ConsoleUtil); + +var table = widget.getTable(); +var fct_name=display.getPropertyValue("name"); +var selectionChanged = new Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener() { + selectionChanged: function(selection) { + var macroInput = DataUtil.createMacrosInput(true) + ScriptUtil.openOPI(display.getWidget("CubicleDetailsTable"), "/opt/codac/opi/epics-sysmon/boy/ITER-SYSM-CUB_Mimic.opi", 1, macroInput); + } +}; +table.addSelectionChangedListener(selectionChanged); diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/CubiclesTableSelectionMonitor.js b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/CubiclesTableSelectionMonitor.js new file mode 100644 index 0000000..efa63e1 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/CubiclesTableSelectionMonitor.js @@ -0,0 +1,31 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.DataUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ScriptUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ConsoleUtil); + +var table = widget.getTable(); +var fct_name=widget.getPropertyValue("name"); +var selectionChanged = new Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener() { + selectionChanged: function(selection) { + + var selectedrow= table.getSelection(); + var cuIndex=selectedrow[0][0]; + var phyName=selectedrow[0][1]; + var loc=selectedrow[0][5]; + var pppp=selectedrow[0][6]; + var pp=selectedrow[0][7]; + var nnnn=selectedrow[0][8]; + + var macroInput = DataUtil.createMacrosInput(true) + macroInput.put("CUB", cuIndex) + macroInput.put("PHY_NAME", phyName) + macroInput.put("FCT_NAME", fct_name) + macroInput.put("PPPP", pppp) + macroInput.put("PP", pp) + macroInput.put("NNNN", nnnn) + macroInput.put("CUB_LOC", "Location: "+loc) + + ScriptUtil.openOPI(widget, fct_name+"-CubicleDetails.opi", 1, macroInput); + } +}; +table.addSelectionChangedListener(selectionChanged); diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/CubiclesTableSelectionMonitor.py b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/CubiclesTableSelectionMonitor.py new file mode 100644 index 0000000..ff9821d --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/CubiclesTableSelectionMonitor.py @@ -0,0 +1,24 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import DataUtil +from org.csstudio.opibuilder.scriptUtil import ScriptUtil +from org.csstudio.swt.widgets.natives.SpreadSheetTable import ITableSelectionChangedListener +from java.util import Arrays + +table = widget.getTable() +fct_name=display.getPropertyValue("name") +class SelectionListener(ITableSelectionChangedListener): + def selectionChanged(self, selection): + cuIndex="" + phyName="" + for row in selection: + cuIndex=row[0]; + phyName=row[1] + # change $(CU_INDEX) substitution + macroInput = DataUtil.createMacrosInput(True) + macroInput.put("CUB", cuIndex) + macroInput.put("PHY_NAME", phyName) + macroInput.put("FCT_NAME", fct_name) + # open OPI + # see https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-boy/trunk/org.csstudio.opibuilder/src/org/csstudio/opibuilder/scriptUtil/ScriptUtil.java + ScriptUtil.openOPI(display.getWidget("Table"), fct_name+"-CubicleDetails.opi", 1, macroInput) +table.addSelectionChangedListener(SelectionListener()) \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayAlarmsInRow.py b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayAlarmsInRow.py new file mode 100644 index 0000000..2c60bb7 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayAlarmsInRow.py @@ -0,0 +1,14 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import ColorFontUtil + +import datetime + +pv = pvs[0] + +s = PVUtil.getTimeInMilliseconds(pv) +t = datetime.datetime.fromtimestamp(float(s)/1000.) + +format = "%H:%M:%S" + +widget.setPropertyValue("on_label", t.strftime(format)) +widget.setPropertyValue("off_label", t.strftime(format)) diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesINCtrlUnitDetailTableTable.js b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesINCtrlUnitDetailTableTable.js new file mode 100644 index 0000000..884f5e7 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesINCtrlUnitDetailTableTable.js @@ -0,0 +1,57 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ColorFontUtil); + +var table = widget.getTable(); + +//Fill PV Name only once +if (widget.getVar("firstTime") == null) { + widget.setVar("firstTime", true); + // Fill table only with non EGU pv's + for (var i=0;pv=pvs[i];i++) { + // earlier when by default pv.getName() was giving name with 'epics://' prefix. Ripping it off before showing was done below + table.setCellText(i, 0, pv.getName().trim()); + if (!pv.isConnected()) { + table.setCellText(i/2, 1, "Disconnected"); + } + } + // Based on value of macro SHOW_PLC_IOC, enable visibility of PLCIOCDetailsTable + if (widget.getPropertyValue("name") == 'PLCIOCDetailsTable') { + if (display.getMacroValue("SHOW_PLC_IOC") == "true") { + widget.setPropertyValue("visible", "true"); + display.getWidget("PLCIOCDetailsLabel").setPropertyValue("visible", "true"); + } + } +} +//find index of the trigger PV +var i=0; +while (triggerPV != pvs[i]) { + i+=1; +} + +var pvValue = PVUtil.getString(triggerPV).trim(); +var eugValue = table.getCellText(i, 4); +if (eugValue != "") { + pvValue = pvValue+" "+eugValue; +} +table.setCellText(i, 1, pvValue); +table.setCellText(i, 2, PVUtil.getStatus(triggerPV).trim()); +table.setCellText(i, 3, PVUtil.getSeverityString(triggerPV).trim()); + +var s = PVUtil.getSeverity(triggerPV); + +color = ColorFontUtil.WHITE; +if( s == 0) { + color = ColorFontUtil.GREEN; +} +else if( s == 1) { + color = ColorFontUtil.RED; +} +else if( s == 2) { + color = ColorFontUtil.YELLOW; +} +else if( s == 3) { + color = ColorFontUtil.PINK; +} + + +table.setCellBackground(i, 3, color); diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesINCtrlUnitDetailTableTable.py b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesINCtrlUnitDetailTableTable.py new file mode 100644 index 0000000..8a24ff6 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesINCtrlUnitDetailTableTable.py @@ -0,0 +1,49 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import ColorFontUtil +# from org.csstudio.opibuilder.scriptUtil import ConsoleUtil + +table = widget.getTable() + +#Fill PV Name only once +if widget.getVar("firstTime") == None: + widget.setVar("firstTime", True) + i=0 + # Fill table only with non EGU pv's + for pv in pvs: + # earlier when by default pv.getName() was giving name with 'epics://' prefix. Ripping it off before showing was done below + table.setCellText(i, 0, pv.getName().strip()) + if not pv.isConnected(): + table.setCellText(i/2, 1, "Disconnected") + i+=1 + # Based on value of macro SHOW_PLC_IOC, enable visibility of PLCIOCDetailsTable + if widget.getPropertyValue("name") == 'PLCIOCDetailsTable': + if display.getMacroValue("SHOW_PLC_IOC") == "true": + widget.setPropertyValue("visible", "true") + display.getWidget("PLCIOCDetailsLabel").setPropertyValue("visible", "true") + +#find index of the trigger PV +i=0 +while triggerPV != pvs[i]: + i+=1 + +pvValue = PVUtil.getString(triggerPV).strip(); +eugValue = table.getCellText(i, 4); +if eugValue != "": + pvValue = pvValue+" "+eugValue; +table.setCellText(i, 1, pvValue) +table.setCellText(i, 2, PVUtil.getStatus(triggerPV).strip()) +table.setCellText(i, 3, PVUtil.getSeverityString(triggerPV).strip()) + +s = PVUtil.getSeverity(triggerPV) + +color = ColorFontUtil.WHITE +if s == 0: + color = ColorFontUtil.GREEN +elif s == 1: + color = ColorFontUtil.RED +elif s == 2: + color = ColorFontUtil.YELLOW +elif s == 3: + color = ColorFontUtil.PINK + +table.setCellBackground(i, 3, color) \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInCubicleContent.js b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInCubicleContent.js new file mode 100644 index 0000000..6a59a92 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInCubicleContent.js @@ -0,0 +1,92 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ColorFontUtil); +// from org.csstudio.opibuilder.scriptUtil import ConsoleUtil + +var func = display.getPropertyValue("name"); +var type = widget.getPropertyValue("name"); +var widgetType = "ellipse"; +var varName = "XXXXXXX"; + +if (type.indexOf("PSH") != -1) { + varName = "-SYSHLTS"; +} +if (type.indexOf("PCF") != -1) { + varName = "-SYSHLTS"; +} +if (type.indexOf("SRV") != -1) { + varName = "-SYSHLTS"; +} +if (type.indexOf("PLC") != -1) { + varName = "-PLCHLTS"; +} +if (type.indexOf("COM") != -1) { + varName = "-SYSHLTS"; +} +if (type.indexOf("CHS") != -1) { + varName = "-SYSHLTS"; +} +// if ("IOM" in type.indexOf() != -1) { +// varName = "-BS"; +if (type.indexOf("CUB") != -1) { + varName = "-CUBHLTS"; +} +if (type.indexOf("Box") != -1) { + widgetType = "rectangle"; +} + +if (triggerPV.getName().indexOf(varName) != -1) { +// ConsoleUtil.writeInfo("Trigger PV found) { " +triggerPV.getName()); + + var s = PVUtil.getSeverity(triggerPV); + + color = ColorFontUtil.WHITE; + if( s == 0) { + color = ColorFontUtil.GREEN; + } + else if( s == 1) { + color = ColorFontUtil.RED; + } + else if( s == 2) { + color = ColorFontUtil.YELLOW; + } + else if( s == 3) { + color = ColorFontUtil.PINK; + } + + if ("ellipse" == widgetType) { + widget.setPropertyValue("foreground_color", color); + } + + var tooltip = PVUtil.getString(triggerPV); + widget.setPropertyValue("tooltip", tooltip); +} + +if (type.indexOf("IOM") != -1) { + if (triggerPV.getName().indexOf(".SIMM") == -1) { + var s = PVUtil.getSeverity(triggerPV); + var color = ColorFontUtil.WHITE; + if( s == 0) { + color = ColorFontUtil.GREEN; + } + else if( s == 1) { + color = ColorFontUtil.RED; + } + else if( s == 2) { + color = ColorFontUtil.YELLOW; + } + else if( s == 3) { + color = ColorFontUtil.PINK; + } + else if( s == 4) { + color = ColorFontUtil.GREEN; + } + + widget.setPropertyValue("foreground_color", color); + + var tooltip = PVUtil.getString(triggerPV); + widget.setPropertyValue("tooltip", tooltip); + } +} + + + diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInCubicleContent.py b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInCubicleContent.py new file mode 100644 index 0000000..30565c2 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInCubicleContent.py @@ -0,0 +1,71 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import ColorFontUtil +# from org.csstudio.opibuilder.scriptUtil import ConsoleUtil + +func = display.getPropertyValue("name") +type = widget.getPropertyValue("name") +widgetType = "ellipse"; +varName = "XXXXXXX"; + +if "PSH" in type: + varName = "-SYSHLTS"; +if "PCF" in type: + varName = "-SYSHLTS"; +if "SRV" in type: + varName = "-SYSHLTS"; +if "PLC" in type: + varName = "-PLCHLTS"; +if "COM" in type: + varName = "-SYSHLTS"; +if "CHS" in type: + varName = "-SYSHLTS"; +# if "IOM" in type: +# varName = "-BS"; +if "CUB" in type: + varName = "-CUBHLTS"; +if "Box" in type: + widgetType = "rectangle"; + +if varName in triggerPV.getName(): +# ConsoleUtil.writeInfo("Trigger PV found: " +triggerPV.getName()); + + s = PVUtil.getSeverity(triggerPV) + + color = ColorFontUtil.WHITE + if s == 0: + color = ColorFontUtil.GREEN + elif s == 1: + color = ColorFontUtil.RED + elif s == 2: + color = ColorFontUtil.YELLOW + elif s == 3: + color = ColorFontUtil.PINK + elif s == 4: + color = ColorFontUtil.GREEN + + if "ellipse" == widgetType: + widget.setPropertyValue("foreground_color", color) + + tooltip = PVUtil.getString(triggerPV) + widget.setPropertyValue("tooltip", tooltip) + +if "IOM" in type: + if ".SIMM" not in triggerPV.getName(): + + s = PVUtil.getSeverity(triggerPV) + color = ColorFontUtil.WHITE + if s == 0: + color = ColorFontUtil.GREEN + elif s == 1: + color = ColorFontUtil.RED + elif s == 2: + color = ColorFontUtil.YELLOW + elif s == 3: + color = ColorFontUtil.PINK + elif s == 4: + color = ColorFontUtil.GREEN + + widget.setPropertyValue("foreground_color", color) + + tooltip = PVUtil.getString(triggerPV) + widget.setPropertyValue("tooltip", tooltip) \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInCubicleOverview.js b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInCubicleOverview.js new file mode 100644 index 0000000..7136451 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInCubicleOverview.js @@ -0,0 +1,57 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ColorFontUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ConsoleUtil); + +var table = widget.getTable(); +var nbColPVs=2; +// find index of the trigger PV +var i=0; +while (i< pvs.length) { +if(pvs[i].isConnected()==true){ + + +var s = PVUtil.getSeverity(pvs[i]); +}else{ + +var s =3; +} + +var color = ColorFontUtil.WHITE; +if( s == 0) { + color = ColorFontUtil.GREEN; +} +else if( s == 1) { + color = ColorFontUtil.RED; +} +else if( s == 2) { + color = ColorFontUtil.YELLOW; +} +else if( s == 3) { + color = ColorFontUtil.PINK; +} +else if( s == 3) { + color = ColorFontUtil.PINK; +} +else if( s == 4) { + color = ColorFontUtil.GREEN; +} + + +if (pvs[i].getName().indexOf("-CUBHLTS") != -1) { + if(pvs[i].isConnected()==true){ + table.setCellText(i/nbColPVs, 3, PVUtil.getString(pvs[i])); + }else{ + table.setCellText(i/nbColPVs, 3, "disconnected"); + } + table.setCellBackground(i/nbColPVs, 3, color); +} +if (pvs[i].getName().indexOf("-PLCHLTS") != -1) { +if(pvs[i].isConnected()==true){ + table.setCellText(i/nbColPVs, 4, PVUtil.getString(pvs[i])); + }else{ + table.setCellText(i/nbColPVs, 4, "disconnected"); + } + table.setCellBackground(i/nbColPVs, 4, color); +} +i=i+1; +} diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInCubicleOverview.py b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInCubicleOverview.py new file mode 100644 index 0000000..c3eaa05 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInCubicleOverview.py @@ -0,0 +1,31 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import ColorFontUtil + + +table = widget.getTable() +nbColPVs=2 +#find index of the trigger PV +i=0 +while triggerPV != pvs[i]: + i+=1 + +s = PVUtil.getSeverity(triggerPV) + +color = ColorFontUtil.WHITE +if s == 0: + color = ColorFontUtil.GREEN +elif s == 1: + color = ColorFontUtil.RED +elif s == 2: + color = ColorFontUtil.YELLOW +elif s == 3: + color = ColorFontUtil.PINK +elif s == 4: + color = ColorFontUtil.GREEN +# table.setCellBackground(i/nbColPVs, i%nbColPVs + 3, color) +if "-CUBHLTS" in triggerPV.getName(): + table.setCellText(i/nbColPVs, 3, PVUtil.getString(triggerPV)) + table.setCellBackground(i/nbColPVs, 3, color) +if "-PLCHLTS" in triggerPV.getName(): + table.setCellText(i/nbColPVs, 4, PVUtil.getString(triggerPV)) + table.setCellBackground(i/nbColPVs, 4, color) diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInGeneralTable.js b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInGeneralTable.js new file mode 100644 index 0000000..2502e17 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInGeneralTable.js @@ -0,0 +1,55 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ColorFontUtil); + + +var table = widget.getTable(); + +//Fill PV Name only once +if (widget.getVar("firstTime") == null) +{ + widget.setVar("firstTime", true); + + for (var i=0;pv=pvs[i];i++) { + // earlier when by default pv.getName() was giving name with 'epics://' prefix. Ripping it off before showing was done below + table.setCellText(i, 0, pv.getName().trim()) + if (!pv.isConnected()) { + table.setCellText(i, 1, "Disconnected"); + } + } + // Based on value of macro SHOW_PLC_IOC, enable visibility of PLCIOCDetailsTable + if (widget.getPropertyValue("name") == 'PLCIOCDetailsTable') { + if (display.getMacroValue("SHOW_PLC_IOC") == "true") { + widget.setPropertyValue("visible", "true"); + display.getWidget("PLCIOCDetailsLabel").setPropertyValue("visible", "true"); + } + } +} + + +//find index of the trigger PV +var i=0; +while (triggerPV != pvs[i]) { + i+=1; +} + +table.setCellText(i, 1, PVUtil.getString(triggerPV).trim()); +table.setCellText(i, 2, PVUtil.getStatus(triggerPV).trim()); +table.setCellText(i, 3, PVUtil.getSeverityString(triggerPV).trim()); + +var s = PVUtil.getSeverity(triggerPV); + +var color = ColorFontUtil.WHITE +color = ColorFontUtil.WHITE; +if( s == 0) { + color = ColorFontUtil.GREEN; +} +else if( s == 1) { + color = ColorFontUtil.RED; +} +else if( s == 2) { + color = ColorFontUtil.YELLOW; +} +else if( s == 3) { + color = ColorFontUtil.PINK; +} +table.setCellBackground(i, 3, color); diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInGeneralTable.py b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInGeneralTable.py new file mode 100644 index 0000000..a0574c6 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInGeneralTable.py @@ -0,0 +1,45 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import ColorFontUtil + + +table = widget.getTable() + +#Fill PV Name only once +if widget.getVar("firstTime") == None: + widget.setVar("firstTime", True) + i=0 + for pv in pvs: + # earlier when by default pv.getName() was giving name with 'epics://' prefix. Ripping it off before showing was done below + table.setCellText(i, 0, pv.getName().strip()) + if not pv.isConnected(): + table.setCellText(i, 1, "Disconnected") + i+=1 + # Based on value of macro SHOW_PLC_IOC, enable visibility of PLCIOCDetailsTable + if widget.getPropertyValue("name") == 'PLCIOCDetailsTable': + if display.getMacroValue("SHOW_PLC_IOC") == "true": + widget.setPropertyValue("visible", "true") + display.getWidget("PLCIOCDetailsLabel").setPropertyValue("visible", "true") + + +#find index of the trigger PV +i=0 +while triggerPV != pvs[i]: + i+=1 + +table.setCellText(i, 1, PVUtil.getString(triggerPV).strip()) +table.setCellText(i, 2, PVUtil.getStatus(triggerPV).strip()) +table.setCellText(i, 3, PVUtil.getSeverityString(triggerPV).strip()) + +s = PVUtil.getSeverity(triggerPV) + +color = ColorFontUtil.WHITE +if s == 0: + color = ColorFontUtil.GREEN +elif s == 1: + color = ColorFontUtil.RED +elif s == 2: + color = ColorFontUtil.YELLOW +elif s == 3: + color = ColorFontUtil.PINK + +table.setCellBackground(i, 3, color) \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInOverview.js b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInOverview.js new file mode 100644 index 0000000..e3d7232 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInOverview.js @@ -0,0 +1,74 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ColorFontUtil); +importPackage(Packages.org.csstudio.opibuilder.scriptUtil.*); + +var table = widget.getTable(); +var func = display.getPropertyValue("name"); + +var i = 0; +var row = 0; +var col = 3; +// ConsoleUtil.writeInfo("Trigger PV : " + triggerPV.getName()); +while (triggerPV != pvs[i]) { +// ConsoleUtil.writeInfo("pvs[i] : " + pvs[i].getName()); + if (col == 5) { + if (pvs[i+1].getName().indexOf("PLC-IOCHLTS") != -1) { + col = col+1; + } + else { + col = 3 + row = row+1; + } + } + else if (col == 3) { + if ( (pvs[i+1].getName().indexOf("-SYSHLTS") != -1) || (pvs[i+1].getName().indexOf("-HLTS") != -1)) { + col = 3; + row = row+1; + } + else if (pvs[i+1].getName().indexOf("-IOCHLTS") != -1) { + if (pvs[i+1].getName().indexOf("CORE-IOCHLTS") != -1) { + col = 4; + } + else { + col = 5; + } + } + else { + col += 1; + if (col > 5) { + row += 1; + col = 3; + } + } + } + else { + col += 1; + if (col > 6) { + row += 1; + col = 3; + } + } + i += 1; +} + +table.setCellText(row, col, PVUtil.getString(triggerPV)) + +var s = PVUtil.getSeverity(triggerPV) + +color = ColorFontUtil.WHITE +if( s == 0) { + color = ColorFontUtil.GREEN +} +else if( s == 1) { + color = ColorFontUtil.RED +} +else if( s == 2) { + color = ColorFontUtil.YELLOW +} +else if( s == 3) { + color = ColorFontUtil.PINK +} +else if( s == 3) { + color = ColorFontUtil.PINK +} +table.setCellBackground(row, col, color) diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInOverview.py b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInOverview.py new file mode 100644 index 0000000..fde230a --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInOverview.py @@ -0,0 +1,55 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import ColorFontUtil +from org.csstudio.opibuilder.scriptUtil import ConsoleUtil + +table = widget.getTable() +func = display.getPropertyValue("name") + +i = 0 +row = 0 +col = 3 +# ConsoleUtil.writeInfo("Trigger PV : " + triggerPV.getName()); +while triggerPV != pvs[i]: +# ConsoleUtil.writeInfo("pvs[i] : " + pvs[i].getName()); + if col == 5: + if "PLC-IOCHLTS" in pvs[i+1].getName(): + col = col+1 + else: + col = 3 + row = row+1 + elif col == 3: + if "-SYSHLTS" in pvs[i+1].getName() or "-HLTS" in pvs[i+1].getName(): + col =3 + row = row+1 + elif "-IOCHLTS" in pvs[i+1].getName(): + if "CORE-IOCHLTS" in pvs[i+1].getName(): + col = 4 + else: + col = 5 + else: + col += 1 + if col > 5: + row += 1 + col = 3 + else: + col += 1 + if col > 6: + row += 1 + col = 3 + i += 1 + +table.setCellText(row, col, PVUtil.getString(triggerPV)) + +s = PVUtil.getSeverity(triggerPV) + +color = ColorFontUtil.WHITE +if s == 0: + color = ColorFontUtil.GREEN +elif s == 1: + color = ColorFontUtil.RED +elif s == 2: + color = ColorFontUtil.YELLOW +elif s == 3: + color = ColorFontUtil.PINK + +table.setCellBackground(row, col, color) \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInPLCOverview.js b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInPLCOverview.js new file mode 100644 index 0000000..20f083d --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInPLCOverview.js @@ -0,0 +1,34 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ColorFontUtil); +importPackage(Packages.org.csstudio.opibuilder.scriptUtil.*); + +var table = widget.getTable(); +var nbColPVs=4; + +//find index of the trigger PV + +var i=0; +while (triggerPV != pvs[i]) { + i+=1; +} + +table.setCellText(i/nbColPVs, i%nbColPVs +3, PVUtil.getString(triggerPV)); + +var s = PVUtil.getSeverity(triggerPV); + +var color = ColorFontUtil.WHITE; +if( s == 0) { + color = ColorFontUtil.GREEN; +} +else if( s == 1) { + color = ColorFontUtil.RED; +} +else if( s == 2) { + color = ColorFontUtil.YELLOW; +} +else if( s == 3) { + color = ColorFontUtil.PINK; +} + +table.setCellBackground(i/nbColPVs, i%nbColPVs + 3, color); + diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInPLCOverview.py b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInPLCOverview.py new file mode 100644 index 0000000..28e8d36 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInPLCOverview.py @@ -0,0 +1,26 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import ColorFontUtil + + +table = widget.getTable() +nbColPVs=4 +#find index of the trigger PV +i=0 +while triggerPV != pvs[i]: + i+=1 + +table.setCellText(i/nbColPVs, i%nbColPVs +3, PVUtil.getString(triggerPV)) + +s = PVUtil.getSeverity(triggerPV) + +color = ColorFontUtil.WHITE +if s == 0: + color = ColorFontUtil.GREEN +elif s == 1: + color = ColorFontUtil.RED +elif s == 2: + color = ColorFontUtil.YELLOW +elif s == 3: + color = ColorFontUtil.PINK + +table.setCellBackground(i/nbColPVs, i%nbColPVs + 3, color) \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInServerOverview.js b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInServerOverview.js new file mode 100644 index 0000000..a94ca00 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInServerOverview.js @@ -0,0 +1,31 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ColorFontUtil); + + +var table = widget.getTable(); +var nbColPVs=3; +//find index of the trigger PV +var i=0; +while (triggerPV != pvs[i]) { + i+=1; +} + +table.setCellText(i/nbColPVs, i%nbColPVs +3, PVUtil.getString(triggerPV)); + +var s = PVUtil.getSeverity(triggerPV); + +var color = ColorFontUtil.WHITE; +if( s == 0) { + color = ColorFontUtil.GREEN; +} +else if( s == 1) { + color = ColorFontUtil.RED; +} +else if( s == 2) { + color = ColorFontUtil.YELLOW; +} +else if( s == 3) { + color = ColorFontUtil.PINK; +} + +table.setCellBackground(i/nbColPVs, i%nbColPVs + 3, color); diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInServerOverview.py b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInServerOverview.py new file mode 100644 index 0000000..a127b25 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/DisplayPVValuesInServerOverview.py @@ -0,0 +1,27 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import ColorFontUtil + + +table = widget.getTable() +nbColPVs = 3 +#find index of the trigger PV +i = 0 +while triggerPV != pvs[i]: + i += 1 + + +table.setCellText(i / nbColPVs, i % nbColPVs + 3, PVUtil.getString(triggerPV)) + +s = PVUtil.getSeverity(triggerPV) + +color = ColorFontUtil.WHITE +if s == 0: + color = ColorFontUtil.GREEN +elif s == 1: + color = ColorFontUtil.RED +elif s == 2: + color = ColorFontUtil.YELLOW +elif s == 3: + color = ColorFontUtil.PINK + +table.setCellBackground(i / nbColPVs, i % nbColPVs + 3, color) \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/IOCDetailsTableSelectionMonitor.js b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/IOCDetailsTableSelectionMonitor.js new file mode 100644 index 0000000..7e7b51c --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/IOCDetailsTableSelectionMonitor.js @@ -0,0 +1,14 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.DataUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ScriptUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ConsoleUtil); + +var table = widget.getTable(); +var fct_name=display.getPropertyValue("name"); +var selectionChanged = new Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener() { + selectionChanged: function(selection) { + var macroInput = DataUtil.createMacrosInput(true) + ScriptUtil.openOPI(display.getWidget("SystemDetailsTable"), "/opt/codac/opi/epics-sysmon/boy/ITER-SYSM-IOC_Mimic.opi", 1, macroInput); + } +}; +table.addSelectionChangedListener(selectionChanged); diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/PLCDetailsTableSelectionMonitor.js b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/PLCDetailsTableSelectionMonitor.js new file mode 100644 index 0000000..dc1af0c --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/PLCDetailsTableSelectionMonitor.js @@ -0,0 +1,14 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.DataUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ScriptUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ConsoleUtil); + +var table = widget.getTable(); +var fct_name=display.getPropertyValue("name"); +var selectionChanged = new Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener() { + selectionChanged: function(selection) { + var macroInput = DataUtil.createMacrosInput(true) + ScriptUtil.openOPI(display.getWidget("GeneralTable"), "/opt/codac/opi/epics-sysmon/boy/ITER-SYSM-PLC_Mimic.opi", 1, macroInput); + } +}; +table.addSelectionChangedListener(selectionChanged); diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/PLCsTableSelectionMonitor.js b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/PLCsTableSelectionMonitor.js new file mode 100644 index 0000000..5598c54 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/PLCsTableSelectionMonitor.js @@ -0,0 +1,29 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.DataUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ScriptUtil); + +var table = widget.getTable(); +var fct_name=widget.getPropertyValue("name"); + +var selectionListener = new Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener() { + selectionChanged: function(selection) { + var selectedrow= table.getSelection(); + var cuName=selectedrow[0][0]; + var phyName=selectedrow[0][1]; + + var macroInput = DataUtil.createMacrosInput(true); + macroInput.put("CU", cuName); + macroInput.put("PHY_NAME", phyName); + macroInput.put("FCT_NAME", fct_name); + // open OPI + // see https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-boy/trunk/org.csstudio.opibuilder/src/org/csstudio/opibuilder/scriptUtil/ScriptUtil.java + if (cuName.indexOf("P") == 0) { + ScriptUtil.openOPI(widget, fct_name + "-" + cuName + "-PLCDetails.opi", 1, macroInput); + } + else { + ScriptUtil.openOPI(widget, fct_name+"-CubiclePLCDetails.opi", 0, macroInput); + } + } +}; +table.addSelectionChangedListener(selectionListener); + diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/PLCsTableSelectionMonitor.py b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/PLCsTableSelectionMonitor.py new file mode 100644 index 0000000..0f8c3a7 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/PLCsTableSelectionMonitor.py @@ -0,0 +1,27 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import DataUtil +from org.csstudio.opibuilder.scriptUtil import ScriptUtil +from org.csstudio.swt.widgets.natives.SpreadSheetTable import ITableSelectionChangedListener +from java.util import Arrays + +table = widget.getTable() +fct_name=display.getPropertyValue("name") +class SelectionListener(ITableSelectionChangedListener): + def selectionChanged(self, selection): + cuName="" + phyName="" + for row in selection: + phyName=row[1] + cuName=row[0]; + # change $(CU) substitution + macroInput = DataUtil.createMacrosInput(True) + macroInput.put("CU", cuName) + macroInput.put("PHY_NAME", phyName) + macroInput.put("FCT_NAME", fct_name) + # open OPI + # see https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-boy/trunk/org.csstudio.opibuilder/src/org/csstudio/opibuilder/scriptUtil/ScriptUtil.java + if cuName.startswith('P'): + ScriptUtil.openOPI(display.getWidget("Table"), fct_name+"-PLCDetails.opi", 1, macroInput) + else: + ScriptUtil.openOPI(display.getWidget("Table"), fct_name+"-CubiclePLCDetails.opi", 0, macroInput) +table.addSelectionChangedListener(SelectionListener()) \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/ServersTableSelectionMonitor.js b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/ServersTableSelectionMonitor.js new file mode 100644 index 0000000..c36ff86 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/ServersTableSelectionMonitor.js @@ -0,0 +1,26 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.DataUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ScriptUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ConsoleUtil); + +var table = widget.getTable(); +var fct_name=widget.getPropertyValue("name"); +var selectionChanged = new Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener() { + selectionChanged: function(selection) { + + var selectedrow= table.getSelection(); + var cuName=selectedrow[0][0]; + var phyName=selectedrow[0][1]; + + // change $(CU) substitution + var macroInput = DataUtil.createMacrosInput(true); + macroInput.put("CU", cuName); + macroInput.put("PHY_NAME", phyName) + macroInput.put("FCT_NAME", fct_name); + macroInput.put("SHOW_PLC_IOC", "false"); + // open OPI + // see https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-boy/trunk/org.csstudio.opibuilder/src/org/csstudio/opibuilder/scriptUtil/ScriptUtil.java + ScriptUtil.openOPI(widget, fct_name+"-"+cuName+"-SRVDetails.opi", 1, macroInput); + } +}; +table.addSelectionChangedListener(selectionChanged); diff --git a/EC-GN-JA-PCF/src/main/boy/sysm/scripts/ServersTableSelectionMonitor.py b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/ServersTableSelectionMonitor.py new file mode 100644 index 0000000..bf77d44 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/boy/sysm/scripts/ServersTableSelectionMonitor.py @@ -0,0 +1,26 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import DataUtil +from org.csstudio.opibuilder.scriptUtil import ScriptUtil +from org.csstudio.swt.widgets.natives.SpreadSheetTable import ITableSelectionChangedListener +from java.util import Arrays + +table = widget.getTable() +fct_name=display.getPropertyValue("name") +class SelectionListener(ITableSelectionChangedListener): + def selectionChanged(self, selection): + cuName="" + phyName="" + for row in selection: + phyName=row[1] + cuName=row[0] + + # change $(CU) substitution + macroInput = DataUtil.createMacrosInput(True) + macroInput.put("CU", cuName) + macroInput.put("PHY_NAME", phyName) + macroInput.put("FCT_NAME", fct_name) + macroInput.put("SHOW_PLC_IOC", "false") + # open OPI + # see https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-boy/trunk/org.csstudio.opibuilder/src/org/csstudio/opibuilder/scriptUtil/ScriptUtil.java + ScriptUtil.openOPI(display.getWidget("Table"), fct_name+"-CtrlUnitDetails.opi", 1, macroInput) +table.addSelectionChangedListener(SelectionListener()) diff --git a/EC-GN-JA-PCF/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAInput.cpp b/EC-GN-JA-PCF/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAInput.cpp new file mode 100644 index 0000000..ac3464d --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAInput.cpp @@ -0,0 +1,366 @@ +/** + * @file JAEPICSCAInput.cpp + * @brief Source file for class JAEPICSCAInput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAEPICSCAInput (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAEPICSCAInput.h" + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "MemoryMapInputBroker.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +namespace MARTe { +/** + * @brief Callback function for the ca_create_subscription. Single point of access which + * delegates the events to the corresponding JAEPICSPV instance. + */ +static FastPollingMutexSem eventCallbackFastMux; +/*lint -e{1746} function must match required prototype and thus cannot be changed to constant reference.*/ +void JAEPICSCAInputEventCallback(struct event_handler_args const args) { + (void) eventCallbackFastMux.FastLock(); + PVWrapper *pv = static_cast(args.usr); + if (pv != NULL_PTR(PVWrapper *)) { + (void) MemoryOperationsHelper::Copy(pv->memory, args.dbr, pv->memorySize); + } + eventCallbackFastMux.FastUnLock(); +} +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +JAEPICSCAInput::JAEPICSCAInput() : + DataSourceI(), EmbeddedServiceMethodBinderI(), executor(*this) { + pvs = NULL_PTR(PVWrapper *); + stackSize = THREADS_DEFAULT_STACKSIZE * 4u; + cpuMask = 0xffu; + eventCallbackFastMux.Create(); +} + +/*lint -e{1551} must stop the SingleThreadService in the destructor.*/ +JAEPICSCAInput::~JAEPICSCAInput() { + if (!executor.Stop()) { + if (!executor.Stop()) { + REPORT_ERROR(ErrorManagement::FatalError, "Could not stop SingleThreadService."); + } + } + (void) eventCallbackFastMux.FastLock(); + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + if (pvs[n].memory != NULL_PTR(void *)) { + GlobalObjectsDatabase::Instance()->GetStandardHeap()->Free(pvs[n].memory); + } + } + delete[] pvs; + } + eventCallbackFastMux.FastUnLock(); +} + +bool JAEPICSCAInput::Initialise(StructuredDataI & data) { + bool ok = DataSourceI::Initialise(data); + if (ok) { + if (!data.Read("CPUs", cpuMask)) { + REPORT_ERROR(ErrorManagement::Information, "No CPUs defined. Using default = %d", cpuMask); + } + if (!data.Read("StackSize", stackSize)) { + REPORT_ERROR(ErrorManagement::Information, "No StackSize defined. Using default = %d", stackSize); + } + executor.SetStackSize(stackSize); + executor.SetCPUMask(cpuMask); + } + if (ok) { + ok = data.MoveRelative("Signals"); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Could not move to the Signals section"); + } + if (ok) { + ok = data.Copy(originalSignalInformation); + } + if (ok) { + ok = originalSignalInformation.MoveToRoot(); + } + //Do not allow to add signals in run-time + if (ok) { + ok = signalsDatabase.MoveRelative("Signals"); + } + if (ok) { + ok = signalsDatabase.Write("Locked", 1u); + } + if (ok) { + ok = signalsDatabase.MoveToAncestor(1u); + } + } + if (ok) { + ok = data.MoveToAncestor(1u); + } + return ok; +} + +bool JAEPICSCAInput::SetConfiguredDatabase(StructuredDataI & data) { + bool ok = DataSourceI::SetConfiguredDatabase(data); + //Check the signal index of the timing signal. + uint32 nOfSignals = GetNumberOfSignals(); + if (ok) { + ok = (nOfSignals > 0u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one signal shall be defined"); + } + } + if (ok) { + //Do not allow samples + uint32 functionNumberOfSignals = 0u; + uint32 n; + if (GetFunctionNumberOfSignals(InputSignals, 0u, functionNumberOfSignals)) { + for (n = 0u; (n < functionNumberOfSignals) && (ok); n++) { + uint32 nSamples; + ok = GetFunctionSignalSamples(InputSignals, 0u, n, nSamples); + if (ok) { + ok = (nSamples == 1u); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The number of samples shall be exactly 1"); + } + } + } + } + if (ok) { + pvs = new PVWrapper[nOfSignals]; + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + pvs[n].memory = NULL_PTR(void *); + } + for (n = 0u; (n < nOfSignals) && (ok); n++) { + //Note that the RealTimeApplicationConfigurationBuilder is allowed to change the order of the signals w.r.t. to the originalSignalInformation + StreamString orderedSignalName; + ok = GetSignalName(n, orderedSignalName); + if (ok) { + //Have to mix and match between the original setting of the DataSource signal + //and the ones which are later added by the RealTimeApplicationConfigurationBuilder + ok = originalSignalInformation.MoveRelative(orderedSignalName.Buffer()); + } + StreamString pvName; + if (ok) { + ok = originalSignalInformation.Read("PVName", pvName); + if (!ok) { + uint32 nn = n; + REPORT_ERROR(ErrorManagement::ParametersError, "No PVName specified for signal at index %d", nn); + } + } + TypeDescriptor td = GetSignalType(n); + if (ok) { + (void) StringHelper::CopyN(&pvs[n].pvName[0], pvName.Buffer(), PV_NAME_MAX_SIZE); + if (td == CharString) { + pvs[n].pvType = DBR_STRING; + } + else if (td == Character8Bit) { + pvs[n].pvType = DBR_STRING; + } + else if (td == SignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == UnsignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == SignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == UnsignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == SignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == UnsignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == Float32Bit) { + pvs[n].pvType = DBR_FLOAT; + } + else if (td == Float64Bit) { + pvs[n].pvType = DBR_DOUBLE; + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Type %s is not supported", TypeDescriptor::GetTypeNameFromTypeDescriptor(td)); + ok = false; + } + } + uint32 numberOfElements = 1u; + if (ok) { + ok = GetSignalNumberOfElements(n, numberOfElements); + } + if (ok) { + if (pvs[n].pvType == DBR_STRING) { + ok = (numberOfElements == 40u); + } + if (!ok) { + //Could support arrays of strings with multiples of char8[40] + REPORT_ERROR(ErrorManagement::ParametersError, "Strings shall be defined with 40 elements char8[40]. Arrays of strings are not currently supported"); + } + } + if (ok) { + pvs[n].numberOfElements = numberOfElements; + } + if (ok) { + pvs[n].memorySize = td.numberOfBits; + pvs[n].memorySize /= 8u; + pvs[n].memorySize *= numberOfElements; + pvs[n].memory = GlobalObjectsDatabase::Instance()->GetStandardHeap()->Malloc(pvs[n].memorySize); + ok = originalSignalInformation.MoveToAncestor(1u); + } + } + } + + if (ok) { + ok = (executor.Start() == ErrorManagement::NoError); + } + return ok; +} + +bool JAEPICSCAInput::AllocateMemory() { + return true; +} + +uint32 JAEPICSCAInput::GetNumberOfMemoryBuffers() { + return 1u; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The signalAddress is independent of the bufferIdx.*/ +bool JAEPICSCAInput::GetSignalMemoryBuffer(const uint32 signalIdx, const uint32 bufferIdx, void*& signalAddress) { + bool ok = (pvs != NULL_PTR(PVWrapper *)); + if (ok) { + ok = (signalIdx < GetNumberOfSignals()); + } + if (ok) { + //lint -e{613} pvs cannot as otherwise ok would be false + signalAddress = pvs[signalIdx].memory; + } + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The brokerName only depends on the direction */ +const char8* JAEPICSCAInput::GetBrokerName(StructuredDataI& data, const SignalDirection direction) { + const char8* brokerName = ""; + if (direction == InputSignals) { + brokerName = "MemoryMapInputBroker"; + } + return brokerName; +} + +bool JAEPICSCAInput::GetInputBrokers(ReferenceContainer& inputBrokers, const char8* const functionName, void* const gamMemPtr) { + ReferenceT broker("MemoryMapInputBroker"); + bool ok = broker->Init(InputSignals, *this, functionName, gamMemPtr); + if (ok) { + ok = inputBrokers.Insert(broker); + } + + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: OutputBrokers are not supported. Function returns false irrespectively of the parameters.*/ +bool JAEPICSCAInput::GetOutputBrokers(ReferenceContainer& outputBrokers, const char8* const functionName, void* const gamMemPtr) { + return false; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: NOOP at StateChange, independently of the function parameters.*/ +bool JAEPICSCAInput::PrepareNextState(const char8* const currentStateName, const char8* const nextStateName) { + return true; +} + +ErrorManagement::ErrorType JAEPICSCAInput::Execute(ExecutionInfo& info) { + ErrorManagement::ErrorType err = ErrorManagement::NoError; + if (info.GetStage() == ExecutionInfo::StartupStage) { + (void) eventCallbackFastMux.FastLock(); + /*lint -e{9130} -e{835} -e{845} -e{747} Several false positives. lint is getting confused here for some reason.*/ + if (ca_context_create(ca_enable_preemptive_callback) != ECA_NORMAL) { + err = ErrorManagement::FatalError; + REPORT_ERROR(err, "ca_enable_preemptive_callback failed"); + } + + uint32 n; + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + /*lint -e{9130} -e{835} -e{845} -e{747} Several false positives. lint is getting confused here for some reason.*/ + if (ca_create_channel(&pvs[n].pvName[0], NULL_PTR(caCh *), NULL_PTR(void *), 20u, &pvs[n].pvChid) != ECA_NORMAL) { + err = ErrorManagement::FatalError; + REPORT_ERROR(err, "ca_create_channel failed for PV with name %s", pvs[n].pvName); + } + if (err.ErrorsCleared()) { + /*lint -e{9130} -e{835} -e{845} -e{747} Several false positives. lint is getting confused here for some reason.*/ + if (ca_create_subscription(pvs[n].pvType, pvs[n].numberOfElements, pvs[n].pvChid, DBE_VALUE, &JAEPICSCAInputEventCallback, &pvs[n], + &pvs[n].pvEvid) != ECA_NORMAL) { + err = ErrorManagement::FatalError; + REPORT_ERROR(err, "ca_create_subscription failed for PV %s", pvs[n].pvName); + } + } + } + } + eventCallbackFastMux.FastUnLock(); + } + else if (info.GetStage() != ExecutionInfo::BadTerminationStage) { + Sleep::Sec(1.0F); + } + else { + (void) eventCallbackFastMux.FastLock(); + uint32 n; + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + (void) ca_clear_subscription(pvs[n].pvEvid); + (void) ca_clear_event(pvs[n].pvEvid); + (void) ca_clear_channel(pvs[n].pvChid); + } + } + ca_detach_context(); + ca_context_destroy(); + eventCallbackFastMux.FastUnLock(); + } + + return err; +} + +uint32 JAEPICSCAInput::GetStackSize() const { + return stackSize; +} + +uint32 JAEPICSCAInput::GetCPUMask() const { + return cpuMask; +} + +bool JAEPICSCAInput::Synchronise() { + return false; +} + +CLASS_REGISTER(JAEPICSCAInput, "1.0") + +} + diff --git a/EC-GN-JA-PCF/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAInput.h b/EC-GN-JA-PCF/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAInput.h new file mode 100644 index 0000000..3a5071d --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAInput.h @@ -0,0 +1,260 @@ +/** + * @file EPICSCAInput.h + * @brief Header file for class EPICSCAInput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class EPICSCAInput + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef JAEPICSCAINPUT_H_ +#define JAEPICSCAINPUT_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" +#include "EmbeddedServiceMethodBinderI.h" +#include "EventSem.h" +#include "SingleThreadService.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +/** + * Maximum size that a PV name may have + */ +/*lint -esym(551, MARTe::PV_NAME_MAX_SIZE) the symbol is used to define the size of PVWrapper below*/ +const uint32 PV_NAME_MAX_SIZE = 64u; + +/** + * Wraps a PV + */ +struct PVWrapper { + /** + * The channel identifier + */ + chid pvChid; + /** + * The event identifier + */ + evid pvEvid; + /** + * The PV type + */ + chtype pvType; + /** + * The memory of the signal associated to this channel + */ + void *memory; + void *previousValue; + /** + * The number of elements > 0 + */ + uint32 numberOfElements; + /** + * The memory size + */ + uint32 memorySize; + /** + * The PV name + */ + char8 pvName[PV_NAME_MAX_SIZE]; +}; + +/** + * @brief A DataSource which allows to retrieved data from any number of PVs using the EPICS channel access client protocol. + * Data is asynchronously retrieved using ca_create_subscriptions in the context of a different thread (w.r.t. to the real-time thread). + * + * The configuration syntax is (names are only given as an example): + * + *
+ * +EPICSCAInput_1 = {
+ *     Class = JAEPICSCA::JAEPICSCAInput
+ *     StackSize = 1048576 //Optional the EmbeddedThread stack size. Default value is THREADS_DEFAULT_STACKSIZE * 4u
+ *     CPUs = 0xff //Optional the affinity of the EmbeddedThread (where the EPICS context is attached).
+ *     Signals = {
+ *          PV1 = { //At least one shall be defined
+ *             PVName = My::PV1 //Compulsory. Name of the PV.
+ *             Type = uint32 //Compulsory. Supported types are char8[40], string[40], uint8, int8, uint16, int16, int32, uint32, uint64, int64, float32 and float64
+ *             NumberOfElements = 1 //Arrays also supported
+ *          }
+ *          ...
+ *     }
+ * }
+ *
+ * 
+ */ +class JAEPICSCAInput: public DataSourceI, public EmbeddedServiceMethodBinderI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Default constructor. NOOP. + */ + JAEPICSCAInput(); + + /** + * @brief Destructor. + * @details TODO. + */ + virtual ~JAEPICSCAInput(); + + /** + * @brief See DataSourceI::AllocateMemory. NOOP. + * @return true. + */ + virtual bool AllocateMemory(); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @return 1. + */ + virtual uint32 GetNumberOfMemoryBuffers(); + + /** + * @brief See DataSourceI::GetSignalMemoryBuffer. + * @pre + * SetConfiguredDatabase + */ + virtual bool GetSignalMemoryBuffer(const uint32 signalIdx, + const uint32 bufferIdx, + void *&signalAddress); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @details Only InputSignals are supported. + * @return MemoryMapInputBroker. + */ + virtual const char8 *GetBrokerName(StructuredDataI &data, + const SignalDirection direction); + + /** + * @brief See DataSourceI::GetInputBrokers. + * @details adds a memory MemoryMapInputBroker instance to the inputBrokers + * @return true. + */ + virtual bool GetInputBrokers(ReferenceContainer &inputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::GetOutputBrokers. + * @return false. + */ + virtual bool GetOutputBrokers(ReferenceContainer &outputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::PrepareNextState. NOOP. + * @return true. + */ + virtual bool PrepareNextState(const char8 * const currentStateName, + const char8 * const nextStateName); + + /** + * @brief Loads and verifies the configuration parameters detailed in the class description. + * @return true if all the mandatory parameters are correctly specified and if the specified optional parameters have valid values. + */ + virtual bool Initialise(StructuredDataI & data); + + /** + * @brief Final verification of all the parameters. Setup of the memory required to hold all the signals. + * @details This method verifies that all the parameters requested by the GAMs interacting with this DataSource + * are valid and consistent with the parameters set during the initialisation phase. + * In particular the following conditions shall be met: + * - All the signals have the PVName defined + * - All the signals have one of the following types: uint32, int32, float32 or float64. + * @return true if all the parameters are valid and the conditions above are met. + */ + virtual bool SetConfiguredDatabase(StructuredDataI & data); + + /** + * @brief Gets the affinity of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + * @return the the affinity of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + */ + uint32 GetCPUMask() const; + + /** + * @brief Gets the stack size of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + * @return the stack size of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + */ + uint32 GetStackSize() const; + + /** + * @brief Provides the context to execute all the EPICS relevant calls. + * @details Executes in the context of a spawned thread the following EPICS calls: + * ca_context_create, ca_create_channel, ca_create_subscription, ca_clear_subscription, + * ca_clear_event, ca_clear_channel, ca_detach_context and ca_context_destroy + * @return ErrorManagement::NoError if all the EPICS calls return without any error. + */ + virtual ErrorManagement::ErrorType Execute(ExecutionInfo & info); + + /** + * @brief See DataSourceI::Synchronise. + * @return false. + */ + virtual bool Synchronise(); + + /** + * @brief Registered as the ca_create_subscription callback function. + * It calls updates the memory of the corresponding PV variable. + */ + friend void JAEPICSCAInputEventCallback(struct event_handler_args args); + +private: + + /** + * List of PVs. + */ + PVWrapper *pvs; + + /** + * The CPU mask for the executor + */ + uint32 cpuMask; + + /** + * The stack size + */ + uint32 stackSize; + + /** + * The EmbeddedThread where the ca_pend_event is executed. + */ + SingleThreadService executor; + + /** + * Stores the configuration information received at Initialise. + */ + ConfigurationDatabase originalSignalInformation; +}; +} + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* EPICSCADATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAOutput.cpp b/EC-GN-JA-PCF/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAOutput.cpp new file mode 100644 index 0000000..951ed07 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAOutput.cpp @@ -0,0 +1,375 @@ +/** + * @file EPICSCAOutput.cpp + * @brief Source file for class EPICSCAOutput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class EPICSCAOutput (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAEPICSCAOutput.h" + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "MemoryMapAsyncOutputBroker.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +JAEPICSCAOutput::JAEPICSCAOutput() : + DataSourceI() { + pvs = NULL_PTR(PVWrapper *); + stackSize = THREADS_DEFAULT_STACKSIZE * 4u; + cpuMask = 0xffu; + numberOfBuffers = 0u; + ignoreBufferOverrun = 1u; + threadContextSet = false; +} + +/*lint -e{1551} must free the memory allocated to the different PVs.*/ +JAEPICSCAOutput::~JAEPICSCAOutput() { + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + if (pvs[n].pvChid != NULL_PTR(chid)) { + (void) ca_clear_channel(pvs[n].pvChid); + } + if (pvs[n].memory != NULL_PTR(void *)) { + GlobalObjectsDatabase::Instance()->GetStandardHeap()->Free(pvs[n].memory); + GlobalObjectsDatabase::Instance()->GetStandardHeap()->Free(pvs[n].previousValue); + } + } + delete[] pvs; + } +} + +bool JAEPICSCAOutput::Initialise(StructuredDataI & data) { + bool ok = DataSourceI::Initialise(data); + if (ok) { + ok = data.Read("NumberOfBuffers", numberOfBuffers); + + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "NumberOfBuffers shall be specified"); + } + } + if (ok) { + if (!data.Read("CPUs", cpuMask)) { + REPORT_ERROR(ErrorManagement::Information, "No CPUs defined. Using default = %d", cpuMask); + } + if (!data.Read("StackSize", stackSize)) { + REPORT_ERROR(ErrorManagement::Information, "No StackSize defined. Using default = %d", stackSize); + } + if (!data.Read("IgnoreBufferOverrun", ignoreBufferOverrun)) { + REPORT_ERROR(ErrorManagement::Information, "No IgnoreBufferOverrun defined. Using default = %d", ignoreBufferOverrun); + } + + } + if (ok) { + ok = data.MoveRelative("Signals"); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Could not move to the Signals section"); + } + if (ok) { + ok = data.Copy(originalSignalInformation); + } + if (ok) { + ok = originalSignalInformation.MoveToRoot(); + } + //Do not allow to add signals in run-time + if (ok) { + ok = signalsDatabase.MoveRelative("Signals"); + } + if (ok) { + ok = signalsDatabase.Write("Locked", 1u); + } + if (ok) { + ok = signalsDatabase.MoveToAncestor(1u); + } + } + if (ok) { + ok = data.MoveToAncestor(1u); + } + return ok; +} + +bool JAEPICSCAOutput::SetConfiguredDatabase(StructuredDataI & data) { + bool ok = DataSourceI::SetConfiguredDatabase(data); + //Check the signal index of the timing signal. + uint32 nOfSignals = GetNumberOfSignals(); + if (ok) { + ok = (nOfSignals > 0u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one signal shall be defined"); + } + } + if (ok) { + //Do not allow samples + uint32 functionNumberOfSignals = 0u; + uint32 n; + if (GetFunctionNumberOfSignals(OutputSignals, 0u, functionNumberOfSignals)) { + for (n = 0u; (n < functionNumberOfSignals) && (ok); n++) { + uint32 nSamples; + ok = GetFunctionSignalSamples(OutputSignals, 0u, n, nSamples); + if (ok) { + ok = (nSamples == 1u); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The number of samples shall be exactly 1"); + } + } + } + } + //Only one and one GAM allowed to interact with this DataSourceI + if (ok) { + ok = (GetNumberOfFunctions() == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Exactly one Function allowed to interact with this DataSourceI"); + } + } + + if (ok) { + pvs = new PVWrapper[nOfSignals]; + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + pvs[n].memory = NULL_PTR(void *); //value to write PV + pvs[n].previousValue = NULL_PTR(void *); //written value + pvs[n].pvChid = NULL_PTR(chid); + + } + for (n = 0u; (n < nOfSignals) && (ok); n++) { + //Note that the RealTimeApplicationConfigurationBuilder is allowed to change the order of the signals w.r.t. to the originalSignalInformation + StreamString orderedSignalName; + ok = GetSignalName(n, orderedSignalName); + if (ok) { + //Have to mix and match between the original setting of the DataSource signal + //and the ones which are later added by the RealTimeApplicationConfigurationBuilder + ok = originalSignalInformation.MoveRelative(orderedSignalName.Buffer()); + } + StreamString pvName; + if (ok) { + ok = originalSignalInformation.Read("PVName", pvName); + if (!ok) { + uint32 nn = n; + REPORT_ERROR(ErrorManagement::ParametersError, "No PVName specified for signal at index %d", nn); + } + } + TypeDescriptor td = GetSignalType(n); + + if (ok) { + (void) StringHelper::CopyN(&pvs[n].pvName[0], pvName.Buffer(), PV_NAME_MAX_SIZE); + if (td == CharString) { + pvs[n].pvType = DBR_STRING; + } + else if (td == Character8Bit) { + pvs[n].pvType = DBR_STRING; + } + else if (td == SignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == UnsignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == SignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == UnsignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == SignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == UnsignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == Float32Bit) { + pvs[n].pvType = DBR_FLOAT; + } + else if (td == Float64Bit) { + pvs[n].pvType = DBR_DOUBLE; + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Type %s is not supported", TypeDescriptor::GetTypeNameFromTypeDescriptor(td)); + ok = false; + } + } + uint32 numberOfElements = 1u; + if (ok) { + ok = GetSignalNumberOfElements(n, numberOfElements); + } + if (ok) { + if (pvs[n].pvType == DBR_STRING) { + ok = (numberOfElements == 40u); + } + if (!ok) { + //Could support arrays of strings with multiples of char8[40] + REPORT_ERROR(ErrorManagement::ParametersError, + "Strings shall be defined with 40 elements char8[40]. Arrays of strings are not currently supported"); + } + } + if (ok) { + pvs[n].numberOfElements = numberOfElements; + } + if (ok) { + pvs[n].memorySize = td.numberOfBits; + pvs[n].memorySize /= 8u; + pvs[n].memorySize *= numberOfElements; + pvs[n].memory = GlobalObjectsDatabase::Instance()->GetStandardHeap()->Malloc(pvs[n].memorySize); + pvs[n].previousValue = GlobalObjectsDatabase::Instance()->GetStandardHeap()->Malloc(pvs[n].memorySize); + ok = originalSignalInformation.MoveToAncestor(1u); + } + } + } + return ok; +} + +bool JAEPICSCAOutput::AllocateMemory() { + return true; +} + +uint32 JAEPICSCAOutput::GetNumberOfMemoryBuffers() { + return 1u; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The signalAddress is independent of the bufferIdx.*/ +bool JAEPICSCAOutput::GetSignalMemoryBuffer(const uint32 signalIdx, const uint32 bufferIdx, void*& signalAddress) { + bool ok = (pvs != NULL_PTR(PVWrapper *)); + if (ok) { + ok = (signalIdx < GetNumberOfSignals()); + } + if (ok) { + //lint -e{613} pvs cannot as otherwise ok would be false + signalAddress = pvs[signalIdx].memory; + } + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The brokerName only depends on the direction */ +const char8* JAEPICSCAOutput::GetBrokerName(StructuredDataI& data, const SignalDirection direction) { + const char8* brokerName = ""; + if (direction == OutputSignals) { + brokerName = "MemoryMapAsyncOutputBroker"; + } + return brokerName; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: InputBrokers are not supported. Function returns false irrespectively of the parameters.*/ +bool JAEPICSCAOutput::GetInputBrokers(ReferenceContainer& inputBrokers, const char8* const functionName, void* const gamMemPtr) { + return false; +} + +bool JAEPICSCAOutput::GetOutputBrokers(ReferenceContainer& outputBrokers, const char8* const functionName, void* const gamMemPtr) { + ReferenceT broker("MemoryMapAsyncOutputBroker"); + bool ok = broker->InitWithBufferParameters(OutputSignals, *this, functionName, gamMemPtr, numberOfBuffers, cpuMask, stackSize); + if (ok) { + ok = outputBrokers.Insert(broker); + broker->SetIgnoreBufferOverrun(ignoreBufferOverrun == 1u); + } + + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: NOOP at StateChange, independently of the function parameters.*/ +bool JAEPICSCAOutput::PrepareNextState(const char8* const currentStateName, const char8* const nextStateName) { + return true; +} + +uint32 JAEPICSCAOutput::GetStackSize() const { + return stackSize; +} + +uint32 JAEPICSCAOutput::GetCPUMask() const { + return cpuMask; +} + +uint32 JAEPICSCAOutput::GetNumberOfBuffers() const { + return numberOfBuffers; +} + +bool JAEPICSCAOutput::Synchronise() { + bool ok = true; + uint32 n; + uint32 nOfSignals = GetNumberOfSignals(); + if (!threadContextSet) { + ok = (ca_context_create(ca_enable_preemptive_callback) == ECA_NORMAL); + if (!ok) { + REPORT_ERROR(ErrorManagement::FatalError, "ca_enable_preemptive_callback failed"); + } + threadContextSet = ok; + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + ok = (ca_create_channel(&pvs[n].pvName[0], NULL_PTR(caCh *), NULL_PTR(void *), 20u, &pvs[n].pvChid) == ECA_NORMAL); + if (!ok) { + REPORT_ERROR(ErrorManagement::FatalError, "ca_create_channel failed for PV with name %s", pvs[n].pvName); + } + } + } + } + + //Allow to write event at the first time! + if (threadContextSet) { + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + bool isNewValue = true; + if (pvs[n].pvType == DBR_STRING) { + if(strcmp((char*)pvs[n].memory,(char*)pvs[n].previousValue)==0){ + isNewValue = false; + continue; + } + if(isNewValue){ + ok = (ca_put(pvs[n].pvType, pvs[n].pvChid, pvs[n].memory) == ECA_NORMAL); + memcpy(pvs[n].previousValue,pvs[n].memory, pvs[n].numberOfElements); + } + } + else { + if(memcmp(pvs[n].memory, pvs[n].previousValue, pvs[n].numberOfElements)==0){ + isNewValue = false; + continue; + } + if(isNewValue){ + ok = (ca_array_put(pvs[n].pvType, pvs[n].numberOfElements, pvs[n].pvChid, pvs[n].memory) == ECA_NORMAL); + memcpy(pvs[n].previousValue, pvs[n].memory, pvs[n].numberOfElements); + } + } + if (!ok) { + REPORT_ERROR(ErrorManagement::FatalError, "ca_put failed for PV: %s", pvs[n].pvName); + } + (void) ca_pend_io(0.1); + } + } + } + + return ok; +} + +bool JAEPICSCAOutput::IsIgnoringBufferOverrun() const { + return (ignoreBufferOverrun == 1u); +} + +CLASS_REGISTER(JAEPICSCAOutput, "1.0") + +} + diff --git a/EC-GN-JA-PCF/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAOutput.h b/EC-GN-JA-PCF/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAOutput.h new file mode 100644 index 0000000..5c2de87 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/DataSources/JAEPICSCA/JAEPICSCAOutput.h @@ -0,0 +1,233 @@ +/** + * @file EPICSCAOutput.h + * @brief Header file for class EPICSCAOutput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class EPICSCAOutput + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef JAEPICSCAOutput_H_ +#define JAEPICSCAOutput_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" +#include "JAEPICSCAInput.h" +#include "EmbeddedServiceMethodBinderI.h" +#include "EventSem.h" +#include "SingleThreadService.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +//Maximum size that a PV name may have + +/** + * @brief A DataSource which allows to output data into any number of PVs using the EPICS channel access client protocol. + * Data is asynchronously ca_put in the context of a different thread (w.r.t. to the real-time thread). + * + * The configuration syntax is (names are only given as an example): + * + *
+ * +EPICSCAOutput_1 = {
+ *     Class = EPICSCA::EPICSCAOutput
+ *     StackSize = 1048576 //Optional the EmbeddedThread stack size. Default value is THREADS_DEFAULT_STACKSIZE * 4u
+ *     CPUs = 0xff //Optional the affinity of the EmbeddedThread (where the EPICS context is attached).
+ *     IgnoreBufferOverrun = 1 //Optional. If true no error will be triggered when the thread that writes into EPICS does not consume the data fast enough.
+ *     NumberOfBuffers = 10 //Compulsory. Number of buffers in a circular buffer that asynchronously writes the PV values. Each buffer is capable of holding a copy of all the DataSourceI signals.
+ *     Signals = {
+ *          PV1 = { //At least one shall be defined
+ *             PVName = My::PV1 //Compulsory. Name of the PV.
+ *             Type = uint32 //Compulsory. Supported types are char8[40], string[40], uint8, int8, uint16, int16, int32, uint32, float32 and float64
+ *          }
+ *          ...
+ *     }
+ * }
+ *
+ * 
+ */ +class JAEPICSCAOutput: public DataSourceI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Default constructor. NOOP. + */ + JAEPICSCAOutput(); + + /** + * @brief Destructor. + * @details TODO. + */ + virtual ~JAEPICSCAOutput(); + + /** + * @brief See DataSourceI::AllocateMemory. NOOP. + * @return true. + */ + virtual bool AllocateMemory(); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @return 1. + */ + virtual uint32 GetNumberOfMemoryBuffers(); + + /** + * @brief See DataSourceI::GetSignalMemoryBuffer. + * @pre + * SetConfiguredDatabase + */ + virtual bool GetSignalMemoryBuffer(const uint32 signalIdx, + const uint32 bufferIdx, + void *&signalAddress); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @details Only OutputSignals are supported. + * @return MemoryMapAsyncOutputBroker. + */ + virtual const char8 *GetBrokerName(StructuredDataI &data, + const SignalDirection direction); + + /** + * @brief See DataSourceI::GetInputBrokers. + * @return false. + */ + virtual bool GetInputBrokers(ReferenceContainer &inputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::GetOutputBrokers. + * @details adds a memory MemoryMapOutputBroker instance to the outputBrokers + * @return true. + */ + virtual bool GetOutputBrokers(ReferenceContainer &outputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::PrepareNextState. NOOP. + * @return true. + */ + virtual bool PrepareNextState(const char8 * const currentStateName, + const char8 * const nextStateName); + + /** + * @brief Loads and verifies the configuration parameters detailed in the class description. + * @return true if all the mandatory parameters are correctly specified and if the specified optional parameters have valid values. + */ + virtual bool Initialise(StructuredDataI & data); + + /** + * @brief Final verification of all the parameters. Setup of the memory required to hold all the signals. + * @details This method verifies that all the parameters requested by the GAMs interacting with this DataSource + * are valid and consistent with the parameters set during the initialisation phase. + * In particular the following conditions shall be met: + * - All the signals have the PVName defined + * - All the signals have one of the following types: uint32, int32, float32 or float64. + * @return true if all the parameters are valid and the conditions above are met. + */ + virtual bool SetConfiguredDatabase(StructuredDataI & data); + + /** + * @brief Gets the affinity of the thread which is going to be used to asynchronously write data with ca_put. + * @return the affinity of the thread which is going to be used to asynchronously write data with ca_put. + */ + uint32 GetCPUMask() const; + + /** + * @brief Gets the stack size of the thread which is going to be used to asynchronously write data with ca_put. + * @return the stack size of the thread which is going to be used to asynchronously write data with ca_put. + */ + uint32 GetStackSize() const; + + /** + * @brief Gets the number of buffers in the circular buffer that asynchronously writes the PV values. + * @return the number of buffers in the circular buffer that asynchronously writes the PV values. + */ + uint32 GetNumberOfBuffers() const; + + /** + * @brief Provides the context to execute all the EPICS ca_put calls. + * @details Executes in the context of the MemoryMapAsyncOutputBroker thread the following EPICS calls: + * ca_context_create, ca_create_channel, ca_create_subscription, ca_clear_subscription, + * ca_clear_event, ca_clear_channel, ca_detach_context and ca_context_destroy + * @return true if all the EPICS calls return without any error. + */ + virtual bool Synchronise(); + + /** + * @brief Gets if buffer overruns is being ignored (i.e. the consumer thread which writes into EPICS is not consuming the data fast enough). + * @return if true no error is to be triggered when there is a buffer overrun. + */ + bool IsIgnoringBufferOverrun() const; + + +private: + /** + * List of PVs. + */ + PVWrapper *pvs; + + /** + * The CPU mask for the executor + */ + uint32 cpuMask; + + /** + * The stack size + */ + uint32 stackSize; + + /** + * Stores the configuration information received at Initialise. + */ + ConfigurationDatabase originalSignalInformation; + + /** + * The number of buffers for the circular buffer that flushes data into EPICS + */ + uint32 numberOfBuffers; + + /** + * True once the epics thread context is set + */ + bool threadContextSet; + + /** + * If true no error will be triggered when the data cannot be consumed by the thread doing the caputs. + */ + uint32 ignoreBufferOverrun; +}; +} + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* EPICSCADATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF/src/main/c++/DataSources/JAEPICSCA/Makefile.gcc b/EC-GN-JA-PCF/src/main/c++/DataSources/JAEPICSCA/Makefile.gcc new file mode 100644 index 0000000..1c65faf --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/DataSources/JAEPICSCA/Makefile.gcc @@ -0,0 +1,29 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc + +LIBRARIES += -L$(EPICS_BASE)/lib/$(EPICS_HOST_ARCH)/ -lca diff --git a/EC-GN-JA-PCF/src/main/c++/DataSources/JAEPICSCA/Makefile.inc b/EC-GN-JA-PCF/src/main/c++/DataSources/JAEPICSCA/Makefile.inc new file mode 100644 index 0000000..435df16 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/DataSources/JAEPICSCA/Makefile.inc @@ -0,0 +1,58 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAEPICSCAOutput.x JAEPICSCAInput.x + +PACKAGE=DataSources + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(EPICS_BASE)/include/ +INCLUDES += -I$(EPICS_BASE)/include/os/Linux/ +INCLUDES += -I$(EPICS_BASE)/include/compiler/gcc/ +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L5GAMs + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAEPICSCA$(LIBEXT) \ + $(BUILD_DIR)/JAEPICSCA$(DLLEXT) + echo $(OBJS) + +include depends.$(TARGET) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/src/main/c++/DataSources/Makefile b/EC-GN-JA-PCF/src/main/c++/DataSources/Makefile new file mode 100644 index 0000000..fa87195 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/DataSources/Makefile @@ -0,0 +1,28 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +export TARGET=x86-linux + +include Makefile.gcc \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/c++/DataSources/Makefile.gcc b/EC-GN-JA-PCF/src/main/c++/DataSources/Makefile.gcc new file mode 100644 index 0000000..e0a2fc4 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/DataSources/Makefile.gcc @@ -0,0 +1,26 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +############################################################# + +include Makefile.inc + diff --git a/EC-GN-JA-PCF/src/main/c++/DataSources/Makefile.inc b/EC-GN-JA-PCF/src/main/c++/DataSources/Makefile.inc new file mode 100644 index 0000000..59ce9d2 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/DataSources/Makefile.inc @@ -0,0 +1,42 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +SPB = RandomDataSource.x NI6528.x JAEPICSCA.x + +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults + +ROOT_DIR=../../../obj +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +all: $(OBJS) $(SUBPROJ) check-env + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + +check-env: +ifndef MARTe2_DIR + $(error MARTe2_DIR is undefined) +endif + diff --git a/EC-GN-JA-PCF/src/main/c++/DataSources/NI6528/Makefile.gcc b/EC-GN-JA-PCF/src/main/c++/DataSources/NI6528/Makefile.gcc new file mode 100644 index 0000000..29201d0 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/DataSources/NI6528/Makefile.gcc @@ -0,0 +1,30 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc + +LIBRARIES += -L$(CODAC_ROOT)/lib/ -lpxi6528 + diff --git a/EC-GN-JA-PCF/src/main/c++/DataSources/NI6528/Makefile.inc b/EC-GN-JA-PCF/src/main/c++/DataSources/NI6528/Makefile.inc new file mode 100644 index 0000000..24ebd5d --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/DataSources/NI6528/Makefile.inc @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=NI6528.x + +PACKAGE=DataSources + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(CODAC_ROOT)/include/ + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/NI6528$(LIBEXT) \ + $(BUILD_DIR)/NI6528$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/src/main/c++/DataSources/NI6528/NI6528.cpp b/EC-GN-JA-PCF/src/main/c++/DataSources/NI6528/NI6528.cpp new file mode 100644 index 0000000..49f62b1 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/DataSources/NI6528/NI6528.cpp @@ -0,0 +1,141 @@ +/** + * @file NI6528.cpp + * @brief Source file for class NI6528 + * @date 01/03/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class NI6528 (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include +#include +#include +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "CompilerTypes.h" +#include "NI6528.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +NI6528::NI6528() : + MARTe::DataSourceI() { + using namespace MARTe; + previousValue = 0u; + value = 0u; + port = 0u; + boardFileDescriptor = 0; +} + +NI6528::~NI6528() { + using namespace MARTe; + (void) pxi6528_close_device(boardFileDescriptor); +} + +bool NI6528::SetConfiguredDatabase(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = (DataSourceI::SetConfiguredDatabase(data)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "DataSourceI::SetConfiguredDatabas() failed"); + } + if (ok) { + ok = (GetNumberOfSignals() == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetNumberOfSignals() != 1u"); + } + } + if (ok) { + ok = (GetSignalType(0u) == UnsignedInteger8Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetSignalType(0u) != UnsignedInteger8Bit"); + } + } + + return ok; +} + +bool NI6528::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = DataSourceI::Initialise(data); + if (ok) { + ok = data.Read("Port", port); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The Port shall be specified"); + } + } + if (ok) { + ok = data.Read("DeviceName", deviceName); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The DeviceName shall be specified"); + } + } + int32 ret = pxi6528_open_device(&boardFileDescriptor, deviceName.Buffer(), O_NONBLOCK); + ok = (ret == 0); + if (!ok) { + StreamString err = strerror(-ret); + REPORT_ERROR(ErrorManagement::FatalError, "Could not open device (%s) : %s", deviceName.Buffer(), err.Buffer()); + } + return ok; +} + +bool NI6528::Synchronise() { + using namespace MARTe; + if(previousValue != value){ + int32 ret = (pxi6528_write_port(boardFileDescriptor, port, value) > 0); + previousValue = value; + bool ok = (ret > -1); + if (!ok) { + StreamString err = strerror(-ret); + REPORT_ERROR(ErrorManagement::FatalError, "Could not write to device (%s) : %s", deviceName.Buffer(), err.Buffer()); + } + } + + return true; +} + +bool NI6528::AllocateMemory() { + return true; +} + +bool NI6528::GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress) { + signalAddress = &value; + return true; +} + +const MARTe::char8 *NI6528::GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction) { + using namespace MARTe; + return "MemoryMapSynchronisedOutputBroker"; +} + +bool NI6528::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + return true; +} + +CLASS_REGISTER(NI6528, "1.0") + diff --git a/EC-GN-JA-PCF/src/main/c++/DataSources/NI6528/NI6528.h b/EC-GN-JA-PCF/src/main/c++/DataSources/NI6528/NI6528.h new file mode 100644 index 0000000..7074477 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/DataSources/NI6528/NI6528.h @@ -0,0 +1,143 @@ +/** + * @file NI6528.h + * @brief Header file for class NI6528 + * @date 07/06/2018 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class NI6528 + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef RANDOM_DATASOURCE_H_ +#define RANDOM_DATASOURCE_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +/** + * @brief NI6528 simplified data source implementation. + * + * The configuration syntax is (names and signal quantities are only given as an example): + * +NI6528 = { + * Class = NI6528 + * DeviceName = "/dev/pxi6528.0" //Mandatory + * Port = 0 //The port where to write + * Signals = { + * currentValue = {Type = uint8} + * bitmask = {Type = uint8} + * Value = {Type = uint8} + * } + * } + */ +class NI6528: public MARTe::DataSourceI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Constructor. NOOP. + */ +NI6528 (); + + /** + * @brief Destructor. NOOP. + */ + virtual ~NI6528(); + + /** + * @brief The configuration data detailed in the class description + * @return true if all the compulsory parameters are set. + */ + virtual bool Initialise(MARTe::StructuredDataI & data); + + /** + * @brief Verifies that at most one signal has been set with the correct type (i.e. any integer). + * @return true if the above conditions are met. + */ + virtual bool SetConfiguredDatabase(MARTe::StructuredDataI & data); + + /** + * @brief @see DataSourceI::Synchronise + */ + virtual bool Synchronise(); + + /** + * @brief @see DataSourceI::AllocateMemory + */ + virtual bool AllocateMemory(); + + /** + * @brief @see DataSourceI::GetSignalMemoryBuffer + */ + virtual bool GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress); + + /** + * @return "MemoryMapSynchronisedInputBroker" + */ + virtual const MARTe::char8 *GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction); + + /** + * @brief NOOP + */ + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName); + +private: + /** + * The previous value to write. + */ + MARTe::uint8 previousValue; + + /** + * The bitmask to write value. (new value) = (current value) || (bitmask) && (write value) + */ + MARTe::uint8 bitmask; + + /** + * The value to write. + */ + MARTe::uint8 value; + + /** + * The port number + */ + MARTe::uint32 port; + + /** + * The board file descriptor + */ + pxi6528_device_t boardFileDescriptor; + + /** + * The device name + */ + MARTe::StreamString deviceName; +}; + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* RANDOM_DATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF/src/main/c++/DataSources/RandomDataSource/Makefile.gcc b/EC-GN-JA-PCF/src/main/c++/DataSources/RandomDataSource/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/DataSources/RandomDataSource/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/c++/DataSources/RandomDataSource/Makefile.inc b/EC-GN-JA-PCF/src/main/c++/DataSources/RandomDataSource/Makefile.inc new file mode 100644 index 0000000..0833f11 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/DataSources/RandomDataSource/Makefile.inc @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=RandomDataSource.x + +PACKAGE=DataSources + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/RandomDataSource$(LIBEXT) \ + $(BUILD_DIR)/RandomDataSource$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/src/main/c++/DataSources/RandomDataSource/RandomDataSource.cpp b/EC-GN-JA-PCF/src/main/c++/DataSources/RandomDataSource/RandomDataSource.cpp new file mode 100644 index 0000000..bcfc0b0 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/DataSources/RandomDataSource/RandomDataSource.cpp @@ -0,0 +1,146 @@ +/** + * @file RandomDataSource.cpp + * @brief Source file for class RandomDataSource + * @date 01/03/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class RandomDataSource (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "CompilerTypes.h" +#include "RandomDataSource.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +RandomDataSource::RandomDataSource() : + MARTe::DataSourceI() { + using namespace MARTe; + seed = 0u; + signalPtr = NULL_PTR(MARTe::char8 *); + signalTypeDescriptor = UnsignedInteger8Bit; +} + +RandomDataSource::~RandomDataSource() { + using namespace MARTe; + if (signalPtr) { + delete[] signalPtr; + } +} + +bool RandomDataSource::SetConfiguredDatabase(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = (DataSourceI::SetConfiguredDatabase(data)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "DataSourceI::SetConfiguredDatabas() failed"); + } + if (ok) { + ok = (GetNumberOfSignals() == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetNumberOfSignals() != 1u"); + } + } + if (ok) { + signalTypeDescriptor = GetSignalType(0u); + ok = (signalTypeDescriptor.type == UnsignedInteger); + if (!ok) { + ok = (signalTypeDescriptor.type == SignedInteger); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetSignalType(0u) != Un/SignedInteger"); + } + } + + return ok; +} + +bool RandomDataSource::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = DataSourceI::Initialise(data); + if (ok) { + ok = data.Read("Seed", seed); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The Seed shall be specified"); + } + } + + return ok; +} + +bool RandomDataSource::Synchronise() { + using namespace MARTe; + + if (signalTypeDescriptor.numberOfBits == 8u) { + GetValue(); + } + if (signalTypeDescriptor.numberOfBits == 16u) { + GetValue(); + } + if (signalTypeDescriptor.numberOfBits == 32u) { + GetValue(); + } + if (signalTypeDescriptor.numberOfBits == 64u) { + GetValue(); + } + + return true; +} + +bool RandomDataSource::AllocateMemory() { + signalPtr = new MARTe::char8[signalTypeDescriptor.numberOfBits]; + return true; +} + +bool RandomDataSource::GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress) { + signalAddress = &signalPtr[0]; + return true; +} + +const MARTe::char8 *RandomDataSource::GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction) { + using namespace MARTe; + + static bool firstTime = true; + const char8 * broker;// = NULL_PTR(const char8 *); + if (firstTime) { + broker = "MemoryMapSynchronisedInputBroker"; + } + else { + firstTime = false; + broker = "MemoryMapInputBroker"; + } + return broker; +} + +bool RandomDataSource::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + return true; +} + +CLASS_REGISTER(RandomDataSource, "1.0") + diff --git a/EC-GN-JA-PCF/src/main/c++/DataSources/RandomDataSource/RandomDataSource.h b/EC-GN-JA-PCF/src/main/c++/DataSources/RandomDataSource/RandomDataSource.h new file mode 100644 index 0000000..11cade5 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/DataSources/RandomDataSource/RandomDataSource.h @@ -0,0 +1,137 @@ +/** + * @file RandomDataSource.h + * @brief Header file for class RandomDataSource + * @date 07/06/2018 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class RandomDataSource + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef RANDOM_DATASOURCE_H_ +#define RANDOM_DATASOURCE_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +/** + * @brief DataDource which generates random numbers against a given seed. + * + * The configuration syntax is (names and signal quantities are only given as an example): + * +RandomDataSource = { + * Class = RandomDataSource + * Seed = 8 //Seed against which the the seed will be generated. Note that each signal + * Signals = { + * Random1 = { //Maximum one signal + * Type = uint64 //All the integer types are supported + * } + * } + * } + */ +class RandomDataSource: public MARTe::DataSourceI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Constructor. NOOP. + */ +RandomDataSource (); + + /** + * @brief Destructor. NOOP. + */ + virtual ~RandomDataSource(); + + /** + * @brief The configuration data detailed in the class description + * @return true if all the compulsory parameters are set. + */ + virtual bool Initialise(MARTe::StructuredDataI & data); + + /** + * @brief Verifies that at most one signal has been set with the correct type (i.e. any integer). + * @return true if the above conditions are met. + */ + virtual bool SetConfiguredDatabase(MARTe::StructuredDataI & data); + + /** + * @brief @see DataSourceI::Synchronise + */ + virtual bool Synchronise(); + + /** + * @brief @see DataSourceI::AllocateMemory + */ + virtual bool AllocateMemory(); + + /** + * @brief @see DataSourceI::GetSignalMemoryBuffer + */ + virtual bool GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress); + + /** + * @return "MemoryMapSynchronisedInputBroker" + */ + virtual const MARTe::char8 *GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction); + + /** + * @brief NOOP + */ + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName); + +private: + /** + * The seed to compute the signals. + */ + MARTe::uint32 seed; + + /** + * The signal pointer + */ + MARTe::char8 *signalPtr; + + /** + * The signal type descriptor. + */ + MARTe::TypeDescriptor signalTypeDescriptor; + + /** + * Compute the random value + */ + template + void GetValue(); + +}; + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ +template +void RandomDataSource::GetValue() { + *(reinterpret_cast(&signalPtr[0u])) = static_cast(rand_r(&seed)); +} + +#endif /* RANDOM_DATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JABitReverseGAM/JABitReverseGAM.cpp b/EC-GN-JA-PCF/src/main/c++/GAMs/JABitReverseGAM/JABitReverseGAM.cpp new file mode 100644 index 0000000..dd322b8 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JABitReverseGAM/JABitReverseGAM.cpp @@ -0,0 +1,123 @@ +/** + * @file JABitReverseGAM.cpp + * @brief Source file for class JABitReverseGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JABitReverseGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JABitReverseGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JABitReverseGAM::JABitReverseGAM() { + //Input signals. + input1 = NULL_PTR(MARTe::uint8 *); + + //Output signals. + output1= NULL_PTR(MARTe::uint8 *); +} + +JABitReverseGAM::~JABitReverseGAM() { +} + +bool JABitReverseGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + return ok; +} + +bool JABitReverseGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JABitReverseGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == 1u); + if (ok) { + ok = (numberOfOutputSignals == 1u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "One output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "One input signals shall be defined"); + } + // Do type check for input signals. + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = ((inputType == UnsignedInteger8Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint8.", signalName.Buffer()); + } + + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = ((outputType == UnsignedInteger8Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint8.", signalName.Buffer()); + } + } + } + // Do type cast. + if (ok) { + input1 = reinterpret_cast(GetInputSignalMemory(0)); + + output1 = reinterpret_cast(GetOutputSignalMemory(0)); + } + return ok; +} + +bool JABitReverseGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + *output1 = ~(*input1); + return true; +} + +CLASS_REGISTER(JABitReverseGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JABitReverseGAM/JABitReverseGAM.h b/EC-GN-JA-PCF/src/main/c++/GAMs/JABitReverseGAM/JABitReverseGAM.h new file mode 100644 index 0000000..1d2bbcf --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JABitReverseGAM/JABitReverseGAM.h @@ -0,0 +1,75 @@ +/** + * @file JABitReverseGAM.h + * @brief Header file for class JABitReverseGAM + * @date Mar 18, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JABitReverseGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JABitReverseGAM_H_ +#define GAMS_JABitReverseGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +class JABitReverseGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JABitReverseGAM(); + + virtual ~JABitReverseGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + + // Input signals + MARTe::uint8 *input1; + + // Output signals + MARTe::uint8 *output1; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JABitReverseGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JABitReverseGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/c++/GAMs/JABitReverseGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JABitReverseGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JABitReverseGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/c++/GAMs/JABitReverseGAM/Makefile.inc new file mode 100644 index 0000000..8847378 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JABitReverseGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JABitReverseGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JABitReverseGAM$(LIBEXT) \ + $(BUILD_DIR)/JABitReverseGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JABitSumGAM/JABitSumGAM.cpp b/EC-GN-JA-PCF/src/main/c++/GAMs/JABitSumGAM/JABitSumGAM.cpp new file mode 100644 index 0000000..7c75cd1 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JABitSumGAM/JABitSumGAM.cpp @@ -0,0 +1,143 @@ +/** + * @file JABitSumGAM.cpp + * @brief Source file for class JABitSumGAM + * @date Feb 10, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JABitSumGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JABitSumGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JABitSumGAM::JABitSumGAM() { + //Input signals. + input0 = NULL_PTR(MARTe::uint32 *); + input1 = NULL_PTR(MARTe::uint32 *); + input2 = NULL_PTR(MARTe::uint32 *); + input3 = NULL_PTR(MARTe::uint32 *); + input4 = NULL_PTR(MARTe::uint32 *); + input5 = NULL_PTR(MARTe::uint32 *); + input6 = NULL_PTR(MARTe::uint32 *); + input7 = NULL_PTR(MARTe::uint32 *); + + //Output signals. + output= NULL_PTR(MARTe::uint8 *); +} + +JABitSumGAM::~JABitSumGAM() { +} + +bool JABitSumGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (!ok){ + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "ParametersError in init."); + } + return ok; +} + +bool JABitSumGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JABitSumGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == 8u); + if (ok) { + ok = (numberOfOutputSignals == 1u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "One output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Eight input signals shall be defined"); + } + // Do type check for input signals. + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32.", signalName.Buffer()); + } + + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint8.", signalName.Buffer()); + } + } + } + // Do type cast. + if (ok) { + input0 = reinterpret_cast(GetInputSignalMemory(0)); + input1 = reinterpret_cast(GetInputSignalMemory(1)); + input2 = reinterpret_cast(GetInputSignalMemory(2)); + input3 = reinterpret_cast(GetInputSignalMemory(3)); + input4 = reinterpret_cast(GetInputSignalMemory(4)); + input5 = reinterpret_cast(GetInputSignalMemory(5)); + input6 = reinterpret_cast(GetInputSignalMemory(6)); + input7 = reinterpret_cast(GetInputSignalMemory(7)); + + output = reinterpret_cast(GetOutputSignalMemory(0)); + } + + return ok; +} + +bool JABitSumGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + *output = *input0 + *input1*2 + *input2*4 + *input3*8 + *input4*16 + + *input5*32 + *input6*64 + *input7*128; + + return true; +} + +CLASS_REGISTER(JABitSumGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JABitSumGAM/JABitSumGAM.h b/EC-GN-JA-PCF/src/main/c++/GAMs/JABitSumGAM/JABitSumGAM.h new file mode 100644 index 0000000..462f62b --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JABitSumGAM/JABitSumGAM.h @@ -0,0 +1,81 @@ +/** + * @file JABitSumGAM.h + * @brief Header file for class JABitSumGAM + * @date Feb 10, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JABitSumGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JABitSumGAM_H_ +#define GAMS_JABitSumGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include "stdio.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +class JABitSumGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JABitSumGAM(); + + virtual ~JABitSumGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + // Input signals + MARTe::uint32 *input0; + MARTe::uint32 *input1; + MARTe::uint32 *input2; + MARTe::uint32 *input3; + MARTe::uint32 *input4; + MARTe::uint32 *input5; + MARTe::uint32 *input6; + MARTe::uint32 *input7; + + // Output signals + MARTe::uint8 *output; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JABitSumGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JABitSumGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/c++/GAMs/JABitSumGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JABitSumGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JABitSumGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/c++/GAMs/JABitSumGAM/Makefile.inc new file mode 100644 index 0000000..f57063b --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JABitSumGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JABitSumGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JABitSumGAM$(LIBEXT) \ + $(BUILD_DIR)/JABitSumGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.cpp b/EC-GN-JA-PCF/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.cpp new file mode 100644 index 0000000..99ba1f5 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.cpp @@ -0,0 +1,309 @@ +/** + * @file JAConditionalSignalUpdateGAM.cpp + * @brief Source file for class JAConditionalSignalUpdateGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAConditionalSignalUpdateGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAConditionalSignalUpdateGAM.h" +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAConditionalSignalUpdateGAM::JAConditionalSignalUpdateGAM() { + inputSignals = NULL_PTR(void **); + inputSignalTypes = NULL_PTR(MARTe::TypeDescriptor *); + values = NULL_PTR(MARTe::uint32 *); + valuesCount = 0u; + outputSignals = NULL_PTR(MARTe::uint32 **); + defaultValues = NULL_PTR(MARTe::uint32 **); + needsReset = false; + expectedValues = NULL_PTR(MARTe::uint32 *); + expectedValuesCount = 0u; + operation = And; + comparators = NULL_PTR(ComparisonMode *); +} + +JAConditionalSignalUpdateGAM::~JAConditionalSignalUpdateGAM() { + if (outputSignals != NULL_PTR(MARTe::uint32 **)) { + delete[] outputSignals; + } + if (inputSignals != NULL_PTR(void **)) { + delete[] inputSignals; + } + if (inputSignalTypes != NULL_PTR(MARTe::TypeDescriptor *)) { + delete[] inputSignalTypes; + } + if (values != NULL_PTR(MARTe::uint32 *)) { + delete[] values; + } + if (comparators != NULL_PTR(ComparisonMode *)) { + delete[] comparators; + } + if (defaultValues != NULL_PTR(MARTe::uint32 **)) { + delete[] defaultValues; + } +} + +bool JAConditionalSignalUpdateGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + // Read expected values. + AnyType valuesArray = data.GetType("ExpectedValues"); + + if (valuesArray.GetDataPointer() != NULL) { + expectedValuesCount = valuesArray.GetNumberOfElements(0u); + + expectedValues = new uint32[expectedValuesCount]; + + Vector valuesVector(expectedValues, expectedValuesCount); + ok = (data.Read("ExpectedValues", valuesVector)); + } + } + if (ok) { + // Read comparators. + AnyType comparatorsArray = data.GetType("Comparators"); + if (comparatorsArray.GetDataPointer() != NULL) { + uint32 count; + if (ok) { + count = comparatorsArray.GetNumberOfElements(0u); + ok = count == expectedValuesCount; + } + if (ok) { + comparators = new ComparisonMode[count]; + StreamString* comp = new StreamString[count]; + Vector compVector(comp, count); + + ok = (data.Read("Comparators", compVector)); + + if (ok) { + for (uint32 i = 0; i < count; ++i) { + if (comp[i] == "EQUALS") { + comparators[i] = Equals; + } else if (comp[i] == "NOT") { + comparators[i] = Not; + } else if (comp[i] == "GREATER") { + comparators[i] = Greater; + } else if (comp[i] == "EQUALS_OR_GREATER") { + comparators[i] = EqualsOrGreater; + } else if (comp[i] == "LESS") { + comparators[i] = Less; + } else if (comp[i] == "EQUALS_OR_LESS") { + comparators[i] = EqualsOrLess; + } else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Comparator %s is not defined.", comp[i].Buffer()); + } + } + } + delete[] comp; + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Expected values and operators shall have the same " + "number of elements."); + } + } else { + // Create default comparators (equals) when they aren't provided in the configuration. + comparators = new ComparisonMode[expectedValuesCount]; + for (uint32 i = 0; i < expectedValuesCount; ++i) { + comparators[i] = Equals; + } + } + } + if (ok) { + MARTe::StreamString operationStr; + if (data.Read("Operation", operationStr)) { + if (operationStr == "AND") { + operation = And; + } + else if (operationStr == "OR") { + operation = Or; + } + else if (operationStr == "NOR") { + operation = Nor; + } + else if (operationStr == "XOR") { + operation = Xor; + } + else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Operation %s is not defined", operationStr.Buffer()); + } + } + } + if (ok) { + // Read output signal values to be set. + AnyType valuesArray = data.GetType("Values"); + ok = (valuesArray.GetDataPointer() != NULL); + + if (ok) { + valuesCount = valuesArray.GetNumberOfElements(0u); + ok = valuesCount > 0u; + } + if (ok) { + values = new uint32[valuesCount]; + + Vector valuesVector(values, valuesCount); + ok = (data.Read("Values", valuesVector)); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Values shall be defined."); + } + } + return ok; +} + +bool JAConditionalSignalUpdateGAM::Setup() { + using namespace MARTe; + bool ok = numberOfInputSignals == (expectedValuesCount + numberOfOutputSignals); + if (ok) { + inputSignals = new void*[expectedValuesCount]; + defaultValues = new uint32*[numberOfOutputSignals]; + uint32 i; + for (i = 0u; i < expectedValuesCount; i++) { + inputSignals[i] = GetInputSignalMemory(i); + } + for (; i < numberOfInputSignals; i++) { + defaultValues[i - expectedValuesCount] = reinterpret_cast(GetInputSignalMemory(i)); + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Number of input signals shall be equal to number " + "of expected values plus number of output signals."); + } + if (ok) { + inputSignalTypes = new TypeDescriptor[expectedValuesCount]; + uint32 i; + for (i = 0u; (i < expectedValuesCount) && (ok); i++) { + inputSignalTypes[i] = GetSignalType(InputSignals, i); + ok = ((inputSignalTypes[i] == UnsignedInteger32Bit) || (inputSignalTypes[i] == UnsignedInteger16Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, i, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint16", signalName.Buffer()); + } + } + } + if (ok) { + ok = numberOfOutputSignals == valuesCount; + if (ok) { + ok = numberOfOutputSignals > 0u; + if (ok) { + outputSignals = new uint32*[numberOfOutputSignals]; + uint32 i; + for (i = 0u; i < numberOfOutputSignals; i++) { + outputSignals[i] = reinterpret_cast(GetOutputSignalMemory(i)); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one output signal shall be defined"); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Number of output signals shall be the same as " + "number of provided values."); + } + } + + return ok; +} + +bool JAConditionalSignalUpdateGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + needsReset = false; + return true; +} + +bool JAConditionalSignalUpdateGAM::Execute() { + if (!needsReset) { + bool eventDetected = expectedValuesCount == 0; + if (!eventDetected) { + if (operation == Or) { + MARTe::uint32 j; + for (j = 0; (j < expectedValuesCount) && (!eventDetected); j++) { + eventDetected = Compare(j); + } + } + else if (operation == Nor) { + MARTe::uint32 j; + for (j = 0; (j < expectedValuesCount) && (!eventDetected); j++) { + eventDetected = Compare(j); + } + eventDetected = !eventDetected; + } + else if (operation == And) { + MARTe::uint32 j; + eventDetected = Compare(0); + for (j = 1; (j < expectedValuesCount); j++) { + eventDetected &= Compare(j); + } + } + else if (operation == Xor) { + MARTe::uint32 j; + MARTe::uint32 eventDetectedUint32; + if (inputSignalTypes[0] == MARTe::UnsignedInteger32Bit) { + eventDetectedUint32 = *static_cast(inputSignals[0]); + } + else { + eventDetectedUint32 = *static_cast(inputSignals[0]); + } + for (j = 1; (j < expectedValuesCount); j++) { + eventDetectedUint32 ^= Compare(j); + } + eventDetected = (eventDetectedUint32 == 1u); + } + } + if (eventDetected) { + needsReset = true; + MARTe::uint32 i; + for (i = 0u; i < numberOfOutputSignals; ++i) { + *outputSignals[i] = values[i]; + MARTe::StreamString signalName; + (void) GetSignalName(MARTe::OutputSignals, i, signalName); + } + } + else { + MARTe::uint32 i; + for (i = 0u; i < numberOfOutputSignals; ++i) { + *outputSignals[i] = *defaultValues[i]; + } + } + } + return true; +} + +bool JAConditionalSignalUpdateGAM::Compare(MARTe::uint32 index) { + if (inputSignalTypes[index] == MARTe::UnsignedInteger32Bit) { + return Compare(index); + } + return Compare(index); +} + +CLASS_REGISTER(JAConditionalSignalUpdateGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.h b/EC-GN-JA-PCF/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.h new file mode 100644 index 0000000..2cf5c5d --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.h @@ -0,0 +1,180 @@ +/** + * @file JAConditionalSignalUpdateGAM.h + * @brief Header file for class JAConditionalSignalUpdateGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAConditionalSignalUpdateGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JACONDITIONALSIGNALUPDATEGAM_H_ +#define GAMS_JACONDITIONALSIGNALUPDATEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that writes predefined values to output signals when a condition is met. + * If there are no conditional signals provided, the condition is presumed to be met. + * + * +ASYNCShotlengthControlGAM = { + * Class = JAConditionalSignalUpdateGAM + * Operation = OR // Logical operation performed between conditional signals + * // Supported values: AND, OR, XOR, NOR + * // Default: AND + * ExpectedValues = {1 1} // Values to which conditional signals will be compared. + * Comparators = {EQUALS EQUALS} // Operator between conditional signal an expected value + * // Supported values: EQUALS, NOT, GREATER, EQUALS_OR_GREATER, LESS, EQUALS_OR_LESS + * // Default: EQUALS + * Values = {0 3} // Values that will be written to output signals when condition is met. + * InputSignals = { + * // Conditional Signals + * SHOTLEN_FLAG = { + * DataSource = DDB1 + * Type = uint32 + * } + * MODE_SHOTLEN_FLAG = { + * DataSource = DDB1 + * Type = uint32 + * } + * // Default values (set to output signals before the condition is met) + * APS_SWON = { // APS_SWON will keep the value from previous state. + * DataSource = DDB1 + * Type = uint32 + * } + * BPS_SWON_DEFAULT = { // BPS_SWON will be set to 7 before condition is met. + * DataSource = DDB1 + * Type = uint32 + * Default = 7 + * } + * } + * OutputSignals = { + * APS_SWON = { + * DataSource = DDB1 + * Type = uint32 + * } + * BPS_SWON = { + * DataSource = DDB1 + * Type = uint32 + * } + * } + * } + */ +class JAConditionalSignalUpdateGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAConditionalSignalUpdateGAM(); + + virtual ~JAConditionalSignalUpdateGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + /** + * @brief Does the input signal at provided index have the expected value. + * @param[in] index of the signal. + * @return true if the signal has expected value. + */ + bool Compare(MARTe::uint32 index); + + template + bool Compare(MARTe::uint32 index); + + enum OperationMode { + And, Or, Xor, Nor + }; + + enum ComparisonMode { + Equals, Not, Greater, EqualsOrGreater, Less, EqualsOrLess + }; + + // Input signals + void **inputSignals; + + MARTe::TypeDescriptor *inputSignalTypes; + + // Condition operation. + OperationMode operation; + + // Array of expected values of input signals. + MARTe::uint32* expectedValues; + + // Expected values count (must be equal to numberOfInputSignals) + MARTe::uint32 expectedValuesCount; + + // Array of comparators + ComparisonMode* comparators; + + // Values to be written on output signals when input signal has the expected value. + MARTe::uint32 *values; + + // Number of values (must be equal to numberOfOutputSignals) + MARTe::uint32 valuesCount; + + // Output signals + MARTe::uint32 **outputSignals; + + // Default values of output signals + MARTe::uint32 **defaultValues; + + // Were output signals already set and we are waiting for a state change before they are set again. + bool needsReset; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +template +bool JAConditionalSignalUpdateGAM::Compare(MARTe::uint32 index) { + switch (comparators[index]) { + case Equals: + return *static_cast(inputSignals[index]) == static_cast(expectedValues[index]); + case Not: + return *static_cast(inputSignals[index]) != static_cast(expectedValues[index]); + case Greater: + return *static_cast(inputSignals[index]) > static_cast(expectedValues[index]); + case EqualsOrGreater: + return *static_cast(inputSignals[index]) >= static_cast(expectedValues[index]); + case Less: + return *static_cast(inputSignals[index]) < static_cast(expectedValues[index]); + default: // case EqualsOrLess: + return *static_cast(inputSignals[index]) <= static_cast(expectedValues[index]); + } +} + +#endif /* GAMS_JACONDITIONALSIGNALUPDATEGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/Makefile.inc new file mode 100644 index 0000000..5853027 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JAConditionalSignalUpdateGAM/Makefile.inc @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAConditionalSignalUpdateGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAConditionalSignalUpdateGAM$(LIBEXT) \ + $(BUILD_DIR)/JAConditionalSignalUpdateGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JAMessageGAM/JAMessageGAM.cpp b/EC-GN-JA-PCF/src/main/c++/GAMs/JAMessageGAM/JAMessageGAM.cpp new file mode 100644 index 0000000..50ca308 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JAMessageGAM/JAMessageGAM.cpp @@ -0,0 +1,347 @@ +/** + * @file JAMessageGAM.cpp + * @brief Source file for class JAMessageGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAMessageGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "JAMessageGAM.h" +#include "MessageI.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +template +bool Compare(JAMessageGAM::ComparisonMode comparator, void *inputSignal, U expectedValue) { + switch (comparator) { + case JAMessageGAM::Equals: + return *static_cast(inputSignal) == expectedValue; + case JAMessageGAM::Not: + return *static_cast(inputSignal) != expectedValue; + case JAMessageGAM::Greater: + return *static_cast(inputSignal) > expectedValue; + case JAMessageGAM::EqualsOrGreater: + return *static_cast(inputSignal) >= expectedValue; + case JAMessageGAM::Less: + return *static_cast(inputSignal) < expectedValue; + default: // case EqualsOrLess: + return *static_cast(inputSignal) <= expectedValue; + } +} + +JAMessageGAM::JAMessageGAM() { + inputSignals = NULL_PTR(void **); + inputSignalTypes = NULL_PTR(MARTe::TypeDescriptor *); + operation = And; + needsReset = false; + expectedValuesInt = NULL_PTR(MARTe::uint64 *); + expectedValuesFloat = NULL_PTR(MARTe::float64 *); + intValuesCount = 0u; + floatValuesCount = 0u; + comparators = NULL_PTR(ComparisonMode *); +} + +JAMessageGAM::~JAMessageGAM() { + if (inputSignals != NULL_PTR(void **)) { + delete[] inputSignals; + } + if (inputSignalTypes != NULL_PTR(MARTe::TypeDescriptor *)) { + delete[] inputSignalTypes; + } + if (expectedValuesInt != NULL_PTR(MARTe::uint64 *)) { + delete[] expectedValuesInt; + } + if (expectedValuesFloat != NULL_PTR(MARTe::float64 *)) { + delete[] expectedValuesFloat; + } + if (comparators != NULL_PTR(ComparisonMode *)) { + delete[] comparators; + } +} + +bool JAMessageGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + // Read expected integer values. + AnyType valuesArray = data.GetType("ExpectedIntValues"); + bool intValuesProvided = (valuesArray.GetDataPointer() != NULL); + + if (intValuesProvided) { + intValuesCount = valuesArray.GetNumberOfElements(0u); + } + if (intValuesProvided) { + expectedValuesInt = new uint64[intValuesCount]; + + Vector valuesVector(expectedValuesInt, intValuesCount); + ok = (data.Read("ExpectedIntValues", valuesVector)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Failed to read ExpectedIntValues."); + return ok; + } + } + // Read expected float values. + valuesArray = data.GetType("ExpectedFloatValues"); + bool floatValuesProvided = (valuesArray.GetDataPointer() != NULL); + + if (floatValuesProvided) { + floatValuesCount = valuesArray.GetNumberOfElements(0u); + } + if (floatValuesProvided) { + expectedValuesFloat = new float64[floatValuesCount]; + + Vector valuesVector(expectedValuesFloat, floatValuesCount); + ok = (data.Read("ExpectedFloatValues", valuesVector)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Failed to read ExpectedFloatValues."); + return ok; + } + } + + ok = (floatValuesCount + intValuesCount) > 0u; + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "ExpectedFloatValues and or ExpectedIntValues shall be defined."); + } + } + if (ok) { + // Read comparators. + AnyType comparatorsArray = data.GetType("Comparators"); + if (comparatorsArray.GetDataPointer() != NULL) { + uint32 count = comparatorsArray.GetNumberOfElements(0u); + ok = count == (intValuesCount + floatValuesCount); + if (ok) { + comparators = new ComparisonMode[count]; + StreamString* comp = new StreamString[count]; + Vector compVector(comp, count); + + ok = (data.Read("Comparators", compVector)); + + if (ok) { + for (uint32 i = 0; i < count; ++i) { + if (comp[i] == "EQUALS") { + comparators[i] = Equals; + } else if (comp[i] == "NOT") { + comparators[i] = Not; + } else if (comp[i] == "GREATER") { + comparators[i] = Greater; + } else if (comp[i] == "EQUALS_OR_GREATER") { + comparators[i] = EqualsOrGreater; + } else if (comp[i] == "LESS") { + comparators[i] = Less; + } else if (comp[i] == "EQUALS_OR_LESS") { + comparators[i] = EqualsOrLess; + } else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Comparator %s is not defined.", comp[i].Buffer()); + } + } + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Expected values and operators shall have the same " + "number of elements."); + } + } else { + uint32 count = intValuesCount + floatValuesCount; + if (ok) { + // Create default comparators (equals) when they aren't provided in the configuration. + comparators = new ComparisonMode[count]; + for (uint32 i = 0; i < count; ++i) { + comparators[i] = Equals; + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Expected values and operators shall have the same " + "number of elements."); + } + } + } + if (ok) { + MARTe::StreamString operationStr; + if (data.Read("Operation", operationStr)) { + if (operationStr == "AND") { + operation = And; + } + else if (operationStr == "OR") { + operation = Or; + } + else if (operationStr == "NOR") { + operation = Nor; + } + else if (operationStr == "XOR") { + operation = Xor; + } + else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Operation %s is not defined", operationStr.Buffer()); + } + } + } + if (ok) { + ok = (Size() == 1); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "A Message object shall be added to this container"); + } + } + if (ok) { + eventMsg = Get(0); + ok = (eventMsg.IsValid()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "A valid Message shall be added to this container"); + } + } + return ok; +} + +bool JAMessageGAM::Setup() { + using namespace MARTe; + bool ok = numberOfInputSignals == (intValuesCount + floatValuesCount); + if (ok) { + ok = numberOfInputSignals > 0u; + if (ok) { + inputSignals = new void*[numberOfInputSignals]; + uint32 i; + for (i = 0u; i < numberOfInputSignals; i++) { + inputSignals[i] = GetInputSignalMemory(i); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one input signal shall be defined"); + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Number of input signals shall be the same as " + "number of expected values."); + } + if (ok) { + inputSignalTypes = new TypeDescriptor[numberOfInputSignals]; + uint32 i; + for (i = 0u; (i < numberOfInputSignals) && (ok); i++) { + TypeDescriptor inputType = GetSignalType(InputSignals, i); + inputSignalTypes[i] = inputType; + ok = (inputType == UnsignedInteger32Bit) || (inputType == SignedInteger32Bit) || + (inputType == UnsignedInteger16Bit) || (inputType == SignedInteger16Bit) || + (inputType == UnsignedInteger8Bit) || (inputType == SignedInteger8Bit) || + (inputType == Float64Bit) || (inputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, i, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "Signal %s shall be defined as 32/16/8 bit signed/unsigned integer " + "or as 64/32 float.", signalName.Buffer()); + } + } + } + + return ok; +} + +bool JAMessageGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + needsReset = false; + return true; +} + +bool JAMessageGAM::Execute() { + using namespace MARTe; + bool ok = true; + bool eventDetected = false; + uint32 inputPortIndex = 0; + uint32 intIndex = 0; + uint32 floatIndex = 0; + if (operation == Or) { + for (inputPortIndex = 0; (inputPortIndex < numberOfInputSignals) && (!eventDetected); inputPortIndex++) { + eventDetected = Compare(inputPortIndex, floatIndex, intIndex); + } + } + else if (operation == Nor) { + for (inputPortIndex = 0; (inputPortIndex < numberOfInputSignals) && (!eventDetected); inputPortIndex++) { + eventDetected = Compare(inputPortIndex, floatIndex, intIndex); + } + eventDetected = !eventDetected; + } + else if (operation == And) { + eventDetected = Compare(0, floatIndex, intIndex); + for (inputPortIndex = 1; (inputPortIndex < numberOfInputSignals); inputPortIndex++) { + eventDetected &= Compare(inputPortIndex, floatIndex, intIndex); + } + } + else if (operation == Xor) { + uint32 eventDetectedUInt32 = Compare(inputPortIndex, floatIndex, intIndex); + for (inputPortIndex = 1; (inputPortIndex < numberOfInputSignals); inputPortIndex++) { + eventDetectedUInt32 ^= Compare(inputPortIndex, floatIndex, intIndex); + } + eventDetected = (eventDetectedUInt32 == 1u); + } + if (eventDetected) { + if (!needsReset) { + ok = (MessageI::SendMessage(eventMsg, this) == ErrorManagement::NoError); + needsReset = true; + } + } + return ok; +} + +bool JAMessageGAM::Compare(MARTe::uint32 inputPortIndex, MARTe::uint32 &floatValueIndex, MARTe::uint32 &intValueIndex) { + using namespace MARTe; + bool ret = false; + if (inputSignalTypes[inputPortIndex] == UnsignedInteger32Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == SignedInteger32Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == UnsignedInteger16Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == SignedInteger16Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == UnsignedInteger8Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == SignedInteger8Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == Float64Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesFloat[floatValueIndex]); + ++floatValueIndex; + } + else { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesFloat[floatValueIndex]); + ++floatValueIndex; + } + return ret; +} + +CLASS_REGISTER(JAMessageGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JAMessageGAM/JAMessageGAM.h b/EC-GN-JA-PCF/src/main/c++/GAMs/JAMessageGAM/JAMessageGAM.h new file mode 100644 index 0000000..0cdb315 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JAMessageGAM/JAMessageGAM.h @@ -0,0 +1,149 @@ +/** + * @file JAMessageGAM.h + * @brief Header file for class JAMessageGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAMessageGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAMESSAGEGAM_H_ +#define GAMS_JAMESSAGEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include "Message.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that sends a message when input signals have expected values. Message will not be sent multiple + * times without first changing the application state. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ * +MessageGAM = {
+ *      Class = JAMessageGAM
+ *      Operation = AND // Accepted values are: AND, OR, XOR, NOR. Default value is AND.
+ *      ExpectedIntValues = {1 10} // Expected values for input signals of integral type.
+ *      ExpectedFloatValues = {3.5} // Expected values for float signals of floting point type.
+ *      Comparators = {EQUALS GREATER NOT} // Accepted values are: EQUALS, NOT, GREATER, EQUALS_OR_GREATER, LESS, EQUALS_OR_LESS
+ *                                         // Comparators element is optional. Default comparator is EQUALS.
+ *      InputSignals = {
+ *          Sig1 = {
+ *              DataSource = EPICSCAInput
+ *              Type = uint32
+ *          }
+ *          Sig2 = {
+ *              DataSource = EPICSCAInput
+ *              Type = float32
+ *          }
+ *          Sig3 = {
+ *              DataSource = EPICSCAInput
+ *              Type = uint32
+ *          }
+ *      }
+ *      +Event = { // Message to be sent when condition is true.
+ *          Class = Message
+ *          Destination = StateMachine
+ *          Function = GoDisabled
+ *      }
+ *  }
+ * 
+ * This example will send Event message when Sig1 == 1 && Sig2 > 3.5 && Sig3 != 10 + */ +class JAMessageGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAMessageGAM(); + + virtual ~JAMessageGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + + enum ComparisonMode { + Equals, Not, Greater, EqualsOrGreater, Less, EqualsOrLess + }; + +private: + /** + * @brief Does the input signal at provided index have the expected value. + * @param[in] index of the signal. + * @param[out] floatValueIndex lookup index for expected float values array. + * @param[out] intValueIndex lookup index for expected integer values array. + * @return true if the signal has expected value. + */ + bool Compare(MARTe::uint32 index, MARTe::uint32 &floatValueIndex, MARTe::uint32 &intValueIndex); + + enum OperationMode { + And, Or, Xor, Nor + }; + + // Input signals + void **inputSignals; + + MARTe::TypeDescriptor *inputSignalTypes; + + // Condition operation. + OperationMode operation; + + // Message to be sent when conditions are met. + MARTe::ReferenceT eventMsg; + + // Was the message already sent and we are waiting for a state change before next message can be sent. + bool needsReset; + + // Array of expected integer values of input signals. + MARTe::uint64* expectedValuesInt; + + // Array of expected float values for input signals. + MARTe::float64* expectedValuesFloat; + + // Expected integer values count (must be equal to numberOfInputSignals - floatValuesCount) + MARTe::uint32 intValuesCount; + + // Expected integer values count (must be equal to numberOfInputSignals - floatValuesCount) + MARTe::uint32 floatValuesCount; + + // Array of comparators + ComparisonMode* comparators; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAMESSAGEGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JAMessageGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/c++/GAMs/JAMessageGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JAMessageGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JAMessageGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/c++/GAMs/JAMessageGAM/Makefile.inc new file mode 100644 index 0000000..e2e2415 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JAMessageGAM/Makefile.inc @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAMessageGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAMessageGAM$(LIBEXT) \ + $(BUILD_DIR)/JAMessageGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JAModeControlGAM/JAModeControlGAM.cpp b/EC-GN-JA-PCF/src/main/c++/GAMs/JAModeControlGAM/JAModeControlGAM.cpp new file mode 100644 index 0000000..c55e6d0 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JAModeControlGAM/JAModeControlGAM.cpp @@ -0,0 +1,154 @@ +/** + * @file JAModeControlGAM.cpp + * @brief Source file for class JAModeControlGAM + * @date Jan, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAModeControlGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAModeControlGAM.h" +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAModeControlGAM::JAModeControlGAM() { + inputSignals = NULL_PTR(MARTe::uint32 **); + outputSignal = NULL_PTR(MARTe::uint32 *); + pulseLengthLimit = 360000000u; + resetRemainingTime = true; + previousState = 0u; +} + +JAModeControlGAM::~JAModeControlGAM() { + if (inputSignals != NULL_PTR(MARTe::uint32 **)) { + delete[] inputSignals; + } +} + +bool JAModeControlGAM::Initialise(MARTe::StructuredDataI & data) { + /* read hard coded on cfg file parameter values by using key name. */ + using namespace MARTe; + return GAM::Initialise(data); +} + +bool JAModeControlGAM::Setup() { + /* read GAM Input signal */ + using namespace MARTe; + /* read 4 mode bits and 4 shot length limit values */ + + bool ok = numberOfInputSignals == 11; + if (ok) { + uint32 i; + for (i = 0u; (i < numberOfInputSignals) && (ok); i++) { + TypeDescriptor inputType = GetSignalType(InputSignals, i); + ok = inputType == UnsignedInteger32Bit; + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, i, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "InputSignel %s shall be defined as uint32", signalName.Buffer()); + } + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Eleven input signals shall be defined."); + } + if (ok) { + ok = numberOfOutputSignals == 1; + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "One output signal shall be defined."); + } + else { + TypeDescriptor type = GetSignalType(OutputSignals, 0); + ok = type == UnsignedInteger32Bit; + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, 0, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + inputSignals = new uint32*[numberOfInputSignals]; + uint32 i; + for (i = 0u; i < 11; i++) { + inputSignals[i] = reinterpret_cast(GetInputSignalMemory(i)); + } + } + return ok; +} + +bool JAModeControlGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + *outputSignal = 0u; + previousState = 0u; + resetRemainingTime = true; + return true; +} + +bool JAModeControlGAM::Execute() { + using namespace MARTe; + //When RT state goes to RFON state, update the limit. + if(previousState == 0u && *inputSignals[8] == 1u && resetRemainingTime) { + rfonTime = *inputSignals[9]; + resetRemainingTime = false; + pulseLengthLimit = CalcPulseLengthLimit(inputSignals); + REPORT_ERROR(ErrorManagement::Debug, "Pulse Length was set to Limit:%d", pulseLengthLimit); + } + // Turn on the flag during RFON if the pulse legth over the limit. + if ((*inputSignals[9] - rfonTime <= pulseLengthLimit) && (previousState == 1u)) { + *outputSignal = 0u; + return true; + } else if(*inputSignals[9] == 1u){ + resetRemainingTime = true; + *outputSignal = 1u; + } + + previousState = *inputSignals[8]; + return true; +} + + +MARTe::uint32 JAModeControlGAM::CalcPulseLengthLimit(MARTe::uint32 **inputSignals) { + if (*inputSignals[0] == 1) { + return *inputSignals[1]; + } else if (*inputSignals[2] == 1) { + return *inputSignals[3]; + } else if (*inputSignals[4] == 1) { + return *inputSignals[5]; + } else if (*inputSignals[6] == 1) { + return *inputSignals[7]; + } else { + return 3600000000;//us + } +} + + +CLASS_REGISTER(JAModeControlGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JAModeControlGAM/JAModeControlGAM.h b/EC-GN-JA-PCF/src/main/c++/GAMs/JAModeControlGAM/JAModeControlGAM.h new file mode 100644 index 0000000..e9041ce --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JAModeControlGAM/JAModeControlGAM.h @@ -0,0 +1,149 @@ +/** + * @file JAModeControlGAM.h + * @brief Header file for class JAModeControlGAM + * @date Jan, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAModeControlGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAMODECONTROLGAM_H_ +#define GAMS_JAMODECONTROLGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that check the pulse lenght limit. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +ModeLimitGAM = {
+ *           Class = JAModeControlGAM
+ *           InputSignals = {
+ *               PLC_MODE1 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD1_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               PLC_MODE2 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD2_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               PLC_MODE3 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD3_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               PLC_MODE4 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD4_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               HVInjection = {
+ *               	DataSource = RealTimeThreadAsyncBridge
+ *               	Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * If MODE1 is ON and Time is exceed MD1_SHOTLEN_LIM, MODE_SHOTLEN_FLAG become ON. + */ + +class JAModeControlGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAModeControlGAM(); + + virtual ~JAModeControlGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + + MARTe::uint32 CalcPulseLengthLimit(MARTe::uint32 **inputSignals); + + // Input signals + MARTe::uint32 **inputSignals; + + // Output signals + MARTe::uint32 *outputSignal; + + // Calculated pulse lenght limit. + MARTe::uint32 pulseLengthLimit; + + // Amount of time passed per execution cycle. + MARTe::uint32 rfonTime; + + // reset flag + bool resetRemainingTime; + MARTe::uint32 previousState; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAMODECONTROLGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JAModeControlGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/c++/GAMs/JAModeControlGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JAModeControlGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JAModeControlGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/c++/GAMs/JAModeControlGAM/Makefile.inc new file mode 100644 index 0000000..2654a66 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JAModeControlGAM/Makefile.inc @@ -0,0 +1,52 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAModeControlGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAModeControlGAM$(LIBEXT) \ + $(BUILD_DIR)/JAModeControlGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.cpp b/EC-GN-JA-PCF/src/main/c++/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.cpp new file mode 100644 index 0000000..06de1df --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.cpp @@ -0,0 +1,460 @@ +/** + * @file JAPreProgrammedGAM.cpp + * @brief Source file for class JAPreProgrammedGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAPreProgrammedGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "CLASSMETHODREGISTER.h" +#include "File.h" +#include "JAPreProgrammedGAM.h" +#include "MessageI.h" +#include "RegisteredMethodsMessageFilter.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +// How often output signals are updated. +const MARTe::uint32 cycleMs = 10u; + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAPreProgrammedGAM::JAPreProgrammedGAM() : + GAM() { + using namespace MARTe; + filenameSignalIndex = 0u; + timeSignal = NULL_PTR(MARTe::int32 *); + loadTriggerSignal = NULL_PTR(MARTe::uint32 *); + fhpsrefSignal = NULL_PTR(MARTe::float32 *); + rfonStateSignal = NULL_PTR(MARTe::uint32 *); + + valueSignals = NULL_PTR(MARTe::float32 **); + preProgrammedValues = NULL_PTR(MARTe::float32 **); + preProgrammedTime = NULL_PTR(MARTe::int32 *); + fileLoadedSignal = NULL_PTR(MARTe::uint32 *); + fileLoadErrorOutput = NULL_PTR(MARTe::uint32 *); + + startTime = 0u; + numberOfPreProgrammedValues = 0u; + numberOfPreProgrammedTimeRows = 0u; + currentRow = 0u; + mode = None; + preProgrammedExecutaionPeriodMs = 0u; + msCounter = 0u; + preProgrammedRow = 0u; + resetOutputSignals = false; + readOnce = true; +} + +JAPreProgrammedGAM::~JAPreProgrammedGAM() { + DeleteArrays(); + if (valueSignals != NULL_PTR(MARTe::float32 **)) { + delete[] valueSignals; + } +} + +bool JAPreProgrammedGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("Directory", directory); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Directory shall be specified"); + } + } + if (ok) { + ok = data.Read("PreProgrammedPeriodMs", preProgrammedExecutaionPeriodMs); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Directory shall be specified"); + } + } + return ok; +} + +bool JAPreProgrammedGAM::Setup() { + using namespace MARTe; + //Signal number check. + bool ok = (numberOfInputSignals == 4u); + if (ok) { + ok = (numberOfOutputSignals > 2u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "At least two output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Four input signals with the filename and file load trigger shall be defined"); + } + //Input signals type consistency check. + if (ok) { + StreamString signalName = "Filename"; + ok = GetSignalIndex(InputSignals, filenameSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Filename input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, filenameSignalIndex); + ok = (inputType == CharString); + if (!ok) { + ok = (inputType == Character8Bit); + } + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, filenameSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as string", signalName.Buffer()); + } + } + } + if (ok) { + StreamString signalName = "CSV_LOAD"; + uint32 loadSignalIndex; + ok = GetSignalIndex(InputSignals, loadSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "CSV_LOAD input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, loadSignalIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, loadSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } else { + loadTriggerSignal = reinterpret_cast(GetInputSignalMemory(loadSignalIndex)); + } + } + } + if (ok) { + StreamString signalName = "FHPS_REF"; + uint32 fhpsrefIndex; + ok = GetSignalIndex(InputSignals, fhpsrefIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "FHPS_REF input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, fhpsrefIndex); + ok = (inputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, fhpsrefIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } else { + fhpsrefSignal = reinterpret_cast(GetInputSignalMemory(fhpsrefIndex)); + } + } + } + if (ok) { + StreamString signalName = "RFON"; + uint32 rfonIndex; + ok = GetSignalIndex(InputSignals, rfonIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "RFON input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, rfonIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, rfonIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } else { + rfonStateSignal = reinterpret_cast(GetInputSignalMemory(rfonIndex)); + } + } + } + + //Output signals type check. + if (ok) { + TypeDescriptor timeType = GetSignalType(OutputSignals, 0); + ok = (timeType == SignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, 0, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as int32", signalName.Buffer()); + } + + uint32 i; + for (i = 1u; (i <= 6) && (ok); i++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, i); + ok = (outputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, i, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } + } + + if (ok) { + TypeDescriptor fileLoadedType = GetSignalType(OutputSignals, 7u); + ok = (fileLoadedType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, 6u, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + if (ok) { + TypeDescriptor fileLoadErrorOutputType = GetSignalType(OutputSignals, 8u); + ok = (fileLoadErrorOutputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, 7u, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + + //Register signal memory + if (ok) { + timeSignal = reinterpret_cast(GetOutputSignalMemory(0)); + valueSignals = new float32*[6u]; + uint32 i; + for (i = 1u; i <= 6u; i++) { + valueSignals[i - 1] = reinterpret_cast(GetOutputSignalMemory(i)); + } + fileLoadedSignal = reinterpret_cast(GetOutputSignalMemory(7u)); + fileLoadErrorOutput = reinterpret_cast(GetOutputSignalMemory(8u)); + } + return ok; +} + +bool JAPreProgrammedGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + bool ok = true; + if (strcmp(nextStateName, "WaitReady") == 0) { + mode = LoadFileMode; + resetOutputSignals = true; + // Reset read once flag when reentering WaitReady state. + readOnce = true; + } else if (strcmp(nextStateName, "WaitPermit") == 0) { + mode = LoadFileMode; + resetOutputSignals = true; + currentRow = 0u; + } else if (strcmp(nextStateName, "WaitHVON_PREP") == 0 || strcmp(nextStateName, "WaitHVON_SDN_PREP") == 0) { + ok = numberOfPreProgrammedTimeRows > 0; + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::IllegalOperation, "Entering PreProgrammed mode without any waveform data."); + } + mode = PreProgrammedMode; + msCounter = cycleMs; + currentRow = 0u; + } else { + mode = None; + } + return ok; +} + +bool JAPreProgrammedGAM::LoadFile() { + using namespace MARTe; + + DeleteArrays(); + + bool ok = true; + + const MARTe::char8 * const filenameSignal = reinterpret_cast(GetInputSignalMemory(filenameSignalIndex)); + //Prepare full path to the configuration file. + StreamString filename = directory; + filename += DIRECTORY_SEPARATOR; + filename += filenameSignal; + REPORT_ERROR(MARTe::ErrorManagement::Debug, "Opening file %s", filename.Buffer()); + + //parse prepro configuration file into two arrays(time, values). + File f; + ok = f.Open(filename.Buffer(), BasicFile::ACCESS_MODE_R); + if (ok) { + //Count up number of file Rows. + numberOfPreProgrammedTimeRows = 0u; + StreamString tokenLine; + while (f.GetLine(tokenLine)) { + if (tokenLine[0] != '#' && tokenLine[0] != '-') { + numberOfPreProgrammedTimeRows++; + } + tokenLine = ""; + } + //Count up number of file lines + numberOfPreProgrammedValues = 0u; + f.Seek(0); + uint32 t = 0u; + tokenLine = ""; + while ((ok) && (f.GetLine(tokenLine))) { + // Skip comment line and minus time + if (tokenLine[0] == '#' || tokenLine[0] == '-') { + tokenLine = ""; + continue; + } + // Prepare two arrays at first. + if (numberOfPreProgrammedValues == 0) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + while (tokenLine.GetToken(token, ",", ignored)) { + numberOfPreProgrammedValues++; + token = ""; + } +REPORT_ERROR(MARTe::ErrorManagement::ParametersError,"numberOfPreProgrammedVal %d", numberOfPreProgrammedValues); + ok = (numberOfPreProgrammedValues == 7u);//From time row to FHPS row. + numberOfPreProgrammedValues -= 1u; //From MHVPS row to FHPS row. + if (ok) { + preProgrammedTime = new int32[numberOfPreProgrammedTimeRows]; + preProgrammedValues = new float32*[numberOfPreProgrammedTimeRows]; + uint32 j; + for (j = 0u; j < numberOfPreProgrammedTimeRows; j++) { + preProgrammedValues[j] = new float32[numberOfPreProgrammedValues]; + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, + "Number of columns in csv file (%d) is not consistent with the number of output signals (%d)", + numberOfPreProgrammedValues, 6u); + *fileLoadErrorOutput = 1; + } + } + // Add loaded data into two arrays. + if (ok) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + uint32 idx = 0u; + while (tokenLine.GetToken(token, ",", ignored)) { + if (idx == 0u) { + preProgrammedTime[t] = atoi(token.Buffer()); + if (t == 0 && preProgrammedTime[0] != 0) { + REPORT_ERROR(MARTe::ErrorManagement::Debug, "Prepro start from none zero time."); + } + } + else { + ok = ((idx - 1) < numberOfPreProgrammedValues); + if (ok) { + preProgrammedValues[t][idx - 1] = static_cast(atof(token.Buffer())); + } + else { + REPORT_ERROR(MARTe::ErrorManagement::FatalError, "Number of columns in csv file is not consistent with the number of output signals in line %d", t); + *fileLoadErrorOutput = 1; + } + } + token = ""; + idx++; + } + t++; + } + tokenLine = ""; + } + f.Close(); + } + if (ok) { + currentRow = 0u; + } + else { + numberOfPreProgrammedTimeRows = 0u; + REPORT_ERROR(ErrorManagement::Warning, "Failed to read waveform data from file."); + *fileLoadErrorOutput = 2; + } + return ok; +} + +bool JAPreProgrammedGAM::Execute() { + using namespace MARTe; + bool ok = true; + + switch (mode) { + case LoadFileMode: { + if (*loadTriggerSignal == 1u) { + if (readOnce) { + *fileLoadErrorOutput = 0; + *fileLoadedSignal = LoadFile() ? 1 : 0; + readOnce = false; + } + } else { + // Reset read once flag when loadTriggerSignal is reset. + readOnce = true; + } + + if (resetOutputSignals) { + // Write default values to output signals + *timeSignal = 0u; + *valueSignals[FHPS-1] = *fhpsrefSignal; + resetOutputSignals = false; + } else { + *valueSignals[FHPS-1] = *fhpsrefSignal; //copy input(2) to val_arr(4) + } + } break; + + case PreProgrammedMode: { + ok = numberOfPreProgrammedTimeRows > 0; + + //add 20210105. Before RFON, prepro setpoints should be same as the values listed at csv first line. + if (ok && *rfonStateSignal == 0) { + uint32 j; + for (j = 0u; j < FHPS; j++) { + *valueSignals[j] = preProgrammedValues[0][j]; + } + } + //end 20210105 + + if (ok && currentRow < numberOfPreProgrammedTimeRows && *rfonStateSignal == 1) { + if (msCounter >= cycleMs) { + msCounter -= cycleMs; + int32 currentTime = preProgrammedTime[currentRow]; + //REPORT_ERROR(MARTe::ErrorManagement::Debug, "Write Time at %d",currentRow); + // Write to output signals + *timeSignal = currentTime; + uint32 j; + for (j = 0u; j < FHPS; j++) { + *valueSignals[j] = preProgrammedValues[currentRow][j]; + //REPORT_ERROR(MARTe::ErrorManagement::Debug, "Write Value %f at row %d",preProgrammedValues[currentRow][j], currentRow); + } + //REPORT_ERROR(MARTe::ErrorManagement::Debug, "Writing pre programmed data for time %d", currentTime); + + // Update row + ++currentRow; + } + msCounter += preProgrammedExecutaionPeriodMs; + } + } break; + default: + // Nothing to do. + REPORT_ERROR(MARTe::ErrorManagement::Warning, "Unhandled mode."); + break; + } + return ok; +} + +void JAPreProgrammedGAM::DeleteArrays() { + if (preProgrammedValues != NULL_PTR(MARTe::float32 **)) { + MARTe::uint32 i; + for (i = 0u; i < numberOfPreProgrammedValues; i++) { + delete preProgrammedValues[i]; + } + delete[] preProgrammedValues; + } + if (preProgrammedTime != NULL_PTR(MARTe::int32 *)) { + delete[] preProgrammedTime; + } +} + +CLASS_REGISTER(JAPreProgrammedGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.h b/EC-GN-JA-PCF/src/main/c++/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.h new file mode 100644 index 0000000..4226fef --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.h @@ -0,0 +1,187 @@ +/** + * @file JAPreProgrammedGAM.h + * @brief Header file for class JAPreProgrammedGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAPreProgrammedGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAPREPROGRAMMEDGAM_H_ +#define GAMS_JAPREPROGRAMMEDGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "GAM.h" +#include "Message.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that update PS output value for pre-programmed operation. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +PreProgrammedGAM = {
+ *           Class = JAPreProgrammedGAM
+ *           Directory = "../Configurations" // Directory which has pre-pro configuration file.
+ *           PreProgrammedPeriodMs = 1       // RFON state is executed every millisecond.
+ *           InputSignals = {
+ *               CSV_LOAD = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               Filename = {
+ *                   Alias = CSV_NAME
+ *                   DataSource = EPICSCAInput
+ *               }
+ *               FHPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               GYA_PREHEAT_TIME = {
+ *                   DataSource = DDB1
+ *                   Type = int32
+ *               }
+ *               MHVPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               BPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               APS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               MCPS_TRG_CURR_SET = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               GCPS_TRG_CURR_SET = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               FHPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               CSV_LOADED = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               CSV_ERR = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * + */ + +class JAPreProgrammedGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAPreProgrammedGAM(); + + virtual ~JAPreProgrammedGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + bool LoadFile(); + + void DeleteArrays(); + + //Parameters + MARTe::StreamString directory; //Location for prepro configuration file. + MARTe::uint32 preProgrammedExecutaionPeriodMs; // Time between to execution cycles in milliseconds in pre-programmed mode. + + //Input Signals + MARTe::uint32 *loadTriggerSignal; //index:0 + MARTe::uint32 filenameSignalIndex;//index:1 + MARTe::float32 *fhpsrefSignal; //index:2 + MARTe::uint32 *rfonStateSignal; //index:3 + + //Output Signals + MARTe::int32 *timeSignal; //index:0 + MARTe::float32 **valueSignals; //index:1-5 = BPS,APS,MC,GC,FHPS + MARTe::uint32 *fileLoadedSignal; //index:6 + MARTe::uint32 *fileLoadErrorOutput;//index:7 + + //Internal variables + MARTe::int32 *preProgrammedTime; + MARTe::float32 **preProgrammedValues; + + MARTe::uint32 startTime; + + //Number of columns in csv, EXCLUDING the time + MARTe::uint32 numberOfPreProgrammedValues; //is 5.(BPS, APS, MC, GC, FHPS) + MARTe::uint32 numberOfPreProgrammedTimeRows; //This start from t=0 row. + MARTe::uint32 currentRow; + + // Number of milliseconds since the last time output signals were updated. + MARTe::uint32 msCounter; + + // Row number where the pre-programmed data begins (time == 0). + MARTe::uint32 preProgrammedRow; + + enum OperationMode { + LoadFileMode, PreProgrammedMode, None + }; + enum PreProTableDefinition { + Time, MHVPS, BPS, APS, MCPS, GCPS, FHPS + }; + + OperationMode mode; + + bool resetOutputSignals; + + // Flag determining whether file should be read (so it isn't read multiple time) + bool readOnce; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAPREPROGRAMMEDGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JAPreProgrammedGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/c++/GAMs/JAPreProgrammedGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JAPreProgrammedGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JAPreProgrammedGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/c++/GAMs/JAPreProgrammedGAM/Makefile.inc new file mode 100644 index 0000000..587d4b8 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JAPreProgrammedGAM/Makefile.inc @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAPreProgrammedGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAPreProgrammedGAM$(LIBEXT) \ + $(BUILD_DIR)/JAPreProgrammedGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.cpp b/EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.cpp new file mode 100644 index 0000000..56f9b18 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.cpp @@ -0,0 +1,411 @@ +/** + * @file JARTStateMachineGAM.cpp + * @brief Source file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JARTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +static MARTe::uint64 getCurrentTimeUs() { + using namespace MARTe; + return static_cast(HighResolutionTimer::Counter() * HighResolutionTimer::Period() * 1e6f + 0.5f); +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARTStateMachineGAM::JARTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + turn_off_delay = 2000; //us + + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + short_pulse_mode = NULL_PTR(MARTe::uint32 *); + + modulation = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + + apsSwonHighResolutionTime = 0; + + aps_hvon_state=0; + aps_swon_state=0; + mhvps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; +} + +JARTStateMachineGAM::~JARTStateMachineGAM() { +} + +bool JARTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JARTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JARTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 12u); + if (ok) { + ok = (numberOfOutputSignals == 16u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined %d",numberOfOutputSignals); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(10)); + modulation = reinterpret_cast(GetInputSignalMemory(11)); + + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + + outputAPSHVON = reinterpret_cast(GetOutputSignalMemory(8)); + outputAPSSWON = reinterpret_cast(GetOutputSignalMemory(9)); + outputBPSHVON = reinterpret_cast(GetOutputSignalMemory(10)); + outputBPSSWON = reinterpret_cast(GetOutputSignalMemory(11)); + outputMHVPSON = reinterpret_cast(GetOutputSignalMemory(12)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(13)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(14)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(15)); + + *shotCounter = 0; + } + return ok; +} + +bool JARTStateMachineGAM::Execute() { + using namespace MARTe; + + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + //REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence at %d.", *currentTime); + plcOnTime = *currentTime; //Save pulse start time. + //*outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS; + } + } + else if (currentState == SwitchingHVPS) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; bps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + *outputBPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; aps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal at %d.", *currentTime); + *outputAPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; bps_swon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + *outputBPSSWON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; mhvps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + *outputMHVPSON=1; + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (plcOnTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; aps_swon_state=1; + apsSwonHighResolutionTime = getCurrentTimeUs(); + apsSwonTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + *outputAPSSWON=1; + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 1; + } + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 1; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *outputBeamON = 1; + *shotCounter += 1; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //Action in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + //debug + //if((*stopRequest != 0)){ + //REPORT_ERROR(ErrorManagement::Debug, "Stop request was called.!!!"); + //} else { + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset.!!!"); + //} + *outputSignal -= aps_swon; + mhvps_hvon_is_on = false; mhvps_hvon_state=0; + aps_hvon_is_on = false; aps_hvon_state=0; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; bps_hvon_state=0; + bps_swon_is_on = false; bps_swon_state=0; + currentState = HVTerminate; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + } + uint32 updatePeriod = 100; // in microsecnds (get this from Timer) + if ((*modePulseLengthLimit == 1u) || (getCurrentTimeUs() + updatePeriod >= (apsSwonHighResolutionTime + *triggerDelay_shotlen))) { + + // Now we do busy wait + while (getCurrentTimeUs() < (apsSwonHighResolutionTime + *triggerDelay_shotlen)) { + //REPORT_ERROR(ErrorManagement::Debug, "!"); + } + // We stop busy waiting #executionOverhead before expected pulse off time + //debug + //if((*modePulseLengthLimit == 1u)){ + // REPORT_ERROR(ErrorManagement::Debug, "Mode limit detected.!!!"); + //} else { + // REPORT_ERROR(ErrorManagement::Debug, "Shot length reached to the setpoint.!!!"); + //} + //debug end. + //Do action + *outputSignal -= aps_swon; //Turn off only APS_SWON first. + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; + bps_swon_is_on = false; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + //REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 1; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + //In the HVTerminate state, turn APS_SWON off first, and wait 1ms. Finally turn other PS off. + //Action in this state. + *outputBeamON = 0; + *outputHVArmed = 0; + *outputHVInjection = 0; + *outputRFON = 0; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + mhvps_hvon_state=0; + aps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset. The State was changed to WaitTrigger at %d.", *currentTime); + } + } + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6259 = 1*aps_swon_state; + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + if (modulation) { + p4Value = 8*mhvps_hvon_state + 32; + } + else { + p4Value = 8*mhvps_hvon_state; + } + //*outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + *outputSignalNI6528P4 = ~p4Value; + return true; +} + +CLASS_REGISTER(JARTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.h b/EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.h new file mode 100644 index 0000000..e968f39 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.h @@ -0,0 +1,262 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARTSTATEMACHINEGAM_H_ +#define GAMS_JARTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that provides real-time state machine. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMRealTimeStateMachine = {
+ *           Class = JARTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BEAM_ON_STAT = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JARTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARTStateMachineGAM(); + + virtual ~JARTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS = 1, + RFON = 2, + HVTerminate = 3 + }; + + //The current rtState + JARealTimeState currentState; + + //A given condition + MARTe::uint32 conditionTrigger; + + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + + //Time signal + MARTe::uint32 *currentTime; + + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for short pulse mode. + MARTe::uint32 *short_pulse_mode; + // Input signal for modulation pv. + MARTe::uint32 *modulation; + + // Output signal to which the output value will be written. + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + // Added for HVPS state (20201117) + MARTe::uint32 *outputAPSHVON; + MARTe::uint32 *outputAPSSWON; + MARTe::uint32 *outputBPSHVON; + MARTe::uint32 *outputBPSSWON; + MARTe::uint32 *outputMHVPSON; + + // Output signals for NI devices + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + MARTe::uint64 apsSwonHighResolutionTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + + // terminal values + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.cpp b/EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.cpp new file mode 100644 index 0000000..55983f1 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.cpp @@ -0,0 +1,409 @@ +/** + * @file JARTStateMachineGAM.cpp + * @brief Source file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JARTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +static MARTe::uint64 getCurrentTimeUs() { + using namespace MARTe; + return static_cast(HighResolutionTimer::Counter() * HighResolutionTimer::Period() * 1e6f + 0.5f); +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARTStateMachineGAM::JARTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + turn_off_delay = 2000; //us + + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + short_pulse_mode = NULL_PTR(MARTe::uint32 *); + + modulation = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + + apsSwonHighResolutionTime = 0; + + aps_hvon_state=0; + aps_swon_state=0; + mhvps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; +} + +JARTStateMachineGAM::~JARTStateMachineGAM() { +} + +bool JARTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JARTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JARTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 13u); + if (ok) { + ok = (numberOfOutputSignals == 16u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined %d",numberOfOutputSignals); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(10)); + modulation = reinterpret_cast(GetInputSignalMemory(11)); + pauseSet = reinterpret_cast(GetInputSignalMemory(12)); + + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + + outputAPSHVON = reinterpret_cast(GetOutputSignalMemory(8)); + outputAPSSWON = reinterpret_cast(GetOutputSignalMemory(9)); + outputBPSHVON = reinterpret_cast(GetOutputSignalMemory(10)); + outputBPSSWON = reinterpret_cast(GetOutputSignalMemory(11)); + outputMHVPSON = reinterpret_cast(GetOutputSignalMemory(12)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(13)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(14)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(15)); + + *shotCounter = 0; + } + return ok; +} + +bool JARTStateMachineGAM::Execute() { + using namespace MARTe; + + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + //REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence at %d.", *currentTime); + plcOnTime = *currentTime; //Save pulse start time. + //*outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS; + } + } + else if (currentState == SwitchingHVPS) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; bps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + *outputBPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; aps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal at %d.", *currentTime); + *outputAPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; bps_swon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + *outputBPSSWON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; mhvps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + *outputMHVPSON=1; + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (plcOnTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; aps_swon_state=1; + apsSwonHighResolutionTime = getCurrentTimeUs(); + apsSwonTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + *outputAPSSWON=1; + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 1; + } + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 1; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *outputBeamON = 1; + *shotCounter += 1; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //Action in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + //debug + //if((*stopRequest != 0)){ + //REPORT_ERROR(ErrorManagement::Debug, "Stop request was called.!!!"); + //} else { + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset.!!!"); + //} + *outputSignal -= aps_swon; + mhvps_hvon_is_on = false; mhvps_hvon_state=0; + aps_hvon_is_on = false; aps_hvon_state=0; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; bps_hvon_state=0; + bps_swon_is_on = false; bps_swon_state=0; + currentState = HVTerminate; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + } + uint32 updatePeriod = 100; // in microsecnds (get this from Timer) + if ((*modePulseLengthLimit == 1u) || (getCurrentTimeUs() + updatePeriod >= (apsSwonHighResolutionTime + *triggerDelay_shotlen))) { + + // Now we do busy wait + while (getCurrentTimeUs() < (apsSwonHighResolutionTime + *triggerDelay_shotlen)) { + //REPORT_ERROR(ErrorManagement::Debug, "!"); + } + // We stop busy waiting #executionOverhead before expected pulse off time + //debug + //if((*modePulseLengthLimit == 1u)){ + // REPORT_ERROR(ErrorManagement::Debug, "Mode limit detected.!!!"); + //} else { + // REPORT_ERROR(ErrorManagement::Debug, "Shot length reached to the setpoint.!!!"); + //} + //debug end. + //Do action + *outputSignal -= aps_swon; //Turn off only APS_SWON first. + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; + bps_swon_is_on = false; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + //REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 1; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + //In the HVTerminate state, turn APS_SWON off first, and wait 1ms. Finally turn other PS off. + //Action in this state. + *outputBeamON = 0; + *outputHVArmed = 0; + *outputHVInjection = 0; + *outputRFON = 0; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + mhvps_hvon_state=0; + aps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset. The State was changed to WaitTrigger at %d.", *currentTime); + } + } + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6259 = 1*aps_swon_state; + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + p4Value = 8*mhvps_hvon_state; + if (modulation) p4Value += 32; + if (pauseSet) p4Value += 1; + //*outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + *outputSignalNI6528P4 = ~p4Value; + return true; +} + +CLASS_REGISTER(JARTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.h b/EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.h new file mode 100644 index 0000000..876d64e --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.h @@ -0,0 +1,264 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARTSTATEMACHINEGAM_H_ +#define GAMS_JARTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that provides real-time state machine. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMRealTimeStateMachine = {
+ *           Class = JARTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BEAM_ON_STAT = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JARTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARTStateMachineGAM(); + + virtual ~JARTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS = 1, + RFON = 2, + HVTerminate = 3 + }; + + //The current rtState + JARealTimeState currentState; + + //A given condition + MARTe::uint32 conditionTrigger; + + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + + //Time signal + MARTe::uint32 *currentTime; + + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for short pulse mode. + MARTe::uint32 *short_pulse_mode; + // Input signal for modulation pv. + MARTe::uint32 *modulation; + // Input signal for pause signal set pv. + MARTe::uint32 *pauseSet; + + // Output signal to which the output value will be written. + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + // Added for HVPS state (20201117) + MARTe::uint32 *outputAPSHVON; + MARTe::uint32 *outputAPSSWON; + MARTe::uint32 *outputBPSHVON; + MARTe::uint32 *outputBPSSWON; + MARTe::uint32 *outputMHVPSON; + + // Output signals for NI devices + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + MARTe::uint64 apsSwonHighResolutionTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + + // terminal values + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.cpp b/EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.cpp new file mode 100644 index 0000000..71c7669 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.cpp @@ -0,0 +1,402 @@ +/** + * @file JARTStateMachineGAM.cpp + * @brief Source file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JARTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +static MARTe::uint64 getCurrentTimeUs() { + using namespace MARTe; + return static_cast(HighResolutionTimer::Counter() * HighResolutionTimer::Period() * 1e6f + 0.5f); +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARTStateMachineGAM::JARTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + turn_off_delay = 2000; //us + + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + + apsSwonHighResolutionTime = 0; + + aps_hvon_state=0; + aps_swon_state=0; + mhvps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; +} + +JARTStateMachineGAM::~JARTStateMachineGAM() { +} + +bool JARTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JARTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JARTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 11u); + if (ok) { + ok = (numberOfOutputSignals == 16u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined %d",numberOfOutputSignals); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(10)); + + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + + outputAPSHVON = reinterpret_cast(GetOutputSignalMemory(8)); + outputAPSSWON = reinterpret_cast(GetOutputSignalMemory(9)); + outputBPSHVON = reinterpret_cast(GetOutputSignalMemory(10)); + outputBPSSWON = reinterpret_cast(GetOutputSignalMemory(11)); + outputMHVPSON = reinterpret_cast(GetOutputSignalMemory(12)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(13)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(14)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(15)); + + *shotCounter = 0; + } + return ok; +} + +bool JARTStateMachineGAM::Execute() { + using namespace MARTe; + + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + //REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence at %d.", *currentTime); + plcOnTime = *currentTime; //Save pulse start time. + //*outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS; + } + } + else if (currentState == SwitchingHVPS) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; bps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + *outputBPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; aps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal at %d.", *currentTime); + *outputAPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; bps_swon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + *outputBPSSWON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; mhvps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + *outputMHVPSON=1; + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (plcOnTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; aps_swon_state=1; + apsSwonHighResolutionTime = getCurrentTimeUs(); + apsSwonTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + *outputAPSSWON=1; + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 1; + } + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 1; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *outputBeamON = 1; + *shotCounter += 1; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //Action in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + //debug + //if((*stopRequest != 0)){ + //REPORT_ERROR(ErrorManagement::Debug, "Stop request was called.!!!"); + //} else { + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset.!!!"); + //} + *outputSignal -= aps_swon; + mhvps_hvon_is_on = false; mhvps_hvon_state=0; + aps_hvon_is_on = false; aps_hvon_state=0; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; bps_hvon_state=0; + bps_swon_is_on = false; bps_swon_state=0; + currentState = HVTerminate; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + } + uint32 updatePeriod = 100; // in microsecnds (get this from Timer) + if ((*modePulseLengthLimit == 1u) || (getCurrentTimeUs() + updatePeriod >= (apsSwonHighResolutionTime + *triggerDelay_shotlen))) { + + // Now we do busy wait + while (getCurrentTimeUs() < (apsSwonHighResolutionTime + *triggerDelay_shotlen)) { + //REPORT_ERROR(ErrorManagement::Debug, "!"); + } + // We stop busy waiting #executionOverhead before expected pulse off time + //debug + //if((*modePulseLengthLimit == 1u)){ + // REPORT_ERROR(ErrorManagement::Debug, "Mode limit detected.!!!"); + //} else { + // REPORT_ERROR(ErrorManagement::Debug, "Shot length reached to the setpoint.!!!"); + //} + //debug end. + //Do action + *outputSignal -= aps_swon; //Turn off only APS_SWON first. + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; + bps_swon_is_on = false; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + //REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 1; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + //In the HVTerminate state, turn APS_SWON off first, and wait 1ms. Finally turn other PS off. + //Action in this state. + *outputBeamON = 0; + *outputHVArmed = 0; + *outputHVInjection = 0; + *outputRFON = 0; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + mhvps_hvon_state=0; + aps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset. The State was changed to WaitTrigger at %d.", *currentTime); + } + } + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6259 = 1*aps_swon_state; + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + p4Value = 8*mhvps_hvon_state; + //*outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + *outputSignalNI6528P4 = ~p4Value; + return true; +} + +CLASS_REGISTER(JARTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.h b/EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.h new file mode 100644 index 0000000..e59f3fa --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.h @@ -0,0 +1,260 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARTSTATEMACHINEGAM_H_ +#define GAMS_JARTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that provides real-time state machine. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMRealTimeStateMachine = {
+ *           Class = JARTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BEAM_ON_STAT = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JARTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARTStateMachineGAM(); + + virtual ~JARTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS = 1, + RFON = 2, + HVTerminate = 3 + }; + + //The current rtState + JARealTimeState currentState; + + //A given condition + MARTe::uint32 conditionTrigger; + + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + + //Time signal + MARTe::uint32 *currentTime; + + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for short pulse mode. + MARTe::uint32 *short_pulse_mode; + + // Output signal to which the output value will be written. + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + // Added for HVPS state (20201117) + MARTe::uint32 *outputAPSHVON; + MARTe::uint32 *outputAPSSWON; + MARTe::uint32 *outputBPSHVON; + MARTe::uint32 *outputBPSSWON; + MARTe::uint32 *outputMHVPSON; + + // Output signals for NI devices + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + MARTe::uint64 apsSwonHighResolutionTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + + // terminal values + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/Makefile.inc new file mode 100644 index 0000000..234a3d6 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JARTStateMachineGAM/Makefile.inc @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JARTStateMachineGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JARTStateMachineGAM$(LIBEXT) \ + $(BUILD_DIR)/JARTStateMachineGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JARampupGAM/JARampupGAM.cpp b/EC-GN-JA-PCF/src/main/c++/GAMs/JARampupGAM/JARampupGAM.cpp new file mode 100644 index 0000000..98003a2 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JARampupGAM/JARampupGAM.cpp @@ -0,0 +1,295 @@ +/** + * @file JARampupGAM.cpp + * @brief Source file for class JARampupGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARampupGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "AdvancedErrorManagement.h" +#include "JARampupGAM.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARampupGAM::JARampupGAM() : GAM() { + current_setpoint = NULL_PTR(MARTe::float32 *); + target_value = NULL_PTR(MARTe::float32 *); + rampup_time = NULL_PTR(MARTe::float32 *); + start = NULL_PTR(MARTe::uint32 *); + standby = NULL_PTR(MARTe::uint32 *); + isAuto = NULL_PTR(MARTe::uint32 *); + FHPS_PrePro = NULL_PTR(MARTe::float32 *); + + output = NULL_PTR(MARTe::float32 *); + state = NULL_PTR(MARTe::uint32 *); + + rampup_rate = 0.0f; + inRampup = false; + resetFlag = true; + inWaitHVON = false; + inWaitStandby = false; +} + +JARampupGAM::~JARampupGAM() { +} + +bool JARampupGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + return GAM::Initialise(data); +} + +bool JARampupGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 7u); + if (ok) { + ok = (numberOfOutputSignals == 2u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Two output signals shall be defined."); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Six input signals shall be defined."); + } + uint32 currentspvIndex; + uint32 targetvIndex; + uint32 timeIndex; + uint32 startIndex; + uint32 standbyIndex; + uint32 isAutoIndex; + uint32 fhpsPreProIndex; + + if (ok) { + StreamString signalName = "Currspv"; + ok = GetSignalIndex(InputSignals, currentspvIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Currspv input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, currentspvIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Currspv shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Targetv"; + ok = GetSignalIndex(InputSignals, targetvIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Targetv input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, targetvIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Targetv shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Time"; + ok = GetSignalIndex(InputSignals, timeIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Time input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, timeIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Time shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Start"; + ok = GetSignalIndex(InputSignals, startIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Start input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, startIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Start shall be defined as uint32."); + } + } + } + if (ok) { + StreamString signalName = "PLC_STANDBY"; + ok = GetSignalIndex(InputSignals, standbyIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLC_STANDBY input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, standbyIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLC_STANDBY shall be defined as uint32."); + } + } + } + if (ok) { + StreamString signalName = "MANUAL_AUTO"; + ok = GetSignalIndex(InputSignals, isAutoIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "MANUAL_AUTO input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, isAutoIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "MANUAL_AUTO shall be defined as uint32."); + } + } + } + if (ok) { + StreamString signalName = "FHPS_PrePro"; + ok = GetSignalIndex(InputSignals, fhpsPreProIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "FHPS_PrePro input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, fhpsPreProIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal FHPS_PrePro shall be defined as float32."); + } + } + } + + if (ok) { + TypeDescriptor inputType = GetSignalType(OutputSignals, 0); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Output shall be defined as float32."); + } + } + if (ok) { + TypeDescriptor inputType = GetSignalType(OutputSignals, 1); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal state shall be defined as float32."); + } + } + + if (ok) { + current_setpoint = reinterpret_cast(GetInputSignalMemory(currentspvIndex)); + target_value = reinterpret_cast(GetInputSignalMemory(targetvIndex)); + rampup_time = reinterpret_cast(GetInputSignalMemory(timeIndex)); + start = reinterpret_cast(GetInputSignalMemory(startIndex)); + standby = reinterpret_cast(GetInputSignalMemory(standbyIndex)); + isAuto = reinterpret_cast(GetInputSignalMemory(isAutoIndex)); + FHPS_PrePro = reinterpret_cast(GetInputSignalMemory(fhpsPreProIndex)); + + output = reinterpret_cast(GetOutputSignalMemory(0)); + state = reinterpret_cast(GetOutputSignalMemory(1)); + } + return ok; +} + +bool JARampupGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName){ + if(strcmp(nextStateName, "WaitHVON_PREP")==0 || strcmp(nextStateName, "WaitHVON_SDN_PREP")==0 || + strcmp(nextStateName, "WaitHVON")==0 || strcmp(nextStateName, "WaitHVON_SDN")==0){ + inWaitHVON = true; + inWaitStandby = false; + } else{ + inWaitHVON = false; + if(strcmp(nextStateName,"WaitStandby")==0 ){ + inWaitStandby = true; + } else { + inWaitStandby = false; + } + } + return true; +} + +bool JARampupGAM::Execute() { + using namespace MARTe; + if(!inWaitHVON){ + if (*target_value <= 0.0f || *standby == 0u) { + *output = 0.0f; + rampup_rate = 0.0f; + if(*target_value <= 0.0f){ + *state = 3u; + } else { + *state = 0u; + } + return true; + } + + if(*start == 1u && *isAuto==0u){ //isAuto = 1.Manual, 0.auto-rampup. + inRampup = true; + resetFlag = true; + *output = 0.0f; //Enable if it should start always zero. + } + + // Calcrate new rampup rate. + if(*rampup_time != 0 && resetFlag == true){ + rampup_rate = (*target_value - *current_setpoint) / *rampup_time/1000.0f; // Volt/msec + resetFlag = false; + } + + // Update Parameter + if(*standby == 1u ){ + if(*isAuto == 1u){ + if (inWaitStandby){ + *output = *target_value; + } else{ + *output = *FHPS_PrePro; + } + //*output = *target_value; + *state = 0u; + return true; + } + else if (inRampup){ + if (*output + rampup_rate < *target_value && *rampup_time != 0){ + *output = *output + rampup_rate; + *state = 1u; + } else { + *output = *target_value; + *state = 2u; + inRampup = false; + } + } + } + return true; + } else { + if(*isAuto == 0){ + *output = *FHPS_PrePro; + } else{ + *output = *target_value; + } + return true; + } +} + +CLASS_REGISTER(JARampupGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JARampupGAM/JARampupGAM.h b/EC-GN-JA-PCF/src/main/c++/GAMs/JARampupGAM/JARampupGAM.h new file mode 100644 index 0000000..3c6e012 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JARampupGAM/JARampupGAM.h @@ -0,0 +1,141 @@ +/** + * @file JARampupGAM.h + * @brief Header file for class JARampupGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARampupGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARampupGAM_H_ +#define GAMS_JARampupGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that rampup output value with specified target value and duration. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *      +FHPSRampupGAM = {
+ *         Class = JARampupGAM
+ *         InputSignals = {
+ *             Currspv = {
+ *                 Alias = FHPS_REF
+ *                 DataSource = DDB1
+ *                 Type = float32
+ *             }
+ *             Targetv = {
+ *                 Alias = FHPS_AUTO_TAGV
+ *                 DataSource = EPICSCAInput
+ *                 Type = float32
+ *             }
+ *             Time = {
+ *                 Alias = FHPS_AUTO_TIME
+ *                 DataSource = EPICSCAInput
+ *                 Type = float32
+ *             }
+ *             Start = {
+ *                 Alias = FHPS_AUTO_START
+ *                 DataSource = EPICSCAInput
+ *                 Type = uint32
+ *             }
+ *         }
+ *         OutputSignals = {
+ *             FHPS_REF = {
+ *                 DataSource = DDB1
+ *                 Type = float32
+ *             }
+ *         }
+ *       }
+ *  
+ * 
+ * + */ + +class JARampupGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARampupGAM(); + + virtual ~JARampupGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + // Input signal containing current current_setpoint + MARTe::float32 *current_setpoint; + + // Input signal containing the frequency of the waveform. + MARTe::float32 *target_value; + + // Input signal containing the amplitude of the waveform. + MARTe::float32 *rampup_time; + + // Input signal containing CCPS_ON_REQUEST + MARTe::uint32 *start; + + // Input signal PLC_STANDBY + MARTe::uint32 *standby; + + // MANUAL AUTO button + MARTe::uint32 *isAuto; + + // Input signal + MARTe::float32 *FHPS_PrePro; + + // Output + MARTe::float32 *output; + // State output + MARTe::uint32 *state; //0:NotOperation, 1:InOperation, 2:Finish, 3:Error + + // Internal variables + MARTe::float32 rampup_rate; + bool inRampup; + bool resetFlag; + bool inWaitHVON; + bool inWaitStandby; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARampupGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JARampupGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/c++/GAMs/JARampupGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JARampupGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JARampupGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/c++/GAMs/JARampupGAM/Makefile.inc new file mode 100644 index 0000000..9bf127b --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JARampupGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JARampupGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JARampupGAM$(LIBEXT) \ + $(BUILD_DIR)/JARampupGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.cpp b/EC-GN-JA-PCF/src/main/c++/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.cpp new file mode 100644 index 0000000..d164e89 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.cpp @@ -0,0 +1,361 @@ +/** + * @file JASDNRTStateMachineGAM.cpp + * @brief Source file for class JASDNRTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JASDNRTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JASDNRTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JASDNRTStateMachineGAM::JASDNRTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + sdnTriggerTime = 0; + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + sdnCommand = NULL_PTR(MARTe::uint16 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; +} + +JASDNRTStateMachineGAM::~JASDNRTStateMachineGAM() { +} + +bool JASDNRTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JASDNRTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JASDNRTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 11u); + if (ok) { + ok = (numberOfOutputSignals == 8u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit || inputType == UnsignedInteger16Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint16", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + sdnCommand = reinterpret_cast(GetInputSignalMemory(10)); + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + *shotCounter = 0; + } + return ok; +} + +bool JASDNRTStateMachineGAM::Execute() { + using namespace MARTe; + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence in SDN mode."); + plcOnTime = *currentTime; //Save pulse start time. + *outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS_HVON; + } + } + else if (currentState == SwitchingHVPS_HVON) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal -= aps_swon; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal."); + } + + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 0; + currentState = WaitSDNTrigger; + } + + } + else if (currentState == WaitSDNTrigger) { + + // Action in this state + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + + // State change conditions + if (*sdnCommand == 1){ + sdnTriggerTime = *currentTime; + currentState = SwitchingHVPS_SWON; + } + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + } + else if (currentState == SwitchingHVPS_SWON) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + + if (*currentTime >= (sdnTriggerTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + } + if (*currentTime >= (sdnTriggerTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (sdnTriggerTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; + apsSwonTime = *currentTime; + REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 0; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *shotCounter += 1; + REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //SDN command processing. + if (*sdnCommand == 4 && aps_swon_is_on) { + *outputSignal -= aps_swon; + aps_swon_is_on = false; + REPORT_ERROR(ErrorManagement::Debug, "sdn command was 4"); + } + if (*sdnCommand == 3 && !aps_swon_is_on) { + *outputSignal += aps_swon; + aps_swon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "sdn command was 3"); + } + + //Action in this state. + if ((*sdnCommand == 2) || (*modePulseLengthLimit == 1u) || (*currentTime >= (sdnTriggerTime + *triggerDelay_aps_swon + *triggerDelay_shotlen))) { + REPORT_ERROR(ErrorManagement::Debug, "shotlen: %d", *triggerDelay_shotlen); + if (*sdnCommand == 2) { + REPORT_ERROR(ErrorManagement::Information, "sdn command was 2"); + } else if (*currentTime >= (sdnTriggerTime + *triggerDelay_aps_swon + *triggerDelay_shotlen)){ + REPORT_ERROR(ErrorManagement::Information, "pulse length reached setpoint."); + } + //Do action + *outputSignal -= aps_swon; //Turn off only aps_swon + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 0; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + REPORT_ERROR(ErrorManagement::Information, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + + //Action in this state. + *outputBeamON = 1; + *outputHVArmed = 1; + *outputHVInjection = 1; + *outputRFON = 1; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + REPORT_ERROR(ErrorManagement::Debug, "state was changed to WaitTrigger"); + } + } + + return true; +} + +CLASS_REGISTER(JASDNRTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.h b/EC-GN-JA-PCF/src/main/c++/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.h new file mode 100644 index 0000000..91b4199 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.h @@ -0,0 +1,250 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JASDNRTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JASDNRTSTATEMACHINEGAM_H_ +#define GAMS_JASDNRTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM provides real-time state machine that communicate with SDN packet. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMSDNRealTimeStateMachine = {
+ *           Class = JASDNRTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               Command = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint16
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   //DataSource = NI6259
+ *                   DataSource = Display
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BeamON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * + */ + +class JASDNRTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JASDNRTStateMachineGAM(); + + virtual ~JASDNRTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS_HVON = 1, + WaitSDNTrigger = 2, + SwitchingHVPS_SWON = 3, + RFON = 4, + HVTerminate = 5 + }; + + //The current rtState + JARealTimeState currentState; + + ///////////////////////////////////////////////// + // Static parameter given by cfg File + ///////////////////////////////////////////////// + //A given condition + MARTe::uint32 conditionTrigger; + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + ///////////////////////////////////////////////// + // Input signals + ///////////////////////////////////////////////// + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + //Time signal (Time from TimerGAM) + MARTe::uint32 *currentTime; + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for SDN commands. + MARTe::uint16 *sdnCommand; + + ///////////////////////////////////////////////////////////// + // Output signal to which the output value will be written. + ///////////////////////////////////////////////////////////// + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //SDN trigger command arrival time. + MARTe::uint32 sdnTriggerTime; + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JASDNRTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JASDNRTStateMachineGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/c++/GAMs/JASDNRTStateMachineGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JASDNRTStateMachineGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JASDNRTStateMachineGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/c++/GAMs/JASDNRTStateMachineGAM/Makefile.inc new file mode 100644 index 0000000..50056e0 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JASDNRTStateMachineGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JASDNRTStateMachineGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JASDNRTStateMachineGAM$(LIBEXT) \ + $(BUILD_DIR)/JASDNRTStateMachineGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JASampleGAM/JASampleGAM.cpp b/EC-GN-JA-PCF/src/main/c++/GAMs/JASampleGAM/JASampleGAM.cpp new file mode 100644 index 0000000..62ab62d --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JASampleGAM/JASampleGAM.cpp @@ -0,0 +1,177 @@ +/** + * @file JASampleGAM.cpp + * @brief Source file for class JASampleGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JASampleGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JASampleGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JASampleGAM::JASampleGAM() { + // initialize member variables. + param1 = 0; + param2 = 0; + + //Input signals. + input1 = NULL_PTR(MARTe::uint32 *); + input2 = NULL_PTR(MARTe::float32 *); + //Output signals. + output1= NULL_PTR(MARTe::uint32 *); + output2 = NULL_PTR(MARTe::float32 *); + +} + +JASampleGAM::~JASampleGAM() { +} + +bool JASampleGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("param1", param1); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The param1 shall be specified"); + } + } + if (ok) { + ok = data.Read("param2", param2); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The param2 shall be specified"); + } + } + return ok; +} + +bool JASampleGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JASampleGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == 2u); + if (ok) { + ok = (numberOfOutputSignals == 2u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Two output signals shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Two input signals shall be defined"); + } + // Do type check for input signals. + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = ((inputType == UnsignedInteger32Bit) || (inputType == Float32Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or flaot32", signalName.Buffer()); + } + + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = ((outputType == UnsignedInteger32Bit) || (outputType == Float32Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or float32", signalName.Buffer()); + } + } + } + + // Signal id can get by signal name in configuration file + if (ok) { + StreamString signalName = "InputXXX"; //Variable name in configuration file. + uint32 signalxxxIndex; //Index is copied to this variable by using signal name. + ok = GetSignalIndex(InputSignals, signalxxxIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "InputXXX input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, signalxxxIndex); + ok = (inputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, signalxxxIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } else { + inputXXX = reinterpret_cast(GetInputSignalMemory(signalxxxIndex)); + } + } + } + + // Do type cast. with explicit signal id. + if (ok) { + input1 = reinterpret_cast(GetInputSignalMemory(0)); + input2 = reinterpret_cast(GetInputSignalMemory(1)); + + output1 = reinterpret_cast(GetOutputSignalMemory(0)); + output2 = reinterpret_cast(GetOutputSignalMemory(1)); + + } + return ok; +} + +bool JASampleGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + REPORT_ERROR(ErrorManagement::Information, "input1 is %d.", *input1); + REPORT_ERROR(ErrorManagement::Information, "input2 is %f.", *input2); + REPORT_ERROR(ErrorManagement::Information, "inputXXX is %f.", *inputXXX); + + REPORT_ERROR(ErrorManagement::Information, "maltiply param value to input."); + + *output1 = *input1 * param1; + *output2 = *input2 * param2; + + REPORT_ERROR(ErrorManagement::Information, "output1 is %d.", *output1); + REPORT_ERROR(ErrorManagement::Information, "output2 is %f.", *output2); + + return true; +} + +CLASS_REGISTER(JASampleGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JASampleGAM/JASampleGAM.h b/EC-GN-JA-PCF/src/main/c++/GAMs/JASampleGAM/JASampleGAM.h new file mode 100644 index 0000000..53f06ad --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JASampleGAM/JASampleGAM.h @@ -0,0 +1,122 @@ +/** + * @file JASampleGAM.h + * @brief Header file for class JASampleGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JASampleGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JASampleGAM_H_ +#define GAMS_JASampleGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +/** + * @brief GAM Sample Usage. + * @details Sample + * + * The configuration syntax is: + * + *
+ * +SampleGAM = {
+ *     Class = JASampleGAM
+ *     InputSignals = {
+ *         Input1 = {
+ *             DataSource = "DDB"
+ *             Type = uint32
+ *             Default = 0
+ *         }
+ *         Input2 = {
+ *             DataSource = "DDB"
+ *             Type = float32
+ *             Default = 100
+ *         }
+ *         InputXXX = {
+ *             DataSource = "DDB"
+ *             Type = float32
+ *             NumberOfElements = 1
+ *         }
+ *     }
+ *     OutputSignals = {
+ *         Output1 = {
+ *             DataSource = "DDB"
+ *             Type = uint32
+ *             Default = 0
+ *         }
+ *         Output2 = {
+ *             DataSource = "DDB"
+ *             Type = int32
+ *             Default = 100
+ *         }
+ *     }
+ * }
+ * 
+ */ + + +class JASampleGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JASampleGAM(); + + virtual ~JASampleGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //GAM fixed parameters. + MARTe::uint32 param1; + MARTe::float32 param2; + + // Input signals + MARTe::uint32 *input1; + MARTe::float32 *input2; + MARTe::float32 *inputXXX; + + // Output signals + MARTe::uint32 *output1; + MARTe::float32 *output2; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JASampleGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JASampleGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/c++/GAMs/JASampleGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JASampleGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JASampleGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/c++/GAMs/JASampleGAM/Makefile.inc new file mode 100644 index 0000000..a95be67 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JASampleGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JARTSampleGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JARTSampleGAM$(LIBEXT) \ + $(BUILD_DIR)/JARTSampleGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.cpp b/EC-GN-JA-PCF/src/main/c++/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.cpp new file mode 100644 index 0000000..3ab70d0 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.cpp @@ -0,0 +1,188 @@ +/** + * @file JASourceChoiseGAM.cpp + * @brief Source file for class JASourceChoiseGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JASourceChoiseGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JASourceChoiseGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JASourceChoiseGAM::JASourceChoiseGAM() { + // initialize member variables. + numberOfPVs = 0; +} + +JASourceChoiseGAM::~JASourceChoiseGAM() { +} + +bool JASourceChoiseGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("numberOfPVs", numberOfPVs); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The numberOfPVs parameter shall be specified"); + } + } + return ok; +} + +bool JASourceChoiseGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JASourceChoiseGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == numberOfPVs*3u); + if (ok) { + ok = (numberOfOutputSignals == numberOfPVs); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "%d *3 output signals shall be defined", numberOfPVs); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "%d input signals shall be defined", numberOfPVs); + } + // Do type check for input signals. + int int_num = 0; + int float_num = 0; + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + if(inputType == UnsignedInteger32Bit){ + int_num++; + } else if (inputType == Float32Bit) { + float_num++; + } else { + ok = false; + }; + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or flaot32", signalName.Buffer()); + } + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = ((outputType == UnsignedInteger32Bit) || (outputType == Float32Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or float32", signalName.Buffer()); + } + } + } + // Set memory + inputUInt32.resize(numberOfPVs*2); + inputFloat32.resize(numberOfPVs*2); + choise.resize(numberOfPVs); + outputUInt32.resize(numberOfPVs); + outputFloat32.resize(numberOfPVs); + + prevUInt32.resize(numberOfPVs*2); + prevFloat32.resize(numberOfPVs*2); + + if(ok){ + for(uint32 i=0; i(GetInputSignalMemory(3*i)); + inputUInt32[2*i+1] = reinterpret_cast(GetInputSignalMemory(3*i+1)); + choise[i] = reinterpret_cast(GetInputSignalMemory(3*i+2)); + outputUInt32[i] = reinterpret_cast(GetOutputSignalMemory(i)); + } else if(inputType == Float32Bit){ + inputFloat32[2*i] = reinterpret_cast(GetInputSignalMemory(3*i)); + inputFloat32[2*i+1] = reinterpret_cast(GetInputSignalMemory(3*i+1)); + choise[i] = reinterpret_cast(GetInputSignalMemory(3*i+2)); + outputFloat32[i] = reinterpret_cast(GetOutputSignalMemory(i)); + } + prevUInt32[2*i] = 0; + prevUInt32[2*i+1] = 0; + prevFloat32[2*i] = 0; + prevFloat32[2*i+1] = 0; + } + } + return ok; +} + +bool JASourceChoiseGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + + for (uint32 i=0; i < numberOfPVs; i++){ + if(*choise[i]==0){ + if(outputUInt32[i]){ + if(prevUInt32[i*2] != *inputUInt32[i*2]){ + *outputUInt32[i] = *inputUInt32[i*2]; + prevUInt32[i*2] = *inputUInt32[i*2]; + prevUInt32[1+i*2] = *inputUInt32[1+i*2]; + } + } else if(outputFloat32[i]){ + if(prevFloat32[i*2] != *inputFloat32[i*2]){ + *outputFloat32[i] = *inputFloat32[i*2]; + prevFloat32[i*2] = *inputFloat32[i*2]; + prevFloat32[1+i*2] = *inputFloat32[1+i*2]; + } + } + } else { + if(outputUInt32[i]){ + if(prevUInt32[1+i*2] != *inputUInt32[1+i*2]){ + *outputUInt32[i] = *inputUInt32[1+i*2]; + prevUInt32[i*2] = *inputUInt32[i*2]; + prevUInt32[1+i*2] = *inputUInt32[1+i*2]; + } + } else if (outputFloat32[i]){ + if(prevFloat32[1+i*2] != *inputFloat32[1+i*2]){ + *outputFloat32[i] = *inputFloat32[1+i*2]; + prevFloat32[i*2] = *inputFloat32[i*2]; + prevFloat32[1+i*2] = *inputFloat32[1+i*2]; + } + } + } + } + return true; +} + +CLASS_REGISTER(JASourceChoiseGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.h b/EC-GN-JA-PCF/src/main/c++/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.h new file mode 100644 index 0000000..2a4cd80 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.h @@ -0,0 +1,84 @@ +/** + * @file JASourceChoiseGAM.h + * @brief Header file for class JASourceChoiseGAM + * @date Mar 04, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JASourceChoiseGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JASourceChoiseGAM_H_ +#define GAMS_JASourceChoiseGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +class JASourceChoiseGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JASourceChoiseGAM(); + + virtual ~JASourceChoiseGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + //GAM fixed parameters. + MARTe::uint32 numberOfPVs; + + // Input signals + std::vector inputUInt32; + std::vector inputFloat32; + std::vector choise; + + // Output signals + std::vector outputUInt32; + std::vector outputFloat32; + + // Previous Input value + std::vector prevUInt32; + std::vector prevFloat32; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JASourceChoiseGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JASourceChoiseGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/c++/GAMs/JASourceChoiseGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JASourceChoiseGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JASourceChoiseGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/c++/GAMs/JASourceChoiseGAM/Makefile.inc new file mode 100644 index 0000000..52d83e4 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JASourceChoiseGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JASourceChoiseGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JASourceChoiseGAM$(LIBEXT) \ + $(BUILD_DIR)/JASourceChoiseGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.cpp b/EC-GN-JA-PCF/src/main/c++/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.cpp new file mode 100644 index 0000000..1d3f9c1 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.cpp @@ -0,0 +1,206 @@ +/** + * @file JATerminalInterfaceGAM.cpp + * @brief Source file for class JATerminalInterfaceGAM + * @date Feb 19, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JATerminalInterfaceGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JATerminalInterfaceGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JATerminalInterfaceGAM::JATerminalInterfaceGAM() { + + // Fixed GAM input + aps_hvon_term = 0; + + // Parameters which get from Input signals. + mhvps_hvon = NULL_PTR(MARTe::uint32 *); + aps_hvon = NULL_PTR(MARTe::uint32 *); + aps_swon = NULL_PTR(MARTe::uint32 *); + bps_hvon = NULL_PTR(MARTe::uint32 *); + bps_swon = NULL_PTR(MARTe::uint32 *); + + stateMachineOutput = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignalNI6259 = NULL_PTR(MARTe::uint32 *); + outputSignalNI6528P3 = NULL_PTR(MARTe::uint8 *); + outputSignalNI6528P4 = NULL_PTR(MARTe::uint8 *); + + aps_hvon_state = 0; + aps_swon_state = 0; + mhvps_hvon_state = 0; + bps_hvon_state = 0; + bps_swon_state = 0; + p3Value = 0; + p4Value = 0; +} + +JATerminalInterfaceGAM::~JATerminalInterfaceGAM() { +} + +bool JATerminalInterfaceGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("mhvps_hvon_term", mhvps_hvon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon_term", aps_hvon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon_term", aps_swon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon_term", bps_hvon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon_term", bps_swon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon_term shall be specified"); + } + } + return ok; +} + +bool JATerminalInterfaceGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JATerminalInterfaceGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 9u); + if (ok) { + ok = (numberOfOutputSignals == 3u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Three output signals shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit || inputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint8", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint8", signalName.Buffer()); + } + } + } + if (ok) { + //mhvps_manm = reinterpret_cast(GetInputSignalMemory(0)); + mhvps_hvon = reinterpret_cast(GetInputSignalMemory(0)); + //aps_manm = reinterpret_cast(GetInputSignalMemory(2)); + aps_hvon = reinterpret_cast(GetInputSignalMemory(1)); + aps_swon = reinterpret_cast(GetInputSignalMemory(2)); + //bps_manm = reinterpret_cast(GetInputSignalMemory(5)); + bps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + bps_swon = reinterpret_cast(GetInputSignalMemory(4)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(5)); + stateMachineOutput = reinterpret_cast(GetInputSignalMemory(6)); + ni6528p3Value = reinterpret_cast(GetInputSignalMemory(7)); + ni6528p4Value = reinterpret_cast(GetInputSignalMemory(8)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(0)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(1)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(2)); + + } + return ok; +} + +bool JATerminalInterfaceGAM::Execute() { + using namespace MARTe; + uint8 sm = *stateMachineOutput; + + + //Update HVPS state + aps_hvon_state = ((sm >> (0))&1); + aps_swon_state = ((sm >> (4))&1); + mhvps_hvon_state = ((sm >> (2))&1); + bps_hvon_state = ((sm >> (1))&1); + bps_swon_state = ((sm >> (3))&1); + + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state; + *outputSignalNI6259 = 1*aps_swon_state; + //uint8 ni6528p3ValueTemp = 0;//*ni6528p3Value; + //ni6528p3ValueTemp &= ~(1<<2); //Does not turn on ni6258 aps switch + //Update terminal value + //*outputSignalNI6528P3 = ~(ni6528p3ValueTemp | p3Value); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + + p4Value = 8*mhvps_hvon_state; + *outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + return true; +} + +CLASS_REGISTER(JATerminalInterfaceGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.h b/EC-GN-JA-PCF/src/main/c++/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.h new file mode 100644 index 0000000..773cbd6 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.h @@ -0,0 +1,157 @@ +/** + * @file JATerminalInterfaceGAM.h + * @brief Header file for class JATerminalInterfaceGAM + * @date Feb 19, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JATerminalInterfaceGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JATerminalInterfaceGAM_H_ +#define GAMS_JATerminalInterfaceGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM calculates one output value by comparing input value and fixed parameters. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ * 
+ *         +terminalInterfaceGAM = {
+ *           Class = JATerminalInterfaceGAM
+ *           mhvps_hvon_term = 4
+ *           aps_hvon_term = 1
+ *           aps_swon_term = 16
+ *           bps_hvon_term = 2
+ *           bps_swon_term = 8
+ *           InputSignals = {
+ *               MHVPS_HVON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = NI6259
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JATerminalInterfaceGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JATerminalInterfaceGAM(); + + virtual ~JATerminalInterfaceGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + // Fixed GAM input + MARTe::uint32 mhvps_hvon_term; + MARTe::uint32 aps_hvon_term; + MARTe::uint32 aps_swon_term; + MARTe::uint32 bps_hvon_term; + MARTe::uint32 bps_swon_term; + + // Input signals + //MARTe::uint32 *mhvps_manm; + MARTe::uint32 *mhvps_hvon; + + //MARTe::uint32 *aps_manm; + MARTe::uint32 *aps_hvon; + MARTe::uint32 *aps_swon; + + //MARTe::uint32 *bps_manm; + MARTe::uint32 *bps_hvon; + MARTe::uint32 *bps_swon; + + MARTe::uint32 *short_pulse_mode; + + MARTe::uint32 *stateMachineOutput; + MARTe::uint8 *ni6528p3Value; + MARTe::uint8 *ni6528p4Value; + + // Output signals + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JATerminalInterfaceGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JATerminalInterfaceGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/c++/GAMs/JATerminalInterfaceGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JATerminalInterfaceGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JATerminalInterfaceGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/c++/GAMs/JATerminalInterfaceGAM/Makefile.inc new file mode 100644 index 0000000..0f3e2aa --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JATerminalInterfaceGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JATerminalInterfaceGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JATerminalInterfaceGAM$(LIBEXT) \ + $(BUILD_DIR)/JATerminalInterfaceGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.cpp b/EC-GN-JA-PCF/src/main/c++/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.cpp new file mode 100644 index 0000000..7004a1f --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.cpp @@ -0,0 +1,178 @@ +/** + * @file JATriangleWaveGAM.cpp + * @brief Source file for class JATriangleWaveGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JATriangleWaveGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "AdvancedErrorManagement.h" +#include "JATriangleWaveGAM.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +MARTe::float32 absFloat(MARTe::float32 x) { + if (x < 0.0f) { + return -x; + } + return x; +} + +JATriangleWaveGAM::JATriangleWaveGAM() { + frequency = NULL_PTR(MARTe::float32 *); + amplitude = NULL_PTR(MARTe::float32 *); + offset = NULL_PTR(MARTe::float32 *); + plcStandby = NULL_PTR(MARTe::uint32 *); + waveOutput = NULL_PTR(MARTe::float32 *); + time = 0.0f; +} + +JATriangleWaveGAM::~JATriangleWaveGAM() { +} + +bool JATriangleWaveGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + return GAM::Initialise(data); +} + +bool JATriangleWaveGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 4u); + if (ok) { + ok = (numberOfOutputSignals == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "One output signal shall be defined."); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Four input signals shall be defined."); + } + uint32 freqIndex; + uint32 ampIndex; + uint32 offsetIndex; + uint32 plcStandbyIndex; + if (ok) { + StreamString signalName = "Frequency"; + ok = GetSignalIndex(InputSignals, freqIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Frequency input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, freqIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Frequency shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Amplitude"; + ok = GetSignalIndex(InputSignals, ampIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Amplitude input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, ampIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Amplitude shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Offset"; + ok = GetSignalIndex(InputSignals, offsetIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Offset input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, offsetIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Offset shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "PLCSTANDBY"; + ok = GetSignalIndex(InputSignals, plcStandbyIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLCSTANDBY input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, plcStandbyIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLCSTANDBY shall be defined as uint32."); + } + } + } + if (ok) { + TypeDescriptor inputType = GetSignalType(OutputSignals, 0); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Amplitude shall be defined as float32."); + } + } + if (ok) { + frequency = reinterpret_cast(GetInputSignalMemory(freqIndex)); + amplitude = reinterpret_cast(GetInputSignalMemory(ampIndex)); + offset = reinterpret_cast(GetInputSignalMemory(offsetIndex)); + plcStandby = reinterpret_cast(GetInputSignalMemory(plcStandbyIndex)); + waveOutput = reinterpret_cast(GetOutputSignalMemory(0)); + } + return ok; +} + +bool JATriangleWaveGAM::Execute() { + using namespace MARTe; + // If frequency is not set, output 0. + if (*frequency <= 0.0f || *plcStandby == 0u) { + *waveOutput = 0.0f; + return true; + } + // Increase the current time. + ++time; + // Calculate the period in milliseconds + float32 periodMs = 1000.0 / *frequency; + // Make sure the time is on [0, periodMs] interval. + while (time > periodMs) { + time -= periodMs; + } + // Formula: + // f(x) = |x - 0.5| * 2 * amplitude + // where x is between 0 and 1 + *waveOutput = absFloat((time / periodMs) - 0.5f) * 2.0f * (*amplitude) + *offset; + return true; +} + +CLASS_REGISTER(JATriangleWaveGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.h b/EC-GN-JA-PCF/src/main/c++/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.h new file mode 100644 index 0000000..22e34c3 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.h @@ -0,0 +1,130 @@ +/** + * @file JATriangleWaveGAM.h + * @brief Header file for class JATriangleWaveGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JATriangleWaveGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JATRIANGLEWAVEGAM_H_ +#define GAMS_JATRIANGLEWAVEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM provides triangular waveform output within 1kHz thread. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *      +CCPSWaveformGAM = {
+ *           Class = JATriangleWaveGAM
+ *           InputSignals = {
+ *               Offset = {
+ *                   Alias = OFFSET
+ *                   DataSource = EPICSCAInput
+ *                   Type = float32
+ *               }
+ *               Frequency = {
+ *                   Alias = CCPS_OUTPUT_FREQ
+ *                   DataSource = EPICSCAInput
+ *                   Type = float32
+ *               }
+ *               Amplitude = {
+ *                   Alias = CCPS_OUTPUT_AMP
+ *                   DataSource = EPICSCAInput
+ *                   Type = float32
+ *               }
+ *               PLCCCPSON = {
+ *                   Alias = PLC_CCPSON
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+  *              READY = {
+ *                   Alias = PLC_READY
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               CCPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JATriangleWaveGAM : public MARTe::GAM { +public: + CLASS_REGISTER_DECLARATION() + + JATriangleWaveGAM(); + + virtual ~JATriangleWaveGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); +private: + // Input signal containing the frequency of the waveform. + MARTe::float32 *frequency; + + // Input signal containing the amplitude of the waveform. + MARTe::float32 *amplitude; + + // Input signal cantaining the offset of the waveform. + MARTe::float32 *offset; + + // Input signal containing CCPS_ON_REQUEST + //MARTe::uint32 *plcccpson; + + // Input signal condition CCPS_READY + //MARTe::uint32 *plcReady; + + // Input signal condition CCPS_STANDBY + MARTe::uint32 *plcStandby; + + MARTe::float32 *waveOutput; + + MARTe::float32 time; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JATRIANGLEWAVEGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JATriangleWaveGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/c++/GAMs/JATriangleWaveGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JATriangleWaveGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JATriangleWaveGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/c++/GAMs/JATriangleWaveGAM/Makefile.inc new file mode 100644 index 0000000..495d6ae --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JATriangleWaveGAM/Makefile.inc @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JATriangleWaveGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JATriangleWaveGAM$(LIBEXT) \ + $(BUILD_DIR)/JATriangleWaveGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JAWFRecordGAM/JAWFRecordGAM.cpp b/EC-GN-JA-PCF/src/main/c++/GAMs/JAWFRecordGAM/JAWFRecordGAM.cpp new file mode 100644 index 0000000..b26b6bd --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JAWFRecordGAM/JAWFRecordGAM.cpp @@ -0,0 +1,317 @@ +/** + * @file JAWFRecordGAM.cpp + * @brief Source file for class JAWFRecordGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAWFRecordGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAWFRecordGAM.h" + +#include "AdvancedErrorManagement.h" +#include "CLASSMETHODREGISTER.h" +#include "File.h" +#include "MessageI.h" +#include "RegisteredMethodsMessageFilter.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +// How often output signals are updated. +const MARTe::uint32 cycleMs = 10u; + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAWFRecordGAM::JAWFRecordGAM() : + GAM() { + filenameSignalIndex = 0u; + timeSignal = NULL_PTR(MARTe::int32 *); + loadTriggerSignal = NULL_PTR(MARTe::uint32 *); + valueSignals = NULL_PTR(MARTe::float32 **); + maxElements = 0u; + readOnce = true; +} + +JAWFRecordGAM::~JAWFRecordGAM() { + if (valueSignals != NULL_PTR(MARTe::float32 **)) { + delete[] valueSignals; + } +} + +bool JAWFRecordGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("Directory", directory); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Directory shall be specified"); + } + } + return ok; +} + +bool JAWFRecordGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 2u); + if (ok) { + ok = (numberOfOutputSignals > 1u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "At least two output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Two input signal with the filename and file load trigger shall be defined"); + } + if (ok) { + StreamString signalName = "Filename"; + ok = GetSignalIndex(InputSignals, filenameSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Filename input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, filenameSignalIndex); + ok = (inputType == CharString); + if (!ok) { + ok = (inputType == Character8Bit); + } + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, filenameSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as string", signalName.Buffer()); + } + } + } + if (ok) { + StreamString signalName = "CSV_LOAD"; + uint32 loadSignalIndex; + ok = GetSignalIndex(InputSignals, loadSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "CSV_LOAD input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, loadSignalIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, loadSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } else { + loadTriggerSignal = reinterpret_cast(GetInputSignalMemory(loadSignalIndex)); + } + } + } + if (ok) { + TypeDescriptor timeType = GetSignalType(OutputSignals, 0); + + ok = (timeType == SignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, 0, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as int32", signalName.Buffer()); + } + + uint32 i; + for (i = 1u; (i < numberOfOutputSignals) && (ok); i++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, i); + ok = (outputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, i, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } + else { + uint32 dimentionsCount; + ok = GetSignalNumberOfDimensions(OutputSignals, 0u, dimentionsCount); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Output signals shall have 1 dimension."); + } + else { + uint32 elementsCount; + ok = GetSignalNumberOfElements(OutputSignals, 0u, elementsCount); + if (maxElements == 0) { + maxElements = elementsCount; + } + else { + ok = (maxElements == elementsCount); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Output signals shall have consistent number of elements."); + } + } + } + } + } + } + if (ok) { + valueSignals = new float32*[numberOfOutputSignals - 1u]; + uint32 i; + for (i = 1u; i < numberOfOutputSignals; i++) { + valueSignals[i - 1] = reinterpret_cast(GetOutputSignalMemory(i)); + } + timeSignal = reinterpret_cast(GetOutputSignalMemory(0)); + } + return ok; +} + +bool JAWFRecordGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + if (strcmp(nextStateName, "WaitReady") == 0) { + // Reset read once flag when reentering WaitReady state. + readOnce = true; + } + return true; +} + +void JAWFRecordGAM::LoadFile() { + using namespace MARTe; + + bool ok = true; + + const char8 * const filenameSignal = reinterpret_cast(GetInputSignalMemory(filenameSignalIndex)); + StreamString filename = directory; + filename += DIRECTORY_SEPARATOR; + filename += filenameSignal; + REPORT_ERROR(ErrorManagement::Debug, "Opening file %s", filename.Buffer()); + + File f; + ok = f.Open(filename.Buffer(), BasicFile::ACCESS_MODE_R); + + uint32 numberOfPreProgrammedTimeRows = 0u; + int32 *preProgrammedTime; + float32 **preProgrammedValues; + uint32 numberOfPreProgrammedValues = 0u; + + if (ok) { + StreamString tokenLine; + while (f.GetLine(tokenLine)) { + if (tokenLine[0] != '#') { + numberOfPreProgrammedTimeRows++; + } + tokenLine = ""; + } + f.Seek(0); + uint32 t = 0u; + tokenLine = ""; + while ((ok) && (f.GetLine(tokenLine))) { + if (tokenLine[0] == '#') { + tokenLine = ""; + continue; + } + if (numberOfPreProgrammedValues == 0) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + while (tokenLine.GetToken(token, ",", ignored)) { + numberOfPreProgrammedValues++; + token = ""; + } + ok = numberOfPreProgrammedValues == numberOfOutputSignals; + // Remove time from pre-programmed values count. + numberOfPreProgrammedValues -= 1u; + if (ok) { + preProgrammedTime = new int32[maxElements]; + memset(preProgrammedTime, 0, maxElements * sizeof(int32)); + preProgrammedValues = new float32*[numberOfPreProgrammedValues]; + uint32 j; + for (j = 0u; j < numberOfPreProgrammedValues; j++) { + preProgrammedValues[j] = new float32[maxElements]; + memset(preProgrammedValues[j], 0, maxElements * sizeof(float32)); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Number of columns in csv file (%d) is not consistent with the number of output signals (%d)", numberOfPreProgrammedValues, + numberOfOutputSignals - 1u); + } + } + if (ok) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + uint32 idx = 0u; + while (tokenLine.GetToken(token, ",", ignored)) { + if (idx == 0u) { + preProgrammedTime[t] = atoi(token.Buffer()); + } + else { + ok = ((idx - 1) < numberOfPreProgrammedValues); + if (ok) { + preProgrammedValues[idx - 1][t] = static_cast(atof(token.Buffer())); + } + else { + REPORT_ERROR(ErrorManagement::FatalError, "Number of columns in csv file is not consistent with the number of output signals in line %d", t); + } + } + token = ""; + idx++; + } + t++; + } + tokenLine = ""; + } + f.Close(); + } else { + REPORT_ERROR(ErrorManagement::Debug, "Cannot open the file %s", filename.Buffer()); + return; + } + if (numberOfPreProgrammedTimeRows > maxElements) { + REPORT_ERROR(ErrorManagement::Warning, "Only %d (out of %d) of pre-programmed values will be written to waveform record.", + maxElements, numberOfPreProgrammedTimeRows); + } + ok = MemoryOperationsHelper::Copy(timeSignal, preProgrammedTime, maxElements * sizeof(int32)); + uint32 i; + for (i = 0u; (i < numberOfPreProgrammedValues) && (ok); ++i) { + ok = MemoryOperationsHelper::Copy(valueSignals[i], preProgrammedValues[i], maxElements * sizeof(float32)); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::Warning, "Failed to write data to waveform record."); + } + + if (preProgrammedValues != NULL_PTR(float32 **)) { + uint32 i; + for (i = 0u; i < numberOfPreProgrammedValues; i++) { + delete preProgrammedValues[i]; + } + delete[] preProgrammedValues; + } + if (preProgrammedTime != NULL_PTR(int32 *)) { + delete[] preProgrammedTime; + } +} + +bool JAWFRecordGAM::Execute() { + if (*loadTriggerSignal == 1u) { + if (readOnce) { + LoadFile(); + readOnce = false; + } + } else { + // Reset read once flag when loadTriggerSignal is reset. + readOnce = true; + } + return true; +} + +CLASS_REGISTER(JAWFRecordGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JAWFRecordGAM/JAWFRecordGAM.h b/EC-GN-JA-PCF/src/main/c++/GAMs/JAWFRecordGAM/JAWFRecordGAM.h new file mode 100644 index 0000000..ee22c1a --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JAWFRecordGAM/JAWFRecordGAM.h @@ -0,0 +1,130 @@ +/** + * @file JAWFRecordGAM.h + * @brief Header file for class JAWFRecordGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAWFRecordGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAWFRECORDGAM_H_ +#define GAMS_JAWFRECORDGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include "Message.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that is used for pre-programmed operation. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *       +WFRecordGAM = {
+ *           Class = JAWFRecordGAM
+ *           Directory = "../Configurations" 
+ *           InputSignals = {
+ *               CSV_LOAD = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               Filename = {
+ *                   Alias = CSV_NAME
+ *                   DataSource = EPICSCAInput
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               PREP_TIME_WF = {
+ *                   DataSource = DDB1
+ *               }
+ * *             MHVPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               BPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               APS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               MCPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               GCPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               FHPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *           }
+ *       }
+ * 
+ * + */ + +class JAWFRecordGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAWFRecordGAM(); + + virtual ~JAWFRecordGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + void LoadFile(); + + MARTe::uint32 filenameSignalIndex; + + MARTe::uint32 *loadTriggerSignal; + + MARTe::StreamString directory; + + MARTe::float32 **valueSignals; + + MARTe::int32 *timeSignal; + + MARTe::uint32 maxElements; + + // Flag determining whether file should be read (so it isn't read multiple time) + bool readOnce; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAWFRECORDGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JAWFRecordGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/c++/GAMs/JAWFRecordGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JAWFRecordGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/JAWFRecordGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/c++/GAMs/JAWFRecordGAM/Makefile.inc new file mode 100644 index 0000000..608ea6c --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/JAWFRecordGAM/Makefile.inc @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAWFRecordGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAWFRecordGAM$(LIBEXT) \ + $(BUILD_DIR)/JAWFRecordGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/Makefile b/EC-GN-JA-PCF/src/main/c++/GAMs/Makefile new file mode 100644 index 0000000..61a2101 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/Makefile @@ -0,0 +1,28 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +export TARGET=x86-linux + +include Makefile.gcc diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/Makefile.gcc b/EC-GN-JA-PCF/src/main/c++/GAMs/Makefile.gcc new file mode 100644 index 0000000..e0a2fc4 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/Makefile.gcc @@ -0,0 +1,26 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +############################################################# + +include Makefile.inc + diff --git a/EC-GN-JA-PCF/src/main/c++/GAMs/Makefile.inc b/EC-GN-JA-PCF/src/main/c++/GAMs/Makefile.inc new file mode 100644 index 0000000..8dfc149 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/GAMs/Makefile.inc @@ -0,0 +1,45 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +SPB = JAMessageGAM.x JAPreProgrammedGAM.x JAModeControlGAM.x \ + JAWFRecordGAM.x JATriangleWaveGAM.x JARampupGAM.x \ + JARTStateMachineGAM.x JASDNRTStateMachineGAM.x JATerminalInterfaceGAM.x \ + JABitSumGAM.x JAConditionalSignalUpdateGAM.x JASourceChoiseGAM.x JABitReverseGAM.x + +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults + +ROOT_DIR=../../../obj +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +all: $(OBJS) $(SUBPROJ) check-env + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + +check-env: +ifndef MARTe2_DIR + $(error MARTe2_DIR is undefined) +endif diff --git a/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/Gyrotron01DAN.cpp b/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/Gyrotron01DAN.cpp new file mode 100644 index 0000000..46ae827 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/Gyrotron01DAN.cpp @@ -0,0 +1,639 @@ +/****************************************************************************** + * $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp-sdn/main/c++/prog/prog.cpp.template $ + * $Id: prog.cpp.template 83098 2018-01-08 13:23:38Z cesnikt $ + * + * Project : CODAC Core System + * + * Description : GyrotronDAN program + * + * Author : codac-dev + * + * Copyright (c) : 2010-2018 ITER Organization, + * CS 90 046 + * 13067 St. Paul-lez-Durance Cedex + * France + * + * This file is part of ITER CODAC software. + * For the terms and conditions of redistribution or use of this software + * refer to the file ITER-LICENSE.TXT located in the top level directory + * of the distribution package. + ******************************************************************************/ + +/* header files */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +//#include +#define float32_t float32_t1 +#include +#undef float32_t + +#include +#include +#include +#include +#include +#include + +#include + +// global variables +static bool __terminate = false; +char pxie6368_0_ai_fd[] = "/dev/pxie-6368.0.ai"; // ai segment +char pxie6368_0_device[] = "/dev/pxie-6368.0"; // device descriptor + +typedef struct { + int daq_smpl_rate; + int daq_mode; + double daq_smpl_st_dly; + double daq_len; + double daq_pub_dly; +} daq_parameters; + +void signal_handler(int signal) { + log_info("Received signal '%d' to terminate", signal); + __terminate = true; +}; + +// DAN parameter reload function ------------------------------------------------ +int reload_daq_conf(int *aifd, int *ai_chan_fd, daq_parameters *daq_p) { + std::cout << "reload_daq_conf was called \n"; + + // Common variables + int retval; + unsigned long number_of_samples; + int chan_num = 10; // Channel number to add. + uint32_t sample_period_divisor; + uint32_t base_clock = 100000000; // TB3:100MHz, TB2:100 kHz + uint32_t pre_samples = 1000; + uint32_t post_samples = 1000; + char str[40]; + xseries_ai_conf_t conf; // ai segment configuraton data + + // calculate sampling period divisor + if (daq_p->daq_smpl_rate != 0) { + sample_period_divisor = base_clock / daq_p->daq_smpl_rate; + } else { + return 0; + } + + // Stop ai segment---------------------------------------------------------------------- + retval = xseries_stop_ai(*aifd); + if (retval) { + log_error("ai segment stop failed.\n"); + } else { + log_info("ai segment stopped.\n"); + } + + // reset ai segment--------------------------------------------------------------------- + retval = xseries_reset_ai(*aifd); + if (retval) { + log_error("ai segment reset failed.\n"); + return -1; + } + + // Configure AI segment mode ------------------------------------------------------------ + switch (daq_p->daq_mode) { + case 0: + conf = xseries_software_timed_ai(); + log_info("software_timed mode.\n"); + break; + case 1: + conf = xseries_finite_ai(number_of_samples); + log_info("finite mode.\n"); + break; + case 2: + conf = xseries_retriggerable_finite_ai(number_of_samples); + log_info("retriggerable_finite mode.\n"); + break; + case 3: + conf = xseries_continuous_ai(); + log_info("continuous mode.\n"); + break; + case 4: + conf = xseries_reference_ai(pre_samples, post_samples); + log_info("reference mode.\n"); + break; + } + + // disable external gate + retval = xseries_set_ai_external_gate(&conf, + XSERIES_AI_EXTERNAL_GATE_DISABLED, // No external pause signal + XSERIES_AI_POLARITY_ACTIVE_LOW_OR_FALLING_EDGE); // Don't care + if (retval) { + log_error("Cannot set gate trigger.\n"); + return -1; + } + + // select start trigger (START1 signal) + retval = xseries_set_ai_start_trigger(&conf, + XSERIES_AI_START_TRIGGER_SW_PULSE, // Set the line to software-driven + XSERIES_AI_POLARITY_ACTIVE_HIGH_OR_RISING_EDGE, // Make line active on rising... + 1); // ... edge (not high level) + if (retval) { + log_error("Cannot set start trigger.\n"); + return -1; + } + + // set sampling clock source---------------------------------------------------------------------------------------- + retval = xseries_set_ai_sample_clock(&conf, + XSERIES_AI_SAMPLE_CONVERT_CLOCK_INTERNALTIMING, + XSERIES_AI_POLARITY_ACTIVE_HIGH_OR_RISING_EDGE, 1); + if (retval) { + log_error("Cannot configure sampling clock.\n"); + return -1; + } + + // set scan interval ------------------------------------------------------------------------------------------------------------------------- + retval = xseries_set_ai_scan_interval_counter(&conf, + XSERIES_SCAN_INTERVAL_COUNTER_TB3, // TB3 : 100MHz base clock, TB2 : 100kHz base clock + XSERIES_SCAN_INTERVAL_COUNTER_POLARITY_RISING_EDGE, + sample_period_divisor, 2); // Wait 2*100MHz sec after sampling trig. + if (retval) { + log_error("Cannot configure scan counter.\n"); + return -1; + } + + // Set DMA buffer size----------------------------------------------------------------------------------------------------------------------- + retval = xseries_set_ai_attribute(&conf, XSERIES_AI_DMA_BUFFER_SIZE, 1000); + if (retval) { + log_error("DMA configuration was failed.\n"); + return -1; + } + + // Add AI channels --------------------------------------------------------------------------------------------------------------------------- + for (int i = 0; i < chan_num; i++) { + retval = xseries_add_ai_channel(&conf, i, XSERIES_INPUT_RANGE_10V, + XSERIES_AI_CHANNEL_TYPE_DIFFERENTIAL, 0); + if (retval) { + log_error("Add AI channel %d was failed.\n", i); + return -1; + } + } + sleep(3); + + // Load configuration.----------------------------------------------------------------------------------------------------------------------- + retval = xseries_load_ai_conf(*aifd, conf); + if (retval) { + log_error("xseries_load_ai_conf was failed. error code: %d \n", retval); + exit (EXIT_FAILURE); + } + sleep(3); + + // Open channels-------------------------------------------------------------------------------------------------------------------------------- + for (int i = 0; i < chan_num; i++) { + sprintf(str, "%s.ai.%u", pxie6368_0_device, i); + //ai_chan_fd[i] = open(str, O_RDWR | O_NONBLOCK); + ai_chan_fd[i] = open(str, O_RDWR); + if (ai_chan_fd[i] < 0) { + log_error("Cannot open ai channel %d .\n",i); + sleep(1); + exit (EXIT_FAILURE); + } + } + + // start ai segment task----------------------------------------------------------------------------------------------------------------------- + retval = xseries_start_ai(*aifd); + if (retval) { + log_error("ERROR, starting AI segment failed: %s\n", strerror(retval)); + exit (EXIT_FAILURE); + } + + log_info("PXIe-6368 configuration was finished.\n"); + return 0; +}; + + + +int main(int argc, char **argv) { + using namespace std; + unsigned long n_sample_quotient = 0; + + log_initialize(NULL); + + while (!__terminate) { + // Install signal handler to support graceful termination + sigset(SIGTERM, signal_handler); + sigset(SIGINT, signal_handler); + sigset(SIGHUP, signal_handler); + + // ---------------------------------------------------------------------------------------------------------------- + // Running parameter declaration + // ---------------------------------------------------------------------------------------------------------------- + // pxie6368 hardware parameters + int pxie6368_0_device_number = 0; // device discriptor number + int aifd = 0; // ai segment file discriptor + xseries_ai_conf_t conf; // ai segment config + xseries_ai_attribute_t aiatrb; // ai segment attributes + char str[40]; // fd tmp var + int ai_chan_fd[16]; // ai channels file discriptor + int pxie6368_sampling_rate = 1000; // sampling rate Hz + uint32_t sample_period_divisor = 100000000 / pxie6368_sampling_rate; // TB3 100MHz, TB2:100kHz, TB1:20MHz + int sampleSize = 2; // Sample size in bytes <---> uInt16 + int n_channels; // Number of opened channels + struct xseries_dma *dma; // Ptr to dma struct + int chan_num = 10; // Channel number to add. + + // DAN parameters + char dan_source_name[] = "GYADanSource"; // DAN data source (ds) name + long offset_ai = 0; // offset size in published data + int dma_mode = 1; // 0:All, 1:AI only, 2:AO only + dan_DataCore dc = NULL; // Datacore reference declaration + dan_Source ds = NULL; // DAN source declaration + long samplesCounter = 0; // Total acquired sample size + size_t n_samples; // prepared sample size to publish + + // TCN parameters + uint64_t tBase_old = 0; + uint64_t tBase = 0; // TCN publishing base time + uint64_t nanos; // time length for sampling + hpn_timestamp_t delay = 1e7; // wait for publishing (10ms) + char buf[ISO_8601_LEN]; + uint64_t tBase0 = 0; + + // Operation tmp parameter + int result; // For result values. + int exValue; + bool toterminate = false; + int retval; + bool daq_start = false; + int testcounter = 10000; + + // Connected EPCIS PV + + // DAQ config PVs + chid daq_smpl_rate_id; + chtype daq_smpl_rate_type; + int daq_smpl_rate; + chid daq_smpl_rate_rb_id; + chtype daq_smpl_rate_rb_type; + int daq_smpl_rate_rb; + chid daq_mode_id; + chtype daq_mode_type; + int daq_mode; + chid daq_mode_rb_id; + chtype daq_mode_rb_type; + int daq_mode_rb; + chid daq_sw_trig_id; + chtype daq_sw_trig_type; + int daq_sw_trig; + chid daq_smpl_st_dly_id; + chtype daq_smpl_st_dly_type; + double daq_smpl_st_dly; + chid daq_smpl_st_dly_rb_id; + chtype daq_smpl_st_dly_rb_type; + double daq_smpl_st_dly_rb; + chid daq_len_id; + chtype daq_len_type; + double daq_len; + chid daq_len_rb_id; + chtype daq_len_rb_type; + double daq_len_rb; + chid daq_reconf_id; + chtype daq_reconf_type; + int daq_reconf; + chid daq_pub_dly_id; + chtype daq_pub_dly_type; + double daq_pub_dly; + chid daq_pub_dly_rb_id; + chtype daq_pub_dly_rb_type; + double daq_pub_dly_rb; + + chid daq_stat_id; + chtype daq_stat_type; + int daq_stat; + chid daq_conf_stat_id; + chtype daq_conf_stat_type; + int daq_conf_stat; + + daq_parameters daq_p = { 0 }; // = {daq_smpl_rate, daq_smpl_rate_rb, daq_mode, daq_mode_rb}; + + // ---------------------------------------------------------------------------------------------------------------------------------------------- + // EPICS PV connection + // ---------------------------------------------------------------------------------------------------------------------------------------------- + //Initialize ChannelAccess interface + CAInterface_Initialize(); + + // Connect to EPICS PVs + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE", daq_smpl_rate_id); + daq_smpl_rate_type = DBR_LONG; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE-RB", daq_smpl_rate_rb_id); + daq_smpl_rate_rb_type = DBR_LONG; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-MODE", daq_mode_id); + daq_mode_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-MODE-RB", daq_mode_rb_id); + daq_mode_rb_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-SW-TRIG", daq_sw_trig_id); + daq_sw_trig_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-SMPL-ST-DLY", daq_smpl_st_dly_id); + daq_smpl_st_dly_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-SMPL-ST-DLY-RB", daq_smpl_st_dly_rb_id); + daq_smpl_st_dly_rb_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-LEN", daq_len_id); + daq_len_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-LEN-RB", daq_len_rb_id); + daq_len_rb_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-RECONF", daq_reconf_id); + daq_reconf_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-PUB-DLY", daq_pub_dly_id); + daq_pub_dly_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-PUB-DLY-RB", daq_pub_dly_rb_id); + daq_pub_dly_rb_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-STAT", daq_stat_id); + daq_stat_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-CONF-STAT", daq_conf_stat_id); + daq_conf_stat_type = DBR_ENUM; + + tcn_sleep(3e9);// Wait for a while. + + // ---------------------------------------------------------------------------------------------------------------- + // Initialize tcn library + // ---------------------------------------------------------------------------------------------------------------- + int tcn_err; + tcn_err = tcn_init(); + if (tcn_err != TCN_SUCCESS) { + log_error("TCN Initialization failed.\n"); + exValue = 1; + goto END; + } + + // ---------------------------------------------------------------------------------------------------------------- + // pxie-6368 settings + // ---------------------------------------------------------------------------------------------------------------- + // Open ai segment---------------------------------------------------------------------- + aifd = open(pxie6368_0_ai_fd, O_RDWR); + if (aifd <= 0) { + log_error("Open PXIe6368 AI fd failed.\n"); + exValue = -1; + goto END; + } + + // wait ai segment setup start + do { + CAInterface_ReadVariable(daq_reconf_id, daq_reconf_type, (void*) &daq_reconf); + } while (!daq_reconf and !__terminate); + + // read parameter + result = CAInterface_ReadVariable(daq_smpl_rate_id, daq_smpl_rate_type, (void *) &daq_p.daq_smpl_rate); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_mode_id, daq_mode_type, (void *) &daq_p.daq_mode); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_smpl_st_dly_id, daq_smpl_st_dly_type, (void *) &daq_p.daq_smpl_st_dly); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_len_id, daq_len_type, (void *) &daq_p.daq_len); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_pub_dly_id, daq_pub_dly_type, (void *) &daq_p.daq_pub_dly); + if (!result) { + log_error("CA_READ failed.\n"); + } + + std::cout << "SAMPLE RATE:" << daq_p.daq_smpl_rate << endl; + std::cout << "MODE :" << daq_p.daq_mode << endl; + std::cout << "START DELAY:" <ai.count * sampleSize, 4096); + + //dan_DataCore, ds_name, devName, enum_daq_type refType, long refSize, long refOffset + if (ds == NULL) { + log_error("Error while publishing DAN source %s ", dan_source_name); + exValue = 1; + goto END; + } + + n_channels = dan_publisher_getNumberOfChannels(ds); + + // ------------------------------------------------------------------------------------------------------------------ + // ----- DAN Streamer. + // ------------------------------------------------------------------------------------------------------------------ + // ----- Open a new stream --------------------------------------------------------------------- + dan_publisher_openStream(ds, daq_p.daq_smpl_rate, 0); + sleep(1); + + // ------------------------------------------------------------------------------------------------------------------ + // ----- Main DAN Loop. + // ------------------------------------------------------------------------------------------------------------------ + while (!__terminate) { + // Wait for the master trigger.---------------------------------------------------------------------------- + daq_stat = 1; //0:Not Ready, 1: Waiting trigger, 2:Acquiring 3:Error + CAInterface_WriteVariable(daq_stat_id, daq_stat_type, &daq_stat); + daq_conf_stat = 1; //0:Not ready, 1: Ready + CAInterface_WriteVariable(daq_conf_stat_id, daq_conf_stat_type, &daq_conf_stat); + + // Wait DAQ Start Software Trigger. + do { + // check daq_sw_trigger to start DAQ sequence. + CAInterface_ReadVariable(daq_sw_trig_id, daq_sw_trig_type, (void*) &daq_sw_trig); + tcn_sleep(1e7); // wait 0.01 s + if (daq_sw_trig) { + daq_start = true; + } + } while (daq_start != true and !__terminate); + + daq_start = false; //reset daq_start flag. + delay = (long) (1e6 * daq_p.daq_pub_dly); //check publish period. + + // Wait a time to start DAQ. ---------------------------------------------------------------------------------------------------------------------- + tcn_sleep(daq_p.daq_smpl_st_dly * 1e6); // in ms + + // After the wating, trigger DAQ ------------------------------------------------------------------------------------------------------------------ + retval = xseries_pulse_ai(aifd, XSERIES_START_TRIGGER); + daq_stat = 2; + CAInterface_WriteVariable(daq_stat_id, daq_stat_type, &daq_stat); + if (retval) { + std::cout << "Cannot generate start trigger!\n"; + goto END; + } else { + tcn_get_time(&tBase); // get DAQ start time. + tBase0 = tBase; // save DAQ start time to tBase0; + tBase_old = tBase; + } + + // DAQ Publish Loop. ---------------------------------------------------------------------------------------------------------------------------- + // DAN data publish is executed every delay time interval. + while (!__terminate && (tcn_wait_until_hr((tBase + delay), &tBase, 0) == TCN_SUCCESS)) { + // Get the number of available samples in PXIe6368 buffer. + n_samples = xsereis_ai_dma_samples_in_buffer(dma); // samples + + if (n_samples > dma->ai.count) { + //log_error("DMA Buffer overflow: Number of new samples in buffer = %ld, AI buffer size = %ld,\n", n_samples, dma->ai.count); + } else if (n_samples > 0) { + //log_info("Current Time:\n%s\n", tcn_strftime(tBase, buf, ISO_8601_LEN)); + if (tBase == 0) { + // "tBase was reset.------------------------------------------------------\n"; + tcn_get_time(&tBase); + tBase -= n_samples * 100000000 / pxie6368_sampling_rate; + nanos = 0; + } else { + // update time offset value. + nanos = n_samples * 100000000 / daq_p.daq_smpl_rate; + } + n_sample_quotient = floor(n_samples / chan_num); + n_samples = n_sample_quotient * chan_num; + + // Publish a new data block -------------------------------------------------------------------------------------------------------------------------- + result = dan_publisher_putBlockReference(ds, + tBase_old + nanos, // timestamp in epoch nanoseconds + n_samples * sampleSize, // datablock size in bytes + offset_ai * sampleSize, // Offset in DAQ buffer + NULL); // No datablock header.... + // Detected overflow in pass datablock reference queue + if (result == -1) { + log_info("%s, Queue overflow with policy %d\n", dan_source_name, dan_publisher_getCheckPolicy(ds)); + } else if (result == -2) { + log_info("%s, DAQ buffer overflow with policy %d\n", dan_source_name, dan_publisher_getCheckPolicy(ds)); + } + } + + samplesCounter += n_samples; // Increment total of published sampes + offset_ai = (offset_ai + n_samples) % dma->ai.count; // Update offset of memory + dma->ai.last_transfer_count = samplesCounter; // Update dma last_transfer_count + + // Check exit condition. + if ((daq_p.daq_len * 1e6 <= (tBase - tBase0))) { + retval = xseries_stop_ai(aifd); + if (retval) { + std::cout << "Stop AI segment failed.\n"; + exit (EXIT_FAILURE); + } + + //restart ai segment. + tcn_sleep(1e9); // wait + retval = xseries_start_ai(aifd); + if (retval) { + std::cout << "Start AI segment failed.\n"; + exit (EXIT_FAILURE); + } + //debug + tcn_sleep(1e8); + n_samples = xsereis_ai_dma_samples_in_buffer(dma); + cout << "n_samples check : " << n_samples << endl; + break; + } + tBase_old = tBase; + } // End of DAQ publish loop. + break; + } // End of DAN main loop. + + // ------------------------------------------------------------------------------------------------------------------ + // ----- Closing program. + // ------------------------------------------------------------------------------------------------------------------ + log_info("DAN end of acquisition, closing all resources"); + + //Closing stream + dan_publisher_closeStream(ds); + exValue = 0; + + // Close all channels + for (int channel = 0; channel < chan_num; channel++) { + close(ai_chan_fd[channel]); + } + goto END; + + END: daq_conf_stat = 0; + CAInterface_WriteVariable(daq_conf_stat_id, daq_conf_stat_type, &daq_conf_stat); + daq_stat = 0; + CAInterface_WriteVariable(daq_stat_id, daq_stat_type, &daq_stat); + // Destroy CA context + CAInterface_Finalize(); + // Close pxie6368 + if (dma != NULL) { + xseries_dma_close(dma); + cout << "pxie-6368 dma was clesed.\n"; + } + + close(aifd); + + // Unpublishing source from DAN API + if (ds != NULL) { + dan_publisher_unpublishSource(dc, ds); + } + + // Closing DAN API library + if (dc != NULL) { + dan_closeLibrary(dc); + } + + // Closing TCN library + result = tcn_finalize(); + if (result != TCN_SUCCESS) { + //log_error("Error finalizing TCN lib.\n"); + } + + } // loop end from initialization + return (0); + +} diff --git a/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/Makefile b/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/Makefile new file mode 100644 index 0000000..ab6bca0 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/Makefile @@ -0,0 +1,68 @@ +#+====================================================================== +# $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp/main/c++/prog/Makefile.template $ +# $Id: Makefile.template 83098 2018-01-08 13:23:38Z cesnikt $ +# +# Project : CODAC Core System +# +# Description : gyrotronDAN Makefile +# +# Author : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2018 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== + +PROGNAME=Gyrotron01DAN + +LIBRARIES=ca dan_api dan_client_api dan_stream dan_base xml2 log sdn sdn-core ccs-core rt pthread tcn nixseries +LIBRARY_DIRS= +INCLUDE_DIRS=. ../include $(CODAC_ROOT)/include $(EPICS_BASE)/include/os/Linux $(EPICS_BASE)/include/compiler/gcc $(EPICS_BASE)/include /usr/include/libxml2 $(SDN_TOPIC_DIRECTORY) + +TARGET=../../../../target +BINARY_DIR=$(TARGET)/bin +OBJECT_DIR=$(TARGET)/obj/$(PROGNAME) +SOURCE_DIR=. + +EXECUTABLE=$(BINARY_DIR)/$(PROGNAME) +INCLUDES=$(foreach inc,$(INCLUDE_DIRS),-I$(inc)) +LDLIBS=-L$(CODAC_ROOT)/lib -L$(EPICS_BASE)/lib/$(EPICS_HOST_ARCH) $(foreach libs,$(LIBRARY_DIRS),-L$(libs) -Wl,-rpath,$(libs)) $(foreach libs,$(LIBRARIES),-l$(libs)) +SOURCES=$(SOURCE_DIR)/$(PROGNAME).cpp $(SOURCE_DIR)/configure_sdn.cpp +# to build executable from all sources in the program directory: +#SOURCES=$(wildcard $(SOURCE_DIR)/*.cpp $(SOURCE_DIR)/*.c) +OBJECTS=$(addprefix $(OBJECT_DIR)/,$(patsubst %.cpp,%.o,$(notdir $(SOURCES)))) + +C=gcc +CC=g++ +CFLAGS=-c -Wall +CCFLAGS=-c -Wall -std=c++11 +LDFLAGS= + +.PHONY: all clean run + +all: $(SOURCES) $(EXECUTABLE) + +clean: + rm -rf "$(EXECUTABLE)" "$(OBJECT_DIR)" + +run: $(SOURCES) $(EXECUTABLE) + $(EXECUTABLE) + +$(EXECUTABLE): $(OBJECTS) + mkdir -p $(BINARY_DIR) + $(CC) $(LDFLAGS) $(LDLIBS) $(OBJECTS) -o $@ + +$(OBJECT_DIR)/%.o: $(SOURCE_DIR)/%.cpp + mkdir -p $(OBJECT_DIR) + $(CC) $(CCFLAGS) $(INCLUDES) $< -o $@ + +$(OBJECT_DIR)/%.o: $(SOURCE_DIR)/%.c + mkdir -p $(OBJECT_DIR) + $(C) $(CFLAGS) $(INCLUDES) $< -o $@ \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/ca-if.h b/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/ca-if.h new file mode 100644 index 0000000..3bcbb4d --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/ca-if.h @@ -0,0 +1,165 @@ +#ifndef CA_IF_H +#define CA_IF_H + +/****************************************************************************** + * $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-log-lib/trunk/src/main/c++/include/tools/any-type.h $ + * $Id: any-type.h 50547 2014-10-09 12:09:51Z bauvirb $ + * + * Project : CODAC Core System + * + * Description : Channel Access Interface + * + * Author : Bertrand Bauvir + * + * Copyright (c) : 2010-2014 ITER Organization, + * CS 90 046 + * 13067 St. Paul-lez-Durance Cedex + * France + * + * This file is part of ITER CODAC software. + * For the terms and conditions of redistribution or use of this software + * refer to the file ITER-LICENSE.TXT located in the top level directory + * of the distribution package. + ******************************************************************************/ + +/* Global header files */ +#include +#include /* Channel Access API definition, etc. */ +//#include /* CCS logging library */ + +/* Local header files */ + +/* Constants */ + +#ifndef log_trace +#define log_trace(arg_msg...) {} +#endif + +#ifndef log_error +#define log_error(arg_msg...){} +#endif + +/* Type definition */ + +/* Global variables */ + +/* Public function declaration */ + +static inline bool CAInterface_Initialize(void) { + bool status = false; + ca_context_create (ca_disable_preemptive_callback); //Default + //ca_context_create(ca_enable_preemptive_callback); + status = true; + + return status; +}; + +static inline bool CAInterface_Finalize(void) { + bool status = false; + ca_context_destroy(); + status = true; + + return status; +}; + +static inline bool CAInterface_ConnectVariable(char* name, chid& id) { + bool status = false; + /* Connect to channels */ + if (ca_create_channel(name, NULL, NULL, 10, &id) != ECA_NORMAL) { + return status; + } + + /* Wait for connections */ + if (ca_pend_io(1) != ECA_NORMAL) { + log_error("%s - ca_pend_io failed", __FUNCTION__); + return status; + } + + /* Verify channel */ + if (ca_state(id) != cs_conn) { + //log_warning("Connection to channel '%s' has not been successful", name); + } else { + //log_info("Connection to channel '%s' has been successfully verified", name); + } + + status = true; + + return status; +}; + +static inline bool CAInterface_ReadVariable(chid channel, chtype type, + void* p_value) { + bool status = false; + if (ca_state(channel) != cs_conn) { + //log_error("%s - Connection to channel has been lost"); + return status; + } + + if (ca_get(type, channel, p_value) != ECA_NORMAL) { + //log_error("%s - ca_get failed", __FUNCTION__); + return status; + } + + /* Flush the requests */ + if (ca_pend_io(1) != ECA_NORMAL) { + //log_error("%s - ca_pend_io failed", __FUNCTION__); + return status; + } + + status = true; + + return status; +}; + +static inline bool CAInterface_WriteVariable(chid channel, chtype type, + void* p_value) { + bool status = false; + + if (ca_state(channel) != cs_conn) { + //log_error("%s - Connection to channel has been lost", __FUNCTION__); + return status; + } + + if (ca_put(type, channel, p_value) != ECA_NORMAL) { + //log_warning("%s - ca_put failed", __FUNCTION__); + } + + /* Flush the requests */ + if (ca_pend_io(1) != ECA_NORMAL) { + //log_error("%s - ca_pend_io failed", __FUNCTION__); + return status; + } + + status = true; + + return status; +}; + +typedef void (*pCallBack)(struct event_handler_args); + +static inline bool CAInterface_SubscribeVariable(chid channel, chtype type, + pCallBack cb_func, void* p_value) { + bool status = false; + if (ca_state(channel) != cs_conn) { + //log_error("%s - Connection to channel has been lost", __FUNCTION__); + return status; + } + + if (ca_create_subscription(type, 0, channel, DBE_VALUE, cb_func, NULL, NULL) + != ECA_NORMAL) { + //log_error("%s - ca_create_subscription failed", __FUNCTION__); + return status; + + } + /* + if(ca_pend_event(0.0) != ECA_NORMAL){ + //log_error("%s - ca_pend_event failed", __FUNCTION__); + return status; + } + */ + status = true; + + return status; +}; + +#endif /* CA_IF_H */ diff --git a/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/configure_sdn.cpp b/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/configure_sdn.cpp new file mode 100644 index 0000000..fc607b1 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/configure_sdn.cpp @@ -0,0 +1,68 @@ +//+====================================================================== +// $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-sdd-translator-parts/tags/CODAC-CORE-6.0.0/org.iter.codac.sdd.translators/src/main/resources/templates/sdn/configure_sdn.cpp.vm $ +// $Id: configure_sdn.cpp.vm 83098 2018-01-08 13:23:38Z cesnikt $ +// +// Project : CODAC Core System +// +// Description : SDN Program - Gyrotron01DAN +// +// Author : Kirti Mahajan, Lana Abadie and TCS (link with velocity and SDD model) +// +// Copyright (c) : 2010-2018 ITER Organization, +// CS 90 046 +// 13067 St. Paul-lez-Durance Cedex +// France +// +// This file is part of ITER CODAC software. +// For the terms and conditions of redistribution or use of this software +// refer to the file ITER-LICENSE.TXT located in the top level directory +// of the distribution package. +// +//-====================================================================== + +#include + +#include +#include "includetopics.h" + +using namespace std; + +/* Create variables for the topics on which application is publishing */ +//+P===================================================================== +//-P===================================================================== + +/* Create variables for topics on which application is subscribing */ +//+S===================================================================== +//-S===================================================================== + +int configureSDN() +{ + + SR_RET sr_ret = SR_OK; + + //+P===================================================================== + //-P===================================================================== + + //+S===================================================================== + //-S===================================================================== + + return sr_ret; + +} + +int cleanupSDN() +{ + + SR_RET sr_ret = SR_OK; + + /* Unregister publisher */ + //+P===================================================================== + //-P===================================================================== + + /* Unregister subscriber */ + //+S===================================================================== + //-S===================================================================== + + return sr_ret; + +} \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/environmentVarDev b/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/environmentVarDev new file mode 100644 index 0000000..fa62c0e --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/environmentVarDev @@ -0,0 +1,17 @@ +######################################## +# Program-specific environment variables +######################################## + +# INFO - This file is part of the I&C project. It can be modified without risk of being overwritten. +# INFO - This file is sourced when invoking 'mvn run -Dprog=' to allow for setting development-specific environment variables. + +# Override SDN interface name for test purposes +# Default: lo +# Project: Target host in SDD database +#SDN_INTERFACE_NAME=lo + +# INFO - This file can be further extended with anything specific required by the program. + +#LOG_FILE_ENABLE=false +#LOG_FILTER_LEVEL=info +#LOG_FWD_MODE=asyn diff --git a/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/includetopics.h b/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/includetopics.h new file mode 100644 index 0000000..b7aece5 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/includetopics.h @@ -0,0 +1,29 @@ +//+====================================================================== +// $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-sdd-translator-parts/tags/CODAC-CORE-6.0.0/org.iter.codac.sdd.translators/src/main/resources/templates/sdn/includetopics.h.vm $ +// $Id: includetopics.h.vm 83098 2018-01-08 13:23:38Z cesnikt $ +// +// Project : CODAC Core System +// +// Description : SDN Program - Gyrotron01DAN +// +// Author : Kirti Mahajan, Lana Abadie and TCS (link with velocity and SDD model) +// +// Copyright (c) : 2010-2018 ITER Organization, +// CS 90 046 +// 13067 St. Paul-lez-Durance Cedex +// France +// +// This file is part of ITER CODAC software. +// For the terms and conditions of redistribution or use of this software +// refer to the file ITER-LICENSE.TXT located in the top level directory +// of the distribution package. +// +//-====================================================================== + +#ifndef INCLUDETOPICS_H +#define INCLUDETOPICS_H + +#include + + +#endif \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/sdd-dan.cpp b/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/sdd-dan.cpp new file mode 100644 index 0000000..00886e0 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/sdd-dan.cpp @@ -0,0 +1,15 @@ +#include "sdd-dan.h" +#include +#include "stdlib.h" + +int declareDANStruct(dan_Source ds ){ + + int result=0; + int Cnt=0; + if(ds==NULL){ + log_error("Invalid call to declareDANStruct, dan source not initialized \n "); + return -1; + } + + return 0; + } \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/sdd-dan.h b/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/sdd-dan.h new file mode 100644 index 0000000..9d1b3a8 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/sdd-dan.h @@ -0,0 +1,8 @@ +#ifndef SDD_DAN_H +#define SDD_DAN_H +#include "dan.h" + +static const char ICProgName[] = "Gyrotron01DAN"; +static const char GYADanSource[] = "GYADanSource"; + +#endif /* SDD_DAN_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/sdd-data.h b/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/sdd-data.h new file mode 100644 index 0000000..73f755b --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/sdd-data.h @@ -0,0 +1,14 @@ +#ifndef SDD_DATA_H +#define SDD_DATA_H + +#include "sdd-pon-if.h" +#include "sdd-iomodule.h" + +static SDD_PONVar pvlist []={ + + }; + +static SDD_IOModule iomlist []={ + }; + +#endif /* SDD_DATA_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/sdd-iomodule.h b/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/sdd-iomodule.h new file mode 100644 index 0000000..a8af1fe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/sdd-iomodule.h @@ -0,0 +1,37 @@ +#ifndef SDD_IOMODULE_H +#define SDD_IOMODULE_H + +//include all linux libraries for IO module listed in the programs + + +//max is 15 for component name +#define SDD_CPMAXLENGTH 50 +#define SDD_SERIALNBMAXLENGTH 60 +#define SDD_FDPREFIXMAXLENGTH 100 + +struct SDD_IOModule { + + //name of the module + char name[SDD_CPMAXLENGTH]; + + //type of the module + char modtype[SDD_CPMAXLENGTH]; + + //module index + int fd; + + //file descriptor name + char filedescrip_prefix[SDD_FDPREFIXMAXLENGTH]; + + //serial number + char serial_number [SDD_SERIALNBMAXLENGTH]; + +}; + +//list of symbol for IOModule : IO module type and fd +typedef enum SDD_IOModuleEnum { + + } SDD_IOModuleEnum; + + +#endif /* SDD_IOMODULE_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/sdd-pon-if.h b/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/sdd-pon-if.h new file mode 100644 index 0000000..ea459e6 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/sdd-pon-if.h @@ -0,0 +1,36 @@ +#ifndef SDD_PON_IF_H +#define SDD_PON_IF_H + +#include /* Channel Access API definition, etc. */ + + +#define SDD_PVMAXLENGTH 40 +#define SDD_STRING_MAX_LENGTH 100 +#define SDD_NB_OF_PONVAR 0 //generated by SDD + +struct SDD_PONVar { + + char name[SDD_PVMAXLENGTH]; + + //if read-> monitor=yes otherwise false + bool isMonitored; + + chtype type; + + //the code can cast + char initialvalue[SDD_STRING_MAX_LENGTH]; + +}; + +//list of symbols +typedef enum SDD_PONVarEnum { + + +} SDD_PONVarEnum; + +//for each enum (bi/bo/mbbi/mbbo) name is symbolname suffix with _enum + + + + +#endif /* SDD_PON_IF_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/topicvars.h b/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/topicvars.h new file mode 100644 index 0000000..dc0b827 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/Gyrotron01DAN/topicvars.h @@ -0,0 +1,36 @@ +//+====================================================================== +// $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-sdd-translator-parts/tags/CODAC-CORE-6.0.0/org.iter.codac.sdd.translators/src/main/resources/templates/sdn/topicvars.h.vm $ +// $Id: topicvars.h.vm 83098 2018-01-08 13:23:38Z cesnikt $ +// +// Project : CODAC Core System +// +// Description : SDN Program - Gyrotron01DAN +// +// Author : Kirti Mahajan, Lana Abadie and TCS (link with velocity and SDD model) +// +// Copyright (c) : 2010-2018 ITER Organization, +// CS 90 046 +// 13067 St. Paul-lez-Durance Cedex +// France +// +// This file is part of ITER CODAC software. +// For the terms and conditions of redistribution or use of this software +// refer to the file ITER-LICENSE.TXT located in the top level directory +// of the distribution package. +// +//-====================================================================== + +#ifndef TOPICVARS_H +#define TOPICVARS_H + +#include "includetopics.h" + +/* Declare variables for the topics on which application is publishing. */ +//+P===================================================================== +//-P===================================================================== + +/* Declare variables for the topics to which application is subscribing. */ +//+S===================================================================== +//-S===================================================================== + +#endif diff --git a/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/Gyrotron02DAN.cpp b/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/Gyrotron02DAN.cpp new file mode 100644 index 0000000..06f975b --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/Gyrotron02DAN.cpp @@ -0,0 +1,639 @@ +/****************************************************************************** + * $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp-sdn/main/c++/prog/prog.cpp.template $ + * $Id: prog.cpp.template 83098 2018-01-08 13:23:38Z cesnikt $ + * + * Project : CODAC Core System + * + * Description : GyrotronDAN program + * + * Author : codac-dev + * + * Copyright (c) : 2010-2018 ITER Organization, + * CS 90 046 + * 13067 St. Paul-lez-Durance Cedex + * France + * + * This file is part of ITER CODAC software. + * For the terms and conditions of redistribution or use of this software + * refer to the file ITER-LICENSE.TXT located in the top level directory + * of the distribution package. + ******************************************************************************/ + +/* header files */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +//#include +#define float32_t float32_t1 +#include +#undef float32_t + +#include +#include +#include +#include +#include +#include + +#include + +// global variables +static bool __terminate = false; +char pxie6368_0_ai_fd[] = "/dev/pxie-6368.1.ai"; // ai segment +char pxie6368_0_device[] = "/dev/pxie-6368.1"; // device descriptor + +typedef struct { + int daq_smpl_rate; + int daq_mode; + double daq_smpl_st_dly; + double daq_len; + double daq_pub_dly; +} daq_parameters; + +void signal_handler(int signal) { + log_info("Received signal '%d' to terminate", signal); + __terminate = true; +}; + +// DAN parameter reload function ------------------------------------------------ +int reload_daq_conf(int *aifd, int *ai_chan_fd, daq_parameters *daq_p) { + std::cout << "reload_daq_conf was called \n"; + + // Common variables + int retval; + unsigned long number_of_samples; + int chan_num = 10; // Channel number to add. + uint32_t sample_period_divisor; + uint32_t base_clock = 100000000; // TB3:100MHz, TB2:100 kHz + uint32_t pre_samples = 1000; + uint32_t post_samples = 1000; + char str[40]; + xseries_ai_conf_t conf; // ai segment configuraton data + + // calculate sampling period divisor + if (daq_p->daq_smpl_rate != 0) { + sample_period_divisor = base_clock / daq_p->daq_smpl_rate; + } else { + return 0; + } + + // Stop ai segment---------------------------------------------------------------------- + retval = xseries_stop_ai(*aifd); + if (retval) { + log_error("ai segment stop failed.\n"); + } else { + log_info("ai segment stopped.\n"); + } + + // reset ai segment--------------------------------------------------------------------- + retval = xseries_reset_ai(*aifd); + if (retval) { + log_error("ai segment reset failed.\n"); + return -1; + } + + // Configure AI segment mode ------------------------------------------------------------ + switch (daq_p->daq_mode) { + case 0: + conf = xseries_software_timed_ai(); + log_info("software_timed mode.\n"); + break; + case 1: + conf = xseries_finite_ai(number_of_samples); + log_info("finite mode.\n"); + break; + case 2: + conf = xseries_retriggerable_finite_ai(number_of_samples); + log_info("retriggerable_finite mode.\n"); + break; + case 3: + conf = xseries_continuous_ai(); + log_info("continuous mode.\n"); + break; + case 4: + conf = xseries_reference_ai(pre_samples, post_samples); + log_info("reference mode.\n"); + break; + } + + // disable external gate + retval = xseries_set_ai_external_gate(&conf, + XSERIES_AI_EXTERNAL_GATE_DISABLED, // No external pause signal + XSERIES_AI_POLARITY_ACTIVE_LOW_OR_FALLING_EDGE); // Don't care + if (retval) { + log_error("Cannot set gate trigger.\n"); + return -1; + } + + // select start trigger (START1 signal) + retval = xseries_set_ai_start_trigger(&conf, + XSERIES_AI_START_TRIGGER_SW_PULSE, // Set the line to software-driven + XSERIES_AI_POLARITY_ACTIVE_HIGH_OR_RISING_EDGE, // Make line active on rising... + 1); // ... edge (not high level) + if (retval) { + log_error("Cannot set start trigger.\n"); + return -1; + } + + // set sampling clock source---------------------------------------------------------------------------------------- + retval = xseries_set_ai_sample_clock(&conf, + XSERIES_AI_SAMPLE_CONVERT_CLOCK_INTERNALTIMING, + XSERIES_AI_POLARITY_ACTIVE_HIGH_OR_RISING_EDGE, 1); + if (retval) { + log_error("Cannot configure sampling clock.\n"); + return -1; + } + + // set scan interval ------------------------------------------------------------------------------------------------------------------------- + retval = xseries_set_ai_scan_interval_counter(&conf, + XSERIES_SCAN_INTERVAL_COUNTER_TB3, // TB3 : 100MHz base clock, TB2 : 100kHz base clock + XSERIES_SCAN_INTERVAL_COUNTER_POLARITY_RISING_EDGE, + sample_period_divisor, 2); // Wait 2*100MHz sec after sampling trig. + if (retval) { + log_error("Cannot configure scan counter.\n"); + return -1; + } + + // Set DMA buffer size----------------------------------------------------------------------------------------------------------------------- + retval = xseries_set_ai_attribute(&conf, XSERIES_AI_DMA_BUFFER_SIZE, 1000); + if (retval) { + log_error("DMA configuration was failed.\n"); + return -1; + } + + // Add AI channels --------------------------------------------------------------------------------------------------------------------------- + for (int i = 0; i < chan_num; i++) { + retval = xseries_add_ai_channel(&conf, i, XSERIES_INPUT_RANGE_10V, + XSERIES_AI_CHANNEL_TYPE_DIFFERENTIAL, 0); + if (retval) { + log_error("Add AI channel %d was failed.\n", i); + return -1; + } + } + sleep(3); + + // Load configuration.----------------------------------------------------------------------------------------------------------------------- + retval = xseries_load_ai_conf(*aifd, conf); + if (retval) { + log_error("xseries_load_ai_conf was failed. error code: %d \n", retval); + exit (EXIT_FAILURE); + } + sleep(3); + + // Open channels-------------------------------------------------------------------------------------------------------------------------------- + for (int i = 0; i < chan_num; i++) { + sprintf(str, "%s.ai.%u", pxie6368_0_device, i); + //ai_chan_fd[i] = open(str, O_RDWR | O_NONBLOCK); + ai_chan_fd[i] = open(str, O_RDWR); + if (ai_chan_fd[i] < 0) { + log_error("Cannot open ai channel %d .\n",i); + sleep(1); + exit (EXIT_FAILURE); + } + } + + // start ai segment task----------------------------------------------------------------------------------------------------------------------- + retval = xseries_start_ai(*aifd); + if (retval) { + log_error("ERROR, starting AI segment failed: %s\n", strerror(retval)); + exit (EXIT_FAILURE); + } + + log_info("PXIe-6368 configuration was finished.\n"); + return 0; +}; + + + +int main(int argc, char **argv) { + using namespace std; + unsigned long n_sample_quotient = 0; + + log_initialize(NULL); + + while (!__terminate) { + // Install signal handler to support graceful termination + sigset(SIGTERM, signal_handler); + sigset(SIGINT, signal_handler); + sigset(SIGHUP, signal_handler); + + // ---------------------------------------------------------------------------------------------------------------- + // Running parameter declaration + // ---------------------------------------------------------------------------------------------------------------- + // pxie6368 hardware parameters + int pxie6368_0_device_number = 1; // device discriptor number + int aifd = 0; // ai segment file discriptor + xseries_ai_conf_t conf; // ai segment config + xseries_ai_attribute_t aiatrb; // ai segment attributes + char str[40]; // fd tmp var + int ai_chan_fd[16]; // ai channels file discriptor + int pxie6368_sampling_rate = 1000; // sampling rate Hz + uint32_t sample_period_divisor = 100000000 / pxie6368_sampling_rate; // TB3 100MHz, TB2:100kHz, TB1:20MHz + int sampleSize = 2; // Sample size in bytes <---> uInt16 + int n_channels; // Number of opened channels + struct xseries_dma *dma; // Ptr to dma struct + int chan_num = 10; // Channel number to add. + + // DAN parameters + char dan_source_name[] = "GYBDanSource"; // DAN data source (ds) name + long offset_ai = 0; // offset size in published data + int dma_mode = 1; // 0:All, 1:AI only, 2:AO only + dan_DataCore dc = NULL; // Datacore reference declaration + dan_Source ds = NULL; // DAN source declaration + long samplesCounter = 0; // Total acquired sample size + size_t n_samples; // prepared sample size to publish + + // TCN parameters + uint64_t tBase_old = 0; + uint64_t tBase = 0; // TCN publishing base time + uint64_t nanos; // time length for sampling + hpn_timestamp_t delay = 1e7; // wait for publishing (10ms) + char buf[ISO_8601_LEN]; + uint64_t tBase0 = 0; + + // Operation tmp parameter + int result; // For result values. + int exValue; + bool toterminate = false; + int retval; + bool daq_start = false; + int testcounter = 10000; + + // Connected EPCIS PV + + // DAQ config PVs + chid daq_smpl_rate_id; + chtype daq_smpl_rate_type; + int daq_smpl_rate; + chid daq_smpl_rate_rb_id; + chtype daq_smpl_rate_rb_type; + int daq_smpl_rate_rb; + chid daq_mode_id; + chtype daq_mode_type; + int daq_mode; + chid daq_mode_rb_id; + chtype daq_mode_rb_type; + int daq_mode_rb; + chid daq_sw_trig_id; + chtype daq_sw_trig_type; + int daq_sw_trig; + chid daq_smpl_st_dly_id; + chtype daq_smpl_st_dly_type; + double daq_smpl_st_dly; + chid daq_smpl_st_dly_rb_id; + chtype daq_smpl_st_dly_rb_type; + double daq_smpl_st_dly_rb; + chid daq_len_id; + chtype daq_len_type; + double daq_len; + chid daq_len_rb_id; + chtype daq_len_rb_type; + double daq_len_rb; + chid daq_reconf_id; + chtype daq_reconf_type; + int daq_reconf; + chid daq_pub_dly_id; + chtype daq_pub_dly_type; + double daq_pub_dly; + chid daq_pub_dly_rb_id; + chtype daq_pub_dly_rb_type; + double daq_pub_dly_rb; + + chid daq_stat_id; + chtype daq_stat_type; + int daq_stat; + chid daq_conf_stat_id; + chtype daq_conf_stat_type; + int daq_conf_stat; + + daq_parameters daq_p = { 0 }; // = {daq_smpl_rate, daq_smpl_rate_rb, daq_mode, daq_mode_rb}; + + // ---------------------------------------------------------------------------------------------------------------------------------------------- + // EPICS PV connection + // ---------------------------------------------------------------------------------------------------------------------------------------------- + //Initialize ChannelAccess interface + CAInterface_Initialize(); + + // Connect to EPICS PVs + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE", daq_smpl_rate_id); + daq_smpl_rate_type = DBR_LONG; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE-RB", daq_smpl_rate_rb_id); + daq_smpl_rate_rb_type = DBR_LONG; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-MODE", daq_mode_id); + daq_mode_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-MODE-RB", daq_mode_rb_id); + daq_mode_rb_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-SW-TRIG", daq_sw_trig_id); + daq_sw_trig_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-SMPL-ST-DLY", daq_smpl_st_dly_id); + daq_smpl_st_dly_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-SMPL-ST-DLY-RB", daq_smpl_st_dly_rb_id); + daq_smpl_st_dly_rb_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-LEN", daq_len_id); + daq_len_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-LEN-RB", daq_len_rb_id); + daq_len_rb_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-RECONF", daq_reconf_id); + daq_reconf_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-PUB-DLY", daq_pub_dly_id); + daq_pub_dly_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-PUB-DLY-RB", daq_pub_dly_rb_id); + daq_pub_dly_rb_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-STAT", daq_stat_id); + daq_stat_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-CONF-STAT", daq_conf_stat_id); + daq_conf_stat_type = DBR_ENUM; + + tcn_sleep(3e9);// Wait for a while. + + // ---------------------------------------------------------------------------------------------------------------- + // Initialize tcn library + // ---------------------------------------------------------------------------------------------------------------- + int tcn_err; + tcn_err = tcn_init(); + if (tcn_err != TCN_SUCCESS) { + log_error("TCN Initialization failed.\n"); + exValue = 1; + goto END; + } + + // ---------------------------------------------------------------------------------------------------------------- + // pxie-6368 settings + // ---------------------------------------------------------------------------------------------------------------- + // Open ai segment---------------------------------------------------------------------- + aifd = open(pxie6368_0_ai_fd, O_RDWR); + if (aifd <= 0) { + log_error("Open PXIe6368 AI fd failed.\n"); + exValue = -1; + goto END; + } + + // wait ai segment setup start + do { + CAInterface_ReadVariable(daq_reconf_id, daq_reconf_type, (void*) &daq_reconf); + } while (!daq_reconf and !__terminate); + + // read parameter + result = CAInterface_ReadVariable(daq_smpl_rate_id, daq_smpl_rate_type, (void *) &daq_p.daq_smpl_rate); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_mode_id, daq_mode_type, (void *) &daq_p.daq_mode); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_smpl_st_dly_id, daq_smpl_st_dly_type, (void *) &daq_p.daq_smpl_st_dly); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_len_id, daq_len_type, (void *) &daq_p.daq_len); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_pub_dly_id, daq_pub_dly_type, (void *) &daq_p.daq_pub_dly); + if (!result) { + log_error("CA_READ failed.\n"); + } + + std::cout << "SAMPLE RATE:" << daq_p.daq_smpl_rate << endl; + std::cout << "MODE :" << daq_p.daq_mode << endl; + std::cout << "START DELAY:" <ai.count * sampleSize, 4096); + + //dan_DataCore, ds_name, devName, enum_daq_type refType, long refSize, long refOffset + if (ds == NULL) { + log_error("Error while publishing DAN source %s ", dan_source_name); + exValue = 1; + goto END; + } + + n_channels = dan_publisher_getNumberOfChannels(ds); + + // ------------------------------------------------------------------------------------------------------------------ + // ----- DAN Streamer. + // ------------------------------------------------------------------------------------------------------------------ + // ----- Open a new stream --------------------------------------------------------------------- + dan_publisher_openStream(ds, daq_p.daq_smpl_rate, 0); + sleep(1); + + // ------------------------------------------------------------------------------------------------------------------ + // ----- Main DAN Loop. + // ------------------------------------------------------------------------------------------------------------------ + while (!__terminate) { + // Wait for the master trigger.---------------------------------------------------------------------------- + daq_stat = 1; //0:Not Ready, 1: Waiting trigger, 2:Acquiring 3:Error + CAInterface_WriteVariable(daq_stat_id, daq_stat_type, &daq_stat); + daq_conf_stat = 1; //0:Not ready, 1: Ready + CAInterface_WriteVariable(daq_conf_stat_id, daq_conf_stat_type, &daq_conf_stat); + + // Wait DAQ Start Software Trigger. + do { + // check daq_sw_trigger to start DAQ sequence. + CAInterface_ReadVariable(daq_sw_trig_id, daq_sw_trig_type, (void*) &daq_sw_trig); + tcn_sleep(1e7); // wait 0.01 s + if (daq_sw_trig) { + daq_start = true; + } + } while (daq_start != true and !__terminate); + + daq_start = false; //reset daq_start flag. + delay = (long) (1e6 * daq_p.daq_pub_dly); //check publish period. + + // Wait a time to start DAQ. ---------------------------------------------------------------------------------------------------------------------- + tcn_sleep(daq_p.daq_smpl_st_dly * 1e6); // in ms + + // After the wating, trigger DAQ ------------------------------------------------------------------------------------------------------------------ + retval = xseries_pulse_ai(aifd, XSERIES_START_TRIGGER); + daq_stat = 2; + CAInterface_WriteVariable(daq_stat_id, daq_stat_type, &daq_stat); + if (retval) { + std::cout << "Cannot generate start trigger!\n"; + goto END; + } else { + tcn_get_time(&tBase); // get DAQ start time. + tBase0 = tBase; // save DAQ start time to tBase0; + tBase_old = tBase; + } + + // DAQ Publish Loop. ---------------------------------------------------------------------------------------------------------------------------- + // DAN data publish is executed every delay time interval. + while (!__terminate && (tcn_wait_until_hr((tBase + delay), &tBase, 0) == TCN_SUCCESS)) { + // Get the number of available samples in PXIe6368 buffer. + n_samples = xsereis_ai_dma_samples_in_buffer(dma); // samples + + if (n_samples > dma->ai.count) { + //log_error("DMA Buffer overflow: Number of new samples in buffer = %ld, AI buffer size = %ld,\n", n_samples, dma->ai.count); + } else if (n_samples > 0) { + //log_info("Current Time:\n%s\n", tcn_strftime(tBase, buf, ISO_8601_LEN)); + if (tBase == 0) { + // "tBase was reset.------------------------------------------------------\n"; + tcn_get_time(&tBase); + tBase -= n_samples * 100000000 / pxie6368_sampling_rate; + nanos = 0; + } else { + // update time offset value. + nanos = n_samples * 100000000 / daq_p.daq_smpl_rate; + } + n_sample_quotient = floor(n_samples / chan_num); + n_samples = n_sample_quotient * chan_num; + + // Publish a new data block -------------------------------------------------------------------------------------------------------------------------- + result = dan_publisher_putBlockReference(ds, + tBase_old + nanos, // timestamp in epoch nanoseconds + n_samples * sampleSize, // datablock size in bytes + offset_ai * sampleSize, // Offset in DAQ buffer + NULL); // No datablock header.... + // Detected overflow in pass datablock reference queue + if (result == -1) { + log_info("%s, Queue overflow with policy %d\n", dan_source_name, dan_publisher_getCheckPolicy(ds)); + } else if (result == -2) { + log_info("%s, DAQ buffer overflow with policy %d\n", dan_source_name, dan_publisher_getCheckPolicy(ds)); + } + } + + samplesCounter += n_samples; // Increment total of published sampes + offset_ai = (offset_ai + n_samples) % dma->ai.count; // Update offset of memory + dma->ai.last_transfer_count = samplesCounter; // Update dma last_transfer_count + + // Check exit condition. + if ((daq_p.daq_len * 1e6 <= (tBase - tBase0))) { + retval = xseries_stop_ai(aifd); + if (retval) { + std::cout << "Stop AI segment failed.\n"; + exit (EXIT_FAILURE); + } + + //restart ai segment. + tcn_sleep(1e9); // wait + retval = xseries_start_ai(aifd); + if (retval) { + std::cout << "Start AI segment failed.\n"; + exit (EXIT_FAILURE); + } + //debug + tcn_sleep(1e8); + n_samples = xsereis_ai_dma_samples_in_buffer(dma); + cout << "n_samples check : " << n_samples << endl; + break; + } + tBase_old = tBase; + } // End of DAQ publish loop. + break; + } // End of DAN main loop. + + // ------------------------------------------------------------------------------------------------------------------ + // ----- Closing program. + // ------------------------------------------------------------------------------------------------------------------ + log_info("DAN end of acquisition, closing all resources"); + + //Closing stream + dan_publisher_closeStream(ds); + exValue = 0; + + // Close all channels + for (int channel = 0; channel < chan_num; channel++) { + close(ai_chan_fd[channel]); + } + goto END; + + END: daq_conf_stat = 0; + CAInterface_WriteVariable(daq_conf_stat_id, daq_conf_stat_type, &daq_conf_stat); + daq_stat = 0; + CAInterface_WriteVariable(daq_stat_id, daq_stat_type, &daq_stat); + // Destroy CA context + CAInterface_Finalize(); + // Close pxie6368 + if (dma != NULL) { + xseries_dma_close(dma); + cout << "pxie-6368 dma was clesed.\n"; + } + + close(aifd); + + // Unpublishing source from DAN API + if (ds != NULL) { + dan_publisher_unpublishSource(dc, ds); + } + + // Closing DAN API library + if (dc != NULL) { + dan_closeLibrary(dc); + } + + // Closing TCN library + result = tcn_finalize(); + if (result != TCN_SUCCESS) { + //log_error("Error finalizing TCN lib.\n"); + } + + } // loop end from initialization + return (0); + +} diff --git a/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/Makefile b/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/Makefile new file mode 100644 index 0000000..e0d79f8 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/Makefile @@ -0,0 +1,68 @@ +#+====================================================================== +# $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp/main/c++/prog/Makefile.template $ +# $Id: Makefile.template 83098 2018-01-08 13:23:38Z cesnikt $ +# +# Project : CODAC Core System +# +# Description : gyrotronDAN Makefile +# +# Author : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2018 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== + +PROGNAME=Gyrotron02DAN + +LIBRARIES=ca dan_api dan_client_api dan_stream dan_base xml2 log sdn sdn-core ccs-core rt pthread tcn nixseries +LIBRARY_DIRS= +INCLUDE_DIRS=. ../include $(CODAC_ROOT)/include $(EPICS_BASE)/include/os/Linux $(EPICS_BASE)/include/compiler/gcc $(EPICS_BASE)/include /usr/include/libxml2 $(SDN_TOPIC_DIRECTORY) + +TARGET=../../../../target +BINARY_DIR=$(TARGET)/bin +OBJECT_DIR=$(TARGET)/obj/$(PROGNAME) +SOURCE_DIR=. + +EXECUTABLE=$(BINARY_DIR)/$(PROGNAME) +INCLUDES=$(foreach inc,$(INCLUDE_DIRS),-I$(inc)) +LDLIBS=-L$(CODAC_ROOT)/lib -L$(EPICS_BASE)/lib/$(EPICS_HOST_ARCH) $(foreach libs,$(LIBRARY_DIRS),-L$(libs) -Wl,-rpath,$(libs)) $(foreach libs,$(LIBRARIES),-l$(libs)) +SOURCES=$(SOURCE_DIR)/$(PROGNAME).cpp $(SOURCE_DIR)/configure_sdn.cpp +# to build executable from all sources in the program directory: +#SOURCES=$(wildcard $(SOURCE_DIR)/*.cpp $(SOURCE_DIR)/*.c) +OBJECTS=$(addprefix $(OBJECT_DIR)/,$(patsubst %.cpp,%.o,$(notdir $(SOURCES)))) + +C=gcc +CC=g++ +CFLAGS=-c -Wall +CCFLAGS=-c -Wall -std=c++11 +LDFLAGS= + +.PHONY: all clean run + +all: $(SOURCES) $(EXECUTABLE) + +clean: + rm -rf "$(EXECUTABLE)" "$(OBJECT_DIR)" + +run: $(SOURCES) $(EXECUTABLE) + $(EXECUTABLE) + +$(EXECUTABLE): $(OBJECTS) + mkdir -p $(BINARY_DIR) + $(CC) $(LDFLAGS) $(LDLIBS) $(OBJECTS) -o $@ + +$(OBJECT_DIR)/%.o: $(SOURCE_DIR)/%.cpp + mkdir -p $(OBJECT_DIR) + $(CC) $(CCFLAGS) $(INCLUDES) $< -o $@ + +$(OBJECT_DIR)/%.o: $(SOURCE_DIR)/%.c + mkdir -p $(OBJECT_DIR) + $(C) $(CFLAGS) $(INCLUDES) $< -o $@ \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/ca-if.h b/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/ca-if.h new file mode 100644 index 0000000..3bcbb4d --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/ca-if.h @@ -0,0 +1,165 @@ +#ifndef CA_IF_H +#define CA_IF_H + +/****************************************************************************** + * $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-log-lib/trunk/src/main/c++/include/tools/any-type.h $ + * $Id: any-type.h 50547 2014-10-09 12:09:51Z bauvirb $ + * + * Project : CODAC Core System + * + * Description : Channel Access Interface + * + * Author : Bertrand Bauvir + * + * Copyright (c) : 2010-2014 ITER Organization, + * CS 90 046 + * 13067 St. Paul-lez-Durance Cedex + * France + * + * This file is part of ITER CODAC software. + * For the terms and conditions of redistribution or use of this software + * refer to the file ITER-LICENSE.TXT located in the top level directory + * of the distribution package. + ******************************************************************************/ + +/* Global header files */ +#include +#include /* Channel Access API definition, etc. */ +//#include /* CCS logging library */ + +/* Local header files */ + +/* Constants */ + +#ifndef log_trace +#define log_trace(arg_msg...) {} +#endif + +#ifndef log_error +#define log_error(arg_msg...){} +#endif + +/* Type definition */ + +/* Global variables */ + +/* Public function declaration */ + +static inline bool CAInterface_Initialize(void) { + bool status = false; + ca_context_create (ca_disable_preemptive_callback); //Default + //ca_context_create(ca_enable_preemptive_callback); + status = true; + + return status; +}; + +static inline bool CAInterface_Finalize(void) { + bool status = false; + ca_context_destroy(); + status = true; + + return status; +}; + +static inline bool CAInterface_ConnectVariable(char* name, chid& id) { + bool status = false; + /* Connect to channels */ + if (ca_create_channel(name, NULL, NULL, 10, &id) != ECA_NORMAL) { + return status; + } + + /* Wait for connections */ + if (ca_pend_io(1) != ECA_NORMAL) { + log_error("%s - ca_pend_io failed", __FUNCTION__); + return status; + } + + /* Verify channel */ + if (ca_state(id) != cs_conn) { + //log_warning("Connection to channel '%s' has not been successful", name); + } else { + //log_info("Connection to channel '%s' has been successfully verified", name); + } + + status = true; + + return status; +}; + +static inline bool CAInterface_ReadVariable(chid channel, chtype type, + void* p_value) { + bool status = false; + if (ca_state(channel) != cs_conn) { + //log_error("%s - Connection to channel has been lost"); + return status; + } + + if (ca_get(type, channel, p_value) != ECA_NORMAL) { + //log_error("%s - ca_get failed", __FUNCTION__); + return status; + } + + /* Flush the requests */ + if (ca_pend_io(1) != ECA_NORMAL) { + //log_error("%s - ca_pend_io failed", __FUNCTION__); + return status; + } + + status = true; + + return status; +}; + +static inline bool CAInterface_WriteVariable(chid channel, chtype type, + void* p_value) { + bool status = false; + + if (ca_state(channel) != cs_conn) { + //log_error("%s - Connection to channel has been lost", __FUNCTION__); + return status; + } + + if (ca_put(type, channel, p_value) != ECA_NORMAL) { + //log_warning("%s - ca_put failed", __FUNCTION__); + } + + /* Flush the requests */ + if (ca_pend_io(1) != ECA_NORMAL) { + //log_error("%s - ca_pend_io failed", __FUNCTION__); + return status; + } + + status = true; + + return status; +}; + +typedef void (*pCallBack)(struct event_handler_args); + +static inline bool CAInterface_SubscribeVariable(chid channel, chtype type, + pCallBack cb_func, void* p_value) { + bool status = false; + if (ca_state(channel) != cs_conn) { + //log_error("%s - Connection to channel has been lost", __FUNCTION__); + return status; + } + + if (ca_create_subscription(type, 0, channel, DBE_VALUE, cb_func, NULL, NULL) + != ECA_NORMAL) { + //log_error("%s - ca_create_subscription failed", __FUNCTION__); + return status; + + } + /* + if(ca_pend_event(0.0) != ECA_NORMAL){ + //log_error("%s - ca_pend_event failed", __FUNCTION__); + return status; + } + */ + status = true; + + return status; +}; + +#endif /* CA_IF_H */ diff --git a/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/configure_sdn.cpp b/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/configure_sdn.cpp new file mode 100644 index 0000000..9088cc2 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/configure_sdn.cpp @@ -0,0 +1,68 @@ +//+====================================================================== +// $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-sdd-translator-parts/tags/CODAC-CORE-6.0.0/org.iter.codac.sdd.translators/src/main/resources/templates/sdn/configure_sdn.cpp.vm $ +// $Id: configure_sdn.cpp.vm 83098 2018-01-08 13:23:38Z cesnikt $ +// +// Project : CODAC Core System +// +// Description : SDN Program - Gyrotron02DAN +// +// Author : Kirti Mahajan, Lana Abadie and TCS (link with velocity and SDD model) +// +// Copyright (c) : 2010-2018 ITER Organization, +// CS 90 046 +// 13067 St. Paul-lez-Durance Cedex +// France +// +// This file is part of ITER CODAC software. +// For the terms and conditions of redistribution or use of this software +// refer to the file ITER-LICENSE.TXT located in the top level directory +// of the distribution package. +// +//-====================================================================== + +#include + +#include +#include "includetopics.h" + +using namespace std; + +/* Create variables for the topics on which application is publishing */ +//+P===================================================================== +//-P===================================================================== + +/* Create variables for topics on which application is subscribing */ +//+S===================================================================== +//-S===================================================================== + +int configureSDN() +{ + + SR_RET sr_ret = SR_OK; + + //+P===================================================================== + //-P===================================================================== + + //+S===================================================================== + //-S===================================================================== + + return sr_ret; + +} + +int cleanupSDN() +{ + + SR_RET sr_ret = SR_OK; + + /* Unregister publisher */ + //+P===================================================================== + //-P===================================================================== + + /* Unregister subscriber */ + //+S===================================================================== + //-S===================================================================== + + return sr_ret; + +} \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/environmentVarDev b/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/environmentVarDev new file mode 100644 index 0000000..fa62c0e --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/environmentVarDev @@ -0,0 +1,17 @@ +######################################## +# Program-specific environment variables +######################################## + +# INFO - This file is part of the I&C project. It can be modified without risk of being overwritten. +# INFO - This file is sourced when invoking 'mvn run -Dprog=' to allow for setting development-specific environment variables. + +# Override SDN interface name for test purposes +# Default: lo +# Project: Target host in SDD database +#SDN_INTERFACE_NAME=lo + +# INFO - This file can be further extended with anything specific required by the program. + +#LOG_FILE_ENABLE=false +#LOG_FILTER_LEVEL=info +#LOG_FWD_MODE=asyn diff --git a/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/includetopics.h b/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/includetopics.h new file mode 100644 index 0000000..0c4212c --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/includetopics.h @@ -0,0 +1,29 @@ +//+====================================================================== +// $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-sdd-translator-parts/tags/CODAC-CORE-6.0.0/org.iter.codac.sdd.translators/src/main/resources/templates/sdn/includetopics.h.vm $ +// $Id: includetopics.h.vm 83098 2018-01-08 13:23:38Z cesnikt $ +// +// Project : CODAC Core System +// +// Description : SDN Program - Gyrotron02DAN +// +// Author : Kirti Mahajan, Lana Abadie and TCS (link with velocity and SDD model) +// +// Copyright (c) : 2010-2018 ITER Organization, +// CS 90 046 +// 13067 St. Paul-lez-Durance Cedex +// France +// +// This file is part of ITER CODAC software. +// For the terms and conditions of redistribution or use of this software +// refer to the file ITER-LICENSE.TXT located in the top level directory +// of the distribution package. +// +//-====================================================================== + +#ifndef INCLUDETOPICS_H +#define INCLUDETOPICS_H + +#include + + +#endif \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/sdd-dan.cpp b/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/sdd-dan.cpp new file mode 100644 index 0000000..00886e0 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/sdd-dan.cpp @@ -0,0 +1,15 @@ +#include "sdd-dan.h" +#include +#include "stdlib.h" + +int declareDANStruct(dan_Source ds ){ + + int result=0; + int Cnt=0; + if(ds==NULL){ + log_error("Invalid call to declareDANStruct, dan source not initialized \n "); + return -1; + } + + return 0; + } \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/sdd-dan.h b/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/sdd-dan.h new file mode 100644 index 0000000..230aa06 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/sdd-dan.h @@ -0,0 +1,8 @@ +#ifndef SDD_DAN_H +#define SDD_DAN_H +#include "dan.h" + +static const char ICProgName[] = "Gyrotron02DAN"; +static const char GYBDanSource[] = "GYBDanSource"; + +#endif /* SDD_DAN_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/sdd-data.h b/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/sdd-data.h new file mode 100644 index 0000000..73f755b --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/sdd-data.h @@ -0,0 +1,14 @@ +#ifndef SDD_DATA_H +#define SDD_DATA_H + +#include "sdd-pon-if.h" +#include "sdd-iomodule.h" + +static SDD_PONVar pvlist []={ + + }; + +static SDD_IOModule iomlist []={ + }; + +#endif /* SDD_DATA_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/sdd-iomodule.h b/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/sdd-iomodule.h new file mode 100644 index 0000000..a8af1fe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/sdd-iomodule.h @@ -0,0 +1,37 @@ +#ifndef SDD_IOMODULE_H +#define SDD_IOMODULE_H + +//include all linux libraries for IO module listed in the programs + + +//max is 15 for component name +#define SDD_CPMAXLENGTH 50 +#define SDD_SERIALNBMAXLENGTH 60 +#define SDD_FDPREFIXMAXLENGTH 100 + +struct SDD_IOModule { + + //name of the module + char name[SDD_CPMAXLENGTH]; + + //type of the module + char modtype[SDD_CPMAXLENGTH]; + + //module index + int fd; + + //file descriptor name + char filedescrip_prefix[SDD_FDPREFIXMAXLENGTH]; + + //serial number + char serial_number [SDD_SERIALNBMAXLENGTH]; + +}; + +//list of symbol for IOModule : IO module type and fd +typedef enum SDD_IOModuleEnum { + + } SDD_IOModuleEnum; + + +#endif /* SDD_IOMODULE_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/sdd-pon-if.h b/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/sdd-pon-if.h new file mode 100644 index 0000000..ea459e6 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/sdd-pon-if.h @@ -0,0 +1,36 @@ +#ifndef SDD_PON_IF_H +#define SDD_PON_IF_H + +#include /* Channel Access API definition, etc. */ + + +#define SDD_PVMAXLENGTH 40 +#define SDD_STRING_MAX_LENGTH 100 +#define SDD_NB_OF_PONVAR 0 //generated by SDD + +struct SDD_PONVar { + + char name[SDD_PVMAXLENGTH]; + + //if read-> monitor=yes otherwise false + bool isMonitored; + + chtype type; + + //the code can cast + char initialvalue[SDD_STRING_MAX_LENGTH]; + +}; + +//list of symbols +typedef enum SDD_PONVarEnum { + + +} SDD_PONVarEnum; + +//for each enum (bi/bo/mbbi/mbbo) name is symbolname suffix with _enum + + + + +#endif /* SDD_PON_IF_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/topicvars.h b/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/topicvars.h new file mode 100644 index 0000000..1a4216b --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/Gyrotron02DAN/topicvars.h @@ -0,0 +1,36 @@ +//+====================================================================== +// $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-sdd-translator-parts/tags/CODAC-CORE-6.0.0/org.iter.codac.sdd.translators/src/main/resources/templates/sdn/topicvars.h.vm $ +// $Id: topicvars.h.vm 83098 2018-01-08 13:23:38Z cesnikt $ +// +// Project : CODAC Core System +// +// Description : SDN Program - Gyrotron02DAN +// +// Author : Kirti Mahajan, Lana Abadie and TCS (link with velocity and SDD model) +// +// Copyright (c) : 2010-2018 ITER Organization, +// CS 90 046 +// 13067 St. Paul-lez-Durance Cedex +// France +// +// This file is part of ITER CODAC software. +// For the terms and conditions of redistribution or use of this software +// refer to the file ITER-LICENSE.TXT located in the top level directory +// of the distribution package. +// +//-====================================================================== + +#ifndef TOPICVARS_H +#define TOPICVARS_H + +#include "includetopics.h" + +/* Declare variables for the topics on which application is publishing. */ +//+P===================================================================== +//-P===================================================================== + +/* Declare variables for the topics to which application is subscribing. */ +//+S===================================================================== +//-S===================================================================== + +#endif diff --git a/EC-GN-JA-PCF/src/main/c++/Makefile b/EC-GN-JA-PCF/src/main/c++/Makefile new file mode 100644 index 0000000..0a725f5 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/Makefile @@ -0,0 +1,31 @@ +#+====================================================================== +# $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp/main/c++/Makefile $ +# $Id: Makefile 83098 2018-01-08 13:23:38Z cesnikt $ +# +# Project : CODAC Core System +# +# Description : C++ Makefile +# +# Author : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2018 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== + +SUBDIRS=$(dir $(wildcard */Makefile)) + +BOLD=\e[1m +NC=\e[0m + +all: + +%: + @$(foreach dir, $(SUBDIRS), echo -e "$(BOLD)Building $(dir:/=)...$(NC)" && $(MAKE) -C $(dir) $@ &&) : diff --git a/EC-GN-JA-PCF/src/main/c++/conf/Gyrotron01DAN_danconf.xml b/EC-GN-JA-PCF/src/main/c++/conf/Gyrotron01DAN_danconf.xml new file mode 100644 index 0000000..01faa30 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/conf/Gyrotron01DAN_danconf.xml @@ -0,0 +1,101 @@ + + + + + 1.0.0 + + + + danInt16 + + 100000 + + + DATA_D0 + + DM_BLOCK2D_VAR + + CHECK_AND_OVERWRITE + + 1000 + + 1 + + UTC + + + + GYADanSource + + v1.3 + + 0 + + N1134342 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ALL + + + + + + IF_FAIL_NEXT + + ${DAN_ARCHIVE_MASTER} + + ${DAN_ARCHIVE_SLAVE} + + + + + diff --git a/EC-GN-JA-PCF/src/main/c++/conf/Gyrotron02DAN_danconf.xml b/EC-GN-JA-PCF/src/main/c++/conf/Gyrotron02DAN_danconf.xml new file mode 100644 index 0000000..5607efe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/conf/Gyrotron02DAN_danconf.xml @@ -0,0 +1,101 @@ + + + + + 1.0.0 + + + + danInt16 + + 100000 + + + DATA_D0 + + DM_BLOCK2D_VAR + + CHECK_AND_OVERWRITE + + 1000 + + 1 + + UTC + + + + GYBDanSource + + v1.3 + + 0 + + N1134342 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ALL + + + + + + IF_FAIL_NEXT + + ${DAN_ARCHIVE_MASTER} + + ${DAN_ARCHIVE_SLAVE} + + + + + diff --git a/EC-GN-JA-PCF/src/main/c++/conf/environmentVarDev b/EC-GN-JA-PCF/src/main/c++/conf/environmentVarDev new file mode 100644 index 0000000..ab5d5da --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/conf/environmentVarDev @@ -0,0 +1,14 @@ +############################################ +# I&C project-specific environment variables +############################################ + +# INFO - This file is part of the I&C project. It can be modified without risk of being overwritten. +# INFO - This file is sourced when invoking 'mvn run' to allow for setting development-specific environment variables. + +# INFO - This file can be further extended with anything specific required by the I&C project. + +#LOG_FILE_ENABLE=false +#LOG_FILTER_LEVEL=info +#LOG_FWD_MODE=asyn + +export DAN_ARCHIVE_MASTER=192.168.102.3:9999 \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/c++/include/ccs-headers.h b/EC-GN-JA-PCF/src/main/c++/include/ccs-headers.h new file mode 100644 index 0000000..2f10a54 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/include/ccs-headers.h @@ -0,0 +1,36 @@ +#ifndef CCS_HEADERS_H +#define CCS_HEADERS_H + +/****************************************************************************** +* $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp/main/c++/include/ccs-headers.h $ +* $Id: ccs-headers.h 83715 2018-01-30 16:31:40Z abadiel $ +* +* Project : CODAC Core System +* +* Description : CODAC Core System - Commonly used program headers +* +* Author : Bertrand Bauvir +* +* Copyright (c) : 2010-2018 ITER Organization, +* CS 90 046 +* 13067 St. Paul-lez-Durance Cedex +* France +* +* This file is part of ITER CODAC software. +* For the terms and conditions of redistribution or use of this software +* refer to the file ITER-LICENSE.TXT located in the top level directory +* of the distribution package. +******************************************************************************/ + +/* log.h -- Part of CCS. It includes the declaration of the logging library API. */ +#include /* This file is mandatory to compile this program against the logging library and API. */ + +/* sdn.h -- Part of CCS. It includes the declaration of the SDN library API. */ +#include /* This file is mandatory to compile this program against the SDN core library and API. */ + +/* tcn.h -- Part of CCS. It includes the declaration of the TCN library API. */ +#include /* This file is optional and can be removed if the program does not need to handle ITER time or operate on it. */ + +/* dan.h -- part of CCS. It includes the declaration of the DAN library API. */ +#include /* This file is optional and can be removed if the program does not need to handle ITER time or operate on it. */ +#endif /* CCS_HEADERS_H */ diff --git a/EC-GN-JA-PCF/src/main/c++/include/sys-headers.h b/EC-GN-JA-PCF/src/main/c++/include/sys-headers.h new file mode 100644 index 0000000..00318e3 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/c++/include/sys-headers.h @@ -0,0 +1,32 @@ +#ifndef SYS_HEADERS_H +#define SYS_HEADERS_H + +/****************************************************************************** +* $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp/main/c++/include/sys-headers.h $ +* $Id: sys-headers.h 83098 2018-01-08 13:23:38Z cesnikt $ +* +* Project : CODAC Core System +* +* Description : CODAC Core System - Commonly used program headers +* +* Author : Bertrand Bauvir +* +* Copyright (c) : 2010-2018 ITER Organization, +* CS 90 046 +* 13067 St. Paul-lez-Durance Cedex +* France +* +* This file is part of ITER CODAC software. +* For the terms and conditions of redistribution or use of this software +* refer to the file ITER-LICENSE.TXT located in the top level directory +* of the distribution package. +******************************************************************************/ + +#include +#include /* sscanf, printf, etc. */ +//#include +#include /* strncpy, etc. */ +#include /* va_start, etc. */ +#include /* sigset, etc. */ + +#endif /* SYS_HEADERS_H */ diff --git a/EC-GN-JA-PCF/src/main/epics/CUBApp/.appdesc b/EC-GN-JA-PCF/src/main/epics/CUBApp/.appdesc new file mode 100644 index 0000000..df999dd --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/CUBApp/.appdesc @@ -0,0 +1 @@ +generic \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/epics/CUBApp/Db/Makefile b/EC-GN-JA-PCF/src/main/epics/CUBApp/Db/Makefile new file mode 100644 index 0000000..3ef937f --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/CUBApp/Db/Makefile @@ -0,0 +1,24 @@ +TOP=../.. +include $(TOP)/configure/CONFIG +#---------------------------------------- +# ADD MACRO DEFINITIONS AFTER THIS LINE + +#---------------------------------------------------- +# Optimization of db files using dbst (DEFAULT: NO) +#DB_OPT = YES + +#---------------------------------------------------- +# Create and install (or just install) +# databases, templates, substitutions like this + + +# Automagically install .proto files +DB += $(notdir $(wildcard ../*.proto)) + +#---------------------------------------------------- +# If .db template is not named *.template add +# _TEMPLATE = + +include $(TOP)/configure/RULES +#---------------------------------------- +# ADD RULES AFTER THIS LINE diff --git a/EC-GN-JA-PCF/src/main/epics/CUBApp/Makefile b/EC-GN-JA-PCF/src/main/epics/CUBApp/Makefile new file mode 100644 index 0000000..6504a77 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/CUBApp/Makefile @@ -0,0 +1,29 @@ +#+====================================================================== +# $HeadURL: https://svnpub.codac.iter.org/codac/iter/codac/dev/units/m-epics-iter-templates/branches/codac-core-6.1/templates/genericApp/Makefile $ +# $Id: Makefile 96475 2019-01-09 13:47:38Z sivecm $ +# +# Project : CODAC Core System +# +# Description : Makefile +# +# Author(s) : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2019 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== +TOP = .. +include $(TOP)/configure/CONFIG +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *src*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *Src*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *db*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *Db*)) +include $(TOP)/configure/RULES_DIRS + diff --git a/EC-GN-JA-PCF/src/main/epics/CUBApp/src/CUBMain.cpp b/EC-GN-JA-PCF/src/main/epics/CUBApp/src/CUBMain.cpp new file mode 100644 index 0000000..4e9e67d --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/CUBApp/src/CUBMain.cpp @@ -0,0 +1,25 @@ +/* CUBMain.cpp */ +/* Author: Marty Kraimer Date: 17MAR2000 */ + +#include +#include +#include +#include +#include +#include + +#include "epicsExit.h" +#include "epicsThread.h" +#include "iocsh.h" + +int main(int argc,char *argv[]) +{ + sigset(SIGTERM, epicsExit); + if(argc>=2) { + iocsh(argv[1]); + epicsThreadSleep(.2); + } + iocsh(NULL); + epicsExit(0); + return(0); +} diff --git a/EC-GN-JA-PCF/src/main/epics/CUBApp/src/Makefile b/EC-GN-JA-PCF/src/main/epics/CUBApp/src/Makefile new file mode 100644 index 0000000..9dc4a82 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/CUBApp/src/Makefile @@ -0,0 +1,59 @@ +TOP=../.. + +include $(TOP)/configure/CONFIG +#---------------------------------------- +# ADD MACRO DEFINITIONS AFTER THIS LINE +#======================================== + +#======================================== +# Build the IOC application + +PROD_IOC = CUB +# CUB.dbd will be created and installed +DBD += CUB.dbd + +# CUB.dbd will be made up from these files: +-include $(EPICS_ROOT)/mk/codac-common.mk + + +# Add all the support libraries needed by this IOC +-include $(EPICS_ROOT)/mk/asyn.mk +-include $(EPICS_ROOT)/mk/s7PLCAsyn.mk + +CUB_DBD += $(CODAC_DBD) +CUB_LIBS += $(CODAC_LIBS) + +# # SNCSEQ +# _SNCFLAGS += +r -c +d +# CUB_DBD += .dbd +# CUB_SRCS += .stt +# CUB_LIBS += seq pv + + +# CUB_registerRecordDeviceDriver.cpp derives from CUB.dbd +CUB_SRCS += CUB_registerRecordDeviceDriver.cpp + +# Build the main IOC entry point on workstation OSs. +CUB_SRCS_DEFAULT += CUBMain.cpp +CUB_SRCS_vxWorks += -nil- + +# Add support from base/src/vxWorks if needed +#CUB_OBJS_vxWorks += $(EPICS_BASE_BIN)/vxComLibrary + +#============================= +# Include SNL program makefile snippets + +-include ../*.snlprog + +#============================= + + +# Finally link to the EPICS Base libraries +CUB_LIBS += $(EPICS_BASE_IOC_LIBS) + +#=========================== + +include $(TOP)/configure/RULES +#---------------------------------------- +# ADD RULES AFTER THIS LINE +#---------------------------------------- diff --git a/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/Makefile b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/Makefile new file mode 100755 index 0000000..a526c7e --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/Makefile @@ -0,0 +1,44 @@ +TOP=../.. +include $(TOP)/configure/CONFIG +#---------------------------------------- +# ADD MACRO DEFINITIONS AFTER THIS LINE + +#---------------------------------------------------- +# Optimization of db files using dbst (DEFAULT: NO) +#DB_OPT = YES + +#---------------------------------------------------- +# Create and install (or just install) into /db +# databases, templates, substitutions like this +DB += PCF0-EC-GN-HWCF-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GAF-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GAF-CCPS-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GAF-FHPS-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GAF-GCPS-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GAF-MCPS-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GAFP-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GBF-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GBF-CCPS-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GBF-FHPS-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GBF-GCPS-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GBF-MCPS-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GBFP-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GPF-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GPS-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-PA1F-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-PA2F-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-PB1F-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-PB2F-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-PMF-iocEC-GN-PSH0PCF.db + + +# Automagically install .proto files +DB += $(notdir $(wildcard ../*.proto)) + +#---------------------------------------------------- +# If .db template is not named *.template add +# _template = + +include $(TOP)/configure/RULES +#---------------------------------------- +# ADD RULES AFTER THIS LINE diff --git a/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-HWCF-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-HWCF-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..9d7c2e6 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-HWCF-iocEC-GN-PSH0PCF.db @@ -0,0 +1,1712 @@ +record (bo,"EC-GN-HWCF:6259-0-ACQ") +{ + field(DESC, "Start/Stop data acquisition") + field(DTYP, "ni6259") + field(ONAM, "START-ACQUISITION") + field(OUT, "#C1 S0 @switch_acquisition") + field(PHAS, "2") + field(PINI, "YES") + field(VAL, "1") + field(ZNAM, "STOP-ACQUISITION") +} + +record (bo,"EC-GN-HWCF:6259-0-CONF") +{ + field(DESC, "Load/reset analog input configuration") + field(DTYP, "ni6259") + field(ONAM, "LOAD-CONF") + field(OUT, "#C1 S0 @ai_conf") + field(PHAS, "1") + field(PINI, "YES") + field(VAL, "1") + field(ZNAM, "RESET-CONF") +} + +record (bo,"EC-GN-HWCF:6259-0-MODE") +{ + field(DESC, "continuous or finite mode") + field(DTYP, "ni6259") + field(ONAM, "CONTINUOUS") + field(OUT, "#C1 S0 @daq_mode") + field(PINI, "YES") + field(VAL, "1") + field(ZNAM, "FINITE") +} + +record (bo,"EC-GN-HWCF:6259-1-ACQ") +{ + field(DESC, "Start/Stop data acquisition") + field(DTYP, "ni6259") + field(ONAM, "START-ACQUISITION") + field(OUT, "#C0 S0 @switch_acquisition") + field(PHAS, "2") + field(PINI, "YES") + field(VAL, "1") + field(ZNAM, "STOP-ACQUISITION") +} + +record (bo,"EC-GN-HWCF:6259-1-CONF") +{ + field(DESC, "Load/reset analog input configuration") + field(DTYP, "ni6259") + field(ONAM, "LOAD-CONF") + field(OUT, "#C0 S0 @ai_conf") + field(PHAS, "1") + field(PINI, "YES") + field(VAL, "1") + field(ZNAM, "RESET-CONF") +} + +record (bo,"EC-GN-HWCF:6259-1-MODE") +{ + field(DESC, "continuous or finite mode") + field(DTYP, "ni6259") + field(ONAM, "CONTINUOUS") + field(OUT, "#C0 S0 @daq_mode") + field(PINI, "YES") + field(VAL, "1") + field(ZNAM, "FINITE") +} + +record (bo,"EC-GN-HWCF:6368-0-AISTSP") +{ + field(DESC, "Start/Stop AI Segment") + field(DTYP, "asynInt32") + field(ONAM, "Start") + field(OUT, "@asyn(ni6368_1, 0) start_stop_ai") + field(PHAS, "2") + field(PINI, "YES") + field(VAL, "0") + field(ZNAM, "Stop") +} + +record (bo,"EC-GN-HWCF:6368-0-AOSTSP") +{ + field(DESC, "Start/Stop AO Segment") + field(DTYP, "asynInt32") + field(ONAM, "Start") + field(OUT, "@asyn(ni6368_1, 0) start_stop_ao") + field(VAL, "0") + field(ZNAM, "Stop") +} + +record (bo,"EC-GN-HWCF:6368-0-LDAICF") +{ + field(DESC, "Load/Reset AI Configuration") + field(DTYP, "asynInt32") + field(ONAM, "Load") + field(OUT, "@asyn(ni6368_1, 0) ai_conf") + field(PHAS, "1") + field(PINI, "YES") + field(VAL, "0") + field(ZNAM, "Reset") +} + +record (bo,"EC-GN-HWCF:6368-0-LDAOCF") +{ + field(DESC, "Load/Reset AO Configuration") + field(DTYP, "asynInt32") + field(ONAM, "Load") + field(OUT, "@asyn(ni6368_1, 0) ao_conf") + field(VAL, "0") + field(ZNAM, "Reset") +} + +record (bo,"EC-GN-HWCF:6368-1-AISTSP") +{ + field(DESC, "Start/Stop AI Segment") + field(DTYP, "asynInt32") + field(ONAM, "Start") + field(OUT, "@asyn(ni6368_0, 0) start_stop_ai") + field(PHAS, "2") + field(PINI, "YES") + field(VAL, "0") + field(ZNAM, "Stop") +} + +record (bo,"EC-GN-HWCF:6368-1-AOSTSP") +{ + field(DESC, "Start/Stop AO Segment") + field(DTYP, "asynInt32") + field(ONAM, "Start") + field(OUT, "@asyn(ni6368_0, 0) start_stop_ao") + field(VAL, "0") + field(ZNAM, "Stop") +} + +record (bo,"EC-GN-HWCF:6368-1-LDAICF") +{ + field(DESC, "Load/Reset AI Configuration") + field(DTYP, "asynInt32") + field(ONAM, "Load") + field(OUT, "@asyn(ni6368_0, 0) ai_conf") + field(PHAS, "1") + field(PINI, "YES") + field(VAL, "0") + field(ZNAM, "Reset") +} + +record (bo,"EC-GN-HWCF:6368-1-LDAOCF") +{ + field(DESC, "Load/Reset AO Configuration") + field(DTYP, "asynInt32") + field(ONAM, "Load") + field(OUT, "@asyn(ni6368_0, 0) ao_conf") + field(VAL, "0") + field(ZNAM, "Reset") +} + +record (bi,"EC-GN-HWCF:6683-0-BLKTMO") +{ + field(DESC, "Block until Finished...") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0) waitForTimeOver") + field(SCAN, "I/O Intr") +} + +record (bo,"EC-GN-HWCF:6683-0-FTEAALL") +{ + field(DESC, "Abort all pending FTEs") + field(DTYP, "asynInt32") + field(ONAM, "1") + field(OUT, "@asyn(ni6683h_0,0)abortAllFtes") + field(VAL, "0") + field(ZNAM, "0") +} + +record (bo,"EC-GN-HWCF:6683-0-RESET") +{ + field(DESC, "Reset Board") + field(DTYP, "asynInt32") + field(ONAM, "1") + field(OUT, "@asyn(ni6683h_0,0)resetCard") + field(VAL, "0") + field(ZNAM, "0") +} + +record (bi,"EC-GN-HWCF:6683-0-TAIUTC") +{ + field(DESC, "PXI-6683.0 TAI/UTC Selection") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)taiutcStatus") + field(ONAM, "TAI") + field(OSV, "MINOR") + field(PINI, "YES") + field(SCAN, "10 second") + field(ZNAM, "UTC") + field(ZSV, "NO_ALARM") +} + +record (stringin,"EC-GN-HWCF:6259-0-DMSG") +{ + field(DESC, "Driver Debug Message") + field(DTYP, "ni6259") + field(INP, "#C1 S0 @dsg") + field(SCAN, "1 second") +} + +record (longout,"EC-GN-HWCF:6259-0-NS") +{ + field(DESC, "number of samples to read") + field(DRVH, "32000") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HIGH, "32001") + field(HOPR, "32000") + field(HSV, "MAJOR") + field(LOPR, "0") + field(LOW, "0") + field(LSV, "MAJOR") + field(OUT, "#C1 S0 @num_samples") + field(PINI, "YES") + field(VAL, "5000") +} + +record (longout,"EC-GN-HWCF:6259-0-POST") +{ + field(DESC, "Posttrigger samples") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "#C1 S0 @posttrig_samples") + field(PINI, "YES") + field(VAL, "4000") +} + +record (longout,"EC-GN-HWCF:6259-0-PRET") +{ + field(DESC, "Pretrigger samples") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "#C1 S0 @pretrig_samples") + field(PINI, "YES") + field(VAL, "2000") +} + +record (calcout,"EC-GN-HWCF:6259-0-SCCC") +{ + field(DESC, "") + field(CALC, "(A==11 andand B >7) || (A!=1 andand A!=11) ? 0: B") + field(HOPR, "15") + field(INPA, "EC-GN-HWCF:6259-0-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6259-0-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6259-0-SCCH PP") +} + +record (mbbo,"EC-GN-HWCF:6259-0-SCCH") +{ + field(DESC, "") + field(EIST, "8") + field(EIVL, "8") + field(ELST, "11") + field(ELVL, "11") + field(FFST, "15") + field(FFVL, "15") + field(FLNK, "EC-GN-HWCF:6259-0-SCCO") + field(FRST, "4") + field(FRVL, "4") + field(FTST, "14") + field(FTVL, "14") + field(FVST, "5") + field(FVVL, "5") + field(NIST, "9") + field(NIVL, "9") + field(ONST, "1") + field(ONVL, "1") + field(PINI, "YES") + field(SVST, "7") + field(SVVL, "7") + field(SXST, "6") + field(SXVL, "6") + field(TEST, "10") + field(TEVL, "10") + field(THST, "3") + field(THVL, "3") + field(TTST, "13") + field(TTVL, "13") + field(TVST, "12") + field(TVVL, "12") + field(TWST, "2") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "0") + field(ZRVL, "0") +} + +record (calcout,"EC-GN-HWCF:6259-0-SCCO") +{ + field(DESC, "") + field(CALC, "A==1?(B<10?A+B:B+11):(A==11?(B<7?A+B:(A>7?0:27)):A)") + field(FLNK, "EC-GN-HWCF:6259-0-SCCC") + field(HOPR, "31") + field(INPA, "EC-GN-HWCF:6259-0-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6259-0-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6259-0-SCLK PP") +} + +record (longout,"EC-GN-HWCF:6259-0-SCLK") +{ + field(DESC, "") + field(DRVH, "31") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HOPR, "31") + field(LOPR, "0") + field(OUT, "#C1 S0 @sample_clock_ai") +} + +record (mbbo,"EC-GN-HWCF:6259-0-SCTY") +{ + field(DESC, "") + field(FLNK, "EC-GN-HWCF:6259-0-SCCO") + field(FRST, "STAR_Trigger") + field(FRVL, "20") + field(FVST, "Analog_Trigger") + field(FVVL, "30") + field(ONST, "PFI") + field(ONVL, "1") + field(PINI, "YES") + field(SXST, "Logic_Low") + field(SXVL, "31") + field(THST, "GCRTOUT") + field(THVL, "19") + field(TWST, "PXI_Trigger") + field(TWVL, "11") + field(VAL, "0") + field(ZRST, "Internal") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6259-0-SR") +{ + field(DESC, "ADC Sampling Rate") + field(DTYP, "ni6259") + field(EGU, "Hz") + field(HIGH, "1000001") + field(HSV, "MAJOR") + field(OUT, "#C1 S0 @sample_rate") + field(PINI, "YES") + field(VAL, "1000000") +} + +record (mbbi,"EC-GN-HWCF:6259-0-STATUS") +{ + field(DESC, "PXI-6259.0 Board Status") + field(DTYP, "ni6259") + field(EIST, "ADC Overrun") + field(EISV, "MAJOR") + field(EIVL, "8") + field(ELST, "Reserved1") + field(ELSV, "INVALID") + field(ELVL, "11") + field(FFST, "MSC_Error") + field(FFSV, "MAJOR") + field(FFVL, "15") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FTST, "Reserved4") + field(FTSV, "INVALID") + field(FTVL, "14") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "#C1 S0 @BoardStatus") + field(NIST, "DAC Overrun") + field(NISV, "MAJOR") + field(NIVL, "9") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, ".1 second") + field(SVST, "AI_FIFO Overflow") + field(SVSV, "MAJOR") + field(SVVL, "7") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(TEST, "Reserved0") + field(TESV, "INVALID") + field(TEVL, "10") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TTST, "Reserved3") + field(TTSV, "INVALID") + field(TTVL, "13") + field(TVST, "Reserved2") + field(TVSV, "INVALID") + field(TVVL, "12") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (stringin,"EC-GN-HWCF:6259-1-DMSG") +{ + field(DESC, "Driver Debug Message") + field(DTYP, "ni6259") + field(INP, "#C0 S0 @dsg") + field(SCAN, "1 second") +} + +record (longout,"EC-GN-HWCF:6259-1-NS") +{ + field(DESC, "number of samples to read") + field(DRVH, "32000") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HIGH, "32001") + field(HOPR, "32000") + field(HSV, "MAJOR") + field(LOPR, "0") + field(LOW, "0") + field(LSV, "MAJOR") + field(OUT, "#C0 S0 @num_samples") + field(PINI, "YES") + field(VAL, "5000") +} + +record (longout,"EC-GN-HWCF:6259-1-POST") +{ + field(DESC, "Posttrigger samples") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "#C0 S0 @posttrig_samples") + field(PINI, "YES") + field(VAL, "4000") +} + +record (longout,"EC-GN-HWCF:6259-1-PRET") +{ + field(DESC, "Pretrigger samples") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "#C0 S0 @pretrig_samples") + field(PINI, "YES") + field(VAL, "2000") +} + +record (calcout,"EC-GN-HWCF:6259-1-SCCC") +{ + field(DESC, "") + field(CALC, "(A==11 andand B >7) || (A!=1 andand A!=11) ? 0: B") + field(HOPR, "15") + field(INPA, "EC-GN-HWCF:6259-1-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6259-1-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6259-1-SCCH PP") +} + +record (mbbo,"EC-GN-HWCF:6259-1-SCCH") +{ + field(DESC, "") + field(EIST, "8") + field(EIVL, "8") + field(ELST, "11") + field(ELVL, "11") + field(FFST, "15") + field(FFVL, "15") + field(FLNK, "EC-GN-HWCF:6259-1-SCCO") + field(FRST, "4") + field(FRVL, "4") + field(FTST, "14") + field(FTVL, "14") + field(FVST, "5") + field(FVVL, "5") + field(NIST, "9") + field(NIVL, "9") + field(ONST, "1") + field(ONVL, "1") + field(PINI, "YES") + field(SVST, "7") + field(SVVL, "7") + field(SXST, "6") + field(SXVL, "6") + field(TEST, "10") + field(TEVL, "10") + field(THST, "3") + field(THVL, "3") + field(TTST, "13") + field(TTVL, "13") + field(TVST, "12") + field(TVVL, "12") + field(TWST, "2") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "0") + field(ZRVL, "0") +} + +record (calcout,"EC-GN-HWCF:6259-1-SCCO") +{ + field(DESC, "") + field(CALC, "A==1?(B<10?A+B:B+11):(A==11?(B<7?A+B:(A>7?0:27)):A)") + field(FLNK, "EC-GN-HWCF:6259-1-SCCC") + field(HOPR, "31") + field(INPA, "EC-GN-HWCF:6259-1-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6259-1-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6259-1-SCLK PP") +} + +record (longout,"EC-GN-HWCF:6259-1-SCLK") +{ + field(DESC, "") + field(DRVH, "31") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HOPR, "31") + field(LOPR, "0") + field(OUT, "#C0 S0 @sample_clock_ai") +} + +record (mbbo,"EC-GN-HWCF:6259-1-SCTY") +{ + field(DESC, "") + field(FLNK, "EC-GN-HWCF:6259-1-SCCO") + field(FRST, "STAR_Trigger") + field(FRVL, "20") + field(FVST, "Analog_Trigger") + field(FVVL, "30") + field(ONST, "PFI") + field(ONVL, "1") + field(PINI, "YES") + field(SXST, "Logic_Low") + field(SXVL, "31") + field(THST, "GCRTOUT") + field(THVL, "19") + field(TWST, "PXI_Trigger") + field(TWVL, "11") + field(VAL, "0") + field(ZRST, "Internal") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6259-1-SR") +{ + field(DESC, "ADC Sampling Rate") + field(DTYP, "ni6259") + field(EGU, "Hz") + field(HIGH, "1000001") + field(HSV, "MAJOR") + field(OUT, "#C0 S0 @sample_rate") + field(PINI, "YES") + field(VAL, "1000000") +} + +record (mbbi,"EC-GN-HWCF:6259-1-STATUS") +{ + field(DESC, "PXI-6259.1 Board Status") + field(DTYP, "ni6259") + field(EIST, "ADC Overrun") + field(EISV, "MAJOR") + field(EIVL, "8") + field(ELST, "Reserved1") + field(ELSV, "INVALID") + field(ELVL, "11") + field(FFST, "MSC_Error") + field(FFSV, "MAJOR") + field(FFVL, "15") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FTST, "Reserved4") + field(FTSV, "INVALID") + field(FTVL, "14") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "#C0 S0 @BoardStatus") + field(NIST, "DAC Overrun") + field(NISV, "MAJOR") + field(NIVL, "9") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, ".1 second") + field(SVST, "AI_FIFO Overflow") + field(SVSV, "MAJOR") + field(SVVL, "7") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(TEST, "Reserved0") + field(TESV, "INVALID") + field(TEVL, "10") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TTST, "Reserved3") + field(TTSV, "INVALID") + field(TTVL, "13") + field(TVST, "Reserved2") + field(TVSV, "INVALID") + field(TVVL, "12") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-HWCF:6368-0-AIPU") +{ + field(DESC, "Software Pulse") + field(DTYP, "asynInt32") + field(FRST, "UPDATECLK") + field(FRVL, "4") + field(ONST, "CONVERTERCLK") + field(ONVL, "1") + field(OUT, "@asyn(ni6368_1, 0) pulse_ai") + field(THST, "REFTRIG") + field(THVL, "3") + field(TWST, "STARTTRIG") + field(TWVL, "2") + field(VAL, "2") + field(ZRST, "SAMPLECLK") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6368-0-AISMPL") +{ + field(DESC, "No of AI sample to be acquire in Block") + field(DRVH, "32000") + field(DRVL, "1") + field(DTYP, "asynInt32") + field(HOPR, "32000") + field(LOPR, "1") + field(OUT, "@asyn(ni6368_1, 0) no_of_samples") + field(PINI, "YES") + field(VAL, "1") +} + +record (longout,"EC-GN-HWCF:6368-0-AISR") +{ + field(DESC, "AI Sampling Rate") + field(DRVH, "2000000") + field(DRVL, "1") + field(DTYP, "asynInt32") + field(HOPR, "2000000") + field(LOPR, "1") + field(OUT, "@asyn(ni6368_1, 0) sampling_rate_ai") + field(PINI, "YES") + field(VAL, "1000000") +} + +record (longout,"EC-GN-HWCF:6368-0-AITB") +{ + field(DESC, "AI Timebase source") + field(DRVH, "60") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "60") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 0) timebase_ai") + field(VAL, "0") +} + +record (mbbo,"EC-GN-HWCF:6368-0-AOPU") +{ + field(DESC, "AO Pulse Source") + field(DTYP, "asynInt32") + field(FRST, "UPDATECLK") + field(FRVL, "4") + field(ONST, "CONVERTERCLK") + field(ONVL, "1") + field(OUT, "@asyn(ni6368_1, 0) pulse_ao") + field(THST, "REFTRIG") + field(THVL, "3") + field(TWST, "STARTTRIG") + field(TWVL, "2") + field(VAL, "2") + field(ZRST, "SAMPLECLK") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6368-0-AOTB") +{ + field(DESC, "AO Timebase source") + field(DRVH, "60") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "60") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 0) timebase_ao") + field(VAL, "0") +} + +record (mbbo,"EC-GN-HWCF:6368-0-CHAIMO") +{ + field(DESC, "Change AI Configuration") + field(DTYP, "asynInt32") + field(FRST, "PreTriggered") + field(FRVL, "7") + field(ONST, "ReTrigger") + field(ONVL, "3") + field(OUT, "@asyn(ni6368_1, 0) ai_mode") + field(PINI, "YES") + field(THST, "SoftwareTimed") + field(THVL, "6") + field(TWST, "Continuous") + field(TWVL, "4") + field(VAL, "2") + field(ZRST, "Finite") + field(ZRVL, "2") +} + +record (mbbo,"EC-GN-HWCF:6368-0-CHAOMO") +{ + field(DESC, "Change AO Configuration") + field(DTYP, "asynInt32") + field(FRST, "PreTriggered") + field(FRVL, "7") + field(ONST, "ReTrigger") + field(ONVL, "3") + field(OUT, "@asyn(ni6368_1, 0) ao_mode") + field(THST, "SoftwareTimed") + field(THVL, "6") + field(TWST, "Continuous") + field(TWVL, "4") + field(VAL, "2") + field(ZRST, "Finite") + field(ZRVL, "2") +} + +record (longout,"EC-GN-HWCF:6368-0-POST") +{ + field(DESC, "Number of AI sample to be acquire") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 0) posttrig_samples") + field(PINI, "YES") + field(VAL, "1") +} + +record (longout,"EC-GN-HWCF:6368-0-PRET") +{ + field(DESC, "Number of AI sample to be acquire") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 0) pretrig_samples") + field(PINI, "YES") + field(VAL, "0") +} + +record (calcout,"EC-GN-HWCF:6368-0-SCCC") +{ + field(DESC, "") + field(CALC, "(A==11 andand B >7) || (A!=1 andand A!=11) ? 0: B") + field(HOPR, "15") + field(INPA, "EC-GN-HWCF:6368-0-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6368-0-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6368-0-SCCH PP") +} + +record (mbbo,"EC-GN-HWCF:6368-0-SCCH") +{ + field(DESC, "") + field(EIST, "8") + field(EIVL, "8") + field(ELST, "11") + field(ELVL, "11") + field(FFST, "15") + field(FFVL, "15") + field(FLNK, "EC-GN-HWCF:6368-0-SCCO") + field(FRST, "4") + field(FRVL, "4") + field(FTST, "14") + field(FTVL, "14") + field(FVST, "5") + field(FVVL, "5") + field(NIST, "9") + field(NIVL, "9") + field(ONST, "1") + field(ONVL, "1") + field(PINI, "YES") + field(SVST, "7") + field(SVVL, "7") + field(SXST, "6") + field(SXVL, "6") + field(TEST, "10") + field(TEVL, "10") + field(THST, "3") + field(THVL, "3") + field(TTST, "13") + field(TTVL, "13") + field(TVST, "12") + field(TVVL, "12") + field(TWST, "2") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "0") + field(ZRVL, "0") +} + +record (calcout,"EC-GN-HWCF:6368-0-SCCO") +{ + field(DESC, "") + field(CALC, "A==1?(B<10?A+B:B+11):(A==11?(B<7?A+B:(A>7?0:27)):A)") + field(FLNK, "EC-GN-HWCF:6368-0-SCCC") + field(HOPR, "31") + field(INPA, "EC-GN-HWCF:6368-0-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6368-0-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6368-0-SCLK PP") +} + +record (longout,"EC-GN-HWCF:6368-0-SCLK") +{ + field(DESC, "") + field(DRVH, "31") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "31") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 0)sample_clock_ai") +} + +record (mbbo,"EC-GN-HWCF:6368-0-SCTY") +{ + field(DESC, "") + field(FLNK, "EC-GN-HWCF:6368-0-SCCO") + field(FRST, "STAR_Trigger") + field(FRVL, "20") + field(FVST, "Analog_Trigger") + field(FVVL, "30") + field(ONST, "PFI") + field(ONVL, "1") + field(PINI, "YES") + field(SXST, "Logic_Low") + field(SXVL, "31") + field(THST, "GCRTOUT") + field(THVL, "19") + field(TWST, "PXI_Trigger") + field(TWVL, "11") + field(VAL, "0") + field(ZRST, "Internal") + field(ZRVL, "0") +} + +record (mbbi,"EC-GN-HWCF:6368-0-STATUS") +{ + field(DESC, "PXIe-6368.0 Board Status") + field(DTYP, "asynInt32") + field(EIST, "DIHW_Error") + field(EISV, "MAJOR") + field(EIVL, "8") + field(ELST, "GPCHW_Error") + field(ELSV, "MAJOR") + field(ELVL, "11") + field(FFST, "MSC_Error") + field(FFSV, "MAJOR") + field(FFVL, "15") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FTST, "Reserved2") + field(FTSV, "INVALID") + field(FTVL, "14") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "@asyn(ni6368_1, 0) board_status") + field(NIST, "AOHW_Error") + field(NISV, "MAJOR") + field(NIVL, "9") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, ".1 second") + field(SVST, "AIHW_Error") + field(SVSV, "MAJOR") + field(SVVL, "7") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(TEST, "DOHW_Error") + field(TESV, "MAJOR") + field(TEVL, "10") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TTST, "Reserved1") + field(TTSV, "INVALID") + field(TTVL, "13") + field(TVST, "Reserved0") + field(TVSV, "INVALID") + field(TVVL, "12") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-HWCF:6368-1-AIPU") +{ + field(DESC, "Software Pulse") + field(DTYP, "asynInt32") + field(FRST, "UPDATECLK") + field(FRVL, "4") + field(ONST, "CONVERTERCLK") + field(ONVL, "1") + field(OUT, "@asyn(ni6368_0, 0) pulse_ai") + field(THST, "REFTRIG") + field(THVL, "3") + field(TWST, "STARTTRIG") + field(TWVL, "2") + field(VAL, "2") + field(ZRST, "SAMPLECLK") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6368-1-AISMPL") +{ + field(DESC, "No of AI sample to be acquire in Block") + field(DRVH, "32000") + field(DRVL, "1") + field(DTYP, "asynInt32") + field(HOPR, "32000") + field(LOPR, "1") + field(OUT, "@asyn(ni6368_0, 0) no_of_samples") + field(PINI, "YES") + field(VAL, "1") +} + +record (longout,"EC-GN-HWCF:6368-1-AISR") +{ + field(DESC, "AI Sampling Rate") + field(DRVH, "2000000") + field(DRVL, "1") + field(DTYP, "asynInt32") + field(HOPR, "2000000") + field(LOPR, "1") + field(OUT, "@asyn(ni6368_0, 0) sampling_rate_ai") + field(PINI, "YES") + field(VAL, "1000000") +} + +record (longout,"EC-GN-HWCF:6368-1-AITB") +{ + field(DESC, "AI Timebase source") + field(DRVH, "60") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "60") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_0, 0) timebase_ai") + field(VAL, "0") +} + +record (mbbo,"EC-GN-HWCF:6368-1-AOPU") +{ + field(DESC, "AO Pulse Source") + field(DTYP, "asynInt32") + field(FRST, "UPDATECLK") + field(FRVL, "4") + field(ONST, "CONVERTERCLK") + field(ONVL, "1") + field(OUT, "@asyn(ni6368_0, 0) pulse_ao") + field(THST, "REFTRIG") + field(THVL, "3") + field(TWST, "STARTTRIG") + field(TWVL, "2") + field(VAL, "2") + field(ZRST, "SAMPLECLK") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6368-1-AOTB") +{ + field(DESC, "AO Timebase source") + field(DRVH, "60") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "60") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_0, 0) timebase_ao") + field(VAL, "0") +} + +record (mbbo,"EC-GN-HWCF:6368-1-CHAIMO") +{ + field(DESC, "Change AI Configuration") + field(DTYP, "asynInt32") + field(FRST, "PreTriggered") + field(FRVL, "7") + field(ONST, "ReTrigger") + field(ONVL, "3") + field(OUT, "@asyn(ni6368_0, 0) ai_mode") + field(PINI, "YES") + field(THST, "SoftwareTimed") + field(THVL, "6") + field(TWST, "Continuous") + field(TWVL, "4") + field(VAL, "2") + field(ZRST, "Finite") + field(ZRVL, "2") +} + +record (mbbo,"EC-GN-HWCF:6368-1-CHAOMO") +{ + field(DESC, "Change AO Configuration") + field(DTYP, "asynInt32") + field(FRST, "PreTriggered") + field(FRVL, "7") + field(ONST, "ReTrigger") + field(ONVL, "3") + field(OUT, "@asyn(ni6368_0, 0) ao_mode") + field(THST, "SoftwareTimed") + field(THVL, "6") + field(TWST, "Continuous") + field(TWVL, "4") + field(VAL, "2") + field(ZRST, "Finite") + field(ZRVL, "2") +} + +record (longout,"EC-GN-HWCF:6368-1-POST") +{ + field(DESC, "Number of AI sample to be acquire") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_0, 0) posttrig_samples") + field(PINI, "YES") + field(VAL, "1") +} + +record (longout,"EC-GN-HWCF:6368-1-PRET") +{ + field(DESC, "Number of AI sample to be acquire") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_0, 0) pretrig_samples") + field(PINI, "YES") + field(VAL, "0") +} + +record (calcout,"EC-GN-HWCF:6368-1-SCCC") +{ + field(DESC, "") + field(CALC, "(A==11 andand B >7) || (A!=1 andand A!=11) ? 0: B") + field(HOPR, "15") + field(INPA, "EC-GN-HWCF:6368-1-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6368-1-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6368-1-SCCH PP") +} + +record (mbbo,"EC-GN-HWCF:6368-1-SCCH") +{ + field(DESC, "") + field(EIST, "8") + field(EIVL, "8") + field(ELST, "11") + field(ELVL, "11") + field(FFST, "15") + field(FFVL, "15") + field(FLNK, "EC-GN-HWCF:6368-1-SCCO") + field(FRST, "4") + field(FRVL, "4") + field(FTST, "14") + field(FTVL, "14") + field(FVST, "5") + field(FVVL, "5") + field(NIST, "9") + field(NIVL, "9") + field(ONST, "1") + field(ONVL, "1") + field(PINI, "YES") + field(SVST, "7") + field(SVVL, "7") + field(SXST, "6") + field(SXVL, "6") + field(TEST, "10") + field(TEVL, "10") + field(THST, "3") + field(THVL, "3") + field(TTST, "13") + field(TTVL, "13") + field(TVST, "12") + field(TVVL, "12") + field(TWST, "2") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "0") + field(ZRVL, "0") +} + +record (calcout,"EC-GN-HWCF:6368-1-SCCO") +{ + field(DESC, "") + field(CALC, "A==1?(B<10?A+B:B+11):(A==11?(B<7?A+B:(A>7?0:27)):A)") + field(FLNK, "EC-GN-HWCF:6368-1-SCCC") + field(HOPR, "31") + field(INPA, "EC-GN-HWCF:6368-1-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6368-1-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6368-1-SCLK PP") +} + +record (longout,"EC-GN-HWCF:6368-1-SCLK") +{ + field(DESC, "") + field(DRVH, "31") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "31") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_0, 0)sample_clock_ai") +} + +record (mbbo,"EC-GN-HWCF:6368-1-SCTY") +{ + field(DESC, "") + field(FLNK, "EC-GN-HWCF:6368-1-SCCO") + field(FRST, "STAR_Trigger") + field(FRVL, "20") + field(FVST, "Analog_Trigger") + field(FVVL, "30") + field(ONST, "PFI") + field(ONVL, "1") + field(PINI, "YES") + field(SXST, "Logic_Low") + field(SXVL, "31") + field(THST, "GCRTOUT") + field(THVL, "19") + field(TWST, "PXI_Trigger") + field(TWVL, "11") + field(VAL, "0") + field(ZRST, "Internal") + field(ZRVL, "0") +} + +record (mbbi,"EC-GN-HWCF:6368-1-STATUS") +{ + field(DESC, "PXIe-6368.1 Board Status") + field(DTYP, "asynInt32") + field(EIST, "DIHW_Error") + field(EISV, "MAJOR") + field(EIVL, "8") + field(ELST, "GPCHW_Error") + field(ELSV, "MAJOR") + field(ELVL, "11") + field(FFST, "MSC_Error") + field(FFSV, "MAJOR") + field(FFVL, "15") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FTST, "Reserved2") + field(FTSV, "INVALID") + field(FTVL, "14") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "@asyn(ni6368_0, 0) board_status") + field(NIST, "AOHW_Error") + field(NISV, "MAJOR") + field(NIVL, "9") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, ".1 second") + field(SVST, "AIHW_Error") + field(SVSV, "MAJOR") + field(SVVL, "7") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(TEST, "DOHW_Error") + field(TESV, "MAJOR") + field(TEVL, "10") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TTST, "Reserved1") + field(TTSV, "INVALID") + field(TTVL, "13") + field(TVST, "Reserved0") + field(TVSV, "INVALID") + field(TVVL, "12") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6528-0-FILTINT") +{ + field(DESC, "Set Filter Interval Value") + field(DRVH, "209715200") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "209715200") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setfilterinterval") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-0-POWERP3") +{ + field(DESC, "Power-UP state of Port3") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynUInt32Digital") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asynMask(ni6528_1,3, 0xff) setportpowerup") + field(PINI, "YES") + field(VAL, "255") +} + +record (longout,"EC-GN-HWCF:6528-0-POWERP4") +{ + field(DESC, "Power-UP state of Port4") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynUInt32Digital") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asynMask(ni6528_1,4, 0xff) setportpowerup") + field(PINI, "YES") + field(VAL, "255") +} + +record (longout,"EC-GN-HWCF:6528-0-POWERP5") +{ + field(DESC, "Power-UP state of Port5") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynUInt32Digital") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asynMask(ni6528_1,5, 0xff) setportpowerup") + field(PINI, "YES") + field(VAL, "255") +} + +record (longout,"EC-GN-HWCF:6528-0-RTSIINPROUT") +{ + field(DESC, "Set RTSI Input Route") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setrtsiinputroute") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-0-RTSIOUTROUT") +{ + field(DESC, "Set RTSI Output Route") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setrtsioutputroute") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-0-RTSIPCHANGE") +{ + field(DESC, "Set RTSI Pulse on Change") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setrtsipulseonchange") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-0-RTSIPWDG") +{ + field(DESC, "Set RTSI pulse on watchdog") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setrtsipulseonwatchdog") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-0-RTSIWDGTRIG") +{ + field(DESC, "Set RTSI on Watchdog Trigger") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setrtsiwatchdogtrigger") + field(VAL, "0") +} + +record (mbbi,"EC-GN-HWCF:6528-0-STATUS") +{ + field(DESC, "PXI-6528.0 Board Status") + field(DTYP, "asynInt32") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "@asyn(ni6528_1,1) board_status") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, "1 second") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (ao,"EC-GN-HWCF:6528-0-WDGTOUT") +{ + field(DESC, "Set Watchdog TimeOut") + field(DRVH, "429496729580") + field(DRVL, "0") + field(DTYP, "asynFloat64") + field(HOPR, "429496729580") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setwatchdogtimeout") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-1-FILTINT") +{ + field(DESC, "Set Filter Interval Value") + field(DRVH, "209715200") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "209715200") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setfilterinterval") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-1-POWERP3") +{ + field(DESC, "Power-UP state of Port3") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynUInt32Digital") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asynMask(ni6528_0,3, 0xff) setportpowerup") + field(PINI, "YES") + field(VAL, "255") +} + +record (longout,"EC-GN-HWCF:6528-1-POWERP4") +{ + field(DESC, "Power-UP state of Port4") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynUInt32Digital") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asynMask(ni6528_0,4, 0xff) setportpowerup") + field(PINI, "YES") + field(VAL, "255") +} + +record (longout,"EC-GN-HWCF:6528-1-POWERP5") +{ + field(DESC, "Power-UP state of Port5") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynUInt32Digital") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asynMask(ni6528_0,5, 0xff) setportpowerup") + field(PINI, "YES") + field(VAL, "255") +} + +record (longout,"EC-GN-HWCF:6528-1-RTSIINPROUT") +{ + field(DESC, "Set RTSI Input Route") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setrtsiinputroute") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-1-RTSIOUTROUT") +{ + field(DESC, "Set RTSI Output Route") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setrtsioutputroute") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-1-RTSIPCHANGE") +{ + field(DESC, "Set RTSI Pulse on Change") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setrtsipulseonchange") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-1-RTSIPWDG") +{ + field(DESC, "Set RTSI pulse on watchdog") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setrtsipulseonwatchdog") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-1-RTSIWDGTRIG") +{ + field(DESC, "Set RTSI on Watchdog Trigger") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setrtsiwatchdogtrigger") + field(VAL, "0") +} + +record (mbbi,"EC-GN-HWCF:6528-1-STATUS") +{ + field(DESC, "PXI-6528.1 Board Status") + field(DTYP, "asynInt32") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "@asyn(ni6528_0,0) board_status") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, "1 second") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (ao,"EC-GN-HWCF:6528-1-WDGTOUT") +{ + field(DESC, "Set Watchdog TimeOut") + field(DRVH, "429496729580") + field(DRVL, "0") + field(DTYP, "asynFloat64") + field(HOPR, "429496729580") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setwatchdogtimeout") + field(VAL, "0") +} + +record (waveform,"EC-GN-HWCF:6683-0-BDTM") +{ + field(DESC, "Board time") + field(DTYP, "asynInt32ArrayIn") + field(FTVL, "ULONG") + field(INP, "@asyn(ni6683h_0,0) getTime") + field(NELM, "2") + field(SCAN, ".1 second") +} + +record (subArray,"EC-GN-HWCF:6683-0-BDTMN") +{ + field(DESC, "Board time [ns]") + field(EGU, "ns") + field(FTVL, "ULONG") + field(INP, "EC-GN-HWCF:6683-0-BDTM CP MS") +} + +record (subArray,"EC-GN-HWCF:6683-0-BDTMS") +{ + field(DESC, "Board time [s]") + field(EGU, "s") + field(FTVL, "ULONG") + field(INP, "EC-GN-HWCF:6683-0-BDTM CP MS") +} + +record (waveform,"EC-GN-HWCF:6683-0-BLKTM") +{ + field(DESC, "Block until...") + field(DTYP, "asynInt32ArrayOut") + field(FTVL, "LONG") + field(HOPR, "4503599627370496") + field(INP, "@asyn(ni6683h_0,0) waitForTime") + field(LOPR, "0") + field(NELM, "2") +} + +record (stringin,"EC-GN-HWCF:6683-0-DEVNAME") +{ + field(DESC, "Device name") + field(DTYP, "asynOctetRead") + field(INP, "@asyn(ni6683h_0,0) deviceName") + field(PINI, "YES") + field(SCAN, "Passive") +} + +record (stringin,"EC-GN-HWCF:6683-0-DRIVER") +{ + field(DESC, "Driver version") + field(DTYP, "asynOctetRead") + field(INP, "@asyn(ni6683h_0,0) driverVersion") + field(PINI, "YES") + field(SCAN, "Passive") +} + +record (longin,"EC-GN-HWCF:6683-0-FTEMAX") +{ + field(DESC, "Max number of scheduled FTEs") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)maxScheduledFtes") + field(PINI, "YES") + field(SCAN, "Passive") +} + +record (longin,"EC-GN-HWCF:6683-0-FTENUM") +{ + field(DESC, "Number of pending FTEs") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)numPendingFtes") + field(SCAN, "5 second") +} + +record (stringin,"EC-GN-HWCF:6683-0-HBDTM") +{ + field(DESC, "Board Time") + field(DTYP, "asynOctetRead") + field(INP, "@asyn(ni6683h_0,0) getTime") + field(PINI, "YES") + field(SCAN, ".1 second") +} + +record (longin,"EC-GN-HWCF:6683-0-LVL_ERRS") +{ + field(DESC, "Check number of FTE level errors") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)checkFteLevels") + field(SCAN, "Passive") +} + +record (longin,"EC-GN-HWCF:6683-0-SERIAL") +{ + field(DESC, "Device serial number") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)deviceSerialNumber") + field(PINI, "YES") + field(SCAN, "Passive") +} + +record (mbbi,"EC-GN-HWCF:6683-0-STATUS") +{ + field(DESC, "PXI-6683.0 Device status") + field(DTYP, "asynInt32") + field(EIST, "FIFO overflow") + field(EISV, "MINOR") + field(EIVL, "8") + field(ELST, "Buffer overflow") + field(ELSV, "MINOR") + field(ELVL, "11") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "@asyn(ni6683h_0,0)deviceStatus") + field(NIST, "FPGA not ready") + field(NISV, "MINOR") + field(NIVL, "9") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, "5 second") + field(SVST, "Reserved") + field(SVSV, "INVALID") + field(SVVL, "7") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(TEST, "Ref clk no lock") + field(TESV, "MINOR") + field(TEVL, "10") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbi,"EC-GN-HWCF:6683-0-SYNC") +{ + field(DESC, "PXI-6683.0 Synchronization status") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)syncStatus") + field(ONST, "SYNCING") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, "1 second") + field(THST, "LOST_SYNC") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "SYNCED") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "NOT_SYNCED") + field(ZRSV, "MAJOR") + field(ZRVL, "0") +} + +record (longin,"EC-GN-HWCF:6683-0-SYNCLOST") +{ + field(DESC, "Seconds since lost synchronization") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)secsSinceSync") + field(SCAN, "1 second") +} + diff --git a/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-CCPS-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-CCPS-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..c812fc7 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-CCPS-iocEC-GN-PSH0PCF.db @@ -0,0 +1,310 @@ +record (bi,"EC-GN-P01-GAF-CCPS:PSU2320-OUTON-RB") +{ + field(DESC, "GY1 CCPS Output ON status") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getOut CCPS1") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-CCPS:PSU2320-OUTON-SP") +{ + field(DESC, "GY1 CCPS Output ON") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PWX1500ML.proto setOut CCPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-RB") +{ + field(DESC, "GY1 CCPS remote readback") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getRem CCPS1") + field(ONAM, "REM") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(ZNAM, "LOC") +} + +record (bo,"EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-SP") +{ + field(DESC, "GY1 CCPS remote control on") + field(DTYP, "stream") + field(ONAM, "REM") + field(OUT, "@PWX1500ML.proto setRem CCPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(ZNAM, "LOC") +} + +record (bo,"EC-GN-P01-GAF-CCPS:PSU2320-RST") +{ + field(DESC, "GY1 CCPS reset device") + field(DTYP, "stream") + field(OUT, "@PWX1500ML.proto resetDevice CCPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") +} + +record (bi,"EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-RB") +{ + field(DESC, "GY1 CCPS signal source on") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getSourceON CCPS1") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-SP") +{ + field(DESC, "GY1 CCPS signal source on") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PWX1500ML.proto setSourceON CCPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAF-CCPS:PSU2320-STAT") +{ + field(DESC, "CCPS1 is running") + field(ONAM, "ON") + field(SCAN, "Passive") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-CCPS:PSU2320-TR") +{ + field(DESC, "GY1 CCPS in Operation") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-CCPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 CCPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-CCPS:STAT-SIMM") +{ + field(DESC, "GY1 CCPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (ai,"EC-GN-P01-GAF-CCPS:PSU2320-CURR-RB") +{ + field(DESC, "GY1 CCPS Output current readback") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "60.0") + field(INP, "@PWX1500ML.proto getCurr CCPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-CCPS:PSU2320-CURR-SP") +{ + field(DESC, "GY1 CCPS Output current setpoint") + field(DRVH, "58.8") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "58.8") + field(LOPR, "0") + field(OUT, "@PWX1500ML.proto setCurr CCPS1") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF-CCPS:PSU2320-DCV-RB") +{ + field(DESC, "GY1 CCPS DCV range readback") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(INP, "@PWX1500ML.proto getVolt CCPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-CCPS:PSU2320-DCV-SP") +{ + field(DESC, "GY1 CCPS Output DCV setpoint") + field(DRVH, "84") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "84") + field(LOPR, "0") + field(OUT, "@PWX1500ML.proto setVolt CCPS1") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-CCPS:PSU2320-EREF") +{ + field(DESC, "GY1 CCPS voltage setpoint") + field(DRVH, "80") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "80") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-CCPS:PSU2320-EREF-MSP") +{ + field(DESC, "GY1 CCPS voltage manual setpoint") + field(DRVH, "80") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "80") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (stringin,"EC-GN-P01-GAF-CCPS:PSU2320-ERROR") +{ + field(DESC, "GY1 CCPS Error message") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getError CCPS1") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") +} + +record (stringin,"EC-GN-P01-GAF-CCPS:PSU2320-IDN") +{ + field(DESC, "GY1 CCPS IDN") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto readDeviceID CCPS1") + field(PINI, "NO") + field(SCAN, "10 second") +} + +record (ai,"EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCI") +{ + field(DESC, "GY1 CCPS Measued DC Current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "58.8") + field(INP, "@PWX1500ML.proto getMeasDCI CCPS1") + field(LOPR, "-58.8") + field(PINI, "NO") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCV") +{ + field(DESC, "GY1 CCPS Measued DC Voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "200") + field(INP, "@PWX1500ML.proto getMeasDCV CCPS1") + field(LOPR, "-200") + field(PINI, "NO") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF-CCPS:STAT-AMP") +{ + field(DESC, "Amplitude") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "3.5") +} + +record (ai,"EC-GN-P01-GAF-CCPS:STAT-FREQ") +{ + field(DESC, "Frequency") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "1") +} + +record (ai,"EC-GN-P01-GAF-CCPS:STAT-OFFS") +{ + field(DESC, "Offset") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "1") +} + +record (calcout,"EC-GN-P01-GAF-CCPS:STAT-OP-CALC") +{ + field(CALC, "(A==1 || B==1 || C==1)?1:0; C:=B; B:=A") + field(DESC, "GYA CCPS operation check") + field(FLNK, "EC-GN-P01-GAF-CCPS:PSU2320-TR") + field(INPA, "EC-GN-P01-GAF-CCPS:STAT-OP-V-DIFF") + field(INPB, "0") + field(INPC, "0") + field(OUT, "EC-GN-P01-GAF-CCPS:PSU2320-TR") + field(SCAN, "Passive") +} + +record (calc,"EC-GN-P01-GAF-CCPS:STAT-OP-V-DIFF") +{ + field(CALC, "(A==1 andand ABS(B-C)>0.1)?1:0; C:=B") + field(DESC, "GYA CCPS operation check") + field(FLNK, "EC-GN-P01-GAF-CCPS:STAT-OP-CALC") + field(INPA, "EC-GN-P01-GAF-CCPS:PSU2320-OUTON-RB") + field(INPB, "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCV PP") + field(SCAN, ".1 second") +} + diff --git a/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-FHPS-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-FHPS-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..6aee723 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-FHPS-iocEC-GN-PSH0PCF.db @@ -0,0 +1,424 @@ +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START") +{ + field(DESC, "Auto rampup start command") + field(HIGH, "0.1") + field(ONAM, "Start") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Stop") +} + +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-LOC") +{ + field(DESC, "Local control ON") + field(DTYP, "stream") + field(ONAM, "LOC") + field(OUT, "@PCR500LE.proto setLoc FHPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB") +{ + field(DESC, "Output ON readback") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto getOut FHPS1") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-OUTON-SP") +{ + field(DESC, "Output ON command") + field(DTYP, "stream") + field(ONAM, "REM") + field(OUT, "@PCR500LE.proto setOut FHPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-REM") +{ + field(DESC, "Remote control on") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PCR500LE.proto setRem FHPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-RST") +{ + field(DESC, "Reset command") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PCR500LE.proto resetDevice FHPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-RB") +{ + field(DESC, "External control readback") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto getSourceON FHPS1") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-SP") +{ + field(DESC, "External control ON command") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PCR500LE.proto setSourceON FHPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP") +{ + field(DESC, "GY1 FHPS rampup comp") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 FHPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:STAT-SIMM") +{ + field(DESC, "GY1 FHPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-ACV-RB") +{ + field(DESC, "Output Voltage readback") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(INP, "@PCR500LE.proto getVolt FHPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-ACV-SP") +{ + field(DESC, "Output voltage setpoint") + field(DRVH, "300") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(LOPR, "0") + field(OUT, "@PCR500LE.proto setVolt FHPS1") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-AUTO-RU-TIME") +{ + field(DESC, "Auto rampup time") + field(DRVH, "100000") + field(DRVL, "10") + field(EGU, "sec") + field(HOPR, "100000") + field(LOPR, "10") + field(PINI, "NO") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "30") +} + +record (mbbo,"EC-GN-P01-GAF-FHPS:PSU2610-AUTO-STAT") +{ + field(DESC, "Auto rampup status") + field(ONST, "IN OPERATION") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(THST, "ERROR") + field(THVL, "3") + field(TWST, "FINISH") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "NOT IN OPERATION") + field(ZRVL, "0") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV") +{ + field(DESC, "Auto rampup target voltage") + field(DRVH, "60") + field(DRVL, "0.0") + field(EGU, "V") + field(HOPR, "60.0") + field(LOPR, "0.0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(VAL, "5") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-CURR-RB") +{ + field(DESC, "Output Current readback") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "5") + field(INP, "@PCR500LE.proto getCurr FHPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-CURR-SP") +{ + field(DESC, "Output current setpoint") + field(DRVH, "5.0") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "5.0") + field(LOPR, "0") + field(OUT, "@PCR500LE.proto setCurr FHPS1") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-EREF") +{ + field(DESC, "GY1 FHPS voltage setpoint") + field(DRVH, "150") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "150") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-EREF-MSP") +{ + field(DESC, "GY1 FHPS voltage manual setpoint") + field(DRVH, "150") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "150") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (stringin,"EC-GN-P01-GAF-FHPS:PSU2610-ERROR") +{ + field(DESC, "Error code") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto getError FHPS1") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-FRQ-RB") +{ + field(DESC, "Output frequency readback") + field(DTYP, "stream") + field(EGU, "Hz") + field(HOPR, "1000") + field(INP, "@PCR500LE.proto getFreq FHPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-FRQ-SP") +{ + field(DESC, "Output frequency setpoint") + field(DRVH, "999.9") + field(DRVL, "1") + field(DTYP, "stream") + field(EGU, "Hz") + field(HOPR, "1000") + field(LOPR, "0") + field(OUT, "@PCR500LE.proto setFreq FHPS1") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "1") +} + +record (stringin,"EC-GN-P01-GAF-FHPS:PSU2610-IDN") +{ + field(DESC, "IDN") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto readDeviceID FHPS1") + field(PINI, "NO") + field(SCAN, "10 second") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACI") +{ + field(DESC, "Measued AC Current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "5.0") + field(INP, "@PCR500LE.proto getMeasACI FHPS1") + field(LOPR, "-5.0") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACP") +{ + field(DESC, "Measued AC Power") + field(DTYP, "stream") + field(EGU, "W") + field(HOPR, "500") + field(INP, "@PCR500LE.proto getMeasACP FHPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV") +{ + field(DESC, "Measued AC Voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(INP, "@PCR500LE.proto getMeasACV FHPS1") + field(LOPR, "-300") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-MEAS-FRQ") +{ + field(DESC, "Measued Frequency") + field(DTYP, "stream") + field(EGU, "Hz") + field(HOPR, "1000") + field(INP, "@PCR500LE.proto getMeasACF FHPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "1") +} + +record (calcout,"EC-GN-P01-GAF-FHPS:STAT-AUTO-MODE-SET") +{ + field(CALC, "A==1?0:1") + field(DESC, "GYA FHPS rampup comp off") + field(INPA, "EC-GN-P01-GAF:STAT-SM") + field(OOPT, "Transition To Zero") + field(OUT, "EC-GN-P01-GAF-FHPS:STAT-MANM PP") + field(SCAN, "1 second") +} + +record (waveform,"EC-GN-P01-GAF-FHPS:STAT-PREP-WF") +{ + field(DESC, "GY1 FHPS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CALC") +{ + field(CALC, "A==2?1:0") + field(DESC, "GYA FHPS rampup comp check") + field(INPA, "EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CMP") + field(OOPT, "When Non-zero") + field(OUT, "EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP PP") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CMP") +{ + field(CALC, "(ABS(A-B)<0.1*B)?2:((C > D)?1:0);D:=C") + field(DESC, "GYA FHPS rampup stat check") + field(FLNK, "EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CALC") + field(INPA, "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV") + field(INPB, "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV") + field(INPC, "EC-GN-P01-GAF-FHPS:PSU2610-EREF") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GAF-FHPS:STAT-RAMPUP-OFF") +{ + field(CALC, "A==0?0:1") + field(DESC, "GYA FHPS rampup comp off") + field(INPA, "EC-GN-P01-GPS:PLC4110-YTS-ST1R") + field(OOPT, "When Zero") + field(OUT, "EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP PP") + field(SCAN, "1 second") +} + diff --git a/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-GCPS-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-GCPS-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..34f5d19 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-GCPS-iocEC-GN-PSH0PCF.db @@ -0,0 +1,273 @@ +record (bo,"EC-GN-P01-GAF-GCPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 GCPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-GCPS:STAT-SIMM") +{ + field(DESC, "GY1 GCPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (mbbi,"EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB") +{ + field(DESC, "GY1 GCPS read ACT") + field(DTYP, "stream") + field(FRST, "ZERO") + field(FRSV, "NO_ALARM") + field(FRVL, "4") + field(INP, "@JASTEC-SCMPS.proto readActivity GC1") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") + field(THST, "FLAT TOP") + field(THSV, "NO_ALARM") + field(THVL, "3") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP") +{ + field(DESC, "GY1 GCPS set ACT") + field(DTYP, "stream") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(OUT, "@JASTEC-SCMPS.proto setActivity GC1") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MI") +{ + field(DESC, "GY1 GCPS ACT set to Marte") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MO") +{ + field(DESC, "GY1 GCPS ACT Marte outputs") + field(FLNK, "EC-GN-P01-GAF-GCPS:STAT-ACT-SP-CALC") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (ai,"EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON") +{ + field(DESC, "GY1 GCPS monitored current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "125") + field(INP, "@JASTEC-SCMPS.proto readMeasCurrent GC1") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") +} + +record (waveform,"EC-GN-P01-GAF-GCPS:PSU2130-ERR") +{ + field(DESC, "GY1 GCPS read error") + field(DTYP, "stream") + field(INP, "@JASTEC-SCMPS.proto readErrStat GC1") + field(NELM, "15") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-GCPS:PSU2130-SWP-LIM") +{ + field(DESC, "GY1 GCPS read sweep limit") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readSweepLim GC1") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-GCPS:PSU2130-SWP-RB") +{ + field(DESC, "GY1 GCPS read targ sweep rate") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readTargSweep GC1") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-RB") +{ + field(DESC, "GY1 GCPS read target current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "120") + field(INP, "@JASTEC-SCMPS.proto readTargCurrent GC1") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET") +{ + field(DESC, "GY1 GCPS set target current") + field(DRVH, "120") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP") + field(HOPR, "125") + field(LOPR, "0") + field(OUT, "@JASTEC-SCMPS.proto setCurrent GC1") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MI") +{ + field(DESC, "GY1 GCPS target current input to Marte") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MO") +{ + field(DESC, "GY1 GCPS target current Marte outputs") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GAF-GCPS:STAT-TRG-CURR-SET-CALC") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-GCPS:PSU2130-TRG-SWPR-SET") +{ + field(DESC, "GY1 GCPS set target swwp rate") + field(DRVH, "5.0") + field(DRVL, "0.01") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(LOPR, "0.01") + field(OUT, "@JASTEC-SCMPS.proto setSweep GC1") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") + field(VAL, "1") +} + +record (ai,"EC-GN-P01-GAF-GCPS:PSU2130-VOLT-MON") +{ + field(DESC, "GY1 GCPS monitored voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "10") + field(INP, "@JASTEC-SCMPS.proto readMeasVoltage GC1") + field(LOPR, "-10") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") +} + +record (calcout,"EC-GN-P01-GAF-GCPS:STAT-ACT-SP-CALC") +{ + field(CALC, "A") + field(DESC, "GCPS#1 state set by Marte") + field(INPA, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-GAF-GCPS:STAT-PREP-WF") +{ + field(DESC, "GY1 GCPS prepro schedule") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-GAF-GCPS:STAT-TRG-CURR-SET-CALC") +{ + field(CALC, "A") + field(DESC, "GCPS#1 current set by Marte") + field(INPA, "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET PP") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-MCPS-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-MCPS-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..ed398a9 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-MCPS-iocEC-GN-PSH0PCF.db @@ -0,0 +1,331 @@ +record (bo,"EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN") +{ + field(DESC, "SCM rampdown comp") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP") +{ + field(DESC, "GY1 SCM rampup comp") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-MCPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 MCPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-MCPS:STAT-SIMM") +{ + field(DESC, "GY1 MCPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (mbbi,"EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB") +{ + field(DESC, "GY1 MCPS read ACT") + field(DTYP, "stream") + field(FRST, "ZERO") + field(FRSV, "NO_ALARM") + field(FRVL, "4") + field(INP, "@JASTEC-SCMPS.proto readActivity MC1") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") + field(THST, "FLAT TOP") + field(THSV, "NO_ALARM") + field(THVL, "3") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP") +{ + field(DESC, "GY1 MCPS set ACT") + field(DTYP, "stream") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(OUT, "@JASTEC-SCMPS.proto setActivity MC1") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MI") +{ + field(DESC, "GY1 MCPS ACT set to Marte") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MO") +{ + field(DESC, "GY1 MCPS ACT Marte outputs") + field(FLNK, "EC-GN-P01-GAF-MCPS:STAT-ACT-SP-CALC") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (ai,"EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON") +{ + field(DESC, "GY1 MCPS monitored current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "125") + field(INP, "@JASTEC-SCMPS.proto readMeasCurrent MC1") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") +} + +record (waveform,"EC-GN-P01-GAF-MCPS:PSU2120-ERR") +{ + field(DESC, "GY1 MCPS read error") + field(DTYP, "stream") + field(INP, "@JASTEC-SCMPS.proto readErrStat MC1") + field(NELM, "15") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-MCPS:PSU2120-SWP-LIM") +{ + field(DESC, "GY1 MCPS read sweep limit") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readSweepLim MC1") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-MCPS:PSU2120-SWP-RB") +{ + field(DESC, "GY1 MCPS read targ sweep rate") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readTargSweep MC1") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-RB") +{ + field(DESC, "GY1 MCPS read target current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "120") + field(INP, "@JASTEC-SCMPS.proto readTargCurrent MC1") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET") +{ + field(DESC, "GY1 MCPS set target current") + field(DRVH, "120") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP") + field(HOPR, "125") + field(LOPR, "0") + field(OUT, "@JASTEC-SCMPS.proto setCurrent MC1") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MI") +{ + field(DESC, "GY1 MCPS target current input to Marte") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MO") +{ + field(DESC, "GY1 MCPS target current Marte outputs") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GAF-MCPS:STAT-TRG-CURR-SET-CALC") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-MCPS:PSU2120-TRG-SWPR-SET") +{ + field(DESC, "GY1 MCPS set target swwp rate") + field(DRVH, "5.0") + field(DRVL, "0.01") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(LOPR, "0.01") + field(OUT, "@JASTEC-SCMPS.proto setSweep MC1") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") + field(VAL, "1.69") +} + +record (ai,"EC-GN-P01-GAF-MCPS:PSU2120-VOLT-MON") +{ + field(DESC, "GY1 MCPS monitored voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "10") + field(INP, "@JASTEC-SCMPS.proto readMeasVoltage MC1") + field(LOPR, "-10") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") +} + +record (calcout,"EC-GN-P01-GAF-MCPS:STAT-ACT-SP-CALC") +{ + field(CALC, "A") + field(DESC, "MCPS#1 state set by Marte") + field(INPA, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-GAF-MCPS:STAT-PREP-WF") +{ + field(DESC, "GY1 MCPS prepro schedule") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-GAF-MCPS:STAT-RAMPDWN-CMP") +{ + field(CALC, "(A==4 andand B==4 and C==4 andand D==4)?1:0") + field(DESC, "SMCPS ramp down check") + field(FLNK, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN") + field(INPA, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB") + field(INPB, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB") + field(INPC, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB") + field(INPD, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GAF-MCPS:STAT-RAMPUP-CMP") +{ + field(CALC, "(A==3 andand B==3)?1:0") + field(DESC, "GYA SCMPS rampup check") + field(FLNK, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP") + field(INPA, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB") + field(INPB, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB") + field(OOPT, "When Non-zero") + field(OUT, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GAF-MCPS:STAT-RAMPUP-OFF") +{ + field(CALC, "A==0?0:1") + field(DESC, "GYA MC GC rampup comp off") + field(INPA, "EC-GN-P01-GPS:PLC4110-YTS-ST1R") + field(OOPT, "When Zero") + field(OUT, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP PP") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GAF-MCPS:STAT-TRG-CURR-SET-CALC") +{ + field(CALC, "A") + field(DESC, "MCPS#1 current set by Marte") + field(INPA, "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET PP") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..fb91d7c --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-iocEC-GN-PSH0PCF.db @@ -0,0 +1,389 @@ +record (bi,"EC-GN-P01-GAF:DIO4900-YON") +{ + field(DESC, "GY1 External trigger") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 22) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF:STAT-AI-SIMM") +{ + field(DESC, "GY1 AI Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GAF:STAT-AO-SIMM") +{ + field(DESC, "GY1 AO Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GAF:STAT-CSV-LOAD") +{ + field(DESC, "File load trigger") + field(HIGH, "0.1") + field(ONAM, "Loading") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Load") +} + +record (bo,"EC-GN-P01-GAF:STAT-CSV-LOADED") +{ + field(DESC, "File load status") + field(ONAM, "Loaded") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Loading") +} + +record (bo,"EC-GN-P01-GAF:STAT-DI-SIMM") +{ + field(DESC, "GY1 DI Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GAF:STAT-DO-SIMM") +{ + field(DESC, "GY1 DO Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GAF:STAT-DT-SHOTLEN-EGU") +{ + field(DESC, "GY1 egu of shot length") + field(FLNK, "EC-GN-P01-GAF:STAT-DT-SHOTLEN-CALC") + field(ONAM, "s") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "ms") +} + +record (bo,"EC-GN-P01-GAF:STAT-MST-TRIG") +{ + field(DESC, "GY1 Master trigger") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF:STAT-PREP-MODE") +{ + field(DESC, "GY1 Pre-Pro mode ON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF:STAT-SHORT-PULSE") +{ + field(DESC, "GY1 Short Pulse Mode") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF:STAT-TRIG-SOUR") +{ + field(DESC, "GY1 External Trigger Mode SW") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (ai,"EC-GN-P01-GAF:MOE2810-ET") +{ + field(DESC, "GY1 Arc detect signal 1") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GAF:MOE2810-ET-WF") +{ + field(DESC, "GY1 Arc detect signal 1") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GAF:MOE2820-ET") +{ + field(DESC, "GY1 Arc detect signal 2") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GAF:MOE2820-ET-WF") +{ + field(DESC, "GY1 Arc detect signal 2") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GAF:MOE2830-ET") +{ + field(DESC, "GY1 Arc detect signal 3") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GAF:MOE2830-ET-WF") +{ + field(DESC, "GY1 Arc detect signal 3") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GAF:MRF2910-ET") +{ + field(DESC, "GY1 RF Signal") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GAF:MRF2910-ET-WF") +{ + field(DESC, "GY1 RF Signal") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GAF:STAT-BEAMON-TIME") +{ + field(DESC, "GY1 Beam ON time") + field(EGU, "us") + field(HOPR, "3600000000") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (mbbo,"EC-GN-P01-GAF:STAT-CSV-ERR") +{ + field(DESC, "File load error status") + field(FRST, "Format error") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FVST, "Out of range") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(ONST, "Successfully loaded") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(THST, "Empty data") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "Failed to open") + field(TWSV, "MAJOR") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "Not loaded yet") + field(ZRSV, "MINOR") + field(ZRVL, "0") +} + +record (stringout,"EC-GN-P01-GAF:STAT-CSV-NAME") +{ + field(DESC, "CSV file name") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "shot000000") +} + +record (ai,"EC-GN-P01-GAF:STAT-DT-SHOTLEN") +{ + field(DESC, "GY1 Shot length") + field(EGU, "us") + field(HOPR, "3600000000") + field(LOPR, "100") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "1000000") +} + +record (calcout,"EC-GN-P01-GAF:STAT-DT-SHOTLEN-CALC") +{ + field(CALC, "(!A)?1000*B:1000000*B") + field(DESC, "GY1 shot length convert") + field(FLNK, "EC-GN-P01-GAF:STAT-DT-SHOTLEN") + field(INPA, "EC-GN-P01-GAF:STAT-DT-SHOTLEN-EGU") + field(INPB, "EC-GN-P01-GAF:STAT-DT-SHOTLEN-DAM") + field(OUT, "EC-GN-P01-GAF:STAT-DT-SHOTLEN") + field(SCAN, "Passive") +} + +record (ao,"EC-GN-P01-GAF:STAT-DT-SHOTLEN-DAM") +{ + field(DESC, "GY1 shot length without unit") + field(DRVH, "3600") + field(DRVL, "0") + field(FLNK, "EC-GN-P01-GAF:STAT-DT-SHOTLEN-CALC") + field(HOPR, "3600") + field(LOPR, "0") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF:STAT-ELAPSED") +{ + field(DESC, "GY1 Elapsed time") + field(EGU, "us") + field(HOPR, "4000000000") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (longin,"EC-GN-P01-GAF:STAT-PREHEAT-TIME") +{ + field(DESC, "Pre-heating time") + field(HOPR, "999999") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (waveform,"EC-GN-P01-GAF:STAT-PREP-TIME-WF") +{ + field(DESC, "GY1 prepro time schedule") + field(EGU, "ms") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "0") + field(SCAN, "Passive") +} + +record (fanout,"EC-GN-P01-GAF:STAT-SHOT-FLNK1") +{ + field(DESC, "GY1 fanout1 to AI waveform signal") +} + +record (fanout,"EC-GN-P01-GAF:STAT-SHOT-FLNK2") +{ + field(DESC, "GY1 fanout2 to AI waveform signal") +} + +record (longin,"EC-GN-P01-GAF:STAT-SHOT-ID") +{ + field(DESC, "GY1 shot ID") + field(HOPR, "999999") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (calcout,"EC-GN-P01-GAF:STAT-SHOT-PLOT") +{ + field(CALC, "A andand (B >= C)") + field(DESC, "GY1 judge to plot measured values") + field(INPA, "EC-GN-P01-GPS:PLC4110-YTS-ST3R") + field(INPB, "EC-GN-P01-GAF:STAT-BEAMON-TIME") + field(INPC, "6000000") + field(OOPT, "Transition To Non-zero") + field(OUT, "EC-GN-P01-GAF:STAT-SHOT-FLNK1 PP") + field(SCAN, ".1 second") +} + +record (mbbi,"EC-GN-P01-GAF:STAT-SM") +{ + field(DESC, "GY#1 state machine") + field(EIST, "WaitHVON_SDN") + field(EIVL, "8") + field(FLNK, "EC-GN-P01-GAF:STAT-SHOT-PLOT") + field(FRST, "WaitReady") + field(FRVL, "4") + field(FVST, "WaitPermit") + field(FVVL, "5") + field(NIST, "WaitHVON_SDN_PREP") + field(NIVL, "9") + field(ONST, "Error") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(SVST, "WaitHVON_PREP") + field(SVVL, "7") + field(SXST, "WaitHVON") + field(SXVL, "6") + field(THST, "WaitStandby") + field(THVL, "3") + field(TWST, "Disabled") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "Init") + field(ZRVL, "0") +} + diff --git a/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAFP-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAFP-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..c7cdc88 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAFP-iocEC-GN-PSH0PCF.db @@ -0,0 +1,146 @@ +record (bi,"EC-GN-P01-GAFP:FMC4310-RV1") +{ + field(DESC, "Reserved for cRIO") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 11) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAFP:FMC4310-RV2") +{ + field(DESC, "Reserved for cRIO") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 12) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAFP:FMC4310-RV3") +{ + field(DESC, "Reserved for cRIO") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 13) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAFP:FMC4310-RV5") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAFP:FMC4310-RV6") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAFP:FMC4310-RV7") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAFP:FMC4310-RV8") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAFP:FMC4310-YFLT-OC") +{ + field(DESC, "MHVPS OC Detected") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 5) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-GAFP:FMC4310-YFLT-OV") +{ + field(DESC, "MHVPS OV Detected") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 4) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bo,"EC-GN-P01-GAFP:FMC4310-YSTA-GAOP") +{ + field(DESC, "GY1 Beam ON Status") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAFP:FMC4310-YTRP") +{ + field(DESC, "Interlock from fast protection 1") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 9) bitread") + field(ONAM, "INTERLOCK") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-GAFP:FMC4310-YTRP2") +{ + field(DESC, "Pause signal from Fast Protection 1") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 10) bitread") + field(ONAM, "PAUSE") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + diff --git a/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-CCPS-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-CCPS-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..354029a --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-CCPS-iocEC-GN-PSH0PCF.db @@ -0,0 +1,310 @@ +record (bi,"EC-GN-P01-GBF-CCPS:PSU2320-OUTON-RB") +{ + field(DESC, "GY2 CCPS Output ON status") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getOut CCPS2") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-CCPS:PSU2320-OUTON-SP") +{ + field(DESC, "GY2 CCPS Output ON") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PWX1500ML.proto setOut CCPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-RB") +{ + field(DESC, "GY2 CCPS remote readback") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getRem CCPS2") + field(ONAM, "REM") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(ZNAM, "LOC") +} + +record (bo,"EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-SP") +{ + field(DESC, "GY2 CCPS remote control on") + field(DTYP, "stream") + field(ONAM, "REM") + field(OUT, "@PWX1500ML.proto setRem CCPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(ZNAM, "LOC") +} + +record (bo,"EC-GN-P01-GBF-CCPS:PSU2320-RST") +{ + field(DESC, "GY2 CCPS reset device") + field(DTYP, "stream") + field(OUT, "@PWX1500ML.proto resetDevice CCPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") +} + +record (bi,"EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-RB") +{ + field(DESC, "GY2 CCPS signal source on") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getSourceON CCPS2") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-SP") +{ + field(DESC, "GY2 CCPS signal source on") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PWX1500ML.proto setSourceON CCPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBF-CCPS:PSU2320-STAT") +{ + field(DESC, "CCPS2 is running") + field(ONAM, "ON") + field(SCAN, "Passive") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-CCPS:PSU2320-TR") +{ + field(DESC, "GY2 CCPS in Operation") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-CCPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY2 CCPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-CCPS:STAT-SIMM") +{ + field(DESC, "GY2 CCPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (ai,"EC-GN-P01-GBF-CCPS:PSU2320-CURR-RB") +{ + field(DESC, "GY2 CCPS Output current readback") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "60.0") + field(INP, "@PWX1500ML.proto getCurr CCPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-CCPS:PSU2320-CURR-SP") +{ + field(DESC, "GY2 CCPS Output current setpoint") + field(DRVH, "58.8") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "58.8") + field(LOPR, "0") + field(OUT, "@PWX1500ML.proto setCurr CCPS2") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-CCPS:PSU2320-DCV-RB") +{ + field(DESC, "GY2 CCPS V range readback") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(INP, "@PWX1500ML.proto getVolt CCPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-CCPS:PSU2320-DCV-SP") +{ + field(DESC, "GY2 CCPS V range readback") + field(DRVH, "84") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "84") + field(LOPR, "0") + field(OUT, "@PWX1500ML.proto setVolt CCPS2") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-CCPS:PSU2320-EREF") +{ + field(DESC, "GY2 CCPS voltage setpoint") + field(DRVH, "80") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "80") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-CCPS:PSU2320-EREF-MSP") +{ + field(DESC, "GY2 CCPS voltage manual setpoint") + field(DRVH, "80") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "80") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (stringin,"EC-GN-P01-GBF-CCPS:PSU2320-ERROR") +{ + field(DESC, "GY2 CCPS Error message") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getError CCPS2") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") +} + +record (stringin,"EC-GN-P01-GBF-CCPS:PSU2320-IDN") +{ + field(DESC, "GY2 CCPS IDN") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto readDeviceID CCPS2") + field(PINI, "NO") + field(SCAN, "10 second") +} + +record (ai,"EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCI") +{ + field(DESC, "GY2 CCPS Measued DC Current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "58.8") + field(INP, "@PWX1500ML.proto getMeasDCI CCPS2") + field(LOPR, "-58.8") + field(PINI, "NO") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCV") +{ + field(DESC, "GY2 CCPS Measued DC Voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "200") + field(INP, "@PWX1500ML.proto getMeasDCV CCPS2") + field(LOPR, "-200") + field(PINI, "NO") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-CCPS:STAT-AMP") +{ + field(DESC, "Amplitude") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "3.5") +} + +record (ai,"EC-GN-P01-GBF-CCPS:STAT-FREQ") +{ + field(DESC, "Frequency") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "1") +} + +record (ai,"EC-GN-P01-GBF-CCPS:STAT-OFFS") +{ + field(DESC, "Offset") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "1") +} + +record (calcout,"EC-GN-P01-GBF-CCPS:STAT-OP-CALC") +{ + field(CALC, "(A==1 || B==1 || C==1)?1:0; C:=B; B:=A") + field(DESC, "GYB CCPS operation check") + field(FLNK, "EC-GN-P01-GBF-CCPS:PSU2320-TR") + field(INPA, "EC-GN-P01-GBF-CCPS:STAT-OP-V-DIFF") + field(INPB, "0") + field(INPC, "0") + field(OUT, "EC-GN-P01-GBF-CCPS:PSU2320-TR") + field(SCAN, "Passive") +} + +record (calc,"EC-GN-P01-GBF-CCPS:STAT-OP-V-DIFF") +{ + field(CALC, "(A==1 andand ABS(B-C)>0.1)?1:0; C:=B") + field(DESC, "GYB CCPS operation check") + field(FLNK, "EC-GN-P01-GBF-CCPS:STAT-OP-CALC") + field(INPA, "EC-GN-P01-GBF-CCPS:PSU2320-OUTON-RB") + field(INPB, "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCV PP") + field(SCAN, ".1 second") +} + diff --git a/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-FHPS-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-FHPS-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..0b30380 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-FHPS-iocEC-GN-PSH0PCF.db @@ -0,0 +1,424 @@ +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START") +{ + field(DESC, "Auto rampup start command") + field(HIGH, "0.1") + field(ONAM, "Start") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Stop") +} + +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-LOC") +{ + field(DESC, "Local control on") + field(DTYP, "stream") + field(ONAM, "LOC") + field(OUT, "@PCR500LE.proto setLoc FHPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB") +{ + field(DESC, "Output ON readback") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto getOut FHPS2") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-OUTON-SP") +{ + field(DESC, "Output ON command") + field(DTYP, "stream") + field(ONAM, "REM") + field(OUT, "@PCR500LE.proto setOut FHPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-REM") +{ + field(DESC, "Remote control on") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PCR500LE.proto setRem FHPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-RST") +{ + field(DESC, "Reset command") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PCR500LE.proto resetDevice FHPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-RB") +{ + field(DESC, "External control readback") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto getSourceON FHPS2") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-SP") +{ + field(DESC, "External control ON command") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PCR500LE.proto setSourceON FHPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP") +{ + field(DESC, "GY2 FHPS rampup comp") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY2 FHPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:STAT-SIMM") +{ + field(DESC, "GY2 FHPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-ACV-RB") +{ + field(DESC, "Output Voltage readback") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(INP, "@PCR500LE.proto getVolt FHPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-ACV-SP") +{ + field(DESC, "Output voltage setpoint") + field(DRVH, "300") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(LOPR, "0") + field(OUT, "@PCR500LE.proto setVolt FHPS2") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-AUTO-RU-TIME") +{ + field(DESC, "Auto rampup time") + field(DRVH, "100000") + field(DRVL, "10") + field(EGU, "sec") + field(HOPR, "100000") + field(LOPR, "10") + field(PINI, "NO") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "30") +} + +record (mbbo,"EC-GN-P01-GBF-FHPS:PSU2610-AUTO-STAT") +{ + field(DESC, "Auto rampup status") + field(ONST, "IN OPERATION") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(THST, "ERROR") + field(THVL, "3") + field(TWST, "FINISH") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "NOT IN OPERATION") + field(ZRVL, "0") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV") +{ + field(DESC, "Auto rampup target voltage") + field(DRVH, "300") + field(DRVL, "0.0") + field(EGU, "V") + field(HOPR, "60.0") + field(LOPR, "0.0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-CURR-RB") +{ + field(DESC, "Output Current readback") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "5") + field(INP, "@PCR500LE.proto getCurr FHPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-CURR-SP") +{ + field(DESC, "Output current setpoint") + field(DRVH, "5.0") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "5.0") + field(LOPR, "0") + field(OUT, "@PCR500LE.proto setCurr FHPS2") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-EREF") +{ + field(DESC, "GY2 FHPS voltage setpoint") + field(DRVH, "150") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "150") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-EREF-MSP") +{ + field(DESC, "GY2 FHPS voltage manual setpoint") + field(DRVH, "150") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "150") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (stringin,"EC-GN-P01-GBF-FHPS:PSU2610-ERROR") +{ + field(DESC, "Error code") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto getError FHPS2") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-FRQ-RB") +{ + field(DESC, "Output frequency readback") + field(DTYP, "stream") + field(EGU, "Hz") + field(HOPR, "1000") + field(INP, "@PCR500LE.proto getFreq FHPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-FRQ-SP") +{ + field(DESC, "Output frequency setpoint") + field(DRVH, "999.9") + field(DRVL, "1") + field(DTYP, "stream") + field(EGU, "Hz") + field(HOPR, "1000") + field(LOPR, "0") + field(OUT, "@PCR500LE.proto setFreq FHPS2") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "1") +} + +record (stringin,"EC-GN-P01-GBF-FHPS:PSU2610-IDN") +{ + field(DESC, "IDN") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto readDeviceID FHPS2") + field(PINI, "NO") + field(SCAN, "10 second") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACI") +{ + field(DESC, "Measued AC Current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "5.0") + field(INP, "@PCR500LE.proto getMeasACI FHPS2") + field(LOPR, "-5.0") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACP") +{ + field(DESC, "Measued AC Power") + field(DTYP, "stream") + field(EGU, "W") + field(HOPR, "500") + field(INP, "@PCR500LE.proto getMeasACP FHPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV") +{ + field(DESC, "Measued AC Voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(INP, "@PCR500LE.proto getMeasACV FHPS2") + field(LOPR, "-300") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-MEAS-FRQ") +{ + field(DESC, "Measued Frequency") + field(DTYP, "stream") + field(EGU, "Hz") + field(HOPR, "1000") + field(INP, "@PCR500LE.proto getMeasACF FHPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "1") +} + +record (calcout,"EC-GN-P01-GBF-FHPS:STAT-AUTO-MODE-SET") +{ + field(CALC, "A==1?0:1") + field(DESC, "GYB FHPS rampup comp off") + field(INPA, "EC-GN-P01-GBF:STAT-SM") + field(OOPT, "Transition To Zero") + field(OUT, "EC-GN-P01-GBF-FHPS:STAT-MANM PP") + field(SCAN, "1 second") +} + +record (waveform,"EC-GN-P01-GBF-FHPS:STAT-PREP-WF") +{ + field(DESC, "GY2 FHPS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CALC") +{ + field(CALC, "A==2?1:0") + field(DESC, "GYB FHPS rampup comp check") + field(INPA, "EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CMP") + field(OOPT, "When Non-zero") + field(OUT, "EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP PP") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CMP") +{ + field(CALC, "(ABS(A-B)<0.1*B)?2:((C > D)?1:0);D:=C") + field(DESC, "GYB FHPS rampup stat check") + field(FLNK, "EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CALC") + field(INPA, "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV") + field(INPB, "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV") + field(INPC, "EC-GN-P01-GBF-FHPS:PSU2610-EREF") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GBF-FHPS:STAT-RAMPUP-OFF") +{ + field(CALC, "A==0?0:1") + field(DESC, "GYB FHPS rampup comp off") + field(INPA, "EC-GN-P01-GPS:PLC4110-YTS-ST1R") + field(OOPT, "When Zero") + field(OUT, "EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP PP") + field(SCAN, "1 second") +} + diff --git a/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-GCPS-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-GCPS-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..ec4fc1c --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-GCPS-iocEC-GN-PSH0PCF.db @@ -0,0 +1,273 @@ +record (bo,"EC-GN-P01-GBF-GCPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY2 GCPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-GCPS:STAT-SIMM") +{ + field(DESC, "GY2 GCPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (mbbi,"EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB") +{ + field(DESC, "GY2 GCPS read act") + field(DTYP, "stream") + field(FRST, "ZERO") + field(FRSV, "NO_ALARM") + field(FRVL, "4") + field(INP, "@JASTEC-SCMPS.proto readActivity GC2") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") + field(THST, "FLAT TOP") + field(THSV, "NO_ALARM") + field(THVL, "3") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP") +{ + field(DESC, "GY2 GCPS set ACT") + field(DTYP, "stream") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(OUT, "@JASTEC-SCMPS.proto setActivity GC2") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MI") +{ + field(DESC, "GY2 GCPS ACT set to Marte") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MO") +{ + field(DESC, "GY2 GCPS ACT Marte outputs") + field(FLNK, "EC-GN-P01-GBF-GCPS:STAT-ACT-SP-CALC") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (ai,"EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON") +{ + field(DESC, "GY2 GCPS monitored current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "125") + field(INP, "@JASTEC-SCMPS.proto readMeasCurrent GC2") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") +} + +record (waveform,"EC-GN-P01-GBF-GCPS:PSU2130-ERR") +{ + field(DESC, "GY2 GCPS read error") + field(DTYP, "stream") + field(INP, "@JASTEC-SCMPS.proto readErrStat GC2") + field(NELM, "15") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-GCPS:PSU2130-SWP-LIM") +{ + field(DESC, "GY2 GCPS read sweep limit") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readSweepLim GC2") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-GCPS:PSU2130-SWP-RB") +{ + field(DESC, "GY2 GCPS read targ sweep rate") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readTargSweep GC2") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-RB") +{ + field(DESC, "GY2 GCPS read target current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "120") + field(INP, "@JASTEC-SCMPS.proto readTargCurrent GC2") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET") +{ + field(DESC, "GY2 GCPS set target current") + field(DRVH, "120") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP") + field(HOPR, "125") + field(LOPR, "0") + field(OUT, "@JASTEC-SCMPS.proto setCurrent GC2") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MI") +{ + field(DESC, "GY2 GCPS target current input to Marte") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MO") +{ + field(DESC, "GY2 GCPS target current Marte outputs") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GBF-GCPS:STAT-TRG-CURR-SET-CALC") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-GCPS:PSU2130-TRG-SWPR-SET") +{ + field(DESC, "GY2 GCPS set target swwp rate") + field(DRVH, "5.0") + field(DRVL, "0.01") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(LOPR, "0.01") + field(OUT, "@JASTEC-SCMPS.proto setSweep GC2") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") + field(VAL, "1") +} + +record (ai,"EC-GN-P01-GBF-GCPS:PSU2130-VOLT-MON") +{ + field(DESC, "GY2 GCPS monitored voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "10") + field(INP, "@JASTEC-SCMPS.proto readMeasVoltage GC2") + field(LOPR, "-10") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") +} + +record (calcout,"EC-GN-P01-GBF-GCPS:STAT-ACT-SP-CALC") +{ + field(CALC, "A") + field(DESC, "GCPS#2 state set by Marte") + field(INPA, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-GBF-GCPS:STAT-PREP-WF") +{ + field(DESC, "GY2 GCPS prepro schedule") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-GBF-GCPS:STAT-TRG-CURR-SET-CALC") +{ + field(CALC, "A") + field(DESC, "GCPS#2 current set by Mate") + field(INPA, "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET PP") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-MCPS-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-MCPS-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..d766295 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-MCPS-iocEC-GN-PSH0PCF.db @@ -0,0 +1,306 @@ +record (bo,"EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP") +{ + field(DESC, "GY2 SCM rampup comp") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-MCPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY2 MCPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-MCPS:STAT-SIMM") +{ + field(DESC, "GY2 MCPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (mbbi,"EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB") +{ + field(DESC, "GY2 MCPS read act") + field(DTYP, "stream") + field(FRST, "ZERO") + field(FRSV, "NO_ALARM") + field(FRVL, "4") + field(INP, "@JASTEC-SCMPS.proto readActivity MC2") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") + field(THST, "FLAT TOP") + field(THSV, "NO_ALARM") + field(THVL, "3") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP") +{ + field(DESC, "GY2 MCPS set ACT") + field(DTYP, "stream") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(OUT, "@JASTEC-SCMPS.proto setActivity MC2") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MI") +{ + field(DESC, "GY2 MCPS ACT set to Marte") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MO") +{ + field(DESC, "GY2 MCPS ACT Marte outputs") + field(FLNK, "EC-GN-P01-GBF-MCPS:STAT-ACT-SP-CALC") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (ai,"EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON") +{ + field(DESC, "GY2 MCPS monitored current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "125") + field(INP, "@JASTEC-SCMPS.proto readMeasCurrent MC2") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") +} + +record (waveform,"EC-GN-P01-GBF-MCPS:PSU2120-ERR") +{ + field(DESC, "GY2 MCPS read error") + field(DTYP, "stream") + field(INP, "@JASTEC-SCMPS.proto readErrStat MC2") + field(NELM, "15") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-MCPS:PSU2120-SWP-LIM") +{ + field(DESC, "GY2 MCPS read sweep limit") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readSweepLim MC2") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-MCPS:PSU2120-SWP-RB") +{ + field(DESC, "GY2 MCPS read targ sweep rate") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readTargSweep MC2") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-RB") +{ + field(DESC, "GY2 MCPS read target current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "120") + field(INP, "@JASTEC-SCMPS.proto readTargCurrent MC2") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET") +{ + field(DESC, "GY2 MCPS set target current") + field(DRVH, "120") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP") + field(HOPR, "125") + field(LOPR, "0") + field(OUT, "@JASTEC-SCMPS.proto setCurrent MC2") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MI") +{ + field(DESC, "GY2 MCPS target current input to Marte") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MO") +{ + field(DESC, "GY2 MCPS target current Marte outputs") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GBF-MCPS:STAT-TRG-CURR-SET-CALC") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-MCPS:PSU2120-TRG-SWPR-SET") +{ + field(DESC, "GY2 MCPS set target swwp rate") + field(DRVH, "5.0") + field(DRVL, "0.01") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(LOPR, "0.01") + field(OUT, "@JASTEC-SCMPS.proto setSweep MC2") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") + field(VAL, "1.69") +} + +record (ai,"EC-GN-P01-GBF-MCPS:PSU2120-VOLT-MON") +{ + field(DESC, "GY2 MCPS monitored voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "10") + field(INP, "@JASTEC-SCMPS.proto readMeasVoltage MC2") + field(LOPR, "-10") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") +} + +record (calcout,"EC-GN-P01-GBF-MCPS:STAT-ACT-SP-CALC") +{ + field(CALC, "A") + field(DESC, "MCPS#2 state set by Marte") + field(INPA, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-GBF-MCPS:STAT-PREP-WF") +{ + field(DESC, "GY2 MCPS prepro schedule") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-GBF-MCPS:STAT-RAMPUP-CMP") +{ + field(CALC, "(A==3 andand B==3)?1:0") + field(DESC, "GYB SMCPS rampup check") + field(FLNK, "EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP") + field(INPA, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB") + field(INPB, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB") + field(OOPT, "When Non-zero") + field(OUT, "EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GBF-MCPS:STAT-RAMPUP-OFF") +{ + field(CALC, "A==0?0:1") + field(DESC, "GYB MC GC rampup comp off") + field(INPA, "EC-GN-P01-GPS:PLC4110-YTS-ST1R") + field(OOPT, "When Zero") + field(OUT, "EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP PP") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GBF-MCPS:STAT-TRG-CURR-SET-CALC") +{ + field(CALC, "A") + field(DESC, "MCPS#2 current set by Marte") + field(INPA, "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET PP") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..4ff855f --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-iocEC-GN-PSH0PCF.db @@ -0,0 +1,389 @@ +record (bi,"EC-GN-P01-GBF:DIO4900-YON") +{ + field(DESC, "GY3 External trigger") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 22) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF:STAT-AI-SIMM") +{ + field(DESC, "GY2 AI Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GBF:STAT-AO-SIMM") +{ + field(DESC, "GY2 AO Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GBF:STAT-CSV-LOAD") +{ + field(DESC, "File load trigger") + field(HIGH, "0.1") + field(ONAM, "Loading") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Load") +} + +record (bo,"EC-GN-P01-GBF:STAT-CSV-LOADED") +{ + field(DESC, "File load status") + field(ONAM, "Loaded") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Loading") +} + +record (bo,"EC-GN-P01-GBF:STAT-DI-SIMM") +{ + field(DESC, "GY2 DI Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GBF:STAT-DO-SIMM") +{ + field(DESC, "GY2 DO Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GBF:STAT-DT-SHOTLEN-EGU") +{ + field(DESC, "GY2 egu of shot length") + field(FLNK, "EC-GN-P01-GBF:STAT-DT-SHOTLEN-CALC") + field(ONAM, "s") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "ms") +} + +record (bo,"EC-GN-P01-GBF:STAT-MST-TRIG") +{ + field(DESC, "GY2 Master trigger") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF:STAT-PREP-MODE") +{ + field(DESC, "GY2 Pre-Pro mode ON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF:STAT-SHORT-PULSE") +{ + field(DESC, "GY2 Short Pulse Mode") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF:STAT-TRIG-SOUR") +{ + field(DESC, "GY2 External Trigger Mode SW") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (ai,"EC-GN-P01-GBF:MOE2810-ET") +{ + field(DESC, "GY2 Arc detect signal 1") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GBF:MOE2810-ET-WF") +{ + field(DESC, "GY2 Arc detect signal 1") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GBF:MOE2820-ET") +{ + field(DESC, "GY2 Arc detect signal 2") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GBF:MOE2820-ET-WF") +{ + field(DESC, "GY2 Arc detect signal 2") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GBF:MOE2830-ET") +{ + field(DESC, "GY2 Arc detect signal 3") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GBF:MOE2830-ET-WF") +{ + field(DESC, "GY2 Arc detect signal 3") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GBF:MRF2910-ET") +{ + field(DESC, "GY2 RF Signal") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GBF:MRF2910-ET-WF") +{ + field(DESC, "GY2 RF Signal") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GBF:STAT-BEAMON-TIME") +{ + field(DESC, "GY2 Beam ON time") + field(EGU, "us") + field(HOPR, "3600000000") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (mbbo,"EC-GN-P01-GBF:STAT-CSV-ERR") +{ + field(DESC, "File load error status") + field(FRST, "Format error") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FVST, "Out of range") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(ONST, "Successfully loaded") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(THST, "Empty data") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "Failed to open") + field(TWSV, "MAJOR") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "Not loaded yet") + field(ZRSV, "MINOR") + field(ZRVL, "0") +} + +record (stringout,"EC-GN-P01-GBF:STAT-CSV-NAME") +{ + field(DESC, "CSV file name") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "shot000000") +} + +record (ai,"EC-GN-P01-GBF:STAT-DT-SHOTLEN") +{ + field(DESC, "GY2 Shot length") + field(EGU, "us") + field(HOPR, "3600000000") + field(LOPR, "100") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "1000000") +} + +record (calcout,"EC-GN-P01-GBF:STAT-DT-SHOTLEN-CALC") +{ + field(CALC, "(!A)?1000*B:1000000*B") + field(DESC, "GY2 shot length convert") + field(FLNK, "EC-GN-P01-GBF:STAT-DT-SHOTLEN") + field(INPA, "EC-GN-P01-GBF:STAT-DT-SHOTLEN-EGU") + field(INPB, "EC-GN-P01-GBF:STAT-DT-SHOTLEN-DAM") + field(OUT, "EC-GN-P01-GBF:STAT-DT-SHOTLEN") + field(SCAN, "Passive") +} + +record (ao,"EC-GN-P01-GBF:STAT-DT-SHOTLEN-DAM") +{ + field(DESC, "GY2 shot length without unit") + field(DRVH, "3600") + field(DRVL, "0") + field(FLNK, "EC-GN-P01-GBF:STAT-DT-SHOTLEN-CALC") + field(HOPR, "3600") + field(LOPR, "0") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF:STAT-ELAPSED") +{ + field(DESC, "GY2 Elapsed time") + field(EGU, "us") + field(HOPR, "4000000000") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (longin,"EC-GN-P01-GBF:STAT-PREHEAT-TIME") +{ + field(DESC, "Pre-heating time") + field(HOPR, "999999") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (waveform,"EC-GN-P01-GBF:STAT-PREP-TIME-WF") +{ + field(DESC, "GY2 prepro time schedule") + field(EGU, "ms") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "0") + field(SCAN, "Passive") +} + +record (fanout,"EC-GN-P01-GBF:STAT-SHOT-FLNK1") +{ + field(DESC, "GY2 fanout1 to AI waveform signal") +} + +record (fanout,"EC-GN-P01-GBF:STAT-SHOT-FLNK2") +{ + field(DESC, "GY2 fanout2 to AI waveform signal") +} + +record (longin,"EC-GN-P01-GBF:STAT-SHOT-ID") +{ + field(DESC, "GY2 shot ID") + field(HOPR, "999999") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (calcout,"EC-GN-P01-GBF:STAT-SHOT-PLOT") +{ + field(CALC, "A andand (B >= C)") + field(DESC, "GY2 judge to plot measured values") + field(INPA, "EC-GN-P01-GPS:PLC4110-YTS-ST3R") + field(INPB, "EC-GN-P01-GBF:STAT-BEAMON-TIME") + field(INPC, "6000000") + field(OOPT, "Transition To Non-zero") + field(OUT, "EC-GN-P01-GBF:STAT-SHOT-FLNK1 PP") + field(SCAN, ".1 second") +} + +record (mbbi,"EC-GN-P01-GBF:STAT-SM") +{ + field(DESC, "GY#2 state machine") + field(EIST, "WaitHVON_SDN") + field(EIVL, "8") + field(FLNK, "EC-GN-P01-GBF:STAT-SHOT-PLOT") + field(FRST, "WaitReady") + field(FRVL, "4") + field(FVST, "WaitPermit") + field(FVVL, "5") + field(NIST, "WaitHVON_SDN_PREP") + field(NIVL, "9") + field(ONST, "Error") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(SVST, "WaitHVON_PREP") + field(SVVL, "7") + field(SXST, "WaitHVON") + field(SXVL, "6") + field(THST, "WaitStandby") + field(THVL, "3") + field(TWST, "Disabled") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "Init") + field(ZRVL, "0") +} + diff --git a/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBFP-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBFP-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..0776c60 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBFP-iocEC-GN-PSH0PCF.db @@ -0,0 +1,120 @@ +record (bi,"EC-GN-P01-GBFP:FMC4310-RV1") +{ + field(DESC, "Reserved for cRIO") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 11) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBFP:FMC4310-RV2") +{ + field(DESC, "Reserved for cRIO") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 12) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBFP:FMC4310-RV3") +{ + field(DESC, "Reserved for cRIO") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 13) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBFP:FMC4310-RV5") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBFP:FMC4310-RV6") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBFP:FMC4310-RV7") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBFP:FMC4310-RV8") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBFP:FMC4310-YSTA-GBOP") +{ + field(DESC, "GY2 Beam ON Status") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBFP:FMC4310-YTRP") +{ + field(DESC, "Interlock from fast protection 2") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 9) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-GBFP:FMC4310-YTRP2") +{ + field(DESC, "Pause signal from fast protection 2") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 10) bitread") + field(ONAM, "PAUSE") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + diff --git a/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GPF-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GPF-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..9fe5dd3 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GPF-iocEC-GN-PSH0PCF.db @@ -0,0 +1,349 @@ +record (bo,"EC-GN-P01-GPF:PCF4210-CTRP") +{ + field(DESC, "Fast Controller Fault") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:PCF4210-YTS-GA1") +{ + field(DESC, "GY1 HV Armed") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:PCF4210-YTS-GA2") +{ + field(DESC, "GY1 HV Injection") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:PCF4210-YTS-GA3") +{ + field(DESC, "GY1 in RFON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:PCF4210-YTS-GB1") +{ + field(DESC, "GY2 HV Armed") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:PCF4210-YTS-GB2") +{ + field(DESC, "GY2 HV Injection") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:PCF4210-YTS-GB3") +{ + field(DESC, "GY2 RFON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPF:PSU0000-YSTA-MOD") +{ + field(DESC, "MHVPS modulation en/disable from ECPC") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 8) bitread") + field(ONAM, "ENABLE") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "DISABLE") +} + +record (bo,"EC-GN-P01-GPF:STAT-DAQ-CONF-STAT") +{ + field(DESC, "DAQ config state") + field(ONAM, "Ready") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Not ready") +} + +record (bo,"EC-GN-P01-GPF:STAT-DAQ-RECONF") +{ + field(DESC, "Reset and configure DAQ") + field(HIGH, "0.1") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:STAT-DAQ-SW-TRIG") +{ + field(DESC, "software trigger for DAQ start") + field(HIGH, "0.1") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:STAT-RST-FLT") +{ + field(DESC, "Reset Fault command") + field(HIGH, "0.1") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (ao,"EC-GN-P01-GPF:STAT-DAQ-LEN") +{ + field(DESC, "DAQ sampling time length") + field(DRVH, "3600000") + field(DRVL, "0.01") + field(EGU, "ms") + field(HOPR, "3600000") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "1000.0") +} + +record (ao,"EC-GN-P01-GPF:STAT-DAQ-LEN-RB") +{ + field(DESC, "DAQ sampling time length readback") + field(DRVH, "3600000") + field(DRVL, "0.01") + field(EGU, "ms") + field(HOPR, "3600000") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "1000.0") +} + +record (mbbo,"EC-GN-P01-GPF:STAT-DAQ-MODE") +{ + field(DESC, "DAQ mode") + field(FRST, "Reference") + field(FRVL, "4") + field(ONST, "Finite") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(THST, "Continuous") + field(THVL, "3") + field(TWST, "Retriggerable") + field(TWVL, "2") + field(VAL, "3") + field(ZRST, "Software_triggered") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GPF:STAT-DAQ-MODE-RB") +{ + field(DESC, "DAQ mode readback") + field(FRST, "Reference") + field(FRVL, "4") + field(ONST, "Finite") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(THST, "Continuous") + field(THVL, "3") + field(TWST, "Retriggerable") + field(TWVL, "2") + field(VAL, "3") + field(ZRST, "Software_triggered") + field(ZRVL, "0") +} + +record (ao,"EC-GN-P01-GPF:STAT-DAQ-PUB-DLY") +{ + field(DESC, "DAN publish delay") + field(DRVH, "1000") + field(DRVL, "0.1") + field(EGU, "ms") + field(HOPR, "1000") + field(LOPR, "0.1") + field(PINI, "YES") + field(PREC, "1") + field(SCAN, "Passive") + field(VAL, "10.0") +} + +record (ao,"EC-GN-P01-GPF:STAT-DAQ-PUB-DLY-RB") +{ + field(DESC, "DAN publish delay") + field(DRVH, "1000") + field(DRVL, "0.1") + field(EGU, "ms") + field(HOPR, "1000") + field(LOPR, "0.1") + field(PINI, "YES") + field(PREC, "1") + field(SCAN, "Passive") + field(VAL, "10.0") +} + +record (longout,"EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE") +{ + field(DESC, "sampling rate") + field(DRVH, "1000000000") + field(DRVL, "1") + field(HOPR, "100000000") + field(LOPR, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1000") +} + +record (longout,"EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE-RB") +{ + field(DESC, "sampling rate readback") + field(DRVH, "1000000000") + field(DRVL, "1") + field(HOPR, "100000000") + field(LOPR, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1000") +} + +record (ao,"EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY") +{ + field(DESC, "DAQ start delay") + field(DRVH, "3600000") + field(DRVL, "0.01") + field(EGU, "ms") + field(HOPR, "3600000") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "1.0") +} + +record (ao,"EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY-RB") +{ + field(DESC, "DAQ start delay readback") + field(DRVH, "3600000") + field(DRVL, "0.01") + field(EGU, "ms") + field(HOPR, "3600000") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "1.0") +} + +record (mbbo,"EC-GN-P01-GPF:STAT-DAQ-STAT") +{ + field(DESC, "DAQ operation state") + field(FRSV, "NO_ALARM") + field(ONST, "Waiting trigger") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(THST, "Error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "Aquiring") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(VAL, "3") + field(ZRST, "Not ready") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (longin,"EC-GN-P01-GPF:STAT-MD1-LIM") +{ + field(DESC, "MD1 Pulse Len Limit") + field(HOPR, "500000000") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "10000") +} + +record (longin,"EC-GN-P01-GPF:STAT-MD2-LIM") +{ + field(DESC, "MD2 Pulse Len Limit") + field(HOPR, "500000000") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "100000") +} + +record (longin,"EC-GN-P01-GPF:STAT-MD3-LIM") +{ + field(DESC, "MD3 Pulse Len Limit") + field(HOPR, "500000000") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "30000000") +} + +record (longin,"EC-GN-P01-GPF:STAT-MD4-LIM") +{ + field(DESC, "MD4 Pulse Len Limit") + field(HOPR, "500000000") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "300000000") +} + +record (ai,"EC-GN-P01-GPF:STAT-RDY-TOUT") +{ + field(DESC, "Gyrotron operation ready timeout") + field(EGU, "s") + field(HOPR, "600") + field(LOPR, "1") + field(PINI, "YES") + field(PREC, "1") + field(SCAN, "Passive") + field(VAL, "30.0") +} + diff --git a/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GPS-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GPS-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..5763fa5 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GPS-iocEC-GN-PSH0PCF.db @@ -0,0 +1,230 @@ +record (bi,"EC-GN-P01-GPS:PLC4110-CON-GY1PRM") +{ + field(DESC, "GY1 Operation Permission") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 18) bitread") + field(ONAM, "PERMITED") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-CON-GY2PRM") +{ + field(DESC, "GY2 Operation Permission") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 18) bitread") + field(ONAM, "PERMITED") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-CON-OPGY1") +{ + field(DESC, "GY1 Selection") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 19) bitread") + field(ONAM, "SELECTED") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-CON-OPGY2") +{ + field(DESC, "GY2 Selection") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 19) bitread") + field(ONAM, "SELECTED") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-RV1") +{ + field(DESC, "Reserved for PLC") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 21) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPS:PLC4110-RV2") +{ + field(DESC, "Reserved for PLC") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPS:PLC4110-RV3") +{ + field(DESC, "Reserved for PLC") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YON-CCPS1") +{ + field(DESC, "GY1 CCPS Start Operation") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 20) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YON-CCPS2") +{ + field(DESC, "GY2 CCPS Start Operation") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 20) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YSTA-MPSS") +{ + field(DESC, "Sync/Asynchronous Flag") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 21) bitread") + field(ONAM, "SYNC") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "ASYNC") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTRP") +{ + field(DESC, "Interlock signal from PLC") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 14) bitread") + field(ONAM, "INTERLOCK") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-MD1") +{ + field(DESC, "Operation Mode 1") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 14) bitread") + field(ONAM, "VSHORT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-MD2") +{ + field(DESC, "Operation Mode 2") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 15) bitread") + field(ONAM, "SHORT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-MD3") +{ + field(DESC, "Operation Mode 3") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 16) bitread") + field(ONAM, "MIDDLE") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-MD4") +{ + field(DESC, "Operation Mode 4") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 17) bitread") + field(ONAM, "LONG") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-ST1R") +{ + field(DESC, "PLC STANDBY state") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 15) bitread") + field(ONAM, "STANDBY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-ST2R") +{ + field(DESC, "PLC READY state") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 16) bitread") + field(ONAM, "READY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-ST3R") +{ + field(DESC, "PLC ON state") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 17) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + diff --git a/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PA1F-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PA1F-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..3d11cb5 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PA1F-iocEC-GN-PSH0PCF.db @@ -0,0 +1,206 @@ +record (bo,"EC-GN-P01-PA1F:PSU3000-CON-HV") +{ + field(DESC, "GY1 APS HVON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PA1F:PSU3000-CON-SW") +{ + field(DESC, "GY1 APS HV SWON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PA1F:PSU3000-CTRP") +{ + field(DESC, "GY1 APS Shutdonw request") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-PA1F:PSU3000-YFLT") +{ + field(DESC, "GY1 APS Fault") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 1) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-PA1F:PSU3000-YSTA") +{ + field(DESC, "GY1 APS Ready") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 0) bitread") + field(ONAM, "READY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-PA1F:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 APS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (ao,"EC-GN-P01-PA1F:PSU3000-EREF") +{ + field(DESC, "GY1 APS voltage setpoint") + field(DRVH, "10") + field(DRVL, "-20") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "10") + field(LOPR, "-20") + field(OUT, "@asyn(ni6368_1, 1) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PA1F:PSU3000-EREF-MSP") +{ + field(DESC, "GY1 APS voltage manual setpoint") + field(DRVH, "10") + field(DRVL, "-20") + field(EGU, "kV") + field(HOPR, "10") + field(LOPR, "-20") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PA1F:PSU3000-EREF-P") +{ + field(ASLO, "2") + field(DESC, "GY1 APS P-voltage setpoint") + field(DRVH, "0") + field(DRVL, "-20") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "10") + field(LOPR, "-20") + field(OUT, "@asyn(ni6368_1, 2) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-PA1F:PSU3000-ET") +{ + field(DESC, "GY1 APS Measured Volatege") + field(EGU, "kV") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PA1F:PSU3000-ET-WF") +{ + field(DESC, "GY1 APS Measured Volatege") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PA1F:PSU3000-IT") +{ + field(DESC, "GY1 APS Measued Current") + field(EGU, "A") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PA1F:PSU3000-IT-WF") +{ + field(DESC, "GY1 APS Measued Current") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PA1F:STAT-DT-HVON") +{ + field(DESC, "Time diff to GY1 APS Gate ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "500000") +} + +record (ai,"EC-GN-P01-PA1F:STAT-DT-SWON") +{ + field(DESC, "Time diff to GY1 APS SW ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "600000") +} + +record (calcout,"EC-GN-P01-PA1F:STAT-EREF-CONV") +{ + field(CALC, "A>0?A:((A>-20)?A/2:-10)") + field(DESC, "GYA APS engineer value conversion") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-PA1F:PSU3000-EREF PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-PA1F:STAT-PREP-WF") +{ + field(DESC, "GY1 APS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PA2F-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PA2F-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..6a74042 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PA2F-iocEC-GN-PSH0PCF.db @@ -0,0 +1,206 @@ +record (bo,"EC-GN-P01-PA2F:PSU4000-CON-HV") +{ + field(DESC, "GY2 APS HVON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PA2F:PSU4000-CON-SW") +{ + field(DESC, "GY2 APS HV SWON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PA2F:PSU4000-CTRP") +{ + field(DESC, "GY2 APS Shutdown request") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-PA2F:PSU4000-YFLT") +{ + field(DESC, "GY2 APS Fault") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 1) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-PA2F:PSU4000-YSTA") +{ + field(DESC, "GY2 APS Ready") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 0) bitread") + field(ONAM, "READY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-PA2F:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY2 APS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (ao,"EC-GN-P01-PA2F:PSU4000-EREF") +{ + field(DESC, "GY2 APS voltage setpoint") + field(DRVH, "10") + field(DRVL, "-20") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "10") + field(LOPR, "-20") + field(OUT, "@asyn(ni6368_0, 1) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PA2F:PSU4000-EREF-MSP") +{ + field(DESC, "GY2 APS voltage manual setpoint") + field(DRVH, "10") + field(DRVL, "-20") + field(EGU, "kV") + field(HOPR, "10") + field(LOPR, "-20") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PA2F:PSU4000-EREF-P") +{ + field(ASLO, "2") + field(DESC, "GY2 APS P-voltage setpoint") + field(DRVH, "0") + field(DRVL, "-20") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "10") + field(LOPR, "-20") + field(OUT, "@asyn(ni6368_0, 2) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-PA2F:PSU4000-ET") +{ + field(DESC, "GY2 APS Measured Volatege") + field(EGU, "kV") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PA2F:PSU4000-ET-WF") +{ + field(DESC, "GY2 APS Measured Volatege") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PA2F:PSU4000-IT") +{ + field(DESC, "GY2 APS Measued Current") + field(EGU, "A") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PA2F:PSU4000-IT-WF") +{ + field(DESC, "GY2 APS Measued Current") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PA2F:STAT-DT-HVON") +{ + field(DESC, "Time diff to GY2 APS Gate ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "500000") +} + +record (ai,"EC-GN-P01-PA2F:STAT-DT-SWON") +{ + field(DESC, "Time diff to GY2 APS SW ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "600000") +} + +record (calcout,"EC-GN-P01-PA2F:STAT-EREF-CONV") +{ + field(CALC, "A>0?A:((A>-20)?A/2:-10)") + field(DESC, "GYB APS engineer value conversion") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-PA2F:PSU4000-EREF PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-PA2F:STAT-PREP-WF") +{ + field(DESC, "GY2 APS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PB1F-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PB1F-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..66c756d --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PB1F-iocEC-GN-PSH0PCF.db @@ -0,0 +1,180 @@ +record (bo,"EC-GN-P01-PB1F:PSU1000-CON-HV") +{ + field(DESC, "GY1 BPS HVON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PB1F:PSU1000-CON-SW") +{ + field(DESC, "GY1 BPS HV SWON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PB1F:PSU1000-CTRP") +{ + field(DESC, "GY1 BPS Shutdonw request") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-PB1F:PSU1000-YFLT") +{ + field(DESC, "GY1 BPS Fault") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 3) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-PB1F:PSU1000-YSTA") +{ + field(DESC, "GY1 BPS Ready") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 2) bitread") + field(ONAM, "READY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-PB1F:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 BPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (ao,"EC-GN-P01-PB1F:PSU1000-EREF") +{ + field(ASLO, "4") + field(DESC, "GY1 BPS voltage setpoint") + field(DRVH, "40") + field(DRVL, "0") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "40") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 0) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PB1F:PSU1000-EREF-MSP") +{ + field(DESC, "GY1 BPS voltage manual setpoint") + field(DRVH, "40") + field(DRVL, "0") + field(EGU, "kV") + field(HOPR, "40") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-PB1F:PSU1000-ET") +{ + field(DESC, "GY1 BPS Measured Voltage") + field(EGU, "kV") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PB1F:PSU1000-ET-WF") +{ + field(DESC, "GY1 BPS Measured Voltage") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PB1F:PSU1000-IT") +{ + field(DESC, "GY1 BPS Measured Current") + field(EGU, "A") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PB1F:PSU1000-IT-WF") +{ + field(DESC, "GY1 BPS Measured Current") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PB1F:STAT-DT-HVON") +{ + field(DESC, "Time diff to GY1 BPS Gate ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "500000") +} + +record (ai,"EC-GN-P01-PB1F:STAT-DT-SWON") +{ + field(DESC, "Time diff to GY1 BPS SW ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "550000") +} + +record (waveform,"EC-GN-P01-PB1F:STAT-PREP-WF") +{ + field(DESC, "GY1 BPS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PB2F-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PB2F-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..72c14a3 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PB2F-iocEC-GN-PSH0PCF.db @@ -0,0 +1,180 @@ +record (bo,"EC-GN-P01-PB2F:PSU2000-CON-HV") +{ + field(DESC, "GY2 BPS HVON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PB2F:PSU2000-CON-SW") +{ + field(DESC, "GY2 BPS HV SWON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PB2F:PSU2000-CTRP") +{ + field(DESC, "GY2 BPS Shutdonw request") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-PB2F:PSU2000-YFLT") +{ + field(DESC, "GY2 BPS Fault") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 3) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-PB2F:PSU2000-YSTA") +{ + field(DESC, "GY2 BPS Ready") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 2) bitread") + field(ONAM, "READY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-PB2F:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY2 BPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (ao,"EC-GN-P01-PB2F:PSU2000-EREF") +{ + field(ASLO, "4") + field(DESC, "GY2 BPS voltage setpoint") + field(DRVH, "40") + field(DRVL, "0") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "40") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_0, 0) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PB2F:PSU2000-EREF-MSP") +{ + field(DESC, "GY2 BPS voltage manual setpoint") + field(DRVH, "40") + field(DRVL, "0") + field(EGU, "kV") + field(HOPR, "40") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-PB2F:PSU2000-ET") +{ + field(DESC, "GY2 BPS Measured Voltage") + field(EGU, "kV") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PB2F:PSU2000-ET-WF") +{ + field(DESC, "GY2 BPS Measured Voltage") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PB2F:PSU2000-IT") +{ + field(DESC, "GY2 BPS Measured Current") + field(EGU, "A") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PB2F:PSU2000-IT-WF") +{ + field(DESC, "GY2 BPS Measured Current") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PB2F:STAT-DT-HVON") +{ + field(DESC, "Time diff to GY2 BPS Gate ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "500000") +} + +record (ai,"EC-GN-P01-PB2F:STAT-DT-SWON") +{ + field(DESC, "Time diff to GY2 BPS SW ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "550000") +} + +record (waveform,"EC-GN-P01-PB2F:STAT-PREP-WF") +{ + field(DESC, "GY2 BPS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PMF-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PMF-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..9778039 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PMF-iocEC-GN-PSH0PCF.db @@ -0,0 +1,231 @@ +record (bo,"EC-GN-P01-PMF:PSU0000-COFF") +{ + field(DESC, "MHVPS Shutdown request") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PMF:PSU0000-CON-MOD") +{ + field(DESC, "MHVPS MOD Enable/Disable") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PMF:PSU0000-CON-SW") +{ + field(DESC, "MHVPS Enable/Disable") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-PMF:PSU0000-TYSTA") +{ + field(DESC, "MHVPS Ready status") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 7) bitread") + field(ONAM, "READY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bi,"EC-GN-P01-PMF:PSU0000-YFLT") +{ + field(DESC, "MHVPS Fast Protection Act") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 6) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bo,"EC-GN-P01-PMF:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 APS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (ao,"EC-GN-P01-PMF:PSU0000-EREF") +{ + field(ASLO, "11") + field(DESC, "MHVPS voltage setpoint") + field(DRVH, "55") + field(DRVL, "0") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "55") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 3) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PMF:PSU0000-EREF-MSP") +{ + field(DESC, "MHVPS voltage manual setpoint") + field(DRVH, "55") + field(DRVL, "0") + field(EGU, "kV") + field(HOPR, "55") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-PMF:PSU0000-ET-GA") +{ + field(DESC, "GY1 MHVPS Measued Voltage") + field(EGU, "kV") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PMF:PSU0000-ET-GA-WF") +{ + field(DESC, "GY1 MHVPS Measued Voltage") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PMF:PSU0000-ET-GB") +{ + field(DESC, "GY2 MHVPS Measued Voltage") + field(EGU, "kV") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PMF:PSU0000-ET-GB-WF") +{ + field(DESC, "GY2 MHVPS Measued Voltage") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PMF:PSU0000-IT-GA") +{ + field(DESC, "GY1 MHVPS Measured Current") + field(EGU, "A") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PMF:PSU0000-IT-GA-WF") +{ + field(DESC, "GY1 MHVPS Measured Current") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PMF:PSU0000-IT-GB") +{ + field(DESC, "GY2 MHVPS Measured Current") + field(EGU, "A") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PMF:PSU0000-IT-GB-WF") +{ + field(DESC, "GY2 MHVPS Measured Current") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PMF:STAT-DT-HVON") +{ + field(DESC, "Time diff to MHVPS ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "500000") +} + +record (calcout,"EC-GN-P01-PMF:STAT-EREF-CALC") +{ + field(CALC, "(A!=C)?A:((B!=D)?B:E);C:=A; D:=B") + field(DESC, "determine MHVPS EREF change") + field(INPE, "EC-GN-P01-PMF:PSU0000-EREF") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-PMF:PSU0000-EREF PP") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-PMF:STAT-HVON-CALC") +{ + field(CALC, "(A||B)?1:0") + field(DESC, "determine MHVPS HVON change") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-PMF:PSU0000-CON-SW PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-PMF:STAT-PREP-WF") +{ + field(DESC, "MHVPS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Makefile b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Makefile new file mode 100644 index 0000000..b38d99d --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/Makefile @@ -0,0 +1,29 @@ +#+====================================================================== +# $HeadURL: https://svnpub.codac.iter.org/codac/iter/codac/dev/units/m-epics-iter-templates/branches/codac-core-6.1/templates/sddconfApp/Makefile $ +# $Id: Makefile 96475 2019-01-09 13:47:38Z sivecm $ +# +# Project : CODAC Core System +# +# Description : Makefile +# +# Author(s) : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2019 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== +TOP = .. +include $(TOP)/configure/CONFIG +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *src*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *Src*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *db*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *Db*)) +include $(TOP)/configure/RULES_DIRS + diff --git a/EC-GN-JA-PCF/src/main/epics/EC-GNApp/src/EC-GNMain.cpp b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/src/EC-GNMain.cpp new file mode 100644 index 0000000..178d63c --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/src/EC-GNMain.cpp @@ -0,0 +1,25 @@ +/* Main.cpp */ +/* Author: Marty Kraimer Date: 17MAR2000 */ + +#include +#include +#include +#include +#include +#include + +#include "epicsExit.h" +#include "epicsThread.h" +#include "iocsh.h" + +int main(int argc,char *argv[]) +{ + sigset(SIGTERM, epicsExit); + if(argc>=2) { + iocsh(argv[1]); + epicsThreadSleep(.2); + } + iocsh(NULL); + epicsExit(0); + return(0); +} diff --git a/EC-GN-JA-PCF/src/main/epics/EC-GNApp/src/Makefile b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/src/Makefile new file mode 100755 index 0000000..6b73f87 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/EC-GNApp/src/Makefile @@ -0,0 +1,57 @@ +TOP=../.. + +include $(TOP)/configure/CONFIG +#---------------------------------------- +# ADD MACRO DEFINITIONS AFTER THIS LINE +#======================================== + +#======================================== +# Build the IOC application + +PROD_IOC = EC-GN +# EC-GN.dbd will be created and installed +DBD += EC-GN.dbd + +# EC-GN.dbd will be made up from these files: +-include $(EPICS_ROOT)/mk/codac-common.mk + + +# Add all the support libraries needed by this IOC + +EC-GN_DBD += $(CODAC_DBD) +EC-GN_LIBS += $(CODAC_LIBS) + +# # SNCSEQ +# _SNCFLAGS += +r -c +d +# EC-GN_DBD += .dbd +# EC-GN_SRCS += .stt +# EC-GN_LIBS += seq pv + + +# EC-GN_registerRecordDeviceDriver.cpp derives from EC-GN.dbd +EC-GN_SRCS += EC-GN_registerRecordDeviceDriver.cpp + +# Build the main IOC entry point on workstation OSs. +EC-GN_SRCS_DEFAULT += EC-GNMain.cpp +EC-GN_SRCS_vxWorks += -nil- + +# Add support from base/src/vxWorks if needed +#EC-GN_OBJS_vxWorks += $(EPICS_BASE_BIN)/vxComLibrary + +#============================= +# Include SNL program makefile snippets + +-include ../*.snlprog + +#============================= + + +# Finally link to the EPICS Base libraries +EC-GN_LIBS += $(EPICS_BASE_IOC_LIBS) + +#=========================== + +include $(TOP)/configure/RULES +#---------------------------------------- +# ADD RULES AFTER THIS LINE +#---------------------------------------- \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/epics/Makefile b/EC-GN-JA-PCF/src/main/epics/Makefile new file mode 100644 index 0000000..5c6175c --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/Makefile @@ -0,0 +1,35 @@ +# Makefile at top of application tree +TOP = . +include $(TOP)/configure/CONFIG + +# Directories to build, any order +DIRS += configure +DIRS += $(wildcard *Sup) +DIRS += $(wildcard *App) +DIRS += $(wildcard *Top) +DIRS += $(wildcard iocBoot) + +# The build order is controlled by these dependency rules: + +# All dirs except configure depend on configure +$(foreach dir, $(filter-out configure, $(DIRS)), \ + $(eval $(dir)_DEPEND_DIRS += configure)) + +# Any *App dirs depend on all *SharedTemplateApp dirs +$(foreach dir, $(filter-out %SharedTemplateApp, $(filter %App, $(DIRS))), \ + $(eval $(dir)_DEPEND_DIRS += $(filter %SharedTemplateApp, $(DIRS)))) + +# Any *App dirs depend on all *Sup dirs +$(foreach dir, $(filter %App, $(DIRS)), \ + $(eval $(dir)_DEPEND_DIRS += $(filter %Sup, $(DIRS)))) + +# Any *Top dirs depend on all *Sup and *App dirs +$(foreach dir, $(filter %Top, $(DIRS)), \ + $(eval $(dir)_DEPEND_DIRS += $(filter %Sup %App, $(DIRS)))) + +# iocBoot depends on all *App dirs +iocBoot_DEPEND_DIRS += $(filter %App,$(DIRS)) + +# Add any additional dependency rules here: + +include $(TOP)/configure/RULES_TOP diff --git a/EC-GN-JA-PCF/src/main/epics/PLCApp/.appdesc b/EC-GN-JA-PCF/src/main/epics/PLCApp/.appdesc new file mode 100644 index 0000000..df999dd --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/PLCApp/.appdesc @@ -0,0 +1 @@ +generic \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/epics/PLCApp/Db/Makefile b/EC-GN-JA-PCF/src/main/epics/PLCApp/Db/Makefile new file mode 100644 index 0000000..3ef937f --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/PLCApp/Db/Makefile @@ -0,0 +1,24 @@ +TOP=../.. +include $(TOP)/configure/CONFIG +#---------------------------------------- +# ADD MACRO DEFINITIONS AFTER THIS LINE + +#---------------------------------------------------- +# Optimization of db files using dbst (DEFAULT: NO) +#DB_OPT = YES + +#---------------------------------------------------- +# Create and install (or just install) +# databases, templates, substitutions like this + + +# Automagically install .proto files +DB += $(notdir $(wildcard ../*.proto)) + +#---------------------------------------------------- +# If .db template is not named *.template add +# _TEMPLATE = + +include $(TOP)/configure/RULES +#---------------------------------------- +# ADD RULES AFTER THIS LINE diff --git a/EC-GN-JA-PCF/src/main/epics/PLCApp/Makefile b/EC-GN-JA-PCF/src/main/epics/PLCApp/Makefile new file mode 100644 index 0000000..6504a77 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/PLCApp/Makefile @@ -0,0 +1,29 @@ +#+====================================================================== +# $HeadURL: https://svnpub.codac.iter.org/codac/iter/codac/dev/units/m-epics-iter-templates/branches/codac-core-6.1/templates/genericApp/Makefile $ +# $Id: Makefile 96475 2019-01-09 13:47:38Z sivecm $ +# +# Project : CODAC Core System +# +# Description : Makefile +# +# Author(s) : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2019 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== +TOP = .. +include $(TOP)/configure/CONFIG +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *src*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *Src*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *db*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *Db*)) +include $(TOP)/configure/RULES_DIRS + diff --git a/EC-GN-JA-PCF/src/main/epics/PLCApp/src/Makefile b/EC-GN-JA-PCF/src/main/epics/PLCApp/src/Makefile new file mode 100644 index 0000000..c78bf18 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/PLCApp/src/Makefile @@ -0,0 +1,59 @@ +TOP=../.. + +include $(TOP)/configure/CONFIG +#---------------------------------------- +# ADD MACRO DEFINITIONS AFTER THIS LINE +#======================================== + +#======================================== +# Build the IOC application + +PROD_IOC = PLC +# PLC.dbd will be created and installed +DBD += PLC.dbd + +# PLC.dbd will be made up from these files: +-include $(EPICS_ROOT)/mk/codac-common.mk + + +# Add all the support libraries needed by this IOC +-include $(EPICS_ROOT)/mk/asyn.mk +-include $(EPICS_ROOT)/mk/s7PLCAsyn.mk + +PLC_DBD += $(CODAC_DBD) +PLC_LIBS += $(CODAC_LIBS) + +# # SNCSEQ +# _SNCFLAGS += +r -c +d +# PLC_DBD += .dbd +# PLC_SRCS += .stt +# PLC_LIBS += seq pv + + +# PLC_registerRecordDeviceDriver.cpp derives from PLC.dbd +PLC_SRCS += PLC_registerRecordDeviceDriver.cpp + +# Build the main IOC entry point on workstation OSs. +PLC_SRCS_DEFAULT += PLCMain.cpp +PLC_SRCS_vxWorks += -nil- + +# Add support from base/src/vxWorks if needed +#PLC_OBJS_vxWorks += $(EPICS_BASE_BIN)/vxComLibrary + +#============================= +# Include SNL program makefile snippets + +-include ../*.snlprog + +#============================= + + +# Finally link to the EPICS Base libraries +PLC_LIBS += $(EPICS_BASE_IOC_LIBS) + +#=========================== + +include $(TOP)/configure/RULES +#---------------------------------------- +# ADD RULES AFTER THIS LINE +#---------------------------------------- diff --git a/EC-GN-JA-PCF/src/main/epics/PLCApp/src/PLCMain.cpp b/EC-GN-JA-PCF/src/main/epics/PLCApp/src/PLCMain.cpp new file mode 100644 index 0000000..1edd319 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/PLCApp/src/PLCMain.cpp @@ -0,0 +1,25 @@ +/* PLCMain.cpp */ +/* Author: Marty Kraimer Date: 17MAR2000 */ + +#include +#include +#include +#include +#include +#include + +#include "epicsExit.h" +#include "epicsThread.h" +#include "iocsh.h" + +int main(int argc,char *argv[]) +{ + sigset(SIGTERM, epicsExit); + if(argc>=2) { + iocsh(argv[1]); + epicsThreadSleep(.2); + } + iocsh(NULL); + epicsExit(0); + return(0); +} diff --git a/EC-GN-JA-PCF/src/main/epics/configure/CONFIG b/EC-GN-JA-PCF/src/main/epics/configure/CONFIG new file mode 100644 index 0000000..c1a4703 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/configure/CONFIG @@ -0,0 +1,29 @@ +# CONFIG - Load build configuration data +# +# Do not make changes to this file! + +# Allow user to override where the build rules come from +RULES = $(EPICS_BASE) + +# RELEASE files point to other application tops +include $(TOP)/configure/RELEASE +-include $(TOP)/configure/RELEASE.$(EPICS_HOST_ARCH).Common +ifdef T_A +-include $(TOP)/configure/RELEASE.Common.$(T_A) +-include $(TOP)/configure/RELEASE.$(EPICS_HOST_ARCH).$(T_A) +endif + +CONFIG = $(RULES)/configure +include $(CONFIG)/CONFIG + +# Override the Base definition: +INSTALL_LOCATION = $(TOP) + +# CONFIG_SITE files contain other build configuration settings +include $(TOP)/configure/CONFIG_SITE +-include $(TOP)/configure/CONFIG_SITE.$(EPICS_HOST_ARCH).Common +ifdef T_A + -include $(TOP)/configure/CONFIG_SITE.Common.$(T_A) + -include $(TOP)/configure/CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A) +endif + diff --git a/EC-GN-JA-PCF/src/main/epics/configure/CONFIG_SITE b/EC-GN-JA-PCF/src/main/epics/configure/CONFIG_SITE new file mode 100644 index 0000000..212485e --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/configure/CONFIG_SITE @@ -0,0 +1,43 @@ +# CONFIG_SITE + +# Make any application-specific changes to the EPICS build +# configuration variables in this file. +# +# Host/target specific settings can be specified in files named +# CONFIG_SITE.$(EPICS_HOST_ARCH).Common +# CONFIG_SITE.Common.$(T_A) +# CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A) + +# CHECK_RELEASE controls the consistency checking of the support +# applications pointed to by the RELEASE* files. +# Normally CHECK_RELEASE should be set to YES. +# Set CHECK_RELEASE to NO to disable checking completely. +# Set CHECK_RELEASE to WARN to perform consistency checking but +# continue building even if conflicts are found. +CHECK_RELEASE = YES + +# Set this when you only want to compile this application +# for a subset of the cross-compiled target architectures +# that Base is built for. +#CROSS_COMPILER_TARGET_ARCHS = vxWorks-ppc32 + +# To install files into a location other than $(TOP) define +# INSTALL_LOCATION here. +#INSTALL_LOCATION= + +# Set this when the IOC and build host use different paths +# to the install location. This may be needed to boot from +# a Microsoft FTP server say, or on some NFS configurations. +#IOCS_APPL_TOP = + +# For application debugging purposes, override the HOST_OPT and/ +# or CROSS_OPT settings from base/configure/CONFIG_SITE +#HOST_OPT = NO +#CROSS_OPT = NO + +# These allow developers to override the CONFIG_SITE variable +# settings without having to modify the configure/CONFIG_SITE +# file itself. +-include $(TOP)/../CONFIG_SITE.local +-include $(TOP)/configure/CONFIG_SITE.local + diff --git a/EC-GN-JA-PCF/src/main/epics/configure/Makefile b/EC-GN-JA-PCF/src/main/epics/configure/Makefile new file mode 100644 index 0000000..9254309 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/configure/Makefile @@ -0,0 +1,8 @@ +TOP=.. + +include $(TOP)/configure/CONFIG + +TARGETS = $(CONFIG_TARGETS) +CONFIGS += $(subst ../,,$(wildcard $(CONFIG_INSTALLS))) + +include $(TOP)/configure/RULES diff --git a/EC-GN-JA-PCF/src/main/epics/configure/RULES b/EC-GN-JA-PCF/src/main/epics/configure/RULES new file mode 100644 index 0000000..6d56e14 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/configure/RULES @@ -0,0 +1,6 @@ +# RULES + +include $(CONFIG)/RULES + +# Library should be rebuilt because LIBOBJS may have changed. +$(LIBNAME): ../Makefile diff --git a/EC-GN-JA-PCF/src/main/epics/configure/RULES.ioc b/EC-GN-JA-PCF/src/main/epics/configure/RULES.ioc new file mode 100644 index 0000000..901987c --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/configure/RULES.ioc @@ -0,0 +1,2 @@ +#RULES.ioc +include $(CONFIG)/RULES.ioc diff --git a/EC-GN-JA-PCF/src/main/epics/configure/RULES_DIRS b/EC-GN-JA-PCF/src/main/epics/configure/RULES_DIRS new file mode 100644 index 0000000..3ba269d --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/configure/RULES_DIRS @@ -0,0 +1,2 @@ +#RULES_DIRS +include $(CONFIG)/RULES_DIRS diff --git a/EC-GN-JA-PCF/src/main/epics/configure/RULES_TOP b/EC-GN-JA-PCF/src/main/epics/configure/RULES_TOP new file mode 100644 index 0000000..d09d668 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/configure/RULES_TOP @@ -0,0 +1,3 @@ +#RULES_TOP +include $(CONFIG)/RULES_TOP + diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/Makefile b/EC-GN-JA-PCF/src/main/epics/iocBoot/Makefile new file mode 100644 index 0000000..91e47d0 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/Makefile @@ -0,0 +1,6 @@ +TOP = .. +include $(TOP)/configure/CONFIG +DIRS += $(wildcard *ioc*) +DIRS += $(wildcard as*) +include $(CONFIG)/RULES_DIRS + diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/Makefile b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/Makefile new file mode 100644 index 0000000..79c4ce6 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/Makefile @@ -0,0 +1,5 @@ +TOP = ../.. +include $(TOP)/configure/CONFIG +ARCH = linux-x86_64 +TARGETS = envPaths +include $(TOP)/configure/RULES.ioc diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/dbToLoad.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/dbToLoad.cmd new file mode 100755 index 0000000..e012c40 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/dbToLoad.cmd @@ -0,0 +1,17 @@ + +#====================================================================== +# SYS Monitor +#====================================================================== +cd $(EPICS_ROOT)/db +#dbLoadRecords("picmg-sensors.db","CBS=EC-GN-SYSM, CTRLTYPE=F, IDX=0, PP=01, PPPP=52RF, NNNN=4210, TTT=PCF") +#dbLoadRecords("sysmon.db","CBS=EC-GN-SYSM, CTRLTYPE=F, IDX=0, PP=01, PPPP=52RF, NNNN=4210, TTT=PCF") + + +#====================================================================== +# IOC Monitor +#====================================================================== +cd $(EPICS_ROOT)/db +dbLoadRecords("iocmon.db","CBS=EC-GN-SYSM, CTRLTYPE=F, IDX=0, IOCTYPE=SYSM, PP=01, PPPP=52RF, NNNN=4210, TTT=PCF") + + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/envSystem b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/envSystem new file mode 100755 index 0000000..347e683 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/envSystem @@ -0,0 +1,8 @@ +############################################################################ +## CODAC specific environment variables +############################################################################ + +epicsEnvSet("AUTOSAVE_SYSM_PV_PREFIX","EC-GN-SYSM:PCF0SYSM-") +epicsEnvSet("IOCSH_PS1","${IOC}> ") +epicsEnvSet("STREAM_PROTOCOL_PATH","$(TOP)/db:$(EPICS_ROOT)/db") + diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/envUser b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/envUser new file mode 100644 index 0000000..90ddfc7 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/envUser @@ -0,0 +1,9 @@ +############################################################################ +## User provided environment variables +############################################################################ + +#epicsEnvSet("EPICS_CA_SERVER_PORT", "5064") +#epicsEnvSet("EPICS_CA_ADDR_LIST", "") +#epicsEnvSet("EPICS_CA_AUTO_ADDR_LIST", "YES") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/iocEC-GN-PCF0SYSM-postSaveRestore.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/iocEC-GN-PCF0SYSM-postSaveRestore.cmd new file mode 100755 index 0000000..864013e --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/iocEC-GN-PCF0SYSM-postSaveRestore.cmd @@ -0,0 +1,8 @@ +############################################################################ +## Autosave monitor post setup +############################################################################ + +cd "${TOP}/iocBoot/$(IOC)" +create_monitor_set(".req",30,"P=$(AUTOSAVE_SYSM_PV_PREFIX)") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/iocEC-GN-PCF0SYSM-preSaveRestore.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/iocEC-GN-PCF0SYSM-preSaveRestore.cmd new file mode 100755 index 0000000..114fba6 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/iocEC-GN-PCF0SYSM-preSaveRestore.cmd @@ -0,0 +1,42 @@ +############################################################################ +## Save and restore +############################################################################ + +### save_restore setup +# status-PV prefix +save_restoreSet_status_prefix("$(AUTOSAVE_SYSM_PV_PREFIX)") + +# Use status-PV +save_restoreSet_UseStatusPVs(1) + +# Debug-output level +save_restoreSet_Debug(0) + +# Ok to save/restore save sets with missing values (no CA connection to PV)? +save_restoreSet_IncompleteSetsOk(1) +# Save dated backup files? +save_restoreSet_DatedBackupFiles(1) + +# Number of sequenced backup files to write +save_restoreSet_NumSeqFiles(3) +# Time interval between sequenced backups +save_restoreSet_SeqPeriodInSeconds(300) + +# specify where save files should be +set_savefile_path("$(EPICS_AUTOSAVE_VAR)/$(UNIT_NAME)") + +# specify what save files should be restored. Note these files must be +# in the directory specified in set_savefile_path(), or, if that function +# has not been called, from the directory current when iocInit is invoked + +# Save files associated with the request files 'auto-output.req' and +# 'auto-input.req'. These files are the standard way to use autosave + +set_pass1_restoreFile(".sav") + +# specify directories in which to to search for included request files +set_requestfile_path("./") + +dbLoadRecords("$(EPICS_ROOT)/db/save_restoreStatus.db", "P=$(AUTOSAVE_SYSM_PV_PREFIX)") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/iocEC-GN-PCF0SYSM.req b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/iocEC-GN-PCF0SYSM.req new file mode 100755 index 0000000..e69de29 diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/sddPostDriverConf.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/sddPostDriverConf.cmd new file mode 100644 index 0000000..d223981 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/sddPostDriverConf.cmd @@ -0,0 +1,6 @@ +############################################################################ +## SDD provided PLC or fast controller driver post configuration +############################################################################ + + +#- End-of-file marker - do not delete or add lines below! \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/sddPreDriverConf.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/sddPreDriverConf.cmd new file mode 100644 index 0000000..770f841 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/sddPreDriverConf.cmd @@ -0,0 +1,86 @@ +#====================================================================== +# PLC(s) driver configuration commands +#====================================================================== +# level=-1: no output +# level=0: errors only +# level=1: startup messages +# level=2: + output record processing +# level=3: + input record processing +# level=4: + driver calls +# level=5: + io printout +# be careful using level>1 since many messages may introduce delays + +# var s7plcDebug 2 + +# s7plcConfigure name,IPaddr,port,inSize,outSize,bigEndian,recvTimeout,sendIntervall, configversion +# connects to PLC on address port +# : size of data block PLC -> IOC [bytes] +# : size of data block IOC -> PLC [bytes] +# =1 : motorola format data (MSB first) +# =0 : intel format data (LSB first) +# : receive buffer interval [ms] (Default : 50ms) +# : time to wait before sending new data to PLC [ms] +# : database configuration version + +# s7plcConfigureCmd name,IPaddr,port,outSize,bigEndian,sendIntervall +# connects to PLC on address port +# : size of data block IOC -> PLC [bytes] +# =1 : motorola format data (MSB first) +# =0 : intel format data (LSB first) +# : time to wait before sending new data to PLC [ms] + + + +#============================================================================ +# s7plc asyn driver configuration commands +#============================================================================ + +#============================================================================ +# NI-6259 DAQ I/O Module driver configuration commands +#============================================================================ +# Reference: ITER_D_3DEY52 v1.3 - NI PXI-6259 EPICS Driver User’s Guide + +# For analogue input, analogue output, waveform, initialize using below function +# pxi6259_ai_init(uint8 cardnumber, uint32 range, uint32 clk_source, uint32 clk_edge); +# Example: pxi6259_ai_init(0, 1, 0, 0) + +# For binary input, binary output, multi-bit binary input, multi bit binary output, initialize using below function +# pxi6259init(uint8 cardnumber, uint32 portmask0, uint8 portmask1, uint8 portmask2); +# Example: pxi6259_bio_init(0, 0xFF000000, 0xFF, 0xFF) + + +#============================================================================ +# NI-6682 Timing and Synchronization I/O Module driver configuration commands +#============================================================================ +# Reference ITER_D_33Q5TX v1.7 - NI Sync EPICS Driver User’s Guide + +# nisyncDrvInit(string port, char* type, int cardNumber); +# Example: nisyncDrvInit("S0", "PXI-6682", "0"); +# Example: nisyncDrvInit("S0", "PXI-6683H", "0"); +# nisyncTimeInit(int cardID, char* type, int cardNumber); +# Example: nisyncTimeInit("0", "PXI-6682", "0") +# Example: nisyncTimeInit("0", "PXI-6683H", "0") + + +#============================================================================================ +# NI-6368 X Series - Multifunction Data Acquisition I/O Module driver configuration commands +#============================================================================================ +# Reference ITER_D_3P4N3R v1.2 - NI X Series EPICS Driver User’s Guide + +# nixseriesInit(char *portName, char *nix6368Card); +# Example: nixseriesInit("ni6368_0", "/dev/ni6368.0"); + + +#============================================================================ +# NI-6528 DAQ I/O Module driver configuration commands +#============================================================================ +# Reference ITER_D_433VEW - NI PXI-6528 EPICS Driver User's Manual +# ni6528_init(char *portName, char *ni6528Card); +# Example: pxi6528_init("ni6528_0", "/dev/ni6528.0") +# asynSetTraceMask("",0,255) +# Example: asynSetTraceMask("pxi6528_0",0,255) +# pxi6528_reset(char *portName) +# Example: pxi6528_reset("pxi6528_0") + + +#- End-of-file marker - do not delete or add lines below! \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/sddSeqToLoad.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/sddSeqToLoad.cmd new file mode 100644 index 0000000..a23d75a --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/sddSeqToLoad.cmd @@ -0,0 +1,6 @@ +############################################################################ +## SDD provided sequence programs to load +############################################################################ + + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/seqToLoad.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/seqToLoad.cmd new file mode 100644 index 0000000..30e4bde --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/seqToLoad.cmd @@ -0,0 +1,8 @@ +############################################################################ +## Sequence programs to load +############################################################################ + +## Start any sequence programs +#seq sncxxx,"user=codac-devHost" + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/st.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/st.cmd new file mode 100755 index 0000000..420177c --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/st.cmd @@ -0,0 +1,67 @@ +#!../../bin/linux-x86_64/EC-GN +#+====================================================================== +# $HeadURL: https://svnpub.codac.iter.org/codac/iter/codac/dev/units/m-epics-iter-templates/branches/codac-core-6.1/templates/genericBoot/ioc/st.cmd $ +# $Id: st.cmd 96475 2019-01-09 13:47:38Z sivecm $ +# +# Project : CODAC Core System +# +# Description : ITER ioc template EPICS start up file +# +# Author(s) : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2019 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== + +< envPaths +< envSystem +< envUser + +cd "${TOP}" + +############################################################################ +## Register all support components +############################################################################ + +dbLoadDatabase "dbd/EC-GN.dbd" +EC_GN_registerRecordDeviceDriver pdbbase + +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/sddPreDriverConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/userPreDriverConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/threadSchedulingConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/dbToLoad.cmd" +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/iocEC-GN-PCF0SYSM-preSaveRestore.cmd" + +############################################################################ +## IOC Logging +############################################################################ +iocLogInit +iocLogPrefix "${STY} : " + +############################################################################ +## IOC initialization +############################################################################ +cd "${TOP}/db" +iocInit + +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/iocEC-GN-PCF0SYSM-postSaveRestore.cmd" +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/sddSeqToLoad.cmd" +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/seqToLoad.cmd" +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/sddPostDriverConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/userPostDriverConf.cmd" + + +dbl > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbl" +dbla > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbla" +dbior > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbior" +dbhcr > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbhcr" + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/threadSchedulingConf.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/threadSchedulingConf.cmd new file mode 100644 index 0000000..29d9b00 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/threadSchedulingConf.cmd @@ -0,0 +1,6 @@ +############################################################################ +## Thread scheduling configuration for real-time tuning +############################################################################ + + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/userPostDriverConf.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/userPostDriverConf.cmd new file mode 100644 index 0000000..8786feb --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/userPostDriverConf.cmd @@ -0,0 +1,6 @@ +############################################################################ +## User provided PLC or fast controller driver post configuration +############################################################################ + + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/userPreDriverConf.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/userPreDriverConf.cmd new file mode 100644 index 0000000..6c9a40e --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PCF0SYSM/userPreDriverConf.cmd @@ -0,0 +1,12 @@ +############################################################################ +## User provided PLC or fast controller driver pre configuration +############################################################################ + +# Enable parallel callback threads to improve 'I/O Intr' record scanning +# see https://bugzilla.iter.org/codac/show_bug.cgi?id=10413 +callbackParallelThreads + +callbackSetQueueSize(100000) +scanOnceSetQueueSize(100000) + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/Makefile b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/Makefile new file mode 100644 index 0000000..79c4ce6 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/Makefile @@ -0,0 +1,5 @@ +TOP = ../.. +include $(TOP)/configure/CONFIG +ARCH = linux-x86_64 +TARGETS = envPaths +include $(TOP)/configure/RULES.ioc diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/dbToLoad.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/dbToLoad.cmd new file mode 100755 index 0000000..ef13828 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/dbToLoad.cmd @@ -0,0 +1,25 @@ +#====================================================================== +# Loading DBs +#====================================================================== +cd $(TOP)/db + + +#====================================================================== +# Loading Substitution Files +#====================================================================== +cd $(TOP)/iocBoot/$(IOC) + + +#====================================================================== +# PLC Communication Monitoring PVs DB Loading +#====================================================================== +cd $(EPICS_ROOT)/db + + +#====================================================================== +# IOC Monitor +#====================================================================== +cd $(EPICS_ROOT)/db +#dbLoadRecords("iocmon.db","CBS=EC-GN-SYSM, CTRLTYPE=À)ú, IDX=0, IOCTYPE=CUB, PP=, PPPP=, NNNN=, TTT=") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/envSystem b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/envSystem new file mode 100755 index 0000000..39d71cf --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/envSystem @@ -0,0 +1,8 @@ +epicsEnvSet("AUTOSAVE_SYSM_PV_PREFIX", "EC-GN-SYSM:PSH0CUB-") +epicsEnvSet("IOCSH_PS1", "${IOC}> ") +epicsEnvSet("STREAM_PROTOCOL_PATH", "$(TOP)/db:$(EPICS_ROOT)/db") +epicsEnvSet("IPPort_priority","0") +epicsEnvSet("IPPort_noAutoConnect", "0") +epicsEnvSet("IPPort_noProcessEos", "0") + +#- End-of-file marker - do not delete or add lines below! \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/envUser b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/envUser new file mode 100644 index 0000000..90ddfc7 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/envUser @@ -0,0 +1,9 @@ +############################################################################ +## User provided environment variables +############################################################################ + +#epicsEnvSet("EPICS_CA_SERVER_PORT", "5064") +#epicsEnvSet("EPICS_CA_ADDR_LIST", "") +#epicsEnvSet("EPICS_CA_AUTO_ADDR_LIST", "YES") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/iocEC-GN-PSH0CUB-postSaveRestore.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/iocEC-GN-PSH0CUB-postSaveRestore.cmd new file mode 100755 index 0000000..864013e --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/iocEC-GN-PSH0CUB-postSaveRestore.cmd @@ -0,0 +1,8 @@ +############################################################################ +## Autosave monitor post setup +############################################################################ + +cd "${TOP}/iocBoot/$(IOC)" +create_monitor_set(".req",30,"P=$(AUTOSAVE_SYSM_PV_PREFIX)") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/iocEC-GN-PSH0CUB-preSaveRestore.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/iocEC-GN-PSH0CUB-preSaveRestore.cmd new file mode 100755 index 0000000..114fba6 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/iocEC-GN-PSH0CUB-preSaveRestore.cmd @@ -0,0 +1,42 @@ +############################################################################ +## Save and restore +############################################################################ + +### save_restore setup +# status-PV prefix +save_restoreSet_status_prefix("$(AUTOSAVE_SYSM_PV_PREFIX)") + +# Use status-PV +save_restoreSet_UseStatusPVs(1) + +# Debug-output level +save_restoreSet_Debug(0) + +# Ok to save/restore save sets with missing values (no CA connection to PV)? +save_restoreSet_IncompleteSetsOk(1) +# Save dated backup files? +save_restoreSet_DatedBackupFiles(1) + +# Number of sequenced backup files to write +save_restoreSet_NumSeqFiles(3) +# Time interval between sequenced backups +save_restoreSet_SeqPeriodInSeconds(300) + +# specify where save files should be +set_savefile_path("$(EPICS_AUTOSAVE_VAR)/$(UNIT_NAME)") + +# specify what save files should be restored. Note these files must be +# in the directory specified in set_savefile_path(), or, if that function +# has not been called, from the directory current when iocInit is invoked + +# Save files associated with the request files 'auto-output.req' and +# 'auto-input.req'. These files are the standard way to use autosave + +set_pass1_restoreFile(".sav") + +# specify directories in which to to search for included request files +set_requestfile_path("./") + +dbLoadRecords("$(EPICS_ROOT)/db/save_restoreStatus.db", "P=$(AUTOSAVE_SYSM_PV_PREFIX)") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/sddPostDriverConf.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/sddPostDriverConf.cmd new file mode 100644 index 0000000..d223981 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/sddPostDriverConf.cmd @@ -0,0 +1,6 @@ +############################################################################ +## SDD provided PLC or fast controller driver post configuration +############################################################################ + + +#- End-of-file marker - do not delete or add lines below! \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/sddPreDriverConf.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/sddPreDriverConf.cmd new file mode 100644 index 0000000..770f841 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/sddPreDriverConf.cmd @@ -0,0 +1,86 @@ +#====================================================================== +# PLC(s) driver configuration commands +#====================================================================== +# level=-1: no output +# level=0: errors only +# level=1: startup messages +# level=2: + output record processing +# level=3: + input record processing +# level=4: + driver calls +# level=5: + io printout +# be careful using level>1 since many messages may introduce delays + +# var s7plcDebug 2 + +# s7plcConfigure name,IPaddr,port,inSize,outSize,bigEndian,recvTimeout,sendIntervall, configversion +# connects to PLC on address port +# : size of data block PLC -> IOC [bytes] +# : size of data block IOC -> PLC [bytes] +# =1 : motorola format data (MSB first) +# =0 : intel format data (LSB first) +# : receive buffer interval [ms] (Default : 50ms) +# : time to wait before sending new data to PLC [ms] +# : database configuration version + +# s7plcConfigureCmd name,IPaddr,port,outSize,bigEndian,sendIntervall +# connects to PLC on address port +# : size of data block IOC -> PLC [bytes] +# =1 : motorola format data (MSB first) +# =0 : intel format data (LSB first) +# : time to wait before sending new data to PLC [ms] + + + +#============================================================================ +# s7plc asyn driver configuration commands +#============================================================================ + +#============================================================================ +# NI-6259 DAQ I/O Module driver configuration commands +#============================================================================ +# Reference: ITER_D_3DEY52 v1.3 - NI PXI-6259 EPICS Driver User’s Guide + +# For analogue input, analogue output, waveform, initialize using below function +# pxi6259_ai_init(uint8 cardnumber, uint32 range, uint32 clk_source, uint32 clk_edge); +# Example: pxi6259_ai_init(0, 1, 0, 0) + +# For binary input, binary output, multi-bit binary input, multi bit binary output, initialize using below function +# pxi6259init(uint8 cardnumber, uint32 portmask0, uint8 portmask1, uint8 portmask2); +# Example: pxi6259_bio_init(0, 0xFF000000, 0xFF, 0xFF) + + +#============================================================================ +# NI-6682 Timing and Synchronization I/O Module driver configuration commands +#============================================================================ +# Reference ITER_D_33Q5TX v1.7 - NI Sync EPICS Driver User’s Guide + +# nisyncDrvInit(string port, char* type, int cardNumber); +# Example: nisyncDrvInit("S0", "PXI-6682", "0"); +# Example: nisyncDrvInit("S0", "PXI-6683H", "0"); +# nisyncTimeInit(int cardID, char* type, int cardNumber); +# Example: nisyncTimeInit("0", "PXI-6682", "0") +# Example: nisyncTimeInit("0", "PXI-6683H", "0") + + +#============================================================================================ +# NI-6368 X Series - Multifunction Data Acquisition I/O Module driver configuration commands +#============================================================================================ +# Reference ITER_D_3P4N3R v1.2 - NI X Series EPICS Driver User’s Guide + +# nixseriesInit(char *portName, char *nix6368Card); +# Example: nixseriesInit("ni6368_0", "/dev/ni6368.0"); + + +#============================================================================ +# NI-6528 DAQ I/O Module driver configuration commands +#============================================================================ +# Reference ITER_D_433VEW - NI PXI-6528 EPICS Driver User's Manual +# ni6528_init(char *portName, char *ni6528Card); +# Example: pxi6528_init("ni6528_0", "/dev/ni6528.0") +# asynSetTraceMask("",0,255) +# Example: asynSetTraceMask("pxi6528_0",0,255) +# pxi6528_reset(char *portName) +# Example: pxi6528_reset("pxi6528_0") + + +#- End-of-file marker - do not delete or add lines below! \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/sddSeqToLoad.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/sddSeqToLoad.cmd new file mode 100644 index 0000000..a23d75a --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/sddSeqToLoad.cmd @@ -0,0 +1,6 @@ +############################################################################ +## SDD provided sequence programs to load +############################################################################ + + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/seqToLoad.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/seqToLoad.cmd new file mode 100644 index 0000000..30e4bde --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/seqToLoad.cmd @@ -0,0 +1,8 @@ +############################################################################ +## Sequence programs to load +############################################################################ + +## Start any sequence programs +#seq sncxxx,"user=codac-devHost" + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/st.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/st.cmd new file mode 100755 index 0000000..443faa9 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/st.cmd @@ -0,0 +1,67 @@ +#!../../bin/linux-x86_64/EC-GN +#+====================================================================== +# $HeadURL: https://svnpub.codac.iter.org/codac/iter/codac/dev/units/m-epics-iter-templates/branches/codac-core-6.1/templates/genericBoot/ioc/st.cmd $ +# $Id: st.cmd 96475 2019-01-09 13:47:38Z sivecm $ +# +# Project : CODAC Core System +# +# Description : ITER ioc template EPICS start up file +# +# Author(s) : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2019 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== + +< envPaths +< envSystem +< envUser + +cd "${TOP}" + +############################################################################ +## Register all support components +############################################################################ + +dbLoadDatabase "dbd/CUB.dbd" +EC_GN_registerRecordDeviceDriver pdbbase + +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/sddPreDriverConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/userPreDriverConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/threadSchedulingConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/dbToLoad.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/iocEC-GN-PSH0CUB-preSaveRestore.cmd" + +############################################################################ +## IOC Logging +############################################################################ +iocLogInit +iocLogPrefix "${STY} : " + +############################################################################ +## IOC initialization +############################################################################ +cd "${TOP}/db" +iocInit + +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/iocEC-GN-PSH0CUB-postSaveRestore.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/sddSeqToLoad.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/seqToLoad.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/sddPostDriverConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/userPostDriverConf.cmd" + + +dbl > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbl" +dbla > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbla" +dbior > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbior" +dbhcr > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbhcr" + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/threadSchedulingConf.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/threadSchedulingConf.cmd new file mode 100644 index 0000000..29d9b00 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/threadSchedulingConf.cmd @@ -0,0 +1,6 @@ +############################################################################ +## Thread scheduling configuration for real-time tuning +############################################################################ + + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/userPostDriverConf.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/userPostDriverConf.cmd new file mode 100644 index 0000000..8786feb --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/userPostDriverConf.cmd @@ -0,0 +1,6 @@ +############################################################################ +## User provided PLC or fast controller driver post configuration +############################################################################ + + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/userPreDriverConf.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/userPreDriverConf.cmd new file mode 100644 index 0000000..6c9a40e --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0CUB/userPreDriverConf.cmd @@ -0,0 +1,12 @@ +############################################################################ +## User provided PLC or fast controller driver pre configuration +############################################################################ + +# Enable parallel callback threads to improve 'I/O Intr' record scanning +# see https://bugzilla.iter.org/codac/show_bug.cgi?id=10413 +callbackParallelThreads + +callbackSetQueueSize(100000) +scanOnceSetQueueSize(100000) + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/Makefile b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/Makefile new file mode 100644 index 0000000..79c4ce6 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/Makefile @@ -0,0 +1,5 @@ +TOP = ../.. +include $(TOP)/configure/CONFIG +ARCH = linux-x86_64 +TARGETS = envPaths +include $(TOP)/configure/RULES.ioc diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/dbToLoad.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/dbToLoad.cmd new file mode 100755 index 0000000..9a1eb6b --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/dbToLoad.cmd @@ -0,0 +1,45 @@ +#====================================================================== +# Loading DBs +#====================================================================== +cd $(TOP)/db +dbLoadRecords("PCF0-EC-GN-HWCF-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GAF-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GAF-CCPS-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GAF-FHPS-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GAF-GCPS-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GAF-MCPS-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GAFP-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GBF-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GBF-CCPS-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GBF-FHPS-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GBF-GCPS-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GBF-MCPS-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GBFP-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GPF-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GPS-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-PA1F-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-PA2F-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-PB1F-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-PB2F-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-PMF-iocEC-GN-PSH0PCF.db") + + +#====================================================================== +# Loading Substitution Files +#====================================================================== +cd $(TOP)/iocBoot/$(IOC) + + +#====================================================================== +# PLC Communication Monitoring PVs DB Loading +#====================================================================== +cd $(EPICS_ROOT)/db + + +#====================================================================== +# IOC Monitor +#====================================================================== +cd $(EPICS_ROOT)/db +#dbLoadRecords("iocmon.db","CBS=EC-GN-SYSM, CTRLTYPE=F, IDX=0, IOCTYPE=CORE, PP=01, PPPP=52RF, NNNN=4210, TTT=PCF") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/envSystem b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/envSystem new file mode 100755 index 0000000..5dc56ee --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/envSystem @@ -0,0 +1,10 @@ +############################################################################ +## CODAC specific environment variables +############################################################################ + +epicsEnvSet("AUTOSAVE_SYSM_PV_PREFIX","EC-GN-SYSM:PCF0CORE-") +epicsEnvSet("IOCSH_PS1","${IOC}> ") +epicsEnvSet("STREAM_PROTOCOL_PATH","$(TOP)/db:$(EPICS_ROOT)/db") + + +#- End-of-file marker - do not delete or add lines below! \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/envUser b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/envUser new file mode 100644 index 0000000..90ddfc7 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/envUser @@ -0,0 +1,9 @@ +############################################################################ +## User provided environment variables +############################################################################ + +#epicsEnvSet("EPICS_CA_SERVER_PORT", "5064") +#epicsEnvSet("EPICS_CA_ADDR_LIST", "") +#epicsEnvSet("EPICS_CA_AUTO_ADDR_LIST", "YES") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/iocEC-GN-PSH0PCF-postSaveRestore.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/iocEC-GN-PSH0PCF-postSaveRestore.cmd new file mode 100755 index 0000000..d5356be --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/iocEC-GN-PSH0PCF-postSaveRestore.cmd @@ -0,0 +1,8 @@ +############################################################################ +## Autosave monitor post setup +############################################################################ + +cd "${TOP}/iocBoot/$(IOC)" +create_monitor_set("iocEC-GN-PSH0PCF.req",30,"P=$(AUTOSAVE_SYSM_PV_PREFIX)") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/iocEC-GN-PSH0PCF-preSaveRestore.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/iocEC-GN-PSH0PCF-preSaveRestore.cmd new file mode 100755 index 0000000..bb00d97 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/iocEC-GN-PSH0PCF-preSaveRestore.cmd @@ -0,0 +1,42 @@ +############################################################################ +## Save and restore +############################################################################ + +### save_restore setup +# status-PV prefix +save_restoreSet_status_prefix("$(AUTOSAVE_SYSM_PV_PREFIX)") + +# Use status-PV +save_restoreSet_UseStatusPVs(1) + +# Debug-output level +save_restoreSet_Debug(0) + +# Ok to save/restore save sets with missing values (no CA connection to PV)? +save_restoreSet_IncompleteSetsOk(1) +# Save dated backup files? +save_restoreSet_DatedBackupFiles(1) + +# Number of sequenced backup files to write +save_restoreSet_NumSeqFiles(3) +# Time interval between sequenced backups +save_restoreSet_SeqPeriodInSeconds(300) + +# specify where save files should be +set_savefile_path("$(EPICS_AUTOSAVE_VAR)/$(UNIT_NAME)") + +# specify what save files should be restored. Note these files must be +# in the directory specified in set_savefile_path(), or, if that function +# has not been called, from the directory current when iocInit is invoked + +# Save files associated with the request files 'auto-output.req' and +# 'auto-input.req'. These files are the standard way to use autosave + +set_pass1_restoreFile("iocEC-GN-PSH0PCF.sav") + +# specify directories in which to to search for included request files +set_requestfile_path("./") + +dbLoadRecords("$(EPICS_ROOT)/db/save_restoreStatus.db", "P=$(AUTOSAVE_SYSM_PV_PREFIX)") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/iocEC-GN-PSH0PCF.req b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/iocEC-GN-PSH0PCF.req new file mode 100755 index 0000000..e69de29 diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/sddPostDriverConf.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/sddPostDriverConf.cmd new file mode 100755 index 0000000..2340b6e --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/sddPostDriverConf.cmd @@ -0,0 +1,2 @@ + +#- End-of-file marker - do not delete or add lines below! \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/sddPreDriverConf.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/sddPreDriverConf.cmd new file mode 100755 index 0000000..2340b6e --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/sddPreDriverConf.cmd @@ -0,0 +1,2 @@ + +#- End-of-file marker - do not delete or add lines below! \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/sddSeqToLoad.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/sddSeqToLoad.cmd new file mode 100644 index 0000000..a23d75a --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/sddSeqToLoad.cmd @@ -0,0 +1,6 @@ +############################################################################ +## SDD provided sequence programs to load +############################################################################ + + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/seqToLoad.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/seqToLoad.cmd new file mode 100644 index 0000000..30e4bde --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/seqToLoad.cmd @@ -0,0 +1,8 @@ +############################################################################ +## Sequence programs to load +############################################################################ + +## Start any sequence programs +#seq sncxxx,"user=codac-devHost" + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/st.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/st.cmd new file mode 100755 index 0000000..60517bb --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/st.cmd @@ -0,0 +1,67 @@ +#!../../bin/linux-x86_64/EC-GN +#+====================================================================== +# $HeadURL: https://svnpub.codac.iter.org/codac/iter/codac/dev/units/m-epics-iter-templates/branches/codac-core-6.1/templates/genericBoot/ioc/st.cmd $ +# $Id: st.cmd 96475 2019-01-09 13:47:38Z sivecm $ +# +# Project : CODAC Core System +# +# Description : ITER ioc template EPICS start up file +# +# Author(s) : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2019 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== + +< envPaths +< envSystem +< envUser + +cd "${TOP}" + +############################################################################ +## Register all support components +############################################################################ + +dbLoadDatabase "dbd/EC-GN.dbd" +EC_GN_registerRecordDeviceDriver pdbbase + +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/sddPreDriverConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/userPreDriverConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/threadSchedulingConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/dbToLoad.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/iocEC-GN-PSH0PCF-preSaveRestore.cmd" + +############################################################################ +## IOC Logging +############################################################################ +iocLogInit +iocLogPrefix "${STY} : " + +############################################################################ +## IOC initialization +############################################################################ +cd "${TOP}/db" +iocInit + +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/iocEC-GN-PSH0PCF-postSaveRestore.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/sddSeqToLoad.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/seqToLoad.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/sddPostDriverConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/userPostDriverConf.cmd" + + +dbl > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbl" +dbla > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbla" +dbior > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbior" +dbhcr > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbhcr" + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/threadSchedulingConf.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/threadSchedulingConf.cmd new file mode 100644 index 0000000..29d9b00 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/threadSchedulingConf.cmd @@ -0,0 +1,6 @@ +############################################################################ +## Thread scheduling configuration for real-time tuning +############################################################################ + + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/userPostDriverConf.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/userPostDriverConf.cmd new file mode 100644 index 0000000..8786feb --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/userPostDriverConf.cmd @@ -0,0 +1,6 @@ +############################################################################ +## User provided PLC or fast controller driver post configuration +############################################################################ + + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/userPreDriverConf.cmd b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/userPreDriverConf.cmd new file mode 100644 index 0000000..6c9a40e --- /dev/null +++ b/EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-PSH0PCF/userPreDriverConf.cmd @@ -0,0 +1,12 @@ +############################################################################ +## User provided PLC or fast controller driver pre configuration +############################################################################ + +# Enable parallel callback threads to improve 'I/O Intr' record scanning +# see https://bugzilla.iter.org/codac/show_bug.cgi?id=10413 +callbackParallelThreads + +callbackSetQueueSize(100000) +scanOnceSetQueueSize(100000) + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/.gitignore b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/.gitignore new file mode 100644 index 0000000..5eba449 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/.gitignore @@ -0,0 +1,2 @@ +Build/ + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s.csv b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s.csv new file mode 100644 index 0000000..98fb573 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s.csv @@ -0,0 +1,1013 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,60,45,10,10,10,10 +10,55,40,9,9,9,9 +20,50,35,8,8,8,8 +30,45,30,7,7,7,7 +40,40,25,6,6,6,6 +50,35,20,5,5,5,5 +60,30,15,4,4,4,4 +70,25,10,3,3,3,3 +80,20,5,2,2,2,2 +90,15,0,1,1,1,1 +100,10,-5,0,0,0,0 +110,5,0,1,1,1,1 +120,0,5,2,2,2,2 +130,-5,10,3,3,3,3 +140,0,15,4,4,4,4 +150,5,20,5,5,5,5 +160,10,25,6,6,6,6 +170,15,30,7,7,7,7 +180,20,35,8,8,8,8 +190,25,40,9,9,9,9 +200,30,45,10,10,10,10 +210,35,40,11,9,9,9 +220,40,35,12,8,8,8 +230,45,30,11,7,7,7 +240,50,25,10,6,6,6 +250,55,20,9,5,5,5 +260,60,15,8,4,4,4 +270,55,10,7,3,3,3 +280,50,5,6,2,2,2 +290,45,0,5,1,1,1 +300,40,-5,4,0,0,0 +310,35,0,3,1,1,1 +320,30,5,2,2,2,2 +330,25,10,1,3,3,3 +340,20,15,0,4,4,4 +350,15,20,1,5,5,5 +360,10,25,2,6,6,6 +370,5,30,3,7,7,7 +380,0,35,4,8,8,8 +390,-5,40,5,9,9,9 +400,0,45,6,10,10,10 +410,5,40,7,9,9,9 +420,10,35,8,8,8,8 +430,15,30,9,7,7,7 +440,20,25,10,6,6,6 +450,25,20,11,5,5,5 +460,30,15,12,4,4,4 +470,35,10,11,3,3,3 +480,40,5,10,2,2,2 +490,45,0,9,1,1,1 +500,50,-5,8,0,0,0 +510,55,0,7,1,1,1 +520,60,5,6,2,2,2 +530,55,10,5,3,3,3 +540,50,15,4,4,4,4 +550,45,20,3,5,5,5 +560,40,25,2,6,6,6 +570,35,30,1,7,7,7 +580,30,35,0,8,8,8 +590,25,40,1,9,9,9 +600,20,45,2,10,10,10 +610,15,40,3,9,9,9 +620,10,35,4,8,8,8 +630,5,30,5,7,7,7 +640,0,25,6,6,6,6 +650,-5,20,7,5,5,5 +660,0,15,8,4,4,4 +670,5,10,9,3,3,3 +680,10,5,10,2,2,2 +690,15,0,11,1,1,1 +700,20,-5,12,0,0,0 +710,25,0,11,1,1,1 +720,30,5,10,2,2,2 +730,35,10,9,3,3,3 +740,40,15,8,4,4,4 +750,45,20,7,5,5,5 +760,50,25,6,6,6,6 +770,55,30,5,7,7,7 +780,60,35,4,8,8,8 +790,55,40,3,9,9,9 +800,50,45,2,10,10,10 +810,45,40,1,9,9,9 +820,40,35,0,8,8,8 +830,35,30,1,7,7,7 +840,30,25,2,6,6,6 +850,25,20,3,5,5,5 +860,20,15,4,4,4,4 +870,15,10,5,3,3,3 +880,10,5,6,2,2,2 +890,5,0,7,1,1,1 +900,0,-5,8,0,0,0 +910,-5,0,9,1,1,1 +920,0,5,10,2,2,2 +930,5,10,11,3,3,3 +940,10,15,12,4,4,4 +950,15,20,11,5,5,5 +960,20,25,10,6,6,6 +970,25,30,9,7,7,7 +980,30,35,8,8,8,8 +990,35,40,7,9,9,9 +1000,40,45,6,10,10,10 +1010,30,20,10,10,10,10 +1020,30,20,10,10,10,10 +1030,30,20,10,10,10,10 +1040,30,20,10,10,10,10 +1050,30,20,10,10,10,10 +1060,30,20,10,10,10,10 +1070,30,20,10,10,10,10 +1080,30,20,10,10,10,10 +1090,30,20,10,10,10,10 +1100,30,20,10,10,10,10 +1110,30,20,10,10,10,10 +1120,30,20,10,10,10,10 +1130,30,20,10,10,10,10 +1140,30,20,10,10,10,10 +1150,30,20,10,10,10,10 +1160,30,20,10,10,10,10 +1170,30,20,10,10,10,10 +1180,30,20,10,10,10,10 +1190,30,20,10,10,10,10 +1200,30,20,10,10,10,10 +1210,30,20,10,10,10,10 +1220,30,20,10,10,10,10 +1230,30,20,10,10,10,10 +1240,30,20,10,10,10,10 +1250,30,20,10,10,10,10 +1260,30,20,10,10,10,10 +1270,30,20,10,10,10,10 +1280,30,20,10,10,10,10 +1290,30,20,10,10,10,10 +1300,30,20,10,10,10,10 +1310,30,20,10,10,10,10 +1320,30,20,10,10,10,10 +1330,30,20,10,10,10,10 +1340,30,20,10,10,10,10 +1350,30,20,10,10,10,10 +1360,30,20,10,10,10,10 +1370,30,20,10,10,10,10 +1380,30,20,10,10,10,10 +1390,30,20,10,10,10,10 +1400,30,20,10,10,10,10 +1410,30,20,10,10,10,10 +1420,30,20,10,10,10,10 +1430,30,20,10,10,10,10 +1440,30,20,10,10,10,10 +1450,30,20,10,10,10,10 +1460,30,20,10,10,10,10 +1470,30,20,10,10,10,10 +1480,30,20,10,10,10,10 +1490,30,20,10,10,10,10 +1500,30,20,10,10,10,10 +1510,30,20,10,10,10,10 +1520,30,20,10,10,10,10 +1530,30,20,10,10,10,10 +1540,30,20,10,10,10,10 +1550,30,20,10,10,10,10 +1560,30,20,10,10,10,10 +1570,30,20,10,10,10,10 +1580,30,20,10,10,10,10 +1590,30,20,10,10,10,10 +1600,30,20,10,10,10,10 +1610,30,20,10,10,10,10 +1620,30,20,10,10,10,10 +1630,30,20,10,10,10,10 +1640,30,20,10,10,10,10 +1650,30,20,10,10,10,10 +1660,30,20,10,10,10,10 +1670,30,20,10,10,10,10 +1680,30,20,10,10,10,10 +1690,30,20,10,10,10,10 +1700,30,20,10,10,10,10 +1710,30,20,10,10,10,10 +1720,30,20,10,10,10,10 +1730,30,20,10,10,10,10 +1740,30,20,10,10,10,10 +1750,30,20,10,10,10,10 +1760,30,20,10,10,10,10 +1770,30,20,10,10,10,10 +1780,30,20,10,10,10,10 +1790,30,20,10,10,10,10 +1800,30,20,10,10,10,10 +1810,30,20,10,10,10,10 +1820,30,20,10,10,10,10 +1830,30,20,10,10,10,10 +1840,30,20,10,10,10,10 +1850,30,20,10,10,10,10 +1860,30,20,10,10,10,10 +1870,30,20,10,10,10,10 +1880,30,20,10,10,10,10 +1890,30,20,10,10,10,10 +1900,30,20,10,10,10,10 +1910,30,20,10,10,10,10 +1920,30,20,10,10,10,10 +1930,30,20,10,10,10,10 +1940,30,20,10,10,10,10 +1950,30,20,10,10,10,10 +1960,30,20,10,10,10,10 +1970,30,20,10,10,10,10 +1980,30,20,10,10,10,10 +1990,30,20,10,10,10,10 +2000,30,20,10,10,10,10 +2010,30,20,10,10,10,10 +2020,30,20,10,10,10,10 +2030,30,20,10,10,10,10 +2040,30,20,10,10,10,10 +2050,30,20,10,10,10,10 +2060,30,20,10,10,10,10 +2070,30,20,10,10,10,10 +2080,30,20,10,10,10,10 +2090,30,20,10,10,10,10 +2100,30,20,10,10,10,10 +2110,30,20,10,10,10,10 +2120,30,20,10,10,10,10 +2130,30,20,10,10,10,10 +2140,30,20,10,10,10,10 +2150,30,20,10,10,10,10 +2160,30,20,10,10,10,10 +2170,30,20,10,10,10,10 +2180,30,20,10,10,10,10 +2190,30,20,10,10,10,10 +2200,30,20,10,10,10,10 +2210,30,20,10,10,10,10 +2220,30,20,10,10,10,10 +2230,30,20,10,10,10,10 +2240,30,20,10,10,10,10 +2250,30,20,10,10,10,10 +2260,30,20,10,10,10,10 +2270,30,20,10,10,10,10 +2280,30,20,10,10,10,10 +2290,30,20,10,10,10,10 +2300,30,20,10,10,10,10 +2310,30,20,10,10,10,10 +2320,30,20,10,10,10,10 +2330,30,20,10,10,10,10 +2340,30,20,10,10,10,10 +2350,30,20,10,10,10,10 +2360,30,20,10,10,10,10 +2370,30,20,10,10,10,10 +2380,30,20,10,10,10,10 +2390,30,20,10,10,10,10 +2400,30,20,10,10,10,10 +2410,30,20,10,10,10,10 +2420,30,20,10,10,10,10 +2430,30,20,10,10,10,10 +2440,30,20,10,10,10,10 +2450,30,20,10,10,10,10 +2460,30,20,10,10,10,10 +2470,30,20,10,10,10,10 +2480,30,20,10,10,10,10 +2490,30,20,10,10,10,10 +2500,30,20,10,10,10,10 +2510,30,20,10,10,10,10 +2520,30,20,10,10,10,10 +2530,30,20,10,10,10,10 +2540,30,20,10,10,10,10 +2550,30,20,10,10,10,10 +2560,30,20,10,10,10,10 +2570,30,20,10,10,10,10 +2580,30,20,10,10,10,10 +2590,30,20,10,10,10,10 +2600,30,20,10,10,10,10 +2610,30,20,10,10,10,10 +2620,30,20,10,10,10,10 +2630,30,20,10,10,10,10 +2640,30,20,10,10,10,10 +2650,30,20,10,10,10,10 +2660,30,20,10,10,10,10 +2670,30,20,10,10,10,10 +2680,30,20,10,10,10,10 +2690,30,20,10,10,10,10 +2700,30,20,10,10,10,10 +2710,30,20,10,10,10,10 +2720,30,20,10,10,10,10 +2730,30,20,10,10,10,10 +2740,30,20,10,10,10,10 +2750,30,20,10,10,10,10 +2760,30,20,10,10,10,10 +2770,30,20,10,10,10,10 +2780,30,20,10,10,10,10 +2790,30,20,10,10,10,10 +2800,30,20,10,10,10,10 +2810,30,20,10,10,10,10 +2820,30,20,10,10,10,10 +2830,30,20,10,10,10,10 +2840,30,20,10,10,10,10 +2850,30,20,10,10,10,10 +2860,30,20,10,10,10,10 +2870,30,20,10,10,10,10 +2880,30,20,10,10,10,10 +2890,30,20,10,10,10,10 +2900,30,20,10,10,10,10 +2910,30,20,10,10,10,10 +2920,30,20,10,10,10,10 +2930,30,20,10,10,10,10 +2940,30,20,10,10,10,10 +2950,30,20,10,10,10,10 +2960,30,20,10,10,10,10 +2970,30,20,10,10,10,10 +2980,30,20,10,10,10,10 +2990,30,20,10,10,10,10 +3000,30,20,10,10,10,10 +3010,30,20,10,10,10,10 +3020,30,20,10,10,10,10 +3030,30,20,10,10,10,10 +3040,30,20,10,10,10,10 +3050,30,20,10,10,10,10 +3060,30,20,10,10,10,10 +3070,30,20,10,10,10,10 +3080,30,20,10,10,10,10 +3090,30,20,10,10,10,10 +3100,30,20,10,10,10,10 +3110,30,20,10,10,10,10 +3120,30,20,10,10,10,10 +3130,30,20,10,10,10,10 +3140,30,20,10,10,10,10 +3150,30,20,10,10,10,10 +3160,30,20,10,10,10,10 +3170,30,20,10,10,10,10 +3180,30,20,10,10,10,10 +3190,30,20,10,10,10,10 +3200,30,20,10,10,10,10 +3210,30,20,10,10,10,10 +3220,30,20,10,10,10,10 +3230,30,20,10,10,10,10 +3240,30,20,10,10,10,10 +3250,30,20,10,10,10,10 +3260,30,20,10,10,10,10 +3270,30,20,10,10,10,10 +3280,30,20,10,10,10,10 +3290,30,20,10,10,10,10 +3300,30,20,10,10,10,10 +3310,30,20,10,10,10,10 +3320,30,20,10,10,10,10 +3330,30,20,10,10,10,10 +3340,30,20,10,10,10,10 +3350,30,20,10,10,10,10 +3360,30,20,10,10,10,10 +3370,30,20,10,10,10,10 +3380,30,20,10,10,10,10 +3390,30,20,10,10,10,10 +3400,30,20,10,10,10,10 +3410,30,20,10,10,10,10 +3420,30,20,10,10,10,10 +3430,30,20,10,10,10,10 +3440,30,20,10,10,10,10 +3450,30,20,10,10,10,10 +3460,30,20,10,10,10,10 +3470,30,20,10,10,10,10 +3480,30,20,10,10,10,10 +3490,30,20,10,10,10,10 +3500,30,20,10,10,10,10 +3510,30,20,10,10,10,10 +3520,30,20,10,10,10,10 +3530,30,20,10,10,10,10 +3540,30,20,10,10,10,10 +3550,30,20,10,10,10,10 +3560,30,20,10,10,10,10 +3570,30,20,10,10,10,10 +3580,30,20,10,10,10,10 +3590,30,20,10,10,10,10 +3600,30,20,10,10,10,10 +3610,30,20,10,10,10,10 +3620,30,20,10,10,10,10 +3630,30,20,10,10,10,10 +3640,30,20,10,10,10,10 +3650,30,20,10,10,10,10 +3660,30,20,10,10,10,10 +3670,30,20,10,10,10,10 +3680,30,20,10,10,10,10 +3690,30,20,10,10,10,10 +3700,30,20,10,10,10,10 +3710,30,20,10,10,10,10 +3720,30,20,10,10,10,10 +3730,30,20,10,10,10,10 +3740,30,20,10,10,10,10 +3750,30,20,10,10,10,10 +3760,30,20,10,10,10,10 +3770,30,20,10,10,10,10 +3780,30,20,10,10,10,10 +3790,30,20,10,10,10,10 +3800,30,20,10,10,10,10 +3810,30,20,10,10,10,10 +3820,30,20,10,10,10,10 +3830,30,20,10,10,10,10 +3840,30,20,10,10,10,10 +3850,30,20,10,10,10,10 +3860,30,20,10,10,10,10 +3870,30,20,10,10,10,10 +3880,30,20,10,10,10,10 +3890,30,20,10,10,10,10 +3900,30,20,10,10,10,10 +3910,30,20,10,10,10,10 +3920,30,20,10,10,10,10 +3930,30,20,10,10,10,10 +3940,30,20,10,10,10,10 +3950,30,20,10,10,10,10 +3960,30,20,10,10,10,10 +3970,30,20,10,10,10,10 +3980,30,20,10,10,10,10 +3990,30,20,10,10,10,10 +4000,30,20,10,10,10,10 +4010,30,20,10,10,10,10 +4020,30,20,10,10,10,10 +4030,30,20,10,10,10,10 +4040,30,20,10,10,10,10 +4050,30,20,10,10,10,10 +4060,30,20,10,10,10,10 +4070,30,20,10,10,10,10 +4080,30,20,10,10,10,10 +4090,30,20,10,10,10,10 +4100,30,20,10,10,10,10 +4110,30,20,10,10,10,10 +4120,30,20,10,10,10,10 +4130,30,20,10,10,10,10 +4140,30,20,10,10,10,10 +4150,30,20,10,10,10,10 +4160,30,20,10,10,10,10 +4170,30,20,10,10,10,10 +4180,30,20,10,10,10,10 +4190,30,20,10,10,10,10 +4200,30,20,10,10,10,10 +4210,30,20,10,10,10,10 +4220,30,20,10,10,10,10 +4230,30,20,10,10,10,10 +4240,30,20,10,10,10,10 +4250,30,20,10,10,10,10 +4260,30,20,10,10,10,10 +4270,30,20,10,10,10,10 +4280,30,20,10,10,10,10 +4290,30,20,10,10,10,10 +4300,30,20,10,10,10,10 +4310,30,20,10,10,10,10 +4320,30,20,10,10,10,10 +4330,30,20,10,10,10,10 +4340,30,20,10,10,10,10 +4350,30,20,10,10,10,10 +4360,30,20,10,10,10,10 +4370,30,20,10,10,10,10 +4380,30,20,10,10,10,10 +4390,30,20,10,10,10,10 +4400,30,20,10,10,10,10 +4410,30,20,10,10,10,10 +4420,30,20,10,10,10,10 +4430,30,20,10,10,10,10 +4440,30,20,10,10,10,10 +4450,30,20,10,10,10,10 +4460,30,20,10,10,10,10 +4470,30,20,10,10,10,10 +4480,30,20,10,10,10,10 +4490,30,20,10,10,10,10 +4500,30,20,10,10,10,10 +4510,30,20,10,10,10,10 +4520,30,20,10,10,10,10 +4530,30,20,10,10,10,10 +4540,30,20,10,10,10,10 +4550,30,20,10,10,10,10 +4560,30,20,10,10,10,10 +4570,30,20,10,10,10,10 +4580,30,20,10,10,10,10 +4590,30,20,10,10,10,10 +4600,30,20,10,10,10,10 +4610,30,20,10,10,10,10 +4620,30,20,10,10,10,10 +4630,30,20,10,10,10,10 +4640,30,20,10,10,10,10 +4650,30,20,10,10,10,10 +4660,30,20,10,10,10,10 +4670,30,20,10,10,10,10 +4680,30,20,10,10,10,10 +4690,30,20,10,10,10,10 +4700,30,20,10,10,10,10 +4710,30,20,10,10,10,10 +4720,30,20,10,10,10,10 +4730,30,20,10,10,10,10 +4740,30,20,10,10,10,10 +4750,30,20,10,10,10,10 +4760,30,20,10,10,10,10 +4770,30,20,10,10,10,10 +4780,30,20,10,10,10,10 +4790,30,20,10,10,10,10 +4800,30,20,10,10,10,10 +4810,30,20,10,10,10,10 +4820,30,20,10,10,10,10 +4830,30,20,10,10,10,10 +4840,30,20,10,10,10,10 +4850,30,20,10,10,10,10 +4860,30,20,10,10,10,10 +4870,30,20,10,10,10,10 +4880,30,20,10,10,10,10 +4890,30,20,10,10,10,10 +4900,30,20,10,10,10,10 +4910,30,20,10,10,10,10 +4920,30,20,10,10,10,10 +4930,30,20,10,10,10,10 +4940,30,20,10,10,10,10 +4950,30,20,10,10,10,10 +4960,30,20,10,10,10,10 +4970,30,20,10,10,10,10 +4980,30,20,10,10,10,10 +4990,30,20,10,10,10,10 +5000,30,20,10,10,10,10 +5010,30,20,10,10,10,10 +5020,30,20,10,10,10,10 +5030,30,20,10,10,10,10 +5040,30,20,10,10,10,10 +5050,30,20,10,10,10,10 +5060,30,20,10,10,10,10 +5070,30,20,10,10,10,10 +5080,30,20,10,10,10,10 +5090,30,20,10,10,10,10 +5100,30,20,10,10,10,10 +5110,30,20,10,10,10,10 +5120,30,20,10,10,10,10 +5130,30,20,10,10,10,10 +5140,30,20,10,10,10,10 +5150,30,20,10,10,10,10 +5160,30,20,10,10,10,10 +5170,30,20,10,10,10,10 +5180,30,20,10,10,10,10 +5190,30,20,10,10,10,10 +5200,30,20,10,10,10,10 +5210,30,20,10,10,10,10 +5220,30,20,10,10,10,10 +5230,30,20,10,10,10,10 +5240,30,20,10,10,10,10 +5250,30,20,10,10,10,10 +5260,30,20,10,10,10,10 +5270,30,20,10,10,10,10 +5280,30,20,10,10,10,10 +5290,30,20,10,10,10,10 +5300,30,20,10,10,10,10 +5310,30,20,10,10,10,10 +5320,30,20,10,10,10,10 +5330,30,20,10,10,10,10 +5340,30,20,10,10,10,10 +5350,30,20,10,10,10,10 +5360,30,20,10,10,10,10 +5370,30,20,10,10,10,10 +5380,30,20,10,10,10,10 +5390,30,20,10,10,10,10 +5400,30,20,10,10,10,10 +5410,30,20,10,10,10,10 +5420,30,20,10,10,10,10 +5430,30,20,10,10,10,10 +5440,30,20,10,10,10,10 +5450,30,20,10,10,10,10 +5460,30,20,10,10,10,10 +5470,30,20,10,10,10,10 +5480,30,20,10,10,10,10 +5490,30,20,10,10,10,10 +5500,30,20,10,10,10,10 +5510,30,20,10,10,10,10 +5520,30,20,10,10,10,10 +5530,30,20,10,10,10,10 +5540,30,20,10,10,10,10 +5550,30,20,10,10,10,10 +5560,30,20,10,10,10,10 +5570,30,20,10,10,10,10 +5580,30,20,10,10,10,10 +5590,30,20,10,10,10,10 +5600,30,20,10,10,10,10 +5610,30,20,10,10,10,10 +5620,30,20,10,10,10,10 +5630,30,20,10,10,10,10 +5640,30,20,10,10,10,10 +5650,30,20,10,10,10,10 +5660,30,20,10,10,10,10 +5670,30,20,10,10,10,10 +5680,30,20,10,10,10,10 +5690,30,20,10,10,10,10 +5700,30,20,10,10,10,10 +5710,30,20,10,10,10,10 +5720,30,20,10,10,10,10 +5730,30,20,10,10,10,10 +5740,30,20,10,10,10,10 +5750,30,20,10,10,10,10 +5760,30,20,10,10,10,10 +5770,30,20,10,10,10,10 +5780,30,20,10,10,10,10 +5790,30,20,10,10,10,10 +5800,30,20,10,10,10,10 +5810,30,20,10,10,10,10 +5820,30,20,10,10,10,10 +5830,30,20,10,10,10,10 +5840,30,20,10,10,10,10 +5850,30,20,10,10,10,10 +5860,30,20,10,10,10,10 +5870,30,20,10,10,10,10 +5880,30,20,10,10,10,10 +5890,30,20,10,10,10,10 +5900,30,20,10,10,10,10 +5910,30,20,10,10,10,10 +5920,30,20,10,10,10,10 +5930,30,20,10,10,10,10 +5940,30,20,10,10,10,10 +5950,30,20,10,10,10,10 +5960,30,20,10,10,10,10 +5970,30,20,10,10,10,10 +5980,30,20,10,10,10,10 +5990,30,20,10,10,10,10 +6000,30,20,10,10,10,10 +6010,30,20,10,10,10,10 +6020,30,20,10,10,10,10 +6030,30,20,10,10,10,10 +6040,30,20,10,10,10,10 +6050,30,20,10,10,10,10 +6060,30,20,10,10,10,10 +6070,30,20,10,10,10,10 +6080,30,20,10,10,10,10 +6090,30,20,10,10,10,10 +6100,30,20,10,10,10,10 +6110,30,20,10,10,10,10 +6120,30,20,10,10,10,10 +6130,30,20,10,10,10,10 +6140,30,20,10,10,10,10 +6150,30,20,10,10,10,10 +6160,30,20,10,10,10,10 +6170,30,20,10,10,10,10 +6180,30,20,10,10,10,10 +6190,30,20,10,10,10,10 +6200,30,20,10,10,10,10 +6210,30,20,10,10,10,10 +6220,30,20,10,10,10,10 +6230,30,20,10,10,10,10 +6240,30,20,10,10,10,10 +6250,30,20,10,10,10,10 +6260,30,20,10,10,10,10 +6270,30,20,10,10,10,10 +6280,30,20,10,10,10,10 +6290,30,20,10,10,10,10 +6300,30,20,10,10,10,10 +6310,30,20,10,10,10,10 +6320,30,20,10,10,10,10 +6330,30,20,10,10,10,10 +6340,30,20,10,10,10,10 +6350,30,20,10,10,10,10 +6360,30,20,10,10,10,10 +6370,30,20,10,10,10,10 +6380,30,20,10,10,10,10 +6390,30,20,10,10,10,10 +6400,30,20,10,10,10,10 +6410,30,20,10,10,10,10 +6420,30,20,10,10,10,10 +6430,30,20,10,10,10,10 +6440,30,20,10,10,10,10 +6450,30,20,10,10,10,10 +6460,30,20,10,10,10,10 +6470,30,20,10,10,10,10 +6480,30,20,10,10,10,10 +6490,30,20,10,10,10,10 +6500,30,20,10,10,10,10 +6510,30,20,10,10,10,10 +6520,30,20,10,10,10,10 +6530,30,20,10,10,10,10 +6540,30,20,10,10,10,10 +6550,30,20,10,10,10,10 +6560,30,20,10,10,10,10 +6570,30,20,10,10,10,10 +6580,30,20,10,10,10,10 +6590,30,20,10,10,10,10 +6600,30,20,10,10,10,10 +6610,30,20,10,10,10,10 +6620,30,20,10,10,10,10 +6630,30,20,10,10,10,10 +6640,30,20,10,10,10,10 +6650,30,20,10,10,10,10 +6660,30,20,10,10,10,10 +6670,30,20,10,10,10,10 +6680,30,20,10,10,10,10 +6690,30,20,10,10,10,10 +6700,30,20,10,10,10,10 +6710,30,20,10,10,10,10 +6720,30,20,10,10,10,10 +6730,30,20,10,10,10,10 +6740,30,20,10,10,10,10 +6750,30,20,10,10,10,10 +6760,30,20,10,10,10,10 +6770,30,20,10,10,10,10 +6780,30,20,10,10,10,10 +6790,30,20,10,10,10,10 +6800,30,20,10,10,10,10 +6810,30,20,10,10,10,10 +6820,30,20,10,10,10,10 +6830,30,20,10,10,10,10 +6840,30,20,10,10,10,10 +6850,30,20,10,10,10,10 +6860,30,20,10,10,10,10 +6870,30,20,10,10,10,10 +6880,30,20,10,10,10,10 +6890,30,20,10,10,10,10 +6900,30,20,10,10,10,10 +6910,30,20,10,10,10,10 +6920,30,20,10,10,10,10 +6930,30,20,10,10,10,10 +6940,30,20,10,10,10,10 +6950,30,20,10,10,10,10 +6960,30,20,10,10,10,10 +6970,30,20,10,10,10,10 +6980,30,20,10,10,10,10 +6990,30,20,10,10,10,10 +7000,30,20,10,10,10,10 +7010,30,20,10,10,10,10 +7020,30,20,10,10,10,10 +7030,30,20,10,10,10,10 +7040,30,20,10,10,10,10 +7050,30,20,10,10,10,10 +7060,30,20,10,10,10,10 +7070,30,20,10,10,10,10 +7080,30,20,10,10,10,10 +7090,30,20,10,10,10,10 +7100,30,20,10,10,10,10 +7110,30,20,10,10,10,10 +7120,30,20,10,10,10,10 +7130,30,20,10,10,10,10 +7140,30,20,10,10,10,10 +7150,30,20,10,10,10,10 +7160,30,20,10,10,10,10 +7170,30,20,10,10,10,10 +7180,30,20,10,10,10,10 +7190,30,20,10,10,10,10 +7200,30,20,10,10,10,10 +7210,30,20,10,10,10,10 +7220,30,20,10,10,10,10 +7230,30,20,10,10,10,10 +7240,30,20,10,10,10,10 +7250,30,20,10,10,10,10 +7260,30,20,10,10,10,10 +7270,30,20,10,10,10,10 +7280,30,20,10,10,10,10 +7290,30,20,10,10,10,10 +7300,30,20,10,10,10,10 +7310,30,20,10,10,10,10 +7320,30,20,10,10,10,10 +7330,30,20,10,10,10,10 +7340,30,20,10,10,10,10 +7350,30,20,10,10,10,10 +7360,30,20,10,10,10,10 +7370,30,20,10,10,10,10 +7380,30,20,10,10,10,10 +7390,30,20,10,10,10,10 +7400,30,20,10,10,10,10 +7410,30,20,10,10,10,10 +7420,30,20,10,10,10,10 +7430,30,20,10,10,10,10 +7440,30,20,10,10,10,10 +7450,30,20,10,10,10,10 +7460,30,20,10,10,10,10 +7470,30,20,10,10,10,10 +7480,30,20,10,10,10,10 +7490,30,20,10,10,10,10 +7500,30,20,10,10,10,10 +7510,30,20,10,10,10,10 +7520,30,20,10,10,10,10 +7530,30,20,10,10,10,10 +7540,30,20,10,10,10,10 +7550,30,20,10,10,10,10 +7560,30,20,10,10,10,10 +7570,30,20,10,10,10,10 +7580,30,20,10,10,10,10 +7590,30,20,10,10,10,10 +7600,30,20,10,10,10,10 +7610,30,20,10,10,10,10 +7620,30,20,10,10,10,10 +7630,30,20,10,10,10,10 +7640,30,20,10,10,10,10 +7650,30,20,10,10,10,10 +7660,30,20,10,10,10,10 +7670,30,20,10,10,10,10 +7680,30,20,10,10,10,10 +7690,30,20,10,10,10,10 +7700,30,20,10,10,10,10 +7710,30,20,10,10,10,10 +7720,30,20,10,10,10,10 +7730,30,20,10,10,10,10 +7740,30,20,10,10,10,10 +7750,30,20,10,10,10,10 +7760,30,20,10,10,10,10 +7770,30,20,10,10,10,10 +7780,30,20,10,10,10,10 +7790,30,20,10,10,10,10 +7800,30,20,10,10,10,10 +7810,30,20,10,10,10,10 +7820,30,20,10,10,10,10 +7830,30,20,10,10,10,10 +7840,30,20,10,10,10,10 +7850,30,20,10,10,10,10 +7860,30,20,10,10,10,10 +7870,30,20,10,10,10,10 +7880,30,20,10,10,10,10 +7890,30,20,10,10,10,10 +7900,30,20,10,10,10,10 +7910,30,20,10,10,10,10 +7920,30,20,10,10,10,10 +7930,30,20,10,10,10,10 +7940,30,20,10,10,10,10 +7950,30,20,10,10,10,10 +7960,30,20,10,10,10,10 +7970,30,20,10,10,10,10 +7980,30,20,10,10,10,10 +7990,30,20,10,10,10,10 +8000,30,20,10,10,10,10 +8010,30,20,10,10,10,10 +8020,30,20,10,10,10,10 +8030,30,20,10,10,10,10 +8040,30,20,10,10,10,10 +8050,30,20,10,10,10,10 +8060,30,20,10,10,10,10 +8070,30,20,10,10,10,10 +8080,30,20,10,10,10,10 +8090,30,20,10,10,10,10 +8100,30,20,10,10,10,10 +8110,30,20,10,10,10,10 +8120,30,20,10,10,10,10 +8130,30,20,10,10,10,10 +8140,30,20,10,10,10,10 +8150,30,20,10,10,10,10 +8160,30,20,10,10,10,10 +8170,30,20,10,10,10,10 +8180,30,20,10,10,10,10 +8190,30,20,10,10,10,10 +8200,30,20,10,10,10,10 +8210,30,20,10,10,10,10 +8220,30,20,10,10,10,10 +8230,30,20,10,10,10,10 +8240,30,20,10,10,10,10 +8250,30,20,10,10,10,10 +8260,30,20,10,10,10,10 +8270,30,20,10,10,10,10 +8280,30,20,10,10,10,10 +8290,30,20,10,10,10,10 +8300,30,20,10,10,10,10 +8310,30,20,10,10,10,10 +8320,30,20,10,10,10,10 +8330,30,20,10,10,10,10 +8340,30,20,10,10,10,10 +8350,30,20,10,10,10,10 +8360,30,20,10,10,10,10 +8370,30,20,10,10,10,10 +8380,30,20,10,10,10,10 +8390,30,20,10,10,10,10 +8400,30,20,10,10,10,10 +8410,30,20,10,10,10,10 +8420,30,20,10,10,10,10 +8430,30,20,10,10,10,10 +8440,30,20,10,10,10,10 +8450,30,20,10,10,10,10 +8460,30,20,10,10,10,10 +8470,30,20,10,10,10,10 +8480,30,20,10,10,10,10 +8490,30,20,10,10,10,10 +8500,30,20,10,10,10,10 +8510,30,20,10,10,10,10 +8520,30,20,10,10,10,10 +8530,30,20,10,10,10,10 +8540,30,20,10,10,10,10 +8550,30,20,10,10,10,10 +8560,30,20,10,10,10,10 +8570,30,20,10,10,10,10 +8580,30,20,10,10,10,10 +8590,30,20,10,10,10,10 +8600,30,20,10,10,10,10 +8610,30,20,10,10,10,10 +8620,30,20,10,10,10,10 +8630,30,20,10,10,10,10 +8640,30,20,10,10,10,10 +8650,30,20,10,10,10,10 +8660,30,20,10,10,10,10 +8670,30,20,10,10,10,10 +8680,30,20,10,10,10,10 +8690,30,20,10,10,10,10 +8700,30,20,10,10,10,10 +8710,30,20,10,10,10,10 +8720,30,20,10,10,10,10 +8730,30,20,10,10,10,10 +8740,30,20,10,10,10,10 +8750,30,20,10,10,10,10 +8760,30,20,10,10,10,10 +8770,30,20,10,10,10,10 +8780,30,20,10,10,10,10 +8790,30,20,10,10,10,10 +8800,30,20,10,10,10,10 +8810,30,20,10,10,10,10 +8820,30,20,10,10,10,10 +8830,30,20,10,10,10,10 +8840,30,20,10,10,10,10 +8850,30,20,10,10,10,10 +8860,30,20,10,10,10,10 +8870,30,20,10,10,10,10 +8880,30,20,10,10,10,10 +8890,30,20,10,10,10,10 +8900,30,20,10,10,10,10 +8910,30,20,10,10,10,10 +8920,30,20,10,10,10,10 +8930,30,20,10,10,10,10 +8940,30,20,10,10,10,10 +8950,30,20,10,10,10,10 +8960,30,20,10,10,10,10 +8970,30,20,10,10,10,10 +8980,30,20,10,10,10,10 +8990,30,20,10,10,10,10 +9000,30,20,10,10,10,10 +9010,30,20,10,10,10,10 +9020,30,20,10,10,10,10 +9030,30,20,10,10,10,10 +9040,30,20,10,10,10,10 +9050,30,20,10,10,10,10 +9060,30,20,10,10,10,10 +9070,30,20,10,10,10,10 +9080,30,20,10,10,10,10 +9090,30,20,10,10,10,10 +9100,30,20,10,10,10,10 +9110,30,20,10,10,10,10 +9120,30,20,10,10,10,10 +9130,30,20,10,10,10,10 +9140,30,20,10,10,10,10 +9150,30,20,10,10,10,10 +9160,30,20,10,10,10,10 +9170,30,20,10,10,10,10 +9180,30,20,10,10,10,10 +9190,30,20,10,10,10,10 +9200,30,20,10,10,10,10 +9210,30,20,10,10,10,10 +9220,30,20,10,10,10,10 +9230,30,20,10,10,10,10 +9240,30,20,10,10,10,10 +9250,30,20,10,10,10,10 +9260,30,20,10,10,10,10 +9270,30,20,10,10,10,10 +9280,30,20,10,10,10,10 +9290,30,20,10,10,10,10 +9300,30,20,10,10,10,10 +9310,30,20,10,10,10,10 +9320,30,20,10,10,10,10 +9330,30,20,10,10,10,10 +9340,30,20,10,10,10,10 +9350,30,20,10,10,10,10 +9360,30,20,10,10,10,10 +9370,30,20,10,10,10,10 +9380,30,20,10,10,10,10 +9390,30,20,10,10,10,10 +9400,30,20,10,10,10,10 +9410,30,20,10,10,10,10 +9420,30,20,10,10,10,10 +9430,30,20,10,10,10,10 +9440,30,20,10,10,10,10 +9450,30,20,10,10,10,10 +9460,30,20,10,10,10,10 +9470,30,20,10,10,10,10 +9480,30,20,10,10,10,10 +9490,30,20,10,10,10,10 +9500,30,20,10,10,10,10 +9510,30,20,10,10,10,10 +9520,30,20,10,10,10,10 +9530,30,20,10,10,10,10 +9540,30,20,10,10,10,10 +9550,30,20,10,10,10,10 +9560,30,20,10,10,10,10 +9570,30,20,10,10,10,10 +9580,30,20,10,10,10,10 +9590,30,20,10,10,10,10 +9600,30,20,10,10,10,10 +9610,30,20,10,10,10,10 +9620,30,20,10,10,10,10 +9630,30,20,10,10,10,10 +9640,30,20,10,10,10,10 +9650,30,20,10,10,10,10 +9660,30,20,10,10,10,10 +9670,30,20,10,10,10,10 +9680,30,20,10,10,10,10 +9690,30,20,10,10,10,10 +9700,30,20,10,10,10,10 +9710,30,20,10,10,10,10 +9720,30,20,10,10,10,10 +9730,30,20,10,10,10,10 +9740,30,20,10,10,10,10 +9750,30,20,10,10,10,10 +9760,30,20,10,10,10,10 +9770,30,20,10,10,10,10 +9780,30,20,10,10,10,10 +9790,30,20,10,10,10,10 +9800,30,20,10,10,10,10 +9810,30,20,10,10,10,10 +9820,30,20,10,10,10,10 +9830,30,20,10,10,10,10 +9840,30,20,10,10,10,10 +9850,30,20,10,10,10,10 +9860,30,20,10,10,10,10 +9870,30,20,10,10,10,10 +9880,30,20,10,10,10,10 +9890,30,20,10,10,10,10 +9900,30,20,10,10,10,10 +9910,30,20,10,10,10,10 +9920,30,20,10,10,10,10 +9930,30,20,10,10,10,10 +9940,30,20,10,10,10,10 +9950,30,20,10,10,10,10 +9960,30,20,10,10,10,10 +9970,30,20,10,10,10,10 +9980,30,20,10,10,10,10 +9990,30,20,10,10,10,10 +10000,30,20,10,10,10,10 +10010,30,20,10,10,10,10 +10020,30,20,10,10,10,10 +10030,30,20,10,10,10,10 +10040,30,20,10,10,10,10 +10050,30,20,10,10,10,10 +10060,30,20,10,10,10,10 +10070,30,20,10,10,10,10 +10080,30,20,10,10,10,10 +10090,30,20,10,10,10,10 +10100,30,20,10,10,10,10 diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20201224_fat.csv b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20201224_fat.csv new file mode 100644 index 0000000..e981b6d --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20201224_fat.csv @@ -0,0 +1,1013 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,0,1,1,100,1,5 +10,0,1,1,100,1,5 +20,0,1,1,100,1,5 +30,0,1,1,100,1,5 +40,0,1,1,100,1,5 +50,0,1,1,100,1,5 +60,0,1,1,100,1,5 +70,0,1,1,100,1,5 +80,0,1,1,100,1,5 +90,0,1,1,100,1,5 +100,0,1,1,100,1,5 +110,0,1,1,100,1,5 +120,0,1,1,100,1,5 +130,0,1,1,100,1,5 +140,0,1,1,100,1,5 +150,0,1,1,100,1,5 +160,0,1,1,100,1,5 +170,0,1,1,100,1,5 +180,0,1,1,100,1,5 +190,0,1,1,100,1,5 +200,0,1,1,100,1,5 +210,0,1,1,100,1,5 +220,0,1,1,100,1,5 +230,0,1,1,100,1,5 +240,0,1,1,100,1,5 +250,0,1,1,100,1,5 +260,0,1,1,100,1,5 +270,0,1,1,100,1,5 +280,0,1,1,100,1,5 +290,0,1,1,100,1,5 +300,0,1,1,100,1,5 +310,0,1,1,100,1,5 +320,0,1,1,100,1,5 +330,0,1,1,100,1,5 +340,0,1,1,100,1,5 +350,0,1,1,100,1,5 +360,0,1,1,100,1,5 +370,0,1,1,100,1,5 +380,0,1,1,100,1,5 +390,0,1,1,100,1,5 +400,0,1,1,100,1,5 +410,0,1,1,100,1,5 +420,0,1,1,100,1,5 +430,0,1,1,100,1,5 +440,0,1,1,100,1,5 +450,0,1,1,100,1,5 +460,0,1,1,100,1,5 +470,0,1,1,100,1,5 +480,0,1,1,100,1,5 +490,0,1,1,100,1,5 +500,0,1,1,100,1,5 +510,0,1,1,100,1,5 +520,0,1,1,100,1,5 +530,0,1,1,100,1,5 +540,0,1,1,100,1,5 +550,0,1,1,100,1,5 +560,0,1,1,100,1,5 +570,0,1,1,100,1,5 +580,0,1,1,100,1,5 +590,0,1,1,100,1,5 +600,0,1,1,100,1,5 +610,0,1,1,100,1,5 +620,0,1,1,100,1,5 +630,0,1,1,100,1,5 +640,0,1,1,100,1,5 +650,0,1,1,100,1,5 +660,0,1,1,100,1,5 +670,0,1,1,100,1,5 +680,0,1,1,100,1,5 +690,0,1,1,100,1,5 +700,0,1,1,100,1,5 +710,0,1,1,100,1,5 +720,0,1,1,100,1,5 +730,0,1,1,100,1,5 +740,0,1,1,100,1,5 +750,0,1,1,100,1,5 +760,0,1,1,100,1,5 +770,0,1,1,100,1,5 +780,0,1,1,100,1,5 +790,0,1,1,100,1,5 +800,0,1,1,100,1,5 +810,0,1,1,100,1,5 +820,0,1,1,100,1,5 +830,0,1,1,100,1,5 +840,0,1,1,100,1,5 +850,0,1,1,100,1,5 +860,0,1,1,100,1,5 +870,0,1,1,100,1,5 +880,0,1,1,100,1,5 +890,0,1,1,100,1,5 +900,0,1,1,100,1,5 +910,0,1,1,100,1,5 +920,0,1,1,100,1,5 +930,0,1,1,100,1,5 +940,0,1,1,100,1,5 +950,0,1,1,100,1,5 +960,0,1,1,100,1,5 +970,0,1,1,100,1,5 +980,0,1,1,100,1,5 +990,0,1,1,100,1,5 +1000,0,1,1,100,1,5 +1010,0,1,1,100,1,5 +1020,0,1,1,100,1,5 +1030,0,1,1,100,1,5 +1040,0,1,1,100,1,5 +1050,0,1,1,100,1,5 +1060,0,1,1,100,1,5 +1070,0,1,1,100,1,5 +1080,0,1,1,100,1,5 +1090,0,1,1,100,1,5 +1100,0,1,1,100,1,5 +1110,0,1,1,100,1,5 +1120,0,1,1,100,1,5 +1130,0,1,1,100,1,5 +1140,0,1,1,100,1,5 +1150,0,1,1,100,1,5 +1160,0,1,1,100,1,5 +1170,0,1,1,100,1,5 +1180,0,1,1,100,1,5 +1190,0,1,1,100,1,5 +1200,0,1,1,100,1,5 +1210,0,1,1,100,1,5 +1220,0,1,1,100,1,5 +1230,0,1,1,100,1,5 +1240,0,1,1,100,1,5 +1250,0,1,1,100,1,5 +1260,0,1,1,100,1,5 +1270,0,1,1,100,1,5 +1280,0,1,1,100,1,5 +1290,0,1,1,100,1,5 +1300,0,1,1,100,1,5 +1310,0,1,1,100,1,5 +1320,0,1,1,100,1,5 +1330,0,1,1,100,1,5 +1340,0,1,1,100,1,5 +1350,0,1,1,100,1,5 +1360,0,1,1,100,1,5 +1370,0,1,1,100,1,5 +1380,0,1,1,100,1,5 +1390,0,1,1,100,1,5 +1400,0,1,1,100,1,5 +1410,0,1,1,100,1,5 +1420,0,1,1,100,1,5 +1430,0,1,1,100,1,5 +1440,0,1,1,100,1,5 +1450,0,1,1,100,1,5 +1460,0,1,1,100,1,5 +1470,0,1,1,100,1,5 +1480,0,1,1,100,1,5 +1490,0,1,1,100,1,5 +1500,0,1,1,100,1,5 +1510,0,1,1,100,1,5 +1520,0,1,1,100,1,5 +1530,0,1,1,100,1,5 +1540,0,1,1,100,1,5 +1550,0,1,1,100,1,5 +1560,0,1,1,100,1,5 +1570,0,1,1,100,1,5 +1580,0,1,1,100,1,5 +1590,0,1,1,100,1,5 +1600,0,1,1,100,1,5 +1610,0,1,1,100,1,5 +1620,0,1,1,100,1,5 +1630,0,1,1,100,1,5 +1640,0,1,1,100,1,5 +1650,0,1,1,100,1,5 +1660,0,1,1,100,1,5 +1670,0,1,1,100,1,5 +1680,0,1,1,100,1,5 +1690,0,1,1,100,1,5 +1700,0,1,1,100,1,5 +1710,0,1,1,100,1,5 +1720,0,1,1,100,1,5 +1730,0,1,1,100,1,5 +1740,0,1,1,100,1,5 +1750,0,1,1,100,1,5 +1760,0,1,1,100,1,5 +1770,0,1,1,100,1,5 +1780,0,1,1,100,1,5 +1790,0,1,1,100,1,5 +1800,0,1,1,100,1,5 +1810,0,1,1,100,1,5 +1820,0,1,1,100,1,5 +1830,0,1,1,100,1,5 +1840,0,1,1,100,1,5 +1850,0,1,1,100,1,5 +1860,0,1,1,100,1,5 +1870,0,1,1,100,1,5 +1880,0,1,1,100,1,5 +1890,0,1,1,100,1,5 +1900,0,1,1,100,1,5 +1910,0,1,1,100,1,5 +1920,0,1,1,100,1,5 +1930,0,1,1,100,1,5 +1940,0,1,1,100,1,5 +1950,0,1,1,100,1,5 +1960,0,1,1,100,1,5 +1970,0,1,1,100,1,5 +1980,0,1,1,100,1,5 +1990,0,1,1,100,1,5 +2000,0,1,1,100,1,5 +2010,0,1,1,100,1,5 +2020,0,1,1,100,1,5 +2030,0,1,1,100,1,5 +2040,0,1,1,100,1,5 +2050,0,1,1,100,1,5 +2060,0,1,1,100,1,5 +2070,0,1,1,100,1,5 +2080,0,1,1,100,1,5 +2090,0,1,1,100,1,5 +2100,0,1,1,100,1,5 +2110,0,1,1,100,1,5 +2120,0,1,1,100,1,5 +2130,0,1,1,100,1,5 +2140,0,1,1,100,1,5 +2150,0,1,1,100,1,5 +2160,0,1,1,100,1,5 +2170,0,1,1,100,1,5 +2180,0,1,1,100,1,5 +2190,0,1,1,100,1,5 +2200,0,1,1,100,1,5 +2210,0,1,1,100,1,5 +2220,0,1,1,100,1,5 +2230,0,1,1,100,1,5 +2240,0,1,1,100,1,5 +2250,0,1,1,100,1,5 +2260,0,1,1,100,1,5 +2270,0,1,1,100,1,5 +2280,0,1,1,100,1,5 +2290,0,1,1,100,1,5 +2300,0,1,1,100,1,5 +2310,0,1,1,100,1,5 +2320,0,1,1,100,1,5 +2330,0,1,1,100,1,5 +2340,0,1,1,100,1,5 +2350,0,1,1,100,1,5 +2360,0,1,1,100,1,5 +2370,0,1,1,100,1,5 +2380,0,1,1,100,1,5 +2390,0,1,1,100,1,5 +2400,0,1,1,100,1,5 +2410,0,1,1,100,1,5 +2420,0,1,1,100,1,5 +2430,0,1,1,100,1,5 +2440,0,1,1,100,1,5 +2450,0,1,1,100,1,5 +2460,0,1,1,100,1,5 +2470,0,1,1,100,1,5 +2480,0,1,1,100,1,5 +2490,0,1,1,100,1,5 +2500,0,1,1,100,1,5 +2510,0,1,1,100,1,5 +2520,0,1,1,100,1,5 +2530,0,1,1,100,1,5 +2540,0,1,1,100,1,5 +2550,0,1,1,100,1,5 +2560,0,1,1,100,1,5 +2570,0,1,1,100,1,5 +2580,0,1,1,100,1,5 +2590,0,1,1,100,1,5 +2600,0,1,1,100,1,5 +2610,0,1,1,100,1,5 +2620,0,1,1,100,1,5 +2630,0,1,1,100,1,5 +2640,0,1,1,100,1,5 +2650,0,1,1,100,1,5 +2660,0,1,1,100,1,5 +2670,0,1,1,100,1,5 +2680,0,1,1,100,1,5 +2690,0,1,1,100,1,5 +2700,0,1,1,100,1,5 +2710,0,1,1,100,1,5 +2720,0,1,1,100,1,5 +2730,0,1,1,100,1,5 +2740,0,1,1,100,1,5 +2750,0,1,1,100,1,5 +2760,0,1,1,100,1,5 +2770,0,1,1,100,1,5 +2780,0,1,1,100,1,5 +2790,0,1,1,100,1,5 +2800,0,1,1,100,1,5 +2810,0,1,1,100,1,5 +2820,0,1,1,100,1,5 +2830,0,1,1,100,1,5 +2840,0,1,1,100,1,5 +2850,0,1,1,100,1,5 +2860,0,1,1,100,1,5 +2870,0,1,1,100,1,5 +2880,0,1,1,100,1,5 +2890,0,1,1,100,1,5 +2900,0,1,1,100,1,5 +2910,0,1,1,100,1,5 +2920,0,1,1,100,1,5 +2930,0,1,1,100,1,5 +2940,0,1,1,100,1,5 +2950,0,1,1,100,1,5 +2960,0,1,1,100,1,5 +2970,0,1,1,100,1,5 +2980,0,1,1,100,1,5 +2990,0,1,1,100,1,5 +3000,0,1,1,100,1,5 +3010,0,1,1,100,1,5 +3020,0,1,1,100,1,5 +3030,0,1,1,100,1,5 +3040,0,1,1,100,1,5 +3050,0,1,1,100,1,5 +3060,0,1,1,100,1,5 +3070,0,1,1,100,1,5 +3080,0,1,1,100,1,5 +3090,0,1,1,100,1,5 +3100,0,1,1,100,1,5 +3110,0,1,1,100,1,5 +3120,0,1,1,100,1,5 +3130,0,1,1,100,1,5 +3140,0,1,1,100,1,5 +3150,0,1,1,100,1,5 +3160,0,1,1,100,1,5 +3170,0,1,1,100,1,5 +3180,0,1,1,100,1,5 +3190,0,1,1,100,1,5 +3200,0,1,1,100,1,5 +3210,0,1,1,100,1,5 +3220,0,1,1,100,1,5 +3230,0,1,1,100,1,5 +3240,0,1,1,100,1,5 +3250,0,1,1,100,1,5 +3260,0,1,1,100,1,5 +3270,0,1,1,100,1,5 +3280,0,1,1,100,1,5 +3290,0,1,1,100,1,5 +3300,0,1,1,100,1,5 +3310,0,1,1,100,1,5 +3320,0,1,1,100,1,5 +3330,0,1,1,100,1,5 +3340,0,1,1,100,1,5 +3350,0,1,1,100,1,5 +3360,0,1,1,100,1,5 +3370,0,1,1,100,1,5 +3380,0,1,1,100,1,5 +3390,0,1,1,100,1,5 +3400,0,1,1,100,1,5 +3410,0,1,1,100,1,5 +3420,0,1,1,100,1,5 +3430,0,1,1,100,1,5 +3440,0,1,1,100,1,5 +3450,0,1,1,100,1,5 +3460,0,1,1,100,1,5 +3470,0,1,1,100,1,5 +3480,0,1,1,100,1,5 +3490,0,1,1,100,1,5 +3500,0,1,1,100,1,5 +3510,0,1,1,100,1,5 +3520,0,1,1,100,1,5 +3530,0,1,1,100,1,5 +3540,0,1,1,100,1,5 +3550,0,1,1,100,1,5 +3560,0,1,1,100,1,5 +3570,0,1,1,100,1,5 +3580,0,1,1,100,1,5 +3590,0,1,1,100,1,5 +3600,0,1,1,100,1,5 +3610,0,1,1,100,1,5 +3620,0,1,1,100,1,5 +3630,0,1,1,100,1,5 +3640,0,1,1,100,1,5 +3650,0,1,1,100,1,5 +3660,0,1,1,100,1,5 +3670,0,1,1,100,1,5 +3680,0,1,1,100,1,5 +3690,0,1,1,100,1,5 +3700,0,1,1,100,1,5 +3710,0,1,1,100,1,5 +3720,0,1,1,100,1,5 +3730,0,1,1,100,1,5 +3740,0,1,1,100,1,5 +3750,0,1,1,100,1,5 +3760,0,1,1,100,1,5 +3770,0,1,1,100,1,5 +3780,0,1,1,100,1,5 +3790,0,1,1,100,1,5 +3800,0,1,1,100,1,5 +3810,0,1,1,100,1,5 +3820,0,1,1,100,1,5 +3830,0,1,1,100,1,5 +3840,0,1,1,100,1,5 +3850,0,1,1,100,1,5 +3860,0,1,1,100,1,5 +3870,0,1,1,100,1,5 +3880,0,1,1,100,1,5 +3890,0,1,1,100,1,5 +3900,0,1,1,100,1,5 +3910,0,1,1,100,1,5 +3920,0,1,1,100,1,5 +3930,0,1,1,100,1,5 +3940,0,1,1,100,1,5 +3950,0,1,1,100,1,5 +3960,0,1,1,100,1,5 +3970,0,1,1,100,1,5 +3980,0,1,1,100,1,5 +3990,0,1,1,100,1,5 +4000,0,1,1,100,1,5 +4010,0,1,1,100,1,5 +4020,0,1,1,100,1,5 +4030,0,1,1,100,1,5 +4040,0,1,1,100,1,5 +4050,0,1,1,100,1,5 +4060,0,1,1,100,1,5 +4070,0,1,1,100,1,5 +4080,0,1,1,100,1,5 +4090,0,1,1,100,1,5 +4100,0,1,1,100,1,5 +4110,0,1,1,100,1,5 +4120,0,1,1,100,1,5 +4130,0,1,1,100,1,5 +4140,0,1,1,100,1,5 +4150,0,1,1,100,1,5 +4160,0,1,1,100,1,5 +4170,0,1,1,100,1,5 +4180,0,1,1,100,1,5 +4190,0,1,1,100,1,5 +4200,0,1,1,100,1,5 +4210,0,1,1,100,1,5 +4220,0,1,1,100,1,5 +4230,0,1,1,100,1,5 +4240,0,1,1,100,1,5 +4250,0,1,1,100,1,5 +4260,0,1,1,100,1,5 +4270,0,1,1,100,1,5 +4280,0,1,1,100,1,5 +4290,0,1,1,100,1,5 +4300,0,1,1,100,1,5 +4310,0,1,1,100,1,5 +4320,0,1,1,100,1,5 +4330,0,1,1,100,1,5 +4340,0,1,1,100,1,5 +4350,0,1,1,100,1,5 +4360,0,1,1,100,1,5 +4370,0,1,1,100,1,5 +4380,0,1,1,100,1,5 +4390,0,1,1,100,1,5 +4400,0,1,1,100,1,5 +4410,0,1,1,100,1,5 +4420,0,1,1,100,1,5 +4430,0,1,1,100,1,5 +4440,0,1,1,100,1,5 +4450,0,1,1,100,1,5 +4460,0,1,1,100,1,5 +4470,0,1,1,100,1,5 +4480,0,1,1,100,1,5 +4490,0,1,1,100,1,5 +4500,0,1,1,100,1,5 +4510,0,1,1,100,1,5 +4520,0,1,1,100,1,5 +4530,0,1,1,100,1,5 +4540,0,1,1,100,1,5 +4550,0,1,1,100,1,5 +4560,0,1,1,100,1,5 +4570,0,1,1,100,1,5 +4580,0,1,1,100,1,5 +4590,0,1,1,100,1,5 +4600,0,1,1,100,1,5 +4610,0,1,1,100,1,5 +4620,0,1,1,100,1,5 +4630,0,1,1,100,1,5 +4640,0,1,1,100,1,5 +4650,0,1,1,100,1,5 +4660,0,1,1,100,1,5 +4670,0,1,1,100,1,5 +4680,0,1,1,100,1,5 +4690,0,1,1,100,1,5 +4700,0,1,1,100,1,5 +4710,0,1,1,100,1,5 +4720,0,1,1,100,1,5 +4730,0,1,1,100,1,5 +4740,0,1,1,100,1,5 +4750,0,1,1,100,1,5 +4760,0,1,1,100,1,5 +4770,0,1,1,100,1,5 +4780,0,1,1,100,1,5 +4790,0,1,1,100,1,5 +4800,0,1,1,100,1,5 +4810,0,1,1,100,1,5 +4820,0,1,1,100,1,5 +4830,0,1,1,100,1,5 +4840,0,1,1,100,1,5 +4850,0,1,1,100,1,5 +4860,0,1,1,100,1,5 +4870,0,1,1,100,1,5 +4880,0,1,1,100,1,5 +4890,0,1,1,100,1,5 +4900,0,1,1,100,1,5 +4910,0,1,1,100,1,5 +4920,0,1,1,100,1,5 +4930,0,1,1,100,1,5 +4940,0,1,1,100,1,5 +4950,0,1,1,100,1,5 +4960,0,1,1,100,1,5 +4970,0,1,1,100,1,5 +4980,0,1,1,100,1,5 +4990,0,1,1,100,1,5 +5000,0,2,2,100,1,5 +5010,0,2,2,100,1,5 +5020,0,2,2,100,1,5 +5030,0,2,2,100,1,5 +5040,0,2,2,100,1,5 +5050,0,2,2,100,1,5 +5060,0,2,2,100,1,5 +5070,0,2,2,100,1,5 +5080,0,2,2,100,1,5 +5090,0,2,2,100,1,5 +5100,0,2,2,100,1,5 +5110,0,2,2,100,1,5 +5120,0,2,2,100,1,5 +5130,0,2,2,100,1,5 +5140,0,2,2,100,1,5 +5150,0,2,2,100,1,5 +5160,0,2,2,100,1,5 +5170,0,2,2,100,1,5 +5180,0,2,2,100,1,5 +5190,0,2,2,100,1,5 +5200,0,2,2,100,1,5 +5210,0,2,2,100,1,5 +5220,0,2,2,100,1,5 +5230,0,2,2,100,1,5 +5240,0,2,2,100,1,5 +5250,0,2,2,100,1,5 +5260,0,2,2,100,1,5 +5270,0,2,2,100,1,5 +5280,0,2,2,100,1,5 +5290,0,2,2,100,1,5 +5300,0,2,2,100,1,5 +5310,0,2,2,100,1,5 +5320,0,2,2,100,1,5 +5330,0,2,2,100,1,5 +5340,0,2,2,100,1,5 +5350,0,2,2,100,1,5 +5360,0,2,2,100,1,5 +5370,0,2,2,100,1,5 +5380,0,2,2,100,1,5 +5390,0,2,2,100,1,5 +5400,0,2,2,100,1,5 +5410,0,2,2,100,1,5 +5420,0,2,2,100,1,5 +5430,0,2,2,100,1,5 +5440,0,2,2,100,1,5 +5450,0,2,2,100,1,5 +5460,0,2,2,100,1,5 +5470,0,2,2,100,1,5 +5480,0,2,2,100,1,5 +5490,0,2,2,100,1,5 +5500,0,2,2,100,1,5 +5510,0,2,2,100,1,5 +5520,0,2,2,100,1,5 +5530,0,2,2,100,1,5 +5540,0,2,2,100,1,5 +5550,0,2,2,100,1,5 +5560,0,2,2,100,1,5 +5570,0,2,2,100,1,5 +5580,0,2,2,100,1,5 +5590,0,2,2,100,1,5 +5600,0,2,2,100,1,5 +5610,0,2,2,100,1,5 +5620,0,2,2,100,1,5 +5630,0,2,2,100,1,5 +5640,0,2,2,100,1,5 +5650,0,2,2,100,1,5 +5660,0,2,2,100,1,5 +5670,0,2,2,100,1,5 +5680,0,2,2,100,1,5 +5690,0,2,2,100,1,5 +5700,0,2,2,100,1,5 +5710,0,2,2,100,1,5 +5720,0,2,2,100,1,5 +5730,0,2,2,100,1,5 +5740,0,2,2,100,1,5 +5750,0,2,2,100,1,5 +5760,0,2,2,100,1,5 +5770,0,2,2,100,1,5 +5780,0,2,2,100,1,5 +5790,0,2,2,100,1,5 +5800,0,2,2,100,1,5 +5810,0,2,2,100,1,5 +5820,0,2,2,100,1,5 +5830,0,2,2,100,1,5 +5840,0,2,2,100,1,5 +5850,0,2,2,100,1,5 +5860,0,2,2,100,1,5 +5870,0,2,2,100,1,5 +5880,0,2,2,100,1,5 +5890,0,2,2,100,1,5 +5900,0,2,2,100,1,5 +5910,0,2,2,100,1,5 +5920,0,2,2,100,1,5 +5930,0,2,2,100,1,5 +5940,0,2,2,100,1,5 +5950,0,2,2,100,1,5 +5960,0,2,2,100,1,5 +5970,0,2,2,100,1,5 +5980,0,2,2,100,1,5 +5990,0,2,2,100,1,5 +6000,0,2,2,100,1,5 +6010,0,2,2,100,1,5 +6020,0,2,2,100,1,5 +6030,0,2,2,100,1,5 +6040,0,2,2,100,1,5 +6050,0,2,2,100,1,5 +6060,0,2,2,100,1,5 +6070,0,2,2,100,1,5 +6080,0,2,2,100,1,5 +6090,0,2,2,100,1,5 +6100,0,2,2,100,1,5 +6110,0,2,2,100,1,5 +6120,0,2,2,100,1,5 +6130,0,2,2,100,1,5 +6140,0,2,2,100,1,5 +6150,0,2,2,100,1,5 +6160,0,2,2,100,1,5 +6170,0,2,2,100,1,5 +6180,0,2,2,100,1,5 +6190,0,2,2,100,1,5 +6200,0,2,2,100,1,5 +6210,0,2,2,100,1,5 +6220,0,2,2,100,1,5 +6230,0,2,2,100,1,5 +6240,0,2,2,100,1,5 +6250,0,2,2,100,1,5 +6260,0,2,2,100,1,5 +6270,0,2,2,100,1,5 +6280,0,2,2,100,1,5 +6290,0,2,2,100,1,5 +6300,0,2,2,100,1,5 +6310,0,2,2,100,1,5 +6320,0,2,2,100,1,5 +6330,0,2,2,100,1,5 +6340,0,2,2,100,1,5 +6350,0,2,2,100,1,5 +6360,0,2,2,100,1,5 +6370,0,2,2,100,1,5 +6380,0,2,2,100,1,5 +6390,0,2,2,100,1,5 +6400,0,2,2,100,1,5 +6410,0,2,2,100,1,5 +6420,0,2,2,100,1,5 +6430,0,2,2,100,1,5 +6440,0,2,2,100,1,5 +6450,0,2,2,100,1,5 +6460,0,2,2,100,1,5 +6470,0,2,2,100,1,5 +6480,0,2,2,100,1,5 +6490,0,2,2,100,1,5 +6500,0,2,2,100,1,5 +6510,0,2,2,100,1,5 +6520,0,2,2,100,1,5 +6530,0,2,2,100,1,5 +6540,0,2,2,100,1,5 +6550,0,2,2,100,1,5 +6560,0,2,2,100,1,5 +6570,0,2,2,100,1,5 +6580,0,2,2,100,1,5 +6590,0,2,2,100,1,5 +6600,0,2,2,100,1,5 +6610,0,2,2,100,1,5 +6620,0,2,2,100,1,5 +6630,0,2,2,100,1,5 +6640,0,2,2,100,1,5 +6650,0,2,2,100,1,5 +6660,0,2,2,100,1,5 +6670,0,2,2,100,1,5 +6680,0,2,2,100,1,5 +6690,0,2,2,100,1,5 +6700,0,2,2,100,1,5 +6710,0,2,2,100,1,5 +6720,0,2,2,100,1,5 +6730,0,2,2,100,1,5 +6740,0,2,2,100,1,5 +6750,0,2,2,100,1,5 +6760,0,2,2,100,1,5 +6770,0,2,2,100,1,5 +6780,0,2,2,100,1,5 +6790,0,2,2,100,1,5 +6800,0,2,2,100,1,5 +6810,0,2,2,100,1,5 +6820,0,2,2,100,1,5 +6830,0,2,2,100,1,5 +6840,0,2,2,100,1,5 +6850,0,2,2,100,1,5 +6860,0,2,2,100,1,5 +6870,0,2,2,100,1,5 +6880,0,2,2,100,1,5 +6890,0,2,2,100,1,5 +6900,0,2,2,100,1,5 +6910,0,2,2,100,1,5 +6920,0,2,2,100,1,5 +6930,0,2,2,100,1,5 +6940,0,2,2,100,1,5 +6950,0,2,2,100,1,5 +6960,0,2,2,100,1,5 +6970,0,2,2,100,1,5 +6980,0,2,2,100,1,5 +6990,0,2,2,100,1,5 +7000,0,2,2,100,1,5 +7010,0,2,2,100,1,5 +7020,0,2,2,100,1,5 +7030,0,2,2,100,1,5 +7040,0,2,2,100,1,5 +7050,0,2,2,100,1,5 +7060,0,2,2,100,1,5 +7070,0,2,2,100,1,5 +7080,0,2,2,100,1,5 +7090,0,2,2,100,1,5 +7100,0,2,2,100,1,5 +7110,0,2,2,100,1,5 +7120,0,2,2,100,1,5 +7130,0,2,2,100,1,5 +7140,0,2,2,100,1,5 +7150,0,2,2,100,1,5 +7160,0,2,2,100,1,5 +7170,0,2,2,100,1,5 +7180,0,2,2,100,1,5 +7190,0,2,2,100,1,5 +7200,0,2,2,100,1,5 +7210,0,2,2,100,1,5 +7220,0,2,2,100,1,5 +7230,0,2,2,100,1,5 +7240,0,2,2,100,1,5 +7250,0,2,2,100,1,5 +7260,0,2,2,100,1,5 +7270,0,2,2,100,1,5 +7280,0,2,2,100,1,5 +7290,0,2,2,100,1,5 +7300,0,2,2,100,1,5 +7310,0,2,2,100,1,5 +7320,0,2,2,100,1,5 +7330,0,2,2,100,1,5 +7340,0,2,2,100,1,5 +7350,0,2,2,100,1,5 +7360,0,2,2,100,1,5 +7370,0,2,2,100,1,5 +7380,0,2,2,100,1,5 +7390,0,2,2,100,1,5 +7400,0,2,2,100,1,5 +7410,0,2,2,100,1,5 +7420,0,2,2,100,1,5 +7430,0,2,2,100,1,5 +7440,0,2,2,100,1,5 +7450,0,2,2,100,1,5 +7460,0,2,2,100,1,5 +7470,0,2,2,100,1,5 +7480,0,2,2,100,1,5 +7490,0,2,2,100,1,5 +7500,0,2,2,100,1,5 +7510,0,2,2,100,1,5 +7520,0,2,2,100,1,5 +7530,0,2,2,100,1,5 +7540,0,2,2,100,1,5 +7550,0,2,2,100,1,5 +7560,0,2,2,100,1,5 +7570,0,2,2,100,1,5 +7580,0,2,2,100,1,5 +7590,0,2,2,100,1,5 +7600,0,2,2,100,1,5 +7610,0,2,2,100,1,5 +7620,0,2,2,100,1,5 +7630,0,2,2,100,1,5 +7640,0,2,2,100,1,5 +7650,0,2,2,100,1,5 +7660,0,2,2,100,1,5 +7670,0,2,2,100,1,5 +7680,0,2,2,100,1,5 +7690,0,2,2,100,1,5 +7700,0,2,2,100,1,5 +7710,0,2,2,100,1,5 +7720,0,2,2,100,1,5 +7730,0,2,2,100,1,5 +7740,0,2,2,100,1,5 +7750,0,2,2,100,1,5 +7760,0,2,2,100,1,5 +7770,0,2,2,100,1,5 +7780,0,2,2,100,1,5 +7790,0,2,2,100,1,5 +7800,0,2,2,100,1,5 +7810,0,2,2,100,1,5 +7820,0,2,2,100,1,5 +7830,0,2,2,100,1,5 +7840,0,2,2,100,1,5 +7850,0,2,2,100,1,5 +7860,0,2,2,100,1,5 +7870,0,2,2,100,1,5 +7880,0,2,2,100,1,5 +7890,0,2,2,100,1,5 +7900,0,2,2,100,1,5 +7910,0,2,2,100,1,5 +7920,0,2,2,100,1,5 +7930,0,2,2,100,1,5 +7940,0,2,2,100,1,5 +7950,0,2,2,100,1,5 +7960,0,2,2,100,1,5 +7970,0,2,2,100,1,5 +7980,0,2,2,100,1,5 +7990,0,2,2,100,1,5 +8000,0,2,2,100,1,5 +8010,0,2,2,100,1,5 +8020,0,2,2,100,1,5 +8030,0,2,2,100,1,5 +8040,0,2,2,100,1,5 +8050,0,2,2,100,1,5 +8060,0,2,2,100,1,5 +8070,0,2,2,100,1,5 +8080,0,2,2,100,1,5 +8090,0,2,2,100,1,5 +8100,0,2,2,100,1,5 +8110,0,2,2,100,1,5 +8120,0,2,2,100,1,5 +8130,0,2,2,100,1,5 +8140,0,2,2,100,1,5 +8150,0,2,2,100,1,5 +8160,0,2,2,100,1,5 +8170,0,2,2,100,1,5 +8180,0,2,2,100,1,5 +8190,0,2,2,100,1,5 +8200,0,2,2,100,1,5 +8210,0,2,2,100,1,5 +8220,0,2,2,100,1,5 +8230,0,2,2,100,1,5 +8240,0,2,2,100,1,5 +8250,0,2,2,100,1,5 +8260,0,2,2,100,1,5 +8270,0,2,2,100,1,5 +8280,0,2,2,100,1,5 +8290,0,2,2,100,1,5 +8300,0,2,2,100,1,5 +8310,0,2,2,100,1,5 +8320,0,2,2,100,1,5 +8330,0,2,2,100,1,5 +8340,0,2,2,100,1,5 +8350,0,2,2,100,1,5 +8360,0,2,2,100,1,5 +8370,0,2,2,100,1,5 +8380,0,2,2,100,1,5 +8390,0,2,2,100,1,5 +8400,0,2,2,100,1,5 +8410,0,2,2,100,1,5 +8420,0,2,2,100,1,5 +8430,0,2,2,100,1,5 +8440,0,2,2,100,1,5 +8450,0,2,2,100,1,5 +8460,0,2,2,100,1,5 +8470,0,2,2,100,1,5 +8480,0,2,2,100,1,5 +8490,0,2,2,100,1,5 +8500,0,2,2,100,1,5 +8510,0,2,2,100,1,5 +8520,0,2,2,100,1,5 +8530,0,2,2,100,1,5 +8540,0,2,2,100,1,5 +8550,0,2,2,100,1,5 +8560,0,2,2,100,1,5 +8570,0,2,2,100,1,5 +8580,0,2,2,100,1,5 +8590,0,2,2,100,1,5 +8600,0,2,2,100,1,5 +8610,0,2,2,100,1,5 +8620,0,2,2,100,1,5 +8630,0,2,2,100,1,5 +8640,0,2,2,100,1,5 +8650,0,2,2,100,1,5 +8660,0,2,2,100,1,5 +8670,0,2,2,100,1,5 +8680,0,2,2,100,1,5 +8690,0,2,2,100,1,5 +8700,0,2,2,100,1,5 +8710,0,2,2,100,1,5 +8720,0,2,2,100,1,5 +8730,0,2,2,100,1,5 +8740,0,2,2,100,1,5 +8750,0,2,2,100,1,5 +8760,0,2,2,100,1,5 +8770,0,2,2,100,1,5 +8780,0,2,2,100,1,5 +8790,0,2,2,100,1,5 +8800,0,2,2,100,1,5 +8810,0,2,2,100,1,5 +8820,0,2,2,100,1,5 +8830,0,2,2,100,1,5 +8840,0,2,2,100,1,5 +8850,0,2,2,100,1,5 +8860,0,2,2,100,1,5 +8870,0,2,2,100,1,5 +8880,0,2,2,100,1,5 +8890,0,2,2,100,1,5 +8900,0,2,2,100,1,5 +8910,0,2,2,100,1,5 +8920,0,2,2,100,1,5 +8930,0,2,2,100,1,5 +8940,0,2,2,100,1,5 +8950,0,2,2,100,1,5 +8960,0,2,2,100,1,5 +8970,0,2,2,100,1,5 +8980,0,2,2,100,1,5 +8990,0,2,2,100,1,5 +9000,0,2,2,100,1,5 +9010,0,2,2,100,1,5 +9020,0,2,2,100,1,5 +9030,0,2,2,100,1,5 +9040,0,2,2,100,1,5 +9050,0,2,2,100,1,5 +9060,0,2,2,100,1,5 +9070,0,2,2,100,1,5 +9080,0,2,2,100,1,5 +9090,0,2,2,100,1,5 +9100,0,2,2,100,1,5 +9110,0,2,2,100,1,5 +9120,0,2,2,100,1,5 +9130,0,2,2,100,1,5 +9140,0,2,2,100,1,5 +9150,0,2,2,100,1,5 +9160,0,2,2,100,1,5 +9170,0,2,2,100,1,5 +9180,0,2,2,100,1,5 +9190,0,2,2,100,1,5 +9200,0,2,2,100,1,5 +9210,0,2,2,100,1,5 +9220,0,2,2,100,1,5 +9230,0,2,2,100,1,5 +9240,0,2,2,100,1,5 +9250,0,2,2,100,1,5 +9260,0,2,2,100,1,5 +9270,0,2,2,100,1,5 +9280,0,2,2,100,1,5 +9290,0,2,2,100,1,5 +9300,0,2,2,100,1,5 +9310,0,2,2,100,1,5 +9320,0,2,2,100,1,5 +9330,0,2,2,100,1,5 +9340,0,2,2,100,1,5 +9350,0,2,2,100,1,5 +9360,0,2,2,100,1,5 +9370,0,2,2,100,1,5 +9380,0,2,2,100,1,5 +9390,0,2,2,100,1,5 +9400,0,2,2,100,1,5 +9410,0,2,2,100,1,5 +9420,0,2,2,100,1,5 +9430,0,2,2,100,1,5 +9440,0,2,2,100,1,5 +9450,0,2,2,100,1,5 +9460,0,2,2,100,1,5 +9470,0,2,2,100,1,5 +9480,0,2,2,100,1,5 +9490,0,2,2,100,1,5 +9500,0,2,2,100,1,5 +9510,0,2,2,100,1,5 +9520,0,2,2,100,1,5 +9530,0,2,2,100,1,5 +9540,0,2,2,100,1,5 +9550,0,2,2,100,1,5 +9560,0,2,2,100,1,5 +9570,0,2,2,100,1,5 +9580,0,2,2,100,1,5 +9590,0,2,2,100,1,5 +9600,0,2,2,100,1,5 +9610,0,2,2,100,1,5 +9620,0,2,2,100,1,5 +9630,0,2,2,100,1,5 +9640,0,2,2,100,1,5 +9650,0,2,2,100,1,5 +9660,0,2,2,100,1,5 +9670,0,2,2,100,1,5 +9680,0,2,2,100,1,5 +9690,0,2,2,100,1,5 +9700,0,2,2,100,1,5 +9710,0,2,2,100,1,5 +9720,0,2,2,100,1,5 +9730,0,2,2,100,1,5 +9740,0,2,2,100,1,5 +9750,0,2,2,100,1,5 +9760,0,2,2,100,1,5 +9770,0,2,2,100,1,5 +9780,0,2,2,100,1,5 +9790,0,2,2,100,1,5 +9800,0,2,2,100,1,5 +9810,0,2,2,100,1,5 +9820,0,2,2,100,1,5 +9830,0,2,2,100,1,5 +9840,0,2,2,100,1,5 +9850,0,2,2,100,1,5 +9860,0,2,2,100,1,5 +9870,0,2,2,100,1,5 +9880,0,2,2,100,1,5 +9890,0,2,2,100,1,5 +9900,0,2,2,100,1,5 +9910,0,2,2,100,1,5 +9920,0,2,2,100,1,5 +9930,0,2,2,100,1,5 +9940,0,2,2,100,1,5 +9950,0,2,2,100,1,5 +9960,0,2,2,100,1,5 +9970,0,2,2,100,1,5 +9980,0,2,2,100,1,5 +9990,0,2,2,100,1,5 +10000,0,2,2,100,1,5 +10010,0,2,2,100,1,5 +10020,0,2,2,100,1,5 +10030,0,2,2,100,1,5 +10040,0,2,2,100,1,5 +10050,0,2,2,100,1,5 +10060,0,2,2,100,1,5 +10070,0,2,2,100,1,5 +10080,0,2,2,100,1,5 +10090,0,2,2,100,1,5 +10100,0,2,2,100,1,5 diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20210105_fat.csv b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20210105_fat.csv new file mode 100644 index 0000000..fda3c4d --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20210105_fat.csv @@ -0,0 +1,1013 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,0,0.5,0.5,100,1,5 +10,0,0.5,0.5,100,1,5 +20,0,0.5,0.5,100,1,5 +30,0,0.5,0.5,100,1,5 +40,0,0.5,0.5,100,1,5 +50,0,0.5,0.5,100,1,5 +60,0,0.5,0.5,100,1,5 +70,0,0.5,0.5,100,1,5 +80,0,0.5,0.5,100,1,5 +90,0,0.5,0.5,100,1,5 +100,0,0.5,0.5,100,1,5 +110,0,0.5,0.5,100,1,5 +120,0,0.5,0.5,100,1,5 +130,0,0.5,0.5,100,1,5 +140,0,0.5,0.5,100,1,5 +150,0,0.5,0.5,100,1,5 +160,0,0.5,0.5,100,1,5 +170,0,0.5,0.5,100,1,5 +180,0,0.5,0.5,100,1,5 +190,0,0.5,0.5,100,1,5 +200,0,0.5,0.5,100,1,5 +210,0,0.5,0.5,100,1,5 +220,0,0.5,0.5,100,1,5 +230,0,0.5,0.5,100,1,5 +240,0,0.5,0.5,100,1,5 +250,0,0.5,0.5,100,1,5 +260,0,0.5,0.5,100,1,5 +270,0,0.5,0.5,100,1,5 +280,0,0.5,0.5,100,1,5 +290,0,0.5,0.5,100,1,5 +300,0,0.5,0.5,100,1,5 +310,0,0.5,0.5,100,1,5 +320,0,0.5,0.5,100,1,5 +330,0,0.5,0.5,100,1,5 +340,0,0.5,0.5,100,1,5 +350,0,0.5,0.5,100,1,5 +360,0,0.5,0.5,100,1,5 +370,0,0.5,0.5,100,1,5 +380,0,0.5,0.5,100,1,5 +390,0,0.5,0.5,100,1,5 +400,0,0.5,0.5,100,1,5 +410,0,0.5,0.5,100,1,5 +420,0,0.5,0.5,100,1,5 +430,0,0.5,0.5,100,1,5 +440,0,0.5,0.5,100,1,5 +450,0,0.5,0.5,100,1,5 +460,0,0.5,0.5,100,1,5 +470,0,0.5,0.5,100,1,5 +480,0,0.5,0.5,100,1,5 +490,0,0.5,0.5,100,1,5 +500,0,0.5,0.5,100,1,5 +510,0,0.5,0.5,100,1,5 +520,0,0.5,0.5,100,1,5 +530,0,0.5,0.5,100,1,5 +540,0,0.5,0.5,100,1,5 +550,0,0.5,0.5,100,1,5 +560,0,0.5,0.5,100,1,5 +570,0,0.5,0.5,100,1,5 +580,0,0.5,0.5,100,1,5 +590,0,0.5,0.5,100,1,5 +600,0,0.5,0.5,100,1,5 +610,0,0.5,0.5,100,1,5 +620,0,0.5,0.5,100,1,5 +630,0,0.5,0.5,100,1,5 +640,0,0.5,0.5,100,1,5 +650,0,0.5,0.5,100,1,5 +660,0,0.5,0.5,100,1,5 +670,0,0.5,0.5,100,1,5 +680,0,0.5,0.5,100,1,5 +690,0,0.5,0.5,100,1,5 +700,0,0.5,0.5,100,1,5 +710,0,0.5,0.5,100,1,5 +720,0,0.5,0.5,100,1,5 +730,0,0.5,0.5,100,1,5 +740,0,0.5,0.5,100,1,5 +750,0,0.5,0.5,100,1,5 +760,0,0.5,0.5,100,1,5 +770,0,0.5,0.5,100,1,5 +780,0,0.5,0.5,100,1,5 +790,0,0.5,0.5,100,1,5 +800,0,0.5,0.5,100,1,5 +810,0,0.5,0.5,100,1,5 +820,0,0.5,0.5,100,1,5 +830,0,0.5,0.5,100,1,5 +840,0,0.5,0.5,100,1,5 +850,0,0.5,0.5,100,1,5 +860,0,0.5,0.5,100,1,5 +870,0,0.5,0.5,100,1,5 +880,0,0.5,0.5,100,1,5 +890,0,0.5,0.5,100,1,5 +900,0,0.5,0.5,100,1,5 +910,0,0.5,0.5,100,1,5 +920,0,0.5,0.5,100,1,5 +930,0,0.5,0.5,100,1,5 +940,0,0.5,0.5,100,1,5 +950,0,0.5,0.5,100,1,5 +960,0,0.5,0.5,100,1,5 +970,0,0.5,0.5,100,1,5 +980,0,0.5,0.5,100,1,5 +990,0,0.5,0.5,100,1,5 +1000,0,0.5,0.5,100,1,5 +1010,0,1,1,100,1,5 +1020,0,1,1,100,1,5 +1030,0,1,1,100,1,5 +1040,0,1,1,100,1,5 +1050,0,1,1,100,1,5 +1060,0,1,1,100,1,5 +1070,0,1,1,100,1,5 +1080,0,1,1,100,1,5 +1090,0,1,1,100,1,5 +1100,0,1,1,100,1,5 +1110,0,1,1,100,1,5 +1120,0,1,1,100,1,5 +1130,0,1,1,100,1,5 +1140,0,1,1,100,1,5 +1150,0,1,1,100,1,5 +1160,0,1,1,100,1,5 +1170,0,1,1,100,1,5 +1180,0,1,1,100,1,5 +1190,0,1,1,100,1,5 +1200,0,1,1,100,1,5 +1210,0,1,1,100,1,5 +1220,0,1,1,100,1,5 +1230,0,1,1,100,1,5 +1240,0,1,1,100,1,5 +1250,0,1,1,100,1,5 +1260,0,1,1,100,1,5 +1270,0,1,1,100,1,5 +1280,0,1,1,100,1,5 +1290,0,1,1,100,1,5 +1300,0,1,1,100,1,5 +1310,0,1,1,100,1,5 +1320,0,1,1,100,1,5 +1330,0,1,1,100,1,5 +1340,0,1,1,100,1,5 +1350,0,1,1,100,1,5 +1360,0,1,1,100,1,5 +1370,0,1,1,100,1,5 +1380,0,1,1,100,1,5 +1390,0,1,1,100,1,5 +1400,0,1,1,100,1,5 +1410,0,1,1,100,1,5 +1420,0,1,1,100,1,5 +1430,0,1,1,100,1,5 +1440,0,1,1,100,1,5 +1450,0,1,1,100,1,5 +1460,0,1,1,100,1,5 +1470,0,1,1,100,1,5 +1480,0,1,1,100,1,5 +1490,0,1,1,100,1,5 +1500,0,1,1,100,1,5 +1510,0,1,1,100,1,5 +1520,0,1,1,100,1,5 +1530,0,1,1,100,1,5 +1540,0,1,1,100,1,5 +1550,0,1,1,100,1,5 +1560,0,1,1,100,1,5 +1570,0,1,1,100,1,5 +1580,0,1,1,100,1,5 +1590,0,1,1,100,1,5 +1600,0,1,1,100,1,5 +1610,0,1,1,100,1,5 +1620,0,1,1,100,1,5 +1630,0,1,1,100,1,5 +1640,0,1,1,100,1,5 +1650,0,1,1,100,1,5 +1660,0,1,1,100,1,5 +1670,0,1,1,100,1,5 +1680,0,1,1,100,1,5 +1690,0,1,1,100,1,5 +1700,0,1,1,100,1,5 +1710,0,1,1,100,1,5 +1720,0,1,1,100,1,5 +1730,0,1,1,100,1,5 +1740,0,1,1,100,1,5 +1750,0,1,1,100,1,5 +1760,0,1,1,100,1,5 +1770,0,1,1,100,1,5 +1780,0,1,1,100,1,5 +1790,0,1,1,100,1,5 +1800,0,1,1,100,1,5 +1810,0,1,1,100,1,5 +1820,0,1,1,100,1,5 +1830,0,1,1,100,1,5 +1840,0,1,1,100,1,5 +1850,0,1,1,100,1,5 +1860,0,1,1,100,1,5 +1870,0,1,1,100,1,5 +1880,0,1,1,100,1,5 +1890,0,1,1,100,1,5 +1900,0,1,1,100,1,5 +1910,0,1,1,100,1,5 +1920,0,1,1,100,1,5 +1930,0,1,1,100,1,5 +1940,0,1,1,100,1,5 +1950,0,1,1,100,1,5 +1960,0,1,1,100,1,5 +1970,0,1,1,100,1,5 +1980,0,1,1,100,1,5 +1990,0,1,1,100,1,5 +2000,0,1,1,100,1,5 +2010,0,1,1,100,1,5 +2020,0,1,1,100,1,5 +2030,0,1,1,100,1,5 +2040,0,1,1,100,1,5 +2050,0,1,1,100,1,5 +2060,0,1,1,100,1,5 +2070,0,1,1,100,1,5 +2080,0,1,1,100,1,5 +2090,0,1,1,100,1,5 +2100,0,1,1,100,1,5 +2110,0,1,1,100,1,5 +2120,0,1,1,100,1,5 +2130,0,1,1,100,1,5 +2140,0,1,1,100,1,5 +2150,0,1,1,100,1,5 +2160,0,1,1,100,1,5 +2170,0,1,1,100,1,5 +2180,0,1,1,100,1,5 +2190,0,1,1,100,1,5 +2200,0,1,1,100,1,5 +2210,0,1,1,100,1,5 +2220,0,1,1,100,1,5 +2230,0,1,1,100,1,5 +2240,0,1,1,100,1,5 +2250,0,1,1,100,1,5 +2260,0,1,1,100,1,5 +2270,0,1,1,100,1,5 +2280,0,1,1,100,1,5 +2290,0,1,1,100,1,5 +2300,0,1,1,100,1,5 +2310,0,1,1,100,1,5 +2320,0,1,1,100,1,5 +2330,0,1,1,100,1,5 +2340,0,1,1,100,1,5 +2350,0,1,1,100,1,5 +2360,0,1,1,100,1,5 +2370,0,1,1,100,1,5 +2380,0,1,1,100,1,5 +2390,0,1,1,100,1,5 +2400,0,1,1,100,1,5 +2410,0,1,1,100,1,5 +2420,0,1,1,100,1,5 +2430,0,1,1,100,1,5 +2440,0,1,1,100,1,5 +2450,0,1,1,100,1,5 +2460,0,1,1,100,1,5 +2470,0,1,1,100,1,5 +2480,0,1,1,100,1,5 +2490,0,1,1,100,1,5 +2500,0,1,1,100,1,5 +2510,0,1,1,100,1,5 +2520,0,1,1,100,1,5 +2530,0,1,1,100,1,5 +2540,0,1,1,100,1,5 +2550,0,1,1,100,1,5 +2560,0,1,1,100,1,5 +2570,0,1,1,100,1,5 +2580,0,1,1,100,1,5 +2590,0,1,1,100,1,5 +2600,0,1,1,100,1,5 +2610,0,1,1,100,1,5 +2620,0,1,1,100,1,5 +2630,0,1,1,100,1,5 +2640,0,1,1,100,1,5 +2650,0,1,1,100,1,5 +2660,0,1,1,100,1,5 +2670,0,1,1,100,1,5 +2680,0,1,1,100,1,5 +2690,0,1,1,100,1,5 +2700,0,1,1,100,1,5 +2710,0,1,1,100,1,5 +2720,0,1,1,100,1,5 +2730,0,1,1,100,1,5 +2740,0,1,1,100,1,5 +2750,0,1,1,100,1,5 +2760,0,1,1,100,1,5 +2770,0,1,1,100,1,5 +2780,0,1,1,100,1,5 +2790,0,1,1,100,1,5 +2800,0,1,1,100,1,5 +2810,0,1,1,100,1,5 +2820,0,1,1,100,1,5 +2830,0,1,1,100,1,5 +2840,0,1,1,100,1,5 +2850,0,1,1,100,1,5 +2860,0,1,1,100,1,5 +2870,0,1,1,100,1,5 +2880,0,1,1,100,1,5 +2890,0,1,1,100,1,5 +2900,0,1,1,100,1,5 +2910,0,1,1,100,1,5 +2920,0,1,1,100,1,5 +2930,0,1,1,100,1,5 +2940,0,1,1,100,1,5 +2950,0,1,1,100,1,5 +2960,0,1,1,100,1,5 +2970,0,1,1,100,1,5 +2980,0,1,1,100,1,5 +2990,0,1,1,100,1,5 +3000,0,1,1,100,1,5 +3010,0,1,1,100,1,5 +3020,0,1,1,100,1,5 +3030,0,1,1,100,1,5 +3040,0,1,1,100,1,5 +3050,0,1,1,100,1,5 +3060,0,1,1,100,1,5 +3070,0,1,1,100,1,5 +3080,0,1,1,100,1,5 +3090,0,1,1,100,1,5 +3100,0,1,1,100,1,5 +3110,0,1,1,100,1,5 +3120,0,1,1,100,1,5 +3130,0,1,1,100,1,5 +3140,0,1,1,100,1,5 +3150,0,1,1,100,1,5 +3160,0,1,1,100,1,5 +3170,0,1,1,100,1,5 +3180,0,1,1,100,1,5 +3190,0,1,1,100,1,5 +3200,0,1,1,100,1,5 +3210,0,1,1,100,1,5 +3220,0,1,1,100,1,5 +3230,0,1,1,100,1,5 +3240,0,1,1,100,1,5 +3250,0,1,1,100,1,5 +3260,0,1,1,100,1,5 +3270,0,1,1,100,1,5 +3280,0,1,1,100,1,5 +3290,0,1,1,100,1,5 +3300,0,1,1,100,1,5 +3310,0,1,1,100,1,5 +3320,0,1,1,100,1,5 +3330,0,1,1,100,1,5 +3340,0,1,1,100,1,5 +3350,0,1,1,100,1,5 +3360,0,1,1,100,1,5 +3370,0,1,1,100,1,5 +3380,0,1,1,100,1,5 +3390,0,1,1,100,1,5 +3400,0,1,1,100,1,5 +3410,0,1,1,100,1,5 +3420,0,1,1,100,1,5 +3430,0,1,1,100,1,5 +3440,0,1,1,100,1,5 +3450,0,1,1,100,1,5 +3460,0,1,1,100,1,5 +3470,0,1,1,100,1,5 +3480,0,1,1,100,1,5 +3490,0,1,1,100,1,5 +3500,0,1,1,100,1,5 +3510,0,1,1,100,1,5 +3520,0,1,1,100,1,5 +3530,0,1,1,100,1,5 +3540,0,1,1,100,1,5 +3550,0,1,1,100,1,5 +3560,0,1,1,100,1,5 +3570,0,1,1,100,1,5 +3580,0,1,1,100,1,5 +3590,0,1,1,100,1,5 +3600,0,1,1,100,1,5 +3610,0,1,1,100,1,5 +3620,0,1,1,100,1,5 +3630,0,1,1,100,1,5 +3640,0,1,1,100,1,5 +3650,0,1,1,100,1,5 +3660,0,1,1,100,1,5 +3670,0,1,1,100,1,5 +3680,0,1,1,100,1,5 +3690,0,1,1,100,1,5 +3700,0,1,1,100,1,5 +3710,0,1,1,100,1,5 +3720,0,1,1,100,1,5 +3730,0,1,1,100,1,5 +3740,0,1,1,100,1,5 +3750,0,1,1,100,1,5 +3760,0,1,1,100,1,5 +3770,0,1,1,100,1,5 +3780,0,1,1,100,1,5 +3790,0,1,1,100,1,5 +3800,0,1,1,100,1,5 +3810,0,1,1,100,1,5 +3820,0,1,1,100,1,5 +3830,0,1,1,100,1,5 +3840,0,1,1,100,1,5 +3850,0,1,1,100,1,5 +3860,0,1,1,100,1,5 +3870,0,1,1,100,1,5 +3880,0,1,1,100,1,5 +3890,0,1,1,100,1,5 +3900,0,1,1,100,1,5 +3910,0,1,1,100,1,5 +3920,0,1,1,100,1,5 +3930,0,1,1,100,1,5 +3940,0,1,1,100,1,5 +3950,0,1,1,100,1,5 +3960,0,1,1,100,1,5 +3970,0,1,1,100,1,5 +3980,0,1,1,100,1,5 +3990,0,1,1,100,1,5 +4000,0,1,1,100,1,5 +4010,0,1,1,100,1,5 +4020,0,1,1,100,1,5 +4030,0,1,1,100,1,5 +4040,0,1,1,100,1,5 +4050,0,1,1,100,1,5 +4060,0,1,1,100,1,5 +4070,0,1,1,100,1,5 +4080,0,1,1,100,1,5 +4090,0,1,1,100,1,5 +4100,0,1,1,100,1,5 +4110,0,1,1,100,1,5 +4120,0,1,1,100,1,5 +4130,0,1,1,100,1,5 +4140,0,1,1,100,1,5 +4150,0,1,1,100,1,5 +4160,0,1,1,100,1,5 +4170,0,1,1,100,1,5 +4180,0,1,1,100,1,5 +4190,0,1,1,100,1,5 +4200,0,1,1,100,1,5 +4210,0,1,1,100,1,5 +4220,0,1,1,100,1,5 +4230,0,1,1,100,1,5 +4240,0,1,1,100,1,5 +4250,0,1,1,100,1,5 +4260,0,1,1,100,1,5 +4270,0,1,1,100,1,5 +4280,0,1,1,100,1,5 +4290,0,1,1,100,1,5 +4300,0,1,1,100,1,5 +4310,0,1,1,100,1,5 +4320,0,1,1,100,1,5 +4330,0,1,1,100,1,5 +4340,0,1,1,100,1,5 +4350,0,1,1,100,1,5 +4360,0,1,1,100,1,5 +4370,0,1,1,100,1,5 +4380,0,1,1,100,1,5 +4390,0,1,1,100,1,5 +4400,0,1,1,100,1,5 +4410,0,1,1,100,1,5 +4420,0,1,1,100,1,5 +4430,0,1,1,100,1,5 +4440,0,1,1,100,1,5 +4450,0,1,1,100,1,5 +4460,0,1,1,100,1,5 +4470,0,1,1,100,1,5 +4480,0,1,1,100,1,5 +4490,0,1,1,100,1,5 +4500,0,1,1,100,1,5 +4510,0,1,1,100,1,5 +4520,0,1,1,100,1,5 +4530,0,1,1,100,1,5 +4540,0,1,1,100,1,5 +4550,0,1,1,100,1,5 +4560,0,1,1,100,1,5 +4570,0,1,1,100,1,5 +4580,0,1,1,100,1,5 +4590,0,1,1,100,1,5 +4600,0,1,1,100,1,5 +4610,0,1,1,100,1,5 +4620,0,1,1,100,1,5 +4630,0,1,1,100,1,5 +4640,0,1,1,100,1,5 +4650,0,1,1,100,1,5 +4660,0,1,1,100,1,5 +4670,0,1,1,100,1,5 +4680,0,1,1,100,1,5 +4690,0,1,1,100,1,5 +4700,0,1,1,100,1,5 +4710,0,1,1,100,1,5 +4720,0,1,1,100,1,5 +4730,0,1,1,100,1,5 +4740,0,1,1,100,1,5 +4750,0,1,1,100,1,5 +4760,0,1,1,100,1,5 +4770,0,1,1,100,1,5 +4780,0,1,1,100,1,5 +4790,0,1,1,100,1,5 +4800,0,1,1,100,1,5 +4810,0,1,1,100,1,5 +4820,0,1,1,100,1,5 +4830,0,1,1,100,1,5 +4840,0,1,1,100,1,5 +4850,0,1,1,100,1,5 +4860,0,1,1,100,1,5 +4870,0,1,1,100,1,5 +4880,0,1,1,100,1,5 +4890,0,1,1,100,1,5 +4900,0,1,1,100,1,5 +4910,0,1,1,100,1,5 +4920,0,1,1,100,1,5 +4930,0,1,1,100,1,5 +4940,0,1,1,100,1,5 +4950,0,1,1,100,1,5 +4960,0,1,1,100,1,5 +4970,0,1,1,100,1,5 +4980,0,1,1,100,1,5 +4990,0,1,1,100,1,5 +5000,0,2,2,100,1,5 +5010,0,2,2,100,1,5 +5020,0,2,2,100,1,5 +5030,0,2,2,100,1,5 +5040,0,2,2,100,1,5 +5050,0,2,2,100,1,5 +5060,0,2,2,100,1,5 +5070,0,2,2,100,1,5 +5080,0,2,2,100,1,5 +5090,0,2,2,100,1,5 +5100,0,2,2,100,1,5 +5110,0,2,2,100,1,5 +5120,0,2,2,100,1,5 +5130,0,2,2,100,1,5 +5140,0,2,2,100,1,5 +5150,0,2,2,100,1,5 +5160,0,2,2,100,1,5 +5170,0,2,2,100,1,5 +5180,0,2,2,100,1,5 +5190,0,2,2,100,1,5 +5200,0,2,2,100,1,5 +5210,0,2,2,100,1,5 +5220,0,2,2,100,1,5 +5230,0,2,2,100,1,5 +5240,0,2,2,100,1,5 +5250,0,2,2,100,1,5 +5260,0,2,2,100,1,5 +5270,0,2,2,100,1,5 +5280,0,2,2,100,1,5 +5290,0,2,2,100,1,5 +5300,0,2,2,100,1,5 +5310,0,2,2,100,1,5 +5320,0,2,2,100,1,5 +5330,0,2,2,100,1,5 +5340,0,2,2,100,1,5 +5350,0,2,2,100,1,5 +5360,0,2,2,100,1,5 +5370,0,2,2,100,1,5 +5380,0,2,2,100,1,5 +5390,0,2,2,100,1,5 +5400,0,2,2,100,1,5 +5410,0,2,2,100,1,5 +5420,0,2,2,100,1,5 +5430,0,2,2,100,1,5 +5440,0,2,2,100,1,5 +5450,0,2,2,100,1,5 +5460,0,2,2,100,1,5 +5470,0,2,2,100,1,5 +5480,0,2,2,100,1,5 +5490,0,2,2,100,1,5 +5500,0,2,2,100,1,5 +5510,0,2,2,100,1,5 +5520,0,2,2,100,1,5 +5530,0,2,2,100,1,5 +5540,0,2,2,100,1,5 +5550,0,2,2,100,1,5 +5560,0,2,2,100,1,5 +5570,0,2,2,100,1,5 +5580,0,2,2,100,1,5 +5590,0,2,2,100,1,5 +5600,0,2,2,100,1,5 +5610,0,2,2,100,1,5 +5620,0,2,2,100,1,5 +5630,0,2,2,100,1,5 +5640,0,2,2,100,1,5 +5650,0,2,2,100,1,5 +5660,0,2,2,100,1,5 +5670,0,2,2,100,1,5 +5680,0,2,2,100,1,5 +5690,0,2,2,100,1,5 +5700,0,2,2,100,1,5 +5710,0,2,2,100,1,5 +5720,0,2,2,100,1,5 +5730,0,2,2,100,1,5 +5740,0,2,2,100,1,5 +5750,0,2,2,100,1,5 +5760,0,2,2,100,1,5 +5770,0,2,2,100,1,5 +5780,0,2,2,100,1,5 +5790,0,2,2,100,1,5 +5800,0,2,2,100,1,5 +5810,0,2,2,100,1,5 +5820,0,2,2,100,1,5 +5830,0,2,2,100,1,5 +5840,0,2,2,100,1,5 +5850,0,2,2,100,1,5 +5860,0,2,2,100,1,5 +5870,0,2,2,100,1,5 +5880,0,2,2,100,1,5 +5890,0,2,2,100,1,5 +5900,0,2,2,100,1,5 +5910,0,2,2,100,1,5 +5920,0,2,2,100,1,5 +5930,0,2,2,100,1,5 +5940,0,2,2,100,1,5 +5950,0,2,2,100,1,5 +5960,0,2,2,100,1,5 +5970,0,2,2,100,1,5 +5980,0,2,2,100,1,5 +5990,0,2,2,100,1,5 +6000,0,2,2,100,1,5 +6010,0,2,2,100,1,5 +6020,0,2,2,100,1,5 +6030,0,2,2,100,1,5 +6040,0,2,2,100,1,5 +6050,0,2,2,100,1,5 +6060,0,2,2,100,1,5 +6070,0,2,2,100,1,5 +6080,0,2,2,100,1,5 +6090,0,2,2,100,1,5 +6100,0,2,2,100,1,5 +6110,0,2,2,100,1,5 +6120,0,2,2,100,1,5 +6130,0,2,2,100,1,5 +6140,0,2,2,100,1,5 +6150,0,2,2,100,1,5 +6160,0,2,2,100,1,5 +6170,0,2,2,100,1,5 +6180,0,2,2,100,1,5 +6190,0,2,2,100,1,5 +6200,0,2,2,100,1,5 +6210,0,2,2,100,1,5 +6220,0,2,2,100,1,5 +6230,0,2,2,100,1,5 +6240,0,2,2,100,1,5 +6250,0,2,2,100,1,5 +6260,0,2,2,100,1,5 +6270,0,2,2,100,1,5 +6280,0,2,2,100,1,5 +6290,0,2,2,100,1,5 +6300,0,2,2,100,1,5 +6310,0,2,2,100,1,5 +6320,0,2,2,100,1,5 +6330,0,2,2,100,1,5 +6340,0,2,2,100,1,5 +6350,0,2,2,100,1,5 +6360,0,2,2,100,1,5 +6370,0,2,2,100,1,5 +6380,0,2,2,100,1,5 +6390,0,2,2,100,1,5 +6400,0,2,2,100,1,5 +6410,0,2,2,100,1,5 +6420,0,2,2,100,1,5 +6430,0,2,2,100,1,5 +6440,0,2,2,100,1,5 +6450,0,2,2,100,1,5 +6460,0,2,2,100,1,5 +6470,0,2,2,100,1,5 +6480,0,2,2,100,1,5 +6490,0,2,2,100,1,5 +6500,0,2,2,100,1,5 +6510,0,2,2,100,1,5 +6520,0,2,2,100,1,5 +6530,0,2,2,100,1,5 +6540,0,2,2,100,1,5 +6550,0,2,2,100,1,5 +6560,0,2,2,100,1,5 +6570,0,2,2,100,1,5 +6580,0,2,2,100,1,5 +6590,0,2,2,100,1,5 +6600,0,2,2,100,1,5 +6610,0,2,2,100,1,5 +6620,0,2,2,100,1,5 +6630,0,2,2,100,1,5 +6640,0,2,2,100,1,5 +6650,0,2,2,100,1,5 +6660,0,2,2,100,1,5 +6670,0,2,2,100,1,5 +6680,0,2,2,100,1,5 +6690,0,2,2,100,1,5 +6700,0,2,2,100,1,5 +6710,0,2,2,100,1,5 +6720,0,2,2,100,1,5 +6730,0,2,2,100,1,5 +6740,0,2,2,100,1,5 +6750,0,2,2,100,1,5 +6760,0,2,2,100,1,5 +6770,0,2,2,100,1,5 +6780,0,2,2,100,1,5 +6790,0,2,2,100,1,5 +6800,0,2,2,100,1,5 +6810,0,2,2,100,1,5 +6820,0,2,2,100,1,5 +6830,0,2,2,100,1,5 +6840,0,2,2,100,1,5 +6850,0,2,2,100,1,5 +6860,0,2,2,100,1,5 +6870,0,2,2,100,1,5 +6880,0,2,2,100,1,5 +6890,0,2,2,100,1,5 +6900,0,2,2,100,1,5 +6910,0,2,2,100,1,5 +6920,0,2,2,100,1,5 +6930,0,2,2,100,1,5 +6940,0,2,2,100,1,5 +6950,0,2,2,100,1,5 +6960,0,2,2,100,1,5 +6970,0,2,2,100,1,5 +6980,0,2,2,100,1,5 +6990,0,2,2,100,1,5 +7000,0,2,2,100,1,5 +7010,0,2,2,100,1,5 +7020,0,2,2,100,1,5 +7030,0,2,2,100,1,5 +7040,0,2,2,100,1,5 +7050,0,2,2,100,1,5 +7060,0,2,2,100,1,5 +7070,0,2,2,100,1,5 +7080,0,2,2,100,1,5 +7090,0,2,2,100,1,5 +7100,0,2,2,100,1,5 +7110,0,2,2,100,1,5 +7120,0,2,2,100,1,5 +7130,0,2,2,100,1,5 +7140,0,2,2,100,1,5 +7150,0,2,2,100,1,5 +7160,0,2,2,100,1,5 +7170,0,2,2,100,1,5 +7180,0,2,2,100,1,5 +7190,0,2,2,100,1,5 +7200,0,2,2,100,1,5 +7210,0,2,2,100,1,5 +7220,0,2,2,100,1,5 +7230,0,2,2,100,1,5 +7240,0,2,2,100,1,5 +7250,0,2,2,100,1,5 +7260,0,2,2,100,1,5 +7270,0,2,2,100,1,5 +7280,0,2,2,100,1,5 +7290,0,2,2,100,1,5 +7300,0,2,2,100,1,5 +7310,0,2,2,100,1,5 +7320,0,2,2,100,1,5 +7330,0,2,2,100,1,5 +7340,0,2,2,100,1,5 +7350,0,2,2,100,1,5 +7360,0,2,2,100,1,5 +7370,0,2,2,100,1,5 +7380,0,2,2,100,1,5 +7390,0,2,2,100,1,5 +7400,0,2,2,100,1,5 +7410,0,2,2,100,1,5 +7420,0,2,2,100,1,5 +7430,0,2,2,100,1,5 +7440,0,2,2,100,1,5 +7450,0,2,2,100,1,5 +7460,0,2,2,100,1,5 +7470,0,2,2,100,1,5 +7480,0,2,2,100,1,5 +7490,0,2,2,100,1,5 +7500,0,2,2,100,1,5 +7510,0,2,2,100,1,5 +7520,0,2,2,100,1,5 +7530,0,2,2,100,1,5 +7540,0,2,2,100,1,5 +7550,0,2,2,100,1,5 +7560,0,2,2,100,1,5 +7570,0,2,2,100,1,5 +7580,0,2,2,100,1,5 +7590,0,2,2,100,1,5 +7600,0,2,2,100,1,5 +7610,0,2,2,100,1,5 +7620,0,2,2,100,1,5 +7630,0,2,2,100,1,5 +7640,0,2,2,100,1,5 +7650,0,2,2,100,1,5 +7660,0,2,2,100,1,5 +7670,0,2,2,100,1,5 +7680,0,2,2,100,1,5 +7690,0,2,2,100,1,5 +7700,0,2,2,100,1,5 +7710,0,2,2,100,1,5 +7720,0,2,2,100,1,5 +7730,0,2,2,100,1,5 +7740,0,2,2,100,1,5 +7750,0,2,2,100,1,5 +7760,0,2,2,100,1,5 +7770,0,2,2,100,1,5 +7780,0,2,2,100,1,5 +7790,0,2,2,100,1,5 +7800,0,2,2,100,1,5 +7810,0,2,2,100,1,5 +7820,0,2,2,100,1,5 +7830,0,2,2,100,1,5 +7840,0,2,2,100,1,5 +7850,0,2,2,100,1,5 +7860,0,2,2,100,1,5 +7870,0,2,2,100,1,5 +7880,0,2,2,100,1,5 +7890,0,2,2,100,1,5 +7900,0,2,2,100,1,5 +7910,0,2,2,100,1,5 +7920,0,2,2,100,1,5 +7930,0,2,2,100,1,5 +7940,0,2,2,100,1,5 +7950,0,2,2,100,1,5 +7960,0,2,2,100,1,5 +7970,0,2,2,100,1,5 +7980,0,2,2,100,1,5 +7990,0,2,2,100,1,5 +8000,0,2,2,100,1,5 +8010,0,2,2,100,1,5 +8020,0,2,2,100,1,5 +8030,0,2,2,100,1,5 +8040,0,2,2,100,1,5 +8050,0,2,2,100,1,5 +8060,0,2,2,100,1,5 +8070,0,2,2,100,1,5 +8080,0,2,2,100,1,5 +8090,0,2,2,100,1,5 +8100,0,2,2,100,1,5 +8110,0,2,2,100,1,5 +8120,0,2,2,100,1,5 +8130,0,2,2,100,1,5 +8140,0,2,2,100,1,5 +8150,0,2,2,100,1,5 +8160,0,2,2,100,1,5 +8170,0,2,2,100,1,5 +8180,0,2,2,100,1,5 +8190,0,2,2,100,1,5 +8200,0,2,2,100,1,5 +8210,0,2,2,100,1,5 +8220,0,2,2,100,1,5 +8230,0,2,2,100,1,5 +8240,0,2,2,100,1,5 +8250,0,2,2,100,1,5 +8260,0,2,2,100,1,5 +8270,0,2,2,100,1,5 +8280,0,2,2,100,1,5 +8290,0,2,2,100,1,5 +8300,0,2,2,100,1,5 +8310,0,2,2,100,1,5 +8320,0,2,2,100,1,5 +8330,0,2,2,100,1,5 +8340,0,2,2,100,1,5 +8350,0,2,2,100,1,5 +8360,0,2,2,100,1,5 +8370,0,2,2,100,1,5 +8380,0,2,2,100,1,5 +8390,0,2,2,100,1,5 +8400,0,2,2,100,1,5 +8410,0,2,2,100,1,5 +8420,0,2,2,100,1,5 +8430,0,2,2,100,1,5 +8440,0,2,2,100,1,5 +8450,0,2,2,100,1,5 +8460,0,2,2,100,1,5 +8470,0,2,2,100,1,5 +8480,0,2,2,100,1,5 +8490,0,2,2,100,1,5 +8500,0,2,2,100,1,5 +8510,0,2,2,100,1,5 +8520,0,2,2,100,1,5 +8530,0,2,2,100,1,5 +8540,0,2,2,100,1,5 +8550,0,2,2,100,1,5 +8560,0,2,2,100,1,5 +8570,0,2,2,100,1,5 +8580,0,2,2,100,1,5 +8590,0,2,2,100,1,5 +8600,0,2,2,100,1,5 +8610,0,2,2,100,1,5 +8620,0,2,2,100,1,5 +8630,0,2,2,100,1,5 +8640,0,2,2,100,1,5 +8650,0,2,2,100,1,5 +8660,0,2,2,100,1,5 +8670,0,2,2,100,1,5 +8680,0,2,2,100,1,5 +8690,0,2,2,100,1,5 +8700,0,2,2,100,1,5 +8710,0,2,2,100,1,5 +8720,0,2,2,100,1,5 +8730,0,2,2,100,1,5 +8740,0,2,2,100,1,5 +8750,0,2,2,100,1,5 +8760,0,2,2,100,1,5 +8770,0,2,2,100,1,5 +8780,0,2,2,100,1,5 +8790,0,2,2,100,1,5 +8800,0,2,2,100,1,5 +8810,0,2,2,100,1,5 +8820,0,2,2,100,1,5 +8830,0,2,2,100,1,5 +8840,0,2,2,100,1,5 +8850,0,2,2,100,1,5 +8860,0,2,2,100,1,5 +8870,0,2,2,100,1,5 +8880,0,2,2,100,1,5 +8890,0,2,2,100,1,5 +8900,0,2,2,100,1,5 +8910,0,2,2,100,1,5 +8920,0,2,2,100,1,5 +8930,0,2,2,100,1,5 +8940,0,2,2,100,1,5 +8950,0,2,2,100,1,5 +8960,0,2,2,100,1,5 +8970,0,2,2,100,1,5 +8980,0,2,2,100,1,5 +8990,0,2,2,100,1,5 +9000,0,2,2,100,1,5 +9010,0,2,2,100,1,5 +9020,0,2,2,100,1,5 +9030,0,2,2,100,1,5 +9040,0,2,2,100,1,5 +9050,0,2,2,100,1,5 +9060,0,2,2,100,1,5 +9070,0,2,2,100,1,5 +9080,0,2,2,100,1,5 +9090,0,2,2,100,1,5 +9100,0,2,2,100,1,5 +9110,0,2,2,100,1,5 +9120,0,2,2,100,1,5 +9130,0,2,2,100,1,5 +9140,0,2,2,100,1,5 +9150,0,2,2,100,1,5 +9160,0,2,2,100,1,5 +9170,0,2,2,100,1,5 +9180,0,2,2,100,1,5 +9190,0,2,2,100,1,5 +9200,0,2,2,100,1,5 +9210,0,2,2,100,1,5 +9220,0,2,2,100,1,5 +9230,0,2,2,100,1,5 +9240,0,2,2,100,1,5 +9250,0,2,2,100,1,5 +9260,0,2,2,100,1,5 +9270,0,2,2,100,1,5 +9280,0,2,2,100,1,5 +9290,0,2,2,100,1,5 +9300,0,2,2,100,1,5 +9310,0,2,2,100,1,5 +9320,0,2,2,100,1,5 +9330,0,2,2,100,1,5 +9340,0,2,2,100,1,5 +9350,0,2,2,100,1,5 +9360,0,2,2,100,1,5 +9370,0,2,2,100,1,5 +9380,0,2,2,100,1,5 +9390,0,2,2,100,1,5 +9400,0,2,2,100,1,5 +9410,0,2,2,100,1,5 +9420,0,2,2,100,1,5 +9430,0,2,2,100,1,5 +9440,0,2,2,100,1,5 +9450,0,2,2,100,1,5 +9460,0,2,2,100,1,5 +9470,0,2,2,100,1,5 +9480,0,2,2,100,1,5 +9490,0,2,2,100,1,5 +9500,0,2,2,100,1,5 +9510,0,2,2,100,1,5 +9520,0,2,2,100,1,5 +9530,0,2,2,100,1,5 +9540,0,2,2,100,1,5 +9550,0,2,2,100,1,5 +9560,0,2,2,100,1,5 +9570,0,2,2,100,1,5 +9580,0,2,2,100,1,5 +9590,0,2,2,100,1,5 +9600,0,2,2,100,1,5 +9610,0,2,2,100,1,5 +9620,0,2,2,100,1,5 +9630,0,2,2,100,1,5 +9640,0,2,2,100,1,5 +9650,0,2,2,100,1,5 +9660,0,2,2,100,1,5 +9670,0,2,2,100,1,5 +9680,0,2,2,100,1,5 +9690,0,2,2,100,1,5 +9700,0,2,2,100,1,5 +9710,0,2,2,100,1,5 +9720,0,2,2,100,1,5 +9730,0,2,2,100,1,5 +9740,0,2,2,100,1,5 +9750,0,2,2,100,1,5 +9760,0,2,2,100,1,5 +9770,0,2,2,100,1,5 +9780,0,2,2,100,1,5 +9790,0,2,2,100,1,5 +9800,0,2,2,100,1,5 +9810,0,2,2,100,1,5 +9820,0,2,2,100,1,5 +9830,0,2,2,100,1,5 +9840,0,2,2,100,1,5 +9850,0,2,2,100,1,5 +9860,0,2,2,100,1,5 +9870,0,2,2,100,1,5 +9880,0,2,2,100,1,5 +9890,0,2,2,100,1,5 +9900,0,2,2,100,1,5 +9910,0,2,2,100,1,5 +9920,0,2,2,100,1,5 +9930,0,2,2,100,1,5 +9940,0,2,2,100,1,5 +9950,0,2,2,100,1,5 +9960,0,2,2,100,1,5 +9970,0,2,2,100,1,5 +9980,0,2,2,100,1,5 +9990,0,2,2,100,1,5 +10000,0,2,2,100,1,5 +10010,0,2,2,100,1,5 +10020,0,2,2,100,1,5 +10030,0,2,2,100,1,5 +10040,0,2,2,100,1,5 +10050,0,2,2,100,1,5 +10060,0,2,2,100,1,5 +10070,0,2,2,100,1,5 +10080,0,2,2,100,1,5 +10090,0,2,2,100,1,5 +10100,0,2,2,100,1,5 diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20210120_fat.csv b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20210120_fat.csv new file mode 100644 index 0000000..832aa45 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20210120_fat.csv @@ -0,0 +1,1013 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,0,0.5,0.5,1,1,5 +10,0,0.5,0.5,1,1,5 +20,0,0.5,0.5,1,1,5 +30,0,0.5,0.5,1,1,5 +40,0,0.5,0.5,1,1,5 +50,0,0.5,0.5,1,1,5 +60,0,0.5,0.5,1,1,5 +70,0,0.5,0.5,1,1,5 +80,0,0.5,0.5,1,1,5 +90,0,0.5,0.5,1,1,5 +100,0,0.5,0.5,1,1,5 +110,0,0.5,0.5,1,1,5 +120,0,0.5,0.5,1,1,5 +130,0,0.5,0.5,1,1,5 +140,0,0.5,0.5,1,1,5 +150,0,0.5,0.5,1,1,5 +160,0,0.5,0.5,1,1,5 +170,0,0.5,0.5,1,1,5 +180,0,0.5,0.5,1,1,5 +190,0,0.5,0.5,1,1,5 +200,0,0.5,0.5,1,1,5 +210,0,0.5,0.5,1,1,5 +220,0,0.5,0.5,1,1,5 +230,0,0.5,0.5,1,1,5 +240,0,0.5,0.5,1,1,5 +250,0,0.5,0.5,1,1,5 +260,0,0.5,0.5,1,1,5 +270,0,0.5,0.5,1,1,5 +280,0,0.5,0.5,1,1,5 +290,0,0.5,0.5,1,1,5 +300,0,0.5,0.5,1,1,5 +310,0,0.5,0.5,1,1,5 +320,0,0.5,0.5,1,1,5 +330,0,0.5,0.5,1,1,5 +340,0,0.5,0.5,1,1,5 +350,0,0.5,0.5,1,1,5 +360,0,0.5,0.5,1,1,5 +370,0,0.5,0.5,1,1,5 +380,0,0.5,0.5,1,1,5 +390,0,0.5,0.5,1,1,5 +400,0,0.5,0.5,1,1,5 +410,0,0.5,0.5,1,1,5 +420,0,0.5,0.5,1,1,5 +430,0,0.5,0.5,1,1,5 +440,0,0.5,0.5,1,1,5 +450,0,0.5,0.5,1,1,5 +460,0,0.5,0.5,1,1,5 +470,0,0.5,0.5,1,1,5 +480,0,0.5,0.5,1,1,5 +490,0,0.5,0.5,1,1,5 +500,0,0.5,0.5,1,1,5 +510,0,0.5,0.5,1,1,5 +520,0,0.5,0.5,1,1,5 +530,0,0.5,0.5,1,1,5 +540,0,0.5,0.5,1,1,5 +550,0,0.5,0.5,1,1,5 +560,0,0.5,0.5,1,1,5 +570,0,0.5,0.5,1,1,5 +580,0,0.5,0.5,1,1,5 +590,0,0.5,0.5,1,1,5 +600,0,0.5,0.5,1,1,5 +610,0,0.5,0.5,1,1,5 +620,0,0.5,0.5,1,1,5 +630,0,0.5,0.5,1,1,5 +640,0,0.5,0.5,1,1,5 +650,0,0.5,0.5,1,1,5 +660,0,0.5,0.5,1,1,5 +670,0,0.5,0.5,1,1,5 +680,0,0.5,0.5,1,1,5 +690,0,0.5,0.5,1,1,5 +700,0,0.5,0.5,1,1,5 +710,0,0.5,0.5,1,1,5 +720,0,0.5,0.5,1,1,5 +730,0,0.5,0.5,1,1,5 +740,0,0.5,0.5,1,1,5 +750,0,0.5,0.5,1,1,5 +760,0,0.5,0.5,1,1,5 +770,0,0.5,0.5,1,1,5 +780,0,0.5,0.5,1,1,5 +790,0,0.5,0.5,1,1,5 +800,0,0.5,0.5,1,1,5 +810,0,0.5,0.5,1,1,5 +820,0,0.5,0.5,1,1,5 +830,0,0.5,0.5,1,1,5 +840,0,0.5,0.5,1,1,5 +850,0,0.5,0.5,1,1,5 +860,0,0.5,0.5,1,1,5 +870,0,0.5,0.5,1,1,5 +880,0,0.5,0.5,1,1,5 +890,0,0.5,0.5,1,1,5 +900,0,0.5,0.5,1,1,5 +910,0,0.5,0.5,1,1,5 +920,0,0.5,0.5,1,1,5 +930,0,0.5,0.5,1,1,5 +940,0,0.5,0.5,1,1,5 +950,0,0.5,0.5,1,1,5 +960,0,0.5,0.5,1,1,5 +970,0,0.5,0.5,1,1,5 +980,0,0.5,0.5,1,1,5 +990,0,0.5,0.5,1,1,5 +1000,0,0.5,0.5,1,1,5 +1010,0,1,1,1,1,5 +1020,0,1,1,1,1,5 +1030,0,1,1,1,1,5 +1040,0,1,1,1,1,5 +1050,0,1,1,1,1,5 +1060,0,1,1,1,1,5 +1070,0,1,1,1,1,5 +1080,0,1,1,1,1,5 +1090,0,1,1,1,1,5 +1100,0,1,1,1,1,5 +1110,0,1,1,1,1,5 +1120,0,1,1,1,1,5 +1130,0,1,1,1,1,5 +1140,0,1,1,1,1,5 +1150,0,1,1,1,1,5 +1160,0,1,1,1,1,5 +1170,0,1,1,1,1,5 +1180,0,1,1,1,1,5 +1190,0,1,1,1,1,5 +1200,0,1,1,1,1,5 +1210,0,1,1,1,1,5 +1220,0,1,1,1,1,5 +1230,0,1,1,1,1,5 +1240,0,1,1,1,1,5 +1250,0,1,1,1,1,5 +1260,0,1,1,1,1,5 +1270,0,1,1,1,1,5 +1280,0,1,1,1,1,5 +1290,0,1,1,1,1,5 +1300,0,1,1,1,1,5 +1310,0,1,1,1,1,5 +1320,0,1,1,1,1,5 +1330,0,1,1,1,1,5 +1340,0,1,1,1,1,5 +1350,0,1,1,1,1,5 +1360,0,1,1,1,1,5 +1370,0,1,1,1,1,5 +1380,0,1,1,1,1,5 +1390,0,1,1,1,1,5 +1400,0,1,1,1,1,5 +1410,0,1,1,1,1,5 +1420,0,1,1,1,1,5 +1430,0,1,1,1,1,5 +1440,0,1,1,1,1,5 +1450,0,1,1,1,1,5 +1460,0,1,1,1,1,5 +1470,0,1,1,1,1,5 +1480,0,1,1,1,1,5 +1490,0,1,1,1,1,5 +1500,0,1,1,1,1,5 +1510,0,1,1,1,1,5 +1520,0,1,1,1,1,5 +1530,0,1,1,1,1,5 +1540,0,1,1,1,1,5 +1550,0,1,1,1,1,5 +1560,0,1,1,1,1,5 +1570,0,1,1,1,1,5 +1580,0,1,1,1,1,5 +1590,0,1,1,1,1,5 +1600,0,1,1,1,1,5 +1610,0,1,1,1,1,5 +1620,0,1,1,1,1,5 +1630,0,1,1,1,1,5 +1640,0,1,1,1,1,5 +1650,0,1,1,1,1,5 +1660,0,1,1,1,1,5 +1670,0,1,1,1,1,5 +1680,0,1,1,1,1,5 +1690,0,1,1,1,1,5 +1700,0,1,1,1,1,5 +1710,0,1,1,1,1,5 +1720,0,1,1,1,1,5 +1730,0,1,1,1,1,5 +1740,0,1,1,1,1,5 +1750,0,1,1,1,1,5 +1760,0,1,1,1,1,5 +1770,0,1,1,1,1,5 +1780,0,1,1,1,1,5 +1790,0,1,1,1,1,5 +1800,0,1,1,1,1,5 +1810,0,1,1,1,1,5 +1820,0,1,1,1,1,5 +1830,0,1,1,1,1,5 +1840,0,1,1,1,1,5 +1850,0,1,1,1,1,5 +1860,0,1,1,1,1,5 +1870,0,1,1,1,1,5 +1880,0,1,1,1,1,5 +1890,0,1,1,1,1,5 +1900,0,1,1,1,1,5 +1910,0,1,1,1,1,5 +1920,0,1,1,1,1,5 +1930,0,1,1,1,1,5 +1940,0,1,1,1,1,5 +1950,0,1,1,1,1,5 +1960,0,1,1,1,1,5 +1970,0,1,1,1,1,5 +1980,0,1,1,1,1,5 +1990,0,1,1,1,1,5 +2000,0,1,1,1,1,5 +2010,0,1,1,1,1,5 +2020,0,1,1,1,1,5 +2030,0,1,1,1,1,5 +2040,0,1,1,1,1,5 +2050,0,1,1,1,1,5 +2060,0,1,1,1,1,5 +2070,0,1,1,1,1,5 +2080,0,1,1,1,1,5 +2090,0,1,1,1,1,5 +2100,0,1,1,1,1,5 +2110,0,1,1,1,1,5 +2120,0,1,1,1,1,5 +2130,0,1,1,1,1,5 +2140,0,1,1,1,1,5 +2150,0,1,1,1,1,5 +2160,0,1,1,1,1,5 +2170,0,1,1,1,1,5 +2180,0,1,1,1,1,5 +2190,0,1,1,1,1,5 +2200,0,1,1,1,1,5 +2210,0,1,1,1,1,5 +2220,0,1,1,1,1,5 +2230,0,1,1,1,1,5 +2240,0,1,1,1,1,5 +2250,0,1,1,1,1,5 +2260,0,1,1,1,1,5 +2270,0,1,1,1,1,5 +2280,0,1,1,1,1,5 +2290,0,1,1,1,1,5 +2300,0,1,1,1,1,5 +2310,0,1,1,1,1,5 +2320,0,1,1,1,1,5 +2330,0,1,1,1,1,5 +2340,0,1,1,1,1,5 +2350,0,1,1,1,1,5 +2360,0,1,1,1,1,5 +2370,0,1,1,1,1,5 +2380,0,1,1,1,1,5 +2390,0,1,1,1,1,5 +2400,0,1,1,1,1,5 +2410,0,1,1,1,1,5 +2420,0,1,1,1,1,5 +2430,0,1,1,1,1,5 +2440,0,1,1,1,1,5 +2450,0,1,1,1,1,5 +2460,0,1,1,1,1,5 +2470,0,1,1,1,1,5 +2480,0,1,1,1,1,5 +2490,0,1,1,1,1,5 +2500,0,1,1,1,1,5 +2510,0,1,1,1,1,5 +2520,0,1,1,1,1,5 +2530,0,1,1,1,1,5 +2540,0,1,1,1,1,5 +2550,0,1,1,1,1,5 +2560,0,1,1,1,1,5 +2570,0,1,1,1,1,5 +2580,0,1,1,1,1,5 +2590,0,1,1,1,1,5 +2600,0,1,1,1,1,5 +2610,0,1,1,1,1,5 +2620,0,1,1,1,1,5 +2630,0,1,1,1,1,5 +2640,0,1,1,1,1,5 +2650,0,1,1,1,1,5 +2660,0,1,1,1,1,5 +2670,0,1,1,1,1,5 +2680,0,1,1,1,1,5 +2690,0,1,1,1,1,5 +2700,0,1,1,1,1,5 +2710,0,1,1,1,1,5 +2720,0,1,1,1,1,5 +2730,0,1,1,1,1,5 +2740,0,1,1,1,1,5 +2750,0,1,1,1,1,5 +2760,0,1,1,1,1,5 +2770,0,1,1,1,1,5 +2780,0,1,1,1,1,5 +2790,0,1,1,1,1,5 +2800,0,1,1,1,1,5 +2810,0,1,1,1,1,5 +2820,0,1,1,1,1,5 +2830,0,1,1,1,1,5 +2840,0,1,1,1,1,5 +2850,0,1,1,1,1,5 +2860,0,1,1,1,1,5 +2870,0,1,1,1,1,5 +2880,0,1,1,1,1,5 +2890,0,1,1,1,1,5 +2900,0,1,1,1,1,5 +2910,0,1,1,1,1,5 +2920,0,1,1,1,1,5 +2930,0,1,1,1,1,5 +2940,0,1,1,1,1,5 +2950,0,1,1,1,1,5 +2960,0,1,1,1,1,5 +2970,0,1,1,1,1,5 +2980,0,1,1,1,1,5 +2990,0,1,1,1,1,5 +3000,0,1,1,1,1,5 +3010,0,1,1,1,1,5 +3020,0,1,1,1,1,5 +3030,0,1,1,1,1,5 +3040,0,1,1,1,1,5 +3050,0,1,1,1,1,5 +3060,0,1,1,1,1,5 +3070,0,1,1,1,1,5 +3080,0,1,1,1,1,5 +3090,0,1,1,1,1,5 +3100,0,1,1,1,1,5 +3110,0,1,1,1,1,5 +3120,0,1,1,1,1,5 +3130,0,1,1,1,1,5 +3140,0,1,1,1,1,5 +3150,0,1,1,1,1,5 +3160,0,1,1,1,1,5 +3170,0,1,1,1,1,5 +3180,0,1,1,1,1,5 +3190,0,1,1,1,1,5 +3200,0,1,1,1,1,5 +3210,0,1,1,1,1,5 +3220,0,1,1,1,1,5 +3230,0,1,1,1,1,5 +3240,0,1,1,1,1,5 +3250,0,1,1,1,1,5 +3260,0,1,1,1,1,5 +3270,0,1,1,1,1,5 +3280,0,1,1,1,1,5 +3290,0,1,1,1,1,5 +3300,0,1,1,1,1,5 +3310,0,1,1,1,1,5 +3320,0,1,1,1,1,5 +3330,0,1,1,1,1,5 +3340,0,1,1,1,1,5 +3350,0,1,1,1,1,5 +3360,0,1,1,1,1,5 +3370,0,1,1,1,1,5 +3380,0,1,1,1,1,5 +3390,0,1,1,1,1,5 +3400,0,1,1,1,1,5 +3410,0,1,1,1,1,5 +3420,0,1,1,1,1,5 +3430,0,1,1,1,1,5 +3440,0,1,1,1,1,5 +3450,0,1,1,1,1,5 +3460,0,1,1,1,1,5 +3470,0,1,1,1,1,5 +3480,0,1,1,1,1,5 +3490,0,1,1,1,1,5 +3500,0,1,1,1,1,5 +3510,0,1,1,1,1,5 +3520,0,1,1,1,1,5 +3530,0,1,1,1,1,5 +3540,0,1,1,1,1,5 +3550,0,1,1,1,1,5 +3560,0,1,1,1,1,5 +3570,0,1,1,1,1,5 +3580,0,1,1,1,1,5 +3590,0,1,1,1,1,5 +3600,0,1,1,1,1,5 +3610,0,1,1,1,1,5 +3620,0,1,1,1,1,5 +3630,0,1,1,1,1,5 +3640,0,1,1,1,1,5 +3650,0,1,1,1,1,5 +3660,0,1,1,1,1,5 +3670,0,1,1,1,1,5 +3680,0,1,1,1,1,5 +3690,0,1,1,1,1,5 +3700,0,1,1,1,1,5 +3710,0,1,1,1,1,5 +3720,0,1,1,1,1,5 +3730,0,1,1,1,1,5 +3740,0,1,1,1,1,5 +3750,0,1,1,1,1,5 +3760,0,1,1,1,1,5 +3770,0,1,1,1,1,5 +3780,0,1,1,1,1,5 +3790,0,1,1,1,1,5 +3800,0,1,1,1,1,5 +3810,0,1,1,1,1,5 +3820,0,1,1,1,1,5 +3830,0,1,1,1,1,5 +3840,0,1,1,1,1,5 +3850,0,1,1,1,1,5 +3860,0,1,1,1,1,5 +3870,0,1,1,1,1,5 +3880,0,1,1,1,1,5 +3890,0,1,1,1,1,5 +3900,0,1,1,1,1,5 +3910,0,1,1,1,1,5 +3920,0,1,1,1,1,5 +3930,0,1,1,1,1,5 +3940,0,1,1,1,1,5 +3950,0,1,1,1,1,5 +3960,0,1,1,1,1,5 +3970,0,1,1,1,1,5 +3980,0,1,1,1,1,5 +3990,0,1,1,1,1,5 +4000,0,1,1,1,1,5 +4010,0,1,1,1,1,5 +4020,0,1,1,1,1,5 +4030,0,1,1,1,1,5 +4040,0,1,1,1,1,5 +4050,0,1,1,1,1,5 +4060,0,1,1,1,1,5 +4070,0,1,1,1,1,5 +4080,0,1,1,1,1,5 +4090,0,1,1,1,1,5 +4100,0,1,1,1,1,5 +4110,0,1,1,1,1,5 +4120,0,1,1,1,1,5 +4130,0,1,1,1,1,5 +4140,0,1,1,1,1,5 +4150,0,1,1,1,1,5 +4160,0,1,1,1,1,5 +4170,0,1,1,1,1,5 +4180,0,1,1,1,1,5 +4190,0,1,1,1,1,5 +4200,0,1,1,1,1,5 +4210,0,1,1,1,1,5 +4220,0,1,1,1,1,5 +4230,0,1,1,1,1,5 +4240,0,1,1,1,1,5 +4250,0,1,1,1,1,5 +4260,0,1,1,1,1,5 +4270,0,1,1,1,1,5 +4280,0,1,1,1,1,5 +4290,0,1,1,1,1,5 +4300,0,1,1,1,1,5 +4310,0,1,1,1,1,5 +4320,0,1,1,1,1,5 +4330,0,1,1,1,1,5 +4340,0,1,1,1,1,5 +4350,0,1,1,1,1,5 +4360,0,1,1,1,1,5 +4370,0,1,1,1,1,5 +4380,0,1,1,1,1,5 +4390,0,1,1,1,1,5 +4400,0,1,1,1,1,5 +4410,0,1,1,1,1,5 +4420,0,1,1,1,1,5 +4430,0,1,1,1,1,5 +4440,0,1,1,1,1,5 +4450,0,1,1,1,1,5 +4460,0,1,1,1,1,5 +4470,0,1,1,1,1,5 +4480,0,1,1,1,1,5 +4490,0,1,1,1,1,5 +4500,0,1,1,1,1,5 +4510,0,1,1,1,1,5 +4520,0,1,1,1,1,5 +4530,0,1,1,1,1,5 +4540,0,1,1,1,1,5 +4550,0,1,1,1,1,5 +4560,0,1,1,1,1,5 +4570,0,1,1,1,1,5 +4580,0,1,1,1,1,5 +4590,0,1,1,1,1,5 +4600,0,1,1,1,1,5 +4610,0,1,1,1,1,5 +4620,0,1,1,1,1,5 +4630,0,1,1,1,1,5 +4640,0,1,1,1,1,5 +4650,0,1,1,1,1,5 +4660,0,1,1,1,1,5 +4670,0,1,1,1,1,5 +4680,0,1,1,1,1,5 +4690,0,1,1,1,1,5 +4700,0,1,1,1,1,5 +4710,0,1,1,1,1,5 +4720,0,1,1,1,1,5 +4730,0,1,1,1,1,5 +4740,0,1,1,1,1,5 +4750,0,1,1,1,1,5 +4760,0,1,1,1,1,5 +4770,0,1,1,1,1,5 +4780,0,1,1,1,1,5 +4790,0,1,1,1,1,5 +4800,0,1,1,1,1,5 +4810,0,1,1,1,1,5 +4820,0,1,1,1,1,5 +4830,0,1,1,1,1,5 +4840,0,1,1,1,1,5 +4850,0,1,1,1,1,5 +4860,0,1,1,1,1,5 +4870,0,1,1,1,1,5 +4880,0,1,1,1,1,5 +4890,0,1,1,1,1,5 +4900,0,1,1,1,1,5 +4910,0,1,1,1,1,5 +4920,0,1,1,1,1,5 +4930,0,1,1,1,1,5 +4940,0,1,1,1,1,5 +4950,0,1,1,1,1,5 +4960,0,1,1,1,1,5 +4970,0,1,1,1,1,5 +4980,0,1,1,1,1,5 +4990,0,1,1,1,1,5 +5000,0,2,2,1,1,5 +5010,0,2,2,1,1,5 +5020,0,2,2,1,1,5 +5030,0,2,2,1,1,5 +5040,0,2,2,1,1,5 +5050,0,2,2,1,1,5 +5060,0,2,2,1,1,5 +5070,0,2,2,1,1,5 +5080,0,2,2,1,1,5 +5090,0,2,2,1,1,5 +5100,0,2,2,1,1,5 +5110,0,2,2,1,1,5 +5120,0,2,2,1,1,5 +5130,0,2,2,1,1,5 +5140,0,2,2,1,1,5 +5150,0,2,2,1,1,5 +5160,0,2,2,1,1,5 +5170,0,2,2,1,1,5 +5180,0,2,2,1,1,5 +5190,0,2,2,1,1,5 +5200,0,2,2,1,1,5 +5210,0,2,2,1,1,5 +5220,0,2,2,1,1,5 +5230,0,2,2,1,1,5 +5240,0,2,2,1,1,5 +5250,0,2,2,1,1,5 +5260,0,2,2,1,1,5 +5270,0,2,2,1,1,5 +5280,0,2,2,1,1,5 +5290,0,2,2,1,1,5 +5300,0,2,2,1,1,5 +5310,0,2,2,1,1,5 +5320,0,2,2,1,1,5 +5330,0,2,2,1,1,5 +5340,0,2,2,1,1,5 +5350,0,2,2,1,1,5 +5360,0,2,2,1,1,5 +5370,0,2,2,1,1,5 +5380,0,2,2,1,1,5 +5390,0,2,2,1,1,5 +5400,0,2,2,1,1,5 +5410,0,2,2,1,1,5 +5420,0,2,2,1,1,5 +5430,0,2,2,1,1,5 +5440,0,2,2,1,1,5 +5450,0,2,2,1,1,5 +5460,0,2,2,1,1,5 +5470,0,2,2,1,1,5 +5480,0,2,2,1,1,5 +5490,0,2,2,1,1,5 +5500,0,2,2,1,1,5 +5510,0,2,2,1,1,5 +5520,0,2,2,1,1,5 +5530,0,2,2,1,1,5 +5540,0,2,2,1,1,5 +5550,0,2,2,1,1,5 +5560,0,2,2,1,1,5 +5570,0,2,2,1,1,5 +5580,0,2,2,1,1,5 +5590,0,2,2,1,1,5 +5600,0,2,2,1,1,5 +5610,0,2,2,1,1,5 +5620,0,2,2,1,1,5 +5630,0,2,2,1,1,5 +5640,0,2,2,1,1,5 +5650,0,2,2,1,1,5 +5660,0,2,2,1,1,5 +5670,0,2,2,1,1,5 +5680,0,2,2,1,1,5 +5690,0,2,2,1,1,5 +5700,0,2,2,1,1,5 +5710,0,2,2,1,1,5 +5720,0,2,2,1,1,5 +5730,0,2,2,1,1,5 +5740,0,2,2,1,1,5 +5750,0,2,2,1,1,5 +5760,0,2,2,1,1,5 +5770,0,2,2,1,1,5 +5780,0,2,2,1,1,5 +5790,0,2,2,1,1,5 +5800,0,2,2,1,1,5 +5810,0,2,2,1,1,5 +5820,0,2,2,1,1,5 +5830,0,2,2,1,1,5 +5840,0,2,2,1,1,5 +5850,0,2,2,1,1,5 +5860,0,2,2,1,1,5 +5870,0,2,2,1,1,5 +5880,0,2,2,1,1,5 +5890,0,2,2,1,1,5 +5900,0,2,2,1,1,5 +5910,0,2,2,1,1,5 +5920,0,2,2,1,1,5 +5930,0,2,2,1,1,5 +5940,0,2,2,1,1,5 +5950,0,2,2,1,1,5 +5960,0,2,2,1,1,5 +5970,0,2,2,1,1,5 +5980,0,2,2,1,1,5 +5990,0,2,2,1,1,5 +6000,0,2,2,1,1,5 +6010,0,2,2,1,1,5 +6020,0,2,2,1,1,5 +6030,0,2,2,1,1,5 +6040,0,2,2,1,1,5 +6050,0,2,2,1,1,5 +6060,0,2,2,1,1,5 +6070,0,2,2,1,1,5 +6080,0,2,2,1,1,5 +6090,0,2,2,1,1,5 +6100,0,2,2,1,1,5 +6110,0,2,2,1,1,5 +6120,0,2,2,1,1,5 +6130,0,2,2,1,1,5 +6140,0,2,2,1,1,5 +6150,0,2,2,1,1,5 +6160,0,2,2,1,1,5 +6170,0,2,2,1,1,5 +6180,0,2,2,1,1,5 +6190,0,2,2,1,1,5 +6200,0,2,2,1,1,5 +6210,0,2,2,1,1,5 +6220,0,2,2,1,1,5 +6230,0,2,2,1,1,5 +6240,0,2,2,1,1,5 +6250,0,2,2,1,1,5 +6260,0,2,2,1,1,5 +6270,0,2,2,1,1,5 +6280,0,2,2,1,1,5 +6290,0,2,2,1,1,5 +6300,0,2,2,1,1,5 +6310,0,2,2,1,1,5 +6320,0,2,2,1,1,5 +6330,0,2,2,1,1,5 +6340,0,2,2,1,1,5 +6350,0,2,2,1,1,5 +6360,0,2,2,1,1,5 +6370,0,2,2,1,1,5 +6380,0,2,2,1,1,5 +6390,0,2,2,1,1,5 +6400,0,2,2,1,1,5 +6410,0,2,2,1,1,5 +6420,0,2,2,1,1,5 +6430,0,2,2,1,1,5 +6440,0,2,2,1,1,5 +6450,0,2,2,1,1,5 +6460,0,2,2,1,1,5 +6470,0,2,2,1,1,5 +6480,0,2,2,1,1,5 +6490,0,2,2,1,1,5 +6500,0,2,2,1,1,5 +6510,0,2,2,1,1,5 +6520,0,2,2,1,1,5 +6530,0,2,2,1,1,5 +6540,0,2,2,1,1,5 +6550,0,2,2,1,1,5 +6560,0,2,2,1,1,5 +6570,0,2,2,1,1,5 +6580,0,2,2,1,1,5 +6590,0,2,2,1,1,5 +6600,0,2,2,1,1,5 +6610,0,2,2,1,1,5 +6620,0,2,2,1,1,5 +6630,0,2,2,1,1,5 +6640,0,2,2,1,1,5 +6650,0,2,2,1,1,5 +6660,0,2,2,1,1,5 +6670,0,2,2,1,1,5 +6680,0,2,2,1,1,5 +6690,0,2,2,1,1,5 +6700,0,2,2,1,1,5 +6710,0,2,2,1,1,5 +6720,0,2,2,1,1,5 +6730,0,2,2,1,1,5 +6740,0,2,2,1,1,5 +6750,0,2,2,1,1,5 +6760,0,2,2,1,1,5 +6770,0,2,2,1,1,5 +6780,0,2,2,1,1,5 +6790,0,2,2,1,1,5 +6800,0,2,2,1,1,5 +6810,0,2,2,1,1,5 +6820,0,2,2,1,1,5 +6830,0,2,2,1,1,5 +6840,0,2,2,1,1,5 +6850,0,2,2,1,1,5 +6860,0,2,2,1,1,5 +6870,0,2,2,1,1,5 +6880,0,2,2,1,1,5 +6890,0,2,2,1,1,5 +6900,0,2,2,1,1,5 +6910,0,2,2,1,1,5 +6920,0,2,2,1,1,5 +6930,0,2,2,1,1,5 +6940,0,2,2,1,1,5 +6950,0,2,2,1,1,5 +6960,0,2,2,1,1,5 +6970,0,2,2,1,1,5 +6980,0,2,2,1,1,5 +6990,0,2,2,1,1,5 +7000,0,2,2,1,1,5 +7010,0,2,2,1,1,5 +7020,0,2,2,1,1,5 +7030,0,2,2,1,1,5 +7040,0,2,2,1,1,5 +7050,0,2,2,1,1,5 +7060,0,2,2,1,1,5 +7070,0,2,2,1,1,5 +7080,0,2,2,1,1,5 +7090,0,2,2,1,1,5 +7100,0,2,2,1,1,5 +7110,0,2,2,1,1,5 +7120,0,2,2,1,1,5 +7130,0,2,2,1,1,5 +7140,0,2,2,1,1,5 +7150,0,2,2,1,1,5 +7160,0,2,2,1,1,5 +7170,0,2,2,1,1,5 +7180,0,2,2,1,1,5 +7190,0,2,2,1,1,5 +7200,0,2,2,1,1,5 +7210,0,2,2,1,1,5 +7220,0,2,2,1,1,5 +7230,0,2,2,1,1,5 +7240,0,2,2,1,1,5 +7250,0,2,2,1,1,5 +7260,0,2,2,1,1,5 +7270,0,2,2,1,1,5 +7280,0,2,2,1,1,5 +7290,0,2,2,1,1,5 +7300,0,2,2,1,1,5 +7310,0,2,2,1,1,5 +7320,0,2,2,1,1,5 +7330,0,2,2,1,1,5 +7340,0,2,2,1,1,5 +7350,0,2,2,1,1,5 +7360,0,2,2,1,1,5 +7370,0,2,2,1,1,5 +7380,0,2,2,1,1,5 +7390,0,2,2,1,1,5 +7400,0,2,2,1,1,5 +7410,0,2,2,1,1,5 +7420,0,2,2,1,1,5 +7430,0,2,2,1,1,5 +7440,0,2,2,1,1,5 +7450,0,2,2,1,1,5 +7460,0,2,2,1,1,5 +7470,0,2,2,1,1,5 +7480,0,2,2,1,1,5 +7490,0,2,2,1,1,5 +7500,0,2,2,1,1,5 +7510,0,2,2,1,1,5 +7520,0,2,2,1,1,5 +7530,0,2,2,1,1,5 +7540,0,2,2,1,1,5 +7550,0,2,2,1,1,5 +7560,0,2,2,1,1,5 +7570,0,2,2,1,1,5 +7580,0,2,2,1,1,5 +7590,0,2,2,1,1,5 +7600,0,2,2,1,1,5 +7610,0,2,2,1,1,5 +7620,0,2,2,1,1,5 +7630,0,2,2,1,1,5 +7640,0,2,2,1,1,5 +7650,0,2,2,1,1,5 +7660,0,2,2,1,1,5 +7670,0,2,2,1,1,5 +7680,0,2,2,1,1,5 +7690,0,2,2,1,1,5 +7700,0,2,2,1,1,5 +7710,0,2,2,1,1,5 +7720,0,2,2,1,1,5 +7730,0,2,2,1,1,5 +7740,0,2,2,1,1,5 +7750,0,2,2,1,1,5 +7760,0,2,2,1,1,5 +7770,0,2,2,1,1,5 +7780,0,2,2,1,1,5 +7790,0,2,2,1,1,5 +7800,0,2,2,1,1,5 +7810,0,2,2,1,1,5 +7820,0,2,2,1,1,5 +7830,0,2,2,1,1,5 +7840,0,2,2,1,1,5 +7850,0,2,2,1,1,5 +7860,0,2,2,1,1,5 +7870,0,2,2,1,1,5 +7880,0,2,2,1,1,5 +7890,0,2,2,1,1,5 +7900,0,2,2,1,1,5 +7910,0,2,2,1,1,5 +7920,0,2,2,1,1,5 +7930,0,2,2,1,1,5 +7940,0,2,2,1,1,5 +7950,0,2,2,1,1,5 +7960,0,2,2,1,1,5 +7970,0,2,2,1,1,5 +7980,0,2,2,1,1,5 +7990,0,2,2,1,1,5 +8000,0,2,2,1,1,5 +8010,0,2,2,1,1,5 +8020,0,2,2,1,1,5 +8030,0,2,2,1,1,5 +8040,0,2,2,1,1,5 +8050,0,2,2,1,1,5 +8060,0,2,2,1,1,5 +8070,0,2,2,1,1,5 +8080,0,2,2,1,1,5 +8090,0,2,2,1,1,5 +8100,0,2,2,1,1,5 +8110,0,2,2,1,1,5 +8120,0,2,2,1,1,5 +8130,0,2,2,1,1,5 +8140,0,2,2,1,1,5 +8150,0,2,2,1,1,5 +8160,0,2,2,1,1,5 +8170,0,2,2,1,1,5 +8180,0,2,2,1,1,5 +8190,0,2,2,1,1,5 +8200,0,2,2,1,1,5 +8210,0,2,2,1,1,5 +8220,0,2,2,1,1,5 +8230,0,2,2,1,1,5 +8240,0,2,2,1,1,5 +8250,0,2,2,1,1,5 +8260,0,2,2,1,1,5 +8270,0,2,2,1,1,5 +8280,0,2,2,1,1,5 +8290,0,2,2,1,1,5 +8300,0,2,2,1,1,5 +8310,0,2,2,1,1,5 +8320,0,2,2,1,1,5 +8330,0,2,2,1,1,5 +8340,0,2,2,1,1,5 +8350,0,2,2,1,1,5 +8360,0,2,2,1,1,5 +8370,0,2,2,1,1,5 +8380,0,2,2,1,1,5 +8390,0,2,2,1,1,5 +8400,0,2,2,1,1,5 +8410,0,2,2,1,1,5 +8420,0,2,2,1,1,5 +8430,0,2,2,1,1,5 +8440,0,2,2,1,1,5 +8450,0,2,2,1,1,5 +8460,0,2,2,1,1,5 +8470,0,2,2,1,1,5 +8480,0,2,2,1,1,5 +8490,0,2,2,1,1,5 +8500,0,2,2,1,1,5 +8510,0,2,2,1,1,5 +8520,0,2,2,1,1,5 +8530,0,2,2,1,1,5 +8540,0,2,2,1,1,5 +8550,0,2,2,1,1,5 +8560,0,2,2,1,1,5 +8570,0,2,2,1,1,5 +8580,0,2,2,1,1,5 +8590,0,2,2,1,1,5 +8600,0,2,2,1,1,5 +8610,0,2,2,1,1,5 +8620,0,2,2,1,1,5 +8630,0,2,2,1,1,5 +8640,0,2,2,1,1,5 +8650,0,2,2,1,1,5 +8660,0,2,2,1,1,5 +8670,0,2,2,1,1,5 +8680,0,2,2,1,1,5 +8690,0,2,2,1,1,5 +8700,0,2,2,1,1,5 +8710,0,2,2,1,1,5 +8720,0,2,2,1,1,5 +8730,0,2,2,1,1,5 +8740,0,2,2,1,1,5 +8750,0,2,2,1,1,5 +8760,0,2,2,1,1,5 +8770,0,2,2,1,1,5 +8780,0,2,2,1,1,5 +8790,0,2,2,1,1,5 +8800,0,2,2,1,1,5 +8810,0,2,2,1,1,5 +8820,0,2,2,1,1,5 +8830,0,2,2,1,1,5 +8840,0,2,2,1,1,5 +8850,0,2,2,1,1,5 +8860,0,2,2,1,1,5 +8870,0,2,2,1,1,5 +8880,0,2,2,1,1,5 +8890,0,2,2,1,1,5 +8900,0,2,2,1,1,5 +8910,0,2,2,1,1,5 +8920,0,2,2,1,1,5 +8930,0,2,2,1,1,5 +8940,0,2,2,1,1,5 +8950,0,2,2,1,1,5 +8960,0,2,2,1,1,5 +8970,0,2,2,1,1,5 +8980,0,2,2,1,1,5 +8990,0,2,2,1,1,5 +9000,0,2,2,1,1,5 +9010,0,2,2,1,1,5 +9020,0,2,2,1,1,5 +9030,0,2,2,1,1,5 +9040,0,2,2,1,1,5 +9050,0,2,2,1,1,5 +9060,0,2,2,1,1,5 +9070,0,2,2,1,1,5 +9080,0,2,2,1,1,5 +9090,0,2,2,1,1,5 +9100,0,2,2,1,1,5 +9110,0,2,2,1,1,5 +9120,0,2,2,1,1,5 +9130,0,2,2,1,1,5 +9140,0,2,2,1,1,5 +9150,0,2,2,1,1,5 +9160,0,2,2,1,1,5 +9170,0,2,2,1,1,5 +9180,0,2,2,1,1,5 +9190,0,2,2,1,1,5 +9200,0,2,2,1,1,5 +9210,0,2,2,1,1,5 +9220,0,2,2,1,1,5 +9230,0,2,2,1,1,5 +9240,0,2,2,1,1,5 +9250,0,2,2,1,1,5 +9260,0,2,2,1,1,5 +9270,0,2,2,1,1,5 +9280,0,2,2,1,1,5 +9290,0,2,2,1,1,5 +9300,0,2,2,1,1,5 +9310,0,2,2,1,1,5 +9320,0,2,2,1,1,5 +9330,0,2,2,1,1,5 +9340,0,2,2,1,1,5 +9350,0,2,2,1,1,5 +9360,0,2,2,1,1,5 +9370,0,2,2,1,1,5 +9380,0,2,2,1,1,5 +9390,0,2,2,1,1,5 +9400,0,2,2,1,1,5 +9410,0,2,2,1,1,5 +9420,0,2,2,1,1,5 +9430,0,2,2,1,1,5 +9440,0,2,2,1,1,5 +9450,0,2,2,1,1,5 +9460,0,2,2,1,1,5 +9470,0,2,2,1,1,5 +9480,0,2,2,1,1,5 +9490,0,2,2,1,1,5 +9500,0,2,2,1,1,5 +9510,0,2,2,1,1,5 +9520,0,2,2,1,1,5 +9530,0,2,2,1,1,5 +9540,0,2,2,1,1,5 +9550,0,2,2,1,1,5 +9560,0,2,2,1,1,5 +9570,0,2,2,1,1,5 +9580,0,2,2,1,1,5 +9590,0,2,2,1,1,5 +9600,0,2,2,1,1,5 +9610,0,2,2,1,1,5 +9620,0,2,2,1,1,5 +9630,0,2,2,1,1,5 +9640,0,2,2,1,1,5 +9650,0,2,2,1,1,5 +9660,0,2,2,1,1,5 +9670,0,2,2,1,1,5 +9680,0,2,2,1,1,5 +9690,0,2,2,1,1,5 +9700,0,2,2,1,1,5 +9710,0,2,2,1,1,5 +9720,0,2,2,1,1,5 +9730,0,2,2,1,1,5 +9740,0,2,2,1,1,5 +9750,0,2,2,1,1,5 +9760,0,2,2,1,1,5 +9770,0,2,2,1,1,5 +9780,0,2,2,1,1,5 +9790,0,2,2,1,1,5 +9800,0,2,2,1,1,5 +9810,0,2,2,1,1,5 +9820,0,2,2,1,1,5 +9830,0,2,2,1,1,5 +9840,0,2,2,1,1,5 +9850,0,2,2,1,1,5 +9860,0,2,2,1,1,5 +9870,0,2,2,1,1,5 +9880,0,2,2,1,1,5 +9890,0,2,2,1,1,5 +9900,0,2,2,1,1,5 +9910,0,2,2,1,1,5 +9920,0,2,2,1,1,5 +9930,0,2,2,1,1,5 +9940,0,2,2,1,1,5 +9950,0,2,2,1,1,5 +9960,0,2,2,1,1,5 +9970,0,2,2,1,1,5 +9980,0,2,2,1,1,5 +9990,0,2,2,1,1,5 +10000,0,2,2,1,1,5 +10010,0,2,2,1,1,5 +10020,0,2,2,1,1,5 +10030,0,2,2,1,1,5 +10040,0,2,2,1,1,5 +10050,0,2,2,1,1,5 +10060,0,2,2,1,1,5 +10070,0,2,2,1,1,5 +10080,0,2,2,1,1,5 +10090,0,2,2,1,1,5 +10100,0,2,2,1,1,5 diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/1ms-minus.csv b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/1ms-minus.csv new file mode 100644 index 0000000..954c588 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/1ms-minus.csv @@ -0,0 +1,103 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,60,45,0,10,10,10 +10,55,40,-2,9,9,9 +20,50,35,-4,8,8,8 +30,45,30,-6,7,7,7 +40,40,25,-8,6,6,6 +50,35,20,-10,5,5,5 +60,30,15,-12,4,4,4 +70,25,10,-14,3,3,3 +80,20,5,-16,2,2,2 +90,15,0,-18,1,1,1 +100,10,-5,-20,0,0,0 +110,5,0,-22,1,1,1 +120,0,5,-20,2,2,2 +130,-5,10,-18,3,3,3 +140,0,15,-16,4,4,4 +150,5,20,-14,5,5,5 +160,10,25,-12,6,6,6 +170,15,30,-10,7,7,7 +180,20,35,-8,8,8,8 +190,25,40,-6,9,9,9 +200,30,45,-4,10,10,10 +210,35,40,-2,9,9,9 +220,40,35,0,8,8,8 +230,45,30,-2,7,7,7 +240,50,25,-4,6,6,6 +250,55,20,-6,5,5,5 +260,60,15,-8,4,4,4 +270,55,10,-10,3,3,3 +280,50,5,-12,2,2,2 +290,45,0,-14,1,1,1 +300,40,-5,-16,0,0,0 +310,35,0,-18,1,1,1 +320,30,5,-20,2,2,2 +330,25,10,-25,3,3,3 +340,20,15,-20,4,4,4 +350,15,20,-18,5,5,5 +360,10,25,-16,6,6,6 +370,5,30,-14,7,7,7 +380,0,35,-12,8,8,8 +390,-5,40,-10,9,9,9 +400,0,45,-8,10,10,10 +410,5,40,-6,9,9,9 +420,10,35,-4,8,8,8 +430,15,30,-2,7,7,7 +440,20,25,0,6,6,6 +450,25,20,-2,5,5,5 +460,30,15,-4,4,4,4 +470,35,10,-6,3,3,3 +480,40,5,-8,2,2,2 +490,45,0,-10,1,1,1 +500,50,-5,-12,0,0,0 +510,55,0,-14,1,1,1 +520,60,5,-16,2,2,2 +530,55,10,-18,3,3,3 +540,50,15,-20,4,4,4 +550,45,20,-30,5,5,5 +560,40,25,-20,6,6,6 +570,35,30,-18,7,7,7 +580,30,35,-16,8,8,8 +590,25,40,-14,9,9,9 +600,20,45,-12,10,10,10 +610,15,40,-10,9,9,9 +620,10,35,-8,8,8,8 +630,5,30,-6,7,7,7 +640,0,25,-4,6,6,6 +650,-5,20,-2,5,5,5 +660,0,15,0,4,4,4 +670,5,10,-2,3,3,3 +680,10,5,-4,2,2,2 +690,15,0,-6,1,1,1 +700,20,-5,-8,0,0,0 +710,25,0,-10,1,1,1 +720,30,5,-12,2,2,2 +730,35,10,-14,3,3,3 +740,40,15,-16,4,4,4 +750,45,20,-18,5,5,5 +760,50,25,-20,6,6,6 +770,55,30,-22,7,7,7 +780,60,35,-20,8,8,8 +790,55,40,-18,9,9,9 +800,50,45,-16,10,10,10 +810,45,40,-14,9,9,9 +820,40,35,-12,8,8,8 +830,35,30,-10,7,7,7 +840,30,25,-8,6,6,6 +850,25,20,-6,5,5,5 +860,20,15,-4,4,4,4 +870,15,10,-2,3,3,3 +880,10,5,0,2,2,2 +890,5,0,-2,1,1,1 +900,0,-5,-4,0,0,0 +910,-5,0,-6,1,1,1 +920,0,5,-8,2,2,2 +930,5,10,-10,3,3,3 +940,10,15,-12,4,4,4 +950,15,20,-14,5,5,5 +960,20,25,-16,6,6,6 +970,25,30,-18,7,7,7 +980,30,35,-20,8,8,8 +990,35,40,-22,9,9,9 +1000,40,45,-20,10,10,10 diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/1ms-plus.csv b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/1ms-plus.csv new file mode 100644 index 0000000..9ae00ed --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/1ms-plus.csv @@ -0,0 +1,103 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,60,45,10,10,10,10 +10,55,40,9,9,9,9 +20,50,35,8,8,8,8 +30,45,30,7,7,7,7 +40,40,25,6,6,6,6 +50,35,20,5,5,5,5 +60,30,15,4,4,4,4 +70,25,10,3,3,3,3 +80,20,5,2,2,2,2 +90,15,0,1,1,1,1 +100,10,-5,0,0,0,0 +110,5,0,1,1,1,1 +120,0,5,2,2,2,2 +130,-5,10,3,3,3,3 +140,0,15,4,4,4,4 +150,5,20,5,5,5,5 +160,10,25,6,6,6,6 +170,15,30,7,7,7,7 +180,20,35,8,8,8,8 +190,25,40,9,9,9,9 +200,30,45,10,10,10,10 +210,35,40,11,9,9,9 +220,40,35,12,8,8,8 +230,45,30,11,7,7,7 +240,50,25,10,6,6,6 +250,55,20,9,5,5,5 +260,60,15,8,4,4,4 +270,55,10,7,3,3,3 +280,50,5,6,2,2,2 +290,45,0,5,1,1,1 +300,40,-5,4,0,0,0 +310,35,0,3,1,1,1 +320,30,5,2,2,2,2 +330,25,10,1,3,3,3 +340,20,15,0,4,4,4 +350,15,20,1,5,5,5 +360,10,25,2,6,6,6 +370,5,30,3,7,7,7 +380,0,35,4,8,8,8 +390,-5,40,5,9,9,9 +400,0,45,6,10,10,10 +410,5,40,7,9,9,9 +420,10,35,8,8,8,8 +430,15,30,9,7,7,7 +440,20,25,10,6,6,6 +450,25,20,11,5,5,5 +460,30,15,12,4,4,4 +470,35,10,11,3,3,3 +480,40,5,10,2,2,2 +490,45,0,9,1,1,1 +500,50,-5,8,0,0,0 +510,55,0,7,1,1,1 +520,60,5,6,2,2,2 +530,55,10,5,3,3,3 +540,50,15,4,4,4,4 +550,45,20,3,5,5,5 +560,40,25,2,6,6,6 +570,35,30,1,7,7,7 +580,30,35,0,8,8,8 +590,25,40,1,9,9,9 +600,20,45,2,10,10,10 +610,15,40,3,9,9,9 +620,10,35,4,8,8,8 +630,5,30,5,7,7,7 +640,0,25,6,6,6,6 +650,-5,20,7,5,5,5 +660,0,15,8,4,4,4 +670,5,10,9,3,3,3 +680,10,5,10,2,2,2 +690,15,0,11,1,1,1 +700,20,-5,12,0,0,0 +710,25,0,11,1,1,1 +720,30,5,10,2,2,2 +730,35,10,9,3,3,3 +740,40,15,8,4,4,4 +750,45,20,7,5,5,5 +760,50,25,6,6,6,6 +770,55,30,5,7,7,7 +780,60,35,4,8,8,8 +790,55,40,3,9,9,9 +800,50,45,2,10,10,10 +810,45,40,1,9,9,9 +820,40,35,0,8,8,8 +830,35,30,1,7,7,7 +840,30,25,2,6,6,6 +850,25,20,3,5,5,5 +860,20,15,4,4,4,4 +870,15,10,5,3,3,3 +880,10,5,6,2,2,2 +890,5,0,7,1,1,1 +900,0,-5,8,0,0,0 +910,-5,0,9,1,1,1 +920,0,5,10,2,2,2 +930,5,10,11,3,3,3 +940,10,15,12,4,4,4 +950,15,20,11,5,5,5 +960,20,25,10,6,6,6 +970,25,30,9,7,7,7 +980,30,35,8,8,8,8 +990,35,40,7,9,9,9 +1000,40,45,6,10,10,10 diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/1ms.csv b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/1ms.csv new file mode 100644 index 0000000..1fa4757 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/1ms.csv @@ -0,0 +1,103 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,60,45,10,10,10,10 +10,55,40,7,9,9,9 +20,50,35,4,8,8,8 +30,45,30,1,7,7,7 +40,40,25,-2,6,6,6 +50,35,20,-5,5,5,5 +60,30,15,-8,4,4,4 +70,25,10,-11,3,3,3 +80,20,5,-14,2,2,2 +90,15,0,-17,1,1,1 +100,10,-5,-20,0,0,0 +110,5,0,-23,1,1,1 +120,0,5,-20,2,2,2 +130,-5,10,-17,3,3,3 +140,0,15,-14,4,4,4 +150,5,20,-11,5,5,5 +160,10,25,-8,6,6,6 +170,15,30,-5,7,7,7 +180,20,35,-2,8,8,8 +190,25,40,1,9,9,9 +200,30,45,4,10,10,10 +210,35,40,7,9,9,9 +220,40,35,10,8,8,8 +230,45,30,13,7,7,7 +240,50,25,10,6,6,6 +250,55,20,7,5,5,5 +260,60,15,4,4,4,4 +270,55,10,1,3,3,3 +280,50,5,-2,2,2,2 +290,45,0,-5,1,1,1 +300,40,-5,-8,0,0,0 +310,35,0,-11,1,1,1 +320,30,5,-14,2,2,2 +330,25,10,-17,3,3,3 +340,20,15,-20,4,4,4 +350,15,20,-23,5,5,5 +360,10,25,-20,6,6,6 +370,5,30,-17,7,7,7 +380,0,35,-14,8,8,8 +390,-5,40,-11,9,9,9 +400,0,45,-8,10,10,10 +410,5,40,-5,9,9,9 +420,10,35,-2,8,8,8 +430,15,30,1,7,7,7 +440,20,25,4,6,6,6 +450,25,20,7,5,5,5 +460,30,15,10,4,4,4 +470,35,10,13,3,3,3 +480,40,5,10,2,2,2 +490,45,0,7,1,1,1 +500,50,-5,4,0,0,0 +510,55,0,1,1,1,1 +520,60,5,-2,2,2,2 +530,55,10,-5,3,3,3 +540,50,15,-8,4,4,4 +550,45,20,-11,5,5,5 +560,40,25,-14,6,6,6 +570,35,30,-17,7,7,7 +580,30,35,-20,8,8,8 +590,25,40,-23,9,9,9 +600,20,45,-20,10,10,10 +610,15,40,-17,9,9,9 +620,10,35,-14,8,8,8 +630,5,30,-11,7,7,7 +640,0,25,-8,6,6,6 +650,-5,20,-5,5,5,5 +660,0,15,-2,4,4,4 +670,5,10,1,3,3,3 +680,10,5,4,2,2,2 +690,15,0,7,1,1,1 +700,20,-5,10,0,0,0 +710,25,0,13,1,1,1 +720,30,5,10,2,2,2 +730,35,10,7,3,3,3 +740,40,15,4,4,4,4 +750,45,20,1,5,5,5 +760,50,25,-2,6,6,6 +770,55,30,-5,7,7,7 +780,60,35,-8,8,8,8 +790,55,40,-11,9,9,9 +800,50,45,-14,10,10,10 +810,45,40,-17,9,9,9 +820,40,35,-20,8,8,8 +830,35,30,-23,7,7,7 +840,30,25,-20,6,6,6 +850,25,20,-17,5,5,5 +860,20,15,-14,4,4,4 +870,15,10,-11,3,3,3 +880,10,5,-8,2,2,2 +890,5,0,-5,1,1,1 +900,0,-5,-2,0,0,0 +910,-5,0,1,1,1,1 +920,0,5,4,2,2,2 +930,5,10,7,3,3,3 +940,10,15,10,4,4,4 +950,15,20,13,5,5,5 +960,20,25,10,6,6,6 +970,25,30,7,7,7,7 +980,30,35,4,8,8,8 +990,35,40,1,9,9,9 +1000,40,45,-2,10,10,10 diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronA_FY19_P1.cfg b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronA_FY19_P1.cfg new file mode 100644 index 0000000..a4cf645 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronA_FY19_P1.cfg @@ -0,0 +1,4981 @@ +// LoggerService node: See /var/log/messages file. +// +LoggerService = { +// Class = LoggerService +// CPUs = 0x800 +// StackSize = 32768 +// NumberOfLogPages = 128 +// +SysLogger = { +// Class = SysLogger +// Format = "EtOoFmC" +// PrintKeys = 1 +// Ident = "JAGyA" +// } +// } + +// StateMachine node ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +Start = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +DISABLED = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITSTANDBY = { + Class = ReferenceContainer + +GoWaitReady = { + Class = StateMachineEvent + NextState = "WAITREADY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitReady + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoDisabled = { + Class = StateMachineEvent + NextState = "DISABLED" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Disabled + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITREADY = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITPERMIT = { + Class = ReferenceContainer + +GoWaitReady = { + Class = StateMachineEvent + NextState = "WAITREADY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitReady + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON = { + Class = StateMachineEvent + NextState = "WAITHVON" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON_SDN = { + Class = StateMachineEvent + NextState = "WAITHVON_SDN" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON_SDN + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON_PREP = { + Class = StateMachineEvent + NextState = "WAITHVON_PREP" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON_PREP + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON_SDN_PREP = { + Class = StateMachineEvent + NextState = "WAITHVON_SDN_PREP" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON_SDN_PREP + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + // HVPS sequence control states. + +WAITHVON = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITHVON_SDN = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITHVON_PREP = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITHVON_SDN_PREP = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + // Error State (Enter by HVPS errors) + +ERROR = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } +} + +// RealTime Application node ++JAGyrotronRTApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + //Timer GAM for thread 1. + +Timer1kHzGAM = { + Class = IOGAM + InputSignals = { + Counter = { + DataSource = Timer1kHz + Type = uint32 + Frequency = 1000 //Hz + } + Time = { + DataSource = Timer1kHz + Type = uint32 + } + } + OutputSignals = { + Counter1kHz = { + DataSource = DDB1 + Type = uint32 + } + Time1kHz = { + DataSource = DDB1 + Type = uint32 + } + } + } + +Timer10HzGAM = { + Class = IOGAM + InputSignals = { + Counter = { + DataSource = Timer10Hz + Type = uint32 + Frequency = 1 //Hz + } + Time = { + DataSource = Timer10Hz + Type = uint32 + } + } + OutputSignals = { + Counter10Hz = { + DataSource = DDB1 + Type = uint32 + } + Time1Hz = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM to update PCF state-machine state + +InErrorGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 1 + } + } + } + +InDisabledGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 2 + } + } + } + +InWaitStandbyGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 3 + } + } + } + +InWaitReadyGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 4 + } + } + } + +InWaitPermitGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 5 + } + } + } + +InWaitHVONGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 6 + } + } + } + +InWaitHVON_PREPGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 7 + } + } + } + +InWaitHVON_SDNGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 8 + } + } + } + +InWaitHVON_SDN_PREPGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 9 + } + } + } + + // Copy data from DDB1 to EPICSCAOutput DataSource. + +EPICSOutputGAM = { + Class = IOGAM + InputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + } + MCPS_ACT_SP = { + DataSource = DDB1 + Type = uint32 + } + GCPS_ACT_SP = { + DataSource = DDB1 + Type = uint32 + } + BPS_OUT = { + DataSource = DDB1 + Type = float32 + } + APS_OUT = { + DataSource = DDB1 + Type = float32 + } + MCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + GCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + FHPS_REF = { + DataSource = DDB1 + Type = float32 + } + CSV_LOADED = { + DataSource = DDB1 + Type = uint32 + } + CSV_ERR = { + DataSource = DDB1 + Type = uint32 + } + ELAPSED_TIME = { + DataSource = DDB1 + Type = uint32 + } + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + RFON = { + DataSource = DDB1 + Type = uint32 + } + MHVPS_OUT = { + DataSource = DDB1 + Type = float32 + } + PREP_TIME_WF = { + DataSource = DDB1 + Type = int32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + MHVPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + BPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + APS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + MCPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GCPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + FHPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + CCPS_REF = { + DataSource = DDB1 + Type = float32 + } + MHVPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + APS_STOP = { + DataSource = DDB1 + Type = uint32 + } + BPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + BEAM_ON_TIME = { + DataSource = DDB1 + Type = uint32 + } + PCF_FLT = { + DataSource = DDB1 + Type = uint32 + } + BEAM_ON_STAT = { + DataSource = DDB1 + Type = uint32 + } + SHOT_ID = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + FHPS_AUTO_STAT = { + DataSource = DDB1 + Type = uint32 + } + //Add 20201117 + APS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + APS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + MHVPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + PCF_STATE = { + DataSource = EPICSCAOutput + Type = uint32 + } + MCPS_ACT_SP = { + DataSource = EPICSCAOutput + Type = uint32 + } + GCPS_ACT_SP = { + DataSource = EPICSCAOutput + Type = uint32 + } + BPS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + APS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + MCPS_TRG_CURR_SET = { + DataSource = EPICSCAOutput + Type = float32 + } + GCPS_TRG_CURR_SET = { + DataSource = EPICSCAOutput + Type = float32 + } + FHPS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + CSV_LOADED = { + DataSource = EPICSCAOutput + Type = uint32 + } + CSV_ERR = { + DataSource = EPICSCAOutput + Type = uint32 + } + ELAPSED_TIME = { + DataSource = EPICSCAOutput + Type = uint32 + } + HVARMED = { + DataSource = EPICSCAOutput + Type = uint32 + } + HVINJECTION = { + DataSource = EPICSCAOutput + Type = uint32 + } + RFON = { + DataSource = EPICSCAOutput + Type = uint32 + } + + MHVPS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + PREP_TIME_WF = { + DataSource = EPICSCAOutput + } + MHVPS_PREP_WF = { + DataSource = EPICSCAOutput + } + BPS_PREP_WF = { + DataSource = EPICSCAOutput + } + APS_PREP_WF = { + DataSource = EPICSCAOutput + } + MCPS_PREP_WF = { + DataSource = EPICSCAOutput + } + GCPS_PREP_WF = { + DataSource = EPICSCAOutput + } + FHPS_PREP_WF = { + DataSource = EPICSCAOutput + } + CCPS_REF = { + DataSource = EPICSCAOutput + } + MHVPS_STOP = { + DataSource = EPICSCAOutput + Type = uint32 + } + APS_STOP = { + DataSource = EPICSCAOutput + Type = uint32 + } + BPS_STOP = { + DataSource = EPICSCAOutput + Type = uint32 + } + BEAM_ON_TIME = { + DataSource = EPICSCAOutput + Type = uint32 + } + PCF_FLT = { + DataSource = EPICSCAOutput + } + BEAM_ON_STAT = { + DataSource = EPICSCAOutput + } + SHOT_ID = { + DataSource = EPICSCAOutput + } + FHPS_AUTO_STAT = { + DataSource = EPICSCAOutput + } + //Added 20201117 + APS_HVON = { + DataSource = EPICSCAOutput + } + APS_SWON = { + DataSource = EPICSCAOutput + } + BPS_HVON = { + DataSource = EPICSCAOutput + } + BPS_SWON = { + DataSource = EPICSCAOutput + } + MHVPS_HVON = { + DataSource = EPICSCAOutput + } + } + } + + // Message GAM in Disabled state. + +GoWaitStandbyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1} + Comparators = {EQUALS} + InputSignals = { + PLC_SELECT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + +GoWaitStandbyFromReadyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0} + Comparators = {EQUALS} + InputSignals = { + PLC_STANDBY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + + // MCPS, GCPS PV to DDB1 + +GCPSGAM = { + Class = IOGAM + InputSignals = { + GCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + GCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + } + } + +MCPSGAM = { + Class = IOGAM + InputSignals = { + MCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + MCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + } + } + // Message GAM in Standby state. + +GoDisabledGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0} + Comparators = {EQUALS} + InputSignals = { + PLC_SELECT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoDisabled + } + } + + //GAM in WaitReady state. Check MCPS,GCPS,FHPS state for state transition. + +GoWaitReadyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {3 3 1} + ExpectedFloatValues = {0 0 0} + Comparators = {EQUALS GREATER EQUALS GREATER EQUALS GREATER} + InputSignals = { + MCPS_ACT_RB = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_MCPS_CURR_MON = { + DataSource = EPICSCAInput + Type = float32 + } + GCPS_ACT_RB = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_GCPS_CURR_MON = { + DataSource = EPICSCAInput + Type = float32 + } + FHPS_RU = { + DataSource = EPICSCAInput + Type = uint32 + } + FHPS_MEAS_ACV = { + DataSource = EPICSCAInput + Type = float32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitReady + } + } + + //GAM for prepro + +WFRecordGAM = { + Class = JAWFRecordGAM + Directory = "../Configurations" //TODO: Enter directory path for prepro files. + InputSignals = { + CSV_LOAD = { + DataSource = EPICSCAInput + Type = uint32 + } + Filename = { + Alias = CSV_NAME + DataSource = EPICSCAInput + } + } + OutputSignals = { + PREP_TIME_WF = { + DataSource = DDB1 + } + MHVPS_PREP_WF = { + DataSource = DDB1 + } + BPS_PREP_WF = { + DataSource = DDB1 + } + APS_PREP_WF = { + DataSource = DDB1 + } + MCPS_PREP_WF = { + DataSource = DDB1 + } + GCPS_PREP_WF = { + DataSource = DDB1 + } + FHPS_PREP_WF = { + DataSource = DDB1 + } + } + } + +PreProgrammedGAM = { + Class = JAPreProgrammedGAM + Directory = "../Configurations" // TODO: Enter the directory path for prepro files. + PreProgrammedPeriodMs = 1 // Parameter update periods in ms. + InputSignals = { + CSV_LOAD = { + DataSource = EPICSCAInput + Type = uint32 + } + Filename = { + Alias = CSV_NAME + DataSource = EPICSCAInput + } + FHPS_REF = { + Alias = FHPS_AUTO_TAGV + DataSource = EPICSCAInput + Type = float32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + GYA_PREPRO_TIME = { + DataSource = DDB1 + Type = int32 + } + MHVPS_REF = { + DataSource = DDB1 + Type = float32 + } + BPS_REF = { + DataSource = DDB1 + Type = float32 + } + APS_REF = { + DataSource = DDB1 + Type = float32 + } + MCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + GCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + FHPS_PrePro = { + DataSource = DDB1 + Type = float32 + } + CSV_LOADED = { + DataSource = DDB1 + Type = uint32 + } + CSV_ERR = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM in WaitReady state. Check PLC_READY and CCPS_IN_OPERATION status. + +GoWaitPermitGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 1} //20201222 modified. In the past, 0 1. + Comparators = {EQUALS EQUALS} + InputSignals = { + CCPS_IN_OPERATION = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_READY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitPermit + } + } + + //GAM in WaitPermit state. Check Permit and States of Operation Modes. + +GoWaitReadyFromWaitPermitGAM = { + Class = JAMessageGAM + Operation = OR + ExpectedIntValues = {0 0} + Comparators = {EQUALS EQUALS} + InputSignals = { + PLC_STANDBY = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_READY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitReady + } + } + +GoWaitHVONGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0 0 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON + } + } + +GoWaitHVON_PREP_GAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0 1 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON_PREP + } + } + +GoWaitHVON_SDN_GAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 0 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON_SDN + } + } + +GoWaitHVON_SDN_PREP_GAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 1 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON_SDN_PREP + } + } + + //GAM in WaitHVON_xx states. If PLC_READY is zero, goto WaitStandby. + +FromWaitHVONToWaitStandby = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0} + Comparators = {EQUALS} + InputSignals = { + PLC_READY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + //GAM in WaitHVON_xx states. If PLC_PERMIT is zero, goto WaitPermit. + +FromWaitHVONToWaitPermit = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0 0 0 0 0 0} //modified 20201222 + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} //modified 20201222 + InputSignals = { + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + //add 20201222 + APS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + MHVPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + APS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + }//20201222 + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitPermit + } + } + + // Check the selected mode, and check maximum pulse length. Use with a StateMachineGAM + +ModeLimitGAM = { + Class = JAModeControlGAM + InputSignals = { + PLC_MODE1 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD1_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_MODE2 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD2_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_MODE3 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD3_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_MODE4 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD4_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + Time = { + DataSource = DDB1 + Type = uint32 + } + HVInjection = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + MODE_SHOTLEN_FLAG = { + DataSource = DDB1 + Type = uint32 + } + } + } + + // State notify GAMs. These GAMs are in all WaitHVON states. + +writeBeamONStateGAM = { + Class = IOGAM + InputSignals = { + BEAM_ON_STAT = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + BEAM_ON_STAT = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeHVArmedStateGAM = { + Class = IOGAM + InputSignals = { + HVARMED = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeHVInjectionStateGAM = { + Class = IOGAM + InputSignals = { + HVINJECTION = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeRFONStateGAM = { + Class = IOGAM + InputSignals = { + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + RFON = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeBeamONTimeGAM = { + Class = IOGAM + InputSignals = { + BeamONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + ELAPSED_TIME = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeRFONTimeGAM = { + Class = IOGAM + InputSignals = { + RFONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + BEAM_ON_TIME = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM for trianguler waveform generation. + +CCPSWaveformGAM = { + Class = JATriangleWaveGAM + InputSignals = { + Frequency = { + Alias = CCPS_OUTPUT_FREQ + DataSource = EPICSCAInput + Type = float32 + } + Amplitude = { + Alias = CCPS_OUTPUT_AMP + DataSource = EPICSCAInput + Type = float32 + } + Offset = { + Alias = CCPS_OUTPUT_OFFS + DataSource = EPICSCAInput + Type = float32 + } + PLCSTANDBY = { + Alias = PLC_STANDBY + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + CCPS_REF = { + DataSource = DDB1 + Type = float32 + } + } + } + //GAM for FHPS ramping up operation. + +FHPSSetpointGAM = { + Class = IOGAM + InputSignals = { + FHPS_AUTO_TAGV = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + FHPS_TAGV = { + DataSource = DDB1 + Type = float32 + } + } + } + +FHPSRampupGAM = { + Class = JARampupGAM + InputSignals = { + Currspv = { + Alias = FHPS_REF + DataSource = DDB1 + Type = float32 + } + Targetv = { + Alias = FHPS_TAGV + DataSource = DDB1 + Type = float32 + } + Time = { + Alias = FHPS_AUTO_TIME + DataSource = EPICSCAInput + Type = float32 + } + Start = { + Alias = FHPS_AUTO_START + DataSource = EPICSCAInput + Type = uint32 + } + PLC_STANDBY = { + Alias = PLC_STANDBY + DataSource = EPICSCAInput + Type = uint32 + } + MANUAL_AUTO = { + Alias = FHPS_MANM + DataSource = EPICSCAInput + Type = uint32 + } + FHPS_PrePro = { + DataSource = DDB1 + Type = float32 + } + } + OutputSignals = { + FHPS_REF = { + DataSource = DDB1 + Type = float32 + } + FHPS_AUTO_STAT = { + DataSource = DDB1 + Type = uint32 + } + } + } + //GAM for error handling. + // GAM that sets ERROR and STOP FLAGS for APS, BPS and MHVPS when we enter Error state and resets them when we leave Error state + +ErrorGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = AND + ExpectedValues = {1 0 0 0 0 0 0 0 0 0 0} + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} + Values = {0 0 0} + InputSignals = { + // Conditional signals + RESET_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + MHVPS_STOP_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + APS_STOP_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + BPS_STOP_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + MHVPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + APS_STOP = { + DataSource = DDB1 + Type = uint32 + } + BPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + } + } + +StopRequestGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {1 1 1 1 1 1 1 1 1 1} + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} + Values = {1} + InputSignals = { + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + StopRequest_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + StopRequest = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //Test whether board status are stable + +GAMDisplayDebug = { + Class = IOGAM + InputSignals = { + RESET_FLT = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + RESET_FLT_DISP = { + DataSource = Display + Type = uint32 + } + } + } + //Check PXI board status. + +PXI6259ErrorGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {0 0 0 0} + Comparators = {GREATER GREATER GREATER GREATER} + Values = {1} + InputSignals = { + // Conditional signals + PXI6259_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6259_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6528_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6528_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + PCF_FLT_6259_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT_6259 = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PXI6368Error03GAM = {// detect Hardware error (status number 3) for PXI6368 boards. + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {3 3} + Comparators = {EQUALS EQUALS} + Values = {1} + InputSignals = { + PXI6368_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6368_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + PCF_FLT_6368_ERRNO_03_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT_6368_ERRNO_03 = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PXI6368Error04GAM = {// detect No board error (status number 4) for PXI6368 boards. + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {4 4} + Comparators = {EQUALS EQUALS} + Values = {1} + InputSignals = { + PXI6368_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6368_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + PCF_FLT_6368_ERRNO_04_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT_6368_ERRNO_04 = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PXIErrorGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {0 0 0} + Comparators = {GREATER GREATER GREATER} + Values = {1} + InputSignals = { + PCF_FLT_6368_ERRNO_03 = { + DataSource = DDB1 + Type = uint32 + } + PCF_FLT_6368_ERRNO_04 = { + DataSource = DDB1 + Type = uint32 + } + PCF_FLT_6259 = { + DataSource = DDB1 + Type = uint32 + } + // Default values + PCF_FLT_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT = { + DataSource = DDB1 + Type = uint32 + } + } + } + + + +FromErrorToWaitStandbyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 0 0 0 0 0 0 0 0 0 0} + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} + InputSignals = { + RESET_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + // From any state to Error state. + +GoErrorGAM = { + Class = JAMessageGAM + Operation = OR + ExpectedIntValues = {1 1 1 1 1 1 1 1 1 1} + InputSignals = { + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoError + } + } + // Reset HVPS outputs. ToDo: Fix to access NI d.s. + +ResetPSsGAM = { + Class = ConstantGAM + OutputSignals = { + MHVPS_HVON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + BPS_HVON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + BPS_SWON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + APS_HVON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + APS_SWON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + //here + } + } + // Update status. ToDo: Fix to access NI d.s. + +ExitedHVArmedInjectionRFONGAM = { + Class = JAConditionalSignalUpdateGAM + Values = {0 0 0} + InputSignals = { + // Condition signals + // Default output values + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + RFON = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + RFON = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM for SDN communication.(ProcessWF:thread1, Subscribe/Publish:thread2) + +SDNCommandGAM = { + Class = IOGAM + InputSignals = { + Command = { + DataSource = SDNSubCommands + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 64 + Ranges = {{0 0}} + // TODO uncomment this for release/testing + //Frequency = 1 + } + ESDNTime = { + DataSource = SDNSubCommands + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + OutputSignals = { + Command = { + DataSource = RealTimeThreadAsyncBridge + Type = uint16 + } + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + } + } + +debugSDNGAM = {//for debug + Class = IOGAM + InputSignals = { + Command = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + Command_DISP = { + DataSource = Display + Type = float32 + } + ESDNTime_DISP = { + DataSource = Display + Type = uint32 + } + } + } + +SDNReplyGAM = { + Class = IOGAM + InputSignals = { + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + WaveformPacketID = { + DataSource = DDB1 + Type = uint16 + } + GYA_BPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_BPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_BPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_BPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_APS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_APS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_APS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_APS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC1_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC1_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC1_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC1_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC2_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC2_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC2_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC2_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_MHVPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_MHVPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_MHVPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_MHVPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_MCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYB_MCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYA_GCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYB_GCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYA_FHPS_MEAS_ACI = { + DataSource = EPICSCAInput + } + GYB_FHPS_MEAS_ACI = { + DataSource = EPICSCAInput + } + GYA_CCPS_MEAS_DCI = { + DataSource = EPICSCAInput + } + GYB_CCPS_MEAS_DCI = { + DataSource = EPICSCAInput + } + } + OutputSignals = { + ESDNTime = { + DataSource = SDNReply + Type = uint32 + Trigger = 1 + } + ReplyWaveformAck = { + DataSource = SDNReply + Type = uint16 + } + GYA_BPS_MESVOLT = { + DataSource = SDNReply + } + GYB_BPS_MESVOLT = { + DataSource = SDNReply + } + GYA_BPS_MESCURR = { + DataSource = SDNReply + } + GYB_BPS_MESCURR = { + DataSource = SDNReply + } + GYA_APS_MESVOLT = { + DataSource = SDNReply + } + GYB_APS_MESVOLT = { + DataSource = SDNReply + } + GYA_APS_MESCURR = { + DataSource = SDNReply + } + GYB_APS_MESCURR = { + DataSource = SDNReply + } + GYA_ARC1_MESVOLT = { + DataSource = SDNReply + } + GYB_ARC1_MESVOLT = { + DataSource = SDNReply + } + GYA_ARC1_MESCURR = { + DataSource = SDNReply + } + GYB_ARC1_MESCURR = { + DataSource = SDNReply + } + GYA_ARC2_MESVOLT = { + DataSource = SDNReply + } + GYB_ARC2_MESVOLT = { + DataSource = SDNReply + } + GYA_ARC2_MESCURR = { + DataSource = SDNReply + } + GYB_ARC2_MESCURR = { + DataSource = SDNReply + } + GYA_MHVPS_MESVOLT = { + DataSource = SDNReply + } + GYB_MHVPS_MESVOLT = { + DataSource = SDNReply + } + GYA_MHVPS_MESCURR = { + DataSource = SDNReply + } + GYB_MHVPS_MESCURR = { + DataSource = SDNReply + } + GYA_MCPS_CURR_MON = { + DataSource = SDNReply + } + GYB_MCPS_CURR_MON = { + DataSource = SDNReply + } + GYA_GCPS_CURR_MON = { + DataSource = SDNReply + } + GYB_GCPS_CURR_MON = { + DataSource = SDNReply + } + GYA_FHPS_MEAS_ACI = { + DataSource = SDNReply + } + GYB_FHPS_MEAS_ACI = { + DataSource = SDNReply + } + GYA_CCPS_MEAS_DCI = { + DataSource = SDNReply + } + GYB_CCPS_MEAS_DCI = { + DataSource = SDNReply + } + } + } + //Write SDN waveform data into PS setpoint PV. + + // Timer for SDN thread. + +TimeSDNGAM = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = TimerSDN + Type = uint32 + } + Counter = { + DataSource = TimerSDN + Type = uint32 + Frequency = 1000 //operation:1k(=1ms cyc), debug:10 + } + } + OutputSignals = { + TimeSDN = { + DataSource = DDB1 + Type = uint32 + } + CounterSDN = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM for realtime statemachine + +Timer100kHzGAM = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = Timer + Type = uint32 + } + Counter = { + DataSource = Timer + Type = uint32 + Frequency = 200000 //operation:10k(=100us cyc) + //Frequency = 100000 //operation:100k(=10us cyc) + } + RTThreadPerf = { + DataSource = Timings + Alias = "WaitHVON.Thread3_CycleTime" + Type = uint32 + } + } + OutputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerf = { + DataSource = DDB1 + Type = uint32 + } + } + } + + // Digital Output port access. + // EPICS PV to one uint8 variable + +NI6528P3GAM = { + Class = JABitSumGAM + InputSignals = { + APS_HVON = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_SWON = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_STOP = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_HVON = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_SWON = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_STOP = { + DataSource = EPICSCAInput + Type = uint32 + } + BEAM_ON_STAT = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV5 = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + NI6528P3CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P4GAM = { + Class = JABitSumGAM + InputSignals = { + DO_REV6 = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV7 = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV8 = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_HVON = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_STOP = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_MODSW = { + DataSource = EPICSCAInput + Type = uint32 + } + PCF_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + HVARMED = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + NI6528P4CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P5GAM = { + Class = JABitSumGAM + InputSignals = { + HVINJECTION = { + DataSource = EPICSCAInput + Type = uint32 + } + RFON = { + DataSource = EPICSCAInput + Type = uint32 + } + FHPS_RU = { + DataSource = EPICSCAInput + Type = uint32 + } + SCM_RU = { + DataSource = EPICSCAInput + Type = uint32 + } + SCM_RD = { + DataSource = EPICSCAInput + Type = uint32 + } + CCPS_IN_OPERATION = { + DataSource = EPICSCAInput + Type = uint32 + } + NONE1 = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + NONE2 = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + NI6528P5CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + // reversed uint8 variable (value to write on port.) + +NI6528P3PV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P3CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P3PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P4PV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P4CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P4PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P5PV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P5CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P5PortValue = { + DataSource = NI6528P5 + Type = uint8 + } + } + } + // write a uint8 port value to PXI data source. + +NI6528P3WriteGAM = { + Class = IOGAM + InputSignals = { + NI6528P3PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P3Value = { + DataSource = NI6528P3 + Type = uint8 + } + } + } + +NI6528P4WriteGAM = { + Class = IOGAM + InputSignals = { + NI6528P4PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P4Value = { + DataSource = NI6528P4 + Type = uint8 + } + } + } + + //Thread3 pulse parameter EPICS PVs read. + +GAMEPICSCA = { + Class = IOGAM + InputSignals = { + MHVPS_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_HVON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_SWON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_HVON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_SWON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + SHOTLEN = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ON = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + MHVPS_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + SHOTLEN = { + DataSource = DDB1 + Type = uint32 + } + PLC_ON = { + DataSource = DDB1 + Type = uint32 + } + } + } + + // Real-Time state machine GAMs + +GAMRealTimeStateMachine = { + Class = JARTStateMachineGAM + ConditionTrigger = 1 + mhvps_hvon = 4 + aps_hvon = 1 + aps_swon = 16 + bps_hvon = 2 + bps_swon = 8 + InputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + PLC_ON = { + DataSource = DDB1 + Type = uint32 + } + MHVPS_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + SHOTLEN = { + DataSource = DDB1 + Type = uint32 + } + StopRequest = { + DataSource = DDB1 + Type = uint32 + } + MODE_SHOTLEN_FLAG = { + DataSource = DDB1 + Type = uint32 + } + SHORT_PULSE_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + //Add 20210120 + MHVPS_MODSW = { + DataSource = EPICSCAInput + Type = uint32 + } + //Add 20210121 + DO_REV6 = { + DataSource = EPICSCAInput + Type = uint32 + } + + } + OutputSignals = { + RTSMValue = { + DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + BEAM_ON_STAT = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVARMED = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVINJECTION = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BeamONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + SHOT_ID = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + //Added 20201117 + APS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + APS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + MHVPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + NI6259Value = { + DataSource = NI6259 + //DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + NI6528P3Value = { + DataSource = NI6528P3 + //DataSource = DDB1 + Type = uint8 + } + NI6528P4Value = { + DataSource = NI6528P4 + //DataSource = DDB1 + Type = uint8 + } + } + } + +GAMSDNRealTimeStateMachine = { + Class = JASDNRTStateMachineGAM + ConditionTrigger = 1 + mhvps_hvon = 4 + aps_hvon = 1 + aps_swon = 16 + bps_hvon = 2 + bps_swon = 8 + InputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + PLC_ON = { + DataSource = DDB1 + Type = uint32 + } + MHVPS_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + SHOTLEN = { + DataSource = DDB1 + Type = uint32 + } + StopRequest = { + DataSource = DDB1 + Type = uint32 + } + MODE_SHOTLEN_FLAG = { + DataSource = DDB1 + Type = uint32 + } + Command = { + DataSource = RealTimeThreadAsyncBridge + Type = uint16 + } + + } + OutputSignals = { + RTSMValue = { + DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + BeamON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVARMED = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVINJECTION = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BeamONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + SHOT_ID = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + } + + //Terminal Interface reads three inputs. + // INPUTs: StateMahine Value, NI6528P3Value and NI6528P4Value + // OUTPUTs: Each NIxxx data sources. + +terminalInterfaceGAM = { + Class = JATerminalInterfaceGAM + mhvps_hvon_term = 4 + aps_hvon_term = 1 + aps_swon_term = 16 + bps_hvon_term = 2 + bps_swon_term = 8 + InputSignals = { + MHVPS_HVON = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON = { + DataSource = DDB1 + Type = uint32 + } + SHORT_PULSE_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + //Input signals about HW terminal. + RTSMValue = { + DataSource = DDB1 + Type = uint32 + } + NI6528P3CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + NI6528P4CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6259Value = { + DataSource = NI6259 + //DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + NI6528P3Value = { + DataSource = NI6528P3 + //DataSource = DDB1 + Type = uint8 + } + NI6528P4Value = { + DataSource = NI6528P4 + //DataSource = DDB1 + Type = uint8 + } + } + } + + // Switching AO port source between internal variable and EPICS PV. + +choiseGAM = { + Class = JASourceChoiseGAM + numberOfPVs = 5 + InputSignals = { + BPS_REF = { + DataSource = DDB1 + Type = float32 + } + BPS_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + BPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + APS_REF = { + DataSource = DDB1 + Type = float32 + } + APS_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + APS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + MHVPS_REF = { + DataSource = DDB1 + Type = float32 + } + MHVPS_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + MHVPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + MCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + MCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + MCPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + GCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + GCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + GCPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + } + OutputSignals = { + BPS_OUT = { + DataSource = DDB1 + Type = float32 + } + APS_OUT = { + DataSource = DDB1 + Type = float32 + } + MHVPS_OUT = { + DataSource = DDB1 + Type = float32 + } + MCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + GCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + } + } + + //debug + +debugTimerGAM = { + Class = IOGAM + InputSignals = { + Time1kHz = { + DataSource = DDB1 + Type = uint32 + } + TimeSDN = { + DataSource = DDB1 + Type = uint32 + } + Time = { + DataSource = DDB1 + Type = uint32 + } + Time1Hz = { + DataSource = DDB1 + Type = uint32 + } + + } + OutputSignals = { + T1_time = { + DataSource = Display + Type = uint32 + } + T2_time = { + DataSource = Display + Type = uint32 + } + T3_time = { + DataSource = Display + Type = uint32 + } + T4_time = { + DataSource = Display + Type = uint32 + } + } + } + +GAMExecTime = {//debug + Class = IOGAM + InputSignals = { + GAMEPICSCA_ExecTime = { + DataSource = Timings + Type = uint32 + } + StopRequestGAM_ExecTime = { + DataSource = Timings + Type = uint32 + } + ModeLimitGAM_ExecTime = { + DataSource = Timings + Type = uint32 + } + NI6528P3GAM_ExecTime = { + DataSource = Timings + Type = uint32 + } + terminalInterfaceGAM_ExecTime = { + DataSource = Timings + Type = uint32 + } + GAMRealTimeStateMachine_ExecTime = { + DataSource = Timings + Type = uint32 + } + + } + OutputSignals = { + GAMEPICSCA_ExecTime = { + DataSource = Display + Type = uint32 + } + StopRequestGAM_ExecTime = { + DataSource = Display + Type = uint32 + } + ModeLimitGAM_ExecTime = { + DataSource = Display + Type = uint32 + } + NI6528P3GAM_ExecTime = { + DataSource = Display + Type = uint32 + } + terminalInterfaceGAM_ExecTime = { + DataSource = Display + Type = uint32 + } + GAMRealTimeStateMachine_ExecTime = { + DataSource = Display + Type = uint32 + } + } + } + + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + AllowNoProducers = 1 + ResetUnusedVariablesAtStateChange = 0 + } + // Timer for thread 1 (Normal RT state execution cycle.) + +Timer1kHz = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x100 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + +TimerSDN = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x200 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + +Timer10Hz = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x800 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + // Timer for thread 3 (RTStateMachineGAM execution cycle.) + +Timer = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x400 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + + +Timings = { + Class = TimingDataSource + } + +Display = { + Class = LoggerDataSource + } + // for data exechange between threads. + +RealTimeThreadAsyncBridge = { + Class = RealTimeThreadAsyncBridge + NumberOfBuffers = 20 + } + // for access ECPIS PV. + +EPICSCAInput = { + Class = "EPICSCA::EPICSCAInput" + CPUMask = "0x100" //change from 200 + StackSize = "10000000" + Signals = { + // PV for manually setting + BPS_MM = { + PVName = "EC-GN-P01-PB1F:STAT-MANM" + Type = uint32 + } + BPS_MANUAL = { + PVName = "EC-GN-P01-PB1F:PSU1000-EREF-MSP" + Type = float32 + } + APS_MM = { + PVName = "EC-GN-P01-PA1F:STAT-MANM" + Type = uint32 + } + APS_MANUAL = { + PVName = "EC-GN-P01-PA1F:PSU3000-EREF-MSP" + Type = float32 + } + MHVPS_MANUAL = { + PVName = "EC-GN-P01-PMF:PSU0000-EREF-MSP" + Type = float32 + } + MHVPS_MM = { + PVName = "EC-GN-P01-PMF:STAT-MANM" + Type = uint32 + } + // Analog Input PVs. + GYA_BPS_MESVOLT = { + PVName = "EC-GN-P01-PB1F:PSU1000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_BPS_MESVOLT = { + PVName = "EC-GN-P01-PB2F:PSU2000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_BPS_MESCURR = { + PVName = "EC-GN-P01-PB1F:PSU1000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_BPS_MESCURR = { + PVName = "EC-GN-P01-PB2F:PSU2000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_APS_MESVOLT = { + PVName = "EC-GN-P01-PA1F:PSU3000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_APS_MESVOLT = { + PVName = "EC-GN-P01-PA2F:PSU4000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_APS_MESCURR = { + PVName = "EC-GN-P01-PA1F:PSU3000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_APS_MESCURR = { + PVName = "EC-GN-P01-PA2F:PSU4000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC1_MESVOLT = { + PVName = "EC-GN-P01-GAF:MOE2810-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC1_MESVOLT = { + PVName = "EC-GN-P01-GBF:MOE2810-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC1_MESCURR = { + PVName = "EC-GN-P01-GAF:MOE2820-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC1_MESCURR = { + PVName = "EC-GN-P01-GBF:MOE2820-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC2_MESVOLT = { + PVName = "EC-GN-P01-GAF:MOE2830-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC2_MESVOLT = { + PVName = "EC-GN-P01-GBF:MOE2830-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC2_MESCURR = { + PVName = "EC-GN-P01-GAF:MRF2910-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC2_MESCURR = { + PVName = "EC-GN-P01-GBF:MRF2910-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_MHVPS_MESVOLT = { + PVName = "EC-GN-P01-PMF:PSU0000-ET-GA" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_MHVPS_MESVOLT = { + PVName = "EC-GN-P01-PMF:PSU0000-ET-GB" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_MHVPS_MESCURR = { + PVName = "EC-GN-P01-PMF:PSU0000-IT-GA" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_MHVPS_MESCURR = { + PVName = "EC-GN-P01-PMF:PSU0000-IT-GB" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + + //Digital Input PVs in Signal-Variable tab. + APS_READY = { + PVName = "EC-GN-P01-PA1F:PSU3000-YSTA" + Type = uint32 + } + GYA_APS_FLT = { + PVName = "EC-GN-P01-PA1F:PSU3000-YFLT" + Type = uint32 + } + GYB_APS_FLT = { + PVName = "EC-GN-P01-PA2F:PSU4000-YFLT" + Type = uint32 + } + BPS_READY = { + PVName = "EC-GN-P01-PB1F:PSU1000-YSTA" + Type = uint32 + } + GYA_BPS_FLT = { + PVName = "EC-GN-P01-PB1F:PSU1000-YFLT" + Type = uint32 + } + GYB_BPS_FLT = { + PVName = "EC-GN-P01-PB2F:PSU2000-YFLT" + Type = uint32 + } + MHVPS_OV = { + PVName = "EC-GN-P01-GAFP:FMC4310-YFLT-OC" + Type = uint32 + } + MHVPS_OC = { + PVName = "EC-GN-P01-GAFP:FMC4310-YFLT-OV" + Type = uint32 + } + MHVPS_FLT = { + PVName = "EC-GN-P01-PMF:PSU0000-YFLT" + Type = uint32 + } + MHVPS_READY = { + PVName = "EC-GN-P01-PMF:PSU0000-TYSTA" + Type = uint32 + } + MHVPS_MODON = { + PVName = "EC-GN-P01-GPF:PSU0000-YSTA-MOD" + Type = uint32 + } + MIS_ITL = { + PVName = "EC-GN-P01-GAFP:FMC4310-YTRP" + Type = uint32 + } + MISB_ITL = { + PVName = "EC-GN-P01-GBFP:FMC4310-YTRP" + Type = uint32 + } + PLC_ITL = { + PVName = "EC-GN-P01-GPS:PLC4110-YTRP" + Type = uint32 + } + PLC_STANDBY = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-ST1R" + Type = uint32 + } + PLC_READY = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-ST2R" + Type = uint32 + } + PLC_ON = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-ST3R" + Type = uint32 + } + PLC_MODE1 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD1" + Type = uint32 + } + PLC_MODE2 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD2" + Type = uint32 + } + PLC_MODE3 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD3" + Type = uint32 + } + PLC_MODE4 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD4" + Type = uint32 + } + PLC_PERMIT = { + PVName = "EC-GN-P01-GPS:PLC4110-CON-GY1PRM" + Type = uint32 + } + PLC_SELECT = { + PVName = "EC-GN-P01-GPS:PLC4110-CON-OPGY1" + Type = uint32 + } + PLC_SYNCMODE = { + PVName = "EC-GN-P01-GPS:PLC4110-YSTA-MPSS" + Type = uint32 + } + PLC_CCPSON = { + PVName = "EC-GN-P01-GPS:PLC4110-YON-CCPS1" + Type = uint32 + } + EXT_TRIG = { + PVName = "EC-GN-P01-GAF:DIO4900-YON" + Type = uint32 + } + + //Digital Output PVs in Variables-signal tab + APS_HVON = { + PVName = "EC-GN-P01-PA1F:PSU3000-CON-HV" + Type = uint32 + } + APS_SWON = { + PVName = "EC-GN-P01-PA1F:PSU3000-CON-SW" + Type = uint32 + } + APS_STOP = { + PVName = "EC-GN-P01-PA1F:PSU3000-CTRP" + Type = uint32 + } + BPS_HVON = { + PVName = "EC-GN-P01-PB1F:PSU1000-CON-HV" + Type = uint32 + } + BPS_SWON = { + PVName = "EC-GN-P01-PB1F:PSU1000-CON-SW" + Type = uint32 + } + BPS_STOP = { + PVName = "EC-GN-P01-PB1F:PSU1000-CTRP" + Type = uint32 + } + BEAM_ON_STAT = { + PVName = "EC-GN-P01-GAFP:FMC4310-YSTA-GAOP" + Type = uint32 + } + DO_REV5 = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV5" + Type = uint32 + } + DO_REV6 = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV6" + Type = uint32 + } + DO_REV7 = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV7" + Type = uint32 + } + DO_REV8 = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV8" + Type = uint32 + } + MHVPS_HVON = { + PVName = "EC-GN-P01-PMF:PSU0000-CON-SW" + Type = uint32 + } + MHVPS_STOP = { + PVName = "EC-GN-P01-PMF:PSU0000-COFF" + Type = uint32 + } + MHVPS_MODSW = { + PVName = "EC-GN-P01-PMF:PSU0000-CON-MOD" + Type = uint32 + } + PCF_FLT = { + PVName = "EC-GN-P01-GPF:PCF4210-CTRP" + Type = uint32 + } + HVARMED = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA1" + Type = uint32 + } + HVINJECTION = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA2" + Type = uint32 + } + RFON = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA3" + Type = uint32 + } + FHPS_RU = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP" + Type = uint32 + } + SCM_RU = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP" + Type = uint32 + } + SCM_RD = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN" + Type = uint32 + } + CCPS_IN_OPERATION = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-TR" + Type = uint32 + } + //Input PVs in Variables-Operation tab. + PREP_MODE = { + PVName = "EC-GN-P01-GAF:STAT-PREP-MODE" + Type = uint32 + } + SHORT_PULSE_MODE = { + PVName = "EC-GN-P01-GAF:STAT-SHORT-PULSE" + Type = uint32 + } + + MHVPS_DT = { + PVName = "EC-GN-P01-PMF:STAT-DT-HVON" + Type = uint32 + } + APS_HVON_DT = { + PVName = "EC-GN-P01-PA1F:STAT-DT-HVON" + Type = uint32 + } + APS_SWON_DT = { + PVName = "EC-GN-P01-PA1F:STAT-DT-SWON" + Type = uint32 + } + BPS_HVON_DT = { + PVName = "EC-GN-P01-PB1F:STAT-DT-HVON" + Type = uint32 + } + BPS_SWON_DT = { + PVName = "EC-GN-P01-PB1F:STAT-DT-SWON" + Type = uint32 + } + SHOTLEN = { + PVName = "EC-GN-P01-GAF:STAT-DT-SHOTLEN" + Type = uint32 + } + + MD1_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD1-LIM" + Type = uint32 + } + MD2_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD2-LIM" + Type = uint32 + } + MD3_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD3-LIM" + Type = uint32 + } + MD4_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD4-LIM" + Type = uint32 + } + + FHPS_MANM = { + PVName = "EC-GN-P01-GAF-FHPS:STAT-MANM" + Type = uint32 + } + + CSV_LOAD = { + PVName = "EC-GN-P01-GAF:STAT-CSV-LOAD" + Type = uint32 + } + CSV_NAME = { + PVName = "EC-GN-P01-GAF:STAT-CSV-NAME" + Type = char8 + NumberOfElements = 40 + } + RESET_FLT = { + PVName = "EC-GN-P01-GPF:STAT-RST-FLT" + //PVName = "EC-GN-P01-GPS-MEM:CMD-CONALARMRESET-HMI" + Type = uint32 + } + + //Input PVs in Variables-JASTEC tab. + MCPS_ACT_SP = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-ACT-SET-MI" + Type = uint32 + } + MCPS_TRG_CURR_MANUAL = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MI" + Type = float32 + } + MCPS_ACT_RB = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB" + Type = uint32 + } + MCPS_CURR_RB = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-RB" + Type = uint32 + } + GYA_MCPS_CURR_MON = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON" + Type = float32 + } + GYB_MCPS_CURR_MON = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON" + Type = float32 + } + MCPS_VOLT_MON = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-VOLT-MON" + Type = uint32 + } + MCPS_SWP_RB = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-SWP-RB" + Type = uint32 + } + MCPS_SWP_LIM = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-SWP-LIM" + Type = uint32 + } + MCPS_ERR = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-ERR" + Type = uint32 + } + MCPS_MM = { + PVName = "EC-GN-P01-GAF-MCPS:STAT-MANM" + Type = uint32 + } + //GCPS PVs + GCPS_ACT_SP = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MI" + Type = uint32 + } + GCPS_TRG_CURR_MANUAL = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MI" + Type = float32 + } + GCPS_ACT_RB = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB" + Type = uint32 + } + GCPS_CURR_RB = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-RB" + Type = uint32 + } + GYA_GCPS_CURR_MON = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON" + Type = float32 + } + GYB_GCPS_CURR_MON = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON" + Type = float32 + } + GCPS_VOLT_MON = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-VOLT-MON" + Type = uint32 + } + GCPS_SWP_RB = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-SWP-RB" + Type = uint32 + } + GCPS_SWP_LIM = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-SWP-LIM" + Type = uint32 + } + GCPS_ERR = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-ERR" + Type = uint32 + } + GCPS_MM = { + PVName = "EC-GN-P01-GAF-GCPS:STAT-MANM" + Type = uint32 + } + //Input PVs in Variables-kikusui tab. + FHPS_REM_RB = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-REM-RB" + Type = uint32 + } + FHPS_OUTON_RB = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB" + Type = uint32 + } + FHPS_CURR_RB = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-CURR-RB" + Type = uint32 + } + FHPS_ACV_RB = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-ACV-RB" + Type = uint32 + } + FHPS_FRQ_RB = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-FRQ-RB" + Type = uint32 + } + FHPS_SOUR_ON_RB = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-RB" + Type = uint32 + } + FHPS_MEAS_ACV = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV" + Type = float32 + } + GYA_FHPS_MEAS_ACI = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACI" + Type = float32 + } + GYB_FHPS_MEAS_ACI = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACI" + Type = float32 + } + FHPS_MEAS_ACP = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACP" + Type = uint32 + } + FHPS_MEAS_FRQ = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-FRQ" + Type = uint32 + } + FHPS_ERR = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-ERROR" + Type = uint32 + } + FHPS_AUTO_TAGV = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV" + Type = float32 + } + FHPS_AUTO_TIME = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-RU-TIME" + Type = float32 + } + FHPS_AUTO_START = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START" + Type = uint32 + } + + CCPS_REMLOC_RB = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-RB" + Type = uint32 + } + CCPS_OUTON_RB = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-OUTON-RB" + Type = uint32 + } + CCPS_CURR_RB = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-CURR-RB" + Type = uint32 + } + CCPS_DCV_RB = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-DCV-RB" + Type = uint32 + } + CCPS_RANG_RB = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-RANG-RB" + Type = uint32 + } + CCPS_SOUR_ON_RB = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-RB" + Type = uint32 + } + CCPS_MEAS_DCV = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCV" + Type = uint32 + } + GYA_CCPS_MEAS_DCI = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCI" + Type = float32 + } + GYB_CCPS_MEAS_DCI = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCI" + Type = float32 + } + CCPS_MEAS_DCP = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCP" + Type = uint32 + } + CCPS_ERR = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-ERROR" + Type = uint32 + } + CCPS_OUTPUT_AMP = { + PVName = "EC-GN-P01-GAF-CCPS:STAT-AMP" + Type = float32 + } + CCPS_OUTPUT_FREQ = { + PVName = "EC-GN-P01-GAF-CCPS:STAT-FREQ" + Type = float32 + } + CCPS_OUTPUT_OFFS = { + PVName = "EC-GN-P01-GAF-CCPS:STAT-OFFS" + Type = float32 + } + //PXI Board status PVs + PXI6259_0 = { + PVName = "EC-GN-HWCF:6259-0-STATUS" + Type = uint32 + } + PXI6259_1 = { + PVName = "EC-GN-HWCF:6259-1-STATUS" + Type = uint32 + } + PXI6528_0 = { + PVName = "EC-GN-HWCF:6528-0-STATUS" + Type = uint32 + } + PXI6528_1 = { + PVName = "EC-GN-HWCF:6528-1-STATUS" + Type = uint32 + } + PXI6368_0 = { + PVName = "EC-GN-HWCF:6368-0-STATUS" + Type = uint32 + } + PXI6368_1 = { + PVName = "EC-GN-HWCF:6368-1-STATUS" + Type = uint32 + } + } + } + +EPICSCAOutput = { + Class = "EPICSCA::EPICSCAOutput" + CPUMask = "0x100" //change from 0x200 + StackSize = "10000000" + NumberOfBuffers = 2 + Signals = { + PCF_STATE = { + PVName = "EC-GN-P01-GAF:STAT-SM" + Type = uint32 + } + //Analog Output PVs in Variables-signal tab. + FHPS_REF = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-EREF" + Type = float32 + } + BPS_REF = { + PVName = "EC-GN-P01-PB1F:PSU1000-EREF" + Type = float32 + } + APS_REF = { + PVName = "EC-GN-P01-PA1F:STAT-EREF-CONV.A" + Type = float32 + } + MHVPS_REF = { + PVName = "EC-GN-P01-PMF:STAT-EREF-CALC.A" + Type = float32 + } + + //Digital Output PVs in Variables-signal tab. + APS_STOP = { + PVName = "EC-GN-P01-PA1F:PSU3000-CTRP" + Type = uint32 + } + + BPS_STOP = { + PVName = "EC-GN-P01-PB1F:PSU1000-CTRP" + Type = uint32 + } + + BEAM_ON_STAT = { + PVName = "EC-GN-P01-GAFP:FMC4310-YSTA-GAOP" + Type = uint32 + } + + MHVPS_STOP = { + PVName = "EC-GN-P01-PMF:PSU0000-COFF" + Type = uint32 + } + PCF_FLT = { + PVName = "EC-GN-P01-GPF:PCF4210-CTRP" + Type = uint32 + } + HVARMED = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA1" + Type = uint32 + } + HVINJECTION = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA2" + Type = uint32 + } + RFON = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA3" + Type = uint32 + } + + //Output PVs in Variables-operation tab. + MHVPS_PREP_WF = { + PVName = "EC-GN-P01-PMF:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + + } + BPS_PREP_WF = { + PVName = "EC-GN-P01-PB1F:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + APS_PREP_WF = { + PVName = "EC-GN-P01-PA1F:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + FHPS_PREP_WF = { + PVName = "EC-GN-P01-GAF-FHPS:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + MCPS_PREP_WF = { + PVName = "EC-GN-P01-GAF-MCPS:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GCPS_PREP_WF = { + PVName = "EC-GN-P01-GAF-GCPS:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + PREP_TIME_WF = { + PVName = "EC-GN-P01-GAF:STAT-PREP-TIME-WF" + Type = int32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + BEAM_ON_TIME = { + PVName = "EC-GN-P01-GAF:STAT-BEAMON-TIME" + Type = uint32 + } + ELAPSED_TIME = { + PVName = "EC-GN-P01-GAF:STAT-ELAPSED" + Type = uint32 + } + SHOT_ID = { + PVName = "EC-GN-P01-GAF:STAT-SHOT-ID" + Type = uint32 + } + + CSV_LOADED = { + PVName = "EC-GN-P01-GAF:STAT-CSV-LOADED" + Type = uint32 + } + CSV_ERR = { + PVName = "EC-GN-P01-GAF:STAT-CSV-ERR" + Type = uint32 + } + + //Output PVs in Variables-jastec tab. + MCPS_TRG_CURR_SET = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MO" + Type = float32 + } + MCPS_ACT_SP = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MO" + Type = uint32 + } + GCPS_TRG_CURR_SET = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MO" + Type = float32 + } + GCPS_ACT_SP = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MO" + Type = uint32 + } + + //Output PVs in Variables-kikusui tab. + CCPS_REF = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-EREF" + Type = float32 + } + FHPS_AUTO_STAT = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-STAT" + Type = uint32 + } + //Add 20201117 + APS_HVON = { + PVName = "EC-GN-P01-PA1F:PSU3000-CON-HV" + Type = uint32 + } + APS_SWON = { + PVName = "EC-GN-P01-PA1F:PSU3000-CON-SW" + Type = uint32 + } + BPS_HVON = { + PVName = "EC-GN-P01-PB1F:PSU1000-CON-HV" + Type = uint32 + } + BPS_SWON = { + PVName = "EC-GN-P01-PB1F:PSU1000-CON-SW" + Type = uint32 + } + MHVPS_HVON = { + PVName = "EC-GN-P01-PMF:STAT-HVON-CALC.A" + Type = uint32 + } + } + } + // for ESDN packet subscription/publication. + +SDNSubCommands = { + Class = SDN::SDNSubscriber + Topic = ECPC2SCUJA + Interface = enp27s0f0 + CPUs = 0x200 //change from 100 + Locked = 1 + Timeout = 2 + Signals = { + Header = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + Command = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 64 + } + } + } + +SDNReply = { + Class = SDN::SDNPublisher + Topic = SCUJA2ECPC + Interface = enp27s0f0 + CPUs = 0x200 //changed from 0x100 + Locked = 1 + Signals = { + Header = { + Type = uint8 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ReplyStatus = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ReplyWaveformAck = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + //Status (26Bytes?) is not assigned + //GyrotronA measurements + //56Bytes are used as Gyrotron1 Measurements (verified on 2020/10/22) + GYA_MHVPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_MHVPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_BPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_BPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_APS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_APS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC1_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC1_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC2_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC2_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_MCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_GCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_FHPS_MEAS_ACI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_CCPS_MEAS_DCI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + //GyrotronB measurements + GYB_MHVPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_MHVPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_BPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_BPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_APS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_APS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC1_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC1_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC2_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC2_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_MCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_GCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_FHPS_MEAS_ACI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_CCPS_MEAS_DCI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + } + + // Direct HW accesses. Follwing device/port assignment must be consistent with actual wiring. + // NI6259.0 + // APS_SWON BoardId=0, PortId=3.0 + +NI6259 = { + Class = NI6259::NI6259DIO + DeviceName = "/dev/pxi6259" + BoardId = 1 + Signals = { + NI6259Value = { + Type = uint32 + Mask = 0xFF + PortId = 0 + } + } + } + + //NI6528 digital output has logic low == 0 == close relay. ((See Driver Manual.) + //When the program send ON signal, this program writes 0 on the data source. + +NI6528P3 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.1" + Port = 3 + NI6528P3Value = { + NI6528P3Value = { + Type = uint8 + } + } + } + //P3.0 APS_HVON + //P3.1 APS_SWON + //P3.2 APS_Shutdown + //P3.3 BPS_HVON + //P3.4 BPS_SWON + //P3.5 BPS_Shutdown + //P3.6 GY1_Beam_ON_status + //P3.7 RV5 _cRIO + + +NI6528P4 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.1" + Port = 4 + NI6528P4Value = { + NI6528P4Value = { + Type = uint8 + } + } + } + //P4.0 RV6 _cRIO + //P4.1 RV7 _cRIO + //P4.2 RV8 _cRIO + //P4.3 MHVPS_HVON + //P4.4 MHVPS_Shutdown + //P4.5 MHVPS_MOD + //P4.6 PCF_FLT + //P4.7 HVArmed + + +NI6528P5 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.1" + Port = 5 + NI6528P5Value = { + NI6528P5Value = { + Type = uint8 + } + } + } + //P5.0 HVInjection + //P5.1 RFON + //P5.2 FHPS_Rampup_complete + //P5.3 SCM_RU_Complete + //P5.4 SCM_RD_Complete + //P5.5 CCPS_IN_OPERATION + //P5.6 None + //P5.7 None + + } + +States = { + Class = ReferenceContainer + +Disabled = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM GoErrorGAM InDisabledGAM + GoWaitStandbyGAM choiseGAM MCPSGAM GCPSGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM} + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM } + CPUs = 0x400 + } + } + } + +WaitStandby = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM FHPSSetpointGAM FHPSRampupGAM InWaitStandbyGAM + choiseGAM MCPSGAM GCPSGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + GoDisabledGAM GoWaitReadyGAM GoErrorGAM } + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM } + CPUs = 0x400 + } + } + } + +WaitReady = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM WFRecordGAM PreProgrammedGAM FHPSSetpointGAM FHPSRampupGAM InWaitReadyGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + GoWaitPermitGAM GoWaitStandbyFromReadyGAM GoErrorGAM } + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM } + CPUs = 0x400 + } + } + } + +WaitPermit = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM WFRecordGAM PreProgrammedGAM FHPSSetpointGAM FHPSRampupGAM InWaitPermitGAM + choiseGAM EPICSOutputGAM GoWaitReadyFromWaitPermitGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + GoWaitHVONGAM GoWaitHVON_PREP_GAM GoWaitHVON_SDN_GAM GoWaitHVON_SDN_PREP_GAM GoErrorGAM } + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM } + CPUs = 0x400 + } + } + } + + //Real-Time state for HVPS sequence timing control. + +WaitHVON = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM FHPSSetpointGAM FHPSRampupGAM InWaitHVONGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM } + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM + GAMRealTimeStateMachine NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x400 + } +// +Thread4 = { +// Class = RealTimeThread +// Functions = {Timer10HzGAM GAMExecTime } +// CPUs = 0x800 +// } + } + } + +WaitHVON_SDN = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM FHPSRampupGAM InWaitHVON_SDNGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM } + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM + GAMSDNRealTimeStateMachine terminalInterfaceGAM NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x400 + } + } + } + +WaitHVON_PREP = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM PreProgrammedGAM FHPSRampupGAM InWaitHVON_PREPGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM } + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM + GAMRealTimeStateMachine NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x400 + } + } + } + +WaitHVON_SDN_PREP = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM PreProgrammedGAM FHPSRampupGAM InWaitHVON_SDN_PREPGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM} + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM + GAMSDNRealTimeStateMachine terminalInterfaceGAM NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x400 + } + } + } + + +Error = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM InErrorGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + ExitedHVArmedInjectionRFONGAM ResetPSsGAM + FromErrorToWaitStandbyGAM ErrorGAM choiseGAM EPICSOutputGAM FHPSSetpointGAM FHPSRampupGAM CCPSWaveformGAM} + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM } + CPUs = 0x400 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronB_FY19_P1.cfg b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronB_FY19_P1.cfg new file mode 100644 index 0000000..6fb3d04 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronB_FY19_P1.cfg @@ -0,0 +1,4946 @@ +// LoggerService node: See /var/log/messages file. +// +LoggerService = { +// Class = LoggerService +// CPUs = 0x8000 +// StackSize = 32768 +// NumberOfLogPages = 128 +// +SysLogger = { +// Class = SysLogger +// Format = "EtOoFmC" +// PrintKeys = 1 +// Ident = "JAGyA" +// } +// } + +// StateMachine node ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +Start = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +DISABLED = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITSTANDBY = { + Class = ReferenceContainer + +GoWaitReady = { + Class = StateMachineEvent + NextState = "WAITREADY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitReady + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoDisabled = { + Class = StateMachineEvent + NextState = "DISABLED" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Disabled + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITREADY = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITPERMIT = { + Class = ReferenceContainer + +GoWaitReady = { + Class = StateMachineEvent + NextState = "WAITREADY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitReady + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON = { + Class = StateMachineEvent + NextState = "WAITHVON" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON_SDN = { + Class = StateMachineEvent + NextState = "WAITHVON_SDN" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON_SDN + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON_PREP = { + Class = StateMachineEvent + NextState = "WAITHVON_PREP" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON_PREP + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON_SDN_PREP = { + Class = StateMachineEvent + NextState = "WAITHVON_SDN_PREP" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON_SDN_PREP + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + // HVPS sequence control states. + +WAITHVON = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITHVON_SDN = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITHVON_PREP = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITHVON_SDN_PREP = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + // Error State (Enter by HVPS errors) + +ERROR = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } +} + +// RealTime Application node ++JAGyrotronRTApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + //Timer GAM for thread 1. + +Timer1kHzGAM = { + Class = IOGAM + InputSignals = { + Counter = { + DataSource = Timer1kHz + Type = uint32 + Frequency = 1000 //Hz + } + Time = { + DataSource = Timer1kHz + Type = uint32 + } + } + OutputSignals = { + Counter1kHz = { + DataSource = DDB1 + Type = uint32 + } + Time1kHz = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM to update PCF state-machine state + +InErrorGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 1 + } + } + } + +InDisabledGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 2 + } + } + } + +InWaitStandbyGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 3 + } + } + } + +InWaitReadyGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 4 + } + } + } + +InWaitPermitGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 5 + } + } + } + +InWaitHVONGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 6 + } + } + } + +InWaitHVON_PREPGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 7 + } + } + } + +InWaitHVON_SDNGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 8 + } + } + } + +InWaitHVON_SDN_PREPGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 9 + } + } + } + + // Copy data from DDB1 to EPICSCAOutput DataSource. + +EPICSOutputGAM = { + Class = IOGAM + InputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + } + MCPS_ACT_SP = { + DataSource = DDB1 + Type = uint32 + } + GCPS_ACT_SP = { + DataSource = DDB1 + Type = uint32 + } + BPS_OUT = { + DataSource = DDB1 + Type = float32 + } + APS_OUT = { + DataSource = DDB1 + Type = float32 + } + MCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + GCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + FHPS_REF = { + DataSource = DDB1 + Type = float32 + } + CSV_LOADED = { + DataSource = DDB1 + Type = uint32 + } + CSV_ERR = { + DataSource = DDB1 + Type = uint32 + } + ELAPSED_TIME = { + DataSource = DDB1 + Type = uint32 + } + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + RFON = { + DataSource = DDB1 + Type = uint32 + } + MHVPS_OUT = { + DataSource = DDB1 + Type = float32 + } + PREP_TIME_WF = { + DataSource = DDB1 + Type = int32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + MHVPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + BPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + APS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + MCPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GCPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + FHPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + CCPS_REF = { + DataSource = DDB1 + Type = float32 + } + MHVPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + APS_STOP = { + DataSource = DDB1 + Type = uint32 + } + BPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + BEAM_ON_TIME = { + DataSource = DDB1 + Type = uint32 + } + PCF_FLT = { + DataSource = DDB1 + Type = uint32 + } + BEAM_ON_STAT = { + DataSource = DDB1 + Type = uint32 + } + SHOT_ID = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + FHPS_AUTO_STAT = { + DataSource = DDB1 + Type = uint32 + } + //Add 20201117 + APS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + APS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + MHVPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + PCF_STATE = { + DataSource = EPICSCAOutput + Type = uint32 + } + MCPS_ACT_SP = { + DataSource = EPICSCAOutput + Type = uint32 + } + GCPS_ACT_SP = { + DataSource = EPICSCAOutput + Type = uint32 + } + BPS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + APS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + MCPS_TRG_CURR_SET = { + DataSource = EPICSCAOutput + Type = float32 + } + GCPS_TRG_CURR_SET = { + DataSource = EPICSCAOutput + Type = float32 + } + FHPS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + CSV_LOADED = { + DataSource = EPICSCAOutput + Type = uint32 + } + CSV_ERR = { + DataSource = EPICSCAOutput + Type = uint32 + } + ELAPSED_TIME = { + DataSource = EPICSCAOutput + Type = uint32 + } + HVARMED = { + DataSource = EPICSCAOutput + Type = uint32 + } + HVINJECTION = { + DataSource = EPICSCAOutput + Type = uint32 + } + RFON = { + DataSource = EPICSCAOutput + Type = uint32 + } + + MHVPS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + PREP_TIME_WF = { + DataSource = EPICSCAOutput + } + MHVPS_PREP_WF = { + DataSource = EPICSCAOutput + } + BPS_PREP_WF = { + DataSource = EPICSCAOutput + } + APS_PREP_WF = { + DataSource = EPICSCAOutput + } + MCPS_PREP_WF = { + DataSource = EPICSCAOutput + } + GCPS_PREP_WF = { + DataSource = EPICSCAOutput + } + FHPS_PREP_WF = { + DataSource = EPICSCAOutput + } + CCPS_REF = { + DataSource = EPICSCAOutput + } + MHVPS_STOP = { + DataSource = EPICSCAOutput + Type = uint32 + } + APS_STOP = { + DataSource = EPICSCAOutput + Type = uint32 + } + BPS_STOP = { + DataSource = EPICSCAOutput + Type = uint32 + } + BEAM_ON_TIME = { + DataSource = EPICSCAOutput + Type = uint32 + } + PCF_FLT = { + DataSource = EPICSCAOutput + } + BEAM_ON_STAT = { + DataSource = EPICSCAOutput + } + SHOT_ID = { + DataSource = EPICSCAOutput + } + FHPS_AUTO_STAT = { + DataSource = EPICSCAOutput + } + //Added 20201117 + APS_HVON = { + DataSource = EPICSCAOutput + } + APS_SWON = { + DataSource = EPICSCAOutput + } + BPS_HVON = { + DataSource = EPICSCAOutput + } + BPS_SWON = { + DataSource = EPICSCAOutput + } + MHVPS_HVON = { + DataSource = EPICSCAOutput + } + } + } + + // Message GAM in Disabled state. + +GoWaitStandbyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1} + Comparators = {EQUALS} + InputSignals = { + PLC_SELECT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + +GoWaitStandbyFromReadyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0} + Comparators = {EQUALS} + InputSignals = { + PLC_STANDBY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + + // MCPS, GCPS PV to DDB1 + +GCPSGAM = { + Class = IOGAM + InputSignals = { + GCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + GCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + } + } + +MCPSGAM = { + Class = IOGAM + InputSignals = { + MCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + MCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + } + } + // Message GAM in Standby state. + +GoDisabledGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0} + Comparators = {EQUALS} + InputSignals = { + PLC_SELECT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoDisabled + } + } + + //GAM in WaitReady state. Check MCPS,GCPS,FHPS state for state transition. + +GoWaitReadyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {3 3 1} + ExpectedFloatValues = {0 0 0} + Comparators = {EQUALS GREATER EQUALS GREATER EQUALS GREATER} + InputSignals = { + MCPS_ACT_RB = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_MCPS_CURR_MON = { + DataSource = EPICSCAInput + Type = float32 + } + GCPS_ACT_RB = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_GCPS_CURR_MON = { + DataSource = EPICSCAInput + Type = float32 + } + FHPS_RU = { + DataSource = EPICSCAInput + Type = uint32 + } + FHPS_MEAS_ACV = { + DataSource = EPICSCAInput + Type = float32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitReady + } + } + + //GAM for prepro + +WFRecordGAM = { + Class = JAWFRecordGAM + Directory = "../Configurations" //TODO: Enter directory path for prepro files. + InputSignals = { + CSV_LOAD = { + DataSource = EPICSCAInput + Type = uint32 + } + Filename = { + Alias = CSV_NAME + DataSource = EPICSCAInput + } + } + OutputSignals = { + PREP_TIME_WF = { + DataSource = DDB1 + } + MHVPS_PREP_WF = { + DataSource = DDB1 + } + BPS_PREP_WF = { + DataSource = DDB1 + } + APS_PREP_WF = { + DataSource = DDB1 + } + MCPS_PREP_WF = { + DataSource = DDB1 + } + GCPS_PREP_WF = { + DataSource = DDB1 + } + FHPS_PREP_WF = { + DataSource = DDB1 + } + } + } + +PreProgrammedGAM = { + Class = JAPreProgrammedGAM + Directory = "../Configurations" // TODO: Enter the directory path for prepro files. + PreProgrammedPeriodMs = 1 // Parameter update periods in ms. + InputSignals = { + CSV_LOAD = { + DataSource = EPICSCAInput + Type = uint32 + } + Filename = { + Alias = CSV_NAME + DataSource = EPICSCAInput + } + FHPS_REF = { + Alias = FHPS_AUTO_TAGV + DataSource = EPICSCAInput + Type = float32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + GYA_PREPRO_TIME = { + DataSource = DDB1 + Type = int32 + } + MHVPS_REF = { + DataSource = DDB1 + Type = float32 + } + BPS_REF = { + DataSource = DDB1 + Type = float32 + } + APS_REF = { + DataSource = DDB1 + Type = float32 + } + MCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + GCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + FHPS_PrePro = { + DataSource = DDB1 + Type = float32 + } + CSV_LOADED = { + DataSource = DDB1 + Type = uint32 + } + CSV_ERR = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM in WaitReady state. Check PLC_READY and CCPS_IN_OPERATION status. + +GoWaitPermitGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 1} //20201222 modified. In the past, 0 1. + Comparators = {EQUALS EQUALS} + InputSignals = { + CCPS_IN_OPERATION = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_READY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitPermit + } + } + + //GAM in WaitPermit state. Check Permit and States of Operation Modes. + +GoWaitReadyFromWaitPermitGAM = { + Class = JAMessageGAM + Operation = OR + ExpectedIntValues = {0 0} + Comparators = {EQUALS EQUALS} + InputSignals = { + PLC_STANDBY = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_READY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitReady + } + } + +GoWaitHVONGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0 0 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON + } + } + +GoWaitHVON_PREP_GAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0 1 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON_PREP + } + } + +GoWaitHVON_SDN_GAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 0 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON_SDN + } + } + +GoWaitHVON_SDN_PREP_GAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 1 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON_SDN_PREP + } + } + + //GAM in WaitHVON_xx states. If PLC_READY is zero, goto WaitStandby. + +FromWaitHVONToWaitStandby = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0} + Comparators = {EQUALS} + InputSignals = { + PLC_READY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + //GAM in WaitHVON_xx states. If PLC_PERMIT is zero, goto WaitPermit. + +FromWaitHVONToWaitPermit = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0 0 0 0 0 0} //modified 20201222 + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} //modified 20201222 + InputSignals = { + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + //add 20201222 + APS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + MHVPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + APS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + }//20201222 + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitPermit + } + } + + // Check the selected mode, and check maximum pulse length. Use with a StateMachineGAM + +ModeLimitGAM = { + Class = JAModeControlGAM + InputSignals = { + PLC_MODE1 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD1_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_MODE2 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD2_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_MODE3 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD3_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_MODE4 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD4_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + Time = { + DataSource = DDB1 + Type = uint32 + } + HVInjection = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + MODE_SHOTLEN_FLAG = { + DataSource = DDB1 + Type = uint32 + } + } + } + + // State notify GAMs. These GAMs are in all WaitHVON states. + +writeBeamONStateGAM = { + Class = IOGAM + InputSignals = { + BEAM_ON_STAT = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + BEAM_ON_STAT = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeHVArmedStateGAM = { + Class = IOGAM + InputSignals = { + HVARMED = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeHVInjectionStateGAM = { + Class = IOGAM + InputSignals = { + HVINJECTION = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeRFONStateGAM = { + Class = IOGAM + InputSignals = { + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + RFON = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeBeamONTimeGAM = { + Class = IOGAM + InputSignals = { + BeamONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + ELAPSED_TIME = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeRFONTimeGAM = { + Class = IOGAM + InputSignals = { + RFONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + BEAM_ON_TIME = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM for trianguler waveform generation. + +CCPSWaveformGAM = { + Class = JATriangleWaveGAM + InputSignals = { + Frequency = { + Alias = CCPS_OUTPUT_FREQ + DataSource = EPICSCAInput + Type = float32 + } + Amplitude = { + Alias = CCPS_OUTPUT_AMP + DataSource = EPICSCAInput + Type = float32 + } + Offset = { + Alias = CCPS_OUTPUT_OFFS + DataSource = EPICSCAInput + Type = float32 + } + PLCSTANDBY = { + Alias = PLC_STANDBY + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + CCPS_REF = { + DataSource = DDB1 + Type = float32 + } + } + } + //GAM for FHPS ramping up operation. + +FHPSSetpointGAM = { + Class = IOGAM + InputSignals = { + FHPS_AUTO_TAGV = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + FHPS_TAGV = { + DataSource = DDB1 + Type = float32 + } + } + } + +FHPSRampupGAM = { + Class = JARampupGAM + InputSignals = { + Currspv = { + Alias = FHPS_REF + DataSource = DDB1 + Type = float32 + } + Targetv = { + Alias = FHPS_TAGV + DataSource = DDB1 + Type = float32 + } + Time = { + Alias = FHPS_AUTO_TIME + DataSource = EPICSCAInput + Type = float32 + } + Start = { + Alias = FHPS_AUTO_START + DataSource = EPICSCAInput + Type = uint32 + } + PLC_STANDBY = { + Alias = PLC_STANDBY + DataSource = EPICSCAInput + Type = uint32 + } + MANUAL_AUTO = { + Alias = FHPS_MANM + DataSource = EPICSCAInput + Type = uint32 + } + FHPS_PrePro = { + DataSource = DDB1 + Type = float32 + } + } + OutputSignals = { + FHPS_REF = { + DataSource = DDB1 + Type = float32 + } + FHPS_AUTO_STAT = { + DataSource = DDB1 + Type = uint32 + } + } + } + //GAM for error handling. + // GAM that sets ERROR and STOP FLAGS for APS, BPS and MHVPS when we enter Error state and resets them when we leave Error state + +ErrorGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = AND + ExpectedValues = {1 0 0 0 0 0 0 0 0 0 0} + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} + Values = {0 0 0} + InputSignals = { + // Conditional signals + RESET_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + MHVPS_STOP_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + APS_STOP_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + BPS_STOP_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + MHVPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + APS_STOP = { + DataSource = DDB1 + Type = uint32 + } + BPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + } + } + +StopRequestGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {1 1 1 1 1 1 1 1 1 1} + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} + Values = {1} + InputSignals = { + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + StopRequest_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + StopRequest = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //Test whether board status are stable + +GAMDisplayBoardStatus = { + Class = IOGAM + InputSignals = { + CCPS_OUTPUT_OFFS = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + CCPS_OUTPUT_FREQ_DISP = { + DataSource = Display + Type = float32 + } + } + } + //Check PXI board status. + +PXI6259ErrorGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {0 0 0 0} + Comparators = {GREATER GREATER GREATER GREATER} + Values = {1} + InputSignals = { + // Conditional signals + PXI6259_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6259_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6528_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6528_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + PCF_FLT_6259_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT_6259 = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PXI6368Error03GAM = {// detect Hardware error (status number 3) for PXI6368 boards. + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {3 3} + Comparators = {EQUALS EQUALS} + Values = {1} + InputSignals = { + PXI6368_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6368_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + PCF_FLT_6368_ERRNO_03_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT_6368_ERRNO_03 = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PXI6368Error04GAM = {// detect No board error (status number 4) for PXI6368 boards. + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {4 4} + Comparators = {EQUALS EQUALS} + Values = {1} + InputSignals = { + PXI6368_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6368_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + PCF_FLT_6368_ERRNO_04_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT_6368_ERRNO_04 = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PXIErrorGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {0 0 0} + Comparators = {GREATER GREATER GREATER} + Values = {1} + InputSignals = { + PCF_FLT_6368_ERRNO_03 = { + DataSource = DDB1 + Type = uint32 + } + PCF_FLT_6368_ERRNO_04 = { + DataSource = DDB1 + Type = uint32 + } + PCF_FLT_6259 = { + DataSource = DDB1 + Type = uint32 + } + // Default values + PCF_FLT_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT = { + DataSource = DDB1 + Type = uint32 + } + } + } + + + +FromErrorToWaitStandbyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 0 0 0 0 0 0 0 0 0 0} + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} + InputSignals = { + RESET_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + // From any state to Error state. + +GoErrorGAM = { + Class = JAMessageGAM + Operation = OR + ExpectedIntValues = {1 1 1 1 1 1 1 1 1 1} + InputSignals = { + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoError + } + } + // Reset HVPS outputs. ToDo: Fix to access NI d.s. + +ResetPSsGAM = { + Class = ConstantGAM + OutputSignals = { + MHVPS_HVON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + BPS_HVON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + BPS_SWON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + APS_HVON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + APS_SWON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + } + // Update status. ToDo: Fix to access NI d.s. + +ExitedHVArmedInjectionRFONGAM = { + Class = JAConditionalSignalUpdateGAM + Values = {0 0 0} + InputSignals = { + // Condition signals + // Default output values + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + RFON = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + RFON = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM for SDN communication.(ProcessWF:thread1, Subscribe/Publish:thread2) + +SDNCommandGAM = { + Class = IOGAM + InputSignals = { + Command = { + DataSource = SDNSubCommands + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 64 + Ranges = {{0 0}} + // TODO uncomment this for release/testing + //Frequency = 1 + } + ESDNTime = { + DataSource = SDNSubCommands + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + OutputSignals = { + Command = { + DataSource = RealTimeThreadAsyncBridge + Type = uint16 + } + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + } + } + + +SDNReplyGAM = { + Class = IOGAM + InputSignals = { + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + WaveformPacketID = { + DataSource = DDB1 + Type = uint16 + } + GYA_BPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_BPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_BPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_BPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_APS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_APS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_APS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_APS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC1_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC1_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC1_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC1_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC2_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC2_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC2_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC2_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_MHVPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_MHVPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_MHVPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_MHVPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_MCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYB_MCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYA_GCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYB_GCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYA_FHPS_MEAS_ACI = { + DataSource = EPICSCAInput + } + GYB_FHPS_MEAS_ACI = { + DataSource = EPICSCAInput + } + GYA_CCPS_MEAS_DCI = { + DataSource = EPICSCAInput + } + GYB_CCPS_MEAS_DCI = { + DataSource = EPICSCAInput + } + } + OutputSignals = { + ESDNTime = { + DataSource = SDNReply + Type = uint32 + Trigger = 1 + } + ReplyWaveformAck = { + DataSource = SDNReply + Type = uint16 + } + GYA_BPS_MESVOLT = { + DataSource = SDNReply + } + GYB_BPS_MESVOLT = { + DataSource = SDNReply + } + GYA_BPS_MESCURR = { + DataSource = SDNReply + } + GYB_BPS_MESCURR = { + DataSource = SDNReply + } + GYA_APS_MESVOLT = { + DataSource = SDNReply + } + GYB_APS_MESVOLT = { + DataSource = SDNReply + } + GYA_APS_MESCURR = { + DataSource = SDNReply + } + GYB_APS_MESCURR = { + DataSource = SDNReply + } + GYA_ARC1_MESVOLT = { + DataSource = SDNReply + } + GYB_ARC1_MESVOLT = { + DataSource = SDNReply + } + GYA_ARC1_MESCURR = { + DataSource = SDNReply + } + GYB_ARC1_MESCURR = { + DataSource = SDNReply + } + GYA_ARC2_MESVOLT = { + DataSource = SDNReply + } + GYB_ARC2_MESVOLT = { + DataSource = SDNReply + } + GYA_ARC2_MESCURR = { + DataSource = SDNReply + } + GYB_ARC2_MESCURR = { + DataSource = SDNReply + } + GYA_MHVPS_MESVOLT = { + DataSource = SDNReply + } + GYB_MHVPS_MESVOLT = { + DataSource = SDNReply + } + GYA_MHVPS_MESCURR = { + DataSource = SDNReply + } + GYB_MHVPS_MESCURR = { + DataSource = SDNReply + } + GYA_MCPS_CURR_MON = { + DataSource = SDNReply + } + GYB_MCPS_CURR_MON = { + DataSource = SDNReply + } + GYA_GCPS_CURR_MON = { + DataSource = SDNReply + } + GYB_GCPS_CURR_MON = { + DataSource = SDNReply + } + GYA_FHPS_MEAS_ACI = { + DataSource = SDNReply + } + GYB_FHPS_MEAS_ACI = { + DataSource = SDNReply + } + GYA_CCPS_MEAS_DCI = { + DataSource = SDNReply + } + GYB_CCPS_MEAS_DCI = { + DataSource = SDNReply + } + } + } + //Write SDN waveform data into PS setpoint PV. + + // Timer for SDN thread. + +TimeSDNGAM = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = TimerSDN + Type = uint32 + } + Counter = { + DataSource = TimerSDN + Type = uint32 + Frequency = 1000 //operation:1k(=1ms cyc), debug:10 + } + RTThreadPerf = { + DataSource = Timings + Alias = "WaitHVON.Thread3_CycleTime" + Type = uint32 + } + } + OutputSignals = { + TimeSDN = { + DataSource = DDB1 + Type = uint32 + } + CounterSDN = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerfSDN = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM for realtime statemachine + +Timer100kHzGAM = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = Timer + Type = uint32 + } + Counter = { + DataSource = Timer + Type = uint32 + Frequency = 200000 //operation:100k(=10us cyc), debug:10 + } + RTThreadPerf = { + DataSource = Timings + Alias = "WaitHVON.Thread3_CycleTime" + Type = uint32 + } + } + OutputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerf = { + DataSource = DDB1 + Type = uint32 + } + } + } + + // Digital Output port access. (These GAMs are different from GYA.) + // EPICS PV to one uint8 variable + +NI6528P3GAM = { + Class = JABitSumGAM + InputSignals = { + APS_HVON = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_SWON = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_STOP = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_HVON = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_SWON = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_STOP = { + DataSource = EPICSCAInput + Type = uint32 + } + BEAM_ON_STAT = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV5 = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + NI6528P3CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P4GAM = { + Class = JABitSumGAM + InputSignals = { + DO_REV6 = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV7 = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV8 = { + DataSource = EPICSCAInput + Type = uint32 + } + None1 = { + DataSource = DDB1 + Type = uint32 + Defualt = 0 + } + None2 = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + None3 = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + HVARMED = { + DataSource = EPICSCAInput + Type = uint32 + } + HVINJECTION = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + NI6528P4CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P4GYAGAM = { + Class = JABitSumGAM + InputSignals = { + DO_REV6_GYA = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV7_GYA = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV8_GYA = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_HVON = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_STOP = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_MODSW = { + DataSource = EPICSCAInput + Type = uint32 + } + PCF_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + HVARMED_GYA = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + NI6528P4GYACurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P5GAM = { + Class = JABitSumGAM + InputSignals = { + RFON = { + DataSource = EPICSCAInput + Type = uint32 + } + FHPS_RU = { + DataSource = EPICSCAInput + Type = uint32 + } + SCM_RU = { + DataSource = EPICSCAInput + Type = uint32 + } + CCPS_IN_OPERATION = { + DataSource = EPICSCAInput + Type = uint32 + } + REV2_PLC = { + DataSource = EPICSCAInput + Type = uint32 + } + REV3_PLC = { + DataSource = EPICSCAInput + Type = uint32 + } + None4 = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + None5 = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + NI6528P5CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + // reversed uint8 variable (value to write on port.) + +NI6528P3PV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P3CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P3PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P4PV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P4CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P4PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P4GYAPV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P4GYACurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P4GYAPortValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P5PV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P5CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P5PortValue = { + DataSource = NI6528P5 + Type = uint8 + } + } + } + // write a uint8 port value to PXI data source. + +NI6528P3WriteGAM = { + Class = IOGAM + InputSignals = { + NI6528P3PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P3Value = { + DataSource = NI6528P3 + Type = uint8 + } + } + } + +NI6528P4WriteGAM = { + Class = IOGAM + InputSignals = { + NI6528P4PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P4Value = { + DataSource = NI6528P4 + Type = uint8 + } + } + } + +NI6528P4GYAWriteGAM = { + Class = IOGAM + InputSignals = { + NI6528P4GYAPortValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P4GYAValue = { + DataSource = NI6528P4GYA + Type = uint8 + } + } + } + + //Thread3 pulse parameter EPICS PVs read. + +GAMEPICSCA = { + Class = IOGAM + InputSignals = { + MHVPS_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_HVON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_SWON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_HVON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_SWON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + SHOTLEN = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ON = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + MHVPS_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + SHOTLEN = { + DataSource = DDB1 + Type = uint32 + } + PLC_ON = { + DataSource = DDB1 + Type = uint32 + } + } + } + + // Real-Time state machine GAMs + +GAMRealTimeStateMachine = { + Class = JARTStateMachineGAM + ConditionTrigger = 1 + mhvps_hvon = 4 + aps_hvon = 1 + aps_swon = 16 + bps_hvon = 2 + bps_swon = 8 + InputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + PLC_ON = { + DataSource = DDB1 + Type = uint32 + } + MHVPS_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + SHOTLEN = { + DataSource = DDB1 + Type = uint32 + } + StopRequest = { + DataSource = DDB1 + Type = uint32 + } + MODE_SHOTLEN_FLAG = { + DataSource = DDB1 + Type = uint32 + } + SHORT_PULSE_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + //Add 20210120 + MHVPS_MODSW = { + DataSource = EPICSCAInput + Type = uint32 + } + //Add 20210120 + DO_REV6_GYA = { + DataSource = EPICSCAInput + Type = uint32 + } + + } + OutputSignals = { + RTSMValue = { + DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + BEAM_ON_STAT = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVARMED = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVINJECTION = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BeamONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + SHOT_ID = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + //Added 20201117 + APS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + APS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + MHVPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + NI6259Value = { + DataSource = NI6259 + //DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + NI6528P3Value = { + DataSource = NI6528P3 + //DataSource = DDB1 + Type = uint8 + } + NI6528P4GYAValue = { + DataSource = NI6528P4GYA + //DataSource = DDB1 + Type = uint8 + } + } + } + +GAMSDNRealTimeStateMachine = { + Class = JASDNRTStateMachineGAM + ConditionTrigger = 1 + mhvps_hvon = 4 + aps_hvon = 1 + aps_swon = 16 + bps_hvon = 2 + bps_swon = 8 + InputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + PLC_ON = { + DataSource = DDB1 + Type = uint32 + } + MHVPS_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + SHOTLEN = { + DataSource = DDB1 + Type = uint32 + } + StopRequest = { + DataSource = DDB1 + Type = uint32 + } + MODE_SHOTLEN_FLAG = { + DataSource = DDB1 + Type = uint32 + } + Command = { + DataSource = RealTimeThreadAsyncBridge + Type = uint16 + } + + } + OutputSignals = { + RTSMValue = { + DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + BeamON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVARMED = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVINJECTION = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BeamONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + SHOT_ID = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + } + + //Terminal Interface reads three inputs. + // INPUTs: StateMahine Value, NI6528P3Value and NI6528P4Value + // OUTPUTs: Each NIxxx data sources. + +terminalInterfaceGAM = { + Class = JATerminalInterfaceGAM + mhvps_hvon_term = 4 + aps_hvon_term = 1 + aps_swon_term = 16 + bps_hvon_term = 2 + bps_swon_term = 8 + InputSignals = { + MHVPS_HVON = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON = { + DataSource = DDB1 + Type = uint32 + } + SHORT_PULSE_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + //Input signals about HW terminal. + RTSMValue = { + DataSource = DDB1 + Type = uint32 + } + NI6528P3CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + NI6528P4GYACurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6259Value = { + DataSource = NI6259 + //DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + NI6528P3Value = { + DataSource = NI6528P3 + //DataSource = DDB1 + Type = uint8 + } + NI6528P4GYAValue = { + DataSource = NI6528P4GYA + //DataSource = DDB1 + Type = uint8 + } + } + } + + // Switching AO port source between internal variable and EPICS PV. + +choiseGAM = { + Class = JASourceChoiseGAM + numberOfPVs = 5 + InputSignals = { + BPS_REF = { + DataSource = DDB1 + Type = float32 + } + BPS_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + BPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + APS_REF = { + DataSource = DDB1 + Type = float32 + } + APS_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + APS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + MHVPS_REF = { + DataSource = DDB1 + Type = float32 + } + MHVPS_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + MHVPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + MCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + MCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + MCPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + GCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + GCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + GCPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + } + OutputSignals = { + BPS_OUT = { + DataSource = DDB1 + Type = float32 + } + APS_OUT = { + DataSource = DDB1 + Type = float32 + } + MHVPS_OUT = { + DataSource = DDB1 + Type = float32 + } + MCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + GCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + } + } + + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + AllowNoProducers = 1 + ResetUnusedVariablesAtStateChange = 0 + } + // Timer for thread 1 (Normal RT state execution cycle.) + +Timer1kHz = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x1000 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + +TimerSDN = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x2000 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + // Timer for thread 3 (RTStateMachineGAM execution cycle.) + +Timer = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x4000 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + + +Timings = { + Class = TimingDataSource + } + +Display = { + Class = LoggerDataSource + } + // for data exechange between threads. + +RealTimeThreadAsyncBridge = { + Class = RealTimeThreadAsyncBridge + NumberOfBuffers = 20 + } + // for access ECPIS PV. + +EPICSCAInput = { + Class = "EPICSCA::EPICSCAInput" + CPUMask = "0x1000" //change from 200 + StackSize = "10000000" + Signals = { + // PV for GYA(6528.1 port4) + DO_REV6_GYA = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV6" + Type = uint32 + } + DO_REV7_GYA = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV7" + Type = uint32 + } + DO_REV8_GYA = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV8" + Type = uint32 + } + HVARMED_GYA = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA1" + Type = uint32 + } + // PV for DO + REV2_PLC = { + PVName = "EC-GN-P01-GPS:PLC4110-RV2" + Type = uint32 + } + REV3_PLC = { + PVName = "EC-GN-P01-GPS:PLC4110-RV3" + Type = uint32 + } + // PV for manually setting + BPS_MM = { + PVName = "EC-GN-P01-PB2F:STAT-MANM" + Type = uint32 + } + BPS_MANUAL = { + PVName = "EC-GN-P01-PB2F:PSU2000-EREF-MSP" + Type = float32 + } + APS_MM = { + PVName = "EC-GN-P01-PA2F:STAT-MANM" + Type = uint32 + } + APS_MANUAL = { + PVName = "EC-GN-P01-PA2F:PSU4000-EREF-MSP" + Type = float32 + } + MHVPS_MANUAL = { + PVName = "EC-GN-P01-PMF:PSU0000-EREF-MSP" + Type = float32 + } + MHVPS_MM = { + PVName = "EC-GN-P01-PMF:STAT-MANM" + Type = uint32 + } + // Analog Input PVs. + GYA_BPS_MESVOLT = { + PVName = "EC-GN-P01-PB1F:PSU1000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_BPS_MESVOLT = { + PVName = "EC-GN-P01-PB2F:PSU2000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_BPS_MESCURR = { + PVName = "EC-GN-P01-PB1F:PSU1000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_BPS_MESCURR = { + PVName = "EC-GN-P01-PB2F:PSU2000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_APS_MESVOLT = { + PVName = "EC-GN-P01-PA1F:PSU3000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_APS_MESVOLT = { + PVName = "EC-GN-P01-PA2F:PSU4000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_APS_MESCURR = { + PVName = "EC-GN-P01-PA1F:PSU3000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_APS_MESCURR = { + PVName = "EC-GN-P01-PA2F:PSU4000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC1_MESVOLT = { + PVName = "EC-GN-P01-GAF:MOE2810-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC1_MESVOLT = { + PVName = "EC-GN-P01-GBF:MOE2810-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC1_MESCURR = { + PVName = "EC-GN-P01-GAF:MOE2820-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC1_MESCURR = { + PVName = "EC-GN-P01-GBF:MOE2820-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC2_MESVOLT = { + PVName = "EC-GN-P01-GAF:MOE2830-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC2_MESVOLT = { + PVName = "EC-GN-P01-GBF:MOE2830-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC2_MESCURR = { + PVName = "EC-GN-P01-GAF:MRF2910-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC2_MESCURR = { + PVName = "EC-GN-P01-GBF:MRF2910-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_MHVPS_MESVOLT = { + PVName = "EC-GN-P01-PMF:PSU0000-ET-GA" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_MHVPS_MESVOLT = { + PVName = "EC-GN-P01-PMF:PSU0000-ET-GB" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_MHVPS_MESCURR = { + PVName = "EC-GN-P01-PMF:PSU0000-IT-GA" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_MHVPS_MESCURR = { + PVName = "EC-GN-P01-PMF:PSU0000-IT-GB" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + + //Digital Input PVs in Signal-Variable tab. + APS_READY = { + PVName = "EC-GN-P01-PA2F:PSU4000-YSTA" + Type = uint32 + } + GYA_APS_FLT = { + PVName = "EC-GN-P01-PA1F:PSU3000-YFLT" + Type = uint32 + } + GYB_APS_FLT = { + PVName = "EC-GN-P01-PA2F:PSU4000-YFLT" + Type = uint32 + } + BPS_READY = { + PVName = "EC-GN-P01-PB2F:PSU2000-YSTA" + Type = uint32 + } + GYA_BPS_FLT = { + PVName = "EC-GN-P01-PB1F:PSU1000-YFLT" + Type = uint32 + } + GYB_BPS_FLT = { + PVName = "EC-GN-P01-PB2F:PSU2000-YFLT" + Type = uint32 + } + MHVPS_OV = { + PVName = "EC-GN-P01-GAFP:FMC4310-YFLT-OC" + Type = uint32 + } + MHVPS_OC = { + PVName = "EC-GN-P01-GAFP:FMC4310-YFLT-OV" + Type = uint32 + } + MHVPS_FLT = { + PVName = "EC-GN-P01-PMF:PSU0000-YFLT" + Type = uint32 + } + MHVPS_READY = { + PVName = "EC-GN-P01-PMF:PSU0000-TYSTA" + Type = uint32 + } + MHVPS_MODON = { + PVName = "EC-GN-P01-GPF:PSU0000-YSTA-MOD" + Type = uint32 + } + MIS_ITL = { + PVName = "EC-GN-P01-GAFP:FMC4310-YTRP" + Type = uint32 + } + MISB_ITL = { + PVName = "EC-GN-P01-GBFP:FMC4310-YTRP" + Type = uint32 + } + PLC_ITL = { + PVName = "EC-GN-P01-GPS:PLC4110-YTRP" + Type = uint32 + } + PLC_STANDBY = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-ST1R" + Type = uint32 + } + PLC_READY = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-ST2R" + Type = uint32 + } + PLC_ON = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-ST3R" + Type = uint32 + } + PLC_MODE1 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD1" + Type = uint32 + } + PLC_MODE2 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD2" + Type = uint32 + } + PLC_MODE3 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD3" + Type = uint32 + } + PLC_MODE4 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD4" + Type = uint32 + } + PLC_PERMIT = { + PVName = "EC-GN-P01-GPS:PLC4110-CON-GY2PRM" + Type = uint32 + } + PLC_SELECT = { + PVName = "EC-GN-P01-GPS:PLC4110-CON-OPGY2" + Type = uint32 + } + PLC_SYNCMODE = { + PVName = "EC-GN-P01-GPS:PLC4110-YSTA-MPSS" + Type = uint32 + } + PLC_CCPSON = { + PVName = "EC-GN-P01-GPS:PLC4110-YON-CCPS2" + Type = uint32 + } + EXT_TRIG = { + PVName = "EC-GN-P01-GBF:DIO4900-YON" + Type = uint32 + } + + //Digital Output PVs in Variables-signal tab + APS_HVON = { + PVName = "EC-GN-P01-PA2F:PSU4000-CON-HV" + Type = uint32 + } + APS_SWON = { + PVName = "EC-GN-P01-PA2F:PSU4000-CON-SW" + Type = uint32 + } + APS_STOP = { + PVName = "EC-GN-P01-PA2F:PSU4000-CTRP" + Type = uint32 + } + BPS_HVON = { + PVName = "EC-GN-P01-PB2F:PSU2000-CON-HV" + Type = uint32 + } + BPS_SWON = { + PVName = "EC-GN-P01-PB2F:PSU2000-CON-SW" + Type = uint32 + } + BPS_STOP = { + PVName = "EC-GN-P01-PB2F:PSU2000-CTRP" + Type = uint32 + } + BEAM_ON_STAT = { + PVName = "EC-GN-P01-GBFP:FMC4310-YSTA-GBOP" + Type = uint32 + } + DO_REV5 = { + PVName = "EC-GN-P01-GBFP:FMC4310-RV5" + Type = uint32 + } + DO_REV6 = { + PVName = "EC-GN-P01-GBFP:FMC4310-RV6" + Type = uint32 + } + DO_REV7 = { + PVName = "EC-GN-P01-GBFP:FMC4310-RV7" + Type = uint32 + } + DO_REV8 = { + PVName = "EC-GN-P01-GBFP:FMC4310-RV8" + Type = uint32 + } + MHVPS_HVON = { + PVName = "EC-GN-P01-PMF:PSU0000-CON-SW" + Type = uint32 + } + MHVPS_STOP = { + PVName = "EC-GN-P01-PMF:PSU0000-COFF" + Type = uint32 + } + MHVPS_MODSW = { + PVName = "EC-GN-P01-PMF:PSU0000-CON-MOD" + Type = uint32 + } + PCF_FLT = { + PVName = "EC-GN-P01-GPF:PCF4210-CTRP" + Type = uint32 + } + HVARMED = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GB1" + Type = uint32 + } + HVINJECTION = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GB2" + Type = uint32 + } + RFON = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GB3" + Type = uint32 + } + FHPS_RU = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP" + Type = uint32 + } + SCM_RU = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP" + Type = uint32 + } + SCM_RD = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-YTS-RDOWN" + Type = uint32 + } + CCPS_IN_OPERATION = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-TR" + Type = uint32 + } + //Input PVs in Variables-Operation tab. + PREP_MODE = { + PVName = "EC-GN-P01-GBF:STAT-PREP-MODE" + Type = uint32 + } + SHORT_PULSE_MODE = { + PVName = "EC-GN-P01-GBF:STAT-SHORT-PULSE" + Type = uint32 + } + + MHVPS_DT = { + PVName = "EC-GN-P01-PMF:STAT-DT-HVON" + Type = uint32 + } + APS_HVON_DT = { + PVName = "EC-GN-P01-PA2F:STAT-DT-HVON" + Type = uint32 + } + APS_SWON_DT = { + PVName = "EC-GN-P01-PA2F:STAT-DT-SWON" + Type = uint32 + } + BPS_HVON_DT = { + PVName = "EC-GN-P01-PB2F:STAT-DT-HVON" + Type = uint32 + } + BPS_SWON_DT = { + PVName = "EC-GN-P01-PB2F:STAT-DT-SWON" + Type = uint32 + } + SHOTLEN = { + PVName = "EC-GN-P01-GBF:STAT-DT-SHOTLEN" + Type = uint32 + } + + MD1_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD1-LIM" + Type = uint32 + } + MD2_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD2-LIM" + Type = uint32 + } + MD3_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD3-LIM" + Type = uint32 + } + MD4_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD4-LIM" + Type = uint32 + } + + FHPS_MANM = { + PVName = "EC-GN-P01-GBF-FHPS:STAT-MANM" + Type = uint32 + } + + CSV_LOAD = { + PVName = "EC-GN-P01-GBF:STAT-CSV-LOAD" + Type = uint32 + } + CSV_NAME = { + PVName = "EC-GN-P01-GBF:STAT-CSV-NAME" + Type = char8 + NumberOfElements = 40 + } + RESET_FLT = { + PVName = "EC-GN-P01-GPF:STAT-RST-FLT" + //PVName = "EC-GN-P01-GPS-MEM:CMD-CONALARMRESET-HMI" + Type = uint32 + } + + //Input PVs in Variables-JASTEC tab. + MCPS_ACT_SP = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-ACT-SET-MI" + Type = uint32 + } + MCPS_TRG_CURR_MANUAL = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MI" + Type = float32 + } + MCPS_ACT_RB = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB" + Type = uint32 + } + MCPS_CURR_RB = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-RB" + Type = uint32 + } + GYA_MCPS_CURR_MON = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON" + Type = float32 + } + GYB_MCPS_CURR_MON = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON" + Type = float32 + } + MCPS_VOLT_MON = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-VOLT-MON" + Type = uint32 + } + MCPS_SWP_RB = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-SWP-RB" + Type = uint32 + } + MCPS_SWP_LIM = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-SWP-LIM" + Type = uint32 + } + MCPS_ERR = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-ERR" + Type = uint32 + } + MCPS_MM = { + PVName = "EC-GN-P01-GBF-MCPS:STAT-MANM" + Type = uint32 + } + //GCPS PVs + GCPS_ACT_SP = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MI" + Type = uint32 + } + GCPS_TRG_CURR_MANUAL = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MI" + Type = float32 + } + GCPS_ACT_RB = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB" + Type = uint32 + } + GCPS_CURR_RB = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-RB" + Type = uint32 + } + GYA_GCPS_CURR_MON = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON" + Type = float32 + } + GYB_GCPS_CURR_MON = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON" + Type = float32 + } + GCPS_VOLT_MON = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-VOLT-MON" + Type = uint32 + } + GCPS_SWP_RB = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-SWP-RB" + Type = uint32 + } + GCPS_SWP_LIM = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-SWP-LIM" + Type = uint32 + } + GCPS_ERR = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-ERR" + Type = uint32 + } + GCPS_MM = { + PVName = "EC-GN-P01-GBF-GCPS:STAT-MANM" + Type = uint32 + } + //Input PVs in Variables-kikusui tab. + FHPS_REM_RB = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-REM-RB" + Type = uint32 + } + FHPS_OUTON_RB = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB" + Type = uint32 + } + FHPS_CURR_RB = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-CURR-RB" + Type = uint32 + } + FHPS_ACV_RB = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-ACV-RB" + Type = uint32 + } + FHPS_FRQ_RB = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-FRQ-RB" + Type = uint32 + } + FHPS_SOUR_ON_RB = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-RB" + Type = uint32 + } + FHPS_MEAS_ACV = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV" + Type = float32 + } + GYA_FHPS_MEAS_ACI = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACI" + Type = float32 + } + GYB_FHPS_MEAS_ACI = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACI" + Type = float32 + } + FHPS_MEAS_ACP = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACP" + Type = uint32 + } + FHPS_MEAS_FRQ = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-FRQ" + Type = uint32 + } + FHPS_ERR = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-ERROR" + Type = uint32 + } + FHPS_AUTO_TAGV = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV" + Type = float32 + } + FHPS_AUTO_TIME = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-RU-TIME" + Type = float32 + } + FHPS_AUTO_START = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START" + Type = uint32 + } + + CCPS_REMLOC_RB = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-RB" + Type = uint32 + } + CCPS_OUTON_RB = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-OUTON-RB" + Type = uint32 + } + CCPS_CURR_RB = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-CURR-RB" + Type = uint32 + } + CCPS_DCV_RB = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-DCV-RB" + Type = uint32 + } + CCPS_RANG_RB = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-RANG-RB" + Type = uint32 + } + CCPS_SOUR_ON_RB = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-RB" + Type = uint32 + } + CCPS_MEAS_DCV = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCV" + Type = uint32 + } + GYA_CCPS_MEAS_DCI = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCI" + Type = float32 + } + GYB_CCPS_MEAS_DCI = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCI" + Type = float32 + } + CCPS_MEAS_DCP = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCP" + Type = uint32 + } + CCPS_ERR = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-ERROR" + Type = uint32 + } + CCPS_OUTPUT_AMP = { + PVName = "EC-GN-P01-GBF-CCPS:STAT-AMP" + Type = float32 + } + CCPS_OUTPUT_FREQ = { + PVName = "EC-GN-P01-GBF-CCPS:STAT-FREQ" + Type = float32 + } + CCPS_OUTPUT_OFFS = { + PVName = "EC-GN-P01-GBF-CCPS:STAT-OFFS" + Type = float32 + } + //PXI Board status PVs + PXI6259_0 = { + PVName = "EC-GN-HWCF:6259-0-STATUS" + Type = uint32 + } + PXI6259_1 = { + PVName = "EC-GN-HWCF:6259-1-STATUS" + Type = uint32 + } + PXI6528_0 = { + PVName = "EC-GN-HWCF:6528-0-STATUS" + Type = uint32 + } + PXI6528_1 = { + PVName = "EC-GN-HWCF:6528-1-STATUS" + Type = uint32 + } + PXI6368_0 = { + PVName = "EC-GN-HWCF:6368-0-STATUS" + Type = uint32 + } + PXI6368_1 = { + PVName = "EC-GN-HWCF:6368-1-STATUS" + Type = uint32 + } + } + } + +EPICSCAOutput = { + Class = "EPICSCA::EPICSCAOutput" + CPUMask = "0x1000" //change from 0x200 + StackSize = "10000000" + NumberOfBuffers = 2 + Signals = { + PCF_STATE = { + PVName = "EC-GN-P01-GBF:STAT-SM" + Type = uint32 + } + //Analog Output PVs in Variables-signal tab. + FHPS_REF = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-EREF" + Type = float32 + } + BPS_REF = { + PVName = "EC-GN-P01-PB2F:PSU2000-EREF" + Type = float32 + } + APS_REF = { + PVName = "EC-GN-P01-PA2F:STAT-EREF-CONV.A" + Type = float32 + } + MHVPS_REF = { + PVName = "EC-GN-P01-PMF:STAT-EREF-CALC.B" + Type = float32 + } + + //Digital Output PVs in Variables-signal tab. + APS_STOP = { + PVName = "EC-GN-P01-PA2F:PSU4000-CTRP" + Type = uint32 + } + + BPS_STOP = { + PVName = "EC-GN-P01-PB2F:PSU2000-CTRP" + Type = uint32 + } + + BEAM_ON_STAT = { + PVName = "EC-GN-P01-GBFP:FMC4310-YSTA-GBOP" + Type = uint32 + } + + MHVPS_STOP = { + PVName = "EC-GN-P01-PMF:PSU0000-COFF" + Type = uint32 + } + PCF_FLT = { + PVName = "EC-GN-P01-GPF:PCF4210-CTRP" + Type = uint32 + } + HVARMED = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GB1" + Type = uint32 + } + HVINJECTION = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GB2" + Type = uint32 + } + RFON = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GB3" + Type = uint32 + } + + //Output PVs in Variables-operation tab. + MHVPS_PREP_WF = { + PVName = "EC-GN-P01-PB2F:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + + NumberOfDimensions = 1 + } + BPS_PREP_WF = { + PVName = "EC-GN-P01-PB2F:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + APS_PREP_WF = { + PVName = "EC-GN-P01-PA2F:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + FHPS_PREP_WF = { + PVName = "EC-GN-P01-GBF-FHPS:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + MCPS_PREP_WF = { + PVName = "EC-GN-P01-GBF-MCPS:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GCPS_PREP_WF = { + PVName = "EC-GN-P01-GBF-GCPS:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + PREP_TIME_WF = { + PVName = "EC-GN-P01-GBF:STAT-PREP-TIME-WF" + Type = int32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + BEAM_ON_TIME = { + PVName = "EC-GN-P01-GBF:STAT-BEAMON-TIME" + Type = uint32 + } + ELAPSED_TIME = { + PVName = "EC-GN-P01-GBF:STAT-ELAPSED" + Type = uint32 + } + SHOT_ID = { + PVName = "EC-GN-P01-GBF:STAT-SHOT-ID" + Type = uint32 + } + + CSV_LOADED = { + PVName = "EC-GN-P01-GBF:STAT-CSV-LOADED" + Type = uint32 + } + CSV_ERR = { + PVName = "EC-GN-P01-GBF:STAT-CSV-ERR" + Type = uint32 + } + + //Output PVs in Variables-jastec tab. + MCPS_TRG_CURR_SET = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MO" + Type = float32 + } + MCPS_ACT_SP = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MO" + Type = uint32 + } + GCPS_TRG_CURR_SET = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MO" + Type = float32 + } + GCPS_ACT_SP = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MO" + Type = uint32 + } + + //Output PVs in Variables-kikusui tab. + CCPS_REF = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-EREF" + Type = float32 + } + FHPS_AUTO_STAT = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-STAT" + Type = uint32 + } + //Add 20201117 + APS_HVON = { + PVName = "EC-GN-P01-PA2F:PSU4000-CON-HV" + Type = uint32 + } + APS_SWON = { + PVName = "EC-GN-P01-PA2F:PSU4000-CON-SW" + Type = uint32 + } + BPS_HVON = { + PVName = "EC-GN-P01-PB2F:PSU2000-CON-HV" + Type = uint32 + } + BPS_SWON = { + PVName = "EC-GN-P01-PB2F:PSU2000-CON-SW" + Type = uint32 + } + MHVPS_HVON = { + PVName = "EC-GN-P01-PMF:STAT-HVON-CALC.B" + Type = uint32 + } + } + } + // for ESDN packet subscription/publication. + +SDNSubCommands = { + Class = SDN::SDNSubscriber + Topic = ECPC2SCUJA + Interface = enp27s0f0 + CPUs = 0x2000 + Locked = 1 + Timeout = 2 + Signals = { + Header = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + Command = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 64 + } + } + } + +SDNReply = { + Class = SDN::SDNPublisher + //Topic = SCUJAB2ECPC + Topic = SCUJA2ECPC + Interface = enp27s0f0 + CPUs = 0x2000 + Locked = 1 + Signals = { + Header = { + Type = uint8 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ReplyStatus = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ReplyWaveformAck = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + //Status (26Bytes?) is not assigned + //GyrotronA measurements + //56Bytes are used as Gyrotron1 Measurements (verified on 2020/10/22) + GYA_MHVPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_MHVPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_BPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_BPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_APS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_APS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC1_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC1_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC2_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC2_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_MCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_GCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_FHPS_MEAS_ACI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_CCPS_MEAS_DCI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + //GyrotronB measurements + GYB_MHVPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_MHVPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_BPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_BPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_APS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_APS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC1_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC1_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC2_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC2_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_MCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_GCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_FHPS_MEAS_ACI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_CCPS_MEAS_DCI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + } + + // Direct HW accesses. Follwing device/port assignment must be consistent with actual wiring. + // NI6259.0 + // APS_SWON BoardId=0, PortId=3.0 + +NI6259 = { + Class = NI6259::NI6259DIO + DeviceName = "/dev/pxi6259" + BoardId = 0 + Signals = { + NI6259Value = { + Type = uint32 + Mask = 0xFF + PortId = 0 + } + } + } + + //NI6528 digital output has logic low == 0 == close relay. ((See Driver Manual.) + //When the program send ON signal, this program writes 0 on the data source. + +NI6528P3 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.0" + Port = 3 + NI6528P3Value = { + NI6528P3Value = { + Type = uint8 + } + } + } + //P3.0 APS_HVON + //P3.1 APS_SWON + //P3.2 APS_Shutdown + //P3.3 BPS_HVON + //P3.4 BPS_SWON + //P3.5 BPS_Shutdown + //P3.6 GY1_Beam_ON_status + //P3.7 RV5 _cRIO + + +NI6528P4 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.0" + Port = 4 + NI6528P4Value = { + NI6528P4Value = { + Type = uint8 + } + } + } + //P4.0 RV6 _cRIO + //P4.1 RV7 _cRIO + //P4.2 RV8 _cRIO + //P4.3 emp + //P4.4 emp + //P4.5 emp + //P4.6 HVArmed + //P4.7 HVInjection + + +NI6528P5 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.0" + Port = 5 + NI6528P5Value = { + NI6528P5Value = { + Type = uint8 + } + } + } + //P5.0 RFON + //P5.1 FHPS_Rampup_complete + //P5.2 SCM_RU_Complete + //P5.3 CCPS_IN_OPERATION + //P5.4 REV2 _PLC + //P5.5 REV3 _PLC + //P5.6 None + //P5.7 None + + +NI6528P4GYA = { + Class = NI6528 + DeviceName = "/dev/pxi6528.1" + Port = 4 + NI6528P4GYAValue = { + NI6528P4GYAValue = { + Type = uint8 + } + } + } + //P4.0 RV6 _cRIO + //P4.1 RV7 _cRIO + //P4.2 RV8 _cRIO + //P4.3 MHVPS_HVON + //P4.4 MHVPS_Shutdown + //P4.5 MHVPS_MOD + //P4.6 PCF_FLT + //P4.7 HVArmed_GYA + + } + +States = { + Class = ReferenceContainer + +Disabled = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM GoErrorGAM InDisabledGAM + GoWaitStandbyGAM choiseGAM MCPSGAM GCPSGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM} + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P4GYAPV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM NI6528P4GYAWriteGAM} + CPUs = 0x4000 + } + } + } + +WaitStandby = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM FHPSSetpointGAM FHPSRampupGAM InWaitStandbyGAM + choiseGAM MCPSGAM GCPSGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + GoDisabledGAM GoWaitReadyGAM GoErrorGAM CCPSWaveformGAM } + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P4GYAPV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM NI6528P4GYAWriteGAM} + CPUs = 0x4000 + } + } + } + +WaitReady = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM WFRecordGAM PreProgrammedGAM FHPSSetpointGAM FHPSRampupGAM InWaitReadyGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + GoWaitPermitGAM GoWaitStandbyFromReadyGAM GoErrorGAM } + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P4GYAPV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM NI6528P4GYAWriteGAM} + CPUs = 0x4000 + } + } + } + +WaitPermit = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM WFRecordGAM PreProgrammedGAM FHPSSetpointGAM FHPSRampupGAM InWaitPermitGAM + choiseGAM EPICSOutputGAM GoWaitReadyFromWaitPermitGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + GoWaitHVONGAM GoWaitHVON_PREP_GAM GoWaitHVON_SDN_GAM GoWaitHVON_SDN_PREP_GAM GoErrorGAM } + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P4GYAPV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM NI6528P4GYAWriteGAM} + CPUs = 0x4000 + } + } + } + + //Real-Time state for HVPS sequence timing control. + +WaitHVON = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM FHPSSetpointGAM FHPSRampupGAM InWaitHVONGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM } + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P4PV2PortGAM NI6528P4WriteGAM + GAMRealTimeStateMachine NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x4000 + } + } + } + +WaitHVON_SDN = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM FHPSRampupGAM InWaitHVON_SDNGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM } + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P4PV2PortGAM NI6528P4WriteGAM + GAMSDNRealTimeStateMachine terminalInterfaceGAM NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x4000 + } + } + } + +WaitHVON_PREP = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM PreProgrammedGAM FHPSRampupGAM InWaitHVON_PREPGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM } + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P4PV2PortGAM NI6528P4WriteGAM + GAMRealTimeStateMachine NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x4000 + } + } + } + +WaitHVON_SDN_PREP = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM PreProgrammedGAM FHPSRampupGAM InWaitHVON_SDN_PREPGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM} + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P4PV2PortGAM NI6528P4WriteGAM + GAMSDNRealTimeStateMachine terminalInterfaceGAM NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x4000 + } + } + } + + +Error = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM InErrorGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + ExitedHVArmedInjectionRFONGAM ResetPSsGAM + FromErrorToWaitStandbyGAM ErrorGAM choiseGAM EPICSOutputGAM FHPSSetpointGAM FHPSRampupGAM CCPSWaveformGAM} + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P4GYAPV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM NI6528P4GYAWriteGAM} + CPUs = 0x4000 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronIOC.db b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronIOC.db new file mode 100644 index 0000000..3bb3f94 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronIOC.db @@ -0,0 +1,1384 @@ + +record(bo, "EC-GN-P01-GAF:STAT-SHORT-PULSE"){ + field(SCAN, "Passive") + field(ONAM, "SHORT MODE") + field(ZNAM, "LONG MODE") +} + +record(ao, "EC-GN-P01-GAF-FHPS:PSU2320-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-CCPS:PSU2610-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-FHPS:PSU2320-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-CCPS:PSU2610-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PB1F:PSU1000-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PA1F:PSU3000-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PA1F:PSU3000-EREF-P"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PMF:PSU0000-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PB2F:PSU2000-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PA2F:PSU4000-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PA2F:PSU4000-EREF-P"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-FHPS:PSU2610-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-CCPS:PSU2320-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GAF-MCPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PB1F:PSU1000-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PB1F:PSU1000-IT"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PA1F:PSU3000-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PA1F:PSU3000-IT"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF:MOE2810-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF:MOE2820-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF:MOE2830-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF:MRF2910-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PMF:PSU0000-ET-GA"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PMF:PSU0000-IT-GA"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PB2F:PSU2000-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PB2F:PSU2000-IT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PA2F:PSU4000-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PA2F:PSU4000-IT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF:MOE2810-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF:MOE2820-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF:MOE2830-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF:MRF2910-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PMF:PSU0000-ET-GB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PMF:PSU0000-IT-GB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA1F:PSU3000-CON-HV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA1F:PSU3000-CON-SW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA1F:PSU3000-CTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB1F:PSU1000-CON-HV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB1F:PSU1000-CON-SW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB1F:PSU1000-CTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAFP:FMC4310-YSTA-GAOP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAFP:FMC4310-RV5"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAFP:FMC4310-RV6"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAFP:FMC4310-RV7"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAFP:FMC4310-RV8"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PMF:PSU0000-CON-SW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PMF:PSU0000-COFF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PMF:PSU0000-CON-MOD"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-CTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-YTS-GA1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-YTS-GA2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-YTS-GA3"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-CCPS:PSU2320-TR"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA2F:PSU4000-CON-HV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA2F:PSU4000-CON-SW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA2F:PSU4000-CTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB2F:PSU2000-CON-HV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB2F:PSU2000-CON-SW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB2F:PSU2000-CTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBFP:FMC4310-YSTA-GBOP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBFP:FMC4310-RV5"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBFP:FMC4310-RV6"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBFP:FMC4310-RV7"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBFP:FMC4310-RV8"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-YTS-GB1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-YTS-GB2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-YTS-GB3"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-CCPS:PSU2320-TR"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPS:PLC4110-RV2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPS:PLC4110-RV3"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:PCF4210-CTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PA1F:PSU3000-YSTA"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PA1F:PSU3000-YFLT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PB1F:PSU1000-YSTA"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PB1F:PSU1000-YFLT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-YFLT-OC"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-YFLT-OV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PMF:PSU0000-YFLT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PMF:PSU0000-TYSTA"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPF:PSU0000-YSTA-MOD"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-YTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-YTRP2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-RV1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-RV2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-RV3"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-ST1R"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-ST2R"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-ST3R"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-CON-GY1PRM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-CON-OPGY1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YON-CCPS1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YSTA-MPSS"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF:DIO4900-YON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PA2F:PSU4000-YSTA"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PA2F:PSU4000-YFLT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PB2F:PSU2000-YSTA"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PB2F:PSU2000-YFLT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBFP:FMC4310-YTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBFP:FMC4310-YTRP2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBFP:FMC4310-RV1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBFP:FMC4310-RV2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBFP:FMC4310-RV3"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-MD1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-MD2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-MD3"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-MD4"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-CON-GY2PRM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-CON-OPGY2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YON-CCPS2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-RV1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF:DIO4900-YON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PMF:STAT-DT-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PA1F:STAT-DT-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PA1F:STAT-DT-SWON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PB1F:STAT-DT-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PB1F:STAT-DT-SWON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PA2F:STAT-DT-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PA2F:STAT-DT-SWON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PB2F:STAT-DT-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PB2F:STAT-DT-SWON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF:STAT-DT-SHOTLEN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF:STAT-DT-SHOTLEN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF:STAT-BEAMON-TIME"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF:STAT-BEAMON-TIME"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF:STAT-ELAPSED"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF:STAT-ELAPSED"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GPF:STAT-RDY-TOUT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PMF:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA1F:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB1F:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA2F:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB2F:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-MCPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-GCPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-CCPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-MCPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-GCPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-CCPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:STAT-TRIG-SOUR"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF:STAT-TRIG-SOUR"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longin, "EC-GN-P01-GPF:STAT-MD1-LIM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longin, "EC-GN-P01-GPF:STAT-MD2-LIM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longin, "EC-GN-P01-GPF:STST-MD3-LIM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longin, "EC-GN-P01-GPF:STAT-MD4-LIM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:STAT-SIMM-MODE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF:STAT-SIMM-MODE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:STAT-PREP-MODE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF:STAT-PREP-MODE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:STAT-MST-TRIG"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF:STAT-MST-TRIG"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:STAT-RST-FLT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longout, "EC-GN-P01-GAF:STAT-SHOT-ID"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GAF:STAT-FC-SUBSTATE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longin, "EC-GN-P01-GAF:STAT-PREHEAT-TIME"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longout, "EC-GN-P01-GBF:STAT-SHOT-ID"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GBF:STAT-FC-SUBSTATE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longin, "EC-GN-P01-GBF:STAT-PREHEAT-TIME"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA1F:STAT-POLSW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA2F:STAT-POLSW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:STAT-CSV-LOAD"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:STAT-CSV-LOADED"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(stringout, "EC-GN-P01-GAF:STAT-CSV-NAME"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GAF:STAT-CSV-ERR"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF:STAT-CSV-LOAD"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF:STAT-CSV-LOADED"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(stringout, "EC-GN-P01-GBF:STAT-CSV-NAME"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GBF:STAT-CSV-ERR"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longout, "EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GPF:STAT-DAQ-MODE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:STAT-DAQ-SW-TRIG"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GPF:STAT-DAQ-STAT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:STAT-DAQ-CONF-STAT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GPF:STAT-DAQ-LEN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:STAT-DAQ-RECONF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GPF:STAT-DAQ-PUB-DLY"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longout, "EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE-RB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GPF:STAT-DAQ-MODE-RB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY-RB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GPF:STAT-DAQ-LEN-RB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GPF:STAT-DAQ-PUB-DLY-RB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PB1F:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PA1F:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF-FHPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF-CCPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GAF-MCPS:STATPREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF-GCPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF:STAT-PREP-TIME-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "SHORT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PB2F:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PA2F:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF-FHPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF-CCPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF-MCPS:STATPREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF-GCPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF:STAT-PREP-TIME-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-MCPS:PSU2120-TRG-SWPR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbi, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-MCPS:PSU2120-VOLT-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-MCPS:PSU2120-SWP-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-MCPS:PSU2120-SWP-LIM"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GAF-MCPS:PSU2120-ERR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-GCPS:PSU2130-TRG-SWPR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbi, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-GCPS:PSU2130-VOLT-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-GCPS:PSU2130-SWP-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-GCPS:PSU2130-SWP-LIM"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GAF-GCPS:PSU2130-ERR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-MCPS:PSU2120-TRG-SWPR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbi, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-MCPS:PSU2120-VOLT-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-MCPS:PSU2120-SWP-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-MCPS:PSU2120-SWP-LIM"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF-MCPS:PSU2120-ERR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-GCPS:PSU2130-TRG-SWPR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbi, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-GCPS:PSU2130-VOLT-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-GCPS:PSU2130-SWP-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-GCPS:PSU2130-SWP-LIM"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF-GCPS:PSU2130-ERR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GAF-FHPS:PSU2610-IDN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-RST"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-REM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-OUTON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-FHPS:PSU2610-CURR-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-FHPS:PSU2610-ACV-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-FHPS:PSU2610-FRQ-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF-FHPS:PSU2610-REM-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-ACV-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-FRQ-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACI"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACP"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-FRQ"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GAF-FHPS:PSU2610-ERROR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-STAT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-STOP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GAF-CCPS:PSU2320-IDN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-CCPS:PSU2320-RST"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-CCPS:PSU2320-OUTON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-CCPS:PSU2320-CURR-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-CCPS:PSU2320-DCV-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-CCPS:PSU2320-RANG-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF-CCPS:PSU2320-OUTON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:PSU2320-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:PSU2320-DCV-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:PSU2320-RANG-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCV"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCI"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCP"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GAF-CCPS:PSU2320-ERROR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:STAT-AMP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:STAT-FREQ"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GBF-FHPS:PSU2610-IDN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-RST"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-REM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-OUTON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-FHPS:PSU2610-CURR-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-FHPS:PSU2610-ACV-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-FHPS:PSU2610-FRQ-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF-FHPS:PSU2610-REM-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-ACV-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-FRQ-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACI"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACP"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-FRQ"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GBF-FHPS:PSU2610-ERROR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-STAT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-STOP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GBF-CCPS:PSU2320-IDN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-CCPS:PSU2320-RST"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-CCPS:PSU2320-OUTON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-CCPS:PSU2320-CURR-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-CCPS:PSU2320-DCV-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-CCPS:PSU2320-RANG-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF-CCPS:PSU2320-OUTON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:PSU2320-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:PSU2320-DCV-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:PSU2320-RANG-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCV"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCI"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCP"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GBF-CCPS:PSU2320-ERROR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:STAT-AMP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:STAT-FREQ"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PMF:STAT-GYA-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PMF:STAT-GYB-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(calcout, "EC-GN-P01-PMF:STAT-HVON-CALC"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(calcout, "EC-GN-P01-GAF:STAT-MST-TRIG-CALC"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(calcout, "EC-GN-P01-GBF:STAT-MST-TRIG-CALC"){ + field(SCAN, "Passive") + field(PINI, "YES") +} + +record(bi, "EC-GN-P01-GAF-CCPS:PSU2320-STAT"){ + field(SCAN, "Passive") +} +record(bi, "EC-GN-P01-GBF-CCPS:PSU2320-STAT"){ + field(SCAN, "Passive") +} diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/shot0001.csv b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/shot0001.csv new file mode 100644 index 0000000..e69de29 diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/test.csv b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/test.csv new file mode 100644 index 0000000..e7ba9e5 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/test.csv @@ -0,0 +1,41 @@ +-100,0,0,0,0,0,0 +-90,1,1,1,1,1,1 +-80,2,2,2,2,2,2 +-70,3,3,3,3,3,3 +-60,4,4,4,4,4,4 +-50,5,5,5,5,5,5 +-40,6,6,6,6,6,6 +-30,7,7,7,7,7,7 +-20,8,8,8,8,8,8 +-10,9,9,9,9,9,9 +0,10,10,10,10,10,10 +10,9,9,9,9,9,9 +20,8,8,8,8,8,8 +30,7,7,7,7,7,7 +40,6,6,6,6,6,6 +50,5,5,5,5,5,5 +60,4,4,4,4,4,4 +70,3,3,3,3,3,3 +80,2,2,2,2,2,2 +90,1,1,1,1,1,1 +100,0,0,0,0,0,0 +110,1,1,1,1,1,1 +120,2,2,2,2,2,2 +130,3,3,3,3,3,3 +140,4,4,4,4,4,4 +150,5,5,5,5,5,5 +160,6,6,6,6,6,6 +170,7,7,7,7,7,7 +180,8,8,8,8,8,8 +190,9,9,9,9,9,9 +200,10,10,10,10,10,10 +210,9,9,9,9,9,9 +220,8,8,8,8,8,8 +230,7,7,7,7,7,7 +240,6,6,6,6,6,6 +250,5,5,5,5,5,5 +260,4,4,4,4,4,4 +270,3,3,3,3,3,3 +280,2,2,2,2,2,2 +290,1,1,1,1,1,1 +300,0,0,0,0,0,0 diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/test.csv.original b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/test.csv.original new file mode 100644 index 0000000..c942204 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/test.csv.original @@ -0,0 +1,41 @@ +-100,0,0,0,0,0 +-90,1,1,1,1,1 +-80,2,2,2,2,2 +-70,3,3,3,3,3 +-60,4,4,4,4,4 +-50,5,5,5,5,5 +-40,6,6,6,6,6 +-30,7,7,7,7,7 +-20,8,8,8,8,8 +-10,9,9,9,9,9 +0,10,10,10,10,10 +10,9,9,9,9,9 +20,8,8,8,8,8 +30,7,7,7,7,7 +40,6,6,6,6,6 +50,5,5,5,5,5 +60,4,4,4,4,4 +70,3,3,3,3,3 +80,2,2,2,2,2 +90,1,1,1,1,1 +100,0,0,0,0,0 +110,1,1,1,1,1 +120,2,2,2,2,2 +130,3,3,3,3,3 +140,4,4,4,4,4 +150,5,5,5,5,5 +160,6,6,6,6,6 +170,7,7,7,7,7 +180,8,8,8,8,8 +190,9,9,9,9,9 +200,10,10,10,10,10 +210,9,9,9,9,9 +220,8,8,8,8,8 +230,7,7,7,7,7 +240,6,6,6,6,6 +250,5,5,5,5,5 +260,4,4,4,4,4 +270,3,3,3,3,3 +280,2,2,2,2,2 +290,1,1,1,1,1 +300,0,0,0,0,0 diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/test2.csv b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/test2.csv new file mode 100644 index 0000000..d05acb7 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/test2.csv @@ -0,0 +1,103 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,10,10,10,10,10,10 +10,9,9,9,9,9,9 +20,8,8,8,8,8,8 +30,7,7,7,7,7,7 +40,6,6,6,6,6,6 +50,5,5,5,5,5,5 +60,4,4,4,4,4,4 +70,3,3,3,3,3,3 +80,2,2,2,2,2,2 +90,1,1,1,1,1,1 +100,0,0,0,0,0,0 +110,1,1,1,1,1,1 +120,2,2,2,2,2,2 +130,3,3,3,3,3,3 +140,4,4,4,4,4,4 +150,5,5,5,5,5,5 +160,6,6,6,6,6,6 +170,7,7,7,7,7,7 +180,8,8,8,8,8,8 +190,9,9,9,9,9,9 +200,10,10,10,10,10,10 +210,9,9,9,9,9,9 +220,8,8,8,8,8,8 +230,7,7,7,7,7,7 +240,6,6,6,6,6,6 +250,5,5,5,5,5,5 +260,4,4,4,4,4,4 +270,3,3,3,3,3,3 +280,2,2,2,2,2,2 +290,1,1,1,1,1,1 +300,0,0,0,0,0,0 +310,1,1,1,1,1,1 +320,2,2,2,2,2,2 +330,3,3,3,3,3,3 +340,4,4,4,4,4,4 +350,5,5,5,5,5,5 +360,6,6,6,6,6,6 +370,7,7,7,7,7,7 +380,8,8,8,8,8,8 +390,9,9,9,9,9,9 +400,10,10,10,10,10,10 +410,9,9,9,9,9,9 +420,8,8,8,8,8,8 +430,7,7,7,7,7,7 +440,6,6,6,6,6,6 +450,5,5,5,5,5,5 +460,4,4,4,4,4,4 +470,3,3,3,3,3,3 +480,2,2,2,2,2,2 +490,1,1,1,1,1,1 +500,0,0,0,0,0,0 +510,1,1,1,1,1,1 +520,2,2,2,2,2,2 +530,3,3,3,3,3,3 +540,4,4,4,4,4,4 +550,5,5,5,5,5,5 +560,6,6,6,6,6,6 +570,7,7,7,7,7,7 +580,8,8,8,8,8,8 +590,9,9,9,9,9,9 +600,10,10,10,10,10,10 +610,9,9,9,9,9,9 +620,8,8,8,8,8,8 +630,7,7,7,7,7,7 +640,6,6,6,6,6,6 +650,5,5,5,5,5,5 +660,4,4,4,4,4,4 +670,3,3,3,3,3,3 +680,2,2,2,2,2,2 +690,1,1,1,1,1,1 +700,0,0,0,0,0,0 +710,1,1,1,1,1,1 +720,2,2,2,2,2,2 +730,3,3,3,3,3,3 +740,4,4,4,4,4,4 +750,5,5,5,5,5,5 +760,6,6,6,6,6,6 +770,7,7,7,7,7,7 +780,8,8,8,8,8,8 +790,9,9,9,9,9,9 +800,10,10,10,10,10,10 +810,9,9,9,9,9,9 +820,8,8,8,8,8,8 +830,7,7,7,7,7,7 +840,6,6,6,6,6,6 +850,5,5,5,5,5,5 +860,4,4,4,4,4,4 +870,3,3,3,3,3,3 +880,2,2,2,2,2,2 +890,1,1,1,1,1,1 +900,0,0,0,0,0,0 +910,1,1,1,1,1,1 +920,2,2,2,2,2,2 +930,3,3,3,3,3,3 +940,4,4,4,4,4,4 +950,5,5,5,5,5,5 +960,6,6,6,6,6,6 +970,7,7,7,7,7,7 +980,8,8,8,8,8,8 +990,9,9,9,9,9,9 +1000,10,10,10,10,10,10 diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/test2.csv.original b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/test2.csv.original new file mode 100644 index 0000000..07d2393 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/test2.csv.original @@ -0,0 +1,103 @@ +#test configuration file2 +#Time,BPS,APS,MC,GC,FHPS +0,10,10,10,10,10 +10,9,9,9,9,9 +20,8,8,8,8,8 +30,7,7,7,7,7 +40,6,6,6,6,6 +50,5,5,5,5,5 +60,4,4,4,4,4 +70,3,3,3,3,3 +80,2,2,2,2,2 +90,1,1,1,1,1 +100,0,0,0,0,0 +110,1,1,1,1,1 +120,2,2,2,2,2 +130,3,3,3,3,3 +140,4,4,4,4,4 +150,5,5,5,5,5 +160,6,6,6,6,6 +170,7,7,7,7,7 +180,8,8,8,8,8 +190,9,9,9,9,9 +200,10,10,10,10,10 +210,9,9,9,9,9 +220,8,8,8,8,8 +230,7,7,7,7,7 +240,6,6,6,6,6 +250,5,5,5,5,5 +260,4,4,4,4,4 +270,3,3,3,3,3 +280,2,2,2,2,2 +290,1,1,1,1,1 +300,0,0,0,0,0 +310,1,1,1,1,1 +320,2,2,2,2,2 +330,3,3,3,3,3 +340,4,4,4,4,4 +350,5,5,5,5,5 +360,6,6,6,6,6 +370,7,7,7,7,7 +380,8,8,8,8,8 +390,9,9,9,9,9 +400,10,10,10,10,10 +410,9,9,9,9,9 +420,8,8,8,8,8 +430,7,7,7,7,7 +440,6,6,6,6,6 +450,5,5,5,5,5 +460,4,4,4,4,4 +470,3,3,3,3,3 +480,2,2,2,2,2 +490,1,1,1,1,1 +500,0,0,0,0,0 +510,1,1,1,1,1 +520,2,2,2,2,2 +530,3,3,3,3,3 +540,4,4,4,4,4 +550,5,5,5,5,5 +560,6,6,6,6,6 +570,7,7,7,7,7 +580,8,8,8,8,8 +590,9,9,9,9,9 +600,10,10,10,10,10 +610,9,9,9,9,9 +620,8,8,8,8,8 +630,7,7,7,7,7 +640,6,6,6,6,6 +650,5,5,5,5,5 +660,4,4,4,4,4 +670,3,3,3,3,3 +680,2,2,2,2,2 +690,1,1,1,1,1 +700,0,0,0,0,0 +710,1,1,1,1,1 +720,2,2,2,2,2 +730,3,3,3,3,3 +740,4,4,4,4,4 +750,5,5,5,5,5 +760,6,6,6,6,6 +770,7,7,7,7,7 +780,8,8,8,8,8 +790,9,9,9,9,9 +800,10,10,10,10,10 +810,9,9,9,9,9 +820,8,8,8,8,8 +830,7,7,7,7,7 +840,6,6,6,6,6 +850,5,5,5,5,5 +860,4,4,4,4,4 +870,3,3,3,3,3 +880,2,2,2,2,2 +890,1,1,1,1,1 +900,0,0,0,0,0 +910,1,1,1,1,1 +920,2,2,2,2,2 +930,3,3,3,3,3 +940,4,4,4,4,4 +950,5,5,5,5,5 +960,6,6,6,6,6 +970,7,7,7,7,7 +980,8,8,8,8,8 +990,9,9,9,9,9 +1000,10,10,10,10,10 diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/test3.csv b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/test3.csv new file mode 100644 index 0000000..6751924 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/test3.csv @@ -0,0 +1,6002 @@ +t (100ms),EW6-Voset (kV),EW2-Voset (kV),EW3-VOset (kV),EW101-MC-Ioset (A),EW101-GC-Ioset (A),FPS101-Voset (V) +0,46,20,15,111.3,1.7,53.2 +1,46,20.5,14.5,111.3,1.7,62 +2,46,21,14,111.3,1.7,62 +3,46,21.5,13.5,111.3,1.7,62 +4,46,22,13,111.3,1.7,62 +5,46,22.5,12.5,111.3,1.7,62 +6,46,23,12,111.3,1.7,62 +7,46,23.5,11.5,111.3,1.7,62 +8,46,24,11,111.3,1.7,62 +9,46,24.5,10.5,111.3,1.7,62 +10,46,25,10,111.3,1.7,62 +11,46,25.5,9.5,111.3,1.7,62 +12,46,26,9,111.3,1.7,62 +13,46,26.5,8.5,111.3,1.7,62 +14,46,27,8,111.3,1.7,62 +15,46,27.5,7.5,111.3,1.7,62 +16,46,28,7,111.3,1.7,62 +17,46,28.5,6.5,111.3,1.7,62 +18,46,29,6,111.3,1.7,62 +19,46,29.5,5.5,111.3,1.7,62 +20,46,30,5,111.3,1.7,62 +21,46,30,4.5,111.3,1.7,62 +22,46,30,4,111.3,1.7,62 +23,46,30,4,111.3,1.7,62 +24,46,30,4,111.3,1.7,62 +25,46,30,4,111.3,1.7,62 +26,46,30,4,111.3,1.7,62 +27,46,30,4,111.3,1.7,62 +28,46,30,4,111.3,1.7,62 +29,46,30,4,111.3,1.7,62 +30,46,30,4,111.3,1.7,62 +31,46,30,3.4,111.3,1.7,62 +32,46,30,3.4,111.3,1.7,62 +33,46,30,3.4,111.3,1.7,62 +34,46,30,3.4,111.3,1.7,62 +35,46,30,3.4,111.3,1.7,62 +36,46,30,3.4,111.3,1.7,62 +37,46,30,3.4,111.3,1.7,62 +38,46,30,3.4,111.3,1.7,62 +39,46,30,3.4,111.3,1.7,62 +40,46,30,3.4,111.3,1.7,62 +41,46,30,3.4,111.3,1.7,62 +42,46,30,3.4,111.3,1.7,62 +43,46,30,3.4,111.3,1.7,62 +44,46,30,3.4,111.3,1.7,62 +45,46,30,3.4,111.3,1.7,62 +46,46,30,3.4,111.3,1.7,62 +47,46,30,3.4,111.3,1.7,62 +48,46,30,3.4,111.3,1.7,62 +49,46,30,3.4,111.3,1.7,62 +50,46,30,3.4,111.3,1.7,62 +51,46,30,3.4,111.3,1.7,62.1 +52,46,30,3.4,111.3,1.7,62.2 +53,46,30,3.4,111.3,1.7,62.3 +54,46,30,3.4,111.3,1.7,62.4 +55,46,30,3.4,111.3,1.7,62.5 +56,46,30,3.4,111.3,1.7,62.6 +57,46,30,3.4,111.3,1.7,62.7 +58,46,30,3.4,111.3,1.7,62.8 +59,46,30,3.4,111.3,1.7,62.9 +60,46,30,3.4,111.3,1.7,63 +61,46,30,3,111.3,1.7,63.1 +62,46,30,3,111.3,1.7,63.2 +63,46,30,3,111.3,1.7,63.3 +64,46,30,3,111.3,1.7,63.4 +65,46,30,3,111.3,1.7,63.5 +66,46,30,3,111.3,1.7,63.6 +67,46,30,3,111.3,1.7,63.7 +68,46,30,3,111.3,1.7,63.8 +69,46,30,3,111.3,1.7,63.9 +70,46,30,3,111.3,1.7,64 +71,46,30,3,111.3,1.7,64.1 +72,46,30,3,111.3,1.7,64.2 +73,46,30,3,111.3,1.7,64.3 +74,46,30,3,111.3,1.7,64.4 +75,46,30,3,111.3,1.7,64.5 +76,46,30,3,111.3,1.7,64.6 +77,46,30,3,111.3,1.7,64.7 +78,46,30,3,111.3,1.7,64.8 +79,46,30,3,111.3,1.7,64.9 +80,46,30,3,111.3,1.7,65 +81,46,30,3,111.3,1.7,65.1 +82,46,30,3,111.3,1.7,65.2 +83,46,30,3,111.3,1.7,65.3 +84,46,30,3,111.3,1.7,65.4 +85,46,30,3,111.3,1.7,65.5 +86,46,30,3,111.3,1.7,65.6 +87,46,30,3,111.3,1.7,65.7 +88,46,30,3,111.3,1.7,65.8 +89,46,30,3,111.3,1.7,65.9 +90,46,30,3,111.3,1.7,66 +91,46,30,3,111.3,1.7,66.1 +92,46,30,3,111.3,1.7,66.2 +93,46,30,3,111.3,1.7,66.3 +94,46,30,3,111.3,1.7,66.4 +95,46,30,3,111.3,1.7,66.5 +96,46,30,3,111.3,1.7,66.6 +97,46,30,3,111.3,1.7,66.7 +98,46,30,3,111.3,1.7,66.8 +99,46,30,3,111.3,1.7,66.9 +100,46,30,3,111.3,1.7,67 +101,46,30,3,111.3,1.7,67 +102,46,30,3,111.3,1.7,67 +103,46,30,3,111.3,1.7,67 +104,46,30,3,111.3,1.7,67 +105,46,30,3,111.3,1.7,67 +106,46,30,3,111.3,1.7,67 +107,46,30,3,111.3,1.7,67 +108,46,30,3,111.3,1.7,67 +109,46,30,3,111.3,1.7,67 +110,46,30,3,111.3,1.7,67 +111,46,30,3,111.3,1.7,67 +112,46,30,3,111.3,1.7,67 +113,46,30,3,111.3,1.7,67 +114,46,30,3,111.3,1.7,67 +115,46,30,3,111.3,1.7,67 +116,46,30,3,111.3,1.7,67 +117,46,30,3,111.3,1.7,67 +118,46,30,3,111.3,1.7,67 +119,46,30,3,111.3,1.7,67 +120,46,30,3,111.3,1.7,67 +121,46,30,3,111.3,1.7,67 +122,46,30,3,111.3,1.7,67 +123,46,30,3,111.3,1.7,67 +124,46,30,3,111.3,1.7,67 +125,46,30,3,111.3,1.7,67 +126,46,30,3,111.3,1.7,67 +127,46,30,3,111.3,1.7,67 +128,46,30,3,111.3,1.7,67 +129,46,30,3,111.3,1.7,67 +130,46,30,3,111.3,1.7,67 +131,46,30,3,111.3,1.7,67 +132,46,30,3,111.3,1.7,67 +133,46,30,3,111.3,1.7,67 +134,46,30,3,111.3,1.7,67 +135,46,30,3,111.3,1.7,67 +136,46,30,3,111.3,1.7,67 +137,46,30,3,111.3,1.7,67 +138,46,30,3,111.3,1.7,67 +139,46,30,3,111.3,1.7,67 +140,46,30,3,111.3,1.7,67 +141,46,30,3,111.3,1.7,67 +142,46,30,3,111.3,1.7,67 +143,46,30,3,111.3,1.7,67 +144,46,30,3,111.3,1.7,67 +145,46,30,3,111.3,1.7,67 +146,46,30,3,111.3,1.7,67 +147,46,30,3,111.3,1.7,67 +148,46,30,3,111.3,1.7,67 +149,46,30,3,111.3,1.7,67 +150,46,30,3,111.3,1.7,67 +151,46,30,3,111.3,1.7,67 +152,46,30,3,111.3,1.7,67 +153,46,30,3,111.3,1.7,67 +154,46,30,3,111.3,1.7,67 +155,46,30,3,111.3,1.7,67 +156,46,30,3,111.3,1.7,67 +157,46,30,3,111.3,1.7,67 +158,46,30,3,111.3,1.7,67 +159,46,30,3,111.3,1.7,67 +160,46,30,3,111.3,1.7,67 +161,46,30,3,111.3,1.7,67 +162,46,30,3,111.3,1.7,67 +163,46,30,3,111.3,1.7,67 +164,46,30,3,111.3,1.7,67 +165,46,30,3,111.3,1.7,67 +166,46,30,3,111.3,1.7,67 +167,46,30,3,111.3,1.7,67 +168,46,30,3,111.3,1.7,67 +169,46,30,3,111.3,1.7,67 +170,46,30,3,111.3,1.7,67 +171,46,30,3,111.3,1.7,67 +172,46,30,3,111.3,1.7,67 +173,46,30,3,111.3,1.7,67 +174,46,30,3,111.3,1.7,67 +175,46,30,3,111.3,1.7,67 +176,46,30,3,111.3,1.7,67 +177,46,30,3,111.3,1.7,67 +178,46,30,3,111.3,1.7,67 +179,46,30,3,111.3,1.7,67 +180,46,30,3,111.3,1.7,67 +181,46,30,3,111.3,1.7,67 +182,46,30,3,111.3,1.7,67 +183,46,30,3,111.3,1.7,67 +184,46,30,3,111.3,1.7,67 +185,46,30,3,111.3,1.7,67 +186,46,30,3,111.3,1.7,67 +187,46,30,3,111.3,1.7,67 +188,46,30,3,111.3,1.7,67 +189,46,30,3,111.3,1.7,67 +190,46,30,3,111.3,1.7,67 +191,46,30,3,111.3,1.7,67 +192,46,30,3,111.3,1.7,67 +193,46,30,3,111.3,1.7,67 +194,46,30,3,111.3,1.7,67 +195,46,30,3,111.3,1.7,67 +196,46,30,3,111.3,1.7,67 +197,46,30,3,111.3,1.7,67 +198,46,30,3,111.3,1.7,67 +199,46,30,3,111.3,1.7,67 +200,46,30,2.9,111.3,1.7,67 +201,46,30,2.9,111.05,1.7,67 +202,46,30,2.9,111.05,1.7,67 +203,46,30,2.9,111.05,1.7,67 +204,46,30,2.9,111.05,1.7,67 +205,46,30,2.9,111.05,1.7,67 +206,46,30,2.9,111.05,1.7,67 +207,46,30,2.9,111.05,1.7,67 +208,46,30,2.9,111.05,1.7,67 +209,46,30,2.9,111.05,1.7,67 +210,46,30,2.9,111.05,1.7,67 +211,46,30,2.9,111.05,1.7,67 +212,46,30,2.9,111.05,1.7,67 +213,46,30,2.9,111.05,1.7,67 +214,46,30,2.9,111.05,1.7,67 +215,46,30,2.9,111.05,1.7,67 +216,46,30,2.9,111.05,1.7,67 +217,46,30,2.9,111.05,1.7,67 +218,46,30,2.9,111.05,1.7,67 +219,46,30,2.9,111.05,1.7,67 +220,46,30,2.9,111.05,1.7,67 +221,46,30,2.9,111.05,1.7,67 +222,46,30,2.9,111.05,1.7,67 +223,46,30,2.9,111.05,1.7,67 +224,46,30,2.9,111.05,1.7,67 +225,46,30,2.9,111.05,1.7,67 +226,46,30,2.9,111.05,1.7,67 +227,46,30,2.9,111.05,1.7,67 +228,46,30,2.9,111.05,1.7,67 +229,46,30,2.9,111.05,1.7,67 +230,46,30,2.9,111.05,1.7,67 +231,46,30,2.9,111.05,1.7,67 +232,46,30,2.9,111.05,1.7,67 +233,46,30,2.9,111.05,1.7,67 +234,46,30,2.9,111.05,1.7,67 +235,46,30,2.9,111.05,1.7,67 +236,46,30,2.9,111.05,1.7,67 +237,46,30,2.9,111.05,1.7,67 +238,46,30,2.9,111.05,1.7,67 +239,46,30,2.9,111.05,1.7,67 +240,46,30,2.9,111.05,1.7,67 +241,46,30,2.9,111.05,1.7,67 +242,46,30,2.9,111.05,1.7,67 +243,46,30,2.9,111.05,1.7,67 +244,46,30,2.9,111.05,1.7,67 +245,46,30,2.9,111.05,1.7,67 +246,46,30,2.9,111.05,1.7,67 +247,46,30,2.9,111.05,1.7,67 +248,46,30,2.9,111.05,1.7,67 +249,46,30,2.9,111.05,1.7,67 +250,46,30,2.8,111.05,1.7,67 +251,46,30,2.8,111.05,1.7,67 +252,46,30,2.8,111.05,1.7,67 +253,46,30,2.8,111.05,1.7,67 +254,46,30,2.8,111.05,1.7,67 +255,46,30,2.8,111.05,1.7,67 +256,46,30,2.8,111.05,1.7,67 +257,46,30,2.8,111.05,1.7,67 +258,46,30,2.8,111.05,1.7,67 +259,46,30,2.8,111.05,1.7,67 +260,46,30,2.8,111.05,1.7,67 +261,46,30,2.8,111.05,1.7,67 +262,46,30,2.8,111.05,1.7,67 +263,46,30,2.8,111.05,1.7,67 +264,46,30,2.8,111.05,1.7,67 +265,46,30,2.8,111.05,1.7,67 +266,46,30,2.8,111.05,1.7,67 +267,46,30,2.8,111.05,1.7,67 +268,46,30,2.8,111.05,1.7,67 +269,46,30,2.8,111.05,1.7,67 +270,46,30,2.8,111.05,1.7,67 +271,46,30,2.8,111.05,1.7,67 +272,46,30,2.8,111.05,1.7,67 +273,46,30,2.8,111.05,1.7,67 +274,46,30,2.8,111.05,1.7,67 +275,46,30,2.8,111.05,1.7,67 +276,46,30,2.8,111.05,1.7,67 +277,46,30,2.8,111.05,1.7,67 +278,46,30,2.8,111.05,1.7,67 +279,46,30,2.8,111.05,1.7,67 +280,46,30,2.8,111.05,1.7,67 +281,46,30,2.8,111.05,1.7,67 +282,46,30,2.8,111.05,1.7,67 +283,46,30,2.8,111.05,1.7,67 +284,46,30,2.8,111.05,1.7,67 +285,46,30,2.8,111.05,1.7,67 +286,46,30,2.8,111.05,1.7,67 +287,46,30,2.8,111.05,1.7,67 +288,46,30,2.8,111.05,1.7,67 +289,46,30,2.8,111.05,1.7,67 +290,46,30,2.8,111.05,1.7,67 +291,46,30,2.8,111.05,1.7,67 +292,46,30,2.8,111.05,1.7,67 +293,46,30,2.8,111.05,1.7,67 +294,46,30,2.8,111.05,1.7,67 +295,46,30,2.8,111.05,1.7,67 +296,46,30,2.8,111.05,1.7,67 +297,46,30,2.8,111.05,1.7,67 +298,46,30,2.8,111.05,1.7,67 +299,46,30,2.8,111.05,1.7,67 +300,46,30,2.7,111.05,1.7,67 +301,46,30,2.7,111.05,1.7,67 +302,46,30,2.7,111.05,1.7,67 +303,46,30,2.7,111.05,1.7,67 +304,46,30,2.7,111.05,1.7,67 +305,46,30,2.7,111.05,1.7,67 +306,46,30,2.7,111.05,1.7,67 +307,46,30,2.7,111.05,1.7,67 +308,46,30,2.7,111.05,1.7,67 +309,46,30,2.7,111.05,1.7,67 +310,46,30,2.7,111.05,1.7,67 +311,46,30,2.7,111.05,1.7,67 +312,46,30,2.7,111.05,1.7,67 +313,46,30,2.7,111.05,1.7,67 +314,46,30,2.7,111.05,1.7,67 +315,46,30,2.7,111.05,1.7,67 +316,46,30,2.7,111.05,1.7,67 +317,46,30,2.7,111.05,1.7,67 +318,46,30,2.7,111.05,1.7,67 +319,46,30,2.7,111.05,1.7,67 +320,46,30,2.7,111.05,1.7,67 +321,46,30,2.7,111.05,1.7,67 +322,46,30,2.7,111.05,1.7,67 +323,46,30,2.7,111.05,1.7,67 +324,46,30,2.7,111.05,1.7,67 +325,46,30,2.7,111.05,1.7,67 +326,46,30,2.7,111.05,1.7,67 +327,46,30,2.7,111.05,1.7,67 +328,46,30,2.7,111.05,1.7,67 +329,46,30,2.7,111.05,1.7,67 +330,46,30,2.7,111.05,1.7,67 +331,46,30,2.7,111.05,1.7,67 +332,46,30,2.7,111.05,1.7,67 +333,46,30,2.7,111.05,1.7,67 +334,46,30,2.7,111.05,1.7,67 +335,46,30,2.7,111.05,1.7,67 +336,46,30,2.7,111.05,1.7,67 +337,46,30,2.7,111.05,1.7,67 +338,46,30,2.7,111.05,1.7,67 +339,46,30,2.7,111.05,1.7,67 +340,46,30,2.7,111.05,1.7,67 +341,46,30,2.7,111.05,1.7,67 +342,46,30,2.7,111.05,1.7,67 +343,46,30,2.7,111.05,1.7,67 +344,46,30,2.7,111.05,1.7,67 +345,46,30,2.7,111.05,1.7,67 +346,46,30,2.7,111.05,1.7,67 +347,46,30,2.7,111.05,1.7,67 +348,46,30,2.7,111.05,1.7,67 +349,46,30,2.7,111.05,1.7,67 +350,46,30,2.7,111.05,1.7,67 +351,46,30,2.7,111.05,1.7,67 +352,46,30,2.7,111.05,1.7,67 +353,46,30,2.7,111.05,1.7,67 +354,46,30,2.7,111.05,1.7,67 +355,46,30,2.7,111.05,1.7,67 +356,46,30,2.7,111.05,1.7,67 +357,46,30,2.7,111.05,1.7,67 +358,46,30,2.7,111.05,1.7,67 +359,46,30,2.7,111.05,1.7,67 +360,46,30,2.7,111.05,1.7,67 +361,46,30,2.7,111.05,1.7,67 +362,46,30,2.7,111.05,1.7,67 +363,46,30,2.7,111.05,1.7,67 +364,46,30,2.7,111.05,1.7,67 +365,46,30,2.7,111.05,1.7,67 +366,46,30,2.7,111.05,1.7,67 +367,46,30,2.7,111.05,1.7,67 +368,46,30,2.7,111.05,1.7,67 +369,46,30,2.7,111.05,1.7,67 +370,46,30,2.7,111.05,1.7,67 +371,46,30,2.7,111.05,1.7,67 +372,46,30,2.7,111.05,1.7,67 +373,46,30,2.7,111.05,1.7,67 +374,46,30,2.7,111.05,1.7,67 +375,46,30,2.7,111.05,1.7,67 +376,46,30,2.7,111.05,1.7,67 +377,46,30,2.7,111.05,1.7,67 +378,46,30,2.7,111.05,1.7,67 +379,46,30,2.7,111.05,1.7,67 +380,46,30,2.7,111.05,1.7,67 +381,46,30,2.7,111.05,1.7,67 +382,46,30,2.7,111.05,1.7,67 +383,46,30,2.7,111.05,1.7,67 +384,46,30,2.7,111.05,1.7,67 +385,46,30,2.7,111.05,1.7,67 +386,46,30,2.7,111.05,1.7,67 +387,46,30,2.7,111.05,1.7,67 +388,46,30,2.7,111.05,1.7,67 +389,46,30,2.7,111.05,1.7,67 +390,46,30,2.7,111.05,1.7,67 +391,46,30,2.7,111.05,1.7,67 +392,46,30,2.7,111.05,1.7,67 +393,46,30,2.7,111.05,1.7,67 +394,46,30,2.7,111.05,1.7,67 +395,46,30,2.7,111.05,1.7,67 +396,46,30,2.7,111.05,1.7,67 +397,46,30,2.7,111.05,1.7,67 +398,46,30,2.7,111.05,1.7,67 +399,46,30,2.7,111.05,1.7,67 +400,46,30,2.7,111.05,1.7,67 +401,46,30,2.7,111.05,1.7,66.9975 +402,46,30,2.7,111.05,1.7,66.995 +403,46,30,2.7,111.05,1.7,66.9925 +404,46,30,2.7,111.05,1.7,66.99 +405,46,30,2.7,111.05,1.7,66.9875 +406,46,30,2.7,111.05,1.7,66.985 +407,46,30,2.7,111.05,1.7,66.9825 +408,46,30,2.7,111.05,1.7,66.98 +409,46,30,2.7,111.05,1.7,66.9775 +410,46,30,2.7,111.05,1.7,66.975 +411,46,30,2.7,111.05,1.7,66.9725 +412,46,30,2.7,111.05,1.7,66.97 +413,46,30,2.7,111.05,1.7,66.9675 +414,46,30,2.7,111.05,1.7,66.965 +415,46,30,2.7,111.05,1.7,66.9625 +416,46,30,2.7,111.05,1.7,66.96 +417,46,30,2.7,111.05,1.7,66.9575 +418,46,30,2.7,111.05,1.7,66.955 +419,46,30,2.7,111.05,1.7,66.9525 +420,46,30,2.7,111.05,1.7,66.95 +421,46,30,2.7,111.05,1.7,66.9475 +422,46,30,2.7,111.05,1.7,66.945 +423,46,30,2.7,111.05,1.7,66.9425 +424,46,30,2.7,111.05,1.7,66.94 +425,46,30,2.7,111.05,1.7,66.9375 +426,46,30,2.7,111.05,1.7,66.935 +427,46,30,2.7,111.05,1.7,66.9325 +428,46,30,2.7,111.05,1.7,66.93 +429,46,30,2.7,111.05,1.7,66.9275 +430,46,30,2.7,111.05,1.7,66.925 +431,46,30,2.7,111.05,1.7,66.9225 +432,46,30,2.7,111.05,1.7,66.92 +433,46,30,2.7,111.05,1.7,66.9175 +434,46,30,2.7,111.05,1.7,66.915 +435,46,30,2.7,111.05,1.7,66.9125 +436,46,30,2.7,111.05,1.7,66.91 +437,46,30,2.7,111.05,1.7,66.9075 +438,46,30,2.7,111.05,1.7,66.905 +439,46,30,2.7,111.05,1.7,66.9025 +440,46,30,2.7,111.05,1.7,66.9 +441,46,30,2.7,111.05,1.7,66.8975 +442,46,30,2.7,111.05,1.7,66.895 +443,46,30,2.7,111.05,1.7,66.8925 +444,46,30,2.7,111.05,1.7,66.89 +445,46,30,2.7,111.05,1.7,66.8875 +446,46,30,2.7,111.05,1.7,66.885 +447,46,30,2.7,111.05,1.7,66.8825 +448,46,30,2.7,111.05,1.7,66.88 +449,46,30,2.7,111.05,1.7,66.8775 +450,46,30,2.7,111.05,1.7,66.875 +451,46,30,2.7,111.05,1.7,66.8725 +452,46,30,2.7,111.05,1.7,66.87 +453,46,30,2.7,111.05,1.7,66.8675 +454,46,30,2.7,111.05,1.7,66.865 +455,46,30,2.7,111.05,1.7,66.8625 +456,46,30,2.7,111.05,1.7,66.86 +457,46,30,2.7,111.05,1.7,66.8575 +458,46,30,2.7,111.05,1.7,66.855 +459,46,30,2.7,111.05,1.7,66.8525 +460,46,30,2.7,111.05,1.7,66.85 +461,46,30,2.7,111.05,1.7,66.8475 +462,46,30,2.7,111.05,1.7,66.845 +463,46,30,2.7,111.05,1.7,66.8425 +464,46,30,2.7,111.05,1.7,66.84 +465,46,30,2.7,111.05,1.7,66.8375 +466,46,30,2.7,111.05,1.7,66.835 +467,46,30,2.7,111.05,1.7,66.8325 +468,46,30,2.7,111.05,1.7,66.83 +469,46,30,2.7,111.05,1.7,66.8275 +470,46,30,2.7,111.05,1.7,66.825 +471,46,30,2.7,111.05,1.7,66.8225 +472,46,30,2.7,111.05,1.7,66.82 +473,46,30,2.7,111.05,1.7,66.8175 +474,46,30,2.7,111.05,1.7,66.815 +475,46,30,2.7,111.05,1.7,66.8125 +476,46,30,2.7,111.05,1.7,66.81 +477,46,30,2.7,111.05,1.7,66.8075 +478,46,30,2.7,111.05,1.7,66.805 +479,46,30,2.7,111.05,1.7,66.8025 +480,46,30,2.7,111.05,1.7,66.8 +481,46,30,2.7,111.05,1.7,66.7975 +482,46,30,2.7,111.05,1.7,66.795 +483,46,30,2.7,111.05,1.7,66.7925 +484,46,30,2.7,111.05,1.7,66.79 +485,46,30,2.7,111.05,1.7,66.7875 +486,46,30,2.7,111.05,1.7,66.785 +487,46,30,2.7,111.05,1.7,66.7825 +488,46,30,2.7,111.05,1.7,66.78 +489,46,30,2.7,111.05,1.7,66.7775 +490,46,30,2.7,111.05,1.7,66.775 +491,46,30,2.7,111.05,1.7,66.7725 +492,46,30,2.7,111.05,1.7,66.77 +493,46,30,2.7,111.05,1.7,66.7675 +494,46,30,2.7,111.05,1.7,66.765 +495,46,30,2.7,111.05,1.7,66.7625 +496,46,30,2.7,111.05,1.7,66.76 +497,46,30,2.7,111.05,1.7,66.7575 +498,46,30,2.7,111.05,1.7,66.755 +499,46,30,2.7,111.05,1.7,66.7525 +500,46,30,2.7,111.05,1.7,66.75 +501,46,30,2.7,111.05,1.7,66.7475 +502,46,30,2.7,111.05,1.7,66.745 +503,46,30,2.7,111.05,1.7,66.7425 +504,46,30,2.7,111.05,1.7,66.74 +505,46,30,2.7,111.05,1.7,66.7375 +506,46,30,2.7,111.05,1.7,66.735 +507,46,30,2.7,111.05,1.7,66.7325 +508,46,30,2.7,111.05,1.7,66.73 +509,46,30,2.7,111.05,1.7,66.7275 +510,46,30,2.7,111.05,1.7,66.725 +511,46,30,2.7,111.05,1.7,66.7225 +512,46,30,2.7,111.05,1.7,66.72 +513,46,30,2.7,111.05,1.7,66.7175 +514,46,30,2.7,111.05,1.7,66.715 +515,46,30,2.7,111.05,1.7,66.7125 +516,46,30,2.7,111.05,1.7,66.71 +517,46,30,2.7,111.05,1.7,66.7075 +518,46,30,2.7,111.05,1.7,66.705 +519,46,30,2.7,111.05,1.7,66.7025 +520,46,30,2.7,111.05,1.7,66.7 +521,46,30,2.7,111.05,1.7,66.6975 +522,46,30,2.7,111.05,1.7,66.695 +523,46,30,2.7,111.05,1.7,66.6925 +524,46,30,2.7,111.05,1.7,66.69 +525,46,30,2.7,111.05,1.7,66.6875 +526,46,30,2.7,111.05,1.7,66.685 +527,46,30,2.7,111.05,1.7,66.6825 +528,46,30,2.7,111.05,1.7,66.68 +529,46,30,2.7,111.05,1.7,66.6775 +530,46,30,2.7,111.05,1.7,66.675 +531,46,30,2.7,111.05,1.7,66.6725 +532,46,30,2.7,111.05,1.7,66.67 +533,46,30,2.7,111.05,1.7,66.6675 +534,46,30,2.7,111.05,1.7,66.665 +535,46,30,2.7,111.05,1.7,66.6625 +536,46,30,2.7,111.05,1.7,66.66 +537,46,30,2.7,111.05,1.7,66.6575 +538,46,30,2.7,111.05,1.7,66.655 +539,46,30,2.7,111.05,1.7,66.6525 +540,46,30,2.7,111.05,1.7,66.65 +541,46,30,2.7,111.05,1.7,66.6475 +542,46,30,2.7,111.05,1.7,66.645 +543,46,30,2.7,111.05,1.7,66.6425 +544,46,30,2.7,111.05,1.7,66.64 +545,46,30,2.7,111.05,1.7,66.6375 +546,46,30,2.7,111.05,1.7,66.635 +547,46,30,2.7,111.05,1.7,66.6325 +548,46,30,2.7,111.05,1.7,66.63 +549,46,30,2.7,111.05,1.7,66.6275 +550,46,30,2.7,111.05,1.7,66.625 +551,46,30,2.7,111.05,1.7,66.6225 +552,46,30,2.7,111.05,1.7,66.62 +553,46,30,2.7,111.05,1.7,66.6175 +554,46,30,2.7,111.05,1.7,66.615 +555,46,30,2.7,111.05,1.7,66.6125 +556,46,30,2.7,111.05,1.7,66.61 +557,46,30,2.7,111.05,1.7,66.6075 +558,46,30,2.7,111.05,1.7,66.605 +559,46,30,2.7,111.05,1.7,66.6025 +560,46,30,2.7,111.05,1.7,66.6 +561,46,30,2.7,111.05,1.7,66.5975 +562,46,30,2.7,111.05,1.7,66.595 +563,46,30,2.7,111.05,1.7,66.5925 +564,46,30,2.7,111.05,1.7,66.59 +565,46,30,2.7,111.05,1.7,66.5875 +566,46,30,2.7,111.05,1.7,66.585 +567,46,30,2.7,111.05,1.7,66.5825 +568,46,30,2.7,111.05,1.7,66.58 +569,46,30,2.7,111.05,1.7,66.5775 +570,46,30,2.7,111.05,1.7,66.575 +571,46,30,2.7,111.05,1.7,66.5725 +572,46,30,2.7,111.05,1.7,66.57 +573,46,30,2.7,111.05,1.7,66.5675 +574,46,30,2.7,111.05,1.7,66.565 +575,46,30,2.7,111.05,1.7,66.5625 +576,46,30,2.7,111.05,1.7,66.56 +577,46,30,2.7,111.05,1.7,66.5575 +578,46,30,2.7,111.05,1.7,66.555 +579,46,30,2.7,111.05,1.7,66.5525 +580,46,30,2.7,111.05,1.7,66.55 +581,46,30,2.7,111.05,1.7,66.5475 +582,46,30,2.7,111.05,1.7,66.545 +583,46,30,2.7,111.05,1.7,66.5425 +584,46,30,2.7,111.05,1.7,66.54 +585,46,30,2.7,111.05,1.7,66.5375 +586,46,30,2.7,111.05,1.7,66.535 +587,46,30,2.7,111.05,1.7,66.5325 +588,46,30,2.7,111.05,1.7,66.53 +589,46,30,2.7,111.05,1.7,66.5275 +590,46,30,2.7,111.05,1.7,66.525 +591,46,30,2.7,111.05,1.7,66.5225 +592,46,30,2.7,111.05,1.7,66.52 +593,46,30,2.7,111.05,1.7,66.5175 +594,46,30,2.7,111.05,1.7,66.515 +595,46,30,2.7,111.05,1.7,66.5125 +596,46,30,2.7,111.05,1.7,66.51 +597,46,30,2.7,111.05,1.7,66.5075 +598,46,30,2.7,111.05,1.7,66.505 +599,46,30,2.7,111.05,1.7,66.5025 +600,46,30,2.7,111.05,1.7,66.5 +601,46,30,2.7,111.05,1.7,66.495 +602,46,30,2.7,111.05,1.7,66.49 +603,46,30,2.7,111.05,1.7,66.485 +604,46,30,2.7,111.05,1.7,66.48 +605,46,30,2.7,111.05,1.7,66.475 +606,46,30,2.7,111.05,1.7,66.47 +607,46,30,2.7,111.05,1.7,66.465 +608,46,30,2.7,111.05,1.7,66.46 +609,46,30,2.7,111.05,1.7,66.455 +610,46,30,2.7,111.05,1.7,66.45 +611,46,30,2.7,111.05,1.7,66.445 +612,46,30,2.7,111.05,1.7,66.44 +613,46,30,2.7,111.05,1.7,66.435 +614,46,30,2.7,111.05,1.7,66.43 +615,46,30,2.7,111.05,1.7,66.425 +616,46,30,2.7,111.05,1.7,66.42 +617,46,30,2.7,111.05,1.7,66.415 +618,46,30,2.7,111.05,1.7,66.41 +619,46,30,2.7,111.05,1.7,66.405 +620,46,30,2.7,111.05,1.7,66.4 +621,46,30,2.7,111.05,1.7,66.395 +622,46,30,2.7,111.05,1.7,66.39 +623,46,30,2.7,111.05,1.7,66.385 +624,46,30,2.7,111.05,1.7,66.38 +625,46,30,2.7,111.05,1.7,66.375 +626,46,30,2.7,111.05,1.7,66.37 +627,46,30,2.7,111.05,1.7,66.365 +628,46,30,2.7,111.05,1.7,66.36 +629,46,30,2.7,111.05,1.7,66.355 +630,46,30,2.7,111.05,1.7,66.35 +631,46,30,2.7,111.05,1.7,66.345 +632,46,30,2.7,111.05,1.7,66.34 +633,46,30,2.7,111.05,1.7,66.335 +634,46,30,2.7,111.05,1.7,66.33 +635,46,30,2.7,111.05,1.7,66.325 +636,46,30,2.7,111.05,1.7,66.32 +637,46,30,2.7,111.05,1.7,66.315 +638,46,30,2.7,111.05,1.7,66.31 +639,46,30,2.7,111.05,1.7,66.305 +640,46,30,2.7,111.05,1.7,66.3 +641,46,30,2.7,111.05,1.7,66.295 +642,46,30,2.7,111.05,1.7,66.29 +643,46,30,2.7,111.05,1.7,66.285 +644,46,30,2.7,111.05,1.7,66.28 +645,46,30,2.7,111.05,1.7,66.275 +646,46,30,2.7,111.05,1.7,66.27 +647,46,30,2.7,111.05,1.7,66.265 +648,46,30,2.7,111.05,1.7,66.26 +649,46,30,2.7,111.05,1.7,66.255 +650,46,30,2.7,111.05,1.7,66.25 +651,46,30,2.7,111.05,1.7,66.245 +652,46,30,2.7,111.05,1.7,66.24 +653,46,30,2.7,111.05,1.7,66.235 +654,46,30,2.7,111.05,1.7,66.23 +655,46,30,2.7,111.05,1.7,66.225 +656,46,30,2.7,111.05,1.7,66.22 +657,46,30,2.7,111.05,1.7,66.215 +658,46,30,2.7,111.05,1.7,66.21 +659,46,30,2.7,111.05,1.7,66.205 +660,46,30,2.7,111.05,1.7,66.2 +661,46,30,2.7,111.05,1.7,66.195 +662,46,30,2.7,111.05,1.7,66.19 +663,46,30,2.7,111.05,1.7,66.185 +664,46,30,2.7,111.05,1.7,66.18 +665,46,30,2.7,111.05,1.7,66.175 +666,46,30,2.7,111.05,1.7,66.17 +667,46,30,2.7,111.05,1.7,66.165 +668,46,30,2.7,111.05,1.7,66.16 +669,46,30,2.7,111.05,1.7,66.155 +670,46,30,2.7,111.05,1.7,66.15 +671,46,30,2.7,111.05,1.7,66.145 +672,46,30,2.7,111.05,1.7,66.14 +673,46,30,2.7,111.05,1.7,66.135 +674,46,30,2.7,111.05,1.7,66.13 +675,46,30,2.7,111.05,1.7,66.125 +676,46,30,2.7,111.05,1.7,66.12 +677,46,30,2.7,111.05,1.7,66.115 +678,46,30,2.7,111.05,1.7,66.11 +679,46,30,2.7,111.05,1.7,66.105 +680,46,30,2.7,111.05,1.7,66.1 +681,46,30,2.7,111.05,1.7,66.095 +682,46,30,2.7,111.05,1.7,66.09 +683,46,30,2.7,111.05,1.7,66.085 +684,46,30,2.7,111.05,1.7,66.08 +685,46,30,2.7,111.05,1.7,66.075 +686,46,30,2.7,111.05,1.7,66.07 +687,46,30,2.7,111.05,1.7,66.065 +688,46,30,2.7,111.05,1.7,66.06 +689,46,30,2.7,111.05,1.7,66.055 +690,46,30,2.7,111.05,1.7,66.05 +691,46,30,2.7,111.05,1.7,66.045 +692,46,30,2.7,111.05,1.7,66.04 +693,46,30,2.7,111.05,1.7,66.035 +694,46,30,2.7,111.05,1.7,66.03 +695,46,30,2.7,111.05,1.7,66.025 +696,46,30,2.7,111.05,1.7,66.02 +697,46,30,2.7,111.05,1.7,66.015 +698,46,30,2.7,111.05,1.7,66.01 +699,46,30,2.7,111.05,1.7,66.005 +700,46,30,2.7,111.05,1.7,66 +701,46,30,2.7,111.05,1.7,65.995 +702,46,30,2.7,111.05,1.7,65.99 +703,46,30,2.7,111.05,1.7,65.985 +704,46,30,2.7,111.05,1.7,65.98 +705,46,30,2.7,111.05,1.7,65.975 +706,46,30,2.7,111.05,1.7,65.97 +707,46,30,2.7,111.05,1.7,65.965 +708,46,30,2.7,111.05,1.7,65.96 +709,46,30,2.7,111.05,1.7,65.955 +710,46,30,2.7,111.05,1.7,65.95 +711,46,30,2.7,111.05,1.7,65.945 +712,46,30,2.7,111.05,1.7,65.94 +713,46,30,2.7,111.05,1.7,65.935 +714,46,30,2.7,111.05,1.7,65.93 +715,46,30,2.7,111.05,1.7,65.925 +716,46,30,2.7,111.05,1.7,65.92 +717,46,30,2.7,111.05,1.7,65.915 +718,46,30,2.7,111.05,1.7,65.91 +719,46,30,2.7,111.05,1.7,65.905 +720,46,30,2.7,111.05,1.7,65.9 +721,46,30,2.7,111.05,1.7,65.895 +722,46,30,2.7,111.05,1.7,65.89 +723,46,30,2.7,111.05,1.7,65.885 +724,46,30,2.7,111.05,1.7,65.88 +725,46,30,2.7,111.05,1.7,65.875 +726,46,30,2.7,111.05,1.7,65.87 +727,46,30,2.7,111.05,1.7,65.865 +728,46,30,2.7,111.05,1.7,65.86 +729,46,30,2.7,111.05,1.7,65.855 +730,46,30,2.7,111.05,1.7,65.85 +731,46,30,2.7,111.05,1.7,65.845 +732,46,30,2.7,111.05,1.7,65.84 +733,46,30,2.7,111.05,1.7,65.835 +734,46,30,2.7,111.05,1.7,65.83 +735,46,30,2.7,111.05,1.7,65.825 +736,46,30,2.7,111.05,1.7,65.82 +737,46,30,2.7,111.05,1.7,65.815 +738,46,30,2.7,111.05,1.7,65.81 +739,46,30,2.7,111.05,1.7,65.805 +740,46,30,2.7,111.05,1.7,65.8 +741,46,30,2.7,111.05,1.7,65.795 +742,46,30,2.7,111.05,1.7,65.79 +743,46,30,2.7,111.05,1.7,65.785 +744,46,30,2.7,111.05,1.7,65.78 +745,46,30,2.7,111.05,1.7,65.775 +746,46,30,2.7,111.05,1.7,65.77 +747,46,30,2.7,111.05,1.7,65.765 +748,46,30,2.7,111.05,1.7,65.76 +749,46,30,2.7,111.05,1.7,65.755 +750,46,30,2.7,111.05,1.7,65.75 +751,46,30,2.7,111.05,1.7,65.745 +752,46,30,2.7,111.05,1.7,65.74 +753,46,30,2.7,111.05,1.7,65.735 +754,46,30,2.7,111.05,1.7,65.73 +755,46,30,2.7,111.05,1.7,65.725 +756,46,30,2.7,111.05,1.7,65.72 +757,46,30,2.7,111.05,1.7,65.715 +758,46,30,2.7,111.05,1.7,65.71 +759,46,30,2.7,111.05,1.7,65.705 +760,46,30,2.7,111.05,1.7,65.7 +761,46,30,2.7,111.05,1.7,65.695 +762,46,30,2.7,111.05,1.7,65.69 +763,46,30,2.7,111.05,1.7,65.685 +764,46,30,2.7,111.05,1.7,65.68 +765,46,30,2.7,111.05,1.7,65.675 +766,46,30,2.7,111.05,1.7,65.67 +767,46,30,2.7,111.05,1.7,65.665 +768,46,30,2.7,111.05,1.7,65.66 +769,46,30,2.7,111.05,1.7,65.655 +770,46,30,2.7,111.05,1.7,65.65 +771,46,30,2.7,111.05,1.7,65.645 +772,46,30,2.7,111.05,1.7,65.64 +773,46,30,2.7,111.05,1.7,65.635 +774,46,30,2.7,111.05,1.7,65.63 +775,46,30,2.7,111.05,1.7,65.625 +776,46,30,2.7,111.05,1.7,65.62 +777,46,30,2.7,111.05,1.7,65.615 +778,46,30,2.7,111.05,1.7,65.61 +779,46,30,2.7,111.05,1.7,65.605 +780,46,30,2.7,111.05,1.7,65.6 +781,46,30,2.7,111.05,1.7,65.595 +782,46,30,2.7,111.05,1.7,65.59 +783,46,30,2.7,111.05,1.7,65.585 +784,46,30,2.7,111.05,1.7,65.58 +785,46,30,2.7,111.05,1.7,65.575 +786,46,30,2.7,111.05,1.7,65.57 +787,46,30,2.7,111.05,1.7,65.565 +788,46,30,2.7,111.05,1.7,65.56 +789,46,30,2.7,111.05,1.7,65.555 +790,46,30,2.7,111.05,1.7,65.55 +791,46,30,2.7,111.05,1.7,65.545 +792,46,30,2.7,111.05,1.7,65.54 +793,46,30,2.7,111.05,1.7,65.535 +794,46,30,2.7,111.05,1.7,65.53 +795,46,30,2.7,111.05,1.7,65.525 +796,46,30,2.7,111.05,1.7,65.52 +797,46,30,2.7,111.05,1.7,65.515 +798,46,30,2.7,111.05,1.7,65.51 +799,46,30,2.7,111.05,1.7,65.505 +800,46,30,2.7,111.05,1.7,65.5 +801,46,30,2.7,111.05,1.7,65.495 +802,46,30,2.7,111.05,1.7,65.49 +803,46,30,2.7,111.05,1.7,65.485 +804,46,30,2.7,111.05,1.7,65.48 +805,46,30,2.7,111.05,1.7,65.475 +806,46,30,2.7,111.05,1.7,65.47 +807,46,30,2.7,111.05,1.7,65.465 +808,46,30,2.7,111.05,1.7,65.46 +809,46,30,2.7,111.05,1.7,65.455 +810,46,30,2.7,111.05,1.7,65.45 +811,46,30,2.7,111.05,1.7,65.445 +812,46,30,2.7,111.05,1.7,65.44 +813,46,30,2.7,111.05,1.7,65.435 +814,46,30,2.7,111.05,1.7,65.43 +815,46,30,2.7,111.05,1.7,65.425 +816,46,30,2.7,111.05,1.7,65.42 +817,46,30,2.7,111.05,1.7,65.415 +818,46,30,2.7,111.05,1.7,65.41 +819,46,30,2.7,111.05,1.7,65.405 +820,46,30,2.7,111.05,1.7,65.4 +821,46,30,2.7,111.05,1.7,65.395 +822,46,30,2.7,111.05,1.7,65.39 +823,46,30,2.7,111.05,1.7,65.385 +824,46,30,2.7,111.05,1.7,65.38 +825,46,30,2.7,111.05,1.7,65.375 +826,46,30,2.7,111.05,1.7,65.37 +827,46,30,2.7,111.05,1.7,65.365 +828,46,30,2.7,111.05,1.7,65.36 +829,46,30,2.7,111.05,1.7,65.355 +830,46,30,2.7,111.05,1.7,65.35 +831,46,30,2.7,111.05,1.7,65.345 +832,46,30,2.7,111.05,1.7,65.34 +833,46,30,2.7,111.05,1.7,65.335 +834,46,30,2.7,111.05,1.7,65.33 +835,46,30,2.7,111.05,1.7,65.325 +836,46,30,2.7,111.05,1.7,65.32 +837,46,30,2.7,111.05,1.7,65.315 +838,46,30,2.7,111.05,1.7,65.31 +839,46,30,2.7,111.05,1.7,65.305 +840,46,30,2.7,111.05,1.7,65.3 +841,46,30,2.7,111.05,1.7,65.295 +842,46,30,2.7,111.05,1.7,65.29 +843,46,30,2.7,111.05,1.7,65.285 +844,46,30,2.7,111.05,1.7,65.28 +845,46,30,2.7,111.05,1.7,65.275 +846,46,30,2.7,111.05,1.7,65.27 +847,46,30,2.7,111.05,1.7,65.265 +848,46,30,2.7,111.05,1.7,65.26 +849,46,30,2.7,111.05,1.7,65.255 +850,46,30,2.7,111.05,1.7,65.25 +851,46,30,2.7,111.05,1.7,65.245 +852,46,30,2.7,111.05,1.7,65.24 +853,46,30,2.7,111.05,1.7,65.235 +854,46,30,2.7,111.05,1.7,65.23 +855,46,30,2.7,111.05,1.7,65.225 +856,46,30,2.7,111.05,1.7,65.22 +857,46,30,2.7,111.05,1.7,65.215 +858,46,30,2.7,111.05,1.7,65.21 +859,46,30,2.7,111.05,1.7,65.205 +860,46,30,2.7,111.05,1.7,65.2 +861,46,30,2.7,111.05,1.7,65.195 +862,46,30,2.7,111.05,1.7,65.19 +863,46,30,2.7,111.05,1.7,65.185 +864,46,30,2.7,111.05,1.7,65.18 +865,46,30,2.7,111.05,1.7,65.175 +866,46,30,2.7,111.05,1.7,65.17 +867,46,30,2.7,111.05,1.7,65.165 +868,46,30,2.7,111.05,1.7,65.16 +869,46,30,2.7,111.05,1.7,65.155 +870,46,30,2.7,111.05,1.7,65.15 +871,46,30,2.7,111.05,1.7,65.145 +872,46,30,2.7,111.05,1.7,65.14 +873,46,30,2.7,111.05,1.7,65.135 +874,46,30,2.7,111.05,1.7,65.13 +875,46,30,2.7,111.05,1.7,65.125 +876,46,30,2.7,111.05,1.7,65.12 +877,46,30,2.7,111.05,1.7,65.115 +878,46,30,2.7,111.05,1.7,65.11 +879,46,30,2.7,111.05,1.7,65.105 +880,46,30,2.7,111.05,1.7,65.1 +881,46,30,2.7,111.05,1.7,65.095 +882,46,30,2.7,111.05,1.7,65.09 +883,46,30,2.7,111.05,1.7,65.085 +884,46,30,2.7,111.05,1.7,65.08 +885,46,30,2.7,111.05,1.7,65.075 +886,46,30,2.7,111.05,1.7,65.07 +887,46,30,2.7,111.05,1.7,65.065 +888,46,30,2.7,111.05,1.7,65.06 +889,46,30,2.7,111.05,1.7,65.055 +890,46,30,2.7,111.05,1.7,65.05 +891,46,30,2.7,111.05,1.7,65.045 +892,46,30,2.7,111.05,1.7,65.04 +893,46,30,2.7,111.05,1.7,65.035 +894,46,30,2.7,111.05,1.7,65.03 +895,46,30,2.7,111.05,1.7,65.025 +896,46,30,2.7,111.05,1.7,65.02 +897,46,30,2.7,111.05,1.7,65.015 +898,46,30,2.7,111.05,1.7,65.01 +899,46,30,2.7,111.05,1.7,65.005 +900,46,30,2.7,111.05,1.7,65 +901,46,30,2.7,111.05,1.7,64.99833333 +902,46,30,2.7,111.05,1.7,64.99666667 +903,46,30,2.7,111.05,1.7,64.995 +904,46,30,2.7,111.05,1.7,64.99333333 +905,46,30,2.7,111.05,1.7,64.99166667 +906,46,30,2.7,111.05,1.7,64.99 +907,46,30,2.7,111.05,1.7,64.98833333 +908,46,30,2.7,111.05,1.7,64.98666667 +909,46,30,2.7,111.05,1.7,64.985 +910,46,30,2.7,111.05,1.7,64.98333333 +911,46,30,2.7,111.05,1.7,64.98166667 +912,46,30,2.7,111.05,1.7,64.98 +913,46,30,2.7,111.05,1.7,64.97833333 +914,46,30,2.7,111.05,1.7,64.97666667 +915,46,30,2.7,111.05,1.7,64.975 +916,46,30,2.7,111.05,1.7,64.97333333 +917,46,30,2.7,111.05,1.7,64.97166667 +918,46,30,2.7,111.05,1.7,64.97 +919,46,30,2.7,111.05,1.7,64.96833333 +920,46,30,2.7,111.05,1.7,64.96666667 +921,46,30,2.7,111.05,1.7,64.965 +922,46,30,2.7,111.05,1.7,64.96333333 +923,46,30,2.7,111.05,1.7,64.96166667 +924,46,30,2.7,111.05,1.7,64.96 +925,46,30,2.7,111.05,1.7,64.95833333 +926,46,30,2.7,111.05,1.7,64.95666667 +927,46,30,2.7,111.05,1.7,64.955 +928,46,30,2.7,111.05,1.7,64.95333333 +929,46,30,2.7,111.05,1.7,64.95166667 +930,46,30,2.7,111.05,1.7,64.95 +931,46,30,2.7,111.05,1.7,64.94833333 +932,46,30,2.7,111.05,1.7,64.94666667 +933,46,30,2.7,111.05,1.7,64.945 +934,46,30,2.7,111.05,1.7,64.94333333 +935,46,30,2.7,111.05,1.7,64.94166667 +936,46,30,2.7,111.05,1.7,64.94 +937,46,30,2.7,111.05,1.7,64.93833333 +938,46,30,2.7,111.05,1.7,64.93666667 +939,46,30,2.7,111.05,1.7,64.935 +940,46,30,2.7,111.05,1.7,64.93333333 +941,46,30,2.7,111.05,1.7,64.93166667 +942,46,30,2.7,111.05,1.7,64.93 +943,46,30,2.7,111.05,1.7,64.92833333 +944,46,30,2.7,111.05,1.7,64.92666667 +945,46,30,2.7,111.05,1.7,64.925 +946,46,30,2.7,111.05,1.7,64.92333333 +947,46,30,2.7,111.05,1.7,64.92166667 +948,46,30,2.7,111.05,1.7,64.92 +949,46,30,2.7,111.05,1.7,64.91833333 +950,46,30,2.7,111.05,1.7,64.91666667 +951,46,30,2.7,111.05,1.7,64.915 +952,46,30,2.7,111.05,1.7,64.91333333 +953,46,30,2.7,111.05,1.7,64.91166666 +954,46,30,2.7,111.05,1.7,64.91 +955,46,30,2.7,111.05,1.7,64.90833333 +956,46,30,2.7,111.05,1.7,64.90666666 +957,46,30,2.7,111.05,1.7,64.905 +958,46,30,2.7,111.05,1.7,64.90333333 +959,46,30,2.7,111.05,1.7,64.90166666 +960,46,30,2.7,111.05,1.7,64.9 +961,46,30,2.7,111.05,1.7,64.89833333 +962,46,30,2.7,111.05,1.7,64.89666666 +963,46,30,2.7,111.05,1.7,64.895 +964,46,30,2.7,111.05,1.7,64.89333333 +965,46,30,2.7,111.05,1.7,64.89166666 +966,46,30,2.7,111.05,1.7,64.89 +967,46,30,2.7,111.05,1.7,64.88833333 +968,46,30,2.7,111.05,1.7,64.88666666 +969,46,30,2.7,111.05,1.7,64.885 +970,46,30,2.7,111.05,1.7,64.88333333 +971,46,30,2.7,111.05,1.7,64.88166666 +972,46,30,2.7,111.05,1.7,64.88 +973,46,30,2.7,111.05,1.7,64.87833333 +974,46,30,2.7,111.05,1.7,64.87666666 +975,46,30,2.7,111.05,1.7,64.875 +976,46,30,2.7,111.05,1.7,64.87333333 +977,46,30,2.7,111.05,1.7,64.87166666 +978,46,30,2.7,111.05,1.7,64.87 +979,46,30,2.7,111.05,1.7,64.86833333 +980,46,30,2.7,111.05,1.7,64.86666666 +981,46,30,2.7,111.05,1.7,64.865 +982,46,30,2.7,111.05,1.7,64.86333333 +983,46,30,2.7,111.05,1.7,64.86166666 +984,46,30,2.7,111.05,1.7,64.86 +985,46,30,2.7,111.05,1.7,64.85833333 +986,46,30,2.7,111.05,1.7,64.85666666 +987,46,30,2.7,111.05,1.7,64.855 +988,46,30,2.7,111.05,1.7,64.85333333 +989,46,30,2.7,111.05,1.7,64.85166666 +990,46,30,2.7,111.05,1.7,64.85 +991,46,30,2.7,111.05,1.7,64.84833333 +992,46,30,2.7,111.05,1.7,64.84666666 +993,46,30,2.7,111.05,1.7,64.845 +994,46,30,2.7,111.05,1.7,64.84333333 +995,46,30,2.7,111.05,1.7,64.84166666 +996,46,30,2.7,111.05,1.7,64.84 +997,46,30,2.7,111.05,1.7,64.83833333 +998,46,30,2.7,111.05,1.7,64.83666666 +999,46,30,2.7,111.05,1.7,64.835 +1000,46,30,2.7,111.05,1.7,64.83333333 +1001,46,30,2.7,111.05,1.7,64.83166666 +1002,46,30,2.7,111.05,1.7,64.83 +1003,46,30,2.7,111.05,1.7,64.82833333 +1004,46,30,2.7,111.05,1.7,64.82666666 +1005,46,30,2.7,111.05,1.7,64.825 +1006,46,30,2.7,111.05,1.7,64.82333333 +1007,46,30,2.7,111.05,1.7,64.82166666 +1008,46,30,2.7,111.05,1.7,64.82 +1009,46,30,2.7,111.05,1.7,64.81833333 +1010,46,30,2.7,111.05,1.7,64.81666666 +1011,46,30,2.7,111.05,1.7,64.815 +1012,46,30,2.7,111.05,1.7,64.81333333 +1013,46,30,2.7,111.05,1.7,64.81166666 +1014,46,30,2.7,111.05,1.7,64.81 +1015,46,30,2.7,111.05,1.7,64.80833333 +1016,46,30,2.7,111.05,1.7,64.80666666 +1017,46,30,2.7,111.05,1.7,64.805 +1018,46,30,2.7,111.05,1.7,64.80333333 +1019,46,30,2.7,111.05,1.7,64.80166666 +1020,46,30,2.7,111.05,1.7,64.8 +1021,46,30,2.7,111.05,1.7,64.79833333 +1022,46,30,2.7,111.05,1.7,64.79666666 +1023,46,30,2.7,111.05,1.7,64.795 +1024,46,30,2.7,111.05,1.7,64.79333333 +1025,46,30,2.7,111.05,1.7,64.79166666 +1026,46,30,2.7,111.05,1.7,64.79 +1027,46,30,2.7,111.05,1.7,64.78833333 +1028,46,30,2.7,111.05,1.7,64.78666666 +1029,46,30,2.7,111.05,1.7,64.785 +1030,46,30,2.7,111.05,1.7,64.78333333 +1031,46,30,2.7,111.05,1.7,64.78166666 +1032,46,30,2.7,111.05,1.7,64.78 +1033,46,30,2.7,111.05,1.7,64.77833333 +1034,46,30,2.7,111.05,1.7,64.77666666 +1035,46,30,2.7,111.05,1.7,64.775 +1036,46,30,2.7,111.05,1.7,64.77333333 +1037,46,30,2.7,111.05,1.7,64.77166666 +1038,46,30,2.7,111.05,1.7,64.77 +1039,46,30,2.7,111.05,1.7,64.76833333 +1040,46,30,2.7,111.05,1.7,64.76666666 +1041,46,30,2.7,111.05,1.7,64.765 +1042,46,30,2.7,111.05,1.7,64.76333333 +1043,46,30,2.7,111.05,1.7,64.76166666 +1044,46,30,2.7,111.05,1.7,64.76 +1045,46,30,2.7,111.05,1.7,64.75833333 +1046,46,30,2.7,111.05,1.7,64.75666666 +1047,46,30,2.7,111.05,1.7,64.755 +1048,46,30,2.7,111.05,1.7,64.75333333 +1049,46,30,2.7,111.05,1.7,64.75166666 +1050,46,30,2.7,111.05,1.7,64.75 +1051,46,30,2.7,111.05,1.7,64.74833333 +1052,46,30,2.7,111.05,1.7,64.74666666 +1053,46,30,2.7,111.05,1.7,64.74499999 +1054,46,30,2.7,111.05,1.7,64.74333333 +1055,46,30,2.7,111.05,1.7,64.74166666 +1056,46,30,2.7,111.05,1.7,64.73999999 +1057,46,30,2.7,111.05,1.7,64.73833333 +1058,46,30,2.7,111.05,1.7,64.73666666 +1059,46,30,2.7,111.05,1.7,64.73499999 +1060,46,30,2.7,111.05,1.7,64.73333333 +1061,46,30,2.7,111.05,1.7,64.73166666 +1062,46,30,2.7,111.05,1.7,64.72999999 +1063,46,30,2.7,111.05,1.7,64.72833333 +1064,46,30,2.7,111.05,1.7,64.72666666 +1065,46,30,2.7,111.05,1.7,64.72499999 +1066,46,30,2.7,111.05,1.7,64.72333333 +1067,46,30,2.7,111.05,1.7,64.72166666 +1068,46,30,2.7,111.05,1.7,64.71999999 +1069,46,30,2.7,111.05,1.7,64.71833333 +1070,46,30,2.7,111.05,1.7,64.71666666 +1071,46,30,2.7,111.05,1.7,64.71499999 +1072,46,30,2.7,111.05,1.7,64.71333333 +1073,46,30,2.7,111.05,1.7,64.71166666 +1074,46,30,2.7,111.05,1.7,64.70999999 +1075,46,30,2.7,111.05,1.7,64.70833333 +1076,46,30,2.7,111.05,1.7,64.70666666 +1077,46,30,2.7,111.05,1.7,64.70499999 +1078,46,30,2.7,111.05,1.7,64.70333333 +1079,46,30,2.7,111.05,1.7,64.70166666 +1080,46,30,2.7,111.05,1.7,64.69999999 +1081,46,30,2.7,111.05,1.7,64.69833333 +1082,46,30,2.7,111.05,1.7,64.69666666 +1083,46,30,2.7,111.05,1.7,64.69499999 +1084,46,30,2.7,111.05,1.7,64.69333333 +1085,46,30,2.7,111.05,1.7,64.69166666 +1086,46,30,2.7,111.05,1.7,64.68999999 +1087,46,30,2.7,111.05,1.7,64.68833333 +1088,46,30,2.7,111.05,1.7,64.68666666 +1089,46,30,2.7,111.05,1.7,64.68499999 +1090,46,30,2.7,111.05,1.7,64.68333333 +1091,46,30,2.7,111.05,1.7,64.68166666 +1092,46,30,2.7,111.05,1.7,64.67999999 +1093,46,30,2.7,111.05,1.7,64.67833333 +1094,46,30,2.7,111.05,1.7,64.67666666 +1095,46,30,2.7,111.05,1.7,64.67499999 +1096,46,30,2.7,111.05,1.7,64.67333333 +1097,46,30,2.7,111.05,1.7,64.67166666 +1098,46,30,2.7,111.05,1.7,64.66999999 +1099,46,30,2.7,111.05,1.7,64.66833333 +1100,46,30,2.7,111.05,1.7,64.66666666 +1101,46,30,2.7,111.05,1.7,64.66499999 +1102,46,30,2.7,111.05,1.7,64.66333333 +1103,46,30,2.7,111.05,1.7,64.66166666 +1104,46,30,2.7,111.05,1.7,64.65999999 +1105,46,30,2.7,111.05,1.7,64.65833333 +1106,46,30,2.7,111.05,1.7,64.65666666 +1107,46,30,2.7,111.05,1.7,64.65499999 +1108,46,30,2.7,111.05,1.7,64.65333333 +1109,46,30,2.7,111.05,1.7,64.65166666 +1110,46,30,2.7,111.05,1.7,64.64999999 +1111,46,30,2.7,111.05,1.7,64.64833333 +1112,46,30,2.7,111.05,1.7,64.64666666 +1113,46,30,2.7,111.05,1.7,64.64499999 +1114,46,30,2.7,111.05,1.7,64.64333333 +1115,46,30,2.7,111.05,1.7,64.64166666 +1116,46,30,2.7,111.05,1.7,64.63999999 +1117,46,30,2.7,111.05,1.7,64.63833333 +1118,46,30,2.7,111.05,1.7,64.63666666 +1119,46,30,2.7,111.05,1.7,64.63499999 +1120,46,30,2.7,111.05,1.7,64.63333333 +1121,46,30,2.7,111.05,1.7,64.63166666 +1122,46,30,2.7,111.05,1.7,64.62999999 +1123,46,30,2.7,111.05,1.7,64.62833333 +1124,46,30,2.7,111.05,1.7,64.62666666 +1125,46,30,2.7,111.05,1.7,64.62499999 +1126,46,30,2.7,111.05,1.7,64.62333333 +1127,46,30,2.7,111.05,1.7,64.62166666 +1128,46,30,2.7,111.05,1.7,64.61999999 +1129,46,30,2.7,111.05,1.7,64.61833333 +1130,46,30,2.7,111.05,1.7,64.61666666 +1131,46,30,2.7,111.05,1.7,64.61499999 +1132,46,30,2.7,111.05,1.7,64.61333333 +1133,46,30,2.7,111.05,1.7,64.61166666 +1134,46,30,2.7,111.05,1.7,64.60999999 +1135,46,30,2.7,111.05,1.7,64.60833333 +1136,46,30,2.7,111.05,1.7,64.60666666 +1137,46,30,2.7,111.05,1.7,64.60499999 +1138,46,30,2.7,111.05,1.7,64.60333333 +1139,46,30,2.7,111.05,1.7,64.60166666 +1140,46,30,2.7,111.05,1.7,64.59999999 +1141,46,30,2.7,111.05,1.7,64.59833333 +1142,46,30,2.7,111.05,1.7,64.59666666 +1143,46,30,2.7,111.05,1.7,64.59499999 +1144,46,30,2.7,111.05,1.7,64.59333333 +1145,46,30,2.7,111.05,1.7,64.59166666 +1146,46,30,2.7,111.05,1.7,64.58999999 +1147,46,30,2.7,111.05,1.7,64.58833333 +1148,46,30,2.7,111.05,1.7,64.58666666 +1149,46,30,2.7,111.05,1.7,64.58499999 +1150,46,30,2.7,111.05,1.7,64.58333333 +1151,46,30,2.7,111.05,1.7,64.58166666 +1152,46,30,2.7,111.05,1.7,64.57999999 +1153,46,30,2.7,111.05,1.7,64.57833332 +1154,46,30,2.7,111.05,1.7,64.57666666 +1155,46,30,2.7,111.05,1.7,64.57499999 +1156,46,30,2.7,111.05,1.7,64.57333332 +1157,46,30,2.7,111.05,1.7,64.57166666 +1158,46,30,2.7,111.05,1.7,64.56999999 +1159,46,30,2.7,111.05,1.7,64.56833332 +1160,46,30,2.7,111.05,1.7,64.56666666 +1161,46,30,2.7,111.05,1.7,64.56499999 +1162,46,30,2.7,111.05,1.7,64.56333332 +1163,46,30,2.7,111.05,1.7,64.56166666 +1164,46,30,2.7,111.05,1.7,64.55999999 +1165,46,30,2.7,111.05,1.7,64.55833332 +1166,46,30,2.7,111.05,1.7,64.55666666 +1167,46,30,2.7,111.05,1.7,64.55499999 +1168,46,30,2.7,111.05,1.7,64.55333332 +1169,46,30,2.7,111.05,1.7,64.55166666 +1170,46,30,2.7,111.05,1.7,64.54999999 +1171,46,30,2.7,111.05,1.7,64.54833332 +1172,46,30,2.7,111.05,1.7,64.54666666 +1173,46,30,2.7,111.05,1.7,64.54499999 +1174,46,30,2.7,111.05,1.7,64.54333332 +1175,46,30,2.7,111.05,1.7,64.54166666 +1176,46,30,2.7,111.05,1.7,64.53999999 +1177,46,30,2.7,111.05,1.7,64.53833332 +1178,46,30,2.7,111.05,1.7,64.53666666 +1179,46,30,2.7,111.05,1.7,64.53499999 +1180,46,30,2.7,111.05,1.7,64.53333332 +1181,46,30,2.7,111.05,1.7,64.53166666 +1182,46,30,2.7,111.05,1.7,64.52999999 +1183,46,30,2.7,111.05,1.7,64.52833332 +1184,46,30,2.7,111.05,1.7,64.52666666 +1185,46,30,2.7,111.05,1.7,64.52499999 +1186,46,30,2.7,111.05,1.7,64.52333332 +1187,46,30,2.7,111.05,1.7,64.52166666 +1188,46,30,2.7,111.05,1.7,64.51999999 +1189,46,30,2.7,111.05,1.7,64.51833332 +1190,46,30,2.7,111.05,1.7,64.51666666 +1191,46,30,2.7,111.05,1.7,64.51499999 +1192,46,30,2.7,111.05,1.7,64.51333332 +1193,46,30,2.7,111.05,1.7,64.51166666 +1194,46,30,2.7,111.05,1.7,64.50999999 +1195,46,30,2.7,111.05,1.7,64.50833332 +1196,46,30,2.7,111.05,1.7,64.50666666 +1197,46,30,2.7,111.05,1.7,64.50499999 +1198,46,30,2.7,111.05,1.7,64.50333332 +1199,46,30,2.7,111.05,1.7,64.50166666 +1200,46,30,2.7,111.05,1.7,64.5 +1201,46,30,2.7,111.05,1.7,64.499375 +1202,46,30,2.7,111.05,1.7,64.49875 +1203,46,30,2.7,111.05,1.7,64.498125 +1204,46,30,2.7,111.05,1.7,64.4975 +1205,46,30,2.7,111.05,1.7,64.496875 +1206,46,30,2.7,111.05,1.7,64.49625 +1207,46,30,2.7,111.05,1.7,64.495625 +1208,46,30,2.7,111.05,1.7,64.495 +1209,46,30,2.7,111.05,1.7,64.494375 +1210,46,30,2.7,111.05,1.7,64.49375 +1211,46,30,2.7,111.05,1.7,64.493125 +1212,46,30,2.7,111.05,1.7,64.4925 +1213,46,30,2.7,111.05,1.7,64.491875 +1214,46,30,2.7,111.05,1.7,64.49125 +1215,46,30,2.7,111.05,1.7,64.490625 +1216,46,30,2.7,111.05,1.7,64.49 +1217,46,30,2.7,111.05,1.7,64.489375 +1218,46,30,2.7,111.05,1.7,64.48875 +1219,46,30,2.7,111.05,1.7,64.488125 +1220,46,30,2.7,111.05,1.7,64.4875 +1221,46,30,2.7,111.05,1.7,64.486875 +1222,46,30,2.7,111.05,1.7,64.48625 +1223,46,30,2.7,111.05,1.7,64.485625 +1224,46,30,2.7,111.05,1.7,64.485 +1225,46,30,2.7,111.05,1.7,64.484375 +1226,46,30,2.7,111.05,1.7,64.48375 +1227,46,30,2.7,111.05,1.7,64.483125 +1228,46,30,2.7,111.05,1.7,64.4825 +1229,46,30,2.7,111.05,1.7,64.481875 +1230,46,30,2.7,111.05,1.7,64.48125 +1231,46,30,2.7,111.05,1.7,64.480625 +1232,46,30,2.7,111.05,1.7,64.48 +1233,46,30,2.7,111.05,1.7,64.479375 +1234,46,30,2.7,111.05,1.7,64.47875 +1235,46,30,2.7,111.05,1.7,64.478125 +1236,46,30,2.7,111.05,1.7,64.4775 +1237,46,30,2.7,111.05,1.7,64.476875 +1238,46,30,2.7,111.05,1.7,64.47625 +1239,46,30,2.7,111.05,1.7,64.475625 +1240,46,30,2.7,111.05,1.7,64.475 +1241,46,30,2.7,111.05,1.7,64.474375 +1242,46,30,2.7,111.05,1.7,64.47375 +1243,46,30,2.7,111.05,1.7,64.473125 +1244,46,30,2.7,111.05,1.7,64.4725 +1245,46,30,2.7,111.05,1.7,64.471875 +1246,46,30,2.7,111.05,1.7,64.47125 +1247,46,30,2.7,111.05,1.7,64.470625 +1248,46,30,2.7,111.05,1.7,64.47 +1249,46,30,2.7,111.05,1.7,64.469375 +1250,46,30,2.7,111.05,1.7,64.46875 +1251,46,30,2.7,111.05,1.7,64.468125 +1252,46,30,2.7,111.05,1.7,64.4675 +1253,46,30,2.7,111.05,1.7,64.466875 +1254,46,30,2.7,111.05,1.7,64.46625 +1255,46,30,2.7,111.05,1.7,64.465625 +1256,46,30,2.7,111.05,1.7,64.465 +1257,46,30,2.7,111.05,1.7,64.464375 +1258,46,30,2.7,111.05,1.7,64.46375 +1259,46,30,2.7,111.05,1.7,64.463125 +1260,46,30,2.7,111.05,1.7,64.4625 +1261,46,30,2.7,111.05,1.7,64.461875 +1262,46,30,2.7,111.05,1.7,64.46125 +1263,46,30,2.7,111.05,1.7,64.460625 +1264,46,30,2.7,111.05,1.7,64.46 +1265,46,30,2.7,111.05,1.7,64.459375 +1266,46,30,2.7,111.05,1.7,64.45875 +1267,46,30,2.7,111.05,1.7,64.458125 +1268,46,30,2.7,111.05,1.7,64.4575 +1269,46,30,2.7,111.05,1.7,64.456875 +1270,46,30,2.7,111.05,1.7,64.45625 +1271,46,30,2.7,111.05,1.7,64.455625 +1272,46,30,2.7,111.05,1.7,64.455 +1273,46,30,2.7,111.05,1.7,64.454375 +1274,46,30,2.7,111.05,1.7,64.45375 +1275,46,30,2.7,111.05,1.7,64.453125 +1276,46,30,2.7,111.05,1.7,64.4525 +1277,46,30,2.7,111.05,1.7,64.451875 +1278,46,30,2.7,111.05,1.7,64.45125 +1279,46,30,2.7,111.05,1.7,64.450625 +1280,46,30,2.7,111.05,1.7,64.45 +1281,46,30,2.7,111.05,1.7,64.449375 +1282,46,30,2.7,111.05,1.7,64.44875 +1283,46,30,2.7,111.05,1.7,64.448125 +1284,46,30,2.7,111.05,1.7,64.4475 +1285,46,30,2.7,111.05,1.7,64.446875 +1286,46,30,2.7,111.05,1.7,64.44625 +1287,46,30,2.7,111.05,1.7,64.445625 +1288,46,30,2.7,111.05,1.7,64.445 +1289,46,30,2.7,111.05,1.7,64.444375 +1290,46,30,2.7,111.05,1.7,64.44375 +1291,46,30,2.7,111.05,1.7,64.443125 +1292,46,30,2.7,111.05,1.7,64.4425 +1293,46,30,2.7,111.05,1.7,64.441875 +1294,46,30,2.7,111.05,1.7,64.44125 +1295,46,30,2.7,111.05,1.7,64.440625 +1296,46,30,2.7,111.05,1.7,64.44 +1297,46,30,2.7,111.05,1.7,64.439375 +1298,46,30,2.7,111.05,1.7,64.43875 +1299,46,30,2.7,111.05,1.7,64.438125 +1300,46,30,2.7,111.05,1.7,64.4375 +1301,46,30,2.7,111.05,1.7,64.436875 +1302,46,30,2.7,111.05,1.7,64.43625 +1303,46,30,2.7,111.05,1.7,64.435625 +1304,46,30,2.7,111.05,1.7,64.435 +1305,46,30,2.7,111.05,1.7,64.434375 +1306,46,30,2.7,111.05,1.7,64.43375 +1307,46,30,2.7,111.05,1.7,64.433125 +1308,46,30,2.7,111.05,1.7,64.4325 +1309,46,30,2.7,111.05,1.7,64.431875 +1310,46,30,2.7,111.05,1.7,64.43125 +1311,46,30,2.7,111.05,1.7,64.430625 +1312,46,30,2.7,111.05,1.7,64.43 +1313,46,30,2.7,111.05,1.7,64.429375 +1314,46,30,2.7,111.05,1.7,64.42875 +1315,46,30,2.7,111.05,1.7,64.428125 +1316,46,30,2.7,111.05,1.7,64.4275 +1317,46,30,2.7,111.05,1.7,64.426875 +1318,46,30,2.7,111.05,1.7,64.42625 +1319,46,30,2.7,111.05,1.7,64.425625 +1320,46,30,2.7,111.05,1.7,64.425 +1321,46,30,2.7,111.05,1.7,64.424375 +1322,46,30,2.7,111.05,1.7,64.42375 +1323,46,30,2.7,111.05,1.7,64.423125 +1324,46,30,2.7,111.05,1.7,64.4225 +1325,46,30,2.7,111.05,1.7,64.421875 +1326,46,30,2.7,111.05,1.7,64.42125 +1327,46,30,2.7,111.05,1.7,64.420625 +1328,46,30,2.7,111.05,1.7,64.42 +1329,46,30,2.7,111.05,1.7,64.419375 +1330,46,30,2.7,111.05,1.7,64.41875 +1331,46,30,2.7,111.05,1.7,64.418125 +1332,46,30,2.7,111.05,1.7,64.4175 +1333,46,30,2.7,111.05,1.7,64.416875 +1334,46,30,2.7,111.05,1.7,64.41625 +1335,46,30,2.7,111.05,1.7,64.415625 +1336,46,30,2.7,111.05,1.7,64.415 +1337,46,30,2.7,111.05,1.7,64.414375 +1338,46,30,2.7,111.05,1.7,64.41375 +1339,46,30,2.7,111.05,1.7,64.413125 +1340,46,30,2.7,111.05,1.7,64.4125 +1341,46,30,2.7,111.05,1.7,64.411875 +1342,46,30,2.7,111.05,1.7,64.41125 +1343,46,30,2.7,111.05,1.7,64.410625 +1344,46,30,2.7,111.05,1.7,64.41 +1345,46,30,2.7,111.05,1.7,64.409375 +1346,46,30,2.7,111.05,1.7,64.40875 +1347,46,30,2.7,111.05,1.7,64.408125 +1348,46,30,2.7,111.05,1.7,64.4075 +1349,46,30,2.7,111.05,1.7,64.406875 +1350,46,30,2.7,111.05,1.7,64.40625 +1351,46,30,2.7,111.05,1.7,64.405625 +1352,46,30,2.7,111.05,1.7,64.405 +1353,46,30,2.7,111.05,1.7,64.404375 +1354,46,30,2.7,111.05,1.7,64.40375 +1355,46,30,2.7,111.05,1.7,64.403125 +1356,46,30,2.7,111.05,1.7,64.4025 +1357,46,30,2.7,111.05,1.7,64.401875 +1358,46,30,2.7,111.05,1.7,64.40125 +1359,46,30,2.7,111.05,1.7,64.400625 +1360,46,30,2.7,111.05,1.7,64.4 +1361,46,30,2.7,111.05,1.7,64.399375 +1362,46,30,2.7,111.05,1.7,64.39875 +1363,46,30,2.7,111.05,1.7,64.398125 +1364,46,30,2.7,111.05,1.7,64.3975 +1365,46,30,2.7,111.05,1.7,64.396875 +1366,46,30,2.7,111.05,1.7,64.39625 +1367,46,30,2.7,111.05,1.7,64.395625 +1368,46,30,2.7,111.05,1.7,64.395 +1369,46,30,2.7,111.05,1.7,64.394375 +1370,46,30,2.7,111.05,1.7,64.39375 +1371,46,30,2.7,111.05,1.7,64.393125 +1372,46,30,2.7,111.05,1.7,64.3925 +1373,46,30,2.7,111.05,1.7,64.391875 +1374,46,30,2.7,111.05,1.7,64.39125 +1375,46,30,2.7,111.05,1.7,64.390625 +1376,46,30,2.7,111.05,1.7,64.39 +1377,46,30,2.7,111.05,1.7,64.389375 +1378,46,30,2.7,111.05,1.7,64.38875 +1379,46,30,2.7,111.05,1.7,64.388125 +1380,46,30,2.7,111.05,1.7,64.3875 +1381,46,30,2.7,111.05,1.7,64.386875 +1382,46,30,2.7,111.05,1.7,64.38625 +1383,46,30,2.7,111.05,1.7,64.385625 +1384,46,30,2.7,111.05,1.7,64.385 +1385,46,30,2.7,111.05,1.7,64.384375 +1386,46,30,2.7,111.05,1.7,64.38375 +1387,46,30,2.7,111.05,1.7,64.383125 +1388,46,30,2.7,111.05,1.7,64.3825 +1389,46,30,2.7,111.05,1.7,64.381875 +1390,46,30,2.7,111.05,1.7,64.38125 +1391,46,30,2.7,111.05,1.7,64.380625 +1392,46,30,2.7,111.05,1.7,64.38 +1393,46,30,2.7,111.05,1.7,64.379375 +1394,46,30,2.7,111.05,1.7,64.37875 +1395,46,30,2.7,111.05,1.7,64.378125 +1396,46,30,2.7,111.05,1.7,64.3775 +1397,46,30,2.7,111.05,1.7,64.376875 +1398,46,30,2.7,111.05,1.7,64.37625 +1399,46,30,2.7,111.05,1.7,64.375625 +1400,46,30,2.7,111.05,1.7,64.375 +1401,46,30,2.7,111.05,1.7,64.374375 +1402,46,30,2.7,111.05,1.7,64.37375 +1403,46,30,2.7,111.05,1.7,64.373125 +1404,46,30,2.7,111.05,1.7,64.3725 +1405,46,30,2.7,111.05,1.7,64.371875 +1406,46,30,2.7,111.05,1.7,64.37125 +1407,46,30,2.7,111.05,1.7,64.370625 +1408,46,30,2.7,111.05,1.7,64.37 +1409,46,30,2.7,111.05,1.7,64.369375 +1410,46,30,2.7,111.05,1.7,64.36875 +1411,46,30,2.7,111.05,1.7,64.368125 +1412,46,30,2.7,111.05,1.7,64.3675 +1413,46,30,2.7,111.05,1.7,64.366875 +1414,46,30,2.7,111.05,1.7,64.36625 +1415,46,30,2.7,111.05,1.7,64.365625 +1416,46,30,2.7,111.05,1.7,64.365 +1417,46,30,2.7,111.05,1.7,64.364375 +1418,46,30,2.7,111.05,1.7,64.36375 +1419,46,30,2.7,111.05,1.7,64.363125 +1420,46,30,2.7,111.05,1.7,64.3625 +1421,46,30,2.7,111.05,1.7,64.361875 +1422,46,30,2.7,111.05,1.7,64.36125 +1423,46,30,2.7,111.05,1.7,64.360625 +1424,46,30,2.7,111.05,1.7,64.36 +1425,46,30,2.7,111.05,1.7,64.359375 +1426,46,30,2.7,111.05,1.7,64.35875 +1427,46,30,2.7,111.05,1.7,64.358125 +1428,46,30,2.7,111.05,1.7,64.3575 +1429,46,30,2.7,111.05,1.7,64.356875 +1430,46,30,2.7,111.05,1.7,64.35625 +1431,46,30,2.7,111.05,1.7,64.355625 +1432,46,30,2.7,111.05,1.7,64.355 +1433,46,30,2.7,111.05,1.7,64.354375 +1434,46,30,2.7,111.05,1.7,64.35375 +1435,46,30,2.7,111.05,1.7,64.353125 +1436,46,30,2.7,111.05,1.7,64.3525 +1437,46,30,2.7,111.05,1.7,64.351875 +1438,46,30,2.7,111.05,1.7,64.35125 +1439,46,30,2.7,111.05,1.7,64.350625 +1440,46,30,2.7,111.05,1.7,64.35 +1441,46,30,2.7,111.05,1.7,64.349375 +1442,46,30,2.7,111.05,1.7,64.34875 +1443,46,30,2.7,111.05,1.7,64.348125 +1444,46,30,2.7,111.05,1.7,64.3475 +1445,46,30,2.7,111.05,1.7,64.346875 +1446,46,30,2.7,111.05,1.7,64.34625 +1447,46,30,2.7,111.05,1.7,64.345625 +1448,46,30,2.7,111.05,1.7,64.345 +1449,46,30,2.7,111.05,1.7,64.344375 +1450,46,30,2.7,111.05,1.7,64.34375 +1451,46,30,2.7,111.05,1.7,64.343125 +1452,46,30,2.7,111.05,1.7,64.3425 +1453,46,30,2.7,111.05,1.7,64.341875 +1454,46,30,2.7,111.05,1.7,64.34125 +1455,46,30,2.7,111.05,1.7,64.340625 +1456,46,30,2.7,111.05,1.7,64.34 +1457,46,30,2.7,111.05,1.7,64.339375 +1458,46,30,2.7,111.05,1.7,64.33875 +1459,46,30,2.7,111.05,1.7,64.338125 +1460,46,30,2.7,111.05,1.7,64.3375 +1461,46,30,2.7,111.05,1.7,64.336875 +1462,46,30,2.7,111.05,1.7,64.33625 +1463,46,30,2.7,111.05,1.7,64.335625 +1464,46,30,2.7,111.05,1.7,64.335 +1465,46,30,2.7,111.05,1.7,64.334375 +1466,46,30,2.7,111.05,1.7,64.33375 +1467,46,30,2.7,111.05,1.7,64.333125 +1468,46,30,2.7,111.05,1.7,64.3325 +1469,46,30,2.7,111.05,1.7,64.331875 +1470,46,30,2.7,111.05,1.7,64.33125 +1471,46,30,2.7,111.05,1.7,64.330625 +1472,46,30,2.7,111.05,1.7,64.33 +1473,46,30,2.7,111.05,1.7,64.329375 +1474,46,30,2.7,111.05,1.7,64.32875 +1475,46,30,2.7,111.05,1.7,64.328125 +1476,46,30,2.7,111.05,1.7,64.3275 +1477,46,30,2.7,111.05,1.7,64.326875 +1478,46,30,2.7,111.05,1.7,64.32625 +1479,46,30,2.7,111.05,1.7,64.325625 +1480,46,30,2.7,111.05,1.7,64.325 +1481,46,30,2.7,111.05,1.7,64.324375 +1482,46,30,2.7,111.05,1.7,64.32375 +1483,46,30,2.7,111.05,1.7,64.323125 +1484,46,30,2.7,111.05,1.7,64.3225 +1485,46,30,2.7,111.05,1.7,64.321875 +1486,46,30,2.7,111.05,1.7,64.32125 +1487,46,30,2.7,111.05,1.7,64.320625 +1488,46,30,2.7,111.05,1.7,64.32 +1489,46,30,2.7,111.05,1.7,64.319375 +1490,46,30,2.6,111.05,1.7,64.31875 +1491,46,30,2.6,111.05,1.7,64.318125 +1492,46,30,2.6,111.05,1.7,64.3175 +1493,46,30,2.6,111.05,1.7,64.316875 +1494,46,30,2.6,111.05,1.7,64.31625 +1495,46,30,2.6,111.05,1.7,64.315625 +1496,46,30,2.6,111.05,1.7,64.315 +1497,46,30,2.6,111.05,1.7,64.314375 +1498,46,30,2.6,111.05,1.7,64.31375 +1499,46,30,2.6,111.05,1.7,64.313125 +1500,46,30,2.6,111.05,1.7,64.3125 +1501,46,30,2.6,111.05,1.7,64.311875 +1502,46,30,2.6,111.05,1.7,64.31125 +1503,46,30,2.6,111.05,1.7,64.310625 +1504,46,30,2.6,111.05,1.7,64.31 +1505,46,30,2.6,111.05,1.7,64.309375 +1506,46,30,2.6,111.05,1.7,64.30875 +1507,46,30,2.6,111.05,1.7,64.308125 +1508,46,30,2.6,111.05,1.7,64.3075 +1509,46,30,2.6,111.05,1.7,64.306875 +1510,46,30,2.6,111.05,1.7,64.30625 +1511,46,30,2.6,111.05,1.7,64.305625 +1512,46,30,2.6,111.05,1.7,64.305 +1513,46,30,2.6,111.05,1.7,64.304375 +1514,46,30,2.6,111.05,1.7,64.30375 +1515,46,30,2.6,111.05,1.7,64.303125 +1516,46,30,2.6,111.05,1.7,64.3025 +1517,46,30,2.6,111.05,1.7,64.301875 +1518,46,30,2.6,111.05,1.7,64.30125 +1519,46,30,2.6,111.05,1.7,64.300625 +1520,46,30,2.6,111.05,1.7,64.3 +1521,46,30,2.6,111.05,1.7,64.299375 +1522,46,30,2.6,111.05,1.7,64.29875 +1523,46,30,2.6,111.05,1.7,64.298125 +1524,46,30,2.6,111.05,1.7,64.2975 +1525,46,30,2.6,111.05,1.7,64.296875 +1526,46,30,2.6,111.05,1.7,64.29625 +1527,46,30,2.6,111.05,1.7,64.295625 +1528,46,30,2.6,111.05,1.7,64.295 +1529,46,30,2.6,111.05,1.7,64.294375 +1530,46,30,2.6,111.05,1.7,64.29375 +1531,46,30,2.6,111.05,1.7,64.293125 +1532,46,30,2.6,111.05,1.7,64.2925 +1533,46,30,2.6,111.05,1.7,64.291875 +1534,46,30,2.6,111.05,1.7,64.29125 +1535,46,30,2.6,111.05,1.7,64.290625 +1536,46,30,2.6,111.05,1.7,64.29 +1537,46,30,2.6,111.05,1.7,64.289375 +1538,46,30,2.6,111.05,1.7,64.28875 +1539,46,30,2.6,111.05,1.7,64.288125 +1540,46,30,2.6,111.05,1.7,64.2875 +1541,46,30,2.6,111.05,1.7,64.286875 +1542,46,30,2.6,111.05,1.7,64.28625 +1543,46,30,2.6,111.05,1.7,64.285625 +1544,46,30,2.6,111.05,1.7,64.285 +1545,46,30,2.6,111.05,1.7,64.284375 +1546,46,30,2.6,111.05,1.7,64.28375 +1547,46,30,2.6,111.05,1.7,64.283125 +1548,46,30,2.6,111.05,1.7,64.2825 +1549,46,30,2.6,111.05,1.7,64.281875 +1550,46,30,2.6,111.05,1.7,64.28125 +1551,46,30,2.6,111.05,1.7,64.280625 +1552,46,30,2.6,111.05,1.7,64.28 +1553,46,30,2.6,111.05,1.7,64.279375 +1554,46,30,2.6,111.05,1.7,64.27875 +1555,46,30,2.6,111.05,1.7,64.278125 +1556,46,30,2.6,111.05,1.7,64.2775 +1557,46,30,2.6,111.05,1.7,64.276875 +1558,46,30,2.6,111.05,1.7,64.27625 +1559,46,30,2.6,111.05,1.7,64.275625 +1560,46,30,2.6,111.05,1.7,64.275 +1561,46,30,2.6,111.05,1.7,64.274375 +1562,46,30,2.6,111.05,1.7,64.27375 +1563,46,30,2.6,111.05,1.7,64.273125 +1564,46,30,2.6,111.05,1.7,64.2725 +1565,46,30,2.6,111.05,1.7,64.271875 +1566,46,30,2.6,111.05,1.7,64.27125 +1567,46,30,2.6,111.05,1.7,64.270625 +1568,46,30,2.6,111.05,1.7,64.27 +1569,46,30,2.6,111.05,1.7,64.269375 +1570,46,30,2.6,111.05,1.7,64.26875 +1571,46,30,2.6,111.05,1.7,64.268125 +1572,46,30,2.6,111.05,1.7,64.2675 +1573,46,30,2.6,111.05,1.7,64.266875 +1574,46,30,2.6,111.05,1.7,64.26625 +1575,46,30,2.6,111.05,1.7,64.265625 +1576,46,30,2.6,111.05,1.7,64.265 +1577,46,30,2.6,111.05,1.7,64.264375 +1578,46,30,2.6,111.05,1.7,64.26375 +1579,46,30,2.6,111.05,1.7,64.263125 +1580,46,30,2.6,111.05,1.7,64.2625 +1581,46,30,2.6,111.05,1.7,64.261875 +1582,46,30,2.6,111.05,1.7,64.26125 +1583,46,30,2.6,111.05,1.7,64.260625 +1584,46,30,2.6,111.05,1.7,64.26 +1585,46,30,2.6,111.05,1.7,64.259375 +1586,46,30,2.6,111.05,1.7,64.25875 +1587,46,30,2.6,111.05,1.7,64.258125 +1588,46,30,2.6,111.05,1.7,64.2575 +1589,46,30,2.6,111.05,1.7,64.256875 +1590,46,30,2.6,111.05,1.7,64.25625 +1591,46,30,2.6,111.05,1.7,64.255625 +1592,46,30,2.6,111.05,1.7,64.255 +1593,46,30,2.6,111.05,1.7,64.254375 +1594,46,30,2.6,111.05,1.7,64.25375 +1595,46,30,2.6,111.05,1.7,64.253125 +1596,46,30,2.6,111.05,1.7,64.2525 +1597,46,30,2.6,111.05,1.7,64.251875 +1598,46,30,2.6,111.05,1.7,64.25125 +1599,46,30,2.6,111.05,1.7,64.250625 +1600,46,30,2.6,111.05,1.7,64.25 +1601,46,30,2.6,111.05,1.7,64.249375 +1602,46,30,2.6,111.05,1.7,64.24875 +1603,46,30,2.6,111.05,1.7,64.248125 +1604,46,30,2.6,111.05,1.7,64.2475 +1605,46,30,2.6,111.05,1.7,64.246875 +1606,46,30,2.6,111.05,1.7,64.24625 +1607,46,30,2.6,111.05,1.7,64.245625 +1608,46,30,2.6,111.05,1.7,64.245 +1609,46,30,2.6,111.05,1.7,64.244375 +1610,46,30,2.6,111.05,1.7,64.24375 +1611,46,30,2.6,111.05,1.7,64.243125 +1612,46,30,2.6,111.05,1.7,64.2425 +1613,46,30,2.6,111.05,1.7,64.241875 +1614,46,30,2.6,111.05,1.7,64.24125 +1615,46,30,2.6,111.05,1.7,64.240625 +1616,46,30,2.6,111.05,1.7,64.24 +1617,46,30,2.6,111.05,1.7,64.239375 +1618,46,30,2.6,111.05,1.7,64.23875 +1619,46,30,2.6,111.05,1.7,64.238125 +1620,46,30,2.6,111.05,1.7,64.2375 +1621,46,30,2.6,111.05,1.7,64.236875 +1622,46,30,2.6,111.05,1.7,64.23625 +1623,46,30,2.6,111.05,1.7,64.235625 +1624,46,30,2.6,111.05,1.7,64.235 +1625,46,30,2.6,111.05,1.7,64.234375 +1626,46,30,2.6,111.05,1.7,64.23375 +1627,46,30,2.6,111.05,1.7,64.233125 +1628,46,30,2.6,111.05,1.7,64.2325 +1629,46,30,2.6,111.05,1.7,64.231875 +1630,46,30,2.6,111.05,1.7,64.23125 +1631,46,30,2.6,111.05,1.7,64.230625 +1632,46,30,2.6,111.05,1.7,64.23 +1633,46,30,2.6,111.05,1.7,64.229375 +1634,46,30,2.6,111.05,1.7,64.22875 +1635,46,30,2.6,111.05,1.7,64.228125 +1636,46,30,2.6,111.05,1.7,64.2275 +1637,46,30,2.6,111.05,1.7,64.226875 +1638,46,30,2.6,111.05,1.7,64.22625 +1639,46,30,2.6,111.05,1.7,64.225625 +1640,46,30,2.6,111.05,1.7,64.225 +1641,46,30,2.6,111.05,1.7,64.224375 +1642,46,30,2.6,111.05,1.7,64.22375 +1643,46,30,2.6,111.05,1.7,64.223125 +1644,46,30,2.6,111.05,1.7,64.2225 +1645,46,30,2.6,111.05,1.7,64.221875 +1646,46,30,2.6,111.05,1.7,64.22125 +1647,46,30,2.6,111.05,1.7,64.220625 +1648,46,30,2.6,111.05,1.7,64.22 +1649,46,30,2.6,111.05,1.7,64.219375 +1650,46,30,2.6,111.05,1.7,64.21875 +1651,46,30,2.6,111.05,1.7,64.218125 +1652,46,30,2.6,111.05,1.7,64.2175 +1653,46,30,2.6,111.05,1.7,64.216875 +1654,46,30,2.6,111.05,1.7,64.21625 +1655,46,30,2.6,111.05,1.7,64.215625 +1656,46,30,2.6,111.05,1.7,64.215 +1657,46,30,2.6,111.05,1.7,64.214375 +1658,46,30,2.6,111.05,1.7,64.21375 +1659,46,30,2.6,111.05,1.7,64.213125 +1660,46,30,2.6,111.05,1.7,64.2125 +1661,46,30,2.6,111.05,1.7,64.211875 +1662,46,30,2.6,111.05,1.7,64.21125 +1663,46,30,2.6,111.05,1.7,64.210625 +1664,46,30,2.6,111.05,1.7,64.21 +1665,46,30,2.6,111.05,1.7,64.209375 +1666,46,30,2.6,111.05,1.7,64.20875 +1667,46,30,2.6,111.05,1.7,64.208125 +1668,46,30,2.6,111.05,1.7,64.2075 +1669,46,30,2.6,111.05,1.7,64.206875 +1670,46,30,2.6,111.05,1.7,64.20625 +1671,46,30,2.6,111.05,1.7,64.205625 +1672,46,30,2.6,111.05,1.7,64.205 +1673,46,30,2.6,111.05,1.7,64.204375 +1674,46,30,2.6,111.05,1.7,64.20375 +1675,46,30,2.6,111.05,1.7,64.203125 +1676,46,30,2.6,111.05,1.7,64.2025 +1677,46,30,2.6,111.05,1.7,64.201875 +1678,46,30,2.6,111.05,1.7,64.20125 +1679,46,30,2.6,111.05,1.7,64.200625 +1680,46,30,2.6,111.05,1.7,64.2 +1681,46,30,2.6,111.05,1.7,64.199375 +1682,46,30,2.6,111.05,1.7,64.19875 +1683,46,30,2.6,111.05,1.7,64.198125 +1684,46,30,2.6,111.05,1.7,64.1975 +1685,46,30,2.6,111.05,1.7,64.196875 +1686,46,30,2.6,111.05,1.7,64.19625 +1687,46,30,2.6,111.05,1.7,64.195625 +1688,46,30,2.6,111.05,1.7,64.195 +1689,46,30,2.6,111.05,1.7,64.194375 +1690,46,30,2.6,111.05,1.7,64.19375 +1691,46,30,2.6,111.05,1.7,64.193125 +1692,46,30,2.6,111.05,1.7,64.1925 +1693,46,30,2.6,111.05,1.7,64.191875 +1694,46,30,2.6,111.05,1.7,64.19125 +1695,46,30,2.6,111.05,1.7,64.190625 +1696,46,30,2.6,111.05,1.7,64.19 +1697,46,30,2.6,111.05,1.7,64.189375 +1698,46,30,2.6,111.05,1.7,64.18875 +1699,46,30,2.6,111.05,1.7,64.188125 +1700,46,30,2.6,111.05,1.7,64.1875 +1701,46,30,2.6,111.05,1.7,64.186875 +1702,46,30,2.6,111.05,1.7,64.18625 +1703,46,30,2.6,111.05,1.7,64.185625 +1704,46,30,2.6,111.05,1.7,64.185 +1705,46,30,2.6,111.05,1.7,64.184375 +1706,46,30,2.6,111.05,1.7,64.18375 +1707,46,30,2.6,111.05,1.7,64.183125 +1708,46,30,2.6,111.05,1.7,64.1825 +1709,46,30,2.6,111.05,1.7,64.181875 +1710,46,30,2.6,111.05,1.7,64.18125 +1711,46,30,2.6,111.05,1.7,64.180625 +1712,46,30,2.6,111.05,1.7,64.18 +1713,46,30,2.6,111.05,1.7,64.179375 +1714,46,30,2.6,111.05,1.7,64.17875 +1715,46,30,2.6,111.05,1.7,64.178125 +1716,46,30,2.6,111.05,1.7,64.1775 +1717,46,30,2.6,111.05,1.7,64.176875 +1718,46,30,2.6,111.05,1.7,64.17625 +1719,46,30,2.6,111.05,1.7,64.175625 +1720,46,30,2.6,111.05,1.7,64.175 +1721,46,30,2.6,111.05,1.7,64.174375 +1722,46,30,2.6,111.05,1.7,64.17375 +1723,46,30,2.6,111.05,1.7,64.173125 +1724,46,30,2.6,111.05,1.7,64.1725 +1725,46,30,2.6,111.05,1.7,64.171875 +1726,46,30,2.6,111.05,1.7,64.17125 +1727,46,30,2.6,111.05,1.7,64.170625 +1728,46,30,2.6,111.05,1.7,64.17 +1729,46,30,2.6,111.05,1.7,64.169375 +1730,46,30,2.6,111.05,1.7,64.16875 +1731,46,30,2.6,111.05,1.7,64.168125 +1732,46,30,2.6,111.05,1.7,64.1675 +1733,46,30,2.6,111.05,1.7,64.166875 +1734,46,30,2.6,111.05,1.7,64.16625 +1735,46,30,2.6,111.05,1.7,64.165625 +1736,46,30,2.6,111.05,1.7,64.165 +1737,46,30,2.6,111.05,1.7,64.164375 +1738,46,30,2.6,111.05,1.7,64.16375 +1739,46,30,2.6,111.05,1.7,64.163125 +1740,46,30,2.6,111.05,1.7,64.1625 +1741,46,30,2.6,111.05,1.7,64.161875 +1742,46,30,2.6,111.05,1.7,64.16125 +1743,46,30,2.6,111.05,1.7,64.160625 +1744,46,30,2.6,111.05,1.7,64.16 +1745,46,30,2.6,111.05,1.7,64.159375 +1746,46,30,2.6,111.05,1.7,64.15875 +1747,46,30,2.6,111.05,1.7,64.158125 +1748,46,30,2.6,111.05,1.7,64.1575 +1749,46,30,2.6,111.05,1.7,64.156875 +1750,46,30,2.6,111.05,1.7,64.15625 +1751,46,30,2.6,111.05,1.7,64.155625 +1752,46,30,2.6,111.05,1.7,64.155 +1753,46,30,2.6,111.05,1.7,64.154375 +1754,46,30,2.6,111.05,1.7,64.15375 +1755,46,30,2.6,111.05,1.7,64.153125 +1756,46,30,2.6,111.05,1.7,64.1525 +1757,46,30,2.6,111.05,1.7,64.151875 +1758,46,30,2.6,111.05,1.7,64.15125 +1759,46,30,2.6,111.05,1.7,64.150625 +1760,46,30,2.6,111.05,1.7,64.15 +1761,46,30,2.6,111.05,1.7,64.149375 +1762,46,30,2.6,111.05,1.7,64.14875 +1763,46,30,2.6,111.05,1.7,64.148125 +1764,46,30,2.6,111.05,1.7,64.1475 +1765,46,30,2.6,111.05,1.7,64.146875 +1766,46,30,2.6,111.05,1.7,64.14625 +1767,46,30,2.6,111.05,1.7,64.145625 +1768,46,30,2.6,111.05,1.7,64.145 +1769,46,30,2.6,111.05,1.7,64.144375 +1770,46,30,2.6,111.05,1.7,64.14375 +1771,46,30,2.6,111.05,1.7,64.143125 +1772,46,30,2.6,111.05,1.7,64.1425 +1773,46,30,2.6,111.05,1.7,64.141875 +1774,46,30,2.6,111.05,1.7,64.14125 +1775,46,30,2.6,111.05,1.7,64.140625 +1776,46,30,2.6,111.05,1.7,64.14 +1777,46,30,2.6,111.05,1.7,64.139375 +1778,46,30,2.6,111.05,1.7,64.13875 +1779,46,30,2.6,111.05,1.7,64.138125 +1780,46,30,2.6,111.05,1.7,64.1375 +1781,46,30,2.6,111.05,1.7,64.136875 +1782,46,30,2.6,111.05,1.7,64.13625 +1783,46,30,2.6,111.05,1.7,64.135625 +1784,46,30,2.6,111.05,1.7,64.135 +1785,46,30,2.6,111.05,1.7,64.134375 +1786,46,30,2.6,111.05,1.7,64.13375 +1787,46,30,2.6,111.05,1.7,64.133125 +1788,46,30,2.6,111.05,1.7,64.1325 +1789,46,30,2.6,111.05,1.7,64.131875 +1790,46,30,2.6,111.05,1.7,64.13125 +1791,46,30,2.6,111.05,1.7,64.130625 +1792,46,30,2.6,111.05,1.7,64.13 +1793,46,30,2.6,111.05,1.7,64.129375 +1794,46,30,2.6,111.05,1.7,64.12875 +1795,46,30,2.6,111.05,1.7,64.128125 +1796,46,30,2.6,111.05,1.7,64.1275 +1797,46,30,2.6,111.05,1.7,64.126875 +1798,46,30,2.6,111.05,1.7,64.12625 +1799,46,30,2.6,111.05,1.7,64.125625 +1800,46,30,2.6,111.05,1.7,64.125 +1801,46,30,2.6,111.05,1.7,64.124375 +1802,46,30,2.6,111.05,1.7,64.12375 +1803,46,30,2.6,111.05,1.7,64.123125 +1804,46,30,2.6,111.05,1.7,64.1225 +1805,46,30,2.6,111.05,1.7,64.121875 +1806,46,30,2.6,111.05,1.7,64.12125 +1807,46,30,2.6,111.05,1.7,64.120625 +1808,46,30,2.6,111.05,1.7,64.12 +1809,46,30,2.6,111.05,1.7,64.119375 +1810,46,30,2.6,111.05,1.7,64.11875 +1811,46,30,2.6,111.05,1.7,64.118125 +1812,46,30,2.6,111.05,1.7,64.1175 +1813,46,30,2.6,111.05,1.7,64.116875 +1814,46,30,2.6,111.05,1.7,64.11625 +1815,46,30,2.6,111.05,1.7,64.115625 +1816,46,30,2.6,111.05,1.7,64.115 +1817,46,30,2.6,111.05,1.7,64.114375 +1818,46,30,2.6,111.05,1.7,64.11375 +1819,46,30,2.6,111.05,1.7,64.113125 +1820,46,30,2.6,111.05,1.7,64.1125 +1821,46,30,2.6,111.05,1.7,64.111875 +1822,46,30,2.6,111.05,1.7,64.11125 +1823,46,30,2.6,111.05,1.7,64.110625 +1824,46,30,2.6,111.05,1.7,64.11 +1825,46,30,2.6,111.05,1.7,64.109375 +1826,46,30,2.6,111.05,1.7,64.10875 +1827,46,30,2.6,111.05,1.7,64.108125 +1828,46,30,2.6,111.05,1.7,64.1075 +1829,46,30,2.6,111.05,1.7,64.106875 +1830,46,30,2.6,111.05,1.7,64.10625 +1831,46,30,2.6,111.05,1.7,64.105625 +1832,46,30,2.6,111.05,1.7,64.105 +1833,46,30,2.6,111.05,1.7,64.104375 +1834,46,30,2.6,111.05,1.7,64.10375 +1835,46,30,2.6,111.05,1.7,64.103125 +1836,46,30,2.6,111.05,1.7,64.1025 +1837,46,30,2.6,111.05,1.7,64.101875 +1838,46,30,2.6,111.05,1.7,64.10125 +1839,46,30,2.6,111.05,1.7,64.100625 +1840,46,30,2.6,111.05,1.7,64.1 +1841,46,30,2.6,111.05,1.7,64.099375 +1842,46,30,2.6,111.05,1.7,64.09875 +1843,46,30,2.6,111.05,1.7,64.098125 +1844,46,30,2.6,111.05,1.7,64.0975 +1845,46,30,2.6,111.05,1.7,64.096875 +1846,46,30,2.6,111.05,1.7,64.09625 +1847,46,30,2.6,111.05,1.7,64.095625 +1848,46,30,2.6,111.05,1.7,64.095 +1849,46,30,2.6,111.05,1.7,64.094375 +1850,46,30,2.6,111.05,1.7,64.09375 +1851,46,30,2.6,111.05,1.7,64.093125 +1852,46,30,2.6,111.05,1.7,64.0925 +1853,46,30,2.6,111.05,1.7,64.091875 +1854,46,30,2.6,111.05,1.7,64.09125 +1855,46,30,2.6,111.05,1.7,64.090625 +1856,46,30,2.6,111.05,1.7,64.09 +1857,46,30,2.6,111.05,1.7,64.089375 +1858,46,30,2.6,111.05,1.7,64.08875 +1859,46,30,2.6,111.05,1.7,64.088125 +1860,46,30,2.6,111.05,1.7,64.0875 +1861,46,30,2.6,111.05,1.7,64.086875 +1862,46,30,2.6,111.05,1.7,64.08625 +1863,46,30,2.6,111.05,1.7,64.085625 +1864,46,30,2.6,111.05,1.7,64.085 +1865,46,30,2.6,111.05,1.7,64.084375 +1866,46,30,2.6,111.05,1.7,64.08375 +1867,46,30,2.6,111.05,1.7,64.083125 +1868,46,30,2.6,111.05,1.7,64.0825 +1869,46,30,2.6,111.05,1.7,64.081875 +1870,46,30,2.6,111.05,1.7,64.08125 +1871,46,30,2.6,111.05,1.7,64.080625 +1872,46,30,2.6,111.05,1.7,64.08 +1873,46,30,2.6,111.05,1.7,64.079375 +1874,46,30,2.6,111.05,1.7,64.07875 +1875,46,30,2.6,111.05,1.7,64.078125 +1876,46,30,2.6,111.05,1.7,64.0775 +1877,46,30,2.6,111.05,1.7,64.076875 +1878,46,30,2.6,111.05,1.7,64.07625 +1879,46,30,2.6,111.05,1.7,64.075625 +1880,46,30,2.6,111.05,1.7,64.075 +1881,46,30,2.6,111.05,1.7,64.074375 +1882,46,30,2.6,111.05,1.7,64.07375 +1883,46,30,2.6,111.05,1.7,64.073125 +1884,46,30,2.6,111.05,1.7,64.0725 +1885,46,30,2.6,111.05,1.7,64.071875 +1886,46,30,2.6,111.05,1.7,64.07125 +1887,46,30,2.6,111.05,1.7,64.070625 +1888,46,30,2.6,111.05,1.7,64.07 +1889,46,30,2.6,111.05,1.7,64.069375 +1890,46,30,2.6,111.05,1.7,64.06875 +1891,46,30,2.6,111.05,1.7,64.068125 +1892,46,30,2.6,111.05,1.7,64.0675 +1893,46,30,2.6,111.05,1.7,64.066875 +1894,46,30,2.6,111.05,1.7,64.06625 +1895,46,30,2.6,111.05,1.7,64.065625 +1896,46,30,2.6,111.05,1.7,64.065 +1897,46,30,2.6,111.05,1.7,64.064375 +1898,46,30,2.6,111.05,1.7,64.06375 +1899,46,30,2.6,111.05,1.7,64.063125 +1900,46,30,2.6,111.05,1.7,64.0625 +1901,46,30,2.6,111.05,1.7,64.061875 +1902,46,30,2.6,111.05,1.7,64.06125 +1903,46,30,2.6,111.05,1.7,64.060625 +1904,46,30,2.6,111.05,1.7,64.06 +1905,46,30,2.6,111.05,1.7,64.059375 +1906,46,30,2.6,111.05,1.7,64.05875 +1907,46,30,2.6,111.05,1.7,64.058125 +1908,46,30,2.6,111.05,1.7,64.0575 +1909,46,30,2.6,111.05,1.7,64.056875 +1910,46,30,2.6,111.05,1.7,64.05625 +1911,46,30,2.6,111.05,1.7,64.055625 +1912,46,30,2.6,111.05,1.7,64.055 +1913,46,30,2.6,111.05,1.7,64.054375 +1914,46,30,2.6,111.05,1.7,64.05375 +1915,46,30,2.6,111.05,1.7,64.053125 +1916,46,30,2.6,111.05,1.7,64.0525 +1917,46,30,2.6,111.05,1.7,64.051875 +1918,46,30,2.6,111.05,1.7,64.05125 +1919,46,30,2.6,111.05,1.7,64.050625 +1920,46,30,2.6,111.05,1.7,64.05 +1921,46,30,2.6,111.05,1.7,64.049375 +1922,46,30,2.6,111.05,1.7,64.04875 +1923,46,30,2.6,111.05,1.7,64.048125 +1924,46,30,2.6,111.05,1.7,64.0475 +1925,46,30,2.6,111.05,1.7,64.046875 +1926,46,30,2.6,111.05,1.7,64.04625 +1927,46,30,2.6,111.05,1.7,64.045625 +1928,46,30,2.6,111.05,1.7,64.045 +1929,46,30,2.6,111.05,1.7,64.044375 +1930,46,30,2.6,111.05,1.7,64.04375 +1931,46,30,2.6,111.05,1.7,64.043125 +1932,46,30,2.6,111.05,1.7,64.0425 +1933,46,30,2.6,111.05,1.7,64.041875 +1934,46,30,2.6,111.05,1.7,64.04125 +1935,46,30,2.6,111.05,1.7,64.040625 +1936,46,30,2.6,111.05,1.7,64.04 +1937,46,30,2.6,111.05,1.7,64.039375 +1938,46,30,2.6,111.05,1.7,64.03875 +1939,46,30,2.6,111.05,1.7,64.038125 +1940,46,30,2.6,111.05,1.7,64.0375 +1941,46,30,2.6,111.05,1.7,64.036875 +1942,46,30,2.6,111.05,1.7,64.03625 +1943,46,30,2.6,111.05,1.7,64.035625 +1944,46,30,2.6,111.05,1.7,64.035 +1945,46,30,2.6,111.05,1.7,64.034375 +1946,46,30,2.6,111.05,1.7,64.03375 +1947,46,30,2.6,111.05,1.7,64.033125 +1948,46,30,2.6,111.05,1.7,64.0325 +1949,46,30,2.6,111.05,1.7,64.031875 +1950,46,30,2.6,111.05,1.7,64.03125 +1951,46,30,2.6,111.05,1.7,64.030625 +1952,46,30,2.6,111.05,1.7,64.03 +1953,46,30,2.6,111.05,1.7,64.029375 +1954,46,30,2.6,111.05,1.7,64.02875 +1955,46,30,2.6,111.05,1.7,64.028125 +1956,46,30,2.6,111.05,1.7,64.0275 +1957,46,30,2.6,111.05,1.7,64.026875 +1958,46,30,2.6,111.05,1.7,64.02625 +1959,46,30,2.6,111.05,1.7,64.025625 +1960,46,30,2.6,111.05,1.7,64.025 +1961,46,30,2.6,111.05,1.7,64.024375 +1962,46,30,2.6,111.05,1.7,64.02375 +1963,46,30,2.6,111.05,1.7,64.023125 +1964,46,30,2.6,111.05,1.7,64.0225 +1965,46,30,2.6,111.05,1.7,64.021875 +1966,46,30,2.6,111.05,1.7,64.02125 +1967,46,30,2.6,111.05,1.7,64.020625 +1968,46,30,2.6,111.05,1.7,64.02 +1969,46,30,2.6,111.05,1.7,64.019375 +1970,46,30,2.6,111.05,1.7,64.01875 +1971,46,30,2.6,111.05,1.7,64.018125 +1972,46,30,2.6,111.05,1.7,64.0175 +1973,46,30,2.6,111.05,1.7,64.016875 +1974,46,30,2.6,111.05,1.7,64.01625 +1975,46,30,2.6,111.05,1.7,64.015625 +1976,46,30,2.6,111.05,1.7,64.015 +1977,46,30,2.6,111.05,1.7,64.014375 +1978,46,30,2.6,111.05,1.7,64.01375 +1979,46,30,2.6,111.05,1.7,64.013125 +1980,46,30,2.6,111.05,1.7,64.0125 +1981,46,30,2.6,111.05,1.7,64.011875 +1982,46,30,2.6,111.05,1.7,64.01125 +1983,46,30,2.6,111.05,1.7,64.010625 +1984,46,30,2.6,111.05,1.7,64.01 +1985,46,30,2.6,111.05,1.7,64.009375 +1986,46,30,2.6,111.05,1.7,64.00875 +1987,46,30,2.6,111.05,1.7,64.008125 +1988,46,30,2.6,111.05,1.7,64.0075 +1989,46,30,2.6,111.05,1.7,64.006875 +1990,46,30,2.6,111.05,1.7,64.00625 +1991,46,30,2.6,111.05,1.7,64.005625 +1992,46,30,2.6,111.05,1.7,64.005 +1993,46,30,2.6,111.05,1.7,64.004375 +1994,46,30,2.6,111.05,1.7,64.00375 +1995,46,30,2.6,111.05,1.7,64.003125 +1996,46,30,2.6,111.05,1.7,64.0025 +1997,46,30,2.6,111.05,1.7,64.001875 +1998,46,30,2.6,111.05,1.7,64.00125 +1999,46,30,2.6,111.05,1.7,64.000625 +2000,46,30,2.6,111.05,1.7,64 +2001,46,30,2.6,111.05,1.7,63.99975 +2002,46,30,2.6,111.05,1.7,63.9995 +2003,46,30,2.6,111.05,1.7,63.99925 +2004,46,30,2.6,111.05,1.7,63.999 +2005,46,30,2.6,111.05,1.7,63.99875 +2006,46,30,2.6,111.05,1.7,63.9985 +2007,46,30,2.6,111.05,1.7,63.99825 +2008,46,30,2.6,111.05,1.7,63.998 +2009,46,30,2.6,111.05,1.7,63.99775 +2010,46,30,2.6,111.05,1.7,63.9975 +2011,46,30,2.6,111.05,1.7,63.99725 +2012,46,30,2.6,111.05,1.7,63.997 +2013,46,30,2.6,111.05,1.7,63.99675 +2014,46,30,2.6,111.05,1.7,63.9965 +2015,46,30,2.6,111.05,1.7,63.99625 +2016,46,30,2.6,111.05,1.7,63.996 +2017,46,30,2.6,111.05,1.7,63.99575 +2018,46,30,2.6,111.05,1.7,63.9955 +2019,46,30,2.6,111.05,1.7,63.99525 +2020,46,30,2.6,111.05,1.7,63.995 +2021,46,30,2.6,111.05,1.7,63.99475 +2022,46,30,2.6,111.05,1.7,63.9945 +2023,46,30,2.6,111.05,1.7,63.99425 +2024,46,30,2.6,111.05,1.7,63.994 +2025,46,30,2.6,111.05,1.7,63.99375 +2026,46,30,2.6,111.05,1.7,63.9935 +2027,46,30,2.6,111.05,1.7,63.99325 +2028,46,30,2.6,111.05,1.7,63.993 +2029,46,30,2.6,111.05,1.7,63.99275 +2030,46,30,2.6,111.05,1.7,63.9925 +2031,46,30,2.6,111.05,1.7,63.99225 +2032,46,30,2.6,111.05,1.7,63.992 +2033,46,30,2.6,111.05,1.7,63.99175 +2034,46,30,2.6,111.05,1.7,63.9915 +2035,46,30,2.6,111.05,1.7,63.99125 +2036,46,30,2.6,111.05,1.7,63.991 +2037,46,30,2.6,111.05,1.7,63.99075 +2038,46,30,2.6,111.05,1.7,63.9905 +2039,46,30,2.6,111.05,1.7,63.99025 +2040,46,30,2.6,111.05,1.7,63.99 +2041,46,30,2.6,111.05,1.7,63.98975 +2042,46,30,2.6,111.05,1.7,63.9895 +2043,46,30,2.6,111.05,1.7,63.98925 +2044,46,30,2.6,111.05,1.7,63.989 +2045,46,30,2.6,111.05,1.7,63.98875 +2046,46,30,2.6,111.05,1.7,63.9885 +2047,46,30,2.6,111.05,1.7,63.98825 +2048,46,30,2.6,111.05,1.7,63.988 +2049,46,30,2.6,111.05,1.7,63.98775 +2050,46,30,2.6,111.05,1.7,63.9875 +2051,46,30,2.6,111.05,1.7,63.98725 +2052,46,30,2.6,111.05,1.7,63.987 +2053,46,30,2.6,111.05,1.7,63.98675 +2054,46,30,2.6,111.05,1.7,63.9865 +2055,46,30,2.6,111.05,1.7,63.98625 +2056,46,30,2.6,111.05,1.7,63.986 +2057,46,30,2.6,111.05,1.7,63.98575 +2058,46,30,2.6,111.05,1.7,63.9855 +2059,46,30,2.6,111.05,1.7,63.98525 +2060,46,30,2.6,111.05,1.7,63.985 +2061,46,30,2.6,111.05,1.7,63.98475 +2062,46,30,2.6,111.05,1.7,63.9845 +2063,46,30,2.6,111.05,1.7,63.98425 +2064,46,30,2.6,111.05,1.7,63.984 +2065,46,30,2.6,111.05,1.7,63.98375 +2066,46,30,2.6,111.05,1.7,63.9835 +2067,46,30,2.6,111.05,1.7,63.98325 +2068,46,30,2.6,111.05,1.7,63.983 +2069,46,30,2.6,111.05,1.7,63.98275 +2070,46,30,2.6,111.05,1.7,63.9825 +2071,46,30,2.6,111.05,1.7,63.98225 +2072,46,30,2.6,111.05,1.7,63.982 +2073,46,30,2.6,111.05,1.7,63.98175 +2074,46,30,2.6,111.05,1.7,63.9815 +2075,46,30,2.6,111.05,1.7,63.98125 +2076,46,30,2.6,111.05,1.7,63.981 +2077,46,30,2.6,111.05,1.7,63.98075 +2078,46,30,2.6,111.05,1.7,63.9805 +2079,46,30,2.6,111.05,1.7,63.98025 +2080,46,30,2.6,111.05,1.7,63.98 +2081,46,30,2.6,111.05,1.7,63.97975 +2082,46,30,2.6,111.05,1.7,63.9795 +2083,46,30,2.6,111.05,1.7,63.97925 +2084,46,30,2.6,111.05,1.7,63.979 +2085,46,30,2.6,111.05,1.7,63.97875 +2086,46,30,2.6,111.05,1.7,63.9785 +2087,46,30,2.6,111.05,1.7,63.97825 +2088,46,30,2.6,111.05,1.7,63.978 +2089,46,30,2.6,111.05,1.7,63.97775 +2090,46,30,2.6,111.05,1.7,63.9775 +2091,46,30,2.6,111.05,1.7,63.97725 +2092,46,30,2.6,111.05,1.7,63.977 +2093,46,30,2.6,111.05,1.7,63.97675 +2094,46,30,2.6,111.05,1.7,63.9765 +2095,46,30,2.6,111.05,1.7,63.97625 +2096,46,30,2.6,111.05,1.7,63.976 +2097,46,30,2.6,111.05,1.7,63.97575 +2098,46,30,2.6,111.05,1.7,63.9755 +2099,46,30,2.6,111.05,1.7,63.97525 +2100,46,30,2.6,111.05,1.7,63.975 +2101,46,30,2.6,111.05,1.7,63.97475 +2102,46,30,2.6,111.05,1.7,63.9745 +2103,46,30,2.6,111.05,1.7,63.97425 +2104,46,30,2.6,111.05,1.7,63.974 +2105,46,30,2.6,111.05,1.7,63.97375 +2106,46,30,2.6,111.05,1.7,63.9735 +2107,46,30,2.6,111.05,1.7,63.97325 +2108,46,30,2.6,111.05,1.7,63.973 +2109,46,30,2.6,111.05,1.7,63.97275 +2110,46,30,2.6,111.05,1.7,63.9725 +2111,46,30,2.6,111.05,1.7,63.97225 +2112,46,30,2.6,111.05,1.7,63.972 +2113,46,30,2.6,111.05,1.7,63.97175 +2114,46,30,2.6,111.05,1.7,63.9715 +2115,46,30,2.6,111.05,1.7,63.97125 +2116,46,30,2.6,111.05,1.7,63.971 +2117,46,30,2.6,111.05,1.7,63.97075 +2118,46,30,2.6,111.05,1.7,63.9705 +2119,46,30,2.6,111.05,1.7,63.97025 +2120,46,30,2.6,111.05,1.7,63.97 +2121,46,30,2.6,111.05,1.7,63.96975 +2122,46,30,2.6,111.05,1.7,63.9695 +2123,46,30,2.6,111.05,1.7,63.96925 +2124,46,30,2.6,111.05,1.7,63.969 +2125,46,30,2.6,111.05,1.7,63.96875 +2126,46,30,2.6,111.05,1.7,63.9685 +2127,46,30,2.6,111.05,1.7,63.96825 +2128,46,30,2.6,111.05,1.7,63.968 +2129,46,30,2.6,111.05,1.7,63.96775 +2130,46,30,2.6,111.05,1.7,63.9675 +2131,46,30,2.6,111.05,1.7,63.96725 +2132,46,30,2.6,111.05,1.7,63.967 +2133,46,30,2.6,111.05,1.7,63.96675 +2134,46,30,2.6,111.05,1.7,63.9665 +2135,46,30,2.6,111.05,1.7,63.96625 +2136,46,30,2.6,111.05,1.7,63.966 +2137,46,30,2.6,111.05,1.7,63.96575 +2138,46,30,2.6,111.05,1.7,63.9655 +2139,46,30,2.6,111.05,1.7,63.96525 +2140,46,30,2.6,111.05,1.7,63.965 +2141,46,30,2.6,111.05,1.7,63.96475 +2142,46,30,2.6,111.05,1.7,63.9645 +2143,46,30,2.6,111.05,1.7,63.96425 +2144,46,30,2.6,111.05,1.7,63.964 +2145,46,30,2.6,111.05,1.7,63.96375 +2146,46,30,2.6,111.05,1.7,63.9635 +2147,46,30,2.6,111.05,1.7,63.96325 +2148,46,30,2.6,111.05,1.7,63.963 +2149,46,30,2.6,111.05,1.7,63.96275 +2150,46,30,2.6,111.05,1.7,63.9625 +2151,46,30,2.6,111.05,1.7,63.96225 +2152,46,30,2.6,111.05,1.7,63.962 +2153,46,30,2.6,111.05,1.7,63.96175 +2154,46,30,2.6,111.05,1.7,63.9615 +2155,46,30,2.6,111.05,1.7,63.96125 +2156,46,30,2.6,111.05,1.7,63.961 +2157,46,30,2.6,111.05,1.7,63.96075 +2158,46,30,2.6,111.05,1.7,63.9605 +2159,46,30,2.6,111.05,1.7,63.96025 +2160,46,30,2.6,111.05,1.7,63.96 +2161,46,30,2.6,111.05,1.7,63.95975 +2162,46,30,2.6,111.05,1.7,63.9595 +2163,46,30,2.6,111.05,1.7,63.95925 +2164,46,30,2.6,111.05,1.7,63.959 +2165,46,30,2.6,111.05,1.7,63.95875 +2166,46,30,2.6,111.05,1.7,63.9585 +2167,46,30,2.6,111.05,1.7,63.95825 +2168,46,30,2.6,111.05,1.7,63.958 +2169,46,30,2.6,111.05,1.7,63.95775 +2170,46,30,2.6,111.05,1.7,63.9575 +2171,46,30,2.6,111.05,1.7,63.95725 +2172,46,30,2.6,111.05,1.7,63.957 +2173,46,30,2.6,111.05,1.7,63.95675 +2174,46,30,2.6,111.05,1.7,63.9565 +2175,46,30,2.6,111.05,1.7,63.95625 +2176,46,30,2.6,111.05,1.7,63.956 +2177,46,30,2.6,111.05,1.7,63.95575 +2178,46,30,2.6,111.05,1.7,63.9555 +2179,46,30,2.6,111.05,1.7,63.95525 +2180,46,30,2.6,111.05,1.7,63.955 +2181,46,30,2.6,111.05,1.7,63.95475 +2182,46,30,2.6,111.05,1.7,63.9545 +2183,46,30,2.6,111.05,1.7,63.95425 +2184,46,30,2.6,111.05,1.7,63.954 +2185,46,30,2.6,111.05,1.7,63.95375 +2186,46,30,2.6,111.05,1.7,63.9535 +2187,46,30,2.6,111.05,1.7,63.95325 +2188,46,30,2.6,111.05,1.7,63.953 +2189,46,30,2.6,111.05,1.7,63.95275 +2190,46,30,2.6,111.05,1.7,63.9525 +2191,46,30,2.6,111.05,1.7,63.95225 +2192,46,30,2.6,111.05,1.7,63.952 +2193,46,30,2.6,111.05,1.7,63.95175 +2194,46,30,2.6,111.05,1.7,63.9515 +2195,46,30,2.6,111.05,1.7,63.95125 +2196,46,30,2.6,111.05,1.7,63.951 +2197,46,30,2.6,111.05,1.7,63.95075 +2198,46,30,2.6,111.05,1.7,63.9505 +2199,46,30,2.6,111.05,1.7,63.95025 +2200,46,30,2.6,111.05,1.7,63.95 +2201,46,30,2.6,111.05,1.7,63.94975 +2202,46,30,2.6,111.05,1.7,63.9495 +2203,46,30,2.6,111.05,1.7,63.94925 +2204,46,30,2.6,111.05,1.7,63.949 +2205,46,30,2.6,111.05,1.7,63.94875 +2206,46,30,2.6,111.05,1.7,63.9485 +2207,46,30,2.6,111.05,1.7,63.94825 +2208,46,30,2.6,111.05,1.7,63.948 +2209,46,30,2.6,111.05,1.7,63.94775 +2210,46,30,2.6,111.05,1.7,63.9475 +2211,46,30,2.6,111.05,1.7,63.94725 +2212,46,30,2.6,111.05,1.7,63.947 +2213,46,30,2.6,111.05,1.7,63.94675 +2214,46,30,2.6,111.05,1.7,63.9465 +2215,46,30,2.6,111.05,1.7,63.94625 +2216,46,30,2.6,111.05,1.7,63.946 +2217,46,30,2.6,111.05,1.7,63.94575 +2218,46,30,2.6,111.05,1.7,63.9455 +2219,46,30,2.6,111.05,1.7,63.94525 +2220,46,30,2.6,111.05,1.7,63.945 +2221,46,30,2.6,111.05,1.7,63.94475 +2222,46,30,2.6,111.05,1.7,63.9445 +2223,46,30,2.6,111.05,1.7,63.94425 +2224,46,30,2.6,111.05,1.7,63.944 +2225,46,30,2.6,111.05,1.7,63.94375 +2226,46,30,2.6,111.05,1.7,63.9435 +2227,46,30,2.6,111.05,1.7,63.94325 +2228,46,30,2.6,111.05,1.7,63.943 +2229,46,30,2.6,111.05,1.7,63.94275 +2230,46,30,2.6,111.05,1.7,63.9425 +2231,46,30,2.6,111.05,1.7,63.94225 +2232,46,30,2.6,111.05,1.7,63.942 +2233,46,30,2.6,111.05,1.7,63.94175 +2234,46,30,2.6,111.05,1.7,63.9415 +2235,46,30,2.6,111.05,1.7,63.94125 +2236,46,30,2.6,111.05,1.7,63.941 +2237,46,30,2.6,111.05,1.7,63.94075 +2238,46,30,2.6,111.05,1.7,63.9405 +2239,46,30,2.6,111.05,1.7,63.94025 +2240,46,30,2.6,111.05,1.7,63.94 +2241,46,30,2.6,111.05,1.7,63.93975 +2242,46,30,2.6,111.05,1.7,63.9395 +2243,46,30,2.6,111.05,1.7,63.93925 +2244,46,30,2.6,111.05,1.7,63.939 +2245,46,30,2.6,111.05,1.7,63.93875 +2246,46,30,2.6,111.05,1.7,63.9385 +2247,46,30,2.6,111.05,1.7,63.93825 +2248,46,30,2.6,111.05,1.7,63.938 +2249,46,30,2.6,111.05,1.7,63.93775 +2250,46,30,2.6,111.05,1.7,63.9375 +2251,46,30,2.6,111.05,1.7,63.93725 +2252,46,30,2.6,111.05,1.7,63.937 +2253,46,30,2.6,111.05,1.7,63.93675 +2254,46,30,2.6,111.05,1.7,63.9365 +2255,46,30,2.6,111.05,1.7,63.93625 +2256,46,30,2.6,111.05,1.7,63.936 +2257,46,30,2.6,111.05,1.7,63.93575 +2258,46,30,2.6,111.05,1.7,63.9355 +2259,46,30,2.6,111.05,1.7,63.93525 +2260,46,30,2.6,111.05,1.7,63.935 +2261,46,30,2.6,111.05,1.7,63.93475 +2262,46,30,2.6,111.05,1.7,63.9345 +2263,46,30,2.6,111.05,1.7,63.93425 +2264,46,30,2.6,111.05,1.7,63.934 +2265,46,30,2.6,111.05,1.7,63.93375 +2266,46,30,2.6,111.05,1.7,63.9335 +2267,46,30,2.6,111.05,1.7,63.93325 +2268,46,30,2.6,111.05,1.7,63.933 +2269,46,30,2.6,111.05,1.7,63.93275 +2270,46,30,2.6,111.05,1.7,63.9325 +2271,46,30,2.6,111.05,1.7,63.93225 +2272,46,30,2.6,111.05,1.7,63.932 +2273,46,30,2.6,111.05,1.7,63.93175 +2274,46,30,2.6,111.05,1.7,63.9315 +2275,46,30,2.6,111.05,1.7,63.93125 +2276,46,30,2.6,111.05,1.7,63.931 +2277,46,30,2.6,111.05,1.7,63.93075 +2278,46,30,2.6,111.05,1.7,63.9305 +2279,46,30,2.6,111.05,1.7,63.93025 +2280,46,30,2.6,111.05,1.7,63.93 +2281,46,30,2.6,111.05,1.7,63.92975 +2282,46,30,2.6,111.05,1.7,63.9295 +2283,46,30,2.6,111.05,1.7,63.92925 +2284,46,30,2.6,111.05,1.7,63.929 +2285,46,30,2.6,111.05,1.7,63.92875 +2286,46,30,2.6,111.05,1.7,63.9285 +2287,46,30,2.6,111.05,1.7,63.92825 +2288,46,30,2.6,111.05,1.7,63.928 +2289,46,30,2.6,111.05,1.7,63.92775 +2290,46,30,2.6,111.05,1.7,63.9275 +2291,46,30,2.6,111.05,1.7,63.92725 +2292,46,30,2.6,111.05,1.7,63.927 +2293,46,30,2.6,111.05,1.7,63.92675 +2294,46,30,2.6,111.05,1.7,63.9265 +2295,46,30,2.6,111.05,1.7,63.92625 +2296,46,30,2.6,111.05,1.7,63.926 +2297,46,30,2.6,111.05,1.7,63.92575 +2298,46,30,2.6,111.05,1.7,63.9255 +2299,46,30,2.6,111.05,1.7,63.92525 +2300,46,30,2.6,111.05,1.7,63.925 +2301,46,30,2.6,111.05,1.7,63.92475 +2302,46,30,2.6,111.05,1.7,63.9245 +2303,46,30,2.6,111.05,1.7,63.92425 +2304,46,30,2.6,111.05,1.7,63.924 +2305,46,30,2.6,111.05,1.7,63.92375 +2306,46,30,2.6,111.05,1.7,63.9235 +2307,46,30,2.6,111.05,1.7,63.92325 +2308,46,30,2.6,111.05,1.7,63.923 +2309,46,30,2.6,111.05,1.7,63.92275 +2310,46,30,2.6,111.05,1.7,63.9225 +2311,46,30,2.6,111.05,1.7,63.92225 +2312,46,30,2.6,111.05,1.7,63.922 +2313,46,30,2.6,111.05,1.7,63.92175 +2314,46,30,2.6,111.05,1.7,63.9215 +2315,46,30,2.6,111.05,1.7,63.92125 +2316,46,30,2.6,111.05,1.7,63.921 +2317,46,30,2.6,111.05,1.7,63.92075 +2318,46,30,2.6,111.05,1.7,63.9205 +2319,46,30,2.6,111.05,1.7,63.92025 +2320,46,30,2.6,111.05,1.7,63.92 +2321,46,30,2.6,111.05,1.7,63.91975 +2322,46,30,2.6,111.05,1.7,63.9195 +2323,46,30,2.6,111.05,1.7,63.91925 +2324,46,30,2.6,111.05,1.7,63.919 +2325,46,30,2.6,111.05,1.7,63.91875 +2326,46,30,2.6,111.05,1.7,63.9185 +2327,46,30,2.6,111.05,1.7,63.91825 +2328,46,30,2.6,111.05,1.7,63.918 +2329,46,30,2.6,111.05,1.7,63.91775 +2330,46,30,2.6,111.05,1.7,63.9175 +2331,46,30,2.6,111.05,1.7,63.91725 +2332,46,30,2.6,111.05,1.7,63.917 +2333,46,30,2.6,111.05,1.7,63.91675 +2334,46,30,2.6,111.05,1.7,63.9165 +2335,46,30,2.6,111.05,1.7,63.91625 +2336,46,30,2.6,111.05,1.7,63.916 +2337,46,30,2.6,111.05,1.7,63.91575 +2338,46,30,2.6,111.05,1.7,63.9155 +2339,46,30,2.6,111.05,1.7,63.91525 +2340,46,30,2.6,111.05,1.7,63.915 +2341,46,30,2.6,111.05,1.7,63.91475 +2342,46,30,2.6,111.05,1.7,63.9145 +2343,46,30,2.6,111.05,1.7,63.91425 +2344,46,30,2.6,111.05,1.7,63.914 +2345,46,30,2.6,111.05,1.7,63.91375 +2346,46,30,2.6,111.05,1.7,63.9135 +2347,46,30,2.6,111.05,1.7,63.91325 +2348,46,30,2.6,111.05,1.7,63.913 +2349,46,30,2.6,111.05,1.7,63.91275 +2350,46,30,2.6,111.05,1.7,63.9125 +2351,46,30,2.6,111.05,1.7,63.91225 +2352,46,30,2.6,111.05,1.7,63.912 +2353,46,30,2.6,111.05,1.7,63.91175 +2354,46,30,2.6,111.05,1.7,63.9115 +2355,46,30,2.6,111.05,1.7,63.91125 +2356,46,30,2.6,111.05,1.7,63.911 +2357,46,30,2.6,111.05,1.7,63.91075 +2358,46,30,2.6,111.05,1.7,63.9105 +2359,46,30,2.6,111.05,1.7,63.91025 +2360,46,30,2.6,111.05,1.7,63.91 +2361,46,30,2.6,111.05,1.7,63.90975 +2362,46,30,2.6,111.05,1.7,63.9095 +2363,46,30,2.6,111.05,1.7,63.90925 +2364,46,30,2.6,111.05,1.7,63.909 +2365,46,30,2.6,111.05,1.7,63.90875 +2366,46,30,2.6,111.05,1.7,63.9085 +2367,46,30,2.6,111.05,1.7,63.90825 +2368,46,30,2.6,111.05,1.7,63.908 +2369,46,30,2.6,111.05,1.7,63.90775 +2370,46,30,2.6,111.05,1.7,63.9075 +2371,46,30,2.6,111.05,1.7,63.90725 +2372,46,30,2.6,111.05,1.7,63.907 +2373,46,30,2.6,111.05,1.7,63.90675 +2374,46,30,2.6,111.05,1.7,63.9065 +2375,46,30,2.6,111.05,1.7,63.90625 +2376,46,30,2.6,111.05,1.7,63.906 +2377,46,30,2.6,111.05,1.7,63.90575 +2378,46,30,2.6,111.05,1.7,63.9055 +2379,46,30,2.6,111.05,1.7,63.90525 +2380,46,30,2.6,111.05,1.7,63.905 +2381,46,30,2.6,111.05,1.7,63.90475 +2382,46,30,2.6,111.05,1.7,63.9045 +2383,46,30,2.6,111.05,1.7,63.90425 +2384,46,30,2.6,111.05,1.7,63.904 +2385,46,30,2.6,111.05,1.7,63.90375 +2386,46,30,2.6,111.05,1.7,63.9035 +2387,46,30,2.6,111.05,1.7,63.90325 +2388,46,30,2.6,111.05,1.7,63.903 +2389,46,30,2.6,111.05,1.7,63.90275 +2390,46,30,2.6,111.05,1.7,63.9025 +2391,46,30,2.6,111.05,1.7,63.90225 +2392,46,30,2.6,111.05,1.7,63.902 +2393,46,30,2.6,111.05,1.7,63.90175 +2394,46,30,2.6,111.05,1.7,63.9015 +2395,46,30,2.6,111.05,1.7,63.90125 +2396,46,30,2.6,111.05,1.7,63.901 +2397,46,30,2.6,111.05,1.7,63.90075 +2398,46,30,2.6,111.05,1.7,63.9005 +2399,46,30,2.6,111.05,1.7,63.90025 +2400,46,30,2.6,111.05,1.7,63.9 +2401,46,30,2.6,111.05,1.7,63.89975 +2402,46,30,2.6,111.05,1.7,63.8995 +2403,46,30,2.6,111.05,1.7,63.89925 +2404,46,30,2.6,111.05,1.7,63.899 +2405,46,30,2.6,111.05,1.7,63.89875 +2406,46,30,2.6,111.05,1.7,63.8985 +2407,46,30,2.6,111.05,1.7,63.89825 +2408,46,30,2.6,111.05,1.7,63.898 +2409,46,30,2.6,111.05,1.7,63.89775 +2410,46,30,2.6,111.05,1.7,63.8975 +2411,46,30,2.6,111.05,1.7,63.89725 +2412,46,30,2.6,111.05,1.7,63.897 +2413,46,30,2.6,111.05,1.7,63.89675 +2414,46,30,2.6,111.05,1.7,63.8965 +2415,46,30,2.6,111.05,1.7,63.89625 +2416,46,30,2.6,111.05,1.7,63.896 +2417,46,30,2.6,111.05,1.7,63.89575 +2418,46,30,2.6,111.05,1.7,63.8955 +2419,46,30,2.6,111.05,1.7,63.89525 +2420,46,30,2.6,111.05,1.7,63.895 +2421,46,30,2.6,111.05,1.7,63.89475 +2422,46,30,2.6,111.05,1.7,63.8945 +2423,46,30,2.6,111.05,1.7,63.89425 +2424,46,30,2.6,111.05,1.7,63.894 +2425,46,30,2.6,111.05,1.7,63.89375 +2426,46,30,2.6,111.05,1.7,63.8935 +2427,46,30,2.6,111.05,1.7,63.89325 +2428,46,30,2.6,111.05,1.7,63.893 +2429,46,30,2.6,111.05,1.7,63.89275 +2430,46,30,2.6,111.05,1.7,63.8925 +2431,46,30,2.6,111.05,1.7,63.89225 +2432,46,30,2.6,111.05,1.7,63.892 +2433,46,30,2.6,111.05,1.7,63.89175 +2434,46,30,2.6,111.05,1.7,63.8915 +2435,46,30,2.6,111.05,1.7,63.89125 +2436,46,30,2.6,111.05,1.7,63.891 +2437,46,30,2.6,111.05,1.7,63.89075 +2438,46,30,2.6,111.05,1.7,63.8905 +2439,46,30,2.6,111.05,1.7,63.89025 +2440,46,30,2.6,111.05,1.7,63.89 +2441,46,30,2.6,111.05,1.7,63.88975 +2442,46,30,2.6,111.05,1.7,63.8895 +2443,46,30,2.6,111.05,1.7,63.88925 +2444,46,30,2.6,111.05,1.7,63.889 +2445,46,30,2.6,111.05,1.7,63.88875 +2446,46,30,2.6,111.05,1.7,63.8885 +2447,46,30,2.6,111.05,1.7,63.88825 +2448,46,30,2.6,111.05,1.7,63.888 +2449,46,30,2.6,111.05,1.7,63.88775 +2450,46,30,2.6,111.05,1.7,63.8875 +2451,46,30,2.6,111.05,1.7,63.88725 +2452,46,30,2.6,111.05,1.7,63.887 +2453,46,30,2.6,111.05,1.7,63.88675 +2454,46,30,2.6,111.05,1.7,63.8865 +2455,46,30,2.6,111.05,1.7,63.88625 +2456,46,30,2.6,111.05,1.7,63.886 +2457,46,30,2.6,111.05,1.7,63.88575 +2458,46,30,2.6,111.05,1.7,63.8855 +2459,46,30,2.6,111.05,1.7,63.88525 +2460,46,30,2.6,111.05,1.7,63.885 +2461,46,30,2.6,111.05,1.7,63.88475 +2462,46,30,2.6,111.05,1.7,63.8845 +2463,46,30,2.6,111.05,1.7,63.88425 +2464,46,30,2.6,111.05,1.7,63.884 +2465,46,30,2.6,111.05,1.7,63.88375 +2466,46,30,2.6,111.05,1.7,63.8835 +2467,46,30,2.6,111.05,1.7,63.88325 +2468,46,30,2.6,111.05,1.7,63.883 +2469,46,30,2.6,111.05,1.7,63.88275 +2470,46,30,2.6,111.05,1.7,63.8825 +2471,46,30,2.6,111.05,1.7,63.88225 +2472,46,30,2.6,111.05,1.7,63.882 +2473,46,30,2.6,111.05,1.7,63.88175 +2474,46,30,2.6,111.05,1.7,63.8815 +2475,46,30,2.6,111.05,1.7,63.88125 +2476,46,30,2.6,111.05,1.7,63.881 +2477,46,30,2.6,111.05,1.7,63.88075 +2478,46,30,2.6,111.05,1.7,63.8805 +2479,46,30,2.6,111.05,1.7,63.88025 +2480,46,30,2.6,111.05,1.7,63.88 +2481,46,30,2.6,111.05,1.7,63.87975 +2482,46,30,2.6,111.05,1.7,63.8795 +2483,46,30,2.6,111.05,1.7,63.87925 +2484,46,30,2.6,111.05,1.7,63.879 +2485,46,30,2.6,111.05,1.7,63.87875 +2486,46,30,2.6,111.05,1.7,63.8785 +2487,46,30,2.6,111.05,1.7,63.87825 +2488,46,30,2.6,111.05,1.7,63.878 +2489,46,30,2.6,111.05,1.7,63.87775 +2490,46,30,2.5,111.05,1.7,63.8775 +2491,46,30,2.5,111.05,1.7,63.87725 +2492,46,30,2.5,111.05,1.7,63.877 +2493,46,30,2.5,111.05,1.7,63.87675 +2494,46,30,2.5,111.05,1.7,63.8765 +2495,46,30,2.5,111.05,1.7,63.87625 +2496,46,30,2.5,111.05,1.7,63.876 +2497,46,30,2.5,111.05,1.7,63.87575 +2498,46,30,2.5,111.05,1.7,63.8755 +2499,46,30,2.5,111.05,1.7,63.87525 +2500,46,30,2.5,111.05,1.7,63.875 +2501,46,30,2.5,111.05,1.7,63.87475 +2502,46,30,2.5,111.05,1.7,63.8745 +2503,46,30,2.5,111.05,1.7,63.87425 +2504,46,30,2.5,111.05,1.7,63.874 +2505,46,30,2.5,111.05,1.7,63.87375 +2506,46,30,2.5,111.05,1.7,63.8735 +2507,46,30,2.5,111.05,1.7,63.87325 +2508,46,30,2.5,111.05,1.7,63.873 +2509,46,30,2.5,111.05,1.7,63.87275 +2510,46,30,2.5,111.05,1.7,63.8725 +2511,46,30,2.5,111.05,1.7,63.87225 +2512,46,30,2.5,111.05,1.7,63.872 +2513,46,30,2.5,111.05,1.7,63.87175 +2514,46,30,2.5,111.05,1.7,63.8715 +2515,46,30,2.5,111.05,1.7,63.87125 +2516,46,30,2.5,111.05,1.7,63.871 +2517,46,30,2.5,111.05,1.7,63.87075 +2518,46,30,2.5,111.05,1.7,63.8705 +2519,46,30,2.5,111.05,1.7,63.87025 +2520,46,30,2.5,111.05,1.7,63.87 +2521,46,30,2.5,111.05,1.7,63.86975 +2522,46,30,2.5,111.05,1.7,63.8695 +2523,46,30,2.5,111.05,1.7,63.86925 +2524,46,30,2.5,111.05,1.7,63.869 +2525,46,30,2.5,111.05,1.7,63.86875 +2526,46,30,2.5,111.05,1.7,63.8685 +2527,46,30,2.5,111.05,1.7,63.86825 +2528,46,30,2.5,111.05,1.7,63.868 +2529,46,30,2.5,111.05,1.7,63.86775 +2530,46,30,2.5,111.05,1.7,63.8675 +2531,46,30,2.5,111.05,1.7,63.86725 +2532,46,30,2.5,111.05,1.7,63.867 +2533,46,30,2.5,111.05,1.7,63.86675 +2534,46,30,2.5,111.05,1.7,63.8665 +2535,46,30,2.5,111.05,1.7,63.86625 +2536,46,30,2.5,111.05,1.7,63.866 +2537,46,30,2.5,111.05,1.7,63.86575 +2538,46,30,2.5,111.05,1.7,63.8655 +2539,46,30,2.5,111.05,1.7,63.86525 +2540,46,30,2.5,111.05,1.7,63.865 +2541,46,30,2.5,111.05,1.7,63.86475 +2542,46,30,2.5,111.05,1.7,63.8645 +2543,46,30,2.5,111.05,1.7,63.86425 +2544,46,30,2.5,111.05,1.7,63.864 +2545,46,30,2.5,111.05,1.7,63.86375 +2546,46,30,2.5,111.05,1.7,63.8635 +2547,46,30,2.5,111.05,1.7,63.86325 +2548,46,30,2.5,111.05,1.7,63.863 +2549,46,30,2.5,111.05,1.7,63.86275 +2550,46,30,2.5,111.05,1.7,63.8625 +2551,46,30,2.5,111.05,1.7,63.86225 +2552,46,30,2.5,111.05,1.7,63.862 +2553,46,30,2.5,111.05,1.7,63.86175 +2554,46,30,2.5,111.05,1.7,63.8615 +2555,46,30,2.5,111.05,1.7,63.86125 +2556,46,30,2.5,111.05,1.7,63.861 +2557,46,30,2.5,111.05,1.7,63.86075 +2558,46,30,2.5,111.05,1.7,63.8605 +2559,46,30,2.5,111.05,1.7,63.86025 +2560,46,30,2.5,111.05,1.7,63.86 +2561,46,30,2.5,111.05,1.7,63.85975 +2562,46,30,2.5,111.05,1.7,63.8595 +2563,46,30,2.5,111.05,1.7,63.85925 +2564,46,30,2.5,111.05,1.7,63.859 +2565,46,30,2.5,111.05,1.7,63.85875 +2566,46,30,2.5,111.05,1.7,63.8585 +2567,46,30,2.5,111.05,1.7,63.85825 +2568,46,30,2.5,111.05,1.7,63.858 +2569,46,30,2.5,111.05,1.7,63.85775 +2570,46,30,2.5,111.05,1.7,63.8575 +2571,46,30,2.5,111.05,1.7,63.85725 +2572,46,30,2.5,111.05,1.7,63.857 +2573,46,30,2.5,111.05,1.7,63.85675 +2574,46,30,2.5,111.05,1.7,63.8565 +2575,46,30,2.5,111.05,1.7,63.85625 +2576,46,30,2.5,111.05,1.7,63.856 +2577,46,30,2.5,111.05,1.7,63.85575 +2578,46,30,2.5,111.05,1.7,63.8555 +2579,46,30,2.5,111.05,1.7,63.85525 +2580,46,30,2.5,111.05,1.7,63.855 +2581,46,30,2.5,111.05,1.7,63.85475 +2582,46,30,2.5,111.05,1.7,63.8545 +2583,46,30,2.5,111.05,1.7,63.85425 +2584,46,30,2.5,111.05,1.7,63.854 +2585,46,30,2.5,111.05,1.7,63.85375 +2586,46,30,2.5,111.05,1.7,63.8535 +2587,46,30,2.5,111.05,1.7,63.85325 +2588,46,30,2.5,111.05,1.7,63.853 +2589,46,30,2.5,111.05,1.7,63.85275 +2590,46,30,2.5,111.05,1.7,63.8525 +2591,46,30,2.5,111.05,1.7,63.85225 +2592,46,30,2.5,111.05,1.7,63.852 +2593,46,30,2.5,111.05,1.7,63.85175 +2594,46,30,2.5,111.05,1.7,63.8515 +2595,46,30,2.5,111.05,1.7,63.85125 +2596,46,30,2.5,111.05,1.7,63.851 +2597,46,30,2.5,111.05,1.7,63.85075 +2598,46,30,2.5,111.05,1.7,63.8505 +2599,46,30,2.5,111.05,1.7,63.85025 +2600,46,30,2.5,111.05,1.7,63.85 +2601,46,30,2.5,111.05,1.7,63.84975 +2602,46,30,2.5,111.05,1.7,63.8495 +2603,46,30,2.5,111.05,1.7,63.84925 +2604,46,30,2.5,111.05,1.7,63.849 +2605,46,30,2.5,111.05,1.7,63.84875 +2606,46,30,2.5,111.05,1.7,63.8485 +2607,46,30,2.5,111.05,1.7,63.84825 +2608,46,30,2.5,111.05,1.7,63.848 +2609,46,30,2.5,111.05,1.7,63.84775 +2610,46,30,2.5,111.05,1.7,63.8475 +2611,46,30,2.5,111.05,1.7,63.84725 +2612,46,30,2.5,111.05,1.7,63.847 +2613,46,30,2.5,111.05,1.7,63.84675 +2614,46,30,2.5,111.05,1.7,63.8465 +2615,46,30,2.5,111.05,1.7,63.84625 +2616,46,30,2.5,111.05,1.7,63.846 +2617,46,30,2.5,111.05,1.7,63.84575 +2618,46,30,2.5,111.05,1.7,63.8455 +2619,46,30,2.5,111.05,1.7,63.84525 +2620,46,30,2.5,111.05,1.7,63.845 +2621,46,30,2.5,111.05,1.7,63.84475 +2622,46,30,2.5,111.05,1.7,63.8445 +2623,46,30,2.5,111.05,1.7,63.84425 +2624,46,30,2.5,111.05,1.7,63.844 +2625,46,30,2.5,111.05,1.7,63.84375 +2626,46,30,2.5,111.05,1.7,63.8435 +2627,46,30,2.5,111.05,1.7,63.84325 +2628,46,30,2.5,111.05,1.7,63.843 +2629,46,30,2.5,111.05,1.7,63.84275 +2630,46,30,2.5,111.05,1.7,63.8425 +2631,46,30,2.5,111.05,1.7,63.84225 +2632,46,30,2.5,111.05,1.7,63.842 +2633,46,30,2.5,111.05,1.7,63.84175 +2634,46,30,2.5,111.05,1.7,63.8415 +2635,46,30,2.5,111.05,1.7,63.84125 +2636,46,30,2.5,111.05,1.7,63.841 +2637,46,30,2.5,111.05,1.7,63.84075 +2638,46,30,2.5,111.05,1.7,63.8405 +2639,46,30,2.5,111.05,1.7,63.84025 +2640,46,30,2.5,111.05,1.7,63.84 +2641,46,30,2.5,111.05,1.7,63.83975 +2642,46,30,2.5,111.05,1.7,63.8395 +2643,46,30,2.5,111.05,1.7,63.83925 +2644,46,30,2.5,111.05,1.7,63.839 +2645,46,30,2.5,111.05,1.7,63.83875 +2646,46,30,2.5,111.05,1.7,63.8385 +2647,46,30,2.5,111.05,1.7,63.83825 +2648,46,30,2.5,111.05,1.7,63.838 +2649,46,30,2.5,111.05,1.7,63.83775 +2650,46,30,2.5,111.05,1.7,63.8375 +2651,46,30,2.5,111.05,1.7,63.83725 +2652,46,30,2.5,111.05,1.7,63.837 +2653,46,30,2.5,111.05,1.7,63.83675 +2654,46,30,2.5,111.05,1.7,63.8365 +2655,46,30,2.5,111.05,1.7,63.83625 +2656,46,30,2.5,111.05,1.7,63.836 +2657,46,30,2.5,111.05,1.7,63.83575 +2658,46,30,2.5,111.05,1.7,63.8355 +2659,46,30,2.5,111.05,1.7,63.83525 +2660,46,30,2.5,111.05,1.7,63.835 +2661,46,30,2.5,111.05,1.7,63.83475 +2662,46,30,2.5,111.05,1.7,63.8345 +2663,46,30,2.5,111.05,1.7,63.83425 +2664,46,30,2.5,111.05,1.7,63.834 +2665,46,30,2.5,111.05,1.7,63.83375 +2666,46,30,2.5,111.05,1.7,63.8335 +2667,46,30,2.5,111.05,1.7,63.83325 +2668,46,30,2.5,111.05,1.7,63.833 +2669,46,30,2.5,111.05,1.7,63.83275 +2670,46,30,2.5,111.05,1.7,63.8325 +2671,46,30,2.5,111.05,1.7,63.83225 +2672,46,30,2.5,111.05,1.7,63.832 +2673,46,30,2.5,111.05,1.7,63.83175 +2674,46,30,2.5,111.05,1.7,63.8315 +2675,46,30,2.5,111.05,1.7,63.83125 +2676,46,30,2.5,111.05,1.7,63.831 +2677,46,30,2.5,111.05,1.7,63.83075 +2678,46,30,2.5,111.05,1.7,63.8305 +2679,46,30,2.5,111.05,1.7,63.83025 +2680,46,30,2.5,111.05,1.7,63.83 +2681,46,30,2.5,111.05,1.7,63.82975 +2682,46,30,2.5,111.05,1.7,63.8295 +2683,46,30,2.5,111.05,1.7,63.82925 +2684,46,30,2.5,111.05,1.7,63.829 +2685,46,30,2.5,111.05,1.7,63.82875 +2686,46,30,2.5,111.05,1.7,63.8285 +2687,46,30,2.5,111.05,1.7,63.82825 +2688,46,30,2.5,111.05,1.7,63.828 +2689,46,30,2.5,111.05,1.7,63.82775 +2690,46,30,2.5,111.05,1.7,63.8275 +2691,46,30,2.5,111.05,1.7,63.82725 +2692,46,30,2.5,111.05,1.7,63.827 +2693,46,30,2.5,111.05,1.7,63.82675 +2694,46,30,2.5,111.05,1.7,63.8265 +2695,46,30,2.5,111.05,1.7,63.82625 +2696,46,30,2.5,111.05,1.7,63.826 +2697,46,30,2.5,111.05,1.7,63.82575 +2698,46,30,2.5,111.05,1.7,63.8255 +2699,46,30,2.5,111.05,1.7,63.82525 +2700,46,30,2.5,111.05,1.7,63.825 +2701,46,30,2.5,111.05,1.7,63.82475 +2702,46,30,2.5,111.05,1.7,63.8245 +2703,46,30,2.5,111.05,1.7,63.82425 +2704,46,30,2.5,111.05,1.7,63.824 +2705,46,30,2.5,111.05,1.7,63.82375 +2706,46,30,2.5,111.05,1.7,63.8235 +2707,46,30,2.5,111.05,1.7,63.82325 +2708,46,30,2.5,111.05,1.7,63.823 +2709,46,30,2.5,111.05,1.7,63.82275 +2710,46,30,2.5,111.05,1.7,63.8225 +2711,46,30,2.5,111.05,1.7,63.82225 +2712,46,30,2.5,111.05,1.7,63.822 +2713,46,30,2.5,111.05,1.7,63.82175 +2714,46,30,2.5,111.05,1.7,63.8215 +2715,46,30,2.5,111.05,1.7,63.82125 +2716,46,30,2.5,111.05,1.7,63.821 +2717,46,30,2.5,111.05,1.7,63.82075 +2718,46,30,2.5,111.05,1.7,63.8205 +2719,46,30,2.5,111.05,1.7,63.82025 +2720,46,30,2.5,111.05,1.7,63.82 +2721,46,30,2.5,111.05,1.7,63.81975 +2722,46,30,2.5,111.05,1.7,63.8195 +2723,46,30,2.5,111.05,1.7,63.81925 +2724,46,30,2.5,111.05,1.7,63.819 +2725,46,30,2.5,111.05,1.7,63.81875 +2726,46,30,2.5,111.05,1.7,63.8185 +2727,46,30,2.5,111.05,1.7,63.81825 +2728,46,30,2.5,111.05,1.7,63.818 +2729,46,30,2.5,111.05,1.7,63.81775 +2730,46,30,2.5,111.05,1.7,63.8175 +2731,46,30,2.5,111.05,1.7,63.81725 +2732,46,30,2.5,111.05,1.7,63.817 +2733,46,30,2.5,111.05,1.7,63.81675 +2734,46,30,2.5,111.05,1.7,63.8165 +2735,46,30,2.5,111.05,1.7,63.81625 +2736,46,30,2.5,111.05,1.7,63.816 +2737,46,30,2.5,111.05,1.7,63.81575 +2738,46,30,2.5,111.05,1.7,63.8155 +2739,46,30,2.5,111.05,1.7,63.81525 +2740,46,30,2.5,111.05,1.7,63.815 +2741,46,30,2.5,111.05,1.7,63.81475 +2742,46,30,2.5,111.05,1.7,63.8145 +2743,46,30,2.5,111.05,1.7,63.81425 +2744,46,30,2.5,111.05,1.7,63.814 +2745,46,30,2.5,111.05,1.7,63.81375 +2746,46,30,2.5,111.05,1.7,63.8135 +2747,46,30,2.5,111.05,1.7,63.81325 +2748,46,30,2.5,111.05,1.7,63.813 +2749,46,30,2.5,111.05,1.7,63.81275 +2750,46,30,2.5,111.05,1.7,63.8125 +2751,46,30,2.5,111.05,1.7,63.81225 +2752,46,30,2.5,111.05,1.7,63.812 +2753,46,30,2.5,111.05,1.7,63.81175 +2754,46,30,2.5,111.05,1.7,63.8115 +2755,46,30,2.5,111.05,1.7,63.81125 +2756,46,30,2.5,111.05,1.7,63.811 +2757,46,30,2.5,111.05,1.7,63.81075 +2758,46,30,2.5,111.05,1.7,63.8105 +2759,46,30,2.5,111.05,1.7,63.81025 +2760,46,30,2.5,111.05,1.7,63.81 +2761,46,30,2.5,111.05,1.7,63.80975 +2762,46,30,2.5,111.05,1.7,63.8095 +2763,46,30,2.5,111.05,1.7,63.80925 +2764,46,30,2.5,111.05,1.7,63.809 +2765,46,30,2.5,111.05,1.7,63.80875 +2766,46,30,2.5,111.05,1.7,63.8085 +2767,46,30,2.5,111.05,1.7,63.80825 +2768,46,30,2.5,111.05,1.7,63.808 +2769,46,30,2.5,111.05,1.7,63.80775 +2770,46,30,2.5,111.05,1.7,63.8075 +2771,46,30,2.5,111.05,1.7,63.80725 +2772,46,30,2.5,111.05,1.7,63.807 +2773,46,30,2.5,111.05,1.7,63.80675 +2774,46,30,2.5,111.05,1.7,63.8065 +2775,46,30,2.5,111.05,1.7,63.80625 +2776,46,30,2.5,111.05,1.7,63.806 +2777,46,30,2.5,111.05,1.7,63.80575 +2778,46,30,2.5,111.05,1.7,63.8055 +2779,46,30,2.5,111.05,1.7,63.80525 +2780,46,30,2.5,111.05,1.7,63.805 +2781,46,30,2.5,111.05,1.7,63.80475 +2782,46,30,2.5,111.05,1.7,63.8045 +2783,46,30,2.5,111.05,1.7,63.80425 +2784,46,30,2.5,111.05,1.7,63.804 +2785,46,30,2.5,111.05,1.7,63.80375 +2786,46,30,2.5,111.05,1.7,63.8035 +2787,46,30,2.5,111.05,1.7,63.80325 +2788,46,30,2.5,111.05,1.7,63.803 +2789,46,30,2.5,111.05,1.7,63.80275 +2790,46,30,2.5,111.05,1.7,63.8025 +2791,46,30,2.5,111.05,1.7,63.80225 +2792,46,30,2.5,111.05,1.7,63.802 +2793,46,30,2.5,111.05,1.7,63.80175 +2794,46,30,2.5,111.05,1.7,63.8015 +2795,46,30,2.5,111.05,1.7,63.80125 +2796,46,30,2.5,111.05,1.7,63.801 +2797,46,30,2.5,111.05,1.7,63.80075 +2798,46,30,2.5,111.05,1.7,63.8005 +2799,46,30,2.5,111.05,1.7,63.80025 +2800,46,30,2.5,111.05,1.7,63.8 +2801,46,30,2.5,111.05,1.7,63.79975 +2802,46,30,2.5,111.05,1.7,63.7995 +2803,46,30,2.5,111.05,1.7,63.79925 +2804,46,30,2.5,111.05,1.7,63.799 +2805,46,30,2.5,111.05,1.7,63.79875 +2806,46,30,2.5,111.05,1.7,63.7985 +2807,46,30,2.5,111.05,1.7,63.79825 +2808,46,30,2.5,111.05,1.7,63.798 +2809,46,30,2.5,111.05,1.7,63.79775 +2810,46,30,2.5,111.05,1.7,63.7975 +2811,46,30,2.5,111.05,1.7,63.79725 +2812,46,30,2.5,111.05,1.7,63.797 +2813,46,30,2.5,111.05,1.7,63.79675 +2814,46,30,2.5,111.05,1.7,63.7965 +2815,46,30,2.5,111.05,1.7,63.79625 +2816,46,30,2.5,111.05,1.7,63.796 +2817,46,30,2.5,111.05,1.7,63.79575 +2818,46,30,2.5,111.05,1.7,63.7955 +2819,46,30,2.5,111.05,1.7,63.79525 +2820,46,30,2.5,111.05,1.7,63.795 +2821,46,30,2.5,111.05,1.7,63.79475 +2822,46,30,2.5,111.05,1.7,63.7945 +2823,46,30,2.5,111.05,1.7,63.79425 +2824,46,30,2.5,111.05,1.7,63.794 +2825,46,30,2.5,111.05,1.7,63.79375 +2826,46,30,2.5,111.05,1.7,63.7935 +2827,46,30,2.5,111.05,1.7,63.79325 +2828,46,30,2.5,111.05,1.7,63.793 +2829,46,30,2.5,111.05,1.7,63.79275 +2830,46,30,2.5,111.05,1.7,63.7925 +2831,46,30,2.5,111.05,1.7,63.79225 +2832,46,30,2.5,111.05,1.7,63.792 +2833,46,30,2.5,111.05,1.7,63.79175 +2834,46,30,2.5,111.05,1.7,63.7915 +2835,46,30,2.5,111.05,1.7,63.79125 +2836,46,30,2.5,111.05,1.7,63.791 +2837,46,30,2.5,111.05,1.7,63.79075 +2838,46,30,2.5,111.05,1.7,63.7905 +2839,46,30,2.5,111.05,1.7,63.79025 +2840,46,30,2.5,111.05,1.7,63.79 +2841,46,30,2.5,111.05,1.7,63.78975 +2842,46,30,2.5,111.05,1.7,63.7895 +2843,46,30,2.5,111.05,1.7,63.78925 +2844,46,30,2.5,111.05,1.7,63.789 +2845,46,30,2.5,111.05,1.7,63.78875 +2846,46,30,2.5,111.05,1.7,63.7885 +2847,46,30,2.5,111.05,1.7,63.78825 +2848,46,30,2.5,111.05,1.7,63.788 +2849,46,30,2.5,111.05,1.7,63.78775 +2850,46,30,2.5,111.05,1.7,63.7875 +2851,46,30,2.5,111.05,1.7,63.78725 +2852,46,30,2.5,111.05,1.7,63.787 +2853,46,30,2.5,111.05,1.7,63.78675 +2854,46,30,2.5,111.05,1.7,63.7865 +2855,46,30,2.5,111.05,1.7,63.78625 +2856,46,30,2.5,111.05,1.7,63.786 +2857,46,30,2.5,111.05,1.7,63.78575 +2858,46,30,2.5,111.05,1.7,63.7855 +2859,46,30,2.5,111.05,1.7,63.78525 +2860,46,30,2.5,111.05,1.7,63.785 +2861,46,30,2.5,111.05,1.7,63.78475 +2862,46,30,2.5,111.05,1.7,63.7845 +2863,46,30,2.5,111.05,1.7,63.78425 +2864,46,30,2.5,111.05,1.7,63.784 +2865,46,30,2.5,111.05,1.7,63.78375 +2866,46,30,2.5,111.05,1.7,63.7835 +2867,46,30,2.5,111.05,1.7,63.78325 +2868,46,30,2.5,111.05,1.7,63.783 +2869,46,30,2.5,111.05,1.7,63.78275 +2870,46,30,2.5,111.05,1.7,63.7825 +2871,46,30,2.5,111.05,1.7,63.78225 +2872,46,30,2.5,111.05,1.7,63.782 +2873,46,30,2.5,111.05,1.7,63.78175 +2874,46,30,2.5,111.05,1.7,63.7815 +2875,46,30,2.5,111.05,1.7,63.78125 +2876,46,30,2.5,111.05,1.7,63.781 +2877,46,30,2.5,111.05,1.7,63.78075 +2878,46,30,2.5,111.05,1.7,63.7805 +2879,46,30,2.5,111.05,1.7,63.78025 +2880,46,30,2.5,111.05,1.7,63.78 +2881,46,30,2.5,111.05,1.7,63.77975 +2882,46,30,2.5,111.05,1.7,63.7795 +2883,46,30,2.5,111.05,1.7,63.77925 +2884,46,30,2.5,111.05,1.7,63.779 +2885,46,30,2.5,111.05,1.7,63.77875 +2886,46,30,2.5,111.05,1.7,63.7785 +2887,46,30,2.5,111.05,1.7,63.77825 +2888,46,30,2.5,111.05,1.7,63.778 +2889,46,30,2.5,111.05,1.7,63.77775 +2890,46,30,2.5,111.05,1.7,63.7775 +2891,46,30,2.5,111.05,1.7,63.77725 +2892,46,30,2.5,111.05,1.7,63.777 +2893,46,30,2.5,111.05,1.7,63.77675 +2894,46,30,2.5,111.05,1.7,63.7765 +2895,46,30,2.5,111.05,1.7,63.77625 +2896,46,30,2.5,111.05,1.7,63.776 +2897,46,30,2.5,111.05,1.7,63.77575 +2898,46,30,2.5,111.05,1.7,63.7755 +2899,46,30,2.5,111.05,1.7,63.77525 +2900,46,30,2.5,111.05,1.7,63.775 +2901,46,30,2.5,111.05,1.7,63.77475 +2902,46,30,2.5,111.05,1.7,63.7745 +2903,46,30,2.5,111.05,1.7,63.77425 +2904,46,30,2.5,111.05,1.7,63.774 +2905,46,30,2.5,111.05,1.7,63.77375 +2906,46,30,2.5,111.05,1.7,63.7735 +2907,46,30,2.5,111.05,1.7,63.77325 +2908,46,30,2.5,111.05,1.7,63.773 +2909,46,30,2.5,111.05,1.7,63.77275 +2910,46,30,2.5,111.05,1.7,63.7725 +2911,46,30,2.5,111.05,1.7,63.77225 +2912,46,30,2.5,111.05,1.7,63.772 +2913,46,30,2.5,111.05,1.7,63.77175 +2914,46,30,2.5,111.05,1.7,63.7715 +2915,46,30,2.5,111.05,1.7,63.77125 +2916,46,30,2.5,111.05,1.7,63.771 +2917,46,30,2.5,111.05,1.7,63.77075 +2918,46,30,2.5,111.05,1.7,63.7705 +2919,46,30,2.5,111.05,1.7,63.77025 +2920,46,30,2.5,111.05,1.7,63.77 +2921,46,30,2.5,111.05,1.7,63.76975 +2922,46,30,2.5,111.05,1.7,63.7695 +2923,46,30,2.5,111.05,1.7,63.76925 +2924,46,30,2.5,111.05,1.7,63.769 +2925,46,30,2.5,111.05,1.7,63.76875 +2926,46,30,2.5,111.05,1.7,63.7685 +2927,46,30,2.5,111.05,1.7,63.76825 +2928,46,30,2.5,111.05,1.7,63.768 +2929,46,30,2.5,111.05,1.7,63.76775 +2930,46,30,2.5,111.05,1.7,63.7675 +2931,46,30,2.5,111.05,1.7,63.76725 +2932,46,30,2.5,111.05,1.7,63.767 +2933,46,30,2.5,111.05,1.7,63.76675 +2934,46,30,2.5,111.05,1.7,63.7665 +2935,46,30,2.5,111.05,1.7,63.76625 +2936,46,30,2.5,111.05,1.7,63.766 +2937,46,30,2.5,111.05,1.7,63.76575 +2938,46,30,2.5,111.05,1.7,63.7655 +2939,46,30,2.5,111.05,1.7,63.76525 +2940,46,30,2.5,111.05,1.7,63.765 +2941,46,30,2.5,111.05,1.7,63.76475 +2942,46,30,2.5,111.05,1.7,63.7645 +2943,46,30,2.5,111.05,1.7,63.76425 +2944,46,30,2.5,111.05,1.7,63.764 +2945,46,30,2.5,111.05,1.7,63.76375 +2946,46,30,2.5,111.05,1.7,63.7635 +2947,46,30,2.5,111.05,1.7,63.76325 +2948,46,30,2.5,111.05,1.7,63.763 +2949,46,30,2.5,111.05,1.7,63.76275 +2950,46,30,2.5,111.05,1.7,63.7625 +2951,46,30,2.5,111.05,1.7,63.76225 +2952,46,30,2.5,111.05,1.7,63.762 +2953,46,30,2.5,111.05,1.7,63.76175 +2954,46,30,2.5,111.05,1.7,63.7615 +2955,46,30,2.5,111.05,1.7,63.76125 +2956,46,30,2.5,111.05,1.7,63.761 +2957,46,30,2.5,111.05,1.7,63.76075 +2958,46,30,2.5,111.05,1.7,63.7605 +2959,46,30,2.5,111.05,1.7,63.76025 +2960,46,30,2.5,111.05,1.7,63.76 +2961,46,30,2.5,111.05,1.7,63.75975 +2962,46,30,2.5,111.05,1.7,63.7595 +2963,46,30,2.5,111.05,1.7,63.75925 +2964,46,30,2.5,111.05,1.7,63.759 +2965,46,30,2.5,111.05,1.7,63.75875 +2966,46,30,2.5,111.05,1.7,63.7585 +2967,46,30,2.5,111.05,1.7,63.75825 +2968,46,30,2.5,111.05,1.7,63.758 +2969,46,30,2.5,111.05,1.7,63.75775 +2970,46,30,2.5,111.05,1.7,63.7575 +2971,46,30,2.5,111.05,1.7,63.75725 +2972,46,30,2.5,111.05,1.7,63.757 +2973,46,30,2.5,111.05,1.7,63.75675 +2974,46,30,2.5,111.05,1.7,63.7565 +2975,46,30,2.5,111.05,1.7,63.75625 +2976,46,30,2.5,111.05,1.7,63.756 +2977,46,30,2.5,111.05,1.7,63.75575 +2978,46,30,2.5,111.05,1.7,63.7555 +2979,46,30,2.5,111.05,1.7,63.75525 +2980,46,30,2.5,111.05,1.7,63.755 +2981,46,30,2.5,111.05,1.7,63.75475 +2982,46,30,2.5,111.05,1.7,63.7545 +2983,46,30,2.5,111.05,1.7,63.75425 +2984,46,30,2.5,111.05,1.7,63.754 +2985,46,30,2.5,111.05,1.7,63.75375 +2986,46,30,2.5,111.05,1.7,63.7535 +2987,46,30,2.5,111.05,1.7,63.75325 +2988,46,30,2.5,111.05,1.7,63.753 +2989,46,30,2.5,111.05,1.7,63.75275 +2990,46,30,2.5,111.05,1.7,63.7525 +2991,46,30,2.5,111.05,1.7,63.75225 +2992,46,30,2.5,111.05,1.7,63.752 +2993,46,30,2.5,111.05,1.7,63.75175 +2994,46,30,2.5,111.05,1.7,63.7515 +2995,46,30,2.5,111.05,1.7,63.75125 +2996,46,30,2.5,111.05,1.7,63.751 +2997,46,30,2.5,111.05,1.7,63.75075 +2998,46,30,2.5,111.05,1.7,63.7505 +2999,46,30,2.5,111.05,1.7,63.75025 +3000,46,30,2.5,111.05,1.7,63.75 +3001,46,30,2.5,111.05,1.7,63.75 +3002,46,30,2.5,111.05,1.7,63.75 +3003,46,30,2.5,111.05,1.7,63.75 +3004,46,30,2.5,111.05,1.7,63.75 +3005,46,30,2.5,111.05,1.7,63.75 +3006,46,30,2.5,111.05,1.7,63.75 +3007,46,30,2.5,111.05,1.7,63.75 +3008,46,30,2.5,111.05,1.7,63.75 +3009,46,30,2.5,111.05,1.7,63.75 +3010,46,30,2.5,111.05,1.7,63.75 +3011,46,30,2.5,111.05,1.7,63.75 +3012,46,30,2.5,111.05,1.7,63.75 +3013,46,30,2.5,111.05,1.7,63.75 +3014,46,30,2.5,111.05,1.7,63.75 +3015,46,30,2.5,111.05,1.7,63.75 +3016,46,30,2.5,111.05,1.7,63.75 +3017,46,30,2.5,111.05,1.7,63.75 +3018,46,30,2.5,111.05,1.7,63.75 +3019,46,30,2.5,111.05,1.7,63.75 +3020,46,30,2.5,111.05,1.7,63.75 +3021,46,30,2.5,111.05,1.7,63.75 +3022,46,30,2.5,111.05,1.7,63.75 +3023,46,30,2.5,111.05,1.7,63.75 +3024,46,30,2.5,111.05,1.7,63.75 +3025,46,30,2.5,111.05,1.7,63.75 +3026,46,30,2.5,111.05,1.7,63.75 +3027,46,30,2.5,111.05,1.7,63.75 +3028,46,30,2.5,111.05,1.7,63.75 +3029,46,30,2.5,111.05,1.7,63.75 +3030,46,30,2.5,111.05,1.7,63.75 +3031,46,30,2.5,111.05,1.7,63.75 +3032,46,30,2.5,111.05,1.7,63.75 +3033,46,30,2.5,111.05,1.7,63.75 +3034,46,30,2.5,111.05,1.7,63.75 +3035,46,30,2.5,111.05,1.7,63.75 +3036,46,30,2.5,111.05,1.7,63.75 +3037,46,30,2.5,111.05,1.7,63.75 +3038,46,30,2.5,111.05,1.7,63.75 +3039,46,30,2.5,111.05,1.7,63.75 +3040,46,30,2.5,111.05,1.7,63.75 +3041,46,30,2.5,111.05,1.7,63.75 +3042,46,30,2.5,111.05,1.7,63.75 +3043,46,30,2.5,111.05,1.7,63.75 +3044,46,30,2.5,111.05,1.7,63.75 +3045,46,30,2.5,111.05,1.7,63.75 +3046,46,30,2.5,111.05,1.7,63.75 +3047,46,30,2.5,111.05,1.7,63.75 +3048,46,30,2.5,111.05,1.7,63.75 +3049,46,30,2.5,111.05,1.7,63.75 +3050,46,30,2.5,111.05,1.7,63.75 +3051,46,30,2.5,111.05,1.7,63.75 +3052,46,30,2.5,111.05,1.7,63.75 +3053,46,30,2.5,111.05,1.7,63.75 +3054,46,30,2.5,111.05,1.7,63.75 +3055,46,30,2.5,111.05,1.7,63.75 +3056,46,30,2.5,111.05,1.7,63.75 +3057,46,30,2.5,111.05,1.7,63.75 +3058,46,30,2.5,111.05,1.7,63.75 +3059,46,30,2.5,111.05,1.7,63.75 +3060,46,30,2.5,111.05,1.7,63.75 +3061,46,30,2.5,111.05,1.7,63.75 +3062,46,30,2.5,111.05,1.7,63.75 +3063,46,30,2.5,111.05,1.7,63.75 +3064,46,30,2.5,111.05,1.7,63.75 +3065,46,30,2.5,111.05,1.7,63.75 +3066,46,30,2.5,111.05,1.7,63.75 +3067,46,30,2.5,111.05,1.7,63.75 +3068,46,30,2.5,111.05,1.7,63.75 +3069,46,30,2.5,111.05,1.7,63.75 +3070,46,30,2.5,111.05,1.7,63.75 +3071,46,30,2.5,111.05,1.7,63.75 +3072,46,30,2.5,111.05,1.7,63.75 +3073,46,30,2.5,111.05,1.7,63.75 +3074,46,30,2.5,111.05,1.7,63.75 +3075,46,30,2.5,111.05,1.7,63.75 +3076,46,30,2.5,111.05,1.7,63.75 +3077,46,30,2.5,111.05,1.7,63.75 +3078,46,30,2.5,111.05,1.7,63.75 +3079,46,30,2.5,111.05,1.7,63.75 +3080,46,30,2.5,111.05,1.7,63.75 +3081,46,30,2.5,111.05,1.7,63.75 +3082,46,30,2.5,111.05,1.7,63.75 +3083,46,30,2.5,111.05,1.7,63.75 +3084,46,30,2.5,111.05,1.7,63.75 +3085,46,30,2.5,111.05,1.7,63.75 +3086,46,30,2.5,111.05,1.7,63.75 +3087,46,30,2.5,111.05,1.7,63.75 +3088,46,30,2.5,111.05,1.7,63.75 +3089,46,30,2.5,111.05,1.7,63.75 +3090,46,30,2.5,111.05,1.7,63.75 +3091,46,30,2.5,111.05,1.7,63.75 +3092,46,30,2.5,111.05,1.7,63.75 +3093,46,30,2.5,111.05,1.7,63.75 +3094,46,30,2.5,111.05,1.7,63.75 +3095,46,30,2.5,111.05,1.7,63.75 +3096,46,30,2.5,111.05,1.7,63.75 +3097,46,30,2.5,111.05,1.7,63.75 +3098,46,30,2.5,111.05,1.7,63.75 +3099,46,30,2.5,111.05,1.7,63.75 +3100,46,30,2.5,111.05,1.7,63.75 +3101,46,30,2.5,111.05,1.7,63.75 +3102,46,30,2.5,111.05,1.7,63.75 +3103,46,30,2.5,111.05,1.7,63.75 +3104,46,30,2.5,111.05,1.7,63.75 +3105,46,30,2.5,111.05,1.7,63.75 +3106,46,30,2.5,111.05,1.7,63.75 +3107,46,30,2.5,111.05,1.7,63.75 +3108,46,30,2.5,111.05,1.7,63.75 +3109,46,30,2.5,111.05,1.7,63.75 +3110,46,30,2.5,111.05,1.7,63.75 +3111,46,30,2.5,111.05,1.7,63.75 +3112,46,30,2.5,111.05,1.7,63.75 +3113,46,30,2.5,111.05,1.7,63.75 +3114,46,30,2.5,111.05,1.7,63.75 +3115,46,30,2.5,111.05,1.7,63.75 +3116,46,30,2.5,111.05,1.7,63.75 +3117,46,30,2.5,111.05,1.7,63.75 +3118,46,30,2.5,111.05,1.7,63.75 +3119,46,30,2.5,111.05,1.7,63.75 +3120,46,30,2.5,111.05,1.7,63.75 +3121,46,30,2.5,111.05,1.7,63.75 +3122,46,30,2.5,111.05,1.7,63.75 +3123,46,30,2.5,111.05,1.7,63.75 +3124,46,30,2.5,111.05,1.7,63.75 +3125,46,30,2.5,111.05,1.7,63.75 +3126,46,30,2.5,111.05,1.7,63.75 +3127,46,30,2.5,111.05,1.7,63.75 +3128,46,30,2.5,111.05,1.7,63.75 +3129,46,30,2.5,111.05,1.7,63.75 +3130,46,30,2.5,111.05,1.7,63.75 +3131,46,30,2.5,111.05,1.7,63.75 +3132,46,30,2.5,111.05,1.7,63.75 +3133,46,30,2.5,111.05,1.7,63.75 +3134,46,30,2.5,111.05,1.7,63.75 +3135,46,30,2.5,111.05,1.7,63.75 +3136,46,30,2.5,111.05,1.7,63.75 +3137,46,30,2.5,111.05,1.7,63.75 +3138,46,30,2.5,111.05,1.7,63.75 +3139,46,30,2.5,111.05,1.7,63.75 +3140,46,30,2.5,111.05,1.7,63.75 +3141,46,30,2.5,111.05,1.7,63.75 +3142,46,30,2.5,111.05,1.7,63.75 +3143,46,30,2.5,111.05,1.7,63.75 +3144,46,30,2.5,111.05,1.7,63.75 +3145,46,30,2.5,111.05,1.7,63.75 +3146,46,30,2.5,111.05,1.7,63.75 +3147,46,30,2.5,111.05,1.7,63.75 +3148,46,30,2.5,111.05,1.7,63.75 +3149,46,30,2.5,111.05,1.7,63.75 +3150,46,30,2.5,111.05,1.7,63.75 +3151,46,30,2.5,111.05,1.7,63.75 +3152,46,30,2.5,111.05,1.7,63.75 +3153,46,30,2.5,111.05,1.7,63.75 +3154,46,30,2.5,111.05,1.7,63.75 +3155,46,30,2.5,111.05,1.7,63.75 +3156,46,30,2.5,111.05,1.7,63.75 +3157,46,30,2.5,111.05,1.7,63.75 +3158,46,30,2.5,111.05,1.7,63.75 +3159,46,30,2.5,111.05,1.7,63.75 +3160,46,30,2.5,111.05,1.7,63.75 +3161,46,30,2.5,111.05,1.7,63.75 +3162,46,30,2.5,111.05,1.7,63.75 +3163,46,30,2.5,111.05,1.7,63.75 +3164,46,30,2.5,111.05,1.7,63.75 +3165,46,30,2.5,111.05,1.7,63.75 +3166,46,30,2.5,111.05,1.7,63.75 +3167,46,30,2.5,111.05,1.7,63.75 +3168,46,30,2.5,111.05,1.7,63.75 +3169,46,30,2.5,111.05,1.7,63.75 +3170,46,30,2.5,111.05,1.7,63.75 +3171,46,30,2.5,111.05,1.7,63.75 +3172,46,30,2.5,111.05,1.7,63.75 +3173,46,30,2.5,111.05,1.7,63.75 +3174,46,30,2.5,111.05,1.7,63.75 +3175,46,30,2.5,111.05,1.7,63.75 +3176,46,30,2.5,111.05,1.7,63.75 +3177,46,30,2.5,111.05,1.7,63.75 +3178,46,30,2.5,111.05,1.7,63.75 +3179,46,30,2.5,111.05,1.7,63.75 +3180,46,30,2.5,111.05,1.7,63.75 +3181,46,30,2.5,111.05,1.7,63.75 +3182,46,30,2.5,111.05,1.7,63.75 +3183,46,30,2.5,111.05,1.7,63.75 +3184,46,30,2.5,111.05,1.7,63.75 +3185,46,30,2.5,111.05,1.7,63.75 +3186,46,30,2.5,111.05,1.7,63.75 +3187,46,30,2.5,111.05,1.7,63.75 +3188,46,30,2.5,111.05,1.7,63.75 +3189,46,30,2.5,111.05,1.7,63.75 +3190,46,30,2.5,111.05,1.7,63.75 +3191,46,30,2.5,111.05,1.7,63.75 +3192,46,30,2.5,111.05,1.7,63.75 +3193,46,30,2.5,111.05,1.7,63.75 +3194,46,30,2.5,111.05,1.7,63.75 +3195,46,30,2.5,111.05,1.7,63.75 +3196,46,30,2.5,111.05,1.7,63.75 +3197,46,30,2.5,111.05,1.7,63.75 +3198,46,30,2.5,111.05,1.7,63.75 +3199,46,30,2.5,111.05,1.7,63.75 +3200,46,30,2.5,111.05,1.7,63.75 +3201,46,30,2.5,111.05,1.7,63.75 +3202,46,30,2.5,111.05,1.7,63.75 +3203,46,30,2.5,111.05,1.7,63.75 +3204,46,30,2.5,111.05,1.7,63.75 +3205,46,30,2.5,111.05,1.7,63.75 +3206,46,30,2.5,111.05,1.7,63.75 +3207,46,30,2.5,111.05,1.7,63.75 +3208,46,30,2.5,111.05,1.7,63.75 +3209,46,30,2.5,111.05,1.7,63.75 +3210,46,30,2.5,111.05,1.7,63.75 +3211,46,30,2.5,111.05,1.7,63.75 +3212,46,30,2.5,111.05,1.7,63.75 +3213,46,30,2.5,111.05,1.7,63.75 +3214,46,30,2.5,111.05,1.7,63.75 +3215,46,30,2.5,111.05,1.7,63.75 +3216,46,30,2.5,111.05,1.7,63.75 +3217,46,30,2.5,111.05,1.7,63.75 +3218,46,30,2.5,111.05,1.7,63.75 +3219,46,30,2.5,111.05,1.7,63.75 +3220,46,30,2.5,111.05,1.7,63.75 +3221,46,30,2.5,111.05,1.7,63.75 +3222,46,30,2.5,111.05,1.7,63.75 +3223,46,30,2.5,111.05,1.7,63.75 +3224,46,30,2.5,111.05,1.7,63.75 +3225,46,30,2.5,111.05,1.7,63.75 +3226,46,30,2.5,111.05,1.7,63.75 +3227,46,30,2.5,111.05,1.7,63.75 +3228,46,30,2.5,111.05,1.7,63.75 +3229,46,30,2.5,111.05,1.7,63.75 +3230,46,30,2.5,111.05,1.7,63.75 +3231,46,30,2.5,111.05,1.7,63.75 +3232,46,30,2.5,111.05,1.7,63.75 +3233,46,30,2.5,111.05,1.7,63.75 +3234,46,30,2.5,111.05,1.7,63.75 +3235,46,30,2.5,111.05,1.7,63.75 +3236,46,30,2.5,111.05,1.7,63.75 +3237,46,30,2.5,111.05,1.7,63.75 +3238,46,30,2.5,111.05,1.7,63.75 +3239,46,30,2.5,111.05,1.7,63.75 +3240,46,30,2.5,111.05,1.7,63.75 +3241,46,30,2.5,111.05,1.7,63.75 +3242,46,30,2.5,111.05,1.7,63.75 +3243,46,30,2.5,111.05,1.7,63.75 +3244,46,30,2.5,111.05,1.7,63.75 +3245,46,30,2.5,111.05,1.7,63.75 +3246,46,30,2.5,111.05,1.7,63.75 +3247,46,30,2.5,111.05,1.7,63.75 +3248,46,30,2.5,111.05,1.7,63.75 +3249,46,30,2.5,111.05,1.7,63.75 +3250,46,30,2.5,111.05,1.7,63.75 +3251,46,30,2.5,111.05,1.7,63.75 +3252,46,30,2.5,111.05,1.7,63.75 +3253,46,30,2.5,111.05,1.7,63.75 +3254,46,30,2.5,111.05,1.7,63.75 +3255,46,30,2.5,111.05,1.7,63.75 +3256,46,30,2.5,111.05,1.7,63.75 +3257,46,30,2.5,111.05,1.7,63.75 +3258,46,30,2.5,111.05,1.7,63.75 +3259,46,30,2.5,111.05,1.7,63.75 +3260,46,30,2.5,111.05,1.7,63.75 +3261,46,30,2.5,111.05,1.7,63.75 +3262,46,30,2.5,111.05,1.7,63.75 +3263,46,30,2.5,111.05,1.7,63.75 +3264,46,30,2.5,111.05,1.7,63.75 +3265,46,30,2.5,111.05,1.7,63.75 +3266,46,30,2.5,111.05,1.7,63.75 +3267,46,30,2.5,111.05,1.7,63.75 +3268,46,30,2.5,111.05,1.7,63.75 +3269,46,30,2.5,111.05,1.7,63.75 +3270,46,30,2.5,111.05,1.7,63.75 +3271,46,30,2.5,111.05,1.7,63.75 +3272,46,30,2.5,111.05,1.7,63.75 +3273,46,30,2.5,111.05,1.7,63.75 +3274,46,30,2.5,111.05,1.7,63.75 +3275,46,30,2.5,111.05,1.7,63.75 +3276,46,30,2.5,111.05,1.7,63.75 +3277,46,30,2.5,111.05,1.7,63.75 +3278,46,30,2.5,111.05,1.7,63.75 +3279,46,30,2.5,111.05,1.7,63.75 +3280,46,30,2.5,111.05,1.7,63.75 +3281,46,30,2.5,111.05,1.7,63.75 +3282,46,30,2.5,111.05,1.7,63.75 +3283,46,30,2.5,111.05,1.7,63.75 +3284,46,30,2.5,111.05,1.7,63.75 +3285,46,30,2.5,111.05,1.7,63.75 +3286,46,30,2.5,111.05,1.7,63.75 +3287,46,30,2.5,111.05,1.7,63.75 +3288,46,30,2.5,111.05,1.7,63.75 +3289,46,30,2.5,111.05,1.7,63.75 +3290,46,30,2.5,111.05,1.7,63.75 +3291,46,30,2.5,111.05,1.7,63.75 +3292,46,30,2.5,111.05,1.7,63.75 +3293,46,30,2.5,111.05,1.7,63.75 +3294,46,30,2.5,111.05,1.7,63.75 +3295,46,30,2.5,111.05,1.7,63.75 +3296,46,30,2.5,111.05,1.7,63.75 +3297,46,30,2.5,111.05,1.7,63.75 +3298,46,30,2.5,111.05,1.7,63.75 +3299,46,30,2.5,111.05,1.7,63.75 +3300,46,30,2.5,111.05,1.7,63.75 +3301,46,30,2.5,111.05,1.7,63.75 +3302,46,30,2.5,111.05,1.7,63.75 +3303,46,30,2.5,111.05,1.7,63.75 +3304,46,30,2.5,111.05,1.7,63.75 +3305,46,30,2.5,111.05,1.7,63.75 +3306,46,30,2.5,111.05,1.7,63.75 +3307,46,30,2.5,111.05,1.7,63.75 +3308,46,30,2.5,111.05,1.7,63.75 +3309,46,30,2.5,111.05,1.7,63.75 +3310,46,30,2.5,111.05,1.7,63.75 +3311,46,30,2.5,111.05,1.7,63.75 +3312,46,30,2.5,111.05,1.7,63.75 +3313,46,30,2.5,111.05,1.7,63.75 +3314,46,30,2.5,111.05,1.7,63.75 +3315,46,30,2.5,111.05,1.7,63.75 +3316,46,30,2.5,111.05,1.7,63.75 +3317,46,30,2.5,111.05,1.7,63.75 +3318,46,30,2.5,111.05,1.7,63.75 +3319,46,30,2.5,111.05,1.7,63.75 +3320,46,30,2.5,111.05,1.7,63.75 +3321,46,30,2.5,111.05,1.7,63.75 +3322,46,30,2.5,111.05,1.7,63.75 +3323,46,30,2.5,111.05,1.7,63.75 +3324,46,30,2.5,111.05,1.7,63.75 +3325,46,30,2.5,111.05,1.7,63.75 +3326,46,30,2.5,111.05,1.7,63.75 +3327,46,30,2.5,111.05,1.7,63.75 +3328,46,30,2.5,111.05,1.7,63.75 +3329,46,30,2.5,111.05,1.7,63.75 +3330,46,30,2.5,111.05,1.7,63.75 +3331,46,30,2.5,111.05,1.7,63.75 +3332,46,30,2.5,111.05,1.7,63.75 +3333,46,30,2.5,111.05,1.7,63.75 +3334,46,30,2.5,111.05,1.7,63.75 +3335,46,30,2.5,111.05,1.7,63.75 +3336,46,30,2.5,111.05,1.7,63.75 +3337,46,30,2.5,111.05,1.7,63.75 +3338,46,30,2.5,111.05,1.7,63.75 +3339,46,30,2.5,111.05,1.7,63.75 +3340,46,30,2.5,111.05,1.7,63.75 +3341,46,30,2.5,111.05,1.7,63.75 +3342,46,30,2.5,111.05,1.7,63.75 +3343,46,30,2.5,111.05,1.7,63.75 +3344,46,30,2.5,111.05,1.7,63.75 +3345,46,30,2.5,111.05,1.7,63.75 +3346,46,30,2.5,111.05,1.7,63.75 +3347,46,30,2.5,111.05,1.7,63.75 +3348,46,30,2.5,111.05,1.7,63.75 +3349,46,30,2.5,111.05,1.7,63.75 +3350,46,30,2.5,111.05,1.7,63.75 +3351,46,30,2.5,111.05,1.7,63.75 +3352,46,30,2.5,111.05,1.7,63.75 +3353,46,30,2.5,111.05,1.7,63.75 +3354,46,30,2.5,111.05,1.7,63.75 +3355,46,30,2.5,111.05,1.7,63.75 +3356,46,30,2.5,111.05,1.7,63.75 +3357,46,30,2.5,111.05,1.7,63.75 +3358,46,30,2.5,111.05,1.7,63.75 +3359,46,30,2.5,111.05,1.7,63.75 +3360,46,30,2.5,111.05,1.7,63.75 +3361,46,30,2.5,111.05,1.7,63.75 +3362,46,30,2.5,111.05,1.7,63.75 +3363,46,30,2.5,111.05,1.7,63.75 +3364,46,30,2.5,111.05,1.7,63.75 +3365,46,30,2.5,111.05,1.7,63.75 +3366,46,30,2.5,111.05,1.7,63.75 +3367,46,30,2.5,111.05,1.7,63.75 +3368,46,30,2.5,111.05,1.7,63.75 +3369,46,30,2.5,111.05,1.7,63.75 +3370,46,30,2.5,111.05,1.7,63.75 +3371,46,30,2.5,111.05,1.7,63.75 +3372,46,30,2.5,111.05,1.7,63.75 +3373,46,30,2.5,111.05,1.7,63.75 +3374,46,30,2.5,111.05,1.7,63.75 +3375,46,30,2.5,111.05,1.7,63.75 +3376,46,30,2.5,111.05,1.7,63.75 +3377,46,30,2.5,111.05,1.7,63.75 +3378,46,30,2.5,111.05,1.7,63.75 +3379,46,30,2.5,111.05,1.7,63.75 +3380,46,30,2.5,111.05,1.7,63.75 +3381,46,30,2.5,111.05,1.7,63.75 +3382,46,30,2.5,111.05,1.7,63.75 +3383,46,30,2.5,111.05,1.7,63.75 +3384,46,30,2.5,111.05,1.7,63.75 +3385,46,30,2.5,111.05,1.7,63.75 +3386,46,30,2.5,111.05,1.7,63.75 +3387,46,30,2.5,111.05,1.7,63.75 +3388,46,30,2.5,111.05,1.7,63.75 +3389,46,30,2.5,111.05,1.7,63.75 +3390,46,30,2.5,111.05,1.7,63.75 +3391,46,30,2.5,111.05,1.7,63.75 +3392,46,30,2.5,111.05,1.7,63.75 +3393,46,30,2.5,111.05,1.7,63.75 +3394,46,30,2.5,111.05,1.7,63.75 +3395,46,30,2.5,111.05,1.7,63.75 +3396,46,30,2.5,111.05,1.7,63.75 +3397,46,30,2.5,111.05,1.7,63.75 +3398,46,30,2.5,111.05,1.7,63.75 +3399,46,30,2.5,111.05,1.7,63.75 +3400,46,30,2.5,111.05,1.7,63.75 +3401,46,30,2.5,111.05,1.7,63.75 +3402,46,30,2.5,111.05,1.7,63.75 +3403,46,30,2.5,111.05,1.7,63.75 +3404,46,30,2.5,111.05,1.7,63.75 +3405,46,30,2.5,111.05,1.7,63.75 +3406,46,30,2.5,111.05,1.7,63.75 +3407,46,30,2.5,111.05,1.7,63.75 +3408,46,30,2.5,111.05,1.7,63.75 +3409,46,30,2.5,111.05,1.7,63.75 +3410,46,30,2.5,111.05,1.7,63.75 +3411,46,30,2.5,111.05,1.7,63.75 +3412,46,30,2.5,111.05,1.7,63.75 +3413,46,30,2.5,111.05,1.7,63.75 +3414,46,30,2.5,111.05,1.7,63.75 +3415,46,30,2.5,111.05,1.7,63.75 +3416,46,30,2.5,111.05,1.7,63.75 +3417,46,30,2.5,111.05,1.7,63.75 +3418,46,30,2.5,111.05,1.7,63.75 +3419,46,30,2.5,111.05,1.7,63.75 +3420,46,30,2.5,111.05,1.7,63.75 +3421,46,30,2.5,111.05,1.7,63.75 +3422,46,30,2.5,111.05,1.7,63.75 +3423,46,30,2.5,111.05,1.7,63.75 +3424,46,30,2.5,111.05,1.7,63.75 +3425,46,30,2.5,111.05,1.7,63.75 +3426,46,30,2.5,111.05,1.7,63.75 +3427,46,30,2.5,111.05,1.7,63.75 +3428,46,30,2.5,111.05,1.7,63.75 +3429,46,30,2.5,111.05,1.7,63.75 +3430,46,30,2.5,111.05,1.7,63.75 +3431,46,30,2.5,111.05,1.7,63.75 +3432,46,30,2.5,111.05,1.7,63.75 +3433,46,30,2.5,111.05,1.7,63.75 +3434,46,30,2.5,111.05,1.7,63.75 +3435,46,30,2.5,111.05,1.7,63.75 +3436,46,30,2.5,111.05,1.7,63.75 +3437,46,30,2.5,111.05,1.7,63.75 +3438,46,30,2.5,111.05,1.7,63.75 +3439,46,30,2.5,111.05,1.7,63.75 +3440,46,30,2.5,111.05,1.7,63.75 +3441,46,30,2.5,111.05,1.7,63.75 +3442,46,30,2.5,111.05,1.7,63.75 +3443,46,30,2.5,111.05,1.7,63.75 +3444,46,30,2.5,111.05,1.7,63.75 +3445,46,30,2.5,111.05,1.7,63.75 +3446,46,30,2.5,111.05,1.7,63.75 +3447,46,30,2.5,111.05,1.7,63.75 +3448,46,30,2.5,111.05,1.7,63.75 +3449,46,30,2.5,111.05,1.7,63.75 +3450,46,30,2.5,111.05,1.7,63.75 +3451,46,30,2.5,111.05,1.7,63.75 +3452,46,30,2.5,111.05,1.7,63.75 +3453,46,30,2.5,111.05,1.7,63.75 +3454,46,30,2.5,111.05,1.7,63.75 +3455,46,30,2.5,111.05,1.7,63.75 +3456,46,30,2.5,111.05,1.7,63.75 +3457,46,30,2.5,111.05,1.7,63.75 +3458,46,30,2.5,111.05,1.7,63.75 +3459,46,30,2.5,111.05,1.7,63.75 +3460,46,30,2.5,111.05,1.7,63.75 +3461,46,30,2.5,111.05,1.7,63.75 +3462,46,30,2.5,111.05,1.7,63.75 +3463,46,30,2.5,111.05,1.7,63.75 +3464,46,30,2.5,111.05,1.7,63.75 +3465,46,30,2.5,111.05,1.7,63.75 +3466,46,30,2.5,111.05,1.7,63.75 +3467,46,30,2.5,111.05,1.7,63.75 +3468,46,30,2.5,111.05,1.7,63.75 +3469,46,30,2.5,111.05,1.7,63.75 +3470,46,30,2.5,111.05,1.7,63.75 +3471,46,30,2.5,111.05,1.7,63.75 +3472,46,30,2.5,111.05,1.7,63.75 +3473,46,30,2.5,111.05,1.7,63.75 +3474,46,30,2.5,111.05,1.7,63.75 +3475,46,30,2.5,111.05,1.7,63.75 +3476,46,30,2.5,111.05,1.7,63.75 +3477,46,30,2.5,111.05,1.7,63.75 +3478,46,30,2.5,111.05,1.7,63.75 +3479,46,30,2.5,111.05,1.7,63.75 +3480,46,30,2.5,111.05,1.7,63.75 +3481,46,30,2.5,111.05,1.7,63.75 +3482,46,30,2.5,111.05,1.7,63.75 +3483,46,30,2.5,111.05,1.7,63.75 +3484,46,30,2.5,111.05,1.7,63.75 +3485,46,30,2.5,111.05,1.7,63.75 +3486,46,30,2.5,111.05,1.7,63.75 +3487,46,30,2.5,111.05,1.7,63.75 +3488,46,30,2.5,111.05,1.7,63.75 +3489,46,30,2.5,111.05,1.7,63.75 +3490,46,30,2.5,111.05,1.7,63.75 +3491,46,30,2.5,111.05,1.7,63.75 +3492,46,30,2.5,111.05,1.7,63.75 +3493,46,30,2.5,111.05,1.7,63.75 +3494,46,30,2.5,111.05,1.7,63.75 +3495,46,30,2.5,111.05,1.7,63.75 +3496,46,30,2.5,111.05,1.7,63.75 +3497,46,30,2.5,111.05,1.7,63.75 +3498,46,30,2.5,111.05,1.7,63.75 +3499,46,30,2.5,111.05,1.7,63.75 +3500,46,30,2.5,111.05,1.7,63.75 +3501,46,30,2.5,111.05,1.7,63.75 +3502,46,30,2.5,111.05,1.7,63.75 +3503,46,30,2.5,111.05,1.7,63.75 +3504,46,30,2.5,111.05,1.7,63.75 +3505,46,30,2.5,111.05,1.7,63.75 +3506,46,30,2.5,111.05,1.7,63.75 +3507,46,30,2.5,111.05,1.7,63.75 +3508,46,30,2.5,111.05,1.7,63.75 +3509,46,30,2.5,111.05,1.7,63.75 +3510,46,30,2.5,111.05,1.7,63.75 +3511,46,30,2.5,111.05,1.7,63.75 +3512,46,30,2.5,111.05,1.7,63.75 +3513,46,30,2.5,111.05,1.7,63.75 +3514,46,30,2.5,111.05,1.7,63.75 +3515,46,30,2.5,111.05,1.7,63.75 +3516,46,30,2.5,111.05,1.7,63.75 +3517,46,30,2.5,111.05,1.7,63.75 +3518,46,30,2.5,111.05,1.7,63.75 +3519,46,30,2.5,111.05,1.7,63.75 +3520,46,30,2.5,111.05,1.7,63.75 +3521,46,30,2.5,111.05,1.7,63.75 +3522,46,30,2.5,111.05,1.7,63.75 +3523,46,30,2.5,111.05,1.7,63.75 +3524,46,30,2.5,111.05,1.7,63.75 +3525,46,30,2.5,111.05,1.7,63.75 +3526,46,30,2.5,111.05,1.7,63.75 +3527,46,30,2.5,111.05,1.7,63.75 +3528,46,30,2.5,111.05,1.7,63.75 +3529,46,30,2.5,111.05,1.7,63.75 +3530,46,30,2.5,111.05,1.7,63.75 +3531,46,30,2.5,111.05,1.7,63.75 +3532,46,30,2.5,111.05,1.7,63.75 +3533,46,30,2.5,111.05,1.7,63.75 +3534,46,30,2.5,111.05,1.7,63.75 +3535,46,30,2.5,111.05,1.7,63.75 +3536,46,30,2.5,111.05,1.7,63.75 +3537,46,30,2.5,111.05,1.7,63.75 +3538,46,30,2.5,111.05,1.7,63.75 +3539,46,30,2.5,111.05,1.7,63.75 +3540,46,30,2.5,111.05,1.7,63.75 +3541,46,30,2.5,111.05,1.7,63.75 +3542,46,30,2.5,111.05,1.7,63.75 +3543,46,30,2.5,111.05,1.7,63.75 +3544,46,30,2.5,111.05,1.7,63.75 +3545,46,30,2.5,111.05,1.7,63.75 +3546,46,30,2.5,111.05,1.7,63.75 +3547,46,30,2.5,111.05,1.7,63.75 +3548,46,30,2.5,111.05,1.7,63.75 +3549,46,30,2.5,111.05,1.7,63.75 +3550,46,30,2.5,111.05,1.7,63.75 +3551,46,30,2.5,111.05,1.7,63.75 +3552,46,30,2.5,111.05,1.7,63.75 +3553,46,30,2.5,111.05,1.7,63.75 +3554,46,30,2.5,111.05,1.7,63.75 +3555,46,30,2.5,111.05,1.7,63.75 +3556,46,30,2.5,111.05,1.7,63.75 +3557,46,30,2.5,111.05,1.7,63.75 +3558,46,30,2.5,111.05,1.7,63.75 +3559,46,30,2.5,111.05,1.7,63.75 +3560,46,30,2.5,111.05,1.7,63.75 +3561,46,30,2.5,111.05,1.7,63.75 +3562,46,30,2.5,111.05,1.7,63.75 +3563,46,30,2.5,111.05,1.7,63.75 +3564,46,30,2.5,111.05,1.7,63.75 +3565,46,30,2.5,111.05,1.7,63.75 +3566,46,30,2.5,111.05,1.7,63.75 +3567,46,30,2.5,111.05,1.7,63.75 +3568,46,30,2.5,111.05,1.7,63.75 +3569,46,30,2.5,111.05,1.7,63.75 +3570,46,30,2.5,111.05,1.7,63.75 +3571,46,30,2.5,111.05,1.7,63.75 +3572,46,30,2.5,111.05,1.7,63.75 +3573,46,30,2.5,111.05,1.7,63.75 +3574,46,30,2.5,111.05,1.7,63.75 +3575,46,30,2.5,111.05,1.7,63.75 +3576,46,30,2.5,111.05,1.7,63.75 +3577,46,30,2.5,111.05,1.7,63.75 +3578,46,30,2.5,111.05,1.7,63.75 +3579,46,30,2.5,111.05,1.7,63.75 +3580,46,30,2.5,111.05,1.7,63.75 +3581,46,30,2.5,111.05,1.7,63.75 +3582,46,30,2.5,111.05,1.7,63.75 +3583,46,30,2.5,111.05,1.7,63.75 +3584,46,30,2.5,111.05,1.7,63.75 +3585,46,30,2.5,111.05,1.7,63.75 +3586,46,30,2.5,111.05,1.7,63.75 +3587,46,30,2.5,111.05,1.7,63.75 +3588,46,30,2.5,111.05,1.7,63.75 +3589,46,30,2.5,111.05,1.7,63.75 +3590,46,30,2.5,111.05,1.7,63.75 +3591,46,30,2.5,111.05,1.7,63.75 +3592,46,30,2.5,111.05,1.7,63.75 +3593,46,30,2.5,111.05,1.7,63.75 +3594,46,30,2.5,111.05,1.7,63.75 +3595,46,30,2.5,111.05,1.7,63.75 +3596,46,30,2.5,111.05,1.7,63.75 +3597,46,30,2.5,111.05,1.7,63.75 +3598,46,30,2.5,111.05,1.7,63.75 +3599,46,30,2.5,111.05,1.7,63.75 +3600,46,30,2.5,111.05,1.7,63.75 +3601,46,30,2.5,111.05,1.7,63.75 +3602,46,30,2.5,111.05,1.7,63.75 +3603,46,30,2.5,111.05,1.7,63.75 +3604,46,30,2.5,111.05,1.7,63.75 +3605,46,30,2.5,111.05,1.7,63.75 +3606,46,30,2.5,111.05,1.7,63.75 +3607,46,30,2.5,111.05,1.7,63.75 +3608,46,30,2.5,111.05,1.7,63.75 +3609,46,30,2.5,111.05,1.7,63.75 +3610,46,30,2.5,111.05,1.7,63.75 +3611,46,30,2.5,111.05,1.7,63.75 +3612,46,30,2.5,111.05,1.7,63.75 +3613,46,30,2.5,111.05,1.7,63.75 +3614,46,30,2.5,111.05,1.7,63.75 +3615,46,30,2.5,111.05,1.7,63.75 +3616,46,30,2.5,111.05,1.7,63.75 +3617,46,30,2.5,111.05,1.7,63.75 +3618,46,30,2.5,111.05,1.7,63.75 +3619,46,30,2.5,111.05,1.7,63.75 +3620,46,30,2.5,111.05,1.7,63.75 +3621,46,30,2.5,111.05,1.7,63.75 +3622,46,30,2.5,111.05,1.7,63.75 +3623,46,30,2.5,111.05,1.7,63.75 +3624,46,30,2.5,111.05,1.7,63.75 +3625,46,30,2.5,111.05,1.7,63.75 +3626,46,30,2.5,111.05,1.7,63.75 +3627,46,30,2.5,111.05,1.7,63.75 +3628,46,30,2.5,111.05,1.7,63.75 +3629,46,30,2.5,111.05,1.7,63.75 +3630,46,30,2.5,111.05,1.7,63.75 +3631,46,30,2.5,111.05,1.7,63.75 +3632,46,30,2.5,111.05,1.7,63.75 +3633,46,30,2.5,111.05,1.7,63.75 +3634,46,30,2.5,111.05,1.7,63.75 +3635,46,30,2.5,111.05,1.7,63.75 +3636,46,30,2.5,111.05,1.7,63.75 +3637,46,30,2.5,111.05,1.7,63.75 +3638,46,30,2.5,111.05,1.7,63.75 +3639,46,30,2.5,111.05,1.7,63.75 +3640,46,30,2.5,111.05,1.7,63.75 +3641,46,30,2.5,111.05,1.7,63.75 +3642,46,30,2.5,111.05,1.7,63.75 +3643,46,30,2.5,111.05,1.7,63.75 +3644,46,30,2.5,111.05,1.7,63.75 +3645,46,30,2.5,111.05,1.7,63.75 +3646,46,30,2.5,111.05,1.7,63.75 +3647,46,30,2.5,111.05,1.7,63.75 +3648,46,30,2.5,111.05,1.7,63.75 +3649,46,30,2.5,111.05,1.7,63.75 +3650,46,30,2.5,111.05,1.7,63.75 +3651,46,30,2.5,111.05,1.7,63.75 +3652,46,30,2.5,111.05,1.7,63.75 +3653,46,30,2.5,111.05,1.7,63.75 +3654,46,30,2.5,111.05,1.7,63.75 +3655,46,30,2.5,111.05,1.7,63.75 +3656,46,30,2.5,111.05,1.7,63.75 +3657,46,30,2.5,111.05,1.7,63.75 +3658,46,30,2.5,111.05,1.7,63.75 +3659,46,30,2.5,111.05,1.7,63.75 +3660,46,30,2.5,111.05,1.7,63.75 +3661,46,30,2.5,111.05,1.7,63.75 +3662,46,30,2.5,111.05,1.7,63.75 +3663,46,30,2.5,111.05,1.7,63.75 +3664,46,30,2.5,111.05,1.7,63.75 +3665,46,30,2.5,111.05,1.7,63.75 +3666,46,30,2.5,111.05,1.7,63.75 +3667,46,30,2.5,111.05,1.7,63.75 +3668,46,30,2.5,111.05,1.7,63.75 +3669,46,30,2.5,111.05,1.7,63.75 +3670,46,30,2.5,111.05,1.7,63.75 +3671,46,30,2.5,111.05,1.7,63.75 +3672,46,30,2.5,111.05,1.7,63.75 +3673,46,30,2.5,111.05,1.7,63.75 +3674,46,30,2.5,111.05,1.7,63.75 +3675,46,30,2.5,111.05,1.7,63.75 +3676,46,30,2.5,111.05,1.7,63.75 +3677,46,30,2.5,111.05,1.7,63.75 +3678,46,30,2.5,111.05,1.7,63.75 +3679,46,30,2.5,111.05,1.7,63.75 +3680,46,30,2.5,111.05,1.7,63.75 +3681,46,30,2.5,111.05,1.7,63.75 +3682,46,30,2.5,111.05,1.7,63.75 +3683,46,30,2.5,111.05,1.7,63.75 +3684,46,30,2.5,111.05,1.7,63.75 +3685,46,30,2.5,111.05,1.7,63.75 +3686,46,30,2.5,111.05,1.7,63.75 +3687,46,30,2.5,111.05,1.7,63.75 +3688,46,30,2.5,111.05,1.7,63.75 +3689,46,30,2.5,111.05,1.7,63.75 +3690,46,30,2.5,111.05,1.7,63.75 +3691,46,30,2.5,111.05,1.7,63.75 +3692,46,30,2.5,111.05,1.7,63.75 +3693,46,30,2.5,111.05,1.7,63.75 +3694,46,30,2.5,111.05,1.7,63.75 +3695,46,30,2.5,111.05,1.7,63.75 +3696,46,30,2.5,111.05,1.7,63.75 +3697,46,30,2.5,111.05,1.7,63.75 +3698,46,30,2.5,111.05,1.7,63.75 +3699,46,30,2.5,111.05,1.7,63.75 +3700,46,30,2.5,111.05,1.7,63.75 +3701,46,30,2.5,111.05,1.7,63.75 +3702,46,30,2.5,111.05,1.7,63.75 +3703,46,30,2.5,111.05,1.7,63.75 +3704,46,30,2.5,111.05,1.7,63.75 +3705,46,30,2.5,111.05,1.7,63.75 +3706,46,30,2.5,111.05,1.7,63.75 +3707,46,30,2.5,111.05,1.7,63.75 +3708,46,30,2.5,111.05,1.7,63.75 +3709,46,30,2.5,111.05,1.7,63.75 +3710,46,30,2.5,111.05,1.7,63.75 +3711,46,30,2.5,111.05,1.7,63.75 +3712,46,30,2.5,111.05,1.7,63.75 +3713,46,30,2.5,111.05,1.7,63.75 +3714,46,30,2.5,111.05,1.7,63.75 +3715,46,30,2.5,111.05,1.7,63.75 +3716,46,30,2.5,111.05,1.7,63.75 +3717,46,30,2.5,111.05,1.7,63.75 +3718,46,30,2.5,111.05,1.7,63.75 +3719,46,30,2.5,111.05,1.7,63.75 +3720,46,30,2.5,111.05,1.7,63.75 +3721,46,30,2.5,111.05,1.7,63.75 +3722,46,30,2.5,111.05,1.7,63.75 +3723,46,30,2.5,111.05,1.7,63.75 +3724,46,30,2.5,111.05,1.7,63.75 +3725,46,30,2.5,111.05,1.7,63.75 +3726,46,30,2.5,111.05,1.7,63.75 +3727,46,30,2.5,111.05,1.7,63.75 +3728,46,30,2.5,111.05,1.7,63.75 +3729,46,30,2.5,111.05,1.7,63.75 +3730,46,30,2.5,111.05,1.7,63.75 +3731,46,30,2.5,111.05,1.7,63.75 +3732,46,30,2.5,111.05,1.7,63.75 +3733,46,30,2.5,111.05,1.7,63.75 +3734,46,30,2.5,111.05,1.7,63.75 +3735,46,30,2.5,111.05,1.7,63.75 +3736,46,30,2.5,111.05,1.7,63.75 +3737,46,30,2.5,111.05,1.7,63.75 +3738,46,30,2.5,111.05,1.7,63.75 +3739,46,30,2.5,111.05,1.7,63.75 +3740,46,30,2.5,111.05,1.7,63.75 +3741,46,30,2.5,111.05,1.7,63.75 +3742,46,30,2.5,111.05,1.7,63.75 +3743,46,30,2.5,111.05,1.7,63.75 +3744,46,30,2.5,111.05,1.7,63.75 +3745,46,30,2.5,111.05,1.7,63.75 +3746,46,30,2.5,111.05,1.7,63.75 +3747,46,30,2.5,111.05,1.7,63.75 +3748,46,30,2.5,111.05,1.7,63.75 +3749,46,30,2.5,111.05,1.7,63.75 +3750,46,30,2.5,111.05,1.7,63.75 +3751,46,30,2.5,111.05,1.7,63.75 +3752,46,30,2.5,111.05,1.7,63.75 +3753,46,30,2.5,111.05,1.7,63.75 +3754,46,30,2.5,111.05,1.7,63.75 +3755,46,30,2.5,111.05,1.7,63.75 +3756,46,30,2.5,111.05,1.7,63.75 +3757,46,30,2.5,111.05,1.7,63.75 +3758,46,30,2.5,111.05,1.7,63.75 +3759,46,30,2.5,111.05,1.7,63.75 +3760,46,30,2.5,111.05,1.7,63.75 +3761,46,30,2.5,111.05,1.7,63.75 +3762,46,30,2.5,111.05,1.7,63.75 +3763,46,30,2.5,111.05,1.7,63.75 +3764,46,30,2.5,111.05,1.7,63.75 +3765,46,30,2.5,111.05,1.7,63.75 +3766,46,30,2.5,111.05,1.7,63.75 +3767,46,30,2.5,111.05,1.7,63.75 +3768,46,30,2.5,111.05,1.7,63.75 +3769,46,30,2.5,111.05,1.7,63.75 +3770,46,30,2.5,111.05,1.7,63.75 +3771,46,30,2.5,111.05,1.7,63.75 +3772,46,30,2.5,111.05,1.7,63.75 +3773,46,30,2.5,111.05,1.7,63.75 +3774,46,30,2.5,111.05,1.7,63.75 +3775,46,30,2.5,111.05,1.7,63.75 +3776,46,30,2.5,111.05,1.7,63.75 +3777,46,30,2.5,111.05,1.7,63.75 +3778,46,30,2.5,111.05,1.7,63.75 +3779,46,30,2.5,111.05,1.7,63.75 +3780,46,30,2.5,111.05,1.7,63.75 +3781,46,30,2.5,111.05,1.7,63.75 +3782,46,30,2.5,111.05,1.7,63.75 +3783,46,30,2.5,111.05,1.7,63.75 +3784,46,30,2.5,111.05,1.7,63.75 +3785,46,30,2.5,111.05,1.7,63.75 +3786,46,30,2.5,111.05,1.7,63.75 +3787,46,30,2.5,111.05,1.7,63.75 +3788,46,30,2.5,111.05,1.7,63.75 +3789,46,30,2.5,111.05,1.7,63.75 +3790,46,30,2.5,111.05,1.7,63.75 +3791,46,30,2.5,111.05,1.7,63.75 +3792,46,30,2.5,111.05,1.7,63.75 +3793,46,30,2.5,111.05,1.7,63.75 +3794,46,30,2.5,111.05,1.7,63.75 +3795,46,30,2.5,111.05,1.7,63.75 +3796,46,30,2.5,111.05,1.7,63.75 +3797,46,30,2.5,111.05,1.7,63.75 +3798,46,30,2.5,111.05,1.7,63.75 +3799,46,30,2.5,111.05,1.7,63.75 +3800,46,30,2.5,111.05,1.7,63.75 +3801,46,30,2.5,111.05,1.7,63.75 +3802,46,30,2.5,111.05,1.7,63.75 +3803,46,30,2.5,111.05,1.7,63.75 +3804,46,30,2.5,111.05,1.7,63.75 +3805,46,30,2.5,111.05,1.7,63.75 +3806,46,30,2.5,111.05,1.7,63.75 +3807,46,30,2.5,111.05,1.7,63.75 +3808,46,30,2.5,111.05,1.7,63.75 +3809,46,30,2.5,111.05,1.7,63.75 +3810,46,30,2.5,111.05,1.7,63.75 +3811,46,30,2.5,111.05,1.7,63.75 +3812,46,30,2.5,111.05,1.7,63.75 +3813,46,30,2.5,111.05,1.7,63.75 +3814,46,30,2.5,111.05,1.7,63.75 +3815,46,30,2.5,111.05,1.7,63.75 +3816,46,30,2.5,111.05,1.7,63.75 +3817,46,30,2.5,111.05,1.7,63.75 +3818,46,30,2.5,111.05,1.7,63.75 +3819,46,30,2.5,111.05,1.7,63.75 +3820,46,30,2.5,111.05,1.7,63.75 +3821,46,30,2.5,111.05,1.7,63.75 +3822,46,30,2.5,111.05,1.7,63.75 +3823,46,30,2.5,111.05,1.7,63.75 +3824,46,30,2.5,111.05,1.7,63.75 +3825,46,30,2.5,111.05,1.7,63.75 +3826,46,30,2.5,111.05,1.7,63.75 +3827,46,30,2.5,111.05,1.7,63.75 +3828,46,30,2.5,111.05,1.7,63.75 +3829,46,30,2.5,111.05,1.7,63.75 +3830,46,30,2.5,111.05,1.7,63.75 +3831,46,30,2.5,111.05,1.7,63.75 +3832,46,30,2.5,111.05,1.7,63.75 +3833,46,30,2.5,111.05,1.7,63.75 +3834,46,30,2.5,111.05,1.7,63.75 +3835,46,30,2.5,111.05,1.7,63.75 +3836,46,30,2.5,111.05,1.7,63.75 +3837,46,30,2.5,111.05,1.7,63.75 +3838,46,30,2.5,111.05,1.7,63.75 +3839,46,30,2.5,111.05,1.7,63.75 +3840,46,30,2.5,111.05,1.7,63.75 +3841,46,30,2.5,111.05,1.7,63.75 +3842,46,30,2.5,111.05,1.7,63.75 +3843,46,30,2.5,111.05,1.7,63.75 +3844,46,30,2.5,111.05,1.7,63.75 +3845,46,30,2.5,111.05,1.7,63.75 +3846,46,30,2.5,111.05,1.7,63.75 +3847,46,30,2.5,111.05,1.7,63.75 +3848,46,30,2.5,111.05,1.7,63.75 +3849,46,30,2.5,111.05,1.7,63.75 +3850,46,30,2.5,111.05,1.7,63.75 +3851,46,30,2.5,111.05,1.7,63.75 +3852,46,30,2.5,111.05,1.7,63.75 +3853,46,30,2.5,111.05,1.7,63.75 +3854,46,30,2.5,111.05,1.7,63.75 +3855,46,30,2.5,111.05,1.7,63.75 +3856,46,30,2.5,111.05,1.7,63.75 +3857,46,30,2.5,111.05,1.7,63.75 +3858,46,30,2.5,111.05,1.7,63.75 +3859,46,30,2.5,111.05,1.7,63.75 +3860,46,30,2.5,111.05,1.7,63.75 +3861,46,30,2.5,111.05,1.7,63.75 +3862,46,30,2.5,111.05,1.7,63.75 +3863,46,30,2.5,111.05,1.7,63.75 +3864,46,30,2.5,111.05,1.7,63.75 +3865,46,30,2.5,111.05,1.7,63.75 +3866,46,30,2.5,111.05,1.7,63.75 +3867,46,30,2.5,111.05,1.7,63.75 +3868,46,30,2.5,111.05,1.7,63.75 +3869,46,30,2.5,111.05,1.7,63.75 +3870,46,30,2.5,111.05,1.7,63.75 +3871,46,30,2.5,111.05,1.7,63.75 +3872,46,30,2.5,111.05,1.7,63.75 +3873,46,30,2.5,111.05,1.7,63.75 +3874,46,30,2.5,111.05,1.7,63.75 +3875,46,30,2.5,111.05,1.7,63.75 +3876,46,30,2.5,111.05,1.7,63.75 +3877,46,30,2.5,111.05,1.7,63.75 +3878,46,30,2.5,111.05,1.7,63.75 +3879,46,30,2.5,111.05,1.7,63.75 +3880,46,30,2.5,111.05,1.7,63.75 +3881,46,30,2.5,111.05,1.7,63.75 +3882,46,30,2.5,111.05,1.7,63.75 +3883,46,30,2.5,111.05,1.7,63.75 +3884,46,30,2.5,111.05,1.7,63.75 +3885,46,30,2.5,111.05,1.7,63.75 +3886,46,30,2.5,111.05,1.7,63.75 +3887,46,30,2.5,111.05,1.7,63.75 +3888,46,30,2.5,111.05,1.7,63.75 +3889,46,30,2.5,111.05,1.7,63.75 +3890,46,30,2.5,111.05,1.7,63.75 +3891,46,30,2.5,111.05,1.7,63.75 +3892,46,30,2.5,111.05,1.7,63.75 +3893,46,30,2.5,111.05,1.7,63.75 +3894,46,30,2.5,111.05,1.7,63.75 +3895,46,30,2.5,111.05,1.7,63.75 +3896,46,30,2.5,111.05,1.7,63.75 +3897,46,30,2.5,111.05,1.7,63.75 +3898,46,30,2.5,111.05,1.7,63.75 +3899,46,30,2.5,111.05,1.7,63.75 +3900,46,30,2.5,111.05,1.7,63.75 +3901,46,30,2.5,111.05,1.7,63.75 +3902,46,30,2.5,111.05,1.7,63.75 +3903,46,30,2.5,111.05,1.7,63.75 +3904,46,30,2.5,111.05,1.7,63.75 +3905,46,30,2.5,111.05,1.7,63.75 +3906,46,30,2.5,111.05,1.7,63.75 +3907,46,30,2.5,111.05,1.7,63.75 +3908,46,30,2.5,111.05,1.7,63.75 +3909,46,30,2.5,111.05,1.7,63.75 +3910,46,30,2.5,111.05,1.7,63.75 +3911,46,30,2.5,111.05,1.7,63.75 +3912,46,30,2.5,111.05,1.7,63.75 +3913,46,30,2.5,111.05,1.7,63.75 +3914,46,30,2.5,111.05,1.7,63.75 +3915,46,30,2.5,111.05,1.7,63.75 +3916,46,30,2.5,111.05,1.7,63.75 +3917,46,30,2.5,111.05,1.7,63.75 +3918,46,30,2.5,111.05,1.7,63.75 +3919,46,30,2.5,111.05,1.7,63.75 +3920,46,30,2.5,111.05,1.7,63.75 +3921,46,30,2.5,111.05,1.7,63.75 +3922,46,30,2.5,111.05,1.7,63.75 +3923,46,30,2.5,111.05,1.7,63.75 +3924,46,30,2.5,111.05,1.7,63.75 +3925,46,30,2.5,111.05,1.7,63.75 +3926,46,30,2.5,111.05,1.7,63.75 +3927,46,30,2.5,111.05,1.7,63.75 +3928,46,30,2.5,111.05,1.7,63.75 +3929,46,30,2.5,111.05,1.7,63.75 +3930,46,30,2.5,111.05,1.7,63.75 +3931,46,30,2.5,111.05,1.7,63.75 +3932,46,30,2.5,111.05,1.7,63.75 +3933,46,30,2.5,111.05,1.7,63.75 +3934,46,30,2.5,111.05,1.7,63.75 +3935,46,30,2.5,111.05,1.7,63.75 +3936,46,30,2.5,111.05,1.7,63.75 +3937,46,30,2.5,111.05,1.7,63.75 +3938,46,30,2.5,111.05,1.7,63.75 +3939,46,30,2.5,111.05,1.7,63.75 +3940,46,30,2.5,111.05,1.7,63.75 +3941,46,30,2.5,111.05,1.7,63.75 +3942,46,30,2.5,111.05,1.7,63.75 +3943,46,30,2.5,111.05,1.7,63.75 +3944,46,30,2.5,111.05,1.7,63.75 +3945,46,30,2.5,111.05,1.7,63.75 +3946,46,30,2.5,111.05,1.7,63.75 +3947,46,30,2.5,111.05,1.7,63.75 +3948,46,30,2.5,111.05,1.7,63.75 +3949,46,30,2.5,111.05,1.7,63.75 +3950,46,30,2.5,111.05,1.7,63.75 +3951,46,30,2.5,111.05,1.7,63.75 +3952,46,30,2.5,111.05,1.7,63.75 +3953,46,30,2.5,111.05,1.7,63.75 +3954,46,30,2.5,111.05,1.7,63.75 +3955,46,30,2.5,111.05,1.7,63.75 +3956,46,30,2.5,111.05,1.7,63.75 +3957,46,30,2.5,111.05,1.7,63.75 +3958,46,30,2.5,111.05,1.7,63.75 +3959,46,30,2.5,111.05,1.7,63.75 +3960,46,30,2.5,111.05,1.7,63.75 +3961,46,30,2.5,111.05,1.7,63.75 +3962,46,30,2.5,111.05,1.7,63.75 +3963,46,30,2.5,111.05,1.7,63.75 +3964,46,30,2.5,111.05,1.7,63.75 +3965,46,30,2.5,111.05,1.7,63.75 +3966,46,30,2.5,111.05,1.7,63.75 +3967,46,30,2.5,111.05,1.7,63.75 +3968,46,30,2.5,111.05,1.7,63.75 +3969,46,30,2.5,111.05,1.7,63.75 +3970,46,30,2.5,111.05,1.7,63.75 +3971,46,30,2.5,111.05,1.7,63.75 +3972,46,30,2.5,111.05,1.7,63.75 +3973,46,30,2.5,111.05,1.7,63.75 +3974,46,30,2.5,111.05,1.7,63.75 +3975,46,30,2.5,111.05,1.7,63.75 +3976,46,30,2.5,111.05,1.7,63.75 +3977,46,30,2.5,111.05,1.7,63.75 +3978,46,30,2.5,111.05,1.7,63.75 +3979,46,30,2.5,111.05,1.7,63.75 +3980,46,30,2.5,111.05,1.7,63.75 +3981,46,30,2.5,111.05,1.7,63.75 +3982,46,30,2.5,111.05,1.7,63.75 +3983,46,30,2.5,111.05,1.7,63.75 +3984,46,30,2.5,111.05,1.7,63.75 +3985,46,30,2.5,111.05,1.7,63.75 +3986,46,30,2.5,111.05,1.7,63.75 +3987,46,30,2.5,111.05,1.7,63.75 +3988,46,30,2.5,111.05,1.7,63.75 +3989,46,30,2.5,111.05,1.7,63.75 +3990,46,30,2.5,111.05,1.7,63.75 +3991,46,30,2.5,111.05,1.7,63.75 +3992,46,30,2.5,111.05,1.7,63.75 +3993,46,30,2.5,111.05,1.7,63.75 +3994,46,30,2.5,111.05,1.7,63.75 +3995,46,30,2.5,111.05,1.7,63.75 +3996,46,30,2.5,111.05,1.7,63.75 +3997,46,30,2.5,111.05,1.7,63.75 +3998,46,30,2.5,111.05,1.7,63.75 +3999,46,30,2.5,111.05,1.7,63.75 +4000,46,30,2.5,111.05,1.7,63.75 +4001,46,30,2.5,111.05,1.7,63.75 +4002,46,30,2.5,111.05,1.7,63.75 +4003,46,30,2.5,111.05,1.7,63.75 +4004,46,30,2.5,111.05,1.7,63.75 +4005,46,30,2.5,111.05,1.7,63.75 +4006,46,30,2.5,111.05,1.7,63.75 +4007,46,30,2.5,111.05,1.7,63.75 +4008,46,30,2.5,111.05,1.7,63.75 +4009,46,30,2.5,111.05,1.7,63.75 +4010,46,30,2.5,111.05,1.7,63.75 +4011,46,30,2.5,111.05,1.7,63.75 +4012,46,30,2.5,111.05,1.7,63.75 +4013,46,30,2.5,111.05,1.7,63.75 +4014,46,30,2.5,111.05,1.7,63.75 +4015,46,30,2.5,111.05,1.7,63.75 +4016,46,30,2.5,111.05,1.7,63.75 +4017,46,30,2.5,111.05,1.7,63.75 +4018,46,30,2.5,111.05,1.7,63.75 +4019,46,30,2.5,111.05,1.7,63.75 +4020,46,30,2.5,111.05,1.7,63.75 +4021,46,30,2.5,111.05,1.7,63.75 +4022,46,30,2.5,111.05,1.7,63.75 +4023,46,30,2.5,111.05,1.7,63.75 +4024,46,30,2.5,111.05,1.7,63.75 +4025,46,30,2.5,111.05,1.7,63.75 +4026,46,30,2.5,111.05,1.7,63.75 +4027,46,30,2.5,111.05,1.7,63.75 +4028,46,30,2.5,111.05,1.7,63.75 +4029,46,30,2.5,111.05,1.7,63.75 +4030,46,30,2.5,111.05,1.7,63.75 +4031,46,30,2.5,111.05,1.7,63.75 +4032,46,30,2.5,111.05,1.7,63.75 +4033,46,30,2.5,111.05,1.7,63.75 +4034,46,30,2.5,111.05,1.7,63.75 +4035,46,30,2.5,111.05,1.7,63.75 +4036,46,30,2.5,111.05,1.7,63.75 +4037,46,30,2.5,111.05,1.7,63.75 +4038,46,30,2.5,111.05,1.7,63.75 +4039,46,30,2.5,111.05,1.7,63.75 +4040,46,30,2.5,111.05,1.7,63.75 +4041,46,30,2.5,111.05,1.7,63.75 +4042,46,30,2.5,111.05,1.7,63.75 +4043,46,30,2.5,111.05,1.7,63.75 +4044,46,30,2.5,111.05,1.7,63.75 +4045,46,30,2.5,111.05,1.7,63.75 +4046,46,30,2.5,111.05,1.7,63.75 +4047,46,30,2.5,111.05,1.7,63.75 +4048,46,30,2.5,111.05,1.7,63.75 +4049,46,30,2.5,111.05,1.7,63.75 +4050,46,30,2.5,111.05,1.7,63.75 +4051,46,30,2.5,111.05,1.7,63.75 +4052,46,30,2.5,111.05,1.7,63.75 +4053,46,30,2.5,111.05,1.7,63.75 +4054,46,30,2.5,111.05,1.7,63.75 +4055,46,30,2.5,111.05,1.7,63.75 +4056,46,30,2.5,111.05,1.7,63.75 +4057,46,30,2.5,111.05,1.7,63.75 +4058,46,30,2.5,111.05,1.7,63.75 +4059,46,30,2.5,111.05,1.7,63.75 +4060,46,30,2.5,111.05,1.7,63.75 +4061,46,30,2.5,111.05,1.7,63.75 +4062,46,30,2.5,111.05,1.7,63.75 +4063,46,30,2.5,111.05,1.7,63.75 +4064,46,30,2.5,111.05,1.7,63.75 +4065,46,30,2.5,111.05,1.7,63.75 +4066,46,30,2.5,111.05,1.7,63.75 +4067,46,30,2.5,111.05,1.7,63.75 +4068,46,30,2.5,111.05,1.7,63.75 +4069,46,30,2.5,111.05,1.7,63.75 +4070,46,30,2.5,111.05,1.7,63.75 +4071,46,30,2.5,111.05,1.7,63.75 +4072,46,30,2.5,111.05,1.7,63.75 +4073,46,30,2.5,111.05,1.7,63.75 +4074,46,30,2.5,111.05,1.7,63.75 +4075,46,30,2.5,111.05,1.7,63.75 +4076,46,30,2.5,111.05,1.7,63.75 +4077,46,30,2.5,111.05,1.7,63.75 +4078,46,30,2.5,111.05,1.7,63.75 +4079,46,30,2.5,111.05,1.7,63.75 +4080,46,30,2.5,111.05,1.7,63.75 +4081,46,30,2.5,111.05,1.7,63.75 +4082,46,30,2.5,111.05,1.7,63.75 +4083,46,30,2.5,111.05,1.7,63.75 +4084,46,30,2.5,111.05,1.7,63.75 +4085,46,30,2.5,111.05,1.7,63.75 +4086,46,30,2.5,111.05,1.7,63.75 +4087,46,30,2.5,111.05,1.7,63.75 +4088,46,30,2.5,111.05,1.7,63.75 +4089,46,30,2.5,111.05,1.7,63.75 +4090,46,30,2.5,111.05,1.7,63.75 +4091,46,30,2.5,111.05,1.7,63.75 +4092,46,30,2.5,111.05,1.7,63.75 +4093,46,30,2.5,111.05,1.7,63.75 +4094,46,30,2.5,111.05,1.7,63.75 +4095,46,30,2.5,111.05,1.7,63.75 +4096,46,30,2.5,111.05,1.7,63.75 +4097,46,30,2.5,111.05,1.7,63.75 +4098,46,30,2.5,111.05,1.7,63.75 +4099,46,30,2.5,111.05,1.7,63.75 +4100,46,30,2.5,111.05,1.7,63.75 +4101,46,30,2.5,111.05,1.7,63.75 +4102,46,30,2.5,111.05,1.7,63.75 +4103,46,30,2.5,111.05,1.7,63.75 +4104,46,30,2.5,111.05,1.7,63.75 +4105,46,30,2.5,111.05,1.7,63.75 +4106,46,30,2.5,111.05,1.7,63.75 +4107,46,30,2.5,111.05,1.7,63.75 +4108,46,30,2.5,111.05,1.7,63.75 +4109,46,30,2.5,111.05,1.7,63.75 +4110,46,30,2.5,111.05,1.7,63.75 +4111,46,30,2.5,111.05,1.7,63.75 +4112,46,30,2.5,111.05,1.7,63.75 +4113,46,30,2.5,111.05,1.7,63.75 +4114,46,30,2.5,111.05,1.7,63.75 +4115,46,30,2.5,111.05,1.7,63.75 +4116,46,30,2.5,111.05,1.7,63.75 +4117,46,30,2.5,111.05,1.7,63.75 +4118,46,30,2.5,111.05,1.7,63.75 +4119,46,30,2.5,111.05,1.7,63.75 +4120,46,30,2.5,111.05,1.7,63.75 +4121,46,30,2.5,111.05,1.7,63.75 +4122,46,30,2.5,111.05,1.7,63.75 +4123,46,30,2.5,111.05,1.7,63.75 +4124,46,30,2.5,111.05,1.7,63.75 +4125,46,30,2.5,111.05,1.7,63.75 +4126,46,30,2.5,111.05,1.7,63.75 +4127,46,30,2.5,111.05,1.7,63.75 +4128,46,30,2.5,111.05,1.7,63.75 +4129,46,30,2.5,111.05,1.7,63.75 +4130,46,30,2.5,111.05,1.7,63.75 +4131,46,30,2.5,111.05,1.7,63.75 +4132,46,30,2.5,111.05,1.7,63.75 +4133,46,30,2.5,111.05,1.7,63.75 +4134,46,30,2.5,111.05,1.7,63.75 +4135,46,30,2.5,111.05,1.7,63.75 +4136,46,30,2.5,111.05,1.7,63.75 +4137,46,30,2.5,111.05,1.7,63.75 +4138,46,30,2.5,111.05,1.7,63.75 +4139,46,30,2.5,111.05,1.7,63.75 +4140,46,30,2.5,111.05,1.7,63.75 +4141,46,30,2.5,111.05,1.7,63.75 +4142,46,30,2.5,111.05,1.7,63.75 +4143,46,30,2.5,111.05,1.7,63.75 +4144,46,30,2.5,111.05,1.7,63.75 +4145,46,30,2.5,111.05,1.7,63.75 +4146,46,30,2.5,111.05,1.7,63.75 +4147,46,30,2.5,111.05,1.7,63.75 +4148,46,30,2.5,111.05,1.7,63.75 +4149,46,30,2.5,111.05,1.7,63.75 +4150,46,30,2.5,111.05,1.7,63.75 +4151,46,30,2.5,111.05,1.7,63.75 +4152,46,30,2.5,111.05,1.7,63.75 +4153,46,30,2.5,111.05,1.7,63.75 +4154,46,30,2.5,111.05,1.7,63.75 +4155,46,30,2.5,111.05,1.7,63.75 +4156,46,30,2.5,111.05,1.7,63.75 +4157,46,30,2.5,111.05,1.7,63.75 +4158,46,30,2.5,111.05,1.7,63.75 +4159,46,30,2.5,111.05,1.7,63.75 +4160,46,30,2.5,111.05,1.7,63.75 +4161,46,30,2.5,111.05,1.7,63.75 +4162,46,30,2.5,111.05,1.7,63.75 +4163,46,30,2.5,111.05,1.7,63.75 +4164,46,30,2.5,111.05,1.7,63.75 +4165,46,30,2.5,111.05,1.7,63.75 +4166,46,30,2.5,111.05,1.7,63.75 +4167,46,30,2.5,111.05,1.7,63.75 +4168,46,30,2.5,111.05,1.7,63.75 +4169,46,30,2.5,111.05,1.7,63.75 +4170,46,30,2.5,111.05,1.7,63.75 +4171,46,30,2.5,111.05,1.7,63.75 +4172,46,30,2.5,111.05,1.7,63.75 +4173,46,30,2.5,111.05,1.7,63.75 +4174,46,30,2.5,111.05,1.7,63.75 +4175,46,30,2.5,111.05,1.7,63.75 +4176,46,30,2.5,111.05,1.7,63.75 +4177,46,30,2.5,111.05,1.7,63.75 +4178,46,30,2.5,111.05,1.7,63.75 +4179,46,30,2.5,111.05,1.7,63.75 +4180,46,30,2.5,111.05,1.7,63.75 +4181,46,30,2.5,111.05,1.7,63.75 +4182,46,30,2.5,111.05,1.7,63.75 +4183,46,30,2.5,111.05,1.7,63.75 +4184,46,30,2.5,111.05,1.7,63.75 +4185,46,30,2.5,111.05,1.7,63.75 +4186,46,30,2.5,111.05,1.7,63.75 +4187,46,30,2.5,111.05,1.7,63.75 +4188,46,30,2.5,111.05,1.7,63.75 +4189,46,30,2.5,111.05,1.7,63.75 +4190,46,30,2.5,111.05,1.7,63.75 +4191,46,30,2.5,111.05,1.7,63.75 +4192,46,30,2.5,111.05,1.7,63.75 +4193,46,30,2.5,111.05,1.7,63.75 +4194,46,30,2.5,111.05,1.7,63.75 +4195,46,30,2.5,111.05,1.7,63.75 +4196,46,30,2.5,111.05,1.7,63.75 +4197,46,30,2.5,111.05,1.7,63.75 +4198,46,30,2.5,111.05,1.7,63.75 +4199,46,30,2.5,111.05,1.7,63.75 +4200,46,30,2.5,111.05,1.7,63.75 +4201,46,30,2.5,111.05,1.7,63.75 +4202,46,30,2.5,111.05,1.7,63.75 +4203,46,30,2.5,111.05,1.7,63.75 +4204,46,30,2.5,111.05,1.7,63.75 +4205,46,30,2.5,111.05,1.7,63.75 +4206,46,30,2.5,111.05,1.7,63.75 +4207,46,30,2.5,111.05,1.7,63.75 +4208,46,30,2.5,111.05,1.7,63.75 +4209,46,30,2.5,111.05,1.7,63.75 +4210,46,30,2.5,111.05,1.7,63.75 +4211,46,30,2.5,111.05,1.7,63.75 +4212,46,30,2.5,111.05,1.7,63.75 +4213,46,30,2.5,111.05,1.7,63.75 +4214,46,30,2.5,111.05,1.7,63.75 +4215,46,30,2.5,111.05,1.7,63.75 +4216,46,30,2.5,111.05,1.7,63.75 +4217,46,30,2.5,111.05,1.7,63.75 +4218,46,30,2.5,111.05,1.7,63.75 +4219,46,30,2.5,111.05,1.7,63.75 +4220,46,30,2.5,111.05,1.7,63.75 +4221,46,30,2.5,111.05,1.7,63.75 +4222,46,30,2.5,111.05,1.7,63.75 +4223,46,30,2.5,111.05,1.7,63.75 +4224,46,30,2.5,111.05,1.7,63.75 +4225,46,30,2.5,111.05,1.7,63.75 +4226,46,30,2.5,111.05,1.7,63.75 +4227,46,30,2.5,111.05,1.7,63.75 +4228,46,30,2.5,111.05,1.7,63.75 +4229,46,30,2.5,111.05,1.7,63.75 +4230,46,30,2.5,111.05,1.7,63.75 +4231,46,30,2.5,111.05,1.7,63.75 +4232,46,30,2.5,111.05,1.7,63.75 +4233,46,30,2.5,111.05,1.7,63.75 +4234,46,30,2.5,111.05,1.7,63.75 +4235,46,30,2.5,111.05,1.7,63.75 +4236,46,30,2.5,111.05,1.7,63.75 +4237,46,30,2.5,111.05,1.7,63.75 +4238,46,30,2.5,111.05,1.7,63.75 +4239,46,30,2.5,111.05,1.7,63.75 +4240,46,30,2.5,111.05,1.7,63.75 +4241,46,30,2.5,111.05,1.7,63.75 +4242,46,30,2.5,111.05,1.7,63.75 +4243,46,30,2.5,111.05,1.7,63.75 +4244,46,30,2.5,111.05,1.7,63.75 +4245,46,30,2.5,111.05,1.7,63.75 +4246,46,30,2.5,111.05,1.7,63.75 +4247,46,30,2.5,111.05,1.7,63.75 +4248,46,30,2.5,111.05,1.7,63.75 +4249,46,30,2.5,111.05,1.7,63.75 +4250,46,30,2.5,111.05,1.7,63.75 +4251,46,30,2.5,111.05,1.7,63.75 +4252,46,30,2.5,111.05,1.7,63.75 +4253,46,30,2.5,111.05,1.7,63.75 +4254,46,30,2.5,111.05,1.7,63.75 +4255,46,30,2.5,111.05,1.7,63.75 +4256,46,30,2.5,111.05,1.7,63.75 +4257,46,30,2.5,111.05,1.7,63.75 +4258,46,30,2.5,111.05,1.7,63.75 +4259,46,30,2.5,111.05,1.7,63.75 +4260,46,30,2.5,111.05,1.7,63.75 +4261,46,30,2.5,111.05,1.7,63.75 +4262,46,30,2.5,111.05,1.7,63.75 +4263,46,30,2.5,111.05,1.7,63.75 +4264,46,30,2.5,111.05,1.7,63.75 +4265,46,30,2.5,111.05,1.7,63.75 +4266,46,30,2.5,111.05,1.7,63.75 +4267,46,30,2.5,111.05,1.7,63.75 +4268,46,30,2.5,111.05,1.7,63.75 +4269,46,30,2.5,111.05,1.7,63.75 +4270,46,30,2.5,111.05,1.7,63.75 +4271,46,30,2.5,111.05,1.7,63.75 +4272,46,30,2.5,111.05,1.7,63.75 +4273,46,30,2.5,111.05,1.7,63.75 +4274,46,30,2.5,111.05,1.7,63.75 +4275,46,30,2.5,111.05,1.7,63.75 +4276,46,30,2.5,111.05,1.7,63.75 +4277,46,30,2.5,111.05,1.7,63.75 +4278,46,30,2.5,111.05,1.7,63.75 +4279,46,30,2.5,111.05,1.7,63.75 +4280,46,30,2.5,111.05,1.7,63.75 +4281,46,30,2.5,111.05,1.7,63.75 +4282,46,30,2.5,111.05,1.7,63.75 +4283,46,30,2.5,111.05,1.7,63.75 +4284,46,30,2.5,111.05,1.7,63.75 +4285,46,30,2.5,111.05,1.7,63.75 +4286,46,30,2.5,111.05,1.7,63.75 +4287,46,30,2.5,111.05,1.7,63.75 +4288,46,30,2.5,111.05,1.7,63.75 +4289,46,30,2.5,111.05,1.7,63.75 +4290,46,30,2.5,111.05,1.7,63.75 +4291,46,30,2.5,111.05,1.7,63.75 +4292,46,30,2.5,111.05,1.7,63.75 +4293,46,30,2.5,111.05,1.7,63.75 +4294,46,30,2.5,111.05,1.7,63.75 +4295,46,30,2.5,111.05,1.7,63.75 +4296,46,30,2.5,111.05,1.7,63.75 +4297,46,30,2.5,111.05,1.7,63.75 +4298,46,30,2.5,111.05,1.7,63.75 +4299,46,30,2.5,111.05,1.7,63.75 +4300,46,30,2.5,111.05,1.7,63.75 +4301,46,30,2.5,111.05,1.7,63.75 +4302,46,30,2.5,111.05,1.7,63.75 +4303,46,30,2.5,111.05,1.7,63.75 +4304,46,30,2.5,111.05,1.7,63.75 +4305,46,30,2.5,111.05,1.7,63.75 +4306,46,30,2.5,111.05,1.7,63.75 +4307,46,30,2.5,111.05,1.7,63.75 +4308,46,30,2.5,111.05,1.7,63.75 +4309,46,30,2.5,111.05,1.7,63.75 +4310,46,30,2.5,111.05,1.7,63.75 +4311,46,30,2.5,111.05,1.7,63.75 +4312,46,30,2.5,111.05,1.7,63.75 +4313,46,30,2.5,111.05,1.7,63.75 +4314,46,30,2.5,111.05,1.7,63.75 +4315,46,30,2.5,111.05,1.7,63.75 +4316,46,30,2.5,111.05,1.7,63.75 +4317,46,30,2.5,111.05,1.7,63.75 +4318,46,30,2.5,111.05,1.7,63.75 +4319,46,30,2.5,111.05,1.7,63.75 +4320,46,30,2.5,111.05,1.7,63.75 +4321,46,30,2.5,111.05,1.7,63.75 +4322,46,30,2.5,111.05,1.7,63.75 +4323,46,30,2.5,111.05,1.7,63.75 +4324,46,30,2.5,111.05,1.7,63.75 +4325,46,30,2.5,111.05,1.7,63.75 +4326,46,30,2.5,111.05,1.7,63.75 +4327,46,30,2.5,111.05,1.7,63.75 +4328,46,30,2.5,111.05,1.7,63.75 +4329,46,30,2.5,111.05,1.7,63.75 +4330,46,30,2.5,111.05,1.7,63.75 +4331,46,30,2.5,111.05,1.7,63.75 +4332,46,30,2.5,111.05,1.7,63.75 +4333,46,30,2.5,111.05,1.7,63.75 +4334,46,30,2.5,111.05,1.7,63.75 +4335,46,30,2.5,111.05,1.7,63.75 +4336,46,30,2.5,111.05,1.7,63.75 +4337,46,30,2.5,111.05,1.7,63.75 +4338,46,30,2.5,111.05,1.7,63.75 +4339,46,30,2.5,111.05,1.7,63.75 +4340,46,30,2.5,111.05,1.7,63.75 +4341,46,30,2.5,111.05,1.7,63.75 +4342,46,30,2.5,111.05,1.7,63.75 +4343,46,30,2.5,111.05,1.7,63.75 +4344,46,30,2.5,111.05,1.7,63.75 +4345,46,30,2.5,111.05,1.7,63.75 +4346,46,30,2.5,111.05,1.7,63.75 +4347,46,30,2.5,111.05,1.7,63.75 +4348,46,30,2.5,111.05,1.7,63.75 +4349,46,30,2.5,111.05,1.7,63.75 +4350,46,30,2.5,111.05,1.7,63.75 +4351,46,30,2.5,111.05,1.7,63.75 +4352,46,30,2.5,111.05,1.7,63.75 +4353,46,30,2.5,111.05,1.7,63.75 +4354,46,30,2.5,111.05,1.7,63.75 +4355,46,30,2.5,111.05,1.7,63.75 +4356,46,30,2.5,111.05,1.7,63.75 +4357,46,30,2.5,111.05,1.7,63.75 +4358,46,30,2.5,111.05,1.7,63.75 +4359,46,30,2.5,111.05,1.7,63.75 +4360,46,30,2.5,111.05,1.7,63.75 +4361,46,30,2.5,111.05,1.7,63.75 +4362,46,30,2.5,111.05,1.7,63.75 +4363,46,30,2.5,111.05,1.7,63.75 +4364,46,30,2.5,111.05,1.7,63.75 +4365,46,30,2.5,111.05,1.7,63.75 +4366,46,30,2.5,111.05,1.7,63.75 +4367,46,30,2.5,111.05,1.7,63.75 +4368,46,30,2.5,111.05,1.7,63.75 +4369,46,30,2.5,111.05,1.7,63.75 +4370,46,30,2.5,111.05,1.7,63.75 +4371,46,30,2.5,111.05,1.7,63.75 +4372,46,30,2.5,111.05,1.7,63.75 +4373,46,30,2.5,111.05,1.7,63.75 +4374,46,30,2.5,111.05,1.7,63.75 +4375,46,30,2.5,111.05,1.7,63.75 +4376,46,30,2.5,111.05,1.7,63.75 +4377,46,30,2.5,111.05,1.7,63.75 +4378,46,30,2.5,111.05,1.7,63.75 +4379,46,30,2.5,111.05,1.7,63.75 +4380,46,30,2.5,111.05,1.7,63.75 +4381,46,30,2.5,111.05,1.7,63.75 +4382,46,30,2.5,111.05,1.7,63.75 +4383,46,30,2.5,111.05,1.7,63.75 +4384,46,30,2.5,111.05,1.7,63.75 +4385,46,30,2.5,111.05,1.7,63.75 +4386,46,30,2.5,111.05,1.7,63.75 +4387,46,30,2.5,111.05,1.7,63.75 +4388,46,30,2.5,111.05,1.7,63.75 +4389,46,30,2.5,111.05,1.7,63.75 +4390,46,30,2.5,111.05,1.7,63.75 +4391,46,30,2.5,111.05,1.7,63.75 +4392,46,30,2.5,111.05,1.7,63.75 +4393,46,30,2.5,111.05,1.7,63.75 +4394,46,30,2.5,111.05,1.7,63.75 +4395,46,30,2.5,111.05,1.7,63.75 +4396,46,30,2.5,111.05,1.7,63.75 +4397,46,30,2.5,111.05,1.7,63.75 +4398,46,30,2.5,111.05,1.7,63.75 +4399,46,30,2.5,111.05,1.7,63.75 +4400,46,30,2.5,111.05,1.7,63.75 +4401,46,30,2.5,111.05,1.7,63.75 +4402,46,30,2.5,111.05,1.7,63.75 +4403,46,30,2.5,111.05,1.7,63.75 +4404,46,30,2.5,111.05,1.7,63.75 +4405,46,30,2.5,111.05,1.7,63.75 +4406,46,30,2.5,111.05,1.7,63.75 +4407,46,30,2.5,111.05,1.7,63.75 +4408,46,30,2.5,111.05,1.7,63.75 +4409,46,30,2.5,111.05,1.7,63.75 +4410,46,30,2.5,111.05,1.7,63.75 +4411,46,30,2.5,111.05,1.7,63.75 +4412,46,30,2.5,111.05,1.7,63.75 +4413,46,30,2.5,111.05,1.7,63.75 +4414,46,30,2.5,111.05,1.7,63.75 +4415,46,30,2.5,111.05,1.7,63.75 +4416,46,30,2.5,111.05,1.7,63.75 +4417,46,30,2.5,111.05,1.7,63.75 +4418,46,30,2.5,111.05,1.7,63.75 +4419,46,30,2.5,111.05,1.7,63.75 +4420,46,30,2.5,111.05,1.7,63.75 +4421,46,30,2.5,111.05,1.7,63.75 +4422,46,30,2.5,111.05,1.7,63.75 +4423,46,30,2.5,111.05,1.7,63.75 +4424,46,30,2.5,111.05,1.7,63.75 +4425,46,30,2.5,111.05,1.7,63.75 +4426,46,30,2.5,111.05,1.7,63.75 +4427,46,30,2.5,111.05,1.7,63.75 +4428,46,30,2.5,111.05,1.7,63.75 +4429,46,30,2.5,111.05,1.7,63.75 +4430,46,30,2.5,111.05,1.7,63.75 +4431,46,30,2.5,111.05,1.7,63.75 +4432,46,30,2.5,111.05,1.7,63.75 +4433,46,30,2.5,111.05,1.7,63.75 +4434,46,30,2.5,111.05,1.7,63.75 +4435,46,30,2.5,111.05,1.7,63.75 +4436,46,30,2.5,111.05,1.7,63.75 +4437,46,30,2.5,111.05,1.7,63.75 +4438,46,30,2.5,111.05,1.7,63.75 +4439,46,30,2.5,111.05,1.7,63.75 +4440,46,30,2.5,111.05,1.7,63.75 +4441,46,30,2.5,111.05,1.7,63.75 +4442,46,30,2.5,111.05,1.7,63.75 +4443,46,30,2.5,111.05,1.7,63.75 +4444,46,30,2.5,111.05,1.7,63.75 +4445,46,30,2.5,111.05,1.7,63.75 +4446,46,30,2.5,111.05,1.7,63.75 +4447,46,30,2.5,111.05,1.7,63.75 +4448,46,30,2.5,111.05,1.7,63.75 +4449,46,30,2.5,111.05,1.7,63.75 +4450,46,30,2.5,111.05,1.7,63.75 +4451,46,30,2.5,111.05,1.7,63.75 +4452,46,30,2.5,111.05,1.7,63.75 +4453,46,30,2.5,111.05,1.7,63.75 +4454,46,30,2.5,111.05,1.7,63.75 +4455,46,30,2.5,111.05,1.7,63.75 +4456,46,30,2.5,111.05,1.7,63.75 +4457,46,30,2.5,111.05,1.7,63.75 +4458,46,30,2.5,111.05,1.7,63.75 +4459,46,30,2.5,111.05,1.7,63.75 +4460,46,30,2.5,111.05,1.7,63.75 +4461,46,30,2.5,111.05,1.7,63.75 +4462,46,30,2.5,111.05,1.7,63.75 +4463,46,30,2.5,111.05,1.7,63.75 +4464,46,30,2.5,111.05,1.7,63.75 +4465,46,30,2.5,111.05,1.7,63.75 +4466,46,30,2.5,111.05,1.7,63.75 +4467,46,30,2.5,111.05,1.7,63.75 +4468,46,30,2.5,111.05,1.7,63.75 +4469,46,30,2.5,111.05,1.7,63.75 +4470,46,30,2.5,111.05,1.7,63.75 +4471,46,30,2.5,111.05,1.7,63.75 +4472,46,30,2.5,111.05,1.7,63.75 +4473,46,30,2.5,111.05,1.7,63.75 +4474,46,30,2.5,111.05,1.7,63.75 +4475,46,30,2.5,111.05,1.7,63.75 +4476,46,30,2.5,111.05,1.7,63.75 +4477,46,30,2.5,111.05,1.7,63.75 +4478,46,30,2.5,111.05,1.7,63.75 +4479,46,30,2.5,111.05,1.7,63.75 +4480,46,30,2.5,111.05,1.7,63.75 +4481,46,30,2.5,111.05,1.7,63.75 +4482,46,30,2.5,111.05,1.7,63.75 +4483,46,30,2.5,111.05,1.7,63.75 +4484,46,30,2.5,111.05,1.7,63.75 +4485,46,30,2.5,111.05,1.7,63.75 +4486,46,30,2.5,111.05,1.7,63.75 +4487,46,30,2.5,111.05,1.7,63.75 +4488,46,30,2.5,111.05,1.7,63.75 +4489,46,30,2.5,111.05,1.7,63.75 +4490,46,30,2.5,111.05,1.7,63.75 +4491,46,30,2.5,111.05,1.7,63.75 +4492,46,30,2.5,111.05,1.7,63.75 +4493,46,30,2.5,111.05,1.7,63.75 +4494,46,30,2.5,111.05,1.7,63.75 +4495,46,30,2.5,111.05,1.7,63.75 +4496,46,30,2.5,111.05,1.7,63.75 +4497,46,30,2.5,111.05,1.7,63.75 +4498,46,30,2.5,111.05,1.7,63.75 +4499,46,30,2.5,111.05,1.7,63.75 +4500,46,30,2.5,111.05,1.7,63.75 +4501,46,30,2.5,111.05,1.7,63.75 +4502,46,30,2.5,111.05,1.7,63.75 +4503,46,30,2.5,111.05,1.7,63.75 +4504,46,30,2.5,111.05,1.7,63.75 +4505,46,30,2.5,111.05,1.7,63.75 +4506,46,30,2.5,111.05,1.7,63.75 +4507,46,30,2.5,111.05,1.7,63.75 +4508,46,30,2.5,111.05,1.7,63.75 +4509,46,30,2.5,111.05,1.7,63.75 +4510,46,30,2.5,111.05,1.7,63.75 +4511,46,30,2.5,111.05,1.7,63.75 +4512,46,30,2.5,111.05,1.7,63.75 +4513,46,30,2.5,111.05,1.7,63.75 +4514,46,30,2.5,111.05,1.7,63.75 +4515,46,30,2.5,111.05,1.7,63.75 +4516,46,30,2.5,111.05,1.7,63.75 +4517,46,30,2.5,111.05,1.7,63.75 +4518,46,30,2.5,111.05,1.7,63.75 +4519,46,30,2.5,111.05,1.7,63.75 +4520,46,30,2.5,111.05,1.7,63.75 +4521,46,30,2.5,111.05,1.7,63.75 +4522,46,30,2.5,111.05,1.7,63.75 +4523,46,30,2.5,111.05,1.7,63.75 +4524,46,30,2.5,111.05,1.7,63.75 +4525,46,30,2.5,111.05,1.7,63.75 +4526,46,30,2.5,111.05,1.7,63.75 +4527,46,30,2.5,111.05,1.7,63.75 +4528,46,30,2.5,111.05,1.7,63.75 +4529,46,30,2.5,111.05,1.7,63.75 +4530,46,30,2.5,111.05,1.7,63.75 +4531,46,30,2.5,111.05,1.7,63.75 +4532,46,30,2.5,111.05,1.7,63.75 +4533,46,30,2.5,111.05,1.7,63.75 +4534,46,30,2.5,111.05,1.7,63.75 +4535,46,30,2.5,111.05,1.7,63.75 +4536,46,30,2.5,111.05,1.7,63.75 +4537,46,30,2.5,111.05,1.7,63.75 +4538,46,30,2.5,111.05,1.7,63.75 +4539,46,30,2.5,111.05,1.7,63.75 +4540,46,30,2.5,111.05,1.7,63.75 +4541,46,30,2.5,111.05,1.7,63.75 +4542,46,30,2.5,111.05,1.7,63.75 +4543,46,30,2.5,111.05,1.7,63.75 +4544,46,30,2.5,111.05,1.7,63.75 +4545,46,30,2.5,111.05,1.7,63.75 +4546,46,30,2.5,111.05,1.7,63.75 +4547,46,30,2.5,111.05,1.7,63.75 +4548,46,30,2.5,111.05,1.7,63.75 +4549,46,30,2.5,111.05,1.7,63.75 +4550,46,30,2.5,111.05,1.7,63.75 +4551,46,30,2.5,111.05,1.7,63.75 +4552,46,30,2.5,111.05,1.7,63.75 +4553,46,30,2.5,111.05,1.7,63.75 +4554,46,30,2.5,111.05,1.7,63.75 +4555,46,30,2.5,111.05,1.7,63.75 +4556,46,30,2.5,111.05,1.7,63.75 +4557,46,30,2.5,111.05,1.7,63.75 +4558,46,30,2.5,111.05,1.7,63.75 +4559,46,30,2.5,111.05,1.7,63.75 +4560,46,30,2.5,111.05,1.7,63.75 +4561,46,30,2.5,111.05,1.7,63.75 +4562,46,30,2.5,111.05,1.7,63.75 +4563,46,30,2.5,111.05,1.7,63.75 +4564,46,30,2.5,111.05,1.7,63.75 +4565,46,30,2.5,111.05,1.7,63.75 +4566,46,30,2.5,111.05,1.7,63.75 +4567,46,30,2.5,111.05,1.7,63.75 +4568,46,30,2.5,111.05,1.7,63.75 +4569,46,30,2.5,111.05,1.7,63.75 +4570,46,30,2.5,111.05,1.7,63.75 +4571,46,30,2.5,111.05,1.7,63.75 +4572,46,30,2.5,111.05,1.7,63.75 +4573,46,30,2.5,111.05,1.7,63.75 +4574,46,30,2.5,111.05,1.7,63.75 +4575,46,30,2.5,111.05,1.7,63.75 +4576,46,30,2.5,111.05,1.7,63.75 +4577,46,30,2.5,111.05,1.7,63.75 +4578,46,30,2.5,111.05,1.7,63.75 +4579,46,30,2.5,111.05,1.7,63.75 +4580,46,30,2.5,111.05,1.7,63.75 +4581,46,30,2.5,111.05,1.7,63.75 +4582,46,30,2.5,111.05,1.7,63.75 +4583,46,30,2.5,111.05,1.7,63.75 +4584,46,30,2.5,111.05,1.7,63.75 +4585,46,30,2.5,111.05,1.7,63.75 +4586,46,30,2.5,111.05,1.7,63.75 +4587,46,30,2.5,111.05,1.7,63.75 +4588,46,30,2.5,111.05,1.7,63.75 +4589,46,30,2.5,111.05,1.7,63.75 +4590,46,30,2.5,111.05,1.7,63.75 +4591,46,30,2.5,111.05,1.7,63.75 +4592,46,30,2.5,111.05,1.7,63.75 +4593,46,30,2.5,111.05,1.7,63.75 +4594,46,30,2.5,111.05,1.7,63.75 +4595,46,30,2.5,111.05,1.7,63.75 +4596,46,30,2.5,111.05,1.7,63.75 +4597,46,30,2.5,111.05,1.7,63.75 +4598,46,30,2.5,111.05,1.7,63.75 +4599,46,30,2.5,111.05,1.7,63.75 +4600,46,30,2.5,111.05,1.7,63.75 +4601,46,30,2.5,111.05,1.7,63.75 +4602,46,30,2.5,111.05,1.7,63.75 +4603,46,30,2.5,111.05,1.7,63.75 +4604,46,30,2.5,111.05,1.7,63.75 +4605,46,30,2.5,111.05,1.7,63.75 +4606,46,30,2.5,111.05,1.7,63.75 +4607,46,30,2.5,111.05,1.7,63.75 +4608,46,30,2.5,111.05,1.7,63.75 +4609,46,30,2.5,111.05,1.7,63.75 +4610,46,30,2.5,111.05,1.7,63.75 +4611,46,30,2.5,111.05,1.7,63.75 +4612,46,30,2.5,111.05,1.7,63.75 +4613,46,30,2.5,111.05,1.7,63.75 +4614,46,30,2.5,111.05,1.7,63.75 +4615,46,30,2.5,111.05,1.7,63.75 +4616,46,30,2.5,111.05,1.7,63.75 +4617,46,30,2.5,111.05,1.7,63.75 +4618,46,30,2.5,111.05,1.7,63.75 +4619,46,30,2.5,111.05,1.7,63.75 +4620,46,30,2.5,111.05,1.7,63.75 +4621,46,30,2.5,111.05,1.7,63.75 +4622,46,30,2.5,111.05,1.7,63.75 +4623,46,30,2.5,111.05,1.7,63.75 +4624,46,30,2.5,111.05,1.7,63.75 +4625,46,30,2.5,111.05,1.7,63.75 +4626,46,30,2.5,111.05,1.7,63.75 +4627,46,30,2.5,111.05,1.7,63.75 +4628,46,30,2.5,111.05,1.7,63.75 +4629,46,30,2.5,111.05,1.7,63.75 +4630,46,30,2.5,111.05,1.7,63.75 +4631,46,30,2.5,111.05,1.7,63.75 +4632,46,30,2.5,111.05,1.7,63.75 +4633,46,30,2.5,111.05,1.7,63.75 +4634,46,30,2.5,111.05,1.7,63.75 +4635,46,30,2.5,111.05,1.7,63.75 +4636,46,30,2.5,111.05,1.7,63.75 +4637,46,30,2.5,111.05,1.7,63.75 +4638,46,30,2.5,111.05,1.7,63.75 +4639,46,30,2.5,111.05,1.7,63.75 +4640,46,30,2.5,111.05,1.7,63.75 +4641,46,30,2.5,111.05,1.7,63.75 +4642,46,30,2.5,111.05,1.7,63.75 +4643,46,30,2.5,111.05,1.7,63.75 +4644,46,30,2.5,111.05,1.7,63.75 +4645,46,30,2.5,111.05,1.7,63.75 +4646,46,30,2.5,111.05,1.7,63.75 +4647,46,30,2.5,111.05,1.7,63.75 +4648,46,30,2.5,111.05,1.7,63.75 +4649,46,30,2.5,111.05,1.7,63.75 +4650,46,30,2.5,111.05,1.7,63.75 +4651,46,30,2.5,111.05,1.7,63.75 +4652,46,30,2.5,111.05,1.7,63.75 +4653,46,30,2.5,111.05,1.7,63.75 +4654,46,30,2.5,111.05,1.7,63.75 +4655,46,30,2.5,111.05,1.7,63.75 +4656,46,30,2.5,111.05,1.7,63.75 +4657,46,30,2.5,111.05,1.7,63.75 +4658,46,30,2.5,111.05,1.7,63.75 +4659,46,30,2.5,111.05,1.7,63.75 +4660,46,30,2.5,111.05,1.7,63.75 +4661,46,30,2.5,111.05,1.7,63.75 +4662,46,30,2.5,111.05,1.7,63.75 +4663,46,30,2.5,111.05,1.7,63.75 +4664,46,30,2.5,111.05,1.7,63.75 +4665,46,30,2.5,111.05,1.7,63.75 +4666,46,30,2.5,111.05,1.7,63.75 +4667,46,30,2.5,111.05,1.7,63.75 +4668,46,30,2.5,111.05,1.7,63.75 +4669,46,30,2.5,111.05,1.7,63.75 +4670,46,30,2.5,111.05,1.7,63.75 +4671,46,30,2.5,111.05,1.7,63.75 +4672,46,30,2.5,111.05,1.7,63.75 +4673,46,30,2.5,111.05,1.7,63.75 +4674,46,30,2.5,111.05,1.7,63.75 +4675,46,30,2.5,111.05,1.7,63.75 +4676,46,30,2.5,111.05,1.7,63.75 +4677,46,30,2.5,111.05,1.7,63.75 +4678,46,30,2.5,111.05,1.7,63.75 +4679,46,30,2.5,111.05,1.7,63.75 +4680,46,30,2.5,111.05,1.7,63.75 +4681,46,30,2.5,111.05,1.7,63.75 +4682,46,30,2.5,111.05,1.7,63.75 +4683,46,30,2.5,111.05,1.7,63.75 +4684,46,30,2.5,111.05,1.7,63.75 +4685,46,30,2.5,111.05,1.7,63.75 +4686,46,30,2.5,111.05,1.7,63.75 +4687,46,30,2.5,111.05,1.7,63.75 +4688,46,30,2.5,111.05,1.7,63.75 +4689,46,30,2.5,111.05,1.7,63.75 +4690,46,30,2.5,111.05,1.7,63.75 +4691,46,30,2.5,111.05,1.7,63.75 +4692,46,30,2.5,111.05,1.7,63.75 +4693,46,30,2.5,111.05,1.7,63.75 +4694,46,30,2.5,111.05,1.7,63.75 +4695,46,30,2.5,111.05,1.7,63.75 +4696,46,30,2.5,111.05,1.7,63.75 +4697,46,30,2.5,111.05,1.7,63.75 +4698,46,30,2.5,111.05,1.7,63.75 +4699,46,30,2.5,111.05,1.7,63.75 +4700,46,30,2.5,111.05,1.7,63.75 +4701,46,30,2.5,111.05,1.7,63.75 +4702,46,30,2.5,111.05,1.7,63.75 +4703,46,30,2.5,111.05,1.7,63.75 +4704,46,30,2.5,111.05,1.7,63.75 +4705,46,30,2.5,111.05,1.7,63.75 +4706,46,30,2.5,111.05,1.7,63.75 +4707,46,30,2.5,111.05,1.7,63.75 +4708,46,30,2.5,111.05,1.7,63.75 +4709,46,30,2.5,111.05,1.7,63.75 +4710,46,30,2.5,111.05,1.7,63.75 +4711,46,30,2.5,111.05,1.7,63.75 +4712,46,30,2.5,111.05,1.7,63.75 +4713,46,30,2.5,111.05,1.7,63.75 +4714,46,30,2.5,111.05,1.7,63.75 +4715,46,30,2.5,111.05,1.7,63.75 +4716,46,30,2.5,111.05,1.7,63.75 +4717,46,30,2.5,111.05,1.7,63.75 +4718,46,30,2.5,111.05,1.7,63.75 +4719,46,30,2.5,111.05,1.7,63.75 +4720,46,30,2.5,111.05,1.7,63.75 +4721,46,30,2.5,111.05,1.7,63.75 +4722,46,30,2.5,111.05,1.7,63.75 +4723,46,30,2.5,111.05,1.7,63.75 +4724,46,30,2.5,111.05,1.7,63.75 +4725,46,30,2.5,111.05,1.7,63.75 +4726,46,30,2.5,111.05,1.7,63.75 +4727,46,30,2.5,111.05,1.7,63.75 +4728,46,30,2.5,111.05,1.7,63.75 +4729,46,30,2.5,111.05,1.7,63.75 +4730,46,30,2.5,111.05,1.7,63.75 +4731,46,30,2.5,111.05,1.7,63.75 +4732,46,30,2.5,111.05,1.7,63.75 +4733,46,30,2.5,111.05,1.7,63.75 +4734,46,30,2.5,111.05,1.7,63.75 +4735,46,30,2.5,111.05,1.7,63.75 +4736,46,30,2.5,111.05,1.7,63.75 +4737,46,30,2.5,111.05,1.7,63.75 +4738,46,30,2.5,111.05,1.7,63.75 +4739,46,30,2.5,111.05,1.7,63.75 +4740,46,30,2.5,111.05,1.7,63.75 +4741,46,30,2.5,111.05,1.7,63.75 +4742,46,30,2.5,111.05,1.7,63.75 +4743,46,30,2.5,111.05,1.7,63.75 +4744,46,30,2.5,111.05,1.7,63.75 +4745,46,30,2.5,111.05,1.7,63.75 +4746,46,30,2.5,111.05,1.7,63.75 +4747,46,30,2.5,111.05,1.7,63.75 +4748,46,30,2.5,111.05,1.7,63.75 +4749,46,30,2.5,111.05,1.7,63.75 +4750,46,30,2.5,111.05,1.7,63.75 +4751,46,30,2.5,111.05,1.7,63.75 +4752,46,30,2.5,111.05,1.7,63.75 +4753,46,30,2.5,111.05,1.7,63.75 +4754,46,30,2.5,111.05,1.7,63.75 +4755,46,30,2.5,111.05,1.7,63.75 +4756,46,30,2.5,111.05,1.7,63.75 +4757,46,30,2.5,111.05,1.7,63.75 +4758,46,30,2.5,111.05,1.7,63.75 +4759,46,30,2.5,111.05,1.7,63.75 +4760,46,30,2.5,111.05,1.7,63.75 +4761,46,30,2.5,111.05,1.7,63.75 +4762,46,30,2.5,111.05,1.7,63.75 +4763,46,30,2.5,111.05,1.7,63.75 +4764,46,30,2.5,111.05,1.7,63.75 +4765,46,30,2.5,111.05,1.7,63.75 +4766,46,30,2.5,111.05,1.7,63.75 +4767,46,30,2.5,111.05,1.7,63.75 +4768,46,30,2.5,111.05,1.7,63.75 +4769,46,30,2.5,111.05,1.7,63.75 +4770,46,30,2.5,111.05,1.7,63.75 +4771,46,30,2.5,111.05,1.7,63.75 +4772,46,30,2.5,111.05,1.7,63.75 +4773,46,30,2.5,111.05,1.7,63.75 +4774,46,30,2.5,111.05,1.7,63.75 +4775,46,30,2.5,111.05,1.7,63.75 +4776,46,30,2.5,111.05,1.7,63.75 +4777,46,30,2.5,111.05,1.7,63.75 +4778,46,30,2.5,111.05,1.7,63.75 +4779,46,30,2.5,111.05,1.7,63.75 +4780,46,30,2.5,111.05,1.7,63.75 +4781,46,30,2.5,111.05,1.7,63.75 +4782,46,30,2.5,111.05,1.7,63.75 +4783,46,30,2.5,111.05,1.7,63.75 +4784,46,30,2.5,111.05,1.7,63.75 +4785,46,30,2.5,111.05,1.7,63.75 +4786,46,30,2.5,111.05,1.7,63.75 +4787,46,30,2.5,111.05,1.7,63.75 +4788,46,30,2.5,111.05,1.7,63.75 +4789,46,30,2.5,111.05,1.7,63.75 +4790,46,30,2.5,111.05,1.7,63.75 +4791,46,30,2.5,111.05,1.7,63.75 +4792,46,30,2.5,111.05,1.7,63.75 +4793,46,30,2.5,111.05,1.7,63.75 +4794,46,30,2.5,111.05,1.7,63.75 +4795,46,30,2.5,111.05,1.7,63.75 +4796,46,30,2.5,111.05,1.7,63.75 +4797,46,30,2.5,111.05,1.7,63.75 +4798,46,30,2.5,111.05,1.7,63.75 +4799,46,30,2.5,111.05,1.7,63.75 +4800,46,30,2.5,111.05,1.7,63.75 +4801,46,30,2.5,111.05,1.7,63.75 +4802,46,30,2.5,111.05,1.7,63.75 +4803,46,30,2.5,111.05,1.7,63.75 +4804,46,30,2.5,111.05,1.7,63.75 +4805,46,30,2.5,111.05,1.7,63.75 +4806,46,30,2.5,111.05,1.7,63.75 +4807,46,30,2.5,111.05,1.7,63.75 +4808,46,30,2.5,111.05,1.7,63.75 +4809,46,30,2.5,111.05,1.7,63.75 +4810,46,30,2.5,111.05,1.7,63.75 +4811,46,30,2.5,111.05,1.7,63.75 +4812,46,30,2.5,111.05,1.7,63.75 +4813,46,30,2.5,111.05,1.7,63.75 +4814,46,30,2.5,111.05,1.7,63.75 +4815,46,30,2.5,111.05,1.7,63.75 +4816,46,30,2.5,111.05,1.7,63.75 +4817,46,30,2.5,111.05,1.7,63.75 +4818,46,30,2.5,111.05,1.7,63.75 +4819,46,30,2.5,111.05,1.7,63.75 +4820,46,30,2.5,111.05,1.7,63.75 +4821,46,30,2.5,111.05,1.7,63.75 +4822,46,30,2.5,111.05,1.7,63.75 +4823,46,30,2.5,111.05,1.7,63.75 +4824,46,30,2.5,111.05,1.7,63.75 +4825,46,30,2.5,111.05,1.7,63.75 +4826,46,30,2.5,111.05,1.7,63.75 +4827,46,30,2.5,111.05,1.7,63.75 +4828,46,30,2.5,111.05,1.7,63.75 +4829,46,30,2.5,111.05,1.7,63.75 +4830,46,30,2.5,111.05,1.7,63.75 +4831,46,30,2.5,111.05,1.7,63.75 +4832,46,30,2.5,111.05,1.7,63.75 +4833,46,30,2.5,111.05,1.7,63.75 +4834,46,30,2.5,111.05,1.7,63.75 +4835,46,30,2.5,111.05,1.7,63.75 +4836,46,30,2.5,111.05,1.7,63.75 +4837,46,30,2.5,111.05,1.7,63.75 +4838,46,30,2.5,111.05,1.7,63.75 +4839,46,30,2.5,111.05,1.7,63.75 +4840,46,30,2.5,111.05,1.7,63.75 +4841,46,30,2.5,111.05,1.7,63.75 +4842,46,30,2.5,111.05,1.7,63.75 +4843,46,30,2.5,111.05,1.7,63.75 +4844,46,30,2.5,111.05,1.7,63.75 +4845,46,30,2.5,111.05,1.7,63.75 +4846,46,30,2.5,111.05,1.7,63.75 +4847,46,30,2.5,111.05,1.7,63.75 +4848,46,30,2.5,111.05,1.7,63.75 +4849,46,30,2.5,111.05,1.7,63.75 +4850,46,30,2.5,111.05,1.7,63.75 +4851,46,30,2.5,111.05,1.7,63.75 +4852,46,30,2.5,111.05,1.7,63.75 +4853,46,30,2.5,111.05,1.7,63.75 +4854,46,30,2.5,111.05,1.7,63.75 +4855,46,30,2.5,111.05,1.7,63.75 +4856,46,30,2.5,111.05,1.7,63.75 +4857,46,30,2.5,111.05,1.7,63.75 +4858,46,30,2.5,111.05,1.7,63.75 +4859,46,30,2.5,111.05,1.7,63.75 +4860,46,30,2.5,111.05,1.7,63.75 +4861,46,30,2.5,111.05,1.7,63.75 +4862,46,30,2.5,111.05,1.7,63.75 +4863,46,30,2.5,111.05,1.7,63.75 +4864,46,30,2.5,111.05,1.7,63.75 +4865,46,30,2.5,111.05,1.7,63.75 +4866,46,30,2.5,111.05,1.7,63.75 +4867,46,30,2.5,111.05,1.7,63.75 +4868,46,30,2.5,111.05,1.7,63.75 +4869,46,30,2.5,111.05,1.7,63.75 +4870,46,30,2.5,111.05,1.7,63.75 +4871,46,30,2.5,111.05,1.7,63.75 +4872,46,30,2.5,111.05,1.7,63.75 +4873,46,30,2.5,111.05,1.7,63.75 +4874,46,30,2.5,111.05,1.7,63.75 +4875,46,30,2.5,111.05,1.7,63.75 +4876,46,30,2.5,111.05,1.7,63.75 +4877,46,30,2.5,111.05,1.7,63.75 +4878,46,30,2.5,111.05,1.7,63.75 +4879,46,30,2.5,111.05,1.7,63.75 +4880,46,30,2.5,111.05,1.7,63.75 +4881,46,30,2.5,111.05,1.7,63.75 +4882,46,30,2.5,111.05,1.7,63.75 +4883,46,30,2.5,111.05,1.7,63.75 +4884,46,30,2.5,111.05,1.7,63.75 +4885,46,30,2.5,111.05,1.7,63.75 +4886,46,30,2.5,111.05,1.7,63.75 +4887,46,30,2.5,111.05,1.7,63.75 +4888,46,30,2.5,111.05,1.7,63.75 +4889,46,30,2.5,111.05,1.7,63.75 +4890,46,30,2.5,111.05,1.7,63.75 +4891,46,30,2.5,111.05,1.7,63.75 +4892,46,30,2.5,111.05,1.7,63.75 +4893,46,30,2.5,111.05,1.7,63.75 +4894,46,30,2.5,111.05,1.7,63.75 +4895,46,30,2.5,111.05,1.7,63.75 +4896,46,30,2.5,111.05,1.7,63.75 +4897,46,30,2.5,111.05,1.7,63.75 +4898,46,30,2.5,111.05,1.7,63.75 +4899,46,30,2.5,111.05,1.7,63.75 +4900,46,30,2.5,111.05,1.7,63.75 +4901,46,30,2.5,111.05,1.7,63.75 +4902,46,30,2.5,111.05,1.7,63.75 +4903,46,30,2.5,111.05,1.7,63.75 +4904,46,30,2.5,111.05,1.7,63.75 +4905,46,30,2.5,111.05,1.7,63.75 +4906,46,30,2.5,111.05,1.7,63.75 +4907,46,30,2.5,111.05,1.7,63.75 +4908,46,30,2.5,111.05,1.7,63.75 +4909,46,30,2.5,111.05,1.7,63.75 +4910,46,30,2.5,111.05,1.7,63.75 +4911,46,30,2.5,111.05,1.7,63.75 +4912,46,30,2.5,111.05,1.7,63.75 +4913,46,30,2.5,111.05,1.7,63.75 +4914,46,30,2.5,111.05,1.7,63.75 +4915,46,30,2.5,111.05,1.7,63.75 +4916,46,30,2.5,111.05,1.7,63.75 +4917,46,30,2.5,111.05,1.7,63.75 +4918,46,30,2.5,111.05,1.7,63.75 +4919,46,30,2.5,111.05,1.7,63.75 +4920,46,30,2.5,111.05,1.7,63.75 +4921,46,30,2.5,111.05,1.7,63.75 +4922,46,30,2.5,111.05,1.7,63.75 +4923,46,30,2.5,111.05,1.7,63.75 +4924,46,30,2.5,111.05,1.7,63.75 +4925,46,30,2.5,111.05,1.7,63.75 +4926,46,30,2.5,111.05,1.7,63.75 +4927,46,30,2.5,111.05,1.7,63.75 +4928,46,30,2.5,111.05,1.7,63.75 +4929,46,30,2.5,111.05,1.7,63.75 +4930,46,30,2.5,111.05,1.7,63.75 +4931,46,30,2.5,111.05,1.7,63.75 +4932,46,30,2.5,111.05,1.7,63.75 +4933,46,30,2.5,111.05,1.7,63.75 +4934,46,30,2.5,111.05,1.7,63.75 +4935,46,30,2.5,111.05,1.7,63.75 +4936,46,30,2.5,111.05,1.7,63.75 +4937,46,30,2.5,111.05,1.7,63.75 +4938,46,30,2.5,111.05,1.7,63.75 +4939,46,30,2.5,111.05,1.7,63.75 +4940,46,30,2.5,111.05,1.7,63.75 +4941,46,30,2.5,111.05,1.7,63.75 +4942,46,30,2.5,111.05,1.7,63.75 +4943,46,30,2.5,111.05,1.7,63.75 +4944,46,30,2.5,111.05,1.7,63.75 +4945,46,30,2.5,111.05,1.7,63.75 +4946,46,30,2.5,111.05,1.7,63.75 +4947,46,30,2.5,111.05,1.7,63.75 +4948,46,30,2.5,111.05,1.7,63.75 +4949,46,30,2.5,111.05,1.7,63.75 +4950,46,30,2.5,111.05,1.7,63.75 +4951,46,30,2.5,111.05,1.7,63.75 +4952,46,30,2.5,111.05,1.7,63.75 +4953,46,30,2.5,111.05,1.7,63.75 +4954,46,30,2.5,111.05,1.7,63.75 +4955,46,30,2.5,111.05,1.7,63.75 +4956,46,30,2.5,111.05,1.7,63.75 +4957,46,30,2.5,111.05,1.7,63.75 +4958,46,30,2.5,111.05,1.7,63.75 +4959,46,30,2.5,111.05,1.7,63.75 +4960,46,30,2.5,111.05,1.7,63.75 +4961,46,30,2.5,111.05,1.7,63.75 +4962,46,30,2.5,111.05,1.7,63.75 +4963,46,30,2.5,111.05,1.7,63.75 +4964,46,30,2.5,111.05,1.7,63.75 +4965,46,30,2.5,111.05,1.7,63.75 +4966,46,30,2.5,111.05,1.7,63.75 +4967,46,30,2.5,111.05,1.7,63.75 +4968,46,30,2.5,111.05,1.7,63.75 +4969,46,30,2.5,111.05,1.7,63.75 +4970,46,30,2.5,111.05,1.7,63.75 +4971,46,30,2.5,111.05,1.7,63.75 +4972,46,30,2.5,111.05,1.7,63.75 +4973,46,30,2.5,111.05,1.7,63.75 +4974,46,30,2.5,111.05,1.7,63.75 +4975,46,30,2.5,111.05,1.7,63.75 +4976,46,30,2.5,111.05,1.7,63.75 +4977,46,30,2.5,111.05,1.7,63.75 +4978,46,30,2.5,111.05,1.7,63.75 +4979,46,30,2.5,111.05,1.7,63.75 +4980,46,30,2.5,111.05,1.7,63.75 +4981,46,30,2.5,111.05,1.7,63.75 +4982,46,30,2.5,111.05,1.7,63.75 +4983,46,30,2.5,111.05,1.7,63.75 +4984,46,30,2.5,111.05,1.7,63.75 +4985,46,30,2.5,111.05,1.7,63.75 +4986,46,30,2.5,111.05,1.7,63.75 +4987,46,30,2.5,111.05,1.7,63.75 +4988,46,30,2.5,111.05,1.7,63.75 +4989,46,30,2.5,111.05,1.7,63.75 +4990,46,30,2.5,111.05,1.7,63.75 +4991,46,30,2.5,111.05,1.7,63.75 +4992,46,30,2.5,111.05,1.7,63.75 +4993,46,30,2.5,111.05,1.7,63.75 +4994,46,30,2.5,111.05,1.7,63.75 +4995,46,30,2.5,111.05,1.7,63.75 +4996,46,30,2.5,111.05,1.7,63.75 +4997,46,30,2.5,111.05,1.7,63.75 +4998,46,30,2.5,111.05,1.7,63.75 +4999,46,30,2.5,111.05,1.7,63.75 +5000,46,30,2.5,111.05,1.7,63.75 +5001,46,30,2.5,111.05,1.7,63.75 +5002,46,30,2.5,111.05,1.7,63.75 +5003,46,30,2.5,111.05,1.7,63.75 +5004,46,30,2.5,111.05,1.7,63.75 +5005,46,30,2.5,111.05,1.7,63.75 +5006,46,30,2.5,111.05,1.7,63.75 +5007,46,30,2.5,111.05,1.7,63.75 +5008,46,30,2.5,111.05,1.7,63.75 +5009,46,30,2.5,111.05,1.7,63.75 +5010,46,30,2.5,111.05,1.7,63.75 +5011,46,30,2.5,111.05,1.7,63.75 +5012,46,30,2.5,111.05,1.7,63.75 +5013,46,30,2.5,111.05,1.7,63.75 +5014,46,30,2.5,111.05,1.7,63.75 +5015,46,30,2.5,111.05,1.7,63.75 +5016,46,30,2.5,111.05,1.7,63.75 +5017,46,30,2.5,111.05,1.7,63.75 +5018,46,30,2.5,111.05,1.7,63.75 +5019,46,30,2.5,111.05,1.7,63.75 +5020,46,30,2.5,111.05,1.7,63.75 +5021,46,30,2.5,111.05,1.7,63.75 +5022,46,30,2.5,111.05,1.7,63.75 +5023,46,30,2.5,111.05,1.7,63.75 +5024,46,30,2.5,111.05,1.7,63.75 +5025,46,30,2.5,111.05,1.7,63.75 +5026,46,30,2.5,111.05,1.7,63.75 +5027,46,30,2.5,111.05,1.7,63.75 +5028,46,30,2.5,111.05,1.7,63.75 +5029,46,30,2.5,111.05,1.7,63.75 +5030,46,30,2.5,111.05,1.7,63.75 +5031,46,30,2.5,111.05,1.7,63.75 +5032,46,30,2.5,111.05,1.7,63.75 +5033,46,30,2.5,111.05,1.7,63.75 +5034,46,30,2.5,111.05,1.7,63.75 +5035,46,30,2.5,111.05,1.7,63.75 +5036,46,30,2.5,111.05,1.7,63.75 +5037,46,30,2.5,111.05,1.7,63.75 +5038,46,30,2.5,111.05,1.7,63.75 +5039,46,30,2.5,111.05,1.7,63.75 +5040,46,30,2.5,111.05,1.7,63.75 +5041,46,30,2.5,111.05,1.7,63.75 +5042,46,30,2.5,111.05,1.7,63.75 +5043,46,30,2.5,111.05,1.7,63.75 +5044,46,30,2.5,111.05,1.7,63.75 +5045,46,30,2.5,111.05,1.7,63.75 +5046,46,30,2.5,111.05,1.7,63.75 +5047,46,30,2.5,111.05,1.7,63.75 +5048,46,30,2.5,111.05,1.7,63.75 +5049,46,30,2.5,111.05,1.7,63.75 +5050,46,30,2.5,111.05,1.7,63.75 +5051,46,30,2.5,111.05,1.7,63.75 +5052,46,30,2.5,111.05,1.7,63.75 +5053,46,30,2.5,111.05,1.7,63.75 +5054,46,30,2.5,111.05,1.7,63.75 +5055,46,30,2.5,111.05,1.7,63.75 +5056,46,30,2.5,111.05,1.7,63.75 +5057,46,30,2.5,111.05,1.7,63.75 +5058,46,30,2.5,111.05,1.7,63.75 +5059,46,30,2.5,111.05,1.7,63.75 +5060,46,30,2.5,111.05,1.7,63.75 +5061,46,30,2.5,111.05,1.7,63.75 +5062,46,30,2.5,111.05,1.7,63.75 +5063,46,30,2.5,111.05,1.7,63.75 +5064,46,30,2.5,111.05,1.7,63.75 +5065,46,30,2.5,111.05,1.7,63.75 +5066,46,30,2.5,111.05,1.7,63.75 +5067,46,30,2.5,111.05,1.7,63.75 +5068,46,30,2.5,111.05,1.7,63.75 +5069,46,30,2.5,111.05,1.7,63.75 +5070,46,30,2.5,111.05,1.7,63.75 +5071,46,30,2.5,111.05,1.7,63.75 +5072,46,30,2.5,111.05,1.7,63.75 +5073,46,30,2.5,111.05,1.7,63.75 +5074,46,30,2.5,111.05,1.7,63.75 +5075,46,30,2.5,111.05,1.7,63.75 +5076,46,30,2.5,111.05,1.7,63.75 +5077,46,30,2.5,111.05,1.7,63.75 +5078,46,30,2.5,111.05,1.7,63.75 +5079,46,30,2.5,111.05,1.7,63.75 +5080,46,30,2.5,111.05,1.7,63.75 +5081,46,30,2.5,111.05,1.7,63.75 +5082,46,30,2.5,111.05,1.7,63.75 +5083,46,30,2.5,111.05,1.7,63.75 +5084,46,30,2.5,111.05,1.7,63.75 +5085,46,30,2.5,111.05,1.7,63.75 +5086,46,30,2.5,111.05,1.7,63.75 +5087,46,30,2.5,111.05,1.7,63.75 +5088,46,30,2.5,111.05,1.7,63.75 +5089,46,30,2.5,111.05,1.7,63.75 +5090,46,30,2.5,111.05,1.7,63.75 +5091,46,30,2.5,111.05,1.7,63.75 +5092,46,30,2.5,111.05,1.7,63.75 +5093,46,30,2.5,111.05,1.7,63.75 +5094,46,30,2.5,111.05,1.7,63.75 +5095,46,30,2.5,111.05,1.7,63.75 +5096,46,30,2.5,111.05,1.7,63.75 +5097,46,30,2.5,111.05,1.7,63.75 +5098,46,30,2.5,111.05,1.7,63.75 +5099,46,30,2.5,111.05,1.7,63.75 +5100,46,30,2.5,111.05,1.7,63.75 +5101,46,30,2.5,111.05,1.7,63.75 +5102,46,30,2.5,111.05,1.7,63.75 +5103,46,30,2.5,111.05,1.7,63.75 +5104,46,30,2.5,111.05,1.7,63.75 +5105,46,30,2.5,111.05,1.7,63.75 +5106,46,30,2.5,111.05,1.7,63.75 +5107,46,30,2.5,111.05,1.7,63.75 +5108,46,30,2.5,111.05,1.7,63.75 +5109,46,30,2.5,111.05,1.7,63.75 +5110,46,30,2.5,111.05,1.7,63.75 +5111,46,30,2.5,111.05,1.7,63.75 +5112,46,30,2.5,111.05,1.7,63.75 +5113,46,30,2.5,111.05,1.7,63.75 +5114,46,30,2.5,111.05,1.7,63.75 +5115,46,30,2.5,111.05,1.7,63.75 +5116,46,30,2.5,111.05,1.7,63.75 +5117,46,30,2.5,111.05,1.7,63.75 +5118,46,30,2.5,111.05,1.7,63.75 +5119,46,30,2.5,111.05,1.7,63.75 +5120,46,30,2.5,111.05,1.7,63.75 +5121,46,30,2.5,111.05,1.7,63.75 +5122,46,30,2.5,111.05,1.7,63.75 +5123,46,30,2.5,111.05,1.7,63.75 +5124,46,30,2.5,111.05,1.7,63.75 +5125,46,30,2.5,111.05,1.7,63.75 +5126,46,30,2.5,111.05,1.7,63.75 +5127,46,30,2.5,111.05,1.7,63.75 +5128,46,30,2.5,111.05,1.7,63.75 +5129,46,30,2.5,111.05,1.7,63.75 +5130,46,30,2.5,111.05,1.7,63.75 +5131,46,30,2.5,111.05,1.7,63.75 +5132,46,30,2.5,111.05,1.7,63.75 +5133,46,30,2.5,111.05,1.7,63.75 +5134,46,30,2.5,111.05,1.7,63.75 +5135,46,30,2.5,111.05,1.7,63.75 +5136,46,30,2.5,111.05,1.7,63.75 +5137,46,30,2.5,111.05,1.7,63.75 +5138,46,30,2.5,111.05,1.7,63.75 +5139,46,30,2.5,111.05,1.7,63.75 +5140,46,30,2.5,111.05,1.7,63.75 +5141,46,30,2.5,111.05,1.7,63.75 +5142,46,30,2.5,111.05,1.7,63.75 +5143,46,30,2.5,111.05,1.7,63.75 +5144,46,30,2.5,111.05,1.7,63.75 +5145,46,30,2.5,111.05,1.7,63.75 +5146,46,30,2.5,111.05,1.7,63.75 +5147,46,30,2.5,111.05,1.7,63.75 +5148,46,30,2.5,111.05,1.7,63.75 +5149,46,30,2.5,111.05,1.7,63.75 +5150,46,30,2.5,111.05,1.7,63.75 +5151,46,30,2.5,111.05,1.7,63.75 +5152,46,30,2.5,111.05,1.7,63.75 +5153,46,30,2.5,111.05,1.7,63.75 +5154,46,30,2.5,111.05,1.7,63.75 +5155,46,30,2.5,111.05,1.7,63.75 +5156,46,30,2.5,111.05,1.7,63.75 +5157,46,30,2.5,111.05,1.7,63.75 +5158,46,30,2.5,111.05,1.7,63.75 +5159,46,30,2.5,111.05,1.7,63.75 +5160,46,30,2.5,111.05,1.7,63.75 +5161,46,30,2.5,111.05,1.7,63.75 +5162,46,30,2.5,111.05,1.7,63.75 +5163,46,30,2.5,111.05,1.7,63.75 +5164,46,30,2.5,111.05,1.7,63.75 +5165,46,30,2.5,111.05,1.7,63.75 +5166,46,30,2.5,111.05,1.7,63.75 +5167,46,30,2.5,111.05,1.7,63.75 +5168,46,30,2.5,111.05,1.7,63.75 +5169,46,30,2.5,111.05,1.7,63.75 +5170,46,30,2.5,111.05,1.7,63.75 +5171,46,30,2.5,111.05,1.7,63.75 +5172,46,30,2.5,111.05,1.7,63.75 +5173,46,30,2.5,111.05,1.7,63.75 +5174,46,30,2.5,111.05,1.7,63.75 +5175,46,30,2.5,111.05,1.7,63.75 +5176,46,30,2.5,111.05,1.7,63.75 +5177,46,30,2.5,111.05,1.7,63.75 +5178,46,30,2.5,111.05,1.7,63.75 +5179,46,30,2.5,111.05,1.7,63.75 +5180,46,30,2.5,111.05,1.7,63.75 +5181,46,30,2.5,111.05,1.7,63.75 +5182,46,30,2.5,111.05,1.7,63.75 +5183,46,30,2.5,111.05,1.7,63.75 +5184,46,30,2.5,111.05,1.7,63.75 +5185,46,30,2.5,111.05,1.7,63.75 +5186,46,30,2.5,111.05,1.7,63.75 +5187,46,30,2.5,111.05,1.7,63.75 +5188,46,30,2.5,111.05,1.7,63.75 +5189,46,30,2.5,111.05,1.7,63.75 +5190,46,30,2.5,111.05,1.7,63.75 +5191,46,30,2.5,111.05,1.7,63.75 +5192,46,30,2.5,111.05,1.7,63.75 +5193,46,30,2.5,111.05,1.7,63.75 +5194,46,30,2.5,111.05,1.7,63.75 +5195,46,30,2.5,111.05,1.7,63.75 +5196,46,30,2.5,111.05,1.7,63.75 +5197,46,30,2.5,111.05,1.7,63.75 +5198,46,30,2.5,111.05,1.7,63.75 +5199,46,30,2.5,111.05,1.7,63.75 +5200,46,30,2.5,111.05,1.7,63.75 +5201,46,30,2.5,111.05,1.7,63.75 +5202,46,30,2.5,111.05,1.7,63.75 +5203,46,30,2.5,111.05,1.7,63.75 +5204,46,30,2.5,111.05,1.7,63.75 +5205,46,30,2.5,111.05,1.7,63.75 +5206,46,30,2.5,111.05,1.7,63.75 +5207,46,30,2.5,111.05,1.7,63.75 +5208,46,30,2.5,111.05,1.7,63.75 +5209,46,30,2.5,111.05,1.7,63.75 +5210,46,30,2.5,111.05,1.7,63.75 +5211,46,30,2.5,111.05,1.7,63.75 +5212,46,30,2.5,111.05,1.7,63.75 +5213,46,30,2.5,111.05,1.7,63.75 +5214,46,30,2.5,111.05,1.7,63.75 +5215,46,30,2.5,111.05,1.7,63.75 +5216,46,30,2.5,111.05,1.7,63.75 +5217,46,30,2.5,111.05,1.7,63.75 +5218,46,30,2.5,111.05,1.7,63.75 +5219,46,30,2.5,111.05,1.7,63.75 +5220,46,30,2.5,111.05,1.7,63.75 +5221,46,30,2.5,111.05,1.7,63.75 +5222,46,30,2.5,111.05,1.7,63.75 +5223,46,30,2.5,111.05,1.7,63.75 +5224,46,30,2.5,111.05,1.7,63.75 +5225,46,30,2.5,111.05,1.7,63.75 +5226,46,30,2.5,111.05,1.7,63.75 +5227,46,30,2.5,111.05,1.7,63.75 +5228,46,30,2.5,111.05,1.7,63.75 +5229,46,30,2.5,111.05,1.7,63.75 +5230,46,30,2.5,111.05,1.7,63.75 +5231,46,30,2.5,111.05,1.7,63.75 +5232,46,30,2.5,111.05,1.7,63.75 +5233,46,30,2.5,111.05,1.7,63.75 +5234,46,30,2.5,111.05,1.7,63.75 +5235,46,30,2.5,111.05,1.7,63.75 +5236,46,30,2.5,111.05,1.7,63.75 +5237,46,30,2.5,111.05,1.7,63.75 +5238,46,30,2.5,111.05,1.7,63.75 +5239,46,30,2.5,111.05,1.7,63.75 +5240,46,30,2.5,111.05,1.7,63.75 +5241,46,30,2.5,111.05,1.7,63.75 +5242,46,30,2.5,111.05,1.7,63.75 +5243,46,30,2.5,111.05,1.7,63.75 +5244,46,30,2.5,111.05,1.7,63.75 +5245,46,30,2.5,111.05,1.7,63.75 +5246,46,30,2.5,111.05,1.7,63.75 +5247,46,30,2.5,111.05,1.7,63.75 +5248,46,30,2.5,111.05,1.7,63.75 +5249,46,30,2.5,111.05,1.7,63.75 +5250,46,30,2.5,111.05,1.7,63.75 +5251,46,30,2.5,111.05,1.7,63.75 +5252,46,30,2.5,111.05,1.7,63.75 +5253,46,30,2.5,111.05,1.7,63.75 +5254,46,30,2.5,111.05,1.7,63.75 +5255,46,30,2.5,111.05,1.7,63.75 +5256,46,30,2.5,111.05,1.7,63.75 +5257,46,30,2.5,111.05,1.7,63.75 +5258,46,30,2.5,111.05,1.7,63.75 +5259,46,30,2.5,111.05,1.7,63.75 +5260,46,30,2.5,111.05,1.7,63.75 +5261,46,30,2.5,111.05,1.7,63.75 +5262,46,30,2.5,111.05,1.7,63.75 +5263,46,30,2.5,111.05,1.7,63.75 +5264,46,30,2.5,111.05,1.7,63.75 +5265,46,30,2.5,111.05,1.7,63.75 +5266,46,30,2.5,111.05,1.7,63.75 +5267,46,30,2.5,111.05,1.7,63.75 +5268,46,30,2.5,111.05,1.7,63.75 +5269,46,30,2.5,111.05,1.7,63.75 +5270,46,30,2.5,111.05,1.7,63.75 +5271,46,30,2.5,111.05,1.7,63.75 +5272,46,30,2.5,111.05,1.7,63.75 +5273,46,30,2.5,111.05,1.7,63.75 +5274,46,30,2.5,111.05,1.7,63.75 +5275,46,30,2.5,111.05,1.7,63.75 +5276,46,30,2.5,111.05,1.7,63.75 +5277,46,30,2.5,111.05,1.7,63.75 +5278,46,30,2.5,111.05,1.7,63.75 +5279,46,30,2.5,111.05,1.7,63.75 +5280,46,30,2.5,111.05,1.7,63.75 +5281,46,30,2.5,111.05,1.7,63.75 +5282,46,30,2.5,111.05,1.7,63.75 +5283,46,30,2.5,111.05,1.7,63.75 +5284,46,30,2.5,111.05,1.7,63.75 +5285,46,30,2.5,111.05,1.7,63.75 +5286,46,30,2.5,111.05,1.7,63.75 +5287,46,30,2.5,111.05,1.7,63.75 +5288,46,30,2.5,111.05,1.7,63.75 +5289,46,30,2.5,111.05,1.7,63.75 +5290,46,30,2.5,111.05,1.7,63.75 +5291,46,30,2.5,111.05,1.7,63.75 +5292,46,30,2.5,111.05,1.7,63.75 +5293,46,30,2.5,111.05,1.7,63.75 +5294,46,30,2.5,111.05,1.7,63.75 +5295,46,30,2.5,111.05,1.7,63.75 +5296,46,30,2.5,111.05,1.7,63.75 +5297,46,30,2.5,111.05,1.7,63.75 +5298,46,30,2.5,111.05,1.7,63.75 +5299,46,30,2.5,111.05,1.7,63.75 +5300,46,30,2.5,111.05,1.7,63.75 +5301,46,30,2.5,111.05,1.7,63.75 +5302,46,30,2.5,111.05,1.7,63.75 +5303,46,30,2.5,111.05,1.7,63.75 +5304,46,30,2.5,111.05,1.7,63.75 +5305,46,30,2.5,111.05,1.7,63.75 +5306,46,30,2.5,111.05,1.7,63.75 +5307,46,30,2.5,111.05,1.7,63.75 +5308,46,30,2.5,111.05,1.7,63.75 +5309,46,30,2.5,111.05,1.7,63.75 +5310,46,30,2.5,111.05,1.7,63.75 +5311,46,30,2.5,111.05,1.7,63.75 +5312,46,30,2.5,111.05,1.7,63.75 +5313,46,30,2.5,111.05,1.7,63.75 +5314,46,30,2.5,111.05,1.7,63.75 +5315,46,30,2.5,111.05,1.7,63.75 +5316,46,30,2.5,111.05,1.7,63.75 +5317,46,30,2.5,111.05,1.7,63.75 +5318,46,30,2.5,111.05,1.7,63.75 +5319,46,30,2.5,111.05,1.7,63.75 +5320,46,30,2.5,111.05,1.7,63.75 +5321,46,30,2.5,111.05,1.7,63.75 +5322,46,30,2.5,111.05,1.7,63.75 +5323,46,30,2.5,111.05,1.7,63.75 +5324,46,30,2.5,111.05,1.7,63.75 +5325,46,30,2.5,111.05,1.7,63.75 +5326,46,30,2.5,111.05,1.7,63.75 +5327,46,30,2.5,111.05,1.7,63.75 +5328,46,30,2.5,111.05,1.7,63.75 +5329,46,30,2.5,111.05,1.7,63.75 +5330,46,30,2.5,111.05,1.7,63.75 +5331,46,30,2.5,111.05,1.7,63.75 +5332,46,30,2.5,111.05,1.7,63.75 +5333,46,30,2.5,111.05,1.7,63.75 +5334,46,30,2.5,111.05,1.7,63.75 +5335,46,30,2.5,111.05,1.7,63.75 +5336,46,30,2.5,111.05,1.7,63.75 +5337,46,30,2.5,111.05,1.7,63.75 +5338,46,30,2.5,111.05,1.7,63.75 +5339,46,30,2.5,111.05,1.7,63.75 +5340,46,30,2.5,111.05,1.7,63.75 +5341,46,30,2.5,111.05,1.7,63.75 +5342,46,30,2.5,111.05,1.7,63.75 +5343,46,30,2.5,111.05,1.7,63.75 +5344,46,30,2.5,111.05,1.7,63.75 +5345,46,30,2.5,111.05,1.7,63.75 +5346,46,30,2.5,111.05,1.7,63.75 +5347,46,30,2.5,111.05,1.7,63.75 +5348,46,30,2.5,111.05,1.7,63.75 +5349,46,30,2.5,111.05,1.7,63.75 +5350,46,30,2.5,111.05,1.7,63.75 +5351,46,30,2.5,111.05,1.7,63.75 +5352,46,30,2.5,111.05,1.7,63.75 +5353,46,30,2.5,111.05,1.7,63.75 +5354,46,30,2.5,111.05,1.7,63.75 +5355,46,30,2.5,111.05,1.7,63.75 +5356,46,30,2.5,111.05,1.7,63.75 +5357,46,30,2.5,111.05,1.7,63.75 +5358,46,30,2.5,111.05,1.7,63.75 +5359,46,30,2.5,111.05,1.7,63.75 +5360,46,30,2.5,111.05,1.7,63.75 +5361,46,30,2.5,111.05,1.7,63.75 +5362,46,30,2.5,111.05,1.7,63.75 +5363,46,30,2.5,111.05,1.7,63.75 +5364,46,30,2.5,111.05,1.7,63.75 +5365,46,30,2.5,111.05,1.7,63.75 +5366,46,30,2.5,111.05,1.7,63.75 +5367,46,30,2.5,111.05,1.7,63.75 +5368,46,30,2.5,111.05,1.7,63.75 +5369,46,30,2.5,111.05,1.7,63.75 +5370,46,30,2.5,111.05,1.7,63.75 +5371,46,30,2.5,111.05,1.7,63.75 +5372,46,30,2.5,111.05,1.7,63.75 +5373,46,30,2.5,111.05,1.7,63.75 +5374,46,30,2.5,111.05,1.7,63.75 +5375,46,30,2.5,111.05,1.7,63.75 +5376,46,30,2.5,111.05,1.7,63.75 +5377,46,30,2.5,111.05,1.7,63.75 +5378,46,30,2.5,111.05,1.7,63.75 +5379,46,30,2.5,111.05,1.7,63.75 +5380,46,30,2.5,111.05,1.7,63.75 +5381,46,30,2.5,111.05,1.7,63.75 +5382,46,30,2.5,111.05,1.7,63.75 +5383,46,30,2.5,111.05,1.7,63.75 +5384,46,30,2.5,111.05,1.7,63.75 +5385,46,30,2.5,111.05,1.7,63.75 +5386,46,30,2.5,111.05,1.7,63.75 +5387,46,30,2.5,111.05,1.7,63.75 +5388,46,30,2.5,111.05,1.7,63.75 +5389,46,30,2.5,111.05,1.7,63.75 +5390,46,30,2.5,111.05,1.7,63.75 +5391,46,30,2.5,111.05,1.7,63.75 +5392,46,30,2.5,111.05,1.7,63.75 +5393,46,30,2.5,111.05,1.7,63.75 +5394,46,30,2.5,111.05,1.7,63.75 +5395,46,30,2.5,111.05,1.7,63.75 +5396,46,30,2.5,111.05,1.7,63.75 +5397,46,30,2.5,111.05,1.7,63.75 +5398,46,30,2.5,111.05,1.7,63.75 +5399,46,30,2.5,111.05,1.7,63.75 +5400,46,30,2.5,111.05,1.7,63.75 +5401,46,30,2.5,111.05,1.7,63.75 +5402,46,30,2.5,111.05,1.7,63.75 +5403,46,30,2.5,111.05,1.7,63.75 +5404,46,30,2.5,111.05,1.7,63.75 +5405,46,30,2.5,111.05,1.7,63.75 +5406,46,30,2.5,111.05,1.7,63.75 +5407,46,30,2.5,111.05,1.7,63.75 +5408,46,30,2.5,111.05,1.7,63.75 +5409,46,30,2.5,111.05,1.7,63.75 +5410,46,30,2.5,111.05,1.7,63.75 +5411,46,30,2.5,111.05,1.7,63.75 +5412,46,30,2.5,111.05,1.7,63.75 +5413,46,30,2.5,111.05,1.7,63.75 +5414,46,30,2.5,111.05,1.7,63.75 +5415,46,30,2.5,111.05,1.7,63.75 +5416,46,30,2.5,111.05,1.7,63.75 +5417,46,30,2.5,111.05,1.7,63.75 +5418,46,30,2.5,111.05,1.7,63.75 +5419,46,30,2.5,111.05,1.7,63.75 +5420,46,30,2.5,111.05,1.7,63.75 +5421,46,30,2.5,111.05,1.7,63.75 +5422,46,30,2.5,111.05,1.7,63.75 +5423,46,30,2.5,111.05,1.7,63.75 +5424,46,30,2.5,111.05,1.7,63.75 +5425,46,30,2.5,111.05,1.7,63.75 +5426,46,30,2.5,111.05,1.7,63.75 +5427,46,30,2.5,111.05,1.7,63.75 +5428,46,30,2.5,111.05,1.7,63.75 +5429,46,30,2.5,111.05,1.7,63.75 +5430,46,30,2.5,111.05,1.7,63.75 +5431,46,30,2.5,111.05,1.7,63.75 +5432,46,30,2.5,111.05,1.7,63.75 +5433,46,30,2.5,111.05,1.7,63.75 +5434,46,30,2.5,111.05,1.7,63.75 +5435,46,30,2.5,111.05,1.7,63.75 +5436,46,30,2.5,111.05,1.7,63.75 +5437,46,30,2.5,111.05,1.7,63.75 +5438,46,30,2.5,111.05,1.7,63.75 +5439,46,30,2.5,111.05,1.7,63.75 +5440,46,30,2.5,111.05,1.7,63.75 +5441,46,30,2.5,111.05,1.7,63.75 +5442,46,30,2.5,111.05,1.7,63.75 +5443,46,30,2.5,111.05,1.7,63.75 +5444,46,30,2.5,111.05,1.7,63.75 +5445,46,30,2.5,111.05,1.7,63.75 +5446,46,30,2.5,111.05,1.7,63.75 +5447,46,30,2.5,111.05,1.7,63.75 +5448,46,30,2.5,111.05,1.7,63.75 +5449,46,30,2.5,111.05,1.7,63.75 +5450,46,30,2.5,111.05,1.7,63.75 +5451,46,30,2.5,111.05,1.7,63.75 +5452,46,30,2.5,111.05,1.7,63.75 +5453,46,30,2.5,111.05,1.7,63.75 +5454,46,30,2.5,111.05,1.7,63.75 +5455,46,30,2.5,111.05,1.7,63.75 +5456,46,30,2.5,111.05,1.7,63.75 +5457,46,30,2.5,111.05,1.7,63.75 +5458,46,30,2.5,111.05,1.7,63.75 +5459,46,30,2.5,111.05,1.7,63.75 +5460,46,30,2.5,111.05,1.7,63.75 +5461,46,30,2.5,111.05,1.7,63.75 +5462,46,30,2.5,111.05,1.7,63.75 +5463,46,30,2.5,111.05,1.7,63.75 +5464,46,30,2.5,111.05,1.7,63.75 +5465,46,30,2.5,111.05,1.7,63.75 +5466,46,30,2.5,111.05,1.7,63.75 +5467,46,30,2.5,111.05,1.7,63.75 +5468,46,30,2.5,111.05,1.7,63.75 +5469,46,30,2.5,111.05,1.7,63.75 +5470,46,30,2.5,111.05,1.7,63.75 +5471,46,30,2.5,111.05,1.7,63.75 +5472,46,30,2.5,111.05,1.7,63.75 +5473,46,30,2.5,111.05,1.7,63.75 +5474,46,30,2.5,111.05,1.7,63.75 +5475,46,30,2.5,111.05,1.7,63.75 +5476,46,30,2.5,111.05,1.7,63.75 +5477,46,30,2.5,111.05,1.7,63.75 +5478,46,30,2.5,111.05,1.7,63.75 +5479,46,30,2.5,111.05,1.7,63.75 +5480,46,30,2.5,111.05,1.7,63.75 +5481,46,30,2.5,111.05,1.7,63.75 +5482,46,30,2.5,111.05,1.7,63.75 +5483,46,30,2.5,111.05,1.7,63.75 +5484,46,30,2.5,111.05,1.7,63.75 +5485,46,30,2.5,111.05,1.7,63.75 +5486,46,30,2.5,111.05,1.7,63.75 +5487,46,30,2.5,111.05,1.7,63.75 +5488,46,30,2.5,111.05,1.7,63.75 +5489,46,30,2.5,111.05,1.7,63.75 +5490,46,30,2.5,111.05,1.7,63.75 +5491,46,30,2.5,111.05,1.7,63.75 +5492,46,30,2.5,111.05,1.7,63.75 +5493,46,30,2.5,111.05,1.7,63.75 +5494,46,30,2.5,111.05,1.7,63.75 +5495,46,30,2.5,111.05,1.7,63.75 +5496,46,30,2.5,111.05,1.7,63.75 +5497,46,30,2.5,111.05,1.7,63.75 +5498,46,30,2.5,111.05,1.7,63.75 +5499,46,30,2.5,111.05,1.7,63.75 +5500,46,30,2.5,111.05,1.7,63.75 +5501,46,30,2.5,111.05,1.7,63.75 +5502,46,30,2.5,111.05,1.7,63.75 +5503,46,30,2.5,111.05,1.7,63.75 +5504,46,30,2.5,111.05,1.7,63.75 +5505,46,30,2.5,111.05,1.7,63.75 +5506,46,30,2.5,111.05,1.7,63.75 +5507,46,30,2.5,111.05,1.7,63.75 +5508,46,30,2.5,111.05,1.7,63.75 +5509,46,30,2.5,111.05,1.7,63.75 +5510,46,30,2.5,111.05,1.7,63.75 +5511,46,30,2.5,111.05,1.7,63.75 +5512,46,30,2.5,111.05,1.7,63.75 +5513,46,30,2.5,111.05,1.7,63.75 +5514,46,30,2.5,111.05,1.7,63.75 +5515,46,30,2.5,111.05,1.7,63.75 +5516,46,30,2.5,111.05,1.7,63.75 +5517,46,30,2.5,111.05,1.7,63.75 +5518,46,30,2.5,111.05,1.7,63.75 +5519,46,30,2.5,111.05,1.7,63.75 +5520,46,30,2.5,111.05,1.7,63.75 +5521,46,30,2.5,111.05,1.7,63.75 +5522,46,30,2.5,111.05,1.7,63.75 +5523,46,30,2.5,111.05,1.7,63.75 +5524,46,30,2.5,111.05,1.7,63.75 +5525,46,30,2.5,111.05,1.7,63.75 +5526,46,30,2.5,111.05,1.7,63.75 +5527,46,30,2.5,111.05,1.7,63.75 +5528,46,30,2.5,111.05,1.7,63.75 +5529,46,30,2.5,111.05,1.7,63.75 +5530,46,30,2.5,111.05,1.7,63.75 +5531,46,30,2.5,111.05,1.7,63.75 +5532,46,30,2.5,111.05,1.7,63.75 +5533,46,30,2.5,111.05,1.7,63.75 +5534,46,30,2.5,111.05,1.7,63.75 +5535,46,30,2.5,111.05,1.7,63.75 +5536,46,30,2.5,111.05,1.7,63.75 +5537,46,30,2.5,111.05,1.7,63.75 +5538,46,30,2.5,111.05,1.7,63.75 +5539,46,30,2.5,111.05,1.7,63.75 +5540,46,30,2.5,111.05,1.7,63.75 +5541,46,30,2.5,111.05,1.7,63.75 +5542,46,30,2.5,111.05,1.7,63.75 +5543,46,30,2.5,111.05,1.7,63.75 +5544,46,30,2.5,111.05,1.7,63.75 +5545,46,30,2.5,111.05,1.7,63.75 +5546,46,30,2.5,111.05,1.7,63.75 +5547,46,30,2.5,111.05,1.7,63.75 +5548,46,30,2.5,111.05,1.7,63.75 +5549,46,30,2.5,111.05,1.7,63.75 +5550,46,30,2.5,111.05,1.7,63.75 +5551,46,30,2.5,111.05,1.7,63.75 +5552,46,30,2.5,111.05,1.7,63.75 +5553,46,30,2.5,111.05,1.7,63.75 +5554,46,30,2.5,111.05,1.7,63.75 +5555,46,30,2.5,111.05,1.7,63.75 +5556,46,30,2.5,111.05,1.7,63.75 +5557,46,30,2.5,111.05,1.7,63.75 +5558,46,30,2.5,111.05,1.7,63.75 +5559,46,30,2.5,111.05,1.7,63.75 +5560,46,30,2.5,111.05,1.7,63.75 +5561,46,30,2.5,111.05,1.7,63.75 +5562,46,30,2.5,111.05,1.7,63.75 +5563,46,30,2.5,111.05,1.7,63.75 +5564,46,30,2.5,111.05,1.7,63.75 +5565,46,30,2.5,111.05,1.7,63.75 +5566,46,30,2.5,111.05,1.7,63.75 +5567,46,30,2.5,111.05,1.7,63.75 +5568,46,30,2.5,111.05,1.7,63.75 +5569,46,30,2.5,111.05,1.7,63.75 +5570,46,30,2.5,111.05,1.7,63.75 +5571,46,30,2.5,111.05,1.7,63.75 +5572,46,30,2.5,111.05,1.7,63.75 +5573,46,30,2.5,111.05,1.7,63.75 +5574,46,30,2.5,111.05,1.7,63.75 +5575,46,30,2.5,111.05,1.7,63.75 +5576,46,30,2.5,111.05,1.7,63.75 +5577,46,30,2.5,111.05,1.7,63.75 +5578,46,30,2.5,111.05,1.7,63.75 +5579,46,30,2.5,111.05,1.7,63.75 +5580,46,30,2.5,111.05,1.7,63.75 +5581,46,30,2.5,111.05,1.7,63.75 +5582,46,30,2.5,111.05,1.7,63.75 +5583,46,30,2.5,111.05,1.7,63.75 +5584,46,30,2.5,111.05,1.7,63.75 +5585,46,30,2.5,111.05,1.7,63.75 +5586,46,30,2.5,111.05,1.7,63.75 +5587,46,30,2.5,111.05,1.7,63.75 +5588,46,30,2.5,111.05,1.7,63.75 +5589,46,30,2.5,111.05,1.7,63.75 +5590,46,30,2.5,111.05,1.7,63.75 +5591,46,30,2.5,111.05,1.7,63.75 +5592,46,30,2.5,111.05,1.7,63.75 +5593,46,30,2.5,111.05,1.7,63.75 +5594,46,30,2.5,111.05,1.7,63.75 +5595,46,30,2.5,111.05,1.7,63.75 +5596,46,30,2.5,111.05,1.7,63.75 +5597,46,30,2.5,111.05,1.7,63.75 +5598,46,30,2.5,111.05,1.7,63.75 +5599,46,30,2.5,111.05,1.7,63.75 +5600,46,30,2.5,111.05,1.7,63.75 +5601,46,30,2.5,111.05,1.7,63.75 +5602,46,30,2.5,111.05,1.7,63.75 +5603,46,30,2.5,111.05,1.7,63.75 +5604,46,30,2.5,111.05,1.7,63.75 +5605,46,30,2.5,111.05,1.7,63.75 +5606,46,30,2.5,111.05,1.7,63.75 +5607,46,30,2.5,111.05,1.7,63.75 +5608,46,30,2.5,111.05,1.7,63.75 +5609,46,30,2.5,111.05,1.7,63.75 +5610,46,30,2.5,111.05,1.7,63.75 +5611,46,30,2.5,111.05,1.7,63.75 +5612,46,30,2.5,111.05,1.7,63.75 +5613,46,30,2.5,111.05,1.7,63.75 +5614,46,30,2.5,111.05,1.7,63.75 +5615,46,30,2.5,111.05,1.7,63.75 +5616,46,30,2.5,111.05,1.7,63.75 +5617,46,30,2.5,111.05,1.7,63.75 +5618,46,30,2.5,111.05,1.7,63.75 +5619,46,30,2.5,111.05,1.7,63.75 +5620,46,30,2.5,111.05,1.7,63.75 +5621,46,30,2.5,111.05,1.7,63.75 +5622,46,30,2.5,111.05,1.7,63.75 +5623,46,30,2.5,111.05,1.7,63.75 +5624,46,30,2.5,111.05,1.7,63.75 +5625,46,30,2.5,111.05,1.7,63.75 +5626,46,30,2.5,111.05,1.7,63.75 +5627,46,30,2.5,111.05,1.7,63.75 +5628,46,30,2.5,111.05,1.7,63.75 +5629,46,30,2.5,111.05,1.7,63.75 +5630,46,30,2.5,111.05,1.7,63.75 +5631,46,30,2.5,111.05,1.7,63.75 +5632,46,30,2.5,111.05,1.7,63.75 +5633,46,30,2.5,111.05,1.7,63.75 +5634,46,30,2.5,111.05,1.7,63.75 +5635,46,30,2.5,111.05,1.7,63.75 +5636,46,30,2.5,111.05,1.7,63.75 +5637,46,30,2.5,111.05,1.7,63.75 +5638,46,30,2.5,111.05,1.7,63.75 +5639,46,30,2.5,111.05,1.7,63.75 +5640,46,30,2.5,111.05,1.7,63.75 +5641,46,30,2.5,111.05,1.7,63.75 +5642,46,30,2.5,111.05,1.7,63.75 +5643,46,30,2.5,111.05,1.7,63.75 +5644,46,30,2.5,111.05,1.7,63.75 +5645,46,30,2.5,111.05,1.7,63.75 +5646,46,30,2.5,111.05,1.7,63.75 +5647,46,30,2.5,111.05,1.7,63.75 +5648,46,30,2.5,111.05,1.7,63.75 +5649,46,30,2.5,111.05,1.7,63.75 +5650,46,30,2.5,111.05,1.7,63.75 +5651,46,30,2.5,111.05,1.7,63.75 +5652,46,30,2.5,111.05,1.7,63.75 +5653,46,30,2.5,111.05,1.7,63.75 +5654,46,30,2.5,111.05,1.7,63.75 +5655,46,30,2.5,111.05,1.7,63.75 +5656,46,30,2.5,111.05,1.7,63.75 +5657,46,30,2.5,111.05,1.7,63.75 +5658,46,30,2.5,111.05,1.7,63.75 +5659,46,30,2.5,111.05,1.7,63.75 +5660,46,30,2.5,111.05,1.7,63.75 +5661,46,30,2.5,111.05,1.7,63.75 +5662,46,30,2.5,111.05,1.7,63.75 +5663,46,30,2.5,111.05,1.7,63.75 +5664,46,30,2.5,111.05,1.7,63.75 +5665,46,30,2.5,111.05,1.7,63.75 +5666,46,30,2.5,111.05,1.7,63.75 +5667,46,30,2.5,111.05,1.7,63.75 +5668,46,30,2.5,111.05,1.7,63.75 +5669,46,30,2.5,111.05,1.7,63.75 +5670,46,30,2.5,111.05,1.7,63.75 +5671,46,30,2.5,111.05,1.7,63.75 +5672,46,30,2.5,111.05,1.7,63.75 +5673,46,30,2.5,111.05,1.7,63.75 +5674,46,30,2.5,111.05,1.7,63.75 +5675,46,30,2.5,111.05,1.7,63.75 +5676,46,30,2.5,111.05,1.7,63.75 +5677,46,30,2.5,111.05,1.7,63.75 +5678,46,30,2.5,111.05,1.7,63.75 +5679,46,30,2.5,111.05,1.7,63.75 +5680,46,30,2.5,111.05,1.7,63.75 +5681,46,30,2.5,111.05,1.7,63.75 +5682,46,30,2.5,111.05,1.7,63.75 +5683,46,30,2.5,111.05,1.7,63.75 +5684,46,30,2.5,111.05,1.7,63.75 +5685,46,30,2.5,111.05,1.7,63.75 +5686,46,30,2.5,111.05,1.7,63.75 +5687,46,30,2.5,111.05,1.7,63.75 +5688,46,30,2.5,111.05,1.7,63.75 +5689,46,30,2.5,111.05,1.7,63.75 +5690,46,30,2.5,111.05,1.7,63.75 +5691,46,30,2.5,111.05,1.7,63.75 +5692,46,30,2.5,111.05,1.7,63.75 +5693,46,30,2.5,111.05,1.7,63.75 +5694,46,30,2.5,111.05,1.7,63.75 +5695,46,30,2.5,111.05,1.7,63.75 +5696,46,30,2.5,111.05,1.7,63.75 +5697,46,30,2.5,111.05,1.7,63.75 +5698,46,30,2.5,111.05,1.7,63.75 +5699,46,30,2.5,111.05,1.7,63.75 +5700,46,30,2.5,111.05,1.7,63.75 +5701,46,30,2.5,111.05,1.7,63.75 +5702,46,30,2.5,111.05,1.7,63.75 +5703,46,30,2.5,111.05,1.7,63.75 +5704,46,30,2.5,111.05,1.7,63.75 +5705,46,30,2.5,111.05,1.7,63.75 +5706,46,30,2.5,111.05,1.7,63.75 +5707,46,30,2.5,111.05,1.7,63.75 +5708,46,30,2.5,111.05,1.7,63.75 +5709,46,30,2.5,111.05,1.7,63.75 +5710,46,30,2.5,111.05,1.7,63.75 +5711,46,30,2.5,111.05,1.7,63.75 +5712,46,30,2.5,111.05,1.7,63.75 +5713,46,30,2.5,111.05,1.7,63.75 +5714,46,30,2.5,111.05,1.7,63.75 +5715,46,30,2.5,111.05,1.7,63.75 +5716,46,30,2.5,111.05,1.7,63.75 +5717,46,30,2.5,111.05,1.7,63.75 +5718,46,30,2.5,111.05,1.7,63.75 +5719,46,30,2.5,111.05,1.7,63.75 +5720,46,30,2.5,111.05,1.7,63.75 +5721,46,30,2.5,111.05,1.7,63.75 +5722,46,30,2.5,111.05,1.7,63.75 +5723,46,30,2.5,111.05,1.7,63.75 +5724,46,30,2.5,111.05,1.7,63.75 +5725,46,30,2.5,111.05,1.7,63.75 +5726,46,30,2.5,111.05,1.7,63.75 +5727,46,30,2.5,111.05,1.7,63.75 +5728,46,30,2.5,111.05,1.7,63.75 +5729,46,30,2.5,111.05,1.7,63.75 +5730,46,30,2.5,111.05,1.7,63.75 +5731,46,30,2.5,111.05,1.7,63.75 +5732,46,30,2.5,111.05,1.7,63.75 +5733,46,30,2.5,111.05,1.7,63.75 +5734,46,30,2.5,111.05,1.7,63.75 +5735,46,30,2.5,111.05,1.7,63.75 +5736,46,30,2.5,111.05,1.7,63.75 +5737,46,30,2.5,111.05,1.7,63.75 +5738,46,30,2.5,111.05,1.7,63.75 +5739,46,30,2.5,111.05,1.7,63.75 +5740,46,30,2.5,111.05,1.7,63.75 +5741,46,30,2.5,111.05,1.7,63.75 +5742,46,30,2.5,111.05,1.7,63.75 +5743,46,30,2.5,111.05,1.7,63.75 +5744,46,30,2.5,111.05,1.7,63.75 +5745,46,30,2.5,111.05,1.7,63.75 +5746,46,30,2.5,111.05,1.7,63.75 +5747,46,30,2.5,111.05,1.7,63.75 +5748,46,30,2.5,111.05,1.7,63.75 +5749,46,30,2.5,111.05,1.7,63.75 +5750,46,30,2.5,111.05,1.7,63.75 +5751,46,30,2.5,111.05,1.7,63.75 +5752,46,30,2.5,111.05,1.7,63.75 +5753,46,30,2.5,111.05,1.7,63.75 +5754,46,30,2.5,111.05,1.7,63.75 +5755,46,30,2.5,111.05,1.7,63.75 +5756,46,30,2.5,111.05,1.7,63.75 +5757,46,30,2.5,111.05,1.7,63.75 +5758,46,30,2.5,111.05,1.7,63.75 +5759,46,30,2.5,111.05,1.7,63.75 +5760,46,30,2.5,111.05,1.7,63.75 +5761,46,30,2.5,111.05,1.7,63.75 +5762,46,30,2.5,111.05,1.7,63.75 +5763,46,30,2.5,111.05,1.7,63.75 +5764,46,30,2.5,111.05,1.7,63.75 +5765,46,30,2.5,111.05,1.7,63.75 +5766,46,30,2.5,111.05,1.7,63.75 +5767,46,30,2.5,111.05,1.7,63.75 +5768,46,30,2.5,111.05,1.7,63.75 +5769,46,30,2.5,111.05,1.7,63.75 +5770,46,30,2.5,111.05,1.7,63.75 +5771,46,30,2.5,111.05,1.7,63.75 +5772,46,30,2.5,111.05,1.7,63.75 +5773,46,30,2.5,111.05,1.7,63.75 +5774,46,30,2.5,111.05,1.7,63.75 +5775,46,30,2.5,111.05,1.7,63.75 +5776,46,30,2.5,111.05,1.7,63.75 +5777,46,30,2.5,111.05,1.7,63.75 +5778,46,30,2.5,111.05,1.7,63.75 +5779,46,30,2.5,111.05,1.7,63.75 +5780,46,30,2.5,111.05,1.7,63.75 +5781,46,30,2.5,111.05,1.7,63.75 +5782,46,30,2.5,111.05,1.7,63.75 +5783,46,30,2.5,111.05,1.7,63.75 +5784,46,30,2.5,111.05,1.7,63.75 +5785,46,30,2.5,111.05,1.7,63.75 +5786,46,30,2.5,111.05,1.7,63.75 +5787,46,30,2.5,111.05,1.7,63.75 +5788,46,30,2.5,111.05,1.7,63.75 +5789,46,30,2.5,111.05,1.7,63.75 +5790,46,30,2.5,111.05,1.7,63.75 +5791,46,30,2.5,111.05,1.7,63.75 +5792,46,30,2.5,111.05,1.7,63.75 +5793,46,30,2.5,111.05,1.7,63.75 +5794,46,30,2.5,111.05,1.7,63.75 +5795,46,30,2.5,111.05,1.7,63.75 +5796,46,30,2.5,111.05,1.7,63.75 +5797,46,30,2.5,111.05,1.7,63.75 +5798,46,30,2.5,111.05,1.7,63.75 +5799,46,30,2.5,111.05,1.7,63.75 +5800,46,30,2.5,111.05,1.7,63.75 +5801,46,30,2.5,111.05,1.7,63.75 +5802,46,30,2.5,111.05,1.7,63.75 +5803,46,30,2.5,111.05,1.7,63.75 +5804,46,30,2.5,111.05,1.7,63.75 +5805,46,30,2.5,111.05,1.7,63.75 +5806,46,30,2.5,111.05,1.7,63.75 +5807,46,30,2.5,111.05,1.7,63.75 +5808,46,30,2.5,111.05,1.7,63.75 +5809,46,30,2.5,111.05,1.7,63.75 +5810,46,30,2.5,111.05,1.7,63.75 +5811,46,30,2.5,111.05,1.7,63.75 +5812,46,30,2.5,111.05,1.7,63.75 +5813,46,30,2.5,111.05,1.7,63.75 +5814,46,30,2.5,111.05,1.7,63.75 +5815,46,30,2.5,111.05,1.7,63.75 +5816,46,30,2.5,111.05,1.7,63.75 +5817,46,30,2.5,111.05,1.7,63.75 +5818,46,30,2.5,111.05,1.7,63.75 +5819,46,30,2.5,111.05,1.7,63.75 +5820,46,30,2.5,111.05,1.7,63.75 +5821,46,30,2.5,111.05,1.7,63.75 +5822,46,30,2.5,111.05,1.7,63.75 +5823,46,30,2.5,111.05,1.7,63.75 +5824,46,30,2.5,111.05,1.7,63.75 +5825,46,30,2.5,111.05,1.7,63.75 +5826,46,30,2.5,111.05,1.7,63.75 +5827,46,30,2.5,111.05,1.7,63.75 +5828,46,30,2.5,111.05,1.7,63.75 +5829,46,30,2.5,111.05,1.7,63.75 +5830,46,30,2.5,111.05,1.7,63.75 +5831,46,30,2.5,111.05,1.7,63.75 +5832,46,30,2.5,111.05,1.7,63.75 +5833,46,30,2.5,111.05,1.7,63.75 +5834,46,30,2.5,111.05,1.7,63.75 +5835,46,30,2.5,111.05,1.7,63.75 +5836,46,30,2.5,111.05,1.7,63.75 +5837,46,30,2.5,111.05,1.7,63.75 +5838,46,30,2.5,111.05,1.7,63.75 +5839,46,30,2.5,111.05,1.7,63.75 +5840,46,30,2.5,111.05,1.7,63.75 +5841,46,30,2.5,111.05,1.7,63.75 +5842,46,30,2.5,111.05,1.7,63.75 +5843,46,30,2.5,111.05,1.7,63.75 +5844,46,30,2.5,111.05,1.7,63.75 +5845,46,30,2.5,111.05,1.7,63.75 +5846,46,30,2.5,111.05,1.7,63.75 +5847,46,30,2.5,111.05,1.7,63.75 +5848,46,30,2.5,111.05,1.7,63.75 +5849,46,30,2.5,111.05,1.7,63.75 +5850,46,30,2.5,111.05,1.7,63.75 +5851,46,30,2.5,111.05,1.7,63.75 +5852,46,30,2.5,111.05,1.7,63.75 +5853,46,30,2.5,111.05,1.7,63.75 +5854,46,30,2.5,111.05,1.7,63.75 +5855,46,30,2.5,111.05,1.7,63.75 +5856,46,30,2.5,111.05,1.7,63.75 +5857,46,30,2.5,111.05,1.7,63.75 +5858,46,30,2.5,111.05,1.7,63.75 +5859,46,30,2.5,111.05,1.7,63.75 +5860,46,30,2.5,111.05,1.7,63.75 +5861,46,30,2.5,111.05,1.7,63.75 +5862,46,30,2.5,111.05,1.7,63.75 +5863,46,30,2.5,111.05,1.7,63.75 +5864,46,30,2.5,111.05,1.7,63.75 +5865,46,30,2.5,111.05,1.7,63.75 +5866,46,30,2.5,111.05,1.7,63.75 +5867,46,30,2.5,111.05,1.7,63.75 +5868,46,30,2.5,111.05,1.7,63.75 +5869,46,30,2.5,111.05,1.7,63.75 +5870,46,30,2.5,111.05,1.7,63.75 +5871,46,30,2.5,111.05,1.7,63.75 +5872,46,30,2.5,111.05,1.7,63.75 +5873,46,30,2.5,111.05,1.7,63.75 +5874,46,30,2.5,111.05,1.7,63.75 +5875,46,30,2.5,111.05,1.7,63.75 +5876,46,30,2.5,111.05,1.7,63.75 +5877,46,30,2.5,111.05,1.7,63.75 +5878,46,30,2.5,111.05,1.7,63.75 +5879,46,30,2.5,111.05,1.7,63.75 +5880,46,30,2.5,111.05,1.7,63.75 +5881,46,30,2.5,111.05,1.7,63.75 +5882,46,30,2.5,111.05,1.7,63.75 +5883,46,30,2.5,111.05,1.7,63.75 +5884,46,30,2.5,111.05,1.7,63.75 +5885,46,30,2.5,111.05,1.7,63.75 +5886,46,30,2.5,111.05,1.7,63.75 +5887,46,30,2.5,111.05,1.7,63.75 +5888,46,30,2.5,111.05,1.7,63.75 +5889,46,30,2.5,111.05,1.7,63.75 +5890,46,30,2.5,111.05,1.7,63.75 +5891,46,30,2.5,111.05,1.7,63.75 +5892,46,30,2.5,111.05,1.7,63.75 +5893,46,30,2.5,111.05,1.7,63.75 +5894,46,30,2.5,111.05,1.7,63.75 +5895,46,30,2.5,111.05,1.7,63.75 +5896,46,30,2.5,111.05,1.7,63.75 +5897,46,30,2.5,111.05,1.7,63.75 +5898,46,30,2.5,111.05,1.7,63.75 +5899,46,30,2.5,111.05,1.7,63.75 +5900,46,30,2.5,111.05,1.7,63.75 +5901,46,30,2.5,111.05,1.7,63.75 +5902,46,30,2.5,111.05,1.7,63.75 +5903,46,30,2.5,111.05,1.7,63.75 +5904,46,30,2.5,111.05,1.7,63.75 +5905,46,30,2.5,111.05,1.7,63.75 +5906,46,30,2.5,111.05,1.7,63.75 +5907,46,30,2.5,111.05,1.7,63.75 +5908,46,30,2.5,111.05,1.7,63.75 +5909,46,30,2.5,111.05,1.7,63.75 +5910,46,30,2.5,111.05,1.7,63.75 +5911,46,30,2.5,111.05,1.7,63.75 +5912,46,30,2.5,111.05,1.7,63.75 +5913,46,30,2.5,111.05,1.7,63.75 +5914,46,30,2.5,111.05,1.7,63.75 +5915,46,30,2.5,111.05,1.7,63.75 +5916,46,30,2.5,111.05,1.7,63.75 +5917,46,30,2.5,111.05,1.7,63.75 +5918,46,30,2.5,111.05,1.7,63.75 +5919,46,30,2.5,111.05,1.7,63.75 +5920,46,30,2.5,111.05,1.7,63.75 +5921,46,30,2.5,111.05,1.7,63.75 +5922,46,30,2.5,111.05,1.7,63.75 +5923,46,30,2.5,111.05,1.7,63.75 +5924,46,30,2.5,111.05,1.7,63.75 +5925,46,30,2.5,111.05,1.7,63.75 +5926,46,30,2.5,111.05,1.7,63.75 +5927,46,30,2.5,111.05,1.7,63.75 +5928,46,30,2.5,111.05,1.7,63.75 +5929,46,30,2.5,111.05,1.7,63.75 +5930,46,30,2.5,111.05,1.7,63.75 +5931,46,30,2.5,111.05,1.7,63.75 +5932,46,30,2.5,111.05,1.7,63.75 +5933,46,30,2.5,111.05,1.7,63.75 +5934,46,30,2.5,111.05,1.7,63.75 +5935,46,30,2.5,111.05,1.7,63.75 +5936,46,30,2.5,111.05,1.7,63.75 +5937,46,30,2.5,111.05,1.7,63.75 +5938,46,30,2.5,111.05,1.7,63.75 +5939,46,30,2.5,111.05,1.7,63.75 +5940,46,30,2.5,111.05,1.7,63.75 +5941,46,30,2.5,111.05,1.7,63.75 +5942,46,30,2.5,111.05,1.7,63.75 +5943,46,30,2.5,111.05,1.7,63.75 +5944,46,30,2.5,111.05,1.7,63.75 +5945,46,30,2.5,111.05,1.7,63.75 +5946,46,30,2.5,111.05,1.7,63.75 +5947,46,30,2.5,111.05,1.7,63.75 +5948,46,30,2.5,111.05,1.7,63.75 +5949,46,30,2.5,111.05,1.7,63.75 +5950,46,30,2.5,111.05,1.7,63.75 +5951,46,30,2.5,111.05,1.7,63.75 +5952,46,30,2.5,111.05,1.7,63.75 +5953,46,30,2.5,111.05,1.7,63.75 +5954,46,30,2.5,111.05,1.7,63.75 +5955,46,30,2.5,111.05,1.7,63.75 +5956,46,30,2.5,111.05,1.7,63.75 +5957,46,30,2.5,111.05,1.7,63.75 +5958,46,30,2.5,111.05,1.7,63.75 +5959,46,30,2.5,111.05,1.7,63.75 +5960,46,30,2.5,111.05,1.7,63.75 +5961,46,30,2.5,111.05,1.7,63.75 +5962,46,30,2.5,111.05,1.7,63.75 +5963,46,30,2.5,111.05,1.7,63.75 +5964,46,30,2.5,111.05,1.7,63.75 +5965,46,30,2.5,111.05,1.7,63.75 +5966,46,30,2.5,111.05,1.7,63.75 +5967,46,30,2.5,111.05,1.7,63.75 +5968,46,30,2.5,111.05,1.7,63.75 +5969,46,30,2.5,111.05,1.7,63.75 +5970,46,30,2.5,111.05,1.7,63.75 +5971,46,30,2.5,111.05,1.7,63.75 +5972,46,30,2.5,111.05,1.7,63.75 +5973,46,30,2.5,111.05,1.7,63.75 +5974,46,30,2.5,111.05,1.7,63.75 +5975,46,30,2.5,111.05,1.7,63.75 +5976,46,30,2.5,111.05,1.7,63.75 +5977,46,30,2.5,111.05,1.7,63.75 +5978,46,30,2.5,111.05,1.7,63.75 +5979,46,30,2.5,111.05,1.7,63.75 +5980,46,30,2.5,111.05,1.7,63.75 +5981,46,30,2.5,111.05,1.7,63.75 +5982,46,30,2.5,111.05,1.7,63.75 +5983,46,30,2.5,111.05,1.7,63.75 +5984,46,30,2.5,111.05,1.7,63.75 +5985,46,30,2.5,111.05,1.7,63.75 +5986,46,30,2.5,111.05,1.7,63.75 +5987,46,30,2.5,111.05,1.7,63.75 +5988,46,30,2.5,111.05,1.7,63.75 +5989,46,30,2.5,111.05,1.7,63.75 +5990,46,30,2.5,111.05,1.7,63.75 +5991,46,30,2.5,111.05,1.7,63.75 +5992,46,30,2.5,111.05,1.7,63.75 +5993,46,30,2.5,111.05,1.7,63.75 +5994,46,30,2.5,111.05,1.7,63.75 +5995,46,30,2.5,111.05,1.7,63.75 +5996,46,30,2.5,111.05,1.7,63.75 +5997,46,30,2.5,111.05,1.7,63.75 +5998,46,30,2.5,111.05,1.7,63.75 +5999,46,30,2.5,111.05,1.7,63.75 +6000,46,30,2.5,111.05,1.7,63.75 diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/test3.csv.original b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/test3.csv.original new file mode 100644 index 0000000..44d05b7 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/test3.csv.original @@ -0,0 +1,6002 @@ +#t (100ms),EW2-Voset (kV),EW3-VOset (kV),EW101-MC-Ioset (A),EW101-GC-Ioset (A),FPS101-Voset (V) +0,20,15,111.3,1.7,53.2 +1,20.5,14.5,111.3,1.7,62 +2,21,14,111.3,1.7,62 +3,21.5,13.5,111.3,1.7,62 +4,22,13,111.3,1.7,62 +5,22.5,12.5,111.3,1.7,62 +6,23,12,111.3,1.7,62 +7,23.5,11.5,111.3,1.7,62 +8,24,11,111.3,1.7,62 +9,24.5,10.5,111.3,1.7,62 +10,25,10,111.3,1.7,62 +11,25.5,9.5,111.3,1.7,62 +12,26,9,111.3,1.7,62 +13,26.5,8.5,111.3,1.7,62 +14,27,8,111.3,1.7,62 +15,27.5,7.5,111.3,1.7,62 +16,28,7,111.3,1.7,62 +17,28.5,6.5,111.3,1.7,62 +18,29,6,111.3,1.7,62 +19,29.5,5.5,111.3,1.7,62 +20,30,5,111.3,1.7,62 +21,30,4.5,111.3,1.7,62 +22,30,4,111.3,1.7,62 +23,30,4,111.3,1.7,62 +24,30,4,111.3,1.7,62 +25,30,4,111.3,1.7,62 +26,30,4,111.3,1.7,62 +27,30,4,111.3,1.7,62 +28,30,4,111.3,1.7,62 +29,30,4,111.3,1.7,62 +30,30,4,111.3,1.7,62 +31,30,3.4,111.3,1.7,62 +32,30,3.4,111.3,1.7,62 +33,30,3.4,111.3,1.7,62 +34,30,3.4,111.3,1.7,62 +35,30,3.4,111.3,1.7,62 +36,30,3.4,111.3,1.7,62 +37,30,3.4,111.3,1.7,62 +38,30,3.4,111.3,1.7,62 +39,30,3.4,111.3,1.7,62 +40,30,3.4,111.3,1.7,62 +41,30,3.4,111.3,1.7,62 +42,30,3.4,111.3,1.7,62 +43,30,3.4,111.3,1.7,62 +44,30,3.4,111.3,1.7,62 +45,30,3.4,111.3,1.7,62 +46,30,3.4,111.3,1.7,62 +47,30,3.4,111.3,1.7,62 +48,30,3.4,111.3,1.7,62 +49,30,3.4,111.3,1.7,62 +50,30,3.4,111.3,1.7,62 +51,30,3.4,111.3,1.7,62.1 +52,30,3.4,111.3,1.7,62.2 +53,30,3.4,111.3,1.7,62.3 +54,30,3.4,111.3,1.7,62.4 +55,30,3.4,111.3,1.7,62.5 +56,30,3.4,111.3,1.7,62.6 +57,30,3.4,111.3,1.7,62.7 +58,30,3.4,111.3,1.7,62.8 +59,30,3.4,111.3,1.7,62.9 +60,30,3.4,111.3,1.7,63 +61,30,3,111.3,1.7,63.1 +62,30,3,111.3,1.7,63.2 +63,30,3,111.3,1.7,63.3 +64,30,3,111.3,1.7,63.4 +65,30,3,111.3,1.7,63.5 +66,30,3,111.3,1.7,63.6 +67,30,3,111.3,1.7,63.7 +68,30,3,111.3,1.7,63.8 +69,30,3,111.3,1.7,63.9 +70,30,3,111.3,1.7,64 +71,30,3,111.3,1.7,64.1 +72,30,3,111.3,1.7,64.2 +73,30,3,111.3,1.7,64.3 +74,30,3,111.3,1.7,64.4 +75,30,3,111.3,1.7,64.5 +76,30,3,111.3,1.7,64.6 +77,30,3,111.3,1.7,64.7 +78,30,3,111.3,1.7,64.8 +79,30,3,111.3,1.7,64.9 +80,30,3,111.3,1.7,65 +81,30,3,111.3,1.7,65.1 +82,30,3,111.3,1.7,65.2 +83,30,3,111.3,1.7,65.3 +84,30,3,111.3,1.7,65.4 +85,30,3,111.3,1.7,65.5 +86,30,3,111.3,1.7,65.6 +87,30,3,111.3,1.7,65.7 +88,30,3,111.3,1.7,65.8 +89,30,3,111.3,1.7,65.9 +90,30,3,111.3,1.7,66 +91,30,3,111.3,1.7,66.1 +92,30,3,111.3,1.7,66.2 +93,30,3,111.3,1.7,66.3 +94,30,3,111.3,1.7,66.4 +95,30,3,111.3,1.7,66.5 +96,30,3,111.3,1.7,66.6 +97,30,3,111.3,1.7,66.7 +98,30,3,111.3,1.7,66.8 +99,30,3,111.3,1.7,66.9 +100,30,3,111.3,1.7,67 +101,30,3,111.3,1.7,67 +102,30,3,111.3,1.7,67 +103,30,3,111.3,1.7,67 +104,30,3,111.3,1.7,67 +105,30,3,111.3,1.7,67 +106,30,3,111.3,1.7,67 +107,30,3,111.3,1.7,67 +108,30,3,111.3,1.7,67 +109,30,3,111.3,1.7,67 +110,30,3,111.3,1.7,67 +111,30,3,111.3,1.7,67 +112,30,3,111.3,1.7,67 +113,30,3,111.3,1.7,67 +114,30,3,111.3,1.7,67 +115,30,3,111.3,1.7,67 +116,30,3,111.3,1.7,67 +117,30,3,111.3,1.7,67 +118,30,3,111.3,1.7,67 +119,30,3,111.3,1.7,67 +120,30,3,111.3,1.7,67 +121,30,3,111.3,1.7,67 +122,30,3,111.3,1.7,67 +123,30,3,111.3,1.7,67 +124,30,3,111.3,1.7,67 +125,30,3,111.3,1.7,67 +126,30,3,111.3,1.7,67 +127,30,3,111.3,1.7,67 +128,30,3,111.3,1.7,67 +129,30,3,111.3,1.7,67 +130,30,3,111.3,1.7,67 +131,30,3,111.3,1.7,67 +132,30,3,111.3,1.7,67 +133,30,3,111.3,1.7,67 +134,30,3,111.3,1.7,67 +135,30,3,111.3,1.7,67 +136,30,3,111.3,1.7,67 +137,30,3,111.3,1.7,67 +138,30,3,111.3,1.7,67 +139,30,3,111.3,1.7,67 +140,30,3,111.3,1.7,67 +141,30,3,111.3,1.7,67 +142,30,3,111.3,1.7,67 +143,30,3,111.3,1.7,67 +144,30,3,111.3,1.7,67 +145,30,3,111.3,1.7,67 +146,30,3,111.3,1.7,67 +147,30,3,111.3,1.7,67 +148,30,3,111.3,1.7,67 +149,30,3,111.3,1.7,67 +150,30,3,111.3,1.7,67 +151,30,3,111.3,1.7,67 +152,30,3,111.3,1.7,67 +153,30,3,111.3,1.7,67 +154,30,3,111.3,1.7,67 +155,30,3,111.3,1.7,67 +156,30,3,111.3,1.7,67 +157,30,3,111.3,1.7,67 +158,30,3,111.3,1.7,67 +159,30,3,111.3,1.7,67 +160,30,3,111.3,1.7,67 +161,30,3,111.3,1.7,67 +162,30,3,111.3,1.7,67 +163,30,3,111.3,1.7,67 +164,30,3,111.3,1.7,67 +165,30,3,111.3,1.7,67 +166,30,3,111.3,1.7,67 +167,30,3,111.3,1.7,67 +168,30,3,111.3,1.7,67 +169,30,3,111.3,1.7,67 +170,30,3,111.3,1.7,67 +171,30,3,111.3,1.7,67 +172,30,3,111.3,1.7,67 +173,30,3,111.3,1.7,67 +174,30,3,111.3,1.7,67 +175,30,3,111.3,1.7,67 +176,30,3,111.3,1.7,67 +177,30,3,111.3,1.7,67 +178,30,3,111.3,1.7,67 +179,30,3,111.3,1.7,67 +180,30,3,111.3,1.7,67 +181,30,3,111.3,1.7,67 +182,30,3,111.3,1.7,67 +183,30,3,111.3,1.7,67 +184,30,3,111.3,1.7,67 +185,30,3,111.3,1.7,67 +186,30,3,111.3,1.7,67 +187,30,3,111.3,1.7,67 +188,30,3,111.3,1.7,67 +189,30,3,111.3,1.7,67 +190,30,3,111.3,1.7,67 +191,30,3,111.3,1.7,67 +192,30,3,111.3,1.7,67 +193,30,3,111.3,1.7,67 +194,30,3,111.3,1.7,67 +195,30,3,111.3,1.7,67 +196,30,3,111.3,1.7,67 +197,30,3,111.3,1.7,67 +198,30,3,111.3,1.7,67 +199,30,3,111.3,1.7,67 +200,30,2.9,111.3,1.7,67 +201,30,2.9,111.05,1.7,67 +202,30,2.9,111.05,1.7,67 +203,30,2.9,111.05,1.7,67 +204,30,2.9,111.05,1.7,67 +205,30,2.9,111.05,1.7,67 +206,30,2.9,111.05,1.7,67 +207,30,2.9,111.05,1.7,67 +208,30,2.9,111.05,1.7,67 +209,30,2.9,111.05,1.7,67 +210,30,2.9,111.05,1.7,67 +211,30,2.9,111.05,1.7,67 +212,30,2.9,111.05,1.7,67 +213,30,2.9,111.05,1.7,67 +214,30,2.9,111.05,1.7,67 +215,30,2.9,111.05,1.7,67 +216,30,2.9,111.05,1.7,67 +217,30,2.9,111.05,1.7,67 +218,30,2.9,111.05,1.7,67 +219,30,2.9,111.05,1.7,67 +220,30,2.9,111.05,1.7,67 +221,30,2.9,111.05,1.7,67 +222,30,2.9,111.05,1.7,67 +223,30,2.9,111.05,1.7,67 +224,30,2.9,111.05,1.7,67 +225,30,2.9,111.05,1.7,67 +226,30,2.9,111.05,1.7,67 +227,30,2.9,111.05,1.7,67 +228,30,2.9,111.05,1.7,67 +229,30,2.9,111.05,1.7,67 +230,30,2.9,111.05,1.7,67 +231,30,2.9,111.05,1.7,67 +232,30,2.9,111.05,1.7,67 +233,30,2.9,111.05,1.7,67 +234,30,2.9,111.05,1.7,67 +235,30,2.9,111.05,1.7,67 +236,30,2.9,111.05,1.7,67 +237,30,2.9,111.05,1.7,67 +238,30,2.9,111.05,1.7,67 +239,30,2.9,111.05,1.7,67 +240,30,2.9,111.05,1.7,67 +241,30,2.9,111.05,1.7,67 +242,30,2.9,111.05,1.7,67 +243,30,2.9,111.05,1.7,67 +244,30,2.9,111.05,1.7,67 +245,30,2.9,111.05,1.7,67 +246,30,2.9,111.05,1.7,67 +247,30,2.9,111.05,1.7,67 +248,30,2.9,111.05,1.7,67 +249,30,2.9,111.05,1.7,67 +250,30,2.8,111.05,1.7,67 +251,30,2.8,111.05,1.7,67 +252,30,2.8,111.05,1.7,67 +253,30,2.8,111.05,1.7,67 +254,30,2.8,111.05,1.7,67 +255,30,2.8,111.05,1.7,67 +256,30,2.8,111.05,1.7,67 +257,30,2.8,111.05,1.7,67 +258,30,2.8,111.05,1.7,67 +259,30,2.8,111.05,1.7,67 +260,30,2.8,111.05,1.7,67 +261,30,2.8,111.05,1.7,67 +262,30,2.8,111.05,1.7,67 +263,30,2.8,111.05,1.7,67 +264,30,2.8,111.05,1.7,67 +265,30,2.8,111.05,1.7,67 +266,30,2.8,111.05,1.7,67 +267,30,2.8,111.05,1.7,67 +268,30,2.8,111.05,1.7,67 +269,30,2.8,111.05,1.7,67 +270,30,2.8,111.05,1.7,67 +271,30,2.8,111.05,1.7,67 +272,30,2.8,111.05,1.7,67 +273,30,2.8,111.05,1.7,67 +274,30,2.8,111.05,1.7,67 +275,30,2.8,111.05,1.7,67 +276,30,2.8,111.05,1.7,67 +277,30,2.8,111.05,1.7,67 +278,30,2.8,111.05,1.7,67 +279,30,2.8,111.05,1.7,67 +280,30,2.8,111.05,1.7,67 +281,30,2.8,111.05,1.7,67 +282,30,2.8,111.05,1.7,67 +283,30,2.8,111.05,1.7,67 +284,30,2.8,111.05,1.7,67 +285,30,2.8,111.05,1.7,67 +286,30,2.8,111.05,1.7,67 +287,30,2.8,111.05,1.7,67 +288,30,2.8,111.05,1.7,67 +289,30,2.8,111.05,1.7,67 +290,30,2.8,111.05,1.7,67 +291,30,2.8,111.05,1.7,67 +292,30,2.8,111.05,1.7,67 +293,30,2.8,111.05,1.7,67 +294,30,2.8,111.05,1.7,67 +295,30,2.8,111.05,1.7,67 +296,30,2.8,111.05,1.7,67 +297,30,2.8,111.05,1.7,67 +298,30,2.8,111.05,1.7,67 +299,30,2.8,111.05,1.7,67 +300,30,2.7,111.05,1.7,67 +301,30,2.7,111.05,1.7,67 +302,30,2.7,111.05,1.7,67 +303,30,2.7,111.05,1.7,67 +304,30,2.7,111.05,1.7,67 +305,30,2.7,111.05,1.7,67 +306,30,2.7,111.05,1.7,67 +307,30,2.7,111.05,1.7,67 +308,30,2.7,111.05,1.7,67 +309,30,2.7,111.05,1.7,67 +310,30,2.7,111.05,1.7,67 +311,30,2.7,111.05,1.7,67 +312,30,2.7,111.05,1.7,67 +313,30,2.7,111.05,1.7,67 +314,30,2.7,111.05,1.7,67 +315,30,2.7,111.05,1.7,67 +316,30,2.7,111.05,1.7,67 +317,30,2.7,111.05,1.7,67 +318,30,2.7,111.05,1.7,67 +319,30,2.7,111.05,1.7,67 +320,30,2.7,111.05,1.7,67 +321,30,2.7,111.05,1.7,67 +322,30,2.7,111.05,1.7,67 +323,30,2.7,111.05,1.7,67 +324,30,2.7,111.05,1.7,67 +325,30,2.7,111.05,1.7,67 +326,30,2.7,111.05,1.7,67 +327,30,2.7,111.05,1.7,67 +328,30,2.7,111.05,1.7,67 +329,30,2.7,111.05,1.7,67 +330,30,2.7,111.05,1.7,67 +331,30,2.7,111.05,1.7,67 +332,30,2.7,111.05,1.7,67 +333,30,2.7,111.05,1.7,67 +334,30,2.7,111.05,1.7,67 +335,30,2.7,111.05,1.7,67 +336,30,2.7,111.05,1.7,67 +337,30,2.7,111.05,1.7,67 +338,30,2.7,111.05,1.7,67 +339,30,2.7,111.05,1.7,67 +340,30,2.7,111.05,1.7,67 +341,30,2.7,111.05,1.7,67 +342,30,2.7,111.05,1.7,67 +343,30,2.7,111.05,1.7,67 +344,30,2.7,111.05,1.7,67 +345,30,2.7,111.05,1.7,67 +346,30,2.7,111.05,1.7,67 +347,30,2.7,111.05,1.7,67 +348,30,2.7,111.05,1.7,67 +349,30,2.7,111.05,1.7,67 +350,30,2.7,111.05,1.7,67 +351,30,2.7,111.05,1.7,67 +352,30,2.7,111.05,1.7,67 +353,30,2.7,111.05,1.7,67 +354,30,2.7,111.05,1.7,67 +355,30,2.7,111.05,1.7,67 +356,30,2.7,111.05,1.7,67 +357,30,2.7,111.05,1.7,67 +358,30,2.7,111.05,1.7,67 +359,30,2.7,111.05,1.7,67 +360,30,2.7,111.05,1.7,67 +361,30,2.7,111.05,1.7,67 +362,30,2.7,111.05,1.7,67 +363,30,2.7,111.05,1.7,67 +364,30,2.7,111.05,1.7,67 +365,30,2.7,111.05,1.7,67 +366,30,2.7,111.05,1.7,67 +367,30,2.7,111.05,1.7,67 +368,30,2.7,111.05,1.7,67 +369,30,2.7,111.05,1.7,67 +370,30,2.7,111.05,1.7,67 +371,30,2.7,111.05,1.7,67 +372,30,2.7,111.05,1.7,67 +373,30,2.7,111.05,1.7,67 +374,30,2.7,111.05,1.7,67 +375,30,2.7,111.05,1.7,67 +376,30,2.7,111.05,1.7,67 +377,30,2.7,111.05,1.7,67 +378,30,2.7,111.05,1.7,67 +379,30,2.7,111.05,1.7,67 +380,30,2.7,111.05,1.7,67 +381,30,2.7,111.05,1.7,67 +382,30,2.7,111.05,1.7,67 +383,30,2.7,111.05,1.7,67 +384,30,2.7,111.05,1.7,67 +385,30,2.7,111.05,1.7,67 +386,30,2.7,111.05,1.7,67 +387,30,2.7,111.05,1.7,67 +388,30,2.7,111.05,1.7,67 +389,30,2.7,111.05,1.7,67 +390,30,2.7,111.05,1.7,67 +391,30,2.7,111.05,1.7,67 +392,30,2.7,111.05,1.7,67 +393,30,2.7,111.05,1.7,67 +394,30,2.7,111.05,1.7,67 +395,30,2.7,111.05,1.7,67 +396,30,2.7,111.05,1.7,67 +397,30,2.7,111.05,1.7,67 +398,30,2.7,111.05,1.7,67 +399,30,2.7,111.05,1.7,67 +400,30,2.7,111.05,1.7,67 +401,30,2.7,111.05,1.7,66.9975 +402,30,2.7,111.05,1.7,66.995 +403,30,2.7,111.05,1.7,66.9925 +404,30,2.7,111.05,1.7,66.99 +405,30,2.7,111.05,1.7,66.9875 +406,30,2.7,111.05,1.7,66.985 +407,30,2.7,111.05,1.7,66.9825 +408,30,2.7,111.05,1.7,66.98 +409,30,2.7,111.05,1.7,66.9775 +410,30,2.7,111.05,1.7,66.975 +411,30,2.7,111.05,1.7,66.9725 +412,30,2.7,111.05,1.7,66.97 +413,30,2.7,111.05,1.7,66.9675 +414,30,2.7,111.05,1.7,66.965 +415,30,2.7,111.05,1.7,66.9625 +416,30,2.7,111.05,1.7,66.96 +417,30,2.7,111.05,1.7,66.9575 +418,30,2.7,111.05,1.7,66.955 +419,30,2.7,111.05,1.7,66.9525 +420,30,2.7,111.05,1.7,66.95 +421,30,2.7,111.05,1.7,66.9475 +422,30,2.7,111.05,1.7,66.945 +423,30,2.7,111.05,1.7,66.9425 +424,30,2.7,111.05,1.7,66.94 +425,30,2.7,111.05,1.7,66.9375 +426,30,2.7,111.05,1.7,66.935 +427,30,2.7,111.05,1.7,66.9325 +428,30,2.7,111.05,1.7,66.93 +429,30,2.7,111.05,1.7,66.9275 +430,30,2.7,111.05,1.7,66.925 +431,30,2.7,111.05,1.7,66.9225 +432,30,2.7,111.05,1.7,66.92 +433,30,2.7,111.05,1.7,66.9175 +434,30,2.7,111.05,1.7,66.915 +435,30,2.7,111.05,1.7,66.9125 +436,30,2.7,111.05,1.7,66.91 +437,30,2.7,111.05,1.7,66.9075 +438,30,2.7,111.05,1.7,66.905 +439,30,2.7,111.05,1.7,66.9025 +440,30,2.7,111.05,1.7,66.9 +441,30,2.7,111.05,1.7,66.8975 +442,30,2.7,111.05,1.7,66.895 +443,30,2.7,111.05,1.7,66.8925 +444,30,2.7,111.05,1.7,66.89 +445,30,2.7,111.05,1.7,66.8875 +446,30,2.7,111.05,1.7,66.885 +447,30,2.7,111.05,1.7,66.8825 +448,30,2.7,111.05,1.7,66.88 +449,30,2.7,111.05,1.7,66.8775 +450,30,2.7,111.05,1.7,66.875 +451,30,2.7,111.05,1.7,66.8725 +452,30,2.7,111.05,1.7,66.87 +453,30,2.7,111.05,1.7,66.8675 +454,30,2.7,111.05,1.7,66.865 +455,30,2.7,111.05,1.7,66.8625 +456,30,2.7,111.05,1.7,66.86 +457,30,2.7,111.05,1.7,66.8575 +458,30,2.7,111.05,1.7,66.855 +459,30,2.7,111.05,1.7,66.8525 +460,30,2.7,111.05,1.7,66.85 +461,30,2.7,111.05,1.7,66.8475 +462,30,2.7,111.05,1.7,66.845 +463,30,2.7,111.05,1.7,66.8425 +464,30,2.7,111.05,1.7,66.84 +465,30,2.7,111.05,1.7,66.8375 +466,30,2.7,111.05,1.7,66.835 +467,30,2.7,111.05,1.7,66.8325 +468,30,2.7,111.05,1.7,66.83 +469,30,2.7,111.05,1.7,66.8275 +470,30,2.7,111.05,1.7,66.825 +471,30,2.7,111.05,1.7,66.8225 +472,30,2.7,111.05,1.7,66.82 +473,30,2.7,111.05,1.7,66.8175 +474,30,2.7,111.05,1.7,66.815 +475,30,2.7,111.05,1.7,66.8125 +476,30,2.7,111.05,1.7,66.81 +477,30,2.7,111.05,1.7,66.8075 +478,30,2.7,111.05,1.7,66.805 +479,30,2.7,111.05,1.7,66.8025 +480,30,2.7,111.05,1.7,66.8 +481,30,2.7,111.05,1.7,66.7975 +482,30,2.7,111.05,1.7,66.795 +483,30,2.7,111.05,1.7,66.7925 +484,30,2.7,111.05,1.7,66.79 +485,30,2.7,111.05,1.7,66.7875 +486,30,2.7,111.05,1.7,66.785 +487,30,2.7,111.05,1.7,66.7825 +488,30,2.7,111.05,1.7,66.78 +489,30,2.7,111.05,1.7,66.7775 +490,30,2.7,111.05,1.7,66.775 +491,30,2.7,111.05,1.7,66.7725 +492,30,2.7,111.05,1.7,66.77 +493,30,2.7,111.05,1.7,66.7675 +494,30,2.7,111.05,1.7,66.765 +495,30,2.7,111.05,1.7,66.7625 +496,30,2.7,111.05,1.7,66.76 +497,30,2.7,111.05,1.7,66.7575 +498,30,2.7,111.05,1.7,66.755 +499,30,2.7,111.05,1.7,66.7525 +500,30,2.7,111.05,1.7,66.75 +501,30,2.7,111.05,1.7,66.7475 +502,30,2.7,111.05,1.7,66.745 +503,30,2.7,111.05,1.7,66.7425 +504,30,2.7,111.05,1.7,66.74 +505,30,2.7,111.05,1.7,66.7375 +506,30,2.7,111.05,1.7,66.735 +507,30,2.7,111.05,1.7,66.7325 +508,30,2.7,111.05,1.7,66.73 +509,30,2.7,111.05,1.7,66.7275 +510,30,2.7,111.05,1.7,66.725 +511,30,2.7,111.05,1.7,66.7225 +512,30,2.7,111.05,1.7,66.72 +513,30,2.7,111.05,1.7,66.7175 +514,30,2.7,111.05,1.7,66.715 +515,30,2.7,111.05,1.7,66.7125 +516,30,2.7,111.05,1.7,66.71 +517,30,2.7,111.05,1.7,66.7075 +518,30,2.7,111.05,1.7,66.705 +519,30,2.7,111.05,1.7,66.7025 +520,30,2.7,111.05,1.7,66.7 +521,30,2.7,111.05,1.7,66.6975 +522,30,2.7,111.05,1.7,66.695 +523,30,2.7,111.05,1.7,66.6925 +524,30,2.7,111.05,1.7,66.69 +525,30,2.7,111.05,1.7,66.6875 +526,30,2.7,111.05,1.7,66.685 +527,30,2.7,111.05,1.7,66.6825 +528,30,2.7,111.05,1.7,66.68 +529,30,2.7,111.05,1.7,66.6775 +530,30,2.7,111.05,1.7,66.675 +531,30,2.7,111.05,1.7,66.6725 +532,30,2.7,111.05,1.7,66.67 +533,30,2.7,111.05,1.7,66.6675 +534,30,2.7,111.05,1.7,66.665 +535,30,2.7,111.05,1.7,66.6625 +536,30,2.7,111.05,1.7,66.66 +537,30,2.7,111.05,1.7,66.6575 +538,30,2.7,111.05,1.7,66.655 +539,30,2.7,111.05,1.7,66.6525 +540,30,2.7,111.05,1.7,66.65 +541,30,2.7,111.05,1.7,66.6475 +542,30,2.7,111.05,1.7,66.645 +543,30,2.7,111.05,1.7,66.6425 +544,30,2.7,111.05,1.7,66.64 +545,30,2.7,111.05,1.7,66.6375 +546,30,2.7,111.05,1.7,66.635 +547,30,2.7,111.05,1.7,66.6325 +548,30,2.7,111.05,1.7,66.63 +549,30,2.7,111.05,1.7,66.6275 +550,30,2.7,111.05,1.7,66.625 +551,30,2.7,111.05,1.7,66.6225 +552,30,2.7,111.05,1.7,66.62 +553,30,2.7,111.05,1.7,66.6175 +554,30,2.7,111.05,1.7,66.615 +555,30,2.7,111.05,1.7,66.6125 +556,30,2.7,111.05,1.7,66.61 +557,30,2.7,111.05,1.7,66.6075 +558,30,2.7,111.05,1.7,66.605 +559,30,2.7,111.05,1.7,66.6025 +560,30,2.7,111.05,1.7,66.6 +561,30,2.7,111.05,1.7,66.5975 +562,30,2.7,111.05,1.7,66.595 +563,30,2.7,111.05,1.7,66.5925 +564,30,2.7,111.05,1.7,66.59 +565,30,2.7,111.05,1.7,66.5875 +566,30,2.7,111.05,1.7,66.585 +567,30,2.7,111.05,1.7,66.5825 +568,30,2.7,111.05,1.7,66.58 +569,30,2.7,111.05,1.7,66.5775 +570,30,2.7,111.05,1.7,66.575 +571,30,2.7,111.05,1.7,66.5725 +572,30,2.7,111.05,1.7,66.57 +573,30,2.7,111.05,1.7,66.5675 +574,30,2.7,111.05,1.7,66.565 +575,30,2.7,111.05,1.7,66.5625 +576,30,2.7,111.05,1.7,66.56 +577,30,2.7,111.05,1.7,66.5575 +578,30,2.7,111.05,1.7,66.555 +579,30,2.7,111.05,1.7,66.5525 +580,30,2.7,111.05,1.7,66.55 +581,30,2.7,111.05,1.7,66.5475 +582,30,2.7,111.05,1.7,66.545 +583,30,2.7,111.05,1.7,66.5425 +584,30,2.7,111.05,1.7,66.54 +585,30,2.7,111.05,1.7,66.5375 +586,30,2.7,111.05,1.7,66.535 +587,30,2.7,111.05,1.7,66.5325 +588,30,2.7,111.05,1.7,66.53 +589,30,2.7,111.05,1.7,66.5275 +590,30,2.7,111.05,1.7,66.525 +591,30,2.7,111.05,1.7,66.5225 +592,30,2.7,111.05,1.7,66.52 +593,30,2.7,111.05,1.7,66.5175 +594,30,2.7,111.05,1.7,66.515 +595,30,2.7,111.05,1.7,66.5125 +596,30,2.7,111.05,1.7,66.51 +597,30,2.7,111.05,1.7,66.5075 +598,30,2.7,111.05,1.7,66.505 +599,30,2.7,111.05,1.7,66.5025 +600,30,2.7,111.05,1.7,66.5 +601,30,2.7,111.05,1.7,66.495 +602,30,2.7,111.05,1.7,66.49 +603,30,2.7,111.05,1.7,66.485 +604,30,2.7,111.05,1.7,66.48 +605,30,2.7,111.05,1.7,66.475 +606,30,2.7,111.05,1.7,66.47 +607,30,2.7,111.05,1.7,66.465 +608,30,2.7,111.05,1.7,66.46 +609,30,2.7,111.05,1.7,66.455 +610,30,2.7,111.05,1.7,66.45 +611,30,2.7,111.05,1.7,66.445 +612,30,2.7,111.05,1.7,66.44 +613,30,2.7,111.05,1.7,66.435 +614,30,2.7,111.05,1.7,66.43 +615,30,2.7,111.05,1.7,66.425 +616,30,2.7,111.05,1.7,66.42 +617,30,2.7,111.05,1.7,66.415 +618,30,2.7,111.05,1.7,66.41 +619,30,2.7,111.05,1.7,66.405 +620,30,2.7,111.05,1.7,66.4 +621,30,2.7,111.05,1.7,66.395 +622,30,2.7,111.05,1.7,66.39 +623,30,2.7,111.05,1.7,66.385 +624,30,2.7,111.05,1.7,66.38 +625,30,2.7,111.05,1.7,66.375 +626,30,2.7,111.05,1.7,66.37 +627,30,2.7,111.05,1.7,66.365 +628,30,2.7,111.05,1.7,66.36 +629,30,2.7,111.05,1.7,66.355 +630,30,2.7,111.05,1.7,66.35 +631,30,2.7,111.05,1.7,66.345 +632,30,2.7,111.05,1.7,66.34 +633,30,2.7,111.05,1.7,66.335 +634,30,2.7,111.05,1.7,66.33 +635,30,2.7,111.05,1.7,66.325 +636,30,2.7,111.05,1.7,66.32 +637,30,2.7,111.05,1.7,66.315 +638,30,2.7,111.05,1.7,66.31 +639,30,2.7,111.05,1.7,66.305 +640,30,2.7,111.05,1.7,66.3 +641,30,2.7,111.05,1.7,66.295 +642,30,2.7,111.05,1.7,66.29 +643,30,2.7,111.05,1.7,66.285 +644,30,2.7,111.05,1.7,66.28 +645,30,2.7,111.05,1.7,66.275 +646,30,2.7,111.05,1.7,66.27 +647,30,2.7,111.05,1.7,66.265 +648,30,2.7,111.05,1.7,66.26 +649,30,2.7,111.05,1.7,66.255 +650,30,2.7,111.05,1.7,66.25 +651,30,2.7,111.05,1.7,66.245 +652,30,2.7,111.05,1.7,66.24 +653,30,2.7,111.05,1.7,66.235 +654,30,2.7,111.05,1.7,66.23 +655,30,2.7,111.05,1.7,66.225 +656,30,2.7,111.05,1.7,66.22 +657,30,2.7,111.05,1.7,66.215 +658,30,2.7,111.05,1.7,66.21 +659,30,2.7,111.05,1.7,66.205 +660,30,2.7,111.05,1.7,66.2 +661,30,2.7,111.05,1.7,66.195 +662,30,2.7,111.05,1.7,66.19 +663,30,2.7,111.05,1.7,66.185 +664,30,2.7,111.05,1.7,66.18 +665,30,2.7,111.05,1.7,66.175 +666,30,2.7,111.05,1.7,66.17 +667,30,2.7,111.05,1.7,66.165 +668,30,2.7,111.05,1.7,66.16 +669,30,2.7,111.05,1.7,66.155 +670,30,2.7,111.05,1.7,66.15 +671,30,2.7,111.05,1.7,66.145 +672,30,2.7,111.05,1.7,66.14 +673,30,2.7,111.05,1.7,66.135 +674,30,2.7,111.05,1.7,66.13 +675,30,2.7,111.05,1.7,66.125 +676,30,2.7,111.05,1.7,66.12 +677,30,2.7,111.05,1.7,66.115 +678,30,2.7,111.05,1.7,66.11 +679,30,2.7,111.05,1.7,66.105 +680,30,2.7,111.05,1.7,66.1 +681,30,2.7,111.05,1.7,66.095 +682,30,2.7,111.05,1.7,66.09 +683,30,2.7,111.05,1.7,66.085 +684,30,2.7,111.05,1.7,66.08 +685,30,2.7,111.05,1.7,66.075 +686,30,2.7,111.05,1.7,66.07 +687,30,2.7,111.05,1.7,66.065 +688,30,2.7,111.05,1.7,66.06 +689,30,2.7,111.05,1.7,66.055 +690,30,2.7,111.05,1.7,66.05 +691,30,2.7,111.05,1.7,66.045 +692,30,2.7,111.05,1.7,66.04 +693,30,2.7,111.05,1.7,66.035 +694,30,2.7,111.05,1.7,66.03 +695,30,2.7,111.05,1.7,66.025 +696,30,2.7,111.05,1.7,66.02 +697,30,2.7,111.05,1.7,66.015 +698,30,2.7,111.05,1.7,66.01 +699,30,2.7,111.05,1.7,66.005 +700,30,2.7,111.05,1.7,66 +701,30,2.7,111.05,1.7,65.995 +702,30,2.7,111.05,1.7,65.99 +703,30,2.7,111.05,1.7,65.985 +704,30,2.7,111.05,1.7,65.98 +705,30,2.7,111.05,1.7,65.975 +706,30,2.7,111.05,1.7,65.97 +707,30,2.7,111.05,1.7,65.965 +708,30,2.7,111.05,1.7,65.96 +709,30,2.7,111.05,1.7,65.955 +710,30,2.7,111.05,1.7,65.95 +711,30,2.7,111.05,1.7,65.945 +712,30,2.7,111.05,1.7,65.94 +713,30,2.7,111.05,1.7,65.935 +714,30,2.7,111.05,1.7,65.93 +715,30,2.7,111.05,1.7,65.925 +716,30,2.7,111.05,1.7,65.92 +717,30,2.7,111.05,1.7,65.915 +718,30,2.7,111.05,1.7,65.91 +719,30,2.7,111.05,1.7,65.905 +720,30,2.7,111.05,1.7,65.9 +721,30,2.7,111.05,1.7,65.895 +722,30,2.7,111.05,1.7,65.89 +723,30,2.7,111.05,1.7,65.885 +724,30,2.7,111.05,1.7,65.88 +725,30,2.7,111.05,1.7,65.875 +726,30,2.7,111.05,1.7,65.87 +727,30,2.7,111.05,1.7,65.865 +728,30,2.7,111.05,1.7,65.86 +729,30,2.7,111.05,1.7,65.855 +730,30,2.7,111.05,1.7,65.85 +731,30,2.7,111.05,1.7,65.845 +732,30,2.7,111.05,1.7,65.84 +733,30,2.7,111.05,1.7,65.835 +734,30,2.7,111.05,1.7,65.83 +735,30,2.7,111.05,1.7,65.825 +736,30,2.7,111.05,1.7,65.82 +737,30,2.7,111.05,1.7,65.815 +738,30,2.7,111.05,1.7,65.81 +739,30,2.7,111.05,1.7,65.805 +740,30,2.7,111.05,1.7,65.8 +741,30,2.7,111.05,1.7,65.795 +742,30,2.7,111.05,1.7,65.79 +743,30,2.7,111.05,1.7,65.785 +744,30,2.7,111.05,1.7,65.78 +745,30,2.7,111.05,1.7,65.775 +746,30,2.7,111.05,1.7,65.77 +747,30,2.7,111.05,1.7,65.765 +748,30,2.7,111.05,1.7,65.76 +749,30,2.7,111.05,1.7,65.755 +750,30,2.7,111.05,1.7,65.75 +751,30,2.7,111.05,1.7,65.745 +752,30,2.7,111.05,1.7,65.74 +753,30,2.7,111.05,1.7,65.735 +754,30,2.7,111.05,1.7,65.73 +755,30,2.7,111.05,1.7,65.725 +756,30,2.7,111.05,1.7,65.72 +757,30,2.7,111.05,1.7,65.715 +758,30,2.7,111.05,1.7,65.71 +759,30,2.7,111.05,1.7,65.705 +760,30,2.7,111.05,1.7,65.7 +761,30,2.7,111.05,1.7,65.695 +762,30,2.7,111.05,1.7,65.69 +763,30,2.7,111.05,1.7,65.685 +764,30,2.7,111.05,1.7,65.68 +765,30,2.7,111.05,1.7,65.675 +766,30,2.7,111.05,1.7,65.67 +767,30,2.7,111.05,1.7,65.665 +768,30,2.7,111.05,1.7,65.66 +769,30,2.7,111.05,1.7,65.655 +770,30,2.7,111.05,1.7,65.65 +771,30,2.7,111.05,1.7,65.645 +772,30,2.7,111.05,1.7,65.64 +773,30,2.7,111.05,1.7,65.635 +774,30,2.7,111.05,1.7,65.63 +775,30,2.7,111.05,1.7,65.625 +776,30,2.7,111.05,1.7,65.62 +777,30,2.7,111.05,1.7,65.615 +778,30,2.7,111.05,1.7,65.61 +779,30,2.7,111.05,1.7,65.605 +780,30,2.7,111.05,1.7,65.6 +781,30,2.7,111.05,1.7,65.595 +782,30,2.7,111.05,1.7,65.59 +783,30,2.7,111.05,1.7,65.585 +784,30,2.7,111.05,1.7,65.58 +785,30,2.7,111.05,1.7,65.575 +786,30,2.7,111.05,1.7,65.57 +787,30,2.7,111.05,1.7,65.565 +788,30,2.7,111.05,1.7,65.56 +789,30,2.7,111.05,1.7,65.555 +790,30,2.7,111.05,1.7,65.55 +791,30,2.7,111.05,1.7,65.545 +792,30,2.7,111.05,1.7,65.54 +793,30,2.7,111.05,1.7,65.535 +794,30,2.7,111.05,1.7,65.53 +795,30,2.7,111.05,1.7,65.525 +796,30,2.7,111.05,1.7,65.52 +797,30,2.7,111.05,1.7,65.515 +798,30,2.7,111.05,1.7,65.51 +799,30,2.7,111.05,1.7,65.505 +800,30,2.7,111.05,1.7,65.5 +801,30,2.7,111.05,1.7,65.495 +802,30,2.7,111.05,1.7,65.49 +803,30,2.7,111.05,1.7,65.485 +804,30,2.7,111.05,1.7,65.48 +805,30,2.7,111.05,1.7,65.475 +806,30,2.7,111.05,1.7,65.47 +807,30,2.7,111.05,1.7,65.465 +808,30,2.7,111.05,1.7,65.46 +809,30,2.7,111.05,1.7,65.455 +810,30,2.7,111.05,1.7,65.45 +811,30,2.7,111.05,1.7,65.445 +812,30,2.7,111.05,1.7,65.44 +813,30,2.7,111.05,1.7,65.435 +814,30,2.7,111.05,1.7,65.43 +815,30,2.7,111.05,1.7,65.425 +816,30,2.7,111.05,1.7,65.42 +817,30,2.7,111.05,1.7,65.415 +818,30,2.7,111.05,1.7,65.41 +819,30,2.7,111.05,1.7,65.405 +820,30,2.7,111.05,1.7,65.4 +821,30,2.7,111.05,1.7,65.395 +822,30,2.7,111.05,1.7,65.39 +823,30,2.7,111.05,1.7,65.385 +824,30,2.7,111.05,1.7,65.38 +825,30,2.7,111.05,1.7,65.375 +826,30,2.7,111.05,1.7,65.37 +827,30,2.7,111.05,1.7,65.365 +828,30,2.7,111.05,1.7,65.36 +829,30,2.7,111.05,1.7,65.355 +830,30,2.7,111.05,1.7,65.35 +831,30,2.7,111.05,1.7,65.345 +832,30,2.7,111.05,1.7,65.34 +833,30,2.7,111.05,1.7,65.335 +834,30,2.7,111.05,1.7,65.33 +835,30,2.7,111.05,1.7,65.325 +836,30,2.7,111.05,1.7,65.32 +837,30,2.7,111.05,1.7,65.315 +838,30,2.7,111.05,1.7,65.31 +839,30,2.7,111.05,1.7,65.305 +840,30,2.7,111.05,1.7,65.3 +841,30,2.7,111.05,1.7,65.295 +842,30,2.7,111.05,1.7,65.29 +843,30,2.7,111.05,1.7,65.285 +844,30,2.7,111.05,1.7,65.28 +845,30,2.7,111.05,1.7,65.275 +846,30,2.7,111.05,1.7,65.27 +847,30,2.7,111.05,1.7,65.265 +848,30,2.7,111.05,1.7,65.26 +849,30,2.7,111.05,1.7,65.255 +850,30,2.7,111.05,1.7,65.25 +851,30,2.7,111.05,1.7,65.245 +852,30,2.7,111.05,1.7,65.24 +853,30,2.7,111.05,1.7,65.235 +854,30,2.7,111.05,1.7,65.23 +855,30,2.7,111.05,1.7,65.225 +856,30,2.7,111.05,1.7,65.22 +857,30,2.7,111.05,1.7,65.215 +858,30,2.7,111.05,1.7,65.21 +859,30,2.7,111.05,1.7,65.205 +860,30,2.7,111.05,1.7,65.2 +861,30,2.7,111.05,1.7,65.195 +862,30,2.7,111.05,1.7,65.19 +863,30,2.7,111.05,1.7,65.185 +864,30,2.7,111.05,1.7,65.18 +865,30,2.7,111.05,1.7,65.175 +866,30,2.7,111.05,1.7,65.17 +867,30,2.7,111.05,1.7,65.165 +868,30,2.7,111.05,1.7,65.16 +869,30,2.7,111.05,1.7,65.155 +870,30,2.7,111.05,1.7,65.15 +871,30,2.7,111.05,1.7,65.145 +872,30,2.7,111.05,1.7,65.14 +873,30,2.7,111.05,1.7,65.135 +874,30,2.7,111.05,1.7,65.13 +875,30,2.7,111.05,1.7,65.125 +876,30,2.7,111.05,1.7,65.12 +877,30,2.7,111.05,1.7,65.115 +878,30,2.7,111.05,1.7,65.11 +879,30,2.7,111.05,1.7,65.105 +880,30,2.7,111.05,1.7,65.1 +881,30,2.7,111.05,1.7,65.095 +882,30,2.7,111.05,1.7,65.09 +883,30,2.7,111.05,1.7,65.085 +884,30,2.7,111.05,1.7,65.08 +885,30,2.7,111.05,1.7,65.075 +886,30,2.7,111.05,1.7,65.07 +887,30,2.7,111.05,1.7,65.065 +888,30,2.7,111.05,1.7,65.06 +889,30,2.7,111.05,1.7,65.055 +890,30,2.7,111.05,1.7,65.05 +891,30,2.7,111.05,1.7,65.045 +892,30,2.7,111.05,1.7,65.04 +893,30,2.7,111.05,1.7,65.035 +894,30,2.7,111.05,1.7,65.03 +895,30,2.7,111.05,1.7,65.025 +896,30,2.7,111.05,1.7,65.02 +897,30,2.7,111.05,1.7,65.015 +898,30,2.7,111.05,1.7,65.01 +899,30,2.7,111.05,1.7,65.005 +900,30,2.7,111.05,1.7,65 +901,30,2.7,111.05,1.7,64.99833333 +902,30,2.7,111.05,1.7,64.99666667 +903,30,2.7,111.05,1.7,64.995 +904,30,2.7,111.05,1.7,64.99333333 +905,30,2.7,111.05,1.7,64.99166667 +906,30,2.7,111.05,1.7,64.99 +907,30,2.7,111.05,1.7,64.98833333 +908,30,2.7,111.05,1.7,64.98666667 +909,30,2.7,111.05,1.7,64.985 +910,30,2.7,111.05,1.7,64.98333333 +911,30,2.7,111.05,1.7,64.98166667 +912,30,2.7,111.05,1.7,64.98 +913,30,2.7,111.05,1.7,64.97833333 +914,30,2.7,111.05,1.7,64.97666667 +915,30,2.7,111.05,1.7,64.975 +916,30,2.7,111.05,1.7,64.97333333 +917,30,2.7,111.05,1.7,64.97166667 +918,30,2.7,111.05,1.7,64.97 +919,30,2.7,111.05,1.7,64.96833333 +920,30,2.7,111.05,1.7,64.96666667 +921,30,2.7,111.05,1.7,64.965 +922,30,2.7,111.05,1.7,64.96333333 +923,30,2.7,111.05,1.7,64.96166667 +924,30,2.7,111.05,1.7,64.96 +925,30,2.7,111.05,1.7,64.95833333 +926,30,2.7,111.05,1.7,64.95666667 +927,30,2.7,111.05,1.7,64.955 +928,30,2.7,111.05,1.7,64.95333333 +929,30,2.7,111.05,1.7,64.95166667 +930,30,2.7,111.05,1.7,64.95 +931,30,2.7,111.05,1.7,64.94833333 +932,30,2.7,111.05,1.7,64.94666667 +933,30,2.7,111.05,1.7,64.945 +934,30,2.7,111.05,1.7,64.94333333 +935,30,2.7,111.05,1.7,64.94166667 +936,30,2.7,111.05,1.7,64.94 +937,30,2.7,111.05,1.7,64.93833333 +938,30,2.7,111.05,1.7,64.93666667 +939,30,2.7,111.05,1.7,64.935 +940,30,2.7,111.05,1.7,64.93333333 +941,30,2.7,111.05,1.7,64.93166667 +942,30,2.7,111.05,1.7,64.93 +943,30,2.7,111.05,1.7,64.92833333 +944,30,2.7,111.05,1.7,64.92666667 +945,30,2.7,111.05,1.7,64.925 +946,30,2.7,111.05,1.7,64.92333333 +947,30,2.7,111.05,1.7,64.92166667 +948,30,2.7,111.05,1.7,64.92 +949,30,2.7,111.05,1.7,64.91833333 +950,30,2.7,111.05,1.7,64.91666667 +951,30,2.7,111.05,1.7,64.915 +952,30,2.7,111.05,1.7,64.91333333 +953,30,2.7,111.05,1.7,64.91166666 +954,30,2.7,111.05,1.7,64.91 +955,30,2.7,111.05,1.7,64.90833333 +956,30,2.7,111.05,1.7,64.90666666 +957,30,2.7,111.05,1.7,64.905 +958,30,2.7,111.05,1.7,64.90333333 +959,30,2.7,111.05,1.7,64.90166666 +960,30,2.7,111.05,1.7,64.9 +961,30,2.7,111.05,1.7,64.89833333 +962,30,2.7,111.05,1.7,64.89666666 +963,30,2.7,111.05,1.7,64.895 +964,30,2.7,111.05,1.7,64.89333333 +965,30,2.7,111.05,1.7,64.89166666 +966,30,2.7,111.05,1.7,64.89 +967,30,2.7,111.05,1.7,64.88833333 +968,30,2.7,111.05,1.7,64.88666666 +969,30,2.7,111.05,1.7,64.885 +970,30,2.7,111.05,1.7,64.88333333 +971,30,2.7,111.05,1.7,64.88166666 +972,30,2.7,111.05,1.7,64.88 +973,30,2.7,111.05,1.7,64.87833333 +974,30,2.7,111.05,1.7,64.87666666 +975,30,2.7,111.05,1.7,64.875 +976,30,2.7,111.05,1.7,64.87333333 +977,30,2.7,111.05,1.7,64.87166666 +978,30,2.7,111.05,1.7,64.87 +979,30,2.7,111.05,1.7,64.86833333 +980,30,2.7,111.05,1.7,64.86666666 +981,30,2.7,111.05,1.7,64.865 +982,30,2.7,111.05,1.7,64.86333333 +983,30,2.7,111.05,1.7,64.86166666 +984,30,2.7,111.05,1.7,64.86 +985,30,2.7,111.05,1.7,64.85833333 +986,30,2.7,111.05,1.7,64.85666666 +987,30,2.7,111.05,1.7,64.855 +988,30,2.7,111.05,1.7,64.85333333 +989,30,2.7,111.05,1.7,64.85166666 +990,30,2.7,111.05,1.7,64.85 +991,30,2.7,111.05,1.7,64.84833333 +992,30,2.7,111.05,1.7,64.84666666 +993,30,2.7,111.05,1.7,64.845 +994,30,2.7,111.05,1.7,64.84333333 +995,30,2.7,111.05,1.7,64.84166666 +996,30,2.7,111.05,1.7,64.84 +997,30,2.7,111.05,1.7,64.83833333 +998,30,2.7,111.05,1.7,64.83666666 +999,30,2.7,111.05,1.7,64.835 +1000,30,2.7,111.05,1.7,64.83333333 +1001,30,2.7,111.05,1.7,64.83166666 +1002,30,2.7,111.05,1.7,64.83 +1003,30,2.7,111.05,1.7,64.82833333 +1004,30,2.7,111.05,1.7,64.82666666 +1005,30,2.7,111.05,1.7,64.825 +1006,30,2.7,111.05,1.7,64.82333333 +1007,30,2.7,111.05,1.7,64.82166666 +1008,30,2.7,111.05,1.7,64.82 +1009,30,2.7,111.05,1.7,64.81833333 +1010,30,2.7,111.05,1.7,64.81666666 +1011,30,2.7,111.05,1.7,64.815 +1012,30,2.7,111.05,1.7,64.81333333 +1013,30,2.7,111.05,1.7,64.81166666 +1014,30,2.7,111.05,1.7,64.81 +1015,30,2.7,111.05,1.7,64.80833333 +1016,30,2.7,111.05,1.7,64.80666666 +1017,30,2.7,111.05,1.7,64.805 +1018,30,2.7,111.05,1.7,64.80333333 +1019,30,2.7,111.05,1.7,64.80166666 +1020,30,2.7,111.05,1.7,64.8 +1021,30,2.7,111.05,1.7,64.79833333 +1022,30,2.7,111.05,1.7,64.79666666 +1023,30,2.7,111.05,1.7,64.795 +1024,30,2.7,111.05,1.7,64.79333333 +1025,30,2.7,111.05,1.7,64.79166666 +1026,30,2.7,111.05,1.7,64.79 +1027,30,2.7,111.05,1.7,64.78833333 +1028,30,2.7,111.05,1.7,64.78666666 +1029,30,2.7,111.05,1.7,64.785 +1030,30,2.7,111.05,1.7,64.78333333 +1031,30,2.7,111.05,1.7,64.78166666 +1032,30,2.7,111.05,1.7,64.78 +1033,30,2.7,111.05,1.7,64.77833333 +1034,30,2.7,111.05,1.7,64.77666666 +1035,30,2.7,111.05,1.7,64.775 +1036,30,2.7,111.05,1.7,64.77333333 +1037,30,2.7,111.05,1.7,64.77166666 +1038,30,2.7,111.05,1.7,64.77 +1039,30,2.7,111.05,1.7,64.76833333 +1040,30,2.7,111.05,1.7,64.76666666 +1041,30,2.7,111.05,1.7,64.765 +1042,30,2.7,111.05,1.7,64.76333333 +1043,30,2.7,111.05,1.7,64.76166666 +1044,30,2.7,111.05,1.7,64.76 +1045,30,2.7,111.05,1.7,64.75833333 +1046,30,2.7,111.05,1.7,64.75666666 +1047,30,2.7,111.05,1.7,64.755 +1048,30,2.7,111.05,1.7,64.75333333 +1049,30,2.7,111.05,1.7,64.75166666 +1050,30,2.7,111.05,1.7,64.75 +1051,30,2.7,111.05,1.7,64.74833333 +1052,30,2.7,111.05,1.7,64.74666666 +1053,30,2.7,111.05,1.7,64.74499999 +1054,30,2.7,111.05,1.7,64.74333333 +1055,30,2.7,111.05,1.7,64.74166666 +1056,30,2.7,111.05,1.7,64.73999999 +1057,30,2.7,111.05,1.7,64.73833333 +1058,30,2.7,111.05,1.7,64.73666666 +1059,30,2.7,111.05,1.7,64.73499999 +1060,30,2.7,111.05,1.7,64.73333333 +1061,30,2.7,111.05,1.7,64.73166666 +1062,30,2.7,111.05,1.7,64.72999999 +1063,30,2.7,111.05,1.7,64.72833333 +1064,30,2.7,111.05,1.7,64.72666666 +1065,30,2.7,111.05,1.7,64.72499999 +1066,30,2.7,111.05,1.7,64.72333333 +1067,30,2.7,111.05,1.7,64.72166666 +1068,30,2.7,111.05,1.7,64.71999999 +1069,30,2.7,111.05,1.7,64.71833333 +1070,30,2.7,111.05,1.7,64.71666666 +1071,30,2.7,111.05,1.7,64.71499999 +1072,30,2.7,111.05,1.7,64.71333333 +1073,30,2.7,111.05,1.7,64.71166666 +1074,30,2.7,111.05,1.7,64.70999999 +1075,30,2.7,111.05,1.7,64.70833333 +1076,30,2.7,111.05,1.7,64.70666666 +1077,30,2.7,111.05,1.7,64.70499999 +1078,30,2.7,111.05,1.7,64.70333333 +1079,30,2.7,111.05,1.7,64.70166666 +1080,30,2.7,111.05,1.7,64.69999999 +1081,30,2.7,111.05,1.7,64.69833333 +1082,30,2.7,111.05,1.7,64.69666666 +1083,30,2.7,111.05,1.7,64.69499999 +1084,30,2.7,111.05,1.7,64.69333333 +1085,30,2.7,111.05,1.7,64.69166666 +1086,30,2.7,111.05,1.7,64.68999999 +1087,30,2.7,111.05,1.7,64.68833333 +1088,30,2.7,111.05,1.7,64.68666666 +1089,30,2.7,111.05,1.7,64.68499999 +1090,30,2.7,111.05,1.7,64.68333333 +1091,30,2.7,111.05,1.7,64.68166666 +1092,30,2.7,111.05,1.7,64.67999999 +1093,30,2.7,111.05,1.7,64.67833333 +1094,30,2.7,111.05,1.7,64.67666666 +1095,30,2.7,111.05,1.7,64.67499999 +1096,30,2.7,111.05,1.7,64.67333333 +1097,30,2.7,111.05,1.7,64.67166666 +1098,30,2.7,111.05,1.7,64.66999999 +1099,30,2.7,111.05,1.7,64.66833333 +1100,30,2.7,111.05,1.7,64.66666666 +1101,30,2.7,111.05,1.7,64.66499999 +1102,30,2.7,111.05,1.7,64.66333333 +1103,30,2.7,111.05,1.7,64.66166666 +1104,30,2.7,111.05,1.7,64.65999999 +1105,30,2.7,111.05,1.7,64.65833333 +1106,30,2.7,111.05,1.7,64.65666666 +1107,30,2.7,111.05,1.7,64.65499999 +1108,30,2.7,111.05,1.7,64.65333333 +1109,30,2.7,111.05,1.7,64.65166666 +1110,30,2.7,111.05,1.7,64.64999999 +1111,30,2.7,111.05,1.7,64.64833333 +1112,30,2.7,111.05,1.7,64.64666666 +1113,30,2.7,111.05,1.7,64.64499999 +1114,30,2.7,111.05,1.7,64.64333333 +1115,30,2.7,111.05,1.7,64.64166666 +1116,30,2.7,111.05,1.7,64.63999999 +1117,30,2.7,111.05,1.7,64.63833333 +1118,30,2.7,111.05,1.7,64.63666666 +1119,30,2.7,111.05,1.7,64.63499999 +1120,30,2.7,111.05,1.7,64.63333333 +1121,30,2.7,111.05,1.7,64.63166666 +1122,30,2.7,111.05,1.7,64.62999999 +1123,30,2.7,111.05,1.7,64.62833333 +1124,30,2.7,111.05,1.7,64.62666666 +1125,30,2.7,111.05,1.7,64.62499999 +1126,30,2.7,111.05,1.7,64.62333333 +1127,30,2.7,111.05,1.7,64.62166666 +1128,30,2.7,111.05,1.7,64.61999999 +1129,30,2.7,111.05,1.7,64.61833333 +1130,30,2.7,111.05,1.7,64.61666666 +1131,30,2.7,111.05,1.7,64.61499999 +1132,30,2.7,111.05,1.7,64.61333333 +1133,30,2.7,111.05,1.7,64.61166666 +1134,30,2.7,111.05,1.7,64.60999999 +1135,30,2.7,111.05,1.7,64.60833333 +1136,30,2.7,111.05,1.7,64.60666666 +1137,30,2.7,111.05,1.7,64.60499999 +1138,30,2.7,111.05,1.7,64.60333333 +1139,30,2.7,111.05,1.7,64.60166666 +1140,30,2.7,111.05,1.7,64.59999999 +1141,30,2.7,111.05,1.7,64.59833333 +1142,30,2.7,111.05,1.7,64.59666666 +1143,30,2.7,111.05,1.7,64.59499999 +1144,30,2.7,111.05,1.7,64.59333333 +1145,30,2.7,111.05,1.7,64.59166666 +1146,30,2.7,111.05,1.7,64.58999999 +1147,30,2.7,111.05,1.7,64.58833333 +1148,30,2.7,111.05,1.7,64.58666666 +1149,30,2.7,111.05,1.7,64.58499999 +1150,30,2.7,111.05,1.7,64.58333333 +1151,30,2.7,111.05,1.7,64.58166666 +1152,30,2.7,111.05,1.7,64.57999999 +1153,30,2.7,111.05,1.7,64.57833332 +1154,30,2.7,111.05,1.7,64.57666666 +1155,30,2.7,111.05,1.7,64.57499999 +1156,30,2.7,111.05,1.7,64.57333332 +1157,30,2.7,111.05,1.7,64.57166666 +1158,30,2.7,111.05,1.7,64.56999999 +1159,30,2.7,111.05,1.7,64.56833332 +1160,30,2.7,111.05,1.7,64.56666666 +1161,30,2.7,111.05,1.7,64.56499999 +1162,30,2.7,111.05,1.7,64.56333332 +1163,30,2.7,111.05,1.7,64.56166666 +1164,30,2.7,111.05,1.7,64.55999999 +1165,30,2.7,111.05,1.7,64.55833332 +1166,30,2.7,111.05,1.7,64.55666666 +1167,30,2.7,111.05,1.7,64.55499999 +1168,30,2.7,111.05,1.7,64.55333332 +1169,30,2.7,111.05,1.7,64.55166666 +1170,30,2.7,111.05,1.7,64.54999999 +1171,30,2.7,111.05,1.7,64.54833332 +1172,30,2.7,111.05,1.7,64.54666666 +1173,30,2.7,111.05,1.7,64.54499999 +1174,30,2.7,111.05,1.7,64.54333332 +1175,30,2.7,111.05,1.7,64.54166666 +1176,30,2.7,111.05,1.7,64.53999999 +1177,30,2.7,111.05,1.7,64.53833332 +1178,30,2.7,111.05,1.7,64.53666666 +1179,30,2.7,111.05,1.7,64.53499999 +1180,30,2.7,111.05,1.7,64.53333332 +1181,30,2.7,111.05,1.7,64.53166666 +1182,30,2.7,111.05,1.7,64.52999999 +1183,30,2.7,111.05,1.7,64.52833332 +1184,30,2.7,111.05,1.7,64.52666666 +1185,30,2.7,111.05,1.7,64.52499999 +1186,30,2.7,111.05,1.7,64.52333332 +1187,30,2.7,111.05,1.7,64.52166666 +1188,30,2.7,111.05,1.7,64.51999999 +1189,30,2.7,111.05,1.7,64.51833332 +1190,30,2.7,111.05,1.7,64.51666666 +1191,30,2.7,111.05,1.7,64.51499999 +1192,30,2.7,111.05,1.7,64.51333332 +1193,30,2.7,111.05,1.7,64.51166666 +1194,30,2.7,111.05,1.7,64.50999999 +1195,30,2.7,111.05,1.7,64.50833332 +1196,30,2.7,111.05,1.7,64.50666666 +1197,30,2.7,111.05,1.7,64.50499999 +1198,30,2.7,111.05,1.7,64.50333332 +1199,30,2.7,111.05,1.7,64.50166666 +1200,30,2.7,111.05,1.7,64.5 +1201,30,2.7,111.05,1.7,64.499375 +1202,30,2.7,111.05,1.7,64.49875 +1203,30,2.7,111.05,1.7,64.498125 +1204,30,2.7,111.05,1.7,64.4975 +1205,30,2.7,111.05,1.7,64.496875 +1206,30,2.7,111.05,1.7,64.49625 +1207,30,2.7,111.05,1.7,64.495625 +1208,30,2.7,111.05,1.7,64.495 +1209,30,2.7,111.05,1.7,64.494375 +1210,30,2.7,111.05,1.7,64.49375 +1211,30,2.7,111.05,1.7,64.493125 +1212,30,2.7,111.05,1.7,64.4925 +1213,30,2.7,111.05,1.7,64.491875 +1214,30,2.7,111.05,1.7,64.49125 +1215,30,2.7,111.05,1.7,64.490625 +1216,30,2.7,111.05,1.7,64.49 +1217,30,2.7,111.05,1.7,64.489375 +1218,30,2.7,111.05,1.7,64.48875 +1219,30,2.7,111.05,1.7,64.488125 +1220,30,2.7,111.05,1.7,64.4875 +1221,30,2.7,111.05,1.7,64.486875 +1222,30,2.7,111.05,1.7,64.48625 +1223,30,2.7,111.05,1.7,64.485625 +1224,30,2.7,111.05,1.7,64.485 +1225,30,2.7,111.05,1.7,64.484375 +1226,30,2.7,111.05,1.7,64.48375 +1227,30,2.7,111.05,1.7,64.483125 +1228,30,2.7,111.05,1.7,64.4825 +1229,30,2.7,111.05,1.7,64.481875 +1230,30,2.7,111.05,1.7,64.48125 +1231,30,2.7,111.05,1.7,64.480625 +1232,30,2.7,111.05,1.7,64.48 +1233,30,2.7,111.05,1.7,64.479375 +1234,30,2.7,111.05,1.7,64.47875 +1235,30,2.7,111.05,1.7,64.478125 +1236,30,2.7,111.05,1.7,64.4775 +1237,30,2.7,111.05,1.7,64.476875 +1238,30,2.7,111.05,1.7,64.47625 +1239,30,2.7,111.05,1.7,64.475625 +1240,30,2.7,111.05,1.7,64.475 +1241,30,2.7,111.05,1.7,64.474375 +1242,30,2.7,111.05,1.7,64.47375 +1243,30,2.7,111.05,1.7,64.473125 +1244,30,2.7,111.05,1.7,64.4725 +1245,30,2.7,111.05,1.7,64.471875 +1246,30,2.7,111.05,1.7,64.47125 +1247,30,2.7,111.05,1.7,64.470625 +1248,30,2.7,111.05,1.7,64.47 +1249,30,2.7,111.05,1.7,64.469375 +1250,30,2.7,111.05,1.7,64.46875 +1251,30,2.7,111.05,1.7,64.468125 +1252,30,2.7,111.05,1.7,64.4675 +1253,30,2.7,111.05,1.7,64.466875 +1254,30,2.7,111.05,1.7,64.46625 +1255,30,2.7,111.05,1.7,64.465625 +1256,30,2.7,111.05,1.7,64.465 +1257,30,2.7,111.05,1.7,64.464375 +1258,30,2.7,111.05,1.7,64.46375 +1259,30,2.7,111.05,1.7,64.463125 +1260,30,2.7,111.05,1.7,64.4625 +1261,30,2.7,111.05,1.7,64.461875 +1262,30,2.7,111.05,1.7,64.46125 +1263,30,2.7,111.05,1.7,64.460625 +1264,30,2.7,111.05,1.7,64.46 +1265,30,2.7,111.05,1.7,64.459375 +1266,30,2.7,111.05,1.7,64.45875 +1267,30,2.7,111.05,1.7,64.458125 +1268,30,2.7,111.05,1.7,64.4575 +1269,30,2.7,111.05,1.7,64.456875 +1270,30,2.7,111.05,1.7,64.45625 +1271,30,2.7,111.05,1.7,64.455625 +1272,30,2.7,111.05,1.7,64.455 +1273,30,2.7,111.05,1.7,64.454375 +1274,30,2.7,111.05,1.7,64.45375 +1275,30,2.7,111.05,1.7,64.453125 +1276,30,2.7,111.05,1.7,64.4525 +1277,30,2.7,111.05,1.7,64.451875 +1278,30,2.7,111.05,1.7,64.45125 +1279,30,2.7,111.05,1.7,64.450625 +1280,30,2.7,111.05,1.7,64.45 +1281,30,2.7,111.05,1.7,64.449375 +1282,30,2.7,111.05,1.7,64.44875 +1283,30,2.7,111.05,1.7,64.448125 +1284,30,2.7,111.05,1.7,64.4475 +1285,30,2.7,111.05,1.7,64.446875 +1286,30,2.7,111.05,1.7,64.44625 +1287,30,2.7,111.05,1.7,64.445625 +1288,30,2.7,111.05,1.7,64.445 +1289,30,2.7,111.05,1.7,64.444375 +1290,30,2.7,111.05,1.7,64.44375 +1291,30,2.7,111.05,1.7,64.443125 +1292,30,2.7,111.05,1.7,64.4425 +1293,30,2.7,111.05,1.7,64.441875 +1294,30,2.7,111.05,1.7,64.44125 +1295,30,2.7,111.05,1.7,64.440625 +1296,30,2.7,111.05,1.7,64.44 +1297,30,2.7,111.05,1.7,64.439375 +1298,30,2.7,111.05,1.7,64.43875 +1299,30,2.7,111.05,1.7,64.438125 +1300,30,2.7,111.05,1.7,64.4375 +1301,30,2.7,111.05,1.7,64.436875 +1302,30,2.7,111.05,1.7,64.43625 +1303,30,2.7,111.05,1.7,64.435625 +1304,30,2.7,111.05,1.7,64.435 +1305,30,2.7,111.05,1.7,64.434375 +1306,30,2.7,111.05,1.7,64.43375 +1307,30,2.7,111.05,1.7,64.433125 +1308,30,2.7,111.05,1.7,64.4325 +1309,30,2.7,111.05,1.7,64.431875 +1310,30,2.7,111.05,1.7,64.43125 +1311,30,2.7,111.05,1.7,64.430625 +1312,30,2.7,111.05,1.7,64.43 +1313,30,2.7,111.05,1.7,64.429375 +1314,30,2.7,111.05,1.7,64.42875 +1315,30,2.7,111.05,1.7,64.428125 +1316,30,2.7,111.05,1.7,64.4275 +1317,30,2.7,111.05,1.7,64.426875 +1318,30,2.7,111.05,1.7,64.42625 +1319,30,2.7,111.05,1.7,64.425625 +1320,30,2.7,111.05,1.7,64.425 +1321,30,2.7,111.05,1.7,64.424375 +1322,30,2.7,111.05,1.7,64.42375 +1323,30,2.7,111.05,1.7,64.423125 +1324,30,2.7,111.05,1.7,64.4225 +1325,30,2.7,111.05,1.7,64.421875 +1326,30,2.7,111.05,1.7,64.42125 +1327,30,2.7,111.05,1.7,64.420625 +1328,30,2.7,111.05,1.7,64.42 +1329,30,2.7,111.05,1.7,64.419375 +1330,30,2.7,111.05,1.7,64.41875 +1331,30,2.7,111.05,1.7,64.418125 +1332,30,2.7,111.05,1.7,64.4175 +1333,30,2.7,111.05,1.7,64.416875 +1334,30,2.7,111.05,1.7,64.41625 +1335,30,2.7,111.05,1.7,64.415625 +1336,30,2.7,111.05,1.7,64.415 +1337,30,2.7,111.05,1.7,64.414375 +1338,30,2.7,111.05,1.7,64.41375 +1339,30,2.7,111.05,1.7,64.413125 +1340,30,2.7,111.05,1.7,64.4125 +1341,30,2.7,111.05,1.7,64.411875 +1342,30,2.7,111.05,1.7,64.41125 +1343,30,2.7,111.05,1.7,64.410625 +1344,30,2.7,111.05,1.7,64.41 +1345,30,2.7,111.05,1.7,64.409375 +1346,30,2.7,111.05,1.7,64.40875 +1347,30,2.7,111.05,1.7,64.408125 +1348,30,2.7,111.05,1.7,64.4075 +1349,30,2.7,111.05,1.7,64.406875 +1350,30,2.7,111.05,1.7,64.40625 +1351,30,2.7,111.05,1.7,64.405625 +1352,30,2.7,111.05,1.7,64.405 +1353,30,2.7,111.05,1.7,64.404375 +1354,30,2.7,111.05,1.7,64.40375 +1355,30,2.7,111.05,1.7,64.403125 +1356,30,2.7,111.05,1.7,64.4025 +1357,30,2.7,111.05,1.7,64.401875 +1358,30,2.7,111.05,1.7,64.40125 +1359,30,2.7,111.05,1.7,64.400625 +1360,30,2.7,111.05,1.7,64.4 +1361,30,2.7,111.05,1.7,64.399375 +1362,30,2.7,111.05,1.7,64.39875 +1363,30,2.7,111.05,1.7,64.398125 +1364,30,2.7,111.05,1.7,64.3975 +1365,30,2.7,111.05,1.7,64.396875 +1366,30,2.7,111.05,1.7,64.39625 +1367,30,2.7,111.05,1.7,64.395625 +1368,30,2.7,111.05,1.7,64.395 +1369,30,2.7,111.05,1.7,64.394375 +1370,30,2.7,111.05,1.7,64.39375 +1371,30,2.7,111.05,1.7,64.393125 +1372,30,2.7,111.05,1.7,64.3925 +1373,30,2.7,111.05,1.7,64.391875 +1374,30,2.7,111.05,1.7,64.39125 +1375,30,2.7,111.05,1.7,64.390625 +1376,30,2.7,111.05,1.7,64.39 +1377,30,2.7,111.05,1.7,64.389375 +1378,30,2.7,111.05,1.7,64.38875 +1379,30,2.7,111.05,1.7,64.388125 +1380,30,2.7,111.05,1.7,64.3875 +1381,30,2.7,111.05,1.7,64.386875 +1382,30,2.7,111.05,1.7,64.38625 +1383,30,2.7,111.05,1.7,64.385625 +1384,30,2.7,111.05,1.7,64.385 +1385,30,2.7,111.05,1.7,64.384375 +1386,30,2.7,111.05,1.7,64.38375 +1387,30,2.7,111.05,1.7,64.383125 +1388,30,2.7,111.05,1.7,64.3825 +1389,30,2.7,111.05,1.7,64.381875 +1390,30,2.7,111.05,1.7,64.38125 +1391,30,2.7,111.05,1.7,64.380625 +1392,30,2.7,111.05,1.7,64.38 +1393,30,2.7,111.05,1.7,64.379375 +1394,30,2.7,111.05,1.7,64.37875 +1395,30,2.7,111.05,1.7,64.378125 +1396,30,2.7,111.05,1.7,64.3775 +1397,30,2.7,111.05,1.7,64.376875 +1398,30,2.7,111.05,1.7,64.37625 +1399,30,2.7,111.05,1.7,64.375625 +1400,30,2.7,111.05,1.7,64.375 +1401,30,2.7,111.05,1.7,64.374375 +1402,30,2.7,111.05,1.7,64.37375 +1403,30,2.7,111.05,1.7,64.373125 +1404,30,2.7,111.05,1.7,64.3725 +1405,30,2.7,111.05,1.7,64.371875 +1406,30,2.7,111.05,1.7,64.37125 +1407,30,2.7,111.05,1.7,64.370625 +1408,30,2.7,111.05,1.7,64.37 +1409,30,2.7,111.05,1.7,64.369375 +1410,30,2.7,111.05,1.7,64.36875 +1411,30,2.7,111.05,1.7,64.368125 +1412,30,2.7,111.05,1.7,64.3675 +1413,30,2.7,111.05,1.7,64.366875 +1414,30,2.7,111.05,1.7,64.36625 +1415,30,2.7,111.05,1.7,64.365625 +1416,30,2.7,111.05,1.7,64.365 +1417,30,2.7,111.05,1.7,64.364375 +1418,30,2.7,111.05,1.7,64.36375 +1419,30,2.7,111.05,1.7,64.363125 +1420,30,2.7,111.05,1.7,64.3625 +1421,30,2.7,111.05,1.7,64.361875 +1422,30,2.7,111.05,1.7,64.36125 +1423,30,2.7,111.05,1.7,64.360625 +1424,30,2.7,111.05,1.7,64.36 +1425,30,2.7,111.05,1.7,64.359375 +1426,30,2.7,111.05,1.7,64.35875 +1427,30,2.7,111.05,1.7,64.358125 +1428,30,2.7,111.05,1.7,64.3575 +1429,30,2.7,111.05,1.7,64.356875 +1430,30,2.7,111.05,1.7,64.35625 +1431,30,2.7,111.05,1.7,64.355625 +1432,30,2.7,111.05,1.7,64.355 +1433,30,2.7,111.05,1.7,64.354375 +1434,30,2.7,111.05,1.7,64.35375 +1435,30,2.7,111.05,1.7,64.353125 +1436,30,2.7,111.05,1.7,64.3525 +1437,30,2.7,111.05,1.7,64.351875 +1438,30,2.7,111.05,1.7,64.35125 +1439,30,2.7,111.05,1.7,64.350625 +1440,30,2.7,111.05,1.7,64.35 +1441,30,2.7,111.05,1.7,64.349375 +1442,30,2.7,111.05,1.7,64.34875 +1443,30,2.7,111.05,1.7,64.348125 +1444,30,2.7,111.05,1.7,64.3475 +1445,30,2.7,111.05,1.7,64.346875 +1446,30,2.7,111.05,1.7,64.34625 +1447,30,2.7,111.05,1.7,64.345625 +1448,30,2.7,111.05,1.7,64.345 +1449,30,2.7,111.05,1.7,64.344375 +1450,30,2.7,111.05,1.7,64.34375 +1451,30,2.7,111.05,1.7,64.343125 +1452,30,2.7,111.05,1.7,64.3425 +1453,30,2.7,111.05,1.7,64.341875 +1454,30,2.7,111.05,1.7,64.34125 +1455,30,2.7,111.05,1.7,64.340625 +1456,30,2.7,111.05,1.7,64.34 +1457,30,2.7,111.05,1.7,64.339375 +1458,30,2.7,111.05,1.7,64.33875 +1459,30,2.7,111.05,1.7,64.338125 +1460,30,2.7,111.05,1.7,64.3375 +1461,30,2.7,111.05,1.7,64.336875 +1462,30,2.7,111.05,1.7,64.33625 +1463,30,2.7,111.05,1.7,64.335625 +1464,30,2.7,111.05,1.7,64.335 +1465,30,2.7,111.05,1.7,64.334375 +1466,30,2.7,111.05,1.7,64.33375 +1467,30,2.7,111.05,1.7,64.333125 +1468,30,2.7,111.05,1.7,64.3325 +1469,30,2.7,111.05,1.7,64.331875 +1470,30,2.7,111.05,1.7,64.33125 +1471,30,2.7,111.05,1.7,64.330625 +1472,30,2.7,111.05,1.7,64.33 +1473,30,2.7,111.05,1.7,64.329375 +1474,30,2.7,111.05,1.7,64.32875 +1475,30,2.7,111.05,1.7,64.328125 +1476,30,2.7,111.05,1.7,64.3275 +1477,30,2.7,111.05,1.7,64.326875 +1478,30,2.7,111.05,1.7,64.32625 +1479,30,2.7,111.05,1.7,64.325625 +1480,30,2.7,111.05,1.7,64.325 +1481,30,2.7,111.05,1.7,64.324375 +1482,30,2.7,111.05,1.7,64.32375 +1483,30,2.7,111.05,1.7,64.323125 +1484,30,2.7,111.05,1.7,64.3225 +1485,30,2.7,111.05,1.7,64.321875 +1486,30,2.7,111.05,1.7,64.32125 +1487,30,2.7,111.05,1.7,64.320625 +1488,30,2.7,111.05,1.7,64.32 +1489,30,2.7,111.05,1.7,64.319375 +1490,30,2.6,111.05,1.7,64.31875 +1491,30,2.6,111.05,1.7,64.318125 +1492,30,2.6,111.05,1.7,64.3175 +1493,30,2.6,111.05,1.7,64.316875 +1494,30,2.6,111.05,1.7,64.31625 +1495,30,2.6,111.05,1.7,64.315625 +1496,30,2.6,111.05,1.7,64.315 +1497,30,2.6,111.05,1.7,64.314375 +1498,30,2.6,111.05,1.7,64.31375 +1499,30,2.6,111.05,1.7,64.313125 +1500,30,2.6,111.05,1.7,64.3125 +1501,30,2.6,111.05,1.7,64.311875 +1502,30,2.6,111.05,1.7,64.31125 +1503,30,2.6,111.05,1.7,64.310625 +1504,30,2.6,111.05,1.7,64.31 +1505,30,2.6,111.05,1.7,64.309375 +1506,30,2.6,111.05,1.7,64.30875 +1507,30,2.6,111.05,1.7,64.308125 +1508,30,2.6,111.05,1.7,64.3075 +1509,30,2.6,111.05,1.7,64.306875 +1510,30,2.6,111.05,1.7,64.30625 +1511,30,2.6,111.05,1.7,64.305625 +1512,30,2.6,111.05,1.7,64.305 +1513,30,2.6,111.05,1.7,64.304375 +1514,30,2.6,111.05,1.7,64.30375 +1515,30,2.6,111.05,1.7,64.303125 +1516,30,2.6,111.05,1.7,64.3025 +1517,30,2.6,111.05,1.7,64.301875 +1518,30,2.6,111.05,1.7,64.30125 +1519,30,2.6,111.05,1.7,64.300625 +1520,30,2.6,111.05,1.7,64.3 +1521,30,2.6,111.05,1.7,64.299375 +1522,30,2.6,111.05,1.7,64.29875 +1523,30,2.6,111.05,1.7,64.298125 +1524,30,2.6,111.05,1.7,64.2975 +1525,30,2.6,111.05,1.7,64.296875 +1526,30,2.6,111.05,1.7,64.29625 +1527,30,2.6,111.05,1.7,64.295625 +1528,30,2.6,111.05,1.7,64.295 +1529,30,2.6,111.05,1.7,64.294375 +1530,30,2.6,111.05,1.7,64.29375 +1531,30,2.6,111.05,1.7,64.293125 +1532,30,2.6,111.05,1.7,64.2925 +1533,30,2.6,111.05,1.7,64.291875 +1534,30,2.6,111.05,1.7,64.29125 +1535,30,2.6,111.05,1.7,64.290625 +1536,30,2.6,111.05,1.7,64.29 +1537,30,2.6,111.05,1.7,64.289375 +1538,30,2.6,111.05,1.7,64.28875 +1539,30,2.6,111.05,1.7,64.288125 +1540,30,2.6,111.05,1.7,64.2875 +1541,30,2.6,111.05,1.7,64.286875 +1542,30,2.6,111.05,1.7,64.28625 +1543,30,2.6,111.05,1.7,64.285625 +1544,30,2.6,111.05,1.7,64.285 +1545,30,2.6,111.05,1.7,64.284375 +1546,30,2.6,111.05,1.7,64.28375 +1547,30,2.6,111.05,1.7,64.283125 +1548,30,2.6,111.05,1.7,64.2825 +1549,30,2.6,111.05,1.7,64.281875 +1550,30,2.6,111.05,1.7,64.28125 +1551,30,2.6,111.05,1.7,64.280625 +1552,30,2.6,111.05,1.7,64.28 +1553,30,2.6,111.05,1.7,64.279375 +1554,30,2.6,111.05,1.7,64.27875 +1555,30,2.6,111.05,1.7,64.278125 +1556,30,2.6,111.05,1.7,64.2775 +1557,30,2.6,111.05,1.7,64.276875 +1558,30,2.6,111.05,1.7,64.27625 +1559,30,2.6,111.05,1.7,64.275625 +1560,30,2.6,111.05,1.7,64.275 +1561,30,2.6,111.05,1.7,64.274375 +1562,30,2.6,111.05,1.7,64.27375 +1563,30,2.6,111.05,1.7,64.273125 +1564,30,2.6,111.05,1.7,64.2725 +1565,30,2.6,111.05,1.7,64.271875 +1566,30,2.6,111.05,1.7,64.27125 +1567,30,2.6,111.05,1.7,64.270625 +1568,30,2.6,111.05,1.7,64.27 +1569,30,2.6,111.05,1.7,64.269375 +1570,30,2.6,111.05,1.7,64.26875 +1571,30,2.6,111.05,1.7,64.268125 +1572,30,2.6,111.05,1.7,64.2675 +1573,30,2.6,111.05,1.7,64.266875 +1574,30,2.6,111.05,1.7,64.26625 +1575,30,2.6,111.05,1.7,64.265625 +1576,30,2.6,111.05,1.7,64.265 +1577,30,2.6,111.05,1.7,64.264375 +1578,30,2.6,111.05,1.7,64.26375 +1579,30,2.6,111.05,1.7,64.263125 +1580,30,2.6,111.05,1.7,64.2625 +1581,30,2.6,111.05,1.7,64.261875 +1582,30,2.6,111.05,1.7,64.26125 +1583,30,2.6,111.05,1.7,64.260625 +1584,30,2.6,111.05,1.7,64.26 +1585,30,2.6,111.05,1.7,64.259375 +1586,30,2.6,111.05,1.7,64.25875 +1587,30,2.6,111.05,1.7,64.258125 +1588,30,2.6,111.05,1.7,64.2575 +1589,30,2.6,111.05,1.7,64.256875 +1590,30,2.6,111.05,1.7,64.25625 +1591,30,2.6,111.05,1.7,64.255625 +1592,30,2.6,111.05,1.7,64.255 +1593,30,2.6,111.05,1.7,64.254375 +1594,30,2.6,111.05,1.7,64.25375 +1595,30,2.6,111.05,1.7,64.253125 +1596,30,2.6,111.05,1.7,64.2525 +1597,30,2.6,111.05,1.7,64.251875 +1598,30,2.6,111.05,1.7,64.25125 +1599,30,2.6,111.05,1.7,64.250625 +1600,30,2.6,111.05,1.7,64.25 +1601,30,2.6,111.05,1.7,64.249375 +1602,30,2.6,111.05,1.7,64.24875 +1603,30,2.6,111.05,1.7,64.248125 +1604,30,2.6,111.05,1.7,64.2475 +1605,30,2.6,111.05,1.7,64.246875 +1606,30,2.6,111.05,1.7,64.24625 +1607,30,2.6,111.05,1.7,64.245625 +1608,30,2.6,111.05,1.7,64.245 +1609,30,2.6,111.05,1.7,64.244375 +1610,30,2.6,111.05,1.7,64.24375 +1611,30,2.6,111.05,1.7,64.243125 +1612,30,2.6,111.05,1.7,64.2425 +1613,30,2.6,111.05,1.7,64.241875 +1614,30,2.6,111.05,1.7,64.24125 +1615,30,2.6,111.05,1.7,64.240625 +1616,30,2.6,111.05,1.7,64.24 +1617,30,2.6,111.05,1.7,64.239375 +1618,30,2.6,111.05,1.7,64.23875 +1619,30,2.6,111.05,1.7,64.238125 +1620,30,2.6,111.05,1.7,64.2375 +1621,30,2.6,111.05,1.7,64.236875 +1622,30,2.6,111.05,1.7,64.23625 +1623,30,2.6,111.05,1.7,64.235625 +1624,30,2.6,111.05,1.7,64.235 +1625,30,2.6,111.05,1.7,64.234375 +1626,30,2.6,111.05,1.7,64.23375 +1627,30,2.6,111.05,1.7,64.233125 +1628,30,2.6,111.05,1.7,64.2325 +1629,30,2.6,111.05,1.7,64.231875 +1630,30,2.6,111.05,1.7,64.23125 +1631,30,2.6,111.05,1.7,64.230625 +1632,30,2.6,111.05,1.7,64.23 +1633,30,2.6,111.05,1.7,64.229375 +1634,30,2.6,111.05,1.7,64.22875 +1635,30,2.6,111.05,1.7,64.228125 +1636,30,2.6,111.05,1.7,64.2275 +1637,30,2.6,111.05,1.7,64.226875 +1638,30,2.6,111.05,1.7,64.22625 +1639,30,2.6,111.05,1.7,64.225625 +1640,30,2.6,111.05,1.7,64.225 +1641,30,2.6,111.05,1.7,64.224375 +1642,30,2.6,111.05,1.7,64.22375 +1643,30,2.6,111.05,1.7,64.223125 +1644,30,2.6,111.05,1.7,64.2225 +1645,30,2.6,111.05,1.7,64.221875 +1646,30,2.6,111.05,1.7,64.22125 +1647,30,2.6,111.05,1.7,64.220625 +1648,30,2.6,111.05,1.7,64.22 +1649,30,2.6,111.05,1.7,64.219375 +1650,30,2.6,111.05,1.7,64.21875 +1651,30,2.6,111.05,1.7,64.218125 +1652,30,2.6,111.05,1.7,64.2175 +1653,30,2.6,111.05,1.7,64.216875 +1654,30,2.6,111.05,1.7,64.21625 +1655,30,2.6,111.05,1.7,64.215625 +1656,30,2.6,111.05,1.7,64.215 +1657,30,2.6,111.05,1.7,64.214375 +1658,30,2.6,111.05,1.7,64.21375 +1659,30,2.6,111.05,1.7,64.213125 +1660,30,2.6,111.05,1.7,64.2125 +1661,30,2.6,111.05,1.7,64.211875 +1662,30,2.6,111.05,1.7,64.21125 +1663,30,2.6,111.05,1.7,64.210625 +1664,30,2.6,111.05,1.7,64.21 +1665,30,2.6,111.05,1.7,64.209375 +1666,30,2.6,111.05,1.7,64.20875 +1667,30,2.6,111.05,1.7,64.208125 +1668,30,2.6,111.05,1.7,64.2075 +1669,30,2.6,111.05,1.7,64.206875 +1670,30,2.6,111.05,1.7,64.20625 +1671,30,2.6,111.05,1.7,64.205625 +1672,30,2.6,111.05,1.7,64.205 +1673,30,2.6,111.05,1.7,64.204375 +1674,30,2.6,111.05,1.7,64.20375 +1675,30,2.6,111.05,1.7,64.203125 +1676,30,2.6,111.05,1.7,64.2025 +1677,30,2.6,111.05,1.7,64.201875 +1678,30,2.6,111.05,1.7,64.20125 +1679,30,2.6,111.05,1.7,64.200625 +1680,30,2.6,111.05,1.7,64.2 +1681,30,2.6,111.05,1.7,64.199375 +1682,30,2.6,111.05,1.7,64.19875 +1683,30,2.6,111.05,1.7,64.198125 +1684,30,2.6,111.05,1.7,64.1975 +1685,30,2.6,111.05,1.7,64.196875 +1686,30,2.6,111.05,1.7,64.19625 +1687,30,2.6,111.05,1.7,64.195625 +1688,30,2.6,111.05,1.7,64.195 +1689,30,2.6,111.05,1.7,64.194375 +1690,30,2.6,111.05,1.7,64.19375 +1691,30,2.6,111.05,1.7,64.193125 +1692,30,2.6,111.05,1.7,64.1925 +1693,30,2.6,111.05,1.7,64.191875 +1694,30,2.6,111.05,1.7,64.19125 +1695,30,2.6,111.05,1.7,64.190625 +1696,30,2.6,111.05,1.7,64.19 +1697,30,2.6,111.05,1.7,64.189375 +1698,30,2.6,111.05,1.7,64.18875 +1699,30,2.6,111.05,1.7,64.188125 +1700,30,2.6,111.05,1.7,64.1875 +1701,30,2.6,111.05,1.7,64.186875 +1702,30,2.6,111.05,1.7,64.18625 +1703,30,2.6,111.05,1.7,64.185625 +1704,30,2.6,111.05,1.7,64.185 +1705,30,2.6,111.05,1.7,64.184375 +1706,30,2.6,111.05,1.7,64.18375 +1707,30,2.6,111.05,1.7,64.183125 +1708,30,2.6,111.05,1.7,64.1825 +1709,30,2.6,111.05,1.7,64.181875 +1710,30,2.6,111.05,1.7,64.18125 +1711,30,2.6,111.05,1.7,64.180625 +1712,30,2.6,111.05,1.7,64.18 +1713,30,2.6,111.05,1.7,64.179375 +1714,30,2.6,111.05,1.7,64.17875 +1715,30,2.6,111.05,1.7,64.178125 +1716,30,2.6,111.05,1.7,64.1775 +1717,30,2.6,111.05,1.7,64.176875 +1718,30,2.6,111.05,1.7,64.17625 +1719,30,2.6,111.05,1.7,64.175625 +1720,30,2.6,111.05,1.7,64.175 +1721,30,2.6,111.05,1.7,64.174375 +1722,30,2.6,111.05,1.7,64.17375 +1723,30,2.6,111.05,1.7,64.173125 +1724,30,2.6,111.05,1.7,64.1725 +1725,30,2.6,111.05,1.7,64.171875 +1726,30,2.6,111.05,1.7,64.17125 +1727,30,2.6,111.05,1.7,64.170625 +1728,30,2.6,111.05,1.7,64.17 +1729,30,2.6,111.05,1.7,64.169375 +1730,30,2.6,111.05,1.7,64.16875 +1731,30,2.6,111.05,1.7,64.168125 +1732,30,2.6,111.05,1.7,64.1675 +1733,30,2.6,111.05,1.7,64.166875 +1734,30,2.6,111.05,1.7,64.16625 +1735,30,2.6,111.05,1.7,64.165625 +1736,30,2.6,111.05,1.7,64.165 +1737,30,2.6,111.05,1.7,64.164375 +1738,30,2.6,111.05,1.7,64.16375 +1739,30,2.6,111.05,1.7,64.163125 +1740,30,2.6,111.05,1.7,64.1625 +1741,30,2.6,111.05,1.7,64.161875 +1742,30,2.6,111.05,1.7,64.16125 +1743,30,2.6,111.05,1.7,64.160625 +1744,30,2.6,111.05,1.7,64.16 +1745,30,2.6,111.05,1.7,64.159375 +1746,30,2.6,111.05,1.7,64.15875 +1747,30,2.6,111.05,1.7,64.158125 +1748,30,2.6,111.05,1.7,64.1575 +1749,30,2.6,111.05,1.7,64.156875 +1750,30,2.6,111.05,1.7,64.15625 +1751,30,2.6,111.05,1.7,64.155625 +1752,30,2.6,111.05,1.7,64.155 +1753,30,2.6,111.05,1.7,64.154375 +1754,30,2.6,111.05,1.7,64.15375 +1755,30,2.6,111.05,1.7,64.153125 +1756,30,2.6,111.05,1.7,64.1525 +1757,30,2.6,111.05,1.7,64.151875 +1758,30,2.6,111.05,1.7,64.15125 +1759,30,2.6,111.05,1.7,64.150625 +1760,30,2.6,111.05,1.7,64.15 +1761,30,2.6,111.05,1.7,64.149375 +1762,30,2.6,111.05,1.7,64.14875 +1763,30,2.6,111.05,1.7,64.148125 +1764,30,2.6,111.05,1.7,64.1475 +1765,30,2.6,111.05,1.7,64.146875 +1766,30,2.6,111.05,1.7,64.14625 +1767,30,2.6,111.05,1.7,64.145625 +1768,30,2.6,111.05,1.7,64.145 +1769,30,2.6,111.05,1.7,64.144375 +1770,30,2.6,111.05,1.7,64.14375 +1771,30,2.6,111.05,1.7,64.143125 +1772,30,2.6,111.05,1.7,64.1425 +1773,30,2.6,111.05,1.7,64.141875 +1774,30,2.6,111.05,1.7,64.14125 +1775,30,2.6,111.05,1.7,64.140625 +1776,30,2.6,111.05,1.7,64.14 +1777,30,2.6,111.05,1.7,64.139375 +1778,30,2.6,111.05,1.7,64.13875 +1779,30,2.6,111.05,1.7,64.138125 +1780,30,2.6,111.05,1.7,64.1375 +1781,30,2.6,111.05,1.7,64.136875 +1782,30,2.6,111.05,1.7,64.13625 +1783,30,2.6,111.05,1.7,64.135625 +1784,30,2.6,111.05,1.7,64.135 +1785,30,2.6,111.05,1.7,64.134375 +1786,30,2.6,111.05,1.7,64.13375 +1787,30,2.6,111.05,1.7,64.133125 +1788,30,2.6,111.05,1.7,64.1325 +1789,30,2.6,111.05,1.7,64.131875 +1790,30,2.6,111.05,1.7,64.13125 +1791,30,2.6,111.05,1.7,64.130625 +1792,30,2.6,111.05,1.7,64.13 +1793,30,2.6,111.05,1.7,64.129375 +1794,30,2.6,111.05,1.7,64.12875 +1795,30,2.6,111.05,1.7,64.128125 +1796,30,2.6,111.05,1.7,64.1275 +1797,30,2.6,111.05,1.7,64.126875 +1798,30,2.6,111.05,1.7,64.12625 +1799,30,2.6,111.05,1.7,64.125625 +1800,30,2.6,111.05,1.7,64.125 +1801,30,2.6,111.05,1.7,64.124375 +1802,30,2.6,111.05,1.7,64.12375 +1803,30,2.6,111.05,1.7,64.123125 +1804,30,2.6,111.05,1.7,64.1225 +1805,30,2.6,111.05,1.7,64.121875 +1806,30,2.6,111.05,1.7,64.12125 +1807,30,2.6,111.05,1.7,64.120625 +1808,30,2.6,111.05,1.7,64.12 +1809,30,2.6,111.05,1.7,64.119375 +1810,30,2.6,111.05,1.7,64.11875 +1811,30,2.6,111.05,1.7,64.118125 +1812,30,2.6,111.05,1.7,64.1175 +1813,30,2.6,111.05,1.7,64.116875 +1814,30,2.6,111.05,1.7,64.11625 +1815,30,2.6,111.05,1.7,64.115625 +1816,30,2.6,111.05,1.7,64.115 +1817,30,2.6,111.05,1.7,64.114375 +1818,30,2.6,111.05,1.7,64.11375 +1819,30,2.6,111.05,1.7,64.113125 +1820,30,2.6,111.05,1.7,64.1125 +1821,30,2.6,111.05,1.7,64.111875 +1822,30,2.6,111.05,1.7,64.11125 +1823,30,2.6,111.05,1.7,64.110625 +1824,30,2.6,111.05,1.7,64.11 +1825,30,2.6,111.05,1.7,64.109375 +1826,30,2.6,111.05,1.7,64.10875 +1827,30,2.6,111.05,1.7,64.108125 +1828,30,2.6,111.05,1.7,64.1075 +1829,30,2.6,111.05,1.7,64.106875 +1830,30,2.6,111.05,1.7,64.10625 +1831,30,2.6,111.05,1.7,64.105625 +1832,30,2.6,111.05,1.7,64.105 +1833,30,2.6,111.05,1.7,64.104375 +1834,30,2.6,111.05,1.7,64.10375 +1835,30,2.6,111.05,1.7,64.103125 +1836,30,2.6,111.05,1.7,64.1025 +1837,30,2.6,111.05,1.7,64.101875 +1838,30,2.6,111.05,1.7,64.10125 +1839,30,2.6,111.05,1.7,64.100625 +1840,30,2.6,111.05,1.7,64.1 +1841,30,2.6,111.05,1.7,64.099375 +1842,30,2.6,111.05,1.7,64.09875 +1843,30,2.6,111.05,1.7,64.098125 +1844,30,2.6,111.05,1.7,64.0975 +1845,30,2.6,111.05,1.7,64.096875 +1846,30,2.6,111.05,1.7,64.09625 +1847,30,2.6,111.05,1.7,64.095625 +1848,30,2.6,111.05,1.7,64.095 +1849,30,2.6,111.05,1.7,64.094375 +1850,30,2.6,111.05,1.7,64.09375 +1851,30,2.6,111.05,1.7,64.093125 +1852,30,2.6,111.05,1.7,64.0925 +1853,30,2.6,111.05,1.7,64.091875 +1854,30,2.6,111.05,1.7,64.09125 +1855,30,2.6,111.05,1.7,64.090625 +1856,30,2.6,111.05,1.7,64.09 +1857,30,2.6,111.05,1.7,64.089375 +1858,30,2.6,111.05,1.7,64.08875 +1859,30,2.6,111.05,1.7,64.088125 +1860,30,2.6,111.05,1.7,64.0875 +1861,30,2.6,111.05,1.7,64.086875 +1862,30,2.6,111.05,1.7,64.08625 +1863,30,2.6,111.05,1.7,64.085625 +1864,30,2.6,111.05,1.7,64.085 +1865,30,2.6,111.05,1.7,64.084375 +1866,30,2.6,111.05,1.7,64.08375 +1867,30,2.6,111.05,1.7,64.083125 +1868,30,2.6,111.05,1.7,64.0825 +1869,30,2.6,111.05,1.7,64.081875 +1870,30,2.6,111.05,1.7,64.08125 +1871,30,2.6,111.05,1.7,64.080625 +1872,30,2.6,111.05,1.7,64.08 +1873,30,2.6,111.05,1.7,64.079375 +1874,30,2.6,111.05,1.7,64.07875 +1875,30,2.6,111.05,1.7,64.078125 +1876,30,2.6,111.05,1.7,64.0775 +1877,30,2.6,111.05,1.7,64.076875 +1878,30,2.6,111.05,1.7,64.07625 +1879,30,2.6,111.05,1.7,64.075625 +1880,30,2.6,111.05,1.7,64.075 +1881,30,2.6,111.05,1.7,64.074375 +1882,30,2.6,111.05,1.7,64.07375 +1883,30,2.6,111.05,1.7,64.073125 +1884,30,2.6,111.05,1.7,64.0725 +1885,30,2.6,111.05,1.7,64.071875 +1886,30,2.6,111.05,1.7,64.07125 +1887,30,2.6,111.05,1.7,64.070625 +1888,30,2.6,111.05,1.7,64.07 +1889,30,2.6,111.05,1.7,64.069375 +1890,30,2.6,111.05,1.7,64.06875 +1891,30,2.6,111.05,1.7,64.068125 +1892,30,2.6,111.05,1.7,64.0675 +1893,30,2.6,111.05,1.7,64.066875 +1894,30,2.6,111.05,1.7,64.06625 +1895,30,2.6,111.05,1.7,64.065625 +1896,30,2.6,111.05,1.7,64.065 +1897,30,2.6,111.05,1.7,64.064375 +1898,30,2.6,111.05,1.7,64.06375 +1899,30,2.6,111.05,1.7,64.063125 +1900,30,2.6,111.05,1.7,64.0625 +1901,30,2.6,111.05,1.7,64.061875 +1902,30,2.6,111.05,1.7,64.06125 +1903,30,2.6,111.05,1.7,64.060625 +1904,30,2.6,111.05,1.7,64.06 +1905,30,2.6,111.05,1.7,64.059375 +1906,30,2.6,111.05,1.7,64.05875 +1907,30,2.6,111.05,1.7,64.058125 +1908,30,2.6,111.05,1.7,64.0575 +1909,30,2.6,111.05,1.7,64.056875 +1910,30,2.6,111.05,1.7,64.05625 +1911,30,2.6,111.05,1.7,64.055625 +1912,30,2.6,111.05,1.7,64.055 +1913,30,2.6,111.05,1.7,64.054375 +1914,30,2.6,111.05,1.7,64.05375 +1915,30,2.6,111.05,1.7,64.053125 +1916,30,2.6,111.05,1.7,64.0525 +1917,30,2.6,111.05,1.7,64.051875 +1918,30,2.6,111.05,1.7,64.05125 +1919,30,2.6,111.05,1.7,64.050625 +1920,30,2.6,111.05,1.7,64.05 +1921,30,2.6,111.05,1.7,64.049375 +1922,30,2.6,111.05,1.7,64.04875 +1923,30,2.6,111.05,1.7,64.048125 +1924,30,2.6,111.05,1.7,64.0475 +1925,30,2.6,111.05,1.7,64.046875 +1926,30,2.6,111.05,1.7,64.04625 +1927,30,2.6,111.05,1.7,64.045625 +1928,30,2.6,111.05,1.7,64.045 +1929,30,2.6,111.05,1.7,64.044375 +1930,30,2.6,111.05,1.7,64.04375 +1931,30,2.6,111.05,1.7,64.043125 +1932,30,2.6,111.05,1.7,64.0425 +1933,30,2.6,111.05,1.7,64.041875 +1934,30,2.6,111.05,1.7,64.04125 +1935,30,2.6,111.05,1.7,64.040625 +1936,30,2.6,111.05,1.7,64.04 +1937,30,2.6,111.05,1.7,64.039375 +1938,30,2.6,111.05,1.7,64.03875 +1939,30,2.6,111.05,1.7,64.038125 +1940,30,2.6,111.05,1.7,64.0375 +1941,30,2.6,111.05,1.7,64.036875 +1942,30,2.6,111.05,1.7,64.03625 +1943,30,2.6,111.05,1.7,64.035625 +1944,30,2.6,111.05,1.7,64.035 +1945,30,2.6,111.05,1.7,64.034375 +1946,30,2.6,111.05,1.7,64.03375 +1947,30,2.6,111.05,1.7,64.033125 +1948,30,2.6,111.05,1.7,64.0325 +1949,30,2.6,111.05,1.7,64.031875 +1950,30,2.6,111.05,1.7,64.03125 +1951,30,2.6,111.05,1.7,64.030625 +1952,30,2.6,111.05,1.7,64.03 +1953,30,2.6,111.05,1.7,64.029375 +1954,30,2.6,111.05,1.7,64.02875 +1955,30,2.6,111.05,1.7,64.028125 +1956,30,2.6,111.05,1.7,64.0275 +1957,30,2.6,111.05,1.7,64.026875 +1958,30,2.6,111.05,1.7,64.02625 +1959,30,2.6,111.05,1.7,64.025625 +1960,30,2.6,111.05,1.7,64.025 +1961,30,2.6,111.05,1.7,64.024375 +1962,30,2.6,111.05,1.7,64.02375 +1963,30,2.6,111.05,1.7,64.023125 +1964,30,2.6,111.05,1.7,64.0225 +1965,30,2.6,111.05,1.7,64.021875 +1966,30,2.6,111.05,1.7,64.02125 +1967,30,2.6,111.05,1.7,64.020625 +1968,30,2.6,111.05,1.7,64.02 +1969,30,2.6,111.05,1.7,64.019375 +1970,30,2.6,111.05,1.7,64.01875 +1971,30,2.6,111.05,1.7,64.018125 +1972,30,2.6,111.05,1.7,64.0175 +1973,30,2.6,111.05,1.7,64.016875 +1974,30,2.6,111.05,1.7,64.01625 +1975,30,2.6,111.05,1.7,64.015625 +1976,30,2.6,111.05,1.7,64.015 +1977,30,2.6,111.05,1.7,64.014375 +1978,30,2.6,111.05,1.7,64.01375 +1979,30,2.6,111.05,1.7,64.013125 +1980,30,2.6,111.05,1.7,64.0125 +1981,30,2.6,111.05,1.7,64.011875 +1982,30,2.6,111.05,1.7,64.01125 +1983,30,2.6,111.05,1.7,64.010625 +1984,30,2.6,111.05,1.7,64.01 +1985,30,2.6,111.05,1.7,64.009375 +1986,30,2.6,111.05,1.7,64.00875 +1987,30,2.6,111.05,1.7,64.008125 +1988,30,2.6,111.05,1.7,64.0075 +1989,30,2.6,111.05,1.7,64.006875 +1990,30,2.6,111.05,1.7,64.00625 +1991,30,2.6,111.05,1.7,64.005625 +1992,30,2.6,111.05,1.7,64.005 +1993,30,2.6,111.05,1.7,64.004375 +1994,30,2.6,111.05,1.7,64.00375 +1995,30,2.6,111.05,1.7,64.003125 +1996,30,2.6,111.05,1.7,64.0025 +1997,30,2.6,111.05,1.7,64.001875 +1998,30,2.6,111.05,1.7,64.00125 +1999,30,2.6,111.05,1.7,64.000625 +2000,30,2.6,111.05,1.7,64 +2001,30,2.6,111.05,1.7,63.99975 +2002,30,2.6,111.05,1.7,63.9995 +2003,30,2.6,111.05,1.7,63.99925 +2004,30,2.6,111.05,1.7,63.999 +2005,30,2.6,111.05,1.7,63.99875 +2006,30,2.6,111.05,1.7,63.9985 +2007,30,2.6,111.05,1.7,63.99825 +2008,30,2.6,111.05,1.7,63.998 +2009,30,2.6,111.05,1.7,63.99775 +2010,30,2.6,111.05,1.7,63.9975 +2011,30,2.6,111.05,1.7,63.99725 +2012,30,2.6,111.05,1.7,63.997 +2013,30,2.6,111.05,1.7,63.99675 +2014,30,2.6,111.05,1.7,63.9965 +2015,30,2.6,111.05,1.7,63.99625 +2016,30,2.6,111.05,1.7,63.996 +2017,30,2.6,111.05,1.7,63.99575 +2018,30,2.6,111.05,1.7,63.9955 +2019,30,2.6,111.05,1.7,63.99525 +2020,30,2.6,111.05,1.7,63.995 +2021,30,2.6,111.05,1.7,63.99475 +2022,30,2.6,111.05,1.7,63.9945 +2023,30,2.6,111.05,1.7,63.99425 +2024,30,2.6,111.05,1.7,63.994 +2025,30,2.6,111.05,1.7,63.99375 +2026,30,2.6,111.05,1.7,63.9935 +2027,30,2.6,111.05,1.7,63.99325 +2028,30,2.6,111.05,1.7,63.993 +2029,30,2.6,111.05,1.7,63.99275 +2030,30,2.6,111.05,1.7,63.9925 +2031,30,2.6,111.05,1.7,63.99225 +2032,30,2.6,111.05,1.7,63.992 +2033,30,2.6,111.05,1.7,63.99175 +2034,30,2.6,111.05,1.7,63.9915 +2035,30,2.6,111.05,1.7,63.99125 +2036,30,2.6,111.05,1.7,63.991 +2037,30,2.6,111.05,1.7,63.99075 +2038,30,2.6,111.05,1.7,63.9905 +2039,30,2.6,111.05,1.7,63.99025 +2040,30,2.6,111.05,1.7,63.99 +2041,30,2.6,111.05,1.7,63.98975 +2042,30,2.6,111.05,1.7,63.9895 +2043,30,2.6,111.05,1.7,63.98925 +2044,30,2.6,111.05,1.7,63.989 +2045,30,2.6,111.05,1.7,63.98875 +2046,30,2.6,111.05,1.7,63.9885 +2047,30,2.6,111.05,1.7,63.98825 +2048,30,2.6,111.05,1.7,63.988 +2049,30,2.6,111.05,1.7,63.98775 +2050,30,2.6,111.05,1.7,63.9875 +2051,30,2.6,111.05,1.7,63.98725 +2052,30,2.6,111.05,1.7,63.987 +2053,30,2.6,111.05,1.7,63.98675 +2054,30,2.6,111.05,1.7,63.9865 +2055,30,2.6,111.05,1.7,63.98625 +2056,30,2.6,111.05,1.7,63.986 +2057,30,2.6,111.05,1.7,63.98575 +2058,30,2.6,111.05,1.7,63.9855 +2059,30,2.6,111.05,1.7,63.98525 +2060,30,2.6,111.05,1.7,63.985 +2061,30,2.6,111.05,1.7,63.98475 +2062,30,2.6,111.05,1.7,63.9845 +2063,30,2.6,111.05,1.7,63.98425 +2064,30,2.6,111.05,1.7,63.984 +2065,30,2.6,111.05,1.7,63.98375 +2066,30,2.6,111.05,1.7,63.9835 +2067,30,2.6,111.05,1.7,63.98325 +2068,30,2.6,111.05,1.7,63.983 +2069,30,2.6,111.05,1.7,63.98275 +2070,30,2.6,111.05,1.7,63.9825 +2071,30,2.6,111.05,1.7,63.98225 +2072,30,2.6,111.05,1.7,63.982 +2073,30,2.6,111.05,1.7,63.98175 +2074,30,2.6,111.05,1.7,63.9815 +2075,30,2.6,111.05,1.7,63.98125 +2076,30,2.6,111.05,1.7,63.981 +2077,30,2.6,111.05,1.7,63.98075 +2078,30,2.6,111.05,1.7,63.9805 +2079,30,2.6,111.05,1.7,63.98025 +2080,30,2.6,111.05,1.7,63.98 +2081,30,2.6,111.05,1.7,63.97975 +2082,30,2.6,111.05,1.7,63.9795 +2083,30,2.6,111.05,1.7,63.97925 +2084,30,2.6,111.05,1.7,63.979 +2085,30,2.6,111.05,1.7,63.97875 +2086,30,2.6,111.05,1.7,63.9785 +2087,30,2.6,111.05,1.7,63.97825 +2088,30,2.6,111.05,1.7,63.978 +2089,30,2.6,111.05,1.7,63.97775 +2090,30,2.6,111.05,1.7,63.9775 +2091,30,2.6,111.05,1.7,63.97725 +2092,30,2.6,111.05,1.7,63.977 +2093,30,2.6,111.05,1.7,63.97675 +2094,30,2.6,111.05,1.7,63.9765 +2095,30,2.6,111.05,1.7,63.97625 +2096,30,2.6,111.05,1.7,63.976 +2097,30,2.6,111.05,1.7,63.97575 +2098,30,2.6,111.05,1.7,63.9755 +2099,30,2.6,111.05,1.7,63.97525 +2100,30,2.6,111.05,1.7,63.975 +2101,30,2.6,111.05,1.7,63.97475 +2102,30,2.6,111.05,1.7,63.9745 +2103,30,2.6,111.05,1.7,63.97425 +2104,30,2.6,111.05,1.7,63.974 +2105,30,2.6,111.05,1.7,63.97375 +2106,30,2.6,111.05,1.7,63.9735 +2107,30,2.6,111.05,1.7,63.97325 +2108,30,2.6,111.05,1.7,63.973 +2109,30,2.6,111.05,1.7,63.97275 +2110,30,2.6,111.05,1.7,63.9725 +2111,30,2.6,111.05,1.7,63.97225 +2112,30,2.6,111.05,1.7,63.972 +2113,30,2.6,111.05,1.7,63.97175 +2114,30,2.6,111.05,1.7,63.9715 +2115,30,2.6,111.05,1.7,63.97125 +2116,30,2.6,111.05,1.7,63.971 +2117,30,2.6,111.05,1.7,63.97075 +2118,30,2.6,111.05,1.7,63.9705 +2119,30,2.6,111.05,1.7,63.97025 +2120,30,2.6,111.05,1.7,63.97 +2121,30,2.6,111.05,1.7,63.96975 +2122,30,2.6,111.05,1.7,63.9695 +2123,30,2.6,111.05,1.7,63.96925 +2124,30,2.6,111.05,1.7,63.969 +2125,30,2.6,111.05,1.7,63.96875 +2126,30,2.6,111.05,1.7,63.9685 +2127,30,2.6,111.05,1.7,63.96825 +2128,30,2.6,111.05,1.7,63.968 +2129,30,2.6,111.05,1.7,63.96775 +2130,30,2.6,111.05,1.7,63.9675 +2131,30,2.6,111.05,1.7,63.96725 +2132,30,2.6,111.05,1.7,63.967 +2133,30,2.6,111.05,1.7,63.96675 +2134,30,2.6,111.05,1.7,63.9665 +2135,30,2.6,111.05,1.7,63.96625 +2136,30,2.6,111.05,1.7,63.966 +2137,30,2.6,111.05,1.7,63.96575 +2138,30,2.6,111.05,1.7,63.9655 +2139,30,2.6,111.05,1.7,63.96525 +2140,30,2.6,111.05,1.7,63.965 +2141,30,2.6,111.05,1.7,63.96475 +2142,30,2.6,111.05,1.7,63.9645 +2143,30,2.6,111.05,1.7,63.96425 +2144,30,2.6,111.05,1.7,63.964 +2145,30,2.6,111.05,1.7,63.96375 +2146,30,2.6,111.05,1.7,63.9635 +2147,30,2.6,111.05,1.7,63.96325 +2148,30,2.6,111.05,1.7,63.963 +2149,30,2.6,111.05,1.7,63.96275 +2150,30,2.6,111.05,1.7,63.9625 +2151,30,2.6,111.05,1.7,63.96225 +2152,30,2.6,111.05,1.7,63.962 +2153,30,2.6,111.05,1.7,63.96175 +2154,30,2.6,111.05,1.7,63.9615 +2155,30,2.6,111.05,1.7,63.96125 +2156,30,2.6,111.05,1.7,63.961 +2157,30,2.6,111.05,1.7,63.96075 +2158,30,2.6,111.05,1.7,63.9605 +2159,30,2.6,111.05,1.7,63.96025 +2160,30,2.6,111.05,1.7,63.96 +2161,30,2.6,111.05,1.7,63.95975 +2162,30,2.6,111.05,1.7,63.9595 +2163,30,2.6,111.05,1.7,63.95925 +2164,30,2.6,111.05,1.7,63.959 +2165,30,2.6,111.05,1.7,63.95875 +2166,30,2.6,111.05,1.7,63.9585 +2167,30,2.6,111.05,1.7,63.95825 +2168,30,2.6,111.05,1.7,63.958 +2169,30,2.6,111.05,1.7,63.95775 +2170,30,2.6,111.05,1.7,63.9575 +2171,30,2.6,111.05,1.7,63.95725 +2172,30,2.6,111.05,1.7,63.957 +2173,30,2.6,111.05,1.7,63.95675 +2174,30,2.6,111.05,1.7,63.9565 +2175,30,2.6,111.05,1.7,63.95625 +2176,30,2.6,111.05,1.7,63.956 +2177,30,2.6,111.05,1.7,63.95575 +2178,30,2.6,111.05,1.7,63.9555 +2179,30,2.6,111.05,1.7,63.95525 +2180,30,2.6,111.05,1.7,63.955 +2181,30,2.6,111.05,1.7,63.95475 +2182,30,2.6,111.05,1.7,63.9545 +2183,30,2.6,111.05,1.7,63.95425 +2184,30,2.6,111.05,1.7,63.954 +2185,30,2.6,111.05,1.7,63.95375 +2186,30,2.6,111.05,1.7,63.9535 +2187,30,2.6,111.05,1.7,63.95325 +2188,30,2.6,111.05,1.7,63.953 +2189,30,2.6,111.05,1.7,63.95275 +2190,30,2.6,111.05,1.7,63.9525 +2191,30,2.6,111.05,1.7,63.95225 +2192,30,2.6,111.05,1.7,63.952 +2193,30,2.6,111.05,1.7,63.95175 +2194,30,2.6,111.05,1.7,63.9515 +2195,30,2.6,111.05,1.7,63.95125 +2196,30,2.6,111.05,1.7,63.951 +2197,30,2.6,111.05,1.7,63.95075 +2198,30,2.6,111.05,1.7,63.9505 +2199,30,2.6,111.05,1.7,63.95025 +2200,30,2.6,111.05,1.7,63.95 +2201,30,2.6,111.05,1.7,63.94975 +2202,30,2.6,111.05,1.7,63.9495 +2203,30,2.6,111.05,1.7,63.94925 +2204,30,2.6,111.05,1.7,63.949 +2205,30,2.6,111.05,1.7,63.94875 +2206,30,2.6,111.05,1.7,63.9485 +2207,30,2.6,111.05,1.7,63.94825 +2208,30,2.6,111.05,1.7,63.948 +2209,30,2.6,111.05,1.7,63.94775 +2210,30,2.6,111.05,1.7,63.9475 +2211,30,2.6,111.05,1.7,63.94725 +2212,30,2.6,111.05,1.7,63.947 +2213,30,2.6,111.05,1.7,63.94675 +2214,30,2.6,111.05,1.7,63.9465 +2215,30,2.6,111.05,1.7,63.94625 +2216,30,2.6,111.05,1.7,63.946 +2217,30,2.6,111.05,1.7,63.94575 +2218,30,2.6,111.05,1.7,63.9455 +2219,30,2.6,111.05,1.7,63.94525 +2220,30,2.6,111.05,1.7,63.945 +2221,30,2.6,111.05,1.7,63.94475 +2222,30,2.6,111.05,1.7,63.9445 +2223,30,2.6,111.05,1.7,63.94425 +2224,30,2.6,111.05,1.7,63.944 +2225,30,2.6,111.05,1.7,63.94375 +2226,30,2.6,111.05,1.7,63.9435 +2227,30,2.6,111.05,1.7,63.94325 +2228,30,2.6,111.05,1.7,63.943 +2229,30,2.6,111.05,1.7,63.94275 +2230,30,2.6,111.05,1.7,63.9425 +2231,30,2.6,111.05,1.7,63.94225 +2232,30,2.6,111.05,1.7,63.942 +2233,30,2.6,111.05,1.7,63.94175 +2234,30,2.6,111.05,1.7,63.9415 +2235,30,2.6,111.05,1.7,63.94125 +2236,30,2.6,111.05,1.7,63.941 +2237,30,2.6,111.05,1.7,63.94075 +2238,30,2.6,111.05,1.7,63.9405 +2239,30,2.6,111.05,1.7,63.94025 +2240,30,2.6,111.05,1.7,63.94 +2241,30,2.6,111.05,1.7,63.93975 +2242,30,2.6,111.05,1.7,63.9395 +2243,30,2.6,111.05,1.7,63.93925 +2244,30,2.6,111.05,1.7,63.939 +2245,30,2.6,111.05,1.7,63.93875 +2246,30,2.6,111.05,1.7,63.9385 +2247,30,2.6,111.05,1.7,63.93825 +2248,30,2.6,111.05,1.7,63.938 +2249,30,2.6,111.05,1.7,63.93775 +2250,30,2.6,111.05,1.7,63.9375 +2251,30,2.6,111.05,1.7,63.93725 +2252,30,2.6,111.05,1.7,63.937 +2253,30,2.6,111.05,1.7,63.93675 +2254,30,2.6,111.05,1.7,63.9365 +2255,30,2.6,111.05,1.7,63.93625 +2256,30,2.6,111.05,1.7,63.936 +2257,30,2.6,111.05,1.7,63.93575 +2258,30,2.6,111.05,1.7,63.9355 +2259,30,2.6,111.05,1.7,63.93525 +2260,30,2.6,111.05,1.7,63.935 +2261,30,2.6,111.05,1.7,63.93475 +2262,30,2.6,111.05,1.7,63.9345 +2263,30,2.6,111.05,1.7,63.93425 +2264,30,2.6,111.05,1.7,63.934 +2265,30,2.6,111.05,1.7,63.93375 +2266,30,2.6,111.05,1.7,63.9335 +2267,30,2.6,111.05,1.7,63.93325 +2268,30,2.6,111.05,1.7,63.933 +2269,30,2.6,111.05,1.7,63.93275 +2270,30,2.6,111.05,1.7,63.9325 +2271,30,2.6,111.05,1.7,63.93225 +2272,30,2.6,111.05,1.7,63.932 +2273,30,2.6,111.05,1.7,63.93175 +2274,30,2.6,111.05,1.7,63.9315 +2275,30,2.6,111.05,1.7,63.93125 +2276,30,2.6,111.05,1.7,63.931 +2277,30,2.6,111.05,1.7,63.93075 +2278,30,2.6,111.05,1.7,63.9305 +2279,30,2.6,111.05,1.7,63.93025 +2280,30,2.6,111.05,1.7,63.93 +2281,30,2.6,111.05,1.7,63.92975 +2282,30,2.6,111.05,1.7,63.9295 +2283,30,2.6,111.05,1.7,63.92925 +2284,30,2.6,111.05,1.7,63.929 +2285,30,2.6,111.05,1.7,63.92875 +2286,30,2.6,111.05,1.7,63.9285 +2287,30,2.6,111.05,1.7,63.92825 +2288,30,2.6,111.05,1.7,63.928 +2289,30,2.6,111.05,1.7,63.92775 +2290,30,2.6,111.05,1.7,63.9275 +2291,30,2.6,111.05,1.7,63.92725 +2292,30,2.6,111.05,1.7,63.927 +2293,30,2.6,111.05,1.7,63.92675 +2294,30,2.6,111.05,1.7,63.9265 +2295,30,2.6,111.05,1.7,63.92625 +2296,30,2.6,111.05,1.7,63.926 +2297,30,2.6,111.05,1.7,63.92575 +2298,30,2.6,111.05,1.7,63.9255 +2299,30,2.6,111.05,1.7,63.92525 +2300,30,2.6,111.05,1.7,63.925 +2301,30,2.6,111.05,1.7,63.92475 +2302,30,2.6,111.05,1.7,63.9245 +2303,30,2.6,111.05,1.7,63.92425 +2304,30,2.6,111.05,1.7,63.924 +2305,30,2.6,111.05,1.7,63.92375 +2306,30,2.6,111.05,1.7,63.9235 +2307,30,2.6,111.05,1.7,63.92325 +2308,30,2.6,111.05,1.7,63.923 +2309,30,2.6,111.05,1.7,63.92275 +2310,30,2.6,111.05,1.7,63.9225 +2311,30,2.6,111.05,1.7,63.92225 +2312,30,2.6,111.05,1.7,63.922 +2313,30,2.6,111.05,1.7,63.92175 +2314,30,2.6,111.05,1.7,63.9215 +2315,30,2.6,111.05,1.7,63.92125 +2316,30,2.6,111.05,1.7,63.921 +2317,30,2.6,111.05,1.7,63.92075 +2318,30,2.6,111.05,1.7,63.9205 +2319,30,2.6,111.05,1.7,63.92025 +2320,30,2.6,111.05,1.7,63.92 +2321,30,2.6,111.05,1.7,63.91975 +2322,30,2.6,111.05,1.7,63.9195 +2323,30,2.6,111.05,1.7,63.91925 +2324,30,2.6,111.05,1.7,63.919 +2325,30,2.6,111.05,1.7,63.91875 +2326,30,2.6,111.05,1.7,63.9185 +2327,30,2.6,111.05,1.7,63.91825 +2328,30,2.6,111.05,1.7,63.918 +2329,30,2.6,111.05,1.7,63.91775 +2330,30,2.6,111.05,1.7,63.9175 +2331,30,2.6,111.05,1.7,63.91725 +2332,30,2.6,111.05,1.7,63.917 +2333,30,2.6,111.05,1.7,63.91675 +2334,30,2.6,111.05,1.7,63.9165 +2335,30,2.6,111.05,1.7,63.91625 +2336,30,2.6,111.05,1.7,63.916 +2337,30,2.6,111.05,1.7,63.91575 +2338,30,2.6,111.05,1.7,63.9155 +2339,30,2.6,111.05,1.7,63.91525 +2340,30,2.6,111.05,1.7,63.915 +2341,30,2.6,111.05,1.7,63.91475 +2342,30,2.6,111.05,1.7,63.9145 +2343,30,2.6,111.05,1.7,63.91425 +2344,30,2.6,111.05,1.7,63.914 +2345,30,2.6,111.05,1.7,63.91375 +2346,30,2.6,111.05,1.7,63.9135 +2347,30,2.6,111.05,1.7,63.91325 +2348,30,2.6,111.05,1.7,63.913 +2349,30,2.6,111.05,1.7,63.91275 +2350,30,2.6,111.05,1.7,63.9125 +2351,30,2.6,111.05,1.7,63.91225 +2352,30,2.6,111.05,1.7,63.912 +2353,30,2.6,111.05,1.7,63.91175 +2354,30,2.6,111.05,1.7,63.9115 +2355,30,2.6,111.05,1.7,63.91125 +2356,30,2.6,111.05,1.7,63.911 +2357,30,2.6,111.05,1.7,63.91075 +2358,30,2.6,111.05,1.7,63.9105 +2359,30,2.6,111.05,1.7,63.91025 +2360,30,2.6,111.05,1.7,63.91 +2361,30,2.6,111.05,1.7,63.90975 +2362,30,2.6,111.05,1.7,63.9095 +2363,30,2.6,111.05,1.7,63.90925 +2364,30,2.6,111.05,1.7,63.909 +2365,30,2.6,111.05,1.7,63.90875 +2366,30,2.6,111.05,1.7,63.9085 +2367,30,2.6,111.05,1.7,63.90825 +2368,30,2.6,111.05,1.7,63.908 +2369,30,2.6,111.05,1.7,63.90775 +2370,30,2.6,111.05,1.7,63.9075 +2371,30,2.6,111.05,1.7,63.90725 +2372,30,2.6,111.05,1.7,63.907 +2373,30,2.6,111.05,1.7,63.90675 +2374,30,2.6,111.05,1.7,63.9065 +2375,30,2.6,111.05,1.7,63.90625 +2376,30,2.6,111.05,1.7,63.906 +2377,30,2.6,111.05,1.7,63.90575 +2378,30,2.6,111.05,1.7,63.9055 +2379,30,2.6,111.05,1.7,63.90525 +2380,30,2.6,111.05,1.7,63.905 +2381,30,2.6,111.05,1.7,63.90475 +2382,30,2.6,111.05,1.7,63.9045 +2383,30,2.6,111.05,1.7,63.90425 +2384,30,2.6,111.05,1.7,63.904 +2385,30,2.6,111.05,1.7,63.90375 +2386,30,2.6,111.05,1.7,63.9035 +2387,30,2.6,111.05,1.7,63.90325 +2388,30,2.6,111.05,1.7,63.903 +2389,30,2.6,111.05,1.7,63.90275 +2390,30,2.6,111.05,1.7,63.9025 +2391,30,2.6,111.05,1.7,63.90225 +2392,30,2.6,111.05,1.7,63.902 +2393,30,2.6,111.05,1.7,63.90175 +2394,30,2.6,111.05,1.7,63.9015 +2395,30,2.6,111.05,1.7,63.90125 +2396,30,2.6,111.05,1.7,63.901 +2397,30,2.6,111.05,1.7,63.90075 +2398,30,2.6,111.05,1.7,63.9005 +2399,30,2.6,111.05,1.7,63.90025 +2400,30,2.6,111.05,1.7,63.9 +2401,30,2.6,111.05,1.7,63.89975 +2402,30,2.6,111.05,1.7,63.8995 +2403,30,2.6,111.05,1.7,63.89925 +2404,30,2.6,111.05,1.7,63.899 +2405,30,2.6,111.05,1.7,63.89875 +2406,30,2.6,111.05,1.7,63.8985 +2407,30,2.6,111.05,1.7,63.89825 +2408,30,2.6,111.05,1.7,63.898 +2409,30,2.6,111.05,1.7,63.89775 +2410,30,2.6,111.05,1.7,63.8975 +2411,30,2.6,111.05,1.7,63.89725 +2412,30,2.6,111.05,1.7,63.897 +2413,30,2.6,111.05,1.7,63.89675 +2414,30,2.6,111.05,1.7,63.8965 +2415,30,2.6,111.05,1.7,63.89625 +2416,30,2.6,111.05,1.7,63.896 +2417,30,2.6,111.05,1.7,63.89575 +2418,30,2.6,111.05,1.7,63.8955 +2419,30,2.6,111.05,1.7,63.89525 +2420,30,2.6,111.05,1.7,63.895 +2421,30,2.6,111.05,1.7,63.89475 +2422,30,2.6,111.05,1.7,63.8945 +2423,30,2.6,111.05,1.7,63.89425 +2424,30,2.6,111.05,1.7,63.894 +2425,30,2.6,111.05,1.7,63.89375 +2426,30,2.6,111.05,1.7,63.8935 +2427,30,2.6,111.05,1.7,63.89325 +2428,30,2.6,111.05,1.7,63.893 +2429,30,2.6,111.05,1.7,63.89275 +2430,30,2.6,111.05,1.7,63.8925 +2431,30,2.6,111.05,1.7,63.89225 +2432,30,2.6,111.05,1.7,63.892 +2433,30,2.6,111.05,1.7,63.89175 +2434,30,2.6,111.05,1.7,63.8915 +2435,30,2.6,111.05,1.7,63.89125 +2436,30,2.6,111.05,1.7,63.891 +2437,30,2.6,111.05,1.7,63.89075 +2438,30,2.6,111.05,1.7,63.8905 +2439,30,2.6,111.05,1.7,63.89025 +2440,30,2.6,111.05,1.7,63.89 +2441,30,2.6,111.05,1.7,63.88975 +2442,30,2.6,111.05,1.7,63.8895 +2443,30,2.6,111.05,1.7,63.88925 +2444,30,2.6,111.05,1.7,63.889 +2445,30,2.6,111.05,1.7,63.88875 +2446,30,2.6,111.05,1.7,63.8885 +2447,30,2.6,111.05,1.7,63.88825 +2448,30,2.6,111.05,1.7,63.888 +2449,30,2.6,111.05,1.7,63.88775 +2450,30,2.6,111.05,1.7,63.8875 +2451,30,2.6,111.05,1.7,63.88725 +2452,30,2.6,111.05,1.7,63.887 +2453,30,2.6,111.05,1.7,63.88675 +2454,30,2.6,111.05,1.7,63.8865 +2455,30,2.6,111.05,1.7,63.88625 +2456,30,2.6,111.05,1.7,63.886 +2457,30,2.6,111.05,1.7,63.88575 +2458,30,2.6,111.05,1.7,63.8855 +2459,30,2.6,111.05,1.7,63.88525 +2460,30,2.6,111.05,1.7,63.885 +2461,30,2.6,111.05,1.7,63.88475 +2462,30,2.6,111.05,1.7,63.8845 +2463,30,2.6,111.05,1.7,63.88425 +2464,30,2.6,111.05,1.7,63.884 +2465,30,2.6,111.05,1.7,63.88375 +2466,30,2.6,111.05,1.7,63.8835 +2467,30,2.6,111.05,1.7,63.88325 +2468,30,2.6,111.05,1.7,63.883 +2469,30,2.6,111.05,1.7,63.88275 +2470,30,2.6,111.05,1.7,63.8825 +2471,30,2.6,111.05,1.7,63.88225 +2472,30,2.6,111.05,1.7,63.882 +2473,30,2.6,111.05,1.7,63.88175 +2474,30,2.6,111.05,1.7,63.8815 +2475,30,2.6,111.05,1.7,63.88125 +2476,30,2.6,111.05,1.7,63.881 +2477,30,2.6,111.05,1.7,63.88075 +2478,30,2.6,111.05,1.7,63.8805 +2479,30,2.6,111.05,1.7,63.88025 +2480,30,2.6,111.05,1.7,63.88 +2481,30,2.6,111.05,1.7,63.87975 +2482,30,2.6,111.05,1.7,63.8795 +2483,30,2.6,111.05,1.7,63.87925 +2484,30,2.6,111.05,1.7,63.879 +2485,30,2.6,111.05,1.7,63.87875 +2486,30,2.6,111.05,1.7,63.8785 +2487,30,2.6,111.05,1.7,63.87825 +2488,30,2.6,111.05,1.7,63.878 +2489,30,2.6,111.05,1.7,63.87775 +2490,30,2.5,111.05,1.7,63.8775 +2491,30,2.5,111.05,1.7,63.87725 +2492,30,2.5,111.05,1.7,63.877 +2493,30,2.5,111.05,1.7,63.87675 +2494,30,2.5,111.05,1.7,63.8765 +2495,30,2.5,111.05,1.7,63.87625 +2496,30,2.5,111.05,1.7,63.876 +2497,30,2.5,111.05,1.7,63.87575 +2498,30,2.5,111.05,1.7,63.8755 +2499,30,2.5,111.05,1.7,63.87525 +2500,30,2.5,111.05,1.7,63.875 +2501,30,2.5,111.05,1.7,63.87475 +2502,30,2.5,111.05,1.7,63.8745 +2503,30,2.5,111.05,1.7,63.87425 +2504,30,2.5,111.05,1.7,63.874 +2505,30,2.5,111.05,1.7,63.87375 +2506,30,2.5,111.05,1.7,63.8735 +2507,30,2.5,111.05,1.7,63.87325 +2508,30,2.5,111.05,1.7,63.873 +2509,30,2.5,111.05,1.7,63.87275 +2510,30,2.5,111.05,1.7,63.8725 +2511,30,2.5,111.05,1.7,63.87225 +2512,30,2.5,111.05,1.7,63.872 +2513,30,2.5,111.05,1.7,63.87175 +2514,30,2.5,111.05,1.7,63.8715 +2515,30,2.5,111.05,1.7,63.87125 +2516,30,2.5,111.05,1.7,63.871 +2517,30,2.5,111.05,1.7,63.87075 +2518,30,2.5,111.05,1.7,63.8705 +2519,30,2.5,111.05,1.7,63.87025 +2520,30,2.5,111.05,1.7,63.87 +2521,30,2.5,111.05,1.7,63.86975 +2522,30,2.5,111.05,1.7,63.8695 +2523,30,2.5,111.05,1.7,63.86925 +2524,30,2.5,111.05,1.7,63.869 +2525,30,2.5,111.05,1.7,63.86875 +2526,30,2.5,111.05,1.7,63.8685 +2527,30,2.5,111.05,1.7,63.86825 +2528,30,2.5,111.05,1.7,63.868 +2529,30,2.5,111.05,1.7,63.86775 +2530,30,2.5,111.05,1.7,63.8675 +2531,30,2.5,111.05,1.7,63.86725 +2532,30,2.5,111.05,1.7,63.867 +2533,30,2.5,111.05,1.7,63.86675 +2534,30,2.5,111.05,1.7,63.8665 +2535,30,2.5,111.05,1.7,63.86625 +2536,30,2.5,111.05,1.7,63.866 +2537,30,2.5,111.05,1.7,63.86575 +2538,30,2.5,111.05,1.7,63.8655 +2539,30,2.5,111.05,1.7,63.86525 +2540,30,2.5,111.05,1.7,63.865 +2541,30,2.5,111.05,1.7,63.86475 +2542,30,2.5,111.05,1.7,63.8645 +2543,30,2.5,111.05,1.7,63.86425 +2544,30,2.5,111.05,1.7,63.864 +2545,30,2.5,111.05,1.7,63.86375 +2546,30,2.5,111.05,1.7,63.8635 +2547,30,2.5,111.05,1.7,63.86325 +2548,30,2.5,111.05,1.7,63.863 +2549,30,2.5,111.05,1.7,63.86275 +2550,30,2.5,111.05,1.7,63.8625 +2551,30,2.5,111.05,1.7,63.86225 +2552,30,2.5,111.05,1.7,63.862 +2553,30,2.5,111.05,1.7,63.86175 +2554,30,2.5,111.05,1.7,63.8615 +2555,30,2.5,111.05,1.7,63.86125 +2556,30,2.5,111.05,1.7,63.861 +2557,30,2.5,111.05,1.7,63.86075 +2558,30,2.5,111.05,1.7,63.8605 +2559,30,2.5,111.05,1.7,63.86025 +2560,30,2.5,111.05,1.7,63.86 +2561,30,2.5,111.05,1.7,63.85975 +2562,30,2.5,111.05,1.7,63.8595 +2563,30,2.5,111.05,1.7,63.85925 +2564,30,2.5,111.05,1.7,63.859 +2565,30,2.5,111.05,1.7,63.85875 +2566,30,2.5,111.05,1.7,63.8585 +2567,30,2.5,111.05,1.7,63.85825 +2568,30,2.5,111.05,1.7,63.858 +2569,30,2.5,111.05,1.7,63.85775 +2570,30,2.5,111.05,1.7,63.8575 +2571,30,2.5,111.05,1.7,63.85725 +2572,30,2.5,111.05,1.7,63.857 +2573,30,2.5,111.05,1.7,63.85675 +2574,30,2.5,111.05,1.7,63.8565 +2575,30,2.5,111.05,1.7,63.85625 +2576,30,2.5,111.05,1.7,63.856 +2577,30,2.5,111.05,1.7,63.85575 +2578,30,2.5,111.05,1.7,63.8555 +2579,30,2.5,111.05,1.7,63.85525 +2580,30,2.5,111.05,1.7,63.855 +2581,30,2.5,111.05,1.7,63.85475 +2582,30,2.5,111.05,1.7,63.8545 +2583,30,2.5,111.05,1.7,63.85425 +2584,30,2.5,111.05,1.7,63.854 +2585,30,2.5,111.05,1.7,63.85375 +2586,30,2.5,111.05,1.7,63.8535 +2587,30,2.5,111.05,1.7,63.85325 +2588,30,2.5,111.05,1.7,63.853 +2589,30,2.5,111.05,1.7,63.85275 +2590,30,2.5,111.05,1.7,63.8525 +2591,30,2.5,111.05,1.7,63.85225 +2592,30,2.5,111.05,1.7,63.852 +2593,30,2.5,111.05,1.7,63.85175 +2594,30,2.5,111.05,1.7,63.8515 +2595,30,2.5,111.05,1.7,63.85125 +2596,30,2.5,111.05,1.7,63.851 +2597,30,2.5,111.05,1.7,63.85075 +2598,30,2.5,111.05,1.7,63.8505 +2599,30,2.5,111.05,1.7,63.85025 +2600,30,2.5,111.05,1.7,63.85 +2601,30,2.5,111.05,1.7,63.84975 +2602,30,2.5,111.05,1.7,63.8495 +2603,30,2.5,111.05,1.7,63.84925 +2604,30,2.5,111.05,1.7,63.849 +2605,30,2.5,111.05,1.7,63.84875 +2606,30,2.5,111.05,1.7,63.8485 +2607,30,2.5,111.05,1.7,63.84825 +2608,30,2.5,111.05,1.7,63.848 +2609,30,2.5,111.05,1.7,63.84775 +2610,30,2.5,111.05,1.7,63.8475 +2611,30,2.5,111.05,1.7,63.84725 +2612,30,2.5,111.05,1.7,63.847 +2613,30,2.5,111.05,1.7,63.84675 +2614,30,2.5,111.05,1.7,63.8465 +2615,30,2.5,111.05,1.7,63.84625 +2616,30,2.5,111.05,1.7,63.846 +2617,30,2.5,111.05,1.7,63.84575 +2618,30,2.5,111.05,1.7,63.8455 +2619,30,2.5,111.05,1.7,63.84525 +2620,30,2.5,111.05,1.7,63.845 +2621,30,2.5,111.05,1.7,63.84475 +2622,30,2.5,111.05,1.7,63.8445 +2623,30,2.5,111.05,1.7,63.84425 +2624,30,2.5,111.05,1.7,63.844 +2625,30,2.5,111.05,1.7,63.84375 +2626,30,2.5,111.05,1.7,63.8435 +2627,30,2.5,111.05,1.7,63.84325 +2628,30,2.5,111.05,1.7,63.843 +2629,30,2.5,111.05,1.7,63.84275 +2630,30,2.5,111.05,1.7,63.8425 +2631,30,2.5,111.05,1.7,63.84225 +2632,30,2.5,111.05,1.7,63.842 +2633,30,2.5,111.05,1.7,63.84175 +2634,30,2.5,111.05,1.7,63.8415 +2635,30,2.5,111.05,1.7,63.84125 +2636,30,2.5,111.05,1.7,63.841 +2637,30,2.5,111.05,1.7,63.84075 +2638,30,2.5,111.05,1.7,63.8405 +2639,30,2.5,111.05,1.7,63.84025 +2640,30,2.5,111.05,1.7,63.84 +2641,30,2.5,111.05,1.7,63.83975 +2642,30,2.5,111.05,1.7,63.8395 +2643,30,2.5,111.05,1.7,63.83925 +2644,30,2.5,111.05,1.7,63.839 +2645,30,2.5,111.05,1.7,63.83875 +2646,30,2.5,111.05,1.7,63.8385 +2647,30,2.5,111.05,1.7,63.83825 +2648,30,2.5,111.05,1.7,63.838 +2649,30,2.5,111.05,1.7,63.83775 +2650,30,2.5,111.05,1.7,63.8375 +2651,30,2.5,111.05,1.7,63.83725 +2652,30,2.5,111.05,1.7,63.837 +2653,30,2.5,111.05,1.7,63.83675 +2654,30,2.5,111.05,1.7,63.8365 +2655,30,2.5,111.05,1.7,63.83625 +2656,30,2.5,111.05,1.7,63.836 +2657,30,2.5,111.05,1.7,63.83575 +2658,30,2.5,111.05,1.7,63.8355 +2659,30,2.5,111.05,1.7,63.83525 +2660,30,2.5,111.05,1.7,63.835 +2661,30,2.5,111.05,1.7,63.83475 +2662,30,2.5,111.05,1.7,63.8345 +2663,30,2.5,111.05,1.7,63.83425 +2664,30,2.5,111.05,1.7,63.834 +2665,30,2.5,111.05,1.7,63.83375 +2666,30,2.5,111.05,1.7,63.8335 +2667,30,2.5,111.05,1.7,63.83325 +2668,30,2.5,111.05,1.7,63.833 +2669,30,2.5,111.05,1.7,63.83275 +2670,30,2.5,111.05,1.7,63.8325 +2671,30,2.5,111.05,1.7,63.83225 +2672,30,2.5,111.05,1.7,63.832 +2673,30,2.5,111.05,1.7,63.83175 +2674,30,2.5,111.05,1.7,63.8315 +2675,30,2.5,111.05,1.7,63.83125 +2676,30,2.5,111.05,1.7,63.831 +2677,30,2.5,111.05,1.7,63.83075 +2678,30,2.5,111.05,1.7,63.8305 +2679,30,2.5,111.05,1.7,63.83025 +2680,30,2.5,111.05,1.7,63.83 +2681,30,2.5,111.05,1.7,63.82975 +2682,30,2.5,111.05,1.7,63.8295 +2683,30,2.5,111.05,1.7,63.82925 +2684,30,2.5,111.05,1.7,63.829 +2685,30,2.5,111.05,1.7,63.82875 +2686,30,2.5,111.05,1.7,63.8285 +2687,30,2.5,111.05,1.7,63.82825 +2688,30,2.5,111.05,1.7,63.828 +2689,30,2.5,111.05,1.7,63.82775 +2690,30,2.5,111.05,1.7,63.8275 +2691,30,2.5,111.05,1.7,63.82725 +2692,30,2.5,111.05,1.7,63.827 +2693,30,2.5,111.05,1.7,63.82675 +2694,30,2.5,111.05,1.7,63.8265 +2695,30,2.5,111.05,1.7,63.82625 +2696,30,2.5,111.05,1.7,63.826 +2697,30,2.5,111.05,1.7,63.82575 +2698,30,2.5,111.05,1.7,63.8255 +2699,30,2.5,111.05,1.7,63.82525 +2700,30,2.5,111.05,1.7,63.825 +2701,30,2.5,111.05,1.7,63.82475 +2702,30,2.5,111.05,1.7,63.8245 +2703,30,2.5,111.05,1.7,63.82425 +2704,30,2.5,111.05,1.7,63.824 +2705,30,2.5,111.05,1.7,63.82375 +2706,30,2.5,111.05,1.7,63.8235 +2707,30,2.5,111.05,1.7,63.82325 +2708,30,2.5,111.05,1.7,63.823 +2709,30,2.5,111.05,1.7,63.82275 +2710,30,2.5,111.05,1.7,63.8225 +2711,30,2.5,111.05,1.7,63.82225 +2712,30,2.5,111.05,1.7,63.822 +2713,30,2.5,111.05,1.7,63.82175 +2714,30,2.5,111.05,1.7,63.8215 +2715,30,2.5,111.05,1.7,63.82125 +2716,30,2.5,111.05,1.7,63.821 +2717,30,2.5,111.05,1.7,63.82075 +2718,30,2.5,111.05,1.7,63.8205 +2719,30,2.5,111.05,1.7,63.82025 +2720,30,2.5,111.05,1.7,63.82 +2721,30,2.5,111.05,1.7,63.81975 +2722,30,2.5,111.05,1.7,63.8195 +2723,30,2.5,111.05,1.7,63.81925 +2724,30,2.5,111.05,1.7,63.819 +2725,30,2.5,111.05,1.7,63.81875 +2726,30,2.5,111.05,1.7,63.8185 +2727,30,2.5,111.05,1.7,63.81825 +2728,30,2.5,111.05,1.7,63.818 +2729,30,2.5,111.05,1.7,63.81775 +2730,30,2.5,111.05,1.7,63.8175 +2731,30,2.5,111.05,1.7,63.81725 +2732,30,2.5,111.05,1.7,63.817 +2733,30,2.5,111.05,1.7,63.81675 +2734,30,2.5,111.05,1.7,63.8165 +2735,30,2.5,111.05,1.7,63.81625 +2736,30,2.5,111.05,1.7,63.816 +2737,30,2.5,111.05,1.7,63.81575 +2738,30,2.5,111.05,1.7,63.8155 +2739,30,2.5,111.05,1.7,63.81525 +2740,30,2.5,111.05,1.7,63.815 +2741,30,2.5,111.05,1.7,63.81475 +2742,30,2.5,111.05,1.7,63.8145 +2743,30,2.5,111.05,1.7,63.81425 +2744,30,2.5,111.05,1.7,63.814 +2745,30,2.5,111.05,1.7,63.81375 +2746,30,2.5,111.05,1.7,63.8135 +2747,30,2.5,111.05,1.7,63.81325 +2748,30,2.5,111.05,1.7,63.813 +2749,30,2.5,111.05,1.7,63.81275 +2750,30,2.5,111.05,1.7,63.8125 +2751,30,2.5,111.05,1.7,63.81225 +2752,30,2.5,111.05,1.7,63.812 +2753,30,2.5,111.05,1.7,63.81175 +2754,30,2.5,111.05,1.7,63.8115 +2755,30,2.5,111.05,1.7,63.81125 +2756,30,2.5,111.05,1.7,63.811 +2757,30,2.5,111.05,1.7,63.81075 +2758,30,2.5,111.05,1.7,63.8105 +2759,30,2.5,111.05,1.7,63.81025 +2760,30,2.5,111.05,1.7,63.81 +2761,30,2.5,111.05,1.7,63.80975 +2762,30,2.5,111.05,1.7,63.8095 +2763,30,2.5,111.05,1.7,63.80925 +2764,30,2.5,111.05,1.7,63.809 +2765,30,2.5,111.05,1.7,63.80875 +2766,30,2.5,111.05,1.7,63.8085 +2767,30,2.5,111.05,1.7,63.80825 +2768,30,2.5,111.05,1.7,63.808 +2769,30,2.5,111.05,1.7,63.80775 +2770,30,2.5,111.05,1.7,63.8075 +2771,30,2.5,111.05,1.7,63.80725 +2772,30,2.5,111.05,1.7,63.807 +2773,30,2.5,111.05,1.7,63.80675 +2774,30,2.5,111.05,1.7,63.8065 +2775,30,2.5,111.05,1.7,63.80625 +2776,30,2.5,111.05,1.7,63.806 +2777,30,2.5,111.05,1.7,63.80575 +2778,30,2.5,111.05,1.7,63.8055 +2779,30,2.5,111.05,1.7,63.80525 +2780,30,2.5,111.05,1.7,63.805 +2781,30,2.5,111.05,1.7,63.80475 +2782,30,2.5,111.05,1.7,63.8045 +2783,30,2.5,111.05,1.7,63.80425 +2784,30,2.5,111.05,1.7,63.804 +2785,30,2.5,111.05,1.7,63.80375 +2786,30,2.5,111.05,1.7,63.8035 +2787,30,2.5,111.05,1.7,63.80325 +2788,30,2.5,111.05,1.7,63.803 +2789,30,2.5,111.05,1.7,63.80275 +2790,30,2.5,111.05,1.7,63.8025 +2791,30,2.5,111.05,1.7,63.80225 +2792,30,2.5,111.05,1.7,63.802 +2793,30,2.5,111.05,1.7,63.80175 +2794,30,2.5,111.05,1.7,63.8015 +2795,30,2.5,111.05,1.7,63.80125 +2796,30,2.5,111.05,1.7,63.801 +2797,30,2.5,111.05,1.7,63.80075 +2798,30,2.5,111.05,1.7,63.8005 +2799,30,2.5,111.05,1.7,63.80025 +2800,30,2.5,111.05,1.7,63.8 +2801,30,2.5,111.05,1.7,63.79975 +2802,30,2.5,111.05,1.7,63.7995 +2803,30,2.5,111.05,1.7,63.79925 +2804,30,2.5,111.05,1.7,63.799 +2805,30,2.5,111.05,1.7,63.79875 +2806,30,2.5,111.05,1.7,63.7985 +2807,30,2.5,111.05,1.7,63.79825 +2808,30,2.5,111.05,1.7,63.798 +2809,30,2.5,111.05,1.7,63.79775 +2810,30,2.5,111.05,1.7,63.7975 +2811,30,2.5,111.05,1.7,63.79725 +2812,30,2.5,111.05,1.7,63.797 +2813,30,2.5,111.05,1.7,63.79675 +2814,30,2.5,111.05,1.7,63.7965 +2815,30,2.5,111.05,1.7,63.79625 +2816,30,2.5,111.05,1.7,63.796 +2817,30,2.5,111.05,1.7,63.79575 +2818,30,2.5,111.05,1.7,63.7955 +2819,30,2.5,111.05,1.7,63.79525 +2820,30,2.5,111.05,1.7,63.795 +2821,30,2.5,111.05,1.7,63.79475 +2822,30,2.5,111.05,1.7,63.7945 +2823,30,2.5,111.05,1.7,63.79425 +2824,30,2.5,111.05,1.7,63.794 +2825,30,2.5,111.05,1.7,63.79375 +2826,30,2.5,111.05,1.7,63.7935 +2827,30,2.5,111.05,1.7,63.79325 +2828,30,2.5,111.05,1.7,63.793 +2829,30,2.5,111.05,1.7,63.79275 +2830,30,2.5,111.05,1.7,63.7925 +2831,30,2.5,111.05,1.7,63.79225 +2832,30,2.5,111.05,1.7,63.792 +2833,30,2.5,111.05,1.7,63.79175 +2834,30,2.5,111.05,1.7,63.7915 +2835,30,2.5,111.05,1.7,63.79125 +2836,30,2.5,111.05,1.7,63.791 +2837,30,2.5,111.05,1.7,63.79075 +2838,30,2.5,111.05,1.7,63.7905 +2839,30,2.5,111.05,1.7,63.79025 +2840,30,2.5,111.05,1.7,63.79 +2841,30,2.5,111.05,1.7,63.78975 +2842,30,2.5,111.05,1.7,63.7895 +2843,30,2.5,111.05,1.7,63.78925 +2844,30,2.5,111.05,1.7,63.789 +2845,30,2.5,111.05,1.7,63.78875 +2846,30,2.5,111.05,1.7,63.7885 +2847,30,2.5,111.05,1.7,63.78825 +2848,30,2.5,111.05,1.7,63.788 +2849,30,2.5,111.05,1.7,63.78775 +2850,30,2.5,111.05,1.7,63.7875 +2851,30,2.5,111.05,1.7,63.78725 +2852,30,2.5,111.05,1.7,63.787 +2853,30,2.5,111.05,1.7,63.78675 +2854,30,2.5,111.05,1.7,63.7865 +2855,30,2.5,111.05,1.7,63.78625 +2856,30,2.5,111.05,1.7,63.786 +2857,30,2.5,111.05,1.7,63.78575 +2858,30,2.5,111.05,1.7,63.7855 +2859,30,2.5,111.05,1.7,63.78525 +2860,30,2.5,111.05,1.7,63.785 +2861,30,2.5,111.05,1.7,63.78475 +2862,30,2.5,111.05,1.7,63.7845 +2863,30,2.5,111.05,1.7,63.78425 +2864,30,2.5,111.05,1.7,63.784 +2865,30,2.5,111.05,1.7,63.78375 +2866,30,2.5,111.05,1.7,63.7835 +2867,30,2.5,111.05,1.7,63.78325 +2868,30,2.5,111.05,1.7,63.783 +2869,30,2.5,111.05,1.7,63.78275 +2870,30,2.5,111.05,1.7,63.7825 +2871,30,2.5,111.05,1.7,63.78225 +2872,30,2.5,111.05,1.7,63.782 +2873,30,2.5,111.05,1.7,63.78175 +2874,30,2.5,111.05,1.7,63.7815 +2875,30,2.5,111.05,1.7,63.78125 +2876,30,2.5,111.05,1.7,63.781 +2877,30,2.5,111.05,1.7,63.78075 +2878,30,2.5,111.05,1.7,63.7805 +2879,30,2.5,111.05,1.7,63.78025 +2880,30,2.5,111.05,1.7,63.78 +2881,30,2.5,111.05,1.7,63.77975 +2882,30,2.5,111.05,1.7,63.7795 +2883,30,2.5,111.05,1.7,63.77925 +2884,30,2.5,111.05,1.7,63.779 +2885,30,2.5,111.05,1.7,63.77875 +2886,30,2.5,111.05,1.7,63.7785 +2887,30,2.5,111.05,1.7,63.77825 +2888,30,2.5,111.05,1.7,63.778 +2889,30,2.5,111.05,1.7,63.77775 +2890,30,2.5,111.05,1.7,63.7775 +2891,30,2.5,111.05,1.7,63.77725 +2892,30,2.5,111.05,1.7,63.777 +2893,30,2.5,111.05,1.7,63.77675 +2894,30,2.5,111.05,1.7,63.7765 +2895,30,2.5,111.05,1.7,63.77625 +2896,30,2.5,111.05,1.7,63.776 +2897,30,2.5,111.05,1.7,63.77575 +2898,30,2.5,111.05,1.7,63.7755 +2899,30,2.5,111.05,1.7,63.77525 +2900,30,2.5,111.05,1.7,63.775 +2901,30,2.5,111.05,1.7,63.77475 +2902,30,2.5,111.05,1.7,63.7745 +2903,30,2.5,111.05,1.7,63.77425 +2904,30,2.5,111.05,1.7,63.774 +2905,30,2.5,111.05,1.7,63.77375 +2906,30,2.5,111.05,1.7,63.7735 +2907,30,2.5,111.05,1.7,63.77325 +2908,30,2.5,111.05,1.7,63.773 +2909,30,2.5,111.05,1.7,63.77275 +2910,30,2.5,111.05,1.7,63.7725 +2911,30,2.5,111.05,1.7,63.77225 +2912,30,2.5,111.05,1.7,63.772 +2913,30,2.5,111.05,1.7,63.77175 +2914,30,2.5,111.05,1.7,63.7715 +2915,30,2.5,111.05,1.7,63.77125 +2916,30,2.5,111.05,1.7,63.771 +2917,30,2.5,111.05,1.7,63.77075 +2918,30,2.5,111.05,1.7,63.7705 +2919,30,2.5,111.05,1.7,63.77025 +2920,30,2.5,111.05,1.7,63.77 +2921,30,2.5,111.05,1.7,63.76975 +2922,30,2.5,111.05,1.7,63.7695 +2923,30,2.5,111.05,1.7,63.76925 +2924,30,2.5,111.05,1.7,63.769 +2925,30,2.5,111.05,1.7,63.76875 +2926,30,2.5,111.05,1.7,63.7685 +2927,30,2.5,111.05,1.7,63.76825 +2928,30,2.5,111.05,1.7,63.768 +2929,30,2.5,111.05,1.7,63.76775 +2930,30,2.5,111.05,1.7,63.7675 +2931,30,2.5,111.05,1.7,63.76725 +2932,30,2.5,111.05,1.7,63.767 +2933,30,2.5,111.05,1.7,63.76675 +2934,30,2.5,111.05,1.7,63.7665 +2935,30,2.5,111.05,1.7,63.76625 +2936,30,2.5,111.05,1.7,63.766 +2937,30,2.5,111.05,1.7,63.76575 +2938,30,2.5,111.05,1.7,63.7655 +2939,30,2.5,111.05,1.7,63.76525 +2940,30,2.5,111.05,1.7,63.765 +2941,30,2.5,111.05,1.7,63.76475 +2942,30,2.5,111.05,1.7,63.7645 +2943,30,2.5,111.05,1.7,63.76425 +2944,30,2.5,111.05,1.7,63.764 +2945,30,2.5,111.05,1.7,63.76375 +2946,30,2.5,111.05,1.7,63.7635 +2947,30,2.5,111.05,1.7,63.76325 +2948,30,2.5,111.05,1.7,63.763 +2949,30,2.5,111.05,1.7,63.76275 +2950,30,2.5,111.05,1.7,63.7625 +2951,30,2.5,111.05,1.7,63.76225 +2952,30,2.5,111.05,1.7,63.762 +2953,30,2.5,111.05,1.7,63.76175 +2954,30,2.5,111.05,1.7,63.7615 +2955,30,2.5,111.05,1.7,63.76125 +2956,30,2.5,111.05,1.7,63.761 +2957,30,2.5,111.05,1.7,63.76075 +2958,30,2.5,111.05,1.7,63.7605 +2959,30,2.5,111.05,1.7,63.76025 +2960,30,2.5,111.05,1.7,63.76 +2961,30,2.5,111.05,1.7,63.75975 +2962,30,2.5,111.05,1.7,63.7595 +2963,30,2.5,111.05,1.7,63.75925 +2964,30,2.5,111.05,1.7,63.759 +2965,30,2.5,111.05,1.7,63.75875 +2966,30,2.5,111.05,1.7,63.7585 +2967,30,2.5,111.05,1.7,63.75825 +2968,30,2.5,111.05,1.7,63.758 +2969,30,2.5,111.05,1.7,63.75775 +2970,30,2.5,111.05,1.7,63.7575 +2971,30,2.5,111.05,1.7,63.75725 +2972,30,2.5,111.05,1.7,63.757 +2973,30,2.5,111.05,1.7,63.75675 +2974,30,2.5,111.05,1.7,63.7565 +2975,30,2.5,111.05,1.7,63.75625 +2976,30,2.5,111.05,1.7,63.756 +2977,30,2.5,111.05,1.7,63.75575 +2978,30,2.5,111.05,1.7,63.7555 +2979,30,2.5,111.05,1.7,63.75525 +2980,30,2.5,111.05,1.7,63.755 +2981,30,2.5,111.05,1.7,63.75475 +2982,30,2.5,111.05,1.7,63.7545 +2983,30,2.5,111.05,1.7,63.75425 +2984,30,2.5,111.05,1.7,63.754 +2985,30,2.5,111.05,1.7,63.75375 +2986,30,2.5,111.05,1.7,63.7535 +2987,30,2.5,111.05,1.7,63.75325 +2988,30,2.5,111.05,1.7,63.753 +2989,30,2.5,111.05,1.7,63.75275 +2990,30,2.5,111.05,1.7,63.7525 +2991,30,2.5,111.05,1.7,63.75225 +2992,30,2.5,111.05,1.7,63.752 +2993,30,2.5,111.05,1.7,63.75175 +2994,30,2.5,111.05,1.7,63.7515 +2995,30,2.5,111.05,1.7,63.75125 +2996,30,2.5,111.05,1.7,63.751 +2997,30,2.5,111.05,1.7,63.75075 +2998,30,2.5,111.05,1.7,63.7505 +2999,30,2.5,111.05,1.7,63.75025 +3000,30,2.5,111.05,1.7,63.75 +3001,30,2.5,111.05,1.7,63.75 +3002,30,2.5,111.05,1.7,63.75 +3003,30,2.5,111.05,1.7,63.75 +3004,30,2.5,111.05,1.7,63.75 +3005,30,2.5,111.05,1.7,63.75 +3006,30,2.5,111.05,1.7,63.75 +3007,30,2.5,111.05,1.7,63.75 +3008,30,2.5,111.05,1.7,63.75 +3009,30,2.5,111.05,1.7,63.75 +3010,30,2.5,111.05,1.7,63.75 +3011,30,2.5,111.05,1.7,63.75 +3012,30,2.5,111.05,1.7,63.75 +3013,30,2.5,111.05,1.7,63.75 +3014,30,2.5,111.05,1.7,63.75 +3015,30,2.5,111.05,1.7,63.75 +3016,30,2.5,111.05,1.7,63.75 +3017,30,2.5,111.05,1.7,63.75 +3018,30,2.5,111.05,1.7,63.75 +3019,30,2.5,111.05,1.7,63.75 +3020,30,2.5,111.05,1.7,63.75 +3021,30,2.5,111.05,1.7,63.75 +3022,30,2.5,111.05,1.7,63.75 +3023,30,2.5,111.05,1.7,63.75 +3024,30,2.5,111.05,1.7,63.75 +3025,30,2.5,111.05,1.7,63.75 +3026,30,2.5,111.05,1.7,63.75 +3027,30,2.5,111.05,1.7,63.75 +3028,30,2.5,111.05,1.7,63.75 +3029,30,2.5,111.05,1.7,63.75 +3030,30,2.5,111.05,1.7,63.75 +3031,30,2.5,111.05,1.7,63.75 +3032,30,2.5,111.05,1.7,63.75 +3033,30,2.5,111.05,1.7,63.75 +3034,30,2.5,111.05,1.7,63.75 +3035,30,2.5,111.05,1.7,63.75 +3036,30,2.5,111.05,1.7,63.75 +3037,30,2.5,111.05,1.7,63.75 +3038,30,2.5,111.05,1.7,63.75 +3039,30,2.5,111.05,1.7,63.75 +3040,30,2.5,111.05,1.7,63.75 +3041,30,2.5,111.05,1.7,63.75 +3042,30,2.5,111.05,1.7,63.75 +3043,30,2.5,111.05,1.7,63.75 +3044,30,2.5,111.05,1.7,63.75 +3045,30,2.5,111.05,1.7,63.75 +3046,30,2.5,111.05,1.7,63.75 +3047,30,2.5,111.05,1.7,63.75 +3048,30,2.5,111.05,1.7,63.75 +3049,30,2.5,111.05,1.7,63.75 +3050,30,2.5,111.05,1.7,63.75 +3051,30,2.5,111.05,1.7,63.75 +3052,30,2.5,111.05,1.7,63.75 +3053,30,2.5,111.05,1.7,63.75 +3054,30,2.5,111.05,1.7,63.75 +3055,30,2.5,111.05,1.7,63.75 +3056,30,2.5,111.05,1.7,63.75 +3057,30,2.5,111.05,1.7,63.75 +3058,30,2.5,111.05,1.7,63.75 +3059,30,2.5,111.05,1.7,63.75 +3060,30,2.5,111.05,1.7,63.75 +3061,30,2.5,111.05,1.7,63.75 +3062,30,2.5,111.05,1.7,63.75 +3063,30,2.5,111.05,1.7,63.75 +3064,30,2.5,111.05,1.7,63.75 +3065,30,2.5,111.05,1.7,63.75 +3066,30,2.5,111.05,1.7,63.75 +3067,30,2.5,111.05,1.7,63.75 +3068,30,2.5,111.05,1.7,63.75 +3069,30,2.5,111.05,1.7,63.75 +3070,30,2.5,111.05,1.7,63.75 +3071,30,2.5,111.05,1.7,63.75 +3072,30,2.5,111.05,1.7,63.75 +3073,30,2.5,111.05,1.7,63.75 +3074,30,2.5,111.05,1.7,63.75 +3075,30,2.5,111.05,1.7,63.75 +3076,30,2.5,111.05,1.7,63.75 +3077,30,2.5,111.05,1.7,63.75 +3078,30,2.5,111.05,1.7,63.75 +3079,30,2.5,111.05,1.7,63.75 +3080,30,2.5,111.05,1.7,63.75 +3081,30,2.5,111.05,1.7,63.75 +3082,30,2.5,111.05,1.7,63.75 +3083,30,2.5,111.05,1.7,63.75 +3084,30,2.5,111.05,1.7,63.75 +3085,30,2.5,111.05,1.7,63.75 +3086,30,2.5,111.05,1.7,63.75 +3087,30,2.5,111.05,1.7,63.75 +3088,30,2.5,111.05,1.7,63.75 +3089,30,2.5,111.05,1.7,63.75 +3090,30,2.5,111.05,1.7,63.75 +3091,30,2.5,111.05,1.7,63.75 +3092,30,2.5,111.05,1.7,63.75 +3093,30,2.5,111.05,1.7,63.75 +3094,30,2.5,111.05,1.7,63.75 +3095,30,2.5,111.05,1.7,63.75 +3096,30,2.5,111.05,1.7,63.75 +3097,30,2.5,111.05,1.7,63.75 +3098,30,2.5,111.05,1.7,63.75 +3099,30,2.5,111.05,1.7,63.75 +3100,30,2.5,111.05,1.7,63.75 +3101,30,2.5,111.05,1.7,63.75 +3102,30,2.5,111.05,1.7,63.75 +3103,30,2.5,111.05,1.7,63.75 +3104,30,2.5,111.05,1.7,63.75 +3105,30,2.5,111.05,1.7,63.75 +3106,30,2.5,111.05,1.7,63.75 +3107,30,2.5,111.05,1.7,63.75 +3108,30,2.5,111.05,1.7,63.75 +3109,30,2.5,111.05,1.7,63.75 +3110,30,2.5,111.05,1.7,63.75 +3111,30,2.5,111.05,1.7,63.75 +3112,30,2.5,111.05,1.7,63.75 +3113,30,2.5,111.05,1.7,63.75 +3114,30,2.5,111.05,1.7,63.75 +3115,30,2.5,111.05,1.7,63.75 +3116,30,2.5,111.05,1.7,63.75 +3117,30,2.5,111.05,1.7,63.75 +3118,30,2.5,111.05,1.7,63.75 +3119,30,2.5,111.05,1.7,63.75 +3120,30,2.5,111.05,1.7,63.75 +3121,30,2.5,111.05,1.7,63.75 +3122,30,2.5,111.05,1.7,63.75 +3123,30,2.5,111.05,1.7,63.75 +3124,30,2.5,111.05,1.7,63.75 +3125,30,2.5,111.05,1.7,63.75 +3126,30,2.5,111.05,1.7,63.75 +3127,30,2.5,111.05,1.7,63.75 +3128,30,2.5,111.05,1.7,63.75 +3129,30,2.5,111.05,1.7,63.75 +3130,30,2.5,111.05,1.7,63.75 +3131,30,2.5,111.05,1.7,63.75 +3132,30,2.5,111.05,1.7,63.75 +3133,30,2.5,111.05,1.7,63.75 +3134,30,2.5,111.05,1.7,63.75 +3135,30,2.5,111.05,1.7,63.75 +3136,30,2.5,111.05,1.7,63.75 +3137,30,2.5,111.05,1.7,63.75 +3138,30,2.5,111.05,1.7,63.75 +3139,30,2.5,111.05,1.7,63.75 +3140,30,2.5,111.05,1.7,63.75 +3141,30,2.5,111.05,1.7,63.75 +3142,30,2.5,111.05,1.7,63.75 +3143,30,2.5,111.05,1.7,63.75 +3144,30,2.5,111.05,1.7,63.75 +3145,30,2.5,111.05,1.7,63.75 +3146,30,2.5,111.05,1.7,63.75 +3147,30,2.5,111.05,1.7,63.75 +3148,30,2.5,111.05,1.7,63.75 +3149,30,2.5,111.05,1.7,63.75 +3150,30,2.5,111.05,1.7,63.75 +3151,30,2.5,111.05,1.7,63.75 +3152,30,2.5,111.05,1.7,63.75 +3153,30,2.5,111.05,1.7,63.75 +3154,30,2.5,111.05,1.7,63.75 +3155,30,2.5,111.05,1.7,63.75 +3156,30,2.5,111.05,1.7,63.75 +3157,30,2.5,111.05,1.7,63.75 +3158,30,2.5,111.05,1.7,63.75 +3159,30,2.5,111.05,1.7,63.75 +3160,30,2.5,111.05,1.7,63.75 +3161,30,2.5,111.05,1.7,63.75 +3162,30,2.5,111.05,1.7,63.75 +3163,30,2.5,111.05,1.7,63.75 +3164,30,2.5,111.05,1.7,63.75 +3165,30,2.5,111.05,1.7,63.75 +3166,30,2.5,111.05,1.7,63.75 +3167,30,2.5,111.05,1.7,63.75 +3168,30,2.5,111.05,1.7,63.75 +3169,30,2.5,111.05,1.7,63.75 +3170,30,2.5,111.05,1.7,63.75 +3171,30,2.5,111.05,1.7,63.75 +3172,30,2.5,111.05,1.7,63.75 +3173,30,2.5,111.05,1.7,63.75 +3174,30,2.5,111.05,1.7,63.75 +3175,30,2.5,111.05,1.7,63.75 +3176,30,2.5,111.05,1.7,63.75 +3177,30,2.5,111.05,1.7,63.75 +3178,30,2.5,111.05,1.7,63.75 +3179,30,2.5,111.05,1.7,63.75 +3180,30,2.5,111.05,1.7,63.75 +3181,30,2.5,111.05,1.7,63.75 +3182,30,2.5,111.05,1.7,63.75 +3183,30,2.5,111.05,1.7,63.75 +3184,30,2.5,111.05,1.7,63.75 +3185,30,2.5,111.05,1.7,63.75 +3186,30,2.5,111.05,1.7,63.75 +3187,30,2.5,111.05,1.7,63.75 +3188,30,2.5,111.05,1.7,63.75 +3189,30,2.5,111.05,1.7,63.75 +3190,30,2.5,111.05,1.7,63.75 +3191,30,2.5,111.05,1.7,63.75 +3192,30,2.5,111.05,1.7,63.75 +3193,30,2.5,111.05,1.7,63.75 +3194,30,2.5,111.05,1.7,63.75 +3195,30,2.5,111.05,1.7,63.75 +3196,30,2.5,111.05,1.7,63.75 +3197,30,2.5,111.05,1.7,63.75 +3198,30,2.5,111.05,1.7,63.75 +3199,30,2.5,111.05,1.7,63.75 +3200,30,2.5,111.05,1.7,63.75 +3201,30,2.5,111.05,1.7,63.75 +3202,30,2.5,111.05,1.7,63.75 +3203,30,2.5,111.05,1.7,63.75 +3204,30,2.5,111.05,1.7,63.75 +3205,30,2.5,111.05,1.7,63.75 +3206,30,2.5,111.05,1.7,63.75 +3207,30,2.5,111.05,1.7,63.75 +3208,30,2.5,111.05,1.7,63.75 +3209,30,2.5,111.05,1.7,63.75 +3210,30,2.5,111.05,1.7,63.75 +3211,30,2.5,111.05,1.7,63.75 +3212,30,2.5,111.05,1.7,63.75 +3213,30,2.5,111.05,1.7,63.75 +3214,30,2.5,111.05,1.7,63.75 +3215,30,2.5,111.05,1.7,63.75 +3216,30,2.5,111.05,1.7,63.75 +3217,30,2.5,111.05,1.7,63.75 +3218,30,2.5,111.05,1.7,63.75 +3219,30,2.5,111.05,1.7,63.75 +3220,30,2.5,111.05,1.7,63.75 +3221,30,2.5,111.05,1.7,63.75 +3222,30,2.5,111.05,1.7,63.75 +3223,30,2.5,111.05,1.7,63.75 +3224,30,2.5,111.05,1.7,63.75 +3225,30,2.5,111.05,1.7,63.75 +3226,30,2.5,111.05,1.7,63.75 +3227,30,2.5,111.05,1.7,63.75 +3228,30,2.5,111.05,1.7,63.75 +3229,30,2.5,111.05,1.7,63.75 +3230,30,2.5,111.05,1.7,63.75 +3231,30,2.5,111.05,1.7,63.75 +3232,30,2.5,111.05,1.7,63.75 +3233,30,2.5,111.05,1.7,63.75 +3234,30,2.5,111.05,1.7,63.75 +3235,30,2.5,111.05,1.7,63.75 +3236,30,2.5,111.05,1.7,63.75 +3237,30,2.5,111.05,1.7,63.75 +3238,30,2.5,111.05,1.7,63.75 +3239,30,2.5,111.05,1.7,63.75 +3240,30,2.5,111.05,1.7,63.75 +3241,30,2.5,111.05,1.7,63.75 +3242,30,2.5,111.05,1.7,63.75 +3243,30,2.5,111.05,1.7,63.75 +3244,30,2.5,111.05,1.7,63.75 +3245,30,2.5,111.05,1.7,63.75 +3246,30,2.5,111.05,1.7,63.75 +3247,30,2.5,111.05,1.7,63.75 +3248,30,2.5,111.05,1.7,63.75 +3249,30,2.5,111.05,1.7,63.75 +3250,30,2.5,111.05,1.7,63.75 +3251,30,2.5,111.05,1.7,63.75 +3252,30,2.5,111.05,1.7,63.75 +3253,30,2.5,111.05,1.7,63.75 +3254,30,2.5,111.05,1.7,63.75 +3255,30,2.5,111.05,1.7,63.75 +3256,30,2.5,111.05,1.7,63.75 +3257,30,2.5,111.05,1.7,63.75 +3258,30,2.5,111.05,1.7,63.75 +3259,30,2.5,111.05,1.7,63.75 +3260,30,2.5,111.05,1.7,63.75 +3261,30,2.5,111.05,1.7,63.75 +3262,30,2.5,111.05,1.7,63.75 +3263,30,2.5,111.05,1.7,63.75 +3264,30,2.5,111.05,1.7,63.75 +3265,30,2.5,111.05,1.7,63.75 +3266,30,2.5,111.05,1.7,63.75 +3267,30,2.5,111.05,1.7,63.75 +3268,30,2.5,111.05,1.7,63.75 +3269,30,2.5,111.05,1.7,63.75 +3270,30,2.5,111.05,1.7,63.75 +3271,30,2.5,111.05,1.7,63.75 +3272,30,2.5,111.05,1.7,63.75 +3273,30,2.5,111.05,1.7,63.75 +3274,30,2.5,111.05,1.7,63.75 +3275,30,2.5,111.05,1.7,63.75 +3276,30,2.5,111.05,1.7,63.75 +3277,30,2.5,111.05,1.7,63.75 +3278,30,2.5,111.05,1.7,63.75 +3279,30,2.5,111.05,1.7,63.75 +3280,30,2.5,111.05,1.7,63.75 +3281,30,2.5,111.05,1.7,63.75 +3282,30,2.5,111.05,1.7,63.75 +3283,30,2.5,111.05,1.7,63.75 +3284,30,2.5,111.05,1.7,63.75 +3285,30,2.5,111.05,1.7,63.75 +3286,30,2.5,111.05,1.7,63.75 +3287,30,2.5,111.05,1.7,63.75 +3288,30,2.5,111.05,1.7,63.75 +3289,30,2.5,111.05,1.7,63.75 +3290,30,2.5,111.05,1.7,63.75 +3291,30,2.5,111.05,1.7,63.75 +3292,30,2.5,111.05,1.7,63.75 +3293,30,2.5,111.05,1.7,63.75 +3294,30,2.5,111.05,1.7,63.75 +3295,30,2.5,111.05,1.7,63.75 +3296,30,2.5,111.05,1.7,63.75 +3297,30,2.5,111.05,1.7,63.75 +3298,30,2.5,111.05,1.7,63.75 +3299,30,2.5,111.05,1.7,63.75 +3300,30,2.5,111.05,1.7,63.75 +3301,30,2.5,111.05,1.7,63.75 +3302,30,2.5,111.05,1.7,63.75 +3303,30,2.5,111.05,1.7,63.75 +3304,30,2.5,111.05,1.7,63.75 +3305,30,2.5,111.05,1.7,63.75 +3306,30,2.5,111.05,1.7,63.75 +3307,30,2.5,111.05,1.7,63.75 +3308,30,2.5,111.05,1.7,63.75 +3309,30,2.5,111.05,1.7,63.75 +3310,30,2.5,111.05,1.7,63.75 +3311,30,2.5,111.05,1.7,63.75 +3312,30,2.5,111.05,1.7,63.75 +3313,30,2.5,111.05,1.7,63.75 +3314,30,2.5,111.05,1.7,63.75 +3315,30,2.5,111.05,1.7,63.75 +3316,30,2.5,111.05,1.7,63.75 +3317,30,2.5,111.05,1.7,63.75 +3318,30,2.5,111.05,1.7,63.75 +3319,30,2.5,111.05,1.7,63.75 +3320,30,2.5,111.05,1.7,63.75 +3321,30,2.5,111.05,1.7,63.75 +3322,30,2.5,111.05,1.7,63.75 +3323,30,2.5,111.05,1.7,63.75 +3324,30,2.5,111.05,1.7,63.75 +3325,30,2.5,111.05,1.7,63.75 +3326,30,2.5,111.05,1.7,63.75 +3327,30,2.5,111.05,1.7,63.75 +3328,30,2.5,111.05,1.7,63.75 +3329,30,2.5,111.05,1.7,63.75 +3330,30,2.5,111.05,1.7,63.75 +3331,30,2.5,111.05,1.7,63.75 +3332,30,2.5,111.05,1.7,63.75 +3333,30,2.5,111.05,1.7,63.75 +3334,30,2.5,111.05,1.7,63.75 +3335,30,2.5,111.05,1.7,63.75 +3336,30,2.5,111.05,1.7,63.75 +3337,30,2.5,111.05,1.7,63.75 +3338,30,2.5,111.05,1.7,63.75 +3339,30,2.5,111.05,1.7,63.75 +3340,30,2.5,111.05,1.7,63.75 +3341,30,2.5,111.05,1.7,63.75 +3342,30,2.5,111.05,1.7,63.75 +3343,30,2.5,111.05,1.7,63.75 +3344,30,2.5,111.05,1.7,63.75 +3345,30,2.5,111.05,1.7,63.75 +3346,30,2.5,111.05,1.7,63.75 +3347,30,2.5,111.05,1.7,63.75 +3348,30,2.5,111.05,1.7,63.75 +3349,30,2.5,111.05,1.7,63.75 +3350,30,2.5,111.05,1.7,63.75 +3351,30,2.5,111.05,1.7,63.75 +3352,30,2.5,111.05,1.7,63.75 +3353,30,2.5,111.05,1.7,63.75 +3354,30,2.5,111.05,1.7,63.75 +3355,30,2.5,111.05,1.7,63.75 +3356,30,2.5,111.05,1.7,63.75 +3357,30,2.5,111.05,1.7,63.75 +3358,30,2.5,111.05,1.7,63.75 +3359,30,2.5,111.05,1.7,63.75 +3360,30,2.5,111.05,1.7,63.75 +3361,30,2.5,111.05,1.7,63.75 +3362,30,2.5,111.05,1.7,63.75 +3363,30,2.5,111.05,1.7,63.75 +3364,30,2.5,111.05,1.7,63.75 +3365,30,2.5,111.05,1.7,63.75 +3366,30,2.5,111.05,1.7,63.75 +3367,30,2.5,111.05,1.7,63.75 +3368,30,2.5,111.05,1.7,63.75 +3369,30,2.5,111.05,1.7,63.75 +3370,30,2.5,111.05,1.7,63.75 +3371,30,2.5,111.05,1.7,63.75 +3372,30,2.5,111.05,1.7,63.75 +3373,30,2.5,111.05,1.7,63.75 +3374,30,2.5,111.05,1.7,63.75 +3375,30,2.5,111.05,1.7,63.75 +3376,30,2.5,111.05,1.7,63.75 +3377,30,2.5,111.05,1.7,63.75 +3378,30,2.5,111.05,1.7,63.75 +3379,30,2.5,111.05,1.7,63.75 +3380,30,2.5,111.05,1.7,63.75 +3381,30,2.5,111.05,1.7,63.75 +3382,30,2.5,111.05,1.7,63.75 +3383,30,2.5,111.05,1.7,63.75 +3384,30,2.5,111.05,1.7,63.75 +3385,30,2.5,111.05,1.7,63.75 +3386,30,2.5,111.05,1.7,63.75 +3387,30,2.5,111.05,1.7,63.75 +3388,30,2.5,111.05,1.7,63.75 +3389,30,2.5,111.05,1.7,63.75 +3390,30,2.5,111.05,1.7,63.75 +3391,30,2.5,111.05,1.7,63.75 +3392,30,2.5,111.05,1.7,63.75 +3393,30,2.5,111.05,1.7,63.75 +3394,30,2.5,111.05,1.7,63.75 +3395,30,2.5,111.05,1.7,63.75 +3396,30,2.5,111.05,1.7,63.75 +3397,30,2.5,111.05,1.7,63.75 +3398,30,2.5,111.05,1.7,63.75 +3399,30,2.5,111.05,1.7,63.75 +3400,30,2.5,111.05,1.7,63.75 +3401,30,2.5,111.05,1.7,63.75 +3402,30,2.5,111.05,1.7,63.75 +3403,30,2.5,111.05,1.7,63.75 +3404,30,2.5,111.05,1.7,63.75 +3405,30,2.5,111.05,1.7,63.75 +3406,30,2.5,111.05,1.7,63.75 +3407,30,2.5,111.05,1.7,63.75 +3408,30,2.5,111.05,1.7,63.75 +3409,30,2.5,111.05,1.7,63.75 +3410,30,2.5,111.05,1.7,63.75 +3411,30,2.5,111.05,1.7,63.75 +3412,30,2.5,111.05,1.7,63.75 +3413,30,2.5,111.05,1.7,63.75 +3414,30,2.5,111.05,1.7,63.75 +3415,30,2.5,111.05,1.7,63.75 +3416,30,2.5,111.05,1.7,63.75 +3417,30,2.5,111.05,1.7,63.75 +3418,30,2.5,111.05,1.7,63.75 +3419,30,2.5,111.05,1.7,63.75 +3420,30,2.5,111.05,1.7,63.75 +3421,30,2.5,111.05,1.7,63.75 +3422,30,2.5,111.05,1.7,63.75 +3423,30,2.5,111.05,1.7,63.75 +3424,30,2.5,111.05,1.7,63.75 +3425,30,2.5,111.05,1.7,63.75 +3426,30,2.5,111.05,1.7,63.75 +3427,30,2.5,111.05,1.7,63.75 +3428,30,2.5,111.05,1.7,63.75 +3429,30,2.5,111.05,1.7,63.75 +3430,30,2.5,111.05,1.7,63.75 +3431,30,2.5,111.05,1.7,63.75 +3432,30,2.5,111.05,1.7,63.75 +3433,30,2.5,111.05,1.7,63.75 +3434,30,2.5,111.05,1.7,63.75 +3435,30,2.5,111.05,1.7,63.75 +3436,30,2.5,111.05,1.7,63.75 +3437,30,2.5,111.05,1.7,63.75 +3438,30,2.5,111.05,1.7,63.75 +3439,30,2.5,111.05,1.7,63.75 +3440,30,2.5,111.05,1.7,63.75 +3441,30,2.5,111.05,1.7,63.75 +3442,30,2.5,111.05,1.7,63.75 +3443,30,2.5,111.05,1.7,63.75 +3444,30,2.5,111.05,1.7,63.75 +3445,30,2.5,111.05,1.7,63.75 +3446,30,2.5,111.05,1.7,63.75 +3447,30,2.5,111.05,1.7,63.75 +3448,30,2.5,111.05,1.7,63.75 +3449,30,2.5,111.05,1.7,63.75 +3450,30,2.5,111.05,1.7,63.75 +3451,30,2.5,111.05,1.7,63.75 +3452,30,2.5,111.05,1.7,63.75 +3453,30,2.5,111.05,1.7,63.75 +3454,30,2.5,111.05,1.7,63.75 +3455,30,2.5,111.05,1.7,63.75 +3456,30,2.5,111.05,1.7,63.75 +3457,30,2.5,111.05,1.7,63.75 +3458,30,2.5,111.05,1.7,63.75 +3459,30,2.5,111.05,1.7,63.75 +3460,30,2.5,111.05,1.7,63.75 +3461,30,2.5,111.05,1.7,63.75 +3462,30,2.5,111.05,1.7,63.75 +3463,30,2.5,111.05,1.7,63.75 +3464,30,2.5,111.05,1.7,63.75 +3465,30,2.5,111.05,1.7,63.75 +3466,30,2.5,111.05,1.7,63.75 +3467,30,2.5,111.05,1.7,63.75 +3468,30,2.5,111.05,1.7,63.75 +3469,30,2.5,111.05,1.7,63.75 +3470,30,2.5,111.05,1.7,63.75 +3471,30,2.5,111.05,1.7,63.75 +3472,30,2.5,111.05,1.7,63.75 +3473,30,2.5,111.05,1.7,63.75 +3474,30,2.5,111.05,1.7,63.75 +3475,30,2.5,111.05,1.7,63.75 +3476,30,2.5,111.05,1.7,63.75 +3477,30,2.5,111.05,1.7,63.75 +3478,30,2.5,111.05,1.7,63.75 +3479,30,2.5,111.05,1.7,63.75 +3480,30,2.5,111.05,1.7,63.75 +3481,30,2.5,111.05,1.7,63.75 +3482,30,2.5,111.05,1.7,63.75 +3483,30,2.5,111.05,1.7,63.75 +3484,30,2.5,111.05,1.7,63.75 +3485,30,2.5,111.05,1.7,63.75 +3486,30,2.5,111.05,1.7,63.75 +3487,30,2.5,111.05,1.7,63.75 +3488,30,2.5,111.05,1.7,63.75 +3489,30,2.5,111.05,1.7,63.75 +3490,30,2.5,111.05,1.7,63.75 +3491,30,2.5,111.05,1.7,63.75 +3492,30,2.5,111.05,1.7,63.75 +3493,30,2.5,111.05,1.7,63.75 +3494,30,2.5,111.05,1.7,63.75 +3495,30,2.5,111.05,1.7,63.75 +3496,30,2.5,111.05,1.7,63.75 +3497,30,2.5,111.05,1.7,63.75 +3498,30,2.5,111.05,1.7,63.75 +3499,30,2.5,111.05,1.7,63.75 +3500,30,2.5,111.05,1.7,63.75 +3501,30,2.5,111.05,1.7,63.75 +3502,30,2.5,111.05,1.7,63.75 +3503,30,2.5,111.05,1.7,63.75 +3504,30,2.5,111.05,1.7,63.75 +3505,30,2.5,111.05,1.7,63.75 +3506,30,2.5,111.05,1.7,63.75 +3507,30,2.5,111.05,1.7,63.75 +3508,30,2.5,111.05,1.7,63.75 +3509,30,2.5,111.05,1.7,63.75 +3510,30,2.5,111.05,1.7,63.75 +3511,30,2.5,111.05,1.7,63.75 +3512,30,2.5,111.05,1.7,63.75 +3513,30,2.5,111.05,1.7,63.75 +3514,30,2.5,111.05,1.7,63.75 +3515,30,2.5,111.05,1.7,63.75 +3516,30,2.5,111.05,1.7,63.75 +3517,30,2.5,111.05,1.7,63.75 +3518,30,2.5,111.05,1.7,63.75 +3519,30,2.5,111.05,1.7,63.75 +3520,30,2.5,111.05,1.7,63.75 +3521,30,2.5,111.05,1.7,63.75 +3522,30,2.5,111.05,1.7,63.75 +3523,30,2.5,111.05,1.7,63.75 +3524,30,2.5,111.05,1.7,63.75 +3525,30,2.5,111.05,1.7,63.75 +3526,30,2.5,111.05,1.7,63.75 +3527,30,2.5,111.05,1.7,63.75 +3528,30,2.5,111.05,1.7,63.75 +3529,30,2.5,111.05,1.7,63.75 +3530,30,2.5,111.05,1.7,63.75 +3531,30,2.5,111.05,1.7,63.75 +3532,30,2.5,111.05,1.7,63.75 +3533,30,2.5,111.05,1.7,63.75 +3534,30,2.5,111.05,1.7,63.75 +3535,30,2.5,111.05,1.7,63.75 +3536,30,2.5,111.05,1.7,63.75 +3537,30,2.5,111.05,1.7,63.75 +3538,30,2.5,111.05,1.7,63.75 +3539,30,2.5,111.05,1.7,63.75 +3540,30,2.5,111.05,1.7,63.75 +3541,30,2.5,111.05,1.7,63.75 +3542,30,2.5,111.05,1.7,63.75 +3543,30,2.5,111.05,1.7,63.75 +3544,30,2.5,111.05,1.7,63.75 +3545,30,2.5,111.05,1.7,63.75 +3546,30,2.5,111.05,1.7,63.75 +3547,30,2.5,111.05,1.7,63.75 +3548,30,2.5,111.05,1.7,63.75 +3549,30,2.5,111.05,1.7,63.75 +3550,30,2.5,111.05,1.7,63.75 +3551,30,2.5,111.05,1.7,63.75 +3552,30,2.5,111.05,1.7,63.75 +3553,30,2.5,111.05,1.7,63.75 +3554,30,2.5,111.05,1.7,63.75 +3555,30,2.5,111.05,1.7,63.75 +3556,30,2.5,111.05,1.7,63.75 +3557,30,2.5,111.05,1.7,63.75 +3558,30,2.5,111.05,1.7,63.75 +3559,30,2.5,111.05,1.7,63.75 +3560,30,2.5,111.05,1.7,63.75 +3561,30,2.5,111.05,1.7,63.75 +3562,30,2.5,111.05,1.7,63.75 +3563,30,2.5,111.05,1.7,63.75 +3564,30,2.5,111.05,1.7,63.75 +3565,30,2.5,111.05,1.7,63.75 +3566,30,2.5,111.05,1.7,63.75 +3567,30,2.5,111.05,1.7,63.75 +3568,30,2.5,111.05,1.7,63.75 +3569,30,2.5,111.05,1.7,63.75 +3570,30,2.5,111.05,1.7,63.75 +3571,30,2.5,111.05,1.7,63.75 +3572,30,2.5,111.05,1.7,63.75 +3573,30,2.5,111.05,1.7,63.75 +3574,30,2.5,111.05,1.7,63.75 +3575,30,2.5,111.05,1.7,63.75 +3576,30,2.5,111.05,1.7,63.75 +3577,30,2.5,111.05,1.7,63.75 +3578,30,2.5,111.05,1.7,63.75 +3579,30,2.5,111.05,1.7,63.75 +3580,30,2.5,111.05,1.7,63.75 +3581,30,2.5,111.05,1.7,63.75 +3582,30,2.5,111.05,1.7,63.75 +3583,30,2.5,111.05,1.7,63.75 +3584,30,2.5,111.05,1.7,63.75 +3585,30,2.5,111.05,1.7,63.75 +3586,30,2.5,111.05,1.7,63.75 +3587,30,2.5,111.05,1.7,63.75 +3588,30,2.5,111.05,1.7,63.75 +3589,30,2.5,111.05,1.7,63.75 +3590,30,2.5,111.05,1.7,63.75 +3591,30,2.5,111.05,1.7,63.75 +3592,30,2.5,111.05,1.7,63.75 +3593,30,2.5,111.05,1.7,63.75 +3594,30,2.5,111.05,1.7,63.75 +3595,30,2.5,111.05,1.7,63.75 +3596,30,2.5,111.05,1.7,63.75 +3597,30,2.5,111.05,1.7,63.75 +3598,30,2.5,111.05,1.7,63.75 +3599,30,2.5,111.05,1.7,63.75 +3600,30,2.5,111.05,1.7,63.75 +3601,30,2.5,111.05,1.7,63.75 +3602,30,2.5,111.05,1.7,63.75 +3603,30,2.5,111.05,1.7,63.75 +3604,30,2.5,111.05,1.7,63.75 +3605,30,2.5,111.05,1.7,63.75 +3606,30,2.5,111.05,1.7,63.75 +3607,30,2.5,111.05,1.7,63.75 +3608,30,2.5,111.05,1.7,63.75 +3609,30,2.5,111.05,1.7,63.75 +3610,30,2.5,111.05,1.7,63.75 +3611,30,2.5,111.05,1.7,63.75 +3612,30,2.5,111.05,1.7,63.75 +3613,30,2.5,111.05,1.7,63.75 +3614,30,2.5,111.05,1.7,63.75 +3615,30,2.5,111.05,1.7,63.75 +3616,30,2.5,111.05,1.7,63.75 +3617,30,2.5,111.05,1.7,63.75 +3618,30,2.5,111.05,1.7,63.75 +3619,30,2.5,111.05,1.7,63.75 +3620,30,2.5,111.05,1.7,63.75 +3621,30,2.5,111.05,1.7,63.75 +3622,30,2.5,111.05,1.7,63.75 +3623,30,2.5,111.05,1.7,63.75 +3624,30,2.5,111.05,1.7,63.75 +3625,30,2.5,111.05,1.7,63.75 +3626,30,2.5,111.05,1.7,63.75 +3627,30,2.5,111.05,1.7,63.75 +3628,30,2.5,111.05,1.7,63.75 +3629,30,2.5,111.05,1.7,63.75 +3630,30,2.5,111.05,1.7,63.75 +3631,30,2.5,111.05,1.7,63.75 +3632,30,2.5,111.05,1.7,63.75 +3633,30,2.5,111.05,1.7,63.75 +3634,30,2.5,111.05,1.7,63.75 +3635,30,2.5,111.05,1.7,63.75 +3636,30,2.5,111.05,1.7,63.75 +3637,30,2.5,111.05,1.7,63.75 +3638,30,2.5,111.05,1.7,63.75 +3639,30,2.5,111.05,1.7,63.75 +3640,30,2.5,111.05,1.7,63.75 +3641,30,2.5,111.05,1.7,63.75 +3642,30,2.5,111.05,1.7,63.75 +3643,30,2.5,111.05,1.7,63.75 +3644,30,2.5,111.05,1.7,63.75 +3645,30,2.5,111.05,1.7,63.75 +3646,30,2.5,111.05,1.7,63.75 +3647,30,2.5,111.05,1.7,63.75 +3648,30,2.5,111.05,1.7,63.75 +3649,30,2.5,111.05,1.7,63.75 +3650,30,2.5,111.05,1.7,63.75 +3651,30,2.5,111.05,1.7,63.75 +3652,30,2.5,111.05,1.7,63.75 +3653,30,2.5,111.05,1.7,63.75 +3654,30,2.5,111.05,1.7,63.75 +3655,30,2.5,111.05,1.7,63.75 +3656,30,2.5,111.05,1.7,63.75 +3657,30,2.5,111.05,1.7,63.75 +3658,30,2.5,111.05,1.7,63.75 +3659,30,2.5,111.05,1.7,63.75 +3660,30,2.5,111.05,1.7,63.75 +3661,30,2.5,111.05,1.7,63.75 +3662,30,2.5,111.05,1.7,63.75 +3663,30,2.5,111.05,1.7,63.75 +3664,30,2.5,111.05,1.7,63.75 +3665,30,2.5,111.05,1.7,63.75 +3666,30,2.5,111.05,1.7,63.75 +3667,30,2.5,111.05,1.7,63.75 +3668,30,2.5,111.05,1.7,63.75 +3669,30,2.5,111.05,1.7,63.75 +3670,30,2.5,111.05,1.7,63.75 +3671,30,2.5,111.05,1.7,63.75 +3672,30,2.5,111.05,1.7,63.75 +3673,30,2.5,111.05,1.7,63.75 +3674,30,2.5,111.05,1.7,63.75 +3675,30,2.5,111.05,1.7,63.75 +3676,30,2.5,111.05,1.7,63.75 +3677,30,2.5,111.05,1.7,63.75 +3678,30,2.5,111.05,1.7,63.75 +3679,30,2.5,111.05,1.7,63.75 +3680,30,2.5,111.05,1.7,63.75 +3681,30,2.5,111.05,1.7,63.75 +3682,30,2.5,111.05,1.7,63.75 +3683,30,2.5,111.05,1.7,63.75 +3684,30,2.5,111.05,1.7,63.75 +3685,30,2.5,111.05,1.7,63.75 +3686,30,2.5,111.05,1.7,63.75 +3687,30,2.5,111.05,1.7,63.75 +3688,30,2.5,111.05,1.7,63.75 +3689,30,2.5,111.05,1.7,63.75 +3690,30,2.5,111.05,1.7,63.75 +3691,30,2.5,111.05,1.7,63.75 +3692,30,2.5,111.05,1.7,63.75 +3693,30,2.5,111.05,1.7,63.75 +3694,30,2.5,111.05,1.7,63.75 +3695,30,2.5,111.05,1.7,63.75 +3696,30,2.5,111.05,1.7,63.75 +3697,30,2.5,111.05,1.7,63.75 +3698,30,2.5,111.05,1.7,63.75 +3699,30,2.5,111.05,1.7,63.75 +3700,30,2.5,111.05,1.7,63.75 +3701,30,2.5,111.05,1.7,63.75 +3702,30,2.5,111.05,1.7,63.75 +3703,30,2.5,111.05,1.7,63.75 +3704,30,2.5,111.05,1.7,63.75 +3705,30,2.5,111.05,1.7,63.75 +3706,30,2.5,111.05,1.7,63.75 +3707,30,2.5,111.05,1.7,63.75 +3708,30,2.5,111.05,1.7,63.75 +3709,30,2.5,111.05,1.7,63.75 +3710,30,2.5,111.05,1.7,63.75 +3711,30,2.5,111.05,1.7,63.75 +3712,30,2.5,111.05,1.7,63.75 +3713,30,2.5,111.05,1.7,63.75 +3714,30,2.5,111.05,1.7,63.75 +3715,30,2.5,111.05,1.7,63.75 +3716,30,2.5,111.05,1.7,63.75 +3717,30,2.5,111.05,1.7,63.75 +3718,30,2.5,111.05,1.7,63.75 +3719,30,2.5,111.05,1.7,63.75 +3720,30,2.5,111.05,1.7,63.75 +3721,30,2.5,111.05,1.7,63.75 +3722,30,2.5,111.05,1.7,63.75 +3723,30,2.5,111.05,1.7,63.75 +3724,30,2.5,111.05,1.7,63.75 +3725,30,2.5,111.05,1.7,63.75 +3726,30,2.5,111.05,1.7,63.75 +3727,30,2.5,111.05,1.7,63.75 +3728,30,2.5,111.05,1.7,63.75 +3729,30,2.5,111.05,1.7,63.75 +3730,30,2.5,111.05,1.7,63.75 +3731,30,2.5,111.05,1.7,63.75 +3732,30,2.5,111.05,1.7,63.75 +3733,30,2.5,111.05,1.7,63.75 +3734,30,2.5,111.05,1.7,63.75 +3735,30,2.5,111.05,1.7,63.75 +3736,30,2.5,111.05,1.7,63.75 +3737,30,2.5,111.05,1.7,63.75 +3738,30,2.5,111.05,1.7,63.75 +3739,30,2.5,111.05,1.7,63.75 +3740,30,2.5,111.05,1.7,63.75 +3741,30,2.5,111.05,1.7,63.75 +3742,30,2.5,111.05,1.7,63.75 +3743,30,2.5,111.05,1.7,63.75 +3744,30,2.5,111.05,1.7,63.75 +3745,30,2.5,111.05,1.7,63.75 +3746,30,2.5,111.05,1.7,63.75 +3747,30,2.5,111.05,1.7,63.75 +3748,30,2.5,111.05,1.7,63.75 +3749,30,2.5,111.05,1.7,63.75 +3750,30,2.5,111.05,1.7,63.75 +3751,30,2.5,111.05,1.7,63.75 +3752,30,2.5,111.05,1.7,63.75 +3753,30,2.5,111.05,1.7,63.75 +3754,30,2.5,111.05,1.7,63.75 +3755,30,2.5,111.05,1.7,63.75 +3756,30,2.5,111.05,1.7,63.75 +3757,30,2.5,111.05,1.7,63.75 +3758,30,2.5,111.05,1.7,63.75 +3759,30,2.5,111.05,1.7,63.75 +3760,30,2.5,111.05,1.7,63.75 +3761,30,2.5,111.05,1.7,63.75 +3762,30,2.5,111.05,1.7,63.75 +3763,30,2.5,111.05,1.7,63.75 +3764,30,2.5,111.05,1.7,63.75 +3765,30,2.5,111.05,1.7,63.75 +3766,30,2.5,111.05,1.7,63.75 +3767,30,2.5,111.05,1.7,63.75 +3768,30,2.5,111.05,1.7,63.75 +3769,30,2.5,111.05,1.7,63.75 +3770,30,2.5,111.05,1.7,63.75 +3771,30,2.5,111.05,1.7,63.75 +3772,30,2.5,111.05,1.7,63.75 +3773,30,2.5,111.05,1.7,63.75 +3774,30,2.5,111.05,1.7,63.75 +3775,30,2.5,111.05,1.7,63.75 +3776,30,2.5,111.05,1.7,63.75 +3777,30,2.5,111.05,1.7,63.75 +3778,30,2.5,111.05,1.7,63.75 +3779,30,2.5,111.05,1.7,63.75 +3780,30,2.5,111.05,1.7,63.75 +3781,30,2.5,111.05,1.7,63.75 +3782,30,2.5,111.05,1.7,63.75 +3783,30,2.5,111.05,1.7,63.75 +3784,30,2.5,111.05,1.7,63.75 +3785,30,2.5,111.05,1.7,63.75 +3786,30,2.5,111.05,1.7,63.75 +3787,30,2.5,111.05,1.7,63.75 +3788,30,2.5,111.05,1.7,63.75 +3789,30,2.5,111.05,1.7,63.75 +3790,30,2.5,111.05,1.7,63.75 +3791,30,2.5,111.05,1.7,63.75 +3792,30,2.5,111.05,1.7,63.75 +3793,30,2.5,111.05,1.7,63.75 +3794,30,2.5,111.05,1.7,63.75 +3795,30,2.5,111.05,1.7,63.75 +3796,30,2.5,111.05,1.7,63.75 +3797,30,2.5,111.05,1.7,63.75 +3798,30,2.5,111.05,1.7,63.75 +3799,30,2.5,111.05,1.7,63.75 +3800,30,2.5,111.05,1.7,63.75 +3801,30,2.5,111.05,1.7,63.75 +3802,30,2.5,111.05,1.7,63.75 +3803,30,2.5,111.05,1.7,63.75 +3804,30,2.5,111.05,1.7,63.75 +3805,30,2.5,111.05,1.7,63.75 +3806,30,2.5,111.05,1.7,63.75 +3807,30,2.5,111.05,1.7,63.75 +3808,30,2.5,111.05,1.7,63.75 +3809,30,2.5,111.05,1.7,63.75 +3810,30,2.5,111.05,1.7,63.75 +3811,30,2.5,111.05,1.7,63.75 +3812,30,2.5,111.05,1.7,63.75 +3813,30,2.5,111.05,1.7,63.75 +3814,30,2.5,111.05,1.7,63.75 +3815,30,2.5,111.05,1.7,63.75 +3816,30,2.5,111.05,1.7,63.75 +3817,30,2.5,111.05,1.7,63.75 +3818,30,2.5,111.05,1.7,63.75 +3819,30,2.5,111.05,1.7,63.75 +3820,30,2.5,111.05,1.7,63.75 +3821,30,2.5,111.05,1.7,63.75 +3822,30,2.5,111.05,1.7,63.75 +3823,30,2.5,111.05,1.7,63.75 +3824,30,2.5,111.05,1.7,63.75 +3825,30,2.5,111.05,1.7,63.75 +3826,30,2.5,111.05,1.7,63.75 +3827,30,2.5,111.05,1.7,63.75 +3828,30,2.5,111.05,1.7,63.75 +3829,30,2.5,111.05,1.7,63.75 +3830,30,2.5,111.05,1.7,63.75 +3831,30,2.5,111.05,1.7,63.75 +3832,30,2.5,111.05,1.7,63.75 +3833,30,2.5,111.05,1.7,63.75 +3834,30,2.5,111.05,1.7,63.75 +3835,30,2.5,111.05,1.7,63.75 +3836,30,2.5,111.05,1.7,63.75 +3837,30,2.5,111.05,1.7,63.75 +3838,30,2.5,111.05,1.7,63.75 +3839,30,2.5,111.05,1.7,63.75 +3840,30,2.5,111.05,1.7,63.75 +3841,30,2.5,111.05,1.7,63.75 +3842,30,2.5,111.05,1.7,63.75 +3843,30,2.5,111.05,1.7,63.75 +3844,30,2.5,111.05,1.7,63.75 +3845,30,2.5,111.05,1.7,63.75 +3846,30,2.5,111.05,1.7,63.75 +3847,30,2.5,111.05,1.7,63.75 +3848,30,2.5,111.05,1.7,63.75 +3849,30,2.5,111.05,1.7,63.75 +3850,30,2.5,111.05,1.7,63.75 +3851,30,2.5,111.05,1.7,63.75 +3852,30,2.5,111.05,1.7,63.75 +3853,30,2.5,111.05,1.7,63.75 +3854,30,2.5,111.05,1.7,63.75 +3855,30,2.5,111.05,1.7,63.75 +3856,30,2.5,111.05,1.7,63.75 +3857,30,2.5,111.05,1.7,63.75 +3858,30,2.5,111.05,1.7,63.75 +3859,30,2.5,111.05,1.7,63.75 +3860,30,2.5,111.05,1.7,63.75 +3861,30,2.5,111.05,1.7,63.75 +3862,30,2.5,111.05,1.7,63.75 +3863,30,2.5,111.05,1.7,63.75 +3864,30,2.5,111.05,1.7,63.75 +3865,30,2.5,111.05,1.7,63.75 +3866,30,2.5,111.05,1.7,63.75 +3867,30,2.5,111.05,1.7,63.75 +3868,30,2.5,111.05,1.7,63.75 +3869,30,2.5,111.05,1.7,63.75 +3870,30,2.5,111.05,1.7,63.75 +3871,30,2.5,111.05,1.7,63.75 +3872,30,2.5,111.05,1.7,63.75 +3873,30,2.5,111.05,1.7,63.75 +3874,30,2.5,111.05,1.7,63.75 +3875,30,2.5,111.05,1.7,63.75 +3876,30,2.5,111.05,1.7,63.75 +3877,30,2.5,111.05,1.7,63.75 +3878,30,2.5,111.05,1.7,63.75 +3879,30,2.5,111.05,1.7,63.75 +3880,30,2.5,111.05,1.7,63.75 +3881,30,2.5,111.05,1.7,63.75 +3882,30,2.5,111.05,1.7,63.75 +3883,30,2.5,111.05,1.7,63.75 +3884,30,2.5,111.05,1.7,63.75 +3885,30,2.5,111.05,1.7,63.75 +3886,30,2.5,111.05,1.7,63.75 +3887,30,2.5,111.05,1.7,63.75 +3888,30,2.5,111.05,1.7,63.75 +3889,30,2.5,111.05,1.7,63.75 +3890,30,2.5,111.05,1.7,63.75 +3891,30,2.5,111.05,1.7,63.75 +3892,30,2.5,111.05,1.7,63.75 +3893,30,2.5,111.05,1.7,63.75 +3894,30,2.5,111.05,1.7,63.75 +3895,30,2.5,111.05,1.7,63.75 +3896,30,2.5,111.05,1.7,63.75 +3897,30,2.5,111.05,1.7,63.75 +3898,30,2.5,111.05,1.7,63.75 +3899,30,2.5,111.05,1.7,63.75 +3900,30,2.5,111.05,1.7,63.75 +3901,30,2.5,111.05,1.7,63.75 +3902,30,2.5,111.05,1.7,63.75 +3903,30,2.5,111.05,1.7,63.75 +3904,30,2.5,111.05,1.7,63.75 +3905,30,2.5,111.05,1.7,63.75 +3906,30,2.5,111.05,1.7,63.75 +3907,30,2.5,111.05,1.7,63.75 +3908,30,2.5,111.05,1.7,63.75 +3909,30,2.5,111.05,1.7,63.75 +3910,30,2.5,111.05,1.7,63.75 +3911,30,2.5,111.05,1.7,63.75 +3912,30,2.5,111.05,1.7,63.75 +3913,30,2.5,111.05,1.7,63.75 +3914,30,2.5,111.05,1.7,63.75 +3915,30,2.5,111.05,1.7,63.75 +3916,30,2.5,111.05,1.7,63.75 +3917,30,2.5,111.05,1.7,63.75 +3918,30,2.5,111.05,1.7,63.75 +3919,30,2.5,111.05,1.7,63.75 +3920,30,2.5,111.05,1.7,63.75 +3921,30,2.5,111.05,1.7,63.75 +3922,30,2.5,111.05,1.7,63.75 +3923,30,2.5,111.05,1.7,63.75 +3924,30,2.5,111.05,1.7,63.75 +3925,30,2.5,111.05,1.7,63.75 +3926,30,2.5,111.05,1.7,63.75 +3927,30,2.5,111.05,1.7,63.75 +3928,30,2.5,111.05,1.7,63.75 +3929,30,2.5,111.05,1.7,63.75 +3930,30,2.5,111.05,1.7,63.75 +3931,30,2.5,111.05,1.7,63.75 +3932,30,2.5,111.05,1.7,63.75 +3933,30,2.5,111.05,1.7,63.75 +3934,30,2.5,111.05,1.7,63.75 +3935,30,2.5,111.05,1.7,63.75 +3936,30,2.5,111.05,1.7,63.75 +3937,30,2.5,111.05,1.7,63.75 +3938,30,2.5,111.05,1.7,63.75 +3939,30,2.5,111.05,1.7,63.75 +3940,30,2.5,111.05,1.7,63.75 +3941,30,2.5,111.05,1.7,63.75 +3942,30,2.5,111.05,1.7,63.75 +3943,30,2.5,111.05,1.7,63.75 +3944,30,2.5,111.05,1.7,63.75 +3945,30,2.5,111.05,1.7,63.75 +3946,30,2.5,111.05,1.7,63.75 +3947,30,2.5,111.05,1.7,63.75 +3948,30,2.5,111.05,1.7,63.75 +3949,30,2.5,111.05,1.7,63.75 +3950,30,2.5,111.05,1.7,63.75 +3951,30,2.5,111.05,1.7,63.75 +3952,30,2.5,111.05,1.7,63.75 +3953,30,2.5,111.05,1.7,63.75 +3954,30,2.5,111.05,1.7,63.75 +3955,30,2.5,111.05,1.7,63.75 +3956,30,2.5,111.05,1.7,63.75 +3957,30,2.5,111.05,1.7,63.75 +3958,30,2.5,111.05,1.7,63.75 +3959,30,2.5,111.05,1.7,63.75 +3960,30,2.5,111.05,1.7,63.75 +3961,30,2.5,111.05,1.7,63.75 +3962,30,2.5,111.05,1.7,63.75 +3963,30,2.5,111.05,1.7,63.75 +3964,30,2.5,111.05,1.7,63.75 +3965,30,2.5,111.05,1.7,63.75 +3966,30,2.5,111.05,1.7,63.75 +3967,30,2.5,111.05,1.7,63.75 +3968,30,2.5,111.05,1.7,63.75 +3969,30,2.5,111.05,1.7,63.75 +3970,30,2.5,111.05,1.7,63.75 +3971,30,2.5,111.05,1.7,63.75 +3972,30,2.5,111.05,1.7,63.75 +3973,30,2.5,111.05,1.7,63.75 +3974,30,2.5,111.05,1.7,63.75 +3975,30,2.5,111.05,1.7,63.75 +3976,30,2.5,111.05,1.7,63.75 +3977,30,2.5,111.05,1.7,63.75 +3978,30,2.5,111.05,1.7,63.75 +3979,30,2.5,111.05,1.7,63.75 +3980,30,2.5,111.05,1.7,63.75 +3981,30,2.5,111.05,1.7,63.75 +3982,30,2.5,111.05,1.7,63.75 +3983,30,2.5,111.05,1.7,63.75 +3984,30,2.5,111.05,1.7,63.75 +3985,30,2.5,111.05,1.7,63.75 +3986,30,2.5,111.05,1.7,63.75 +3987,30,2.5,111.05,1.7,63.75 +3988,30,2.5,111.05,1.7,63.75 +3989,30,2.5,111.05,1.7,63.75 +3990,30,2.5,111.05,1.7,63.75 +3991,30,2.5,111.05,1.7,63.75 +3992,30,2.5,111.05,1.7,63.75 +3993,30,2.5,111.05,1.7,63.75 +3994,30,2.5,111.05,1.7,63.75 +3995,30,2.5,111.05,1.7,63.75 +3996,30,2.5,111.05,1.7,63.75 +3997,30,2.5,111.05,1.7,63.75 +3998,30,2.5,111.05,1.7,63.75 +3999,30,2.5,111.05,1.7,63.75 +4000,30,2.5,111.05,1.7,63.75 +4001,30,2.5,111.05,1.7,63.75 +4002,30,2.5,111.05,1.7,63.75 +4003,30,2.5,111.05,1.7,63.75 +4004,30,2.5,111.05,1.7,63.75 +4005,30,2.5,111.05,1.7,63.75 +4006,30,2.5,111.05,1.7,63.75 +4007,30,2.5,111.05,1.7,63.75 +4008,30,2.5,111.05,1.7,63.75 +4009,30,2.5,111.05,1.7,63.75 +4010,30,2.5,111.05,1.7,63.75 +4011,30,2.5,111.05,1.7,63.75 +4012,30,2.5,111.05,1.7,63.75 +4013,30,2.5,111.05,1.7,63.75 +4014,30,2.5,111.05,1.7,63.75 +4015,30,2.5,111.05,1.7,63.75 +4016,30,2.5,111.05,1.7,63.75 +4017,30,2.5,111.05,1.7,63.75 +4018,30,2.5,111.05,1.7,63.75 +4019,30,2.5,111.05,1.7,63.75 +4020,30,2.5,111.05,1.7,63.75 +4021,30,2.5,111.05,1.7,63.75 +4022,30,2.5,111.05,1.7,63.75 +4023,30,2.5,111.05,1.7,63.75 +4024,30,2.5,111.05,1.7,63.75 +4025,30,2.5,111.05,1.7,63.75 +4026,30,2.5,111.05,1.7,63.75 +4027,30,2.5,111.05,1.7,63.75 +4028,30,2.5,111.05,1.7,63.75 +4029,30,2.5,111.05,1.7,63.75 +4030,30,2.5,111.05,1.7,63.75 +4031,30,2.5,111.05,1.7,63.75 +4032,30,2.5,111.05,1.7,63.75 +4033,30,2.5,111.05,1.7,63.75 +4034,30,2.5,111.05,1.7,63.75 +4035,30,2.5,111.05,1.7,63.75 +4036,30,2.5,111.05,1.7,63.75 +4037,30,2.5,111.05,1.7,63.75 +4038,30,2.5,111.05,1.7,63.75 +4039,30,2.5,111.05,1.7,63.75 +4040,30,2.5,111.05,1.7,63.75 +4041,30,2.5,111.05,1.7,63.75 +4042,30,2.5,111.05,1.7,63.75 +4043,30,2.5,111.05,1.7,63.75 +4044,30,2.5,111.05,1.7,63.75 +4045,30,2.5,111.05,1.7,63.75 +4046,30,2.5,111.05,1.7,63.75 +4047,30,2.5,111.05,1.7,63.75 +4048,30,2.5,111.05,1.7,63.75 +4049,30,2.5,111.05,1.7,63.75 +4050,30,2.5,111.05,1.7,63.75 +4051,30,2.5,111.05,1.7,63.75 +4052,30,2.5,111.05,1.7,63.75 +4053,30,2.5,111.05,1.7,63.75 +4054,30,2.5,111.05,1.7,63.75 +4055,30,2.5,111.05,1.7,63.75 +4056,30,2.5,111.05,1.7,63.75 +4057,30,2.5,111.05,1.7,63.75 +4058,30,2.5,111.05,1.7,63.75 +4059,30,2.5,111.05,1.7,63.75 +4060,30,2.5,111.05,1.7,63.75 +4061,30,2.5,111.05,1.7,63.75 +4062,30,2.5,111.05,1.7,63.75 +4063,30,2.5,111.05,1.7,63.75 +4064,30,2.5,111.05,1.7,63.75 +4065,30,2.5,111.05,1.7,63.75 +4066,30,2.5,111.05,1.7,63.75 +4067,30,2.5,111.05,1.7,63.75 +4068,30,2.5,111.05,1.7,63.75 +4069,30,2.5,111.05,1.7,63.75 +4070,30,2.5,111.05,1.7,63.75 +4071,30,2.5,111.05,1.7,63.75 +4072,30,2.5,111.05,1.7,63.75 +4073,30,2.5,111.05,1.7,63.75 +4074,30,2.5,111.05,1.7,63.75 +4075,30,2.5,111.05,1.7,63.75 +4076,30,2.5,111.05,1.7,63.75 +4077,30,2.5,111.05,1.7,63.75 +4078,30,2.5,111.05,1.7,63.75 +4079,30,2.5,111.05,1.7,63.75 +4080,30,2.5,111.05,1.7,63.75 +4081,30,2.5,111.05,1.7,63.75 +4082,30,2.5,111.05,1.7,63.75 +4083,30,2.5,111.05,1.7,63.75 +4084,30,2.5,111.05,1.7,63.75 +4085,30,2.5,111.05,1.7,63.75 +4086,30,2.5,111.05,1.7,63.75 +4087,30,2.5,111.05,1.7,63.75 +4088,30,2.5,111.05,1.7,63.75 +4089,30,2.5,111.05,1.7,63.75 +4090,30,2.5,111.05,1.7,63.75 +4091,30,2.5,111.05,1.7,63.75 +4092,30,2.5,111.05,1.7,63.75 +4093,30,2.5,111.05,1.7,63.75 +4094,30,2.5,111.05,1.7,63.75 +4095,30,2.5,111.05,1.7,63.75 +4096,30,2.5,111.05,1.7,63.75 +4097,30,2.5,111.05,1.7,63.75 +4098,30,2.5,111.05,1.7,63.75 +4099,30,2.5,111.05,1.7,63.75 +4100,30,2.5,111.05,1.7,63.75 +4101,30,2.5,111.05,1.7,63.75 +4102,30,2.5,111.05,1.7,63.75 +4103,30,2.5,111.05,1.7,63.75 +4104,30,2.5,111.05,1.7,63.75 +4105,30,2.5,111.05,1.7,63.75 +4106,30,2.5,111.05,1.7,63.75 +4107,30,2.5,111.05,1.7,63.75 +4108,30,2.5,111.05,1.7,63.75 +4109,30,2.5,111.05,1.7,63.75 +4110,30,2.5,111.05,1.7,63.75 +4111,30,2.5,111.05,1.7,63.75 +4112,30,2.5,111.05,1.7,63.75 +4113,30,2.5,111.05,1.7,63.75 +4114,30,2.5,111.05,1.7,63.75 +4115,30,2.5,111.05,1.7,63.75 +4116,30,2.5,111.05,1.7,63.75 +4117,30,2.5,111.05,1.7,63.75 +4118,30,2.5,111.05,1.7,63.75 +4119,30,2.5,111.05,1.7,63.75 +4120,30,2.5,111.05,1.7,63.75 +4121,30,2.5,111.05,1.7,63.75 +4122,30,2.5,111.05,1.7,63.75 +4123,30,2.5,111.05,1.7,63.75 +4124,30,2.5,111.05,1.7,63.75 +4125,30,2.5,111.05,1.7,63.75 +4126,30,2.5,111.05,1.7,63.75 +4127,30,2.5,111.05,1.7,63.75 +4128,30,2.5,111.05,1.7,63.75 +4129,30,2.5,111.05,1.7,63.75 +4130,30,2.5,111.05,1.7,63.75 +4131,30,2.5,111.05,1.7,63.75 +4132,30,2.5,111.05,1.7,63.75 +4133,30,2.5,111.05,1.7,63.75 +4134,30,2.5,111.05,1.7,63.75 +4135,30,2.5,111.05,1.7,63.75 +4136,30,2.5,111.05,1.7,63.75 +4137,30,2.5,111.05,1.7,63.75 +4138,30,2.5,111.05,1.7,63.75 +4139,30,2.5,111.05,1.7,63.75 +4140,30,2.5,111.05,1.7,63.75 +4141,30,2.5,111.05,1.7,63.75 +4142,30,2.5,111.05,1.7,63.75 +4143,30,2.5,111.05,1.7,63.75 +4144,30,2.5,111.05,1.7,63.75 +4145,30,2.5,111.05,1.7,63.75 +4146,30,2.5,111.05,1.7,63.75 +4147,30,2.5,111.05,1.7,63.75 +4148,30,2.5,111.05,1.7,63.75 +4149,30,2.5,111.05,1.7,63.75 +4150,30,2.5,111.05,1.7,63.75 +4151,30,2.5,111.05,1.7,63.75 +4152,30,2.5,111.05,1.7,63.75 +4153,30,2.5,111.05,1.7,63.75 +4154,30,2.5,111.05,1.7,63.75 +4155,30,2.5,111.05,1.7,63.75 +4156,30,2.5,111.05,1.7,63.75 +4157,30,2.5,111.05,1.7,63.75 +4158,30,2.5,111.05,1.7,63.75 +4159,30,2.5,111.05,1.7,63.75 +4160,30,2.5,111.05,1.7,63.75 +4161,30,2.5,111.05,1.7,63.75 +4162,30,2.5,111.05,1.7,63.75 +4163,30,2.5,111.05,1.7,63.75 +4164,30,2.5,111.05,1.7,63.75 +4165,30,2.5,111.05,1.7,63.75 +4166,30,2.5,111.05,1.7,63.75 +4167,30,2.5,111.05,1.7,63.75 +4168,30,2.5,111.05,1.7,63.75 +4169,30,2.5,111.05,1.7,63.75 +4170,30,2.5,111.05,1.7,63.75 +4171,30,2.5,111.05,1.7,63.75 +4172,30,2.5,111.05,1.7,63.75 +4173,30,2.5,111.05,1.7,63.75 +4174,30,2.5,111.05,1.7,63.75 +4175,30,2.5,111.05,1.7,63.75 +4176,30,2.5,111.05,1.7,63.75 +4177,30,2.5,111.05,1.7,63.75 +4178,30,2.5,111.05,1.7,63.75 +4179,30,2.5,111.05,1.7,63.75 +4180,30,2.5,111.05,1.7,63.75 +4181,30,2.5,111.05,1.7,63.75 +4182,30,2.5,111.05,1.7,63.75 +4183,30,2.5,111.05,1.7,63.75 +4184,30,2.5,111.05,1.7,63.75 +4185,30,2.5,111.05,1.7,63.75 +4186,30,2.5,111.05,1.7,63.75 +4187,30,2.5,111.05,1.7,63.75 +4188,30,2.5,111.05,1.7,63.75 +4189,30,2.5,111.05,1.7,63.75 +4190,30,2.5,111.05,1.7,63.75 +4191,30,2.5,111.05,1.7,63.75 +4192,30,2.5,111.05,1.7,63.75 +4193,30,2.5,111.05,1.7,63.75 +4194,30,2.5,111.05,1.7,63.75 +4195,30,2.5,111.05,1.7,63.75 +4196,30,2.5,111.05,1.7,63.75 +4197,30,2.5,111.05,1.7,63.75 +4198,30,2.5,111.05,1.7,63.75 +4199,30,2.5,111.05,1.7,63.75 +4200,30,2.5,111.05,1.7,63.75 +4201,30,2.5,111.05,1.7,63.75 +4202,30,2.5,111.05,1.7,63.75 +4203,30,2.5,111.05,1.7,63.75 +4204,30,2.5,111.05,1.7,63.75 +4205,30,2.5,111.05,1.7,63.75 +4206,30,2.5,111.05,1.7,63.75 +4207,30,2.5,111.05,1.7,63.75 +4208,30,2.5,111.05,1.7,63.75 +4209,30,2.5,111.05,1.7,63.75 +4210,30,2.5,111.05,1.7,63.75 +4211,30,2.5,111.05,1.7,63.75 +4212,30,2.5,111.05,1.7,63.75 +4213,30,2.5,111.05,1.7,63.75 +4214,30,2.5,111.05,1.7,63.75 +4215,30,2.5,111.05,1.7,63.75 +4216,30,2.5,111.05,1.7,63.75 +4217,30,2.5,111.05,1.7,63.75 +4218,30,2.5,111.05,1.7,63.75 +4219,30,2.5,111.05,1.7,63.75 +4220,30,2.5,111.05,1.7,63.75 +4221,30,2.5,111.05,1.7,63.75 +4222,30,2.5,111.05,1.7,63.75 +4223,30,2.5,111.05,1.7,63.75 +4224,30,2.5,111.05,1.7,63.75 +4225,30,2.5,111.05,1.7,63.75 +4226,30,2.5,111.05,1.7,63.75 +4227,30,2.5,111.05,1.7,63.75 +4228,30,2.5,111.05,1.7,63.75 +4229,30,2.5,111.05,1.7,63.75 +4230,30,2.5,111.05,1.7,63.75 +4231,30,2.5,111.05,1.7,63.75 +4232,30,2.5,111.05,1.7,63.75 +4233,30,2.5,111.05,1.7,63.75 +4234,30,2.5,111.05,1.7,63.75 +4235,30,2.5,111.05,1.7,63.75 +4236,30,2.5,111.05,1.7,63.75 +4237,30,2.5,111.05,1.7,63.75 +4238,30,2.5,111.05,1.7,63.75 +4239,30,2.5,111.05,1.7,63.75 +4240,30,2.5,111.05,1.7,63.75 +4241,30,2.5,111.05,1.7,63.75 +4242,30,2.5,111.05,1.7,63.75 +4243,30,2.5,111.05,1.7,63.75 +4244,30,2.5,111.05,1.7,63.75 +4245,30,2.5,111.05,1.7,63.75 +4246,30,2.5,111.05,1.7,63.75 +4247,30,2.5,111.05,1.7,63.75 +4248,30,2.5,111.05,1.7,63.75 +4249,30,2.5,111.05,1.7,63.75 +4250,30,2.5,111.05,1.7,63.75 +4251,30,2.5,111.05,1.7,63.75 +4252,30,2.5,111.05,1.7,63.75 +4253,30,2.5,111.05,1.7,63.75 +4254,30,2.5,111.05,1.7,63.75 +4255,30,2.5,111.05,1.7,63.75 +4256,30,2.5,111.05,1.7,63.75 +4257,30,2.5,111.05,1.7,63.75 +4258,30,2.5,111.05,1.7,63.75 +4259,30,2.5,111.05,1.7,63.75 +4260,30,2.5,111.05,1.7,63.75 +4261,30,2.5,111.05,1.7,63.75 +4262,30,2.5,111.05,1.7,63.75 +4263,30,2.5,111.05,1.7,63.75 +4264,30,2.5,111.05,1.7,63.75 +4265,30,2.5,111.05,1.7,63.75 +4266,30,2.5,111.05,1.7,63.75 +4267,30,2.5,111.05,1.7,63.75 +4268,30,2.5,111.05,1.7,63.75 +4269,30,2.5,111.05,1.7,63.75 +4270,30,2.5,111.05,1.7,63.75 +4271,30,2.5,111.05,1.7,63.75 +4272,30,2.5,111.05,1.7,63.75 +4273,30,2.5,111.05,1.7,63.75 +4274,30,2.5,111.05,1.7,63.75 +4275,30,2.5,111.05,1.7,63.75 +4276,30,2.5,111.05,1.7,63.75 +4277,30,2.5,111.05,1.7,63.75 +4278,30,2.5,111.05,1.7,63.75 +4279,30,2.5,111.05,1.7,63.75 +4280,30,2.5,111.05,1.7,63.75 +4281,30,2.5,111.05,1.7,63.75 +4282,30,2.5,111.05,1.7,63.75 +4283,30,2.5,111.05,1.7,63.75 +4284,30,2.5,111.05,1.7,63.75 +4285,30,2.5,111.05,1.7,63.75 +4286,30,2.5,111.05,1.7,63.75 +4287,30,2.5,111.05,1.7,63.75 +4288,30,2.5,111.05,1.7,63.75 +4289,30,2.5,111.05,1.7,63.75 +4290,30,2.5,111.05,1.7,63.75 +4291,30,2.5,111.05,1.7,63.75 +4292,30,2.5,111.05,1.7,63.75 +4293,30,2.5,111.05,1.7,63.75 +4294,30,2.5,111.05,1.7,63.75 +4295,30,2.5,111.05,1.7,63.75 +4296,30,2.5,111.05,1.7,63.75 +4297,30,2.5,111.05,1.7,63.75 +4298,30,2.5,111.05,1.7,63.75 +4299,30,2.5,111.05,1.7,63.75 +4300,30,2.5,111.05,1.7,63.75 +4301,30,2.5,111.05,1.7,63.75 +4302,30,2.5,111.05,1.7,63.75 +4303,30,2.5,111.05,1.7,63.75 +4304,30,2.5,111.05,1.7,63.75 +4305,30,2.5,111.05,1.7,63.75 +4306,30,2.5,111.05,1.7,63.75 +4307,30,2.5,111.05,1.7,63.75 +4308,30,2.5,111.05,1.7,63.75 +4309,30,2.5,111.05,1.7,63.75 +4310,30,2.5,111.05,1.7,63.75 +4311,30,2.5,111.05,1.7,63.75 +4312,30,2.5,111.05,1.7,63.75 +4313,30,2.5,111.05,1.7,63.75 +4314,30,2.5,111.05,1.7,63.75 +4315,30,2.5,111.05,1.7,63.75 +4316,30,2.5,111.05,1.7,63.75 +4317,30,2.5,111.05,1.7,63.75 +4318,30,2.5,111.05,1.7,63.75 +4319,30,2.5,111.05,1.7,63.75 +4320,30,2.5,111.05,1.7,63.75 +4321,30,2.5,111.05,1.7,63.75 +4322,30,2.5,111.05,1.7,63.75 +4323,30,2.5,111.05,1.7,63.75 +4324,30,2.5,111.05,1.7,63.75 +4325,30,2.5,111.05,1.7,63.75 +4326,30,2.5,111.05,1.7,63.75 +4327,30,2.5,111.05,1.7,63.75 +4328,30,2.5,111.05,1.7,63.75 +4329,30,2.5,111.05,1.7,63.75 +4330,30,2.5,111.05,1.7,63.75 +4331,30,2.5,111.05,1.7,63.75 +4332,30,2.5,111.05,1.7,63.75 +4333,30,2.5,111.05,1.7,63.75 +4334,30,2.5,111.05,1.7,63.75 +4335,30,2.5,111.05,1.7,63.75 +4336,30,2.5,111.05,1.7,63.75 +4337,30,2.5,111.05,1.7,63.75 +4338,30,2.5,111.05,1.7,63.75 +4339,30,2.5,111.05,1.7,63.75 +4340,30,2.5,111.05,1.7,63.75 +4341,30,2.5,111.05,1.7,63.75 +4342,30,2.5,111.05,1.7,63.75 +4343,30,2.5,111.05,1.7,63.75 +4344,30,2.5,111.05,1.7,63.75 +4345,30,2.5,111.05,1.7,63.75 +4346,30,2.5,111.05,1.7,63.75 +4347,30,2.5,111.05,1.7,63.75 +4348,30,2.5,111.05,1.7,63.75 +4349,30,2.5,111.05,1.7,63.75 +4350,30,2.5,111.05,1.7,63.75 +4351,30,2.5,111.05,1.7,63.75 +4352,30,2.5,111.05,1.7,63.75 +4353,30,2.5,111.05,1.7,63.75 +4354,30,2.5,111.05,1.7,63.75 +4355,30,2.5,111.05,1.7,63.75 +4356,30,2.5,111.05,1.7,63.75 +4357,30,2.5,111.05,1.7,63.75 +4358,30,2.5,111.05,1.7,63.75 +4359,30,2.5,111.05,1.7,63.75 +4360,30,2.5,111.05,1.7,63.75 +4361,30,2.5,111.05,1.7,63.75 +4362,30,2.5,111.05,1.7,63.75 +4363,30,2.5,111.05,1.7,63.75 +4364,30,2.5,111.05,1.7,63.75 +4365,30,2.5,111.05,1.7,63.75 +4366,30,2.5,111.05,1.7,63.75 +4367,30,2.5,111.05,1.7,63.75 +4368,30,2.5,111.05,1.7,63.75 +4369,30,2.5,111.05,1.7,63.75 +4370,30,2.5,111.05,1.7,63.75 +4371,30,2.5,111.05,1.7,63.75 +4372,30,2.5,111.05,1.7,63.75 +4373,30,2.5,111.05,1.7,63.75 +4374,30,2.5,111.05,1.7,63.75 +4375,30,2.5,111.05,1.7,63.75 +4376,30,2.5,111.05,1.7,63.75 +4377,30,2.5,111.05,1.7,63.75 +4378,30,2.5,111.05,1.7,63.75 +4379,30,2.5,111.05,1.7,63.75 +4380,30,2.5,111.05,1.7,63.75 +4381,30,2.5,111.05,1.7,63.75 +4382,30,2.5,111.05,1.7,63.75 +4383,30,2.5,111.05,1.7,63.75 +4384,30,2.5,111.05,1.7,63.75 +4385,30,2.5,111.05,1.7,63.75 +4386,30,2.5,111.05,1.7,63.75 +4387,30,2.5,111.05,1.7,63.75 +4388,30,2.5,111.05,1.7,63.75 +4389,30,2.5,111.05,1.7,63.75 +4390,30,2.5,111.05,1.7,63.75 +4391,30,2.5,111.05,1.7,63.75 +4392,30,2.5,111.05,1.7,63.75 +4393,30,2.5,111.05,1.7,63.75 +4394,30,2.5,111.05,1.7,63.75 +4395,30,2.5,111.05,1.7,63.75 +4396,30,2.5,111.05,1.7,63.75 +4397,30,2.5,111.05,1.7,63.75 +4398,30,2.5,111.05,1.7,63.75 +4399,30,2.5,111.05,1.7,63.75 +4400,30,2.5,111.05,1.7,63.75 +4401,30,2.5,111.05,1.7,63.75 +4402,30,2.5,111.05,1.7,63.75 +4403,30,2.5,111.05,1.7,63.75 +4404,30,2.5,111.05,1.7,63.75 +4405,30,2.5,111.05,1.7,63.75 +4406,30,2.5,111.05,1.7,63.75 +4407,30,2.5,111.05,1.7,63.75 +4408,30,2.5,111.05,1.7,63.75 +4409,30,2.5,111.05,1.7,63.75 +4410,30,2.5,111.05,1.7,63.75 +4411,30,2.5,111.05,1.7,63.75 +4412,30,2.5,111.05,1.7,63.75 +4413,30,2.5,111.05,1.7,63.75 +4414,30,2.5,111.05,1.7,63.75 +4415,30,2.5,111.05,1.7,63.75 +4416,30,2.5,111.05,1.7,63.75 +4417,30,2.5,111.05,1.7,63.75 +4418,30,2.5,111.05,1.7,63.75 +4419,30,2.5,111.05,1.7,63.75 +4420,30,2.5,111.05,1.7,63.75 +4421,30,2.5,111.05,1.7,63.75 +4422,30,2.5,111.05,1.7,63.75 +4423,30,2.5,111.05,1.7,63.75 +4424,30,2.5,111.05,1.7,63.75 +4425,30,2.5,111.05,1.7,63.75 +4426,30,2.5,111.05,1.7,63.75 +4427,30,2.5,111.05,1.7,63.75 +4428,30,2.5,111.05,1.7,63.75 +4429,30,2.5,111.05,1.7,63.75 +4430,30,2.5,111.05,1.7,63.75 +4431,30,2.5,111.05,1.7,63.75 +4432,30,2.5,111.05,1.7,63.75 +4433,30,2.5,111.05,1.7,63.75 +4434,30,2.5,111.05,1.7,63.75 +4435,30,2.5,111.05,1.7,63.75 +4436,30,2.5,111.05,1.7,63.75 +4437,30,2.5,111.05,1.7,63.75 +4438,30,2.5,111.05,1.7,63.75 +4439,30,2.5,111.05,1.7,63.75 +4440,30,2.5,111.05,1.7,63.75 +4441,30,2.5,111.05,1.7,63.75 +4442,30,2.5,111.05,1.7,63.75 +4443,30,2.5,111.05,1.7,63.75 +4444,30,2.5,111.05,1.7,63.75 +4445,30,2.5,111.05,1.7,63.75 +4446,30,2.5,111.05,1.7,63.75 +4447,30,2.5,111.05,1.7,63.75 +4448,30,2.5,111.05,1.7,63.75 +4449,30,2.5,111.05,1.7,63.75 +4450,30,2.5,111.05,1.7,63.75 +4451,30,2.5,111.05,1.7,63.75 +4452,30,2.5,111.05,1.7,63.75 +4453,30,2.5,111.05,1.7,63.75 +4454,30,2.5,111.05,1.7,63.75 +4455,30,2.5,111.05,1.7,63.75 +4456,30,2.5,111.05,1.7,63.75 +4457,30,2.5,111.05,1.7,63.75 +4458,30,2.5,111.05,1.7,63.75 +4459,30,2.5,111.05,1.7,63.75 +4460,30,2.5,111.05,1.7,63.75 +4461,30,2.5,111.05,1.7,63.75 +4462,30,2.5,111.05,1.7,63.75 +4463,30,2.5,111.05,1.7,63.75 +4464,30,2.5,111.05,1.7,63.75 +4465,30,2.5,111.05,1.7,63.75 +4466,30,2.5,111.05,1.7,63.75 +4467,30,2.5,111.05,1.7,63.75 +4468,30,2.5,111.05,1.7,63.75 +4469,30,2.5,111.05,1.7,63.75 +4470,30,2.5,111.05,1.7,63.75 +4471,30,2.5,111.05,1.7,63.75 +4472,30,2.5,111.05,1.7,63.75 +4473,30,2.5,111.05,1.7,63.75 +4474,30,2.5,111.05,1.7,63.75 +4475,30,2.5,111.05,1.7,63.75 +4476,30,2.5,111.05,1.7,63.75 +4477,30,2.5,111.05,1.7,63.75 +4478,30,2.5,111.05,1.7,63.75 +4479,30,2.5,111.05,1.7,63.75 +4480,30,2.5,111.05,1.7,63.75 +4481,30,2.5,111.05,1.7,63.75 +4482,30,2.5,111.05,1.7,63.75 +4483,30,2.5,111.05,1.7,63.75 +4484,30,2.5,111.05,1.7,63.75 +4485,30,2.5,111.05,1.7,63.75 +4486,30,2.5,111.05,1.7,63.75 +4487,30,2.5,111.05,1.7,63.75 +4488,30,2.5,111.05,1.7,63.75 +4489,30,2.5,111.05,1.7,63.75 +4490,30,2.5,111.05,1.7,63.75 +4491,30,2.5,111.05,1.7,63.75 +4492,30,2.5,111.05,1.7,63.75 +4493,30,2.5,111.05,1.7,63.75 +4494,30,2.5,111.05,1.7,63.75 +4495,30,2.5,111.05,1.7,63.75 +4496,30,2.5,111.05,1.7,63.75 +4497,30,2.5,111.05,1.7,63.75 +4498,30,2.5,111.05,1.7,63.75 +4499,30,2.5,111.05,1.7,63.75 +4500,30,2.5,111.05,1.7,63.75 +4501,30,2.5,111.05,1.7,63.75 +4502,30,2.5,111.05,1.7,63.75 +4503,30,2.5,111.05,1.7,63.75 +4504,30,2.5,111.05,1.7,63.75 +4505,30,2.5,111.05,1.7,63.75 +4506,30,2.5,111.05,1.7,63.75 +4507,30,2.5,111.05,1.7,63.75 +4508,30,2.5,111.05,1.7,63.75 +4509,30,2.5,111.05,1.7,63.75 +4510,30,2.5,111.05,1.7,63.75 +4511,30,2.5,111.05,1.7,63.75 +4512,30,2.5,111.05,1.7,63.75 +4513,30,2.5,111.05,1.7,63.75 +4514,30,2.5,111.05,1.7,63.75 +4515,30,2.5,111.05,1.7,63.75 +4516,30,2.5,111.05,1.7,63.75 +4517,30,2.5,111.05,1.7,63.75 +4518,30,2.5,111.05,1.7,63.75 +4519,30,2.5,111.05,1.7,63.75 +4520,30,2.5,111.05,1.7,63.75 +4521,30,2.5,111.05,1.7,63.75 +4522,30,2.5,111.05,1.7,63.75 +4523,30,2.5,111.05,1.7,63.75 +4524,30,2.5,111.05,1.7,63.75 +4525,30,2.5,111.05,1.7,63.75 +4526,30,2.5,111.05,1.7,63.75 +4527,30,2.5,111.05,1.7,63.75 +4528,30,2.5,111.05,1.7,63.75 +4529,30,2.5,111.05,1.7,63.75 +4530,30,2.5,111.05,1.7,63.75 +4531,30,2.5,111.05,1.7,63.75 +4532,30,2.5,111.05,1.7,63.75 +4533,30,2.5,111.05,1.7,63.75 +4534,30,2.5,111.05,1.7,63.75 +4535,30,2.5,111.05,1.7,63.75 +4536,30,2.5,111.05,1.7,63.75 +4537,30,2.5,111.05,1.7,63.75 +4538,30,2.5,111.05,1.7,63.75 +4539,30,2.5,111.05,1.7,63.75 +4540,30,2.5,111.05,1.7,63.75 +4541,30,2.5,111.05,1.7,63.75 +4542,30,2.5,111.05,1.7,63.75 +4543,30,2.5,111.05,1.7,63.75 +4544,30,2.5,111.05,1.7,63.75 +4545,30,2.5,111.05,1.7,63.75 +4546,30,2.5,111.05,1.7,63.75 +4547,30,2.5,111.05,1.7,63.75 +4548,30,2.5,111.05,1.7,63.75 +4549,30,2.5,111.05,1.7,63.75 +4550,30,2.5,111.05,1.7,63.75 +4551,30,2.5,111.05,1.7,63.75 +4552,30,2.5,111.05,1.7,63.75 +4553,30,2.5,111.05,1.7,63.75 +4554,30,2.5,111.05,1.7,63.75 +4555,30,2.5,111.05,1.7,63.75 +4556,30,2.5,111.05,1.7,63.75 +4557,30,2.5,111.05,1.7,63.75 +4558,30,2.5,111.05,1.7,63.75 +4559,30,2.5,111.05,1.7,63.75 +4560,30,2.5,111.05,1.7,63.75 +4561,30,2.5,111.05,1.7,63.75 +4562,30,2.5,111.05,1.7,63.75 +4563,30,2.5,111.05,1.7,63.75 +4564,30,2.5,111.05,1.7,63.75 +4565,30,2.5,111.05,1.7,63.75 +4566,30,2.5,111.05,1.7,63.75 +4567,30,2.5,111.05,1.7,63.75 +4568,30,2.5,111.05,1.7,63.75 +4569,30,2.5,111.05,1.7,63.75 +4570,30,2.5,111.05,1.7,63.75 +4571,30,2.5,111.05,1.7,63.75 +4572,30,2.5,111.05,1.7,63.75 +4573,30,2.5,111.05,1.7,63.75 +4574,30,2.5,111.05,1.7,63.75 +4575,30,2.5,111.05,1.7,63.75 +4576,30,2.5,111.05,1.7,63.75 +4577,30,2.5,111.05,1.7,63.75 +4578,30,2.5,111.05,1.7,63.75 +4579,30,2.5,111.05,1.7,63.75 +4580,30,2.5,111.05,1.7,63.75 +4581,30,2.5,111.05,1.7,63.75 +4582,30,2.5,111.05,1.7,63.75 +4583,30,2.5,111.05,1.7,63.75 +4584,30,2.5,111.05,1.7,63.75 +4585,30,2.5,111.05,1.7,63.75 +4586,30,2.5,111.05,1.7,63.75 +4587,30,2.5,111.05,1.7,63.75 +4588,30,2.5,111.05,1.7,63.75 +4589,30,2.5,111.05,1.7,63.75 +4590,30,2.5,111.05,1.7,63.75 +4591,30,2.5,111.05,1.7,63.75 +4592,30,2.5,111.05,1.7,63.75 +4593,30,2.5,111.05,1.7,63.75 +4594,30,2.5,111.05,1.7,63.75 +4595,30,2.5,111.05,1.7,63.75 +4596,30,2.5,111.05,1.7,63.75 +4597,30,2.5,111.05,1.7,63.75 +4598,30,2.5,111.05,1.7,63.75 +4599,30,2.5,111.05,1.7,63.75 +4600,30,2.5,111.05,1.7,63.75 +4601,30,2.5,111.05,1.7,63.75 +4602,30,2.5,111.05,1.7,63.75 +4603,30,2.5,111.05,1.7,63.75 +4604,30,2.5,111.05,1.7,63.75 +4605,30,2.5,111.05,1.7,63.75 +4606,30,2.5,111.05,1.7,63.75 +4607,30,2.5,111.05,1.7,63.75 +4608,30,2.5,111.05,1.7,63.75 +4609,30,2.5,111.05,1.7,63.75 +4610,30,2.5,111.05,1.7,63.75 +4611,30,2.5,111.05,1.7,63.75 +4612,30,2.5,111.05,1.7,63.75 +4613,30,2.5,111.05,1.7,63.75 +4614,30,2.5,111.05,1.7,63.75 +4615,30,2.5,111.05,1.7,63.75 +4616,30,2.5,111.05,1.7,63.75 +4617,30,2.5,111.05,1.7,63.75 +4618,30,2.5,111.05,1.7,63.75 +4619,30,2.5,111.05,1.7,63.75 +4620,30,2.5,111.05,1.7,63.75 +4621,30,2.5,111.05,1.7,63.75 +4622,30,2.5,111.05,1.7,63.75 +4623,30,2.5,111.05,1.7,63.75 +4624,30,2.5,111.05,1.7,63.75 +4625,30,2.5,111.05,1.7,63.75 +4626,30,2.5,111.05,1.7,63.75 +4627,30,2.5,111.05,1.7,63.75 +4628,30,2.5,111.05,1.7,63.75 +4629,30,2.5,111.05,1.7,63.75 +4630,30,2.5,111.05,1.7,63.75 +4631,30,2.5,111.05,1.7,63.75 +4632,30,2.5,111.05,1.7,63.75 +4633,30,2.5,111.05,1.7,63.75 +4634,30,2.5,111.05,1.7,63.75 +4635,30,2.5,111.05,1.7,63.75 +4636,30,2.5,111.05,1.7,63.75 +4637,30,2.5,111.05,1.7,63.75 +4638,30,2.5,111.05,1.7,63.75 +4639,30,2.5,111.05,1.7,63.75 +4640,30,2.5,111.05,1.7,63.75 +4641,30,2.5,111.05,1.7,63.75 +4642,30,2.5,111.05,1.7,63.75 +4643,30,2.5,111.05,1.7,63.75 +4644,30,2.5,111.05,1.7,63.75 +4645,30,2.5,111.05,1.7,63.75 +4646,30,2.5,111.05,1.7,63.75 +4647,30,2.5,111.05,1.7,63.75 +4648,30,2.5,111.05,1.7,63.75 +4649,30,2.5,111.05,1.7,63.75 +4650,30,2.5,111.05,1.7,63.75 +4651,30,2.5,111.05,1.7,63.75 +4652,30,2.5,111.05,1.7,63.75 +4653,30,2.5,111.05,1.7,63.75 +4654,30,2.5,111.05,1.7,63.75 +4655,30,2.5,111.05,1.7,63.75 +4656,30,2.5,111.05,1.7,63.75 +4657,30,2.5,111.05,1.7,63.75 +4658,30,2.5,111.05,1.7,63.75 +4659,30,2.5,111.05,1.7,63.75 +4660,30,2.5,111.05,1.7,63.75 +4661,30,2.5,111.05,1.7,63.75 +4662,30,2.5,111.05,1.7,63.75 +4663,30,2.5,111.05,1.7,63.75 +4664,30,2.5,111.05,1.7,63.75 +4665,30,2.5,111.05,1.7,63.75 +4666,30,2.5,111.05,1.7,63.75 +4667,30,2.5,111.05,1.7,63.75 +4668,30,2.5,111.05,1.7,63.75 +4669,30,2.5,111.05,1.7,63.75 +4670,30,2.5,111.05,1.7,63.75 +4671,30,2.5,111.05,1.7,63.75 +4672,30,2.5,111.05,1.7,63.75 +4673,30,2.5,111.05,1.7,63.75 +4674,30,2.5,111.05,1.7,63.75 +4675,30,2.5,111.05,1.7,63.75 +4676,30,2.5,111.05,1.7,63.75 +4677,30,2.5,111.05,1.7,63.75 +4678,30,2.5,111.05,1.7,63.75 +4679,30,2.5,111.05,1.7,63.75 +4680,30,2.5,111.05,1.7,63.75 +4681,30,2.5,111.05,1.7,63.75 +4682,30,2.5,111.05,1.7,63.75 +4683,30,2.5,111.05,1.7,63.75 +4684,30,2.5,111.05,1.7,63.75 +4685,30,2.5,111.05,1.7,63.75 +4686,30,2.5,111.05,1.7,63.75 +4687,30,2.5,111.05,1.7,63.75 +4688,30,2.5,111.05,1.7,63.75 +4689,30,2.5,111.05,1.7,63.75 +4690,30,2.5,111.05,1.7,63.75 +4691,30,2.5,111.05,1.7,63.75 +4692,30,2.5,111.05,1.7,63.75 +4693,30,2.5,111.05,1.7,63.75 +4694,30,2.5,111.05,1.7,63.75 +4695,30,2.5,111.05,1.7,63.75 +4696,30,2.5,111.05,1.7,63.75 +4697,30,2.5,111.05,1.7,63.75 +4698,30,2.5,111.05,1.7,63.75 +4699,30,2.5,111.05,1.7,63.75 +4700,30,2.5,111.05,1.7,63.75 +4701,30,2.5,111.05,1.7,63.75 +4702,30,2.5,111.05,1.7,63.75 +4703,30,2.5,111.05,1.7,63.75 +4704,30,2.5,111.05,1.7,63.75 +4705,30,2.5,111.05,1.7,63.75 +4706,30,2.5,111.05,1.7,63.75 +4707,30,2.5,111.05,1.7,63.75 +4708,30,2.5,111.05,1.7,63.75 +4709,30,2.5,111.05,1.7,63.75 +4710,30,2.5,111.05,1.7,63.75 +4711,30,2.5,111.05,1.7,63.75 +4712,30,2.5,111.05,1.7,63.75 +4713,30,2.5,111.05,1.7,63.75 +4714,30,2.5,111.05,1.7,63.75 +4715,30,2.5,111.05,1.7,63.75 +4716,30,2.5,111.05,1.7,63.75 +4717,30,2.5,111.05,1.7,63.75 +4718,30,2.5,111.05,1.7,63.75 +4719,30,2.5,111.05,1.7,63.75 +4720,30,2.5,111.05,1.7,63.75 +4721,30,2.5,111.05,1.7,63.75 +4722,30,2.5,111.05,1.7,63.75 +4723,30,2.5,111.05,1.7,63.75 +4724,30,2.5,111.05,1.7,63.75 +4725,30,2.5,111.05,1.7,63.75 +4726,30,2.5,111.05,1.7,63.75 +4727,30,2.5,111.05,1.7,63.75 +4728,30,2.5,111.05,1.7,63.75 +4729,30,2.5,111.05,1.7,63.75 +4730,30,2.5,111.05,1.7,63.75 +4731,30,2.5,111.05,1.7,63.75 +4732,30,2.5,111.05,1.7,63.75 +4733,30,2.5,111.05,1.7,63.75 +4734,30,2.5,111.05,1.7,63.75 +4735,30,2.5,111.05,1.7,63.75 +4736,30,2.5,111.05,1.7,63.75 +4737,30,2.5,111.05,1.7,63.75 +4738,30,2.5,111.05,1.7,63.75 +4739,30,2.5,111.05,1.7,63.75 +4740,30,2.5,111.05,1.7,63.75 +4741,30,2.5,111.05,1.7,63.75 +4742,30,2.5,111.05,1.7,63.75 +4743,30,2.5,111.05,1.7,63.75 +4744,30,2.5,111.05,1.7,63.75 +4745,30,2.5,111.05,1.7,63.75 +4746,30,2.5,111.05,1.7,63.75 +4747,30,2.5,111.05,1.7,63.75 +4748,30,2.5,111.05,1.7,63.75 +4749,30,2.5,111.05,1.7,63.75 +4750,30,2.5,111.05,1.7,63.75 +4751,30,2.5,111.05,1.7,63.75 +4752,30,2.5,111.05,1.7,63.75 +4753,30,2.5,111.05,1.7,63.75 +4754,30,2.5,111.05,1.7,63.75 +4755,30,2.5,111.05,1.7,63.75 +4756,30,2.5,111.05,1.7,63.75 +4757,30,2.5,111.05,1.7,63.75 +4758,30,2.5,111.05,1.7,63.75 +4759,30,2.5,111.05,1.7,63.75 +4760,30,2.5,111.05,1.7,63.75 +4761,30,2.5,111.05,1.7,63.75 +4762,30,2.5,111.05,1.7,63.75 +4763,30,2.5,111.05,1.7,63.75 +4764,30,2.5,111.05,1.7,63.75 +4765,30,2.5,111.05,1.7,63.75 +4766,30,2.5,111.05,1.7,63.75 +4767,30,2.5,111.05,1.7,63.75 +4768,30,2.5,111.05,1.7,63.75 +4769,30,2.5,111.05,1.7,63.75 +4770,30,2.5,111.05,1.7,63.75 +4771,30,2.5,111.05,1.7,63.75 +4772,30,2.5,111.05,1.7,63.75 +4773,30,2.5,111.05,1.7,63.75 +4774,30,2.5,111.05,1.7,63.75 +4775,30,2.5,111.05,1.7,63.75 +4776,30,2.5,111.05,1.7,63.75 +4777,30,2.5,111.05,1.7,63.75 +4778,30,2.5,111.05,1.7,63.75 +4779,30,2.5,111.05,1.7,63.75 +4780,30,2.5,111.05,1.7,63.75 +4781,30,2.5,111.05,1.7,63.75 +4782,30,2.5,111.05,1.7,63.75 +4783,30,2.5,111.05,1.7,63.75 +4784,30,2.5,111.05,1.7,63.75 +4785,30,2.5,111.05,1.7,63.75 +4786,30,2.5,111.05,1.7,63.75 +4787,30,2.5,111.05,1.7,63.75 +4788,30,2.5,111.05,1.7,63.75 +4789,30,2.5,111.05,1.7,63.75 +4790,30,2.5,111.05,1.7,63.75 +4791,30,2.5,111.05,1.7,63.75 +4792,30,2.5,111.05,1.7,63.75 +4793,30,2.5,111.05,1.7,63.75 +4794,30,2.5,111.05,1.7,63.75 +4795,30,2.5,111.05,1.7,63.75 +4796,30,2.5,111.05,1.7,63.75 +4797,30,2.5,111.05,1.7,63.75 +4798,30,2.5,111.05,1.7,63.75 +4799,30,2.5,111.05,1.7,63.75 +4800,30,2.5,111.05,1.7,63.75 +4801,30,2.5,111.05,1.7,63.75 +4802,30,2.5,111.05,1.7,63.75 +4803,30,2.5,111.05,1.7,63.75 +4804,30,2.5,111.05,1.7,63.75 +4805,30,2.5,111.05,1.7,63.75 +4806,30,2.5,111.05,1.7,63.75 +4807,30,2.5,111.05,1.7,63.75 +4808,30,2.5,111.05,1.7,63.75 +4809,30,2.5,111.05,1.7,63.75 +4810,30,2.5,111.05,1.7,63.75 +4811,30,2.5,111.05,1.7,63.75 +4812,30,2.5,111.05,1.7,63.75 +4813,30,2.5,111.05,1.7,63.75 +4814,30,2.5,111.05,1.7,63.75 +4815,30,2.5,111.05,1.7,63.75 +4816,30,2.5,111.05,1.7,63.75 +4817,30,2.5,111.05,1.7,63.75 +4818,30,2.5,111.05,1.7,63.75 +4819,30,2.5,111.05,1.7,63.75 +4820,30,2.5,111.05,1.7,63.75 +4821,30,2.5,111.05,1.7,63.75 +4822,30,2.5,111.05,1.7,63.75 +4823,30,2.5,111.05,1.7,63.75 +4824,30,2.5,111.05,1.7,63.75 +4825,30,2.5,111.05,1.7,63.75 +4826,30,2.5,111.05,1.7,63.75 +4827,30,2.5,111.05,1.7,63.75 +4828,30,2.5,111.05,1.7,63.75 +4829,30,2.5,111.05,1.7,63.75 +4830,30,2.5,111.05,1.7,63.75 +4831,30,2.5,111.05,1.7,63.75 +4832,30,2.5,111.05,1.7,63.75 +4833,30,2.5,111.05,1.7,63.75 +4834,30,2.5,111.05,1.7,63.75 +4835,30,2.5,111.05,1.7,63.75 +4836,30,2.5,111.05,1.7,63.75 +4837,30,2.5,111.05,1.7,63.75 +4838,30,2.5,111.05,1.7,63.75 +4839,30,2.5,111.05,1.7,63.75 +4840,30,2.5,111.05,1.7,63.75 +4841,30,2.5,111.05,1.7,63.75 +4842,30,2.5,111.05,1.7,63.75 +4843,30,2.5,111.05,1.7,63.75 +4844,30,2.5,111.05,1.7,63.75 +4845,30,2.5,111.05,1.7,63.75 +4846,30,2.5,111.05,1.7,63.75 +4847,30,2.5,111.05,1.7,63.75 +4848,30,2.5,111.05,1.7,63.75 +4849,30,2.5,111.05,1.7,63.75 +4850,30,2.5,111.05,1.7,63.75 +4851,30,2.5,111.05,1.7,63.75 +4852,30,2.5,111.05,1.7,63.75 +4853,30,2.5,111.05,1.7,63.75 +4854,30,2.5,111.05,1.7,63.75 +4855,30,2.5,111.05,1.7,63.75 +4856,30,2.5,111.05,1.7,63.75 +4857,30,2.5,111.05,1.7,63.75 +4858,30,2.5,111.05,1.7,63.75 +4859,30,2.5,111.05,1.7,63.75 +4860,30,2.5,111.05,1.7,63.75 +4861,30,2.5,111.05,1.7,63.75 +4862,30,2.5,111.05,1.7,63.75 +4863,30,2.5,111.05,1.7,63.75 +4864,30,2.5,111.05,1.7,63.75 +4865,30,2.5,111.05,1.7,63.75 +4866,30,2.5,111.05,1.7,63.75 +4867,30,2.5,111.05,1.7,63.75 +4868,30,2.5,111.05,1.7,63.75 +4869,30,2.5,111.05,1.7,63.75 +4870,30,2.5,111.05,1.7,63.75 +4871,30,2.5,111.05,1.7,63.75 +4872,30,2.5,111.05,1.7,63.75 +4873,30,2.5,111.05,1.7,63.75 +4874,30,2.5,111.05,1.7,63.75 +4875,30,2.5,111.05,1.7,63.75 +4876,30,2.5,111.05,1.7,63.75 +4877,30,2.5,111.05,1.7,63.75 +4878,30,2.5,111.05,1.7,63.75 +4879,30,2.5,111.05,1.7,63.75 +4880,30,2.5,111.05,1.7,63.75 +4881,30,2.5,111.05,1.7,63.75 +4882,30,2.5,111.05,1.7,63.75 +4883,30,2.5,111.05,1.7,63.75 +4884,30,2.5,111.05,1.7,63.75 +4885,30,2.5,111.05,1.7,63.75 +4886,30,2.5,111.05,1.7,63.75 +4887,30,2.5,111.05,1.7,63.75 +4888,30,2.5,111.05,1.7,63.75 +4889,30,2.5,111.05,1.7,63.75 +4890,30,2.5,111.05,1.7,63.75 +4891,30,2.5,111.05,1.7,63.75 +4892,30,2.5,111.05,1.7,63.75 +4893,30,2.5,111.05,1.7,63.75 +4894,30,2.5,111.05,1.7,63.75 +4895,30,2.5,111.05,1.7,63.75 +4896,30,2.5,111.05,1.7,63.75 +4897,30,2.5,111.05,1.7,63.75 +4898,30,2.5,111.05,1.7,63.75 +4899,30,2.5,111.05,1.7,63.75 +4900,30,2.5,111.05,1.7,63.75 +4901,30,2.5,111.05,1.7,63.75 +4902,30,2.5,111.05,1.7,63.75 +4903,30,2.5,111.05,1.7,63.75 +4904,30,2.5,111.05,1.7,63.75 +4905,30,2.5,111.05,1.7,63.75 +4906,30,2.5,111.05,1.7,63.75 +4907,30,2.5,111.05,1.7,63.75 +4908,30,2.5,111.05,1.7,63.75 +4909,30,2.5,111.05,1.7,63.75 +4910,30,2.5,111.05,1.7,63.75 +4911,30,2.5,111.05,1.7,63.75 +4912,30,2.5,111.05,1.7,63.75 +4913,30,2.5,111.05,1.7,63.75 +4914,30,2.5,111.05,1.7,63.75 +4915,30,2.5,111.05,1.7,63.75 +4916,30,2.5,111.05,1.7,63.75 +4917,30,2.5,111.05,1.7,63.75 +4918,30,2.5,111.05,1.7,63.75 +4919,30,2.5,111.05,1.7,63.75 +4920,30,2.5,111.05,1.7,63.75 +4921,30,2.5,111.05,1.7,63.75 +4922,30,2.5,111.05,1.7,63.75 +4923,30,2.5,111.05,1.7,63.75 +4924,30,2.5,111.05,1.7,63.75 +4925,30,2.5,111.05,1.7,63.75 +4926,30,2.5,111.05,1.7,63.75 +4927,30,2.5,111.05,1.7,63.75 +4928,30,2.5,111.05,1.7,63.75 +4929,30,2.5,111.05,1.7,63.75 +4930,30,2.5,111.05,1.7,63.75 +4931,30,2.5,111.05,1.7,63.75 +4932,30,2.5,111.05,1.7,63.75 +4933,30,2.5,111.05,1.7,63.75 +4934,30,2.5,111.05,1.7,63.75 +4935,30,2.5,111.05,1.7,63.75 +4936,30,2.5,111.05,1.7,63.75 +4937,30,2.5,111.05,1.7,63.75 +4938,30,2.5,111.05,1.7,63.75 +4939,30,2.5,111.05,1.7,63.75 +4940,30,2.5,111.05,1.7,63.75 +4941,30,2.5,111.05,1.7,63.75 +4942,30,2.5,111.05,1.7,63.75 +4943,30,2.5,111.05,1.7,63.75 +4944,30,2.5,111.05,1.7,63.75 +4945,30,2.5,111.05,1.7,63.75 +4946,30,2.5,111.05,1.7,63.75 +4947,30,2.5,111.05,1.7,63.75 +4948,30,2.5,111.05,1.7,63.75 +4949,30,2.5,111.05,1.7,63.75 +4950,30,2.5,111.05,1.7,63.75 +4951,30,2.5,111.05,1.7,63.75 +4952,30,2.5,111.05,1.7,63.75 +4953,30,2.5,111.05,1.7,63.75 +4954,30,2.5,111.05,1.7,63.75 +4955,30,2.5,111.05,1.7,63.75 +4956,30,2.5,111.05,1.7,63.75 +4957,30,2.5,111.05,1.7,63.75 +4958,30,2.5,111.05,1.7,63.75 +4959,30,2.5,111.05,1.7,63.75 +4960,30,2.5,111.05,1.7,63.75 +4961,30,2.5,111.05,1.7,63.75 +4962,30,2.5,111.05,1.7,63.75 +4963,30,2.5,111.05,1.7,63.75 +4964,30,2.5,111.05,1.7,63.75 +4965,30,2.5,111.05,1.7,63.75 +4966,30,2.5,111.05,1.7,63.75 +4967,30,2.5,111.05,1.7,63.75 +4968,30,2.5,111.05,1.7,63.75 +4969,30,2.5,111.05,1.7,63.75 +4970,30,2.5,111.05,1.7,63.75 +4971,30,2.5,111.05,1.7,63.75 +4972,30,2.5,111.05,1.7,63.75 +4973,30,2.5,111.05,1.7,63.75 +4974,30,2.5,111.05,1.7,63.75 +4975,30,2.5,111.05,1.7,63.75 +4976,30,2.5,111.05,1.7,63.75 +4977,30,2.5,111.05,1.7,63.75 +4978,30,2.5,111.05,1.7,63.75 +4979,30,2.5,111.05,1.7,63.75 +4980,30,2.5,111.05,1.7,63.75 +4981,30,2.5,111.05,1.7,63.75 +4982,30,2.5,111.05,1.7,63.75 +4983,30,2.5,111.05,1.7,63.75 +4984,30,2.5,111.05,1.7,63.75 +4985,30,2.5,111.05,1.7,63.75 +4986,30,2.5,111.05,1.7,63.75 +4987,30,2.5,111.05,1.7,63.75 +4988,30,2.5,111.05,1.7,63.75 +4989,30,2.5,111.05,1.7,63.75 +4990,30,2.5,111.05,1.7,63.75 +4991,30,2.5,111.05,1.7,63.75 +4992,30,2.5,111.05,1.7,63.75 +4993,30,2.5,111.05,1.7,63.75 +4994,30,2.5,111.05,1.7,63.75 +4995,30,2.5,111.05,1.7,63.75 +4996,30,2.5,111.05,1.7,63.75 +4997,30,2.5,111.05,1.7,63.75 +4998,30,2.5,111.05,1.7,63.75 +4999,30,2.5,111.05,1.7,63.75 +5000,30,2.5,111.05,1.7,63.75 +5001,30,2.5,111.05,1.7,63.75 +5002,30,2.5,111.05,1.7,63.75 +5003,30,2.5,111.05,1.7,63.75 +5004,30,2.5,111.05,1.7,63.75 +5005,30,2.5,111.05,1.7,63.75 +5006,30,2.5,111.05,1.7,63.75 +5007,30,2.5,111.05,1.7,63.75 +5008,30,2.5,111.05,1.7,63.75 +5009,30,2.5,111.05,1.7,63.75 +5010,30,2.5,111.05,1.7,63.75 +5011,30,2.5,111.05,1.7,63.75 +5012,30,2.5,111.05,1.7,63.75 +5013,30,2.5,111.05,1.7,63.75 +5014,30,2.5,111.05,1.7,63.75 +5015,30,2.5,111.05,1.7,63.75 +5016,30,2.5,111.05,1.7,63.75 +5017,30,2.5,111.05,1.7,63.75 +5018,30,2.5,111.05,1.7,63.75 +5019,30,2.5,111.05,1.7,63.75 +5020,30,2.5,111.05,1.7,63.75 +5021,30,2.5,111.05,1.7,63.75 +5022,30,2.5,111.05,1.7,63.75 +5023,30,2.5,111.05,1.7,63.75 +5024,30,2.5,111.05,1.7,63.75 +5025,30,2.5,111.05,1.7,63.75 +5026,30,2.5,111.05,1.7,63.75 +5027,30,2.5,111.05,1.7,63.75 +5028,30,2.5,111.05,1.7,63.75 +5029,30,2.5,111.05,1.7,63.75 +5030,30,2.5,111.05,1.7,63.75 +5031,30,2.5,111.05,1.7,63.75 +5032,30,2.5,111.05,1.7,63.75 +5033,30,2.5,111.05,1.7,63.75 +5034,30,2.5,111.05,1.7,63.75 +5035,30,2.5,111.05,1.7,63.75 +5036,30,2.5,111.05,1.7,63.75 +5037,30,2.5,111.05,1.7,63.75 +5038,30,2.5,111.05,1.7,63.75 +5039,30,2.5,111.05,1.7,63.75 +5040,30,2.5,111.05,1.7,63.75 +5041,30,2.5,111.05,1.7,63.75 +5042,30,2.5,111.05,1.7,63.75 +5043,30,2.5,111.05,1.7,63.75 +5044,30,2.5,111.05,1.7,63.75 +5045,30,2.5,111.05,1.7,63.75 +5046,30,2.5,111.05,1.7,63.75 +5047,30,2.5,111.05,1.7,63.75 +5048,30,2.5,111.05,1.7,63.75 +5049,30,2.5,111.05,1.7,63.75 +5050,30,2.5,111.05,1.7,63.75 +5051,30,2.5,111.05,1.7,63.75 +5052,30,2.5,111.05,1.7,63.75 +5053,30,2.5,111.05,1.7,63.75 +5054,30,2.5,111.05,1.7,63.75 +5055,30,2.5,111.05,1.7,63.75 +5056,30,2.5,111.05,1.7,63.75 +5057,30,2.5,111.05,1.7,63.75 +5058,30,2.5,111.05,1.7,63.75 +5059,30,2.5,111.05,1.7,63.75 +5060,30,2.5,111.05,1.7,63.75 +5061,30,2.5,111.05,1.7,63.75 +5062,30,2.5,111.05,1.7,63.75 +5063,30,2.5,111.05,1.7,63.75 +5064,30,2.5,111.05,1.7,63.75 +5065,30,2.5,111.05,1.7,63.75 +5066,30,2.5,111.05,1.7,63.75 +5067,30,2.5,111.05,1.7,63.75 +5068,30,2.5,111.05,1.7,63.75 +5069,30,2.5,111.05,1.7,63.75 +5070,30,2.5,111.05,1.7,63.75 +5071,30,2.5,111.05,1.7,63.75 +5072,30,2.5,111.05,1.7,63.75 +5073,30,2.5,111.05,1.7,63.75 +5074,30,2.5,111.05,1.7,63.75 +5075,30,2.5,111.05,1.7,63.75 +5076,30,2.5,111.05,1.7,63.75 +5077,30,2.5,111.05,1.7,63.75 +5078,30,2.5,111.05,1.7,63.75 +5079,30,2.5,111.05,1.7,63.75 +5080,30,2.5,111.05,1.7,63.75 +5081,30,2.5,111.05,1.7,63.75 +5082,30,2.5,111.05,1.7,63.75 +5083,30,2.5,111.05,1.7,63.75 +5084,30,2.5,111.05,1.7,63.75 +5085,30,2.5,111.05,1.7,63.75 +5086,30,2.5,111.05,1.7,63.75 +5087,30,2.5,111.05,1.7,63.75 +5088,30,2.5,111.05,1.7,63.75 +5089,30,2.5,111.05,1.7,63.75 +5090,30,2.5,111.05,1.7,63.75 +5091,30,2.5,111.05,1.7,63.75 +5092,30,2.5,111.05,1.7,63.75 +5093,30,2.5,111.05,1.7,63.75 +5094,30,2.5,111.05,1.7,63.75 +5095,30,2.5,111.05,1.7,63.75 +5096,30,2.5,111.05,1.7,63.75 +5097,30,2.5,111.05,1.7,63.75 +5098,30,2.5,111.05,1.7,63.75 +5099,30,2.5,111.05,1.7,63.75 +5100,30,2.5,111.05,1.7,63.75 +5101,30,2.5,111.05,1.7,63.75 +5102,30,2.5,111.05,1.7,63.75 +5103,30,2.5,111.05,1.7,63.75 +5104,30,2.5,111.05,1.7,63.75 +5105,30,2.5,111.05,1.7,63.75 +5106,30,2.5,111.05,1.7,63.75 +5107,30,2.5,111.05,1.7,63.75 +5108,30,2.5,111.05,1.7,63.75 +5109,30,2.5,111.05,1.7,63.75 +5110,30,2.5,111.05,1.7,63.75 +5111,30,2.5,111.05,1.7,63.75 +5112,30,2.5,111.05,1.7,63.75 +5113,30,2.5,111.05,1.7,63.75 +5114,30,2.5,111.05,1.7,63.75 +5115,30,2.5,111.05,1.7,63.75 +5116,30,2.5,111.05,1.7,63.75 +5117,30,2.5,111.05,1.7,63.75 +5118,30,2.5,111.05,1.7,63.75 +5119,30,2.5,111.05,1.7,63.75 +5120,30,2.5,111.05,1.7,63.75 +5121,30,2.5,111.05,1.7,63.75 +5122,30,2.5,111.05,1.7,63.75 +5123,30,2.5,111.05,1.7,63.75 +5124,30,2.5,111.05,1.7,63.75 +5125,30,2.5,111.05,1.7,63.75 +5126,30,2.5,111.05,1.7,63.75 +5127,30,2.5,111.05,1.7,63.75 +5128,30,2.5,111.05,1.7,63.75 +5129,30,2.5,111.05,1.7,63.75 +5130,30,2.5,111.05,1.7,63.75 +5131,30,2.5,111.05,1.7,63.75 +5132,30,2.5,111.05,1.7,63.75 +5133,30,2.5,111.05,1.7,63.75 +5134,30,2.5,111.05,1.7,63.75 +5135,30,2.5,111.05,1.7,63.75 +5136,30,2.5,111.05,1.7,63.75 +5137,30,2.5,111.05,1.7,63.75 +5138,30,2.5,111.05,1.7,63.75 +5139,30,2.5,111.05,1.7,63.75 +5140,30,2.5,111.05,1.7,63.75 +5141,30,2.5,111.05,1.7,63.75 +5142,30,2.5,111.05,1.7,63.75 +5143,30,2.5,111.05,1.7,63.75 +5144,30,2.5,111.05,1.7,63.75 +5145,30,2.5,111.05,1.7,63.75 +5146,30,2.5,111.05,1.7,63.75 +5147,30,2.5,111.05,1.7,63.75 +5148,30,2.5,111.05,1.7,63.75 +5149,30,2.5,111.05,1.7,63.75 +5150,30,2.5,111.05,1.7,63.75 +5151,30,2.5,111.05,1.7,63.75 +5152,30,2.5,111.05,1.7,63.75 +5153,30,2.5,111.05,1.7,63.75 +5154,30,2.5,111.05,1.7,63.75 +5155,30,2.5,111.05,1.7,63.75 +5156,30,2.5,111.05,1.7,63.75 +5157,30,2.5,111.05,1.7,63.75 +5158,30,2.5,111.05,1.7,63.75 +5159,30,2.5,111.05,1.7,63.75 +5160,30,2.5,111.05,1.7,63.75 +5161,30,2.5,111.05,1.7,63.75 +5162,30,2.5,111.05,1.7,63.75 +5163,30,2.5,111.05,1.7,63.75 +5164,30,2.5,111.05,1.7,63.75 +5165,30,2.5,111.05,1.7,63.75 +5166,30,2.5,111.05,1.7,63.75 +5167,30,2.5,111.05,1.7,63.75 +5168,30,2.5,111.05,1.7,63.75 +5169,30,2.5,111.05,1.7,63.75 +5170,30,2.5,111.05,1.7,63.75 +5171,30,2.5,111.05,1.7,63.75 +5172,30,2.5,111.05,1.7,63.75 +5173,30,2.5,111.05,1.7,63.75 +5174,30,2.5,111.05,1.7,63.75 +5175,30,2.5,111.05,1.7,63.75 +5176,30,2.5,111.05,1.7,63.75 +5177,30,2.5,111.05,1.7,63.75 +5178,30,2.5,111.05,1.7,63.75 +5179,30,2.5,111.05,1.7,63.75 +5180,30,2.5,111.05,1.7,63.75 +5181,30,2.5,111.05,1.7,63.75 +5182,30,2.5,111.05,1.7,63.75 +5183,30,2.5,111.05,1.7,63.75 +5184,30,2.5,111.05,1.7,63.75 +5185,30,2.5,111.05,1.7,63.75 +5186,30,2.5,111.05,1.7,63.75 +5187,30,2.5,111.05,1.7,63.75 +5188,30,2.5,111.05,1.7,63.75 +5189,30,2.5,111.05,1.7,63.75 +5190,30,2.5,111.05,1.7,63.75 +5191,30,2.5,111.05,1.7,63.75 +5192,30,2.5,111.05,1.7,63.75 +5193,30,2.5,111.05,1.7,63.75 +5194,30,2.5,111.05,1.7,63.75 +5195,30,2.5,111.05,1.7,63.75 +5196,30,2.5,111.05,1.7,63.75 +5197,30,2.5,111.05,1.7,63.75 +5198,30,2.5,111.05,1.7,63.75 +5199,30,2.5,111.05,1.7,63.75 +5200,30,2.5,111.05,1.7,63.75 +5201,30,2.5,111.05,1.7,63.75 +5202,30,2.5,111.05,1.7,63.75 +5203,30,2.5,111.05,1.7,63.75 +5204,30,2.5,111.05,1.7,63.75 +5205,30,2.5,111.05,1.7,63.75 +5206,30,2.5,111.05,1.7,63.75 +5207,30,2.5,111.05,1.7,63.75 +5208,30,2.5,111.05,1.7,63.75 +5209,30,2.5,111.05,1.7,63.75 +5210,30,2.5,111.05,1.7,63.75 +5211,30,2.5,111.05,1.7,63.75 +5212,30,2.5,111.05,1.7,63.75 +5213,30,2.5,111.05,1.7,63.75 +5214,30,2.5,111.05,1.7,63.75 +5215,30,2.5,111.05,1.7,63.75 +5216,30,2.5,111.05,1.7,63.75 +5217,30,2.5,111.05,1.7,63.75 +5218,30,2.5,111.05,1.7,63.75 +5219,30,2.5,111.05,1.7,63.75 +5220,30,2.5,111.05,1.7,63.75 +5221,30,2.5,111.05,1.7,63.75 +5222,30,2.5,111.05,1.7,63.75 +5223,30,2.5,111.05,1.7,63.75 +5224,30,2.5,111.05,1.7,63.75 +5225,30,2.5,111.05,1.7,63.75 +5226,30,2.5,111.05,1.7,63.75 +5227,30,2.5,111.05,1.7,63.75 +5228,30,2.5,111.05,1.7,63.75 +5229,30,2.5,111.05,1.7,63.75 +5230,30,2.5,111.05,1.7,63.75 +5231,30,2.5,111.05,1.7,63.75 +5232,30,2.5,111.05,1.7,63.75 +5233,30,2.5,111.05,1.7,63.75 +5234,30,2.5,111.05,1.7,63.75 +5235,30,2.5,111.05,1.7,63.75 +5236,30,2.5,111.05,1.7,63.75 +5237,30,2.5,111.05,1.7,63.75 +5238,30,2.5,111.05,1.7,63.75 +5239,30,2.5,111.05,1.7,63.75 +5240,30,2.5,111.05,1.7,63.75 +5241,30,2.5,111.05,1.7,63.75 +5242,30,2.5,111.05,1.7,63.75 +5243,30,2.5,111.05,1.7,63.75 +5244,30,2.5,111.05,1.7,63.75 +5245,30,2.5,111.05,1.7,63.75 +5246,30,2.5,111.05,1.7,63.75 +5247,30,2.5,111.05,1.7,63.75 +5248,30,2.5,111.05,1.7,63.75 +5249,30,2.5,111.05,1.7,63.75 +5250,30,2.5,111.05,1.7,63.75 +5251,30,2.5,111.05,1.7,63.75 +5252,30,2.5,111.05,1.7,63.75 +5253,30,2.5,111.05,1.7,63.75 +5254,30,2.5,111.05,1.7,63.75 +5255,30,2.5,111.05,1.7,63.75 +5256,30,2.5,111.05,1.7,63.75 +5257,30,2.5,111.05,1.7,63.75 +5258,30,2.5,111.05,1.7,63.75 +5259,30,2.5,111.05,1.7,63.75 +5260,30,2.5,111.05,1.7,63.75 +5261,30,2.5,111.05,1.7,63.75 +5262,30,2.5,111.05,1.7,63.75 +5263,30,2.5,111.05,1.7,63.75 +5264,30,2.5,111.05,1.7,63.75 +5265,30,2.5,111.05,1.7,63.75 +5266,30,2.5,111.05,1.7,63.75 +5267,30,2.5,111.05,1.7,63.75 +5268,30,2.5,111.05,1.7,63.75 +5269,30,2.5,111.05,1.7,63.75 +5270,30,2.5,111.05,1.7,63.75 +5271,30,2.5,111.05,1.7,63.75 +5272,30,2.5,111.05,1.7,63.75 +5273,30,2.5,111.05,1.7,63.75 +5274,30,2.5,111.05,1.7,63.75 +5275,30,2.5,111.05,1.7,63.75 +5276,30,2.5,111.05,1.7,63.75 +5277,30,2.5,111.05,1.7,63.75 +5278,30,2.5,111.05,1.7,63.75 +5279,30,2.5,111.05,1.7,63.75 +5280,30,2.5,111.05,1.7,63.75 +5281,30,2.5,111.05,1.7,63.75 +5282,30,2.5,111.05,1.7,63.75 +5283,30,2.5,111.05,1.7,63.75 +5284,30,2.5,111.05,1.7,63.75 +5285,30,2.5,111.05,1.7,63.75 +5286,30,2.5,111.05,1.7,63.75 +5287,30,2.5,111.05,1.7,63.75 +5288,30,2.5,111.05,1.7,63.75 +5289,30,2.5,111.05,1.7,63.75 +5290,30,2.5,111.05,1.7,63.75 +5291,30,2.5,111.05,1.7,63.75 +5292,30,2.5,111.05,1.7,63.75 +5293,30,2.5,111.05,1.7,63.75 +5294,30,2.5,111.05,1.7,63.75 +5295,30,2.5,111.05,1.7,63.75 +5296,30,2.5,111.05,1.7,63.75 +5297,30,2.5,111.05,1.7,63.75 +5298,30,2.5,111.05,1.7,63.75 +5299,30,2.5,111.05,1.7,63.75 +5300,30,2.5,111.05,1.7,63.75 +5301,30,2.5,111.05,1.7,63.75 +5302,30,2.5,111.05,1.7,63.75 +5303,30,2.5,111.05,1.7,63.75 +5304,30,2.5,111.05,1.7,63.75 +5305,30,2.5,111.05,1.7,63.75 +5306,30,2.5,111.05,1.7,63.75 +5307,30,2.5,111.05,1.7,63.75 +5308,30,2.5,111.05,1.7,63.75 +5309,30,2.5,111.05,1.7,63.75 +5310,30,2.5,111.05,1.7,63.75 +5311,30,2.5,111.05,1.7,63.75 +5312,30,2.5,111.05,1.7,63.75 +5313,30,2.5,111.05,1.7,63.75 +5314,30,2.5,111.05,1.7,63.75 +5315,30,2.5,111.05,1.7,63.75 +5316,30,2.5,111.05,1.7,63.75 +5317,30,2.5,111.05,1.7,63.75 +5318,30,2.5,111.05,1.7,63.75 +5319,30,2.5,111.05,1.7,63.75 +5320,30,2.5,111.05,1.7,63.75 +5321,30,2.5,111.05,1.7,63.75 +5322,30,2.5,111.05,1.7,63.75 +5323,30,2.5,111.05,1.7,63.75 +5324,30,2.5,111.05,1.7,63.75 +5325,30,2.5,111.05,1.7,63.75 +5326,30,2.5,111.05,1.7,63.75 +5327,30,2.5,111.05,1.7,63.75 +5328,30,2.5,111.05,1.7,63.75 +5329,30,2.5,111.05,1.7,63.75 +5330,30,2.5,111.05,1.7,63.75 +5331,30,2.5,111.05,1.7,63.75 +5332,30,2.5,111.05,1.7,63.75 +5333,30,2.5,111.05,1.7,63.75 +5334,30,2.5,111.05,1.7,63.75 +5335,30,2.5,111.05,1.7,63.75 +5336,30,2.5,111.05,1.7,63.75 +5337,30,2.5,111.05,1.7,63.75 +5338,30,2.5,111.05,1.7,63.75 +5339,30,2.5,111.05,1.7,63.75 +5340,30,2.5,111.05,1.7,63.75 +5341,30,2.5,111.05,1.7,63.75 +5342,30,2.5,111.05,1.7,63.75 +5343,30,2.5,111.05,1.7,63.75 +5344,30,2.5,111.05,1.7,63.75 +5345,30,2.5,111.05,1.7,63.75 +5346,30,2.5,111.05,1.7,63.75 +5347,30,2.5,111.05,1.7,63.75 +5348,30,2.5,111.05,1.7,63.75 +5349,30,2.5,111.05,1.7,63.75 +5350,30,2.5,111.05,1.7,63.75 +5351,30,2.5,111.05,1.7,63.75 +5352,30,2.5,111.05,1.7,63.75 +5353,30,2.5,111.05,1.7,63.75 +5354,30,2.5,111.05,1.7,63.75 +5355,30,2.5,111.05,1.7,63.75 +5356,30,2.5,111.05,1.7,63.75 +5357,30,2.5,111.05,1.7,63.75 +5358,30,2.5,111.05,1.7,63.75 +5359,30,2.5,111.05,1.7,63.75 +5360,30,2.5,111.05,1.7,63.75 +5361,30,2.5,111.05,1.7,63.75 +5362,30,2.5,111.05,1.7,63.75 +5363,30,2.5,111.05,1.7,63.75 +5364,30,2.5,111.05,1.7,63.75 +5365,30,2.5,111.05,1.7,63.75 +5366,30,2.5,111.05,1.7,63.75 +5367,30,2.5,111.05,1.7,63.75 +5368,30,2.5,111.05,1.7,63.75 +5369,30,2.5,111.05,1.7,63.75 +5370,30,2.5,111.05,1.7,63.75 +5371,30,2.5,111.05,1.7,63.75 +5372,30,2.5,111.05,1.7,63.75 +5373,30,2.5,111.05,1.7,63.75 +5374,30,2.5,111.05,1.7,63.75 +5375,30,2.5,111.05,1.7,63.75 +5376,30,2.5,111.05,1.7,63.75 +5377,30,2.5,111.05,1.7,63.75 +5378,30,2.5,111.05,1.7,63.75 +5379,30,2.5,111.05,1.7,63.75 +5380,30,2.5,111.05,1.7,63.75 +5381,30,2.5,111.05,1.7,63.75 +5382,30,2.5,111.05,1.7,63.75 +5383,30,2.5,111.05,1.7,63.75 +5384,30,2.5,111.05,1.7,63.75 +5385,30,2.5,111.05,1.7,63.75 +5386,30,2.5,111.05,1.7,63.75 +5387,30,2.5,111.05,1.7,63.75 +5388,30,2.5,111.05,1.7,63.75 +5389,30,2.5,111.05,1.7,63.75 +5390,30,2.5,111.05,1.7,63.75 +5391,30,2.5,111.05,1.7,63.75 +5392,30,2.5,111.05,1.7,63.75 +5393,30,2.5,111.05,1.7,63.75 +5394,30,2.5,111.05,1.7,63.75 +5395,30,2.5,111.05,1.7,63.75 +5396,30,2.5,111.05,1.7,63.75 +5397,30,2.5,111.05,1.7,63.75 +5398,30,2.5,111.05,1.7,63.75 +5399,30,2.5,111.05,1.7,63.75 +5400,30,2.5,111.05,1.7,63.75 +5401,30,2.5,111.05,1.7,63.75 +5402,30,2.5,111.05,1.7,63.75 +5403,30,2.5,111.05,1.7,63.75 +5404,30,2.5,111.05,1.7,63.75 +5405,30,2.5,111.05,1.7,63.75 +5406,30,2.5,111.05,1.7,63.75 +5407,30,2.5,111.05,1.7,63.75 +5408,30,2.5,111.05,1.7,63.75 +5409,30,2.5,111.05,1.7,63.75 +5410,30,2.5,111.05,1.7,63.75 +5411,30,2.5,111.05,1.7,63.75 +5412,30,2.5,111.05,1.7,63.75 +5413,30,2.5,111.05,1.7,63.75 +5414,30,2.5,111.05,1.7,63.75 +5415,30,2.5,111.05,1.7,63.75 +5416,30,2.5,111.05,1.7,63.75 +5417,30,2.5,111.05,1.7,63.75 +5418,30,2.5,111.05,1.7,63.75 +5419,30,2.5,111.05,1.7,63.75 +5420,30,2.5,111.05,1.7,63.75 +5421,30,2.5,111.05,1.7,63.75 +5422,30,2.5,111.05,1.7,63.75 +5423,30,2.5,111.05,1.7,63.75 +5424,30,2.5,111.05,1.7,63.75 +5425,30,2.5,111.05,1.7,63.75 +5426,30,2.5,111.05,1.7,63.75 +5427,30,2.5,111.05,1.7,63.75 +5428,30,2.5,111.05,1.7,63.75 +5429,30,2.5,111.05,1.7,63.75 +5430,30,2.5,111.05,1.7,63.75 +5431,30,2.5,111.05,1.7,63.75 +5432,30,2.5,111.05,1.7,63.75 +5433,30,2.5,111.05,1.7,63.75 +5434,30,2.5,111.05,1.7,63.75 +5435,30,2.5,111.05,1.7,63.75 +5436,30,2.5,111.05,1.7,63.75 +5437,30,2.5,111.05,1.7,63.75 +5438,30,2.5,111.05,1.7,63.75 +5439,30,2.5,111.05,1.7,63.75 +5440,30,2.5,111.05,1.7,63.75 +5441,30,2.5,111.05,1.7,63.75 +5442,30,2.5,111.05,1.7,63.75 +5443,30,2.5,111.05,1.7,63.75 +5444,30,2.5,111.05,1.7,63.75 +5445,30,2.5,111.05,1.7,63.75 +5446,30,2.5,111.05,1.7,63.75 +5447,30,2.5,111.05,1.7,63.75 +5448,30,2.5,111.05,1.7,63.75 +5449,30,2.5,111.05,1.7,63.75 +5450,30,2.5,111.05,1.7,63.75 +5451,30,2.5,111.05,1.7,63.75 +5452,30,2.5,111.05,1.7,63.75 +5453,30,2.5,111.05,1.7,63.75 +5454,30,2.5,111.05,1.7,63.75 +5455,30,2.5,111.05,1.7,63.75 +5456,30,2.5,111.05,1.7,63.75 +5457,30,2.5,111.05,1.7,63.75 +5458,30,2.5,111.05,1.7,63.75 +5459,30,2.5,111.05,1.7,63.75 +5460,30,2.5,111.05,1.7,63.75 +5461,30,2.5,111.05,1.7,63.75 +5462,30,2.5,111.05,1.7,63.75 +5463,30,2.5,111.05,1.7,63.75 +5464,30,2.5,111.05,1.7,63.75 +5465,30,2.5,111.05,1.7,63.75 +5466,30,2.5,111.05,1.7,63.75 +5467,30,2.5,111.05,1.7,63.75 +5468,30,2.5,111.05,1.7,63.75 +5469,30,2.5,111.05,1.7,63.75 +5470,30,2.5,111.05,1.7,63.75 +5471,30,2.5,111.05,1.7,63.75 +5472,30,2.5,111.05,1.7,63.75 +5473,30,2.5,111.05,1.7,63.75 +5474,30,2.5,111.05,1.7,63.75 +5475,30,2.5,111.05,1.7,63.75 +5476,30,2.5,111.05,1.7,63.75 +5477,30,2.5,111.05,1.7,63.75 +5478,30,2.5,111.05,1.7,63.75 +5479,30,2.5,111.05,1.7,63.75 +5480,30,2.5,111.05,1.7,63.75 +5481,30,2.5,111.05,1.7,63.75 +5482,30,2.5,111.05,1.7,63.75 +5483,30,2.5,111.05,1.7,63.75 +5484,30,2.5,111.05,1.7,63.75 +5485,30,2.5,111.05,1.7,63.75 +5486,30,2.5,111.05,1.7,63.75 +5487,30,2.5,111.05,1.7,63.75 +5488,30,2.5,111.05,1.7,63.75 +5489,30,2.5,111.05,1.7,63.75 +5490,30,2.5,111.05,1.7,63.75 +5491,30,2.5,111.05,1.7,63.75 +5492,30,2.5,111.05,1.7,63.75 +5493,30,2.5,111.05,1.7,63.75 +5494,30,2.5,111.05,1.7,63.75 +5495,30,2.5,111.05,1.7,63.75 +5496,30,2.5,111.05,1.7,63.75 +5497,30,2.5,111.05,1.7,63.75 +5498,30,2.5,111.05,1.7,63.75 +5499,30,2.5,111.05,1.7,63.75 +5500,30,2.5,111.05,1.7,63.75 +5501,30,2.5,111.05,1.7,63.75 +5502,30,2.5,111.05,1.7,63.75 +5503,30,2.5,111.05,1.7,63.75 +5504,30,2.5,111.05,1.7,63.75 +5505,30,2.5,111.05,1.7,63.75 +5506,30,2.5,111.05,1.7,63.75 +5507,30,2.5,111.05,1.7,63.75 +5508,30,2.5,111.05,1.7,63.75 +5509,30,2.5,111.05,1.7,63.75 +5510,30,2.5,111.05,1.7,63.75 +5511,30,2.5,111.05,1.7,63.75 +5512,30,2.5,111.05,1.7,63.75 +5513,30,2.5,111.05,1.7,63.75 +5514,30,2.5,111.05,1.7,63.75 +5515,30,2.5,111.05,1.7,63.75 +5516,30,2.5,111.05,1.7,63.75 +5517,30,2.5,111.05,1.7,63.75 +5518,30,2.5,111.05,1.7,63.75 +5519,30,2.5,111.05,1.7,63.75 +5520,30,2.5,111.05,1.7,63.75 +5521,30,2.5,111.05,1.7,63.75 +5522,30,2.5,111.05,1.7,63.75 +5523,30,2.5,111.05,1.7,63.75 +5524,30,2.5,111.05,1.7,63.75 +5525,30,2.5,111.05,1.7,63.75 +5526,30,2.5,111.05,1.7,63.75 +5527,30,2.5,111.05,1.7,63.75 +5528,30,2.5,111.05,1.7,63.75 +5529,30,2.5,111.05,1.7,63.75 +5530,30,2.5,111.05,1.7,63.75 +5531,30,2.5,111.05,1.7,63.75 +5532,30,2.5,111.05,1.7,63.75 +5533,30,2.5,111.05,1.7,63.75 +5534,30,2.5,111.05,1.7,63.75 +5535,30,2.5,111.05,1.7,63.75 +5536,30,2.5,111.05,1.7,63.75 +5537,30,2.5,111.05,1.7,63.75 +5538,30,2.5,111.05,1.7,63.75 +5539,30,2.5,111.05,1.7,63.75 +5540,30,2.5,111.05,1.7,63.75 +5541,30,2.5,111.05,1.7,63.75 +5542,30,2.5,111.05,1.7,63.75 +5543,30,2.5,111.05,1.7,63.75 +5544,30,2.5,111.05,1.7,63.75 +5545,30,2.5,111.05,1.7,63.75 +5546,30,2.5,111.05,1.7,63.75 +5547,30,2.5,111.05,1.7,63.75 +5548,30,2.5,111.05,1.7,63.75 +5549,30,2.5,111.05,1.7,63.75 +5550,30,2.5,111.05,1.7,63.75 +5551,30,2.5,111.05,1.7,63.75 +5552,30,2.5,111.05,1.7,63.75 +5553,30,2.5,111.05,1.7,63.75 +5554,30,2.5,111.05,1.7,63.75 +5555,30,2.5,111.05,1.7,63.75 +5556,30,2.5,111.05,1.7,63.75 +5557,30,2.5,111.05,1.7,63.75 +5558,30,2.5,111.05,1.7,63.75 +5559,30,2.5,111.05,1.7,63.75 +5560,30,2.5,111.05,1.7,63.75 +5561,30,2.5,111.05,1.7,63.75 +5562,30,2.5,111.05,1.7,63.75 +5563,30,2.5,111.05,1.7,63.75 +5564,30,2.5,111.05,1.7,63.75 +5565,30,2.5,111.05,1.7,63.75 +5566,30,2.5,111.05,1.7,63.75 +5567,30,2.5,111.05,1.7,63.75 +5568,30,2.5,111.05,1.7,63.75 +5569,30,2.5,111.05,1.7,63.75 +5570,30,2.5,111.05,1.7,63.75 +5571,30,2.5,111.05,1.7,63.75 +5572,30,2.5,111.05,1.7,63.75 +5573,30,2.5,111.05,1.7,63.75 +5574,30,2.5,111.05,1.7,63.75 +5575,30,2.5,111.05,1.7,63.75 +5576,30,2.5,111.05,1.7,63.75 +5577,30,2.5,111.05,1.7,63.75 +5578,30,2.5,111.05,1.7,63.75 +5579,30,2.5,111.05,1.7,63.75 +5580,30,2.5,111.05,1.7,63.75 +5581,30,2.5,111.05,1.7,63.75 +5582,30,2.5,111.05,1.7,63.75 +5583,30,2.5,111.05,1.7,63.75 +5584,30,2.5,111.05,1.7,63.75 +5585,30,2.5,111.05,1.7,63.75 +5586,30,2.5,111.05,1.7,63.75 +5587,30,2.5,111.05,1.7,63.75 +5588,30,2.5,111.05,1.7,63.75 +5589,30,2.5,111.05,1.7,63.75 +5590,30,2.5,111.05,1.7,63.75 +5591,30,2.5,111.05,1.7,63.75 +5592,30,2.5,111.05,1.7,63.75 +5593,30,2.5,111.05,1.7,63.75 +5594,30,2.5,111.05,1.7,63.75 +5595,30,2.5,111.05,1.7,63.75 +5596,30,2.5,111.05,1.7,63.75 +5597,30,2.5,111.05,1.7,63.75 +5598,30,2.5,111.05,1.7,63.75 +5599,30,2.5,111.05,1.7,63.75 +5600,30,2.5,111.05,1.7,63.75 +5601,30,2.5,111.05,1.7,63.75 +5602,30,2.5,111.05,1.7,63.75 +5603,30,2.5,111.05,1.7,63.75 +5604,30,2.5,111.05,1.7,63.75 +5605,30,2.5,111.05,1.7,63.75 +5606,30,2.5,111.05,1.7,63.75 +5607,30,2.5,111.05,1.7,63.75 +5608,30,2.5,111.05,1.7,63.75 +5609,30,2.5,111.05,1.7,63.75 +5610,30,2.5,111.05,1.7,63.75 +5611,30,2.5,111.05,1.7,63.75 +5612,30,2.5,111.05,1.7,63.75 +5613,30,2.5,111.05,1.7,63.75 +5614,30,2.5,111.05,1.7,63.75 +5615,30,2.5,111.05,1.7,63.75 +5616,30,2.5,111.05,1.7,63.75 +5617,30,2.5,111.05,1.7,63.75 +5618,30,2.5,111.05,1.7,63.75 +5619,30,2.5,111.05,1.7,63.75 +5620,30,2.5,111.05,1.7,63.75 +5621,30,2.5,111.05,1.7,63.75 +5622,30,2.5,111.05,1.7,63.75 +5623,30,2.5,111.05,1.7,63.75 +5624,30,2.5,111.05,1.7,63.75 +5625,30,2.5,111.05,1.7,63.75 +5626,30,2.5,111.05,1.7,63.75 +5627,30,2.5,111.05,1.7,63.75 +5628,30,2.5,111.05,1.7,63.75 +5629,30,2.5,111.05,1.7,63.75 +5630,30,2.5,111.05,1.7,63.75 +5631,30,2.5,111.05,1.7,63.75 +5632,30,2.5,111.05,1.7,63.75 +5633,30,2.5,111.05,1.7,63.75 +5634,30,2.5,111.05,1.7,63.75 +5635,30,2.5,111.05,1.7,63.75 +5636,30,2.5,111.05,1.7,63.75 +5637,30,2.5,111.05,1.7,63.75 +5638,30,2.5,111.05,1.7,63.75 +5639,30,2.5,111.05,1.7,63.75 +5640,30,2.5,111.05,1.7,63.75 +5641,30,2.5,111.05,1.7,63.75 +5642,30,2.5,111.05,1.7,63.75 +5643,30,2.5,111.05,1.7,63.75 +5644,30,2.5,111.05,1.7,63.75 +5645,30,2.5,111.05,1.7,63.75 +5646,30,2.5,111.05,1.7,63.75 +5647,30,2.5,111.05,1.7,63.75 +5648,30,2.5,111.05,1.7,63.75 +5649,30,2.5,111.05,1.7,63.75 +5650,30,2.5,111.05,1.7,63.75 +5651,30,2.5,111.05,1.7,63.75 +5652,30,2.5,111.05,1.7,63.75 +5653,30,2.5,111.05,1.7,63.75 +5654,30,2.5,111.05,1.7,63.75 +5655,30,2.5,111.05,1.7,63.75 +5656,30,2.5,111.05,1.7,63.75 +5657,30,2.5,111.05,1.7,63.75 +5658,30,2.5,111.05,1.7,63.75 +5659,30,2.5,111.05,1.7,63.75 +5660,30,2.5,111.05,1.7,63.75 +5661,30,2.5,111.05,1.7,63.75 +5662,30,2.5,111.05,1.7,63.75 +5663,30,2.5,111.05,1.7,63.75 +5664,30,2.5,111.05,1.7,63.75 +5665,30,2.5,111.05,1.7,63.75 +5666,30,2.5,111.05,1.7,63.75 +5667,30,2.5,111.05,1.7,63.75 +5668,30,2.5,111.05,1.7,63.75 +5669,30,2.5,111.05,1.7,63.75 +5670,30,2.5,111.05,1.7,63.75 +5671,30,2.5,111.05,1.7,63.75 +5672,30,2.5,111.05,1.7,63.75 +5673,30,2.5,111.05,1.7,63.75 +5674,30,2.5,111.05,1.7,63.75 +5675,30,2.5,111.05,1.7,63.75 +5676,30,2.5,111.05,1.7,63.75 +5677,30,2.5,111.05,1.7,63.75 +5678,30,2.5,111.05,1.7,63.75 +5679,30,2.5,111.05,1.7,63.75 +5680,30,2.5,111.05,1.7,63.75 +5681,30,2.5,111.05,1.7,63.75 +5682,30,2.5,111.05,1.7,63.75 +5683,30,2.5,111.05,1.7,63.75 +5684,30,2.5,111.05,1.7,63.75 +5685,30,2.5,111.05,1.7,63.75 +5686,30,2.5,111.05,1.7,63.75 +5687,30,2.5,111.05,1.7,63.75 +5688,30,2.5,111.05,1.7,63.75 +5689,30,2.5,111.05,1.7,63.75 +5690,30,2.5,111.05,1.7,63.75 +5691,30,2.5,111.05,1.7,63.75 +5692,30,2.5,111.05,1.7,63.75 +5693,30,2.5,111.05,1.7,63.75 +5694,30,2.5,111.05,1.7,63.75 +5695,30,2.5,111.05,1.7,63.75 +5696,30,2.5,111.05,1.7,63.75 +5697,30,2.5,111.05,1.7,63.75 +5698,30,2.5,111.05,1.7,63.75 +5699,30,2.5,111.05,1.7,63.75 +5700,30,2.5,111.05,1.7,63.75 +5701,30,2.5,111.05,1.7,63.75 +5702,30,2.5,111.05,1.7,63.75 +5703,30,2.5,111.05,1.7,63.75 +5704,30,2.5,111.05,1.7,63.75 +5705,30,2.5,111.05,1.7,63.75 +5706,30,2.5,111.05,1.7,63.75 +5707,30,2.5,111.05,1.7,63.75 +5708,30,2.5,111.05,1.7,63.75 +5709,30,2.5,111.05,1.7,63.75 +5710,30,2.5,111.05,1.7,63.75 +5711,30,2.5,111.05,1.7,63.75 +5712,30,2.5,111.05,1.7,63.75 +5713,30,2.5,111.05,1.7,63.75 +5714,30,2.5,111.05,1.7,63.75 +5715,30,2.5,111.05,1.7,63.75 +5716,30,2.5,111.05,1.7,63.75 +5717,30,2.5,111.05,1.7,63.75 +5718,30,2.5,111.05,1.7,63.75 +5719,30,2.5,111.05,1.7,63.75 +5720,30,2.5,111.05,1.7,63.75 +5721,30,2.5,111.05,1.7,63.75 +5722,30,2.5,111.05,1.7,63.75 +5723,30,2.5,111.05,1.7,63.75 +5724,30,2.5,111.05,1.7,63.75 +5725,30,2.5,111.05,1.7,63.75 +5726,30,2.5,111.05,1.7,63.75 +5727,30,2.5,111.05,1.7,63.75 +5728,30,2.5,111.05,1.7,63.75 +5729,30,2.5,111.05,1.7,63.75 +5730,30,2.5,111.05,1.7,63.75 +5731,30,2.5,111.05,1.7,63.75 +5732,30,2.5,111.05,1.7,63.75 +5733,30,2.5,111.05,1.7,63.75 +5734,30,2.5,111.05,1.7,63.75 +5735,30,2.5,111.05,1.7,63.75 +5736,30,2.5,111.05,1.7,63.75 +5737,30,2.5,111.05,1.7,63.75 +5738,30,2.5,111.05,1.7,63.75 +5739,30,2.5,111.05,1.7,63.75 +5740,30,2.5,111.05,1.7,63.75 +5741,30,2.5,111.05,1.7,63.75 +5742,30,2.5,111.05,1.7,63.75 +5743,30,2.5,111.05,1.7,63.75 +5744,30,2.5,111.05,1.7,63.75 +5745,30,2.5,111.05,1.7,63.75 +5746,30,2.5,111.05,1.7,63.75 +5747,30,2.5,111.05,1.7,63.75 +5748,30,2.5,111.05,1.7,63.75 +5749,30,2.5,111.05,1.7,63.75 +5750,30,2.5,111.05,1.7,63.75 +5751,30,2.5,111.05,1.7,63.75 +5752,30,2.5,111.05,1.7,63.75 +5753,30,2.5,111.05,1.7,63.75 +5754,30,2.5,111.05,1.7,63.75 +5755,30,2.5,111.05,1.7,63.75 +5756,30,2.5,111.05,1.7,63.75 +5757,30,2.5,111.05,1.7,63.75 +5758,30,2.5,111.05,1.7,63.75 +5759,30,2.5,111.05,1.7,63.75 +5760,30,2.5,111.05,1.7,63.75 +5761,30,2.5,111.05,1.7,63.75 +5762,30,2.5,111.05,1.7,63.75 +5763,30,2.5,111.05,1.7,63.75 +5764,30,2.5,111.05,1.7,63.75 +5765,30,2.5,111.05,1.7,63.75 +5766,30,2.5,111.05,1.7,63.75 +5767,30,2.5,111.05,1.7,63.75 +5768,30,2.5,111.05,1.7,63.75 +5769,30,2.5,111.05,1.7,63.75 +5770,30,2.5,111.05,1.7,63.75 +5771,30,2.5,111.05,1.7,63.75 +5772,30,2.5,111.05,1.7,63.75 +5773,30,2.5,111.05,1.7,63.75 +5774,30,2.5,111.05,1.7,63.75 +5775,30,2.5,111.05,1.7,63.75 +5776,30,2.5,111.05,1.7,63.75 +5777,30,2.5,111.05,1.7,63.75 +5778,30,2.5,111.05,1.7,63.75 +5779,30,2.5,111.05,1.7,63.75 +5780,30,2.5,111.05,1.7,63.75 +5781,30,2.5,111.05,1.7,63.75 +5782,30,2.5,111.05,1.7,63.75 +5783,30,2.5,111.05,1.7,63.75 +5784,30,2.5,111.05,1.7,63.75 +5785,30,2.5,111.05,1.7,63.75 +5786,30,2.5,111.05,1.7,63.75 +5787,30,2.5,111.05,1.7,63.75 +5788,30,2.5,111.05,1.7,63.75 +5789,30,2.5,111.05,1.7,63.75 +5790,30,2.5,111.05,1.7,63.75 +5791,30,2.5,111.05,1.7,63.75 +5792,30,2.5,111.05,1.7,63.75 +5793,30,2.5,111.05,1.7,63.75 +5794,30,2.5,111.05,1.7,63.75 +5795,30,2.5,111.05,1.7,63.75 +5796,30,2.5,111.05,1.7,63.75 +5797,30,2.5,111.05,1.7,63.75 +5798,30,2.5,111.05,1.7,63.75 +5799,30,2.5,111.05,1.7,63.75 +5800,30,2.5,111.05,1.7,63.75 +5801,30,2.5,111.05,1.7,63.75 +5802,30,2.5,111.05,1.7,63.75 +5803,30,2.5,111.05,1.7,63.75 +5804,30,2.5,111.05,1.7,63.75 +5805,30,2.5,111.05,1.7,63.75 +5806,30,2.5,111.05,1.7,63.75 +5807,30,2.5,111.05,1.7,63.75 +5808,30,2.5,111.05,1.7,63.75 +5809,30,2.5,111.05,1.7,63.75 +5810,30,2.5,111.05,1.7,63.75 +5811,30,2.5,111.05,1.7,63.75 +5812,30,2.5,111.05,1.7,63.75 +5813,30,2.5,111.05,1.7,63.75 +5814,30,2.5,111.05,1.7,63.75 +5815,30,2.5,111.05,1.7,63.75 +5816,30,2.5,111.05,1.7,63.75 +5817,30,2.5,111.05,1.7,63.75 +5818,30,2.5,111.05,1.7,63.75 +5819,30,2.5,111.05,1.7,63.75 +5820,30,2.5,111.05,1.7,63.75 +5821,30,2.5,111.05,1.7,63.75 +5822,30,2.5,111.05,1.7,63.75 +5823,30,2.5,111.05,1.7,63.75 +5824,30,2.5,111.05,1.7,63.75 +5825,30,2.5,111.05,1.7,63.75 +5826,30,2.5,111.05,1.7,63.75 +5827,30,2.5,111.05,1.7,63.75 +5828,30,2.5,111.05,1.7,63.75 +5829,30,2.5,111.05,1.7,63.75 +5830,30,2.5,111.05,1.7,63.75 +5831,30,2.5,111.05,1.7,63.75 +5832,30,2.5,111.05,1.7,63.75 +5833,30,2.5,111.05,1.7,63.75 +5834,30,2.5,111.05,1.7,63.75 +5835,30,2.5,111.05,1.7,63.75 +5836,30,2.5,111.05,1.7,63.75 +5837,30,2.5,111.05,1.7,63.75 +5838,30,2.5,111.05,1.7,63.75 +5839,30,2.5,111.05,1.7,63.75 +5840,30,2.5,111.05,1.7,63.75 +5841,30,2.5,111.05,1.7,63.75 +5842,30,2.5,111.05,1.7,63.75 +5843,30,2.5,111.05,1.7,63.75 +5844,30,2.5,111.05,1.7,63.75 +5845,30,2.5,111.05,1.7,63.75 +5846,30,2.5,111.05,1.7,63.75 +5847,30,2.5,111.05,1.7,63.75 +5848,30,2.5,111.05,1.7,63.75 +5849,30,2.5,111.05,1.7,63.75 +5850,30,2.5,111.05,1.7,63.75 +5851,30,2.5,111.05,1.7,63.75 +5852,30,2.5,111.05,1.7,63.75 +5853,30,2.5,111.05,1.7,63.75 +5854,30,2.5,111.05,1.7,63.75 +5855,30,2.5,111.05,1.7,63.75 +5856,30,2.5,111.05,1.7,63.75 +5857,30,2.5,111.05,1.7,63.75 +5858,30,2.5,111.05,1.7,63.75 +5859,30,2.5,111.05,1.7,63.75 +5860,30,2.5,111.05,1.7,63.75 +5861,30,2.5,111.05,1.7,63.75 +5862,30,2.5,111.05,1.7,63.75 +5863,30,2.5,111.05,1.7,63.75 +5864,30,2.5,111.05,1.7,63.75 +5865,30,2.5,111.05,1.7,63.75 +5866,30,2.5,111.05,1.7,63.75 +5867,30,2.5,111.05,1.7,63.75 +5868,30,2.5,111.05,1.7,63.75 +5869,30,2.5,111.05,1.7,63.75 +5870,30,2.5,111.05,1.7,63.75 +5871,30,2.5,111.05,1.7,63.75 +5872,30,2.5,111.05,1.7,63.75 +5873,30,2.5,111.05,1.7,63.75 +5874,30,2.5,111.05,1.7,63.75 +5875,30,2.5,111.05,1.7,63.75 +5876,30,2.5,111.05,1.7,63.75 +5877,30,2.5,111.05,1.7,63.75 +5878,30,2.5,111.05,1.7,63.75 +5879,30,2.5,111.05,1.7,63.75 +5880,30,2.5,111.05,1.7,63.75 +5881,30,2.5,111.05,1.7,63.75 +5882,30,2.5,111.05,1.7,63.75 +5883,30,2.5,111.05,1.7,63.75 +5884,30,2.5,111.05,1.7,63.75 +5885,30,2.5,111.05,1.7,63.75 +5886,30,2.5,111.05,1.7,63.75 +5887,30,2.5,111.05,1.7,63.75 +5888,30,2.5,111.05,1.7,63.75 +5889,30,2.5,111.05,1.7,63.75 +5890,30,2.5,111.05,1.7,63.75 +5891,30,2.5,111.05,1.7,63.75 +5892,30,2.5,111.05,1.7,63.75 +5893,30,2.5,111.05,1.7,63.75 +5894,30,2.5,111.05,1.7,63.75 +5895,30,2.5,111.05,1.7,63.75 +5896,30,2.5,111.05,1.7,63.75 +5897,30,2.5,111.05,1.7,63.75 +5898,30,2.5,111.05,1.7,63.75 +5899,30,2.5,111.05,1.7,63.75 +5900,30,2.5,111.05,1.7,63.75 +5901,30,2.5,111.05,1.7,63.75 +5902,30,2.5,111.05,1.7,63.75 +5903,30,2.5,111.05,1.7,63.75 +5904,30,2.5,111.05,1.7,63.75 +5905,30,2.5,111.05,1.7,63.75 +5906,30,2.5,111.05,1.7,63.75 +5907,30,2.5,111.05,1.7,63.75 +5908,30,2.5,111.05,1.7,63.75 +5909,30,2.5,111.05,1.7,63.75 +5910,30,2.5,111.05,1.7,63.75 +5911,30,2.5,111.05,1.7,63.75 +5912,30,2.5,111.05,1.7,63.75 +5913,30,2.5,111.05,1.7,63.75 +5914,30,2.5,111.05,1.7,63.75 +5915,30,2.5,111.05,1.7,63.75 +5916,30,2.5,111.05,1.7,63.75 +5917,30,2.5,111.05,1.7,63.75 +5918,30,2.5,111.05,1.7,63.75 +5919,30,2.5,111.05,1.7,63.75 +5920,30,2.5,111.05,1.7,63.75 +5921,30,2.5,111.05,1.7,63.75 +5922,30,2.5,111.05,1.7,63.75 +5923,30,2.5,111.05,1.7,63.75 +5924,30,2.5,111.05,1.7,63.75 +5925,30,2.5,111.05,1.7,63.75 +5926,30,2.5,111.05,1.7,63.75 +5927,30,2.5,111.05,1.7,63.75 +5928,30,2.5,111.05,1.7,63.75 +5929,30,2.5,111.05,1.7,63.75 +5930,30,2.5,111.05,1.7,63.75 +5931,30,2.5,111.05,1.7,63.75 +5932,30,2.5,111.05,1.7,63.75 +5933,30,2.5,111.05,1.7,63.75 +5934,30,2.5,111.05,1.7,63.75 +5935,30,2.5,111.05,1.7,63.75 +5936,30,2.5,111.05,1.7,63.75 +5937,30,2.5,111.05,1.7,63.75 +5938,30,2.5,111.05,1.7,63.75 +5939,30,2.5,111.05,1.7,63.75 +5940,30,2.5,111.05,1.7,63.75 +5941,30,2.5,111.05,1.7,63.75 +5942,30,2.5,111.05,1.7,63.75 +5943,30,2.5,111.05,1.7,63.75 +5944,30,2.5,111.05,1.7,63.75 +5945,30,2.5,111.05,1.7,63.75 +5946,30,2.5,111.05,1.7,63.75 +5947,30,2.5,111.05,1.7,63.75 +5948,30,2.5,111.05,1.7,63.75 +5949,30,2.5,111.05,1.7,63.75 +5950,30,2.5,111.05,1.7,63.75 +5951,30,2.5,111.05,1.7,63.75 +5952,30,2.5,111.05,1.7,63.75 +5953,30,2.5,111.05,1.7,63.75 +5954,30,2.5,111.05,1.7,63.75 +5955,30,2.5,111.05,1.7,63.75 +5956,30,2.5,111.05,1.7,63.75 +5957,30,2.5,111.05,1.7,63.75 +5958,30,2.5,111.05,1.7,63.75 +5959,30,2.5,111.05,1.7,63.75 +5960,30,2.5,111.05,1.7,63.75 +5961,30,2.5,111.05,1.7,63.75 +5962,30,2.5,111.05,1.7,63.75 +5963,30,2.5,111.05,1.7,63.75 +5964,30,2.5,111.05,1.7,63.75 +5965,30,2.5,111.05,1.7,63.75 +5966,30,2.5,111.05,1.7,63.75 +5967,30,2.5,111.05,1.7,63.75 +5968,30,2.5,111.05,1.7,63.75 +5969,30,2.5,111.05,1.7,63.75 +5970,30,2.5,111.05,1.7,63.75 +5971,30,2.5,111.05,1.7,63.75 +5972,30,2.5,111.05,1.7,63.75 +5973,30,2.5,111.05,1.7,63.75 +5974,30,2.5,111.05,1.7,63.75 +5975,30,2.5,111.05,1.7,63.75 +5976,30,2.5,111.05,1.7,63.75 +5977,30,2.5,111.05,1.7,63.75 +5978,30,2.5,111.05,1.7,63.75 +5979,30,2.5,111.05,1.7,63.75 +5980,30,2.5,111.05,1.7,63.75 +5981,30,2.5,111.05,1.7,63.75 +5982,30,2.5,111.05,1.7,63.75 +5983,30,2.5,111.05,1.7,63.75 +5984,30,2.5,111.05,1.7,63.75 +5985,30,2.5,111.05,1.7,63.75 +5986,30,2.5,111.05,1.7,63.75 +5987,30,2.5,111.05,1.7,63.75 +5988,30,2.5,111.05,1.7,63.75 +5989,30,2.5,111.05,1.7,63.75 +5990,30,2.5,111.05,1.7,63.75 +5991,30,2.5,111.05,1.7,63.75 +5992,30,2.5,111.05,1.7,63.75 +5993,30,2.5,111.05,1.7,63.75 +5994,30,2.5,111.05,1.7,63.75 +5995,30,2.5,111.05,1.7,63.75 +5996,30,2.5,111.05,1.7,63.75 +5997,30,2.5,111.05,1.7,63.75 +5998,30,2.5,111.05,1.7,63.75 +5999,30,2.5,111.05,1.7,63.75 +6000,30,2.5,111.05,1.7,63.75 diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/test5.csv b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/test5.csv new file mode 100644 index 0000000..dfaf406 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/test5.csv @@ -0,0 +1,1023 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,60,45,10,10,10,10 +10,55,40,7,9,9,9 +20,50,35,4,8,8,8 +30,45,30,1,7,7,7 +40,40,25,-2,6,6,6 +50,35,20,-5,5,5,5 +60,30,15,-8,4,4,4 +70,25,10,-11,3,3,3 +80,20,5,-14,2,2,2 +90,15,0,-17,1,1,1 +100,10,-5,-20,0,0,0 +110,5,0,-23,1,1,1 +120,0,5,-20,2,2,2 +130,-5,10,-17,3,3,3 +140,0,15,-14,4,4,4 +150,5,20,-11,5,5,5 +160,10,25,-8,6,6,6 +170,15,30,-5,7,7,7 +180,20,35,-2,8,8,8 +190,25,40,1,9,9,9 +200,30,45,4,10,10,10 +210,35,40,7,9,9,9 +220,40,35,10,8,8,8 +230,45,30,13,7,7,7 +240,50,25,10,6,6,6 +250,55,20,7,5,5,5 +260,60,15,4,4,4,4 +270,55,10,1,3,3,3 +280,50,5,-2,2,2,2 +290,45,0,-5,1,1,1 +300,40,-5,-8,0,0,0 +310,35,0,-11,1,1,1 +320,30,5,-14,2,2,2 +330,25,10,-17,3,3,3 +340,20,15,-20,4,4,4 +350,15,20,-23,5,5,5 +360,10,25,-20,6,6,6 +370,5,30,-17,7,7,7 +380,0,35,-14,8,8,8 +390,-5,40,-11,9,9,9 +400,0,45,-8,10,10,10 +410,5,40,-5,9,9,9 +420,10,35,-2,8,8,8 +430,15,30,1,7,7,7 +440,20,25,4,6,6,6 +450,25,20,7,5,5,5 +460,30,15,10,4,4,4 +470,35,10,13,3,3,3 +480,40,5,10,2,2,2 +490,45,0,7,1,1,1 +500,50,-5,4,0,0,0 +510,55,0,1,1,1,1 +520,60,5,-2,2,2,2 +530,55,10,-5,3,3,3 +540,50,15,-8,4,4,4 +550,45,20,-11,5,5,5 +560,40,25,-14,6,6,6 +570,35,30,-17,7,7,7 +580,30,35,-20,8,8,8 +590,25,40,-23,9,9,9 +600,20,45,-20,10,10,10 +610,15,40,-17,9,9,9 +620,10,35,-14,8,8,8 +630,5,30,-11,7,7,7 +640,0,25,-8,6,6,6 +650,-5,20,-5,5,5,5 +660,0,15,-2,4,4,4 +670,5,10,1,3,3,3 +680,10,5,4,2,2,2 +690,15,0,7,1,1,1 +700,20,-5,10,0,0,0 +710,25,0,13,1,1,1 +720,30,5,10,2,2,2 +730,35,10,7,3,3,3 +740,40,15,4,4,4,4 +750,45,20,1,5,5,5 +760,50,25,-2,6,6,6 +770,55,30,-5,7,7,7 +780,60,35,-8,8,8,8 +790,55,40,-11,9,9,9 +800,50,45,-14,10,10,10 +810,45,40,-17,9,9,9 +820,40,35,-20,8,8,8 +830,35,30,-23,7,7,7 +840,30,25,-20,6,6,6 +850,25,20,-17,5,5,5 +860,20,15,-14,4,4,4 +870,15,10,-11,3,3,3 +880,10,5,-8,2,2,2 +890,5,0,-5,1,1,1 +900,0,-5,-2,0,0,0 +910,-5,0,1,1,1,1 +920,0,5,4,2,2,2 +930,5,10,7,3,3,3 +940,10,15,10,4,4,4 +950,15,20,13,5,5,5 +960,20,25,10,6,6,6 +970,25,30,7,7,7,7 +980,30,35,4,8,8,8 +990,35,40,1,9,9,9 +1000,40,45,-2,10,10,10 +1010,10,20,30,40,50,60 +1020,10,20,30,40,50,60 +1030,10,20,30,40,50,60 +1040,10,20,30,40,50,60 +1050,10,20,30,40,50,60 +1060,10,20,30,40,50,60 +1070,10,20,30,40,50,60 +1080,10,20,30,40,50,60 +1090,10,20,30,40,50,60 +1100,10,20,30,40,50,60 +1110,10,20,30,40,50,60 +1120,10,20,30,40,50,60 +1130,10,20,30,40,50,60 +1140,10,20,30,40,50,60 +1150,10,20,30,40,50,60 +1160,10,20,30,40,50,60 +1170,10,20,30,40,50,60 +1180,10,20,30,40,50,60 +1190,10,20,30,40,50,60 +1200,10,20,30,40,50,60 +1210,10,20,30,40,50,60 +1220,10,20,30,40,50,60 +1230,10,20,30,40,50,60 +1240,10,20,30,40,50,60 +1250,10,20,30,40,50,60 +1260,10,20,30,40,50,60 +1270,10,20,30,40,50,60 +1280,10,20,30,40,50,60 +1290,10,20,30,40,50,60 +1300,10,20,30,40,50,60 +1310,10,20,30,40,50,60 +1320,10,20,30,40,50,60 +1330,10,20,30,40,50,60 +1340,10,20,30,40,50,60 +1350,10,20,30,40,50,60 +1360,10,20,30,40,50,60 +1370,10,20,30,40,50,60 +1380,10,20,30,40,50,60 +1390,10,20,30,40,50,60 +1400,10,20,30,40,50,60 +1410,10,20,30,40,50,60 +1420,10,20,30,40,50,60 +1430,10,20,30,40,50,60 +1440,10,20,30,40,50,60 +1450,10,20,30,40,50,60 +1460,10,20,30,40,50,60 +1470,10,20,30,40,50,60 +1480,10,20,30,40,50,60 +1490,10,20,30,40,50,60 +1500,10,20,30,40,50,60 +1510,10,20,30,40,50,60 +1520,10,20,30,40,50,60 +1530,10,20,30,40,50,60 +1540,10,20,30,40,50,60 +1550,10,20,30,40,50,60 +1560,10,20,30,40,50,60 +1570,10,20,30,40,50,60 +1580,10,20,30,40,50,60 +1590,10,20,30,40,50,60 +1600,10,20,30,40,50,60 +1610,10,20,30,40,50,60 +1620,10,20,30,40,50,60 +1630,10,20,30,40,50,60 +1640,10,20,30,40,50,60 +1650,10,20,30,40,50,60 +1660,10,20,30,40,50,60 +1670,10,20,30,40,50,60 +1680,10,20,30,40,50,60 +1690,10,20,30,40,50,60 +1700,10,20,30,40,50,60 +1710,10,20,30,40,50,60 +1720,10,20,30,40,50,60 +1730,10,20,30,40,50,60 +1740,10,20,30,40,50,60 +1750,10,20,30,40,50,60 +1760,10,20,30,40,50,60 +1770,10,20,30,40,50,60 +1780,10,20,30,40,50,60 +1790,10,20,30,40,50,60 +1800,10,20,30,40,50,60 +1810,10,20,30,40,50,60 +1820,10,20,30,40,50,60 +1830,10,20,30,40,50,60 +1840,10,20,30,40,50,60 +1850,10,20,30,40,50,60 +1860,10,20,30,40,50,60 +1870,10,20,30,40,50,60 +1880,10,20,30,40,50,60 +1890,10,20,30,40,50,60 +1900,10,20,30,40,50,60 +1910,10,20,30,40,50,60 +1920,10,20,30,40,50,60 +1930,10,20,30,40,50,60 +1940,10,20,30,40,50,60 +1950,10,20,30,40,50,60 +1960,10,20,30,40,50,60 +1970,10,20,30,40,50,60 +1980,10,20,30,40,50,60 +1990,10,20,30,40,50,60 +2000,10,20,30,40,50,60 +2010,10,20,30,40,50,60 +2020,10,20,30,40,50,60 +2030,10,20,30,40,50,60 +2040,10,20,30,40,50,60 +2050,10,20,30,40,50,60 +2060,10,20,30,40,50,60 +2070,10,20,30,40,50,60 +2080,10,20,30,40,50,60 +2090,10,20,30,40,50,60 +2100,10,20,30,40,50,60 +2110,10,20,30,40,50,60 +2120,10,20,30,40,50,60 +2130,10,20,30,40,50,60 +2140,10,20,30,40,50,60 +2150,10,20,30,40,50,60 +2160,10,20,30,40,50,60 +2170,10,20,30,40,50,60 +2180,10,20,30,40,50,60 +2190,10,20,30,40,50,60 +2200,10,20,30,40,50,60 +2210,10,20,30,40,50,60 +2220,10,20,30,40,50,60 +2230,10,20,30,40,50,60 +2240,10,20,30,40,50,60 +2250,10,20,30,40,50,60 +2260,10,20,30,40,50,60 +2270,10,20,30,40,50,60 +2280,10,20,30,40,50,60 +2290,10,20,30,40,50,60 +2300,10,20,30,40,50,60 +2310,10,20,30,40,50,60 +2320,10,20,30,40,50,60 +2330,10,20,30,40,50,60 +2340,10,20,30,40,50,60 +2350,10,20,30,40,50,60 +2360,10,20,30,40,50,60 +2370,10,20,30,40,50,60 +2380,10,20,30,40,50,60 +2390,10,20,30,40,50,60 +2400,10,20,30,40,50,60 +2410,10,20,30,40,50,60 +2420,10,20,30,40,50,60 +2430,10,20,30,40,50,60 +2440,10,20,30,40,50,60 +2450,10,20,30,40,50,60 +2460,10,20,30,40,50,60 +2470,10,20,30,40,50,60 +2480,10,20,30,40,50,60 +2490,10,20,30,40,50,60 +2500,10,20,30,40,50,60 +2510,10,20,30,40,50,60 +2520,10,20,30,40,50,60 +2530,10,20,30,40,50,60 +2540,10,20,30,40,50,60 +2550,10,20,30,40,50,60 +2560,10,20,30,40,50,60 +2570,10,20,30,40,50,60 +2580,10,20,30,40,50,60 +2590,10,20,30,40,50,60 +2600,10,20,30,40,50,60 +2610,10,20,30,40,50,60 +2620,10,20,30,40,50,60 +2630,10,20,30,40,50,60 +2640,10,20,30,40,50,60 +2650,10,20,30,40,50,60 +2660,10,20,30,40,50,60 +2670,10,20,30,40,50,60 +2680,10,20,30,40,50,60 +2690,10,20,30,40,50,60 +2700,10,20,30,40,50,60 +2710,10,20,30,40,50,60 +2720,10,20,30,40,50,60 +2730,10,20,30,40,50,60 +2740,10,20,30,40,50,60 +2750,10,20,30,40,50,60 +2760,10,20,30,40,50,60 +2770,10,20,30,40,50,60 +2780,10,20,30,40,50,60 +2790,10,20,30,40,50,60 +2800,10,20,30,40,50,60 +2810,10,20,30,40,50,60 +2820,10,20,30,40,50,60 +2830,10,20,30,40,50,60 +2840,10,20,30,40,50,60 +2850,10,20,30,40,50,60 +2860,10,20,30,40,50,60 +2870,10,20,30,40,50,60 +2880,10,20,30,40,50,60 +2890,10,20,30,40,50,60 +2900,10,20,30,40,50,60 +2910,10,20,30,40,50,60 +2920,10,20,30,40,50,60 +2930,10,20,30,40,50,60 +2940,10,20,30,40,50,60 +2950,10,20,30,40,50,60 +2960,10,20,30,40,50,60 +2970,10,20,30,40,50,60 +2980,10,20,30,40,50,60 +2990,10,20,30,40,50,60 +3000,10,20,30,40,50,60 +3010,10,20,30,40,50,60 +3020,10,20,30,40,50,60 +3030,10,20,30,40,50,60 +3040,10,20,30,40,50,60 +3050,10,20,30,40,50,60 +3060,10,20,30,40,50,60 +3070,10,20,30,40,50,60 +3080,10,20,30,40,50,60 +3090,10,20,30,40,50,60 +3100,10,20,30,40,50,60 +3110,10,20,30,40,50,60 +3120,10,20,30,40,50,60 +3130,10,20,30,40,50,60 +3140,10,20,30,40,50,60 +3150,10,20,30,40,50,60 +3160,10,20,30,40,50,60 +3170,10,20,30,40,50,60 +3180,10,20,30,40,50,60 +3190,10,20,30,40,50,60 +3200,10,20,30,40,50,60 +3210,10,20,30,40,50,60 +3220,10,20,30,40,50,60 +3230,10,20,30,40,50,60 +3240,10,20,30,40,50,60 +3250,10,20,30,40,50,60 +3260,10,20,30,40,50,60 +3270,10,20,30,40,50,60 +3280,10,20,30,40,50,60 +3290,10,20,30,40,50,60 +3300,10,20,30,40,50,60 +3310,10,20,30,40,50,60 +3320,10,20,30,40,50,60 +3330,10,20,30,40,50,60 +3340,10,20,30,40,50,60 +3350,10,20,30,40,50,60 +3360,10,20,30,40,50,60 +3370,10,20,30,40,50,60 +3380,10,20,30,40,50,60 +3390,10,20,30,40,50,60 +3400,10,20,30,40,50,60 +3410,10,20,30,40,50,60 +3420,10,20,30,40,50,60 +3430,10,20,30,40,50,60 +3440,10,20,30,40,50,60 +3450,10,20,30,40,50,60 +3460,10,20,30,40,50,60 +3470,10,20,30,40,50,60 +3480,10,20,30,40,50,60 +3490,10,20,30,40,50,60 +3500,10,20,30,40,50,60 +3510,10,20,30,40,50,60 +3520,10,20,30,40,50,60 +3530,10,20,30,40,50,60 +3540,10,20,30,40,50,60 +3550,10,20,30,40,50,60 +3560,10,20,30,40,50,60 +3570,10,20,30,40,50,60 +3580,10,20,30,40,50,60 +3590,10,20,30,40,50,60 +3600,10,20,30,40,50,60 +3610,10,20,30,40,50,60 +3620,10,20,30,40,50,60 +3630,10,20,30,40,50,60 +3640,10,20,30,40,50,60 +3650,10,20,30,40,50,60 +3660,10,20,30,40,50,60 +3670,10,20,30,40,50,60 +3680,10,20,30,40,50,60 +3690,10,20,30,40,50,60 +3700,10,20,30,40,50,60 +3710,10,20,30,40,50,60 +3720,10,20,30,40,50,60 +3730,10,20,30,40,50,60 +3740,10,20,30,40,50,60 +3750,10,20,30,40,50,60 +3760,10,20,30,40,50,60 +3770,10,20,30,40,50,60 +3780,10,20,30,40,50,60 +3790,10,20,30,40,50,60 +3800,10,20,30,40,50,60 +3810,10,20,30,40,50,60 +3820,10,20,30,40,50,60 +3830,10,20,30,40,50,60 +3840,10,20,30,40,50,60 +3850,10,20,30,40,50,60 +3860,10,20,30,40,50,60 +3870,10,20,30,40,50,60 +3880,10,20,30,40,50,60 +3890,10,20,30,40,50,60 +3900,10,20,30,40,50,60 +3910,10,20,30,40,50,60 +3920,10,20,30,40,50,60 +3930,10,20,30,40,50,60 +3940,10,20,30,40,50,60 +3950,10,20,30,40,50,60 +3960,10,20,30,40,50,60 +3970,10,20,30,40,50,60 +3980,10,20,30,40,50,60 +3990,10,20,30,40,50,60 +4000,10,20,30,40,50,60 +4010,10,20,30,40,50,60 +4020,10,20,30,40,50,60 +4030,10,20,30,40,50,60 +4040,10,20,30,40,50,60 +4050,10,20,30,40,50,60 +4060,10,20,30,40,50,60 +4070,10,20,30,40,50,60 +4080,10,20,30,40,50,60 +4090,10,20,30,40,50,60 +4100,10,20,30,40,50,60 +4110,10,20,30,40,50,60 +4120,10,20,30,40,50,60 +4130,10,20,30,40,50,60 +4140,10,20,30,40,50,60 +4150,10,20,30,40,50,60 +4160,10,20,30,40,50,60 +4170,10,20,30,40,50,60 +4180,10,20,30,40,50,60 +4190,10,20,30,40,50,60 +4200,10,20,30,40,50,60 +4210,10,20,30,40,50,60 +4220,10,20,30,40,50,60 +4230,10,20,30,40,50,60 +4240,10,20,30,40,50,60 +4250,10,20,30,40,50,60 +4260,10,20,30,40,50,60 +4270,10,20,30,40,50,60 +4280,10,20,30,40,50,60 +4290,10,20,30,40,50,60 +4300,10,20,30,40,50,60 +4310,10,20,30,40,50,60 +4320,10,20,30,40,50,60 +4330,10,20,30,40,50,60 +4340,10,20,30,40,50,60 +4350,10,20,30,40,50,60 +4360,10,20,30,40,50,60 +4370,10,20,30,40,50,60 +4380,10,20,30,40,50,60 +4390,10,20,30,40,50,60 +4400,10,20,30,40,50,60 +4410,10,20,30,40,50,60 +4420,10,20,30,40,50,60 +4430,10,20,30,40,50,60 +4440,10,20,30,40,50,60 +4450,10,20,30,40,50,60 +4460,10,20,30,40,50,60 +4470,10,20,30,40,50,60 +4480,10,20,30,40,50,60 +4490,10,20,30,40,50,60 +4500,10,20,30,40,50,60 +4510,10,20,30,40,50,60 +4520,10,20,30,40,50,60 +4530,10,20,30,40,50,60 +4540,10,20,30,40,50,60 +4550,10,20,30,40,50,60 +4560,10,20,30,40,50,60 +4570,10,20,30,40,50,60 +4580,10,20,30,40,50,60 +4590,10,20,30,40,50,60 +4600,10,20,30,40,50,60 +4610,10,20,30,40,50,60 +4620,10,20,30,40,50,60 +4630,10,20,30,40,50,60 +4640,10,20,30,40,50,60 +4650,10,20,30,40,50,60 +4660,10,20,30,40,50,60 +4670,10,20,30,40,50,60 +4680,10,20,30,40,50,60 +4690,10,20,30,40,50,60 +4700,10,20,30,40,50,60 +4710,10,20,30,40,50,60 +4720,10,20,30,40,50,60 +4730,10,20,30,40,50,60 +4740,10,20,30,40,50,60 +4750,10,20,30,40,50,60 +4760,10,20,30,40,50,60 +4770,10,20,30,40,50,60 +4780,10,20,30,40,50,60 +4790,10,20,30,40,50,60 +4800,10,20,30,40,50,60 +4810,10,20,30,40,50,60 +4820,10,20,30,40,50,60 +4830,10,20,30,40,50,60 +4840,10,20,30,40,50,60 +4850,10,20,30,40,50,60 +4860,10,20,30,40,50,60 +4870,10,20,30,40,50,60 +4880,10,20,30,40,50,60 +4890,10,20,30,40,50,60 +4900,10,20,30,40,50,60 +4910,10,20,30,40,50,60 +4920,10,20,30,40,50,60 +4930,10,20,30,40,50,60 +4940,10,20,30,40,50,60 +4950,10,20,30,40,50,60 +4960,10,20,30,40,50,60 +4970,10,20,30,40,50,60 +4980,10,20,30,40,50,60 +4990,10,20,30,40,50,60 +5000,10,20,30,40,50,60 +5010,10,20,30,40,50,60 +5020,10,20,30,40,50,60 +5030,10,20,30,40,50,60 +5040,10,20,30,40,50,60 +5050,10,20,30,40,50,60 +5060,10,20,30,40,50,60 +5070,10,20,30,40,50,60 +5080,10,20,30,40,50,60 +5090,10,20,30,40,50,60 +5100,10,20,30,40,50,60 +5110,10,20,30,40,50,60 +5120,10,20,30,40,50,60 +5130,10,20,30,40,50,60 +5140,10,20,30,40,50,60 +5150,10,20,30,40,50,60 +5160,10,20,30,40,50,60 +5170,10,20,30,40,50,60 +5180,10,20,30,40,50,60 +5190,10,20,30,40,50,60 +5200,10,20,30,40,50,60 +5210,10,20,30,40,50,60 +5220,10,20,30,40,50,60 +5230,10,20,30,40,50,60 +5240,10,20,30,40,50,60 +5250,10,20,30,40,50,60 +5260,10,20,30,40,50,60 +5270,10,20,30,40,50,60 +5280,10,20,30,40,50,60 +5290,10,20,30,40,50,60 +5300,10,20,30,40,50,60 +5310,10,20,30,40,50,60 +5320,10,20,30,40,50,60 +5330,10,20,30,40,50,60 +5340,10,20,30,40,50,60 +5350,10,20,30,40,50,60 +5360,10,20,30,40,50,60 +5370,10,20,30,40,50,60 +5380,10,20,30,40,50,60 +5390,10,20,30,40,50,60 +5400,10,20,30,40,50,60 +5410,10,20,30,40,50,60 +5420,10,20,30,40,50,60 +5430,10,20,30,40,50,60 +5440,10,20,30,40,50,60 +5450,10,20,30,40,50,60 +5460,10,20,30,40,50,60 +5470,10,20,30,40,50,60 +5480,10,20,30,40,50,60 +5490,10,20,30,40,50,60 +5500,10,20,30,40,50,60 +5510,10,20,30,40,50,60 +5520,10,20,30,40,50,60 +5530,10,20,30,40,50,60 +5540,10,20,30,40,50,60 +5550,10,20,30,40,50,60 +5560,10,20,30,40,50,60 +5570,10,20,30,40,50,60 +5580,10,20,30,40,50,60 +5590,10,20,30,40,50,60 +5600,10,20,30,40,50,60 +5610,10,20,30,40,50,60 +5620,10,20,30,40,50,60 +5630,10,20,30,40,50,60 +5640,10,20,30,40,50,60 +5650,10,20,30,40,50,60 +5660,10,20,30,40,50,60 +5670,10,20,30,40,50,60 +5680,10,20,30,40,50,60 +5690,10,20,30,40,50,60 +5700,10,20,30,40,50,60 +5710,10,20,30,40,50,60 +5720,10,20,30,40,50,60 +5730,10,20,30,40,50,60 +5740,10,20,30,40,50,60 +5750,10,20,30,40,50,60 +5760,10,20,30,40,50,60 +5770,10,20,30,40,50,60 +5780,10,20,30,40,50,60 +5790,10,20,30,40,50,60 +5800,10,20,30,40,50,60 +5810,10,20,30,40,50,60 +5820,10,20,30,40,50,60 +5830,10,20,30,40,50,60 +5840,10,20,30,40,50,60 +5850,10,20,30,40,50,60 +5860,10,20,30,40,50,60 +5870,10,20,30,40,50,60 +5880,10,20,30,40,50,60 +5890,10,20,30,40,50,60 +5900,10,20,30,40,50,60 +5910,10,20,30,40,50,60 +5920,10,20,30,40,50,60 +5930,10,20,30,40,50,60 +5940,10,20,30,40,50,60 +5950,10,20,30,40,50,60 +5960,10,20,30,40,50,60 +5970,10,20,30,40,50,60 +5980,10,20,30,40,50,60 +5990,10,20,30,40,50,60 +6000,10,20,30,40,50,60 +6010,10,20,30,40,50,60 +6020,10,20,30,40,50,60 +6030,10,20,30,40,50,60 +6040,10,20,30,40,50,60 +6050,10,20,30,40,50,60 +6060,10,20,30,40,50,60 +6070,10,20,30,40,50,60 +6080,10,20,30,40,50,60 +6090,10,20,30,40,50,60 +6100,10,20,30,40,50,60 +6110,10,20,30,40,50,60 +6120,10,20,30,40,50,60 +6130,10,20,30,40,50,60 +6140,10,20,30,40,50,60 +6150,10,20,30,40,50,60 +6160,10,20,30,40,50,60 +6170,10,20,30,40,50,60 +6180,10,20,30,40,50,60 +6190,10,20,30,40,50,60 +6200,10,20,30,40,50,60 +6210,10,20,30,40,50,60 +6220,10,20,30,40,50,60 +6230,10,20,30,40,50,60 +6240,10,20,30,40,50,60 +6250,10,20,30,40,50,60 +6260,10,20,30,40,50,60 +6270,10,20,30,40,50,60 +6280,10,20,30,40,50,60 +6290,10,20,30,40,50,60 +6300,10,20,30,40,50,60 +6310,10,20,30,40,50,60 +6320,10,20,30,40,50,60 +6330,10,20,30,40,50,60 +6340,10,20,30,40,50,60 +6350,10,20,30,40,50,60 +6360,10,20,30,40,50,60 +6370,10,20,30,40,50,60 +6380,10,20,30,40,50,60 +6390,10,20,30,40,50,60 +6400,10,20,30,40,50,60 +6410,10,20,30,40,50,60 +6420,10,20,30,40,50,60 +6430,10,20,30,40,50,60 +6440,10,20,30,40,50,60 +6450,10,20,30,40,50,60 +6460,10,20,30,40,50,60 +6470,10,20,30,40,50,60 +6480,10,20,30,40,50,60 +6490,10,20,30,40,50,60 +6500,10,20,30,40,50,60 +6510,10,20,30,40,50,60 +6520,10,20,30,40,50,60 +6530,10,20,30,40,50,60 +6540,10,20,30,40,50,60 +6550,10,20,30,40,50,60 +6560,10,20,30,40,50,60 +6570,10,20,30,40,50,60 +6580,10,20,30,40,50,60 +6590,10,20,30,40,50,60 +6600,10,20,30,40,50,60 +6610,10,20,30,40,50,60 +6620,10,20,30,40,50,60 +6630,10,20,30,40,50,60 +6640,10,20,30,40,50,60 +6650,10,20,30,40,50,60 +6660,10,20,30,40,50,60 +6670,10,20,30,40,50,60 +6680,10,20,30,40,50,60 +6690,10,20,30,40,50,60 +6700,10,20,30,40,50,60 +6710,10,20,30,40,50,60 +6720,10,20,30,40,50,60 +6730,10,20,30,40,50,60 +6740,10,20,30,40,50,60 +6750,10,20,30,40,50,60 +6760,10,20,30,40,50,60 +6770,10,20,30,40,50,60 +6780,10,20,30,40,50,60 +6790,10,20,30,40,50,60 +6800,10,20,30,40,50,60 +6810,10,20,30,40,50,60 +6820,10,20,30,40,50,60 +6830,10,20,30,40,50,60 +6840,10,20,30,40,50,60 +6850,10,20,30,40,50,60 +6860,10,20,30,40,50,60 +6870,10,20,30,40,50,60 +6880,10,20,30,40,50,60 +6890,10,20,30,40,50,60 +6900,10,20,30,40,50,60 +6910,10,20,30,40,50,60 +6920,10,20,30,40,50,60 +6930,10,20,30,40,50,60 +6940,10,20,30,40,50,60 +6950,10,20,30,40,50,60 +6960,10,20,30,40,50,60 +6970,10,20,30,40,50,60 +6980,10,20,30,40,50,60 +6990,10,20,30,40,50,60 +7000,10,20,30,40,50,60 +7010,10,20,30,40,50,60 +7020,10,20,30,40,50,60 +7030,10,20,30,40,50,60 +7040,10,20,30,40,50,60 +7050,10,20,30,40,50,60 +7060,10,20,30,40,50,60 +7070,10,20,30,40,50,60 +7080,10,20,30,40,50,60 +7090,10,20,30,40,50,60 +7100,10,20,30,40,50,60 +7110,10,20,30,40,50,60 +7120,10,20,30,40,50,60 +7130,10,20,30,40,50,60 +7140,10,20,30,40,50,60 +7150,10,20,30,40,50,60 +7160,10,20,30,40,50,60 +7170,10,20,30,40,50,60 +7180,10,20,30,40,50,60 +7190,10,20,30,40,50,60 +7200,10,20,30,40,50,60 +7210,10,20,30,40,50,60 +7220,10,20,30,40,50,60 +7230,10,20,30,40,50,60 +7240,10,20,30,40,50,60 +7250,10,20,30,40,50,60 +7260,10,20,30,40,50,60 +7270,10,20,30,40,50,60 +7280,10,20,30,40,50,60 +7290,10,20,30,40,50,60 +7300,10,20,30,40,50,60 +7310,10,20,30,40,50,60 +7320,10,20,30,40,50,60 +7330,10,20,30,40,50,60 +7340,10,20,30,40,50,60 +7350,10,20,30,40,50,60 +7360,10,20,30,40,50,60 +7370,10,20,30,40,50,60 +7380,10,20,30,40,50,60 +7390,10,20,30,40,50,60 +7400,10,20,30,40,50,60 +7410,10,20,30,40,50,60 +7420,10,20,30,40,50,60 +7430,10,20,30,40,50,60 +7440,10,20,30,40,50,60 +7450,10,20,30,40,50,60 +7460,10,20,30,40,50,60 +7470,10,20,30,40,50,60 +7480,10,20,30,40,50,60 +7490,10,20,30,40,50,60 +7500,10,20,30,40,50,60 +7510,10,20,30,40,50,60 +7520,10,20,30,40,50,60 +7530,10,20,30,40,50,60 +7540,10,20,30,40,50,60 +7550,10,20,30,40,50,60 +7560,10,20,30,40,50,60 +7570,10,20,30,40,50,60 +7580,10,20,30,40,50,60 +7590,10,20,30,40,50,60 +7600,10,20,30,40,50,60 +7610,10,20,30,40,50,60 +7620,10,20,30,40,50,60 +7630,10,20,30,40,50,60 +7640,10,20,30,40,50,60 +7650,10,20,30,40,50,60 +7660,10,20,30,40,50,60 +7670,10,20,30,40,50,60 +7680,10,20,30,40,50,60 +7690,10,20,30,40,50,60 +7700,10,20,30,40,50,60 +7710,10,20,30,40,50,60 +7720,10,20,30,40,50,60 +7730,10,20,30,40,50,60 +7740,10,20,30,40,50,60 +7750,10,20,30,40,50,60 +7760,10,20,30,40,50,60 +7770,10,20,30,40,50,60 +7780,10,20,30,40,50,60 +7790,10,20,30,40,50,60 +7800,10,20,30,40,50,60 +7810,10,20,30,40,50,60 +7820,10,20,30,40,50,60 +7830,10,20,30,40,50,60 +7840,10,20,30,40,50,60 +7850,10,20,30,40,50,60 +7860,10,20,30,40,50,60 +7870,10,20,30,40,50,60 +7880,10,20,30,40,50,60 +7890,10,20,30,40,50,60 +7900,10,20,30,40,50,60 +7910,10,20,30,40,50,60 +7920,10,20,30,40,50,60 +7930,10,20,30,40,50,60 +7940,10,20,30,40,50,60 +7950,10,20,30,40,50,60 +7960,10,20,30,40,50,60 +7970,10,20,30,40,50,60 +7980,10,20,30,40,50,60 +7990,10,20,30,40,50,60 +8000,10,20,30,40,50,60 +8010,10,20,30,40,50,60 +8020,10,20,30,40,50,60 +8030,10,20,30,40,50,60 +8040,10,20,30,40,50,60 +8050,10,20,30,40,50,60 +8060,10,20,30,40,50,60 +8070,10,20,30,40,50,60 +8080,10,20,30,40,50,60 +8090,10,20,30,40,50,60 +8100,10,20,30,40,50,60 +8110,10,20,30,40,50,60 +8120,10,20,30,40,50,60 +8130,10,20,30,40,50,60 +8140,10,20,30,40,50,60 +8150,10,20,30,40,50,60 +8160,10,20,30,40,50,60 +8170,10,20,30,40,50,60 +8180,10,20,30,40,50,60 +8190,10,20,30,40,50,60 +8200,10,20,30,40,50,60 +8210,10,20,30,40,50,60 +8220,10,20,30,40,50,60 +8230,10,20,30,40,50,60 +8240,10,20,30,40,50,60 +8250,10,20,30,40,50,60 +8260,10,20,30,40,50,60 +8270,10,20,30,40,50,60 +8280,10,20,30,40,50,60 +8290,10,20,30,40,50,60 +8300,10,20,30,40,50,60 +8310,10,20,30,40,50,60 +8320,10,20,30,40,50,60 +8330,10,20,30,40,50,60 +8340,10,20,30,40,50,60 +8350,10,20,30,40,50,60 +8360,10,20,30,40,50,60 +8370,10,20,30,40,50,60 +8380,10,20,30,40,50,60 +8390,10,20,30,40,50,60 +8400,10,20,30,40,50,60 +8410,10,20,30,40,50,60 +8420,10,20,30,40,50,60 +8430,10,20,30,40,50,60 +8440,10,20,30,40,50,60 +8450,10,20,30,40,50,60 +8460,10,20,30,40,50,60 +8470,10,20,30,40,50,60 +8480,10,20,30,40,50,60 +8490,10,20,30,40,50,60 +8500,10,20,30,40,50,60 +8510,10,20,30,40,50,60 +8520,10,20,30,40,50,60 +8530,10,20,30,40,50,60 +8540,10,20,30,40,50,60 +8550,10,20,30,40,50,60 +8560,10,20,30,40,50,60 +8570,10,20,30,40,50,60 +8580,10,20,30,40,50,60 +8590,10,20,30,40,50,60 +8600,10,20,30,40,50,60 +8610,10,20,30,40,50,60 +8620,10,20,30,40,50,60 +8630,10,20,30,40,50,60 +8640,10,20,30,40,50,60 +8650,10,20,30,40,50,60 +8660,10,20,30,40,50,60 +8670,10,20,30,40,50,60 +8680,10,20,30,40,50,60 +8690,10,20,30,40,50,60 +8700,10,20,30,40,50,60 +8710,10,20,30,40,50,60 +8720,10,20,30,40,50,60 +8730,10,20,30,40,50,60 +8740,10,20,30,40,50,60 +8750,10,20,30,40,50,60 +8760,10,20,30,40,50,60 +8770,10,20,30,40,50,60 +8780,10,20,30,40,50,60 +8790,10,20,30,40,50,60 +8800,10,20,30,40,50,60 +8810,10,20,30,40,50,60 +8820,10,20,30,40,50,60 +8830,10,20,30,40,50,60 +8840,10,20,30,40,50,60 +8850,10,20,30,40,50,60 +8860,10,20,30,40,50,60 +8870,10,20,30,40,50,60 +8880,10,20,30,40,50,60 +8890,10,20,30,40,50,60 +8900,10,20,30,40,50,60 +8910,10,20,30,40,50,60 +8920,10,20,30,40,50,60 +8930,10,20,30,40,50,60 +8940,10,20,30,40,50,60 +8950,10,20,30,40,50,60 +8960,10,20,30,40,50,60 +8970,10,20,30,40,50,60 +8980,10,20,30,40,50,60 +8990,10,20,30,40,50,60 +9000,10,20,30,40,50,60 +9010,10,20,30,40,50,60 +9020,10,20,30,40,50,60 +9030,10,20,30,40,50,60 +9040,10,20,30,40,50,60 +9050,10,20,30,40,50,60 +9060,10,20,30,40,50,60 +9070,10,20,30,40,50,60 +9080,10,20,30,40,50,60 +9090,10,20,30,40,50,60 +9100,10,20,30,40,50,60 +9110,10,20,30,40,50,60 +9120,10,20,30,40,50,60 +9130,10,20,30,40,50,60 +9140,10,20,30,40,50,60 +9150,10,20,30,40,50,60 +9160,10,20,30,40,50,60 +9170,10,20,30,40,50,60 +9180,10,20,30,40,50,60 +9190,10,20,30,40,50,60 +9200,10,20,30,40,50,60 +9210,10,20,30,40,50,60 +9220,10,20,30,40,50,60 +9230,10,20,30,40,50,60 +9240,10,20,30,40,50,60 +9250,10,20,30,40,50,60 +9260,10,20,30,40,50,60 +9270,10,20,30,40,50,60 +9280,10,20,30,40,50,60 +9290,10,20,30,40,50,60 +9300,10,20,30,40,50,60 +9310,10,20,30,40,50,60 +9320,10,20,30,40,50,60 +9330,10,20,30,40,50,60 +9340,10,20,30,40,50,60 +9350,10,20,30,40,50,60 +9360,10,20,30,40,50,60 +9370,10,20,30,40,50,60 +9380,10,20,30,40,50,60 +9390,10,20,30,40,50,60 +9400,10,20,30,40,50,60 +9410,10,20,30,40,50,60 +9420,10,20,30,40,50,60 +9430,10,20,30,40,50,60 +9440,10,20,30,40,50,60 +9450,10,20,30,40,50,60 +9460,10,20,30,40,50,60 +9470,10,20,30,40,50,60 +9480,10,20,30,40,50,60 +9490,10,20,30,40,50,60 +9500,10,20,30,40,50,60 +9510,10,20,30,40,50,60 +9520,10,20,30,40,50,60 +9530,10,20,30,40,50,60 +9540,10,20,30,40,50,60 +9550,10,20,30,40,50,60 +9560,10,20,30,40,50,60 +9570,10,20,30,40,50,60 +9580,10,20,30,40,50,60 +9590,10,20,30,40,50,60 +9600,10,20,30,40,50,60 +9610,10,20,30,40,50,60 +9620,10,20,30,40,50,60 +9630,10,20,30,40,50,60 +9640,10,20,30,40,50,60 +9650,10,20,30,40,50,60 +9660,10,20,30,40,50,60 +9670,10,20,30,40,50,60 +9680,10,20,30,40,50,60 +9690,10,20,30,40,50,60 +9700,10,20,30,40,50,60 +9710,10,20,30,40,50,60 +9720,10,20,30,40,50,60 +9730,10,20,30,40,50,60 +9740,10,20,30,40,50,60 +9750,10,20,30,40,50,60 +9760,10,20,30,40,50,60 +9770,10,20,30,40,50,60 +9780,10,20,30,40,50,60 +9790,10,20,30,40,50,60 +9800,10,20,30,40,50,60 +9810,10,20,30,40,50,60 +9820,10,20,30,40,50,60 +9830,10,20,30,40,50,60 +9840,10,20,30,40,50,60 +9850,10,20,30,40,50,60 +9860,10,20,30,40,50,60 +9870,10,20,30,40,50,60 +9880,10,20,30,40,50,60 +9890,10,20,30,40,50,60 +9900,10,20,30,40,50,60 +9910,10,20,30,40,50,60 +9920,10,20,30,40,50,60 +9930,10,20,30,40,50,60 +9940,10,20,30,40,50,60 +9950,10,20,30,40,50,60 +9960,10,20,30,40,50,60 +9970,10,20,30,40,50,60 +9980,10,20,30,40,50,60 +9981,11,21,31,41,51,61 +9982,12,22,32,42,52,62 +9983,13,23,33,43,53,63 +9984,14,24,34,44,54,64 +9985,15,25,35,45,55,65 +9986,16,26,36,46,56,66 +9987,17,27,37,47,57,67 +9988,18,28,38,48,58,68 +9989,19,29,39,49,59,69 +9990,20,30,40,50,60,70 +9991,21,31,41,51,61,71 +9992,22,32,42,52,62,72 +9993,23,33,43,53,63,73 +9994,24,34,44,54,64,74 +9995,25,35,45,55,65,75 +9996,26,36,46,56,66,76 +9997,27,37,47,57,67,77 +9998,28,38,48,58,68,78 +9999,29,39,49,59,69,79 +10000,30,40,50,60,70,80 +10001,31,41,51,61,71,81 +10002,32,42,52,62,72,82 diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/ECPCSubscriber.cfg b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/ECPCSubscriber.cfg new file mode 100644 index 0000000..1566c70 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/ECPCSubscriber.cfg @@ -0,0 +1,396 @@ ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +Start = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "WAITSTANDBY" + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITSTANDBY = { + Class = ReferenceContainer + +Stay = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "WAITSTANDBY" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } +} ++JAGyrotronRTApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + +GAMSDNSubCommand = { + Class = IOGAM + InputSignals = { + Command = { + DataSource = SDNSubCommands + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 64 + Ranges = {{0 0}} + Frequency = 1 + } + ESDNTime = { + DataSource = SDNSubCommands + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTimeDisplay = { + Alias = ESDNTime + DataSource = SDNSubCommands + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + OutputSignals = { + Command = { + DataSource = Display + Type = uint16 + } + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + ESDNTimeDisplay = { + DataSource = Display + Type = uint32 + } + } + } + +GAMSDNSubWaveform = { + Class = IOGAM + InputSignals = { + GYA_FHPS_SP = { + DataSource = SDNSubWaveform + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_MCPS_SP = { + DataSource = SDNSubWaveform + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_CCPS_SP = { + DataSource = SDNSubWaveform + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + MHVPS_SP = { + DataSource = SDNSubWaveform + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_BPS_SP = { + DataSource = SDNSubWaveform + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_APS_SP = { + DataSource = SDNSubWaveform + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + WaveformPacketIDFor1kHz = { + DataSource = SDNSubWaveform + Alias = WaveformPacketID + Type = uint16 + } + } + OutputSignals = { + GYA_FHPS_SP = { + DataSource = DDB1 + Type = float32 + } + GYA_MCPS_SP = { + DataSource = DDB1 + Type = float32 + } + GYA_CCPS_SP = { + DataSource = DDB1 + Type = float32 + } + MHVPS_SP = { + DataSource = DDB1 + Type = float32 + } + GYA_BPS_SP = { + DataSource = DDB1 + Type = float32 + } + GYA_APS_SP = { + DataSource = DDB1 + Type = float32 + } + WaveformPacketIDFor1kHz = { + DataSource = DDB1 + Alias = WaveformPacketID + Type = uint16 + } + } + } + +GAMReply = { + Class = IOGAM + InputSignals = { + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + WaveformPacketID = { + DataSource = DDB1 + Type = uint16 + } + } + OutputSignals = { + ESDNTime = { + DataSource = SDNReply + Type = uint32 + Trigger = 1 + } + ReplyWaveformAck = { + DataSource = SDNReply + Type = uint16 + } + } + } + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + } + +Timings = { + Class = TimingDataSource + } + +Display = { + Class = LoggerDataSource + } + +SDNSubCommands = { + Class = SDN::SDNSubscriber + Topic = ECPC2SCUJA + Interface = lo + CPUs = 0x2 + Locked = 1 + Timeout = 1000 // TODO: change to 1 ms + Signals = { + Header = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + Command = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 64 + } + } + } + +SDNReply = { + Class = SDN::SDNPublisher + Topic = SCUJA2ECPC + Interface = lo + CPUs = 0x8 + Locked = 1 + Signals = { + Header = { + Type = uint8 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ReplyStatus = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ReplyWaveformAck = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + } + +SDNSubWaveform = { + Class = SDN::SDNSubscriber + Topic = ECPC2SCUJAWF + Interface = lo + Locked = 1 + Timeout = 1000 // TODO: change to 1 ms + Signals = { + Header = { + Type = uint8 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + WaveformPacketID = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_MCPS_SP = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_CCPS_SP = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + MHVPS_SP = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_BPS_SP = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_APS_SP = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + } + } + +States = { + Class = ReferenceContainer + +WaitStandby = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {GAMSDNSubCommand GAMSDNSubWaveform GAMReply} + CPUs = 0x1 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/EPICS_Test.cfg b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/EPICS_Test.cfg new file mode 100644 index 0000000..ae4a27b --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/EPICS_Test.cfg @@ -0,0 +1,249 @@ +// +LoggerService = { +// Class = LoggerService +// CPUs = 0x1 +// StackSize = 32768 +// NumberOfLogPages = 128 +// +ConLogger = { +// Class = ConsoleLogger +// Format = "EtOoFmC" +// PrintKeys = 1 +// } +// } ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +START = { + Class = StateMachineEvent + NextState = "RUNNING" + NextStateError = "ERROR" + +PrepareNextStateOnOurRTApp = { + Class = Message + Destination = MyDemoApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = State1 + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = MyDemoApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +RUNNING = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = RUNNING + NextStateError = ERROR + } + } + +ERROR = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = ERROR + NextStateError = ERROR + } + } +} ++MyDemoApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + +GAMTimer = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = Timer + Type = uint32 + } + Counter = { + DataSource = Timer + Type = uint32 + Frequency = 1 //in Hz. Cycle for one state execution. + } + RTThreadPerf = { + DataSource = Timings + Alias = "State1.Thread1_CycleTime" + Type = uint32 + } + } + OutputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerf = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PV2DDB1 = { + Class = IOGAM + InputSignals = { + AiValue = { + DataSource = EPICSCAInput + Type = float32 + } + LongInValue = { + DataSource = EPICSCAInput + Type = uint32 + } + StringInValue = { + DataSource = EPICSCAInput + Type = char8 + NumberOfElements = 40 + } + } + OutputSignals = { + AValue = { + DataSource = DDB1 + Type = float32 + } + LValue = { + DataSource = DDB1 + Type = uint32 + } + SValue = { + DataSource = DDB1 + Type = char8 + NumberOfElements = 40 + } + } + } + +DDB12PV = { + Class = IOGAM + InputSignals = { + AValue = { + DataSource = DDB1 + Type = float32 + } + LValue = { + DataSource = DDB1 + Type = uint32 + } + SValue = { + DataSource = DDB1 + Type = char8 + NumberOfElements = 40 + } + } + OutputSignals = { + AoValue = { + DataSource = EPICSCAOutput + Type = float32 + } + LongOutValue = { + DataSource = EPICSCAOutput + Type = uint32 + } + StringOutValue = { + DataSource = EPICSCAOutput + Type = char8 + NumberOfElements = 40 + } + } + } + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + } + +Timer = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 0 + ExecutionMode = RealTimeThread + CPUMask = 0x1 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + +EPICSCAInput = { + //Class = "EPICSCA::EPICSCAInput" + Class = "JAEPICSCA::JAEPICSCAInput" + CPUMask = "1" + StackSize = "10000000" + Signals = { + AiValue = { + PVName = "ai" + Type = float32 + } + LongInValue = { + PVName = "longin" + Type = uint32 + } + StringInValue = { + PVName = "stringin" + Type = char8 + NumberOfElements = 40 + } + } + } + +EPICSCAOutput = { + //Class = "EPICSCA::EPICSCAOutput" + Class = "JAEPICSCA::JAEPICSCAOutput" + CPUMask = "1" + StackSize = "10000000" + NumberOfBuffers = 2 + Signals = { + AoValue = { + PVName = "ao" + Type = float32 + } + LongOutValue = { + PVName = "longout" + Type = uint32 + } + StringOutValue = { + PVName = "stringout" + Type = char8 + NumberOfElements = 40 + } + } + } + +Display = { + Class = LoggerDataSource + } + +Timings = { + Class = TimingDataSource + } + } + +States = { + Class = ReferenceContainer + +State1 = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {GAMTimer PV2DDB1 DDB12PV} + CPUMask = 0x1 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/EPICS_Test.db b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/EPICS_Test.db new file mode 100644 index 0000000..c344eae --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/EPICS_Test.db @@ -0,0 +1,18 @@ +record(longin, longin){ + field(SCAN, "Passive") +} +record(longout, longout){ + field(SCAN, "Passive") +} +record(ai, ai){ + field(SCAN, "Passive") +} +record(ao, ao){ + field(SCAN, "Passive") +} +record(stringin, stringin){ + field(SCAN, "Passive") +} +record(stringout, stringout){ + field(SCAN, "Passive") +} \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_NI6259_test.cfg b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_NI6259_test.cfg new file mode 100644 index 0000000..1efebb0 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_NI6259_test.cfg @@ -0,0 +1,1081 @@ +// +LoggerService = { +// Class = LoggerService +// CPUs = 0x1 +// StackSize = 32768 +// NumberOfLogPages = 128 +// +ConLogger = { +// Class = ConsoleLogger +// Format = "EtOoFmC" +// PrintKeys = 1 +// } +// } + ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +START = { + Class = StateMachineEvent + NextState = "RUNNING" + NextStateError = "ERROR" + +PrepareNextStateOnOurRTApp = { + Class = Message + Destination = MyDemoApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = State1 + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = MyDemoApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +RUNNING = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = RUNNING + NextStateError = ERROR + } + } + +ERROR = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = ERROR + NextStateError = ERROR + } + } +} ++MyDemoApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + +GAMTimer = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = Timer + Type = uint32 + } + Counter = { + DataSource = Timer + Type = uint32 + Frequency = 1 //in Hz. Cycle for one state execution. + } + RTThreadPerf = { + DataSource = Timings + Alias = "State1.Thread1_CycleTime" + Type = uint32 + } + } + OutputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerf = { + DataSource = DDB1 + Type = uint32 + } + } + } + //EPICS PV read GAM + +PV2DDB1GAM = { + Class = IOGAM + InputSignals = { + ni6259d0p0do0 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do1 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do2 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do3 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do4 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do5 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do6 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do7 = { + DataSource = EPICSCAInput + Type = uint32 + } + + ni6528d0p3do0 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do1 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do2 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do3 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do4 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do5 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do6 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do7 = { + DataSource = EPICSCAInput + Type = uint32 + } + + ni6528d0p4do0 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do1 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do2 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do3 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do4 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do5 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do6 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do7 = { + DataSource = EPICSCAInput + Type = uint32 + } + + ni6259d1p0do0 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do1 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do2 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do3 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do4 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do5 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do6 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do7 = { + DataSource = EPICSCAInput + Type = uint32 + } + + ni6528d1p3do0 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do1 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do2 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do3 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do4 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do5 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do6 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do7 = { + DataSource = EPICSCAInput + Type = uint32 + } + + ni6528d1p4do0 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do1 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do2 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do3 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do4 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do5 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do6 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do7 = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + ni6259d0p0do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do7 = { + DataSource = DDB1 + Type = uint32 + } + + ni6528d0p3do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do7 = { + DataSource = DDB1 + Type = uint32 + } + + ni6528d0p4do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do7 = { + DataSource = DDB1 + Type = uint32 + } + + ni6259d1p0do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do7 = { + DataSource = DDB1 + Type = uint32 + } + + ni6528d1p3do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do7 = { + DataSource = DDB1 + Type = uint32 + } + + ni6528d1p4do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do7 = { + DataSource = DDB1 + Type = uint32 + } + } + } + //HW Write GAMs + //NI6259 uses uint32, so it is not able to use BitSumGAM + +NI6259D0P0GAM = { + Class = JABitSumGAM + InputSignals = { + ni6259d0p0do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do7 = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + NI6259D0P0Value = { + DataSource = Display + Type = uint8 + } + } + } + +NI6528D0P3GAM = { + Class = JABitSumGAM + InputSignals = { + ni6528d0p3do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do7 = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + NI6528D0P3Value = { + DataSource = Display + Type = uint8 + } + } + } + +NI6528D0P4GAM = { + Class = JABitSumGAM + InputSignals = { + ni6528d0p4do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do7 = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + NI6528D0P4Value = { + DataSource = Display + Type = uint8 + } + } + } + //NI6259 uses uint32, so it is not able to use BitSumGAM + +NI6259D1P0GAM = { + Class = JABitSumGAM + InputSignals = { + ni6259d1p0do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do7 = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + NI6259D1P0Value = { + DataSource = Display + Type = uint8 + } + } + } + +NI6528D1P3GAM = { + Class = JABitSumGAM + InputSignals = { + ni6528d1p3do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do7 = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + NI6528D1P3Value = { + DataSource = Display + Type = uint8 + } + } + } + +NI6528D1P4GAM = { + Class = JABitSumGAM + InputSignals = { + ni6528d1p4do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do7 = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + NI6528D1P4Value = { + DataSource = Display + Type = uint8 + } + } + } + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + } + +Timer = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 0 + ExecutionMode = RealTimeThread + CPUMask = 0x1 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + + /**** + +NI6259D1P0 = { + Class = NI6259::NI6259DIO + DeviceName = "/dev/pxi6259" + BoardId = 1 + Signals = { + NI6269D1P0Value = { + Type = uint32 + Mask = 0xFF + PortId = 0 + } + } + } + +NI6528D1P3 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.1" + Port = 3 + Value = { + NI6528D1P3Value = { + Type = uint32 + } + } + } + +NI6528D1P4 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.1" + Port = 4 + Value = { + NI6528D1P4Value = { + Type = uint32 + } + } + } + +NI6259D0P0 = { + Class = NI6259::NI6259DIO + DeviceName = "/dev/pxi6259" + BoardId = 0 + Signals = { + NI6259D0P0Value = { + Type = uint32 + Mask = 0xFF + PortId = 0 + } + } + } + +NI6528D0P3 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.0" + Port = 3 + Value = { + NI6528D0P3Value = { + Type = uint32 + } + } + } + +NI6528D0P4 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.0" + Port = 4 + Value = { + NI6528D0P4Value = { + Type = uint32 + } + } + } + ***/ + +EPICSCAInput = { + Class = "EPICSCA::EPICSCAInput" + CPUMask = "1" + StackSize = "10000000" + Signals = { + // NI6259 DO PVs + ni6259d0p0do0 = { + PVName = "ni6259:d0:p0:do0" + Type = uint32 + } + ni6259d0p0do1 = { + PVName = "ni6259:d0:p0:do1" + Type = uint32 + } + ni6259d0p0do2 = { + PVName = "ni6259:d0:p0:do2" + Type = uint32 + } + ni6259d0p0do3 = { + PVName = "ni6259:d0:p0:do3" + Type = uint32 + } + ni6259d0p0do4 = { + PVName = "ni6259:d0:p0:do4" + Type = uint32 + } + ni6259d0p0do5 = { + PVName = "ni6259:d0:p0:do5" + Type = uint32 + } + ni6259d0p0do6 = { + PVName = "ni6259:d0:p0:do6" + Type = uint32 + } + ni6259d0p0do7 = { + PVName = "ni6259:d0:p0:do7" + Type = uint32 + } + + // NI6528P3 PVs + ni6528d0p3do0 = { + PVName = "ni6528:d0:p3:do0" + Type = uint32 + } + ni6528d0p3do1 = { + PVName = "ni6528:d0:p3:do1" + Type = uint32 + } + ni6528d0p3do2 = { + PVName = "ni6528:d0:p3:do2" + Type = uint32 + } + ni6528d0p3do3 = { + PVName = "ni6528:d0:p3:do3" + Type = uint32 + } + ni6528d0p3do4 = { + PVName = "ni6528:d0:p3:do4" + Type = uint32 + } + ni6528d0p3do5 = { + PVName = "ni6528:d0:p3:do5" + Type = uint32 + } + ni6528d0p3do6 = { + PVName = "ni6528:d0:p3:do6" + Type = uint32 + } + ni6528d0p3do7 = { + PVName = "ni6528:d0:p3:do7" + Type = uint32 + } + + //NI6528P4 PVs + ni6528d0p4do0 = { + PVName = "ni6528:d0:p4:do0" + Type = uint32 + } + ni6528d0p4do1 = { + PVName = "ni6528:d0:p4:do1" + Type = uint32 + } + ni6528d0p4do2 = { + PVName = "ni6528:d0:p4:do2" + Type = uint32 + } + ni6528d0p4do3 = { + PVName = "ni6528:d0:p4:do3" + Type = uint32 + } + ni6528d0p4do4 = { + PVName = "ni6528:d0:p4:do4" + Type = uint32 + } + ni6528d0p4do5 = { + PVName = "ni6528:d0:p4:do5" + Type = uint32 + } + ni6528d0p4do6 = { + PVName = "ni6528:d0:p4:do6" + Type = uint32 + } + ni6528d0p4do7 = { + PVName = "ni6528:d0:p4:do7" + Type = uint32 + } + + // NI6259 DO PVs + ni6259d1p0do0 = { + PVName = "ni6259:d1:p0:do0" + Type = uint32 + } + ni6259d1p0do1 = { + PVName = "ni6259:d1:p0:do1" + Type = uint32 + } + ni6259d1p0do2 = { + PVName = "ni6259:d1:p0:do2" + Type = uint32 + } + ni6259d1p0do3 = { + PVName = "ni6259:d1:p0:do3" + Type = uint32 + } + ni6259d1p0do4 = { + PVName = "ni6259:d1:p0:do4" + Type = uint32 + } + ni6259d1p0do5 = { + PVName = "ni6259:d1:p0:do5" + Type = uint32 + } + ni6259d1p0do6 = { + PVName = "ni6259:d1:p0:do6" + Type = uint32 + } + ni6259d1p0do7 = { + PVName = "ni6259:d1:p0:do7" + Type = uint32 + } + + // NI6528P3 PVs + ni6528d1p3do0 = { + PVName = "ni6528:d1:p3:do0" + Type = uint32 + } + ni6528d1p3do1 = { + PVName = "ni6528:d1:p3:do1" + Type = uint32 + } + ni6528d1p3do2 = { + PVName = "ni6528:d1:p3:do2" + Type = uint32 + } + ni6528d1p3do3 = { + PVName = "ni6528:d1:p3:do3" + Type = uint32 + } + ni6528d1p3do4 = { + PVName = "ni6528:d1:p3:do4" + Type = uint32 + } + ni6528d1p3do5 = { + PVName = "ni6528:d1:p3:do5" + Type = uint32 + } + ni6528d1p3do6 = { + PVName = "ni6528:d1:p3:do6" + Type = uint32 + } + ni6528d1p3do7 = { + PVName = "ni6528:d1:p3:do7" + Type = uint32 + } + + //NI6528P4 PVs + ni6528d1p4do0 = { + PVName = "ni6528:d1:p4:do0" + Type = uint32 + } + ni6528d1p4do1 = { + PVName = "ni6528:d1:p4:do1" + Type = uint32 + } + ni6528d1p4do2 = { + PVName = "ni6528:d1:p4:do2" + Type = uint32 + } + ni6528d1p4do3 = { + PVName = "ni6528:d1:p4:do3" + Type = uint32 + } + ni6528d1p4do4 = { + PVName = "ni6528:d1:p4:do4" + Type = uint32 + } + ni6528d1p4do5 = { + PVName = "ni6528:d1:p4:do5" + Type = uint32 + } + ni6528d1p4do6 = { + PVName = "ni6528:d1:p4:do6" + Type = uint32 + } + ni6528d1p4do7 = { + PVName = "ni6528:d1:p4:do7" + Type = uint32 + } + } + } + +Display = { + Class = LoggerDataSource + } + +Timings = { + Class = TimingDataSource + } + } + +States = { + Class = ReferenceContainer + +State1 = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {GAMTimer PV2DDB1GAM NI6259D0P0GAM NI6528D0P3GAM NI6528D0P4GAM NI6259D1P0GAM NI6528D1P3GAM NI6528D1P4GAM } + CPUMask = 0x1 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_NI6259_test.db b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_NI6259_test.db new file mode 100644 index 0000000..1b2696d --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_NI6259_test.db @@ -0,0 +1,257 @@ +### The board on the Right Side Slots + +# NI6259 P0 PVs +record(bo, "ni6259:d1:p0:do0"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do4"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do5"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do6"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do7"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} + +#NI6528 P3 PVs +record(bo, "ni6528:d1:p3:do0"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do4"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do5"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do6"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do7"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} + + +#NI6528 P4 PVs +record(bo, "ni6528:d1:p4:do0"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do4"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do5"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do6"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do7"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} + + +### Left Side Slots +# NI6259 P0 PVs +record(bo, "ni6259:d0:p0:do0"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do4"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do5"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do6"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do7"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} + +#NI6528 P3 PVs +record(bo, "ni6528:d0:p3:do0"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do4"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do5"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do6"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do7"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} + + +#NI6528 P4 PVs +record(bo, "ni6528:d0:p4:do0"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do4"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do5"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do6"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do7"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_test.cfg b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_test.cfg new file mode 100644 index 0000000..2ac80fa --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_test.cfg @@ -0,0 +1,191 @@ ++LoggerService = { + Class = LoggerService + CPUs = 0x1 + StackSize = 32768 + NumberOfLogPages = 128 + +ConLogger = { + Class = ConsoleLogger + Format = "EtOoFmC" + PrintKeys = 1 + } +} ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +START = { + Class = StateMachineEvent + NextState = "RUNNING" + NextStateError = "ERROR" + +PrepareNextStateOnOurRTApp = { + Class = Message + Destination = MyDemoApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = State1 + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = MyDemoApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +RUNNING = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = RUNNING + NextStateError = ERROR + } + } + +ERROR = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = ERROR + NextStateError = ERROR + } + } +} ++MyDemoApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + +GAMTimer = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = Timer + Type = uint32 + } + Counter = { + DataSource = Timer + Type = uint32 + Frequency = 1 //in Hz. Cycle for one state execution. + } + RTThreadPerf = { + DataSource = Timings + Alias = "State1.Thread1_CycleTime" + Type = uint32 + } + } + OutputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerf = { + DataSource = DDB1 + Type = uint32 + } + } + } + +GAMEPICSCA = { + Class = IOGAM + InputSignals = { + doValue = { + DataSource = EPICSCAInput + Type = uint8 + } + } + OutputSignals = { + Value = { + DataSource = DDB1 + Type = uint8 + } + } + } + +GAMDebug = { + Class = IOGAM + InputSignals = { + Value = { + DataSource = DDB1 + Type = uint8 + } + + } + OutputSignals = { + Value = { + DataSource = NI6528 + Type = uint8 + } + } + } + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + } + +Timer = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 0 + ExecutionMode = RealTimeThread + CPUMask = 0x1 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + +NI6528 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.0" + Port = 3 + Value = { + Counter = { + Type = uint8 + } + } + } + +EPICSCAInput = { + Class = "EPICSCA::EPICSCAInput" + CPUMask = "1" + StackSize = "10000000" + Signals = { + doValue = { + PVName = "test:doValue" + } + } + } + +Display = { + Class = LoggerDataSource + } + +Timings = { + Class = TimingDataSource + } + } + +States = { + Class = ReferenceContainer + +State1 = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {GAMTimer GAMEPICSCA GAMDebug} + CPUMask = 0x1 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_test.db b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_test.db new file mode 100644 index 0000000..ccec4a0 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_test.db @@ -0,0 +1,18 @@ +record(bo, "test:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "test:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "test:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(longin, test:doValue){ + field(SCAN, "Passive") +} \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/README.md b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/README.md new file mode 100644 index 0000000..01ec4d2 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/README.md @@ -0,0 +1,29 @@ +ECPCSubscriber.cfg is a configuration for testing ECPC simulator (JAECPCSimulator.cfg). + +Setup: +1) Run softIoc. In qst-gyrotron-fast-controller/Configurations execute command: + softIoc -d ECPC_IOC.db + +2) Run ECPC simulator. In qst-gyrotron-fast-controller/Startup execute command: + ./Main.sh -f ../Configurations/JAECPCSimulator.cfg -l RealTimeLoader -m StateMachine:Start + +3) Run ECPC subscriber. In qst-gyrotron-fast-controller/Startup execute command: + ./Main.sh -f ../Configurations/tests/ECPCSubscriber.cfg -l RealTimeLoader -m StateMachine:Start + +The ECPC simulator should automatically start sending waveforms, which will be printed by the ECPC subscriber every 10 milliseconds. +The ECPC simulator will also be sending command, which is printed by the ECPC subscriber every millisecond. + +To change command that is being sent, you have to caput 1 to one of following PVs: +MHVPS_ON (command 1) +GYA_BPS_SWON (command 2) +GYA_APS_SWON (command 3) +GYB_BPS_SWON (command 4) +GYB_APS_SWON (command 5) +GYA_BPS_SWOFF (command 6) +GYA_APS_SWOFF (command 7) +GYB_BPS_SWOFF (command 8) +GYB_APS_SWOFF (command 9) +RF_OFF (command 10) + +To stop sending that command, caput 0 to that PV. + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/Timer_Test.cfg b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/Timer_Test.cfg new file mode 100644 index 0000000..cea80cf --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Configurations/tests/Timer_Test.cfg @@ -0,0 +1,163 @@ ++LoggerService = { + Class = LoggerService + CPUs = 0x1 + StackSize = 32768 + NumberOfLogPages = 128 + +ConLogger = { + Class = ConsoleLogger + Format = "EtOoFmC" + PrintKeys = 1 + } +} ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +START = { + Class = StateMachineEvent + NextState = "RUNNING" + NextStateError = "ERROR" + +PrepareNextStateOnOurRTApp = { + Class = Message + Destination = MyDemoApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = State1 + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = MyDemoApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +RUNNING = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = RUNNING + NextStateError = ERROR + } + } + +ERROR = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = ERROR + NextStateError = ERROR + } + } +} ++MyDemoApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + +GAMTimer = { + Class = IOGAM + InputSignals = { + Time = { //Time attribute is updated with us resolution. + DataSource = Timer + Type = uint32 + } + Counter = { + DataSource = Timer + Type = uint32 + Frequency = 10 //in Hz. Cycle for one state execution. + } + RTThreadPerf = { + DataSource = Timings + Alias = "State1.Thread1_CycleTime" + Type = uint32 + } + } + OutputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerf = { + DataSource = DDB1 + Type = uint32 + } + } + } + +TimerDisplayGAM = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + TimeDISP = { + DataSource = Display + Type = uint32 + } + CounterDISP = { + DataSource = Display + Type = uint32 + } + } + } + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + } + +Timer = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 0 + ExecutionMode = RealTimeThread + CPUMask = 0x1 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + +Display = { + Class = LoggerDataSource + } + +Timings = { + Class = TimingDataSource + } + } + +States = { + Class = ReferenceContainer + +State1 = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {GAMTimer TimerDisplayGAM} + CPUMask = 0x1 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAInput.cpp b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAInput.cpp new file mode 100644 index 0000000..ac3464d --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAInput.cpp @@ -0,0 +1,366 @@ +/** + * @file JAEPICSCAInput.cpp + * @brief Source file for class JAEPICSCAInput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAEPICSCAInput (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAEPICSCAInput.h" + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "MemoryMapInputBroker.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +namespace MARTe { +/** + * @brief Callback function for the ca_create_subscription. Single point of access which + * delegates the events to the corresponding JAEPICSPV instance. + */ +static FastPollingMutexSem eventCallbackFastMux; +/*lint -e{1746} function must match required prototype and thus cannot be changed to constant reference.*/ +void JAEPICSCAInputEventCallback(struct event_handler_args const args) { + (void) eventCallbackFastMux.FastLock(); + PVWrapper *pv = static_cast(args.usr); + if (pv != NULL_PTR(PVWrapper *)) { + (void) MemoryOperationsHelper::Copy(pv->memory, args.dbr, pv->memorySize); + } + eventCallbackFastMux.FastUnLock(); +} +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +JAEPICSCAInput::JAEPICSCAInput() : + DataSourceI(), EmbeddedServiceMethodBinderI(), executor(*this) { + pvs = NULL_PTR(PVWrapper *); + stackSize = THREADS_DEFAULT_STACKSIZE * 4u; + cpuMask = 0xffu; + eventCallbackFastMux.Create(); +} + +/*lint -e{1551} must stop the SingleThreadService in the destructor.*/ +JAEPICSCAInput::~JAEPICSCAInput() { + if (!executor.Stop()) { + if (!executor.Stop()) { + REPORT_ERROR(ErrorManagement::FatalError, "Could not stop SingleThreadService."); + } + } + (void) eventCallbackFastMux.FastLock(); + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + if (pvs[n].memory != NULL_PTR(void *)) { + GlobalObjectsDatabase::Instance()->GetStandardHeap()->Free(pvs[n].memory); + } + } + delete[] pvs; + } + eventCallbackFastMux.FastUnLock(); +} + +bool JAEPICSCAInput::Initialise(StructuredDataI & data) { + bool ok = DataSourceI::Initialise(data); + if (ok) { + if (!data.Read("CPUs", cpuMask)) { + REPORT_ERROR(ErrorManagement::Information, "No CPUs defined. Using default = %d", cpuMask); + } + if (!data.Read("StackSize", stackSize)) { + REPORT_ERROR(ErrorManagement::Information, "No StackSize defined. Using default = %d", stackSize); + } + executor.SetStackSize(stackSize); + executor.SetCPUMask(cpuMask); + } + if (ok) { + ok = data.MoveRelative("Signals"); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Could not move to the Signals section"); + } + if (ok) { + ok = data.Copy(originalSignalInformation); + } + if (ok) { + ok = originalSignalInformation.MoveToRoot(); + } + //Do not allow to add signals in run-time + if (ok) { + ok = signalsDatabase.MoveRelative("Signals"); + } + if (ok) { + ok = signalsDatabase.Write("Locked", 1u); + } + if (ok) { + ok = signalsDatabase.MoveToAncestor(1u); + } + } + if (ok) { + ok = data.MoveToAncestor(1u); + } + return ok; +} + +bool JAEPICSCAInput::SetConfiguredDatabase(StructuredDataI & data) { + bool ok = DataSourceI::SetConfiguredDatabase(data); + //Check the signal index of the timing signal. + uint32 nOfSignals = GetNumberOfSignals(); + if (ok) { + ok = (nOfSignals > 0u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one signal shall be defined"); + } + } + if (ok) { + //Do not allow samples + uint32 functionNumberOfSignals = 0u; + uint32 n; + if (GetFunctionNumberOfSignals(InputSignals, 0u, functionNumberOfSignals)) { + for (n = 0u; (n < functionNumberOfSignals) && (ok); n++) { + uint32 nSamples; + ok = GetFunctionSignalSamples(InputSignals, 0u, n, nSamples); + if (ok) { + ok = (nSamples == 1u); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The number of samples shall be exactly 1"); + } + } + } + } + if (ok) { + pvs = new PVWrapper[nOfSignals]; + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + pvs[n].memory = NULL_PTR(void *); + } + for (n = 0u; (n < nOfSignals) && (ok); n++) { + //Note that the RealTimeApplicationConfigurationBuilder is allowed to change the order of the signals w.r.t. to the originalSignalInformation + StreamString orderedSignalName; + ok = GetSignalName(n, orderedSignalName); + if (ok) { + //Have to mix and match between the original setting of the DataSource signal + //and the ones which are later added by the RealTimeApplicationConfigurationBuilder + ok = originalSignalInformation.MoveRelative(orderedSignalName.Buffer()); + } + StreamString pvName; + if (ok) { + ok = originalSignalInformation.Read("PVName", pvName); + if (!ok) { + uint32 nn = n; + REPORT_ERROR(ErrorManagement::ParametersError, "No PVName specified for signal at index %d", nn); + } + } + TypeDescriptor td = GetSignalType(n); + if (ok) { + (void) StringHelper::CopyN(&pvs[n].pvName[0], pvName.Buffer(), PV_NAME_MAX_SIZE); + if (td == CharString) { + pvs[n].pvType = DBR_STRING; + } + else if (td == Character8Bit) { + pvs[n].pvType = DBR_STRING; + } + else if (td == SignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == UnsignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == SignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == UnsignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == SignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == UnsignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == Float32Bit) { + pvs[n].pvType = DBR_FLOAT; + } + else if (td == Float64Bit) { + pvs[n].pvType = DBR_DOUBLE; + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Type %s is not supported", TypeDescriptor::GetTypeNameFromTypeDescriptor(td)); + ok = false; + } + } + uint32 numberOfElements = 1u; + if (ok) { + ok = GetSignalNumberOfElements(n, numberOfElements); + } + if (ok) { + if (pvs[n].pvType == DBR_STRING) { + ok = (numberOfElements == 40u); + } + if (!ok) { + //Could support arrays of strings with multiples of char8[40] + REPORT_ERROR(ErrorManagement::ParametersError, "Strings shall be defined with 40 elements char8[40]. Arrays of strings are not currently supported"); + } + } + if (ok) { + pvs[n].numberOfElements = numberOfElements; + } + if (ok) { + pvs[n].memorySize = td.numberOfBits; + pvs[n].memorySize /= 8u; + pvs[n].memorySize *= numberOfElements; + pvs[n].memory = GlobalObjectsDatabase::Instance()->GetStandardHeap()->Malloc(pvs[n].memorySize); + ok = originalSignalInformation.MoveToAncestor(1u); + } + } + } + + if (ok) { + ok = (executor.Start() == ErrorManagement::NoError); + } + return ok; +} + +bool JAEPICSCAInput::AllocateMemory() { + return true; +} + +uint32 JAEPICSCAInput::GetNumberOfMemoryBuffers() { + return 1u; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The signalAddress is independent of the bufferIdx.*/ +bool JAEPICSCAInput::GetSignalMemoryBuffer(const uint32 signalIdx, const uint32 bufferIdx, void*& signalAddress) { + bool ok = (pvs != NULL_PTR(PVWrapper *)); + if (ok) { + ok = (signalIdx < GetNumberOfSignals()); + } + if (ok) { + //lint -e{613} pvs cannot as otherwise ok would be false + signalAddress = pvs[signalIdx].memory; + } + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The brokerName only depends on the direction */ +const char8* JAEPICSCAInput::GetBrokerName(StructuredDataI& data, const SignalDirection direction) { + const char8* brokerName = ""; + if (direction == InputSignals) { + brokerName = "MemoryMapInputBroker"; + } + return brokerName; +} + +bool JAEPICSCAInput::GetInputBrokers(ReferenceContainer& inputBrokers, const char8* const functionName, void* const gamMemPtr) { + ReferenceT broker("MemoryMapInputBroker"); + bool ok = broker->Init(InputSignals, *this, functionName, gamMemPtr); + if (ok) { + ok = inputBrokers.Insert(broker); + } + + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: OutputBrokers are not supported. Function returns false irrespectively of the parameters.*/ +bool JAEPICSCAInput::GetOutputBrokers(ReferenceContainer& outputBrokers, const char8* const functionName, void* const gamMemPtr) { + return false; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: NOOP at StateChange, independently of the function parameters.*/ +bool JAEPICSCAInput::PrepareNextState(const char8* const currentStateName, const char8* const nextStateName) { + return true; +} + +ErrorManagement::ErrorType JAEPICSCAInput::Execute(ExecutionInfo& info) { + ErrorManagement::ErrorType err = ErrorManagement::NoError; + if (info.GetStage() == ExecutionInfo::StartupStage) { + (void) eventCallbackFastMux.FastLock(); + /*lint -e{9130} -e{835} -e{845} -e{747} Several false positives. lint is getting confused here for some reason.*/ + if (ca_context_create(ca_enable_preemptive_callback) != ECA_NORMAL) { + err = ErrorManagement::FatalError; + REPORT_ERROR(err, "ca_enable_preemptive_callback failed"); + } + + uint32 n; + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + /*lint -e{9130} -e{835} -e{845} -e{747} Several false positives. lint is getting confused here for some reason.*/ + if (ca_create_channel(&pvs[n].pvName[0], NULL_PTR(caCh *), NULL_PTR(void *), 20u, &pvs[n].pvChid) != ECA_NORMAL) { + err = ErrorManagement::FatalError; + REPORT_ERROR(err, "ca_create_channel failed for PV with name %s", pvs[n].pvName); + } + if (err.ErrorsCleared()) { + /*lint -e{9130} -e{835} -e{845} -e{747} Several false positives. lint is getting confused here for some reason.*/ + if (ca_create_subscription(pvs[n].pvType, pvs[n].numberOfElements, pvs[n].pvChid, DBE_VALUE, &JAEPICSCAInputEventCallback, &pvs[n], + &pvs[n].pvEvid) != ECA_NORMAL) { + err = ErrorManagement::FatalError; + REPORT_ERROR(err, "ca_create_subscription failed for PV %s", pvs[n].pvName); + } + } + } + } + eventCallbackFastMux.FastUnLock(); + } + else if (info.GetStage() != ExecutionInfo::BadTerminationStage) { + Sleep::Sec(1.0F); + } + else { + (void) eventCallbackFastMux.FastLock(); + uint32 n; + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + (void) ca_clear_subscription(pvs[n].pvEvid); + (void) ca_clear_event(pvs[n].pvEvid); + (void) ca_clear_channel(pvs[n].pvChid); + } + } + ca_detach_context(); + ca_context_destroy(); + eventCallbackFastMux.FastUnLock(); + } + + return err; +} + +uint32 JAEPICSCAInput::GetStackSize() const { + return stackSize; +} + +uint32 JAEPICSCAInput::GetCPUMask() const { + return cpuMask; +} + +bool JAEPICSCAInput::Synchronise() { + return false; +} + +CLASS_REGISTER(JAEPICSCAInput, "1.0") + +} + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAInput.h b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAInput.h new file mode 100644 index 0000000..3a5071d --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAInput.h @@ -0,0 +1,260 @@ +/** + * @file EPICSCAInput.h + * @brief Header file for class EPICSCAInput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class EPICSCAInput + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef JAEPICSCAINPUT_H_ +#define JAEPICSCAINPUT_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" +#include "EmbeddedServiceMethodBinderI.h" +#include "EventSem.h" +#include "SingleThreadService.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +/** + * Maximum size that a PV name may have + */ +/*lint -esym(551, MARTe::PV_NAME_MAX_SIZE) the symbol is used to define the size of PVWrapper below*/ +const uint32 PV_NAME_MAX_SIZE = 64u; + +/** + * Wraps a PV + */ +struct PVWrapper { + /** + * The channel identifier + */ + chid pvChid; + /** + * The event identifier + */ + evid pvEvid; + /** + * The PV type + */ + chtype pvType; + /** + * The memory of the signal associated to this channel + */ + void *memory; + void *previousValue; + /** + * The number of elements > 0 + */ + uint32 numberOfElements; + /** + * The memory size + */ + uint32 memorySize; + /** + * The PV name + */ + char8 pvName[PV_NAME_MAX_SIZE]; +}; + +/** + * @brief A DataSource which allows to retrieved data from any number of PVs using the EPICS channel access client protocol. + * Data is asynchronously retrieved using ca_create_subscriptions in the context of a different thread (w.r.t. to the real-time thread). + * + * The configuration syntax is (names are only given as an example): + * + *
+ * +EPICSCAInput_1 = {
+ *     Class = JAEPICSCA::JAEPICSCAInput
+ *     StackSize = 1048576 //Optional the EmbeddedThread stack size. Default value is THREADS_DEFAULT_STACKSIZE * 4u
+ *     CPUs = 0xff //Optional the affinity of the EmbeddedThread (where the EPICS context is attached).
+ *     Signals = {
+ *          PV1 = { //At least one shall be defined
+ *             PVName = My::PV1 //Compulsory. Name of the PV.
+ *             Type = uint32 //Compulsory. Supported types are char8[40], string[40], uint8, int8, uint16, int16, int32, uint32, uint64, int64, float32 and float64
+ *             NumberOfElements = 1 //Arrays also supported
+ *          }
+ *          ...
+ *     }
+ * }
+ *
+ * 
+ */ +class JAEPICSCAInput: public DataSourceI, public EmbeddedServiceMethodBinderI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Default constructor. NOOP. + */ + JAEPICSCAInput(); + + /** + * @brief Destructor. + * @details TODO. + */ + virtual ~JAEPICSCAInput(); + + /** + * @brief See DataSourceI::AllocateMemory. NOOP. + * @return true. + */ + virtual bool AllocateMemory(); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @return 1. + */ + virtual uint32 GetNumberOfMemoryBuffers(); + + /** + * @brief See DataSourceI::GetSignalMemoryBuffer. + * @pre + * SetConfiguredDatabase + */ + virtual bool GetSignalMemoryBuffer(const uint32 signalIdx, + const uint32 bufferIdx, + void *&signalAddress); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @details Only InputSignals are supported. + * @return MemoryMapInputBroker. + */ + virtual const char8 *GetBrokerName(StructuredDataI &data, + const SignalDirection direction); + + /** + * @brief See DataSourceI::GetInputBrokers. + * @details adds a memory MemoryMapInputBroker instance to the inputBrokers + * @return true. + */ + virtual bool GetInputBrokers(ReferenceContainer &inputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::GetOutputBrokers. + * @return false. + */ + virtual bool GetOutputBrokers(ReferenceContainer &outputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::PrepareNextState. NOOP. + * @return true. + */ + virtual bool PrepareNextState(const char8 * const currentStateName, + const char8 * const nextStateName); + + /** + * @brief Loads and verifies the configuration parameters detailed in the class description. + * @return true if all the mandatory parameters are correctly specified and if the specified optional parameters have valid values. + */ + virtual bool Initialise(StructuredDataI & data); + + /** + * @brief Final verification of all the parameters. Setup of the memory required to hold all the signals. + * @details This method verifies that all the parameters requested by the GAMs interacting with this DataSource + * are valid and consistent with the parameters set during the initialisation phase. + * In particular the following conditions shall be met: + * - All the signals have the PVName defined + * - All the signals have one of the following types: uint32, int32, float32 or float64. + * @return true if all the parameters are valid and the conditions above are met. + */ + virtual bool SetConfiguredDatabase(StructuredDataI & data); + + /** + * @brief Gets the affinity of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + * @return the the affinity of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + */ + uint32 GetCPUMask() const; + + /** + * @brief Gets the stack size of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + * @return the stack size of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + */ + uint32 GetStackSize() const; + + /** + * @brief Provides the context to execute all the EPICS relevant calls. + * @details Executes in the context of a spawned thread the following EPICS calls: + * ca_context_create, ca_create_channel, ca_create_subscription, ca_clear_subscription, + * ca_clear_event, ca_clear_channel, ca_detach_context and ca_context_destroy + * @return ErrorManagement::NoError if all the EPICS calls return without any error. + */ + virtual ErrorManagement::ErrorType Execute(ExecutionInfo & info); + + /** + * @brief See DataSourceI::Synchronise. + * @return false. + */ + virtual bool Synchronise(); + + /** + * @brief Registered as the ca_create_subscription callback function. + * It calls updates the memory of the corresponding PV variable. + */ + friend void JAEPICSCAInputEventCallback(struct event_handler_args args); + +private: + + /** + * List of PVs. + */ + PVWrapper *pvs; + + /** + * The CPU mask for the executor + */ + uint32 cpuMask; + + /** + * The stack size + */ + uint32 stackSize; + + /** + * The EmbeddedThread where the ca_pend_event is executed. + */ + SingleThreadService executor; + + /** + * Stores the configuration information received at Initialise. + */ + ConfigurationDatabase originalSignalInformation; +}; +} + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* EPICSCADATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAOutput.cpp b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAOutput.cpp new file mode 100644 index 0000000..951ed07 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAOutput.cpp @@ -0,0 +1,375 @@ +/** + * @file EPICSCAOutput.cpp + * @brief Source file for class EPICSCAOutput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class EPICSCAOutput (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAEPICSCAOutput.h" + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "MemoryMapAsyncOutputBroker.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +JAEPICSCAOutput::JAEPICSCAOutput() : + DataSourceI() { + pvs = NULL_PTR(PVWrapper *); + stackSize = THREADS_DEFAULT_STACKSIZE * 4u; + cpuMask = 0xffu; + numberOfBuffers = 0u; + ignoreBufferOverrun = 1u; + threadContextSet = false; +} + +/*lint -e{1551} must free the memory allocated to the different PVs.*/ +JAEPICSCAOutput::~JAEPICSCAOutput() { + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + if (pvs[n].pvChid != NULL_PTR(chid)) { + (void) ca_clear_channel(pvs[n].pvChid); + } + if (pvs[n].memory != NULL_PTR(void *)) { + GlobalObjectsDatabase::Instance()->GetStandardHeap()->Free(pvs[n].memory); + GlobalObjectsDatabase::Instance()->GetStandardHeap()->Free(pvs[n].previousValue); + } + } + delete[] pvs; + } +} + +bool JAEPICSCAOutput::Initialise(StructuredDataI & data) { + bool ok = DataSourceI::Initialise(data); + if (ok) { + ok = data.Read("NumberOfBuffers", numberOfBuffers); + + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "NumberOfBuffers shall be specified"); + } + } + if (ok) { + if (!data.Read("CPUs", cpuMask)) { + REPORT_ERROR(ErrorManagement::Information, "No CPUs defined. Using default = %d", cpuMask); + } + if (!data.Read("StackSize", stackSize)) { + REPORT_ERROR(ErrorManagement::Information, "No StackSize defined. Using default = %d", stackSize); + } + if (!data.Read("IgnoreBufferOverrun", ignoreBufferOverrun)) { + REPORT_ERROR(ErrorManagement::Information, "No IgnoreBufferOverrun defined. Using default = %d", ignoreBufferOverrun); + } + + } + if (ok) { + ok = data.MoveRelative("Signals"); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Could not move to the Signals section"); + } + if (ok) { + ok = data.Copy(originalSignalInformation); + } + if (ok) { + ok = originalSignalInformation.MoveToRoot(); + } + //Do not allow to add signals in run-time + if (ok) { + ok = signalsDatabase.MoveRelative("Signals"); + } + if (ok) { + ok = signalsDatabase.Write("Locked", 1u); + } + if (ok) { + ok = signalsDatabase.MoveToAncestor(1u); + } + } + if (ok) { + ok = data.MoveToAncestor(1u); + } + return ok; +} + +bool JAEPICSCAOutput::SetConfiguredDatabase(StructuredDataI & data) { + bool ok = DataSourceI::SetConfiguredDatabase(data); + //Check the signal index of the timing signal. + uint32 nOfSignals = GetNumberOfSignals(); + if (ok) { + ok = (nOfSignals > 0u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one signal shall be defined"); + } + } + if (ok) { + //Do not allow samples + uint32 functionNumberOfSignals = 0u; + uint32 n; + if (GetFunctionNumberOfSignals(OutputSignals, 0u, functionNumberOfSignals)) { + for (n = 0u; (n < functionNumberOfSignals) && (ok); n++) { + uint32 nSamples; + ok = GetFunctionSignalSamples(OutputSignals, 0u, n, nSamples); + if (ok) { + ok = (nSamples == 1u); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The number of samples shall be exactly 1"); + } + } + } + } + //Only one and one GAM allowed to interact with this DataSourceI + if (ok) { + ok = (GetNumberOfFunctions() == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Exactly one Function allowed to interact with this DataSourceI"); + } + } + + if (ok) { + pvs = new PVWrapper[nOfSignals]; + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + pvs[n].memory = NULL_PTR(void *); //value to write PV + pvs[n].previousValue = NULL_PTR(void *); //written value + pvs[n].pvChid = NULL_PTR(chid); + + } + for (n = 0u; (n < nOfSignals) && (ok); n++) { + //Note that the RealTimeApplicationConfigurationBuilder is allowed to change the order of the signals w.r.t. to the originalSignalInformation + StreamString orderedSignalName; + ok = GetSignalName(n, orderedSignalName); + if (ok) { + //Have to mix and match between the original setting of the DataSource signal + //and the ones which are later added by the RealTimeApplicationConfigurationBuilder + ok = originalSignalInformation.MoveRelative(orderedSignalName.Buffer()); + } + StreamString pvName; + if (ok) { + ok = originalSignalInformation.Read("PVName", pvName); + if (!ok) { + uint32 nn = n; + REPORT_ERROR(ErrorManagement::ParametersError, "No PVName specified for signal at index %d", nn); + } + } + TypeDescriptor td = GetSignalType(n); + + if (ok) { + (void) StringHelper::CopyN(&pvs[n].pvName[0], pvName.Buffer(), PV_NAME_MAX_SIZE); + if (td == CharString) { + pvs[n].pvType = DBR_STRING; + } + else if (td == Character8Bit) { + pvs[n].pvType = DBR_STRING; + } + else if (td == SignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == UnsignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == SignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == UnsignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == SignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == UnsignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == Float32Bit) { + pvs[n].pvType = DBR_FLOAT; + } + else if (td == Float64Bit) { + pvs[n].pvType = DBR_DOUBLE; + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Type %s is not supported", TypeDescriptor::GetTypeNameFromTypeDescriptor(td)); + ok = false; + } + } + uint32 numberOfElements = 1u; + if (ok) { + ok = GetSignalNumberOfElements(n, numberOfElements); + } + if (ok) { + if (pvs[n].pvType == DBR_STRING) { + ok = (numberOfElements == 40u); + } + if (!ok) { + //Could support arrays of strings with multiples of char8[40] + REPORT_ERROR(ErrorManagement::ParametersError, + "Strings shall be defined with 40 elements char8[40]. Arrays of strings are not currently supported"); + } + } + if (ok) { + pvs[n].numberOfElements = numberOfElements; + } + if (ok) { + pvs[n].memorySize = td.numberOfBits; + pvs[n].memorySize /= 8u; + pvs[n].memorySize *= numberOfElements; + pvs[n].memory = GlobalObjectsDatabase::Instance()->GetStandardHeap()->Malloc(pvs[n].memorySize); + pvs[n].previousValue = GlobalObjectsDatabase::Instance()->GetStandardHeap()->Malloc(pvs[n].memorySize); + ok = originalSignalInformation.MoveToAncestor(1u); + } + } + } + return ok; +} + +bool JAEPICSCAOutput::AllocateMemory() { + return true; +} + +uint32 JAEPICSCAOutput::GetNumberOfMemoryBuffers() { + return 1u; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The signalAddress is independent of the bufferIdx.*/ +bool JAEPICSCAOutput::GetSignalMemoryBuffer(const uint32 signalIdx, const uint32 bufferIdx, void*& signalAddress) { + bool ok = (pvs != NULL_PTR(PVWrapper *)); + if (ok) { + ok = (signalIdx < GetNumberOfSignals()); + } + if (ok) { + //lint -e{613} pvs cannot as otherwise ok would be false + signalAddress = pvs[signalIdx].memory; + } + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The brokerName only depends on the direction */ +const char8* JAEPICSCAOutput::GetBrokerName(StructuredDataI& data, const SignalDirection direction) { + const char8* brokerName = ""; + if (direction == OutputSignals) { + brokerName = "MemoryMapAsyncOutputBroker"; + } + return brokerName; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: InputBrokers are not supported. Function returns false irrespectively of the parameters.*/ +bool JAEPICSCAOutput::GetInputBrokers(ReferenceContainer& inputBrokers, const char8* const functionName, void* const gamMemPtr) { + return false; +} + +bool JAEPICSCAOutput::GetOutputBrokers(ReferenceContainer& outputBrokers, const char8* const functionName, void* const gamMemPtr) { + ReferenceT broker("MemoryMapAsyncOutputBroker"); + bool ok = broker->InitWithBufferParameters(OutputSignals, *this, functionName, gamMemPtr, numberOfBuffers, cpuMask, stackSize); + if (ok) { + ok = outputBrokers.Insert(broker); + broker->SetIgnoreBufferOverrun(ignoreBufferOverrun == 1u); + } + + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: NOOP at StateChange, independently of the function parameters.*/ +bool JAEPICSCAOutput::PrepareNextState(const char8* const currentStateName, const char8* const nextStateName) { + return true; +} + +uint32 JAEPICSCAOutput::GetStackSize() const { + return stackSize; +} + +uint32 JAEPICSCAOutput::GetCPUMask() const { + return cpuMask; +} + +uint32 JAEPICSCAOutput::GetNumberOfBuffers() const { + return numberOfBuffers; +} + +bool JAEPICSCAOutput::Synchronise() { + bool ok = true; + uint32 n; + uint32 nOfSignals = GetNumberOfSignals(); + if (!threadContextSet) { + ok = (ca_context_create(ca_enable_preemptive_callback) == ECA_NORMAL); + if (!ok) { + REPORT_ERROR(ErrorManagement::FatalError, "ca_enable_preemptive_callback failed"); + } + threadContextSet = ok; + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + ok = (ca_create_channel(&pvs[n].pvName[0], NULL_PTR(caCh *), NULL_PTR(void *), 20u, &pvs[n].pvChid) == ECA_NORMAL); + if (!ok) { + REPORT_ERROR(ErrorManagement::FatalError, "ca_create_channel failed for PV with name %s", pvs[n].pvName); + } + } + } + } + + //Allow to write event at the first time! + if (threadContextSet) { + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + bool isNewValue = true; + if (pvs[n].pvType == DBR_STRING) { + if(strcmp((char*)pvs[n].memory,(char*)pvs[n].previousValue)==0){ + isNewValue = false; + continue; + } + if(isNewValue){ + ok = (ca_put(pvs[n].pvType, pvs[n].pvChid, pvs[n].memory) == ECA_NORMAL); + memcpy(pvs[n].previousValue,pvs[n].memory, pvs[n].numberOfElements); + } + } + else { + if(memcmp(pvs[n].memory, pvs[n].previousValue, pvs[n].numberOfElements)==0){ + isNewValue = false; + continue; + } + if(isNewValue){ + ok = (ca_array_put(pvs[n].pvType, pvs[n].numberOfElements, pvs[n].pvChid, pvs[n].memory) == ECA_NORMAL); + memcpy(pvs[n].previousValue, pvs[n].memory, pvs[n].numberOfElements); + } + } + if (!ok) { + REPORT_ERROR(ErrorManagement::FatalError, "ca_put failed for PV: %s", pvs[n].pvName); + } + (void) ca_pend_io(0.1); + } + } + } + + return ok; +} + +bool JAEPICSCAOutput::IsIgnoringBufferOverrun() const { + return (ignoreBufferOverrun == 1u); +} + +CLASS_REGISTER(JAEPICSCAOutput, "1.0") + +} + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAOutput.h b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAOutput.h new file mode 100644 index 0000000..5c2de87 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAOutput.h @@ -0,0 +1,233 @@ +/** + * @file EPICSCAOutput.h + * @brief Header file for class EPICSCAOutput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class EPICSCAOutput + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef JAEPICSCAOutput_H_ +#define JAEPICSCAOutput_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" +#include "JAEPICSCAInput.h" +#include "EmbeddedServiceMethodBinderI.h" +#include "EventSem.h" +#include "SingleThreadService.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +//Maximum size that a PV name may have + +/** + * @brief A DataSource which allows to output data into any number of PVs using the EPICS channel access client protocol. + * Data is asynchronously ca_put in the context of a different thread (w.r.t. to the real-time thread). + * + * The configuration syntax is (names are only given as an example): + * + *
+ * +EPICSCAOutput_1 = {
+ *     Class = EPICSCA::EPICSCAOutput
+ *     StackSize = 1048576 //Optional the EmbeddedThread stack size. Default value is THREADS_DEFAULT_STACKSIZE * 4u
+ *     CPUs = 0xff //Optional the affinity of the EmbeddedThread (where the EPICS context is attached).
+ *     IgnoreBufferOverrun = 1 //Optional. If true no error will be triggered when the thread that writes into EPICS does not consume the data fast enough.
+ *     NumberOfBuffers = 10 //Compulsory. Number of buffers in a circular buffer that asynchronously writes the PV values. Each buffer is capable of holding a copy of all the DataSourceI signals.
+ *     Signals = {
+ *          PV1 = { //At least one shall be defined
+ *             PVName = My::PV1 //Compulsory. Name of the PV.
+ *             Type = uint32 //Compulsory. Supported types are char8[40], string[40], uint8, int8, uint16, int16, int32, uint32, float32 and float64
+ *          }
+ *          ...
+ *     }
+ * }
+ *
+ * 
+ */ +class JAEPICSCAOutput: public DataSourceI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Default constructor. NOOP. + */ + JAEPICSCAOutput(); + + /** + * @brief Destructor. + * @details TODO. + */ + virtual ~JAEPICSCAOutput(); + + /** + * @brief See DataSourceI::AllocateMemory. NOOP. + * @return true. + */ + virtual bool AllocateMemory(); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @return 1. + */ + virtual uint32 GetNumberOfMemoryBuffers(); + + /** + * @brief See DataSourceI::GetSignalMemoryBuffer. + * @pre + * SetConfiguredDatabase + */ + virtual bool GetSignalMemoryBuffer(const uint32 signalIdx, + const uint32 bufferIdx, + void *&signalAddress); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @details Only OutputSignals are supported. + * @return MemoryMapAsyncOutputBroker. + */ + virtual const char8 *GetBrokerName(StructuredDataI &data, + const SignalDirection direction); + + /** + * @brief See DataSourceI::GetInputBrokers. + * @return false. + */ + virtual bool GetInputBrokers(ReferenceContainer &inputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::GetOutputBrokers. + * @details adds a memory MemoryMapOutputBroker instance to the outputBrokers + * @return true. + */ + virtual bool GetOutputBrokers(ReferenceContainer &outputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::PrepareNextState. NOOP. + * @return true. + */ + virtual bool PrepareNextState(const char8 * const currentStateName, + const char8 * const nextStateName); + + /** + * @brief Loads and verifies the configuration parameters detailed in the class description. + * @return true if all the mandatory parameters are correctly specified and if the specified optional parameters have valid values. + */ + virtual bool Initialise(StructuredDataI & data); + + /** + * @brief Final verification of all the parameters. Setup of the memory required to hold all the signals. + * @details This method verifies that all the parameters requested by the GAMs interacting with this DataSource + * are valid and consistent with the parameters set during the initialisation phase. + * In particular the following conditions shall be met: + * - All the signals have the PVName defined + * - All the signals have one of the following types: uint32, int32, float32 or float64. + * @return true if all the parameters are valid and the conditions above are met. + */ + virtual bool SetConfiguredDatabase(StructuredDataI & data); + + /** + * @brief Gets the affinity of the thread which is going to be used to asynchronously write data with ca_put. + * @return the affinity of the thread which is going to be used to asynchronously write data with ca_put. + */ + uint32 GetCPUMask() const; + + /** + * @brief Gets the stack size of the thread which is going to be used to asynchronously write data with ca_put. + * @return the stack size of the thread which is going to be used to asynchronously write data with ca_put. + */ + uint32 GetStackSize() const; + + /** + * @brief Gets the number of buffers in the circular buffer that asynchronously writes the PV values. + * @return the number of buffers in the circular buffer that asynchronously writes the PV values. + */ + uint32 GetNumberOfBuffers() const; + + /** + * @brief Provides the context to execute all the EPICS ca_put calls. + * @details Executes in the context of the MemoryMapAsyncOutputBroker thread the following EPICS calls: + * ca_context_create, ca_create_channel, ca_create_subscription, ca_clear_subscription, + * ca_clear_event, ca_clear_channel, ca_detach_context and ca_context_destroy + * @return true if all the EPICS calls return without any error. + */ + virtual bool Synchronise(); + + /** + * @brief Gets if buffer overruns is being ignored (i.e. the consumer thread which writes into EPICS is not consuming the data fast enough). + * @return if true no error is to be triggered when there is a buffer overrun. + */ + bool IsIgnoringBufferOverrun() const; + + +private: + /** + * List of PVs. + */ + PVWrapper *pvs; + + /** + * The CPU mask for the executor + */ + uint32 cpuMask; + + /** + * The stack size + */ + uint32 stackSize; + + /** + * Stores the configuration information received at Initialise. + */ + ConfigurationDatabase originalSignalInformation; + + /** + * The number of buffers for the circular buffer that flushes data into EPICS + */ + uint32 numberOfBuffers; + + /** + * True once the epics thread context is set + */ + bool threadContextSet; + + /** + * If true no error will be triggered when the data cannot be consumed by the thread doing the caputs. + */ + uint32 ignoreBufferOverrun; +}; +} + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* EPICSCADATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/Makefile.gcc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/Makefile.gcc new file mode 100644 index 0000000..1c65faf --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/Makefile.gcc @@ -0,0 +1,29 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc + +LIBRARIES += -L$(EPICS_BASE)/lib/$(EPICS_HOST_ARCH)/ -lca diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/Makefile.inc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/Makefile.inc new file mode 100644 index 0000000..5b7751f --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/Makefile.inc @@ -0,0 +1,58 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAEPICSCAOutput.x JAEPICSCAInput.x + +PACKAGE=DataSources + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(EPICS_BASE)/include/ +INCLUDES += -I$(EPICS_BASE)/include/os/Linux/ +INCLUDES += -I$(EPICS_BASE)/include/compiler/gcc/ +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L5GAMs + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAEPICSCA$(LIBEXT) \ + $(BUILD_DIR)/JAEPICSCA$(DLLEXT) + echo $(OBJS) + +include depends.$(TARGET) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/Makefile.gcc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/Makefile.gcc new file mode 100644 index 0000000..e0a2fc4 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/Makefile.gcc @@ -0,0 +1,26 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +############################################################# + +include Makefile.inc + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/Makefile.inc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/Makefile.inc new file mode 100644 index 0000000..8bb8ee7 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/Makefile.inc @@ -0,0 +1,42 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +SPB = RandomDataSource.x NI6528.x JAEPICSCA.x + +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults + +ROOT_DIR=.. +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +all: $(OBJS) $(SUBPROJ) check-env + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + +check-env: +ifndef MARTe2_DIR + $(error MARTe2_DIR is undefined) +endif + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/Makefile.gcc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/Makefile.gcc new file mode 100644 index 0000000..29201d0 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/Makefile.gcc @@ -0,0 +1,30 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc + +LIBRARIES += -L$(CODAC_ROOT)/lib/ -lpxi6528 + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/Makefile.inc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/Makefile.inc new file mode 100644 index 0000000..30adbd0 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/Makefile.inc @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=NI6528.x + +PACKAGE=DataSources + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(CODAC_ROOT)/include/ + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/NI6528$(LIBEXT) \ + $(BUILD_DIR)/NI6528$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/NI6528.cpp b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/NI6528.cpp new file mode 100644 index 0000000..49f62b1 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/NI6528.cpp @@ -0,0 +1,141 @@ +/** + * @file NI6528.cpp + * @brief Source file for class NI6528 + * @date 01/03/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class NI6528 (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include +#include +#include +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "CompilerTypes.h" +#include "NI6528.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +NI6528::NI6528() : + MARTe::DataSourceI() { + using namespace MARTe; + previousValue = 0u; + value = 0u; + port = 0u; + boardFileDescriptor = 0; +} + +NI6528::~NI6528() { + using namespace MARTe; + (void) pxi6528_close_device(boardFileDescriptor); +} + +bool NI6528::SetConfiguredDatabase(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = (DataSourceI::SetConfiguredDatabase(data)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "DataSourceI::SetConfiguredDatabas() failed"); + } + if (ok) { + ok = (GetNumberOfSignals() == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetNumberOfSignals() != 1u"); + } + } + if (ok) { + ok = (GetSignalType(0u) == UnsignedInteger8Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetSignalType(0u) != UnsignedInteger8Bit"); + } + } + + return ok; +} + +bool NI6528::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = DataSourceI::Initialise(data); + if (ok) { + ok = data.Read("Port", port); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The Port shall be specified"); + } + } + if (ok) { + ok = data.Read("DeviceName", deviceName); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The DeviceName shall be specified"); + } + } + int32 ret = pxi6528_open_device(&boardFileDescriptor, deviceName.Buffer(), O_NONBLOCK); + ok = (ret == 0); + if (!ok) { + StreamString err = strerror(-ret); + REPORT_ERROR(ErrorManagement::FatalError, "Could not open device (%s) : %s", deviceName.Buffer(), err.Buffer()); + } + return ok; +} + +bool NI6528::Synchronise() { + using namespace MARTe; + if(previousValue != value){ + int32 ret = (pxi6528_write_port(boardFileDescriptor, port, value) > 0); + previousValue = value; + bool ok = (ret > -1); + if (!ok) { + StreamString err = strerror(-ret); + REPORT_ERROR(ErrorManagement::FatalError, "Could not write to device (%s) : %s", deviceName.Buffer(), err.Buffer()); + } + } + + return true; +} + +bool NI6528::AllocateMemory() { + return true; +} + +bool NI6528::GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress) { + signalAddress = &value; + return true; +} + +const MARTe::char8 *NI6528::GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction) { + using namespace MARTe; + return "MemoryMapSynchronisedOutputBroker"; +} + +bool NI6528::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + return true; +} + +CLASS_REGISTER(NI6528, "1.0") + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/NI6528.h b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/NI6528.h new file mode 100644 index 0000000..7074477 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/NI6528.h @@ -0,0 +1,143 @@ +/** + * @file NI6528.h + * @brief Header file for class NI6528 + * @date 07/06/2018 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class NI6528 + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef RANDOM_DATASOURCE_H_ +#define RANDOM_DATASOURCE_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +/** + * @brief NI6528 simplified data source implementation. + * + * The configuration syntax is (names and signal quantities are only given as an example): + * +NI6528 = { + * Class = NI6528 + * DeviceName = "/dev/pxi6528.0" //Mandatory + * Port = 0 //The port where to write + * Signals = { + * currentValue = {Type = uint8} + * bitmask = {Type = uint8} + * Value = {Type = uint8} + * } + * } + */ +class NI6528: public MARTe::DataSourceI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Constructor. NOOP. + */ +NI6528 (); + + /** + * @brief Destructor. NOOP. + */ + virtual ~NI6528(); + + /** + * @brief The configuration data detailed in the class description + * @return true if all the compulsory parameters are set. + */ + virtual bool Initialise(MARTe::StructuredDataI & data); + + /** + * @brief Verifies that at most one signal has been set with the correct type (i.e. any integer). + * @return true if the above conditions are met. + */ + virtual bool SetConfiguredDatabase(MARTe::StructuredDataI & data); + + /** + * @brief @see DataSourceI::Synchronise + */ + virtual bool Synchronise(); + + /** + * @brief @see DataSourceI::AllocateMemory + */ + virtual bool AllocateMemory(); + + /** + * @brief @see DataSourceI::GetSignalMemoryBuffer + */ + virtual bool GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress); + + /** + * @return "MemoryMapSynchronisedInputBroker" + */ + virtual const MARTe::char8 *GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction); + + /** + * @brief NOOP + */ + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName); + +private: + /** + * The previous value to write. + */ + MARTe::uint8 previousValue; + + /** + * The bitmask to write value. (new value) = (current value) || (bitmask) && (write value) + */ + MARTe::uint8 bitmask; + + /** + * The value to write. + */ + MARTe::uint8 value; + + /** + * The port number + */ + MARTe::uint32 port; + + /** + * The board file descriptor + */ + pxi6528_device_t boardFileDescriptor; + + /** + * The device name + */ + MARTe::StreamString deviceName; +}; + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* RANDOM_DATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/Makefile.gcc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/Makefile.inc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/Makefile.inc new file mode 100644 index 0000000..2f1534c --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/Makefile.inc @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=RandomDataSource.x + +PACKAGE=DataSources + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/RandomDataSource$(LIBEXT) \ + $(BUILD_DIR)/RandomDataSource$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/RandomDataSource.cpp b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/RandomDataSource.cpp new file mode 100644 index 0000000..bcfc0b0 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/RandomDataSource.cpp @@ -0,0 +1,146 @@ +/** + * @file RandomDataSource.cpp + * @brief Source file for class RandomDataSource + * @date 01/03/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class RandomDataSource (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "CompilerTypes.h" +#include "RandomDataSource.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +RandomDataSource::RandomDataSource() : + MARTe::DataSourceI() { + using namespace MARTe; + seed = 0u; + signalPtr = NULL_PTR(MARTe::char8 *); + signalTypeDescriptor = UnsignedInteger8Bit; +} + +RandomDataSource::~RandomDataSource() { + using namespace MARTe; + if (signalPtr) { + delete[] signalPtr; + } +} + +bool RandomDataSource::SetConfiguredDatabase(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = (DataSourceI::SetConfiguredDatabase(data)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "DataSourceI::SetConfiguredDatabas() failed"); + } + if (ok) { + ok = (GetNumberOfSignals() == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetNumberOfSignals() != 1u"); + } + } + if (ok) { + signalTypeDescriptor = GetSignalType(0u); + ok = (signalTypeDescriptor.type == UnsignedInteger); + if (!ok) { + ok = (signalTypeDescriptor.type == SignedInteger); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetSignalType(0u) != Un/SignedInteger"); + } + } + + return ok; +} + +bool RandomDataSource::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = DataSourceI::Initialise(data); + if (ok) { + ok = data.Read("Seed", seed); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The Seed shall be specified"); + } + } + + return ok; +} + +bool RandomDataSource::Synchronise() { + using namespace MARTe; + + if (signalTypeDescriptor.numberOfBits == 8u) { + GetValue(); + } + if (signalTypeDescriptor.numberOfBits == 16u) { + GetValue(); + } + if (signalTypeDescriptor.numberOfBits == 32u) { + GetValue(); + } + if (signalTypeDescriptor.numberOfBits == 64u) { + GetValue(); + } + + return true; +} + +bool RandomDataSource::AllocateMemory() { + signalPtr = new MARTe::char8[signalTypeDescriptor.numberOfBits]; + return true; +} + +bool RandomDataSource::GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress) { + signalAddress = &signalPtr[0]; + return true; +} + +const MARTe::char8 *RandomDataSource::GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction) { + using namespace MARTe; + + static bool firstTime = true; + const char8 * broker;// = NULL_PTR(const char8 *); + if (firstTime) { + broker = "MemoryMapSynchronisedInputBroker"; + } + else { + firstTime = false; + broker = "MemoryMapInputBroker"; + } + return broker; +} + +bool RandomDataSource::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + return true; +} + +CLASS_REGISTER(RandomDataSource, "1.0") + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/RandomDataSource.h b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/RandomDataSource.h new file mode 100644 index 0000000..11cade5 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/RandomDataSource.h @@ -0,0 +1,137 @@ +/** + * @file RandomDataSource.h + * @brief Header file for class RandomDataSource + * @date 07/06/2018 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class RandomDataSource + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef RANDOM_DATASOURCE_H_ +#define RANDOM_DATASOURCE_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +/** + * @brief DataDource which generates random numbers against a given seed. + * + * The configuration syntax is (names and signal quantities are only given as an example): + * +RandomDataSource = { + * Class = RandomDataSource + * Seed = 8 //Seed against which the the seed will be generated. Note that each signal + * Signals = { + * Random1 = { //Maximum one signal + * Type = uint64 //All the integer types are supported + * } + * } + * } + */ +class RandomDataSource: public MARTe::DataSourceI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Constructor. NOOP. + */ +RandomDataSource (); + + /** + * @brief Destructor. NOOP. + */ + virtual ~RandomDataSource(); + + /** + * @brief The configuration data detailed in the class description + * @return true if all the compulsory parameters are set. + */ + virtual bool Initialise(MARTe::StructuredDataI & data); + + /** + * @brief Verifies that at most one signal has been set with the correct type (i.e. any integer). + * @return true if the above conditions are met. + */ + virtual bool SetConfiguredDatabase(MARTe::StructuredDataI & data); + + /** + * @brief @see DataSourceI::Synchronise + */ + virtual bool Synchronise(); + + /** + * @brief @see DataSourceI::AllocateMemory + */ + virtual bool AllocateMemory(); + + /** + * @brief @see DataSourceI::GetSignalMemoryBuffer + */ + virtual bool GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress); + + /** + * @return "MemoryMapSynchronisedInputBroker" + */ + virtual const MARTe::char8 *GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction); + + /** + * @brief NOOP + */ + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName); + +private: + /** + * The seed to compute the signals. + */ + MARTe::uint32 seed; + + /** + * The signal pointer + */ + MARTe::char8 *signalPtr; + + /** + * The signal type descriptor. + */ + MARTe::TypeDescriptor signalTypeDescriptor; + + /** + * Compute the random value + */ + template + void GetValue(); + +}; + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ +template +void RandomDataSource::GetValue() { + *(reinterpret_cast(&signalPtr[0u])) = static_cast(rand_r(&seed)); +} + +#endif /* RANDOM_DATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Doc/RTAppStates.xml b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Doc/RTAppStates.xml new file mode 100644 index 0000000..5a244e9 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Doc/RTAppStates.xml @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Doc/StateMachine.txt b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Doc/StateMachine.txt new file mode 100644 index 0000000..1254477 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Doc/StateMachine.txt @@ -0,0 +1,463 @@ +********** +* EXAMLE * +********** + +State1 // RT application state name +========== +1. // Numbered GAMs in order of execution +if (signal_A == 1) // Execution function of the GAM +{ + set signal_B = 3 + change state to State2 +} +---------- + + + +***************** +* RT APP STATES * +***************** + +WaitStandby +========== +1. // DONE +if (EC-GN-P01-GAF:PLC4110-CON-OPGY1 == 0) //If a Gyrotron is not selected by PLC. +{ + change state to Disabled +} +---------- +2. // DONE +if (EC-GN-P01-GPF:PLC4110-YTS-ST1R == 1) //If STANDBY signal come from PLC, start Coil&Fil PSs. +{ + // TODO should these signals be set only once every time this state is entered? + set signal EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP = 1 + set signal EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP = 1 + set signal EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START = 1 +} +---------- +3. // DONE +if (EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB == 1 + AND + EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON > 0 + AND + EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB == 1 + AND + EC-GN-P01-GAF-FHPS:PSU2610-CURR-RB > 0) +{ + change state to Offline +} +---------- + + + +Disabled +========== +1. // DONE +if (EC-GN-P01-GAF:PLC4110-CON-OPGY1 == 1) +{ + change state to WaitStandby +} +---------- + + + +Offline +========== +1. // DONE +if (EC-GN-P01-GAF:PLC4110-CON-OPGY1 == 0) //If Gyrotron selection is turned off. +{ + change state to Disabled +} +---------- +2. // DONE +// If READY signal come from PLC is equal 1, app starts CCPS. +if (EC-GN-P01-GPF:PLC4110-YTS-ST2R == 1 + AND + EC-GN-P01-GAF-CCPS:PLC4110-YON-CCPS1 == 1) +{ + // TODO should this signal be set only once every time this state is entered? + set signal EC-GN-P01-GAF-CCPS:PSU2320-OUTON-SP = 1 +} +---------- +3. // DONE (with a temporary signal that needs to be changed when the record is added) +// TODO: Do we also have to check, that GAM 2. executed? So do we also have to check that EC-GN-P01-GPF:PLC4110-YTS-ST2R == 1? +if (EC-GN-P01-GAF-CCPS:PSU2320-STAT == 1) // TODO: there is no signal named EC-GN-P01-GAF-CCPS:PSU2320-STAT + // MEMO: I need add this record to check whether CCPS in running or stop. +{ + change state to WaitPermit +} +---------- +4. // DONE +// Wait CSV-LOAD trigger. When the app detect it, save data into the app. +if (EC-GN-P01-GAF:STAT-CSV-LOAD == 1) +{ + open csv file (file name: EC-GN-P01-GAF:STAT-CSV-NAME) + load time series data into memory + write data into EPICS waveform PSs.(EC-GN-P01-???:STAT-PREP-WF) // TODO do we realy write first data here or do we wait for PreHeating? + set signal EC-GN-P01-GAF:STAT-CSV-LOADED = 1 // TODO do we write 1 here? + If there is error, write EC-GN-P01-GAF:STAT-CSV-ERROR. // TODO there is no signal named EC-GN-P01-GAF:STAT-CSV-ERROR +} + + +WaitPermit +========== +1. // DONE +if (EC-GN-P01-GAF:PLC4110-CON-OPGY1 == 0) //If Gyrotron is un-selected. +{ + change state to Disabled +} +---------- +2. // DONE +if (EC-GN-P01-GAF:STAT-PREP-MODE == 1 + AND + EC-GN-P01-GAF:PLC4110-CON-GY1PRM == 1) +{ + change state to PreHeating +} +---------- +3. // DONE +if (EC-GN-P01-GAF:STAT-PREP-MODE == 0 + AND + EC-GN-P01-GAF:PLC4110-CON-GY1PRM == 1) +{ + change state to WaitReady +} +---------- +4. // DONE +if (EC-GN-P01-GAF:STAT-CSV-LOAD == 1) +{ + open csv file (file name: EC-GN-P01-GAF:STAT-CSV-NAME) + load time series data into memory + write data into EPICS waveform PSs.(EC-GN-P01-???:STAT-PREP-WF) + set signal EC-GN-P01-GAF:STAT-CSV-LOADED = 1 + If there is error, write EC-GN-P01-GAF:STAT-CSV-ERROR. +} + +PreHeating +========== +1. // DONE +every 10 ms do +{ + else + { + // TODO do we use float32 for the type of waveform signals? + // TODO is this the right order of columns? Time point is in column 1. + // TODO on what signal do we write time? + set signal EC-GN-P01-PB1F:PSU1000-EREF = setpoint column 2 + set signal EC-GN-P01-PA1F:PSU3000-EREF = setpoint column 3 // TODO there are two EC-GN-P01-PA1F:PSU3000-EREF signals. One ending with -P and one with -N. + set signal EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET = setpoint column 4 + set signal EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET = setpoint column 5 + set signal EC-GN-P01-GAF-FHPS:PSU2320-EREF = setpoint column 6 + } +} +---------- +2. // DONE +if (time == 0) +{ + change state to WaitReady +} +---------- + + +WaitReady +========== +1. // DONE +if (EC-GN-P01-PB1F:PSU1000-YSTA == 1 + AND + EC-GN-P01-PA1F:PSU3000-YSTA == 1) +{ + change state to WaitHVON +} +---------- + + +WaitHVON +========== +1. // DONE +if (EC-GN-P01-GPF:PLC4110-YTS-ST3R == 1)// Check ON signal from PLC. This signal come when PLC check the operation operation possible conditions. +{ + change state to HVArming +} +---------- +2. // DONE +if (EC-GN-P01-GPF:PLC4110-YTS-ST3R == 1) +{ + start HVON timer +} +---------- + + + +HVArming //HVArming is a state to startup HV generation in APS and BPS. +========== +1. +at specified time // TODO: Where do I get this specified time? And is it a countdown time or what? + // MEMO: Time is specified by PVs (EC-GN-P01-PB1F:STAT-DT-HVON). When app detect HVON from PLC, it is t=0. +{ + set signal EC-GN-P01-PB1F:PSU1000-CON-HV = 1 +} +---------- +2. +at specified time // TODO: Where do I get this specified time? And is it a countdown time or what? + // MEMO: Time is specified by PVs (EC-GN-P01-PA1F:STAT-DT-HVON) +{ + set signal EC-GN-P01-PA1F:PSU3000-CON-HV = 1 +} +---------- +3. +if (EC-GN-P01-PB1F:PSU1000-CON-HV == 1 + AND + EC-GN-P01-PA1F:PSU3000-CON-HV == 1 + AND + EC-GN-P01-GPF::PLC4110-YSTA-MPSS == 0) // MEMO: Both HV PVs are 1. i.e.Both PSs are charged HV. and is in async mode. +{ + change state to HVArmed +} +---------- +4. +if (EC-GN-P01-PB1F:PSU1000-CON-HV == 1 + AND + EC-GN-P01-PA1F:PSU3000-CON-HV == 1 + AND + EC-GN-P01-GPF::PLC4110-YSTA-MPSS == 1) // MEMO: HVPS HVs are ON and is in SYNC mode. +{ + Change state to HVArmedESDN +} +---------- +5. + count up elapsed time (time from HVON detection) + Write time to EC-GN-P01-GAF:STAT-ELAPSED + + +HVArmed +========== +1. +if (EC-GN-P01-GPF:PLC4110-YTS-ST3R == 0) // TODO: when do we go from HVArmed to Offline? + // MEMO: move to Offline when ON signal from PLC is turned off. +{ + change state to Offline +} +---------- +2. +// TODO: "(Entry) Write EC-GN-P01-GAF:PCF4210-YTS-GA1" What does Entry mean? Does it mean to do something +// only on the first cycle when we enter this state? What do I write to signal EC-GN-P01-GAF:PCF4210-YTS-GA1? +// MEMO: EC-GN-P01-GAF:PCF4210-YTS-GA1 is a PV that fast controller notifies Gyrotron operation state to PLC. +// When enter the HVArmed state, App writes 1 to this EPICS PV. +---------- +3. +if (EC-GN-P01-PB1F:PSU1000-CON-SW == 1) // TODO: when do we go from HVArmed to HVInjectionBPS? + // MEMO: If MHVPS HV is turned ON first, goto this state. +{ + change state to HVInjectionBPS +} +---------- +4. +if (EC-GN-P01-PMF:PSU0000-CON-SW == 1) // TODO: when do we go from HVArmed to HVInjectionMHVPS? + // MEMO: If BPS HV is turned ON first, goto this state. +{ + change state to HVInjectionMHVPS +} +---------- +5. + count up elapsed time (time from HVON detection) + Write time to EC-GN-P01-GAF:STAT-ELAPSED +---------- +6. +if (EC-GN-P01-GPF::PLC4110-YSTA-MPSS == 1) //When SYNC mode turned ON. +{ + change state to HVArmedESDN +} +---------- + +HVArmedESDN // Start ESDN command, waveform subscription. +========== +1. +if (EC-GN-P01-GPF:PLC4110-YTS-ST3R == 0) +{ + change state to Offline +} +---------- +2. +if (EC-GN-P01-PB1F:PSU1000-CON-SW == 1) +{ + change state to HVInjectionBPSESDN +} +---------- +3. +if (EC-GN-P01-PMF:PSU0000-CON-SW == 1) +{ + change state to HVInjectionMHVPSESDN +} +---------- +4. + count up elapsed time (time from HVON detection) + Write time to EC-GN-P01-GAF:STAT-ELAPSED +---------- +6. +if (EC-GN-P01-GPF::PLC4110-YSTA-MPSS == 0) //When SYNC mode turned ON. +{ + change state to HVArmed +} +---------- + +HVInjectionBPS +========== +HVInjectionMHVPS +========== +1. +// MEMO: Write Gyrotron state PV (HVInjection) to notify PLC. +Write 1 to EC-GN-P01-GAF:PCF4210-YTS-GA2. +---------- +// TODO: Following questions/states are for ALL of the above states +2. (Exist in HVInjection BPS) +set signal EC-GN-P01-PA1F:PSU3000-CON-SW = 1 // TODO when do we set this signal +// MEMO: Countdown time for EC-GN-P01-PA1F:STAT-DT-SWON +---------- +2. (Exist in HVInjection MHVPS) +set signal EC-GN-P01-PB1F:PSU1000-CON-SW = 1 // TODO when do we set this signal +// MEMO: Countdown time for EC-GN-P01-PB1F:STAT-DT-SWON +---------- +3. +set signal EC-GN-P01-PMF:PSU0000-CON-SW = 1 // TODO when do we set this signal +// MEMO: Countdown time for EC-GN-P01-PMF:STAT-DT-SWON +---------- +4. +// TODO when to switch to RFON? +// MEMO: Go to RFON state when All switch PVs are 1. and the mode is async. +if (EC-GN-P01-PA1F:PSU3000-CON-SW == 1 AND + EC-GN-P01-PB1F:PSU1000-CON-SW == 1 AND + EC-GN-P01-PMF:PSU0000-CON-SW == 1) +{ + change state to RFON +} +---------- +5. + count up elapsed time (time from HVON detection) + Write time to EC-GN-P01-GAF:STAT-ELAPSED +---------- + +HVInjectionESDN +========== +1. +// MEMO: Write Gyrotron state PV (HVInjection) to notify PLC. +Write 1 to EC-GN-P01-GAF:PCF4210-YTS-GA2. +---------- +2. +set signal EC-GN-P01-PA1F:PSU3000-CON-SW = 1 +// Write 1 when ESDN command give a command. +---------- +3. +set signal EC-GN-P01-PB1F:PSU1000-CON-SW = 1 +// Write 1 when ESDN command give a command. +---------- +4. +set signal EC-GN-P01-PMF:PSU0000-CON-SW = 1 +// Write 1 when ESDN command give a command. +---------- +5. +// TODO when to switch to RFONESDN? +// MEMO: Go to RFON state when All switch PVs are 1. and the mode is sync.i,e. change from HVInjectionxxxESDN +if (EC-GN-P01-PA1F:PSU3000-CON-SW == 1 AND + EC-GN-P01-PB1F:PSU1000-CON-SW == 1 AND + EC-GN-P01-PMF:PSU0000-CON-SW == 1) +{ + change state to RFONESDN +} +---------- + +RFON +========== +// TODO is this correct? +1. +// This only executes on the last cycle before we move to HVArmed +if (EC-GN-P01-GAF:STAT-BEAMON-TIME >= EC-GN-P01-GAF:STAT-DT-SHOTLEN) +{ + set signal EC-GN-P01-PA1F:PSU3000-CON-SW = 0 + set signal EC-GN-P01-PB1F:PSU1000-CON-SW = 0 + set signal EC-GN-P01-PMF:PSU0000-CON-SW = 0 +} +---------- +2. +if (EC-GN-P01-GAF:STAT-BEAMON-TIME >= EC-GN-P01-GAF:STAT-DT-SHOTLEN) +{ + change state to HVArmed +} +---------- +3. + count up elapsed time (time from HVON detection) + Write time to EC-GN-P01-GAF:STAT-ELAPSED +---------- +4. +When enter the state beam-on timer is set to 0. +count up beam-on time. write the time into EC-GN-P01-GAF:STAT-BEAMON-TIME +---------- + + + +RFONESDN +========== +// TODO is this correct? +// MEMO: In the ESDN sync mode, HVPS turned off by ESDN packet. +// In both mode, there is mode_limit which is given by (EC-GN-P01-GPF:PLC4110-YTS-MD1,2,3,4). +1. +// This only executes on the last cycle before we move to HVArmed +if (EC-GN-P01-GAF:STAT-BEAMON-TIME >= t_mode_limit) // TODO: where do I get t_mode_limit? +{ + set signal EC-GN-P01-PA1F:PSU3000-CON-SW = 0 + set signal EC-GN-P01-PB1F:PSU1000-CON-SW = 0 + set signal EC-GN-P01-PMF:PSU0000-CON-SW = 0 +} +---------- +2. +if (EC-GN-P01-GAF:STAT-BEAMON-TIME >= t_mode_limit) // TODO: where do I get t_mode_limit? +{ + change state to HVArmedESDN +} +---------- +3. +Subscribe ESDN commands. When GAM detect Beam-off command. It turn all HVPS SW OFF. +And change state to HVArmedESDN +---------- +4. + count up elapsed time (time from HVON detection) + Write time to EC-GN-P01-GAF:STAT-ELAPSED +---------- +5. +When enter the state beam-on timer is set to 0. +count up beam-on time. write the time into EC-GN-P01-GAF:STAT-BEAMON-TIME +---------- + + +Error +========== +1. +// Only execute on the first cycle after entering this state +if (first) +{ + set first = false + + set signal EC-GN-P01-PA1F:PUS3000-CON-HV = 0 // TODO: there is no signal named EC-GN-P01-PA1F:PUS3000-CON-HV + set signal EC-GN-P01-PA1F:PSU3000-CON-SW = 0 + set signal EC-GN-P01-PB1F:PSU1000-CON-HV = 0 + set signal EC-GN-P01-PB1F:PSU1000-CON-SW = 0 + set signal EC-GN-P01-PMF:PSU0000-CON-SW = 0 + // MEMO: PA2F and PB2F are component type for gyrotron B. I will remove following action. + set signal EC-GN-P01-PA2F:PUS4000-CON-HV = 0 // TODO: there is no signal named EC-GN-P01-PA2F:PUS4000-CON-HV + set signal EC-GN-P01-PA2F:PSU4000-CON-SW = 0 // TODO: signal EC-GN-P01-PA2F:PSU4000-CON-SW missing in configuration file + set signal EC-GN-P01-PB2F:PSU2000-CON-HV = 0 // TODO: signal EC-GN-P01-PB2F:PSU2000-CON-HV missing in configuration file + set signal EC-GN-P01-PB2F:PSU2000-CON-SW = 0 // TODO: signal EC-GN-P01-PB2F:PSU2000-CON-SW missing in configuration file + + set signal EC-GN-P01-PMF:PSU0000-CON-SW = 1 + set signal EC-GN-P01-PA1F:PSU3000-CTRP = 1 + set signal EC-GN-P01-PB1F:PSU1000-CTRP = 1 + // MEMO: PA2F and PB2F are component type for gyrotron B. I will remove following action. + set signal EC-GN-P01-PA2F:PSU4000-CTRP = 1 // TODO: signal EC-GN-P01-PA2F:PSU4000-CTRP missing in configuration file + set signal EC-GN-P01-PB2F:PSU1000-CTRP = 1 // TODO: there is no signal named EC-GN-P01-PB2F:PSU1000-CTRP +} +---------- +2. +if (EC-GN-P01-GPF:STAT-RST-FLT == 1 && ) // TODO: when do we go to Offline state? +{ + change state to Offline +} +---------- diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/JABitReverseGAM.cpp b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/JABitReverseGAM.cpp new file mode 100644 index 0000000..dd322b8 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/JABitReverseGAM.cpp @@ -0,0 +1,123 @@ +/** + * @file JABitReverseGAM.cpp + * @brief Source file for class JABitReverseGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JABitReverseGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JABitReverseGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JABitReverseGAM::JABitReverseGAM() { + //Input signals. + input1 = NULL_PTR(MARTe::uint8 *); + + //Output signals. + output1= NULL_PTR(MARTe::uint8 *); +} + +JABitReverseGAM::~JABitReverseGAM() { +} + +bool JABitReverseGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + return ok; +} + +bool JABitReverseGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JABitReverseGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == 1u); + if (ok) { + ok = (numberOfOutputSignals == 1u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "One output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "One input signals shall be defined"); + } + // Do type check for input signals. + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = ((inputType == UnsignedInteger8Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint8.", signalName.Buffer()); + } + + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = ((outputType == UnsignedInteger8Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint8.", signalName.Buffer()); + } + } + } + // Do type cast. + if (ok) { + input1 = reinterpret_cast(GetInputSignalMemory(0)); + + output1 = reinterpret_cast(GetOutputSignalMemory(0)); + } + return ok; +} + +bool JABitReverseGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + *output1 = ~(*input1); + return true; +} + +CLASS_REGISTER(JABitReverseGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/JABitReverseGAM.h b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/JABitReverseGAM.h new file mode 100644 index 0000000..1d2bbcf --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/JABitReverseGAM.h @@ -0,0 +1,75 @@ +/** + * @file JABitReverseGAM.h + * @brief Header file for class JABitReverseGAM + * @date Mar 18, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JABitReverseGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JABitReverseGAM_H_ +#define GAMS_JABitReverseGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +class JABitReverseGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JABitReverseGAM(); + + virtual ~JABitReverseGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + + // Input signals + MARTe::uint8 *input1; + + // Output signals + MARTe::uint8 *output1; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JABitReverseGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/Makefile.inc new file mode 100644 index 0000000..e764f01 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JABitReverseGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JABitReverseGAM$(LIBEXT) \ + $(BUILD_DIR)/JABitReverseGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/JABitSumGAM.cpp b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/JABitSumGAM.cpp new file mode 100644 index 0000000..7c75cd1 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/JABitSumGAM.cpp @@ -0,0 +1,143 @@ +/** + * @file JABitSumGAM.cpp + * @brief Source file for class JABitSumGAM + * @date Feb 10, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JABitSumGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JABitSumGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JABitSumGAM::JABitSumGAM() { + //Input signals. + input0 = NULL_PTR(MARTe::uint32 *); + input1 = NULL_PTR(MARTe::uint32 *); + input2 = NULL_PTR(MARTe::uint32 *); + input3 = NULL_PTR(MARTe::uint32 *); + input4 = NULL_PTR(MARTe::uint32 *); + input5 = NULL_PTR(MARTe::uint32 *); + input6 = NULL_PTR(MARTe::uint32 *); + input7 = NULL_PTR(MARTe::uint32 *); + + //Output signals. + output= NULL_PTR(MARTe::uint8 *); +} + +JABitSumGAM::~JABitSumGAM() { +} + +bool JABitSumGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (!ok){ + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "ParametersError in init."); + } + return ok; +} + +bool JABitSumGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JABitSumGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == 8u); + if (ok) { + ok = (numberOfOutputSignals == 1u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "One output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Eight input signals shall be defined"); + } + // Do type check for input signals. + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32.", signalName.Buffer()); + } + + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint8.", signalName.Buffer()); + } + } + } + // Do type cast. + if (ok) { + input0 = reinterpret_cast(GetInputSignalMemory(0)); + input1 = reinterpret_cast(GetInputSignalMemory(1)); + input2 = reinterpret_cast(GetInputSignalMemory(2)); + input3 = reinterpret_cast(GetInputSignalMemory(3)); + input4 = reinterpret_cast(GetInputSignalMemory(4)); + input5 = reinterpret_cast(GetInputSignalMemory(5)); + input6 = reinterpret_cast(GetInputSignalMemory(6)); + input7 = reinterpret_cast(GetInputSignalMemory(7)); + + output = reinterpret_cast(GetOutputSignalMemory(0)); + } + + return ok; +} + +bool JABitSumGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + *output = *input0 + *input1*2 + *input2*4 + *input3*8 + *input4*16 + + *input5*32 + *input6*64 + *input7*128; + + return true; +} + +CLASS_REGISTER(JABitSumGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/JABitSumGAM.h b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/JABitSumGAM.h new file mode 100644 index 0000000..462f62b --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/JABitSumGAM.h @@ -0,0 +1,81 @@ +/** + * @file JABitSumGAM.h + * @brief Header file for class JABitSumGAM + * @date Feb 10, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JABitSumGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JABitSumGAM_H_ +#define GAMS_JABitSumGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include "stdio.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +class JABitSumGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JABitSumGAM(); + + virtual ~JABitSumGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + // Input signals + MARTe::uint32 *input0; + MARTe::uint32 *input1; + MARTe::uint32 *input2; + MARTe::uint32 *input3; + MARTe::uint32 *input4; + MARTe::uint32 *input5; + MARTe::uint32 *input6; + MARTe::uint32 *input7; + + // Output signals + MARTe::uint8 *output; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JABitSumGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/Makefile.inc new file mode 100644 index 0000000..42b3063 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JABitSumGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JABitSumGAM$(LIBEXT) \ + $(BUILD_DIR)/JABitSumGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.cpp b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.cpp new file mode 100644 index 0000000..99ba1f5 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.cpp @@ -0,0 +1,309 @@ +/** + * @file JAConditionalSignalUpdateGAM.cpp + * @brief Source file for class JAConditionalSignalUpdateGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAConditionalSignalUpdateGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAConditionalSignalUpdateGAM.h" +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAConditionalSignalUpdateGAM::JAConditionalSignalUpdateGAM() { + inputSignals = NULL_PTR(void **); + inputSignalTypes = NULL_PTR(MARTe::TypeDescriptor *); + values = NULL_PTR(MARTe::uint32 *); + valuesCount = 0u; + outputSignals = NULL_PTR(MARTe::uint32 **); + defaultValues = NULL_PTR(MARTe::uint32 **); + needsReset = false; + expectedValues = NULL_PTR(MARTe::uint32 *); + expectedValuesCount = 0u; + operation = And; + comparators = NULL_PTR(ComparisonMode *); +} + +JAConditionalSignalUpdateGAM::~JAConditionalSignalUpdateGAM() { + if (outputSignals != NULL_PTR(MARTe::uint32 **)) { + delete[] outputSignals; + } + if (inputSignals != NULL_PTR(void **)) { + delete[] inputSignals; + } + if (inputSignalTypes != NULL_PTR(MARTe::TypeDescriptor *)) { + delete[] inputSignalTypes; + } + if (values != NULL_PTR(MARTe::uint32 *)) { + delete[] values; + } + if (comparators != NULL_PTR(ComparisonMode *)) { + delete[] comparators; + } + if (defaultValues != NULL_PTR(MARTe::uint32 **)) { + delete[] defaultValues; + } +} + +bool JAConditionalSignalUpdateGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + // Read expected values. + AnyType valuesArray = data.GetType("ExpectedValues"); + + if (valuesArray.GetDataPointer() != NULL) { + expectedValuesCount = valuesArray.GetNumberOfElements(0u); + + expectedValues = new uint32[expectedValuesCount]; + + Vector valuesVector(expectedValues, expectedValuesCount); + ok = (data.Read("ExpectedValues", valuesVector)); + } + } + if (ok) { + // Read comparators. + AnyType comparatorsArray = data.GetType("Comparators"); + if (comparatorsArray.GetDataPointer() != NULL) { + uint32 count; + if (ok) { + count = comparatorsArray.GetNumberOfElements(0u); + ok = count == expectedValuesCount; + } + if (ok) { + comparators = new ComparisonMode[count]; + StreamString* comp = new StreamString[count]; + Vector compVector(comp, count); + + ok = (data.Read("Comparators", compVector)); + + if (ok) { + for (uint32 i = 0; i < count; ++i) { + if (comp[i] == "EQUALS") { + comparators[i] = Equals; + } else if (comp[i] == "NOT") { + comparators[i] = Not; + } else if (comp[i] == "GREATER") { + comparators[i] = Greater; + } else if (comp[i] == "EQUALS_OR_GREATER") { + comparators[i] = EqualsOrGreater; + } else if (comp[i] == "LESS") { + comparators[i] = Less; + } else if (comp[i] == "EQUALS_OR_LESS") { + comparators[i] = EqualsOrLess; + } else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Comparator %s is not defined.", comp[i].Buffer()); + } + } + } + delete[] comp; + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Expected values and operators shall have the same " + "number of elements."); + } + } else { + // Create default comparators (equals) when they aren't provided in the configuration. + comparators = new ComparisonMode[expectedValuesCount]; + for (uint32 i = 0; i < expectedValuesCount; ++i) { + comparators[i] = Equals; + } + } + } + if (ok) { + MARTe::StreamString operationStr; + if (data.Read("Operation", operationStr)) { + if (operationStr == "AND") { + operation = And; + } + else if (operationStr == "OR") { + operation = Or; + } + else if (operationStr == "NOR") { + operation = Nor; + } + else if (operationStr == "XOR") { + operation = Xor; + } + else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Operation %s is not defined", operationStr.Buffer()); + } + } + } + if (ok) { + // Read output signal values to be set. + AnyType valuesArray = data.GetType("Values"); + ok = (valuesArray.GetDataPointer() != NULL); + + if (ok) { + valuesCount = valuesArray.GetNumberOfElements(0u); + ok = valuesCount > 0u; + } + if (ok) { + values = new uint32[valuesCount]; + + Vector valuesVector(values, valuesCount); + ok = (data.Read("Values", valuesVector)); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Values shall be defined."); + } + } + return ok; +} + +bool JAConditionalSignalUpdateGAM::Setup() { + using namespace MARTe; + bool ok = numberOfInputSignals == (expectedValuesCount + numberOfOutputSignals); + if (ok) { + inputSignals = new void*[expectedValuesCount]; + defaultValues = new uint32*[numberOfOutputSignals]; + uint32 i; + for (i = 0u; i < expectedValuesCount; i++) { + inputSignals[i] = GetInputSignalMemory(i); + } + for (; i < numberOfInputSignals; i++) { + defaultValues[i - expectedValuesCount] = reinterpret_cast(GetInputSignalMemory(i)); + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Number of input signals shall be equal to number " + "of expected values plus number of output signals."); + } + if (ok) { + inputSignalTypes = new TypeDescriptor[expectedValuesCount]; + uint32 i; + for (i = 0u; (i < expectedValuesCount) && (ok); i++) { + inputSignalTypes[i] = GetSignalType(InputSignals, i); + ok = ((inputSignalTypes[i] == UnsignedInteger32Bit) || (inputSignalTypes[i] == UnsignedInteger16Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, i, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint16", signalName.Buffer()); + } + } + } + if (ok) { + ok = numberOfOutputSignals == valuesCount; + if (ok) { + ok = numberOfOutputSignals > 0u; + if (ok) { + outputSignals = new uint32*[numberOfOutputSignals]; + uint32 i; + for (i = 0u; i < numberOfOutputSignals; i++) { + outputSignals[i] = reinterpret_cast(GetOutputSignalMemory(i)); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one output signal shall be defined"); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Number of output signals shall be the same as " + "number of provided values."); + } + } + + return ok; +} + +bool JAConditionalSignalUpdateGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + needsReset = false; + return true; +} + +bool JAConditionalSignalUpdateGAM::Execute() { + if (!needsReset) { + bool eventDetected = expectedValuesCount == 0; + if (!eventDetected) { + if (operation == Or) { + MARTe::uint32 j; + for (j = 0; (j < expectedValuesCount) && (!eventDetected); j++) { + eventDetected = Compare(j); + } + } + else if (operation == Nor) { + MARTe::uint32 j; + for (j = 0; (j < expectedValuesCount) && (!eventDetected); j++) { + eventDetected = Compare(j); + } + eventDetected = !eventDetected; + } + else if (operation == And) { + MARTe::uint32 j; + eventDetected = Compare(0); + for (j = 1; (j < expectedValuesCount); j++) { + eventDetected &= Compare(j); + } + } + else if (operation == Xor) { + MARTe::uint32 j; + MARTe::uint32 eventDetectedUint32; + if (inputSignalTypes[0] == MARTe::UnsignedInteger32Bit) { + eventDetectedUint32 = *static_cast(inputSignals[0]); + } + else { + eventDetectedUint32 = *static_cast(inputSignals[0]); + } + for (j = 1; (j < expectedValuesCount); j++) { + eventDetectedUint32 ^= Compare(j); + } + eventDetected = (eventDetectedUint32 == 1u); + } + } + if (eventDetected) { + needsReset = true; + MARTe::uint32 i; + for (i = 0u; i < numberOfOutputSignals; ++i) { + *outputSignals[i] = values[i]; + MARTe::StreamString signalName; + (void) GetSignalName(MARTe::OutputSignals, i, signalName); + } + } + else { + MARTe::uint32 i; + for (i = 0u; i < numberOfOutputSignals; ++i) { + *outputSignals[i] = *defaultValues[i]; + } + } + } + return true; +} + +bool JAConditionalSignalUpdateGAM::Compare(MARTe::uint32 index) { + if (inputSignalTypes[index] == MARTe::UnsignedInteger32Bit) { + return Compare(index); + } + return Compare(index); +} + +CLASS_REGISTER(JAConditionalSignalUpdateGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.h b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.h new file mode 100644 index 0000000..2cf5c5d --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.h @@ -0,0 +1,180 @@ +/** + * @file JAConditionalSignalUpdateGAM.h + * @brief Header file for class JAConditionalSignalUpdateGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAConditionalSignalUpdateGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JACONDITIONALSIGNALUPDATEGAM_H_ +#define GAMS_JACONDITIONALSIGNALUPDATEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that writes predefined values to output signals when a condition is met. + * If there are no conditional signals provided, the condition is presumed to be met. + * + * +ASYNCShotlengthControlGAM = { + * Class = JAConditionalSignalUpdateGAM + * Operation = OR // Logical operation performed between conditional signals + * // Supported values: AND, OR, XOR, NOR + * // Default: AND + * ExpectedValues = {1 1} // Values to which conditional signals will be compared. + * Comparators = {EQUALS EQUALS} // Operator between conditional signal an expected value + * // Supported values: EQUALS, NOT, GREATER, EQUALS_OR_GREATER, LESS, EQUALS_OR_LESS + * // Default: EQUALS + * Values = {0 3} // Values that will be written to output signals when condition is met. + * InputSignals = { + * // Conditional Signals + * SHOTLEN_FLAG = { + * DataSource = DDB1 + * Type = uint32 + * } + * MODE_SHOTLEN_FLAG = { + * DataSource = DDB1 + * Type = uint32 + * } + * // Default values (set to output signals before the condition is met) + * APS_SWON = { // APS_SWON will keep the value from previous state. + * DataSource = DDB1 + * Type = uint32 + * } + * BPS_SWON_DEFAULT = { // BPS_SWON will be set to 7 before condition is met. + * DataSource = DDB1 + * Type = uint32 + * Default = 7 + * } + * } + * OutputSignals = { + * APS_SWON = { + * DataSource = DDB1 + * Type = uint32 + * } + * BPS_SWON = { + * DataSource = DDB1 + * Type = uint32 + * } + * } + * } + */ +class JAConditionalSignalUpdateGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAConditionalSignalUpdateGAM(); + + virtual ~JAConditionalSignalUpdateGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + /** + * @brief Does the input signal at provided index have the expected value. + * @param[in] index of the signal. + * @return true if the signal has expected value. + */ + bool Compare(MARTe::uint32 index); + + template + bool Compare(MARTe::uint32 index); + + enum OperationMode { + And, Or, Xor, Nor + }; + + enum ComparisonMode { + Equals, Not, Greater, EqualsOrGreater, Less, EqualsOrLess + }; + + // Input signals + void **inputSignals; + + MARTe::TypeDescriptor *inputSignalTypes; + + // Condition operation. + OperationMode operation; + + // Array of expected values of input signals. + MARTe::uint32* expectedValues; + + // Expected values count (must be equal to numberOfInputSignals) + MARTe::uint32 expectedValuesCount; + + // Array of comparators + ComparisonMode* comparators; + + // Values to be written on output signals when input signal has the expected value. + MARTe::uint32 *values; + + // Number of values (must be equal to numberOfOutputSignals) + MARTe::uint32 valuesCount; + + // Output signals + MARTe::uint32 **outputSignals; + + // Default values of output signals + MARTe::uint32 **defaultValues; + + // Were output signals already set and we are waiting for a state change before they are set again. + bool needsReset; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +template +bool JAConditionalSignalUpdateGAM::Compare(MARTe::uint32 index) { + switch (comparators[index]) { + case Equals: + return *static_cast(inputSignals[index]) == static_cast(expectedValues[index]); + case Not: + return *static_cast(inputSignals[index]) != static_cast(expectedValues[index]); + case Greater: + return *static_cast(inputSignals[index]) > static_cast(expectedValues[index]); + case EqualsOrGreater: + return *static_cast(inputSignals[index]) >= static_cast(expectedValues[index]); + case Less: + return *static_cast(inputSignals[index]) < static_cast(expectedValues[index]); + default: // case EqualsOrLess: + return *static_cast(inputSignals[index]) <= static_cast(expectedValues[index]); + } +} + +#endif /* GAMS_JACONDITIONALSIGNALUPDATEGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/Makefile.inc new file mode 100644 index 0000000..c66a7fd --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/Makefile.inc @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAConditionalSignalUpdateGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAConditionalSignalUpdateGAM$(LIBEXT) \ + $(BUILD_DIR)/JAConditionalSignalUpdateGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/JAMessageGAM.cpp b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/JAMessageGAM.cpp new file mode 100644 index 0000000..50ca308 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/JAMessageGAM.cpp @@ -0,0 +1,347 @@ +/** + * @file JAMessageGAM.cpp + * @brief Source file for class JAMessageGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAMessageGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "JAMessageGAM.h" +#include "MessageI.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +template +bool Compare(JAMessageGAM::ComparisonMode comparator, void *inputSignal, U expectedValue) { + switch (comparator) { + case JAMessageGAM::Equals: + return *static_cast(inputSignal) == expectedValue; + case JAMessageGAM::Not: + return *static_cast(inputSignal) != expectedValue; + case JAMessageGAM::Greater: + return *static_cast(inputSignal) > expectedValue; + case JAMessageGAM::EqualsOrGreater: + return *static_cast(inputSignal) >= expectedValue; + case JAMessageGAM::Less: + return *static_cast(inputSignal) < expectedValue; + default: // case EqualsOrLess: + return *static_cast(inputSignal) <= expectedValue; + } +} + +JAMessageGAM::JAMessageGAM() { + inputSignals = NULL_PTR(void **); + inputSignalTypes = NULL_PTR(MARTe::TypeDescriptor *); + operation = And; + needsReset = false; + expectedValuesInt = NULL_PTR(MARTe::uint64 *); + expectedValuesFloat = NULL_PTR(MARTe::float64 *); + intValuesCount = 0u; + floatValuesCount = 0u; + comparators = NULL_PTR(ComparisonMode *); +} + +JAMessageGAM::~JAMessageGAM() { + if (inputSignals != NULL_PTR(void **)) { + delete[] inputSignals; + } + if (inputSignalTypes != NULL_PTR(MARTe::TypeDescriptor *)) { + delete[] inputSignalTypes; + } + if (expectedValuesInt != NULL_PTR(MARTe::uint64 *)) { + delete[] expectedValuesInt; + } + if (expectedValuesFloat != NULL_PTR(MARTe::float64 *)) { + delete[] expectedValuesFloat; + } + if (comparators != NULL_PTR(ComparisonMode *)) { + delete[] comparators; + } +} + +bool JAMessageGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + // Read expected integer values. + AnyType valuesArray = data.GetType("ExpectedIntValues"); + bool intValuesProvided = (valuesArray.GetDataPointer() != NULL); + + if (intValuesProvided) { + intValuesCount = valuesArray.GetNumberOfElements(0u); + } + if (intValuesProvided) { + expectedValuesInt = new uint64[intValuesCount]; + + Vector valuesVector(expectedValuesInt, intValuesCount); + ok = (data.Read("ExpectedIntValues", valuesVector)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Failed to read ExpectedIntValues."); + return ok; + } + } + // Read expected float values. + valuesArray = data.GetType("ExpectedFloatValues"); + bool floatValuesProvided = (valuesArray.GetDataPointer() != NULL); + + if (floatValuesProvided) { + floatValuesCount = valuesArray.GetNumberOfElements(0u); + } + if (floatValuesProvided) { + expectedValuesFloat = new float64[floatValuesCount]; + + Vector valuesVector(expectedValuesFloat, floatValuesCount); + ok = (data.Read("ExpectedFloatValues", valuesVector)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Failed to read ExpectedFloatValues."); + return ok; + } + } + + ok = (floatValuesCount + intValuesCount) > 0u; + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "ExpectedFloatValues and or ExpectedIntValues shall be defined."); + } + } + if (ok) { + // Read comparators. + AnyType comparatorsArray = data.GetType("Comparators"); + if (comparatorsArray.GetDataPointer() != NULL) { + uint32 count = comparatorsArray.GetNumberOfElements(0u); + ok = count == (intValuesCount + floatValuesCount); + if (ok) { + comparators = new ComparisonMode[count]; + StreamString* comp = new StreamString[count]; + Vector compVector(comp, count); + + ok = (data.Read("Comparators", compVector)); + + if (ok) { + for (uint32 i = 0; i < count; ++i) { + if (comp[i] == "EQUALS") { + comparators[i] = Equals; + } else if (comp[i] == "NOT") { + comparators[i] = Not; + } else if (comp[i] == "GREATER") { + comparators[i] = Greater; + } else if (comp[i] == "EQUALS_OR_GREATER") { + comparators[i] = EqualsOrGreater; + } else if (comp[i] == "LESS") { + comparators[i] = Less; + } else if (comp[i] == "EQUALS_OR_LESS") { + comparators[i] = EqualsOrLess; + } else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Comparator %s is not defined.", comp[i].Buffer()); + } + } + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Expected values and operators shall have the same " + "number of elements."); + } + } else { + uint32 count = intValuesCount + floatValuesCount; + if (ok) { + // Create default comparators (equals) when they aren't provided in the configuration. + comparators = new ComparisonMode[count]; + for (uint32 i = 0; i < count; ++i) { + comparators[i] = Equals; + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Expected values and operators shall have the same " + "number of elements."); + } + } + } + if (ok) { + MARTe::StreamString operationStr; + if (data.Read("Operation", operationStr)) { + if (operationStr == "AND") { + operation = And; + } + else if (operationStr == "OR") { + operation = Or; + } + else if (operationStr == "NOR") { + operation = Nor; + } + else if (operationStr == "XOR") { + operation = Xor; + } + else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Operation %s is not defined", operationStr.Buffer()); + } + } + } + if (ok) { + ok = (Size() == 1); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "A Message object shall be added to this container"); + } + } + if (ok) { + eventMsg = Get(0); + ok = (eventMsg.IsValid()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "A valid Message shall be added to this container"); + } + } + return ok; +} + +bool JAMessageGAM::Setup() { + using namespace MARTe; + bool ok = numberOfInputSignals == (intValuesCount + floatValuesCount); + if (ok) { + ok = numberOfInputSignals > 0u; + if (ok) { + inputSignals = new void*[numberOfInputSignals]; + uint32 i; + for (i = 0u; i < numberOfInputSignals; i++) { + inputSignals[i] = GetInputSignalMemory(i); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one input signal shall be defined"); + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Number of input signals shall be the same as " + "number of expected values."); + } + if (ok) { + inputSignalTypes = new TypeDescriptor[numberOfInputSignals]; + uint32 i; + for (i = 0u; (i < numberOfInputSignals) && (ok); i++) { + TypeDescriptor inputType = GetSignalType(InputSignals, i); + inputSignalTypes[i] = inputType; + ok = (inputType == UnsignedInteger32Bit) || (inputType == SignedInteger32Bit) || + (inputType == UnsignedInteger16Bit) || (inputType == SignedInteger16Bit) || + (inputType == UnsignedInteger8Bit) || (inputType == SignedInteger8Bit) || + (inputType == Float64Bit) || (inputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, i, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "Signal %s shall be defined as 32/16/8 bit signed/unsigned integer " + "or as 64/32 float.", signalName.Buffer()); + } + } + } + + return ok; +} + +bool JAMessageGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + needsReset = false; + return true; +} + +bool JAMessageGAM::Execute() { + using namespace MARTe; + bool ok = true; + bool eventDetected = false; + uint32 inputPortIndex = 0; + uint32 intIndex = 0; + uint32 floatIndex = 0; + if (operation == Or) { + for (inputPortIndex = 0; (inputPortIndex < numberOfInputSignals) && (!eventDetected); inputPortIndex++) { + eventDetected = Compare(inputPortIndex, floatIndex, intIndex); + } + } + else if (operation == Nor) { + for (inputPortIndex = 0; (inputPortIndex < numberOfInputSignals) && (!eventDetected); inputPortIndex++) { + eventDetected = Compare(inputPortIndex, floatIndex, intIndex); + } + eventDetected = !eventDetected; + } + else if (operation == And) { + eventDetected = Compare(0, floatIndex, intIndex); + for (inputPortIndex = 1; (inputPortIndex < numberOfInputSignals); inputPortIndex++) { + eventDetected &= Compare(inputPortIndex, floatIndex, intIndex); + } + } + else if (operation == Xor) { + uint32 eventDetectedUInt32 = Compare(inputPortIndex, floatIndex, intIndex); + for (inputPortIndex = 1; (inputPortIndex < numberOfInputSignals); inputPortIndex++) { + eventDetectedUInt32 ^= Compare(inputPortIndex, floatIndex, intIndex); + } + eventDetected = (eventDetectedUInt32 == 1u); + } + if (eventDetected) { + if (!needsReset) { + ok = (MessageI::SendMessage(eventMsg, this) == ErrorManagement::NoError); + needsReset = true; + } + } + return ok; +} + +bool JAMessageGAM::Compare(MARTe::uint32 inputPortIndex, MARTe::uint32 &floatValueIndex, MARTe::uint32 &intValueIndex) { + using namespace MARTe; + bool ret = false; + if (inputSignalTypes[inputPortIndex] == UnsignedInteger32Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == SignedInteger32Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == UnsignedInteger16Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == SignedInteger16Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == UnsignedInteger8Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == SignedInteger8Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == Float64Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesFloat[floatValueIndex]); + ++floatValueIndex; + } + else { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesFloat[floatValueIndex]); + ++floatValueIndex; + } + return ret; +} + +CLASS_REGISTER(JAMessageGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/JAMessageGAM.h b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/JAMessageGAM.h new file mode 100644 index 0000000..0cdb315 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/JAMessageGAM.h @@ -0,0 +1,149 @@ +/** + * @file JAMessageGAM.h + * @brief Header file for class JAMessageGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAMessageGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAMESSAGEGAM_H_ +#define GAMS_JAMESSAGEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include "Message.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that sends a message when input signals have expected values. Message will not be sent multiple + * times without first changing the application state. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ * +MessageGAM = {
+ *      Class = JAMessageGAM
+ *      Operation = AND // Accepted values are: AND, OR, XOR, NOR. Default value is AND.
+ *      ExpectedIntValues = {1 10} // Expected values for input signals of integral type.
+ *      ExpectedFloatValues = {3.5} // Expected values for float signals of floting point type.
+ *      Comparators = {EQUALS GREATER NOT} // Accepted values are: EQUALS, NOT, GREATER, EQUALS_OR_GREATER, LESS, EQUALS_OR_LESS
+ *                                         // Comparators element is optional. Default comparator is EQUALS.
+ *      InputSignals = {
+ *          Sig1 = {
+ *              DataSource = EPICSCAInput
+ *              Type = uint32
+ *          }
+ *          Sig2 = {
+ *              DataSource = EPICSCAInput
+ *              Type = float32
+ *          }
+ *          Sig3 = {
+ *              DataSource = EPICSCAInput
+ *              Type = uint32
+ *          }
+ *      }
+ *      +Event = { // Message to be sent when condition is true.
+ *          Class = Message
+ *          Destination = StateMachine
+ *          Function = GoDisabled
+ *      }
+ *  }
+ * 
+ * This example will send Event message when Sig1 == 1 && Sig2 > 3.5 && Sig3 != 10 + */ +class JAMessageGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAMessageGAM(); + + virtual ~JAMessageGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + + enum ComparisonMode { + Equals, Not, Greater, EqualsOrGreater, Less, EqualsOrLess + }; + +private: + /** + * @brief Does the input signal at provided index have the expected value. + * @param[in] index of the signal. + * @param[out] floatValueIndex lookup index for expected float values array. + * @param[out] intValueIndex lookup index for expected integer values array. + * @return true if the signal has expected value. + */ + bool Compare(MARTe::uint32 index, MARTe::uint32 &floatValueIndex, MARTe::uint32 &intValueIndex); + + enum OperationMode { + And, Or, Xor, Nor + }; + + // Input signals + void **inputSignals; + + MARTe::TypeDescriptor *inputSignalTypes; + + // Condition operation. + OperationMode operation; + + // Message to be sent when conditions are met. + MARTe::ReferenceT eventMsg; + + // Was the message already sent and we are waiting for a state change before next message can be sent. + bool needsReset; + + // Array of expected integer values of input signals. + MARTe::uint64* expectedValuesInt; + + // Array of expected float values for input signals. + MARTe::float64* expectedValuesFloat; + + // Expected integer values count (must be equal to numberOfInputSignals - floatValuesCount) + MARTe::uint32 intValuesCount; + + // Expected integer values count (must be equal to numberOfInputSignals - floatValuesCount) + MARTe::uint32 floatValuesCount; + + // Array of comparators + ComparisonMode* comparators; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAMESSAGEGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/Makefile.inc new file mode 100644 index 0000000..658d273 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/Makefile.inc @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAMessageGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAMessageGAM$(LIBEXT) \ + $(BUILD_DIR)/JAMessageGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/JAModeControlGAM.cpp b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/JAModeControlGAM.cpp new file mode 100644 index 0000000..c55e6d0 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/JAModeControlGAM.cpp @@ -0,0 +1,154 @@ +/** + * @file JAModeControlGAM.cpp + * @brief Source file for class JAModeControlGAM + * @date Jan, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAModeControlGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAModeControlGAM.h" +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAModeControlGAM::JAModeControlGAM() { + inputSignals = NULL_PTR(MARTe::uint32 **); + outputSignal = NULL_PTR(MARTe::uint32 *); + pulseLengthLimit = 360000000u; + resetRemainingTime = true; + previousState = 0u; +} + +JAModeControlGAM::~JAModeControlGAM() { + if (inputSignals != NULL_PTR(MARTe::uint32 **)) { + delete[] inputSignals; + } +} + +bool JAModeControlGAM::Initialise(MARTe::StructuredDataI & data) { + /* read hard coded on cfg file parameter values by using key name. */ + using namespace MARTe; + return GAM::Initialise(data); +} + +bool JAModeControlGAM::Setup() { + /* read GAM Input signal */ + using namespace MARTe; + /* read 4 mode bits and 4 shot length limit values */ + + bool ok = numberOfInputSignals == 11; + if (ok) { + uint32 i; + for (i = 0u; (i < numberOfInputSignals) && (ok); i++) { + TypeDescriptor inputType = GetSignalType(InputSignals, i); + ok = inputType == UnsignedInteger32Bit; + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, i, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "InputSignel %s shall be defined as uint32", signalName.Buffer()); + } + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Eleven input signals shall be defined."); + } + if (ok) { + ok = numberOfOutputSignals == 1; + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "One output signal shall be defined."); + } + else { + TypeDescriptor type = GetSignalType(OutputSignals, 0); + ok = type == UnsignedInteger32Bit; + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, 0, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + inputSignals = new uint32*[numberOfInputSignals]; + uint32 i; + for (i = 0u; i < 11; i++) { + inputSignals[i] = reinterpret_cast(GetInputSignalMemory(i)); + } + } + return ok; +} + +bool JAModeControlGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + *outputSignal = 0u; + previousState = 0u; + resetRemainingTime = true; + return true; +} + +bool JAModeControlGAM::Execute() { + using namespace MARTe; + //When RT state goes to RFON state, update the limit. + if(previousState == 0u && *inputSignals[8] == 1u && resetRemainingTime) { + rfonTime = *inputSignals[9]; + resetRemainingTime = false; + pulseLengthLimit = CalcPulseLengthLimit(inputSignals); + REPORT_ERROR(ErrorManagement::Debug, "Pulse Length was set to Limit:%d", pulseLengthLimit); + } + // Turn on the flag during RFON if the pulse legth over the limit. + if ((*inputSignals[9] - rfonTime <= pulseLengthLimit) && (previousState == 1u)) { + *outputSignal = 0u; + return true; + } else if(*inputSignals[9] == 1u){ + resetRemainingTime = true; + *outputSignal = 1u; + } + + previousState = *inputSignals[8]; + return true; +} + + +MARTe::uint32 JAModeControlGAM::CalcPulseLengthLimit(MARTe::uint32 **inputSignals) { + if (*inputSignals[0] == 1) { + return *inputSignals[1]; + } else if (*inputSignals[2] == 1) { + return *inputSignals[3]; + } else if (*inputSignals[4] == 1) { + return *inputSignals[5]; + } else if (*inputSignals[6] == 1) { + return *inputSignals[7]; + } else { + return 3600000000;//us + } +} + + +CLASS_REGISTER(JAModeControlGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/JAModeControlGAM.h b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/JAModeControlGAM.h new file mode 100644 index 0000000..e9041ce --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/JAModeControlGAM.h @@ -0,0 +1,149 @@ +/** + * @file JAModeControlGAM.h + * @brief Header file for class JAModeControlGAM + * @date Jan, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAModeControlGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAMODECONTROLGAM_H_ +#define GAMS_JAMODECONTROLGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that check the pulse lenght limit. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +ModeLimitGAM = {
+ *           Class = JAModeControlGAM
+ *           InputSignals = {
+ *               PLC_MODE1 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD1_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               PLC_MODE2 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD2_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               PLC_MODE3 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD3_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               PLC_MODE4 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD4_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               HVInjection = {
+ *               	DataSource = RealTimeThreadAsyncBridge
+ *               	Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * If MODE1 is ON and Time is exceed MD1_SHOTLEN_LIM, MODE_SHOTLEN_FLAG become ON. + */ + +class JAModeControlGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAModeControlGAM(); + + virtual ~JAModeControlGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + + MARTe::uint32 CalcPulseLengthLimit(MARTe::uint32 **inputSignals); + + // Input signals + MARTe::uint32 **inputSignals; + + // Output signals + MARTe::uint32 *outputSignal; + + // Calculated pulse lenght limit. + MARTe::uint32 pulseLengthLimit; + + // Amount of time passed per execution cycle. + MARTe::uint32 rfonTime; + + // reset flag + bool resetRemainingTime; + MARTe::uint32 previousState; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAMODECONTROLGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/Makefile.inc new file mode 100644 index 0000000..093c4b9 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/Makefile.inc @@ -0,0 +1,52 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAModeControlGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAModeControlGAM$(LIBEXT) \ + $(BUILD_DIR)/JAModeControlGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.cpp b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.cpp new file mode 100644 index 0000000..06de1df --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.cpp @@ -0,0 +1,460 @@ +/** + * @file JAPreProgrammedGAM.cpp + * @brief Source file for class JAPreProgrammedGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAPreProgrammedGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "CLASSMETHODREGISTER.h" +#include "File.h" +#include "JAPreProgrammedGAM.h" +#include "MessageI.h" +#include "RegisteredMethodsMessageFilter.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +// How often output signals are updated. +const MARTe::uint32 cycleMs = 10u; + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAPreProgrammedGAM::JAPreProgrammedGAM() : + GAM() { + using namespace MARTe; + filenameSignalIndex = 0u; + timeSignal = NULL_PTR(MARTe::int32 *); + loadTriggerSignal = NULL_PTR(MARTe::uint32 *); + fhpsrefSignal = NULL_PTR(MARTe::float32 *); + rfonStateSignal = NULL_PTR(MARTe::uint32 *); + + valueSignals = NULL_PTR(MARTe::float32 **); + preProgrammedValues = NULL_PTR(MARTe::float32 **); + preProgrammedTime = NULL_PTR(MARTe::int32 *); + fileLoadedSignal = NULL_PTR(MARTe::uint32 *); + fileLoadErrorOutput = NULL_PTR(MARTe::uint32 *); + + startTime = 0u; + numberOfPreProgrammedValues = 0u; + numberOfPreProgrammedTimeRows = 0u; + currentRow = 0u; + mode = None; + preProgrammedExecutaionPeriodMs = 0u; + msCounter = 0u; + preProgrammedRow = 0u; + resetOutputSignals = false; + readOnce = true; +} + +JAPreProgrammedGAM::~JAPreProgrammedGAM() { + DeleteArrays(); + if (valueSignals != NULL_PTR(MARTe::float32 **)) { + delete[] valueSignals; + } +} + +bool JAPreProgrammedGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("Directory", directory); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Directory shall be specified"); + } + } + if (ok) { + ok = data.Read("PreProgrammedPeriodMs", preProgrammedExecutaionPeriodMs); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Directory shall be specified"); + } + } + return ok; +} + +bool JAPreProgrammedGAM::Setup() { + using namespace MARTe; + //Signal number check. + bool ok = (numberOfInputSignals == 4u); + if (ok) { + ok = (numberOfOutputSignals > 2u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "At least two output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Four input signals with the filename and file load trigger shall be defined"); + } + //Input signals type consistency check. + if (ok) { + StreamString signalName = "Filename"; + ok = GetSignalIndex(InputSignals, filenameSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Filename input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, filenameSignalIndex); + ok = (inputType == CharString); + if (!ok) { + ok = (inputType == Character8Bit); + } + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, filenameSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as string", signalName.Buffer()); + } + } + } + if (ok) { + StreamString signalName = "CSV_LOAD"; + uint32 loadSignalIndex; + ok = GetSignalIndex(InputSignals, loadSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "CSV_LOAD input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, loadSignalIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, loadSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } else { + loadTriggerSignal = reinterpret_cast(GetInputSignalMemory(loadSignalIndex)); + } + } + } + if (ok) { + StreamString signalName = "FHPS_REF"; + uint32 fhpsrefIndex; + ok = GetSignalIndex(InputSignals, fhpsrefIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "FHPS_REF input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, fhpsrefIndex); + ok = (inputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, fhpsrefIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } else { + fhpsrefSignal = reinterpret_cast(GetInputSignalMemory(fhpsrefIndex)); + } + } + } + if (ok) { + StreamString signalName = "RFON"; + uint32 rfonIndex; + ok = GetSignalIndex(InputSignals, rfonIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "RFON input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, rfonIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, rfonIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } else { + rfonStateSignal = reinterpret_cast(GetInputSignalMemory(rfonIndex)); + } + } + } + + //Output signals type check. + if (ok) { + TypeDescriptor timeType = GetSignalType(OutputSignals, 0); + ok = (timeType == SignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, 0, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as int32", signalName.Buffer()); + } + + uint32 i; + for (i = 1u; (i <= 6) && (ok); i++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, i); + ok = (outputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, i, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } + } + + if (ok) { + TypeDescriptor fileLoadedType = GetSignalType(OutputSignals, 7u); + ok = (fileLoadedType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, 6u, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + if (ok) { + TypeDescriptor fileLoadErrorOutputType = GetSignalType(OutputSignals, 8u); + ok = (fileLoadErrorOutputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, 7u, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + + //Register signal memory + if (ok) { + timeSignal = reinterpret_cast(GetOutputSignalMemory(0)); + valueSignals = new float32*[6u]; + uint32 i; + for (i = 1u; i <= 6u; i++) { + valueSignals[i - 1] = reinterpret_cast(GetOutputSignalMemory(i)); + } + fileLoadedSignal = reinterpret_cast(GetOutputSignalMemory(7u)); + fileLoadErrorOutput = reinterpret_cast(GetOutputSignalMemory(8u)); + } + return ok; +} + +bool JAPreProgrammedGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + bool ok = true; + if (strcmp(nextStateName, "WaitReady") == 0) { + mode = LoadFileMode; + resetOutputSignals = true; + // Reset read once flag when reentering WaitReady state. + readOnce = true; + } else if (strcmp(nextStateName, "WaitPermit") == 0) { + mode = LoadFileMode; + resetOutputSignals = true; + currentRow = 0u; + } else if (strcmp(nextStateName, "WaitHVON_PREP") == 0 || strcmp(nextStateName, "WaitHVON_SDN_PREP") == 0) { + ok = numberOfPreProgrammedTimeRows > 0; + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::IllegalOperation, "Entering PreProgrammed mode without any waveform data."); + } + mode = PreProgrammedMode; + msCounter = cycleMs; + currentRow = 0u; + } else { + mode = None; + } + return ok; +} + +bool JAPreProgrammedGAM::LoadFile() { + using namespace MARTe; + + DeleteArrays(); + + bool ok = true; + + const MARTe::char8 * const filenameSignal = reinterpret_cast(GetInputSignalMemory(filenameSignalIndex)); + //Prepare full path to the configuration file. + StreamString filename = directory; + filename += DIRECTORY_SEPARATOR; + filename += filenameSignal; + REPORT_ERROR(MARTe::ErrorManagement::Debug, "Opening file %s", filename.Buffer()); + + //parse prepro configuration file into two arrays(time, values). + File f; + ok = f.Open(filename.Buffer(), BasicFile::ACCESS_MODE_R); + if (ok) { + //Count up number of file Rows. + numberOfPreProgrammedTimeRows = 0u; + StreamString tokenLine; + while (f.GetLine(tokenLine)) { + if (tokenLine[0] != '#' && tokenLine[0] != '-') { + numberOfPreProgrammedTimeRows++; + } + tokenLine = ""; + } + //Count up number of file lines + numberOfPreProgrammedValues = 0u; + f.Seek(0); + uint32 t = 0u; + tokenLine = ""; + while ((ok) && (f.GetLine(tokenLine))) { + // Skip comment line and minus time + if (tokenLine[0] == '#' || tokenLine[0] == '-') { + tokenLine = ""; + continue; + } + // Prepare two arrays at first. + if (numberOfPreProgrammedValues == 0) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + while (tokenLine.GetToken(token, ",", ignored)) { + numberOfPreProgrammedValues++; + token = ""; + } +REPORT_ERROR(MARTe::ErrorManagement::ParametersError,"numberOfPreProgrammedVal %d", numberOfPreProgrammedValues); + ok = (numberOfPreProgrammedValues == 7u);//From time row to FHPS row. + numberOfPreProgrammedValues -= 1u; //From MHVPS row to FHPS row. + if (ok) { + preProgrammedTime = new int32[numberOfPreProgrammedTimeRows]; + preProgrammedValues = new float32*[numberOfPreProgrammedTimeRows]; + uint32 j; + for (j = 0u; j < numberOfPreProgrammedTimeRows; j++) { + preProgrammedValues[j] = new float32[numberOfPreProgrammedValues]; + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, + "Number of columns in csv file (%d) is not consistent with the number of output signals (%d)", + numberOfPreProgrammedValues, 6u); + *fileLoadErrorOutput = 1; + } + } + // Add loaded data into two arrays. + if (ok) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + uint32 idx = 0u; + while (tokenLine.GetToken(token, ",", ignored)) { + if (idx == 0u) { + preProgrammedTime[t] = atoi(token.Buffer()); + if (t == 0 && preProgrammedTime[0] != 0) { + REPORT_ERROR(MARTe::ErrorManagement::Debug, "Prepro start from none zero time."); + } + } + else { + ok = ((idx - 1) < numberOfPreProgrammedValues); + if (ok) { + preProgrammedValues[t][idx - 1] = static_cast(atof(token.Buffer())); + } + else { + REPORT_ERROR(MARTe::ErrorManagement::FatalError, "Number of columns in csv file is not consistent with the number of output signals in line %d", t); + *fileLoadErrorOutput = 1; + } + } + token = ""; + idx++; + } + t++; + } + tokenLine = ""; + } + f.Close(); + } + if (ok) { + currentRow = 0u; + } + else { + numberOfPreProgrammedTimeRows = 0u; + REPORT_ERROR(ErrorManagement::Warning, "Failed to read waveform data from file."); + *fileLoadErrorOutput = 2; + } + return ok; +} + +bool JAPreProgrammedGAM::Execute() { + using namespace MARTe; + bool ok = true; + + switch (mode) { + case LoadFileMode: { + if (*loadTriggerSignal == 1u) { + if (readOnce) { + *fileLoadErrorOutput = 0; + *fileLoadedSignal = LoadFile() ? 1 : 0; + readOnce = false; + } + } else { + // Reset read once flag when loadTriggerSignal is reset. + readOnce = true; + } + + if (resetOutputSignals) { + // Write default values to output signals + *timeSignal = 0u; + *valueSignals[FHPS-1] = *fhpsrefSignal; + resetOutputSignals = false; + } else { + *valueSignals[FHPS-1] = *fhpsrefSignal; //copy input(2) to val_arr(4) + } + } break; + + case PreProgrammedMode: { + ok = numberOfPreProgrammedTimeRows > 0; + + //add 20210105. Before RFON, prepro setpoints should be same as the values listed at csv first line. + if (ok && *rfonStateSignal == 0) { + uint32 j; + for (j = 0u; j < FHPS; j++) { + *valueSignals[j] = preProgrammedValues[0][j]; + } + } + //end 20210105 + + if (ok && currentRow < numberOfPreProgrammedTimeRows && *rfonStateSignal == 1) { + if (msCounter >= cycleMs) { + msCounter -= cycleMs; + int32 currentTime = preProgrammedTime[currentRow]; + //REPORT_ERROR(MARTe::ErrorManagement::Debug, "Write Time at %d",currentRow); + // Write to output signals + *timeSignal = currentTime; + uint32 j; + for (j = 0u; j < FHPS; j++) { + *valueSignals[j] = preProgrammedValues[currentRow][j]; + //REPORT_ERROR(MARTe::ErrorManagement::Debug, "Write Value %f at row %d",preProgrammedValues[currentRow][j], currentRow); + } + //REPORT_ERROR(MARTe::ErrorManagement::Debug, "Writing pre programmed data for time %d", currentTime); + + // Update row + ++currentRow; + } + msCounter += preProgrammedExecutaionPeriodMs; + } + } break; + default: + // Nothing to do. + REPORT_ERROR(MARTe::ErrorManagement::Warning, "Unhandled mode."); + break; + } + return ok; +} + +void JAPreProgrammedGAM::DeleteArrays() { + if (preProgrammedValues != NULL_PTR(MARTe::float32 **)) { + MARTe::uint32 i; + for (i = 0u; i < numberOfPreProgrammedValues; i++) { + delete preProgrammedValues[i]; + } + delete[] preProgrammedValues; + } + if (preProgrammedTime != NULL_PTR(MARTe::int32 *)) { + delete[] preProgrammedTime; + } +} + +CLASS_REGISTER(JAPreProgrammedGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.h b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.h new file mode 100644 index 0000000..4226fef --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.h @@ -0,0 +1,187 @@ +/** + * @file JAPreProgrammedGAM.h + * @brief Header file for class JAPreProgrammedGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAPreProgrammedGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAPREPROGRAMMEDGAM_H_ +#define GAMS_JAPREPROGRAMMEDGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "GAM.h" +#include "Message.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that update PS output value for pre-programmed operation. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +PreProgrammedGAM = {
+ *           Class = JAPreProgrammedGAM
+ *           Directory = "../Configurations" // Directory which has pre-pro configuration file.
+ *           PreProgrammedPeriodMs = 1       // RFON state is executed every millisecond.
+ *           InputSignals = {
+ *               CSV_LOAD = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               Filename = {
+ *                   Alias = CSV_NAME
+ *                   DataSource = EPICSCAInput
+ *               }
+ *               FHPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               GYA_PREHEAT_TIME = {
+ *                   DataSource = DDB1
+ *                   Type = int32
+ *               }
+ *               MHVPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               BPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               APS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               MCPS_TRG_CURR_SET = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               GCPS_TRG_CURR_SET = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               FHPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               CSV_LOADED = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               CSV_ERR = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * + */ + +class JAPreProgrammedGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAPreProgrammedGAM(); + + virtual ~JAPreProgrammedGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + bool LoadFile(); + + void DeleteArrays(); + + //Parameters + MARTe::StreamString directory; //Location for prepro configuration file. + MARTe::uint32 preProgrammedExecutaionPeriodMs; // Time between to execution cycles in milliseconds in pre-programmed mode. + + //Input Signals + MARTe::uint32 *loadTriggerSignal; //index:0 + MARTe::uint32 filenameSignalIndex;//index:1 + MARTe::float32 *fhpsrefSignal; //index:2 + MARTe::uint32 *rfonStateSignal; //index:3 + + //Output Signals + MARTe::int32 *timeSignal; //index:0 + MARTe::float32 **valueSignals; //index:1-5 = BPS,APS,MC,GC,FHPS + MARTe::uint32 *fileLoadedSignal; //index:6 + MARTe::uint32 *fileLoadErrorOutput;//index:7 + + //Internal variables + MARTe::int32 *preProgrammedTime; + MARTe::float32 **preProgrammedValues; + + MARTe::uint32 startTime; + + //Number of columns in csv, EXCLUDING the time + MARTe::uint32 numberOfPreProgrammedValues; //is 5.(BPS, APS, MC, GC, FHPS) + MARTe::uint32 numberOfPreProgrammedTimeRows; //This start from t=0 row. + MARTe::uint32 currentRow; + + // Number of milliseconds since the last time output signals were updated. + MARTe::uint32 msCounter; + + // Row number where the pre-programmed data begins (time == 0). + MARTe::uint32 preProgrammedRow; + + enum OperationMode { + LoadFileMode, PreProgrammedMode, None + }; + enum PreProTableDefinition { + Time, MHVPS, BPS, APS, MCPS, GCPS, FHPS + }; + + OperationMode mode; + + bool resetOutputSignals; + + // Flag determining whether file should be read (so it isn't read multiple time) + bool readOnce; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAPREPROGRAMMEDGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/Makefile.inc new file mode 100644 index 0000000..aaa1948 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/Makefile.inc @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAPreProgrammedGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAPreProgrammedGAM$(LIBEXT) \ + $(BUILD_DIR)/JAPreProgrammedGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.cpp b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.cpp new file mode 100644 index 0000000..56f9b18 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.cpp @@ -0,0 +1,411 @@ +/** + * @file JARTStateMachineGAM.cpp + * @brief Source file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JARTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +static MARTe::uint64 getCurrentTimeUs() { + using namespace MARTe; + return static_cast(HighResolutionTimer::Counter() * HighResolutionTimer::Period() * 1e6f + 0.5f); +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARTStateMachineGAM::JARTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + turn_off_delay = 2000; //us + + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + short_pulse_mode = NULL_PTR(MARTe::uint32 *); + + modulation = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + + apsSwonHighResolutionTime = 0; + + aps_hvon_state=0; + aps_swon_state=0; + mhvps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; +} + +JARTStateMachineGAM::~JARTStateMachineGAM() { +} + +bool JARTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JARTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JARTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 12u); + if (ok) { + ok = (numberOfOutputSignals == 16u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined %d",numberOfOutputSignals); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(10)); + modulation = reinterpret_cast(GetInputSignalMemory(11)); + + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + + outputAPSHVON = reinterpret_cast(GetOutputSignalMemory(8)); + outputAPSSWON = reinterpret_cast(GetOutputSignalMemory(9)); + outputBPSHVON = reinterpret_cast(GetOutputSignalMemory(10)); + outputBPSSWON = reinterpret_cast(GetOutputSignalMemory(11)); + outputMHVPSON = reinterpret_cast(GetOutputSignalMemory(12)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(13)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(14)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(15)); + + *shotCounter = 0; + } + return ok; +} + +bool JARTStateMachineGAM::Execute() { + using namespace MARTe; + + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + //REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence at %d.", *currentTime); + plcOnTime = *currentTime; //Save pulse start time. + //*outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS; + } + } + else if (currentState == SwitchingHVPS) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; bps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + *outputBPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; aps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal at %d.", *currentTime); + *outputAPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; bps_swon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + *outputBPSSWON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; mhvps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + *outputMHVPSON=1; + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (plcOnTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; aps_swon_state=1; + apsSwonHighResolutionTime = getCurrentTimeUs(); + apsSwonTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + *outputAPSSWON=1; + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 1; + } + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 1; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *outputBeamON = 1; + *shotCounter += 1; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //Action in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + //debug + //if((*stopRequest != 0)){ + //REPORT_ERROR(ErrorManagement::Debug, "Stop request was called.!!!"); + //} else { + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset.!!!"); + //} + *outputSignal -= aps_swon; + mhvps_hvon_is_on = false; mhvps_hvon_state=0; + aps_hvon_is_on = false; aps_hvon_state=0; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; bps_hvon_state=0; + bps_swon_is_on = false; bps_swon_state=0; + currentState = HVTerminate; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + } + uint32 updatePeriod = 100; // in microsecnds (get this from Timer) + if ((*modePulseLengthLimit == 1u) || (getCurrentTimeUs() + updatePeriod >= (apsSwonHighResolutionTime + *triggerDelay_shotlen))) { + + // Now we do busy wait + while (getCurrentTimeUs() < (apsSwonHighResolutionTime + *triggerDelay_shotlen)) { + //REPORT_ERROR(ErrorManagement::Debug, "!"); + } + // We stop busy waiting #executionOverhead before expected pulse off time + //debug + //if((*modePulseLengthLimit == 1u)){ + // REPORT_ERROR(ErrorManagement::Debug, "Mode limit detected.!!!"); + //} else { + // REPORT_ERROR(ErrorManagement::Debug, "Shot length reached to the setpoint.!!!"); + //} + //debug end. + //Do action + *outputSignal -= aps_swon; //Turn off only APS_SWON first. + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; + bps_swon_is_on = false; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + //REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 1; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + //In the HVTerminate state, turn APS_SWON off first, and wait 1ms. Finally turn other PS off. + //Action in this state. + *outputBeamON = 0; + *outputHVArmed = 0; + *outputHVInjection = 0; + *outputRFON = 0; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + mhvps_hvon_state=0; + aps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset. The State was changed to WaitTrigger at %d.", *currentTime); + } + } + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6259 = 1*aps_swon_state; + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + if (modulation) { + p4Value = 8*mhvps_hvon_state + 32; + } + else { + p4Value = 8*mhvps_hvon_state; + } + //*outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + *outputSignalNI6528P4 = ~p4Value; + return true; +} + +CLASS_REGISTER(JARTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.h b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.h new file mode 100644 index 0000000..e968f39 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.h @@ -0,0 +1,262 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARTSTATEMACHINEGAM_H_ +#define GAMS_JARTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that provides real-time state machine. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMRealTimeStateMachine = {
+ *           Class = JARTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BEAM_ON_STAT = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JARTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARTStateMachineGAM(); + + virtual ~JARTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS = 1, + RFON = 2, + HVTerminate = 3 + }; + + //The current rtState + JARealTimeState currentState; + + //A given condition + MARTe::uint32 conditionTrigger; + + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + + //Time signal + MARTe::uint32 *currentTime; + + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for short pulse mode. + MARTe::uint32 *short_pulse_mode; + // Input signal for modulation pv. + MARTe::uint32 *modulation; + + // Output signal to which the output value will be written. + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + // Added for HVPS state (20201117) + MARTe::uint32 *outputAPSHVON; + MARTe::uint32 *outputAPSSWON; + MARTe::uint32 *outputBPSHVON; + MARTe::uint32 *outputBPSSWON; + MARTe::uint32 *outputMHVPSON; + + // Output signals for NI devices + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + MARTe::uint64 apsSwonHighResolutionTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + + // terminal values + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.cpp b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.cpp new file mode 100644 index 0000000..55983f1 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.cpp @@ -0,0 +1,409 @@ +/** + * @file JARTStateMachineGAM.cpp + * @brief Source file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JARTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +static MARTe::uint64 getCurrentTimeUs() { + using namespace MARTe; + return static_cast(HighResolutionTimer::Counter() * HighResolutionTimer::Period() * 1e6f + 0.5f); +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARTStateMachineGAM::JARTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + turn_off_delay = 2000; //us + + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + short_pulse_mode = NULL_PTR(MARTe::uint32 *); + + modulation = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + + apsSwonHighResolutionTime = 0; + + aps_hvon_state=0; + aps_swon_state=0; + mhvps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; +} + +JARTStateMachineGAM::~JARTStateMachineGAM() { +} + +bool JARTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JARTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JARTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 13u); + if (ok) { + ok = (numberOfOutputSignals == 16u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined %d",numberOfOutputSignals); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(10)); + modulation = reinterpret_cast(GetInputSignalMemory(11)); + pauseSet = reinterpret_cast(GetInputSignalMemory(12)); + + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + + outputAPSHVON = reinterpret_cast(GetOutputSignalMemory(8)); + outputAPSSWON = reinterpret_cast(GetOutputSignalMemory(9)); + outputBPSHVON = reinterpret_cast(GetOutputSignalMemory(10)); + outputBPSSWON = reinterpret_cast(GetOutputSignalMemory(11)); + outputMHVPSON = reinterpret_cast(GetOutputSignalMemory(12)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(13)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(14)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(15)); + + *shotCounter = 0; + } + return ok; +} + +bool JARTStateMachineGAM::Execute() { + using namespace MARTe; + + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + //REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence at %d.", *currentTime); + plcOnTime = *currentTime; //Save pulse start time. + //*outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS; + } + } + else if (currentState == SwitchingHVPS) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; bps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + *outputBPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; aps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal at %d.", *currentTime); + *outputAPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; bps_swon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + *outputBPSSWON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; mhvps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + *outputMHVPSON=1; + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (plcOnTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; aps_swon_state=1; + apsSwonHighResolutionTime = getCurrentTimeUs(); + apsSwonTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + *outputAPSSWON=1; + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 1; + } + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 1; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *outputBeamON = 1; + *shotCounter += 1; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //Action in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + //debug + //if((*stopRequest != 0)){ + //REPORT_ERROR(ErrorManagement::Debug, "Stop request was called.!!!"); + //} else { + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset.!!!"); + //} + *outputSignal -= aps_swon; + mhvps_hvon_is_on = false; mhvps_hvon_state=0; + aps_hvon_is_on = false; aps_hvon_state=0; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; bps_hvon_state=0; + bps_swon_is_on = false; bps_swon_state=0; + currentState = HVTerminate; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + } + uint32 updatePeriod = 100; // in microsecnds (get this from Timer) + if ((*modePulseLengthLimit == 1u) || (getCurrentTimeUs() + updatePeriod >= (apsSwonHighResolutionTime + *triggerDelay_shotlen))) { + + // Now we do busy wait + while (getCurrentTimeUs() < (apsSwonHighResolutionTime + *triggerDelay_shotlen)) { + //REPORT_ERROR(ErrorManagement::Debug, "!"); + } + // We stop busy waiting #executionOverhead before expected pulse off time + //debug + //if((*modePulseLengthLimit == 1u)){ + // REPORT_ERROR(ErrorManagement::Debug, "Mode limit detected.!!!"); + //} else { + // REPORT_ERROR(ErrorManagement::Debug, "Shot length reached to the setpoint.!!!"); + //} + //debug end. + //Do action + *outputSignal -= aps_swon; //Turn off only APS_SWON first. + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; + bps_swon_is_on = false; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + //REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 1; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + //In the HVTerminate state, turn APS_SWON off first, and wait 1ms. Finally turn other PS off. + //Action in this state. + *outputBeamON = 0; + *outputHVArmed = 0; + *outputHVInjection = 0; + *outputRFON = 0; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + mhvps_hvon_state=0; + aps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset. The State was changed to WaitTrigger at %d.", *currentTime); + } + } + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6259 = 1*aps_swon_state; + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + p4Value = 8*mhvps_hvon_state; + if (modulation) p4Value += 32; + if (pauseSet) p4Value += 1; + //*outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + *outputSignalNI6528P4 = ~p4Value; + return true; +} + +CLASS_REGISTER(JARTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.h b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.h new file mode 100644 index 0000000..876d64e --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.h @@ -0,0 +1,264 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARTSTATEMACHINEGAM_H_ +#define GAMS_JARTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that provides real-time state machine. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMRealTimeStateMachine = {
+ *           Class = JARTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BEAM_ON_STAT = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JARTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARTStateMachineGAM(); + + virtual ~JARTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS = 1, + RFON = 2, + HVTerminate = 3 + }; + + //The current rtState + JARealTimeState currentState; + + //A given condition + MARTe::uint32 conditionTrigger; + + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + + //Time signal + MARTe::uint32 *currentTime; + + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for short pulse mode. + MARTe::uint32 *short_pulse_mode; + // Input signal for modulation pv. + MARTe::uint32 *modulation; + // Input signal for pause signal set pv. + MARTe::uint32 *pauseSet; + + // Output signal to which the output value will be written. + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + // Added for HVPS state (20201117) + MARTe::uint32 *outputAPSHVON; + MARTe::uint32 *outputAPSSWON; + MARTe::uint32 *outputBPSHVON; + MARTe::uint32 *outputBPSSWON; + MARTe::uint32 *outputMHVPSON; + + // Output signals for NI devices + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + MARTe::uint64 apsSwonHighResolutionTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + + // terminal values + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.cpp b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.cpp new file mode 100644 index 0000000..71c7669 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.cpp @@ -0,0 +1,402 @@ +/** + * @file JARTStateMachineGAM.cpp + * @brief Source file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JARTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +static MARTe::uint64 getCurrentTimeUs() { + using namespace MARTe; + return static_cast(HighResolutionTimer::Counter() * HighResolutionTimer::Period() * 1e6f + 0.5f); +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARTStateMachineGAM::JARTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + turn_off_delay = 2000; //us + + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + + apsSwonHighResolutionTime = 0; + + aps_hvon_state=0; + aps_swon_state=0; + mhvps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; +} + +JARTStateMachineGAM::~JARTStateMachineGAM() { +} + +bool JARTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JARTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JARTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 11u); + if (ok) { + ok = (numberOfOutputSignals == 16u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined %d",numberOfOutputSignals); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(10)); + + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + + outputAPSHVON = reinterpret_cast(GetOutputSignalMemory(8)); + outputAPSSWON = reinterpret_cast(GetOutputSignalMemory(9)); + outputBPSHVON = reinterpret_cast(GetOutputSignalMemory(10)); + outputBPSSWON = reinterpret_cast(GetOutputSignalMemory(11)); + outputMHVPSON = reinterpret_cast(GetOutputSignalMemory(12)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(13)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(14)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(15)); + + *shotCounter = 0; + } + return ok; +} + +bool JARTStateMachineGAM::Execute() { + using namespace MARTe; + + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + //REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence at %d.", *currentTime); + plcOnTime = *currentTime; //Save pulse start time. + //*outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS; + } + } + else if (currentState == SwitchingHVPS) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; bps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + *outputBPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; aps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal at %d.", *currentTime); + *outputAPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; bps_swon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + *outputBPSSWON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; mhvps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + *outputMHVPSON=1; + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (plcOnTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; aps_swon_state=1; + apsSwonHighResolutionTime = getCurrentTimeUs(); + apsSwonTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + *outputAPSSWON=1; + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 1; + } + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 1; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *outputBeamON = 1; + *shotCounter += 1; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //Action in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + //debug + //if((*stopRequest != 0)){ + //REPORT_ERROR(ErrorManagement::Debug, "Stop request was called.!!!"); + //} else { + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset.!!!"); + //} + *outputSignal -= aps_swon; + mhvps_hvon_is_on = false; mhvps_hvon_state=0; + aps_hvon_is_on = false; aps_hvon_state=0; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; bps_hvon_state=0; + bps_swon_is_on = false; bps_swon_state=0; + currentState = HVTerminate; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + } + uint32 updatePeriod = 100; // in microsecnds (get this from Timer) + if ((*modePulseLengthLimit == 1u) || (getCurrentTimeUs() + updatePeriod >= (apsSwonHighResolutionTime + *triggerDelay_shotlen))) { + + // Now we do busy wait + while (getCurrentTimeUs() < (apsSwonHighResolutionTime + *triggerDelay_shotlen)) { + //REPORT_ERROR(ErrorManagement::Debug, "!"); + } + // We stop busy waiting #executionOverhead before expected pulse off time + //debug + //if((*modePulseLengthLimit == 1u)){ + // REPORT_ERROR(ErrorManagement::Debug, "Mode limit detected.!!!"); + //} else { + // REPORT_ERROR(ErrorManagement::Debug, "Shot length reached to the setpoint.!!!"); + //} + //debug end. + //Do action + *outputSignal -= aps_swon; //Turn off only APS_SWON first. + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; + bps_swon_is_on = false; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + //REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 1; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + //In the HVTerminate state, turn APS_SWON off first, and wait 1ms. Finally turn other PS off. + //Action in this state. + *outputBeamON = 0; + *outputHVArmed = 0; + *outputHVInjection = 0; + *outputRFON = 0; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + mhvps_hvon_state=0; + aps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset. The State was changed to WaitTrigger at %d.", *currentTime); + } + } + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6259 = 1*aps_swon_state; + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + p4Value = 8*mhvps_hvon_state; + //*outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + *outputSignalNI6528P4 = ~p4Value; + return true; +} + +CLASS_REGISTER(JARTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.h b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.h new file mode 100644 index 0000000..e59f3fa --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.h @@ -0,0 +1,260 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARTSTATEMACHINEGAM_H_ +#define GAMS_JARTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that provides real-time state machine. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMRealTimeStateMachine = {
+ *           Class = JARTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BEAM_ON_STAT = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JARTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARTStateMachineGAM(); + + virtual ~JARTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS = 1, + RFON = 2, + HVTerminate = 3 + }; + + //The current rtState + JARealTimeState currentState; + + //A given condition + MARTe::uint32 conditionTrigger; + + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + + //Time signal + MARTe::uint32 *currentTime; + + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for short pulse mode. + MARTe::uint32 *short_pulse_mode; + + // Output signal to which the output value will be written. + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + // Added for HVPS state (20201117) + MARTe::uint32 *outputAPSHVON; + MARTe::uint32 *outputAPSSWON; + MARTe::uint32 *outputBPSHVON; + MARTe::uint32 *outputBPSSWON; + MARTe::uint32 *outputMHVPSON; + + // Output signals for NI devices + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + MARTe::uint64 apsSwonHighResolutionTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + + // terminal values + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/Makefile.inc new file mode 100644 index 0000000..609ad23 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/Makefile.inc @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JARTStateMachineGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JARTStateMachineGAM$(LIBEXT) \ + $(BUILD_DIR)/JARTStateMachineGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/JARampupGAM.cpp b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/JARampupGAM.cpp new file mode 100644 index 0000000..98003a2 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/JARampupGAM.cpp @@ -0,0 +1,295 @@ +/** + * @file JARampupGAM.cpp + * @brief Source file for class JARampupGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARampupGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "AdvancedErrorManagement.h" +#include "JARampupGAM.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARampupGAM::JARampupGAM() : GAM() { + current_setpoint = NULL_PTR(MARTe::float32 *); + target_value = NULL_PTR(MARTe::float32 *); + rampup_time = NULL_PTR(MARTe::float32 *); + start = NULL_PTR(MARTe::uint32 *); + standby = NULL_PTR(MARTe::uint32 *); + isAuto = NULL_PTR(MARTe::uint32 *); + FHPS_PrePro = NULL_PTR(MARTe::float32 *); + + output = NULL_PTR(MARTe::float32 *); + state = NULL_PTR(MARTe::uint32 *); + + rampup_rate = 0.0f; + inRampup = false; + resetFlag = true; + inWaitHVON = false; + inWaitStandby = false; +} + +JARampupGAM::~JARampupGAM() { +} + +bool JARampupGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + return GAM::Initialise(data); +} + +bool JARampupGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 7u); + if (ok) { + ok = (numberOfOutputSignals == 2u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Two output signals shall be defined."); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Six input signals shall be defined."); + } + uint32 currentspvIndex; + uint32 targetvIndex; + uint32 timeIndex; + uint32 startIndex; + uint32 standbyIndex; + uint32 isAutoIndex; + uint32 fhpsPreProIndex; + + if (ok) { + StreamString signalName = "Currspv"; + ok = GetSignalIndex(InputSignals, currentspvIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Currspv input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, currentspvIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Currspv shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Targetv"; + ok = GetSignalIndex(InputSignals, targetvIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Targetv input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, targetvIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Targetv shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Time"; + ok = GetSignalIndex(InputSignals, timeIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Time input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, timeIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Time shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Start"; + ok = GetSignalIndex(InputSignals, startIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Start input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, startIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Start shall be defined as uint32."); + } + } + } + if (ok) { + StreamString signalName = "PLC_STANDBY"; + ok = GetSignalIndex(InputSignals, standbyIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLC_STANDBY input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, standbyIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLC_STANDBY shall be defined as uint32."); + } + } + } + if (ok) { + StreamString signalName = "MANUAL_AUTO"; + ok = GetSignalIndex(InputSignals, isAutoIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "MANUAL_AUTO input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, isAutoIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "MANUAL_AUTO shall be defined as uint32."); + } + } + } + if (ok) { + StreamString signalName = "FHPS_PrePro"; + ok = GetSignalIndex(InputSignals, fhpsPreProIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "FHPS_PrePro input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, fhpsPreProIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal FHPS_PrePro shall be defined as float32."); + } + } + } + + if (ok) { + TypeDescriptor inputType = GetSignalType(OutputSignals, 0); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Output shall be defined as float32."); + } + } + if (ok) { + TypeDescriptor inputType = GetSignalType(OutputSignals, 1); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal state shall be defined as float32."); + } + } + + if (ok) { + current_setpoint = reinterpret_cast(GetInputSignalMemory(currentspvIndex)); + target_value = reinterpret_cast(GetInputSignalMemory(targetvIndex)); + rampup_time = reinterpret_cast(GetInputSignalMemory(timeIndex)); + start = reinterpret_cast(GetInputSignalMemory(startIndex)); + standby = reinterpret_cast(GetInputSignalMemory(standbyIndex)); + isAuto = reinterpret_cast(GetInputSignalMemory(isAutoIndex)); + FHPS_PrePro = reinterpret_cast(GetInputSignalMemory(fhpsPreProIndex)); + + output = reinterpret_cast(GetOutputSignalMemory(0)); + state = reinterpret_cast(GetOutputSignalMemory(1)); + } + return ok; +} + +bool JARampupGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName){ + if(strcmp(nextStateName, "WaitHVON_PREP")==0 || strcmp(nextStateName, "WaitHVON_SDN_PREP")==0 || + strcmp(nextStateName, "WaitHVON")==0 || strcmp(nextStateName, "WaitHVON_SDN")==0){ + inWaitHVON = true; + inWaitStandby = false; + } else{ + inWaitHVON = false; + if(strcmp(nextStateName,"WaitStandby")==0 ){ + inWaitStandby = true; + } else { + inWaitStandby = false; + } + } + return true; +} + +bool JARampupGAM::Execute() { + using namespace MARTe; + if(!inWaitHVON){ + if (*target_value <= 0.0f || *standby == 0u) { + *output = 0.0f; + rampup_rate = 0.0f; + if(*target_value <= 0.0f){ + *state = 3u; + } else { + *state = 0u; + } + return true; + } + + if(*start == 1u && *isAuto==0u){ //isAuto = 1.Manual, 0.auto-rampup. + inRampup = true; + resetFlag = true; + *output = 0.0f; //Enable if it should start always zero. + } + + // Calcrate new rampup rate. + if(*rampup_time != 0 && resetFlag == true){ + rampup_rate = (*target_value - *current_setpoint) / *rampup_time/1000.0f; // Volt/msec + resetFlag = false; + } + + // Update Parameter + if(*standby == 1u ){ + if(*isAuto == 1u){ + if (inWaitStandby){ + *output = *target_value; + } else{ + *output = *FHPS_PrePro; + } + //*output = *target_value; + *state = 0u; + return true; + } + else if (inRampup){ + if (*output + rampup_rate < *target_value && *rampup_time != 0){ + *output = *output + rampup_rate; + *state = 1u; + } else { + *output = *target_value; + *state = 2u; + inRampup = false; + } + } + } + return true; + } else { + if(*isAuto == 0){ + *output = *FHPS_PrePro; + } else{ + *output = *target_value; + } + return true; + } +} + +CLASS_REGISTER(JARampupGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/JARampupGAM.h b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/JARampupGAM.h new file mode 100644 index 0000000..3c6e012 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/JARampupGAM.h @@ -0,0 +1,141 @@ +/** + * @file JARampupGAM.h + * @brief Header file for class JARampupGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARampupGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARampupGAM_H_ +#define GAMS_JARampupGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that rampup output value with specified target value and duration. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *      +FHPSRampupGAM = {
+ *         Class = JARampupGAM
+ *         InputSignals = {
+ *             Currspv = {
+ *                 Alias = FHPS_REF
+ *                 DataSource = DDB1
+ *                 Type = float32
+ *             }
+ *             Targetv = {
+ *                 Alias = FHPS_AUTO_TAGV
+ *                 DataSource = EPICSCAInput
+ *                 Type = float32
+ *             }
+ *             Time = {
+ *                 Alias = FHPS_AUTO_TIME
+ *                 DataSource = EPICSCAInput
+ *                 Type = float32
+ *             }
+ *             Start = {
+ *                 Alias = FHPS_AUTO_START
+ *                 DataSource = EPICSCAInput
+ *                 Type = uint32
+ *             }
+ *         }
+ *         OutputSignals = {
+ *             FHPS_REF = {
+ *                 DataSource = DDB1
+ *                 Type = float32
+ *             }
+ *         }
+ *       }
+ *  
+ * 
+ * + */ + +class JARampupGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARampupGAM(); + + virtual ~JARampupGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + // Input signal containing current current_setpoint + MARTe::float32 *current_setpoint; + + // Input signal containing the frequency of the waveform. + MARTe::float32 *target_value; + + // Input signal containing the amplitude of the waveform. + MARTe::float32 *rampup_time; + + // Input signal containing CCPS_ON_REQUEST + MARTe::uint32 *start; + + // Input signal PLC_STANDBY + MARTe::uint32 *standby; + + // MANUAL AUTO button + MARTe::uint32 *isAuto; + + // Input signal + MARTe::float32 *FHPS_PrePro; + + // Output + MARTe::float32 *output; + // State output + MARTe::uint32 *state; //0:NotOperation, 1:InOperation, 2:Finish, 3:Error + + // Internal variables + MARTe::float32 rampup_rate; + bool inRampup; + bool resetFlag; + bool inWaitHVON; + bool inWaitStandby; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARampupGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/Makefile.inc new file mode 100644 index 0000000..e9ce666 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JARampupGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JARampupGAM$(LIBEXT) \ + $(BUILD_DIR)/JARampupGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.cpp b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.cpp new file mode 100644 index 0000000..d164e89 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.cpp @@ -0,0 +1,361 @@ +/** + * @file JASDNRTStateMachineGAM.cpp + * @brief Source file for class JASDNRTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JASDNRTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JASDNRTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JASDNRTStateMachineGAM::JASDNRTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + sdnTriggerTime = 0; + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + sdnCommand = NULL_PTR(MARTe::uint16 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; +} + +JASDNRTStateMachineGAM::~JASDNRTStateMachineGAM() { +} + +bool JASDNRTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JASDNRTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JASDNRTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 11u); + if (ok) { + ok = (numberOfOutputSignals == 8u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit || inputType == UnsignedInteger16Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint16", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + sdnCommand = reinterpret_cast(GetInputSignalMemory(10)); + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + *shotCounter = 0; + } + return ok; +} + +bool JASDNRTStateMachineGAM::Execute() { + using namespace MARTe; + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence in SDN mode."); + plcOnTime = *currentTime; //Save pulse start time. + *outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS_HVON; + } + } + else if (currentState == SwitchingHVPS_HVON) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal -= aps_swon; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal."); + } + + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 0; + currentState = WaitSDNTrigger; + } + + } + else if (currentState == WaitSDNTrigger) { + + // Action in this state + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + + // State change conditions + if (*sdnCommand == 1){ + sdnTriggerTime = *currentTime; + currentState = SwitchingHVPS_SWON; + } + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + } + else if (currentState == SwitchingHVPS_SWON) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + + if (*currentTime >= (sdnTriggerTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + } + if (*currentTime >= (sdnTriggerTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (sdnTriggerTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; + apsSwonTime = *currentTime; + REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 0; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *shotCounter += 1; + REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //SDN command processing. + if (*sdnCommand == 4 && aps_swon_is_on) { + *outputSignal -= aps_swon; + aps_swon_is_on = false; + REPORT_ERROR(ErrorManagement::Debug, "sdn command was 4"); + } + if (*sdnCommand == 3 && !aps_swon_is_on) { + *outputSignal += aps_swon; + aps_swon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "sdn command was 3"); + } + + //Action in this state. + if ((*sdnCommand == 2) || (*modePulseLengthLimit == 1u) || (*currentTime >= (sdnTriggerTime + *triggerDelay_aps_swon + *triggerDelay_shotlen))) { + REPORT_ERROR(ErrorManagement::Debug, "shotlen: %d", *triggerDelay_shotlen); + if (*sdnCommand == 2) { + REPORT_ERROR(ErrorManagement::Information, "sdn command was 2"); + } else if (*currentTime >= (sdnTriggerTime + *triggerDelay_aps_swon + *triggerDelay_shotlen)){ + REPORT_ERROR(ErrorManagement::Information, "pulse length reached setpoint."); + } + //Do action + *outputSignal -= aps_swon; //Turn off only aps_swon + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 0; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + REPORT_ERROR(ErrorManagement::Information, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + + //Action in this state. + *outputBeamON = 1; + *outputHVArmed = 1; + *outputHVInjection = 1; + *outputRFON = 1; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + REPORT_ERROR(ErrorManagement::Debug, "state was changed to WaitTrigger"); + } + } + + return true; +} + +CLASS_REGISTER(JASDNRTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.h b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.h new file mode 100644 index 0000000..91b4199 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.h @@ -0,0 +1,250 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JASDNRTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JASDNRTSTATEMACHINEGAM_H_ +#define GAMS_JASDNRTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM provides real-time state machine that communicate with SDN packet. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMSDNRealTimeStateMachine = {
+ *           Class = JASDNRTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               Command = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint16
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   //DataSource = NI6259
+ *                   DataSource = Display
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BeamON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * + */ + +class JASDNRTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JASDNRTStateMachineGAM(); + + virtual ~JASDNRTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS_HVON = 1, + WaitSDNTrigger = 2, + SwitchingHVPS_SWON = 3, + RFON = 4, + HVTerminate = 5 + }; + + //The current rtState + JARealTimeState currentState; + + ///////////////////////////////////////////////// + // Static parameter given by cfg File + ///////////////////////////////////////////////// + //A given condition + MARTe::uint32 conditionTrigger; + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + ///////////////////////////////////////////////// + // Input signals + ///////////////////////////////////////////////// + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + //Time signal (Time from TimerGAM) + MARTe::uint32 *currentTime; + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for SDN commands. + MARTe::uint16 *sdnCommand; + + ///////////////////////////////////////////////////////////// + // Output signal to which the output value will be written. + ///////////////////////////////////////////////////////////// + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //SDN trigger command arrival time. + MARTe::uint32 sdnTriggerTime; + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JASDNRTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/Makefile.inc new file mode 100644 index 0000000..0ddfbdf --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JASDNRTStateMachineGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JASDNRTStateMachineGAM$(LIBEXT) \ + $(BUILD_DIR)/JASDNRTStateMachineGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/JASampleGAM.cpp b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/JASampleGAM.cpp new file mode 100644 index 0000000..62ab62d --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/JASampleGAM.cpp @@ -0,0 +1,177 @@ +/** + * @file JASampleGAM.cpp + * @brief Source file for class JASampleGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JASampleGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JASampleGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JASampleGAM::JASampleGAM() { + // initialize member variables. + param1 = 0; + param2 = 0; + + //Input signals. + input1 = NULL_PTR(MARTe::uint32 *); + input2 = NULL_PTR(MARTe::float32 *); + //Output signals. + output1= NULL_PTR(MARTe::uint32 *); + output2 = NULL_PTR(MARTe::float32 *); + +} + +JASampleGAM::~JASampleGAM() { +} + +bool JASampleGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("param1", param1); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The param1 shall be specified"); + } + } + if (ok) { + ok = data.Read("param2", param2); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The param2 shall be specified"); + } + } + return ok; +} + +bool JASampleGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JASampleGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == 2u); + if (ok) { + ok = (numberOfOutputSignals == 2u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Two output signals shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Two input signals shall be defined"); + } + // Do type check for input signals. + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = ((inputType == UnsignedInteger32Bit) || (inputType == Float32Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or flaot32", signalName.Buffer()); + } + + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = ((outputType == UnsignedInteger32Bit) || (outputType == Float32Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or float32", signalName.Buffer()); + } + } + } + + // Signal id can get by signal name in configuration file + if (ok) { + StreamString signalName = "InputXXX"; //Variable name in configuration file. + uint32 signalxxxIndex; //Index is copied to this variable by using signal name. + ok = GetSignalIndex(InputSignals, signalxxxIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "InputXXX input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, signalxxxIndex); + ok = (inputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, signalxxxIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } else { + inputXXX = reinterpret_cast(GetInputSignalMemory(signalxxxIndex)); + } + } + } + + // Do type cast. with explicit signal id. + if (ok) { + input1 = reinterpret_cast(GetInputSignalMemory(0)); + input2 = reinterpret_cast(GetInputSignalMemory(1)); + + output1 = reinterpret_cast(GetOutputSignalMemory(0)); + output2 = reinterpret_cast(GetOutputSignalMemory(1)); + + } + return ok; +} + +bool JASampleGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + REPORT_ERROR(ErrorManagement::Information, "input1 is %d.", *input1); + REPORT_ERROR(ErrorManagement::Information, "input2 is %f.", *input2); + REPORT_ERROR(ErrorManagement::Information, "inputXXX is %f.", *inputXXX); + + REPORT_ERROR(ErrorManagement::Information, "maltiply param value to input."); + + *output1 = *input1 * param1; + *output2 = *input2 * param2; + + REPORT_ERROR(ErrorManagement::Information, "output1 is %d.", *output1); + REPORT_ERROR(ErrorManagement::Information, "output2 is %f.", *output2); + + return true; +} + +CLASS_REGISTER(JASampleGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/JASampleGAM.h b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/JASampleGAM.h new file mode 100644 index 0000000..53f06ad --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/JASampleGAM.h @@ -0,0 +1,122 @@ +/** + * @file JASampleGAM.h + * @brief Header file for class JASampleGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JASampleGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JASampleGAM_H_ +#define GAMS_JASampleGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +/** + * @brief GAM Sample Usage. + * @details Sample + * + * The configuration syntax is: + * + *
+ * +SampleGAM = {
+ *     Class = JASampleGAM
+ *     InputSignals = {
+ *         Input1 = {
+ *             DataSource = "DDB"
+ *             Type = uint32
+ *             Default = 0
+ *         }
+ *         Input2 = {
+ *             DataSource = "DDB"
+ *             Type = float32
+ *             Default = 100
+ *         }
+ *         InputXXX = {
+ *             DataSource = "DDB"
+ *             Type = float32
+ *             NumberOfElements = 1
+ *         }
+ *     }
+ *     OutputSignals = {
+ *         Output1 = {
+ *             DataSource = "DDB"
+ *             Type = uint32
+ *             Default = 0
+ *         }
+ *         Output2 = {
+ *             DataSource = "DDB"
+ *             Type = int32
+ *             Default = 100
+ *         }
+ *     }
+ * }
+ * 
+ */ + + +class JASampleGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JASampleGAM(); + + virtual ~JASampleGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //GAM fixed parameters. + MARTe::uint32 param1; + MARTe::float32 param2; + + // Input signals + MARTe::uint32 *input1; + MARTe::float32 *input2; + MARTe::float32 *inputXXX; + + // Output signals + MARTe::uint32 *output1; + MARTe::float32 *output2; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JASampleGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/Makefile.inc new file mode 100644 index 0000000..c9bc4f2 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JARTSampleGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JARTSampleGAM$(LIBEXT) \ + $(BUILD_DIR)/JARTSampleGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.cpp b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.cpp new file mode 100644 index 0000000..3ab70d0 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.cpp @@ -0,0 +1,188 @@ +/** + * @file JASourceChoiseGAM.cpp + * @brief Source file for class JASourceChoiseGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JASourceChoiseGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JASourceChoiseGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JASourceChoiseGAM::JASourceChoiseGAM() { + // initialize member variables. + numberOfPVs = 0; +} + +JASourceChoiseGAM::~JASourceChoiseGAM() { +} + +bool JASourceChoiseGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("numberOfPVs", numberOfPVs); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The numberOfPVs parameter shall be specified"); + } + } + return ok; +} + +bool JASourceChoiseGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JASourceChoiseGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == numberOfPVs*3u); + if (ok) { + ok = (numberOfOutputSignals == numberOfPVs); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "%d *3 output signals shall be defined", numberOfPVs); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "%d input signals shall be defined", numberOfPVs); + } + // Do type check for input signals. + int int_num = 0; + int float_num = 0; + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + if(inputType == UnsignedInteger32Bit){ + int_num++; + } else if (inputType == Float32Bit) { + float_num++; + } else { + ok = false; + }; + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or flaot32", signalName.Buffer()); + } + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = ((outputType == UnsignedInteger32Bit) || (outputType == Float32Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or float32", signalName.Buffer()); + } + } + } + // Set memory + inputUInt32.resize(numberOfPVs*2); + inputFloat32.resize(numberOfPVs*2); + choise.resize(numberOfPVs); + outputUInt32.resize(numberOfPVs); + outputFloat32.resize(numberOfPVs); + + prevUInt32.resize(numberOfPVs*2); + prevFloat32.resize(numberOfPVs*2); + + if(ok){ + for(uint32 i=0; i(GetInputSignalMemory(3*i)); + inputUInt32[2*i+1] = reinterpret_cast(GetInputSignalMemory(3*i+1)); + choise[i] = reinterpret_cast(GetInputSignalMemory(3*i+2)); + outputUInt32[i] = reinterpret_cast(GetOutputSignalMemory(i)); + } else if(inputType == Float32Bit){ + inputFloat32[2*i] = reinterpret_cast(GetInputSignalMemory(3*i)); + inputFloat32[2*i+1] = reinterpret_cast(GetInputSignalMemory(3*i+1)); + choise[i] = reinterpret_cast(GetInputSignalMemory(3*i+2)); + outputFloat32[i] = reinterpret_cast(GetOutputSignalMemory(i)); + } + prevUInt32[2*i] = 0; + prevUInt32[2*i+1] = 0; + prevFloat32[2*i] = 0; + prevFloat32[2*i+1] = 0; + } + } + return ok; +} + +bool JASourceChoiseGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + + for (uint32 i=0; i < numberOfPVs; i++){ + if(*choise[i]==0){ + if(outputUInt32[i]){ + if(prevUInt32[i*2] != *inputUInt32[i*2]){ + *outputUInt32[i] = *inputUInt32[i*2]; + prevUInt32[i*2] = *inputUInt32[i*2]; + prevUInt32[1+i*2] = *inputUInt32[1+i*2]; + } + } else if(outputFloat32[i]){ + if(prevFloat32[i*2] != *inputFloat32[i*2]){ + *outputFloat32[i] = *inputFloat32[i*2]; + prevFloat32[i*2] = *inputFloat32[i*2]; + prevFloat32[1+i*2] = *inputFloat32[1+i*2]; + } + } + } else { + if(outputUInt32[i]){ + if(prevUInt32[1+i*2] != *inputUInt32[1+i*2]){ + *outputUInt32[i] = *inputUInt32[1+i*2]; + prevUInt32[i*2] = *inputUInt32[i*2]; + prevUInt32[1+i*2] = *inputUInt32[1+i*2]; + } + } else if (outputFloat32[i]){ + if(prevFloat32[1+i*2] != *inputFloat32[1+i*2]){ + *outputFloat32[i] = *inputFloat32[1+i*2]; + prevFloat32[i*2] = *inputFloat32[i*2]; + prevFloat32[1+i*2] = *inputFloat32[1+i*2]; + } + } + } + } + return true; +} + +CLASS_REGISTER(JASourceChoiseGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.h b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.h new file mode 100644 index 0000000..2a4cd80 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.h @@ -0,0 +1,84 @@ +/** + * @file JASourceChoiseGAM.h + * @brief Header file for class JASourceChoiseGAM + * @date Mar 04, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JASourceChoiseGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JASourceChoiseGAM_H_ +#define GAMS_JASourceChoiseGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +class JASourceChoiseGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JASourceChoiseGAM(); + + virtual ~JASourceChoiseGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + //GAM fixed parameters. + MARTe::uint32 numberOfPVs; + + // Input signals + std::vector inputUInt32; + std::vector inputFloat32; + std::vector choise; + + // Output signals + std::vector outputUInt32; + std::vector outputFloat32; + + // Previous Input value + std::vector prevUInt32; + std::vector prevFloat32; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JASourceChoiseGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/Makefile.inc new file mode 100644 index 0000000..cf441bb --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JASourceChoiseGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JASourceChoiseGAM$(LIBEXT) \ + $(BUILD_DIR)/JASourceChoiseGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.cpp b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.cpp new file mode 100644 index 0000000..1d3f9c1 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.cpp @@ -0,0 +1,206 @@ +/** + * @file JATerminalInterfaceGAM.cpp + * @brief Source file for class JATerminalInterfaceGAM + * @date Feb 19, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JATerminalInterfaceGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JATerminalInterfaceGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JATerminalInterfaceGAM::JATerminalInterfaceGAM() { + + // Fixed GAM input + aps_hvon_term = 0; + + // Parameters which get from Input signals. + mhvps_hvon = NULL_PTR(MARTe::uint32 *); + aps_hvon = NULL_PTR(MARTe::uint32 *); + aps_swon = NULL_PTR(MARTe::uint32 *); + bps_hvon = NULL_PTR(MARTe::uint32 *); + bps_swon = NULL_PTR(MARTe::uint32 *); + + stateMachineOutput = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignalNI6259 = NULL_PTR(MARTe::uint32 *); + outputSignalNI6528P3 = NULL_PTR(MARTe::uint8 *); + outputSignalNI6528P4 = NULL_PTR(MARTe::uint8 *); + + aps_hvon_state = 0; + aps_swon_state = 0; + mhvps_hvon_state = 0; + bps_hvon_state = 0; + bps_swon_state = 0; + p3Value = 0; + p4Value = 0; +} + +JATerminalInterfaceGAM::~JATerminalInterfaceGAM() { +} + +bool JATerminalInterfaceGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("mhvps_hvon_term", mhvps_hvon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon_term", aps_hvon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon_term", aps_swon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon_term", bps_hvon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon_term", bps_swon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon_term shall be specified"); + } + } + return ok; +} + +bool JATerminalInterfaceGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JATerminalInterfaceGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 9u); + if (ok) { + ok = (numberOfOutputSignals == 3u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Three output signals shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit || inputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint8", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint8", signalName.Buffer()); + } + } + } + if (ok) { + //mhvps_manm = reinterpret_cast(GetInputSignalMemory(0)); + mhvps_hvon = reinterpret_cast(GetInputSignalMemory(0)); + //aps_manm = reinterpret_cast(GetInputSignalMemory(2)); + aps_hvon = reinterpret_cast(GetInputSignalMemory(1)); + aps_swon = reinterpret_cast(GetInputSignalMemory(2)); + //bps_manm = reinterpret_cast(GetInputSignalMemory(5)); + bps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + bps_swon = reinterpret_cast(GetInputSignalMemory(4)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(5)); + stateMachineOutput = reinterpret_cast(GetInputSignalMemory(6)); + ni6528p3Value = reinterpret_cast(GetInputSignalMemory(7)); + ni6528p4Value = reinterpret_cast(GetInputSignalMemory(8)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(0)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(1)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(2)); + + } + return ok; +} + +bool JATerminalInterfaceGAM::Execute() { + using namespace MARTe; + uint8 sm = *stateMachineOutput; + + + //Update HVPS state + aps_hvon_state = ((sm >> (0))&1); + aps_swon_state = ((sm >> (4))&1); + mhvps_hvon_state = ((sm >> (2))&1); + bps_hvon_state = ((sm >> (1))&1); + bps_swon_state = ((sm >> (3))&1); + + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state; + *outputSignalNI6259 = 1*aps_swon_state; + //uint8 ni6528p3ValueTemp = 0;//*ni6528p3Value; + //ni6528p3ValueTemp &= ~(1<<2); //Does not turn on ni6258 aps switch + //Update terminal value + //*outputSignalNI6528P3 = ~(ni6528p3ValueTemp | p3Value); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + + p4Value = 8*mhvps_hvon_state; + *outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + return true; +} + +CLASS_REGISTER(JATerminalInterfaceGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.h b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.h new file mode 100644 index 0000000..773cbd6 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.h @@ -0,0 +1,157 @@ +/** + * @file JATerminalInterfaceGAM.h + * @brief Header file for class JATerminalInterfaceGAM + * @date Feb 19, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JATerminalInterfaceGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JATerminalInterfaceGAM_H_ +#define GAMS_JATerminalInterfaceGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM calculates one output value by comparing input value and fixed parameters. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ * 
+ *         +terminalInterfaceGAM = {
+ *           Class = JATerminalInterfaceGAM
+ *           mhvps_hvon_term = 4
+ *           aps_hvon_term = 1
+ *           aps_swon_term = 16
+ *           bps_hvon_term = 2
+ *           bps_swon_term = 8
+ *           InputSignals = {
+ *               MHVPS_HVON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = NI6259
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JATerminalInterfaceGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JATerminalInterfaceGAM(); + + virtual ~JATerminalInterfaceGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + // Fixed GAM input + MARTe::uint32 mhvps_hvon_term; + MARTe::uint32 aps_hvon_term; + MARTe::uint32 aps_swon_term; + MARTe::uint32 bps_hvon_term; + MARTe::uint32 bps_swon_term; + + // Input signals + //MARTe::uint32 *mhvps_manm; + MARTe::uint32 *mhvps_hvon; + + //MARTe::uint32 *aps_manm; + MARTe::uint32 *aps_hvon; + MARTe::uint32 *aps_swon; + + //MARTe::uint32 *bps_manm; + MARTe::uint32 *bps_hvon; + MARTe::uint32 *bps_swon; + + MARTe::uint32 *short_pulse_mode; + + MARTe::uint32 *stateMachineOutput; + MARTe::uint8 *ni6528p3Value; + MARTe::uint8 *ni6528p4Value; + + // Output signals + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JATerminalInterfaceGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/Makefile.inc new file mode 100644 index 0000000..ff7c79a --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JATerminalInterfaceGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JATerminalInterfaceGAM$(LIBEXT) \ + $(BUILD_DIR)/JATerminalInterfaceGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.cpp b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.cpp new file mode 100644 index 0000000..7004a1f --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.cpp @@ -0,0 +1,178 @@ +/** + * @file JATriangleWaveGAM.cpp + * @brief Source file for class JATriangleWaveGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JATriangleWaveGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "AdvancedErrorManagement.h" +#include "JATriangleWaveGAM.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +MARTe::float32 absFloat(MARTe::float32 x) { + if (x < 0.0f) { + return -x; + } + return x; +} + +JATriangleWaveGAM::JATriangleWaveGAM() { + frequency = NULL_PTR(MARTe::float32 *); + amplitude = NULL_PTR(MARTe::float32 *); + offset = NULL_PTR(MARTe::float32 *); + plcStandby = NULL_PTR(MARTe::uint32 *); + waveOutput = NULL_PTR(MARTe::float32 *); + time = 0.0f; +} + +JATriangleWaveGAM::~JATriangleWaveGAM() { +} + +bool JATriangleWaveGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + return GAM::Initialise(data); +} + +bool JATriangleWaveGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 4u); + if (ok) { + ok = (numberOfOutputSignals == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "One output signal shall be defined."); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Four input signals shall be defined."); + } + uint32 freqIndex; + uint32 ampIndex; + uint32 offsetIndex; + uint32 plcStandbyIndex; + if (ok) { + StreamString signalName = "Frequency"; + ok = GetSignalIndex(InputSignals, freqIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Frequency input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, freqIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Frequency shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Amplitude"; + ok = GetSignalIndex(InputSignals, ampIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Amplitude input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, ampIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Amplitude shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Offset"; + ok = GetSignalIndex(InputSignals, offsetIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Offset input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, offsetIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Offset shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "PLCSTANDBY"; + ok = GetSignalIndex(InputSignals, plcStandbyIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLCSTANDBY input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, plcStandbyIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLCSTANDBY shall be defined as uint32."); + } + } + } + if (ok) { + TypeDescriptor inputType = GetSignalType(OutputSignals, 0); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Amplitude shall be defined as float32."); + } + } + if (ok) { + frequency = reinterpret_cast(GetInputSignalMemory(freqIndex)); + amplitude = reinterpret_cast(GetInputSignalMemory(ampIndex)); + offset = reinterpret_cast(GetInputSignalMemory(offsetIndex)); + plcStandby = reinterpret_cast(GetInputSignalMemory(plcStandbyIndex)); + waveOutput = reinterpret_cast(GetOutputSignalMemory(0)); + } + return ok; +} + +bool JATriangleWaveGAM::Execute() { + using namespace MARTe; + // If frequency is not set, output 0. + if (*frequency <= 0.0f || *plcStandby == 0u) { + *waveOutput = 0.0f; + return true; + } + // Increase the current time. + ++time; + // Calculate the period in milliseconds + float32 periodMs = 1000.0 / *frequency; + // Make sure the time is on [0, periodMs] interval. + while (time > periodMs) { + time -= periodMs; + } + // Formula: + // f(x) = |x - 0.5| * 2 * amplitude + // where x is between 0 and 1 + *waveOutput = absFloat((time / periodMs) - 0.5f) * 2.0f * (*amplitude) + *offset; + return true; +} + +CLASS_REGISTER(JATriangleWaveGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.h b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.h new file mode 100644 index 0000000..22e34c3 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.h @@ -0,0 +1,130 @@ +/** + * @file JATriangleWaveGAM.h + * @brief Header file for class JATriangleWaveGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JATriangleWaveGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JATRIANGLEWAVEGAM_H_ +#define GAMS_JATRIANGLEWAVEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM provides triangular waveform output within 1kHz thread. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *      +CCPSWaveformGAM = {
+ *           Class = JATriangleWaveGAM
+ *           InputSignals = {
+ *               Offset = {
+ *                   Alias = OFFSET
+ *                   DataSource = EPICSCAInput
+ *                   Type = float32
+ *               }
+ *               Frequency = {
+ *                   Alias = CCPS_OUTPUT_FREQ
+ *                   DataSource = EPICSCAInput
+ *                   Type = float32
+ *               }
+ *               Amplitude = {
+ *                   Alias = CCPS_OUTPUT_AMP
+ *                   DataSource = EPICSCAInput
+ *                   Type = float32
+ *               }
+ *               PLCCCPSON = {
+ *                   Alias = PLC_CCPSON
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+  *              READY = {
+ *                   Alias = PLC_READY
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               CCPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JATriangleWaveGAM : public MARTe::GAM { +public: + CLASS_REGISTER_DECLARATION() + + JATriangleWaveGAM(); + + virtual ~JATriangleWaveGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); +private: + // Input signal containing the frequency of the waveform. + MARTe::float32 *frequency; + + // Input signal containing the amplitude of the waveform. + MARTe::float32 *amplitude; + + // Input signal cantaining the offset of the waveform. + MARTe::float32 *offset; + + // Input signal containing CCPS_ON_REQUEST + //MARTe::uint32 *plcccpson; + + // Input signal condition CCPS_READY + //MARTe::uint32 *plcReady; + + // Input signal condition CCPS_STANDBY + MARTe::uint32 *plcStandby; + + MARTe::float32 *waveOutput; + + MARTe::float32 time; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JATRIANGLEWAVEGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/Makefile.inc new file mode 100644 index 0000000..2e2dfed --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/Makefile.inc @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JATriangleWaveGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JATriangleWaveGAM$(LIBEXT) \ + $(BUILD_DIR)/JATriangleWaveGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/JAWFRecordGAM.cpp b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/JAWFRecordGAM.cpp new file mode 100644 index 0000000..b26b6bd --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/JAWFRecordGAM.cpp @@ -0,0 +1,317 @@ +/** + * @file JAWFRecordGAM.cpp + * @brief Source file for class JAWFRecordGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAWFRecordGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAWFRecordGAM.h" + +#include "AdvancedErrorManagement.h" +#include "CLASSMETHODREGISTER.h" +#include "File.h" +#include "MessageI.h" +#include "RegisteredMethodsMessageFilter.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +// How often output signals are updated. +const MARTe::uint32 cycleMs = 10u; + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAWFRecordGAM::JAWFRecordGAM() : + GAM() { + filenameSignalIndex = 0u; + timeSignal = NULL_PTR(MARTe::int32 *); + loadTriggerSignal = NULL_PTR(MARTe::uint32 *); + valueSignals = NULL_PTR(MARTe::float32 **); + maxElements = 0u; + readOnce = true; +} + +JAWFRecordGAM::~JAWFRecordGAM() { + if (valueSignals != NULL_PTR(MARTe::float32 **)) { + delete[] valueSignals; + } +} + +bool JAWFRecordGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("Directory", directory); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Directory shall be specified"); + } + } + return ok; +} + +bool JAWFRecordGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 2u); + if (ok) { + ok = (numberOfOutputSignals > 1u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "At least two output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Two input signal with the filename and file load trigger shall be defined"); + } + if (ok) { + StreamString signalName = "Filename"; + ok = GetSignalIndex(InputSignals, filenameSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Filename input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, filenameSignalIndex); + ok = (inputType == CharString); + if (!ok) { + ok = (inputType == Character8Bit); + } + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, filenameSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as string", signalName.Buffer()); + } + } + } + if (ok) { + StreamString signalName = "CSV_LOAD"; + uint32 loadSignalIndex; + ok = GetSignalIndex(InputSignals, loadSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "CSV_LOAD input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, loadSignalIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, loadSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } else { + loadTriggerSignal = reinterpret_cast(GetInputSignalMemory(loadSignalIndex)); + } + } + } + if (ok) { + TypeDescriptor timeType = GetSignalType(OutputSignals, 0); + + ok = (timeType == SignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, 0, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as int32", signalName.Buffer()); + } + + uint32 i; + for (i = 1u; (i < numberOfOutputSignals) && (ok); i++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, i); + ok = (outputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, i, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } + else { + uint32 dimentionsCount; + ok = GetSignalNumberOfDimensions(OutputSignals, 0u, dimentionsCount); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Output signals shall have 1 dimension."); + } + else { + uint32 elementsCount; + ok = GetSignalNumberOfElements(OutputSignals, 0u, elementsCount); + if (maxElements == 0) { + maxElements = elementsCount; + } + else { + ok = (maxElements == elementsCount); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Output signals shall have consistent number of elements."); + } + } + } + } + } + } + if (ok) { + valueSignals = new float32*[numberOfOutputSignals - 1u]; + uint32 i; + for (i = 1u; i < numberOfOutputSignals; i++) { + valueSignals[i - 1] = reinterpret_cast(GetOutputSignalMemory(i)); + } + timeSignal = reinterpret_cast(GetOutputSignalMemory(0)); + } + return ok; +} + +bool JAWFRecordGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + if (strcmp(nextStateName, "WaitReady") == 0) { + // Reset read once flag when reentering WaitReady state. + readOnce = true; + } + return true; +} + +void JAWFRecordGAM::LoadFile() { + using namespace MARTe; + + bool ok = true; + + const char8 * const filenameSignal = reinterpret_cast(GetInputSignalMemory(filenameSignalIndex)); + StreamString filename = directory; + filename += DIRECTORY_SEPARATOR; + filename += filenameSignal; + REPORT_ERROR(ErrorManagement::Debug, "Opening file %s", filename.Buffer()); + + File f; + ok = f.Open(filename.Buffer(), BasicFile::ACCESS_MODE_R); + + uint32 numberOfPreProgrammedTimeRows = 0u; + int32 *preProgrammedTime; + float32 **preProgrammedValues; + uint32 numberOfPreProgrammedValues = 0u; + + if (ok) { + StreamString tokenLine; + while (f.GetLine(tokenLine)) { + if (tokenLine[0] != '#') { + numberOfPreProgrammedTimeRows++; + } + tokenLine = ""; + } + f.Seek(0); + uint32 t = 0u; + tokenLine = ""; + while ((ok) && (f.GetLine(tokenLine))) { + if (tokenLine[0] == '#') { + tokenLine = ""; + continue; + } + if (numberOfPreProgrammedValues == 0) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + while (tokenLine.GetToken(token, ",", ignored)) { + numberOfPreProgrammedValues++; + token = ""; + } + ok = numberOfPreProgrammedValues == numberOfOutputSignals; + // Remove time from pre-programmed values count. + numberOfPreProgrammedValues -= 1u; + if (ok) { + preProgrammedTime = new int32[maxElements]; + memset(preProgrammedTime, 0, maxElements * sizeof(int32)); + preProgrammedValues = new float32*[numberOfPreProgrammedValues]; + uint32 j; + for (j = 0u; j < numberOfPreProgrammedValues; j++) { + preProgrammedValues[j] = new float32[maxElements]; + memset(preProgrammedValues[j], 0, maxElements * sizeof(float32)); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Number of columns in csv file (%d) is not consistent with the number of output signals (%d)", numberOfPreProgrammedValues, + numberOfOutputSignals - 1u); + } + } + if (ok) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + uint32 idx = 0u; + while (tokenLine.GetToken(token, ",", ignored)) { + if (idx == 0u) { + preProgrammedTime[t] = atoi(token.Buffer()); + } + else { + ok = ((idx - 1) < numberOfPreProgrammedValues); + if (ok) { + preProgrammedValues[idx - 1][t] = static_cast(atof(token.Buffer())); + } + else { + REPORT_ERROR(ErrorManagement::FatalError, "Number of columns in csv file is not consistent with the number of output signals in line %d", t); + } + } + token = ""; + idx++; + } + t++; + } + tokenLine = ""; + } + f.Close(); + } else { + REPORT_ERROR(ErrorManagement::Debug, "Cannot open the file %s", filename.Buffer()); + return; + } + if (numberOfPreProgrammedTimeRows > maxElements) { + REPORT_ERROR(ErrorManagement::Warning, "Only %d (out of %d) of pre-programmed values will be written to waveform record.", + maxElements, numberOfPreProgrammedTimeRows); + } + ok = MemoryOperationsHelper::Copy(timeSignal, preProgrammedTime, maxElements * sizeof(int32)); + uint32 i; + for (i = 0u; (i < numberOfPreProgrammedValues) && (ok); ++i) { + ok = MemoryOperationsHelper::Copy(valueSignals[i], preProgrammedValues[i], maxElements * sizeof(float32)); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::Warning, "Failed to write data to waveform record."); + } + + if (preProgrammedValues != NULL_PTR(float32 **)) { + uint32 i; + for (i = 0u; i < numberOfPreProgrammedValues; i++) { + delete preProgrammedValues[i]; + } + delete[] preProgrammedValues; + } + if (preProgrammedTime != NULL_PTR(int32 *)) { + delete[] preProgrammedTime; + } +} + +bool JAWFRecordGAM::Execute() { + if (*loadTriggerSignal == 1u) { + if (readOnce) { + LoadFile(); + readOnce = false; + } + } else { + // Reset read once flag when loadTriggerSignal is reset. + readOnce = true; + } + return true; +} + +CLASS_REGISTER(JAWFRecordGAM, "1.0") diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/JAWFRecordGAM.h b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/JAWFRecordGAM.h new file mode 100644 index 0000000..ee22c1a --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/JAWFRecordGAM.h @@ -0,0 +1,130 @@ +/** + * @file JAWFRecordGAM.h + * @brief Header file for class JAWFRecordGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAWFRecordGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAWFRECORDGAM_H_ +#define GAMS_JAWFRECORDGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include "Message.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that is used for pre-programmed operation. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *       +WFRecordGAM = {
+ *           Class = JAWFRecordGAM
+ *           Directory = "../Configurations" 
+ *           InputSignals = {
+ *               CSV_LOAD = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               Filename = {
+ *                   Alias = CSV_NAME
+ *                   DataSource = EPICSCAInput
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               PREP_TIME_WF = {
+ *                   DataSource = DDB1
+ *               }
+ * *             MHVPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               BPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               APS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               MCPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               GCPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               FHPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *           }
+ *       }
+ * 
+ * + */ + +class JAWFRecordGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAWFRecordGAM(); + + virtual ~JAWFRecordGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + void LoadFile(); + + MARTe::uint32 filenameSignalIndex; + + MARTe::uint32 *loadTriggerSignal; + + MARTe::StreamString directory; + + MARTe::float32 **valueSignals; + + MARTe::int32 *timeSignal; + + MARTe::uint32 maxElements; + + // Flag determining whether file should be read (so it isn't read multiple time) + bool readOnce; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAWFRECORDGAM_H_ */ diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/Makefile.gcc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/Makefile.inc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/Makefile.inc new file mode 100644 index 0000000..cd7a5f1 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/Makefile.inc @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAWFRecordGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAWFRecordGAM$(LIBEXT) \ + $(BUILD_DIR)/JAWFRecordGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/Makefile.gcc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/Makefile.gcc new file mode 100644 index 0000000..e0a2fc4 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/Makefile.gcc @@ -0,0 +1,26 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +############################################################# + +include Makefile.inc + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/Makefile.inc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/Makefile.inc new file mode 100644 index 0000000..9dfc5c1 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/GAMs/Makefile.inc @@ -0,0 +1,45 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +SPB = JAMessageGAM.x JAPreProgrammedGAM.x JAModeControlGAM.x \ + JAWFRecordGAM.x JATriangleWaveGAM.x JARampupGAM.x \ + JARTStateMachineGAM.x JASDNRTStateMachineGAM.x JATerminalInterfaceGAM.x \ + JABitSumGAM.x JAConditionalSignalUpdateGAM.x JASourceChoiseGAM.x JABitReverseGAM.x + +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults + +ROOT_DIR=.. +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +all: $(OBJS) $(SUBPROJ) check-env + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + +check-env: +ifndef MARTe2_DIR + $(error MARTe2_DIR is undefined) +endif diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Makefile.inc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Makefile.inc new file mode 100644 index 0000000..1e256f8 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Makefile.inc @@ -0,0 +1,42 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +SPB = DataSources.x GAMs.x + +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults + +ROOT_DIR=. +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +all: $(OBJS) $(SUBPROJ) check-env + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + +check-env: +ifndef MARTe2_DIR + $(error MARTe2_DIR is undefined) +endif + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Makefile.linux b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Makefile.linux new file mode 100644 index 0000000..04cde43 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Makefile.linux @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +############################################################# +export TARGET=x86-linux + +include Makefile.inc + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/README.md b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/README.md new file mode 100644 index 0000000..2064aac --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/README.md @@ -0,0 +1 @@ +QST Gyrotron Fast Controller Implementation with MARTe2 RT Application Framework diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Startup/Main.sh b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Startup/Main.sh new file mode 100644 index 0000000..b425a77 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Startup/Main.sh @@ -0,0 +1,195 @@ +#!/bin/bash +#Arguments -f FILENAME -m MESSAGE [-d cgdb|strace] -x DAN_CONFIG_LOCATION -r root +#-f FILENAME=MARTe configuration file +#-m MESSAGE=Start message +#-d cgdb=Run with cgdb +#-d strace=Run with strace +#-x DAN_CONFIG_LOCATION=Location of the DANConfig.xml (e.g. ~/Projects/ECJASDN/Configurations/DANTestConfig.xml) +#-r run as root + +#Run with cgdb or strace? +DEBUG="" + +#Consume input arguments +while [[ $# -gt 1 ]] +do +key="$1" + +case $key in + -f|--file) + FILE="$2" + shift # past argument + ;; + -m|--message) + MESSAGE="$2" + shift # past argument + ;; + -s|--state) + STATE="$2" + shift # past argument + ;; + -d|--debug) + DEBUG="$2" + shift # past argument + ;; + -x|--dan_config) + DAN_CONFIG_LOCATION="$2" + shift # past argument + ;; + -i|--dan_ip) + DAN_MASTER_IP="$2" + shift # past argument + ;; + -r|--root) + RUN_AS_ROOT="root" + shift # past argument + ;; + --default) + DEFAULT=YES + ;; + *) + # unknown option + ;; +esac +shift # past argument or value +done + +if [ -z ${MARTe2_DIR+x} ]; then + echo "Please set the MARTe2_DIR environment variable"; + exit; +fi + +if [ -z ${MARTe2_Components_DIR+x} ]; then + #Check if this is a CCS deployment + MARTe2_Components_DIR_CSS=$MARTe2_DIR/Build/x86-linux/Components/ + if [ -d ${MARTe2_Components_DIR_CSS+x} ]; then + MARTe2_Components_DIR=$MARTe2_DIR + else + echo "Please set the MARTe2_Components_DIR environment variable"; + exit; + fi +fi + +echo $MARTe2_Components_DIR + +LD_LIBRARY_PATH=. +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_DIR/Build/x86-linux/Core/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/EPICSCA/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/LinuxTimer/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/LoggerDataSource/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/DAN/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/NI6259/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/NI6368/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/SDN/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/UDP/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/MDSWriter/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/RealTimeThreadAsyncBridge/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/RealTimeThreadSynchronisation/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/FileDataSource/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/IOGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/BaseLib2GAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/ConversionGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/FilterGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/StatisticsGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/WaveformGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/ConstantGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/Interfaces/BaseLib2Wrapper/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/Interfaces/SysLogger/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/Interfaces/EPICS/ +### Add own datasource lib path +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/DataSources/RandomDataSource/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/DataSources/NI6528/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/DataSources/JAEPICSCA/ +### Add own GAM lib path +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/ESDNValidationGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAMessageGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAPreProgrammedGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JACountdownGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAWaitStandbyGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAConditionalSignalUpdateGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JATimerGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAESDNProcessCommandGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAModeControlGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JATimedSignalUpdateGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAHVArmedSyncGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JARFONSyncGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAWFRecordGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JATriangleWaveGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JARampupGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JACounterGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JARTStateMachineGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JASDNRTStateMachineGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JATerminalInterfaceGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JABitSumGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JASourceChoiseGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JABitReverseGAM/ +### Add EPICS lib path +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$EPICS_BASE/lib/$EPICS_HOST_ARCH +#LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/FilterDownsamplingGAM/ +#LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/mdsplus/lib64/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$SDN_CORE_LIBRARY_DIR +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/codac/lib/ + + +echo $LD_LIBRARY_PATH +export LD_LIBRARY_PATH=$LD_LIBRARY_PATH + +#Starts the DAN services only if required +if [ ! -z "$DAN_CONFIG_LOCATION" ]; then + export DAN_ARCHIVE_MASTER=$DAN_MASTER_IP + echo $DAN_MASTER_IP + /opt/codac/bin/danApiTool api close + /opt/codac/bin/danApiTool api init $DAN_CONFIG_LOCATION +fi + +NR_CPUS=16 +#Setup performance +#Disable CPU speed changing +#service cpuspeed stop +#memo:Redirecting to /bin/systemctl stop cpuspeed.service +#memo:Failed to stop cpuspeed.service: Unit cpuspeed.service not loaded. +# + +# Migrate irq to CPU0 +#for D in $(ls /proc/irq) +#do +#if [ -x "/proc/irq/$D" ] && [ $D != "0" ] +#then +# echo $D +# echo 1 > /proc/irq/$D/smp_affinity +#fi +#done + + +#Location of the MARTe2 application loader +MARTe2APP=$MARTe2_DIR/Build/x86-linux/App/MARTeApp.ex + +#Start with cgdb or with strace +if [ "$DEBUG" = "cgdb" ]; then + cgdb --args $MARTe2APP -l RealTimeLoader -f $FILE -m $MESSAGE +elif [ "$DEBUG" = "strace" ]; then + strace -o/tmp/strace.err $MARTe2APP -l RealTimeLoader -f $FILE -m $MESSAGE +else + if [ -z ${RUN_AS_ROOT+x} ]; then + if [ -z ${STATE+x} ]; then + echo "taskset was not used." + sleep 1 + $MARTe2APP -l RealTimeLoader -f $FILE -m $MESSAGE + else + $MARTe2APP -l RealTimeLoader -f $FILE -s $STATE + fi + else + if [ -z ${STATE+x} ]; then + echo "taskset was used." + sleep 1 + taskset 1 $MARTe2APP -l RealTimeLoader -f $FILE -m $MESSAGE + else + taskset 1 $MARTe2APP -l RealTimeLoader -f $FILE -s $STATE + fi + fi +fi + + +if [ ! -z "$DAN_CONFIG_LOCATION" ]; then + /opt/codac/bin/danApiTool api close +fi diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Startup/runECPCSub.sh b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Startup/runECPCSub.sh new file mode 100644 index 0000000..3254982 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Startup/runECPCSub.sh @@ -0,0 +1 @@ +./Main.sh -f ../Configurations/tests/ECPCSubscriber.cfg -l RealTimeLoader -m StateMachine:Start \ No newline at end of file diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Startup/runEPICSTEST.sh b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Startup/runEPICSTEST.sh new file mode 100644 index 0000000..c141074 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Startup/runEPICSTEST.sh @@ -0,0 +1,2 @@ +./Main.sh -f ../Configurations/tests/EPICS_Test.cfg -l RealTimeLoader -m StateMachine:START + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Startup/runHWTEST.sh b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Startup/runHWTEST.sh new file mode 100644 index 0000000..5991673 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Startup/runHWTEST.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +./Main.sh -f ../Configurations/tests/NI6528_NI6259_test.cfg -l RealTimeLoader -m StateMachine:START + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Startup/runMain.sh b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Startup/runMain.sh new file mode 100644 index 0000000..623ae28 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Startup/runMain.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +taskset -c 8-11 ./Main.sh -f ../Configurations/JAGyrotronA_FY19_P1.cfg -l RealTimeLoader -m StateMachine:Start + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Startup/runMainB.sh b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Startup/runMainB.sh new file mode 100644 index 0000000..a6fb765 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Startup/runMainB.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +taskset -c 12-15 ./Main.sh -f ../Configurations/JAGyrotronB_FY19_P1.cfg -l RealTimeLoader -m StateMachine:Start diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Startup/runNI6528TEST.sh b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Startup/runNI6528TEST.sh new file mode 100644 index 0000000..ae06cf5 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Startup/runNI6528TEST.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +./Main.sh -f ../Configurations/tests/NI6528_test.cfg -l RealTimeLoader -m StateMachine:START + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/beamon_test_async_GYB.py b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/beamon_test_async_GYB.py new file mode 100644 index 0000000..90477ef --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/beamon_test_async_GYB.py @@ -0,0 +1,51 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +import test_async +import test_sync +import test_ready_hw +import test_setup_hw +import test_standby_hw +import test_ready +import test_setup +import test_standby + + +"""" +Test GYB operation with Async mode. +This code can be executed when WaitPermit state. +""" +# turn on permit +print '2.. set PulseLengthLimitMode to 1 flag' +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) +res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) +time.sleep(1) +print '3. Write PERMIT' +#res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SCAN Passive', shell=True) +#res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SIML ', shell=True) +#res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SIMM 1', shell=True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 1', shell=True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 1', shell=True) +time.sleep(1) +# trun on HVON trigger +print '4. Write HVON' +#res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SCAN Passive', shell=True) +#res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SIML ', shell=True) +#res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SIMM 1', shell=True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC +time.sleep(11) +print '5. Confirm generated pulse' +print '6. Reset HVON' +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) +time.sleep(1) +print '7. Reset PERMIT' +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 0', shell=True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 0', shell=True) +print "end of async, non-prepro mode test!" + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test.py b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test.py new file mode 100644 index 0000000..82a2603 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test.py @@ -0,0 +1,90 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +import test_async +import test_sync +import test_ready_hw +import test_setup_hw +import test_standby_hw +import test_ready +import test_setup +import test_standby + +# +# Some EPICS PVs need to be simulation mode when we test code without PXI board. +# When user uses sim mode, new value must be written into PV.SVAL and PV itselfself. +# +print '### Start State Machine Sequence Test ###' + +print '---------- Pre setup for the test ----------' +test_setup.test_setup() +#test_setup_hw.test_setup() + +print 'Enter to continue test:' +inpval = raw_input() +################################################################################ +# set SELECT and STANDBY signal +################################################################################ +print '---------- WatiStandby test ----------' +test_standby.test_standby() +#test_standby_hw.test_standby() + +print 'Enter to continue test' +inpval = raw_input() + +################################################################################ +# set READY and CCPS_ON_REQUEST signal +################################################################################ +print '---------- WatiReady test ----------' +test_ready.test_ready() +#test_ready_hw.test_ready() + +print 'Enter to continue test' +inpval = raw_input() +################################################################################ +# set PERMIT and ON signal +################################################################################ +print 'Simulate PERMIT signal. State should go to WaitHVON state' +while(1): + print '''Select test type and push enter key: + 1: GYA / Async mode + 2: GYB / Async mode + 3: Two Gyrotron operation + 4: Mode limit detection + 5: Short pulse + 6: Long pulse + 7: PrePro operation + 8: SYNC mode operation + 9: GYA / Async mode --- operator set delay and pulse length on HMI + 10: GYB / Async mode --- operator set delay and pulse length on HMI + ''' + inpval = raw_input() + + if inpval == "1": + test_async.test_async_GYA() + elif inpval == "2": + test_async.test_async_GYB() + elif inpval == "3": + test_async.test_async_both() + elif inpval == "4": + test_async.test_async_limit() + elif inpval == "5": + test_async.test_async_shortpulse() + elif inpval == "6": + test_async.test_async_longpulse() + elif inpval == "7": + test_async.test_async_prepro() + elif inpval == "8": + test_sync.test_sync() + elif inpval == "9": + test_async.test_async_GYA_manual() + elif inpval == "10": + test_async.test_async_GYB_manual() + else: + print 'invalid value. Enter 1 to 10!' + continue + +print '..... End of test code .....' diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_async.py b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_async.py new file mode 100644 index 0000000..8f595b2 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_async.py @@ -0,0 +1,414 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + + +def test_async(): + """" + Simulate permit signal and ON signal from PLC. + Confirm pulse generation with async mode. 10ms + """ + print '1.set beam-on schedule (10ms diff + 3s pulse.)' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 10000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 20000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 30000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 40000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 50000000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 1000000', shell=True) + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 10000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(1) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print "end of async, non-prepro mode test!" + +def test_async_limit(): + """" + Mode Limit Stop test. + Pulse lenght was set to 3s, but it stop in 1s because of mode limit. + """ + print '1.set beam-on schedule' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 1000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 11000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 21000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 31000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 41000000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 3000000', shell=True) + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(6) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print "end of async, non-prepro mode test!" + +def test_async_prepro(): + """PrePro mode test""" + print '1.set beam-on schedule' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 100000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 200000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 300000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 400000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 500000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 3000000', shell=True) + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 10000000', shell = True) + time.sleep(1) + print '1.Set Pre-Pro flag' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-PREP-MODE 1', shell = True) + time.sleep(1) + print '2.Reset Mode 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 0', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 0', shell = True) + print '3.Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(2) + print '4.Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) + time.sleep(4) + print '5.Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(3) + print '6.Reset Pre-Pro flag' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-PREP-MODE 0', shell = True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print 'end of async, prepro mode testscript!' + +def test_async_shortpulse(): + """Short Pulse Mode test""" + #print '1.Set puls length to 1ms (1ms diff)' + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-SHORT-PULSE 1', shell=True) #Set short pulse mode. + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 1000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 2000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 3000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 4000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 5000', shell=True) #Should be grater than 1ms. + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 1000', shell=True) + print '1.Set puls length to 100us (100us diff)' + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-SHORT-PULSE 1', shell=True) #Set short pulse mode. + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 100', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 200', shell=True) + #res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 300', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 400', shell=True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 800', shell=True) #Should be grater than 1ms. + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 100', shell=True) + print '1.Set puls length (100us diff)' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-SHORT-PULSE 1', shell=True) #Set short pulse mode. + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 100', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 200', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 300', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 400', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 800', shell=True) #Should be grater than 1ms. + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 500', shell=True) + print '2.Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(1) + print '3.Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(1) + print '4.Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '5.Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print '6.Reset short pulse mode' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-SHORT-PULSE 0', shell=True) #Set short pulse mode. + print "-----------------------------------------\n" + +def test_async_longpulse(): + """" + Simulate permit signal and ON signal from PLC. + Confirm pulse generation with async mode. 10ms + """ + print '1.set beam-on schedule (10ms diff + 50ms pulse.)' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 10000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 20000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 30000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 40000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 50000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 3600000000', shell=True) + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 180000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(185) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print "end of async, non-prepro mode test!" + +def test_async_both(): + """" + Simultanious operation test. + """ + print '1.set beam-on schedule (10ms diff + 500ms pulse.)' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 10000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 20000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 30000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 40000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 50000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 500000', shell=True) + + res = subprocess.call('caput EC-GN-P01-PA2F:STAT-DT-HVON 10000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:STAT-DT-HVON 20000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:STAT-DT-SWON 40000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA2F:STAT-DT-SWON 50000', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-DT-SHOTLEN 500000', shell=True) + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(1) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 0', shell=True) + print "end of async, non-prepro mode test!" + +def test_async_GYA(): + """" + Test GYA operation with Async mode. + """ + #print '1.set beam-on schedule (1s diff + 1s pulse.)' + #print '1.set beam-on schedule (100ms diff + 1s pulse.)' + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 100000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 200000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 300000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 400000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 500000', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 1000000', shell=True) + #print '1.set beam-on schedule (10ms diff + 100ms pulse.)' + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 10000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 20000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 30000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 40000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 50000', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 100000', shell=True) + #print '1.set beam-on schedule (1ms diff + 10ms pulse.)' + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 1000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 2000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 3000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 4000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 5000', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 10000', shell=True) + print '1.set beam-on schedule (1s diff + 20s pulse.)' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 1000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 2000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 3000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 4000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 5000000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 20000000', shell=True) + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(30) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print "end of async, non-prepro mode test!" + +def test_async_GYB(): + """" + Test GYB operation with Async mode. + """ + print '1.set beam-on schedule (1s diff + 1s pulse.)' + res = subprocess.call('caput EC-GN-P01-PA2F:STAT-DT-HVON 1000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:STAT-DT-HVON 2000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 3000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:STAT-DT-SWON 4000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA2F:STAT-DT-SWON 5000000', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-DT-SHOTLEN 20000000', shell=True) + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(30) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 0', shell=True) + print "end of async, non-prepro mode test!" +def test_async_GYA_manual(): + """" + Test GYA operation with Async mode. + """ + print '1.. Set delays and pulse length on HMI and set sleep time here:' + inp_val = raw_input() + try: + sleep_time = float(inp_val) + except: + return + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(sleep_time) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print "end of async, non-prepro mode test!" + +def test_async_GYB_manual(): + """" + Test GYA operation with Async mode. + """ + print '1.. Set delays and pulse length on HMI and set sleep time here:' + inp_val = raw_input() + try: + sleep_time = float(inp_val) + except: + return + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(sleep_time) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 0', shell=True) + print "end of async, non-prepro mode test!" diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_async.pyc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_async.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f899918b0c2bf4fa267029b3508985b2028ac207 GIT binary patch literal 18679 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 CH!=4B literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready.py b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready.py new file mode 100644 index 0000000..72089d8 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready.py @@ -0,0 +1,38 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +def test_ready(): + """In the WaitReady state, simulate READY signal from PLC.""" + print '---------- WatiReady test ----------' + print '1. Simulate READY signal. State should go to WaitPermit state.' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST2R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST2R 1', shell=True) + print '2. Set CCPS trianguler waveform parameters(1V, 1Hz)' + res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-AMP 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-FREQ 1', shell=True) #Hz + res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-AMP 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-FREQ 1', shell=True) #Hz + time.sleep(1) + print '3. load csv file.' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-CSV-NAME test.csv', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-CSV-LOAD 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-CSV-NAME test2.csv', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-CSV-LOAD 1', shell=True) + time.sleep(1) + print '4. Simulate CCPS_ON_REQUEST signal' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS1.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS1 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS2.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS2 1', shell=True) + time.sleep(1) + print '5. Confirm CCPS_ON flag and triangular waveform generation.' + print '6. Simulate CCPS status PVs.' + res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-OP-V-DIFF.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-CCPS:PSU2320-TR 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-OP-V-DIFF.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-CCPS:PSU2320-TR 1', shell=True) + print '7. Confirm PCF state changes to WaitPermit state.' + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready.pyc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready.pyc new file mode 100644 index 0000000000000000000000000000000000000000..68b2851b04e48dee71d4fc8c763069e3f1127910 GIT binary patch literal 2241 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 gMd0o>B?bFEbP2iVD>(*OVf literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_rup_confirm.py b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_rup_confirm.py new file mode 100644 index 0000000..3f14868 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_rup_confirm.py @@ -0,0 +1,106 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +# +# Some EPICS PVs need to be simulation mode when we test code without PXI board. +# When user uses sim mode, new value must be written into PV.SVAL and PV itselfself. +# +print '### Start State Machine Sequence Test ###' + +def test_setup(): + """ + Setup EPICS PVs for testing. + Turn simulation mode ON for unavailable device + """ + print '---------- Start setup for the test ----------' + + print '1. set PVs to simulation mode' + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-AI-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF:STAT-AI-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DI-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-DI-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-MCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF-MCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-GCPS:STAT-SIMM YES', shell=True) #turn off for GCPS test. + #res = subprocess.call('caput EC-GN-P01-GBF-GCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-FHPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF-FHPS:STAT-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YFLT.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YFLT.SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YFLT.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YFLT 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YFLT.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YFLT.SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YFLT.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YFLT 0', shell=True) + time.sleep(1) + print '2. Change SCAN mode from I/O Inter to Passive to write sumulated values.' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1.SCAN Passive', shell=True)#SELECT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2.SCAN Passive', shell=True)#SELECT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R.SCAN Passive', shell=True) #STANDBY + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST2R.SCAN Passive', shell=True) #READY + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SCAN Passive', shell=True) #ON + res = subprocess.call('caput EC-GN-P01-PMF:PSU0000-TYSTA.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YSTA.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YSTA.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SCAN Passive', shell=True) #PERMIT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SCAN Passive', shell=True) #PERMIT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD2.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD3.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD4.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS.SCAN Passive', shell = True) #SYNC/ASYNC + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS1.SCAN Passive', shell=True) #CCPS ON REQUEST + time.sleep(1) + print '3. Set pulse length limit mode value and state.' + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 10000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD2-LIM 100000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD3-LIM 1000000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD4-LIM 10000000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD2.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD2 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD3.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD3 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD4.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD4 0', shell = True) #Pulse lenght mode + print '4. Set other operation modes' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-PREP-MODE 0', shell = True) #Pre-pro mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS.SVAL 0', shell = True) #SYNC/ASYNC mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS 0', shell = True) #SYNC/ASYNC mode + res = subprocess.call('caput EC-GN-P01-GAF:STAT-SHORT-PULSE 0',shell = True) #Short pulse mode + time.sleep(1) + print '5. Set a beam-on schedule(10ms diff + 100ms pulse)' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 10000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 20000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 30000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 40000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 50000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 100000', shell=True) + time.sleep(1) + print '6. Reset PLC INTERLOCK' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP.SIMM 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP.SCAN 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP 0', shell=True) #CCPS_IS_OPERATION + res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP.SIMM 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP.SCAN 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-RST-FLT 1', shell=True) + print '7. Simulate SELECT signal. State should go to WatiStandby from Disabled.' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2 1', shell=True) + time.sleep(1) + print '8. Simulate STANDBY signal. MCPS, GCPS, FHPS rampup must be started.' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R 1', shell=True) + print '---------- END setup for the test ----------' diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_rup_confirm.pyc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_rup_confirm.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b3a9917f8c94fdcbe8fb3564d998bf88d480af90 GIT binary patch literal 5717 zcmcIoS$En-6c%>K;>O*RZb>_hvp9=DELrNNNwC0}hD8S{$ssSUjK)Se0uhbm9zXP{ z{TY4gFYGz}0qva;AO>y>&N;agKA_+H(CW{tqdq+v896{Dt`#CXZbfgg|%ws?1Nm=Odk z3I>F^{m8RJ*B_9+?@-ce3Su;{k8Ibo_dQA+dgOMgFku<+u1-Fq=Lr)%3I9DR`XCdE z%C3S*E<=DM!U+A@KG}6(bnRgjl8UZYo2sD|)M{yG%d|?CTCS;Pt!KD?cbrAS{Qp>hT zZ4gq(MSrX~zx*|Dp(bIG$VTdrBioB8%dk8mMAb02jJjUToO^k*}XGjZ8wK}kBe4=2Q zjCMngZaKUBoSn9yKR#8B@=RJRXEc)(%NZ5qVJ&A=l#Lc;EuUMpVVLGA%|LoxH_RC^ zvY=og!=Dpm7s*m6Ssvat|ksMvwPzdxj0SM(A|7`1DWJWywlx4qfYjl5goQ@>@hL#7;@<} zj`K@9hI~7Xg!W-?1p*C9O3V6D= zNd9C6#6jX&HZ@;k18|Ne?>Gu`x7D^(<3-)%aqyLRKOT`y_Nm=hp+I8Y9(5v*ZsxQ; zBaVA;K<@Hnha0hgZlgIbN(YDnN*PPteF+8DyVr-o_gIOW7i$TN+<;wQqVjSEUv`pP z^A&_pd^eXr8ODAE_rBnw={^<@Mh5y>^~z{)8oLYvKFE+Z6?I=-C$*+kY1do&b5taG z;k1p6sQGeBa(Rh?k9^*5oHo}M<(btsz$I4OL1k)e?KJda0m_dK@W!z&NsfbEk{m~i zRgH6DK)Cp*M$_3gEfs2Ak`o2mLrCtp^oJ6yQm^P1l;wv5+XGy@9%4N|@*HyL^Xlvs zEM|ZQ&i*kGWn9^1{A}Q47OvQ-0*w!5@sv&sfV*fr7;{Iv?DEd@;Jgeu@Mu~FtJExS zcP2VCbi=$ys-oT5HB1uN{UIEw`VqV*+lOM6zf9v2++CPVqjb2*Yxi&! znt+PDS9ppl4Bj~^*`D90*{<){T@_A)*+!{t(Y&~P%R=?=IPk;3AE*a5+;#l{+;|=h zviyzW9-QW~{M@-G0^bXw;T}*9+@PNs9*anmU)On$fAW6Q>6P^ArPQSh@Rk17Q)%g5 z{x!ZkiIZ5*vS#mNU-NwNVztdR6>_m-*5=x^&p{(JOPc>%z4OrJV>n#FL+J^hI>v#E KDfl~^UilAY04VSP literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby.py b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby.py new file mode 100644 index 0000000..6d3b3b1 --- /dev/null +++ b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby.py @@ -0,0 +1,73 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + + +def test_standby(): + """ + In the WaitStandby State, simulate PLC STANDBY signal. + Turn on FHPS by push auto-on button. + Turn on SCM PSs automatically. + State transition condition is checked at last. + """ + print '---------- Start WatiStandby test ----------' + print '1. Simulate SELECT signal. State should go to WatiStandby from Disabled.' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2 1', shell=True) + time.sleep(1) + print '2. Set MCPS rampup parameter(target current, sweep rate.)' + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MI 4', shell=True) #For A + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-TRG-SWPR-SET 1.5', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MI 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-TRG-SWPR-SET 1.5', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MI 4', shell=True) #For B + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-TRG-SWPR-SET 1.5', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MI 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-TRG-SWPR-SET 1.5', shell=True) + time.sleep(1) + print '3. Simulate STANDBY signal. MCPS, GCPS, FHPS rampup must be started.' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R 1', shell=True) + time.sleep(1) + print '4. Set FHPS rampup parameter and start it.' + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV 6', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-AUTO-RU-TIME 10', shell=True) #in second. + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START 1', shell=True) #in second. + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV 6', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-AUTO-RU-TIME 10', shell=True) #in second. + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START 1', shell=True) #in second. + time.sleep(10) + print '5. Simulate FHPS, MCPS and GCPS state.' + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB.SVAL 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON.SVAL 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB.SVAL 3', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB 3', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON.SVAL 4', shell=True)#turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON 4', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV.SVAL 6', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV 6', shell=True) + + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB.SVAL 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON.SVAL 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB.SVAL 3', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB 3', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON.SVAL 4', shell=True)#turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON 4', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV.SVAL 6', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV 6', shell=True) + time.sleep(1) + print '6. Confirm FHPS and SCM ramp-up complete. The state goes to WaitREADY from WaitStandby.' + print '---------- END WaitStandby test ----------' + diff --git a/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby.pyc b/EC-GN-JA-PCF/src/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bc743004c50155ca829c523127ca3604fc816cd4 GIT binary patch literal 4531 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 Axc~qF literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF/target/.codac-version b/EC-GN-JA-PCF/target/.codac-version new file mode 100644 index 0000000..1f2be2a --- /dev/null +++ b/EC-GN-JA-PCF/target/.codac-version @@ -0,0 +1 @@ +6.3 \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/bin/Gyrotron01DAN b/EC-GN-JA-PCF/target/bin/Gyrotron01DAN new file mode 100755 index 0000000000000000000000000000000000000000..0f2e98de52c08780960671bf95e7e15728fef6fd GIT binary patch literal 259592 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�on%2{!J`?J0n?N@qDgAu3+u%7@k#oTGg( znC{9aKdkP+?WwCj`ciz?3XS*VTu=@_wt3YDM=thTd#4BrF7Fgs3+}?q&AJ^VZ66Ae zvw5+D?+2^S&fHW%bi~1@<_?4bWzZJJ?P*1;{LuY(X5qx5-G8(YwVbs8)l5NaK-a>)57nrg_BH2Ygu+ z8dPg?$c8>MD7duN&dzn=Tj!wK@_IXPfRBkM$KyxWbKnEbeAu+M_wCVYt;N0Dld~j0 z{sJnkj*B7KrA4F~H8fD;^oFz`s5$Gusqq+?TfCIp-MF=0(7HV>U)u$++fyp%7R)Rw z=hn7#VJz0_buO^6>q4{^ep6jYwM6c)M^Ic11$Ut~wboV_@~ExqxsZi(dUR`6${h>7 z7K>>P*IQk(#QcvyfO~6MC14*6$pdddJ<>@+u0@gAq8$9Wk=wAiZP(AlaxuO4U(<52 z_F}RaRxFYNs{ow%E44SjAgottz;QMr{t}IFnKbQLZJGnw!k=2n;D6f0v5R!m3;2?) zKv&FC`2TLN#z8jv{bQoMZY7pCu?yh&esShfd(jKl)WAQK{7B2vWNns52Rpqy3iT6f zTC`l*Cp|vjX!$ZHbE@;B(m_SRi-nT$mkk`%y^m!r5tcgfpbYQ;mp46rlF5GA(()NJ zSiJ<_nlEcw4sqfVFI&rGTmpcL?J6j41i;FteadL~vW~xTA}xdl;#w#>?GGmtxf#-z zKK@-EX@yf;?7>D6$GRr1vlz`gwj+W0`#HbyQU&wO7Wi z1=L({<}$49^0CFO#N}f_I8r#vf-75Zws;dDWqL`5OZMpjhv@R# zJJzaMaGcM0{-bHZ4UzGUonHhgj*J_ zomjYWso4ys$>@#oHZ&iq|G7&htEEbYa3Bb*?v=>v*d1^`yA z@%^AMV*33`v|LT{pM#aHP(e3?9`7}NJsggkb25za8mgge;r+- zwJ#eV!-YE8Y_Hvv{PmqL7mDS`lX8Kbb8Zo;RYWb_BGyFQ%MqUZO-ivAF3Us%^H?TY z92RTVw`Y{F-Tt%Y?m`pUvU0*96)S!)3DWeX#0N;7cxwkdJwN&jz?Lt`<6j+Cud&`9 zp-RJs?Vg_a(u2d@1lPPP%S89~JL!7W)m&nAFm1ITZk-;(b@nqYQ+cam-yRLP^&1H_ zYK684tZOhZFED6rJKP?D)Vxi>T`TZ`tZn6j5wg=ou@~r6*W>PhSd{sXigN3^1uw2x z5W30Y-g=eg#j|Q4__~@J=t?u=dZxo&FY>NjGB;viGN_i(f{pBqa3F8xju=i1;Ty5=SKiq|3Vv+~R{UVGT5HAw55!lP9K6tEyTc=nG~4X(-~_|6 z63UK-iu2&O^sD)qA}|Kpi|w%TYTcHB((^r}A^Ht7QHsyrRR+$g%@tVA1vzt8@U)Np z&Wi57ioC6Y9*3iHSh@qQ9@8$ceteiZ*=#D%32Ym|>In%Kb3x+r-dT)!Fro$!tkbU+ zINm#xw??3a?RF}x&BVm+u%<3 zGbSf3NB{Fb2@p;C0+8kXD<@{gH9Gs6YthhWHRsWGiaDE7 zi3Hdt&@7=dI}gEH+a)oB*eA*C_Z%D*0=@^QC8k?e2x)JIWu&3Kj$Y;fzf69agYTg@ zst*Vi#x=h80-7my0BTMMg3wB6DerCCIkY@L_-D&*~GDuIi zKjn6N3^iN5wV85&JAit_-u%&=cYx8d%saq<{|7rf_{RkFZGD3CD%=(K#DoVRTd4RcjyF1yR@D z;dL>SoA6$lsQGyp@xg1WTyK+Ecl<$!+fxYrFMiyf{9%d3+0RPAj8{Dufj(is5zZFN z@!L2xeyGA(j`~7!L2)%|9Ft?344*v3DGz)@9O}fkQl;gd5Th~GY|O|_OM@dQsTpvj z89$Mlz*oS)f+wZ&zoU!aIspDJ$nc zwp8OhOM6pAUL3LaAa2eJw5+v=V^}qxw$geJ+;V2r>C$L&v2378`zp47le0z6 zN6f*rcQ!QqFLk+X-!lj@;`R-EOWUP)4T8m==MXQZ-*i>gn@g}4G)LipT0(=7q z*5l!Q8U7j$96!ayechFHh=*_MXuOA#ZuuyZIIgDNHo!fg0NMkB3>13Af$e)zxR`0Xiw0f}y%bXWeKgF#x@Z;vmj zTF_R{cQuYk+@5kVhxDcmSdFfN_R6wNrwE5-BY(DZ1j2C5=0ymbH|YPPli79?`N6eZ z4bwEz*nLzR9h#Gi8g%T|OwwXPPvaugS)fB)NV>D zoz7y4v?k;9ii*z84sR@IcCdMt`4apsFVlp~?5PfCQXzKH(Q9H02~3NOH!~lDkux|u zJ|ihJ-58&k2%nv|7LLwj>f30@U2XP+15~5^(00#-Id>^f-jp}TLU^Wj=NoXItLgJN z5Q61Ukloo1$rIFYjzVhx=}2%6;q4Vr*BFC%(Zco8%AQS-5xv4&NT20B3e?`&czZ9lYuul7UU=*3#2;R1ATi`&HB?u0Rn9clwNkgWpn z?|H-ruq6Wa{b2)qZWx4w>(rKawe4~P`<=wsg&ldhrmy5p6;+N;Ma*P5IgwOi4GoRi!j;IU$ZklnoL<{&=y;|P;3J=Kt{ z?l__^Ta9rqCHD2E&vc1EaO_rT$9IR~`Er0v+R_s$@quDIZ++54m zXfU+xr`%^Ez}IkS#B}u##U<)Po#Ezc!ayH=Lr{!G~OVMx?(`i#n z*9wTTY%|m}HPFMhxup zRPYh6bo^@qusIF~dg0F&z~%w-H1G?`THb?g>GZ@^qxNZT)ncP)cL4`2<8oHEOQFs* zri)oY)7QFIOyPw*)LqDdG(S)zu)q1^Y{Hw$RrNO_Yf<37VcFU7Q)^w^kgyD=6IuVNZS69%rc?hJ%bM#a zrFGmQF8?7__8CCw?<4z#eBp$`}0 zMi2gda{d^$Hb%slEx+N9F{N9d!KOOvrP#w z9>MXy1ika_e(Ew2E*zleO4DvecT_Ifj4Q#FUZF{2d3O%X=#~>#+1|~Q#MpKI?*BlCe{Sg zgwzZp>`W%6K-)~n&o^e7vdx(p@oA}0^E^MuI4LbU4-)0{&B)~KlfxYo7|c!_fWz937%#>6MSAT0N7_5g|^q>6oAs2P)0^uUoZnKA4Gzbci&b4}({ zEv>Rqq9l`0A{!Xz)vQ-=x!biFF9*QbBlsaI>TtZe%nWeB!+L^kAG1`z43j>5a~-Ba z*qHDRabgSrz!CL?3p0rS1yl7b28KL1`S501@_qUQ*)F&bA~lh zPUa+IwqiCX#%BPN)CthUO1dc>*FP{ZvNReoJFuJa**S2cEfv_A&{)EQ1nA)m2Ph*+ z859v=?A^;x88kF1Ji-{zE1*{p|2<|5;DNpT18vA4C1T8&u<$6Of3M#11BGAiN*(%z zH+S}1{96~OI_!B}_Jqg8r|$4yJ&IjlX#l_KQ%dBA={#6kjAy+tJtF)+{@eO5#>14H zKT>$vmrj(4KgSgO5~arHq7>qp%opP|WVr}V)_Ms}9;}Rt;->MRHi|L%6TRo|8oX@z z>!q}f^ZgYbuK)kNwi2kV zM0tGe)~jvaHy7Vg85})xHP_loO3p_+Ek~DrtSDY!=X@YU-!ru_TGGhVOdx z&vRR+HpFotT6#W5O3$A+uz9}8?s*;Qd0i!?jPu9*lCC`uro6r~4)|l9g){C0x}GwL z=%epUs)r-WRHAe4TLOcUyE2E$bM55>WWz?Tr`a$1XA{REv62HE#pNU6>jemRKM4=S zL4d9}32!9fWfI;*8r~`-e6p0U@~*W!A4<5-dsh4|iGP8FpO@m7O890`NVu0t_(qA3 zcPZ!J0OCln;v?Y_d&O76-;ntGNw`#9rH_PLM{z|7m2hkWaYagaeF4HfTEelc;u<62 z=#7XgPQpP!Emw+!H?p9Lk|p7w@RloI!kbu7MJbT*rV>6+!kbBWiG)8U33R!HdrI+3 zB^>o$TyrqO6l<+$xyj;SUNs4k@!dpr4DWx;kCX6lsl8Gp{9Y-3mW2CCc)o<+C*cJW-c7>i zNqBb&FOl#b624r*drEkzg!hv0brOERgm08^KMCI~;r?<3*YB)qSLD{HL!-%r9lB>Vvh_mc1jCEQ!WAChn%3GXlA zz7qbhg!@T&sD$^C@GuDvmGE#0kCgCz?$!s<5*}fNl`#@NK*HlB+#um85m+=*gm0Aa5fZ*x!XJ_FG6^3k z;Rhu=M#9S_JXXSwOZZyJ&QwVFC@FrWgpZc+Y6*W-!mmmA7ztNivFiV067C`4VRUc!AP{0Ry7lW?Pi_mS{82@jR45}qx^KQ7^kQv3=DH%sv=CH#iiCSfc)o;tOZZd?_mS{v67DPEPfEC-gg+(WeI)#U5*{kyGbB7x!V4rk zTEb^a_!tSFCE;-rK3l?5Bz%s9XGwUWgy&26TnR6b@TVnwo`lbn@Dd3xlJMmcUM%6I z623sf*Gc$73EwE;Dmyyj=ogW0fOHn4mmm#=RI1__Js;_Y zNJlez7ScFntO{lHG^86N?Z@bBq?;h^!{~`fH$~cu(FsU5Lt0_YF3rS=oU!hl&mU_(T$MCsaRDsqur6lDOgn~qyLNp8mC@WevH0|bX%l-7<~q5 zoN85hG5QqJIK`?`7<~e1oLW^?|AX~Eg0v6P6^uTNbVsDi8NCPTPDqzAdMnbMk>1GY zcaiRbbSb0XM7k@|C5&E!^gT!yF#1KL??pO`(Myo_MLLer^O3#}>1amJLK>$!RiTWY zhIDtN{TQ8%bPuF`7(Ef`o=AH!IsxfkNGpsUi}d|SSO3l0A8DMrR8=r~Fw*`=moqvX zX`HH5l`*;>(l|w_+Q{etq;YCeRm$jYNaK{Gs)W&lK{U>XGq@$6pVDw<5A3?gD(cws=t6o*c=zd6}i(a*n(E&)K zYhG2#=x#`(>s?jC=uSwZ%UxB#=+;Q1t6i1F=oUz$i(M7R=tfARYh4x1Xm_O1rLGEP z^q)@vjjnW+AEPfKJq~FfMxQ|%UFRwB(PgYEVRR>?(N(M} zV03Gw(M7DvVss0n(KW1!V{{{=(Iu>kX0$uf=n7VaGWyT)K%)y-<;UoYNI!+N52Mc@ zJsoK;MxR0&UBD`Z(I=2b*RQJjDrbQYtRAUzN1I7ZJ$x(MlLM$bZeKGLC#o`!TW z(teE2MtT9#K8&7-^g^V)7@dIhBBT{Yk45?!q^tj6?T>T`(iMyzjPzop%NZSx^b(}Y z7~K!)XOZ5>=m4abB3;VpZb&afx`ff4kbVy70!Ft+`gx?Y7~KNto0>B6pv8IMS^=@{4P^ka#Ob zj4V8ob9sDZ(SDx(6s0eCD1H(+2f58hLCVVifdI$vuQwbZw@Z7`pNyRSP<|{#$Z2mW zLd#LRyjDT!ihjOPKECQnNaEQ+sWQVId4R*}wcl_<*@c-_HU$$6l$+;=h8u_W%FinU zv>y3H7EP~=EXu7w7LmoHDk6&wl~G0ITN(j3R*#*?H?rtJ<-4H$v#+^%E-RZ;mQx=y zI2&@&)2rTzZy?`MAbQoq*1!tbv9$ZabC`Y2-L7PQBKydqQO9`^3{ac{mCJYnIkVxB z#lwz65i61JPB$vmgDj#=sk&mR24JanU9l^bhx277g&h6?4!EANwsaiwiMDu>zBu-WH;0 zFUXWN_ti^9hA#ofOo|m~i4|b4qPJNsH)&!^`@YZjG77T5jQyF)niwaA5qI5wdoJP7rPT)3KreFV?_lhX$i_P@S{Gh)eOPF3mP&Zq$DIXn4;an?W996F#fEd9A5~kjL(p0?6zad1?aCMi z3}ze7xk1_o45y#kz6&x`D!YQXs2>bK6L<=g7X@XjyaRw`V^DBQwRZtCrP2fJ2WRs= zG~xk6B^IO#hitTd3kz}H17h%cH9^@~0j&rn<5uIH-=Wij0bL%suqApB*w5l1a^%9c z?v!pP%FvSF3E*E;M>C0AIogP+EqRefK}7y*5{O{7p%Us_3H9|{kP3ZT?(y5I?dsD9 zl5DNkP`CSG)LMMyFB4R6hK0qEv67J=6 zKS+08(*uPEDRYQYQ1IMxh+3ErLd0163#Z_({f2j-kXi843nu#Tyc`6;xfC9^{;aV6 ztfZfnRm@%%E{8nO_Xq`hT8VxvFi8P^AXV%dCGy{KY+=->!ym2IF87Zv^u zk!SC~f0Z211BKV%2WnSUJ5Wm2g?ClM0w(YEFF>*)rqadi-@>vPlmxins5*mQLvbOi z`od)cuoT4$vC@%zpqLCrDK133uq?Nk=ZE$7!h*@{YPUIMxd$QLa!jyr8EPP;Lmi@Y zeIcFahh;^Dml?~#c~ZpLd+I`DR2hogL=`#3CNiwJE<_ce$UlJnlR1yEiR=ZDvBfF! zyQ;{2Y$AI@WNbl-Tqs8_UWJv~*|4MVolyQo-=m#x1?Fz&#)reuQdYhJaPg`yF>WhM z+yR!jXJDYS#GMXsWbrEOq&s~rk?%sZXw_yw!AUH{J2EbnbBW+7u}|*|vZVa(H_epE za>|B0C7OVpVV0DyXs7HUr~Dk_P}?qCSdGP6$W(~LH5FIczHW(wYJ@$V z;_QJqyn4*!JE-1rh*^0Yx^!fb;dtci>Bp5^xjPRBqgQNL$!0TR5dZTWi(Lt^E0x^# zJEJX4T7DL@y#_MGtExF9j>NIMINGDwPy(aA=R13FGP>}CawccP@vtp;_z>rF*bdBN zK*f9XSC&ONWC32iT%a8=0szl)jP=MFZ2f9rRm=vUi=N%e@R`M(+6WQ2QxFWlO2Bl? z8%L(Yb50xJ#Fd3)q^m4Bppwo>b1=jNJ;=w}EnJqvD!DKcWI^rn8g#{7IHXo~t-?}c z44CKCh4B<;#P2YxmV-9#hsTADdj|(w=#>kx|KJp^#U~2TkL|t~>Di+UnymmIVu!|u zR}S-s$)3IHU4Y-_1}xgy_VBQ21$#J-QZhFcq+Sr|&&0W;5{py`MPddV1YE!bd=3yU zDCU|u=v70Ydb4+6d?lyl&UqHS*bJ4es)N(2h0M9Y##@U`TudbMFD#T{bCo}IU}#D< z)js?)%FlpJ3#t_A5&3|j%yZUuXf;reGR1SwCj3dPV2Btf<2~VI!*ISsyt*A6=v*MTU*Vh6Ry{FyA+nSr`?T z<)gT}m7Tp4)%=Syvn$*p8}319&qdEMWtBhta^nWJ%%g{(Wg3eHEIr#9TPGaAi=Lu& ziVUTZZ206Y1XM8uKrvtJNsKBJ{R&nxigsHFP>Vefe`92E?&e6h{qVCqjC*$=`4?HM zUIvkHqj@7Y7$ab#JaZa)6i!F6e})wSwtMS3Xh!wy|1Rk0XCLCp|IG~)$)h!rmun3(L#Ck1&j71?aBzbxEDH&vvt-GL4* zs;A|8BQH}W)+(H3f5EQ4Isl=(s?hk&P*Cky&FGk!`$Uq|I39A7h|El>Gtl4x!Od63 ziTGF(gAGcV%x=Qj?Q9xVdLv*l6S|3$Kl2f8Hg5i81YV^Wn zgd_h%n~?n1wS6)|8yy0FQa_`tw^x0a9O#52>nWZQ(wt_JQ&7>@-SRMfuME|N#xvv< z>`Bo_83LxxaO7EfXJpVme^EssSGuhk!`P%|!jA8Dt!zsOf&4|af!s@BV4ILxDeka% z{5CpQNgA@$?w=+c+ae!*BHb@fUN@>jN|*xEr1vsIpv6W6wWfMFQj6%ck%M5VCKTMo zMp$hdBMxozW(e9&Crk6Ooz7su=}2CAX#C4@eJ+>%cUgz#%DCgB!;vT4Bv$}K@umZU zFYjFdSx)cnkr8MpfK!D>D}WEh1jfINh{{bLRYaXXmR=;3z)qysKmt}FR04%6JstML zR0BjIRF9wZROMSy!Gekm&$XrdYyn4P)j`Re%ke-cSdUor@lG<0q&ktLlx31JNy$aQ z%>#n<^WzNT+i-BV__o@?MdNpCt)wcfIeA^BDu1xrjQpiYoIx#Ev@4q1TK72X=eGc9 zUH^AaL2x(D@Y_J{?_%iS5+A`OI)@jrmhBC+vj0B4@djGiuW*xG1DB(P1P1=;reG~= zsLi3^j@lkY6L%Di#{*%yDjFTSC$OD<8`W@Yb)1^i9#Ih70oR}6k}%&|Z9H#-CLCB4 z++nmhPE)%&!+{at4UctNu~WV_bqZ{wuW_PQAC$c08<}dYlQ}{yu7MwVQnbt#8Dsud z$MHNG6q3lTS{HKbh8#OMAokD#nbZz&#(V&W3b-Nbxcq!g`$)9+6-YzwLu>WD{y}1b z!u_PMadnL1{iael(indB5yboHzu74Z|dnl;NqG{T@cGw5lOuF6|p5J@YjKlsWcZOXtNI!R0B zz!PI99jEe1xXL=6<%>tvNwqcXu?4J*PM1D9lf0RXV`f_A%8L>r((4geYGLr_{6#;D zmh6Ri4Uz~2^G~Mjp6x<$=QiZ`9;LF0` zC&bAT6lqjYtT9TRU;R$REU?dlMLW#oVd9=+u`~jWq+lI?Bn9gWX77@iLISG(!P>lL zG}r{c6Uci&L~b0!K~9f@^{&ix3_=7RvSFe#qYgt4wj4R3XiR1*rAyRX1S9K)S%Vs_ zoDxpjnci@E8X=8_Uud6tNo>4reA>W?@pdnv!Cv@I6Nl1ptn=7(+sjzvwq?kb{q}a? zO~m-sFCyjL1&elDDWiH$(c~pd7{a39Zqp5`Dr!&GZt6Sbwk@c?CXa;;@{j=+UCvhb zUsrpkq?!}KPBtruPD)JNS+k_Vx)D~2>WG4M1&ivUxy=e@*Cmz6pXz}PWv?X;(Vps*mO#BSMqaO0cF# zS0zP(ej66VxpBk#;YH(R-mM9>GV@(^sFe)!uW94GYy|$AHlFEd<2hE2|pm;@Bn>&Dt{bXQGjOfmIb zb8m`yQEm$qGxwkZR5YbFRzF{rWiU#ZKtCTsS>p6_x@G9kxCXNR>-xEd4Z1}7sbZNP zqkV6QM#_w?iX`sas_JM_OP%UNqKP#{0jA&$G2EsI z1LR5pyIgkF8IH)dmNRkoRQ80)$U4Umx?pR(|gr^WPR`JwCSm- z7Gqp)cUV}5xD6!k!4$L6tetID;P78ftj~FVp6H`a3ZEJN?Ubg)jxHL{1hl)`hLG__ zTM3qvZk?Lig8kY*G#;8mZ&!%i>)nYU+zt;FL?~PGLr9RQ{0A(rcMmkp7AQnpv=@ zB%m8Z6beV4=QL`7<~NvmHwAxTD^RN9)ONlAW#dbU0jgwsg;=SSM1thJRl3`=hI1jN zp&v3rTfWVBjO0=TUuVuT(lsj_+3pk0bi!G#uLMi|!N&|3V!rNxD(9ohg)Rx2)oguIm4vq~cq^MKUc++FM7CAAQ#V2MIrLnnK!HB7pye+~Xdp|o zr^JTcQY{bNBj}KwdE<6_m)s?%C+2nqO`+S*&46Yi^|pJw8AXN-u0l{SR@vK`v%wlf zvWkw?tXpOKe89WHKT81FALhtQb|zO5*|C7T!s!svzi?379>%4=hO~UxV_mA;ex)BR ztCUQoEg?zWhXtULOC^~JWYbBvC*R$YaHYHRG3ld~;65~X&)eEym9N26AXV3N_j>|pqH?@w|Bpxb0ICeKO3l8OIK-7A&D3E2UQ*S!!U(}?bk-w#!| z?M)?9iTzgwa#_H~=v(ej!tzDq8mpRWhYXe-qJ0U zXJqJeQH+5!oKy`9j`~bELl#u-UZ-l$5Ynvn94n@@xI)JGqCpqCM+2$u3dgF-VMAh6 zgHW0*!1 z^f9BL0r9f@!#Or@%sDR2a0(SYr<9AAO0`)3xW}9?p`**CIOgcN$n9^5+{8sHDe;nr z+rQOOCNEtqEEKGj?g#w7OA-<|%THccf>vP%BZeGpQ}mYYb>o6|Nvp-nO^zKcmE2Ah zsi}gH4neh}3nIvS0!jZ2;MT?mTm4u4-vR9QvjbuNG12$RAyh56^ z3$==o>Mi8!6dg1|Qr7y>u9e9;wE%Ym`BI8Is;1447W!td`F1JliO$TxW_7c6hS)7{ zR0tHT6)?iA&EQ1{%?n39I8!957scfeA$dvrCP<6>)i(d3-Ws-CyG~vZS}!kvN76)w z=>5`A}n+|3-k$YiKGWO>o-3q|Lx z8tsC>&ZV^IV`uTnes(g2o%^h?9CkX!vV(0ZJ2whtmmN~Iy)g&IvQy@YMzgOmUW3x% z$YK1w^Lx=HPde?=l$|lKTq0$*NO`vrl9bA$TiCUtAo%fMZHiqg0@1 zsd)-V&OjJ=QduEMPQw+FeQ7~rf#f9<5D=B6q`Sgy@rA@W5qXoqH(a;S(Tw8YA4EmI z*(C0T#p9?yuq09jii7!*lTt3FSj{`*tRs5(D_U1eoM(KD(m7R>`wPmTFje)tj;mA}~F?7)l2+}o0WPqoR}~y zrfJ+w3sKd@72;jounuRFB>b*jrAwRVO3l*7JcT3DYscA0Xdb_{#VxG}{neN)dC5yn zbQpw&>um1b?l~L$khT(ztl<Sfc)KlKnu7Nx z5lD?9->g21pOfmgRmm?TpT0SEUe5}&NSg?;7i-3vU0J7qie?YTR(_Mu9p+hcxfAcm zO5PJsMeNZjg{rjuAWbmEOyb~!BV zDN-6kW$b*0TCJn9wkzEvDo7P5SSw&xA3jr*BLRK6$~D83ZJrrgzjMzT*+XZ;;M|Pj z;9rHUpRp1%?f;c&Ut3UZ4@Ww#rZv%Xt*ay19v$UTdq3HDSS51gONMOnlHZA%hjl1m z9p!zlFWjz{zvE9Aj3@k=s*JMelhr{T>al3FT~H=3d08pB<6DRth}qw#$xLZ>ZZKy5 z7rLm^pEF-8=ZB*%aIU_#Wq0}8b?YDKkcrtl{_{CaF^fxgTCI>ovo0{hp>#W+sdUvn zm!S_nDnXj814YQUCdFX zq#-2L)fvW6YT&HUcIFgS7AX;q^izd26uv@avWaOoAvFJJ@}1GvW-2LUhiR0wSWvOh zj*(eKr;3e*)>f-yH18f2tgYfHkax&SbRn>F0V@E$N+5q{6zSU!>-2B9Y5I{!XopD_42SSt_G4=4)3(n4PRiq&B95TkoBv z=W9%D=B7vbphpvBN^%JGqt%^%mvQrgi&_(fr(+DlOn+uANQ%hU&>!Bkwv)SDmNp@$ zmBL)5V>U4C=w5BhCLI$9yb|d^_-4zVWy)$JwyZ<9B)+VCH{QqJLBf!V!(p+lr0CU7 z8W>JdC!>j5G|Tqpbvk#pxEkKLNnmpiG2lj3@0YQ2BpHr;tU~b* zddtjEI(>aywobiKJX0TyA)O=Mr`op~P{Zj*s$<`39+78AnB?>Ki@M;vGfe`D7LH6~ z#o~DLR4dW%k0;Ie4Oi}|H13phn12%WbehW-VlPS$jo1H0Ok#0`I1u0FL&2^IxY|{6 z9-JZPnbdi;n;zYn1==zlB9rkBTrl|D0OdrqSk_l6X2w9k^(O%K~i4>d&7;-^#G z<}{IjhV;;SwNQT=*||~2ntr{LIskD`J)HB|Ry=M<20f zaWhbSS^1F-TH_i{WT=fXccgX=@^CtuN!y7xz1!e+%bCn--i&(wf@NXMEkSQu|gvDE4Q(^Lkig^r_9W1kAr{uw zsQP&l=+@ckXS@VPv-!U75=g;FeG=%`iOOQe_6*?|Wto!>#tBot@-Pj1Upl>{hPu*aUCLEq;a7ec`T-x4|tSjV%R&n%U~VNLwxL&#n!ve)+-2Zbw}Y* z9Mpi|*2biNhWNIE*)`l`emp6ry|%W!yJQpH@|hmnUN75TgW>C$>JHywVx@kgcWH0B;bl%uIQDcN-u=h|>1#JI;r45hDD8H%XWW6^SL!*i0~lao=T ztrXeCyg38WBH_qiA!LR~z1nQdcc;dB9!qbM7E9c5A5WarC~@_KpEh-f>tkoOK6Y*t z1@ee*WUwGUEW_oz#5%j?s#6I$rwA`09OMw!$LlFxJJUz`6h;KfnJ#6!)KX8nK!z)! zSlk8Kb)1H%WZaYpm1+-^#T92ma;fBUW4~3x&dDNZGas~&=)s#0dWe)v&NqK`a+K#c zWF9v;)lQDv+SS6M$$UvNV{WNPP+qVr%b7yuN>ykSM=55)yp$=8uFEa4(uNvDsZzb< zA(#5}R`Is{McV?orII zz0j?~e3~8QhF&kXuiOzc^BBd{TRrlVR(IN;7~B46U;D{Ro<S!l% z2X=-3vMK=QCOVQtDK@=zJC8z+QedWjl%S36U^847+SEH9BGrgYUv8?=C1f=lWodrd zEfSY(Wq04hF|xajM^|>8Rd(%lsH~XyOjSX7bNOJO2sHG5l-I$~<5T@^ zoe4bK&R7xIakt#x5?lLvTicnyZG@>2_iR}+a?4tc>PC@(yti$&GE?GWz3osYlf5yW zj;knS75j}2QXm`|CHg4eAF%1i9t~BodoIYBSHn@{O78cr$@Q!8^VopH^M?<_^!N=P zrN?$wS6*L{b17Q;D;(@)cJHXuX|Pm^E`baKAotPrIakP#bWgx6w)k@bryZYuR=^B2OGjqxD+m*QazPNdE z%?r~ZURl)*tZ-x*$9C4Lcn?1&++*TWUPn4*ua+Y|8YqVg^*q|#RGWJ9UxXoygIA*Y z&V}%@Wlgbvw3;J!@f9%Vz0bUO*9viup|uN5V3Pxcme10MVqF{ZAs2ljCN|7UU?asE z@cTvnqAvo;OU`N{qvF>3+FI|ymTfoVJ)2RbqTEpQoVHq|v!~^Mm7o6%yc(NycA?>G zp;!rtQ_r_f{rF^9u)4fhay2U)DbkX`vf2qw?hl%q*^J$_qGDm7+bf~UPHV~B4@aqIT+HlgAHCs%h?pEbs)2<^0+p(wB(&^ZEr(^ADN$$4qy<7C^ zV}Gx9;3(sI^@NbN&19Qqm>9Vh?0c__MauU#j5KGNcAa)cal-^v{ep-| z)YG^2p5Vkwj@^&JRbfH0aw-+;*q)-#@uoz!`k-#Gs%CYrIt#B44-&Q0ymZY84RXaY zbn9N~>iDII0Bqcy!kXL&fj4|*D`ucCmi!rV&UOm)!jUiC1k1?>(x7n}D`k3;WN*pQ z=$37fZuJSp2^rI%9-X}U$!ovo~ zo@u6!6yjFCmT(U_FJMhU^Uk`zpRsz~`layS_4tdWziv8ttN#b?6MJ%ZqVB+NT1S_> zZIH*Pgj4XUx@2d$~Tva%u35)t-r%s zu+-!0P{UWMnme|1RtcQqAyqC!_5Ps$S6ORHK}0 zCCBrQu^W-jTqxVBx{arb@Ho0x7}S^~cLWR&bIFBY&6~*h^H`?ICaGzaa9U$hIK>vO z?4IB`^jkJvHL{G58gYbNE`9v|Ft-DLzgO9Gz7FEBX@*m-LK}fnP1$(w&%y>_w{TYM zz7O-fywPHX`X`7xt?7^!daX^D*5a=k|H>_$`FE+x6uH-HCX>)_V;?^w^dJ zm~NRjNT5vooT^qUFDp1#fF7V+!%u1D9-UFNyi`1aQ&Kzs;tDRVnDd#P_p0Y-PoikK z?{3Tsu!g>gHET3vg!Z#6#_i$aH7(?CcfTczQwDc>xC+&ixy@Yg(1pMn>nkJI$o9HD z{&%{mOfA^st^$*nd@r8WE#+hED*EZ@sgqx9@^yD2Af1&<{LY;t=Z@WH+9P8N>ksu) zSNWI@wsomjxvdwQe5HQBVxGSszz!-df~YMZFRR1QbV7zmfs zaO6JoXe7?}L=d;xAa{rP<)8PuH-0iq$vR`_Vx5_opv_6}TZhnLW9Uza{mImAMDZ*+ zG11cll5mun+#NO#hA+pfmTAAkk?;QKr8x{Q_O>{NN;5H+W9)mJ?pMI#pSe++)=b!3 z8=;fjovBe+UM*0(yiTCVB=Y7APkP}~yg>6!a;Tg;$G(f{zQ?%-A@KGEFWVR8ac`m6 zP+F>#sP^K=_L>WI4_eJ+5v@&=ub1&wre09mT{LPpHo$+>X26x5aAf{EX)W(jo%QVt zr@xu?QLp|c){A}{>#Nr`WWCW3#MQ_L;-ZYa`9PdJnh(U)E_YtEMG^@=5LeF}T9?7w zuC(C5C!GY6qZ}(vcc@^ z85HQ&fo~@{dC4u3&1cgA9B5vliZT8Q$EbYfgN1Nxy|VhY+c&!YH#ZsgkS~nBeW#b$ zo5XSqf(&(M-`*jHY2wt`2NM8^Qz@5PmojQQg%fuBIaspW4t7(zyM7#x?~=0PrmvOh ztGMzfpWpe+rVhMDx7N)z%vqASMtbDluz2?swVRG!j&q-4jme3hFq5C3__Y_IDVHxE zAd;*WhF9Rs@Kz#QcftEVDC(|khS{Z;C+ew~m6I4R>Oxe>5pEMy!V~pwT;~6bsGXbi zGt1*e?cAL|$K>pTs7I?~S5fysqxM_WMGVYu)9SVG=t$Mo>K_rOlX#NK)zj)@Zu3O_ zyBJZ2IFGBH`rlD$;xb32og2YP>y@blirR{Xt)hM{HuwKeQLi^VX|(A|?MIFH=#mPZt-JLwPG8h;|a z-^NAzpuoivB^zHcOKh>h5H!~UYn#h75PB}4u)O{kS?lT^$;goYG64J?o7_#K=Hzap z@{_xbFG=n;u{60`c3E<_+2zUI@~V=%Evm@~nM>66CC}o_tj@X~ht#R`*IA;^qlHU^v> zpQT-e;bQYc0QU9fqUVJDjH0zd2q!LmidKb|_R*qCPZq#+&PE%GOrm^#Rhwnkwh1Ad z7Aex}#AF!JY{>}yB-L8Td0(+h<)&MRzK$_br$c!@X;$X-w<-%tqG%$sVZ&K99H{Hb zg$Fyq9tQamo%=Y#FcAZdUQyiWjEwHkNi#bS*J3ddfX%6bY}~wUb2_n=<4n>8yHW@n zbhRp7{YY#=-enI5N(_q;hKex=M@EViB&(o2U7lBY&pGnEnklOGBoT`#q?M+?s)@!W zky1C`>=qx`49zxigj6MEclc;S(C3QflKTO&L^9i)^s z9{9o~?i{RJxAs%*q?rcpm0+0kK3Q@w*ey+MvQJ!_JTo*n)l|De5cj!x)RstVZo z$V51hV+30xl<$?j3*BBE+#L2a?KN?sx;};~>l?EsE%$%fqt7xKCb=s$SRy->Y+$&ZyC6f>u!;Bn$4-^y>d$6+kS{>)7Q8J2363^-hFg1|&~K8v-t0j!YZmXP^&j!a|f zmC|5QeGhkfjeC1swz%Uu_nyw)v7P&vat^tD@n9Su#N?;g}o=H;#ipDy*(d- z{+SM_UtEmmZaDvpU9wMpvAY(t(NV0v;$_}tkJHi0K!S<*7jM!K_o4c{0q?dyS~*<$ zO5MGA#HxK5uO;x3XuR$c`o8h{k{4wMG+0uXG;BZFegRL+1d>p4jm+YE zQsQUvDjJQS#ozMMT$%obn)~A~+rXSprjDG#fmS9y5}R|v#$T~Nw+5OfKcv~vD;;*- zK55$Li=>#!%i+h3u74$xYl{1c7gLg#=8EZG+@07TF@1|m@W#;dI&}3yB;LsAh69{Xn*r=ot`&&s9u~GCqxk(xqMdx^F?#PVXPv-8r zKB4`2`tC{2t}op=l8|?=zRY_5y~^^t{q$wESnz(zavD;Km1Tb{CSI0(y);*r6ZVt2 z(J*Z%3DGPE~*l&YgW#)k&cGE;QugtaVUCNi1Yt9YlW}3~!P%GcP zt20l!!}YW02JDb|D>r}35at@5EG|Rx@;i2?)gLB8XvB+9KII6Jn29;|pkeXS`$^Io zxRG+%T9JJ$Y4VDz8oH5Z_A@N`3KNG7!jgubgeLCv_rdg8I~b09PL9)GSH`61;o|#} zX$#I)5(%mAZj|~E+*YI1PmxSZ{S6;=&#qV|nvq~l*o~h6t;%?%zKPYEy_ag*pp@T6 zT}_kWs>^s~dlUBOeKi{7H}&%4Vw-hb7&F@8++A8t;8Ny$Ur~->l9%MOVZiR*HW~1` zs~Ifw4MJ|b$i9U!R>LRR+RF!|iDHldNR_>XJou!;v0 zRt{2KfmBOEj7U$D9t6J@uFZSgv)1dTaColpwo%G*r^A#zb1P{gL0rYU zh`zcIj%13^RIEs3TVz{~Ed$fviXPY-Az$$Kn$p380_#edu%zU3qC)av7)oyW()k#X zIyd52>Y7)wYz%gzDok*p-_N}Dx(jVN3HqFgcjM_P*(>{*) zRPw8Z#0gH<3o3Hl9dXA{E79sosGuUso&U`208Ur53DuvypP9W1pVo;bT$OTWX5w%a z%jI%GBQEq^9)UvQfFsog9Dyq+Vyd|j-8V>le?s?bVU%#Qp?`2WtQVm@1KEb_mU|iX zM0Kg)KQmjX#jG4!IWv%VAge8$Mu1g<3UP<49E0Ij&?nM6eNLC>X4~CoXz(6_lh5A= z&bF5c{pZa|jdO?M7}`Q-j^hE{V-Xw7JkCX`eX@I~T+KThjh1y{oG`(I|GdGI1r+W? z#Fm2Jr;ziomm`$is73~z0GUtBY~Y|Gfj=UP>PM?>ayc&4MC6&E4c)3wm9kT{DWeS@ z*X{~-uR9eGu)94nO*XRb3vlcfyH+{lU#=EQj8P+OqmyTxKdN#@*T2SfPkY6*6Ol=TVg$?eHaJElRbbfU$ssEeKui|~k7+#)AU~%Yp<2ldE z3s)ik+BIELtXC>SZiy+DG}>0QJ~KmO^`ZG(NbC z=C}nfjxG3|@MH>hbqms`%&vxVX4jbIN9jkdSx*#qP*Bmz4P;zDC%Z2HMeCb7HIeoG zGUb1n_4)MVzuEg~^t0jFdEoy_@BfFSk~uk%RKA?_zg8!l-CUnMY}DjS`ETk?Ph`C8hJI*H)rKeqTEH4<973+P+x6L_FyZe_AuFTC~mzJVnidd z+1o-EjO00QaSoCY&VA|F)S8X@oAp3tMo~_4tw1QFr~7;X+;GGd>mXO-ZA1OFio~~6 z(eoe>BHGy#B~x<u&P+%9ZReC#t3rJ(c!qJ2_=9)3*;Gs|zI<(2h)&RKrLOSx$0C zsz%1={UQrm;IlW_Q3{?Q2(9b0HQ^(*{DiPDX7*rI3(5k!KIr3yY@|*M%fEMIN8FXF8D~?6w!)G3!~xj8nx;GR zxq!r@|D~7n8|b!l&*S1()bILp(inIBje2wXB*z2q+P&xN)VS3dRy&6bf1xfOu#Qc1 zoPrpE%I^u1nZntJ_g2=4G|Kzk`M)z=i$Lal5-*V238Wx=M^l}>JXiAWs9m5PX{eVB zN__XICQ@PF?aZldjc0E12#x3c;#N(Qq zC^JLEZiZf$lPhy(8)Haev(DBbo(qY@_BNx@oHBoo;Vovb<}P6?Bp!^`)gb(PHMeMP zgT0!NB&(D8)xDZ{3l@rr`|zGWCjqDB%1dLMKC8J6IQ^?6?<1$!P=gg=N`sX6vp>hS z(ViQ$G1tZyJCEAF%Jy24Z13a!qV(AKXxV?20LH5}*Y+a87QB`Ur*l2Vb~K!x>ifH^ z`#1cJZqT}Smgz*7gevwnfcXR>&&v5YVIidPqi`oNRCC&9dpcd-?9V+xA7~_B3$jWMTodJaFYO21 z_NAWF{?VrW8eXZ9_Cc?G+l=|C(&VKa2#XVs)SfKNRiA4a_t5h_0nL=m%Ns*eZC5p}nXvR;s3C9=4!oL6q; z%^7rs(`uEYsrsSrVY>G}-q1(J#C&CmvC+{lmj;**lc2A9r|qni!hEBA0l$xHs9h=L zNSWW#NtsGYt*kg$dgxalW9M11*n&lMfn50wRfcC&-5RwLqp5jP`GD1u;z^)ujCT%= z5-o+#a3my+a}J{_%}Jm<7D=|OMf78A%Ot6wqHFwnq3SpA6`qyfPRZDLq~0AZXoTmu^_&rAm=dik7YY9{MyR8cW^A(>mguRDPq_$0 ze|Aa*qQicKs8@08SFIb`$93hF-NLf$x8o#o#Ls{TR)os$wi=FfU1{=2T&Y!LcA#kd zy7CW_sX5N_L+N$1*U@YUPnspCF00gA!_jOjQyq@Uz3D%YOj-t)jb!GDp;)LN; zQ;Dk9cG70(&s*P$2*fTUB*B34v`JF6BYHOHB!7o^BiD_Q8XF@+#|o;X28`oRpGS)G z7bzl0Q7LmaZT@U{AKlZ*R<2Kj!`-@Ej5*nFsM8<#)|7FrZ+4cbzp3?A{?=1t=FUcK zI)0c)EU*mDyz%oSp9ul@a1z)0%o6ya29heZW*|TL5j{HG0WP&sfa4usccJvZz z6|id%rav9}VGINxHad>7B=Iw9TGuM`DC|lH{|8cWsp96;ws_sdxVfq&AJrbZ-9uBqC^qh2=F4(Z>1Ghf(Zi>H#~8Cr% zarhn(?2>N zYe%xuXprJ{z(~W<2`sC`ybwe$)rq|CJbD4wc5N&&9+fXFw4bpqnGhngmmKY6ITN_6+a2vxm_>?k4N z&Gn`brlI>y2znH(>AIpuO4;f0=Z5y)P!pPJM;qfFQsGE$FpfKa|7biM`SGtZ_uw>R zR-wuOt+mMAP0W*71#v{sUg1MtFI|dX)_iTknv_i0^ zR$>q(;iQ;5Y!5?*MXwuBUN13lydBb(IJc}go35yu9DK5o#h3Ui$+0A!}*oixN|BZ zt1B&f`wzTEAlp~^G@mEi%qk{$g#;L@P(-%yjda+}i!$`7Wq>SK~|J;I|NG1^M zNHXPab6Vut-N6CDRk`V;s03TUC08oV^4AFOZ7V!JDTQ#QTdTe6l?R(%#eX4Cmbvyv zFM^*+HHoxoQmrM~EOY1uNyQn><>eZBgmUE7z*M^dRFEvzXv7#vrlwr9)DuC3rc`*P zQ6ygFuBms+tWi*rsTVDcCVH~@pR}JwwO(&1__Y2(vqEk}>sM&52+FVZBl$2}1FfI^ zonPzq{dv>OK5G31hLL!!pG9(zMQRrB$ztX*B;@A3OQsYQET7Sd7YW?Lu zt3seJ{~fJAMs`$Uv|a-1{n7dtC{M5UqV!VJT6q|dta^#*tEICNJ+tkTDU2@$mR_cc%17jxZE5fuf}-Xd?vZE-0X<0@WI}>F>_El(y3$)DrXK_ZRQ`@6de#O&pU}( zZJYFR^y&O;wytaSHEnm2xRLhaO>9u8V#!Cjhslhnb?5bqMuSUsr;*!9EhBMnv9gQJFF8-H|?>8n9M~%?`Fy6uxu^4 zM%oxaqoyuDNoOYe47Fy}E{Z6*Q?!(cJ`d(^b8y+=6s;=_I0Z+-O62_h(#FO}2bm1b zF+uBr{8>}PM=cztTH zrZAG*fbv*Athe&58{DyTc2BBxRc?=Cx5@7YghaW`S%!W=z*}Zt@|BD&hg$B%(s!f+ zR$$b2MsLYi{f4aS_b{qNO2v#&+Zk$)WQ8LW5mur#tsS|i8@$2k>%(ePL;juVOEa2- zZur+jMnDMI?vyBNdNYSKT|G>VZ3ilbrXwA?s&%XBr1IV3UhN8x80Mz+m{uTi`byH+ zTsqXA8s8^kNN{Rw`_@;5%%>W>wi}LQy$GqDl=ST!txkimOgXRAaO}zVCHlA{?M`$^ z-&?VM&1HY7;HqURzSomS;+>sD)2_a`%6mOC%^T> zcPkv7+k&uUVh?ie7luRr3A!&5_GzzggfP!Ewyv2}V0seiwWvEQzMNI%TwOKje3IFQF0lzH~zQy(HhY_W8NwSoyVR zAipQ2g6rqzN)Yt zcO+GaH%qGj{2R_=w5(or!p7&K>F=S*p0)11>|eaHK7XXwhujx2I>SMXuKHVKG6+YW zu9q>6-|arbU(fhVktXGb{^)Y}>(kLmjgq-YbG$K!x=-NFjM%}KmQc%norM++Sum8C zHo}qfn1MWbqyM63jt(^{)oFg3;w>6T^;9+`8%j0DtLN$PueLVNtJQE`)iF#>*xFLB zo~L&Xug>h(O|Bg^s%JXly5-@UwVQOKZyJ|WWh9l$Z}Q2(kAlwPle@bzZG_)5zE32b zPAA=GbdqHGF&4lVvb43V(lo8-tD$w^62wTzVVaNE7`;|W9^tQGt{$bJNI_de9>&OFyBB+Bo>7KaKy73v$_|-HE8E*X!u^q zzg$Rav#Kl?^Qe2rsxLE4dkH>zuYM>d3YB-*INXWzNJLZaxwV8|j;HkNw~4rBaCGUZ zc#6xqJr3$1qHy@M!G7j#vEq4F#?rUrqTbE%$M!3DgT@=#bS1Oe+NiZ5_6au2-ukN} zi?XXmhCW}PE@M!8t7%w%TwrAApYq|SmziU0+twZ}MMIxUN;QQ>hE#&dxDXwqK^G62 z=$ivpk2n7gFlmkIK{7n}^dL=mm@Yi{^x)4h&`=N1Z&@2~gMc~|kQt$|MYea$ubMOC zUo;@$8aFpX!&CLuX$v4s%ZCDx$PYS zBST+~41Le9mkf%w-kMRcF)5>8ZQhrRUh|74id7A|WYDD>OS}fZ-6-a;tGSfm&j$aJ z0{EtV_%|kdO7_evv!|xcpE-Tbq*_Fn;i(u%bqoN($q_* zPP*dKDRbvcOIs&tZca}2)Sia~=Fgp$yI|71 z>`QZJ&ZgAtxl^-Aoi=mM%-n3}X1o;X zvgb^3t9O~-bJEP7UGkhRW==ReyT_>~pV~K7c$_&sZ{DQbnRDkTvqF6S4CO4ae8eEF z^0CE}Mw;h*i<>M4&+0L3bdSumUOk3o4(&g7+@Ntih73Bl$JkMsBYTV)G%o10`)lQT zj2Rqgq|B&uh6MMPCsiBEAA5d}abwONmM~v=91FiAFZi|my>K@&IJ&XM$=XZBF~PIW z89nq@e=&< z)ae+`+|=OcA*j3gch;mibLQrzPS2i$rlbAyb0^KCu2KDthXlIJ@1A;YUUpt~>f9@{ z=S`b6cR}icnYlAkbLP&PIpwOkTbDJSfirW!9i79&g@bhc}h)0A)68LJH^%9(Si z(~l`LvZq|0+CLT6hYT8>nmuP~>fC9mlcrpeH*@|>F{kdSQ)bPbKXcCXRO~->UiSRC zdGn@Z&ky7*oN29Z>g-9zK_C}naaItG025Wrzxd~v%mfeq^5XH5_`h^1M+O&&0`gn8 zFY%xJld@8V%@q5uPQKF^$Y0WPkV&XH%Vq=u#NOMSiNf0)|Au#9jgp<&zm_X_vGHORk9c6&YOhJn!HqHF?Diw?t<*>Ip|pG zBt{yTHg}$(+a-<eRo}mA!iQ>eRiHU$~w6UliybnAkmV zO(z*N3U!&^sk^D?AE!?JyX1B6BqL=0vSZn)zrWt1MS)JnbXdmO!$*u9HTs;)bH|JwH~zfyCtPshq{&mJW>1?wW9DU-&ze1FZq60+=I7>J zxnSW{SNp8zq&RX79?y^i7GrAt2MpwFQ~w2$nlx>8z<~!fKlqSCTO8Ihxz+Cu|9$Ht zjyx*mXp`TjZM$RIcS!Bn>DbO)jyt|@wPYKJ89CQ-_6T?XvK3Uzw++# z5&ilew`ASpM9jX+m-F_xc;f{jy->D`KUoRF8==M!*|^A-I2?#J+|Nb zDT8vW&Oc+vS1T?U*Lzs{ffqjY?%$TLS@!0a-OqmimEGl2CtZANi>9N_%PG5Yebd%s zuekj8Zy&b(rUl`)Uk~cI^44w(mvlStjmORzb<^|{+TJzhtScTlZ+_kpEBjaNY;ydJ zzg2~rL`StfkJ zZy%N1X5fqq`@Qq8rcDnWd}8;9$Gr5;Lv!ahU-r?62iIMiR`u7PdXB%OYw643iq^Zn zTE1!JwRg%!h19B?0HK2QMW8i z8qm3VYp?hEJ#%74|IpkA&zZcd)11tc9{!^0rwelCwQDu_>Vxi^F=9pPS!3@y{P~K$ z$?d-x@#k~zoYnM(9Y^#&EBVdWzWRR65sTW~v2Ngkyk+12Tr_j(*#o*R+HmiUgSTwn zxU6lL)+fzA{f)K*i$1^M&eeCNZ&=!X_LN^zdi{LbH7ky2+p^OU?M}FHSgW6kZ=2rh z*2;NJJ3c&d=plI zuV{8i(*ruRd1hSeW%tesUXd2;)P7#?x6i%!oeRb#&uRJHkWcTvwe!?IPwuGLlX^#X zY51qN?tE$FE4Te}cUIG8qfWawb;9f6I}Z5vkZ~W4J@4oDA6t3wh@6{7Wc~dg_x-J6 zYwDI0o+$sz)~^T8`1ciqo+?;#de-*NHHCNH@xeXEuRrC4ll%1QIpdZdkF5_}dBNW% zHyiMJtG8}Gx8Lm5g+C-6bkwx%9)?QXAMF|qo^n~qw0_?b=b zocl|+Gv7(S>o2`KUV6mR&(A2m`_Yph&2P44&8l(DcU;hK;m^N6YFov*PkeC4#$6A6 zHSx{-J7)bdp;^aA>e?TE_lH}1eDu>bov+NO9(&uLPwDu>Cx) z$Mb}@P(QD;pH*`2^$e;U+3f$1;x#rW;o*Pno$Rp$KzQ4olt{HDG z{3NuX&-YKA@ViadA3FGiP=_0TxZ;louIbRfW#OWcM_%&bN6)^vExSqY;2AGYJY_`w z{Uw{Ps(oPdj18AP|Mr?bYt}vX%_S?F9I^e?%=efrV+Q`@}u{xh=*-oJ1` zk0ZW6c-oEUp55ubtjIxw{&;!aS5rHU`mxQb5nrA&VEoqbtqYzQSNG7v7v>$9{^4Ek zZ+NBMAI6V(_`}I}x4hu8H+#-2dSLru7u25D54{ z_c=ob-aPQ;`e!#k`Em6A>&njVeq8&@+LlMJtS!53v!>oV7Dt~vWy<_ML_68NP8mCcy@;t}vh5ba*&{}ez4R0b0O$AW6B~I3 zgU-S}=c&o2DLa1g?e2}fM?P&V8zqzGNl@#NR#FcAtpA99qwEJ9`sM!-{oZHIot;A@ zu3>ph4;=cbR{wsJeEJQVH*b=zaAIf+Er)*oe?tE>yMAgw-J@Ug8|Zub(|89Q{?o1f z?2mjr`n?(*0Ed3*e@4Gi1$F2Lto`nV|6U{K&b@qm&Nx}0o;`YO+NFE5INy-CwkEXG zo-y{8W!p=0>@U7y`@A>%^W^7iEsl=UzZ%(PO(=M1G+N2urLCjU6=3lZ z(P$m`1lWpK)+)g?aM+R2XeRgum;(+ziqEivxnLQX)h-&X216XH$@`U?z*O)fuoP^6 zVl-L~t^{kqlQ>2R@JZ+M!E|sehmAA93=SJhz^R-xt_FK?3SJF<0|xl+^E~c-$oHR{ z%e@b90@$1n@-O4^M^|vjDWrqvbMI*e*oJFHh2S&bD)5KC^cP&krML*Vpg;BbS%qV` z=Ghh8Dc3#0(^-bi0IvfJ!E;!oMZijM6~EB&V|p}N1rFwWk9A-_-pWeh>q4_Y`4zDR zL!;3wFf@$%U_}OU0zVl+f56e1^oL&-`(Z5Yg451JzTmfD4tU4}#sj?MV&n#npGf=Q zm`fNJe)_2BQrZEB^L4~5@ZKr31Ex)*9k6gF?SRK#MmxNzv1JzRfNN*d4*1L!(da_( zn0bs3_z_qM-Y}p3fV;sIezLIj0>%gI3}%6Sz|!Lafv>@G@GlD)=kbBS7hpQLN09Mt zc@^csc3?huJ~)H%$_ER5Q((^*_L$DN#g5}^P1@Hkj z<5xbLwwa?Q#u6#cZ2ER1~3cE_yh6u>&59CO52G|`e1kV6hf#qN&_#qep^Eu;f-kE-aY2bD+6Wk5v zfCt_V-{7@i8QAU)%erdRTu06Oam*yOmN0>>VsE;CEzDu8CVBafvI;=AAB8b zg&yw!)4;BOL_fg6;6m_5um*e_46q6L4wwq=0Mo%{E07b|8O#UI087Dkf1;n@319?# z3vAUj5U2;!zyt4sPw*OWA$T*m0!;Zc@&!)?Yryookxw`D2PBjADjx7g4coNUi z+yiETo$sSQI20@ebHQ@3_5IWb2ZQWC1}Z@IlLMU}fN$_ra0YlCSP0$;t^%)p5P8Wn z7y-+`<~=wY2h+eN4!&kvK zSPzzht++#94t51=z?Of3Z+7fb!Bns}m<|pHv%s{+s1FVXOTlqqIoSVk>VqS}KpK7o zOa+HLL4EK%FbkXk=7U#*rQkBK9DES00dIbi`n~W^U@G__m=0EyAvbX7Q^*ax1Y89! z1S`SYzzDb(b zfJ4EB;FaJCumoHUt^}*Wx4?QZ0;cpqKF?AgTn0`6p9U9#?}979@4?kz%jc*M?gs0@ zanDo#6!Zh^3qAr)0G|UFf}evcz`zUC2it(v;B{aj1uMV_VAs{u2m6C7 zz#-sj@I0^@oB`H@tH6}g0)gkjzTj~$QXlLKE(C90!?=NWgXQ3pU=3If2Kq8yU@Eu^ zOa~8qiE#&0zJAqf~SBHa2nYBbo@5h z6?_NG0C#{h!0*9A@YGGz2UmcV;Qe3(d=_ke266+tf(M4F54HwpfStfXa3r`2oCj8d z&w>%~;7aPB83?omyMjHz3@`_r0p13dfa}0AFz_1l2iOIa6SeceR_XXJFb!M@W`gg5 zIbiAQj2l=Dt_F{L1G#}C!N4H;52k`SU^;jmm<6r?^TGSUQm_In2ls$AV9U+aAB>*@ zQ^6;|bnrtk3vBi#^}*x7Qt(W$92^bSfVYByv)~U*1-F9f;PAJp4_*xBgVU;z8+bif z3El!mz<0prLzti5L2lp}Fax~!Z}c0y5-b5r!7}h^unMdI>%ep0MQ%a*3#NhhgPC9j zm;;XaJ8}bSz;bZt`?L#Yfz5|f9_$L1ff?Y3;0&-HECi3NhHo$(tOPFvBjDX&^I`Z0 zuq#*zW`LiAGr(paP#^3Gt^zZ`O7Ide0?q=PXJDUT8rb?n_y#+HIpC>a33v`z23`wR zfj5J7;Co=o+3*RbgZ)23-r%KRK3D>lg3p8HU^!R=z77V4qeoyW_zjp2w%HIItX?2G)SLfPoQ=2bc=J4yJ>|C|fUQPhFJKxt1Iz@k26Mn=UM!4wwO! zfRn&7@D{KNd>pI;*MY4v=`WZDw%Ja7usfIoW`ZSPAy@|923CPjf^}fvQ|h0~JOZYH z*MXVf3NQy8x&wU&3&GW3Iam!I`WgNm90I0{VZ96X1s?>nz;$3gc;x4d8+Zm-30?w5 zz-z$fW03>c6|4p`z>!}tFMwI#3h;5T92^uuU%-pNz_>sl4@?Cg2GhYBFbhoINxNVv zSPDJ`mV@iT8nE-1)E`edFbgaLSAp`cwShp=)nful3tJ_%ZE;ZZlB9!LNqRfUYZi^3 zV9N+3E>9ceN%^#&euTlAlZdO7f5J=VyBPcaZ<=v}p8jfBq;h|5@@M zCSTZa`90gqf0z6_$R~vG@~`yrcawiI?K9PQ`PX^*@{2O(k)Q9+Z*q+m5dQm+|2+A( z#^f(^^T&~Y{L$EiKYxlxUy_rq&K#*4dQj6+w&9uz)^ai(&M(>o0j@~u7)#c}I z@>i2DF3!sz;pV?g{ufixM}PiQ!;6g5R`ToilD~)iAIWb_kJ>de^c%|`Nd9}&XA1T4 zH^k-dV)8TKzYlV7`EPoX3PAX~mi&u5;FDwOKjYTFoBZA6|30REOSk^ZTxJ{42{aku_J@>i4pc1-^3 zZvMsOPwyO!J{*&OpPPRz`CpO0IVL~s=HE^JpSnb&<6`(b$K~&3^4~lz8Xe@Xf2~$m zzq^(Ef0Dn&pWkG&OMegfSyQ6XHvataUVV9Q_d@b}`15CY`2)$n^!RA>Dt~^HTrJR< zv|Z@eFzR0p|ILQ@>_B|$CE5+Om)0^)=#iE?zwvSdDfeb}G%A(3HRC5+pg-aM(db-}|7UUKCVTRKkn$~0 zk4B53?aHl5p-X2Rbgm))DCy^sMX~)n%#+8pl)LN<>`C}P$yd(wGblX}{vV{=or4)q z{%$tUS5AEWSK6%V?PkhlpB0V%Tgu%MSMFP{+-}PC9}l{hvEC7myH9 z$&k=@L_{n;W`m!VN&Xe)+#)cL6Axq@_zdf9us>Il?6t96R ztNblOxbX{*9cv+ecWB{=-<2M}RS4IKaNnnJTa9qrym0p-+&eya?ATW++z*X#w|n9C zA>54!m!@$0jc}|lsh*D_+&+XWrgFTfg`>JTUG@vo6YJgqAJAo()8M;Xe{$FtdVL${ zJ1uldrwR5ty)pD^lB1zFdF@H*w0Lr~2I00t?~w$e-IUho+O{cq#52z-Wv4ws)( zG*jb~kvss4@*D=AGK4#i0977MJ~o5TM9^a(7tPW5P=2)W@uHLABS*NqbUp=}L}FB~ zm%-;S=%Ri8tv2{^dEs|(e)Z1 zp_d9Cq>85e>;|8&A>34aciU65gARfI1n9Q;RM9EuPoS^V;}?8Xw4;!J(9d3Ck6#J; zAkfF?@ijZCiQ{k5=>@mB{8xc~2jairqaSqTs2uIul;nE&Y;ZkLy)Qzzq84u7FKOY7 z_C1XBh9F#!yis`vL-Cvq`f6W(KJMmcH_}-Jx@ecLXz6I}BIF<8Ml9w0d`k;wpOV$g%~BibMI&7hCb^Q-CIEZYBmm5=Y(^D*F5__{;#F&gx}A^E5Qy{y%q zkE6)P6wpQg`<^`?>%gZT;cWG>4fM-Ex7Ei!(073zq$jDq4uk#x=(hea7=(L6=;ff_ z0eY8S-vw8>@>~!4VbC}E=$^c1LC?0?>uChqb0z4ao*uH-(@yYNk8rknIsp1c(DCr} zg62m#3c^~@ZT)`O>6kx*ZmY+OK>riyHhudt%F)rz<@kZU9IL=*6~fudu^IFmLARA- zH|Q%u=!ZaW2i?|QMQ{S{2HnCn`c{7C13h?<8=r<9ce;9nO_wqA%2-aNE z$Bvz?=l4UBPUYSWKJ!37iRKsm*Lw2{s=s3%pGDwPk_nc3lIInmzXx=i9Bc%A80fZq z)S#V*g8nti$N5@5s`qg^<7I^Cw>p*`ZB>pzgp8`EdzNudKaeQ079tM49Nc_QIyd88~ z{BqFm1|4GH=?`uFq8{`+LilGv-w;Ay2l_3b57+r$?#b0Q(AR-JN~bq^^nIXj1pOSH zzR05=2A%R3WG_ABTW1&+z^=Qw{DxDSfbY2FZZ5BS1 z&VaL^XF+emcW+#bx%D|3^w&TSY7ffC0p#Nl=tD>!U8m(k>Z1Xqk0_li`0QI|ZXGQ{K>t%n`rAPNZAkk2K)*XA{llQ&8bTlZU$Borx0SCP^aU&I`L74PGK8K5y#jO_ z|8<}r4T--E^jAXY`#?V!LO%@p(;@W1#Tes3x9N>?(077v%YQxSD?e(Fp9TFI&`B@2 z{fu=2^`jAJpIbox6ZNBYT0eq*EIdfPNZP|Y!KeOX$Bunm=TjgZKO{#7K;I6!tsF-| z-wHaqt(OnYzc&m6$lVq?<#R9cc_--e@x5rLmd}FOQpp0Rd^Ca269{LUpR59X2j~|d ztXm&Vk_E-z4EiIMd=Py%=sPWR%4ZhsP4yu1xyzo<0T^(fM>tzPM}xi>bXz`aK;IAg zc}UYO2m4hipRJ%D0NqyKYdAh0UVLrbzZZmOL-My5^gW>4=4mf8e_Q$k&V^kS!hbaA z-w)wm1NxJo+xWMF{ut<&>E&aGGS$x-&UeITPZj;Zw zpicn3R8POv>qjqxJ_B@H`wT$EP6?rp2K_?Nn{@sKo_$aQ`n90j#Jzd%lKh5UoQ$C5sp)>(uxy=3dXC18S>CvD7<_)a(%w#k&xd^$ zLN5n>PYAsp^c|qv2#LQB^qWDqjjxA6zZ>+&^?Ihc$HTI% z2&VcTh6&c}>+O6l0=)tBc_yDqKc6Oq`xL@K{5-kS#)Va&uLZqar>8u**$n!fA^E6B zdp-cVuon&)?XKAiFN4pDPuTb64Zy&5E9ka%8x8t8&~4?Y;rQ>@%c1T2YXyBr2>&&p z-w(R29_|Hwk0pH}|7h2}pg)TAiw1ng@0a&F{bP?p{5}XfNIXBw*48X)`2D7_h2;SQP3yq=}Y&# zke71M2ZO&&uIoYX6GG2|egyn)()sg#Mr!YMpeGQY#M_-mFZT5AHqg_cV;J%1n!jKl z=qo@E8h?oYVbHGy-KN(Em*I{D&~5c!4tg`_)AjVV^8@vu-w+Z%3;Ht9->1jtH55^P z(AR<920Pv@f8i2gz!QBN=)e7RaQ%~BXhQq$16{07m1}xI?oas#)gsQaR*n^*4_a$4$7r-u0qCL})9mHg4L*ku&eooXKz|-| zo4gdk;QWInA5>2xKz}ZTUJ3eM&~5VE1p4I9*yVW@=rce+7iqceeT66Qn?auqdXPL* zdy~A?fKKTb)oS%bI*`{jDclN#yI+N?w};z|a6@iBb}Rw;E4ow*C;j*zQhxl4CcwV= ztXt`P>cq zJ)jT9cenq{_xK+I{SMG=`k@Gh#TP(_Iq1dL_AibAeX}KfDrY6=w}4)w$EPyNrAR`> zzHpMa?FdKpU9?fF55rzt2Y&Y<+%$@)_NQp}*f!9g2Hj?V>;wH7(4juP_?jQ^Fz9~> zi9dKU)>lBc*$?HQ(_1TS^m@>#J#BK61)a)gYwvZSQ+ry+f6%EOPt(h%?Q7cy`rRS) z!=T?9LLYpg?6)@l<)Bl)fjh;kUv2%p9`w~A{Ij4_zqXA>>p))#x~*Ss1AUbxeUir} zv@hu$(eE~Ca%S|qqu}!z!r96>3Wu@pxfdf0)1;p{GyAcJ|dZO^{rgi5O(qi(6=Ez zx|K)g^;*h*CFpxWAF9)}b<`%%_keC2Usi$s^N{$PL4Oi-n?BtQI*pIk@eg#;x3>OK z^Z}e70Ns|q5ulU4JzFoIW@lA`PW5AxuO`s9fNrbbRiKl;x7F`v(5d}x{C9KuHvWe| z-x0#UXbRRnLAS}z2+$t@o!Z)!j}L0{4?5M)0-atU2PBHq1Uikkw(_k4-9i7IfrrZ< z{exUh6o2y++$jNikbF^@>(Rc&pnn73i=H*~-41gi~80fZqjt2c8 z=yQ;co6mw7A_2-Lz4GN9pR>nr1$_kQL2^pvSOfYH(8KH~N{6ndy$IoK^|2513eYb_ zST~zi z0r6h}`Z~~q>VwAI(NnN)1bPi1>PcY)qr z{SL;2{t&`_o)|0pv*2d8oy$T0(7NFIr*hSUUKc{of<6~?n|-13jkG3odi>w-59kA@swb9|8STJw8hY@gH1?yE;L)>DzM9p8-9g$L9lLKG{iPr|+wkXEmHxDWgFaJGHE_t=jXy@B;^(P1MWVlnINyv!-;6k~bC|*J1#xNg zhXu}~k+NSGIL{TxxTjo+x#sPW=#L7Vn+obh{1E8Y0_Vnp_xM7A*G&bjGU0~{?upuP-|PaMbxl5xspEoTiMp9IFnI=yQE3p~w3=zmI&OU{62iGeyyt`Z_-=ir&=E z`F&CJXkX_q(RugxbN2U%ez~8srf(GApYI2L;4yB*PrwZM|5_hscR_StAGAaC(LT;? zh4%vgd(j0e`#Rr`M*rH!`9z;vWwK)`hafAF=&B-TeI)v~Lg%`I5B#{ud8#1#`6B0* z!svI4oVyF7TZ){6T;cCbA+7r&(bpqr>gWp*=hIwWAD977AB#TR*SRGU-P+fAEi!#; zKW9%t^r^nirwXI5^>ywjjQ*yt^HgCJ_^%72xAt?66#lMYbwB4(&i{}hm??iax-;S| zLw`bL?2kAomxCB_qCtY`++Zem?4~Ex0c7zvwxI(Qihb9~GYWLe#mgC<@uVt0?-j zsPl)St+IrJUWuUC-z|v#q`-NBo1b`}Iv701MVC4sh%R)l;}VNR-wnd~(Tj0ik;p{8 zSpP)yD-ma71T6&i{$Ifep+Wyosf<1pfo!28Jk1$9`QqpjCmvlHaXu=QRlm8>dM7D! zc+!WWtqv5QNchZiVJci6eKJC-40<>c{X+!3T*kU!IG}maUlurx(I*O=bo6@#$T6_T zBcoOpI@cGB`fGvnGV6;0c~%4!;gk|Exgiq$djwh$U!7xx=S7ANN6%OpnfOdWcoM*g@iL#y7lzQgp`Fqc%|vd9^#5Fh6oaY_k>h?dqqR;Gu(v;N*TCB~@OBNnT?22| zz}q$Ob`88;18>*B+cofZ4g6oNftzPd6-9gfa`}AMz4Fi2&c^d-9_14Uo;L;vq}#_w{9Oha=gs)&xJ*;~ z|K-94l+9oMrbKhRvz7KU{HJ`zW!scV{GU=}UpdE)%f{1-6WMWX@nrkBbRv`LOgAPn zzA*onf4Jq(CNkOo#PW|FH&*=nPi=ou`2Re)SA80d|DRiURKi$Q5&xmjM0-=JIZLlJ z|Ie&|vCG=9YpwU6Sax|w0%lWh`5bTk&zwH}!s1ag=Us9^arxLuVsVEy? zJZeFrsd!dAEAcU<6*vYmHnY49jg4nEEuTx&w`6-Zk?wHDwx_a*u~Vm2kIBXt^RLD2 zonsq1ldVl-l1lXsTHX$R@|jIbN>?JCNv7I;KVqPz6RmNIz~4GxWR6X? zC-FC%ScbpN_yJm~DV~ixV-rha&FOesBDSOnan&y{ZETDsmNh0ivN0*Mf=4W#PREx^ z9_o8bBO)Tbcw4d&@lr?vf5wV*Wf~2cj5D?|)z+41@5bOQbRy2Af+;ydQs@*o^?`Vy zlMTd+Tz{a>tPtKoG@g$}%>?2pxnh0dAI!OcP8 z;YI#d5U#w<9+wEd7CC=C<{|PM`LQETZvM%CUEsj0ZLAB>ct?1Nfs;3baC05ugM$B1 z=h<(|d{RE>(~SR-fcm@%IPp>I6cm;|U&Q}NK)dV!9#pO;MEFyjVwMw??h67R>iojU z&tc${?n7LzV*IAhsfbAUuNYS~OYce~{0QS8lfj)v#;>lPDv(u-e}VBg8NZtGy}%>R zQ0F-#KfmJe-{W-}9B~q#lM5*PDbA+h)5Pyf8NYz>Ba9=u_tSl0WDoE#xthX!R6Re-eBN=zR8bGpxqiSz@Sn%{b&QW;{7J??%lL;G zkHsV(Y)BQKPci;U#*Z?N-OPgj^;gR9e`oxsj4z8zd{{&hUSoV+gT#Nr;m^WC4An!t zQQ|*fd=BHonvG0t78f; z!G8neI~U7xk=~)tlZ|;jXo*Hf5&)bMBbLgA#Ur!uWrE-H)G%^<3h=_A?Uye;j@-4!sE#Q(}K zN}S%wN1vM*ue)91TRA+vtB1nx*eLPaWN_yTj7K&}{AI>}&-kAif1UZi|8&XccbjGS z77l+6<8$wl`1cuqfbn;1k@!~`r-gCK&;5*Jhr9SpWqia}W%y!F_Zr|4*l$zrYLEeW zVg7c7-zV{1lIo~&|2b|)HSVkNecH%rB4mWatMPrhf$tLhPjM<4XEAi1V|I9 zpO1_1x$~eKfjhA0&H2=AjH`V!6pB7u1)tpc(Qe?w(I3D56DgTcYvOZ+@k^hOxY}=X zIySOU_`&}xai|ON`5NQ*@qVZa82>rrE2C0A>8>jJG$AX*r};_AN8t}K-tV6hpC^Mm zg_uxL_}>hZd{jO!0Iu@DLB(SshhNi2hR09w*}(Yh(d|I%fiNfz- z9K*5re2?+{KlkV7RmLAXEb(7+_`A=Ne73yk5C0tF4X4R;RUH9# z^rpmzOV~*=-u`2WKhO9>jBjW88Oiu_jQ8Iz!=K0aARH2-@|Mt{b9@xO5IEK6mE7-& z1r_JQfvY?-Bp&xMpBD$pa;bWwcODS`SKlS^IUMPnVu|0}U*a-#oC9Zk*&`BB?fwRE zO83f(RY?56XZSgi&(YWY;p-S5^gW5kWN_!(jF)r06*K-M;~hVe;Z+$2qr#~koUt;W zDtt9?D%bD1->H6aE#r@!A;W)z`R`}E@_!`%F^r#fuH-Z1h{RQSmodKDXqP`R{^CnA zdAt|kHyJM+vu=h;A+#i_FQ>@Qb-X@~L zPo?=U`|%=NKmQG!(rrIemaCZY6yr6!WPK|6{|4imACUM;4*v(>DlLY@02uC=KZpMW-|X`;3Uu2vA&(fcngPL&w4V>_)*69J}UX3TEwTUO!8mB@~`^o2Y{an z{>l$u#Np=wS9Qpccr0Z;*K&E4zIv7MQSXrTfZ--Y z+(X9rdwwaytME|5&G`71`eMTyR`ByMr@&U=8v*TO_oYLL+eTl1a=ZlO#XV`l`1Wx&J%4Ch< zr}!M>@TVE}+hY?Y{|C6g-^AfxVtn&!GF_$53(-L+KigR^VOSBLsf=M2`j!lpu}F`xP< zJh8;DuQu4XSXs^o|-(d8w-vJNGXHk{pv*j_F?ov+o ze8v}?Eb~8@@jBp?pDPXdzlp;?$?}ikReb);cq@yO)xqIUvEaoPd=7BR&)MIW<+?f|6S#$OGu^*i_?$Ld@;Suy zc?sw9I>zrY1XV7$N~>4*S!{e5A*M0eXh!T?%ZHLCBP{^ zM+|%HQpT@+!7rcJF#dI(rzkt~cEc|mlj;76{SPY4=NRu`J}UnY16N_V z%EaTB9DX#9%PP#}=un~^UzYh_z;gH))kNYPsHS;z-Fl$=|dy?`Hfk+nG%qen7np|N3`je(qvC#`tQ(kMTp`l+UN8 z$nYH8Il$pJ{#4>;Ghr+`KDA@>gA(7wc#`o|M!(*`_^XD$@h6O%_6#nx68sPMmHJTC z!}W~sd03{a>iGcUgABWL<_9I8D_9Q?=X~DAc+wb0&b?HIznR-n$>HU|gW7R9ho8;; zQT2Bl%2XJ`XbfeYSs8yZ;$@P(7USVab0A`x6xZS&T2?@qHlk-@*7JKa=Sy z`8;)z!*Z=csbs&G>+b)Jw`fe}9AI zZ}zXHj6coeh3da|GTvgy`Advvjq$FdQS!gnuxB;_r}@j~*;7T%UoMgbc$~vuY0Q7) z7$B(rr?G$L1upL<;DPne;kU5A^a2jwCn5O^{)J3;NJJ9q8DDM8FK%P}fxpY}sy<(1 z{Pn*`yqx);(=7QvY1BiO@kiKCGK|AN!+4jm9ye;SzhT_;Lw-0Z`3z_Mrt0S=##gd_ zQ~Li|#!Wxr3&4ZQ+qXsXPydh1=St3J9pk3|`DVuNeMW{?`G1Y^K_^WU91;=9sBEd^ zZ~ED;WZcvPUuS%Mq2#0bOnUIwk)-yzZd%(sagG@cd{nhhGa^#bro5zQ*C7X8BZM{?7QM|0nbFC`XzO zfl*;}K9>O(?ZW<5Wl#PVxR|H2AHJL;4ZT{1H~ZHD#-B9oicd0L!*;bAM;>N;AZtDMvkFxxfNxe6S6Yl^{de}U-ay4+O&yjzS z?Kp(PKP1BIIhWrHu9e{z@xB_>ug3xp%KuajZ;tOP7{89?|8Y+0F2<)Emif7W@!=nn z>0Zd`4rjcM@hQAsrt*IabfBB+jri=sKBhKei85yN_i2 zVy-u(PnI%nuKyljyq@)ss;jdR4 zl!sq1zKHd+;(6L9C7;#YzhtdC&c}h1-o9>(M2eaJ104P!kNcAtFaMO}W3D?~&G=(n z-u@hZBjfFypOuXNmT}V`GWdqzdN>a_)x#*32bKSN#%u1C?V{STN$|-%-`B$7XY>3> z)z42EFJ^sv0q65o!H0inkF#zJ&gUcxKHq|;fK$0lzx`I=rxu*)?zd4%KfvKld#vWu z!TGrYIJNJtak9oHGo#ypQ@Tyu@09*|jPVxsfA;6_1J?xeuK`Yco;LP-+{gIGxxbHQ zKBq$=(0Ej7_$AI0xGJUhTnL=_XL;R6<#RLeVlSBcZHI-=@0d@`5h*9AS@9XSR`Nf{ z_Q2_kS22E==Y288Zvd`jh9U8|mBVk~dYi(;lRhK)k21!o8I1q;12RAIFYec8yw5)* z@;LL^20SR;Jsf^B&r?*G{x{2Xhx}ghxs3TNV*C#FKQ}S{DC5@@NI6k_F8r+IW3D?a zWBg<6ZyCdUwli+}OGn-!`8>_*I|DiVcNjPI(umImm$wx-$wN8M3sisqD&se@A717E z1;*dU@}uD@2W9Tbt=S~$F^hwo#2E6+Do z9!kF;`S<5_u3vMewgDIW*1j$IU&{C&Is7i>qsF_E4U*3;9yi~~;S-FT$99)FGfS04sWaz4VCH+_ZiX66%T{skLlc+(!c zknt%zPgioXmGS;;|ETgl#`s=d$5j1v#O;#5xxQJ;_#^Cxc`xUunenyTWxL$P_=Al9 zfYVj{``jVM=-;7V3GsCYcW;kUBAt>nb{lH}i?`aGdiHOe!->Db_!}%g!x^vL6r9hb1;5^ce+f9r!_DlkQ1w&rWy z^C94rA9J7Tg#kjfu_IAd*I{iV%%JB{XFoXcHF|@ z53v2I!d!f}ZWjG7rY=RpS|iUwtH1s62R4Wy#7?WpKtglBlpYj=DchsaFv!`Z;OG` zxZtq;sc0GIGl>0Zs@}fO_+Dc_&&l7G_K8y>^}`@$G#fbSpJ#c#Gm!Cn7++%eNq*0` zdCsw5o8&W_?J=eI#xQQ~pKoE@+<&qecu+k&Zo!XO@FCyfdS*Yvd0eg-|th;~< zzc>3`%Q*ZmIlMVfIb*xzUt-wF8OERDb=Xsx&pO~VU+y?d)_;QW&A=($;_?1=d5-xU zW_xuahwuMgnXb7Hb~@u5c%Q0j$K}9->hop}Kb-BH(aeA34#|JT-=rRUl<}`J-e;%8 zUts)qz$yP%a=p!9e9ZSGp93$*@Jc>w86VB#k;>bpjGK1jdd5fcI;IN$B;)3J)j0r{pvE30ZH`IsAEyoBMUE7{B+Z46nwEPR7l1qhD7z`|aJbKP1yFXM0}pSpwV* zqgBxL7JLKqG3Pb^kMTK%UcKV`!ThfQPI}3lhyK74em{q==l-So-4Vv0;Q8bGxeTKo zmi*0g%6Bqu&U2q({I~3fIfwc5-zDXLm!Vgu3Vf(@9nY_aaQH>QsXjMV$@XH{`6zHI z@4Y-v+{A>37~jhKJclw~@`K=dn+u%UZkNG7WeNWo5gz+wSkEha>^a6)v3^i8FyRrI zPjel!jdAn5-fqSh@VftdIRE3ISg5=;M!Q@NoYFdIbE!kK8T!Uwmw; zNKxf~3*+WF+)+Q2;qT)4Q7PxM4!DZTka&EG!<+Wf-Hh*JKb2~)|F!TrZ4c{zmY<27 z$Xwu5KQFLdr1I0rc;$1lTrY6=?TnlIJ^sx2Z;f-H7yc-?Tnm6xx*gw>{8j!x&3JoqUGFXZqu*d9=N>935N=V(SeDdlq$ z`}Za>%PWBgmFwfcDL>}E)9*3bl@cQ)hC@VKV% zF5p4sx{1SIY{>a~OZYEwc=P<`+-GHeO#8n9c(L9f{Cx$7H~s%VVEh#x-!J9xe`dUc z*R52&jsAs9*VF?|jMw}~_7_$5F9TQK^=y6Hg1>0NPkTmy7$5F=3_2^m8lYSWLY%=Ws zr2;?2xsT_|L%8C;13akR_XDSTD1Kbla|wrklleGoFI~v^*}!Vfzr%e%`c@B4vMy5{=PEx;+=U55O8m%~3`_^+JCbT*UiY;GRg z=)_{Pr!R=rRM*wVVop;comiaA;4<)7wk_7!nrg?}KmwpxtSJ>++?r~Lx5k>XsdOe5 z?_B2KKJAXyL^jbhwqktw1aJ-r6r;PoyRtmLrPxD@Ip@`-09~ zo=#=csrHi6%Bl0lHgkkGl6cz&(xIHr#ll> z1~_3xyfu@9mQI)(Usjh*C)*d-B-$5emzdE?$0I;(JiEj~o(OVvZCCl!rlxc^L2BcT zOHmj!c}^mez-8|AcqSVXX8a}Xxa?oGM-Gee)$JXfu3Y4h%jb7yL+Ml7m;326Yvxaz zT7$OiY=~9I=)GU`+OJqiES`)tH=(<=HzyZ&rV}x|xr%#(XoS+zS&7z;M7lneYR%M? zmicP8b`JWyY%C+(co}XwdT~6Rs6xQHvKYxn5YzIycymHU=vZD=+lcVEZ9h2l#OjQw zyJUN!Nk$^}!GR~DgJtnPBF;cdaHw+h&?XAf*j)e=!V;vkl$gv&rZd_3&Ed(Fiu6QK zbnxy%PoOe($T|tme(8kj45^~UiF9}MF}Xg)A?%|hRNG@(qr4yFIPo#RE z8_zZ_L9d^dhBl_6Sz4)V0)?JkH-Fw#decKyYl2?d0F9K+hQ%5m6st-z&Oa- zf|k1RHYqBrP_gDWv|wP!H-kc=s93&e-Q-Y6Y;L6PvglT!FRgia$p%$nXz34dr^P})rk63sB-+8Yzq0c@*67*9fJ+)T}HZq6jA6g|mW5Qn!ggH+va2Dz4clD*vc zZ(ZifN*1u$T$$*=OMTD)$wbCp+Y@TzX;?xF?5&quvXI8>0lUdUhl=WZYZ#W6k-d=W zY;SrinU+_zceW+cFlXOVwk36q@z!{{yPTGmiuS2n-qw(6rB-ZdSx}d)=z?-jrK?-& z;?*rxwh=NkYF!3#>oV5JlSR5xk+ilVIoRlwR+2Q|_?VW7`WSJV5bGH$O1d|^rl&-1 ze8S!1-UDebjg^+xq*6;S>8K|wqq?plqyW87)Fi@-cVW`;S&%(qRt??|3s-BBpaDVP0znsPm=4u#bn&mVJMxAT) zS|a;Qr+J-i4T-dFe0eN_x%rtTTxnCpXx|9N;gFfX0ILa@5G?ivQi5N1cX4F;H$Lgm}tEnPMs>@DnPNlDor<H~TG=o{^g}FE=eBGXSc=%5H%GZ>)m&8Y#;BT|}ca8d0YZzn8ACv1dz%_gK=Xg$#;HkBRR-yk6s zuDn2x#gkd68_2(1a%3N`nhZ^!5vxMgb>-;&rK6-qdUJKfX^Q)>RG{7s_$11l_#UiVF*G#LfJXA<7FT3i3?OD%NlTY!Xi-b_1jO)Nw{yy!@3 ztY^9N#L6zb-hd6k?`n`Sy@(}KvnjkGye8GSw6t_;<5iu>bb@}kk}VZYc+VRTf3L^b zx8_!cH9oH+nU2ziZhR?ax_631Ai#7@E~^q_wlGrc7AlYarM}5|X$fqY>G0e_ltlr; zrPnQp<}*XCG$S15V*XY*O&Ru}FGg8ELvh zcFc*gW5V_l`V)TwjSOlaAtGgyUFE|Q4BCj2PGI{`9BWk#mgx@)v7jzCWy;K&>S@z2 zy)-s{Y`MQ5uq$4*U`XqGcAF=@h*k@0$H{bH^GUXu(}|UhEyMd_y#l%P=XQMEQ=f)N%va$LOZ-ysF5limgg6@iDAcNF4 zj$+@97z@Z5DZch-7%Xq5{WuGtltt0=>WbYA&-ttHN}2>NgXaRPt}(1!(*`NwJHjL= zxfpwFkf-o@UEt`ZIHK!klkJ_UPHb~bigXf5`WkC$i^no?+Vq$~#l{-op_FNb+JSCb z)+r>!rjmB)rIypaN(_pyf?(XKv7r`&LznPoP+iwylUG%np(PVd@ob!h&~+@qqoal< z>VA1i`y|MWH;uw*-=2c|FLkw%9$6=*X-tE3M~9T65P1lxj@~PFsA9t+P~ttgGJ*Lu zZ6Q+q&Du$+qkDES)n-UByb&hHz;Im@u3gX#qtaXxqiT97O&uo+g$V@;KPYA%qWv|u zrPjbbQ5aE}MrL z+il|nt#Xj(0qc6XO^$|fXatg@u&Jd^jJW1!#AaZl!WD^iB{)6BM5a-6J$(f4wcqOB z)KN7po6XQI%pU{(Zajk=k}%pznw%N1XxwYyC_cuF==8ERNkfu)8qf~vu@9eOQK!p;RN zdtqAik*x(o4NOIm0~&0!1+8wUP`YjIx?hDHc;&Dg=)Tx~e{o23&4luKs{HBO3m>3} zj@Z!nqyGv<`iR^Nsj9)vMKyF~Ma;laIerE!Ao3 zn*J=6`gWtZTY<%nWUYjnJu(q9M$c~=(!kbA5UvsvYHem0GH+(>hgHZTX~$ z>&jvq9)~ipm@oR;nrXW9!sdjXB5lr@Y^F%%N)-d+vTeZ}nAkq23K=pyo5Tu+m^jMy z@4Ol+$A+&g$+c!q%z$2Mu8q#t*V6($F|b3Vm93`o?zRw`$m1Hix?!(?*FoxlUy#C>eJ!f zZ#4^Y45v5sAj+BC>Ku=`0ZhA2~^upcwH#m{2NfjQaIMyFuQ|UP)>UsMf7r%y0y9y5lS0zG*E2^ z!$6N?M5W`g#Szy7q#zE7cpH0@v05Eq^W>B^Sg*`RDKXV_8`V=s7(298uUv)XizsXw z<#dn9y_`4&_?!E+bQt*57zJTJFz+HIzZ^xVuBG-ec1viL~)t* zMT{2Q=%lRf2hBFN(@jL;jvsI503A1xjsY0O*q|moewb3=a7!#f_uN38^} zRBRbag^MjPX%Y(ywKI~n7@e`P65X{H{VmoN7YCVe*T&+iHstLZvQ0ELy{J)tk;(Kj zi;N^Z&8~Uxl<>X<79edf5tl~s-WZxVo9YFIAC=aU8gvfg_>RulH{sCH8E?h9E(6Oi z(SgVq2@=h;{8W|eqgA_u#js@EPOTQWF(Z>3TWA=`X?U+X!;Hxs^_JK8tc@3jV@M9t zsHH$v6tc4jt)a#{*Cf;SO^1}mH5R;KpRI3C&!K;rwl{XHWKuC)i`CSc5N$47sEihp zX_pRnEZPg0fr%>E3Y*X*<#)5t+`?1@e}cN#)KPpxlF*axyG!Uf;a@#29Xx z0ERcF9J$yWf!`KgbiN@GV@t*U(0@ZI{JW%V%B=@0{S!%(V()YC@;Y>AEw({WpUS7# z=FXkF(fRpmVekARX?oY@_j_)8HLi8rb%R%4^-*v-Ok*;SGj&sG@YhFwnqHUNwwB{~ zjWM0Z!KijM?7LpYP+x+pFils2;f=8mggum%bSlM0bBI8AV~VH8l_Z2ja|`3e%Fp)_ zyQ~S<8bWbrC-bhsSk_eG;VYhQ(uS9ZB>&&g&4r7rHFY%|8Ko<4f_o<%<#n^MbG-+v zY{n2z^H$zTdz^L>DJC4*#c|dkCmcI&L)zXG8GWS3o*58)2UK*Q+gl{n-JFf?%Cy@y z?t2C5^;Qd7(-s#+cDLujt0BF6cr(&&Mm05MQ6n^@I^W}s`c6k>*oC_O)piigN9XG7 z6SSzNABFK+DaU+v`@LSL(%oxxm0Y7!`1H+L$MKnjv}@D1*6h|`uLd`F0l_$cT_Fx& zYpxayszI)uybBY&BO&CF7WON7S0&`rK7PHd29vrBtV)Y@W;c+%2@UO9QyoI>9_!X3 z2-qr2J0i3V5g3VZe}LKwz~=-K%dq|pM?h?`ygave^YCtS7i_Pn3d^Uebp@<8VdN9f zG(liO)8K+TTHtC@=l>ji^*<)%mS}$Br z?lx<=r9Y(4WvaZrcksxot#>HTc-U|>my>QB46woT$-I>>x16uD%AGjfibBvLZrI65 z*b{kmN^c~}HTcmHx*4&7$&CTA_#9C{H;%_Om0XEOv=^eJ`Ha@nCLsD;v4q;Zirr6+>qI>+`Z)T zcAfdne7infK3|t@%?2%OLy6EfHnezyT+qfnKUJt>L@6zyBiQYo9pWM@G0vH?h06E) z*28nh>{NUahX%wEjcd?#fHRx{J^A(~Ch#pE!HHOJmdn z=bK!77B?N`=@IPSY;mtuf=&vX|H)xAWIBf>K+kdnGq-#CR6ecR=@)^uh$}^o*Zj%d zkRdc|tO=Jq(xnff7eGyDO43nky2xBujkM8${$L`EG`BTXR+x#c6e5*#HJsLLl=3VOJnU9ch6y?voy-| zwMw=TX+jdT>pWnFA@Up2>~QOO%^uPZJuPZDRkW^1^Fq2afGRg1R(g--nWofI);S{T zS6pQ%?u^29i*!5_TFu-&iJerq`UH1N(bZDkfll`%XB(G!0dJeiYg=n?EjX*=m&@w! zXc%;O1Dx5_>N5FXx#!ax>>)NL@p2~RT?i$HP`M$+UGM9KV>8!-Pz`CudM~CPYM*7e zczAP^TwdxpiEw*%+aLj69(aiKi#0v(7$gDfK9EAWDUFVLX!qEOW1o;V{p2TY``|l8 zb5x6R%nB32x^qCyVZFZ6dxKbIJbV=Bw#qECkiZoI_!_$D=~`3f?rh+*L7LpDIjLXl zLX>eYi-V~f+LFB3#-z$?h#W7oR}_^?Pg;&+An^=&+JfU5^5Nr;@-g$=Sb3OBu|U3< z+>>$}MVd}6)rX#YbG5oxDAA^<^DtwgclF-Zrn>L(8d7EIZ2LUA{g!tCr})+^duw19 zrrIrB#aGv%pxB3nG0VHzl?D`yGxI!*u9+OKZuWC+jJ##vH_W|7zBOYI4)AF8b_5O> zCXRc%zrN)Go9y|{QfxJ+m*7!7+S}}SdVjDVUGp>J%=K*hy1#F_)H{n`>&EhQJ>Q0= zeEGWJd}5}X;fuVi(oyNw{p{XGW*DK^g5*EZPoB6saZZ4mRjtR6o|1!|+_I0CiY3+R zzUQ!0%bDG3m!6O7`pzLunomrX=LiAcRp~AZOgf%SyYLwy=#9BA_*lsDvTK!}Eu zeoJuS|kF&B&dSh$AOOU%$L|8ljs_OL2 z#eY=_YFx%07w|nwA0{0I#fu3W>j0Qyi~6I*t?C6Z7v@7Jm*&1p1+ylpgXY7;R^3_- zT>kDFc+jyWOSe_kC-go~@7u5LokG{gR`ytu&|s`F z_bbwBK_guoMu$RZA}_BS()GrPG3>pyAsP|G944ZI5?7JmzWYmWUEQr$iLX(86Dw$= zfSY_opL9JV>O?pDmOZZ%EnABVz{N@;Me=WcBFi$j?|YX7q5CVRRmec5Nqere`mX#! z2COqred5lisE=oZSoaO#W!p0va!1kLnfBdkoM7jLF&8-TGEc*67r&Pojpcgs{O35_ z;WfBhs5`wIXedRGXn=K~-R!Nogndg9;z%sbfqV%!sXKZ}7YF3W6kmA>a_x)-b*Z{o z&c#jOfi=8%Q&SpChN)((G5M4nmgnf?8fhlkm(3gIptGw1A-rUl{ z<1Q^!sFx(DS73<)E$WRK-Mv5or(9?WN8TEt-k$)j@SNseI}ww|?2N51 zB*?GlN;sQP;r5Ix<9^c)OKQxhQ8)l|`eHua#y|V<`&CpkpeRA(ucl~lC3di)>F$ag zeH3Q10Z= zeFk11@P=3T4c<#Cx4`(#+NrUc5pBZzayi(^eo_ zoD~DHu)AYT%iH64FA^>l%)q0s?bKFvgrO8Q1cTjO>``~EK#>J)V(CWB^9{baYE4RB ztbQ&IrpT9w{yXH~>g*?>rVTPz<4t=QHnT}A(~5UZ(xTS<}viJ z#R8S*8Cl78em{ckI>sD@{}xDi9&ej*bJ&~LSmbfVWNFUpZslkk=-$YES8{jP1<}CV z&Hi)$g+jBtaGk|s?3Tl=q;z~DA+~#JcCvzn^4KMlJUZ_@(XnIaFUNes{ z5{1QT>`JGd0&M2nP)ec2|*Y{1(e=+vld|9e&}Jhaw9tmm9Cs2@Nn=xu>f~S@baps)^k?syrI$)6ne=RL`9wY5@Mpc zoO``h$*mR93oQDe2Q3)BqODpE;_AC8Mh)w|v(tEu1C1bd5CyDqRJtzD?(EB4&8}(M z-1(Kb#Kf3g+!FGw5B@OP_^l zq6?$NSd|rXHK+xP0HDwL?(eE~S9k3Zl=0)U^p(l2b(?br`bV zE%ZuMdU>ZVPgmd&@diZkIvICcs6LCp497NpO8eY@c*?)gi;5ni#skJ6<>(kG7e%H|DG?vN-Z%jB6dHW%w- z%8AiL`UW?ldOcOxi)ozYZP2p2L21ws5Tw%}Kk6Ds<6JE{05h0`b$7H@+Z)x3d@K3L zuP3le%Zt?gn_qB3Ki8p#%CIc{DLoLT7~L*oc$s|H_~s>+reak+4|ZCMtCB(nWp_~q z!?Ax&#uKI!BhC7K+4jDULb2uxsUEj_y-us{1Ik$m3cj8r&x7(o-d~kJT_5y9ti7A7 z(0XoL_!d0Eoui)W(yePbe-EiUFPbS@xrX_17EznZ$$hF7{MO!_ku=A$a9da}o9cOX z=|NR`qox1-ciq}$!AoOGk+{nsa3;z(*k{~@5V!Su;}-}wH|4U2ZPuq2M!lVSln=Dow(ExrJg6Mhh*%bSz6ID#lk#ij~kpOLG%ll-+~Zc0goM-#+IUCK6Ci z+POslRX(@4Id;?370G5(t?cpVV;!xj#ll%D_Z{@Q7b$x}o5lKVBL9o%Ds1O-9owMeb;DVGap^Rqf*!oY)+1_hTJW;e;(E;TTxPeVI2R12*H`tqs{lv@@yIF2_ z50iP8--*c=lo=U?nFMa=7iSTWtnkxAV1q0hWYl6D*VV)zGQC$@?)wil`?ZIYoj_|! z=|hsJ5Zl49MZEJ+79$|vp}=ySPMcfzz?=x0rJoo%@lrk>L%dsiIKP(;=Vz>Un^>T@ zD3ijju!RLKtV5;L_!`ILvMO=yM3^PxDR0A2sj8AGi&LNJgt%VMw@Cyk=2vc^zU6!H z-iH~UJb`ARqFY-28u7c;}xsrKjwOKQGNV3=^O9QnN4z4WlK zUrDZg`27KR&+s(7M|r9HE;ziPxFM7A&OTY1Ip1RGD;O45J+M&pbJ5|R{*aMSy8Dkm zGofDSuu<%4DXg+QHOk{dhI8ayI-~4^{54$kCd0j(Pmh=zaA%K zX@XBX`gLV~YQrnAHVF)Jg7_R|urGp^oyf~8r))W$6FF{T52??2rcCM}tFm+gUUxaS zvo)LSXiYXIv&*Ym9P5i(&{cy^hITjI%Q4sdueS`a+N}H2?2dnPe;PW&zv`&I5_)ef z&F%rxRS_)=p&!`Qmv0@J+F3OuO} zeO!CJH~SfKrj=^b$6Ge7^mfkBcrUNI*EiEvO~0(Yh#FYn7r0E)Xoz(JuJ)yg<-9+|->sFj!dr@SPK$9zQbTJ(ykWy# zcJpea*OrQVg^<~elxpprGLze_q#FsGL)YT4cS(Q0hwDpJgHG=@W7GN0490?h)jC)G z=(@58UH}No+!!1eLVE?8M{tSCVKdlM>!IXyR9)9=O>L9<#QOAdZGZZ|WTw^2t$olQ z0Sl7SD)g%O#Hc^rF#~JGOTL#wzbCNLEzEvaG?g$g@F%b($VZNb7ZUGX|Bj0g=z@jX z7Mktjo _wAs&m(_?_QyR;n5KefF{9qFShk-`LvMG5JXKf=4WmNMku1_ak3UvE3t z3x>TxIoI1lcPdT9?>>uXp^zFnvk6k@d7fD{*B?b8^0-=?!g>87XR+Ly&ig%CzA0UP z47}-)HYx_nQNA{ZCX>Rp310Ndt8`xGJRe;KhXXX{vv69};#D>fGXLe|Bn!=PI-gFj z(xMs-n=l5B-MQP0!&rE&q7Cu902p9PDG#D+VF{%uP0xJg%jXFcx>sZ{c-NFD&D?lL zN3wmfxiv^ry-F|FrCKvpNx$!foY=GhhTncADzz?Ck?Cxpor&g6hDHa<#G&;Q^!lvE zrHJWs3Auxwve803M7T^(_Ym<_d*U7}e{N&d_4KliG#?Dc!T8oxd!n8U3MY0+`_)NU z-3t<#&NiA^OrIVbKeoikSC9`NZwn!KBVI_ss(b~bs{yD_8f79$^7`kA8D?@8Mtz$~ z0!;z<#H2-|ZO&^-bR`?9C)Q;012+X-#uh$k+EPk=1k5i*d#{ zI_%Y3@0~k5v-e!}s3>$0v2(?@L3y_5814q;a3$_`4qZ72{jJx)iD?u4K5{t}i(7NC z7@y325p1tUfo{8w2!Q~Y;nSUgPMJ1Cs&2`czp+} z8a=qdQQR@o5_o@OzH`gmJp0etVNed#u5em-_nty+suP9Q(3tybbL48Z*97CYc@;%3 zH)wh94u~yoOW|$k**Nx^lgdOHe99O-Oz2aQXOoCk5xMhtjxu9JSiVn%CZJ8`^oOpQ zuZxkeAWh+nL8*c(0=TETf~}_9y=>aR6i{6gZ8vw=S4MG)q^?rj+)*Wl6tBpr8mZN3 zo*Fz$rP!?a^P2Tk{t4j*-{sT!87t1-+}#j=cY zGtj+Q;?yJ!+x$)0uL(13D&C*TE7+HUWnQI$PiseZ9)9TSpsX9Wg0%ovw1w$oL(|IyJy6+ZVaC0YtX1>H0CK|J;bWC#= z+Vvk9Jakr7ZRVmp1t>N7woncf@V3w{o;`_s()kVXS_kO0ohBTTd=nqs7`-#MySF#A zE|qgUquUDvP+j@RFVAsc{D)i&STCd?O?O|mC1QzmI;ET>d!xi z%;V|=|88HhBXSCb=J!0sS{?Ra%~zkCId9G9-Cz^J{{m(=sbGruHi>~@jH?HQ)j#Lr zM_>F`@#_nw;FsgnGf*skd4Gz$ui{%N{_63w1ycl`<@h7SFYk{TzY?U^j~z>?^fwet z5rH=_Fl(^*=|ttj>Bmp?n1?U#z<(A0;2Bc{>EIdS;f$IspMCJ4va9$*BQ89?s2s+cE>j_LV7f2s(&;d~i#EG3MO%D+lSJ(q&^Pc8mqV`Tit z#>n_jiP(-qY>0=-Kf}&7_(FB6_-z==>5rB1i{-;jU&UADU&ZmKF~c3>Wc(fDWW-Ac zN&=-l0RPSSYk^TnE~Yc+Vi|wX#WMa-(DaYl{x^WA$1madB^-a#NqTI@8N@%;bDa_Y zshKkUr)J9ZPum|HU!k`e@eiFPYvRyZvPO;MMO~}7^xTC1l#;4{=WMRYvn5jUP7t+E zvG$$5-i`ly{F3o9e#v+le}yV2$2041yAl7s=`#L((`Ee1Dvrnx)qV=yg)e&ghd(9b zAO4h#KY%*7_A%3c8Z;6S>O=H-bz=iRWqc)P0>mFP{pW$5g8wRhzuRT}ez(i`W_a`W zpAeVwui_8l_=EC{{};q1*;Vm}aQq=0|Deo*YVVS;jxOS;jA>POE*2weR$G03s7FRetANoc_0D{3ZSU z5sLjkol`me5(9TQ{ul$NywXQKPsMjPZ9$QL#&GP^Wd_3xncC!H+OlYS%PtG{OY{~uIsU-JL} literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF/target/bin/Gyrotron02DAN b/EC-GN-JA-PCF/target/bin/Gyrotron02DAN new file mode 100755 index 0000000000000000000000000000000000000000..d3f6ac95b9eb529d87dbe73e942d2f8596a0f44d GIT binary patch literal 259592 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
c+?6u`w-$tn-AqjT1DY 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

CO~vJ zNd4^v^^fWT16}Tj5Z63#AFgR}N%fsE+|Hs(5r4mg^%vYJ`iTrw@9xq&q#1noRRG4D z@fHmSEgVnA;dDIMzR`8a#ekxw1Wivx9bG&04rlV7Fa6Mn0*9Opz3`$_loQh)C9i8E zoDdno4D9mr5QQ7m)OKzzZ~fb?wD29R$lMgAkkR6@-6c7-NgmiIIn(?2-g!(zlM~PS5S}#jy>SH72J;~=^ zSGQ_xuF(&~<4&YIff3?Ia1LThqYf56q+*}|qEBtzj1r@1fnMWQTI3!J#s9WgsPYr~ z^7>vV4pG_n(IU#%IRlcZ-p7T+Zm41A-8K7=X$VvEvhz0v3YpjZbOOsPuQeCT#(hcj zpjQuS-4#A7&;;6UhB8RW`A*LhMQ_t~t>s!bDUMMlCRCq2+>wgG3eVL3tBJ#Zxj(YveI z5SC0iqOK*%P#TD@cvqgwGHfeXtoV*>xF>qiJNvZQWy*q=uk*7VCXzx)>!0SP$$xDW z*OIpuUd8tDIR?A|4Pi({lX>_)`vdb8>a`3Y3Nu|w-Lmkl>`=|u`I6D23ow z@p}4jN%8dq0YI3eZZ3#UN-ryY&199~-$Fk8F7h^ZB#g|1a{3D0mWS0&DffY1NV{5s zjv1X^b_&YKr=VQ9!vw=A@;#zh`Y(u;zmk_pSHWg5Aj=Qg4)ej&@!+V;1v~@_W(}sy zps=H;Q%MUi(zuex@Y!V=2*Ekmbm>s54-=T9Yj5mS!c#FsoWc(s$B6zv6Z73xLO`Q| zl(IwU&IMz2{N$Niyc*cfSn(O-Hg)2s<7C59>ee}om6iax5v zs}h^}VeQzylWiZ{%5@&?75*Uvv8tIwWcAP3EBZt ze!V|s!+P_}4&kE4Ll1pB>D1~#ds4mI?eR+B3NhEl+^cC)|Ff6rUfQC%o=V1(ID&Ji1rc+1qy5W-QL@9`V8H2LbcJ0m8Kb`*QOiENWq}% z-zas=6q*NJEG{NY#Kb|oEa7)~-L~h&teR52iW0cyT^F4-BDL9R&No7#YOD)e&FiSc*CSqns#6ea zrqXE6pQ-hz+Cp&Rx`NWv?x9j7gN`#6NKBT_MXMQYwnbO4413f;*DC78IHJ@`Zz{9d zkeF>+1qDcXKor|xiOlpv#setUqC@i_X{O7LK;o%EEqg8aZu4RVo}SoCsJ!LSXzL7b z1V4Oihv62H@r>FVhYc-@zgOtN-r9FbVpr#c&LDy6g;BcAsqHFuY3q49Vf0)`ppOu{ z*KeHP4dL1@0_OTWP^8CX5vaL18<~2g_Gl+bhNuapt<>>+E`>m;ln0682umUqG4MOm zTn7!i4e8APDCAV0pifVc;F=6iLo|9?dXMk=q=0rupk2(*lIl_Bge?|CyXaI+mYf)N zk8p1&zg`6?UjS>c8hFK1Cc`H&e_4M%-*YhHV=T5_+!V@wX5$UCi=^J|+46cl2DxRp zgt_Ll)`KJ?t|_Z$o_#Hk+#vNv!TlVP(GIdEB`1j=UiF-RTt7^e?bToQT-w< z&A>}%XEf+BIwjC&Ed#rTTaF>sT+0WzFp! zKgPi1MT zkB4mo1|PMtqRozVjKl^L%bdVC67P&+Nw6f%AI3-khCz>Es(41sy>GPx00D^B0j!cBpu@x`w&~v-0ssI2018=JX8sn^ literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF/target/codac-core-6.3-EC-GN-PSH0PCF-ioc-6.3.2.v1.0.0-1.el7.x86_64.rpm b/EC-GN-JA-PCF/target/codac-core-6.3-EC-GN-PSH0PCF-ioc-6.3.2.v1.0.0-1.el7.x86_64.rpm new file mode 100644 index 0000000000000000000000000000000000000000..75717f51db65876e1c957143d0131c4540b494a2 GIT binary patch literal 53972 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 literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF/target/main/beast/EC-beast.xml b/EC-GN-JA-PCF/target/main/beast/EC-beast.xml new file mode 100644 index 0000000..595af96 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/beast/EC-beast.xml @@ -0,0 +1,273 @@ + + + + + + + +Connection or frame of the communication for 4110 configuration and state is invalid +true +0 + +4110 communication failed +

The connection for configuration and state to 4110 was broken or the frame is not correct
+ + +Causes related to the alarm +
Timestamp update error (TIME) +Data block header, footer or length mismatch (FERROR) +Data block version mismatch (FVERS) +Data block alive counter update error (ALIVEC) +Frame lost due (FLOST) +PLC communication broken (CFGSTAT) +Lost a redundant CPU (CPU0-ALIVE, CPU1-ALIVE)
+
+ +Corrective action +
Check whether the PLC is running\n Check whether network is ok\n Contact maintenance service (if needed)
+
+ +4110 State Comm. Alarm OPI +
/opt/codac/opi/boy/resources/alarmpages/healthMonitoring/ITER-SYSM-PLCHLTS_Alarm.opi "CBS1=EC, CBS2=GN, PP=01, NNNN=4110, TTT=PLC, PPPP=52RF, ALARM_PV=EC-GN-SYSM-52RF-01:PLC4110-PLCHLTS, ALARM_PATH=/CODAC_AlarmHandler/EC/EC-GN/EC-GN-SYSM, LEVEL=ITER-EC-GN-SYSM, ALARM_GUIDANCE1_TITLE=PLC communication failed, ALARM_GUIDANCE1_DETAILS=The connection for configuration and state to PLC is broken or the frame is not correct."
+
+ + +Connection or frame of the communication for PLC Event is invalid +true +0 + +PLC Event communication failed +
The connection for event to PLC was broken or the frame is not correct
+
+ +Causes related to the alarm +
Event Frame count update error (FRAMEC) +PLC Event communication broken (EVTSTAT)
+
+ +Corrective action +
Check whether the PLC is running\n Check whether network is ok\n Contact maintenance service (if needed)
+
+ +PLC Event Comm. Alarm OPI +
/opt/codac/opi/boy/resources/alarmpages/healthMonitoring/ITER-SYSM-EVTHLTS_Alarm.opi "CBS1=EC, CBS2=GN, CBS3=SYSM, PP=01, NNNN=4110, TTT=PLC, PPPP=52RF, ALARM_PV=EC-GN-SYSM-52RF-01:PLC4110-EVTHLTS, ALARM_PATH=/CODAC_AlarmHandler/EC/EC-GN/EC-GN-SYSM, LEVEL=ITER-EC-GN-SYSM, ALARM_GUIDANCE1_TITLE=PLC Event communication failed, ALARM_GUIDANCE1_DETAILS=The connection for event to PLC was broken or the frame is not correct."
+
+
+ +Any one of CPU, MEM, Disk, FD, Process of the host is in alarm state +true +0 + +System is an abnormal state +
Check the mentioned alarm load and identify the cause
+
+ +System resources related to the alarm +
1 - one of CPU, Disk, Memory, FD load is high or necessary process has been stopped +2 - two of CPU, Disk, Memory, FD load are high and/or necessary process has been stopped +3 - three of CPU, Disk, Memory, FD load are high and/or necessary process has been stopped
+
+ +Corrective action +
If any load remains high continuously, contact maintenance service. +In addition, check if the necessary processes are running
+
+ +Temporary actions to suppress +
Change the alarm limits or severity for each load in alarm state. + + Ex1) alarm limits +% caput EC-GN-SYSM-52RF-01:PCF4210-CPUUTL.HIGH 90 +% caput EC-GN-SYSM-52RF-01:PCF4210-CPUUTL.HIHI 100 + + Ex2) alarm severity +% caput EC-GN-SYSM-52RF-01:PCF4210-MEMUTL.HSV NO_ALARM +% caput EC-GN-SYSM-52RF-01:PCF4210-MEMUTL.HHSV NO_ALARM
+
+ +System Health Alarm OPI + +
/opt/codac/opi/boy/resources/alarmpages/healthMonitoring/ITER-SYSM-SHLT_Alarm.opi "CBS=EC-GN-SYSM, PPPP=52RF, PP=01, TTT=PCF, NNNN=4210, ALARM_PV=EC-GN-SYSM-52RF-01:PCF4210-SHLT, ALARM_PATH=/CODAC_AlarmHandler/EC/EC-GN/EC-GN-SYSM, LEVEL=ITER-EC-GN-SYSM, ALARM_GUIDANCE1_TITLE=System resource utilization is high, ALARM_GUIDANCE1_DETAILS=Any one of CPU / MEM / Disk / FD / Process of the host is in alarm state. Check the mentioned alarm load and identify the cause. If any load remains high continuously contact maintenance service."
+
+
+ +Any one of CPU, MEM, Disk or FD of the host is in alarm state +true +0 + +System resource utilization is high +
Check the mentioned alarm load and identify the cause
+
+ +System resources related to the alarm +
1 - CPU utilization high (CPUUTL) : CPU utilization is high +2 - Memory utilization high (MEMUTL) : Memory utilization is high +3 - CPU, Mem util high (CPUUTL, MEMUTL) : CPU and Memory utilizations are high +4 - Disk utilization high (DISKUTL) : Disk utilizations are high +5 - CPU, Disk util high (CPUUTL,DISKUTL) : CPU and Disk utilizations are high +6 - Mem, Disk util high (MEMUTL,DISKUTL) : Memory and Disk utilizations are high +7 - CPU, Mem, Disk util high (CPUUTL,MEMUTL,DISKUTL) : CPU/Memory/Disk utilizations are high +8 - FD utilization high (FDUTL) : FD utilization is high +9 - CPU, FD util high (CPUUTL,FDUTL) : CPU and FD are in alarm state +10 - Mem, FD util high (MEMUTL,FDUTL) : Memory and FD are in alarm state +11 - CPU, Mem, FD alarm (CPUUTL,MEMUTL,FDUTL) : CPU/Memory/FD are in alarm state +12 - Disk, FD util high (DISKUTL,FDUTL) : Disk and FD are in alarm state +13 - CPU, Disk, FD alarm (CPUUTL,DISKUTL,FDUTL) : CPU/Disk/FD are in alarm state +14 - Mem, Disk, FD alarm (MEMUTL,DISKUTL,FDUTL) : Memory/Disk/FD are in alarm state +15 - CPU,Mem,Disk,FD alarm (CPUUTL,MEMUTL,DISKUTL,FDUTL) : CPU/Memory/Disk/FD alarm
+
+ +Corrective action +
If any load remains high continuously, contact maintenance service
+
+ +Temporary actions to suppress +
Change the alarm limits or severity for each load in alarm state. + + Ex1) alarm limits +% caput EC-GN-SYSM-52RF-01:PCF4210-CPUUTL.HIGH 90 +% caput EC-GN-SYSM-52RF-01:PCF4210-CPUUTL.HIHI 100 + + Ex2) alarm severity +% caput EC-GN-SYSM-52RF-01:PCF4210-MEMUTL.HSV NO_ALARM +% caput EC-GN-SYSM-52RF-01:PCF4210-MEMUTL.HHSV NO_ALARM
+
+ +System Health Alarm OPI +
/opt/codac/opi/boy/resources/alarmpages/healthMonitoring/ITER-SYSM-SYSHLTS_Alarm.opi "CBS=EC-GN-SYSM, PPPP=52RF, PP=01, TTT=PCF, NNNN=4210, ALARM_PV=EC-GN-SYSM-52RF-01:PCF4210-SYSHLTS, ALARM_PATH=/CODAC_AlarmHandler/EC/EC-GN/EC-GN-SYSM, LEVEL=ITER-EC-GN-SYSM, ALARM_GUIDANCE1_TITLE=System resource utilization is high, ALARM_GUIDANCE1_DETAILS=Any one of CPU / MEM / Disk / FD of the host is in alarm state. Check the mentioned alarm load and identify the cause. If any load remains high continuously contact maintenance service."
+
+
+ +Current state of TCNd and the synchronization state of the device +true +0 + +System time synchronization is not fully operational +
If status is N/A, then check that tcnd is running. +If status is not operational for some time, please contact maintenance service.
+
+ +Documentation TCNd +
firefox file:///opt/codac/doc/pdf/TCNd_User_Manual.pdf
+
+ +TCNd Sync. Alarm OPI +
/opt/codac/opi/boy/resources/alarmpages/healthMonitoring/ITER-SYSM-TSTATUS_Alarm.opi "CBS=EC-GN-SYSM, PPPP=52RF, PP=01, TTT=PCF, NNNN=4210, ALARM_PV=EC-GN-SYSM-52RF-01:PCF4210-TSTATUS, ALARM_PATH=/CODAC_AlarmHandler/EC/EC-GN/EC-GN-SYSM, LEVEL=ITER-EC-GN-SYSM, ALARM_GUIDANCE1_TITLE=System clock synchronization with respect to ITER time, ALARM_GUIDANCE1_DETAILS=The computer system clock is synchronized to ITER time using the TCN daemon (TCNd) component of CODAC Core SYstem. Please see TCNd User Manual (ITER_D_MUYNT6 - /opt/codac/doc/pdf/TCNd_User_Manual.pdf). +The clock synchronization has been detected to have been in an abnormal state. i.e. STATUS different from 'Operational' after two minutes of uptime."
+
+
+ +Any one of CPU, MEM, Disk, FD, Process of the host is in alarm state +true +0 + +System is an abnormal state +
Check the mentioned alarm load and identify the cause
+
+ +System resources related to the alarm +
1 - one of CPU, Disk, Memory, FD load is high or necessary process has been stopped +2 - two of CPU, Disk, Memory, FD load are high and/or necessary process has been stopped +3 - three of CPU, Disk, Memory, FD load are high and/or necessary process has been stopped
+
+ +Corrective action +
If any load remains high continuously, contact maintenance service. +In addition, check if the necessary processes are running
+
+ +Temporary actions to suppress +
Change the alarm limits or severity for each load in alarm state. + + Ex1) alarm limits +% caput EC-GN-SYSM-52RF-01:PSH4410-CPUUTL.HIGH 90 +% caput EC-GN-SYSM-52RF-01:PSH4410-CPUUTL.HIHI 100 + Ex2) alarm severity +% caput EC-GN-SYSM-52RF-01:PSH4410-MEMUTL.HSV NO_ALARM +% caput EC-GN-SYSM-52RF-01:PSH4410-MEMUTL.HHSV NO_ALARM
+
+ +System Health Alarm OPI +
/opt/codac/opi/boy/resources/alarmpages/healthMonitoring/ITER-SYSM-SHLT_Alarm.opi "CBS=EC-GN-SYSM, PPPP=52RF, PP=01, TTT=PSH, NNNN=4410, ALARM_PV=EC-GN-SYSM-52RF-01:PSH4410-SHLT, ALARM_PATH=/CODAC_AlarmHandler/EC/EC-GN/EC-GN-SYSM, LEVEL=ITER-EC-GN-SYSM, ALARM_GUIDANCE1_TITLE=System resource utilization is high, ALARM_GUIDANCE1_DETAILS=Any one of CPU / MEM / Disk / FD / Process of the host is in alarm state. Check the mentioned alarm load and identify the cause. If any load remains high continuously contact maintenance service."
+
+
+ +Any one of CPU, MEM, Disk or FD of the host is in alarm state +true +0 + +System resource utilization is high +
Check the mentioned alarm load and identify the cause
+
+ +System resources related to the alarm +
1 - CPU utilization high (CPUUTL) : CPU utilization is high +2 - Memory utilization high (MEMUTL) : Memory utilization is high +3 - CPU, Mem util high (CPUUTL, MEMUTL) : CPU and Memory utilizations are high +4 - Disk utilization high (DISKUTL) : Disk utilizations are high +5 - CPU, Disk util high (CPUUTL,DISKUTL) : CPU and Disk utilizations are high +6 - Mem, Disk util high (MEMUTL,DISKUTL) : Memory and Disk utilizations are high +7 - CPU, Mem, Disk util high (CPUUTL,MEMUTL,DISKUTL) : CPU/Memory/Disk utilizations are high +8 - FD utilization high (FDUTL) : FD utilization is high +9 - CPU, FD util high (CPUUTL,FDUTL) : CPU and FD are in alarm state +10 - Mem, FD util high (MEMUTL,FDUTL) : Memory and FD are in alarm state +11 - CPU, Mem, FD alarm (CPUUTL,MEMUTL,FDUTL) : CPU/Memory/FD are in alarm state +12 - Disk, FD util high (DISKUTL,FDUTL) : Disk and FD are in alarm state +13 - CPU, Disk, FD alarm (CPUUTL,DISKUTL,FDUTL) : CPU/Disk/FD are in alarm state +14 - Mem, Disk, FD alarm (MEMUTL,DISKUTL,FDUTL) : Memory/Disk/FD are in alarm state +15 - CPU,Mem,Disk,FD alarm (CPUUTL,MEMUTL,DISKUTL,FDUTL) : CPU/Memory/Disk/FD alarm
+
+ +Corrective action +
If any load remains high continuously, contact maintenance service
+
+ +Temporary actions to suppress +
Change the alarm limits or severity for each load in alarm state. + + Ex1) alarm limits +% caput EC-GN-SYSM-52RF-01:PSH4410-CPUUTL.HIGH 90 +% caput EC-GN-SYSM-52RF-01:PSH4410-CPUUTL.HIHI 100 + + Ex2) alarm severity +% caput EC-GN-SYSM-52RF-01:PSH4410-MEMUTL.HSV NO_ALARM +% caput EC-GN-SYSM-52RF-01:PSH4410-MEMUTL.HHSV NO_ALARM
+
+ +System Health Alarm OPI +
/opt/codac/opi/boy/resources/alarmpages/healthMonitoring/ITER-SYSM-SYSHLTS_Alarm.opi "CBS=EC-GN-SYSM, PPPP=52RF, PP=01, TTT=PSH, NNNN=4410, ALARM_PV=EC-GN-SYSM-52RF-01:PSH4410-SYSHLTS, ALARM_PATH=/CODAC_AlarmHandler/EC/EC-GN/EC-GN-SYSM, LEVEL=ITER-EC-GN-SYSM, ALARM_GUIDANCE1_TITLE=System resource utilization is high, ALARM_GUIDANCE1_DETAILS=Any one of CPU / MEM / Disk / FD of the host is in alarm state. Check the mentioned alarm load and identify the cause. If any load remains high continuously contact maintenance service."
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/beauty/EC-beauty.xml b/EC-GN-JA-PCF/target/main/beauty/EC-beauty.xml new file mode 100755 index 0000000..ebe75ef --- /dev/null +++ b/EC-GN-JA-PCF/target/main/beauty/EC-beauty.xml @@ -0,0 +1,242 @@ + + + + +EC-GN-SYSM + +EC-GN-SYSM-52RF-01:PLC4110-CFGWRCNTR +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PLC4110-PLCHLTS +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PLC4110-EVTHLTS +1.0 +0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-BTIME + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-CCSV + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-CORE-DBDLC + 10.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-CORE-DBRECC + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-CORE-STTOD + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-CPUUTL + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-DISKUTL + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-EPICSV + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-HOSTNAME + 1.0 +0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-MEMUTL + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-NRBPS + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-NSBPS + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-SHLT + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-SYSHLTS + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-SYSM-DBDLC + 10.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-SYSM-DBRECC + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-SYSM-STTOD + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-TDEVICE + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-TOFFSET + 1.0 + 0.0 + + + EC-GN-SYSM-52RF-01:PCF4210-TSTATUS + 1.0 + 0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-BTIME +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-CCSV +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-CPUUTL +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-DISKUTL +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-EPICSV +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-HOSTNAME +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-MEMUTL +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-NRBPS +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-NSBPS +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-SHLT +1.0 +0.0 + + +EC-GN-SYSM-52RF-01:PSH4410-SYSHLTS +1.0 +0.0 + + + +EC-GN-HWCF + + +EC-GN-P01-GAF + + +EC-GN-P01-GAF-CCPS + + +EC-GN-P01-GAF-FHPS + + +EC-GN-P01-GAF-GCPS + + +EC-GN-P01-GAF-MCPS + + +EC-GN-P01-GAFP + + +EC-GN-P01-GBF + + +EC-GN-P01-GBF-CCPS + + +EC-GN-P01-GBF-FHPS + + +EC-GN-P01-GBF-GCPS + + +EC-GN-P01-GBF-MCPS + + +EC-GN-P01-GBFP + + +EC-GN-P01-GPF + + +EC-GN-P01-GPS + + +EC-GN-P01-PA1F + + +EC-GN-P01-PA2F + + +EC-GN-P01-PB1F + + +EC-GN-P01-PB2F + + +EC-GN-P01-PMF + + diff --git a/EC-GN-JA-PCF/target/main/boy/SymbolLibrary b/EC-GN-JA-PCF/target/main/boy/SymbolLibrary new file mode 120000 index 0000000..3fee910 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/SymbolLibrary @@ -0,0 +1 @@ +/opt/codac-6.3/opi/boy/SymbolLibrary \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-HWCF_Mimic.opi b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-HWCF_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-HWCF_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GAF-CCPS_Mimic.opi b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GAF-CCPS_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GAF-CCPS_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GAF-FHPS_Mimic.opi b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GAF-FHPS_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GAF-FHPS_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GAF-GCPS_Mimic.opi b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GAF-GCPS_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GAF-GCPS_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GAF-MCPS_Mimic.opi b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GAF-MCPS_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GAF-MCPS_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GAFP_Mimic.opi b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GAFP_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GAFP_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GAF_Mimic.opi b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GAF_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GAF_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GBF-CCPS_Mimic.opi b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GBF-CCPS_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GBF-CCPS_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GBF-FHPS_Mimic.opi b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GBF-FHPS_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GBF-FHPS_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GBF-GCPS_Mimic.opi b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GBF-GCPS_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GBF-GCPS_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GBF-MCPS_Mimic.opi b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GBF-MCPS_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GBF-MCPS_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GBFP_Mimic.opi b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GBFP_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GBFP_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GBF_Mimic.opi b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GBF_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GBF_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GPF_Mimic.opi b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GPF_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GPF_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GPS_Mimic.opi b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GPS_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-GPS_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-PA1F_Mimic.opi b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-PA1F_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-PA1F_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-PA2F_Mimic.opi b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-PA2F_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-PA2F_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-PB1F_Mimic.opi b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-PB1F_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-PB1F_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-PB2F_Mimic.opi b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-PB2F_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-PB2F_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-PMF_Mimic.opi b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-PMF_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01-PMF_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01_Mimic.opi b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN-P01_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN_Mimic.opi b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC-GN_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC_Mimic.opi b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC_Mimic.opi new file mode 100644 index 0000000..2e893db --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/empty/ITER-EC_Mimic.opi @@ -0,0 +1,211 @@ + + + + + false + -1 + -1 + + false + + + + 5.0.0.201512210936 + + + + 1 + 1760 + + true + + MAIN DISPLAY AREA - MIMIC + + + true + true + true + true + true + Display + 3236 + -14a921ec:134b2495e46:-7f53 + 0 + 0 + + + + + + + + + 0 + 1 + true + false + + IO Title + + + + + 1760 + false + + true + + MAIN DISPLAY AREA - MIMIC + + + false + false + false + + + false + + true + true + Grouping Container + 3236 + -28c93393:14b0cb4ebee:-6a50 + 0 + 0 + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Information Layer + + + + false + + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + false + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-432f + 0 + 0 + + + + + + + + + + 0 + 2 + true + false + + IO Title + + + + + 1760 + false + + true + + Static Data Layer + + + false + false + false + + + true + $(name) + true + true + Grouping Container + 3236 + -1e0f3b69:149c8d6d12f:-4384 + 0 + 0 + + + + false + true + true + + + + 0 + false + + + + 0 + 2 + true + + IO Label + + false + + + + 45 + + Show/Hide Tickbox + loc://$(DID)_INFO_SHOW(0) + + + + false + false + false + + + + + + $(name) + true + Check Box + 225 + -17ac9c77:14e0084b99a:2504 + 3000 + 0 + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/navigation/Navigation.xml b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation.xml new file mode 100755 index 0000000..2b1cfbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-HWCF.xml b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-HWCF.xml new file mode 100755 index 0000000..12eb6c5 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-HWCF.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GAF-CCPS.xml b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GAF-CCPS.xml new file mode 100755 index 0000000..f0c1369 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GAF-CCPS.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GAF-FHPS.xml b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GAF-FHPS.xml new file mode 100755 index 0000000..0645fab --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GAF-FHPS.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GAF-GCPS.xml b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GAF-GCPS.xml new file mode 100755 index 0000000..30d6e02 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GAF-GCPS.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GAF-MCPS.xml b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GAF-MCPS.xml new file mode 100755 index 0000000..7868875 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GAF-MCPS.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GAF.xml b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GAF.xml new file mode 100755 index 0000000..07012f8 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GAF.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GAFP.xml b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GAFP.xml new file mode 100755 index 0000000..3c42493 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GAFP.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GBF-CCPS.xml b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GBF-CCPS.xml new file mode 100755 index 0000000..e761be7 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GBF-CCPS.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GBF-FHPS.xml b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GBF-FHPS.xml new file mode 100755 index 0000000..aed4fec --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GBF-FHPS.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GBF-GCPS.xml b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GBF-GCPS.xml new file mode 100755 index 0000000..3799297 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GBF-GCPS.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GBF-MCPS.xml b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GBF-MCPS.xml new file mode 100755 index 0000000..b958fd0 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GBF-MCPS.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GBF.xml b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GBF.xml new file mode 100755 index 0000000..0e1b217 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GBF.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GBFP.xml b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GBFP.xml new file mode 100755 index 0000000..2ce42cd --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GBFP.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GPF.xml b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GPF.xml new file mode 100755 index 0000000..761e26b --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GPF.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GPS.xml b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GPS.xml new file mode 100755 index 0000000..c6da874 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-GPS.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-PA1F.xml b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-PA1F.xml new file mode 100755 index 0000000..13fdc95 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-PA1F.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-PA2F.xml b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-PA2F.xml new file mode 100755 index 0000000..f143ef0 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-PA2F.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-PB1F.xml b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-PB1F.xml new file mode 100755 index 0000000..16a1375 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-PB1F.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-PB2F.xml b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-PB2F.xml new file mode 100755 index 0000000..2c215fe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-PB2F.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-PMF.xml b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-PMF.xml new file mode 100755 index 0000000..5f84ca9 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01-PMF.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01.xml b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01.xml new file mode 100755 index 0000000..1d1e6ee --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN-P01.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN.xml b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN.xml new file mode 100755 index 0000000..c2d11a9 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC-GN.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC.xml b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC.xml new file mode 100755 index 0000000..3be2fb2 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/navigation/Navigation_EC.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/EC-GN-SYSM-CubicleDetails.opi b/EC-GN-JA-PCF/target/main/boy/sysm/EC-GN-SYSM-CubicleDetails.opi new file mode 100755 index 0000000..a3e2747 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/EC-GN-SYSM-CubicleDetails.opi @@ -0,0 +1,415 @@ + + + + Display + + true + EC + GN + SYSM + + 3236 + + + true + 1760 + true + EC-GN-SYSM + 6 + true + true + 0 + + + + + + + + 0 + false + + + + false + -1 + -1 + + + + + true + Grouping Container + + true + + true + 0 + + true + + 2 + groupHeading + + + + true + + false + false + false + + false + + 0 + + + + + + + 0 + + 1243 + 50 + + + + + + true + 1 + true + + 13 + CubicleDetailsLabel + + false + false + false + + true + false + + + + + + + Label + false + Cubicle Details: + + IO Normal + + 40 + 0 + + 2 + + + + 0 + + 55 + true + + 6 + + + + + /opt/codac/opi/epics-sysmon/boy/ITER-SYSM-CUB_Mimic.opi + + true + + 0 + + + + false + + + + 6 + 2 + true + + IO Label + + false + + + + 37 + + Action Button Template + 0 + + + + + false + false + false + + + + More Details + false + $(pv_name) +$(pv_value) + true + Action Button + 279 + 6cb4f02d:15e5c6fbe55:-70fa + 200 + 45 + + + + + true + 1 + true + + 13 + CubicleDetailsLabel + + false + false + false + + true + false + + + + + + + Label + false + $(CUB_LOC) + + IO Normal + + 40 + 0 + + 2 + + + + 0 + + 55 + true + + 600 + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + (ºC) + + + + + + + + + + + + 1 + + + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):CU$(NNNN)-HTH-CY1 + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):CU$(NNNN)-HTH-CY2 + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):CU$(NNNN)-HTH-FAN + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):CU$(NNNN)-HTH-TT + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):CU$(NNNN)-SHLT + + + 1000 + CubicleDetailsTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1000 + 0 + + + Name + 200 + no + + + Value + 200 + no + + + Status + 100 + no + + + Severity + 100 + no + + + EGU + 0 + no + + + false + + 2 + + + + 4 + + 125 + + 6 + + + + + + + + true + Grouping Container + + true + + true + 1243 + + false + false + false + + 0 + + true + + 26 + 2 + groupICProjectInfo + + + + true + false + + 1500 + + + + + + + 0 + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 38 + 0 + I&C Project Name: EC-GN, Version: 4 + + + false + false + false + + + false + I&C Project Name: EC-GN, Version: 4 + + true + 1 + true + Label + 3000 + true + + 40 + 0 + + + + + + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/EC-GN-SYSM-F0-PCFDetails.opi b/EC-GN-JA-PCF/target/main/boy/sysm/EC-GN-SYSM-F0-PCFDetails.opi new file mode 100755 index 0000000..7c58c4c --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/EC-GN-SYSM-F0-PCFDetails.opi @@ -0,0 +1,1471 @@ + + + + Display + + true + F0 + 52RF01-PCF-4210 + EC-GN-SYSM + 52RF + 01 + 4210 + PCF + + false + + 3236 + + + true + 1760 + true + EC-GN-SYSM + 6 + true + true + 0 + + + + + + + + 0 + false + + + + false + -1 + -1 + + + + + true + Grouping Container + + true + + true + 6 + + true + + 2 + groupHeading + + false + false + false + + + + + true + false + + 0 + + + + + + + 0 + + + + + + 1243 + 50 + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + SystemDetailsLabel + + + false + false + false + + + false + System Information: + + true + 1 + true + Label + 40 + true + + 6 + 55 + + + + + + /opt/codac/opi/epics-sysmon/boy/ITER-SYSM-SYS_Mimic.opi + + true + + 0 + + + + false + + + + 6 + 2 + true + + IO Label + + false + + + + 37 + + Action Button Template + 0 + + + + + false + false + false + + + + More Details + false + $(pv_name) +$(pv_value) + true + Action Button + 279 + 6cb4f02d:15e5c6fbe55:-70fa + 200 + 45 + + + true + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + (%) + sysmon + + + + + + + (°C) + picmg-sensors + + + + + + + (°C) + picmg-sensors + + + + + + + (°C) + picmg-sensors + + + + + + + (MB) + sysmon + + + + + + + (MB) + sysmon + + + + + + + (%) + sysmon + + + + + + + + sysmon + + + + + + + (%) + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + (KB) + sysmon + + + + + + + (KB) + sysmon + + + + + + + (%) + sysmon + + + + + + + (KBps) + sysmon + + + + + + + (KBps) + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon-tcnd + + + + + + + + sysmon + + + + + + + (ns) + sysmon-tcnd + + + + + + + (ns) + sysmon-tcnd + + + + + + + (ns) + sysmon-tcnd + + + + + + + (ns) + sysmon-tcnd + + + + + + + + sysmon-tcnd + + + + + + + (ns) + sysmon-tcnd + + + + + + + (s) + sysmon-tcnd + + + + + + + + sysmon-tcnd + + + + + 1 + + + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-BTIME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CAV1 + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CCSV + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPUUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CTEMPAVG + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CTEMPMAX + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CTEMPMIN + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-DISKFREE + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-DISKMAX + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-DISKUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-EPICSV + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-FDUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-HOSTNAME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-IPADDR + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-KERNELV + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-MEMFREE + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-MEMMAX + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-MEMUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-NRBPS + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-NSBPS + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-OSV + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PROCLST + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PROCSTS + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PS + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SHLT + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TDEVICE + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TIME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TMAXOFF + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TMEANOFF + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TMINOFF + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TOFFSET + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TSTATUS + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TSTDOFF + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TUPTIME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TVERSION + + + 600 + SystemDetailsTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1500 + 6 + + + Name + 200 + no + + + Value + 200 + no + + + Status + 100 + no + + + Severity + 75 + no + + + EGU + 0 + no + + + Template Name + 100 + no + + + false + + 2 + + + + 5 + + 125 + + 6 + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + COREIOCDetailsLabel + + + false + false + false + + + false + CORE IOC: + + true + 1 + true + Label + 40 + true + + 1600 + 55 + + + + + + /opt/codac/opi/epics-sysmon/boy/ITER-SYSM-IOC_Mimic.opi + + true + + 0 + + + + false + + + + 6 + 2 + true + + IO Label + + false + + + + 37 + + Action Button Template + 0 + + + + + false + false + false + + + + More Details + false + $(pv_name) +$(pv_value) + true + Action Button + 279 + 6cb4f02d:15e5c6fbe55:-70fa + 1800 + 45 + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-BECTME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-CACLNTC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-CAPVC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-CONTMO + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-CPUUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-DBCLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-DBDLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-DBRECC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-FDUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-HB + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-IOCDIR.VAL$ + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-MEMUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-PID + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-STTOD + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-SVPORT + + + 600 + COREIOCDetailsTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1500 + 6 + + + Name + 200 + no + + + Value + 200 + no + + + Status + 100 + no + + + Severity + 75 + no + + + EGU + 0 + no + + + false + + 2 + + + + 4 + + 125 + + 1600 + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + SYSMIOCDetailsLabel + + + false + false + false + + + false + SYSM IOC: + + true + 1 + true + Label + 40 + true + + 6 + 750 + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + + + + + + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-BECTME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-CACLNTC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-CAPVC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-CONTMO + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-CPUUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-DBCLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-DBDLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-DBRECC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-FDUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-HB + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-IOCDIR.VAL$ + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-MEMUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-PID + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-STTOD + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-SVPORT + + + 600 + SYSMIOCDetailsTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1500 + 6 + + + Name + 200 + no + + + Value + 200 + no + + + Status + 100 + no + + + Severity + 75 + no + + + EGU + 0 + no + + + false + + 2 + + + + 4 + + 790 + + 6 + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + PLCIOCDetailsLabel + + + false + false + false + + + false + Others: + + true + 1 + true + Label + 40 + true + + 1600 + 750 + + + + true + + + + + + + 600 + PLCIOCDetailsTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1500 + 6 + + + Name + 200 + no + + + Value + 200 + no + + + Status + 100 + no + + + Severity + 75 + no + + + EGU + 0 + no + + + false + + 2 + + + + 4 + + 790 + + 1600 + + + + + + + + true + Grouping Container + + true + + true + 1243 + + false + false + false + + 6 + + true + + 48 + 2 + groupICProjectInfo + + + + true + false + + 1500 + + + + + + + 0 + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 38 + 0 + I&C Project Name: EC-GN, Version: 4 + + + false + false + false + + + false + I&C Project Name: EC-GN, Version: 4 + + true + 1 + true + Label + 3000 + true + + 40 + 0 + + + + + + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/EC-GN-SYSM-H0-PSHDetails.opi b/EC-GN-JA-PCF/target/main/boy/sysm/EC-GN-SYSM-H0-PSHDetails.opi new file mode 100755 index 0000000..fb0fc2e --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/EC-GN-SYSM-H0-PSHDetails.opi @@ -0,0 +1,1405 @@ + + + + Display + + true + H0 + 52RF01-PSH-4410 + EC-GN-SYSM + 52RF + 01 + 4410 + PSH + false + + 3236 + + + true + 1760 + true + EC-GN-SYSM + 6 + true + true + 0 + + + + + + + + 0 + + false + + + + false + -1 + -1 + + + + + + + + true + Grouping Container + + true + + true + 0 + + true + + 2 + + false + false + false + + groupHeading + + + + true + false + + 0 + + + + + + + 0 + + + + + + + 1243 + 50 + + + + + + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + SystemDetailsLabel + + + false + false + false + + + false + System Information: + + true + 1 + true + Label + 40 + true + + 6 + 55 + + + + + + + /opt/codac/opi/epics-sysmon/boy/ITER-SYSM-SYS_Mimic.opi + + true + + 0 + + + + false + + + + 6 + 2 + true + + IO Label + + false + + + + 37 + + Action Button Template + 0 + + + + + false + false + false + + + + More Details + false + $(pv_name) +$(pv_value) + true + Action Button + 279 + 6cb4f02d:15e5c6fbe55:-70fa + 200 + 45 + + + + true + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + (%) + sysmon + + + + + + + (MB) + sysmon + + + + + + + (MB) + sysmon + + + + + + + (%) + sysmon + + + + + + + + sysmon + + + + + + + (%) + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + (KB) + sysmon + + + + + + + (KB) + sysmon + + + + + + + (%) + sysmon + + + + + + + (KBps) + sysmon + + + + + + + (KBps) + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + + + + sysmon + + + + + 1 + + + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-BTIME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CAV1 + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CCSV + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPUUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-DISKFREE + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-DISKMAX + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-DISKUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-EPICSV + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-FDUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-HOSTNAME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-IPADDR + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-KERNELV + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-MEMFREE + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-MEMMAX + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-MEMUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-NRBPS + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-NSBPS + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-OSV + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PROCLST + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PROCSTS + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PS + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SHLT + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TIME + + + 600 + SystemDetailsTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1500 + 6 + + + Name + 200 + no + + + Value + 200 + no + + + Status + 100 + no + + + Severity + 75 + no + + + EGU + 0 + no + + + Template Name + 100 + no + + + false + + 2 + + + + 5 + + 125 + + 6 + + + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + COREIOCDetailsLabel + + + false + false + false + + + false + CORE IOC: + + true + 1 + true + Label + 40 + true + + 1600 + 55 + + + + + + + /opt/codac/opi/epics-sysmon/boy/ITER-SYSM-IOC_Mimic.opi + + true + + 0 + + + + false + + + + 6 + 2 + true + + IO Label + + false + + + + 37 + + Action Button Template + 0 + + + + + false + false + false + + + + More Details + false + $(pv_name) +$(pv_value) + true + Action Button + 279 + 6cb4f02d:15e5c6fbe55:-70fa + 1800 + 45 + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-BECTME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-CACLNTC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-CAPVC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-CONTMO + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-CPUUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-DBCLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-DBDLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-DBRECC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-FDUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-HB + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-IOCDIR.VAL$ + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-MEMUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-PID + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-STTOD + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CORE-SVPORT + + + 600 + COREIOCDetailsTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1500 + 6 + + + Name + 200 + no + + + Value + 200 + no + + + Status + 100 + no + + + Severity + 75 + no + + + EGU + 0 + no + + + false + + 2 + + + + 4 + + 125 + + 1600 + + + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + SYSMIOCDetailsLabel + + + false + false + false + + + false + SYSM IOC: + + true + 1 + true + Label + 40 + true + + 6 + 750 + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + (%) + + + + + + + + + + + + + + + + + + + + + + + + + + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-BECTME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-CACLNTC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-CAPVC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-CONTMO + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-CPUUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-DBCLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-DBDLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-DBRECC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-FDUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-HB + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-IOCDIR.VAL$ + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-MEMUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-PID + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-STTOD + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SYSM-SVPORT + + + 600 + SYSMIOCDetailsTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1500 + 6 + + + Name + 200 + no + + + Value + 200 + no + + + Status + 100 + no + + + Severity + 75 + no + + + EGU + 0 + no + + + false + + 2 + + + + 4 + + 790 + + 6 + + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + PLCIOCDetailsLabel + + + false + false + false + + + false + Others: + + true + 1 + true + Label + 40 + true + + 1600 + 750 + + + + + true + + + + + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-BECTME + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-CACLNTC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-CAPVC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-CONTMO + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-CPUUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-DBCLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-DBDLC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-DBRECC + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-FDUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-HB + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-IOCDIR.VAL$ + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-MEMUTL + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-PID + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-STTOD + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-PLC-SVPORT + + + 600 + PLCIOCDetailsTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1500 + 6 + + + Name + 200 + no + + + Value + 200 + no + + + Status + 100 + no + + + Severity + 75 + no + + + EGU + 0 + no + + + false + + 2 + + + + 4 + + 790 + + 1600 + + + + + + + + + + + true + Grouping Container + + true + + true + 1243 + + false + false + false + + 0 + + true + + 48 + 2 + groupICProjectInfo + + + + true + false + + 1500 + + + + + + + 0 + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 38 + 0 + I&C Project Name: EC-GN, Version: 1 + + + false + false + false + + + false + I&C Project Name: EC-GN, Version: 1 + + true + 1 + true + Label + 3000 + true + + 40 + 0 + + + + + + + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/EC-GN-SYSM-P0-PLCDetails.opi b/EC-GN-JA-PCF/target/main/boy/sysm/EC-GN-SYSM-P0-PLCDetails.opi new file mode 100755 index 0000000..4de6bdb --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/EC-GN-SYSM-P0-PLCDetails.opi @@ -0,0 +1,707 @@ + + + + Display + + true + P0 + 52RF01-PLC-4110 + EC-GN-SYSM + 52RF + 01 + 4110 + PLC + EC + GN + SYSM + + 3236 + + + true + 1760 + true + EC-GN-SYSM + 6 + true + true + 0 + + + + + + + + 0 + + false + + + + false + -1 + -1 + + + + + + + true + Grouping Container + + true + + true + 6 + + true + + 2 + + false + false + false + + groupHeading + + + + true + false + + 0 + + + + + + + 0 + + 1243 + 50 + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + Configuration Control: + + + false + false + false + + + false + Configuration Control: + + true + 1 + true + Label + 40 + true + + 6 + 90 + + + + + false + true + + + + 0 + false + + + + 0 + 2 + Are you sure you want to do this? + 0 + true + true + + IO Label + + false + + + + 38 + false + boolButton$(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CFGWRCNTR + + + + Check Configuration + + + + Configuration OK + + 0 + $(FCT_NAME)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CFGWRCNTR + + 0 + + + false + false + false + + + true + 1 + true + true + true + $(pv_name) $(pv_value) + true + Boolean Button + 210 + + 250 + 90 + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + PLC Variable Communication: + + + false + false + false + + + false + PLC Variable Communication: + + true + 1 + true + Label + 40 + true + + 6 + 240 + + + + + + + /opt/codac/opi/epics-sysmon/boy/ITER-SYSM-PLC_Mimic.opi + + true + + 0 + + + + false + + + + 6 + 2 + true + + IO Label + + false + + + + 37 + + Action Button Template + 0 + + + + + false + false + false + + + + More Details + false + $(pv_name) + $(pv_value) + true + Action Button + 279 + 6cb4f02d:15e5c6fbe55:-70fa + 400 + 230 + + + + + true + + + + + + + + + + + 1 + + + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CFGBC + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CFGSTAT + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPU0-ALIVE + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPU0-MASTER + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPU0-RUN + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPU0-VALID + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPU1-ALIVE + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPU1-MASTER + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPU1-RUN + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CPU1-VALID + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-FERROR + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-FLENGTH + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-FLOST + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-FVERS + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-SIM-NOPLC + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-TIME + + + + 300 + GeneralTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 2000 + 6 + + + Name + 250 + no + + + Value + 280 + no + + + Status + 200 + no + + + Severity + 140 + no + + + false + + 2 + + + + 4 + + 290 + + 6 + + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + PLC Command Communication: + + + false + false + false + + + false + PLC Command Communication: + + true + 1 + true + Label + 40 + true + + 6 + 640 + + + + + + + true + + + + + + + + + + + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CMDBC + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-CMDSTAT + + + + 300 + GeneralTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 2000 + 6 + + + Name + 250 + no + + + Value + 280 + no + + + Status + 200 + no + + + Severity + 140 + no + + + false + + 2 + + + + 4 + + 690 + + 6 + + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + PLC Event Communication: + + + false + false + false + + + false + PLC Event Communication: + + true + 1 + true + Label + 40 + true + + 6 + 1040 + + + + + + + true + + + + + + + + + + + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-EFLOST + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-EVTBC + $(CBS1)-$(CBS2)-$(CBS3)-$(PPPP)-$(PP):$(TTT)$(NNNN)-EVTSTAT + + + + 300 + GeneralTable + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 2000 + 6 + + + Name + 250 + no + + + Value + 280 + no + + + Status + 200 + no + + + Severity + 140 + no + + + false + + 2 + + + + 4 + + 1090 + + 6 + + + + + true + Grouping Container + + true + + true + 1243 + + false + false + false + + 6 + + true + + 48 + 2 + groupICProjectInfo + + + + true + false + + 1500 + + + + + + + 0 + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 38 + 0 + I&C Project Name: EC-GN, Version: 1 + + + false + false + false + + + false + I&C Project Name: EC-GN, Version: 1 + + true + 1 + true + Label + 3000 + true + + 40 + 0 + + + + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/EC-GN-SYSM.opi b/EC-GN-JA-PCF/target/main/boy/sysm/EC-GN-SYSM.opi new file mode 100755 index 0000000..3a20916 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/EC-GN-SYSM.opi @@ -0,0 +1,619 @@ + + + + Display + + true + + 3236 + + + true + 1760 + true + EC-GN-SYSM + 6 + true + true + 0 + + + + + + + + 0 + + false + + + + false + -1 + -1 + + + + + + + + true + Grouping Container + + true + + true + 6 + + true + + 2 + + false + false + false + + groupHeading + + + + true + false + + 0 + + + + + + + 0 + + 1243 + 50 + + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + Label Template + + + false + false + false + + + false + Cubicles + + true + 1 + true + Label + 40 + true + + 6 + 54 + + + + + + true + + + + + + + + 1 + + + + + + + + 200 + EC-GN-SYSM + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1400 + 6 + + + Name + 50 + no + + + Physical Name + 120 + + + + Description + 120 + no + + + Cubicle health summary + 100 + no + + + PLC health summary + 100 + no + + + Location + 100 + no + + + Macro PPPP + 0 + no + + + Macro PP + 0 + no + + + Macro NNNN + 0 + no + + + false + + 2 + + + + 7 + + 90 + + 6 + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + Label Template + + + false + false + false + + + false + PLCs + + true + 1 + true + Label + 26 + true + + 6 + 320 + + + + + + true + + + + P0 + 52RF01-PLC-4110 + + + + + + + + + + + + 1 + + + + + EC-GN-SYSM-52RF-01:PLC4110-PLCHLTS +EC-GN-SYSM-52RF-01:PLC4110-EVTHLTS +EC-GN-SYSM-52RF-01:PLC4110-FRAMEC + + + + + 200 + EC-GN-SYSM + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1400 + 6 + + + Name + 50 + no + + + Physical Name + 120 + + + + Description + 120 + no + + + PLC health summary + 100 + no + + + ALIVEC + 100 + no + + + Event health summary + 100 + no + + + FRAMEC + 100 + no + + + false + + 2 + + + + 5 + + 350 + + 6 + + + + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 13 + 0 + Label Template + + + false + false + false + + + false + Control Units + + true + 1 + true + Label + 59 + true + + 6 + 570 + + + + + + true + + + + H0 + 52RF01-PSH-4410 + + + + + + Plant System Host + + + + + F0 + 52RF01-PCF-4210 + + + + + + Fast Controller + + + + + + + 1 + + + + EC-GN-SYSM-52RF-01:PCF4210-SYSHLTS +EC-GN-SYSM-52RF-01:PSH4410-SYSHLTS + + + + + + 300 + EC-GN-SYSM + + false + false + false + + + + + + + + true + Table + true + + IO Scale + + 1400 + 6 + + + Name + 50 + no + + + Physical Name + 120 + + + + Description + 120 + no + + + Controller health summary + 150 + no + + + PSH0CORE IOC health summary + 100 + no + + + Controller IOC health summary + 100 + no + + + PLC IOC health summary + 100 + no + + + Type + 100 + no + + + false + + 2 + + + + 7 + + 600 + + 6 + + + + + true + Grouping Container + + true + + true + 1243 + + false + false + false + + 6 + + true + + 48 + 2 + groupICProjectInfo + + + + true + false + + 1400 + + + + + + + 0 + + + + true + + + + + + + 0 + 2 + false + + IO Label + + + + + 38 + 0 + I&C Project Name: EC-GN, Version: 1 + + + false + false + false + + + false + I&C Project Name: EC-GN, Version: 1 + + true + 1 + true + Label + 3000 + true + + 40 + 0 + + + + + + \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/AlarmShortFormat.js b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/AlarmShortFormat.js new file mode 100644 index 0000000..5141753 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/AlarmShortFormat.js @@ -0,0 +1,20 @@ +/* +Copyright (c) : 2010-2019 ITER Organization, +CS 90 046 +13067 St. Paul-lez-Durance Cedex +France + +This product is part of ITER CODAC software. +For the terms and conditions of redistribution or use of this software +refer to the file ITER-LICENSE.TXT located in the top level directory +of the distribution package. +*/ + + +importPackage(Packages.org.csstudio.opibuilder.scriptUtil); + +var t = new Date(PVUtil.getTimeInMilliseconds(pvs[0])).toTimeString(); +var st = t.split(" "); + +widget.setPropertyValue("on_label", st[0]); +widget.setPropertyValue("off_label", st[0]); diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/CUDetailsTableSelectionMonitor.js b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/CUDetailsTableSelectionMonitor.js new file mode 100644 index 0000000..b4a5c3f --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/CUDetailsTableSelectionMonitor.js @@ -0,0 +1,14 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.DataUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ScriptUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ConsoleUtil); + +var table = widget.getTable(); +var fct_name=display.getPropertyValue("name"); +var selectionChanged = new Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener() { + selectionChanged: function(selection) { + var macroInput = DataUtil.createMacrosInput(true) + ScriptUtil.openOPI(display.getWidget("SystemDetailsTable"), "/opt/codac/opi/epics-sysmon/boy/ITER-SYSM-SYS_Mimic.opi", 1, macroInput); + } +}; +table.addSelectionChangedListener(selectionChanged); diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/ControlUnitsTableSelectionMonitor.js b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/ControlUnitsTableSelectionMonitor.js new file mode 100644 index 0000000..e6c9edb --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/ControlUnitsTableSelectionMonitor.js @@ -0,0 +1,51 @@ + +importClass(Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener); +importPackage(Packages.org.csstudio.opibuilder.scriptUtil); + +var table = widget.getTable(); +var fct_name=widget.getPropertyValue("name"); + +var selectionChanged = new Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener() { + selectionChanged: function(selection) { + var selectedrow= table.getSelection(); + var cuName=selectedrow[0][0]; + var phyName=selectedrow[0][1]; + var plcIocHlts =selectedrow[0][6]; + var cuType=selectedrow[0][7]; +// change $(CU) substitution + macroInput = DataUtil.createMacrosInput(true) + macroInput.put("CU", cuName) + macroInput.put("PHY_NAME", phyName) + macroInput.put("FCT_NAME", fct_name) + macroInput.put("CU_TYPE", cuType) + if (plcIocHlts == "") { + macroInput.put("SHOW_PLC_IOC", "false") + } + else { + macroInput.put("SHOW_PLC_IOC", "true") + } + // open OPI + // see https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-boy/trunk/org.csstudio.opibuilder/src/org/csstudio/opibuilder/scriptUtil/ScriptUtil.java + if (cuType == "POC with CA") { + ScriptUtil.openOPI(widget, fct_name + "-" + cuName + "-POCWithCADetails.opi", 1, macroInput) + } + else if (cuType == "POC without CA") { + ScriptUtil.openOPI(widget, fct_name + "-" + cuName + "-POCWithoutCADetails.opi", 1, macroInput) + } + else if (cuType == "Plant System Host") { + ScriptUtil.openOPI(widget, fct_name + "-" + cuName + "-PSHDetails.opi", 1, macroInput) + } + else if (cuType == "Fast Controller") { + ScriptUtil.openOPI(widget, fct_name + "-" + cuName + "-PCFDetails.opi", 1, macroInput) + } + else if (cuType == "Server") { + ScriptUtil.openOPI(widget, fct_name + "-" + cuName + "-SRVDetails.opi", 1, macroInput) + } + else { + ScriptUtil.openOPI(widget, fct_name+"-CtrlUnitDetails.opi", 1, macroInput) + } + + } +}; + +table.addSelectionChangedListener(selectionChanged); diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/ControlUnitsTableSelectionMonitor.py b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/ControlUnitsTableSelectionMonitor.py new file mode 100644 index 0000000..3a90691 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/ControlUnitsTableSelectionMonitor.py @@ -0,0 +1,38 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import DataUtil +from org.csstudio.opibuilder.scriptUtil import ScriptUtil +from org.csstudio.swt.widgets.natives.SpreadSheetTable import ITableSelectionChangedListener +from java.util import Arrays + +table = widget.getTable() +fct_name=display.getPropertyValue("name") +class SelectionListener(ITableSelectionChangedListener): + def selectionChanged(self, selection): + cuName="" + phyName="" + plcIocHlts ="" + cuType="" + for row in selection: + phyName=row[1] + cuName=row[0] + plcIocHlts=row[6] + cuType=row[7]; +# change $(CU) substitution + macroInput = DataUtil.createMacrosInput(True) + macroInput.put("CU", cuName) + macroInput.put("PHY_NAME", phyName) + macroInput.put("FCT_NAME", fct_name) + macroInput.put("CU_TYPE", cuType) + if plcIocHlts == "": + macroInput.put("SHOW_PLC_IOC", "false") + else: + macroInput.put("SHOW_PLC_IOC", "true") + # open OPI + # see https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-boy/trunk/org.csstudio.opibuilder/src/org/csstudio/opibuilder/scriptUtil/ScriptUtil.java + if cuType == "POC with CA": + ScriptUtil.openOPI(display.getWidget("Table"), fct_name+"-POCWithCADetails.opi", 1, macroInput) + elif cuType == "POC without CA": + ScriptUtil.openOPI(display.getWidget("Table"), fct_name+"-POCWithoutCADetails.opi", 1, macroInput) + else: + ScriptUtil.openOPI(display.getWidget("Table"), fct_name+"-CtrlUnitDetails.opi", 1, macroInput) +table.addSelectionChangedListener(SelectionListener()) diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/CubiclesContentSummaryTableSelectionMonitor.js b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/CubiclesContentSummaryTableSelectionMonitor.js new file mode 100644 index 0000000..4b14a4a --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/CubiclesContentSummaryTableSelectionMonitor.js @@ -0,0 +1,23 @@ +importClass(Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener); +importPackage(Packages.org.csstudio.opibuilder.scriptUtil); + +var table = widget.getTable(); +var fct_name = widget.getPropertyValue("name"); + +var selectionChanged = new Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener() { + selectionChanged: function(selection) { + var selectedrow= table.getSelection(); + var cuIndex=selectedrow[0][0]; + var phyName=selectedrow[0][1]; + + // change $(CU_INDEX) substitution + var macroInput = DataUtil.createMacrosInput(true); + macroInput.put("CUB", cuIndex); + macroInput.put("PHY_NAME", phyName); + macroInput.put("FCT_NAME", fct_name); + // open OPI + // see https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-boy/trunk/org.csstudio.opibuilder/src/org/csstudio/opibuilder/scriptUtil/ScriptUtil.java + ScriptUtil.openOPI(widget, fct_name+"-"+cuIndex+"-CubicleContents.opi", 1, macroInput); + } +}; +table.addSelectionChangedListener(selectionChanged); diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/CubiclesContentSummaryTableSelectionMonitor.py b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/CubiclesContentSummaryTableSelectionMonitor.py new file mode 100644 index 0000000..2bd84d4 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/CubiclesContentSummaryTableSelectionMonitor.py @@ -0,0 +1,24 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import DataUtil +from org.csstudio.opibuilder.scriptUtil import ScriptUtil +from org.csstudio.swt.widgets.natives.SpreadSheetTable import ITableSelectionChangedListener +from java.util import Arrays + +table = widget.getTable() +fct_name=display.getPropertyValue("name") +class SelectionListener(ITableSelectionChangedListener): + def selectionChanged(self, selection): + cuIndex="" + phyName="" + for row in selection: + cuIndex=row[0]; + phyName=row[1] + # change $(CU_INDEX) substitution + macroInput = DataUtil.createMacrosInput(True) + macroInput.put("CUB", cuIndex) + macroInput.put("PHY_NAME", phyName) + macroInput.put("FCT_NAME", fct_name) + # open OPI + # see https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-boy/trunk/org.csstudio.opibuilder/src/org/csstudio/opibuilder/scriptUtil/ScriptUtil.java + ScriptUtil.openOPI(display.getWidget("Table"), fct_name+"-"+cuIndex+"-CubicleContents.opi", 1, macroInput) +table.addSelectionChangedListener(SelectionListener()) \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/CubiclesDetailsTableSelectionMonitor.js b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/CubiclesDetailsTableSelectionMonitor.js new file mode 100644 index 0000000..76c1402 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/CubiclesDetailsTableSelectionMonitor.js @@ -0,0 +1,14 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.DataUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ScriptUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ConsoleUtil); + +var table = widget.getTable(); +var fct_name=display.getPropertyValue("name"); +var selectionChanged = new Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener() { + selectionChanged: function(selection) { + var macroInput = DataUtil.createMacrosInput(true) + ScriptUtil.openOPI(display.getWidget("CubicleDetailsTable"), "/opt/codac/opi/epics-sysmon/boy/ITER-SYSM-CUB_Mimic.opi", 1, macroInput); + } +}; +table.addSelectionChangedListener(selectionChanged); diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/CubiclesTableSelectionMonitor.js b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/CubiclesTableSelectionMonitor.js new file mode 100644 index 0000000..efa63e1 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/CubiclesTableSelectionMonitor.js @@ -0,0 +1,31 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.DataUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ScriptUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ConsoleUtil); + +var table = widget.getTable(); +var fct_name=widget.getPropertyValue("name"); +var selectionChanged = new Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener() { + selectionChanged: function(selection) { + + var selectedrow= table.getSelection(); + var cuIndex=selectedrow[0][0]; + var phyName=selectedrow[0][1]; + var loc=selectedrow[0][5]; + var pppp=selectedrow[0][6]; + var pp=selectedrow[0][7]; + var nnnn=selectedrow[0][8]; + + var macroInput = DataUtil.createMacrosInput(true) + macroInput.put("CUB", cuIndex) + macroInput.put("PHY_NAME", phyName) + macroInput.put("FCT_NAME", fct_name) + macroInput.put("PPPP", pppp) + macroInput.put("PP", pp) + macroInput.put("NNNN", nnnn) + macroInput.put("CUB_LOC", "Location: "+loc) + + ScriptUtil.openOPI(widget, fct_name+"-CubicleDetails.opi", 1, macroInput); + } +}; +table.addSelectionChangedListener(selectionChanged); diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/CubiclesTableSelectionMonitor.py b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/CubiclesTableSelectionMonitor.py new file mode 100644 index 0000000..ff9821d --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/CubiclesTableSelectionMonitor.py @@ -0,0 +1,24 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import DataUtil +from org.csstudio.opibuilder.scriptUtil import ScriptUtil +from org.csstudio.swt.widgets.natives.SpreadSheetTable import ITableSelectionChangedListener +from java.util import Arrays + +table = widget.getTable() +fct_name=display.getPropertyValue("name") +class SelectionListener(ITableSelectionChangedListener): + def selectionChanged(self, selection): + cuIndex="" + phyName="" + for row in selection: + cuIndex=row[0]; + phyName=row[1] + # change $(CU_INDEX) substitution + macroInput = DataUtil.createMacrosInput(True) + macroInput.put("CUB", cuIndex) + macroInput.put("PHY_NAME", phyName) + macroInput.put("FCT_NAME", fct_name) + # open OPI + # see https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-boy/trunk/org.csstudio.opibuilder/src/org/csstudio/opibuilder/scriptUtil/ScriptUtil.java + ScriptUtil.openOPI(display.getWidget("Table"), fct_name+"-CubicleDetails.opi", 1, macroInput) +table.addSelectionChangedListener(SelectionListener()) \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayAlarmsInRow.py b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayAlarmsInRow.py new file mode 100644 index 0000000..2c60bb7 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayAlarmsInRow.py @@ -0,0 +1,14 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import ColorFontUtil + +import datetime + +pv = pvs[0] + +s = PVUtil.getTimeInMilliseconds(pv) +t = datetime.datetime.fromtimestamp(float(s)/1000.) + +format = "%H:%M:%S" + +widget.setPropertyValue("on_label", t.strftime(format)) +widget.setPropertyValue("off_label", t.strftime(format)) diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesINCtrlUnitDetailTableTable.js b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesINCtrlUnitDetailTableTable.js new file mode 100644 index 0000000..884f5e7 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesINCtrlUnitDetailTableTable.js @@ -0,0 +1,57 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ColorFontUtil); + +var table = widget.getTable(); + +//Fill PV Name only once +if (widget.getVar("firstTime") == null) { + widget.setVar("firstTime", true); + // Fill table only with non EGU pv's + for (var i=0;pv=pvs[i];i++) { + // earlier when by default pv.getName() was giving name with 'epics://' prefix. Ripping it off before showing was done below + table.setCellText(i, 0, pv.getName().trim()); + if (!pv.isConnected()) { + table.setCellText(i/2, 1, "Disconnected"); + } + } + // Based on value of macro SHOW_PLC_IOC, enable visibility of PLCIOCDetailsTable + if (widget.getPropertyValue("name") == 'PLCIOCDetailsTable') { + if (display.getMacroValue("SHOW_PLC_IOC") == "true") { + widget.setPropertyValue("visible", "true"); + display.getWidget("PLCIOCDetailsLabel").setPropertyValue("visible", "true"); + } + } +} +//find index of the trigger PV +var i=0; +while (triggerPV != pvs[i]) { + i+=1; +} + +var pvValue = PVUtil.getString(triggerPV).trim(); +var eugValue = table.getCellText(i, 4); +if (eugValue != "") { + pvValue = pvValue+" "+eugValue; +} +table.setCellText(i, 1, pvValue); +table.setCellText(i, 2, PVUtil.getStatus(triggerPV).trim()); +table.setCellText(i, 3, PVUtil.getSeverityString(triggerPV).trim()); + +var s = PVUtil.getSeverity(triggerPV); + +color = ColorFontUtil.WHITE; +if( s == 0) { + color = ColorFontUtil.GREEN; +} +else if( s == 1) { + color = ColorFontUtil.RED; +} +else if( s == 2) { + color = ColorFontUtil.YELLOW; +} +else if( s == 3) { + color = ColorFontUtil.PINK; +} + + +table.setCellBackground(i, 3, color); diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesINCtrlUnitDetailTableTable.py b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesINCtrlUnitDetailTableTable.py new file mode 100644 index 0000000..8a24ff6 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesINCtrlUnitDetailTableTable.py @@ -0,0 +1,49 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import ColorFontUtil +# from org.csstudio.opibuilder.scriptUtil import ConsoleUtil + +table = widget.getTable() + +#Fill PV Name only once +if widget.getVar("firstTime") == None: + widget.setVar("firstTime", True) + i=0 + # Fill table only with non EGU pv's + for pv in pvs: + # earlier when by default pv.getName() was giving name with 'epics://' prefix. Ripping it off before showing was done below + table.setCellText(i, 0, pv.getName().strip()) + if not pv.isConnected(): + table.setCellText(i/2, 1, "Disconnected") + i+=1 + # Based on value of macro SHOW_PLC_IOC, enable visibility of PLCIOCDetailsTable + if widget.getPropertyValue("name") == 'PLCIOCDetailsTable': + if display.getMacroValue("SHOW_PLC_IOC") == "true": + widget.setPropertyValue("visible", "true") + display.getWidget("PLCIOCDetailsLabel").setPropertyValue("visible", "true") + +#find index of the trigger PV +i=0 +while triggerPV != pvs[i]: + i+=1 + +pvValue = PVUtil.getString(triggerPV).strip(); +eugValue = table.getCellText(i, 4); +if eugValue != "": + pvValue = pvValue+" "+eugValue; +table.setCellText(i, 1, pvValue) +table.setCellText(i, 2, PVUtil.getStatus(triggerPV).strip()) +table.setCellText(i, 3, PVUtil.getSeverityString(triggerPV).strip()) + +s = PVUtil.getSeverity(triggerPV) + +color = ColorFontUtil.WHITE +if s == 0: + color = ColorFontUtil.GREEN +elif s == 1: + color = ColorFontUtil.RED +elif s == 2: + color = ColorFontUtil.YELLOW +elif s == 3: + color = ColorFontUtil.PINK + +table.setCellBackground(i, 3, color) \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInCubicleContent.js b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInCubicleContent.js new file mode 100644 index 0000000..6a59a92 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInCubicleContent.js @@ -0,0 +1,92 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ColorFontUtil); +// from org.csstudio.opibuilder.scriptUtil import ConsoleUtil + +var func = display.getPropertyValue("name"); +var type = widget.getPropertyValue("name"); +var widgetType = "ellipse"; +var varName = "XXXXXXX"; + +if (type.indexOf("PSH") != -1) { + varName = "-SYSHLTS"; +} +if (type.indexOf("PCF") != -1) { + varName = "-SYSHLTS"; +} +if (type.indexOf("SRV") != -1) { + varName = "-SYSHLTS"; +} +if (type.indexOf("PLC") != -1) { + varName = "-PLCHLTS"; +} +if (type.indexOf("COM") != -1) { + varName = "-SYSHLTS"; +} +if (type.indexOf("CHS") != -1) { + varName = "-SYSHLTS"; +} +// if ("IOM" in type.indexOf() != -1) { +// varName = "-BS"; +if (type.indexOf("CUB") != -1) { + varName = "-CUBHLTS"; +} +if (type.indexOf("Box") != -1) { + widgetType = "rectangle"; +} + +if (triggerPV.getName().indexOf(varName) != -1) { +// ConsoleUtil.writeInfo("Trigger PV found) { " +triggerPV.getName()); + + var s = PVUtil.getSeverity(triggerPV); + + color = ColorFontUtil.WHITE; + if( s == 0) { + color = ColorFontUtil.GREEN; + } + else if( s == 1) { + color = ColorFontUtil.RED; + } + else if( s == 2) { + color = ColorFontUtil.YELLOW; + } + else if( s == 3) { + color = ColorFontUtil.PINK; + } + + if ("ellipse" == widgetType) { + widget.setPropertyValue("foreground_color", color); + } + + var tooltip = PVUtil.getString(triggerPV); + widget.setPropertyValue("tooltip", tooltip); +} + +if (type.indexOf("IOM") != -1) { + if (triggerPV.getName().indexOf(".SIMM") == -1) { + var s = PVUtil.getSeverity(triggerPV); + var color = ColorFontUtil.WHITE; + if( s == 0) { + color = ColorFontUtil.GREEN; + } + else if( s == 1) { + color = ColorFontUtil.RED; + } + else if( s == 2) { + color = ColorFontUtil.YELLOW; + } + else if( s == 3) { + color = ColorFontUtil.PINK; + } + else if( s == 4) { + color = ColorFontUtil.GREEN; + } + + widget.setPropertyValue("foreground_color", color); + + var tooltip = PVUtil.getString(triggerPV); + widget.setPropertyValue("tooltip", tooltip); + } +} + + + diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInCubicleContent.py b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInCubicleContent.py new file mode 100644 index 0000000..30565c2 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInCubicleContent.py @@ -0,0 +1,71 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import ColorFontUtil +# from org.csstudio.opibuilder.scriptUtil import ConsoleUtil + +func = display.getPropertyValue("name") +type = widget.getPropertyValue("name") +widgetType = "ellipse"; +varName = "XXXXXXX"; + +if "PSH" in type: + varName = "-SYSHLTS"; +if "PCF" in type: + varName = "-SYSHLTS"; +if "SRV" in type: + varName = "-SYSHLTS"; +if "PLC" in type: + varName = "-PLCHLTS"; +if "COM" in type: + varName = "-SYSHLTS"; +if "CHS" in type: + varName = "-SYSHLTS"; +# if "IOM" in type: +# varName = "-BS"; +if "CUB" in type: + varName = "-CUBHLTS"; +if "Box" in type: + widgetType = "rectangle"; + +if varName in triggerPV.getName(): +# ConsoleUtil.writeInfo("Trigger PV found: " +triggerPV.getName()); + + s = PVUtil.getSeverity(triggerPV) + + color = ColorFontUtil.WHITE + if s == 0: + color = ColorFontUtil.GREEN + elif s == 1: + color = ColorFontUtil.RED + elif s == 2: + color = ColorFontUtil.YELLOW + elif s == 3: + color = ColorFontUtil.PINK + elif s == 4: + color = ColorFontUtil.GREEN + + if "ellipse" == widgetType: + widget.setPropertyValue("foreground_color", color) + + tooltip = PVUtil.getString(triggerPV) + widget.setPropertyValue("tooltip", tooltip) + +if "IOM" in type: + if ".SIMM" not in triggerPV.getName(): + + s = PVUtil.getSeverity(triggerPV) + color = ColorFontUtil.WHITE + if s == 0: + color = ColorFontUtil.GREEN + elif s == 1: + color = ColorFontUtil.RED + elif s == 2: + color = ColorFontUtil.YELLOW + elif s == 3: + color = ColorFontUtil.PINK + elif s == 4: + color = ColorFontUtil.GREEN + + widget.setPropertyValue("foreground_color", color) + + tooltip = PVUtil.getString(triggerPV) + widget.setPropertyValue("tooltip", tooltip) \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInCubicleOverview.js b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInCubicleOverview.js new file mode 100644 index 0000000..7136451 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInCubicleOverview.js @@ -0,0 +1,57 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ColorFontUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ConsoleUtil); + +var table = widget.getTable(); +var nbColPVs=2; +// find index of the trigger PV +var i=0; +while (i< pvs.length) { +if(pvs[i].isConnected()==true){ + + +var s = PVUtil.getSeverity(pvs[i]); +}else{ + +var s =3; +} + +var color = ColorFontUtil.WHITE; +if( s == 0) { + color = ColorFontUtil.GREEN; +} +else if( s == 1) { + color = ColorFontUtil.RED; +} +else if( s == 2) { + color = ColorFontUtil.YELLOW; +} +else if( s == 3) { + color = ColorFontUtil.PINK; +} +else if( s == 3) { + color = ColorFontUtil.PINK; +} +else if( s == 4) { + color = ColorFontUtil.GREEN; +} + + +if (pvs[i].getName().indexOf("-CUBHLTS") != -1) { + if(pvs[i].isConnected()==true){ + table.setCellText(i/nbColPVs, 3, PVUtil.getString(pvs[i])); + }else{ + table.setCellText(i/nbColPVs, 3, "disconnected"); + } + table.setCellBackground(i/nbColPVs, 3, color); +} +if (pvs[i].getName().indexOf("-PLCHLTS") != -1) { +if(pvs[i].isConnected()==true){ + table.setCellText(i/nbColPVs, 4, PVUtil.getString(pvs[i])); + }else{ + table.setCellText(i/nbColPVs, 4, "disconnected"); + } + table.setCellBackground(i/nbColPVs, 4, color); +} +i=i+1; +} diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInCubicleOverview.py b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInCubicleOverview.py new file mode 100644 index 0000000..c3eaa05 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInCubicleOverview.py @@ -0,0 +1,31 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import ColorFontUtil + + +table = widget.getTable() +nbColPVs=2 +#find index of the trigger PV +i=0 +while triggerPV != pvs[i]: + i+=1 + +s = PVUtil.getSeverity(triggerPV) + +color = ColorFontUtil.WHITE +if s == 0: + color = ColorFontUtil.GREEN +elif s == 1: + color = ColorFontUtil.RED +elif s == 2: + color = ColorFontUtil.YELLOW +elif s == 3: + color = ColorFontUtil.PINK +elif s == 4: + color = ColorFontUtil.GREEN +# table.setCellBackground(i/nbColPVs, i%nbColPVs + 3, color) +if "-CUBHLTS" in triggerPV.getName(): + table.setCellText(i/nbColPVs, 3, PVUtil.getString(triggerPV)) + table.setCellBackground(i/nbColPVs, 3, color) +if "-PLCHLTS" in triggerPV.getName(): + table.setCellText(i/nbColPVs, 4, PVUtil.getString(triggerPV)) + table.setCellBackground(i/nbColPVs, 4, color) diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInGeneralTable.js b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInGeneralTable.js new file mode 100644 index 0000000..2502e17 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInGeneralTable.js @@ -0,0 +1,55 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ColorFontUtil); + + +var table = widget.getTable(); + +//Fill PV Name only once +if (widget.getVar("firstTime") == null) +{ + widget.setVar("firstTime", true); + + for (var i=0;pv=pvs[i];i++) { + // earlier when by default pv.getName() was giving name with 'epics://' prefix. Ripping it off before showing was done below + table.setCellText(i, 0, pv.getName().trim()) + if (!pv.isConnected()) { + table.setCellText(i, 1, "Disconnected"); + } + } + // Based on value of macro SHOW_PLC_IOC, enable visibility of PLCIOCDetailsTable + if (widget.getPropertyValue("name") == 'PLCIOCDetailsTable') { + if (display.getMacroValue("SHOW_PLC_IOC") == "true") { + widget.setPropertyValue("visible", "true"); + display.getWidget("PLCIOCDetailsLabel").setPropertyValue("visible", "true"); + } + } +} + + +//find index of the trigger PV +var i=0; +while (triggerPV != pvs[i]) { + i+=1; +} + +table.setCellText(i, 1, PVUtil.getString(triggerPV).trim()); +table.setCellText(i, 2, PVUtil.getStatus(triggerPV).trim()); +table.setCellText(i, 3, PVUtil.getSeverityString(triggerPV).trim()); + +var s = PVUtil.getSeverity(triggerPV); + +var color = ColorFontUtil.WHITE +color = ColorFontUtil.WHITE; +if( s == 0) { + color = ColorFontUtil.GREEN; +} +else if( s == 1) { + color = ColorFontUtil.RED; +} +else if( s == 2) { + color = ColorFontUtil.YELLOW; +} +else if( s == 3) { + color = ColorFontUtil.PINK; +} +table.setCellBackground(i, 3, color); diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInGeneralTable.py b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInGeneralTable.py new file mode 100644 index 0000000..a0574c6 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInGeneralTable.py @@ -0,0 +1,45 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import ColorFontUtil + + +table = widget.getTable() + +#Fill PV Name only once +if widget.getVar("firstTime") == None: + widget.setVar("firstTime", True) + i=0 + for pv in pvs: + # earlier when by default pv.getName() was giving name with 'epics://' prefix. Ripping it off before showing was done below + table.setCellText(i, 0, pv.getName().strip()) + if not pv.isConnected(): + table.setCellText(i, 1, "Disconnected") + i+=1 + # Based on value of macro SHOW_PLC_IOC, enable visibility of PLCIOCDetailsTable + if widget.getPropertyValue("name") == 'PLCIOCDetailsTable': + if display.getMacroValue("SHOW_PLC_IOC") == "true": + widget.setPropertyValue("visible", "true") + display.getWidget("PLCIOCDetailsLabel").setPropertyValue("visible", "true") + + +#find index of the trigger PV +i=0 +while triggerPV != pvs[i]: + i+=1 + +table.setCellText(i, 1, PVUtil.getString(triggerPV).strip()) +table.setCellText(i, 2, PVUtil.getStatus(triggerPV).strip()) +table.setCellText(i, 3, PVUtil.getSeverityString(triggerPV).strip()) + +s = PVUtil.getSeverity(triggerPV) + +color = ColorFontUtil.WHITE +if s == 0: + color = ColorFontUtil.GREEN +elif s == 1: + color = ColorFontUtil.RED +elif s == 2: + color = ColorFontUtil.YELLOW +elif s == 3: + color = ColorFontUtil.PINK + +table.setCellBackground(i, 3, color) \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInOverview.js b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInOverview.js new file mode 100644 index 0000000..e3d7232 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInOverview.js @@ -0,0 +1,74 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ColorFontUtil); +importPackage(Packages.org.csstudio.opibuilder.scriptUtil.*); + +var table = widget.getTable(); +var func = display.getPropertyValue("name"); + +var i = 0; +var row = 0; +var col = 3; +// ConsoleUtil.writeInfo("Trigger PV : " + triggerPV.getName()); +while (triggerPV != pvs[i]) { +// ConsoleUtil.writeInfo("pvs[i] : " + pvs[i].getName()); + if (col == 5) { + if (pvs[i+1].getName().indexOf("PLC-IOCHLTS") != -1) { + col = col+1; + } + else { + col = 3 + row = row+1; + } + } + else if (col == 3) { + if ( (pvs[i+1].getName().indexOf("-SYSHLTS") != -1) || (pvs[i+1].getName().indexOf("-HLTS") != -1)) { + col = 3; + row = row+1; + } + else if (pvs[i+1].getName().indexOf("-IOCHLTS") != -1) { + if (pvs[i+1].getName().indexOf("CORE-IOCHLTS") != -1) { + col = 4; + } + else { + col = 5; + } + } + else { + col += 1; + if (col > 5) { + row += 1; + col = 3; + } + } + } + else { + col += 1; + if (col > 6) { + row += 1; + col = 3; + } + } + i += 1; +} + +table.setCellText(row, col, PVUtil.getString(triggerPV)) + +var s = PVUtil.getSeverity(triggerPV) + +color = ColorFontUtil.WHITE +if( s == 0) { + color = ColorFontUtil.GREEN +} +else if( s == 1) { + color = ColorFontUtil.RED +} +else if( s == 2) { + color = ColorFontUtil.YELLOW +} +else if( s == 3) { + color = ColorFontUtil.PINK +} +else if( s == 3) { + color = ColorFontUtil.PINK +} +table.setCellBackground(row, col, color) diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInOverview.py b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInOverview.py new file mode 100644 index 0000000..fde230a --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInOverview.py @@ -0,0 +1,55 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import ColorFontUtil +from org.csstudio.opibuilder.scriptUtil import ConsoleUtil + +table = widget.getTable() +func = display.getPropertyValue("name") + +i = 0 +row = 0 +col = 3 +# ConsoleUtil.writeInfo("Trigger PV : " + triggerPV.getName()); +while triggerPV != pvs[i]: +# ConsoleUtil.writeInfo("pvs[i] : " + pvs[i].getName()); + if col == 5: + if "PLC-IOCHLTS" in pvs[i+1].getName(): + col = col+1 + else: + col = 3 + row = row+1 + elif col == 3: + if "-SYSHLTS" in pvs[i+1].getName() or "-HLTS" in pvs[i+1].getName(): + col =3 + row = row+1 + elif "-IOCHLTS" in pvs[i+1].getName(): + if "CORE-IOCHLTS" in pvs[i+1].getName(): + col = 4 + else: + col = 5 + else: + col += 1 + if col > 5: + row += 1 + col = 3 + else: + col += 1 + if col > 6: + row += 1 + col = 3 + i += 1 + +table.setCellText(row, col, PVUtil.getString(triggerPV)) + +s = PVUtil.getSeverity(triggerPV) + +color = ColorFontUtil.WHITE +if s == 0: + color = ColorFontUtil.GREEN +elif s == 1: + color = ColorFontUtil.RED +elif s == 2: + color = ColorFontUtil.YELLOW +elif s == 3: + color = ColorFontUtil.PINK + +table.setCellBackground(row, col, color) \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInPLCOverview.js b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInPLCOverview.js new file mode 100644 index 0000000..20f083d --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInPLCOverview.js @@ -0,0 +1,34 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ColorFontUtil); +importPackage(Packages.org.csstudio.opibuilder.scriptUtil.*); + +var table = widget.getTable(); +var nbColPVs=4; + +//find index of the trigger PV + +var i=0; +while (triggerPV != pvs[i]) { + i+=1; +} + +table.setCellText(i/nbColPVs, i%nbColPVs +3, PVUtil.getString(triggerPV)); + +var s = PVUtil.getSeverity(triggerPV); + +var color = ColorFontUtil.WHITE; +if( s == 0) { + color = ColorFontUtil.GREEN; +} +else if( s == 1) { + color = ColorFontUtil.RED; +} +else if( s == 2) { + color = ColorFontUtil.YELLOW; +} +else if( s == 3) { + color = ColorFontUtil.PINK; +} + +table.setCellBackground(i/nbColPVs, i%nbColPVs + 3, color); + diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInPLCOverview.py b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInPLCOverview.py new file mode 100644 index 0000000..28e8d36 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInPLCOverview.py @@ -0,0 +1,26 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import ColorFontUtil + + +table = widget.getTable() +nbColPVs=4 +#find index of the trigger PV +i=0 +while triggerPV != pvs[i]: + i+=1 + +table.setCellText(i/nbColPVs, i%nbColPVs +3, PVUtil.getString(triggerPV)) + +s = PVUtil.getSeverity(triggerPV) + +color = ColorFontUtil.WHITE +if s == 0: + color = ColorFontUtil.GREEN +elif s == 1: + color = ColorFontUtil.RED +elif s == 2: + color = ColorFontUtil.YELLOW +elif s == 3: + color = ColorFontUtil.PINK + +table.setCellBackground(i/nbColPVs, i%nbColPVs + 3, color) \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInServerOverview.js b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInServerOverview.js new file mode 100644 index 0000000..a94ca00 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInServerOverview.js @@ -0,0 +1,31 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ColorFontUtil); + + +var table = widget.getTable(); +var nbColPVs=3; +//find index of the trigger PV +var i=0; +while (triggerPV != pvs[i]) { + i+=1; +} + +table.setCellText(i/nbColPVs, i%nbColPVs +3, PVUtil.getString(triggerPV)); + +var s = PVUtil.getSeverity(triggerPV); + +var color = ColorFontUtil.WHITE; +if( s == 0) { + color = ColorFontUtil.GREEN; +} +else if( s == 1) { + color = ColorFontUtil.RED; +} +else if( s == 2) { + color = ColorFontUtil.YELLOW; +} +else if( s == 3) { + color = ColorFontUtil.PINK; +} + +table.setCellBackground(i/nbColPVs, i%nbColPVs + 3, color); diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInServerOverview.py b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInServerOverview.py new file mode 100644 index 0000000..a127b25 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/DisplayPVValuesInServerOverview.py @@ -0,0 +1,27 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import ColorFontUtil + + +table = widget.getTable() +nbColPVs = 3 +#find index of the trigger PV +i = 0 +while triggerPV != pvs[i]: + i += 1 + + +table.setCellText(i / nbColPVs, i % nbColPVs + 3, PVUtil.getString(triggerPV)) + +s = PVUtil.getSeverity(triggerPV) + +color = ColorFontUtil.WHITE +if s == 0: + color = ColorFontUtil.GREEN +elif s == 1: + color = ColorFontUtil.RED +elif s == 2: + color = ColorFontUtil.YELLOW +elif s == 3: + color = ColorFontUtil.PINK + +table.setCellBackground(i / nbColPVs, i % nbColPVs + 3, color) \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/IOCDetailsTableSelectionMonitor.js b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/IOCDetailsTableSelectionMonitor.js new file mode 100644 index 0000000..7e7b51c --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/IOCDetailsTableSelectionMonitor.js @@ -0,0 +1,14 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.DataUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ScriptUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ConsoleUtil); + +var table = widget.getTable(); +var fct_name=display.getPropertyValue("name"); +var selectionChanged = new Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener() { + selectionChanged: function(selection) { + var macroInput = DataUtil.createMacrosInput(true) + ScriptUtil.openOPI(display.getWidget("SystemDetailsTable"), "/opt/codac/opi/epics-sysmon/boy/ITER-SYSM-IOC_Mimic.opi", 1, macroInput); + } +}; +table.addSelectionChangedListener(selectionChanged); diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/PLCDetailsTableSelectionMonitor.js b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/PLCDetailsTableSelectionMonitor.js new file mode 100644 index 0000000..dc1af0c --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/PLCDetailsTableSelectionMonitor.js @@ -0,0 +1,14 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.DataUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ScriptUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ConsoleUtil); + +var table = widget.getTable(); +var fct_name=display.getPropertyValue("name"); +var selectionChanged = new Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener() { + selectionChanged: function(selection) { + var macroInput = DataUtil.createMacrosInput(true) + ScriptUtil.openOPI(display.getWidget("GeneralTable"), "/opt/codac/opi/epics-sysmon/boy/ITER-SYSM-PLC_Mimic.opi", 1, macroInput); + } +}; +table.addSelectionChangedListener(selectionChanged); diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/PLCsTableSelectionMonitor.js b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/PLCsTableSelectionMonitor.js new file mode 100644 index 0000000..5598c54 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/PLCsTableSelectionMonitor.js @@ -0,0 +1,29 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.DataUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ScriptUtil); + +var table = widget.getTable(); +var fct_name=widget.getPropertyValue("name"); + +var selectionListener = new Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener() { + selectionChanged: function(selection) { + var selectedrow= table.getSelection(); + var cuName=selectedrow[0][0]; + var phyName=selectedrow[0][1]; + + var macroInput = DataUtil.createMacrosInput(true); + macroInput.put("CU", cuName); + macroInput.put("PHY_NAME", phyName); + macroInput.put("FCT_NAME", fct_name); + // open OPI + // see https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-boy/trunk/org.csstudio.opibuilder/src/org/csstudio/opibuilder/scriptUtil/ScriptUtil.java + if (cuName.indexOf("P") == 0) { + ScriptUtil.openOPI(widget, fct_name + "-" + cuName + "-PLCDetails.opi", 1, macroInput); + } + else { + ScriptUtil.openOPI(widget, fct_name+"-CubiclePLCDetails.opi", 0, macroInput); + } + } +}; +table.addSelectionChangedListener(selectionListener); + diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/PLCsTableSelectionMonitor.py b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/PLCsTableSelectionMonitor.py new file mode 100644 index 0000000..0f8c3a7 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/PLCsTableSelectionMonitor.py @@ -0,0 +1,27 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import DataUtil +from org.csstudio.opibuilder.scriptUtil import ScriptUtil +from org.csstudio.swt.widgets.natives.SpreadSheetTable import ITableSelectionChangedListener +from java.util import Arrays + +table = widget.getTable() +fct_name=display.getPropertyValue("name") +class SelectionListener(ITableSelectionChangedListener): + def selectionChanged(self, selection): + cuName="" + phyName="" + for row in selection: + phyName=row[1] + cuName=row[0]; + # change $(CU) substitution + macroInput = DataUtil.createMacrosInput(True) + macroInput.put("CU", cuName) + macroInput.put("PHY_NAME", phyName) + macroInput.put("FCT_NAME", fct_name) + # open OPI + # see https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-boy/trunk/org.csstudio.opibuilder/src/org/csstudio/opibuilder/scriptUtil/ScriptUtil.java + if cuName.startswith('P'): + ScriptUtil.openOPI(display.getWidget("Table"), fct_name+"-PLCDetails.opi", 1, macroInput) + else: + ScriptUtil.openOPI(display.getWidget("Table"), fct_name+"-CubiclePLCDetails.opi", 0, macroInput) +table.addSelectionChangedListener(SelectionListener()) \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/ServersTableSelectionMonitor.js b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/ServersTableSelectionMonitor.js new file mode 100644 index 0000000..c36ff86 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/ServersTableSelectionMonitor.js @@ -0,0 +1,26 @@ +importClass(Packages.org.csstudio.opibuilder.scriptUtil.DataUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.PVUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ScriptUtil); +importClass(Packages.org.csstudio.opibuilder.scriptUtil.ConsoleUtil); + +var table = widget.getTable(); +var fct_name=widget.getPropertyValue("name"); +var selectionChanged = new Packages.org.csstudio.swt.widgets.natives.SpreadSheetTable.ITableSelectionChangedListener() { + selectionChanged: function(selection) { + + var selectedrow= table.getSelection(); + var cuName=selectedrow[0][0]; + var phyName=selectedrow[0][1]; + + // change $(CU) substitution + var macroInput = DataUtil.createMacrosInput(true); + macroInput.put("CU", cuName); + macroInput.put("PHY_NAME", phyName) + macroInput.put("FCT_NAME", fct_name); + macroInput.put("SHOW_PLC_IOC", "false"); + // open OPI + // see https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-boy/trunk/org.csstudio.opibuilder/src/org/csstudio/opibuilder/scriptUtil/ScriptUtil.java + ScriptUtil.openOPI(widget, fct_name+"-"+cuName+"-SRVDetails.opi", 1, macroInput); + } +}; +table.addSelectionChangedListener(selectionChanged); diff --git a/EC-GN-JA-PCF/target/main/boy/sysm/scripts/ServersTableSelectionMonitor.py b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/ServersTableSelectionMonitor.py new file mode 100644 index 0000000..bf77d44 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/sysm/scripts/ServersTableSelectionMonitor.py @@ -0,0 +1,26 @@ +from org.csstudio.opibuilder.scriptUtil import PVUtil +from org.csstudio.opibuilder.scriptUtil import DataUtil +from org.csstudio.opibuilder.scriptUtil import ScriptUtil +from org.csstudio.swt.widgets.natives.SpreadSheetTable import ITableSelectionChangedListener +from java.util import Arrays + +table = widget.getTable() +fct_name=display.getPropertyValue("name") +class SelectionListener(ITableSelectionChangedListener): + def selectionChanged(self, selection): + cuName="" + phyName="" + for row in selection: + phyName=row[1] + cuName=row[0] + + # change $(CU) substitution + macroInput = DataUtil.createMacrosInput(True) + macroInput.put("CU", cuName) + macroInput.put("PHY_NAME", phyName) + macroInput.put("FCT_NAME", fct_name) + macroInput.put("SHOW_PLC_IOC", "false") + # open OPI + # see https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-boy/trunk/org.csstudio.opibuilder/src/org/csstudio/opibuilder/scriptUtil/ScriptUtil.java + ScriptUtil.openOPI(display.getWidget("Table"), fct_name+"-CtrlUnitDetails.opi", 1, macroInput) +table.addSelectionChangedListener(SelectionListener()) diff --git a/EC-GN-JA-PCF/target/main/boy/templates b/EC-GN-JA-PCF/target/main/boy/templates new file mode 120000 index 0000000..14f8e4d --- /dev/null +++ b/EC-GN-JA-PCF/target/main/boy/templates @@ -0,0 +1 @@ +/opt/codac-6.3/opi/boy/resources/templates \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/JAEPICSCAInput.cpp b/EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/JAEPICSCAInput.cpp new file mode 100644 index 0000000..ac3464d --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/JAEPICSCAInput.cpp @@ -0,0 +1,366 @@ +/** + * @file JAEPICSCAInput.cpp + * @brief Source file for class JAEPICSCAInput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAEPICSCAInput (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAEPICSCAInput.h" + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "MemoryMapInputBroker.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +namespace MARTe { +/** + * @brief Callback function for the ca_create_subscription. Single point of access which + * delegates the events to the corresponding JAEPICSPV instance. + */ +static FastPollingMutexSem eventCallbackFastMux; +/*lint -e{1746} function must match required prototype and thus cannot be changed to constant reference.*/ +void JAEPICSCAInputEventCallback(struct event_handler_args const args) { + (void) eventCallbackFastMux.FastLock(); + PVWrapper *pv = static_cast(args.usr); + if (pv != NULL_PTR(PVWrapper *)) { + (void) MemoryOperationsHelper::Copy(pv->memory, args.dbr, pv->memorySize); + } + eventCallbackFastMux.FastUnLock(); +} +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +JAEPICSCAInput::JAEPICSCAInput() : + DataSourceI(), EmbeddedServiceMethodBinderI(), executor(*this) { + pvs = NULL_PTR(PVWrapper *); + stackSize = THREADS_DEFAULT_STACKSIZE * 4u; + cpuMask = 0xffu; + eventCallbackFastMux.Create(); +} + +/*lint -e{1551} must stop the SingleThreadService in the destructor.*/ +JAEPICSCAInput::~JAEPICSCAInput() { + if (!executor.Stop()) { + if (!executor.Stop()) { + REPORT_ERROR(ErrorManagement::FatalError, "Could not stop SingleThreadService."); + } + } + (void) eventCallbackFastMux.FastLock(); + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + if (pvs[n].memory != NULL_PTR(void *)) { + GlobalObjectsDatabase::Instance()->GetStandardHeap()->Free(pvs[n].memory); + } + } + delete[] pvs; + } + eventCallbackFastMux.FastUnLock(); +} + +bool JAEPICSCAInput::Initialise(StructuredDataI & data) { + bool ok = DataSourceI::Initialise(data); + if (ok) { + if (!data.Read("CPUs", cpuMask)) { + REPORT_ERROR(ErrorManagement::Information, "No CPUs defined. Using default = %d", cpuMask); + } + if (!data.Read("StackSize", stackSize)) { + REPORT_ERROR(ErrorManagement::Information, "No StackSize defined. Using default = %d", stackSize); + } + executor.SetStackSize(stackSize); + executor.SetCPUMask(cpuMask); + } + if (ok) { + ok = data.MoveRelative("Signals"); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Could not move to the Signals section"); + } + if (ok) { + ok = data.Copy(originalSignalInformation); + } + if (ok) { + ok = originalSignalInformation.MoveToRoot(); + } + //Do not allow to add signals in run-time + if (ok) { + ok = signalsDatabase.MoveRelative("Signals"); + } + if (ok) { + ok = signalsDatabase.Write("Locked", 1u); + } + if (ok) { + ok = signalsDatabase.MoveToAncestor(1u); + } + } + if (ok) { + ok = data.MoveToAncestor(1u); + } + return ok; +} + +bool JAEPICSCAInput::SetConfiguredDatabase(StructuredDataI & data) { + bool ok = DataSourceI::SetConfiguredDatabase(data); + //Check the signal index of the timing signal. + uint32 nOfSignals = GetNumberOfSignals(); + if (ok) { + ok = (nOfSignals > 0u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one signal shall be defined"); + } + } + if (ok) { + //Do not allow samples + uint32 functionNumberOfSignals = 0u; + uint32 n; + if (GetFunctionNumberOfSignals(InputSignals, 0u, functionNumberOfSignals)) { + for (n = 0u; (n < functionNumberOfSignals) && (ok); n++) { + uint32 nSamples; + ok = GetFunctionSignalSamples(InputSignals, 0u, n, nSamples); + if (ok) { + ok = (nSamples == 1u); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The number of samples shall be exactly 1"); + } + } + } + } + if (ok) { + pvs = new PVWrapper[nOfSignals]; + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + pvs[n].memory = NULL_PTR(void *); + } + for (n = 0u; (n < nOfSignals) && (ok); n++) { + //Note that the RealTimeApplicationConfigurationBuilder is allowed to change the order of the signals w.r.t. to the originalSignalInformation + StreamString orderedSignalName; + ok = GetSignalName(n, orderedSignalName); + if (ok) { + //Have to mix and match between the original setting of the DataSource signal + //and the ones which are later added by the RealTimeApplicationConfigurationBuilder + ok = originalSignalInformation.MoveRelative(orderedSignalName.Buffer()); + } + StreamString pvName; + if (ok) { + ok = originalSignalInformation.Read("PVName", pvName); + if (!ok) { + uint32 nn = n; + REPORT_ERROR(ErrorManagement::ParametersError, "No PVName specified for signal at index %d", nn); + } + } + TypeDescriptor td = GetSignalType(n); + if (ok) { + (void) StringHelper::CopyN(&pvs[n].pvName[0], pvName.Buffer(), PV_NAME_MAX_SIZE); + if (td == CharString) { + pvs[n].pvType = DBR_STRING; + } + else if (td == Character8Bit) { + pvs[n].pvType = DBR_STRING; + } + else if (td == SignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == UnsignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == SignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == UnsignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == SignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == UnsignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == Float32Bit) { + pvs[n].pvType = DBR_FLOAT; + } + else if (td == Float64Bit) { + pvs[n].pvType = DBR_DOUBLE; + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Type %s is not supported", TypeDescriptor::GetTypeNameFromTypeDescriptor(td)); + ok = false; + } + } + uint32 numberOfElements = 1u; + if (ok) { + ok = GetSignalNumberOfElements(n, numberOfElements); + } + if (ok) { + if (pvs[n].pvType == DBR_STRING) { + ok = (numberOfElements == 40u); + } + if (!ok) { + //Could support arrays of strings with multiples of char8[40] + REPORT_ERROR(ErrorManagement::ParametersError, "Strings shall be defined with 40 elements char8[40]. Arrays of strings are not currently supported"); + } + } + if (ok) { + pvs[n].numberOfElements = numberOfElements; + } + if (ok) { + pvs[n].memorySize = td.numberOfBits; + pvs[n].memorySize /= 8u; + pvs[n].memorySize *= numberOfElements; + pvs[n].memory = GlobalObjectsDatabase::Instance()->GetStandardHeap()->Malloc(pvs[n].memorySize); + ok = originalSignalInformation.MoveToAncestor(1u); + } + } + } + + if (ok) { + ok = (executor.Start() == ErrorManagement::NoError); + } + return ok; +} + +bool JAEPICSCAInput::AllocateMemory() { + return true; +} + +uint32 JAEPICSCAInput::GetNumberOfMemoryBuffers() { + return 1u; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The signalAddress is independent of the bufferIdx.*/ +bool JAEPICSCAInput::GetSignalMemoryBuffer(const uint32 signalIdx, const uint32 bufferIdx, void*& signalAddress) { + bool ok = (pvs != NULL_PTR(PVWrapper *)); + if (ok) { + ok = (signalIdx < GetNumberOfSignals()); + } + if (ok) { + //lint -e{613} pvs cannot as otherwise ok would be false + signalAddress = pvs[signalIdx].memory; + } + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The brokerName only depends on the direction */ +const char8* JAEPICSCAInput::GetBrokerName(StructuredDataI& data, const SignalDirection direction) { + const char8* brokerName = ""; + if (direction == InputSignals) { + brokerName = "MemoryMapInputBroker"; + } + return brokerName; +} + +bool JAEPICSCAInput::GetInputBrokers(ReferenceContainer& inputBrokers, const char8* const functionName, void* const gamMemPtr) { + ReferenceT broker("MemoryMapInputBroker"); + bool ok = broker->Init(InputSignals, *this, functionName, gamMemPtr); + if (ok) { + ok = inputBrokers.Insert(broker); + } + + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: OutputBrokers are not supported. Function returns false irrespectively of the parameters.*/ +bool JAEPICSCAInput::GetOutputBrokers(ReferenceContainer& outputBrokers, const char8* const functionName, void* const gamMemPtr) { + return false; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: NOOP at StateChange, independently of the function parameters.*/ +bool JAEPICSCAInput::PrepareNextState(const char8* const currentStateName, const char8* const nextStateName) { + return true; +} + +ErrorManagement::ErrorType JAEPICSCAInput::Execute(ExecutionInfo& info) { + ErrorManagement::ErrorType err = ErrorManagement::NoError; + if (info.GetStage() == ExecutionInfo::StartupStage) { + (void) eventCallbackFastMux.FastLock(); + /*lint -e{9130} -e{835} -e{845} -e{747} Several false positives. lint is getting confused here for some reason.*/ + if (ca_context_create(ca_enable_preemptive_callback) != ECA_NORMAL) { + err = ErrorManagement::FatalError; + REPORT_ERROR(err, "ca_enable_preemptive_callback failed"); + } + + uint32 n; + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + /*lint -e{9130} -e{835} -e{845} -e{747} Several false positives. lint is getting confused here for some reason.*/ + if (ca_create_channel(&pvs[n].pvName[0], NULL_PTR(caCh *), NULL_PTR(void *), 20u, &pvs[n].pvChid) != ECA_NORMAL) { + err = ErrorManagement::FatalError; + REPORT_ERROR(err, "ca_create_channel failed for PV with name %s", pvs[n].pvName); + } + if (err.ErrorsCleared()) { + /*lint -e{9130} -e{835} -e{845} -e{747} Several false positives. lint is getting confused here for some reason.*/ + if (ca_create_subscription(pvs[n].pvType, pvs[n].numberOfElements, pvs[n].pvChid, DBE_VALUE, &JAEPICSCAInputEventCallback, &pvs[n], + &pvs[n].pvEvid) != ECA_NORMAL) { + err = ErrorManagement::FatalError; + REPORT_ERROR(err, "ca_create_subscription failed for PV %s", pvs[n].pvName); + } + } + } + } + eventCallbackFastMux.FastUnLock(); + } + else if (info.GetStage() != ExecutionInfo::BadTerminationStage) { + Sleep::Sec(1.0F); + } + else { + (void) eventCallbackFastMux.FastLock(); + uint32 n; + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + (void) ca_clear_subscription(pvs[n].pvEvid); + (void) ca_clear_event(pvs[n].pvEvid); + (void) ca_clear_channel(pvs[n].pvChid); + } + } + ca_detach_context(); + ca_context_destroy(); + eventCallbackFastMux.FastUnLock(); + } + + return err; +} + +uint32 JAEPICSCAInput::GetStackSize() const { + return stackSize; +} + +uint32 JAEPICSCAInput::GetCPUMask() const { + return cpuMask; +} + +bool JAEPICSCAInput::Synchronise() { + return false; +} + +CLASS_REGISTER(JAEPICSCAInput, "1.0") + +} + diff --git a/EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/JAEPICSCAInput.h b/EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/JAEPICSCAInput.h new file mode 100644 index 0000000..3a5071d --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/JAEPICSCAInput.h @@ -0,0 +1,260 @@ +/** + * @file EPICSCAInput.h + * @brief Header file for class EPICSCAInput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class EPICSCAInput + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef JAEPICSCAINPUT_H_ +#define JAEPICSCAINPUT_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" +#include "EmbeddedServiceMethodBinderI.h" +#include "EventSem.h" +#include "SingleThreadService.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +/** + * Maximum size that a PV name may have + */ +/*lint -esym(551, MARTe::PV_NAME_MAX_SIZE) the symbol is used to define the size of PVWrapper below*/ +const uint32 PV_NAME_MAX_SIZE = 64u; + +/** + * Wraps a PV + */ +struct PVWrapper { + /** + * The channel identifier + */ + chid pvChid; + /** + * The event identifier + */ + evid pvEvid; + /** + * The PV type + */ + chtype pvType; + /** + * The memory of the signal associated to this channel + */ + void *memory; + void *previousValue; + /** + * The number of elements > 0 + */ + uint32 numberOfElements; + /** + * The memory size + */ + uint32 memorySize; + /** + * The PV name + */ + char8 pvName[PV_NAME_MAX_SIZE]; +}; + +/** + * @brief A DataSource which allows to retrieved data from any number of PVs using the EPICS channel access client protocol. + * Data is asynchronously retrieved using ca_create_subscriptions in the context of a different thread (w.r.t. to the real-time thread). + * + * The configuration syntax is (names are only given as an example): + * + *
+ * +EPICSCAInput_1 = {
+ *     Class = JAEPICSCA::JAEPICSCAInput
+ *     StackSize = 1048576 //Optional the EmbeddedThread stack size. Default value is THREADS_DEFAULT_STACKSIZE * 4u
+ *     CPUs = 0xff //Optional the affinity of the EmbeddedThread (where the EPICS context is attached).
+ *     Signals = {
+ *          PV1 = { //At least one shall be defined
+ *             PVName = My::PV1 //Compulsory. Name of the PV.
+ *             Type = uint32 //Compulsory. Supported types are char8[40], string[40], uint8, int8, uint16, int16, int32, uint32, uint64, int64, float32 and float64
+ *             NumberOfElements = 1 //Arrays also supported
+ *          }
+ *          ...
+ *     }
+ * }
+ *
+ * 
+ */ +class JAEPICSCAInput: public DataSourceI, public EmbeddedServiceMethodBinderI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Default constructor. NOOP. + */ + JAEPICSCAInput(); + + /** + * @brief Destructor. + * @details TODO. + */ + virtual ~JAEPICSCAInput(); + + /** + * @brief See DataSourceI::AllocateMemory. NOOP. + * @return true. + */ + virtual bool AllocateMemory(); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @return 1. + */ + virtual uint32 GetNumberOfMemoryBuffers(); + + /** + * @brief See DataSourceI::GetSignalMemoryBuffer. + * @pre + * SetConfiguredDatabase + */ + virtual bool GetSignalMemoryBuffer(const uint32 signalIdx, + const uint32 bufferIdx, + void *&signalAddress); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @details Only InputSignals are supported. + * @return MemoryMapInputBroker. + */ + virtual const char8 *GetBrokerName(StructuredDataI &data, + const SignalDirection direction); + + /** + * @brief See DataSourceI::GetInputBrokers. + * @details adds a memory MemoryMapInputBroker instance to the inputBrokers + * @return true. + */ + virtual bool GetInputBrokers(ReferenceContainer &inputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::GetOutputBrokers. + * @return false. + */ + virtual bool GetOutputBrokers(ReferenceContainer &outputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::PrepareNextState. NOOP. + * @return true. + */ + virtual bool PrepareNextState(const char8 * const currentStateName, + const char8 * const nextStateName); + + /** + * @brief Loads and verifies the configuration parameters detailed in the class description. + * @return true if all the mandatory parameters are correctly specified and if the specified optional parameters have valid values. + */ + virtual bool Initialise(StructuredDataI & data); + + /** + * @brief Final verification of all the parameters. Setup of the memory required to hold all the signals. + * @details This method verifies that all the parameters requested by the GAMs interacting with this DataSource + * are valid and consistent with the parameters set during the initialisation phase. + * In particular the following conditions shall be met: + * - All the signals have the PVName defined + * - All the signals have one of the following types: uint32, int32, float32 or float64. + * @return true if all the parameters are valid and the conditions above are met. + */ + virtual bool SetConfiguredDatabase(StructuredDataI & data); + + /** + * @brief Gets the affinity of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + * @return the the affinity of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + */ + uint32 GetCPUMask() const; + + /** + * @brief Gets the stack size of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + * @return the stack size of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + */ + uint32 GetStackSize() const; + + /** + * @brief Provides the context to execute all the EPICS relevant calls. + * @details Executes in the context of a spawned thread the following EPICS calls: + * ca_context_create, ca_create_channel, ca_create_subscription, ca_clear_subscription, + * ca_clear_event, ca_clear_channel, ca_detach_context and ca_context_destroy + * @return ErrorManagement::NoError if all the EPICS calls return without any error. + */ + virtual ErrorManagement::ErrorType Execute(ExecutionInfo & info); + + /** + * @brief See DataSourceI::Synchronise. + * @return false. + */ + virtual bool Synchronise(); + + /** + * @brief Registered as the ca_create_subscription callback function. + * It calls updates the memory of the corresponding PV variable. + */ + friend void JAEPICSCAInputEventCallback(struct event_handler_args args); + +private: + + /** + * List of PVs. + */ + PVWrapper *pvs; + + /** + * The CPU mask for the executor + */ + uint32 cpuMask; + + /** + * The stack size + */ + uint32 stackSize; + + /** + * The EmbeddedThread where the ca_pend_event is executed. + */ + SingleThreadService executor; + + /** + * Stores the configuration information received at Initialise. + */ + ConfigurationDatabase originalSignalInformation; +}; +} + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* EPICSCADATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/JAEPICSCAOutput.cpp b/EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/JAEPICSCAOutput.cpp new file mode 100644 index 0000000..951ed07 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/JAEPICSCAOutput.cpp @@ -0,0 +1,375 @@ +/** + * @file EPICSCAOutput.cpp + * @brief Source file for class EPICSCAOutput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class EPICSCAOutput (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAEPICSCAOutput.h" + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "MemoryMapAsyncOutputBroker.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +JAEPICSCAOutput::JAEPICSCAOutput() : + DataSourceI() { + pvs = NULL_PTR(PVWrapper *); + stackSize = THREADS_DEFAULT_STACKSIZE * 4u; + cpuMask = 0xffu; + numberOfBuffers = 0u; + ignoreBufferOverrun = 1u; + threadContextSet = false; +} + +/*lint -e{1551} must free the memory allocated to the different PVs.*/ +JAEPICSCAOutput::~JAEPICSCAOutput() { + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + if (pvs[n].pvChid != NULL_PTR(chid)) { + (void) ca_clear_channel(pvs[n].pvChid); + } + if (pvs[n].memory != NULL_PTR(void *)) { + GlobalObjectsDatabase::Instance()->GetStandardHeap()->Free(pvs[n].memory); + GlobalObjectsDatabase::Instance()->GetStandardHeap()->Free(pvs[n].previousValue); + } + } + delete[] pvs; + } +} + +bool JAEPICSCAOutput::Initialise(StructuredDataI & data) { + bool ok = DataSourceI::Initialise(data); + if (ok) { + ok = data.Read("NumberOfBuffers", numberOfBuffers); + + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "NumberOfBuffers shall be specified"); + } + } + if (ok) { + if (!data.Read("CPUs", cpuMask)) { + REPORT_ERROR(ErrorManagement::Information, "No CPUs defined. Using default = %d", cpuMask); + } + if (!data.Read("StackSize", stackSize)) { + REPORT_ERROR(ErrorManagement::Information, "No StackSize defined. Using default = %d", stackSize); + } + if (!data.Read("IgnoreBufferOverrun", ignoreBufferOverrun)) { + REPORT_ERROR(ErrorManagement::Information, "No IgnoreBufferOverrun defined. Using default = %d", ignoreBufferOverrun); + } + + } + if (ok) { + ok = data.MoveRelative("Signals"); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Could not move to the Signals section"); + } + if (ok) { + ok = data.Copy(originalSignalInformation); + } + if (ok) { + ok = originalSignalInformation.MoveToRoot(); + } + //Do not allow to add signals in run-time + if (ok) { + ok = signalsDatabase.MoveRelative("Signals"); + } + if (ok) { + ok = signalsDatabase.Write("Locked", 1u); + } + if (ok) { + ok = signalsDatabase.MoveToAncestor(1u); + } + } + if (ok) { + ok = data.MoveToAncestor(1u); + } + return ok; +} + +bool JAEPICSCAOutput::SetConfiguredDatabase(StructuredDataI & data) { + bool ok = DataSourceI::SetConfiguredDatabase(data); + //Check the signal index of the timing signal. + uint32 nOfSignals = GetNumberOfSignals(); + if (ok) { + ok = (nOfSignals > 0u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one signal shall be defined"); + } + } + if (ok) { + //Do not allow samples + uint32 functionNumberOfSignals = 0u; + uint32 n; + if (GetFunctionNumberOfSignals(OutputSignals, 0u, functionNumberOfSignals)) { + for (n = 0u; (n < functionNumberOfSignals) && (ok); n++) { + uint32 nSamples; + ok = GetFunctionSignalSamples(OutputSignals, 0u, n, nSamples); + if (ok) { + ok = (nSamples == 1u); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The number of samples shall be exactly 1"); + } + } + } + } + //Only one and one GAM allowed to interact with this DataSourceI + if (ok) { + ok = (GetNumberOfFunctions() == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Exactly one Function allowed to interact with this DataSourceI"); + } + } + + if (ok) { + pvs = new PVWrapper[nOfSignals]; + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + pvs[n].memory = NULL_PTR(void *); //value to write PV + pvs[n].previousValue = NULL_PTR(void *); //written value + pvs[n].pvChid = NULL_PTR(chid); + + } + for (n = 0u; (n < nOfSignals) && (ok); n++) { + //Note that the RealTimeApplicationConfigurationBuilder is allowed to change the order of the signals w.r.t. to the originalSignalInformation + StreamString orderedSignalName; + ok = GetSignalName(n, orderedSignalName); + if (ok) { + //Have to mix and match between the original setting of the DataSource signal + //and the ones which are later added by the RealTimeApplicationConfigurationBuilder + ok = originalSignalInformation.MoveRelative(orderedSignalName.Buffer()); + } + StreamString pvName; + if (ok) { + ok = originalSignalInformation.Read("PVName", pvName); + if (!ok) { + uint32 nn = n; + REPORT_ERROR(ErrorManagement::ParametersError, "No PVName specified for signal at index %d", nn); + } + } + TypeDescriptor td = GetSignalType(n); + + if (ok) { + (void) StringHelper::CopyN(&pvs[n].pvName[0], pvName.Buffer(), PV_NAME_MAX_SIZE); + if (td == CharString) { + pvs[n].pvType = DBR_STRING; + } + else if (td == Character8Bit) { + pvs[n].pvType = DBR_STRING; + } + else if (td == SignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == UnsignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == SignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == UnsignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == SignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == UnsignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == Float32Bit) { + pvs[n].pvType = DBR_FLOAT; + } + else if (td == Float64Bit) { + pvs[n].pvType = DBR_DOUBLE; + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Type %s is not supported", TypeDescriptor::GetTypeNameFromTypeDescriptor(td)); + ok = false; + } + } + uint32 numberOfElements = 1u; + if (ok) { + ok = GetSignalNumberOfElements(n, numberOfElements); + } + if (ok) { + if (pvs[n].pvType == DBR_STRING) { + ok = (numberOfElements == 40u); + } + if (!ok) { + //Could support arrays of strings with multiples of char8[40] + REPORT_ERROR(ErrorManagement::ParametersError, + "Strings shall be defined with 40 elements char8[40]. Arrays of strings are not currently supported"); + } + } + if (ok) { + pvs[n].numberOfElements = numberOfElements; + } + if (ok) { + pvs[n].memorySize = td.numberOfBits; + pvs[n].memorySize /= 8u; + pvs[n].memorySize *= numberOfElements; + pvs[n].memory = GlobalObjectsDatabase::Instance()->GetStandardHeap()->Malloc(pvs[n].memorySize); + pvs[n].previousValue = GlobalObjectsDatabase::Instance()->GetStandardHeap()->Malloc(pvs[n].memorySize); + ok = originalSignalInformation.MoveToAncestor(1u); + } + } + } + return ok; +} + +bool JAEPICSCAOutput::AllocateMemory() { + return true; +} + +uint32 JAEPICSCAOutput::GetNumberOfMemoryBuffers() { + return 1u; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The signalAddress is independent of the bufferIdx.*/ +bool JAEPICSCAOutput::GetSignalMemoryBuffer(const uint32 signalIdx, const uint32 bufferIdx, void*& signalAddress) { + bool ok = (pvs != NULL_PTR(PVWrapper *)); + if (ok) { + ok = (signalIdx < GetNumberOfSignals()); + } + if (ok) { + //lint -e{613} pvs cannot as otherwise ok would be false + signalAddress = pvs[signalIdx].memory; + } + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The brokerName only depends on the direction */ +const char8* JAEPICSCAOutput::GetBrokerName(StructuredDataI& data, const SignalDirection direction) { + const char8* brokerName = ""; + if (direction == OutputSignals) { + brokerName = "MemoryMapAsyncOutputBroker"; + } + return brokerName; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: InputBrokers are not supported. Function returns false irrespectively of the parameters.*/ +bool JAEPICSCAOutput::GetInputBrokers(ReferenceContainer& inputBrokers, const char8* const functionName, void* const gamMemPtr) { + return false; +} + +bool JAEPICSCAOutput::GetOutputBrokers(ReferenceContainer& outputBrokers, const char8* const functionName, void* const gamMemPtr) { + ReferenceT broker("MemoryMapAsyncOutputBroker"); + bool ok = broker->InitWithBufferParameters(OutputSignals, *this, functionName, gamMemPtr, numberOfBuffers, cpuMask, stackSize); + if (ok) { + ok = outputBrokers.Insert(broker); + broker->SetIgnoreBufferOverrun(ignoreBufferOverrun == 1u); + } + + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: NOOP at StateChange, independently of the function parameters.*/ +bool JAEPICSCAOutput::PrepareNextState(const char8* const currentStateName, const char8* const nextStateName) { + return true; +} + +uint32 JAEPICSCAOutput::GetStackSize() const { + return stackSize; +} + +uint32 JAEPICSCAOutput::GetCPUMask() const { + return cpuMask; +} + +uint32 JAEPICSCAOutput::GetNumberOfBuffers() const { + return numberOfBuffers; +} + +bool JAEPICSCAOutput::Synchronise() { + bool ok = true; + uint32 n; + uint32 nOfSignals = GetNumberOfSignals(); + if (!threadContextSet) { + ok = (ca_context_create(ca_enable_preemptive_callback) == ECA_NORMAL); + if (!ok) { + REPORT_ERROR(ErrorManagement::FatalError, "ca_enable_preemptive_callback failed"); + } + threadContextSet = ok; + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + ok = (ca_create_channel(&pvs[n].pvName[0], NULL_PTR(caCh *), NULL_PTR(void *), 20u, &pvs[n].pvChid) == ECA_NORMAL); + if (!ok) { + REPORT_ERROR(ErrorManagement::FatalError, "ca_create_channel failed for PV with name %s", pvs[n].pvName); + } + } + } + } + + //Allow to write event at the first time! + if (threadContextSet) { + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + bool isNewValue = true; + if (pvs[n].pvType == DBR_STRING) { + if(strcmp((char*)pvs[n].memory,(char*)pvs[n].previousValue)==0){ + isNewValue = false; + continue; + } + if(isNewValue){ + ok = (ca_put(pvs[n].pvType, pvs[n].pvChid, pvs[n].memory) == ECA_NORMAL); + memcpy(pvs[n].previousValue,pvs[n].memory, pvs[n].numberOfElements); + } + } + else { + if(memcmp(pvs[n].memory, pvs[n].previousValue, pvs[n].numberOfElements)==0){ + isNewValue = false; + continue; + } + if(isNewValue){ + ok = (ca_array_put(pvs[n].pvType, pvs[n].numberOfElements, pvs[n].pvChid, pvs[n].memory) == ECA_NORMAL); + memcpy(pvs[n].previousValue, pvs[n].memory, pvs[n].numberOfElements); + } + } + if (!ok) { + REPORT_ERROR(ErrorManagement::FatalError, "ca_put failed for PV: %s", pvs[n].pvName); + } + (void) ca_pend_io(0.1); + } + } + } + + return ok; +} + +bool JAEPICSCAOutput::IsIgnoringBufferOverrun() const { + return (ignoreBufferOverrun == 1u); +} + +CLASS_REGISTER(JAEPICSCAOutput, "1.0") + +} + diff --git a/EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/JAEPICSCAOutput.h b/EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/JAEPICSCAOutput.h new file mode 100644 index 0000000..5c2de87 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/JAEPICSCAOutput.h @@ -0,0 +1,233 @@ +/** + * @file EPICSCAOutput.h + * @brief Header file for class EPICSCAOutput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class EPICSCAOutput + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef JAEPICSCAOutput_H_ +#define JAEPICSCAOutput_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" +#include "JAEPICSCAInput.h" +#include "EmbeddedServiceMethodBinderI.h" +#include "EventSem.h" +#include "SingleThreadService.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +//Maximum size that a PV name may have + +/** + * @brief A DataSource which allows to output data into any number of PVs using the EPICS channel access client protocol. + * Data is asynchronously ca_put in the context of a different thread (w.r.t. to the real-time thread). + * + * The configuration syntax is (names are only given as an example): + * + *
+ * +EPICSCAOutput_1 = {
+ *     Class = EPICSCA::EPICSCAOutput
+ *     StackSize = 1048576 //Optional the EmbeddedThread stack size. Default value is THREADS_DEFAULT_STACKSIZE * 4u
+ *     CPUs = 0xff //Optional the affinity of the EmbeddedThread (where the EPICS context is attached).
+ *     IgnoreBufferOverrun = 1 //Optional. If true no error will be triggered when the thread that writes into EPICS does not consume the data fast enough.
+ *     NumberOfBuffers = 10 //Compulsory. Number of buffers in a circular buffer that asynchronously writes the PV values. Each buffer is capable of holding a copy of all the DataSourceI signals.
+ *     Signals = {
+ *          PV1 = { //At least one shall be defined
+ *             PVName = My::PV1 //Compulsory. Name of the PV.
+ *             Type = uint32 //Compulsory. Supported types are char8[40], string[40], uint8, int8, uint16, int16, int32, uint32, float32 and float64
+ *          }
+ *          ...
+ *     }
+ * }
+ *
+ * 
+ */ +class JAEPICSCAOutput: public DataSourceI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Default constructor. NOOP. + */ + JAEPICSCAOutput(); + + /** + * @brief Destructor. + * @details TODO. + */ + virtual ~JAEPICSCAOutput(); + + /** + * @brief See DataSourceI::AllocateMemory. NOOP. + * @return true. + */ + virtual bool AllocateMemory(); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @return 1. + */ + virtual uint32 GetNumberOfMemoryBuffers(); + + /** + * @brief See DataSourceI::GetSignalMemoryBuffer. + * @pre + * SetConfiguredDatabase + */ + virtual bool GetSignalMemoryBuffer(const uint32 signalIdx, + const uint32 bufferIdx, + void *&signalAddress); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @details Only OutputSignals are supported. + * @return MemoryMapAsyncOutputBroker. + */ + virtual const char8 *GetBrokerName(StructuredDataI &data, + const SignalDirection direction); + + /** + * @brief See DataSourceI::GetInputBrokers. + * @return false. + */ + virtual bool GetInputBrokers(ReferenceContainer &inputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::GetOutputBrokers. + * @details adds a memory MemoryMapOutputBroker instance to the outputBrokers + * @return true. + */ + virtual bool GetOutputBrokers(ReferenceContainer &outputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::PrepareNextState. NOOP. + * @return true. + */ + virtual bool PrepareNextState(const char8 * const currentStateName, + const char8 * const nextStateName); + + /** + * @brief Loads and verifies the configuration parameters detailed in the class description. + * @return true if all the mandatory parameters are correctly specified and if the specified optional parameters have valid values. + */ + virtual bool Initialise(StructuredDataI & data); + + /** + * @brief Final verification of all the parameters. Setup of the memory required to hold all the signals. + * @details This method verifies that all the parameters requested by the GAMs interacting with this DataSource + * are valid and consistent with the parameters set during the initialisation phase. + * In particular the following conditions shall be met: + * - All the signals have the PVName defined + * - All the signals have one of the following types: uint32, int32, float32 or float64. + * @return true if all the parameters are valid and the conditions above are met. + */ + virtual bool SetConfiguredDatabase(StructuredDataI & data); + + /** + * @brief Gets the affinity of the thread which is going to be used to asynchronously write data with ca_put. + * @return the affinity of the thread which is going to be used to asynchronously write data with ca_put. + */ + uint32 GetCPUMask() const; + + /** + * @brief Gets the stack size of the thread which is going to be used to asynchronously write data with ca_put. + * @return the stack size of the thread which is going to be used to asynchronously write data with ca_put. + */ + uint32 GetStackSize() const; + + /** + * @brief Gets the number of buffers in the circular buffer that asynchronously writes the PV values. + * @return the number of buffers in the circular buffer that asynchronously writes the PV values. + */ + uint32 GetNumberOfBuffers() const; + + /** + * @brief Provides the context to execute all the EPICS ca_put calls. + * @details Executes in the context of the MemoryMapAsyncOutputBroker thread the following EPICS calls: + * ca_context_create, ca_create_channel, ca_create_subscription, ca_clear_subscription, + * ca_clear_event, ca_clear_channel, ca_detach_context and ca_context_destroy + * @return true if all the EPICS calls return without any error. + */ + virtual bool Synchronise(); + + /** + * @brief Gets if buffer overruns is being ignored (i.e. the consumer thread which writes into EPICS is not consuming the data fast enough). + * @return if true no error is to be triggered when there is a buffer overrun. + */ + bool IsIgnoringBufferOverrun() const; + + +private: + /** + * List of PVs. + */ + PVWrapper *pvs; + + /** + * The CPU mask for the executor + */ + uint32 cpuMask; + + /** + * The stack size + */ + uint32 stackSize; + + /** + * Stores the configuration information received at Initialise. + */ + ConfigurationDatabase originalSignalInformation; + + /** + * The number of buffers for the circular buffer that flushes data into EPICS + */ + uint32 numberOfBuffers; + + /** + * True once the epics thread context is set + */ + bool threadContextSet; + + /** + * If true no error will be triggered when the data cannot be consumed by the thread doing the caputs. + */ + uint32 ignoreBufferOverrun; +}; +} + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* EPICSCADATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/Makefile.gcc b/EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/Makefile.gcc new file mode 100644 index 0000000..1c65faf --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/Makefile.gcc @@ -0,0 +1,29 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc + +LIBRARIES += -L$(EPICS_BASE)/lib/$(EPICS_HOST_ARCH)/ -lca diff --git a/EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/Makefile.inc b/EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/Makefile.inc new file mode 100644 index 0000000..435df16 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/Makefile.inc @@ -0,0 +1,58 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAEPICSCAOutput.x JAEPICSCAInput.x + +PACKAGE=DataSources + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(EPICS_BASE)/include/ +INCLUDES += -I$(EPICS_BASE)/include/os/Linux/ +INCLUDES += -I$(EPICS_BASE)/include/compiler/gcc/ +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L5GAMs + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAEPICSCA$(LIBEXT) \ + $(BUILD_DIR)/JAEPICSCA$(DLLEXT) + echo $(OBJS) + +include depends.$(TARGET) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/depends.x86-linux b/EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/depends.x86-linux new file mode 100644 index 0000000..eced617 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/depends.x86-linux @@ -0,0 +1,305 @@ +../../../../obj/Build/x86-linux/DataSources/JAEPICSCA/JAEPICSCAInput.o: JAEPICSCAInput.cpp JAEPICSCAInput.h \ + /opt/codac-6.3/epics/include/cadef.h \ + /opt/codac-6.3/epics/include/epicsThread.h \ + /opt/codac-6.3/epics/include/libComAPI.h \ + /opt/codac-6.3/epics/include/epicsEvent.h \ + /opt/codac-6.3/epics/include/os/Linux/osdEvent.h \ + /opt/codac-6.3/epics/include/epicsMutex.h \ + /opt/codac-6.3/epics/include/epicsAssert.h \ + /opt/codac-6.3/epics/include/compilerDependencies.h \ + /opt/codac-6.3/epics/include/compiler/gcc/compilerSpecific.h \ + /opt/codac-6.3/epics/include/epicsGuard.h \ + /opt/codac-6.3/epics/include/os/Linux/osdMutex.h \ + /opt/codac-6.3/epics/include/os/Linux/osdThread.h \ + /opt/codac-6.3/epics/include/libComAPI.h \ + /opt/codac-6.3/epics/include/ellLib.h \ + /opt/codac-6.3/epics/include/epicsEvent.h \ + /opt/codac-6.3/epics/include/libCaAPI.h \ + /opt/codac-6.3/epics/include/caerr.h \ + /opt/codac-6.3/epics/include/epicsTypes.h \ + /opt/codac-6.3/epics/include/db_access.h \ + /opt/codac-6.3/epics/include/epicsTime.h \ + /opt/codac-6.3/epics/include/os/Linux/osdTime.h \ + /opt/codac-6.3/epics/include/errMdef.h \ + /opt/codac-6.3/epics/include/caeventmask.h \ + /opt/marte2-core/Source/Core/BareMetal/L5GAMs/DataSourceI.h \ + /opt/marte2-core/Source/Core/BareMetal/L4Configuration/ConfigurationDatabase.h \ + /opt/marte2-core/Source/Core/BareMetal/L4Configuration/AnyObject.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/AnyType.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ClassProperties.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/GeneralDefinitions.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/TypeCharacteristics.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/CompilerTypes.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/Architecture/x86_gcc/CompilerTypes.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/GeneralDefinitions.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/FractionalInteger.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/TypeCharacteristics.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/TemplateParametersVerificator.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ClassRegistryDatabase.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/GlobalObjectsDatabase.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/GeneralDefinitions.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/GlobalObjectI.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/StandardHeap.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../HeapI.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../ErrorManagement.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../ErrorInformation.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/ErrorType.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/BitBoolean.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/BitRange.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../GeneralDefinitions.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../StreamI.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../TimeoutType.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../HighResolutionTimer.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../TimeStamp.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../Architecture/x86_gcc/HighResolutionTimerA.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/CompilerTypes.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../Environment/Linux/HighResolutionTimer.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../Environment/Linux/../../HighResolutionTimer.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../Environment/Linux/HighResolutionTimerCalibrator.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../Environment/Linux/../../GeneralDefinitions.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/TimeStamp.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../Generic/StandardHeap_Generic.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/FastPollingMutexSem.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Atomic.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Architecture/x86_gcc/AtomicA.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/ErrorManagement.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/HighResolutionTimer.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/TimeoutType.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Sleep.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ClassRegistryItem.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/CString.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/ZeroTerminatedArray.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/Introspection.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/IntrospectionEntry.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/TypeDescriptor.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/BasicType.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/FractionalInteger.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/BitRange.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/BitBoolean.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/ZeroTerminatedArray.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/LinkedListable.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/LinkedListHolderT.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/IteratorT.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/Iterator.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/LinkedListable.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/LinkedListHolder.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/SortFilter.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/SearchFilter.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/LoadableLibrary.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ObjectBuilder.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/HeapI.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/StaticList.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/StaticListHolder.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/Matrix.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/Vector.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/HeapManager.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/HeapI.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/MemoryOperationsHelper.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/Object.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/StringHelper.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/StructuredDataI.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/AnyType.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/CLASSREGISTER.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ClassRegistryItemT.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ObjectBuilderT.h \ + /opt/marte2-core/Source/Core/BareMetal/L4Configuration/ConfigurationDatabaseNode.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/BinaryTree.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/StaticList.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/Fnv1aHashFunction.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/HashFunction.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ReferenceContainer.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/LinkedListHolder.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/Object.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/Reference.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ReferenceContainerFilter.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ReferenceContainerNode.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/TimeoutType.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ReferenceT.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ReferenceContainerFilterObjectName.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ReferenceContainer.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/StructuredDataI.h \ + /opt/marte2-core/Source/Core/BareMetal/L4Configuration/TypeConversion.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/Vector.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/StreamI.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/StreamString.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/CharBuffer.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/ErrorManagement.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/BufferedStreamI.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/FormatDescriptor.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/IOBuffer.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/StreamStringIOBuffer.h \ + /opt/marte2-core/Source/Core/BareMetal/L5GAMs/StatefulI.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/EmbeddedServiceMethodBinderI.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/ExecutionInfo.h \ + /opt/marte2-core/Source/Core/Scheduler/L1Portability/Threads.h \ + /opt/marte2-core/Source/Core/Scheduler/L1Portability/ExceptionHandler.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/ProcessorType.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/BitSet.h \ + /opt/marte2-core/Source/Core/Scheduler/L1Portability/EventSem.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/SingleThreadService.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/EmbeddedServiceI.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/EmbeddedServiceMethodBinderI.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/EmbeddedServiceMethodBinderT.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/EmbeddedThreadI.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/EmbeddedThread.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/AdvancedErrorManagement.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ClassProperties.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/StreamMemoryReference.h \ + /opt/marte2-core/Source/Core/BareMetal/L5GAMs/MemoryMapInputBroker.h \ + /opt/marte2-core/Source/Core/BareMetal/L5GAMs/MemoryMapBroker.h \ + /opt/marte2-core/Source/Core/BareMetal/L5GAMs/BrokerI.h \ + /opt/marte2-core/Source/Core/BareMetal/L5GAMs/DataSourceI.h \ + /opt/marte2-core/Source/Core/BareMetal/L5GAMs/ExecutableI.h +../../../../obj/Build/x86-linux/DataSources/JAEPICSCA/JAEPICSCAOutput.o: JAEPICSCAOutput.cpp JAEPICSCAOutput.h \ + /opt/codac-6.3/epics/include/cadef.h \ + /opt/codac-6.3/epics/include/epicsThread.h \ + /opt/codac-6.3/epics/include/libComAPI.h \ + /opt/codac-6.3/epics/include/epicsEvent.h \ + /opt/codac-6.3/epics/include/os/Linux/osdEvent.h \ + /opt/codac-6.3/epics/include/epicsMutex.h \ + /opt/codac-6.3/epics/include/epicsAssert.h \ + /opt/codac-6.3/epics/include/compilerDependencies.h \ + /opt/codac-6.3/epics/include/compiler/gcc/compilerSpecific.h \ + /opt/codac-6.3/epics/include/epicsGuard.h \ + /opt/codac-6.3/epics/include/os/Linux/osdMutex.h \ + /opt/codac-6.3/epics/include/os/Linux/osdThread.h \ + /opt/codac-6.3/epics/include/libComAPI.h \ + /opt/codac-6.3/epics/include/ellLib.h \ + /opt/codac-6.3/epics/include/epicsEvent.h \ + /opt/codac-6.3/epics/include/libCaAPI.h \ + /opt/codac-6.3/epics/include/caerr.h \ + /opt/codac-6.3/epics/include/epicsTypes.h \ + /opt/codac-6.3/epics/include/db_access.h \ + /opt/codac-6.3/epics/include/epicsTime.h \ + /opt/codac-6.3/epics/include/os/Linux/osdTime.h \ + /opt/codac-6.3/epics/include/errMdef.h \ + /opt/codac-6.3/epics/include/caeventmask.h \ + /opt/marte2-core/Source/Core/BareMetal/L5GAMs/DataSourceI.h \ + /opt/marte2-core/Source/Core/BareMetal/L4Configuration/ConfigurationDatabase.h \ + /opt/marte2-core/Source/Core/BareMetal/L4Configuration/AnyObject.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/AnyType.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ClassProperties.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/GeneralDefinitions.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/TypeCharacteristics.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/CompilerTypes.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/Architecture/x86_gcc/CompilerTypes.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/GeneralDefinitions.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/FractionalInteger.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/TypeCharacteristics.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/TemplateParametersVerificator.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ClassRegistryDatabase.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/GlobalObjectsDatabase.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/GeneralDefinitions.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/GlobalObjectI.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/StandardHeap.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../HeapI.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../ErrorManagement.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../ErrorInformation.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/ErrorType.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/BitBoolean.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/BitRange.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../GeneralDefinitions.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../StreamI.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../TimeoutType.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../HighResolutionTimer.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../TimeStamp.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../Architecture/x86_gcc/HighResolutionTimerA.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/CompilerTypes.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../Environment/Linux/HighResolutionTimer.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../Environment/Linux/../../HighResolutionTimer.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../Environment/Linux/HighResolutionTimerCalibrator.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../Environment/Linux/../../GeneralDefinitions.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/TimeStamp.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../Generic/StandardHeap_Generic.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/FastPollingMutexSem.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Atomic.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Architecture/x86_gcc/AtomicA.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/ErrorManagement.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/HighResolutionTimer.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/TimeoutType.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Sleep.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ClassRegistryItem.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/CString.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/ZeroTerminatedArray.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/Introspection.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/IntrospectionEntry.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/TypeDescriptor.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/BasicType.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/FractionalInteger.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/BitRange.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/BitBoolean.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/ZeroTerminatedArray.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/LinkedListable.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/LinkedListHolderT.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/IteratorT.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/Iterator.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/LinkedListable.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/LinkedListHolder.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/SortFilter.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/SearchFilter.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/LoadableLibrary.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ObjectBuilder.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/HeapI.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/StaticList.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/StaticListHolder.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/Matrix.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/Vector.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/HeapManager.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/HeapI.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/MemoryOperationsHelper.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/Object.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/StringHelper.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/StructuredDataI.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/AnyType.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/CLASSREGISTER.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ClassRegistryItemT.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ObjectBuilderT.h \ + /opt/marte2-core/Source/Core/BareMetal/L4Configuration/ConfigurationDatabaseNode.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/BinaryTree.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/StaticList.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/Fnv1aHashFunction.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/HashFunction.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ReferenceContainer.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/LinkedListHolder.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/Object.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/Reference.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ReferenceContainerFilter.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ReferenceContainerNode.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/TimeoutType.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ReferenceT.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ReferenceContainerFilterObjectName.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ReferenceContainer.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/StructuredDataI.h \ + /opt/marte2-core/Source/Core/BareMetal/L4Configuration/TypeConversion.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/Vector.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/StreamI.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/StreamString.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/CharBuffer.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/ErrorManagement.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/BufferedStreamI.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/FormatDescriptor.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/IOBuffer.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/StreamStringIOBuffer.h \ + /opt/marte2-core/Source/Core/BareMetal/L5GAMs/StatefulI.h \ + JAEPICSCAInput.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/EmbeddedServiceMethodBinderI.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/ExecutionInfo.h \ + /opt/marte2-core/Source/Core/Scheduler/L1Portability/Threads.h \ + /opt/marte2-core/Source/Core/Scheduler/L1Portability/ExceptionHandler.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/ProcessorType.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/BitSet.h \ + /opt/marte2-core/Source/Core/Scheduler/L1Portability/EventSem.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/SingleThreadService.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/EmbeddedServiceI.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/EmbeddedServiceMethodBinderI.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/EmbeddedServiceMethodBinderT.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/EmbeddedThreadI.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/EmbeddedThread.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/AdvancedErrorManagement.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ClassProperties.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/StreamMemoryReference.h \ + /opt/marte2-core/Source/Core/Scheduler/L5GAMs/MemoryMapAsyncOutputBroker.h \ + /opt/marte2-core/Source/Core/BareMetal/L5GAMs/MemoryMapBroker.h \ + /opt/marte2-core/Source/Core/BareMetal/L5GAMs/BrokerI.h \ + /opt/marte2-core/Source/Core/BareMetal/L5GAMs/DataSourceI.h \ + /opt/marte2-core/Source/Core/BareMetal/L5GAMs/ExecutableI.h diff --git a/EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/dependsRaw.x86-linux b/EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/dependsRaw.x86-linux new file mode 100644 index 0000000..d7f31d7 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/DataSources/JAEPICSCA/dependsRaw.x86-linux @@ -0,0 +1,305 @@ +JAEPICSCAInput.o: JAEPICSCAInput.cpp JAEPICSCAInput.h \ + /opt/codac-6.3/epics/include/cadef.h \ + /opt/codac-6.3/epics/include/epicsThread.h \ + /opt/codac-6.3/epics/include/libComAPI.h \ + /opt/codac-6.3/epics/include/epicsEvent.h \ + /opt/codac-6.3/epics/include/os/Linux/osdEvent.h \ + /opt/codac-6.3/epics/include/epicsMutex.h \ + /opt/codac-6.3/epics/include/epicsAssert.h \ + /opt/codac-6.3/epics/include/compilerDependencies.h \ + /opt/codac-6.3/epics/include/compiler/gcc/compilerSpecific.h \ + /opt/codac-6.3/epics/include/epicsGuard.h \ + /opt/codac-6.3/epics/include/os/Linux/osdMutex.h \ + /opt/codac-6.3/epics/include/os/Linux/osdThread.h \ + /opt/codac-6.3/epics/include/libComAPI.h \ + /opt/codac-6.3/epics/include/ellLib.h \ + /opt/codac-6.3/epics/include/epicsEvent.h \ + /opt/codac-6.3/epics/include/libCaAPI.h \ + /opt/codac-6.3/epics/include/caerr.h \ + /opt/codac-6.3/epics/include/epicsTypes.h \ + /opt/codac-6.3/epics/include/db_access.h \ + /opt/codac-6.3/epics/include/epicsTime.h \ + /opt/codac-6.3/epics/include/os/Linux/osdTime.h \ + /opt/codac-6.3/epics/include/errMdef.h \ + /opt/codac-6.3/epics/include/caeventmask.h \ + /opt/marte2-core/Source/Core/BareMetal/L5GAMs/DataSourceI.h \ + /opt/marte2-core/Source/Core/BareMetal/L4Configuration/ConfigurationDatabase.h \ + /opt/marte2-core/Source/Core/BareMetal/L4Configuration/AnyObject.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/AnyType.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ClassProperties.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/GeneralDefinitions.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/TypeCharacteristics.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/CompilerTypes.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/Architecture/x86_gcc/CompilerTypes.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/GeneralDefinitions.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/FractionalInteger.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/TypeCharacteristics.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/TemplateParametersVerificator.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ClassRegistryDatabase.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/GlobalObjectsDatabase.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/GeneralDefinitions.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/GlobalObjectI.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/StandardHeap.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../HeapI.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../ErrorManagement.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../ErrorInformation.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/ErrorType.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/BitBoolean.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/BitRange.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../GeneralDefinitions.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../StreamI.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../TimeoutType.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../HighResolutionTimer.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../TimeStamp.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../Architecture/x86_gcc/HighResolutionTimerA.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/CompilerTypes.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../Environment/Linux/HighResolutionTimer.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../Environment/Linux/../../HighResolutionTimer.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../Environment/Linux/HighResolutionTimerCalibrator.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../Environment/Linux/../../GeneralDefinitions.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/TimeStamp.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../Generic/StandardHeap_Generic.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/FastPollingMutexSem.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Atomic.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Architecture/x86_gcc/AtomicA.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/ErrorManagement.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/HighResolutionTimer.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/TimeoutType.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Sleep.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ClassRegistryItem.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/CString.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/ZeroTerminatedArray.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/Introspection.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/IntrospectionEntry.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/TypeDescriptor.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/BasicType.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/FractionalInteger.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/BitRange.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/BitBoolean.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/ZeroTerminatedArray.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/LinkedListable.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/LinkedListHolderT.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/IteratorT.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/Iterator.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/LinkedListable.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/LinkedListHolder.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/SortFilter.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/SearchFilter.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/LoadableLibrary.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ObjectBuilder.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/HeapI.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/StaticList.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/StaticListHolder.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/Matrix.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/Vector.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/HeapManager.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/HeapI.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/MemoryOperationsHelper.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/Object.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/StringHelper.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/StructuredDataI.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/AnyType.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/CLASSREGISTER.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ClassRegistryItemT.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ObjectBuilderT.h \ + /opt/marte2-core/Source/Core/BareMetal/L4Configuration/ConfigurationDatabaseNode.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/BinaryTree.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/StaticList.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/Fnv1aHashFunction.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/HashFunction.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ReferenceContainer.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/LinkedListHolder.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/Object.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/Reference.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ReferenceContainerFilter.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ReferenceContainerNode.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/TimeoutType.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ReferenceT.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ReferenceContainerFilterObjectName.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ReferenceContainer.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/StructuredDataI.h \ + /opt/marte2-core/Source/Core/BareMetal/L4Configuration/TypeConversion.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/Vector.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/StreamI.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/StreamString.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/CharBuffer.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/ErrorManagement.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/BufferedStreamI.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/FormatDescriptor.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/IOBuffer.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/StreamStringIOBuffer.h \ + /opt/marte2-core/Source/Core/BareMetal/L5GAMs/StatefulI.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/EmbeddedServiceMethodBinderI.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/ExecutionInfo.h \ + /opt/marte2-core/Source/Core/Scheduler/L1Portability/Threads.h \ + /opt/marte2-core/Source/Core/Scheduler/L1Portability/ExceptionHandler.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/ProcessorType.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/BitSet.h \ + /opt/marte2-core/Source/Core/Scheduler/L1Portability/EventSem.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/SingleThreadService.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/EmbeddedServiceI.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/EmbeddedServiceMethodBinderI.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/EmbeddedServiceMethodBinderT.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/EmbeddedThreadI.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/EmbeddedThread.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/AdvancedErrorManagement.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ClassProperties.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/StreamMemoryReference.h \ + /opt/marte2-core/Source/Core/BareMetal/L5GAMs/MemoryMapInputBroker.h \ + /opt/marte2-core/Source/Core/BareMetal/L5GAMs/MemoryMapBroker.h \ + /opt/marte2-core/Source/Core/BareMetal/L5GAMs/BrokerI.h \ + /opt/marte2-core/Source/Core/BareMetal/L5GAMs/DataSourceI.h \ + /opt/marte2-core/Source/Core/BareMetal/L5GAMs/ExecutableI.h +JAEPICSCAOutput.o: JAEPICSCAOutput.cpp JAEPICSCAOutput.h \ + /opt/codac-6.3/epics/include/cadef.h \ + /opt/codac-6.3/epics/include/epicsThread.h \ + /opt/codac-6.3/epics/include/libComAPI.h \ + /opt/codac-6.3/epics/include/epicsEvent.h \ + /opt/codac-6.3/epics/include/os/Linux/osdEvent.h \ + /opt/codac-6.3/epics/include/epicsMutex.h \ + /opt/codac-6.3/epics/include/epicsAssert.h \ + /opt/codac-6.3/epics/include/compilerDependencies.h \ + /opt/codac-6.3/epics/include/compiler/gcc/compilerSpecific.h \ + /opt/codac-6.3/epics/include/epicsGuard.h \ + /opt/codac-6.3/epics/include/os/Linux/osdMutex.h \ + /opt/codac-6.3/epics/include/os/Linux/osdThread.h \ + /opt/codac-6.3/epics/include/libComAPI.h \ + /opt/codac-6.3/epics/include/ellLib.h \ + /opt/codac-6.3/epics/include/epicsEvent.h \ + /opt/codac-6.3/epics/include/libCaAPI.h \ + /opt/codac-6.3/epics/include/caerr.h \ + /opt/codac-6.3/epics/include/epicsTypes.h \ + /opt/codac-6.3/epics/include/db_access.h \ + /opt/codac-6.3/epics/include/epicsTime.h \ + /opt/codac-6.3/epics/include/os/Linux/osdTime.h \ + /opt/codac-6.3/epics/include/errMdef.h \ + /opt/codac-6.3/epics/include/caeventmask.h \ + /opt/marte2-core/Source/Core/BareMetal/L5GAMs/DataSourceI.h \ + /opt/marte2-core/Source/Core/BareMetal/L4Configuration/ConfigurationDatabase.h \ + /opt/marte2-core/Source/Core/BareMetal/L4Configuration/AnyObject.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/AnyType.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ClassProperties.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/GeneralDefinitions.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/TypeCharacteristics.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/CompilerTypes.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/Architecture/x86_gcc/CompilerTypes.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/GeneralDefinitions.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/FractionalInteger.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/TypeCharacteristics.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/TemplateParametersVerificator.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ClassRegistryDatabase.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/GlobalObjectsDatabase.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/GeneralDefinitions.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/GlobalObjectI.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/StandardHeap.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../HeapI.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../ErrorManagement.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../ErrorInformation.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/ErrorType.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/BitBoolean.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/BitRange.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../GeneralDefinitions.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../StreamI.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../TimeoutType.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../HighResolutionTimer.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../TimeStamp.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../Architecture/x86_gcc/HighResolutionTimerA.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/CompilerTypes.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../Environment/Linux/HighResolutionTimer.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../Environment/Linux/../../HighResolutionTimer.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../Environment/Linux/HighResolutionTimerCalibrator.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../../Environment/Linux/../../GeneralDefinitions.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/TimeStamp.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Environment/Linux/../Generic/StandardHeap_Generic.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/FastPollingMutexSem.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Atomic.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Architecture/x86_gcc/AtomicA.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/ErrorManagement.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/HighResolutionTimer.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/TimeoutType.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/Sleep.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ClassRegistryItem.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/CString.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/ZeroTerminatedArray.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/Introspection.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/IntrospectionEntry.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/TypeDescriptor.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/BasicType.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/FractionalInteger.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/BitRange.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/BitBoolean.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/ZeroTerminatedArray.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/LinkedListable.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/LinkedListHolderT.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/IteratorT.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/Iterator.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/LinkedListable.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/LinkedListHolder.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/SortFilter.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/SearchFilter.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/LoadableLibrary.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ObjectBuilder.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/HeapI.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/StaticList.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/StaticListHolder.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/Matrix.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/Vector.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/HeapManager.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/HeapI.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/MemoryOperationsHelper.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/Object.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/StringHelper.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/StructuredDataI.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/AnyType.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/CLASSREGISTER.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ClassRegistryItemT.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ObjectBuilderT.h \ + /opt/marte2-core/Source/Core/BareMetal/L4Configuration/ConfigurationDatabaseNode.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/BinaryTree.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/StaticList.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/Fnv1aHashFunction.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/HashFunction.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ReferenceContainer.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/LinkedListHolder.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/Object.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/Reference.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ReferenceContainerFilter.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ReferenceContainerNode.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/TimeoutType.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ReferenceT.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ReferenceContainerFilterObjectName.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ReferenceContainer.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/StructuredDataI.h \ + /opt/marte2-core/Source/Core/BareMetal/L4Configuration/TypeConversion.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/Vector.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/StreamI.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/StreamString.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/CharBuffer.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/ErrorManagement.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/BufferedStreamI.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/FormatDescriptor.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/IOBuffer.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/StreamStringIOBuffer.h \ + /opt/marte2-core/Source/Core/BareMetal/L5GAMs/StatefulI.h \ + JAEPICSCAInput.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/EmbeddedServiceMethodBinderI.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/ExecutionInfo.h \ + /opt/marte2-core/Source/Core/Scheduler/L1Portability/Threads.h \ + /opt/marte2-core/Source/Core/Scheduler/L1Portability/ExceptionHandler.h \ + /opt/marte2-core/Source/Core/BareMetal/L1Portability/ProcessorType.h \ + /opt/marte2-core/Source/Core/BareMetal/L0Types/BitSet.h \ + /opt/marte2-core/Source/Core/Scheduler/L1Portability/EventSem.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/SingleThreadService.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/EmbeddedServiceI.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/EmbeddedServiceMethodBinderI.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/EmbeddedServiceMethodBinderT.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/EmbeddedThreadI.h \ + /opt/marte2-core/Source/Core/Scheduler/L3Services/EmbeddedThread.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/AdvancedErrorManagement.h \ + /opt/marte2-core/Source/Core/BareMetal/L2Objects/ClassProperties.h \ + /opt/marte2-core/Source/Core/BareMetal/L3Streams/StreamMemoryReference.h \ + /opt/marte2-core/Source/Core/Scheduler/L5GAMs/MemoryMapAsyncOutputBroker.h \ + /opt/marte2-core/Source/Core/BareMetal/L5GAMs/MemoryMapBroker.h \ + /opt/marte2-core/Source/Core/BareMetal/L5GAMs/BrokerI.h \ + /opt/marte2-core/Source/Core/BareMetal/L5GAMs/DataSourceI.h \ + /opt/marte2-core/Source/Core/BareMetal/L5GAMs/ExecutableI.h diff --git a/EC-GN-JA-PCF/target/main/c++/DataSources/Makefile b/EC-GN-JA-PCF/target/main/c++/DataSources/Makefile new file mode 100644 index 0000000..fa87195 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/DataSources/Makefile @@ -0,0 +1,28 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +export TARGET=x86-linux + +include Makefile.gcc \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/c++/DataSources/Makefile.gcc b/EC-GN-JA-PCF/target/main/c++/DataSources/Makefile.gcc new file mode 100644 index 0000000..e0a2fc4 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/DataSources/Makefile.gcc @@ -0,0 +1,26 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +############################################################# + +include Makefile.inc + diff --git a/EC-GN-JA-PCF/target/main/c++/DataSources/Makefile.inc b/EC-GN-JA-PCF/target/main/c++/DataSources/Makefile.inc new file mode 100644 index 0000000..59ce9d2 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/DataSources/Makefile.inc @@ -0,0 +1,42 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +SPB = RandomDataSource.x NI6528.x JAEPICSCA.x + +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults + +ROOT_DIR=../../../obj +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +all: $(OBJS) $(SUBPROJ) check-env + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + +check-env: +ifndef MARTe2_DIR + $(error MARTe2_DIR is undefined) +endif + diff --git a/EC-GN-JA-PCF/target/main/c++/DataSources/NI6528/Makefile.gcc b/EC-GN-JA-PCF/target/main/c++/DataSources/NI6528/Makefile.gcc new file mode 100644 index 0000000..29201d0 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/DataSources/NI6528/Makefile.gcc @@ -0,0 +1,30 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc + +LIBRARIES += -L$(CODAC_ROOT)/lib/ -lpxi6528 + diff --git a/EC-GN-JA-PCF/target/main/c++/DataSources/NI6528/Makefile.inc b/EC-GN-JA-PCF/target/main/c++/DataSources/NI6528/Makefile.inc new file mode 100644 index 0000000..24ebd5d --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/DataSources/NI6528/Makefile.inc @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=NI6528.x + +PACKAGE=DataSources + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(CODAC_ROOT)/include/ + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/NI6528$(LIBEXT) \ + $(BUILD_DIR)/NI6528$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/target/main/c++/DataSources/NI6528/NI6528.cpp b/EC-GN-JA-PCF/target/main/c++/DataSources/NI6528/NI6528.cpp new file mode 100644 index 0000000..49f62b1 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/DataSources/NI6528/NI6528.cpp @@ -0,0 +1,141 @@ +/** + * @file NI6528.cpp + * @brief Source file for class NI6528 + * @date 01/03/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class NI6528 (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include +#include +#include +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "CompilerTypes.h" +#include "NI6528.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +NI6528::NI6528() : + MARTe::DataSourceI() { + using namespace MARTe; + previousValue = 0u; + value = 0u; + port = 0u; + boardFileDescriptor = 0; +} + +NI6528::~NI6528() { + using namespace MARTe; + (void) pxi6528_close_device(boardFileDescriptor); +} + +bool NI6528::SetConfiguredDatabase(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = (DataSourceI::SetConfiguredDatabase(data)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "DataSourceI::SetConfiguredDatabas() failed"); + } + if (ok) { + ok = (GetNumberOfSignals() == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetNumberOfSignals() != 1u"); + } + } + if (ok) { + ok = (GetSignalType(0u) == UnsignedInteger8Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetSignalType(0u) != UnsignedInteger8Bit"); + } + } + + return ok; +} + +bool NI6528::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = DataSourceI::Initialise(data); + if (ok) { + ok = data.Read("Port", port); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The Port shall be specified"); + } + } + if (ok) { + ok = data.Read("DeviceName", deviceName); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The DeviceName shall be specified"); + } + } + int32 ret = pxi6528_open_device(&boardFileDescriptor, deviceName.Buffer(), O_NONBLOCK); + ok = (ret == 0); + if (!ok) { + StreamString err = strerror(-ret); + REPORT_ERROR(ErrorManagement::FatalError, "Could not open device (%s) : %s", deviceName.Buffer(), err.Buffer()); + } + return ok; +} + +bool NI6528::Synchronise() { + using namespace MARTe; + if(previousValue != value){ + int32 ret = (pxi6528_write_port(boardFileDescriptor, port, value) > 0); + previousValue = value; + bool ok = (ret > -1); + if (!ok) { + StreamString err = strerror(-ret); + REPORT_ERROR(ErrorManagement::FatalError, "Could not write to device (%s) : %s", deviceName.Buffer(), err.Buffer()); + } + } + + return true; +} + +bool NI6528::AllocateMemory() { + return true; +} + +bool NI6528::GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress) { + signalAddress = &value; + return true; +} + +const MARTe::char8 *NI6528::GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction) { + using namespace MARTe; + return "MemoryMapSynchronisedOutputBroker"; +} + +bool NI6528::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + return true; +} + +CLASS_REGISTER(NI6528, "1.0") + diff --git a/EC-GN-JA-PCF/target/main/c++/DataSources/NI6528/NI6528.h b/EC-GN-JA-PCF/target/main/c++/DataSources/NI6528/NI6528.h new file mode 100644 index 0000000..7074477 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/DataSources/NI6528/NI6528.h @@ -0,0 +1,143 @@ +/** + * @file NI6528.h + * @brief Header file for class NI6528 + * @date 07/06/2018 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class NI6528 + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef RANDOM_DATASOURCE_H_ +#define RANDOM_DATASOURCE_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +/** + * @brief NI6528 simplified data source implementation. + * + * The configuration syntax is (names and signal quantities are only given as an example): + * +NI6528 = { + * Class = NI6528 + * DeviceName = "/dev/pxi6528.0" //Mandatory + * Port = 0 //The port where to write + * Signals = { + * currentValue = {Type = uint8} + * bitmask = {Type = uint8} + * Value = {Type = uint8} + * } + * } + */ +class NI6528: public MARTe::DataSourceI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Constructor. NOOP. + */ +NI6528 (); + + /** + * @brief Destructor. NOOP. + */ + virtual ~NI6528(); + + /** + * @brief The configuration data detailed in the class description + * @return true if all the compulsory parameters are set. + */ + virtual bool Initialise(MARTe::StructuredDataI & data); + + /** + * @brief Verifies that at most one signal has been set with the correct type (i.e. any integer). + * @return true if the above conditions are met. + */ + virtual bool SetConfiguredDatabase(MARTe::StructuredDataI & data); + + /** + * @brief @see DataSourceI::Synchronise + */ + virtual bool Synchronise(); + + /** + * @brief @see DataSourceI::AllocateMemory + */ + virtual bool AllocateMemory(); + + /** + * @brief @see DataSourceI::GetSignalMemoryBuffer + */ + virtual bool GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress); + + /** + * @return "MemoryMapSynchronisedInputBroker" + */ + virtual const MARTe::char8 *GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction); + + /** + * @brief NOOP + */ + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName); + +private: + /** + * The previous value to write. + */ + MARTe::uint8 previousValue; + + /** + * The bitmask to write value. (new value) = (current value) || (bitmask) && (write value) + */ + MARTe::uint8 bitmask; + + /** + * The value to write. + */ + MARTe::uint8 value; + + /** + * The port number + */ + MARTe::uint32 port; + + /** + * The board file descriptor + */ + pxi6528_device_t boardFileDescriptor; + + /** + * The device name + */ + MARTe::StreamString deviceName; +}; + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* RANDOM_DATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF/target/main/c++/DataSources/RandomDataSource/Makefile.gcc b/EC-GN-JA-PCF/target/main/c++/DataSources/RandomDataSource/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/DataSources/RandomDataSource/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/c++/DataSources/RandomDataSource/Makefile.inc b/EC-GN-JA-PCF/target/main/c++/DataSources/RandomDataSource/Makefile.inc new file mode 100644 index 0000000..0833f11 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/DataSources/RandomDataSource/Makefile.inc @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=RandomDataSource.x + +PACKAGE=DataSources + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/RandomDataSource$(LIBEXT) \ + $(BUILD_DIR)/RandomDataSource$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/target/main/c++/DataSources/RandomDataSource/RandomDataSource.cpp b/EC-GN-JA-PCF/target/main/c++/DataSources/RandomDataSource/RandomDataSource.cpp new file mode 100644 index 0000000..bcfc0b0 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/DataSources/RandomDataSource/RandomDataSource.cpp @@ -0,0 +1,146 @@ +/** + * @file RandomDataSource.cpp + * @brief Source file for class RandomDataSource + * @date 01/03/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class RandomDataSource (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "CompilerTypes.h" +#include "RandomDataSource.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +RandomDataSource::RandomDataSource() : + MARTe::DataSourceI() { + using namespace MARTe; + seed = 0u; + signalPtr = NULL_PTR(MARTe::char8 *); + signalTypeDescriptor = UnsignedInteger8Bit; +} + +RandomDataSource::~RandomDataSource() { + using namespace MARTe; + if (signalPtr) { + delete[] signalPtr; + } +} + +bool RandomDataSource::SetConfiguredDatabase(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = (DataSourceI::SetConfiguredDatabase(data)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "DataSourceI::SetConfiguredDatabas() failed"); + } + if (ok) { + ok = (GetNumberOfSignals() == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetNumberOfSignals() != 1u"); + } + } + if (ok) { + signalTypeDescriptor = GetSignalType(0u); + ok = (signalTypeDescriptor.type == UnsignedInteger); + if (!ok) { + ok = (signalTypeDescriptor.type == SignedInteger); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetSignalType(0u) != Un/SignedInteger"); + } + } + + return ok; +} + +bool RandomDataSource::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = DataSourceI::Initialise(data); + if (ok) { + ok = data.Read("Seed", seed); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The Seed shall be specified"); + } + } + + return ok; +} + +bool RandomDataSource::Synchronise() { + using namespace MARTe; + + if (signalTypeDescriptor.numberOfBits == 8u) { + GetValue(); + } + if (signalTypeDescriptor.numberOfBits == 16u) { + GetValue(); + } + if (signalTypeDescriptor.numberOfBits == 32u) { + GetValue(); + } + if (signalTypeDescriptor.numberOfBits == 64u) { + GetValue(); + } + + return true; +} + +bool RandomDataSource::AllocateMemory() { + signalPtr = new MARTe::char8[signalTypeDescriptor.numberOfBits]; + return true; +} + +bool RandomDataSource::GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress) { + signalAddress = &signalPtr[0]; + return true; +} + +const MARTe::char8 *RandomDataSource::GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction) { + using namespace MARTe; + + static bool firstTime = true; + const char8 * broker;// = NULL_PTR(const char8 *); + if (firstTime) { + broker = "MemoryMapSynchronisedInputBroker"; + } + else { + firstTime = false; + broker = "MemoryMapInputBroker"; + } + return broker; +} + +bool RandomDataSource::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + return true; +} + +CLASS_REGISTER(RandomDataSource, "1.0") + diff --git a/EC-GN-JA-PCF/target/main/c++/DataSources/RandomDataSource/RandomDataSource.h b/EC-GN-JA-PCF/target/main/c++/DataSources/RandomDataSource/RandomDataSource.h new file mode 100644 index 0000000..11cade5 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/DataSources/RandomDataSource/RandomDataSource.h @@ -0,0 +1,137 @@ +/** + * @file RandomDataSource.h + * @brief Header file for class RandomDataSource + * @date 07/06/2018 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class RandomDataSource + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef RANDOM_DATASOURCE_H_ +#define RANDOM_DATASOURCE_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +/** + * @brief DataDource which generates random numbers against a given seed. + * + * The configuration syntax is (names and signal quantities are only given as an example): + * +RandomDataSource = { + * Class = RandomDataSource + * Seed = 8 //Seed against which the the seed will be generated. Note that each signal + * Signals = { + * Random1 = { //Maximum one signal + * Type = uint64 //All the integer types are supported + * } + * } + * } + */ +class RandomDataSource: public MARTe::DataSourceI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Constructor. NOOP. + */ +RandomDataSource (); + + /** + * @brief Destructor. NOOP. + */ + virtual ~RandomDataSource(); + + /** + * @brief The configuration data detailed in the class description + * @return true if all the compulsory parameters are set. + */ + virtual bool Initialise(MARTe::StructuredDataI & data); + + /** + * @brief Verifies that at most one signal has been set with the correct type (i.e. any integer). + * @return true if the above conditions are met. + */ + virtual bool SetConfiguredDatabase(MARTe::StructuredDataI & data); + + /** + * @brief @see DataSourceI::Synchronise + */ + virtual bool Synchronise(); + + /** + * @brief @see DataSourceI::AllocateMemory + */ + virtual bool AllocateMemory(); + + /** + * @brief @see DataSourceI::GetSignalMemoryBuffer + */ + virtual bool GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress); + + /** + * @return "MemoryMapSynchronisedInputBroker" + */ + virtual const MARTe::char8 *GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction); + + /** + * @brief NOOP + */ + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName); + +private: + /** + * The seed to compute the signals. + */ + MARTe::uint32 seed; + + /** + * The signal pointer + */ + MARTe::char8 *signalPtr; + + /** + * The signal type descriptor. + */ + MARTe::TypeDescriptor signalTypeDescriptor; + + /** + * Compute the random value + */ + template + void GetValue(); + +}; + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ +template +void RandomDataSource::GetValue() { + *(reinterpret_cast(&signalPtr[0u])) = static_cast(rand_r(&seed)); +} + +#endif /* RANDOM_DATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JABitReverseGAM/JABitReverseGAM.cpp b/EC-GN-JA-PCF/target/main/c++/GAMs/JABitReverseGAM/JABitReverseGAM.cpp new file mode 100644 index 0000000..dd322b8 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JABitReverseGAM/JABitReverseGAM.cpp @@ -0,0 +1,123 @@ +/** + * @file JABitReverseGAM.cpp + * @brief Source file for class JABitReverseGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JABitReverseGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JABitReverseGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JABitReverseGAM::JABitReverseGAM() { + //Input signals. + input1 = NULL_PTR(MARTe::uint8 *); + + //Output signals. + output1= NULL_PTR(MARTe::uint8 *); +} + +JABitReverseGAM::~JABitReverseGAM() { +} + +bool JABitReverseGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + return ok; +} + +bool JABitReverseGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JABitReverseGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == 1u); + if (ok) { + ok = (numberOfOutputSignals == 1u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "One output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "One input signals shall be defined"); + } + // Do type check for input signals. + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = ((inputType == UnsignedInteger8Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint8.", signalName.Buffer()); + } + + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = ((outputType == UnsignedInteger8Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint8.", signalName.Buffer()); + } + } + } + // Do type cast. + if (ok) { + input1 = reinterpret_cast(GetInputSignalMemory(0)); + + output1 = reinterpret_cast(GetOutputSignalMemory(0)); + } + return ok; +} + +bool JABitReverseGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + *output1 = ~(*input1); + return true; +} + +CLASS_REGISTER(JABitReverseGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JABitReverseGAM/JABitReverseGAM.h b/EC-GN-JA-PCF/target/main/c++/GAMs/JABitReverseGAM/JABitReverseGAM.h new file mode 100644 index 0000000..1d2bbcf --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JABitReverseGAM/JABitReverseGAM.h @@ -0,0 +1,75 @@ +/** + * @file JABitReverseGAM.h + * @brief Header file for class JABitReverseGAM + * @date Mar 18, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JABitReverseGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JABitReverseGAM_H_ +#define GAMS_JABitReverseGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +class JABitReverseGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JABitReverseGAM(); + + virtual ~JABitReverseGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + + // Input signals + MARTe::uint8 *input1; + + // Output signals + MARTe::uint8 *output1; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JABitReverseGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JABitReverseGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/c++/GAMs/JABitReverseGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JABitReverseGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JABitReverseGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/c++/GAMs/JABitReverseGAM/Makefile.inc new file mode 100644 index 0000000..8847378 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JABitReverseGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JABitReverseGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JABitReverseGAM$(LIBEXT) \ + $(BUILD_DIR)/JABitReverseGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JABitSumGAM/JABitSumGAM.cpp b/EC-GN-JA-PCF/target/main/c++/GAMs/JABitSumGAM/JABitSumGAM.cpp new file mode 100644 index 0000000..7c75cd1 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JABitSumGAM/JABitSumGAM.cpp @@ -0,0 +1,143 @@ +/** + * @file JABitSumGAM.cpp + * @brief Source file for class JABitSumGAM + * @date Feb 10, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JABitSumGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JABitSumGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JABitSumGAM::JABitSumGAM() { + //Input signals. + input0 = NULL_PTR(MARTe::uint32 *); + input1 = NULL_PTR(MARTe::uint32 *); + input2 = NULL_PTR(MARTe::uint32 *); + input3 = NULL_PTR(MARTe::uint32 *); + input4 = NULL_PTR(MARTe::uint32 *); + input5 = NULL_PTR(MARTe::uint32 *); + input6 = NULL_PTR(MARTe::uint32 *); + input7 = NULL_PTR(MARTe::uint32 *); + + //Output signals. + output= NULL_PTR(MARTe::uint8 *); +} + +JABitSumGAM::~JABitSumGAM() { +} + +bool JABitSumGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (!ok){ + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "ParametersError in init."); + } + return ok; +} + +bool JABitSumGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JABitSumGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == 8u); + if (ok) { + ok = (numberOfOutputSignals == 1u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "One output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Eight input signals shall be defined"); + } + // Do type check for input signals. + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32.", signalName.Buffer()); + } + + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint8.", signalName.Buffer()); + } + } + } + // Do type cast. + if (ok) { + input0 = reinterpret_cast(GetInputSignalMemory(0)); + input1 = reinterpret_cast(GetInputSignalMemory(1)); + input2 = reinterpret_cast(GetInputSignalMemory(2)); + input3 = reinterpret_cast(GetInputSignalMemory(3)); + input4 = reinterpret_cast(GetInputSignalMemory(4)); + input5 = reinterpret_cast(GetInputSignalMemory(5)); + input6 = reinterpret_cast(GetInputSignalMemory(6)); + input7 = reinterpret_cast(GetInputSignalMemory(7)); + + output = reinterpret_cast(GetOutputSignalMemory(0)); + } + + return ok; +} + +bool JABitSumGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + *output = *input0 + *input1*2 + *input2*4 + *input3*8 + *input4*16 + + *input5*32 + *input6*64 + *input7*128; + + return true; +} + +CLASS_REGISTER(JABitSumGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JABitSumGAM/JABitSumGAM.h b/EC-GN-JA-PCF/target/main/c++/GAMs/JABitSumGAM/JABitSumGAM.h new file mode 100644 index 0000000..462f62b --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JABitSumGAM/JABitSumGAM.h @@ -0,0 +1,81 @@ +/** + * @file JABitSumGAM.h + * @brief Header file for class JABitSumGAM + * @date Feb 10, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JABitSumGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JABitSumGAM_H_ +#define GAMS_JABitSumGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include "stdio.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +class JABitSumGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JABitSumGAM(); + + virtual ~JABitSumGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + // Input signals + MARTe::uint32 *input0; + MARTe::uint32 *input1; + MARTe::uint32 *input2; + MARTe::uint32 *input3; + MARTe::uint32 *input4; + MARTe::uint32 *input5; + MARTe::uint32 *input6; + MARTe::uint32 *input7; + + // Output signals + MARTe::uint8 *output; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JABitSumGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JABitSumGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/c++/GAMs/JABitSumGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JABitSumGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JABitSumGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/c++/GAMs/JABitSumGAM/Makefile.inc new file mode 100644 index 0000000..f57063b --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JABitSumGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JABitSumGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JABitSumGAM$(LIBEXT) \ + $(BUILD_DIR)/JABitSumGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.cpp b/EC-GN-JA-PCF/target/main/c++/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.cpp new file mode 100644 index 0000000..99ba1f5 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.cpp @@ -0,0 +1,309 @@ +/** + * @file JAConditionalSignalUpdateGAM.cpp + * @brief Source file for class JAConditionalSignalUpdateGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAConditionalSignalUpdateGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAConditionalSignalUpdateGAM.h" +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAConditionalSignalUpdateGAM::JAConditionalSignalUpdateGAM() { + inputSignals = NULL_PTR(void **); + inputSignalTypes = NULL_PTR(MARTe::TypeDescriptor *); + values = NULL_PTR(MARTe::uint32 *); + valuesCount = 0u; + outputSignals = NULL_PTR(MARTe::uint32 **); + defaultValues = NULL_PTR(MARTe::uint32 **); + needsReset = false; + expectedValues = NULL_PTR(MARTe::uint32 *); + expectedValuesCount = 0u; + operation = And; + comparators = NULL_PTR(ComparisonMode *); +} + +JAConditionalSignalUpdateGAM::~JAConditionalSignalUpdateGAM() { + if (outputSignals != NULL_PTR(MARTe::uint32 **)) { + delete[] outputSignals; + } + if (inputSignals != NULL_PTR(void **)) { + delete[] inputSignals; + } + if (inputSignalTypes != NULL_PTR(MARTe::TypeDescriptor *)) { + delete[] inputSignalTypes; + } + if (values != NULL_PTR(MARTe::uint32 *)) { + delete[] values; + } + if (comparators != NULL_PTR(ComparisonMode *)) { + delete[] comparators; + } + if (defaultValues != NULL_PTR(MARTe::uint32 **)) { + delete[] defaultValues; + } +} + +bool JAConditionalSignalUpdateGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + // Read expected values. + AnyType valuesArray = data.GetType("ExpectedValues"); + + if (valuesArray.GetDataPointer() != NULL) { + expectedValuesCount = valuesArray.GetNumberOfElements(0u); + + expectedValues = new uint32[expectedValuesCount]; + + Vector valuesVector(expectedValues, expectedValuesCount); + ok = (data.Read("ExpectedValues", valuesVector)); + } + } + if (ok) { + // Read comparators. + AnyType comparatorsArray = data.GetType("Comparators"); + if (comparatorsArray.GetDataPointer() != NULL) { + uint32 count; + if (ok) { + count = comparatorsArray.GetNumberOfElements(0u); + ok = count == expectedValuesCount; + } + if (ok) { + comparators = new ComparisonMode[count]; + StreamString* comp = new StreamString[count]; + Vector compVector(comp, count); + + ok = (data.Read("Comparators", compVector)); + + if (ok) { + for (uint32 i = 0; i < count; ++i) { + if (comp[i] == "EQUALS") { + comparators[i] = Equals; + } else if (comp[i] == "NOT") { + comparators[i] = Not; + } else if (comp[i] == "GREATER") { + comparators[i] = Greater; + } else if (comp[i] == "EQUALS_OR_GREATER") { + comparators[i] = EqualsOrGreater; + } else if (comp[i] == "LESS") { + comparators[i] = Less; + } else if (comp[i] == "EQUALS_OR_LESS") { + comparators[i] = EqualsOrLess; + } else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Comparator %s is not defined.", comp[i].Buffer()); + } + } + } + delete[] comp; + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Expected values and operators shall have the same " + "number of elements."); + } + } else { + // Create default comparators (equals) when they aren't provided in the configuration. + comparators = new ComparisonMode[expectedValuesCount]; + for (uint32 i = 0; i < expectedValuesCount; ++i) { + comparators[i] = Equals; + } + } + } + if (ok) { + MARTe::StreamString operationStr; + if (data.Read("Operation", operationStr)) { + if (operationStr == "AND") { + operation = And; + } + else if (operationStr == "OR") { + operation = Or; + } + else if (operationStr == "NOR") { + operation = Nor; + } + else if (operationStr == "XOR") { + operation = Xor; + } + else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Operation %s is not defined", operationStr.Buffer()); + } + } + } + if (ok) { + // Read output signal values to be set. + AnyType valuesArray = data.GetType("Values"); + ok = (valuesArray.GetDataPointer() != NULL); + + if (ok) { + valuesCount = valuesArray.GetNumberOfElements(0u); + ok = valuesCount > 0u; + } + if (ok) { + values = new uint32[valuesCount]; + + Vector valuesVector(values, valuesCount); + ok = (data.Read("Values", valuesVector)); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Values shall be defined."); + } + } + return ok; +} + +bool JAConditionalSignalUpdateGAM::Setup() { + using namespace MARTe; + bool ok = numberOfInputSignals == (expectedValuesCount + numberOfOutputSignals); + if (ok) { + inputSignals = new void*[expectedValuesCount]; + defaultValues = new uint32*[numberOfOutputSignals]; + uint32 i; + for (i = 0u; i < expectedValuesCount; i++) { + inputSignals[i] = GetInputSignalMemory(i); + } + for (; i < numberOfInputSignals; i++) { + defaultValues[i - expectedValuesCount] = reinterpret_cast(GetInputSignalMemory(i)); + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Number of input signals shall be equal to number " + "of expected values plus number of output signals."); + } + if (ok) { + inputSignalTypes = new TypeDescriptor[expectedValuesCount]; + uint32 i; + for (i = 0u; (i < expectedValuesCount) && (ok); i++) { + inputSignalTypes[i] = GetSignalType(InputSignals, i); + ok = ((inputSignalTypes[i] == UnsignedInteger32Bit) || (inputSignalTypes[i] == UnsignedInteger16Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, i, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint16", signalName.Buffer()); + } + } + } + if (ok) { + ok = numberOfOutputSignals == valuesCount; + if (ok) { + ok = numberOfOutputSignals > 0u; + if (ok) { + outputSignals = new uint32*[numberOfOutputSignals]; + uint32 i; + for (i = 0u; i < numberOfOutputSignals; i++) { + outputSignals[i] = reinterpret_cast(GetOutputSignalMemory(i)); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one output signal shall be defined"); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Number of output signals shall be the same as " + "number of provided values."); + } + } + + return ok; +} + +bool JAConditionalSignalUpdateGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + needsReset = false; + return true; +} + +bool JAConditionalSignalUpdateGAM::Execute() { + if (!needsReset) { + bool eventDetected = expectedValuesCount == 0; + if (!eventDetected) { + if (operation == Or) { + MARTe::uint32 j; + for (j = 0; (j < expectedValuesCount) && (!eventDetected); j++) { + eventDetected = Compare(j); + } + } + else if (operation == Nor) { + MARTe::uint32 j; + for (j = 0; (j < expectedValuesCount) && (!eventDetected); j++) { + eventDetected = Compare(j); + } + eventDetected = !eventDetected; + } + else if (operation == And) { + MARTe::uint32 j; + eventDetected = Compare(0); + for (j = 1; (j < expectedValuesCount); j++) { + eventDetected &= Compare(j); + } + } + else if (operation == Xor) { + MARTe::uint32 j; + MARTe::uint32 eventDetectedUint32; + if (inputSignalTypes[0] == MARTe::UnsignedInteger32Bit) { + eventDetectedUint32 = *static_cast(inputSignals[0]); + } + else { + eventDetectedUint32 = *static_cast(inputSignals[0]); + } + for (j = 1; (j < expectedValuesCount); j++) { + eventDetectedUint32 ^= Compare(j); + } + eventDetected = (eventDetectedUint32 == 1u); + } + } + if (eventDetected) { + needsReset = true; + MARTe::uint32 i; + for (i = 0u; i < numberOfOutputSignals; ++i) { + *outputSignals[i] = values[i]; + MARTe::StreamString signalName; + (void) GetSignalName(MARTe::OutputSignals, i, signalName); + } + } + else { + MARTe::uint32 i; + for (i = 0u; i < numberOfOutputSignals; ++i) { + *outputSignals[i] = *defaultValues[i]; + } + } + } + return true; +} + +bool JAConditionalSignalUpdateGAM::Compare(MARTe::uint32 index) { + if (inputSignalTypes[index] == MARTe::UnsignedInteger32Bit) { + return Compare(index); + } + return Compare(index); +} + +CLASS_REGISTER(JAConditionalSignalUpdateGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.h b/EC-GN-JA-PCF/target/main/c++/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.h new file mode 100644 index 0000000..2cf5c5d --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.h @@ -0,0 +1,180 @@ +/** + * @file JAConditionalSignalUpdateGAM.h + * @brief Header file for class JAConditionalSignalUpdateGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAConditionalSignalUpdateGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JACONDITIONALSIGNALUPDATEGAM_H_ +#define GAMS_JACONDITIONALSIGNALUPDATEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that writes predefined values to output signals when a condition is met. + * If there are no conditional signals provided, the condition is presumed to be met. + * + * +ASYNCShotlengthControlGAM = { + * Class = JAConditionalSignalUpdateGAM + * Operation = OR // Logical operation performed between conditional signals + * // Supported values: AND, OR, XOR, NOR + * // Default: AND + * ExpectedValues = {1 1} // Values to which conditional signals will be compared. + * Comparators = {EQUALS EQUALS} // Operator between conditional signal an expected value + * // Supported values: EQUALS, NOT, GREATER, EQUALS_OR_GREATER, LESS, EQUALS_OR_LESS + * // Default: EQUALS + * Values = {0 3} // Values that will be written to output signals when condition is met. + * InputSignals = { + * // Conditional Signals + * SHOTLEN_FLAG = { + * DataSource = DDB1 + * Type = uint32 + * } + * MODE_SHOTLEN_FLAG = { + * DataSource = DDB1 + * Type = uint32 + * } + * // Default values (set to output signals before the condition is met) + * APS_SWON = { // APS_SWON will keep the value from previous state. + * DataSource = DDB1 + * Type = uint32 + * } + * BPS_SWON_DEFAULT = { // BPS_SWON will be set to 7 before condition is met. + * DataSource = DDB1 + * Type = uint32 + * Default = 7 + * } + * } + * OutputSignals = { + * APS_SWON = { + * DataSource = DDB1 + * Type = uint32 + * } + * BPS_SWON = { + * DataSource = DDB1 + * Type = uint32 + * } + * } + * } + */ +class JAConditionalSignalUpdateGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAConditionalSignalUpdateGAM(); + + virtual ~JAConditionalSignalUpdateGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + /** + * @brief Does the input signal at provided index have the expected value. + * @param[in] index of the signal. + * @return true if the signal has expected value. + */ + bool Compare(MARTe::uint32 index); + + template + bool Compare(MARTe::uint32 index); + + enum OperationMode { + And, Or, Xor, Nor + }; + + enum ComparisonMode { + Equals, Not, Greater, EqualsOrGreater, Less, EqualsOrLess + }; + + // Input signals + void **inputSignals; + + MARTe::TypeDescriptor *inputSignalTypes; + + // Condition operation. + OperationMode operation; + + // Array of expected values of input signals. + MARTe::uint32* expectedValues; + + // Expected values count (must be equal to numberOfInputSignals) + MARTe::uint32 expectedValuesCount; + + // Array of comparators + ComparisonMode* comparators; + + // Values to be written on output signals when input signal has the expected value. + MARTe::uint32 *values; + + // Number of values (must be equal to numberOfOutputSignals) + MARTe::uint32 valuesCount; + + // Output signals + MARTe::uint32 **outputSignals; + + // Default values of output signals + MARTe::uint32 **defaultValues; + + // Were output signals already set and we are waiting for a state change before they are set again. + bool needsReset; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +template +bool JAConditionalSignalUpdateGAM::Compare(MARTe::uint32 index) { + switch (comparators[index]) { + case Equals: + return *static_cast(inputSignals[index]) == static_cast(expectedValues[index]); + case Not: + return *static_cast(inputSignals[index]) != static_cast(expectedValues[index]); + case Greater: + return *static_cast(inputSignals[index]) > static_cast(expectedValues[index]); + case EqualsOrGreater: + return *static_cast(inputSignals[index]) >= static_cast(expectedValues[index]); + case Less: + return *static_cast(inputSignals[index]) < static_cast(expectedValues[index]); + default: // case EqualsOrLess: + return *static_cast(inputSignals[index]) <= static_cast(expectedValues[index]); + } +} + +#endif /* GAMS_JACONDITIONALSIGNALUPDATEGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JAConditionalSignalUpdateGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/c++/GAMs/JAConditionalSignalUpdateGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JAConditionalSignalUpdateGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JAConditionalSignalUpdateGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/c++/GAMs/JAConditionalSignalUpdateGAM/Makefile.inc new file mode 100644 index 0000000..5853027 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JAConditionalSignalUpdateGAM/Makefile.inc @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAConditionalSignalUpdateGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAConditionalSignalUpdateGAM$(LIBEXT) \ + $(BUILD_DIR)/JAConditionalSignalUpdateGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JAMessageGAM/JAMessageGAM.cpp b/EC-GN-JA-PCF/target/main/c++/GAMs/JAMessageGAM/JAMessageGAM.cpp new file mode 100644 index 0000000..50ca308 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JAMessageGAM/JAMessageGAM.cpp @@ -0,0 +1,347 @@ +/** + * @file JAMessageGAM.cpp + * @brief Source file for class JAMessageGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAMessageGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "JAMessageGAM.h" +#include "MessageI.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +template +bool Compare(JAMessageGAM::ComparisonMode comparator, void *inputSignal, U expectedValue) { + switch (comparator) { + case JAMessageGAM::Equals: + return *static_cast(inputSignal) == expectedValue; + case JAMessageGAM::Not: + return *static_cast(inputSignal) != expectedValue; + case JAMessageGAM::Greater: + return *static_cast(inputSignal) > expectedValue; + case JAMessageGAM::EqualsOrGreater: + return *static_cast(inputSignal) >= expectedValue; + case JAMessageGAM::Less: + return *static_cast(inputSignal) < expectedValue; + default: // case EqualsOrLess: + return *static_cast(inputSignal) <= expectedValue; + } +} + +JAMessageGAM::JAMessageGAM() { + inputSignals = NULL_PTR(void **); + inputSignalTypes = NULL_PTR(MARTe::TypeDescriptor *); + operation = And; + needsReset = false; + expectedValuesInt = NULL_PTR(MARTe::uint64 *); + expectedValuesFloat = NULL_PTR(MARTe::float64 *); + intValuesCount = 0u; + floatValuesCount = 0u; + comparators = NULL_PTR(ComparisonMode *); +} + +JAMessageGAM::~JAMessageGAM() { + if (inputSignals != NULL_PTR(void **)) { + delete[] inputSignals; + } + if (inputSignalTypes != NULL_PTR(MARTe::TypeDescriptor *)) { + delete[] inputSignalTypes; + } + if (expectedValuesInt != NULL_PTR(MARTe::uint64 *)) { + delete[] expectedValuesInt; + } + if (expectedValuesFloat != NULL_PTR(MARTe::float64 *)) { + delete[] expectedValuesFloat; + } + if (comparators != NULL_PTR(ComparisonMode *)) { + delete[] comparators; + } +} + +bool JAMessageGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + // Read expected integer values. + AnyType valuesArray = data.GetType("ExpectedIntValues"); + bool intValuesProvided = (valuesArray.GetDataPointer() != NULL); + + if (intValuesProvided) { + intValuesCount = valuesArray.GetNumberOfElements(0u); + } + if (intValuesProvided) { + expectedValuesInt = new uint64[intValuesCount]; + + Vector valuesVector(expectedValuesInt, intValuesCount); + ok = (data.Read("ExpectedIntValues", valuesVector)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Failed to read ExpectedIntValues."); + return ok; + } + } + // Read expected float values. + valuesArray = data.GetType("ExpectedFloatValues"); + bool floatValuesProvided = (valuesArray.GetDataPointer() != NULL); + + if (floatValuesProvided) { + floatValuesCount = valuesArray.GetNumberOfElements(0u); + } + if (floatValuesProvided) { + expectedValuesFloat = new float64[floatValuesCount]; + + Vector valuesVector(expectedValuesFloat, floatValuesCount); + ok = (data.Read("ExpectedFloatValues", valuesVector)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Failed to read ExpectedFloatValues."); + return ok; + } + } + + ok = (floatValuesCount + intValuesCount) > 0u; + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "ExpectedFloatValues and or ExpectedIntValues shall be defined."); + } + } + if (ok) { + // Read comparators. + AnyType comparatorsArray = data.GetType("Comparators"); + if (comparatorsArray.GetDataPointer() != NULL) { + uint32 count = comparatorsArray.GetNumberOfElements(0u); + ok = count == (intValuesCount + floatValuesCount); + if (ok) { + comparators = new ComparisonMode[count]; + StreamString* comp = new StreamString[count]; + Vector compVector(comp, count); + + ok = (data.Read("Comparators", compVector)); + + if (ok) { + for (uint32 i = 0; i < count; ++i) { + if (comp[i] == "EQUALS") { + comparators[i] = Equals; + } else if (comp[i] == "NOT") { + comparators[i] = Not; + } else if (comp[i] == "GREATER") { + comparators[i] = Greater; + } else if (comp[i] == "EQUALS_OR_GREATER") { + comparators[i] = EqualsOrGreater; + } else if (comp[i] == "LESS") { + comparators[i] = Less; + } else if (comp[i] == "EQUALS_OR_LESS") { + comparators[i] = EqualsOrLess; + } else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Comparator %s is not defined.", comp[i].Buffer()); + } + } + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Expected values and operators shall have the same " + "number of elements."); + } + } else { + uint32 count = intValuesCount + floatValuesCount; + if (ok) { + // Create default comparators (equals) when they aren't provided in the configuration. + comparators = new ComparisonMode[count]; + for (uint32 i = 0; i < count; ++i) { + comparators[i] = Equals; + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Expected values and operators shall have the same " + "number of elements."); + } + } + } + if (ok) { + MARTe::StreamString operationStr; + if (data.Read("Operation", operationStr)) { + if (operationStr == "AND") { + operation = And; + } + else if (operationStr == "OR") { + operation = Or; + } + else if (operationStr == "NOR") { + operation = Nor; + } + else if (operationStr == "XOR") { + operation = Xor; + } + else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Operation %s is not defined", operationStr.Buffer()); + } + } + } + if (ok) { + ok = (Size() == 1); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "A Message object shall be added to this container"); + } + } + if (ok) { + eventMsg = Get(0); + ok = (eventMsg.IsValid()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "A valid Message shall be added to this container"); + } + } + return ok; +} + +bool JAMessageGAM::Setup() { + using namespace MARTe; + bool ok = numberOfInputSignals == (intValuesCount + floatValuesCount); + if (ok) { + ok = numberOfInputSignals > 0u; + if (ok) { + inputSignals = new void*[numberOfInputSignals]; + uint32 i; + for (i = 0u; i < numberOfInputSignals; i++) { + inputSignals[i] = GetInputSignalMemory(i); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one input signal shall be defined"); + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Number of input signals shall be the same as " + "number of expected values."); + } + if (ok) { + inputSignalTypes = new TypeDescriptor[numberOfInputSignals]; + uint32 i; + for (i = 0u; (i < numberOfInputSignals) && (ok); i++) { + TypeDescriptor inputType = GetSignalType(InputSignals, i); + inputSignalTypes[i] = inputType; + ok = (inputType == UnsignedInteger32Bit) || (inputType == SignedInteger32Bit) || + (inputType == UnsignedInteger16Bit) || (inputType == SignedInteger16Bit) || + (inputType == UnsignedInteger8Bit) || (inputType == SignedInteger8Bit) || + (inputType == Float64Bit) || (inputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, i, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "Signal %s shall be defined as 32/16/8 bit signed/unsigned integer " + "or as 64/32 float.", signalName.Buffer()); + } + } + } + + return ok; +} + +bool JAMessageGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + needsReset = false; + return true; +} + +bool JAMessageGAM::Execute() { + using namespace MARTe; + bool ok = true; + bool eventDetected = false; + uint32 inputPortIndex = 0; + uint32 intIndex = 0; + uint32 floatIndex = 0; + if (operation == Or) { + for (inputPortIndex = 0; (inputPortIndex < numberOfInputSignals) && (!eventDetected); inputPortIndex++) { + eventDetected = Compare(inputPortIndex, floatIndex, intIndex); + } + } + else if (operation == Nor) { + for (inputPortIndex = 0; (inputPortIndex < numberOfInputSignals) && (!eventDetected); inputPortIndex++) { + eventDetected = Compare(inputPortIndex, floatIndex, intIndex); + } + eventDetected = !eventDetected; + } + else if (operation == And) { + eventDetected = Compare(0, floatIndex, intIndex); + for (inputPortIndex = 1; (inputPortIndex < numberOfInputSignals); inputPortIndex++) { + eventDetected &= Compare(inputPortIndex, floatIndex, intIndex); + } + } + else if (operation == Xor) { + uint32 eventDetectedUInt32 = Compare(inputPortIndex, floatIndex, intIndex); + for (inputPortIndex = 1; (inputPortIndex < numberOfInputSignals); inputPortIndex++) { + eventDetectedUInt32 ^= Compare(inputPortIndex, floatIndex, intIndex); + } + eventDetected = (eventDetectedUInt32 == 1u); + } + if (eventDetected) { + if (!needsReset) { + ok = (MessageI::SendMessage(eventMsg, this) == ErrorManagement::NoError); + needsReset = true; + } + } + return ok; +} + +bool JAMessageGAM::Compare(MARTe::uint32 inputPortIndex, MARTe::uint32 &floatValueIndex, MARTe::uint32 &intValueIndex) { + using namespace MARTe; + bool ret = false; + if (inputSignalTypes[inputPortIndex] == UnsignedInteger32Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == SignedInteger32Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == UnsignedInteger16Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == SignedInteger16Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == UnsignedInteger8Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == SignedInteger8Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == Float64Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesFloat[floatValueIndex]); + ++floatValueIndex; + } + else { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesFloat[floatValueIndex]); + ++floatValueIndex; + } + return ret; +} + +CLASS_REGISTER(JAMessageGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JAMessageGAM/JAMessageGAM.h b/EC-GN-JA-PCF/target/main/c++/GAMs/JAMessageGAM/JAMessageGAM.h new file mode 100644 index 0000000..0cdb315 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JAMessageGAM/JAMessageGAM.h @@ -0,0 +1,149 @@ +/** + * @file JAMessageGAM.h + * @brief Header file for class JAMessageGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAMessageGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAMESSAGEGAM_H_ +#define GAMS_JAMESSAGEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include "Message.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that sends a message when input signals have expected values. Message will not be sent multiple + * times without first changing the application state. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ * +MessageGAM = {
+ *      Class = JAMessageGAM
+ *      Operation = AND // Accepted values are: AND, OR, XOR, NOR. Default value is AND.
+ *      ExpectedIntValues = {1 10} // Expected values for input signals of integral type.
+ *      ExpectedFloatValues = {3.5} // Expected values for float signals of floting point type.
+ *      Comparators = {EQUALS GREATER NOT} // Accepted values are: EQUALS, NOT, GREATER, EQUALS_OR_GREATER, LESS, EQUALS_OR_LESS
+ *                                         // Comparators element is optional. Default comparator is EQUALS.
+ *      InputSignals = {
+ *          Sig1 = {
+ *              DataSource = EPICSCAInput
+ *              Type = uint32
+ *          }
+ *          Sig2 = {
+ *              DataSource = EPICSCAInput
+ *              Type = float32
+ *          }
+ *          Sig3 = {
+ *              DataSource = EPICSCAInput
+ *              Type = uint32
+ *          }
+ *      }
+ *      +Event = { // Message to be sent when condition is true.
+ *          Class = Message
+ *          Destination = StateMachine
+ *          Function = GoDisabled
+ *      }
+ *  }
+ * 
+ * This example will send Event message when Sig1 == 1 && Sig2 > 3.5 && Sig3 != 10 + */ +class JAMessageGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAMessageGAM(); + + virtual ~JAMessageGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + + enum ComparisonMode { + Equals, Not, Greater, EqualsOrGreater, Less, EqualsOrLess + }; + +private: + /** + * @brief Does the input signal at provided index have the expected value. + * @param[in] index of the signal. + * @param[out] floatValueIndex lookup index for expected float values array. + * @param[out] intValueIndex lookup index for expected integer values array. + * @return true if the signal has expected value. + */ + bool Compare(MARTe::uint32 index, MARTe::uint32 &floatValueIndex, MARTe::uint32 &intValueIndex); + + enum OperationMode { + And, Or, Xor, Nor + }; + + // Input signals + void **inputSignals; + + MARTe::TypeDescriptor *inputSignalTypes; + + // Condition operation. + OperationMode operation; + + // Message to be sent when conditions are met. + MARTe::ReferenceT eventMsg; + + // Was the message already sent and we are waiting for a state change before next message can be sent. + bool needsReset; + + // Array of expected integer values of input signals. + MARTe::uint64* expectedValuesInt; + + // Array of expected float values for input signals. + MARTe::float64* expectedValuesFloat; + + // Expected integer values count (must be equal to numberOfInputSignals - floatValuesCount) + MARTe::uint32 intValuesCount; + + // Expected integer values count (must be equal to numberOfInputSignals - floatValuesCount) + MARTe::uint32 floatValuesCount; + + // Array of comparators + ComparisonMode* comparators; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAMESSAGEGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JAMessageGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/c++/GAMs/JAMessageGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JAMessageGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JAMessageGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/c++/GAMs/JAMessageGAM/Makefile.inc new file mode 100644 index 0000000..e2e2415 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JAMessageGAM/Makefile.inc @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAMessageGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAMessageGAM$(LIBEXT) \ + $(BUILD_DIR)/JAMessageGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JAModeControlGAM/JAModeControlGAM.cpp b/EC-GN-JA-PCF/target/main/c++/GAMs/JAModeControlGAM/JAModeControlGAM.cpp new file mode 100644 index 0000000..c55e6d0 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JAModeControlGAM/JAModeControlGAM.cpp @@ -0,0 +1,154 @@ +/** + * @file JAModeControlGAM.cpp + * @brief Source file for class JAModeControlGAM + * @date Jan, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAModeControlGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAModeControlGAM.h" +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAModeControlGAM::JAModeControlGAM() { + inputSignals = NULL_PTR(MARTe::uint32 **); + outputSignal = NULL_PTR(MARTe::uint32 *); + pulseLengthLimit = 360000000u; + resetRemainingTime = true; + previousState = 0u; +} + +JAModeControlGAM::~JAModeControlGAM() { + if (inputSignals != NULL_PTR(MARTe::uint32 **)) { + delete[] inputSignals; + } +} + +bool JAModeControlGAM::Initialise(MARTe::StructuredDataI & data) { + /* read hard coded on cfg file parameter values by using key name. */ + using namespace MARTe; + return GAM::Initialise(data); +} + +bool JAModeControlGAM::Setup() { + /* read GAM Input signal */ + using namespace MARTe; + /* read 4 mode bits and 4 shot length limit values */ + + bool ok = numberOfInputSignals == 11; + if (ok) { + uint32 i; + for (i = 0u; (i < numberOfInputSignals) && (ok); i++) { + TypeDescriptor inputType = GetSignalType(InputSignals, i); + ok = inputType == UnsignedInteger32Bit; + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, i, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "InputSignel %s shall be defined as uint32", signalName.Buffer()); + } + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Eleven input signals shall be defined."); + } + if (ok) { + ok = numberOfOutputSignals == 1; + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "One output signal shall be defined."); + } + else { + TypeDescriptor type = GetSignalType(OutputSignals, 0); + ok = type == UnsignedInteger32Bit; + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, 0, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + inputSignals = new uint32*[numberOfInputSignals]; + uint32 i; + for (i = 0u; i < 11; i++) { + inputSignals[i] = reinterpret_cast(GetInputSignalMemory(i)); + } + } + return ok; +} + +bool JAModeControlGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + *outputSignal = 0u; + previousState = 0u; + resetRemainingTime = true; + return true; +} + +bool JAModeControlGAM::Execute() { + using namespace MARTe; + //When RT state goes to RFON state, update the limit. + if(previousState == 0u && *inputSignals[8] == 1u && resetRemainingTime) { + rfonTime = *inputSignals[9]; + resetRemainingTime = false; + pulseLengthLimit = CalcPulseLengthLimit(inputSignals); + REPORT_ERROR(ErrorManagement::Debug, "Pulse Length was set to Limit:%d", pulseLengthLimit); + } + // Turn on the flag during RFON if the pulse legth over the limit. + if ((*inputSignals[9] - rfonTime <= pulseLengthLimit) && (previousState == 1u)) { + *outputSignal = 0u; + return true; + } else if(*inputSignals[9] == 1u){ + resetRemainingTime = true; + *outputSignal = 1u; + } + + previousState = *inputSignals[8]; + return true; +} + + +MARTe::uint32 JAModeControlGAM::CalcPulseLengthLimit(MARTe::uint32 **inputSignals) { + if (*inputSignals[0] == 1) { + return *inputSignals[1]; + } else if (*inputSignals[2] == 1) { + return *inputSignals[3]; + } else if (*inputSignals[4] == 1) { + return *inputSignals[5]; + } else if (*inputSignals[6] == 1) { + return *inputSignals[7]; + } else { + return 3600000000;//us + } +} + + +CLASS_REGISTER(JAModeControlGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JAModeControlGAM/JAModeControlGAM.h b/EC-GN-JA-PCF/target/main/c++/GAMs/JAModeControlGAM/JAModeControlGAM.h new file mode 100644 index 0000000..e9041ce --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JAModeControlGAM/JAModeControlGAM.h @@ -0,0 +1,149 @@ +/** + * @file JAModeControlGAM.h + * @brief Header file for class JAModeControlGAM + * @date Jan, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAModeControlGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAMODECONTROLGAM_H_ +#define GAMS_JAMODECONTROLGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that check the pulse lenght limit. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +ModeLimitGAM = {
+ *           Class = JAModeControlGAM
+ *           InputSignals = {
+ *               PLC_MODE1 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD1_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               PLC_MODE2 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD2_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               PLC_MODE3 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD3_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               PLC_MODE4 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD4_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               HVInjection = {
+ *               	DataSource = RealTimeThreadAsyncBridge
+ *               	Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * If MODE1 is ON and Time is exceed MD1_SHOTLEN_LIM, MODE_SHOTLEN_FLAG become ON. + */ + +class JAModeControlGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAModeControlGAM(); + + virtual ~JAModeControlGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + + MARTe::uint32 CalcPulseLengthLimit(MARTe::uint32 **inputSignals); + + // Input signals + MARTe::uint32 **inputSignals; + + // Output signals + MARTe::uint32 *outputSignal; + + // Calculated pulse lenght limit. + MARTe::uint32 pulseLengthLimit; + + // Amount of time passed per execution cycle. + MARTe::uint32 rfonTime; + + // reset flag + bool resetRemainingTime; + MARTe::uint32 previousState; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAMODECONTROLGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JAModeControlGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/c++/GAMs/JAModeControlGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JAModeControlGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JAModeControlGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/c++/GAMs/JAModeControlGAM/Makefile.inc new file mode 100644 index 0000000..2654a66 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JAModeControlGAM/Makefile.inc @@ -0,0 +1,52 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAModeControlGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAModeControlGAM$(LIBEXT) \ + $(BUILD_DIR)/JAModeControlGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.cpp b/EC-GN-JA-PCF/target/main/c++/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.cpp new file mode 100644 index 0000000..06de1df --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.cpp @@ -0,0 +1,460 @@ +/** + * @file JAPreProgrammedGAM.cpp + * @brief Source file for class JAPreProgrammedGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAPreProgrammedGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "CLASSMETHODREGISTER.h" +#include "File.h" +#include "JAPreProgrammedGAM.h" +#include "MessageI.h" +#include "RegisteredMethodsMessageFilter.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +// How often output signals are updated. +const MARTe::uint32 cycleMs = 10u; + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAPreProgrammedGAM::JAPreProgrammedGAM() : + GAM() { + using namespace MARTe; + filenameSignalIndex = 0u; + timeSignal = NULL_PTR(MARTe::int32 *); + loadTriggerSignal = NULL_PTR(MARTe::uint32 *); + fhpsrefSignal = NULL_PTR(MARTe::float32 *); + rfonStateSignal = NULL_PTR(MARTe::uint32 *); + + valueSignals = NULL_PTR(MARTe::float32 **); + preProgrammedValues = NULL_PTR(MARTe::float32 **); + preProgrammedTime = NULL_PTR(MARTe::int32 *); + fileLoadedSignal = NULL_PTR(MARTe::uint32 *); + fileLoadErrorOutput = NULL_PTR(MARTe::uint32 *); + + startTime = 0u; + numberOfPreProgrammedValues = 0u; + numberOfPreProgrammedTimeRows = 0u; + currentRow = 0u; + mode = None; + preProgrammedExecutaionPeriodMs = 0u; + msCounter = 0u; + preProgrammedRow = 0u; + resetOutputSignals = false; + readOnce = true; +} + +JAPreProgrammedGAM::~JAPreProgrammedGAM() { + DeleteArrays(); + if (valueSignals != NULL_PTR(MARTe::float32 **)) { + delete[] valueSignals; + } +} + +bool JAPreProgrammedGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("Directory", directory); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Directory shall be specified"); + } + } + if (ok) { + ok = data.Read("PreProgrammedPeriodMs", preProgrammedExecutaionPeriodMs); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Directory shall be specified"); + } + } + return ok; +} + +bool JAPreProgrammedGAM::Setup() { + using namespace MARTe; + //Signal number check. + bool ok = (numberOfInputSignals == 4u); + if (ok) { + ok = (numberOfOutputSignals > 2u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "At least two output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Four input signals with the filename and file load trigger shall be defined"); + } + //Input signals type consistency check. + if (ok) { + StreamString signalName = "Filename"; + ok = GetSignalIndex(InputSignals, filenameSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Filename input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, filenameSignalIndex); + ok = (inputType == CharString); + if (!ok) { + ok = (inputType == Character8Bit); + } + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, filenameSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as string", signalName.Buffer()); + } + } + } + if (ok) { + StreamString signalName = "CSV_LOAD"; + uint32 loadSignalIndex; + ok = GetSignalIndex(InputSignals, loadSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "CSV_LOAD input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, loadSignalIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, loadSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } else { + loadTriggerSignal = reinterpret_cast(GetInputSignalMemory(loadSignalIndex)); + } + } + } + if (ok) { + StreamString signalName = "FHPS_REF"; + uint32 fhpsrefIndex; + ok = GetSignalIndex(InputSignals, fhpsrefIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "FHPS_REF input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, fhpsrefIndex); + ok = (inputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, fhpsrefIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } else { + fhpsrefSignal = reinterpret_cast(GetInputSignalMemory(fhpsrefIndex)); + } + } + } + if (ok) { + StreamString signalName = "RFON"; + uint32 rfonIndex; + ok = GetSignalIndex(InputSignals, rfonIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "RFON input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, rfonIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, rfonIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } else { + rfonStateSignal = reinterpret_cast(GetInputSignalMemory(rfonIndex)); + } + } + } + + //Output signals type check. + if (ok) { + TypeDescriptor timeType = GetSignalType(OutputSignals, 0); + ok = (timeType == SignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, 0, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as int32", signalName.Buffer()); + } + + uint32 i; + for (i = 1u; (i <= 6) && (ok); i++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, i); + ok = (outputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, i, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } + } + + if (ok) { + TypeDescriptor fileLoadedType = GetSignalType(OutputSignals, 7u); + ok = (fileLoadedType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, 6u, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + if (ok) { + TypeDescriptor fileLoadErrorOutputType = GetSignalType(OutputSignals, 8u); + ok = (fileLoadErrorOutputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, 7u, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + + //Register signal memory + if (ok) { + timeSignal = reinterpret_cast(GetOutputSignalMemory(0)); + valueSignals = new float32*[6u]; + uint32 i; + for (i = 1u; i <= 6u; i++) { + valueSignals[i - 1] = reinterpret_cast(GetOutputSignalMemory(i)); + } + fileLoadedSignal = reinterpret_cast(GetOutputSignalMemory(7u)); + fileLoadErrorOutput = reinterpret_cast(GetOutputSignalMemory(8u)); + } + return ok; +} + +bool JAPreProgrammedGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + bool ok = true; + if (strcmp(nextStateName, "WaitReady") == 0) { + mode = LoadFileMode; + resetOutputSignals = true; + // Reset read once flag when reentering WaitReady state. + readOnce = true; + } else if (strcmp(nextStateName, "WaitPermit") == 0) { + mode = LoadFileMode; + resetOutputSignals = true; + currentRow = 0u; + } else if (strcmp(nextStateName, "WaitHVON_PREP") == 0 || strcmp(nextStateName, "WaitHVON_SDN_PREP") == 0) { + ok = numberOfPreProgrammedTimeRows > 0; + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::IllegalOperation, "Entering PreProgrammed mode without any waveform data."); + } + mode = PreProgrammedMode; + msCounter = cycleMs; + currentRow = 0u; + } else { + mode = None; + } + return ok; +} + +bool JAPreProgrammedGAM::LoadFile() { + using namespace MARTe; + + DeleteArrays(); + + bool ok = true; + + const MARTe::char8 * const filenameSignal = reinterpret_cast(GetInputSignalMemory(filenameSignalIndex)); + //Prepare full path to the configuration file. + StreamString filename = directory; + filename += DIRECTORY_SEPARATOR; + filename += filenameSignal; + REPORT_ERROR(MARTe::ErrorManagement::Debug, "Opening file %s", filename.Buffer()); + + //parse prepro configuration file into two arrays(time, values). + File f; + ok = f.Open(filename.Buffer(), BasicFile::ACCESS_MODE_R); + if (ok) { + //Count up number of file Rows. + numberOfPreProgrammedTimeRows = 0u; + StreamString tokenLine; + while (f.GetLine(tokenLine)) { + if (tokenLine[0] != '#' && tokenLine[0] != '-') { + numberOfPreProgrammedTimeRows++; + } + tokenLine = ""; + } + //Count up number of file lines + numberOfPreProgrammedValues = 0u; + f.Seek(0); + uint32 t = 0u; + tokenLine = ""; + while ((ok) && (f.GetLine(tokenLine))) { + // Skip comment line and minus time + if (tokenLine[0] == '#' || tokenLine[0] == '-') { + tokenLine = ""; + continue; + } + // Prepare two arrays at first. + if (numberOfPreProgrammedValues == 0) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + while (tokenLine.GetToken(token, ",", ignored)) { + numberOfPreProgrammedValues++; + token = ""; + } +REPORT_ERROR(MARTe::ErrorManagement::ParametersError,"numberOfPreProgrammedVal %d", numberOfPreProgrammedValues); + ok = (numberOfPreProgrammedValues == 7u);//From time row to FHPS row. + numberOfPreProgrammedValues -= 1u; //From MHVPS row to FHPS row. + if (ok) { + preProgrammedTime = new int32[numberOfPreProgrammedTimeRows]; + preProgrammedValues = new float32*[numberOfPreProgrammedTimeRows]; + uint32 j; + for (j = 0u; j < numberOfPreProgrammedTimeRows; j++) { + preProgrammedValues[j] = new float32[numberOfPreProgrammedValues]; + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, + "Number of columns in csv file (%d) is not consistent with the number of output signals (%d)", + numberOfPreProgrammedValues, 6u); + *fileLoadErrorOutput = 1; + } + } + // Add loaded data into two arrays. + if (ok) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + uint32 idx = 0u; + while (tokenLine.GetToken(token, ",", ignored)) { + if (idx == 0u) { + preProgrammedTime[t] = atoi(token.Buffer()); + if (t == 0 && preProgrammedTime[0] != 0) { + REPORT_ERROR(MARTe::ErrorManagement::Debug, "Prepro start from none zero time."); + } + } + else { + ok = ((idx - 1) < numberOfPreProgrammedValues); + if (ok) { + preProgrammedValues[t][idx - 1] = static_cast(atof(token.Buffer())); + } + else { + REPORT_ERROR(MARTe::ErrorManagement::FatalError, "Number of columns in csv file is not consistent with the number of output signals in line %d", t); + *fileLoadErrorOutput = 1; + } + } + token = ""; + idx++; + } + t++; + } + tokenLine = ""; + } + f.Close(); + } + if (ok) { + currentRow = 0u; + } + else { + numberOfPreProgrammedTimeRows = 0u; + REPORT_ERROR(ErrorManagement::Warning, "Failed to read waveform data from file."); + *fileLoadErrorOutput = 2; + } + return ok; +} + +bool JAPreProgrammedGAM::Execute() { + using namespace MARTe; + bool ok = true; + + switch (mode) { + case LoadFileMode: { + if (*loadTriggerSignal == 1u) { + if (readOnce) { + *fileLoadErrorOutput = 0; + *fileLoadedSignal = LoadFile() ? 1 : 0; + readOnce = false; + } + } else { + // Reset read once flag when loadTriggerSignal is reset. + readOnce = true; + } + + if (resetOutputSignals) { + // Write default values to output signals + *timeSignal = 0u; + *valueSignals[FHPS-1] = *fhpsrefSignal; + resetOutputSignals = false; + } else { + *valueSignals[FHPS-1] = *fhpsrefSignal; //copy input(2) to val_arr(4) + } + } break; + + case PreProgrammedMode: { + ok = numberOfPreProgrammedTimeRows > 0; + + //add 20210105. Before RFON, prepro setpoints should be same as the values listed at csv first line. + if (ok && *rfonStateSignal == 0) { + uint32 j; + for (j = 0u; j < FHPS; j++) { + *valueSignals[j] = preProgrammedValues[0][j]; + } + } + //end 20210105 + + if (ok && currentRow < numberOfPreProgrammedTimeRows && *rfonStateSignal == 1) { + if (msCounter >= cycleMs) { + msCounter -= cycleMs; + int32 currentTime = preProgrammedTime[currentRow]; + //REPORT_ERROR(MARTe::ErrorManagement::Debug, "Write Time at %d",currentRow); + // Write to output signals + *timeSignal = currentTime; + uint32 j; + for (j = 0u; j < FHPS; j++) { + *valueSignals[j] = preProgrammedValues[currentRow][j]; + //REPORT_ERROR(MARTe::ErrorManagement::Debug, "Write Value %f at row %d",preProgrammedValues[currentRow][j], currentRow); + } + //REPORT_ERROR(MARTe::ErrorManagement::Debug, "Writing pre programmed data for time %d", currentTime); + + // Update row + ++currentRow; + } + msCounter += preProgrammedExecutaionPeriodMs; + } + } break; + default: + // Nothing to do. + REPORT_ERROR(MARTe::ErrorManagement::Warning, "Unhandled mode."); + break; + } + return ok; +} + +void JAPreProgrammedGAM::DeleteArrays() { + if (preProgrammedValues != NULL_PTR(MARTe::float32 **)) { + MARTe::uint32 i; + for (i = 0u; i < numberOfPreProgrammedValues; i++) { + delete preProgrammedValues[i]; + } + delete[] preProgrammedValues; + } + if (preProgrammedTime != NULL_PTR(MARTe::int32 *)) { + delete[] preProgrammedTime; + } +} + +CLASS_REGISTER(JAPreProgrammedGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.h b/EC-GN-JA-PCF/target/main/c++/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.h new file mode 100644 index 0000000..4226fef --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.h @@ -0,0 +1,187 @@ +/** + * @file JAPreProgrammedGAM.h + * @brief Header file for class JAPreProgrammedGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAPreProgrammedGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAPREPROGRAMMEDGAM_H_ +#define GAMS_JAPREPROGRAMMEDGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "GAM.h" +#include "Message.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that update PS output value for pre-programmed operation. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +PreProgrammedGAM = {
+ *           Class = JAPreProgrammedGAM
+ *           Directory = "../Configurations" // Directory which has pre-pro configuration file.
+ *           PreProgrammedPeriodMs = 1       // RFON state is executed every millisecond.
+ *           InputSignals = {
+ *               CSV_LOAD = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               Filename = {
+ *                   Alias = CSV_NAME
+ *                   DataSource = EPICSCAInput
+ *               }
+ *               FHPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               GYA_PREHEAT_TIME = {
+ *                   DataSource = DDB1
+ *                   Type = int32
+ *               }
+ *               MHVPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               BPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               APS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               MCPS_TRG_CURR_SET = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               GCPS_TRG_CURR_SET = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               FHPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               CSV_LOADED = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               CSV_ERR = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * + */ + +class JAPreProgrammedGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAPreProgrammedGAM(); + + virtual ~JAPreProgrammedGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + bool LoadFile(); + + void DeleteArrays(); + + //Parameters + MARTe::StreamString directory; //Location for prepro configuration file. + MARTe::uint32 preProgrammedExecutaionPeriodMs; // Time between to execution cycles in milliseconds in pre-programmed mode. + + //Input Signals + MARTe::uint32 *loadTriggerSignal; //index:0 + MARTe::uint32 filenameSignalIndex;//index:1 + MARTe::float32 *fhpsrefSignal; //index:2 + MARTe::uint32 *rfonStateSignal; //index:3 + + //Output Signals + MARTe::int32 *timeSignal; //index:0 + MARTe::float32 **valueSignals; //index:1-5 = BPS,APS,MC,GC,FHPS + MARTe::uint32 *fileLoadedSignal; //index:6 + MARTe::uint32 *fileLoadErrorOutput;//index:7 + + //Internal variables + MARTe::int32 *preProgrammedTime; + MARTe::float32 **preProgrammedValues; + + MARTe::uint32 startTime; + + //Number of columns in csv, EXCLUDING the time + MARTe::uint32 numberOfPreProgrammedValues; //is 5.(BPS, APS, MC, GC, FHPS) + MARTe::uint32 numberOfPreProgrammedTimeRows; //This start from t=0 row. + MARTe::uint32 currentRow; + + // Number of milliseconds since the last time output signals were updated. + MARTe::uint32 msCounter; + + // Row number where the pre-programmed data begins (time == 0). + MARTe::uint32 preProgrammedRow; + + enum OperationMode { + LoadFileMode, PreProgrammedMode, None + }; + enum PreProTableDefinition { + Time, MHVPS, BPS, APS, MCPS, GCPS, FHPS + }; + + OperationMode mode; + + bool resetOutputSignals; + + // Flag determining whether file should be read (so it isn't read multiple time) + bool readOnce; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAPREPROGRAMMEDGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JAPreProgrammedGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/c++/GAMs/JAPreProgrammedGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JAPreProgrammedGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JAPreProgrammedGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/c++/GAMs/JAPreProgrammedGAM/Makefile.inc new file mode 100644 index 0000000..587d4b8 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JAPreProgrammedGAM/Makefile.inc @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAPreProgrammedGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAPreProgrammedGAM$(LIBEXT) \ + $(BUILD_DIR)/JAPreProgrammedGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.cpp b/EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.cpp new file mode 100644 index 0000000..56f9b18 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.cpp @@ -0,0 +1,411 @@ +/** + * @file JARTStateMachineGAM.cpp + * @brief Source file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JARTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +static MARTe::uint64 getCurrentTimeUs() { + using namespace MARTe; + return static_cast(HighResolutionTimer::Counter() * HighResolutionTimer::Period() * 1e6f + 0.5f); +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARTStateMachineGAM::JARTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + turn_off_delay = 2000; //us + + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + short_pulse_mode = NULL_PTR(MARTe::uint32 *); + + modulation = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + + apsSwonHighResolutionTime = 0; + + aps_hvon_state=0; + aps_swon_state=0; + mhvps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; +} + +JARTStateMachineGAM::~JARTStateMachineGAM() { +} + +bool JARTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JARTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JARTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 12u); + if (ok) { + ok = (numberOfOutputSignals == 16u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined %d",numberOfOutputSignals); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(10)); + modulation = reinterpret_cast(GetInputSignalMemory(11)); + + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + + outputAPSHVON = reinterpret_cast(GetOutputSignalMemory(8)); + outputAPSSWON = reinterpret_cast(GetOutputSignalMemory(9)); + outputBPSHVON = reinterpret_cast(GetOutputSignalMemory(10)); + outputBPSSWON = reinterpret_cast(GetOutputSignalMemory(11)); + outputMHVPSON = reinterpret_cast(GetOutputSignalMemory(12)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(13)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(14)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(15)); + + *shotCounter = 0; + } + return ok; +} + +bool JARTStateMachineGAM::Execute() { + using namespace MARTe; + + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + //REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence at %d.", *currentTime); + plcOnTime = *currentTime; //Save pulse start time. + //*outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS; + } + } + else if (currentState == SwitchingHVPS) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; bps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + *outputBPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; aps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal at %d.", *currentTime); + *outputAPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; bps_swon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + *outputBPSSWON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; mhvps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + *outputMHVPSON=1; + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (plcOnTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; aps_swon_state=1; + apsSwonHighResolutionTime = getCurrentTimeUs(); + apsSwonTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + *outputAPSSWON=1; + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 1; + } + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 1; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *outputBeamON = 1; + *shotCounter += 1; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //Action in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + //debug + //if((*stopRequest != 0)){ + //REPORT_ERROR(ErrorManagement::Debug, "Stop request was called.!!!"); + //} else { + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset.!!!"); + //} + *outputSignal -= aps_swon; + mhvps_hvon_is_on = false; mhvps_hvon_state=0; + aps_hvon_is_on = false; aps_hvon_state=0; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; bps_hvon_state=0; + bps_swon_is_on = false; bps_swon_state=0; + currentState = HVTerminate; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + } + uint32 updatePeriod = 100; // in microsecnds (get this from Timer) + if ((*modePulseLengthLimit == 1u) || (getCurrentTimeUs() + updatePeriod >= (apsSwonHighResolutionTime + *triggerDelay_shotlen))) { + + // Now we do busy wait + while (getCurrentTimeUs() < (apsSwonHighResolutionTime + *triggerDelay_shotlen)) { + //REPORT_ERROR(ErrorManagement::Debug, "!"); + } + // We stop busy waiting #executionOverhead before expected pulse off time + //debug + //if((*modePulseLengthLimit == 1u)){ + // REPORT_ERROR(ErrorManagement::Debug, "Mode limit detected.!!!"); + //} else { + // REPORT_ERROR(ErrorManagement::Debug, "Shot length reached to the setpoint.!!!"); + //} + //debug end. + //Do action + *outputSignal -= aps_swon; //Turn off only APS_SWON first. + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; + bps_swon_is_on = false; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + //REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 1; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + //In the HVTerminate state, turn APS_SWON off first, and wait 1ms. Finally turn other PS off. + //Action in this state. + *outputBeamON = 0; + *outputHVArmed = 0; + *outputHVInjection = 0; + *outputRFON = 0; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + mhvps_hvon_state=0; + aps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset. The State was changed to WaitTrigger at %d.", *currentTime); + } + } + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6259 = 1*aps_swon_state; + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + if (modulation) { + p4Value = 8*mhvps_hvon_state + 32; + } + else { + p4Value = 8*mhvps_hvon_state; + } + //*outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + *outputSignalNI6528P4 = ~p4Value; + return true; +} + +CLASS_REGISTER(JARTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.h b/EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.h new file mode 100644 index 0000000..e968f39 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.h @@ -0,0 +1,262 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARTSTATEMACHINEGAM_H_ +#define GAMS_JARTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that provides real-time state machine. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMRealTimeStateMachine = {
+ *           Class = JARTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BEAM_ON_STAT = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JARTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARTStateMachineGAM(); + + virtual ~JARTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS = 1, + RFON = 2, + HVTerminate = 3 + }; + + //The current rtState + JARealTimeState currentState; + + //A given condition + MARTe::uint32 conditionTrigger; + + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + + //Time signal + MARTe::uint32 *currentTime; + + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for short pulse mode. + MARTe::uint32 *short_pulse_mode; + // Input signal for modulation pv. + MARTe::uint32 *modulation; + + // Output signal to which the output value will be written. + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + // Added for HVPS state (20201117) + MARTe::uint32 *outputAPSHVON; + MARTe::uint32 *outputAPSSWON; + MARTe::uint32 *outputBPSHVON; + MARTe::uint32 *outputBPSSWON; + MARTe::uint32 *outputMHVPSON; + + // Output signals for NI devices + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + MARTe::uint64 apsSwonHighResolutionTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + + // terminal values + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.cpp b/EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.cpp new file mode 100644 index 0000000..55983f1 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.cpp @@ -0,0 +1,409 @@ +/** + * @file JARTStateMachineGAM.cpp + * @brief Source file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JARTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +static MARTe::uint64 getCurrentTimeUs() { + using namespace MARTe; + return static_cast(HighResolutionTimer::Counter() * HighResolutionTimer::Period() * 1e6f + 0.5f); +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARTStateMachineGAM::JARTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + turn_off_delay = 2000; //us + + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + short_pulse_mode = NULL_PTR(MARTe::uint32 *); + + modulation = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + + apsSwonHighResolutionTime = 0; + + aps_hvon_state=0; + aps_swon_state=0; + mhvps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; +} + +JARTStateMachineGAM::~JARTStateMachineGAM() { +} + +bool JARTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JARTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JARTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 13u); + if (ok) { + ok = (numberOfOutputSignals == 16u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined %d",numberOfOutputSignals); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(10)); + modulation = reinterpret_cast(GetInputSignalMemory(11)); + pauseSet = reinterpret_cast(GetInputSignalMemory(12)); + + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + + outputAPSHVON = reinterpret_cast(GetOutputSignalMemory(8)); + outputAPSSWON = reinterpret_cast(GetOutputSignalMemory(9)); + outputBPSHVON = reinterpret_cast(GetOutputSignalMemory(10)); + outputBPSSWON = reinterpret_cast(GetOutputSignalMemory(11)); + outputMHVPSON = reinterpret_cast(GetOutputSignalMemory(12)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(13)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(14)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(15)); + + *shotCounter = 0; + } + return ok; +} + +bool JARTStateMachineGAM::Execute() { + using namespace MARTe; + + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + //REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence at %d.", *currentTime); + plcOnTime = *currentTime; //Save pulse start time. + //*outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS; + } + } + else if (currentState == SwitchingHVPS) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; bps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + *outputBPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; aps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal at %d.", *currentTime); + *outputAPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; bps_swon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + *outputBPSSWON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; mhvps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + *outputMHVPSON=1; + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (plcOnTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; aps_swon_state=1; + apsSwonHighResolutionTime = getCurrentTimeUs(); + apsSwonTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + *outputAPSSWON=1; + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 1; + } + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 1; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *outputBeamON = 1; + *shotCounter += 1; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //Action in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + //debug + //if((*stopRequest != 0)){ + //REPORT_ERROR(ErrorManagement::Debug, "Stop request was called.!!!"); + //} else { + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset.!!!"); + //} + *outputSignal -= aps_swon; + mhvps_hvon_is_on = false; mhvps_hvon_state=0; + aps_hvon_is_on = false; aps_hvon_state=0; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; bps_hvon_state=0; + bps_swon_is_on = false; bps_swon_state=0; + currentState = HVTerminate; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + } + uint32 updatePeriod = 100; // in microsecnds (get this from Timer) + if ((*modePulseLengthLimit == 1u) || (getCurrentTimeUs() + updatePeriod >= (apsSwonHighResolutionTime + *triggerDelay_shotlen))) { + + // Now we do busy wait + while (getCurrentTimeUs() < (apsSwonHighResolutionTime + *triggerDelay_shotlen)) { + //REPORT_ERROR(ErrorManagement::Debug, "!"); + } + // We stop busy waiting #executionOverhead before expected pulse off time + //debug + //if((*modePulseLengthLimit == 1u)){ + // REPORT_ERROR(ErrorManagement::Debug, "Mode limit detected.!!!"); + //} else { + // REPORT_ERROR(ErrorManagement::Debug, "Shot length reached to the setpoint.!!!"); + //} + //debug end. + //Do action + *outputSignal -= aps_swon; //Turn off only APS_SWON first. + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; + bps_swon_is_on = false; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + //REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 1; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + //In the HVTerminate state, turn APS_SWON off first, and wait 1ms. Finally turn other PS off. + //Action in this state. + *outputBeamON = 0; + *outputHVArmed = 0; + *outputHVInjection = 0; + *outputRFON = 0; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + mhvps_hvon_state=0; + aps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset. The State was changed to WaitTrigger at %d.", *currentTime); + } + } + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6259 = 1*aps_swon_state; + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + p4Value = 8*mhvps_hvon_state; + if (modulation) p4Value += 32; + if (pauseSet) p4Value += 1; + //*outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + *outputSignalNI6528P4 = ~p4Value; + return true; +} + +CLASS_REGISTER(JARTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.h b/EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.h new file mode 100644 index 0000000..876d64e --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.h @@ -0,0 +1,264 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARTSTATEMACHINEGAM_H_ +#define GAMS_JARTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that provides real-time state machine. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMRealTimeStateMachine = {
+ *           Class = JARTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BEAM_ON_STAT = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JARTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARTStateMachineGAM(); + + virtual ~JARTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS = 1, + RFON = 2, + HVTerminate = 3 + }; + + //The current rtState + JARealTimeState currentState; + + //A given condition + MARTe::uint32 conditionTrigger; + + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + + //Time signal + MARTe::uint32 *currentTime; + + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for short pulse mode. + MARTe::uint32 *short_pulse_mode; + // Input signal for modulation pv. + MARTe::uint32 *modulation; + // Input signal for pause signal set pv. + MARTe::uint32 *pauseSet; + + // Output signal to which the output value will be written. + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + // Added for HVPS state (20201117) + MARTe::uint32 *outputAPSHVON; + MARTe::uint32 *outputAPSSWON; + MARTe::uint32 *outputBPSHVON; + MARTe::uint32 *outputBPSSWON; + MARTe::uint32 *outputMHVPSON; + + // Output signals for NI devices + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + MARTe::uint64 apsSwonHighResolutionTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + + // terminal values + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.cpp b/EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.cpp new file mode 100644 index 0000000..71c7669 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.cpp @@ -0,0 +1,402 @@ +/** + * @file JARTStateMachineGAM.cpp + * @brief Source file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JARTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +static MARTe::uint64 getCurrentTimeUs() { + using namespace MARTe; + return static_cast(HighResolutionTimer::Counter() * HighResolutionTimer::Period() * 1e6f + 0.5f); +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARTStateMachineGAM::JARTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + turn_off_delay = 2000; //us + + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + + apsSwonHighResolutionTime = 0; + + aps_hvon_state=0; + aps_swon_state=0; + mhvps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; +} + +JARTStateMachineGAM::~JARTStateMachineGAM() { +} + +bool JARTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JARTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JARTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 11u); + if (ok) { + ok = (numberOfOutputSignals == 16u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined %d",numberOfOutputSignals); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(10)); + + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + + outputAPSHVON = reinterpret_cast(GetOutputSignalMemory(8)); + outputAPSSWON = reinterpret_cast(GetOutputSignalMemory(9)); + outputBPSHVON = reinterpret_cast(GetOutputSignalMemory(10)); + outputBPSSWON = reinterpret_cast(GetOutputSignalMemory(11)); + outputMHVPSON = reinterpret_cast(GetOutputSignalMemory(12)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(13)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(14)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(15)); + + *shotCounter = 0; + } + return ok; +} + +bool JARTStateMachineGAM::Execute() { + using namespace MARTe; + + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + //REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence at %d.", *currentTime); + plcOnTime = *currentTime; //Save pulse start time. + //*outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS; + } + } + else if (currentState == SwitchingHVPS) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; bps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + *outputBPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; aps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal at %d.", *currentTime); + *outputAPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; bps_swon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + *outputBPSSWON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; mhvps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + *outputMHVPSON=1; + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (plcOnTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; aps_swon_state=1; + apsSwonHighResolutionTime = getCurrentTimeUs(); + apsSwonTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + *outputAPSSWON=1; + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 1; + } + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 1; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *outputBeamON = 1; + *shotCounter += 1; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //Action in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + //debug + //if((*stopRequest != 0)){ + //REPORT_ERROR(ErrorManagement::Debug, "Stop request was called.!!!"); + //} else { + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset.!!!"); + //} + *outputSignal -= aps_swon; + mhvps_hvon_is_on = false; mhvps_hvon_state=0; + aps_hvon_is_on = false; aps_hvon_state=0; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; bps_hvon_state=0; + bps_swon_is_on = false; bps_swon_state=0; + currentState = HVTerminate; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + } + uint32 updatePeriod = 100; // in microsecnds (get this from Timer) + if ((*modePulseLengthLimit == 1u) || (getCurrentTimeUs() + updatePeriod >= (apsSwonHighResolutionTime + *triggerDelay_shotlen))) { + + // Now we do busy wait + while (getCurrentTimeUs() < (apsSwonHighResolutionTime + *triggerDelay_shotlen)) { + //REPORT_ERROR(ErrorManagement::Debug, "!"); + } + // We stop busy waiting #executionOverhead before expected pulse off time + //debug + //if((*modePulseLengthLimit == 1u)){ + // REPORT_ERROR(ErrorManagement::Debug, "Mode limit detected.!!!"); + //} else { + // REPORT_ERROR(ErrorManagement::Debug, "Shot length reached to the setpoint.!!!"); + //} + //debug end. + //Do action + *outputSignal -= aps_swon; //Turn off only APS_SWON first. + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; + bps_swon_is_on = false; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + //REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 1; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + //In the HVTerminate state, turn APS_SWON off first, and wait 1ms. Finally turn other PS off. + //Action in this state. + *outputBeamON = 0; + *outputHVArmed = 0; + *outputHVInjection = 0; + *outputRFON = 0; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + mhvps_hvon_state=0; + aps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset. The State was changed to WaitTrigger at %d.", *currentTime); + } + } + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6259 = 1*aps_swon_state; + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + p4Value = 8*mhvps_hvon_state; + //*outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + *outputSignalNI6528P4 = ~p4Value; + return true; +} + +CLASS_REGISTER(JARTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.h b/EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.h new file mode 100644 index 0000000..e59f3fa --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.h @@ -0,0 +1,260 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARTSTATEMACHINEGAM_H_ +#define GAMS_JARTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that provides real-time state machine. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMRealTimeStateMachine = {
+ *           Class = JARTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BEAM_ON_STAT = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JARTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARTStateMachineGAM(); + + virtual ~JARTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS = 1, + RFON = 2, + HVTerminate = 3 + }; + + //The current rtState + JARealTimeState currentState; + + //A given condition + MARTe::uint32 conditionTrigger; + + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + + //Time signal + MARTe::uint32 *currentTime; + + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for short pulse mode. + MARTe::uint32 *short_pulse_mode; + + // Output signal to which the output value will be written. + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + // Added for HVPS state (20201117) + MARTe::uint32 *outputAPSHVON; + MARTe::uint32 *outputAPSSWON; + MARTe::uint32 *outputBPSHVON; + MARTe::uint32 *outputBPSSWON; + MARTe::uint32 *outputMHVPSON; + + // Output signals for NI devices + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + MARTe::uint64 apsSwonHighResolutionTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + + // terminal values + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/Makefile.inc new file mode 100644 index 0000000..234a3d6 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JARTStateMachineGAM/Makefile.inc @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JARTStateMachineGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JARTStateMachineGAM$(LIBEXT) \ + $(BUILD_DIR)/JARTStateMachineGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JARampupGAM/JARampupGAM.cpp b/EC-GN-JA-PCF/target/main/c++/GAMs/JARampupGAM/JARampupGAM.cpp new file mode 100644 index 0000000..98003a2 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JARampupGAM/JARampupGAM.cpp @@ -0,0 +1,295 @@ +/** + * @file JARampupGAM.cpp + * @brief Source file for class JARampupGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARampupGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "AdvancedErrorManagement.h" +#include "JARampupGAM.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARampupGAM::JARampupGAM() : GAM() { + current_setpoint = NULL_PTR(MARTe::float32 *); + target_value = NULL_PTR(MARTe::float32 *); + rampup_time = NULL_PTR(MARTe::float32 *); + start = NULL_PTR(MARTe::uint32 *); + standby = NULL_PTR(MARTe::uint32 *); + isAuto = NULL_PTR(MARTe::uint32 *); + FHPS_PrePro = NULL_PTR(MARTe::float32 *); + + output = NULL_PTR(MARTe::float32 *); + state = NULL_PTR(MARTe::uint32 *); + + rampup_rate = 0.0f; + inRampup = false; + resetFlag = true; + inWaitHVON = false; + inWaitStandby = false; +} + +JARampupGAM::~JARampupGAM() { +} + +bool JARampupGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + return GAM::Initialise(data); +} + +bool JARampupGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 7u); + if (ok) { + ok = (numberOfOutputSignals == 2u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Two output signals shall be defined."); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Six input signals shall be defined."); + } + uint32 currentspvIndex; + uint32 targetvIndex; + uint32 timeIndex; + uint32 startIndex; + uint32 standbyIndex; + uint32 isAutoIndex; + uint32 fhpsPreProIndex; + + if (ok) { + StreamString signalName = "Currspv"; + ok = GetSignalIndex(InputSignals, currentspvIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Currspv input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, currentspvIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Currspv shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Targetv"; + ok = GetSignalIndex(InputSignals, targetvIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Targetv input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, targetvIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Targetv shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Time"; + ok = GetSignalIndex(InputSignals, timeIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Time input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, timeIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Time shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Start"; + ok = GetSignalIndex(InputSignals, startIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Start input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, startIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Start shall be defined as uint32."); + } + } + } + if (ok) { + StreamString signalName = "PLC_STANDBY"; + ok = GetSignalIndex(InputSignals, standbyIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLC_STANDBY input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, standbyIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLC_STANDBY shall be defined as uint32."); + } + } + } + if (ok) { + StreamString signalName = "MANUAL_AUTO"; + ok = GetSignalIndex(InputSignals, isAutoIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "MANUAL_AUTO input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, isAutoIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "MANUAL_AUTO shall be defined as uint32."); + } + } + } + if (ok) { + StreamString signalName = "FHPS_PrePro"; + ok = GetSignalIndex(InputSignals, fhpsPreProIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "FHPS_PrePro input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, fhpsPreProIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal FHPS_PrePro shall be defined as float32."); + } + } + } + + if (ok) { + TypeDescriptor inputType = GetSignalType(OutputSignals, 0); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Output shall be defined as float32."); + } + } + if (ok) { + TypeDescriptor inputType = GetSignalType(OutputSignals, 1); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal state shall be defined as float32."); + } + } + + if (ok) { + current_setpoint = reinterpret_cast(GetInputSignalMemory(currentspvIndex)); + target_value = reinterpret_cast(GetInputSignalMemory(targetvIndex)); + rampup_time = reinterpret_cast(GetInputSignalMemory(timeIndex)); + start = reinterpret_cast(GetInputSignalMemory(startIndex)); + standby = reinterpret_cast(GetInputSignalMemory(standbyIndex)); + isAuto = reinterpret_cast(GetInputSignalMemory(isAutoIndex)); + FHPS_PrePro = reinterpret_cast(GetInputSignalMemory(fhpsPreProIndex)); + + output = reinterpret_cast(GetOutputSignalMemory(0)); + state = reinterpret_cast(GetOutputSignalMemory(1)); + } + return ok; +} + +bool JARampupGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName){ + if(strcmp(nextStateName, "WaitHVON_PREP")==0 || strcmp(nextStateName, "WaitHVON_SDN_PREP")==0 || + strcmp(nextStateName, "WaitHVON")==0 || strcmp(nextStateName, "WaitHVON_SDN")==0){ + inWaitHVON = true; + inWaitStandby = false; + } else{ + inWaitHVON = false; + if(strcmp(nextStateName,"WaitStandby")==0 ){ + inWaitStandby = true; + } else { + inWaitStandby = false; + } + } + return true; +} + +bool JARampupGAM::Execute() { + using namespace MARTe; + if(!inWaitHVON){ + if (*target_value <= 0.0f || *standby == 0u) { + *output = 0.0f; + rampup_rate = 0.0f; + if(*target_value <= 0.0f){ + *state = 3u; + } else { + *state = 0u; + } + return true; + } + + if(*start == 1u && *isAuto==0u){ //isAuto = 1.Manual, 0.auto-rampup. + inRampup = true; + resetFlag = true; + *output = 0.0f; //Enable if it should start always zero. + } + + // Calcrate new rampup rate. + if(*rampup_time != 0 && resetFlag == true){ + rampup_rate = (*target_value - *current_setpoint) / *rampup_time/1000.0f; // Volt/msec + resetFlag = false; + } + + // Update Parameter + if(*standby == 1u ){ + if(*isAuto == 1u){ + if (inWaitStandby){ + *output = *target_value; + } else{ + *output = *FHPS_PrePro; + } + //*output = *target_value; + *state = 0u; + return true; + } + else if (inRampup){ + if (*output + rampup_rate < *target_value && *rampup_time != 0){ + *output = *output + rampup_rate; + *state = 1u; + } else { + *output = *target_value; + *state = 2u; + inRampup = false; + } + } + } + return true; + } else { + if(*isAuto == 0){ + *output = *FHPS_PrePro; + } else{ + *output = *target_value; + } + return true; + } +} + +CLASS_REGISTER(JARampupGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JARampupGAM/JARampupGAM.h b/EC-GN-JA-PCF/target/main/c++/GAMs/JARampupGAM/JARampupGAM.h new file mode 100644 index 0000000..3c6e012 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JARampupGAM/JARampupGAM.h @@ -0,0 +1,141 @@ +/** + * @file JARampupGAM.h + * @brief Header file for class JARampupGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARampupGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARampupGAM_H_ +#define GAMS_JARampupGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that rampup output value with specified target value and duration. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *      +FHPSRampupGAM = {
+ *         Class = JARampupGAM
+ *         InputSignals = {
+ *             Currspv = {
+ *                 Alias = FHPS_REF
+ *                 DataSource = DDB1
+ *                 Type = float32
+ *             }
+ *             Targetv = {
+ *                 Alias = FHPS_AUTO_TAGV
+ *                 DataSource = EPICSCAInput
+ *                 Type = float32
+ *             }
+ *             Time = {
+ *                 Alias = FHPS_AUTO_TIME
+ *                 DataSource = EPICSCAInput
+ *                 Type = float32
+ *             }
+ *             Start = {
+ *                 Alias = FHPS_AUTO_START
+ *                 DataSource = EPICSCAInput
+ *                 Type = uint32
+ *             }
+ *         }
+ *         OutputSignals = {
+ *             FHPS_REF = {
+ *                 DataSource = DDB1
+ *                 Type = float32
+ *             }
+ *         }
+ *       }
+ *  
+ * 
+ * + */ + +class JARampupGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARampupGAM(); + + virtual ~JARampupGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + // Input signal containing current current_setpoint + MARTe::float32 *current_setpoint; + + // Input signal containing the frequency of the waveform. + MARTe::float32 *target_value; + + // Input signal containing the amplitude of the waveform. + MARTe::float32 *rampup_time; + + // Input signal containing CCPS_ON_REQUEST + MARTe::uint32 *start; + + // Input signal PLC_STANDBY + MARTe::uint32 *standby; + + // MANUAL AUTO button + MARTe::uint32 *isAuto; + + // Input signal + MARTe::float32 *FHPS_PrePro; + + // Output + MARTe::float32 *output; + // State output + MARTe::uint32 *state; //0:NotOperation, 1:InOperation, 2:Finish, 3:Error + + // Internal variables + MARTe::float32 rampup_rate; + bool inRampup; + bool resetFlag; + bool inWaitHVON; + bool inWaitStandby; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARampupGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JARampupGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/c++/GAMs/JARampupGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JARampupGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JARampupGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/c++/GAMs/JARampupGAM/Makefile.inc new file mode 100644 index 0000000..9bf127b --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JARampupGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JARampupGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JARampupGAM$(LIBEXT) \ + $(BUILD_DIR)/JARampupGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.cpp b/EC-GN-JA-PCF/target/main/c++/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.cpp new file mode 100644 index 0000000..d164e89 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.cpp @@ -0,0 +1,361 @@ +/** + * @file JASDNRTStateMachineGAM.cpp + * @brief Source file for class JASDNRTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JASDNRTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JASDNRTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JASDNRTStateMachineGAM::JASDNRTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + sdnTriggerTime = 0; + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + sdnCommand = NULL_PTR(MARTe::uint16 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; +} + +JASDNRTStateMachineGAM::~JASDNRTStateMachineGAM() { +} + +bool JASDNRTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JASDNRTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JASDNRTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 11u); + if (ok) { + ok = (numberOfOutputSignals == 8u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit || inputType == UnsignedInteger16Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint16", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + sdnCommand = reinterpret_cast(GetInputSignalMemory(10)); + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + *shotCounter = 0; + } + return ok; +} + +bool JASDNRTStateMachineGAM::Execute() { + using namespace MARTe; + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence in SDN mode."); + plcOnTime = *currentTime; //Save pulse start time. + *outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS_HVON; + } + } + else if (currentState == SwitchingHVPS_HVON) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal -= aps_swon; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal."); + } + + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 0; + currentState = WaitSDNTrigger; + } + + } + else if (currentState == WaitSDNTrigger) { + + // Action in this state + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + + // State change conditions + if (*sdnCommand == 1){ + sdnTriggerTime = *currentTime; + currentState = SwitchingHVPS_SWON; + } + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + } + else if (currentState == SwitchingHVPS_SWON) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + + if (*currentTime >= (sdnTriggerTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + } + if (*currentTime >= (sdnTriggerTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (sdnTriggerTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; + apsSwonTime = *currentTime; + REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 0; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *shotCounter += 1; + REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //SDN command processing. + if (*sdnCommand == 4 && aps_swon_is_on) { + *outputSignal -= aps_swon; + aps_swon_is_on = false; + REPORT_ERROR(ErrorManagement::Debug, "sdn command was 4"); + } + if (*sdnCommand == 3 && !aps_swon_is_on) { + *outputSignal += aps_swon; + aps_swon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "sdn command was 3"); + } + + //Action in this state. + if ((*sdnCommand == 2) || (*modePulseLengthLimit == 1u) || (*currentTime >= (sdnTriggerTime + *triggerDelay_aps_swon + *triggerDelay_shotlen))) { + REPORT_ERROR(ErrorManagement::Debug, "shotlen: %d", *triggerDelay_shotlen); + if (*sdnCommand == 2) { + REPORT_ERROR(ErrorManagement::Information, "sdn command was 2"); + } else if (*currentTime >= (sdnTriggerTime + *triggerDelay_aps_swon + *triggerDelay_shotlen)){ + REPORT_ERROR(ErrorManagement::Information, "pulse length reached setpoint."); + } + //Do action + *outputSignal -= aps_swon; //Turn off only aps_swon + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 0; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + REPORT_ERROR(ErrorManagement::Information, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + + //Action in this state. + *outputBeamON = 1; + *outputHVArmed = 1; + *outputHVInjection = 1; + *outputRFON = 1; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + REPORT_ERROR(ErrorManagement::Debug, "state was changed to WaitTrigger"); + } + } + + return true; +} + +CLASS_REGISTER(JASDNRTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.h b/EC-GN-JA-PCF/target/main/c++/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.h new file mode 100644 index 0000000..91b4199 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.h @@ -0,0 +1,250 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JASDNRTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JASDNRTSTATEMACHINEGAM_H_ +#define GAMS_JASDNRTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM provides real-time state machine that communicate with SDN packet. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMSDNRealTimeStateMachine = {
+ *           Class = JASDNRTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               Command = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint16
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   //DataSource = NI6259
+ *                   DataSource = Display
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BeamON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * + */ + +class JASDNRTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JASDNRTStateMachineGAM(); + + virtual ~JASDNRTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS_HVON = 1, + WaitSDNTrigger = 2, + SwitchingHVPS_SWON = 3, + RFON = 4, + HVTerminate = 5 + }; + + //The current rtState + JARealTimeState currentState; + + ///////////////////////////////////////////////// + // Static parameter given by cfg File + ///////////////////////////////////////////////// + //A given condition + MARTe::uint32 conditionTrigger; + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + ///////////////////////////////////////////////// + // Input signals + ///////////////////////////////////////////////// + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + //Time signal (Time from TimerGAM) + MARTe::uint32 *currentTime; + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for SDN commands. + MARTe::uint16 *sdnCommand; + + ///////////////////////////////////////////////////////////// + // Output signal to which the output value will be written. + ///////////////////////////////////////////////////////////// + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //SDN trigger command arrival time. + MARTe::uint32 sdnTriggerTime; + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JASDNRTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JASDNRTStateMachineGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/c++/GAMs/JASDNRTStateMachineGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JASDNRTStateMachineGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JASDNRTStateMachineGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/c++/GAMs/JASDNRTStateMachineGAM/Makefile.inc new file mode 100644 index 0000000..50056e0 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JASDNRTStateMachineGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JASDNRTStateMachineGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JASDNRTStateMachineGAM$(LIBEXT) \ + $(BUILD_DIR)/JASDNRTStateMachineGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JASampleGAM/JASampleGAM.cpp b/EC-GN-JA-PCF/target/main/c++/GAMs/JASampleGAM/JASampleGAM.cpp new file mode 100644 index 0000000..62ab62d --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JASampleGAM/JASampleGAM.cpp @@ -0,0 +1,177 @@ +/** + * @file JASampleGAM.cpp + * @brief Source file for class JASampleGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JASampleGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JASampleGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JASampleGAM::JASampleGAM() { + // initialize member variables. + param1 = 0; + param2 = 0; + + //Input signals. + input1 = NULL_PTR(MARTe::uint32 *); + input2 = NULL_PTR(MARTe::float32 *); + //Output signals. + output1= NULL_PTR(MARTe::uint32 *); + output2 = NULL_PTR(MARTe::float32 *); + +} + +JASampleGAM::~JASampleGAM() { +} + +bool JASampleGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("param1", param1); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The param1 shall be specified"); + } + } + if (ok) { + ok = data.Read("param2", param2); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The param2 shall be specified"); + } + } + return ok; +} + +bool JASampleGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JASampleGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == 2u); + if (ok) { + ok = (numberOfOutputSignals == 2u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Two output signals shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Two input signals shall be defined"); + } + // Do type check for input signals. + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = ((inputType == UnsignedInteger32Bit) || (inputType == Float32Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or flaot32", signalName.Buffer()); + } + + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = ((outputType == UnsignedInteger32Bit) || (outputType == Float32Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or float32", signalName.Buffer()); + } + } + } + + // Signal id can get by signal name in configuration file + if (ok) { + StreamString signalName = "InputXXX"; //Variable name in configuration file. + uint32 signalxxxIndex; //Index is copied to this variable by using signal name. + ok = GetSignalIndex(InputSignals, signalxxxIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "InputXXX input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, signalxxxIndex); + ok = (inputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, signalxxxIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } else { + inputXXX = reinterpret_cast(GetInputSignalMemory(signalxxxIndex)); + } + } + } + + // Do type cast. with explicit signal id. + if (ok) { + input1 = reinterpret_cast(GetInputSignalMemory(0)); + input2 = reinterpret_cast(GetInputSignalMemory(1)); + + output1 = reinterpret_cast(GetOutputSignalMemory(0)); + output2 = reinterpret_cast(GetOutputSignalMemory(1)); + + } + return ok; +} + +bool JASampleGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + REPORT_ERROR(ErrorManagement::Information, "input1 is %d.", *input1); + REPORT_ERROR(ErrorManagement::Information, "input2 is %f.", *input2); + REPORT_ERROR(ErrorManagement::Information, "inputXXX is %f.", *inputXXX); + + REPORT_ERROR(ErrorManagement::Information, "maltiply param value to input."); + + *output1 = *input1 * param1; + *output2 = *input2 * param2; + + REPORT_ERROR(ErrorManagement::Information, "output1 is %d.", *output1); + REPORT_ERROR(ErrorManagement::Information, "output2 is %f.", *output2); + + return true; +} + +CLASS_REGISTER(JASampleGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JASampleGAM/JASampleGAM.h b/EC-GN-JA-PCF/target/main/c++/GAMs/JASampleGAM/JASampleGAM.h new file mode 100644 index 0000000..53f06ad --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JASampleGAM/JASampleGAM.h @@ -0,0 +1,122 @@ +/** + * @file JASampleGAM.h + * @brief Header file for class JASampleGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JASampleGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JASampleGAM_H_ +#define GAMS_JASampleGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +/** + * @brief GAM Sample Usage. + * @details Sample + * + * The configuration syntax is: + * + *
+ * +SampleGAM = {
+ *     Class = JASampleGAM
+ *     InputSignals = {
+ *         Input1 = {
+ *             DataSource = "DDB"
+ *             Type = uint32
+ *             Default = 0
+ *         }
+ *         Input2 = {
+ *             DataSource = "DDB"
+ *             Type = float32
+ *             Default = 100
+ *         }
+ *         InputXXX = {
+ *             DataSource = "DDB"
+ *             Type = float32
+ *             NumberOfElements = 1
+ *         }
+ *     }
+ *     OutputSignals = {
+ *         Output1 = {
+ *             DataSource = "DDB"
+ *             Type = uint32
+ *             Default = 0
+ *         }
+ *         Output2 = {
+ *             DataSource = "DDB"
+ *             Type = int32
+ *             Default = 100
+ *         }
+ *     }
+ * }
+ * 
+ */ + + +class JASampleGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JASampleGAM(); + + virtual ~JASampleGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //GAM fixed parameters. + MARTe::uint32 param1; + MARTe::float32 param2; + + // Input signals + MARTe::uint32 *input1; + MARTe::float32 *input2; + MARTe::float32 *inputXXX; + + // Output signals + MARTe::uint32 *output1; + MARTe::float32 *output2; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JASampleGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JASampleGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/c++/GAMs/JASampleGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JASampleGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JASampleGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/c++/GAMs/JASampleGAM/Makefile.inc new file mode 100644 index 0000000..a95be67 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JASampleGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JARTSampleGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JARTSampleGAM$(LIBEXT) \ + $(BUILD_DIR)/JARTSampleGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.cpp b/EC-GN-JA-PCF/target/main/c++/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.cpp new file mode 100644 index 0000000..3ab70d0 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.cpp @@ -0,0 +1,188 @@ +/** + * @file JASourceChoiseGAM.cpp + * @brief Source file for class JASourceChoiseGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JASourceChoiseGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JASourceChoiseGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JASourceChoiseGAM::JASourceChoiseGAM() { + // initialize member variables. + numberOfPVs = 0; +} + +JASourceChoiseGAM::~JASourceChoiseGAM() { +} + +bool JASourceChoiseGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("numberOfPVs", numberOfPVs); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The numberOfPVs parameter shall be specified"); + } + } + return ok; +} + +bool JASourceChoiseGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JASourceChoiseGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == numberOfPVs*3u); + if (ok) { + ok = (numberOfOutputSignals == numberOfPVs); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "%d *3 output signals shall be defined", numberOfPVs); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "%d input signals shall be defined", numberOfPVs); + } + // Do type check for input signals. + int int_num = 0; + int float_num = 0; + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + if(inputType == UnsignedInteger32Bit){ + int_num++; + } else if (inputType == Float32Bit) { + float_num++; + } else { + ok = false; + }; + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or flaot32", signalName.Buffer()); + } + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = ((outputType == UnsignedInteger32Bit) || (outputType == Float32Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or float32", signalName.Buffer()); + } + } + } + // Set memory + inputUInt32.resize(numberOfPVs*2); + inputFloat32.resize(numberOfPVs*2); + choise.resize(numberOfPVs); + outputUInt32.resize(numberOfPVs); + outputFloat32.resize(numberOfPVs); + + prevUInt32.resize(numberOfPVs*2); + prevFloat32.resize(numberOfPVs*2); + + if(ok){ + for(uint32 i=0; i(GetInputSignalMemory(3*i)); + inputUInt32[2*i+1] = reinterpret_cast(GetInputSignalMemory(3*i+1)); + choise[i] = reinterpret_cast(GetInputSignalMemory(3*i+2)); + outputUInt32[i] = reinterpret_cast(GetOutputSignalMemory(i)); + } else if(inputType == Float32Bit){ + inputFloat32[2*i] = reinterpret_cast(GetInputSignalMemory(3*i)); + inputFloat32[2*i+1] = reinterpret_cast(GetInputSignalMemory(3*i+1)); + choise[i] = reinterpret_cast(GetInputSignalMemory(3*i+2)); + outputFloat32[i] = reinterpret_cast(GetOutputSignalMemory(i)); + } + prevUInt32[2*i] = 0; + prevUInt32[2*i+1] = 0; + prevFloat32[2*i] = 0; + prevFloat32[2*i+1] = 0; + } + } + return ok; +} + +bool JASourceChoiseGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + + for (uint32 i=0; i < numberOfPVs; i++){ + if(*choise[i]==0){ + if(outputUInt32[i]){ + if(prevUInt32[i*2] != *inputUInt32[i*2]){ + *outputUInt32[i] = *inputUInt32[i*2]; + prevUInt32[i*2] = *inputUInt32[i*2]; + prevUInt32[1+i*2] = *inputUInt32[1+i*2]; + } + } else if(outputFloat32[i]){ + if(prevFloat32[i*2] != *inputFloat32[i*2]){ + *outputFloat32[i] = *inputFloat32[i*2]; + prevFloat32[i*2] = *inputFloat32[i*2]; + prevFloat32[1+i*2] = *inputFloat32[1+i*2]; + } + } + } else { + if(outputUInt32[i]){ + if(prevUInt32[1+i*2] != *inputUInt32[1+i*2]){ + *outputUInt32[i] = *inputUInt32[1+i*2]; + prevUInt32[i*2] = *inputUInt32[i*2]; + prevUInt32[1+i*2] = *inputUInt32[1+i*2]; + } + } else if (outputFloat32[i]){ + if(prevFloat32[1+i*2] != *inputFloat32[1+i*2]){ + *outputFloat32[i] = *inputFloat32[1+i*2]; + prevFloat32[i*2] = *inputFloat32[i*2]; + prevFloat32[1+i*2] = *inputFloat32[1+i*2]; + } + } + } + } + return true; +} + +CLASS_REGISTER(JASourceChoiseGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.h b/EC-GN-JA-PCF/target/main/c++/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.h new file mode 100644 index 0000000..2a4cd80 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.h @@ -0,0 +1,84 @@ +/** + * @file JASourceChoiseGAM.h + * @brief Header file for class JASourceChoiseGAM + * @date Mar 04, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JASourceChoiseGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JASourceChoiseGAM_H_ +#define GAMS_JASourceChoiseGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +class JASourceChoiseGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JASourceChoiseGAM(); + + virtual ~JASourceChoiseGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + //GAM fixed parameters. + MARTe::uint32 numberOfPVs; + + // Input signals + std::vector inputUInt32; + std::vector inputFloat32; + std::vector choise; + + // Output signals + std::vector outputUInt32; + std::vector outputFloat32; + + // Previous Input value + std::vector prevUInt32; + std::vector prevFloat32; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JASourceChoiseGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JASourceChoiseGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/c++/GAMs/JASourceChoiseGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JASourceChoiseGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JASourceChoiseGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/c++/GAMs/JASourceChoiseGAM/Makefile.inc new file mode 100644 index 0000000..52d83e4 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JASourceChoiseGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JASourceChoiseGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JASourceChoiseGAM$(LIBEXT) \ + $(BUILD_DIR)/JASourceChoiseGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.cpp b/EC-GN-JA-PCF/target/main/c++/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.cpp new file mode 100644 index 0000000..1d3f9c1 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.cpp @@ -0,0 +1,206 @@ +/** + * @file JATerminalInterfaceGAM.cpp + * @brief Source file for class JATerminalInterfaceGAM + * @date Feb 19, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JATerminalInterfaceGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JATerminalInterfaceGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JATerminalInterfaceGAM::JATerminalInterfaceGAM() { + + // Fixed GAM input + aps_hvon_term = 0; + + // Parameters which get from Input signals. + mhvps_hvon = NULL_PTR(MARTe::uint32 *); + aps_hvon = NULL_PTR(MARTe::uint32 *); + aps_swon = NULL_PTR(MARTe::uint32 *); + bps_hvon = NULL_PTR(MARTe::uint32 *); + bps_swon = NULL_PTR(MARTe::uint32 *); + + stateMachineOutput = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignalNI6259 = NULL_PTR(MARTe::uint32 *); + outputSignalNI6528P3 = NULL_PTR(MARTe::uint8 *); + outputSignalNI6528P4 = NULL_PTR(MARTe::uint8 *); + + aps_hvon_state = 0; + aps_swon_state = 0; + mhvps_hvon_state = 0; + bps_hvon_state = 0; + bps_swon_state = 0; + p3Value = 0; + p4Value = 0; +} + +JATerminalInterfaceGAM::~JATerminalInterfaceGAM() { +} + +bool JATerminalInterfaceGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("mhvps_hvon_term", mhvps_hvon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon_term", aps_hvon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon_term", aps_swon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon_term", bps_hvon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon_term", bps_swon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon_term shall be specified"); + } + } + return ok; +} + +bool JATerminalInterfaceGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JATerminalInterfaceGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 9u); + if (ok) { + ok = (numberOfOutputSignals == 3u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Three output signals shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit || inputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint8", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint8", signalName.Buffer()); + } + } + } + if (ok) { + //mhvps_manm = reinterpret_cast(GetInputSignalMemory(0)); + mhvps_hvon = reinterpret_cast(GetInputSignalMemory(0)); + //aps_manm = reinterpret_cast(GetInputSignalMemory(2)); + aps_hvon = reinterpret_cast(GetInputSignalMemory(1)); + aps_swon = reinterpret_cast(GetInputSignalMemory(2)); + //bps_manm = reinterpret_cast(GetInputSignalMemory(5)); + bps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + bps_swon = reinterpret_cast(GetInputSignalMemory(4)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(5)); + stateMachineOutput = reinterpret_cast(GetInputSignalMemory(6)); + ni6528p3Value = reinterpret_cast(GetInputSignalMemory(7)); + ni6528p4Value = reinterpret_cast(GetInputSignalMemory(8)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(0)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(1)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(2)); + + } + return ok; +} + +bool JATerminalInterfaceGAM::Execute() { + using namespace MARTe; + uint8 sm = *stateMachineOutput; + + + //Update HVPS state + aps_hvon_state = ((sm >> (0))&1); + aps_swon_state = ((sm >> (4))&1); + mhvps_hvon_state = ((sm >> (2))&1); + bps_hvon_state = ((sm >> (1))&1); + bps_swon_state = ((sm >> (3))&1); + + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state; + *outputSignalNI6259 = 1*aps_swon_state; + //uint8 ni6528p3ValueTemp = 0;//*ni6528p3Value; + //ni6528p3ValueTemp &= ~(1<<2); //Does not turn on ni6258 aps switch + //Update terminal value + //*outputSignalNI6528P3 = ~(ni6528p3ValueTemp | p3Value); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + + p4Value = 8*mhvps_hvon_state; + *outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + return true; +} + +CLASS_REGISTER(JATerminalInterfaceGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.h b/EC-GN-JA-PCF/target/main/c++/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.h new file mode 100644 index 0000000..773cbd6 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.h @@ -0,0 +1,157 @@ +/** + * @file JATerminalInterfaceGAM.h + * @brief Header file for class JATerminalInterfaceGAM + * @date Feb 19, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JATerminalInterfaceGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JATerminalInterfaceGAM_H_ +#define GAMS_JATerminalInterfaceGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM calculates one output value by comparing input value and fixed parameters. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ * 
+ *         +terminalInterfaceGAM = {
+ *           Class = JATerminalInterfaceGAM
+ *           mhvps_hvon_term = 4
+ *           aps_hvon_term = 1
+ *           aps_swon_term = 16
+ *           bps_hvon_term = 2
+ *           bps_swon_term = 8
+ *           InputSignals = {
+ *               MHVPS_HVON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = NI6259
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JATerminalInterfaceGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JATerminalInterfaceGAM(); + + virtual ~JATerminalInterfaceGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + // Fixed GAM input + MARTe::uint32 mhvps_hvon_term; + MARTe::uint32 aps_hvon_term; + MARTe::uint32 aps_swon_term; + MARTe::uint32 bps_hvon_term; + MARTe::uint32 bps_swon_term; + + // Input signals + //MARTe::uint32 *mhvps_manm; + MARTe::uint32 *mhvps_hvon; + + //MARTe::uint32 *aps_manm; + MARTe::uint32 *aps_hvon; + MARTe::uint32 *aps_swon; + + //MARTe::uint32 *bps_manm; + MARTe::uint32 *bps_hvon; + MARTe::uint32 *bps_swon; + + MARTe::uint32 *short_pulse_mode; + + MARTe::uint32 *stateMachineOutput; + MARTe::uint8 *ni6528p3Value; + MARTe::uint8 *ni6528p4Value; + + // Output signals + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JATerminalInterfaceGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JATerminalInterfaceGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/c++/GAMs/JATerminalInterfaceGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JATerminalInterfaceGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JATerminalInterfaceGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/c++/GAMs/JATerminalInterfaceGAM/Makefile.inc new file mode 100644 index 0000000..0f3e2aa --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JATerminalInterfaceGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JATerminalInterfaceGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JATerminalInterfaceGAM$(LIBEXT) \ + $(BUILD_DIR)/JATerminalInterfaceGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.cpp b/EC-GN-JA-PCF/target/main/c++/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.cpp new file mode 100644 index 0000000..7004a1f --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.cpp @@ -0,0 +1,178 @@ +/** + * @file JATriangleWaveGAM.cpp + * @brief Source file for class JATriangleWaveGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JATriangleWaveGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "AdvancedErrorManagement.h" +#include "JATriangleWaveGAM.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +MARTe::float32 absFloat(MARTe::float32 x) { + if (x < 0.0f) { + return -x; + } + return x; +} + +JATriangleWaveGAM::JATriangleWaveGAM() { + frequency = NULL_PTR(MARTe::float32 *); + amplitude = NULL_PTR(MARTe::float32 *); + offset = NULL_PTR(MARTe::float32 *); + plcStandby = NULL_PTR(MARTe::uint32 *); + waveOutput = NULL_PTR(MARTe::float32 *); + time = 0.0f; +} + +JATriangleWaveGAM::~JATriangleWaveGAM() { +} + +bool JATriangleWaveGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + return GAM::Initialise(data); +} + +bool JATriangleWaveGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 4u); + if (ok) { + ok = (numberOfOutputSignals == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "One output signal shall be defined."); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Four input signals shall be defined."); + } + uint32 freqIndex; + uint32 ampIndex; + uint32 offsetIndex; + uint32 plcStandbyIndex; + if (ok) { + StreamString signalName = "Frequency"; + ok = GetSignalIndex(InputSignals, freqIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Frequency input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, freqIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Frequency shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Amplitude"; + ok = GetSignalIndex(InputSignals, ampIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Amplitude input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, ampIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Amplitude shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Offset"; + ok = GetSignalIndex(InputSignals, offsetIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Offset input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, offsetIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Offset shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "PLCSTANDBY"; + ok = GetSignalIndex(InputSignals, plcStandbyIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLCSTANDBY input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, plcStandbyIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLCSTANDBY shall be defined as uint32."); + } + } + } + if (ok) { + TypeDescriptor inputType = GetSignalType(OutputSignals, 0); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Amplitude shall be defined as float32."); + } + } + if (ok) { + frequency = reinterpret_cast(GetInputSignalMemory(freqIndex)); + amplitude = reinterpret_cast(GetInputSignalMemory(ampIndex)); + offset = reinterpret_cast(GetInputSignalMemory(offsetIndex)); + plcStandby = reinterpret_cast(GetInputSignalMemory(plcStandbyIndex)); + waveOutput = reinterpret_cast(GetOutputSignalMemory(0)); + } + return ok; +} + +bool JATriangleWaveGAM::Execute() { + using namespace MARTe; + // If frequency is not set, output 0. + if (*frequency <= 0.0f || *plcStandby == 0u) { + *waveOutput = 0.0f; + return true; + } + // Increase the current time. + ++time; + // Calculate the period in milliseconds + float32 periodMs = 1000.0 / *frequency; + // Make sure the time is on [0, periodMs] interval. + while (time > periodMs) { + time -= periodMs; + } + // Formula: + // f(x) = |x - 0.5| * 2 * amplitude + // where x is between 0 and 1 + *waveOutput = absFloat((time / periodMs) - 0.5f) * 2.0f * (*amplitude) + *offset; + return true; +} + +CLASS_REGISTER(JATriangleWaveGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.h b/EC-GN-JA-PCF/target/main/c++/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.h new file mode 100644 index 0000000..22e34c3 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.h @@ -0,0 +1,130 @@ +/** + * @file JATriangleWaveGAM.h + * @brief Header file for class JATriangleWaveGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JATriangleWaveGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JATRIANGLEWAVEGAM_H_ +#define GAMS_JATRIANGLEWAVEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM provides triangular waveform output within 1kHz thread. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *      +CCPSWaveformGAM = {
+ *           Class = JATriangleWaveGAM
+ *           InputSignals = {
+ *               Offset = {
+ *                   Alias = OFFSET
+ *                   DataSource = EPICSCAInput
+ *                   Type = float32
+ *               }
+ *               Frequency = {
+ *                   Alias = CCPS_OUTPUT_FREQ
+ *                   DataSource = EPICSCAInput
+ *                   Type = float32
+ *               }
+ *               Amplitude = {
+ *                   Alias = CCPS_OUTPUT_AMP
+ *                   DataSource = EPICSCAInput
+ *                   Type = float32
+ *               }
+ *               PLCCCPSON = {
+ *                   Alias = PLC_CCPSON
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+  *              READY = {
+ *                   Alias = PLC_READY
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               CCPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JATriangleWaveGAM : public MARTe::GAM { +public: + CLASS_REGISTER_DECLARATION() + + JATriangleWaveGAM(); + + virtual ~JATriangleWaveGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); +private: + // Input signal containing the frequency of the waveform. + MARTe::float32 *frequency; + + // Input signal containing the amplitude of the waveform. + MARTe::float32 *amplitude; + + // Input signal cantaining the offset of the waveform. + MARTe::float32 *offset; + + // Input signal containing CCPS_ON_REQUEST + //MARTe::uint32 *plcccpson; + + // Input signal condition CCPS_READY + //MARTe::uint32 *plcReady; + + // Input signal condition CCPS_STANDBY + MARTe::uint32 *plcStandby; + + MARTe::float32 *waveOutput; + + MARTe::float32 time; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JATRIANGLEWAVEGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JATriangleWaveGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/c++/GAMs/JATriangleWaveGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JATriangleWaveGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JATriangleWaveGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/c++/GAMs/JATriangleWaveGAM/Makefile.inc new file mode 100644 index 0000000..495d6ae --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JATriangleWaveGAM/Makefile.inc @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JATriangleWaveGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JATriangleWaveGAM$(LIBEXT) \ + $(BUILD_DIR)/JATriangleWaveGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JAWFRecordGAM/JAWFRecordGAM.cpp b/EC-GN-JA-PCF/target/main/c++/GAMs/JAWFRecordGAM/JAWFRecordGAM.cpp new file mode 100644 index 0000000..b26b6bd --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JAWFRecordGAM/JAWFRecordGAM.cpp @@ -0,0 +1,317 @@ +/** + * @file JAWFRecordGAM.cpp + * @brief Source file for class JAWFRecordGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAWFRecordGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAWFRecordGAM.h" + +#include "AdvancedErrorManagement.h" +#include "CLASSMETHODREGISTER.h" +#include "File.h" +#include "MessageI.h" +#include "RegisteredMethodsMessageFilter.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +// How often output signals are updated. +const MARTe::uint32 cycleMs = 10u; + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAWFRecordGAM::JAWFRecordGAM() : + GAM() { + filenameSignalIndex = 0u; + timeSignal = NULL_PTR(MARTe::int32 *); + loadTriggerSignal = NULL_PTR(MARTe::uint32 *); + valueSignals = NULL_PTR(MARTe::float32 **); + maxElements = 0u; + readOnce = true; +} + +JAWFRecordGAM::~JAWFRecordGAM() { + if (valueSignals != NULL_PTR(MARTe::float32 **)) { + delete[] valueSignals; + } +} + +bool JAWFRecordGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("Directory", directory); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Directory shall be specified"); + } + } + return ok; +} + +bool JAWFRecordGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 2u); + if (ok) { + ok = (numberOfOutputSignals > 1u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "At least two output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Two input signal with the filename and file load trigger shall be defined"); + } + if (ok) { + StreamString signalName = "Filename"; + ok = GetSignalIndex(InputSignals, filenameSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Filename input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, filenameSignalIndex); + ok = (inputType == CharString); + if (!ok) { + ok = (inputType == Character8Bit); + } + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, filenameSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as string", signalName.Buffer()); + } + } + } + if (ok) { + StreamString signalName = "CSV_LOAD"; + uint32 loadSignalIndex; + ok = GetSignalIndex(InputSignals, loadSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "CSV_LOAD input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, loadSignalIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, loadSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } else { + loadTriggerSignal = reinterpret_cast(GetInputSignalMemory(loadSignalIndex)); + } + } + } + if (ok) { + TypeDescriptor timeType = GetSignalType(OutputSignals, 0); + + ok = (timeType == SignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, 0, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as int32", signalName.Buffer()); + } + + uint32 i; + for (i = 1u; (i < numberOfOutputSignals) && (ok); i++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, i); + ok = (outputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, i, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } + else { + uint32 dimentionsCount; + ok = GetSignalNumberOfDimensions(OutputSignals, 0u, dimentionsCount); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Output signals shall have 1 dimension."); + } + else { + uint32 elementsCount; + ok = GetSignalNumberOfElements(OutputSignals, 0u, elementsCount); + if (maxElements == 0) { + maxElements = elementsCount; + } + else { + ok = (maxElements == elementsCount); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Output signals shall have consistent number of elements."); + } + } + } + } + } + } + if (ok) { + valueSignals = new float32*[numberOfOutputSignals - 1u]; + uint32 i; + for (i = 1u; i < numberOfOutputSignals; i++) { + valueSignals[i - 1] = reinterpret_cast(GetOutputSignalMemory(i)); + } + timeSignal = reinterpret_cast(GetOutputSignalMemory(0)); + } + return ok; +} + +bool JAWFRecordGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + if (strcmp(nextStateName, "WaitReady") == 0) { + // Reset read once flag when reentering WaitReady state. + readOnce = true; + } + return true; +} + +void JAWFRecordGAM::LoadFile() { + using namespace MARTe; + + bool ok = true; + + const char8 * const filenameSignal = reinterpret_cast(GetInputSignalMemory(filenameSignalIndex)); + StreamString filename = directory; + filename += DIRECTORY_SEPARATOR; + filename += filenameSignal; + REPORT_ERROR(ErrorManagement::Debug, "Opening file %s", filename.Buffer()); + + File f; + ok = f.Open(filename.Buffer(), BasicFile::ACCESS_MODE_R); + + uint32 numberOfPreProgrammedTimeRows = 0u; + int32 *preProgrammedTime; + float32 **preProgrammedValues; + uint32 numberOfPreProgrammedValues = 0u; + + if (ok) { + StreamString tokenLine; + while (f.GetLine(tokenLine)) { + if (tokenLine[0] != '#') { + numberOfPreProgrammedTimeRows++; + } + tokenLine = ""; + } + f.Seek(0); + uint32 t = 0u; + tokenLine = ""; + while ((ok) && (f.GetLine(tokenLine))) { + if (tokenLine[0] == '#') { + tokenLine = ""; + continue; + } + if (numberOfPreProgrammedValues == 0) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + while (tokenLine.GetToken(token, ",", ignored)) { + numberOfPreProgrammedValues++; + token = ""; + } + ok = numberOfPreProgrammedValues == numberOfOutputSignals; + // Remove time from pre-programmed values count. + numberOfPreProgrammedValues -= 1u; + if (ok) { + preProgrammedTime = new int32[maxElements]; + memset(preProgrammedTime, 0, maxElements * sizeof(int32)); + preProgrammedValues = new float32*[numberOfPreProgrammedValues]; + uint32 j; + for (j = 0u; j < numberOfPreProgrammedValues; j++) { + preProgrammedValues[j] = new float32[maxElements]; + memset(preProgrammedValues[j], 0, maxElements * sizeof(float32)); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Number of columns in csv file (%d) is not consistent with the number of output signals (%d)", numberOfPreProgrammedValues, + numberOfOutputSignals - 1u); + } + } + if (ok) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + uint32 idx = 0u; + while (tokenLine.GetToken(token, ",", ignored)) { + if (idx == 0u) { + preProgrammedTime[t] = atoi(token.Buffer()); + } + else { + ok = ((idx - 1) < numberOfPreProgrammedValues); + if (ok) { + preProgrammedValues[idx - 1][t] = static_cast(atof(token.Buffer())); + } + else { + REPORT_ERROR(ErrorManagement::FatalError, "Number of columns in csv file is not consistent with the number of output signals in line %d", t); + } + } + token = ""; + idx++; + } + t++; + } + tokenLine = ""; + } + f.Close(); + } else { + REPORT_ERROR(ErrorManagement::Debug, "Cannot open the file %s", filename.Buffer()); + return; + } + if (numberOfPreProgrammedTimeRows > maxElements) { + REPORT_ERROR(ErrorManagement::Warning, "Only %d (out of %d) of pre-programmed values will be written to waveform record.", + maxElements, numberOfPreProgrammedTimeRows); + } + ok = MemoryOperationsHelper::Copy(timeSignal, preProgrammedTime, maxElements * sizeof(int32)); + uint32 i; + for (i = 0u; (i < numberOfPreProgrammedValues) && (ok); ++i) { + ok = MemoryOperationsHelper::Copy(valueSignals[i], preProgrammedValues[i], maxElements * sizeof(float32)); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::Warning, "Failed to write data to waveform record."); + } + + if (preProgrammedValues != NULL_PTR(float32 **)) { + uint32 i; + for (i = 0u; i < numberOfPreProgrammedValues; i++) { + delete preProgrammedValues[i]; + } + delete[] preProgrammedValues; + } + if (preProgrammedTime != NULL_PTR(int32 *)) { + delete[] preProgrammedTime; + } +} + +bool JAWFRecordGAM::Execute() { + if (*loadTriggerSignal == 1u) { + if (readOnce) { + LoadFile(); + readOnce = false; + } + } else { + // Reset read once flag when loadTriggerSignal is reset. + readOnce = true; + } + return true; +} + +CLASS_REGISTER(JAWFRecordGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JAWFRecordGAM/JAWFRecordGAM.h b/EC-GN-JA-PCF/target/main/c++/GAMs/JAWFRecordGAM/JAWFRecordGAM.h new file mode 100644 index 0000000..ee22c1a --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JAWFRecordGAM/JAWFRecordGAM.h @@ -0,0 +1,130 @@ +/** + * @file JAWFRecordGAM.h + * @brief Header file for class JAWFRecordGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAWFRecordGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAWFRECORDGAM_H_ +#define GAMS_JAWFRECORDGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include "Message.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that is used for pre-programmed operation. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *       +WFRecordGAM = {
+ *           Class = JAWFRecordGAM
+ *           Directory = "../Configurations" 
+ *           InputSignals = {
+ *               CSV_LOAD = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               Filename = {
+ *                   Alias = CSV_NAME
+ *                   DataSource = EPICSCAInput
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               PREP_TIME_WF = {
+ *                   DataSource = DDB1
+ *               }
+ * *             MHVPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               BPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               APS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               MCPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               GCPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               FHPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *           }
+ *       }
+ * 
+ * + */ + +class JAWFRecordGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAWFRecordGAM(); + + virtual ~JAWFRecordGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + void LoadFile(); + + MARTe::uint32 filenameSignalIndex; + + MARTe::uint32 *loadTriggerSignal; + + MARTe::StreamString directory; + + MARTe::float32 **valueSignals; + + MARTe::int32 *timeSignal; + + MARTe::uint32 maxElements; + + // Flag determining whether file should be read (so it isn't read multiple time) + bool readOnce; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAWFRECORDGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JAWFRecordGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/c++/GAMs/JAWFRecordGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JAWFRecordGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/JAWFRecordGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/c++/GAMs/JAWFRecordGAM/Makefile.inc new file mode 100644 index 0000000..608ea6c --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/JAWFRecordGAM/Makefile.inc @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAWFRecordGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../../../obj +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAWFRecordGAM$(LIBEXT) \ + $(BUILD_DIR)/JAWFRecordGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/Makefile b/EC-GN-JA-PCF/target/main/c++/GAMs/Makefile new file mode 100644 index 0000000..61a2101 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/Makefile @@ -0,0 +1,28 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +export TARGET=x86-linux + +include Makefile.gcc diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/Makefile.gcc b/EC-GN-JA-PCF/target/main/c++/GAMs/Makefile.gcc new file mode 100644 index 0000000..e0a2fc4 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/Makefile.gcc @@ -0,0 +1,26 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +############################################################# + +include Makefile.inc + diff --git a/EC-GN-JA-PCF/target/main/c++/GAMs/Makefile.inc b/EC-GN-JA-PCF/target/main/c++/GAMs/Makefile.inc new file mode 100644 index 0000000..8dfc149 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/GAMs/Makefile.inc @@ -0,0 +1,45 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +SPB = JAMessageGAM.x JAPreProgrammedGAM.x JAModeControlGAM.x \ + JAWFRecordGAM.x JATriangleWaveGAM.x JARampupGAM.x \ + JARTStateMachineGAM.x JASDNRTStateMachineGAM.x JATerminalInterfaceGAM.x \ + JABitSumGAM.x JAConditionalSignalUpdateGAM.x JASourceChoiseGAM.x JABitReverseGAM.x + +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults + +ROOT_DIR=../../../obj +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +all: $(OBJS) $(SUBPROJ) check-env + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + +check-env: +ifndef MARTe2_DIR + $(error MARTe2_DIR is undefined) +endif diff --git a/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/Gyrotron01DAN.cpp b/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/Gyrotron01DAN.cpp new file mode 100644 index 0000000..46ae827 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/Gyrotron01DAN.cpp @@ -0,0 +1,639 @@ +/****************************************************************************** + * $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp-sdn/main/c++/prog/prog.cpp.template $ + * $Id: prog.cpp.template 83098 2018-01-08 13:23:38Z cesnikt $ + * + * Project : CODAC Core System + * + * Description : GyrotronDAN program + * + * Author : codac-dev + * + * Copyright (c) : 2010-2018 ITER Organization, + * CS 90 046 + * 13067 St. Paul-lez-Durance Cedex + * France + * + * This file is part of ITER CODAC software. + * For the terms and conditions of redistribution or use of this software + * refer to the file ITER-LICENSE.TXT located in the top level directory + * of the distribution package. + ******************************************************************************/ + +/* header files */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +//#include +#define float32_t float32_t1 +#include +#undef float32_t + +#include +#include +#include +#include +#include +#include + +#include + +// global variables +static bool __terminate = false; +char pxie6368_0_ai_fd[] = "/dev/pxie-6368.0.ai"; // ai segment +char pxie6368_0_device[] = "/dev/pxie-6368.0"; // device descriptor + +typedef struct { + int daq_smpl_rate; + int daq_mode; + double daq_smpl_st_dly; + double daq_len; + double daq_pub_dly; +} daq_parameters; + +void signal_handler(int signal) { + log_info("Received signal '%d' to terminate", signal); + __terminate = true; +}; + +// DAN parameter reload function ------------------------------------------------ +int reload_daq_conf(int *aifd, int *ai_chan_fd, daq_parameters *daq_p) { + std::cout << "reload_daq_conf was called \n"; + + // Common variables + int retval; + unsigned long number_of_samples; + int chan_num = 10; // Channel number to add. + uint32_t sample_period_divisor; + uint32_t base_clock = 100000000; // TB3:100MHz, TB2:100 kHz + uint32_t pre_samples = 1000; + uint32_t post_samples = 1000; + char str[40]; + xseries_ai_conf_t conf; // ai segment configuraton data + + // calculate sampling period divisor + if (daq_p->daq_smpl_rate != 0) { + sample_period_divisor = base_clock / daq_p->daq_smpl_rate; + } else { + return 0; + } + + // Stop ai segment---------------------------------------------------------------------- + retval = xseries_stop_ai(*aifd); + if (retval) { + log_error("ai segment stop failed.\n"); + } else { + log_info("ai segment stopped.\n"); + } + + // reset ai segment--------------------------------------------------------------------- + retval = xseries_reset_ai(*aifd); + if (retval) { + log_error("ai segment reset failed.\n"); + return -1; + } + + // Configure AI segment mode ------------------------------------------------------------ + switch (daq_p->daq_mode) { + case 0: + conf = xseries_software_timed_ai(); + log_info("software_timed mode.\n"); + break; + case 1: + conf = xseries_finite_ai(number_of_samples); + log_info("finite mode.\n"); + break; + case 2: + conf = xseries_retriggerable_finite_ai(number_of_samples); + log_info("retriggerable_finite mode.\n"); + break; + case 3: + conf = xseries_continuous_ai(); + log_info("continuous mode.\n"); + break; + case 4: + conf = xseries_reference_ai(pre_samples, post_samples); + log_info("reference mode.\n"); + break; + } + + // disable external gate + retval = xseries_set_ai_external_gate(&conf, + XSERIES_AI_EXTERNAL_GATE_DISABLED, // No external pause signal + XSERIES_AI_POLARITY_ACTIVE_LOW_OR_FALLING_EDGE); // Don't care + if (retval) { + log_error("Cannot set gate trigger.\n"); + return -1; + } + + // select start trigger (START1 signal) + retval = xseries_set_ai_start_trigger(&conf, + XSERIES_AI_START_TRIGGER_SW_PULSE, // Set the line to software-driven + XSERIES_AI_POLARITY_ACTIVE_HIGH_OR_RISING_EDGE, // Make line active on rising... + 1); // ... edge (not high level) + if (retval) { + log_error("Cannot set start trigger.\n"); + return -1; + } + + // set sampling clock source---------------------------------------------------------------------------------------- + retval = xseries_set_ai_sample_clock(&conf, + XSERIES_AI_SAMPLE_CONVERT_CLOCK_INTERNALTIMING, + XSERIES_AI_POLARITY_ACTIVE_HIGH_OR_RISING_EDGE, 1); + if (retval) { + log_error("Cannot configure sampling clock.\n"); + return -1; + } + + // set scan interval ------------------------------------------------------------------------------------------------------------------------- + retval = xseries_set_ai_scan_interval_counter(&conf, + XSERIES_SCAN_INTERVAL_COUNTER_TB3, // TB3 : 100MHz base clock, TB2 : 100kHz base clock + XSERIES_SCAN_INTERVAL_COUNTER_POLARITY_RISING_EDGE, + sample_period_divisor, 2); // Wait 2*100MHz sec after sampling trig. + if (retval) { + log_error("Cannot configure scan counter.\n"); + return -1; + } + + // Set DMA buffer size----------------------------------------------------------------------------------------------------------------------- + retval = xseries_set_ai_attribute(&conf, XSERIES_AI_DMA_BUFFER_SIZE, 1000); + if (retval) { + log_error("DMA configuration was failed.\n"); + return -1; + } + + // Add AI channels --------------------------------------------------------------------------------------------------------------------------- + for (int i = 0; i < chan_num; i++) { + retval = xseries_add_ai_channel(&conf, i, XSERIES_INPUT_RANGE_10V, + XSERIES_AI_CHANNEL_TYPE_DIFFERENTIAL, 0); + if (retval) { + log_error("Add AI channel %d was failed.\n", i); + return -1; + } + } + sleep(3); + + // Load configuration.----------------------------------------------------------------------------------------------------------------------- + retval = xseries_load_ai_conf(*aifd, conf); + if (retval) { + log_error("xseries_load_ai_conf was failed. error code: %d \n", retval); + exit (EXIT_FAILURE); + } + sleep(3); + + // Open channels-------------------------------------------------------------------------------------------------------------------------------- + for (int i = 0; i < chan_num; i++) { + sprintf(str, "%s.ai.%u", pxie6368_0_device, i); + //ai_chan_fd[i] = open(str, O_RDWR | O_NONBLOCK); + ai_chan_fd[i] = open(str, O_RDWR); + if (ai_chan_fd[i] < 0) { + log_error("Cannot open ai channel %d .\n",i); + sleep(1); + exit (EXIT_FAILURE); + } + } + + // start ai segment task----------------------------------------------------------------------------------------------------------------------- + retval = xseries_start_ai(*aifd); + if (retval) { + log_error("ERROR, starting AI segment failed: %s\n", strerror(retval)); + exit (EXIT_FAILURE); + } + + log_info("PXIe-6368 configuration was finished.\n"); + return 0; +}; + + + +int main(int argc, char **argv) { + using namespace std; + unsigned long n_sample_quotient = 0; + + log_initialize(NULL); + + while (!__terminate) { + // Install signal handler to support graceful termination + sigset(SIGTERM, signal_handler); + sigset(SIGINT, signal_handler); + sigset(SIGHUP, signal_handler); + + // ---------------------------------------------------------------------------------------------------------------- + // Running parameter declaration + // ---------------------------------------------------------------------------------------------------------------- + // pxie6368 hardware parameters + int pxie6368_0_device_number = 0; // device discriptor number + int aifd = 0; // ai segment file discriptor + xseries_ai_conf_t conf; // ai segment config + xseries_ai_attribute_t aiatrb; // ai segment attributes + char str[40]; // fd tmp var + int ai_chan_fd[16]; // ai channels file discriptor + int pxie6368_sampling_rate = 1000; // sampling rate Hz + uint32_t sample_period_divisor = 100000000 / pxie6368_sampling_rate; // TB3 100MHz, TB2:100kHz, TB1:20MHz + int sampleSize = 2; // Sample size in bytes <---> uInt16 + int n_channels; // Number of opened channels + struct xseries_dma *dma; // Ptr to dma struct + int chan_num = 10; // Channel number to add. + + // DAN parameters + char dan_source_name[] = "GYADanSource"; // DAN data source (ds) name + long offset_ai = 0; // offset size in published data + int dma_mode = 1; // 0:All, 1:AI only, 2:AO only + dan_DataCore dc = NULL; // Datacore reference declaration + dan_Source ds = NULL; // DAN source declaration + long samplesCounter = 0; // Total acquired sample size + size_t n_samples; // prepared sample size to publish + + // TCN parameters + uint64_t tBase_old = 0; + uint64_t tBase = 0; // TCN publishing base time + uint64_t nanos; // time length for sampling + hpn_timestamp_t delay = 1e7; // wait for publishing (10ms) + char buf[ISO_8601_LEN]; + uint64_t tBase0 = 0; + + // Operation tmp parameter + int result; // For result values. + int exValue; + bool toterminate = false; + int retval; + bool daq_start = false; + int testcounter = 10000; + + // Connected EPCIS PV + + // DAQ config PVs + chid daq_smpl_rate_id; + chtype daq_smpl_rate_type; + int daq_smpl_rate; + chid daq_smpl_rate_rb_id; + chtype daq_smpl_rate_rb_type; + int daq_smpl_rate_rb; + chid daq_mode_id; + chtype daq_mode_type; + int daq_mode; + chid daq_mode_rb_id; + chtype daq_mode_rb_type; + int daq_mode_rb; + chid daq_sw_trig_id; + chtype daq_sw_trig_type; + int daq_sw_trig; + chid daq_smpl_st_dly_id; + chtype daq_smpl_st_dly_type; + double daq_smpl_st_dly; + chid daq_smpl_st_dly_rb_id; + chtype daq_smpl_st_dly_rb_type; + double daq_smpl_st_dly_rb; + chid daq_len_id; + chtype daq_len_type; + double daq_len; + chid daq_len_rb_id; + chtype daq_len_rb_type; + double daq_len_rb; + chid daq_reconf_id; + chtype daq_reconf_type; + int daq_reconf; + chid daq_pub_dly_id; + chtype daq_pub_dly_type; + double daq_pub_dly; + chid daq_pub_dly_rb_id; + chtype daq_pub_dly_rb_type; + double daq_pub_dly_rb; + + chid daq_stat_id; + chtype daq_stat_type; + int daq_stat; + chid daq_conf_stat_id; + chtype daq_conf_stat_type; + int daq_conf_stat; + + daq_parameters daq_p = { 0 }; // = {daq_smpl_rate, daq_smpl_rate_rb, daq_mode, daq_mode_rb}; + + // ---------------------------------------------------------------------------------------------------------------------------------------------- + // EPICS PV connection + // ---------------------------------------------------------------------------------------------------------------------------------------------- + //Initialize ChannelAccess interface + CAInterface_Initialize(); + + // Connect to EPICS PVs + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE", daq_smpl_rate_id); + daq_smpl_rate_type = DBR_LONG; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE-RB", daq_smpl_rate_rb_id); + daq_smpl_rate_rb_type = DBR_LONG; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-MODE", daq_mode_id); + daq_mode_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-MODE-RB", daq_mode_rb_id); + daq_mode_rb_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-SW-TRIG", daq_sw_trig_id); + daq_sw_trig_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-SMPL-ST-DLY", daq_smpl_st_dly_id); + daq_smpl_st_dly_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-SMPL-ST-DLY-RB", daq_smpl_st_dly_rb_id); + daq_smpl_st_dly_rb_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-LEN", daq_len_id); + daq_len_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-LEN-RB", daq_len_rb_id); + daq_len_rb_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-RECONF", daq_reconf_id); + daq_reconf_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-PUB-DLY", daq_pub_dly_id); + daq_pub_dly_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-PUB-DLY-RB", daq_pub_dly_rb_id); + daq_pub_dly_rb_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-STAT", daq_stat_id); + daq_stat_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-CONF-STAT", daq_conf_stat_id); + daq_conf_stat_type = DBR_ENUM; + + tcn_sleep(3e9);// Wait for a while. + + // ---------------------------------------------------------------------------------------------------------------- + // Initialize tcn library + // ---------------------------------------------------------------------------------------------------------------- + int tcn_err; + tcn_err = tcn_init(); + if (tcn_err != TCN_SUCCESS) { + log_error("TCN Initialization failed.\n"); + exValue = 1; + goto END; + } + + // ---------------------------------------------------------------------------------------------------------------- + // pxie-6368 settings + // ---------------------------------------------------------------------------------------------------------------- + // Open ai segment---------------------------------------------------------------------- + aifd = open(pxie6368_0_ai_fd, O_RDWR); + if (aifd <= 0) { + log_error("Open PXIe6368 AI fd failed.\n"); + exValue = -1; + goto END; + } + + // wait ai segment setup start + do { + CAInterface_ReadVariable(daq_reconf_id, daq_reconf_type, (void*) &daq_reconf); + } while (!daq_reconf and !__terminate); + + // read parameter + result = CAInterface_ReadVariable(daq_smpl_rate_id, daq_smpl_rate_type, (void *) &daq_p.daq_smpl_rate); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_mode_id, daq_mode_type, (void *) &daq_p.daq_mode); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_smpl_st_dly_id, daq_smpl_st_dly_type, (void *) &daq_p.daq_smpl_st_dly); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_len_id, daq_len_type, (void *) &daq_p.daq_len); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_pub_dly_id, daq_pub_dly_type, (void *) &daq_p.daq_pub_dly); + if (!result) { + log_error("CA_READ failed.\n"); + } + + std::cout << "SAMPLE RATE:" << daq_p.daq_smpl_rate << endl; + std::cout << "MODE :" << daq_p.daq_mode << endl; + std::cout << "START DELAY:" <ai.count * sampleSize, 4096); + + //dan_DataCore, ds_name, devName, enum_daq_type refType, long refSize, long refOffset + if (ds == NULL) { + log_error("Error while publishing DAN source %s ", dan_source_name); + exValue = 1; + goto END; + } + + n_channels = dan_publisher_getNumberOfChannels(ds); + + // ------------------------------------------------------------------------------------------------------------------ + // ----- DAN Streamer. + // ------------------------------------------------------------------------------------------------------------------ + // ----- Open a new stream --------------------------------------------------------------------- + dan_publisher_openStream(ds, daq_p.daq_smpl_rate, 0); + sleep(1); + + // ------------------------------------------------------------------------------------------------------------------ + // ----- Main DAN Loop. + // ------------------------------------------------------------------------------------------------------------------ + while (!__terminate) { + // Wait for the master trigger.---------------------------------------------------------------------------- + daq_stat = 1; //0:Not Ready, 1: Waiting trigger, 2:Acquiring 3:Error + CAInterface_WriteVariable(daq_stat_id, daq_stat_type, &daq_stat); + daq_conf_stat = 1; //0:Not ready, 1: Ready + CAInterface_WriteVariable(daq_conf_stat_id, daq_conf_stat_type, &daq_conf_stat); + + // Wait DAQ Start Software Trigger. + do { + // check daq_sw_trigger to start DAQ sequence. + CAInterface_ReadVariable(daq_sw_trig_id, daq_sw_trig_type, (void*) &daq_sw_trig); + tcn_sleep(1e7); // wait 0.01 s + if (daq_sw_trig) { + daq_start = true; + } + } while (daq_start != true and !__terminate); + + daq_start = false; //reset daq_start flag. + delay = (long) (1e6 * daq_p.daq_pub_dly); //check publish period. + + // Wait a time to start DAQ. ---------------------------------------------------------------------------------------------------------------------- + tcn_sleep(daq_p.daq_smpl_st_dly * 1e6); // in ms + + // After the wating, trigger DAQ ------------------------------------------------------------------------------------------------------------------ + retval = xseries_pulse_ai(aifd, XSERIES_START_TRIGGER); + daq_stat = 2; + CAInterface_WriteVariable(daq_stat_id, daq_stat_type, &daq_stat); + if (retval) { + std::cout << "Cannot generate start trigger!\n"; + goto END; + } else { + tcn_get_time(&tBase); // get DAQ start time. + tBase0 = tBase; // save DAQ start time to tBase0; + tBase_old = tBase; + } + + // DAQ Publish Loop. ---------------------------------------------------------------------------------------------------------------------------- + // DAN data publish is executed every delay time interval. + while (!__terminate && (tcn_wait_until_hr((tBase + delay), &tBase, 0) == TCN_SUCCESS)) { + // Get the number of available samples in PXIe6368 buffer. + n_samples = xsereis_ai_dma_samples_in_buffer(dma); // samples + + if (n_samples > dma->ai.count) { + //log_error("DMA Buffer overflow: Number of new samples in buffer = %ld, AI buffer size = %ld,\n", n_samples, dma->ai.count); + } else if (n_samples > 0) { + //log_info("Current Time:\n%s\n", tcn_strftime(tBase, buf, ISO_8601_LEN)); + if (tBase == 0) { + // "tBase was reset.------------------------------------------------------\n"; + tcn_get_time(&tBase); + tBase -= n_samples * 100000000 / pxie6368_sampling_rate; + nanos = 0; + } else { + // update time offset value. + nanos = n_samples * 100000000 / daq_p.daq_smpl_rate; + } + n_sample_quotient = floor(n_samples / chan_num); + n_samples = n_sample_quotient * chan_num; + + // Publish a new data block -------------------------------------------------------------------------------------------------------------------------- + result = dan_publisher_putBlockReference(ds, + tBase_old + nanos, // timestamp in epoch nanoseconds + n_samples * sampleSize, // datablock size in bytes + offset_ai * sampleSize, // Offset in DAQ buffer + NULL); // No datablock header.... + // Detected overflow in pass datablock reference queue + if (result == -1) { + log_info("%s, Queue overflow with policy %d\n", dan_source_name, dan_publisher_getCheckPolicy(ds)); + } else if (result == -2) { + log_info("%s, DAQ buffer overflow with policy %d\n", dan_source_name, dan_publisher_getCheckPolicy(ds)); + } + } + + samplesCounter += n_samples; // Increment total of published sampes + offset_ai = (offset_ai + n_samples) % dma->ai.count; // Update offset of memory + dma->ai.last_transfer_count = samplesCounter; // Update dma last_transfer_count + + // Check exit condition. + if ((daq_p.daq_len * 1e6 <= (tBase - tBase0))) { + retval = xseries_stop_ai(aifd); + if (retval) { + std::cout << "Stop AI segment failed.\n"; + exit (EXIT_FAILURE); + } + + //restart ai segment. + tcn_sleep(1e9); // wait + retval = xseries_start_ai(aifd); + if (retval) { + std::cout << "Start AI segment failed.\n"; + exit (EXIT_FAILURE); + } + //debug + tcn_sleep(1e8); + n_samples = xsereis_ai_dma_samples_in_buffer(dma); + cout << "n_samples check : " << n_samples << endl; + break; + } + tBase_old = tBase; + } // End of DAQ publish loop. + break; + } // End of DAN main loop. + + // ------------------------------------------------------------------------------------------------------------------ + // ----- Closing program. + // ------------------------------------------------------------------------------------------------------------------ + log_info("DAN end of acquisition, closing all resources"); + + //Closing stream + dan_publisher_closeStream(ds); + exValue = 0; + + // Close all channels + for (int channel = 0; channel < chan_num; channel++) { + close(ai_chan_fd[channel]); + } + goto END; + + END: daq_conf_stat = 0; + CAInterface_WriteVariable(daq_conf_stat_id, daq_conf_stat_type, &daq_conf_stat); + daq_stat = 0; + CAInterface_WriteVariable(daq_stat_id, daq_stat_type, &daq_stat); + // Destroy CA context + CAInterface_Finalize(); + // Close pxie6368 + if (dma != NULL) { + xseries_dma_close(dma); + cout << "pxie-6368 dma was clesed.\n"; + } + + close(aifd); + + // Unpublishing source from DAN API + if (ds != NULL) { + dan_publisher_unpublishSource(dc, ds); + } + + // Closing DAN API library + if (dc != NULL) { + dan_closeLibrary(dc); + } + + // Closing TCN library + result = tcn_finalize(); + if (result != TCN_SUCCESS) { + //log_error("Error finalizing TCN lib.\n"); + } + + } // loop end from initialization + return (0); + +} diff --git a/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/Makefile b/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/Makefile new file mode 100644 index 0000000..ab6bca0 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/Makefile @@ -0,0 +1,68 @@ +#+====================================================================== +# $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp/main/c++/prog/Makefile.template $ +# $Id: Makefile.template 83098 2018-01-08 13:23:38Z cesnikt $ +# +# Project : CODAC Core System +# +# Description : gyrotronDAN Makefile +# +# Author : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2018 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== + +PROGNAME=Gyrotron01DAN + +LIBRARIES=ca dan_api dan_client_api dan_stream dan_base xml2 log sdn sdn-core ccs-core rt pthread tcn nixseries +LIBRARY_DIRS= +INCLUDE_DIRS=. ../include $(CODAC_ROOT)/include $(EPICS_BASE)/include/os/Linux $(EPICS_BASE)/include/compiler/gcc $(EPICS_BASE)/include /usr/include/libxml2 $(SDN_TOPIC_DIRECTORY) + +TARGET=../../../../target +BINARY_DIR=$(TARGET)/bin +OBJECT_DIR=$(TARGET)/obj/$(PROGNAME) +SOURCE_DIR=. + +EXECUTABLE=$(BINARY_DIR)/$(PROGNAME) +INCLUDES=$(foreach inc,$(INCLUDE_DIRS),-I$(inc)) +LDLIBS=-L$(CODAC_ROOT)/lib -L$(EPICS_BASE)/lib/$(EPICS_HOST_ARCH) $(foreach libs,$(LIBRARY_DIRS),-L$(libs) -Wl,-rpath,$(libs)) $(foreach libs,$(LIBRARIES),-l$(libs)) +SOURCES=$(SOURCE_DIR)/$(PROGNAME).cpp $(SOURCE_DIR)/configure_sdn.cpp +# to build executable from all sources in the program directory: +#SOURCES=$(wildcard $(SOURCE_DIR)/*.cpp $(SOURCE_DIR)/*.c) +OBJECTS=$(addprefix $(OBJECT_DIR)/,$(patsubst %.cpp,%.o,$(notdir $(SOURCES)))) + +C=gcc +CC=g++ +CFLAGS=-c -Wall +CCFLAGS=-c -Wall -std=c++11 +LDFLAGS= + +.PHONY: all clean run + +all: $(SOURCES) $(EXECUTABLE) + +clean: + rm -rf "$(EXECUTABLE)" "$(OBJECT_DIR)" + +run: $(SOURCES) $(EXECUTABLE) + $(EXECUTABLE) + +$(EXECUTABLE): $(OBJECTS) + mkdir -p $(BINARY_DIR) + $(CC) $(LDFLAGS) $(LDLIBS) $(OBJECTS) -o $@ + +$(OBJECT_DIR)/%.o: $(SOURCE_DIR)/%.cpp + mkdir -p $(OBJECT_DIR) + $(CC) $(CCFLAGS) $(INCLUDES) $< -o $@ + +$(OBJECT_DIR)/%.o: $(SOURCE_DIR)/%.c + mkdir -p $(OBJECT_DIR) + $(C) $(CFLAGS) $(INCLUDES) $< -o $@ \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/ca-if.h b/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/ca-if.h new file mode 100644 index 0000000..3bcbb4d --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/ca-if.h @@ -0,0 +1,165 @@ +#ifndef CA_IF_H +#define CA_IF_H + +/****************************************************************************** + * $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-log-lib/trunk/src/main/c++/include/tools/any-type.h $ + * $Id: any-type.h 50547 2014-10-09 12:09:51Z bauvirb $ + * + * Project : CODAC Core System + * + * Description : Channel Access Interface + * + * Author : Bertrand Bauvir + * + * Copyright (c) : 2010-2014 ITER Organization, + * CS 90 046 + * 13067 St. Paul-lez-Durance Cedex + * France + * + * This file is part of ITER CODAC software. + * For the terms and conditions of redistribution or use of this software + * refer to the file ITER-LICENSE.TXT located in the top level directory + * of the distribution package. + ******************************************************************************/ + +/* Global header files */ +#include +#include /* Channel Access API definition, etc. */ +//#include /* CCS logging library */ + +/* Local header files */ + +/* Constants */ + +#ifndef log_trace +#define log_trace(arg_msg...) {} +#endif + +#ifndef log_error +#define log_error(arg_msg...){} +#endif + +/* Type definition */ + +/* Global variables */ + +/* Public function declaration */ + +static inline bool CAInterface_Initialize(void) { + bool status = false; + ca_context_create (ca_disable_preemptive_callback); //Default + //ca_context_create(ca_enable_preemptive_callback); + status = true; + + return status; +}; + +static inline bool CAInterface_Finalize(void) { + bool status = false; + ca_context_destroy(); + status = true; + + return status; +}; + +static inline bool CAInterface_ConnectVariable(char* name, chid& id) { + bool status = false; + /* Connect to channels */ + if (ca_create_channel(name, NULL, NULL, 10, &id) != ECA_NORMAL) { + return status; + } + + /* Wait for connections */ + if (ca_pend_io(1) != ECA_NORMAL) { + log_error("%s - ca_pend_io failed", __FUNCTION__); + return status; + } + + /* Verify channel */ + if (ca_state(id) != cs_conn) { + //log_warning("Connection to channel '%s' has not been successful", name); + } else { + //log_info("Connection to channel '%s' has been successfully verified", name); + } + + status = true; + + return status; +}; + +static inline bool CAInterface_ReadVariable(chid channel, chtype type, + void* p_value) { + bool status = false; + if (ca_state(channel) != cs_conn) { + //log_error("%s - Connection to channel has been lost"); + return status; + } + + if (ca_get(type, channel, p_value) != ECA_NORMAL) { + //log_error("%s - ca_get failed", __FUNCTION__); + return status; + } + + /* Flush the requests */ + if (ca_pend_io(1) != ECA_NORMAL) { + //log_error("%s - ca_pend_io failed", __FUNCTION__); + return status; + } + + status = true; + + return status; +}; + +static inline bool CAInterface_WriteVariable(chid channel, chtype type, + void* p_value) { + bool status = false; + + if (ca_state(channel) != cs_conn) { + //log_error("%s - Connection to channel has been lost", __FUNCTION__); + return status; + } + + if (ca_put(type, channel, p_value) != ECA_NORMAL) { + //log_warning("%s - ca_put failed", __FUNCTION__); + } + + /* Flush the requests */ + if (ca_pend_io(1) != ECA_NORMAL) { + //log_error("%s - ca_pend_io failed", __FUNCTION__); + return status; + } + + status = true; + + return status; +}; + +typedef void (*pCallBack)(struct event_handler_args); + +static inline bool CAInterface_SubscribeVariable(chid channel, chtype type, + pCallBack cb_func, void* p_value) { + bool status = false; + if (ca_state(channel) != cs_conn) { + //log_error("%s - Connection to channel has been lost", __FUNCTION__); + return status; + } + + if (ca_create_subscription(type, 0, channel, DBE_VALUE, cb_func, NULL, NULL) + != ECA_NORMAL) { + //log_error("%s - ca_create_subscription failed", __FUNCTION__); + return status; + + } + /* + if(ca_pend_event(0.0) != ECA_NORMAL){ + //log_error("%s - ca_pend_event failed", __FUNCTION__); + return status; + } + */ + status = true; + + return status; +}; + +#endif /* CA_IF_H */ diff --git a/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/configure_sdn.cpp b/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/configure_sdn.cpp new file mode 100644 index 0000000..fc607b1 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/configure_sdn.cpp @@ -0,0 +1,68 @@ +//+====================================================================== +// $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-sdd-translator-parts/tags/CODAC-CORE-6.0.0/org.iter.codac.sdd.translators/src/main/resources/templates/sdn/configure_sdn.cpp.vm $ +// $Id: configure_sdn.cpp.vm 83098 2018-01-08 13:23:38Z cesnikt $ +// +// Project : CODAC Core System +// +// Description : SDN Program - Gyrotron01DAN +// +// Author : Kirti Mahajan, Lana Abadie and TCS (link with velocity and SDD model) +// +// Copyright (c) : 2010-2018 ITER Organization, +// CS 90 046 +// 13067 St. Paul-lez-Durance Cedex +// France +// +// This file is part of ITER CODAC software. +// For the terms and conditions of redistribution or use of this software +// refer to the file ITER-LICENSE.TXT located in the top level directory +// of the distribution package. +// +//-====================================================================== + +#include + +#include +#include "includetopics.h" + +using namespace std; + +/* Create variables for the topics on which application is publishing */ +//+P===================================================================== +//-P===================================================================== + +/* Create variables for topics on which application is subscribing */ +//+S===================================================================== +//-S===================================================================== + +int configureSDN() +{ + + SR_RET sr_ret = SR_OK; + + //+P===================================================================== + //-P===================================================================== + + //+S===================================================================== + //-S===================================================================== + + return sr_ret; + +} + +int cleanupSDN() +{ + + SR_RET sr_ret = SR_OK; + + /* Unregister publisher */ + //+P===================================================================== + //-P===================================================================== + + /* Unregister subscriber */ + //+S===================================================================== + //-S===================================================================== + + return sr_ret; + +} \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/environmentVarDev b/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/environmentVarDev new file mode 100644 index 0000000..fa62c0e --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/environmentVarDev @@ -0,0 +1,17 @@ +######################################## +# Program-specific environment variables +######################################## + +# INFO - This file is part of the I&C project. It can be modified without risk of being overwritten. +# INFO - This file is sourced when invoking 'mvn run -Dprog=' to allow for setting development-specific environment variables. + +# Override SDN interface name for test purposes +# Default: lo +# Project: Target host in SDD database +#SDN_INTERFACE_NAME=lo + +# INFO - This file can be further extended with anything specific required by the program. + +#LOG_FILE_ENABLE=false +#LOG_FILTER_LEVEL=info +#LOG_FWD_MODE=asyn diff --git a/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/includetopics.h b/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/includetopics.h new file mode 100644 index 0000000..b7aece5 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/includetopics.h @@ -0,0 +1,29 @@ +//+====================================================================== +// $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-sdd-translator-parts/tags/CODAC-CORE-6.0.0/org.iter.codac.sdd.translators/src/main/resources/templates/sdn/includetopics.h.vm $ +// $Id: includetopics.h.vm 83098 2018-01-08 13:23:38Z cesnikt $ +// +// Project : CODAC Core System +// +// Description : SDN Program - Gyrotron01DAN +// +// Author : Kirti Mahajan, Lana Abadie and TCS (link with velocity and SDD model) +// +// Copyright (c) : 2010-2018 ITER Organization, +// CS 90 046 +// 13067 St. Paul-lez-Durance Cedex +// France +// +// This file is part of ITER CODAC software. +// For the terms and conditions of redistribution or use of this software +// refer to the file ITER-LICENSE.TXT located in the top level directory +// of the distribution package. +// +//-====================================================================== + +#ifndef INCLUDETOPICS_H +#define INCLUDETOPICS_H + +#include + + +#endif \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/sdd-dan.cpp b/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/sdd-dan.cpp new file mode 100644 index 0000000..00886e0 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/sdd-dan.cpp @@ -0,0 +1,15 @@ +#include "sdd-dan.h" +#include +#include "stdlib.h" + +int declareDANStruct(dan_Source ds ){ + + int result=0; + int Cnt=0; + if(ds==NULL){ + log_error("Invalid call to declareDANStruct, dan source not initialized \n "); + return -1; + } + + return 0; + } \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/sdd-dan.h b/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/sdd-dan.h new file mode 100644 index 0000000..9d1b3a8 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/sdd-dan.h @@ -0,0 +1,8 @@ +#ifndef SDD_DAN_H +#define SDD_DAN_H +#include "dan.h" + +static const char ICProgName[] = "Gyrotron01DAN"; +static const char GYADanSource[] = "GYADanSource"; + +#endif /* SDD_DAN_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/sdd-data.h b/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/sdd-data.h new file mode 100644 index 0000000..73f755b --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/sdd-data.h @@ -0,0 +1,14 @@ +#ifndef SDD_DATA_H +#define SDD_DATA_H + +#include "sdd-pon-if.h" +#include "sdd-iomodule.h" + +static SDD_PONVar pvlist []={ + + }; + +static SDD_IOModule iomlist []={ + }; + +#endif /* SDD_DATA_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/sdd-iomodule.h b/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/sdd-iomodule.h new file mode 100644 index 0000000..a8af1fe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/sdd-iomodule.h @@ -0,0 +1,37 @@ +#ifndef SDD_IOMODULE_H +#define SDD_IOMODULE_H + +//include all linux libraries for IO module listed in the programs + + +//max is 15 for component name +#define SDD_CPMAXLENGTH 50 +#define SDD_SERIALNBMAXLENGTH 60 +#define SDD_FDPREFIXMAXLENGTH 100 + +struct SDD_IOModule { + + //name of the module + char name[SDD_CPMAXLENGTH]; + + //type of the module + char modtype[SDD_CPMAXLENGTH]; + + //module index + int fd; + + //file descriptor name + char filedescrip_prefix[SDD_FDPREFIXMAXLENGTH]; + + //serial number + char serial_number [SDD_SERIALNBMAXLENGTH]; + +}; + +//list of symbol for IOModule : IO module type and fd +typedef enum SDD_IOModuleEnum { + + } SDD_IOModuleEnum; + + +#endif /* SDD_IOMODULE_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/sdd-pon-if.h b/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/sdd-pon-if.h new file mode 100644 index 0000000..ea459e6 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/sdd-pon-if.h @@ -0,0 +1,36 @@ +#ifndef SDD_PON_IF_H +#define SDD_PON_IF_H + +#include /* Channel Access API definition, etc. */ + + +#define SDD_PVMAXLENGTH 40 +#define SDD_STRING_MAX_LENGTH 100 +#define SDD_NB_OF_PONVAR 0 //generated by SDD + +struct SDD_PONVar { + + char name[SDD_PVMAXLENGTH]; + + //if read-> monitor=yes otherwise false + bool isMonitored; + + chtype type; + + //the code can cast + char initialvalue[SDD_STRING_MAX_LENGTH]; + +}; + +//list of symbols +typedef enum SDD_PONVarEnum { + + +} SDD_PONVarEnum; + +//for each enum (bi/bo/mbbi/mbbo) name is symbolname suffix with _enum + + + + +#endif /* SDD_PON_IF_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/topicvars.h b/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/topicvars.h new file mode 100644 index 0000000..dc0b827 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/Gyrotron01DAN/topicvars.h @@ -0,0 +1,36 @@ +//+====================================================================== +// $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-sdd-translator-parts/tags/CODAC-CORE-6.0.0/org.iter.codac.sdd.translators/src/main/resources/templates/sdn/topicvars.h.vm $ +// $Id: topicvars.h.vm 83098 2018-01-08 13:23:38Z cesnikt $ +// +// Project : CODAC Core System +// +// Description : SDN Program - Gyrotron01DAN +// +// Author : Kirti Mahajan, Lana Abadie and TCS (link with velocity and SDD model) +// +// Copyright (c) : 2010-2018 ITER Organization, +// CS 90 046 +// 13067 St. Paul-lez-Durance Cedex +// France +// +// This file is part of ITER CODAC software. +// For the terms and conditions of redistribution or use of this software +// refer to the file ITER-LICENSE.TXT located in the top level directory +// of the distribution package. +// +//-====================================================================== + +#ifndef TOPICVARS_H +#define TOPICVARS_H + +#include "includetopics.h" + +/* Declare variables for the topics on which application is publishing. */ +//+P===================================================================== +//-P===================================================================== + +/* Declare variables for the topics to which application is subscribing. */ +//+S===================================================================== +//-S===================================================================== + +#endif diff --git a/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/Gyrotron02DAN.cpp b/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/Gyrotron02DAN.cpp new file mode 100644 index 0000000..06f975b --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/Gyrotron02DAN.cpp @@ -0,0 +1,639 @@ +/****************************************************************************** + * $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp-sdn/main/c++/prog/prog.cpp.template $ + * $Id: prog.cpp.template 83098 2018-01-08 13:23:38Z cesnikt $ + * + * Project : CODAC Core System + * + * Description : GyrotronDAN program + * + * Author : codac-dev + * + * Copyright (c) : 2010-2018 ITER Organization, + * CS 90 046 + * 13067 St. Paul-lez-Durance Cedex + * France + * + * This file is part of ITER CODAC software. + * For the terms and conditions of redistribution or use of this software + * refer to the file ITER-LICENSE.TXT located in the top level directory + * of the distribution package. + ******************************************************************************/ + +/* header files */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +//#include +#define float32_t float32_t1 +#include +#undef float32_t + +#include +#include +#include +#include +#include +#include + +#include + +// global variables +static bool __terminate = false; +char pxie6368_0_ai_fd[] = "/dev/pxie-6368.1.ai"; // ai segment +char pxie6368_0_device[] = "/dev/pxie-6368.1"; // device descriptor + +typedef struct { + int daq_smpl_rate; + int daq_mode; + double daq_smpl_st_dly; + double daq_len; + double daq_pub_dly; +} daq_parameters; + +void signal_handler(int signal) { + log_info("Received signal '%d' to terminate", signal); + __terminate = true; +}; + +// DAN parameter reload function ------------------------------------------------ +int reload_daq_conf(int *aifd, int *ai_chan_fd, daq_parameters *daq_p) { + std::cout << "reload_daq_conf was called \n"; + + // Common variables + int retval; + unsigned long number_of_samples; + int chan_num = 10; // Channel number to add. + uint32_t sample_period_divisor; + uint32_t base_clock = 100000000; // TB3:100MHz, TB2:100 kHz + uint32_t pre_samples = 1000; + uint32_t post_samples = 1000; + char str[40]; + xseries_ai_conf_t conf; // ai segment configuraton data + + // calculate sampling period divisor + if (daq_p->daq_smpl_rate != 0) { + sample_period_divisor = base_clock / daq_p->daq_smpl_rate; + } else { + return 0; + } + + // Stop ai segment---------------------------------------------------------------------- + retval = xseries_stop_ai(*aifd); + if (retval) { + log_error("ai segment stop failed.\n"); + } else { + log_info("ai segment stopped.\n"); + } + + // reset ai segment--------------------------------------------------------------------- + retval = xseries_reset_ai(*aifd); + if (retval) { + log_error("ai segment reset failed.\n"); + return -1; + } + + // Configure AI segment mode ------------------------------------------------------------ + switch (daq_p->daq_mode) { + case 0: + conf = xseries_software_timed_ai(); + log_info("software_timed mode.\n"); + break; + case 1: + conf = xseries_finite_ai(number_of_samples); + log_info("finite mode.\n"); + break; + case 2: + conf = xseries_retriggerable_finite_ai(number_of_samples); + log_info("retriggerable_finite mode.\n"); + break; + case 3: + conf = xseries_continuous_ai(); + log_info("continuous mode.\n"); + break; + case 4: + conf = xseries_reference_ai(pre_samples, post_samples); + log_info("reference mode.\n"); + break; + } + + // disable external gate + retval = xseries_set_ai_external_gate(&conf, + XSERIES_AI_EXTERNAL_GATE_DISABLED, // No external pause signal + XSERIES_AI_POLARITY_ACTIVE_LOW_OR_FALLING_EDGE); // Don't care + if (retval) { + log_error("Cannot set gate trigger.\n"); + return -1; + } + + // select start trigger (START1 signal) + retval = xseries_set_ai_start_trigger(&conf, + XSERIES_AI_START_TRIGGER_SW_PULSE, // Set the line to software-driven + XSERIES_AI_POLARITY_ACTIVE_HIGH_OR_RISING_EDGE, // Make line active on rising... + 1); // ... edge (not high level) + if (retval) { + log_error("Cannot set start trigger.\n"); + return -1; + } + + // set sampling clock source---------------------------------------------------------------------------------------- + retval = xseries_set_ai_sample_clock(&conf, + XSERIES_AI_SAMPLE_CONVERT_CLOCK_INTERNALTIMING, + XSERIES_AI_POLARITY_ACTIVE_HIGH_OR_RISING_EDGE, 1); + if (retval) { + log_error("Cannot configure sampling clock.\n"); + return -1; + } + + // set scan interval ------------------------------------------------------------------------------------------------------------------------- + retval = xseries_set_ai_scan_interval_counter(&conf, + XSERIES_SCAN_INTERVAL_COUNTER_TB3, // TB3 : 100MHz base clock, TB2 : 100kHz base clock + XSERIES_SCAN_INTERVAL_COUNTER_POLARITY_RISING_EDGE, + sample_period_divisor, 2); // Wait 2*100MHz sec after sampling trig. + if (retval) { + log_error("Cannot configure scan counter.\n"); + return -1; + } + + // Set DMA buffer size----------------------------------------------------------------------------------------------------------------------- + retval = xseries_set_ai_attribute(&conf, XSERIES_AI_DMA_BUFFER_SIZE, 1000); + if (retval) { + log_error("DMA configuration was failed.\n"); + return -1; + } + + // Add AI channels --------------------------------------------------------------------------------------------------------------------------- + for (int i = 0; i < chan_num; i++) { + retval = xseries_add_ai_channel(&conf, i, XSERIES_INPUT_RANGE_10V, + XSERIES_AI_CHANNEL_TYPE_DIFFERENTIAL, 0); + if (retval) { + log_error("Add AI channel %d was failed.\n", i); + return -1; + } + } + sleep(3); + + // Load configuration.----------------------------------------------------------------------------------------------------------------------- + retval = xseries_load_ai_conf(*aifd, conf); + if (retval) { + log_error("xseries_load_ai_conf was failed. error code: %d \n", retval); + exit (EXIT_FAILURE); + } + sleep(3); + + // Open channels-------------------------------------------------------------------------------------------------------------------------------- + for (int i = 0; i < chan_num; i++) { + sprintf(str, "%s.ai.%u", pxie6368_0_device, i); + //ai_chan_fd[i] = open(str, O_RDWR | O_NONBLOCK); + ai_chan_fd[i] = open(str, O_RDWR); + if (ai_chan_fd[i] < 0) { + log_error("Cannot open ai channel %d .\n",i); + sleep(1); + exit (EXIT_FAILURE); + } + } + + // start ai segment task----------------------------------------------------------------------------------------------------------------------- + retval = xseries_start_ai(*aifd); + if (retval) { + log_error("ERROR, starting AI segment failed: %s\n", strerror(retval)); + exit (EXIT_FAILURE); + } + + log_info("PXIe-6368 configuration was finished.\n"); + return 0; +}; + + + +int main(int argc, char **argv) { + using namespace std; + unsigned long n_sample_quotient = 0; + + log_initialize(NULL); + + while (!__terminate) { + // Install signal handler to support graceful termination + sigset(SIGTERM, signal_handler); + sigset(SIGINT, signal_handler); + sigset(SIGHUP, signal_handler); + + // ---------------------------------------------------------------------------------------------------------------- + // Running parameter declaration + // ---------------------------------------------------------------------------------------------------------------- + // pxie6368 hardware parameters + int pxie6368_0_device_number = 1; // device discriptor number + int aifd = 0; // ai segment file discriptor + xseries_ai_conf_t conf; // ai segment config + xseries_ai_attribute_t aiatrb; // ai segment attributes + char str[40]; // fd tmp var + int ai_chan_fd[16]; // ai channels file discriptor + int pxie6368_sampling_rate = 1000; // sampling rate Hz + uint32_t sample_period_divisor = 100000000 / pxie6368_sampling_rate; // TB3 100MHz, TB2:100kHz, TB1:20MHz + int sampleSize = 2; // Sample size in bytes <---> uInt16 + int n_channels; // Number of opened channels + struct xseries_dma *dma; // Ptr to dma struct + int chan_num = 10; // Channel number to add. + + // DAN parameters + char dan_source_name[] = "GYBDanSource"; // DAN data source (ds) name + long offset_ai = 0; // offset size in published data + int dma_mode = 1; // 0:All, 1:AI only, 2:AO only + dan_DataCore dc = NULL; // Datacore reference declaration + dan_Source ds = NULL; // DAN source declaration + long samplesCounter = 0; // Total acquired sample size + size_t n_samples; // prepared sample size to publish + + // TCN parameters + uint64_t tBase_old = 0; + uint64_t tBase = 0; // TCN publishing base time + uint64_t nanos; // time length for sampling + hpn_timestamp_t delay = 1e7; // wait for publishing (10ms) + char buf[ISO_8601_LEN]; + uint64_t tBase0 = 0; + + // Operation tmp parameter + int result; // For result values. + int exValue; + bool toterminate = false; + int retval; + bool daq_start = false; + int testcounter = 10000; + + // Connected EPCIS PV + + // DAQ config PVs + chid daq_smpl_rate_id; + chtype daq_smpl_rate_type; + int daq_smpl_rate; + chid daq_smpl_rate_rb_id; + chtype daq_smpl_rate_rb_type; + int daq_smpl_rate_rb; + chid daq_mode_id; + chtype daq_mode_type; + int daq_mode; + chid daq_mode_rb_id; + chtype daq_mode_rb_type; + int daq_mode_rb; + chid daq_sw_trig_id; + chtype daq_sw_trig_type; + int daq_sw_trig; + chid daq_smpl_st_dly_id; + chtype daq_smpl_st_dly_type; + double daq_smpl_st_dly; + chid daq_smpl_st_dly_rb_id; + chtype daq_smpl_st_dly_rb_type; + double daq_smpl_st_dly_rb; + chid daq_len_id; + chtype daq_len_type; + double daq_len; + chid daq_len_rb_id; + chtype daq_len_rb_type; + double daq_len_rb; + chid daq_reconf_id; + chtype daq_reconf_type; + int daq_reconf; + chid daq_pub_dly_id; + chtype daq_pub_dly_type; + double daq_pub_dly; + chid daq_pub_dly_rb_id; + chtype daq_pub_dly_rb_type; + double daq_pub_dly_rb; + + chid daq_stat_id; + chtype daq_stat_type; + int daq_stat; + chid daq_conf_stat_id; + chtype daq_conf_stat_type; + int daq_conf_stat; + + daq_parameters daq_p = { 0 }; // = {daq_smpl_rate, daq_smpl_rate_rb, daq_mode, daq_mode_rb}; + + // ---------------------------------------------------------------------------------------------------------------------------------------------- + // EPICS PV connection + // ---------------------------------------------------------------------------------------------------------------------------------------------- + //Initialize ChannelAccess interface + CAInterface_Initialize(); + + // Connect to EPICS PVs + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE", daq_smpl_rate_id); + daq_smpl_rate_type = DBR_LONG; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE-RB", daq_smpl_rate_rb_id); + daq_smpl_rate_rb_type = DBR_LONG; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-MODE", daq_mode_id); + daq_mode_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-MODE-RB", daq_mode_rb_id); + daq_mode_rb_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-SW-TRIG", daq_sw_trig_id); + daq_sw_trig_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-SMPL-ST-DLY", daq_smpl_st_dly_id); + daq_smpl_st_dly_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-SMPL-ST-DLY-RB", daq_smpl_st_dly_rb_id); + daq_smpl_st_dly_rb_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-LEN", daq_len_id); + daq_len_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-LEN-RB", daq_len_rb_id); + daq_len_rb_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-RECONF", daq_reconf_id); + daq_reconf_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-PUB-DLY", daq_pub_dly_id); + daq_pub_dly_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-PUB-DLY-RB", daq_pub_dly_rb_id); + daq_pub_dly_rb_type = DBR_DOUBLE; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-STAT", daq_stat_id); + daq_stat_type = DBR_ENUM; + + CAInterface_ConnectVariable("EC-GN-P01-GPF:STAT-DAQ-CONF-STAT", daq_conf_stat_id); + daq_conf_stat_type = DBR_ENUM; + + tcn_sleep(3e9);// Wait for a while. + + // ---------------------------------------------------------------------------------------------------------------- + // Initialize tcn library + // ---------------------------------------------------------------------------------------------------------------- + int tcn_err; + tcn_err = tcn_init(); + if (tcn_err != TCN_SUCCESS) { + log_error("TCN Initialization failed.\n"); + exValue = 1; + goto END; + } + + // ---------------------------------------------------------------------------------------------------------------- + // pxie-6368 settings + // ---------------------------------------------------------------------------------------------------------------- + // Open ai segment---------------------------------------------------------------------- + aifd = open(pxie6368_0_ai_fd, O_RDWR); + if (aifd <= 0) { + log_error("Open PXIe6368 AI fd failed.\n"); + exValue = -1; + goto END; + } + + // wait ai segment setup start + do { + CAInterface_ReadVariable(daq_reconf_id, daq_reconf_type, (void*) &daq_reconf); + } while (!daq_reconf and !__terminate); + + // read parameter + result = CAInterface_ReadVariable(daq_smpl_rate_id, daq_smpl_rate_type, (void *) &daq_p.daq_smpl_rate); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_mode_id, daq_mode_type, (void *) &daq_p.daq_mode); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_smpl_st_dly_id, daq_smpl_st_dly_type, (void *) &daq_p.daq_smpl_st_dly); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_len_id, daq_len_type, (void *) &daq_p.daq_len); + if (!result) { + log_error("CA_READ failed.\n"); + } + // read parameter + result = CAInterface_ReadVariable(daq_pub_dly_id, daq_pub_dly_type, (void *) &daq_p.daq_pub_dly); + if (!result) { + log_error("CA_READ failed.\n"); + } + + std::cout << "SAMPLE RATE:" << daq_p.daq_smpl_rate << endl; + std::cout << "MODE :" << daq_p.daq_mode << endl; + std::cout << "START DELAY:" <ai.count * sampleSize, 4096); + + //dan_DataCore, ds_name, devName, enum_daq_type refType, long refSize, long refOffset + if (ds == NULL) { + log_error("Error while publishing DAN source %s ", dan_source_name); + exValue = 1; + goto END; + } + + n_channels = dan_publisher_getNumberOfChannels(ds); + + // ------------------------------------------------------------------------------------------------------------------ + // ----- DAN Streamer. + // ------------------------------------------------------------------------------------------------------------------ + // ----- Open a new stream --------------------------------------------------------------------- + dan_publisher_openStream(ds, daq_p.daq_smpl_rate, 0); + sleep(1); + + // ------------------------------------------------------------------------------------------------------------------ + // ----- Main DAN Loop. + // ------------------------------------------------------------------------------------------------------------------ + while (!__terminate) { + // Wait for the master trigger.---------------------------------------------------------------------------- + daq_stat = 1; //0:Not Ready, 1: Waiting trigger, 2:Acquiring 3:Error + CAInterface_WriteVariable(daq_stat_id, daq_stat_type, &daq_stat); + daq_conf_stat = 1; //0:Not ready, 1: Ready + CAInterface_WriteVariable(daq_conf_stat_id, daq_conf_stat_type, &daq_conf_stat); + + // Wait DAQ Start Software Trigger. + do { + // check daq_sw_trigger to start DAQ sequence. + CAInterface_ReadVariable(daq_sw_trig_id, daq_sw_trig_type, (void*) &daq_sw_trig); + tcn_sleep(1e7); // wait 0.01 s + if (daq_sw_trig) { + daq_start = true; + } + } while (daq_start != true and !__terminate); + + daq_start = false; //reset daq_start flag. + delay = (long) (1e6 * daq_p.daq_pub_dly); //check publish period. + + // Wait a time to start DAQ. ---------------------------------------------------------------------------------------------------------------------- + tcn_sleep(daq_p.daq_smpl_st_dly * 1e6); // in ms + + // After the wating, trigger DAQ ------------------------------------------------------------------------------------------------------------------ + retval = xseries_pulse_ai(aifd, XSERIES_START_TRIGGER); + daq_stat = 2; + CAInterface_WriteVariable(daq_stat_id, daq_stat_type, &daq_stat); + if (retval) { + std::cout << "Cannot generate start trigger!\n"; + goto END; + } else { + tcn_get_time(&tBase); // get DAQ start time. + tBase0 = tBase; // save DAQ start time to tBase0; + tBase_old = tBase; + } + + // DAQ Publish Loop. ---------------------------------------------------------------------------------------------------------------------------- + // DAN data publish is executed every delay time interval. + while (!__terminate && (tcn_wait_until_hr((tBase + delay), &tBase, 0) == TCN_SUCCESS)) { + // Get the number of available samples in PXIe6368 buffer. + n_samples = xsereis_ai_dma_samples_in_buffer(dma); // samples + + if (n_samples > dma->ai.count) { + //log_error("DMA Buffer overflow: Number of new samples in buffer = %ld, AI buffer size = %ld,\n", n_samples, dma->ai.count); + } else if (n_samples > 0) { + //log_info("Current Time:\n%s\n", tcn_strftime(tBase, buf, ISO_8601_LEN)); + if (tBase == 0) { + // "tBase was reset.------------------------------------------------------\n"; + tcn_get_time(&tBase); + tBase -= n_samples * 100000000 / pxie6368_sampling_rate; + nanos = 0; + } else { + // update time offset value. + nanos = n_samples * 100000000 / daq_p.daq_smpl_rate; + } + n_sample_quotient = floor(n_samples / chan_num); + n_samples = n_sample_quotient * chan_num; + + // Publish a new data block -------------------------------------------------------------------------------------------------------------------------- + result = dan_publisher_putBlockReference(ds, + tBase_old + nanos, // timestamp in epoch nanoseconds + n_samples * sampleSize, // datablock size in bytes + offset_ai * sampleSize, // Offset in DAQ buffer + NULL); // No datablock header.... + // Detected overflow in pass datablock reference queue + if (result == -1) { + log_info("%s, Queue overflow with policy %d\n", dan_source_name, dan_publisher_getCheckPolicy(ds)); + } else if (result == -2) { + log_info("%s, DAQ buffer overflow with policy %d\n", dan_source_name, dan_publisher_getCheckPolicy(ds)); + } + } + + samplesCounter += n_samples; // Increment total of published sampes + offset_ai = (offset_ai + n_samples) % dma->ai.count; // Update offset of memory + dma->ai.last_transfer_count = samplesCounter; // Update dma last_transfer_count + + // Check exit condition. + if ((daq_p.daq_len * 1e6 <= (tBase - tBase0))) { + retval = xseries_stop_ai(aifd); + if (retval) { + std::cout << "Stop AI segment failed.\n"; + exit (EXIT_FAILURE); + } + + //restart ai segment. + tcn_sleep(1e9); // wait + retval = xseries_start_ai(aifd); + if (retval) { + std::cout << "Start AI segment failed.\n"; + exit (EXIT_FAILURE); + } + //debug + tcn_sleep(1e8); + n_samples = xsereis_ai_dma_samples_in_buffer(dma); + cout << "n_samples check : " << n_samples << endl; + break; + } + tBase_old = tBase; + } // End of DAQ publish loop. + break; + } // End of DAN main loop. + + // ------------------------------------------------------------------------------------------------------------------ + // ----- Closing program. + // ------------------------------------------------------------------------------------------------------------------ + log_info("DAN end of acquisition, closing all resources"); + + //Closing stream + dan_publisher_closeStream(ds); + exValue = 0; + + // Close all channels + for (int channel = 0; channel < chan_num; channel++) { + close(ai_chan_fd[channel]); + } + goto END; + + END: daq_conf_stat = 0; + CAInterface_WriteVariable(daq_conf_stat_id, daq_conf_stat_type, &daq_conf_stat); + daq_stat = 0; + CAInterface_WriteVariable(daq_stat_id, daq_stat_type, &daq_stat); + // Destroy CA context + CAInterface_Finalize(); + // Close pxie6368 + if (dma != NULL) { + xseries_dma_close(dma); + cout << "pxie-6368 dma was clesed.\n"; + } + + close(aifd); + + // Unpublishing source from DAN API + if (ds != NULL) { + dan_publisher_unpublishSource(dc, ds); + } + + // Closing DAN API library + if (dc != NULL) { + dan_closeLibrary(dc); + } + + // Closing TCN library + result = tcn_finalize(); + if (result != TCN_SUCCESS) { + //log_error("Error finalizing TCN lib.\n"); + } + + } // loop end from initialization + return (0); + +} diff --git a/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/Makefile b/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/Makefile new file mode 100644 index 0000000..e0d79f8 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/Makefile @@ -0,0 +1,68 @@ +#+====================================================================== +# $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp/main/c++/prog/Makefile.template $ +# $Id: Makefile.template 83098 2018-01-08 13:23:38Z cesnikt $ +# +# Project : CODAC Core System +# +# Description : gyrotronDAN Makefile +# +# Author : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2018 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== + +PROGNAME=Gyrotron02DAN + +LIBRARIES=ca dan_api dan_client_api dan_stream dan_base xml2 log sdn sdn-core ccs-core rt pthread tcn nixseries +LIBRARY_DIRS= +INCLUDE_DIRS=. ../include $(CODAC_ROOT)/include $(EPICS_BASE)/include/os/Linux $(EPICS_BASE)/include/compiler/gcc $(EPICS_BASE)/include /usr/include/libxml2 $(SDN_TOPIC_DIRECTORY) + +TARGET=../../../../target +BINARY_DIR=$(TARGET)/bin +OBJECT_DIR=$(TARGET)/obj/$(PROGNAME) +SOURCE_DIR=. + +EXECUTABLE=$(BINARY_DIR)/$(PROGNAME) +INCLUDES=$(foreach inc,$(INCLUDE_DIRS),-I$(inc)) +LDLIBS=-L$(CODAC_ROOT)/lib -L$(EPICS_BASE)/lib/$(EPICS_HOST_ARCH) $(foreach libs,$(LIBRARY_DIRS),-L$(libs) -Wl,-rpath,$(libs)) $(foreach libs,$(LIBRARIES),-l$(libs)) +SOURCES=$(SOURCE_DIR)/$(PROGNAME).cpp $(SOURCE_DIR)/configure_sdn.cpp +# to build executable from all sources in the program directory: +#SOURCES=$(wildcard $(SOURCE_DIR)/*.cpp $(SOURCE_DIR)/*.c) +OBJECTS=$(addprefix $(OBJECT_DIR)/,$(patsubst %.cpp,%.o,$(notdir $(SOURCES)))) + +C=gcc +CC=g++ +CFLAGS=-c -Wall +CCFLAGS=-c -Wall -std=c++11 +LDFLAGS= + +.PHONY: all clean run + +all: $(SOURCES) $(EXECUTABLE) + +clean: + rm -rf "$(EXECUTABLE)" "$(OBJECT_DIR)" + +run: $(SOURCES) $(EXECUTABLE) + $(EXECUTABLE) + +$(EXECUTABLE): $(OBJECTS) + mkdir -p $(BINARY_DIR) + $(CC) $(LDFLAGS) $(LDLIBS) $(OBJECTS) -o $@ + +$(OBJECT_DIR)/%.o: $(SOURCE_DIR)/%.cpp + mkdir -p $(OBJECT_DIR) + $(CC) $(CCFLAGS) $(INCLUDES) $< -o $@ + +$(OBJECT_DIR)/%.o: $(SOURCE_DIR)/%.c + mkdir -p $(OBJECT_DIR) + $(C) $(CFLAGS) $(INCLUDES) $< -o $@ \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/ca-if.h b/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/ca-if.h new file mode 100644 index 0000000..3bcbb4d --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/ca-if.h @@ -0,0 +1,165 @@ +#ifndef CA_IF_H +#define CA_IF_H + +/****************************************************************************** + * $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-log-lib/trunk/src/main/c++/include/tools/any-type.h $ + * $Id: any-type.h 50547 2014-10-09 12:09:51Z bauvirb $ + * + * Project : CODAC Core System + * + * Description : Channel Access Interface + * + * Author : Bertrand Bauvir + * + * Copyright (c) : 2010-2014 ITER Organization, + * CS 90 046 + * 13067 St. Paul-lez-Durance Cedex + * France + * + * This file is part of ITER CODAC software. + * For the terms and conditions of redistribution or use of this software + * refer to the file ITER-LICENSE.TXT located in the top level directory + * of the distribution package. + ******************************************************************************/ + +/* Global header files */ +#include +#include /* Channel Access API definition, etc. */ +//#include /* CCS logging library */ + +/* Local header files */ + +/* Constants */ + +#ifndef log_trace +#define log_trace(arg_msg...) {} +#endif + +#ifndef log_error +#define log_error(arg_msg...){} +#endif + +/* Type definition */ + +/* Global variables */ + +/* Public function declaration */ + +static inline bool CAInterface_Initialize(void) { + bool status = false; + ca_context_create (ca_disable_preemptive_callback); //Default + //ca_context_create(ca_enable_preemptive_callback); + status = true; + + return status; +}; + +static inline bool CAInterface_Finalize(void) { + bool status = false; + ca_context_destroy(); + status = true; + + return status; +}; + +static inline bool CAInterface_ConnectVariable(char* name, chid& id) { + bool status = false; + /* Connect to channels */ + if (ca_create_channel(name, NULL, NULL, 10, &id) != ECA_NORMAL) { + return status; + } + + /* Wait for connections */ + if (ca_pend_io(1) != ECA_NORMAL) { + log_error("%s - ca_pend_io failed", __FUNCTION__); + return status; + } + + /* Verify channel */ + if (ca_state(id) != cs_conn) { + //log_warning("Connection to channel '%s' has not been successful", name); + } else { + //log_info("Connection to channel '%s' has been successfully verified", name); + } + + status = true; + + return status; +}; + +static inline bool CAInterface_ReadVariable(chid channel, chtype type, + void* p_value) { + bool status = false; + if (ca_state(channel) != cs_conn) { + //log_error("%s - Connection to channel has been lost"); + return status; + } + + if (ca_get(type, channel, p_value) != ECA_NORMAL) { + //log_error("%s - ca_get failed", __FUNCTION__); + return status; + } + + /* Flush the requests */ + if (ca_pend_io(1) != ECA_NORMAL) { + //log_error("%s - ca_pend_io failed", __FUNCTION__); + return status; + } + + status = true; + + return status; +}; + +static inline bool CAInterface_WriteVariable(chid channel, chtype type, + void* p_value) { + bool status = false; + + if (ca_state(channel) != cs_conn) { + //log_error("%s - Connection to channel has been lost", __FUNCTION__); + return status; + } + + if (ca_put(type, channel, p_value) != ECA_NORMAL) { + //log_warning("%s - ca_put failed", __FUNCTION__); + } + + /* Flush the requests */ + if (ca_pend_io(1) != ECA_NORMAL) { + //log_error("%s - ca_pend_io failed", __FUNCTION__); + return status; + } + + status = true; + + return status; +}; + +typedef void (*pCallBack)(struct event_handler_args); + +static inline bool CAInterface_SubscribeVariable(chid channel, chtype type, + pCallBack cb_func, void* p_value) { + bool status = false; + if (ca_state(channel) != cs_conn) { + //log_error("%s - Connection to channel has been lost", __FUNCTION__); + return status; + } + + if (ca_create_subscription(type, 0, channel, DBE_VALUE, cb_func, NULL, NULL) + != ECA_NORMAL) { + //log_error("%s - ca_create_subscription failed", __FUNCTION__); + return status; + + } + /* + if(ca_pend_event(0.0) != ECA_NORMAL){ + //log_error("%s - ca_pend_event failed", __FUNCTION__); + return status; + } + */ + status = true; + + return status; +}; + +#endif /* CA_IF_H */ diff --git a/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/configure_sdn.cpp b/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/configure_sdn.cpp new file mode 100644 index 0000000..9088cc2 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/configure_sdn.cpp @@ -0,0 +1,68 @@ +//+====================================================================== +// $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-sdd-translator-parts/tags/CODAC-CORE-6.0.0/org.iter.codac.sdd.translators/src/main/resources/templates/sdn/configure_sdn.cpp.vm $ +// $Id: configure_sdn.cpp.vm 83098 2018-01-08 13:23:38Z cesnikt $ +// +// Project : CODAC Core System +// +// Description : SDN Program - Gyrotron02DAN +// +// Author : Kirti Mahajan, Lana Abadie and TCS (link with velocity and SDD model) +// +// Copyright (c) : 2010-2018 ITER Organization, +// CS 90 046 +// 13067 St. Paul-lez-Durance Cedex +// France +// +// This file is part of ITER CODAC software. +// For the terms and conditions of redistribution or use of this software +// refer to the file ITER-LICENSE.TXT located in the top level directory +// of the distribution package. +// +//-====================================================================== + +#include + +#include +#include "includetopics.h" + +using namespace std; + +/* Create variables for the topics on which application is publishing */ +//+P===================================================================== +//-P===================================================================== + +/* Create variables for topics on which application is subscribing */ +//+S===================================================================== +//-S===================================================================== + +int configureSDN() +{ + + SR_RET sr_ret = SR_OK; + + //+P===================================================================== + //-P===================================================================== + + //+S===================================================================== + //-S===================================================================== + + return sr_ret; + +} + +int cleanupSDN() +{ + + SR_RET sr_ret = SR_OK; + + /* Unregister publisher */ + //+P===================================================================== + //-P===================================================================== + + /* Unregister subscriber */ + //+S===================================================================== + //-S===================================================================== + + return sr_ret; + +} \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/environmentVarDev b/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/environmentVarDev new file mode 100644 index 0000000..fa62c0e --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/environmentVarDev @@ -0,0 +1,17 @@ +######################################## +# Program-specific environment variables +######################################## + +# INFO - This file is part of the I&C project. It can be modified without risk of being overwritten. +# INFO - This file is sourced when invoking 'mvn run -Dprog=' to allow for setting development-specific environment variables. + +# Override SDN interface name for test purposes +# Default: lo +# Project: Target host in SDD database +#SDN_INTERFACE_NAME=lo + +# INFO - This file can be further extended with anything specific required by the program. + +#LOG_FILE_ENABLE=false +#LOG_FILTER_LEVEL=info +#LOG_FWD_MODE=asyn diff --git a/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/includetopics.h b/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/includetopics.h new file mode 100644 index 0000000..0c4212c --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/includetopics.h @@ -0,0 +1,29 @@ +//+====================================================================== +// $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-sdd-translator-parts/tags/CODAC-CORE-6.0.0/org.iter.codac.sdd.translators/src/main/resources/templates/sdn/includetopics.h.vm $ +// $Id: includetopics.h.vm 83098 2018-01-08 13:23:38Z cesnikt $ +// +// Project : CODAC Core System +// +// Description : SDN Program - Gyrotron02DAN +// +// Author : Kirti Mahajan, Lana Abadie and TCS (link with velocity and SDD model) +// +// Copyright (c) : 2010-2018 ITER Organization, +// CS 90 046 +// 13067 St. Paul-lez-Durance Cedex +// France +// +// This file is part of ITER CODAC software. +// For the terms and conditions of redistribution or use of this software +// refer to the file ITER-LICENSE.TXT located in the top level directory +// of the distribution package. +// +//-====================================================================== + +#ifndef INCLUDETOPICS_H +#define INCLUDETOPICS_H + +#include + + +#endif \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/sdd-dan.cpp b/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/sdd-dan.cpp new file mode 100644 index 0000000..00886e0 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/sdd-dan.cpp @@ -0,0 +1,15 @@ +#include "sdd-dan.h" +#include +#include "stdlib.h" + +int declareDANStruct(dan_Source ds ){ + + int result=0; + int Cnt=0; + if(ds==NULL){ + log_error("Invalid call to declareDANStruct, dan source not initialized \n "); + return -1; + } + + return 0; + } \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/sdd-dan.h b/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/sdd-dan.h new file mode 100644 index 0000000..230aa06 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/sdd-dan.h @@ -0,0 +1,8 @@ +#ifndef SDD_DAN_H +#define SDD_DAN_H +#include "dan.h" + +static const char ICProgName[] = "Gyrotron02DAN"; +static const char GYBDanSource[] = "GYBDanSource"; + +#endif /* SDD_DAN_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/sdd-data.h b/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/sdd-data.h new file mode 100644 index 0000000..73f755b --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/sdd-data.h @@ -0,0 +1,14 @@ +#ifndef SDD_DATA_H +#define SDD_DATA_H + +#include "sdd-pon-if.h" +#include "sdd-iomodule.h" + +static SDD_PONVar pvlist []={ + + }; + +static SDD_IOModule iomlist []={ + }; + +#endif /* SDD_DATA_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/sdd-iomodule.h b/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/sdd-iomodule.h new file mode 100644 index 0000000..a8af1fe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/sdd-iomodule.h @@ -0,0 +1,37 @@ +#ifndef SDD_IOMODULE_H +#define SDD_IOMODULE_H + +//include all linux libraries for IO module listed in the programs + + +//max is 15 for component name +#define SDD_CPMAXLENGTH 50 +#define SDD_SERIALNBMAXLENGTH 60 +#define SDD_FDPREFIXMAXLENGTH 100 + +struct SDD_IOModule { + + //name of the module + char name[SDD_CPMAXLENGTH]; + + //type of the module + char modtype[SDD_CPMAXLENGTH]; + + //module index + int fd; + + //file descriptor name + char filedescrip_prefix[SDD_FDPREFIXMAXLENGTH]; + + //serial number + char serial_number [SDD_SERIALNBMAXLENGTH]; + +}; + +//list of symbol for IOModule : IO module type and fd +typedef enum SDD_IOModuleEnum { + + } SDD_IOModuleEnum; + + +#endif /* SDD_IOMODULE_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/sdd-pon-if.h b/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/sdd-pon-if.h new file mode 100644 index 0000000..ea459e6 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/sdd-pon-if.h @@ -0,0 +1,36 @@ +#ifndef SDD_PON_IF_H +#define SDD_PON_IF_H + +#include /* Channel Access API definition, etc. */ + + +#define SDD_PVMAXLENGTH 40 +#define SDD_STRING_MAX_LENGTH 100 +#define SDD_NB_OF_PONVAR 0 //generated by SDD + +struct SDD_PONVar { + + char name[SDD_PVMAXLENGTH]; + + //if read-> monitor=yes otherwise false + bool isMonitored; + + chtype type; + + //the code can cast + char initialvalue[SDD_STRING_MAX_LENGTH]; + +}; + +//list of symbols +typedef enum SDD_PONVarEnum { + + +} SDD_PONVarEnum; + +//for each enum (bi/bo/mbbi/mbbo) name is symbolname suffix with _enum + + + + +#endif /* SDD_PON_IF_H */ \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/topicvars.h b/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/topicvars.h new file mode 100644 index 0000000..1a4216b --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/Gyrotron02DAN/topicvars.h @@ -0,0 +1,36 @@ +//+====================================================================== +// $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-sdd-translator-parts/tags/CODAC-CORE-6.0.0/org.iter.codac.sdd.translators/src/main/resources/templates/sdn/topicvars.h.vm $ +// $Id: topicvars.h.vm 83098 2018-01-08 13:23:38Z cesnikt $ +// +// Project : CODAC Core System +// +// Description : SDN Program - Gyrotron02DAN +// +// Author : Kirti Mahajan, Lana Abadie and TCS (link with velocity and SDD model) +// +// Copyright (c) : 2010-2018 ITER Organization, +// CS 90 046 +// 13067 St. Paul-lez-Durance Cedex +// France +// +// This file is part of ITER CODAC software. +// For the terms and conditions of redistribution or use of this software +// refer to the file ITER-LICENSE.TXT located in the top level directory +// of the distribution package. +// +//-====================================================================== + +#ifndef TOPICVARS_H +#define TOPICVARS_H + +#include "includetopics.h" + +/* Declare variables for the topics on which application is publishing. */ +//+P===================================================================== +//-P===================================================================== + +/* Declare variables for the topics to which application is subscribing. */ +//+S===================================================================== +//-S===================================================================== + +#endif diff --git a/EC-GN-JA-PCF/target/main/c++/Makefile b/EC-GN-JA-PCF/target/main/c++/Makefile new file mode 100644 index 0000000..0a725f5 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/Makefile @@ -0,0 +1,31 @@ +#+====================================================================== +# $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp/main/c++/Makefile $ +# $Id: Makefile 83098 2018-01-08 13:23:38Z cesnikt $ +# +# Project : CODAC Core System +# +# Description : C++ Makefile +# +# Author : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2018 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== + +SUBDIRS=$(dir $(wildcard */Makefile)) + +BOLD=\e[1m +NC=\e[0m + +all: + +%: + @$(foreach dir, $(SUBDIRS), echo -e "$(BOLD)Building $(dir:/=)...$(NC)" && $(MAKE) -C $(dir) $@ &&) : diff --git a/EC-GN-JA-PCF/target/main/c++/conf/Gyrotron01DAN_danconf.xml b/EC-GN-JA-PCF/target/main/c++/conf/Gyrotron01DAN_danconf.xml new file mode 100644 index 0000000..01faa30 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/conf/Gyrotron01DAN_danconf.xml @@ -0,0 +1,101 @@ + + + + + 1.0.0 + + + + danInt16 + + 100000 + + + DATA_D0 + + DM_BLOCK2D_VAR + + CHECK_AND_OVERWRITE + + 1000 + + 1 + + UTC + + + + GYADanSource + + v1.3 + + 0 + + N1134342 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ALL + + + + + + IF_FAIL_NEXT + + ${DAN_ARCHIVE_MASTER} + + ${DAN_ARCHIVE_SLAVE} + + + + + diff --git a/EC-GN-JA-PCF/target/main/c++/conf/Gyrotron02DAN_danconf.xml b/EC-GN-JA-PCF/target/main/c++/conf/Gyrotron02DAN_danconf.xml new file mode 100644 index 0000000..5607efe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/conf/Gyrotron02DAN_danconf.xml @@ -0,0 +1,101 @@ + + + + + 1.0.0 + + + + danInt16 + + 100000 + + + DATA_D0 + + DM_BLOCK2D_VAR + + CHECK_AND_OVERWRITE + + 1000 + + 1 + + UTC + + + + GYBDanSource + + v1.3 + + 0 + + N1134342 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ALL + + + + + + IF_FAIL_NEXT + + ${DAN_ARCHIVE_MASTER} + + ${DAN_ARCHIVE_SLAVE} + + + + + diff --git a/EC-GN-JA-PCF/target/main/c++/conf/environmentVarDev b/EC-GN-JA-PCF/target/main/c++/conf/environmentVarDev new file mode 100644 index 0000000..ab5d5da --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/conf/environmentVarDev @@ -0,0 +1,14 @@ +############################################ +# I&C project-specific environment variables +############################################ + +# INFO - This file is part of the I&C project. It can be modified without risk of being overwritten. +# INFO - This file is sourced when invoking 'mvn run' to allow for setting development-specific environment variables. + +# INFO - This file can be further extended with anything specific required by the I&C project. + +#LOG_FILE_ENABLE=false +#LOG_FILTER_LEVEL=info +#LOG_FWD_MODE=asyn + +export DAN_ARCHIVE_MASTER=192.168.102.3:9999 \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/c++/include/ccs-headers.h b/EC-GN-JA-PCF/target/main/c++/include/ccs-headers.h new file mode 100644 index 0000000..2f10a54 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/include/ccs-headers.h @@ -0,0 +1,36 @@ +#ifndef CCS_HEADERS_H +#define CCS_HEADERS_H + +/****************************************************************************** +* $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp/main/c++/include/ccs-headers.h $ +* $Id: ccs-headers.h 83715 2018-01-30 16:31:40Z abadiel $ +* +* Project : CODAC Core System +* +* Description : CODAC Core System - Commonly used program headers +* +* Author : Bertrand Bauvir +* +* Copyright (c) : 2010-2018 ITER Organization, +* CS 90 046 +* 13067 St. Paul-lez-Durance Cedex +* France +* +* This file is part of ITER CODAC software. +* For the terms and conditions of redistribution or use of this software +* refer to the file ITER-LICENSE.TXT located in the top level directory +* of the distribution package. +******************************************************************************/ + +/* log.h -- Part of CCS. It includes the declaration of the logging library API. */ +#include /* This file is mandatory to compile this program against the logging library and API. */ + +/* sdn.h -- Part of CCS. It includes the declaration of the SDN library API. */ +#include /* This file is mandatory to compile this program against the SDN core library and API. */ + +/* tcn.h -- Part of CCS. It includes the declaration of the TCN library API. */ +#include /* This file is optional and can be removed if the program does not need to handle ITER time or operate on it. */ + +/* dan.h -- part of CCS. It includes the declaration of the DAN library API. */ +#include /* This file is optional and can be removed if the program does not need to handle ITER time or operate on it. */ +#endif /* CCS_HEADERS_H */ diff --git a/EC-GN-JA-PCF/target/main/c++/include/sys-headers.h b/EC-GN-JA-PCF/target/main/c++/include/sys-headers.h new file mode 100644 index 0000000..00318e3 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/c++/include/sys-headers.h @@ -0,0 +1,32 @@ +#ifndef SYS_HEADERS_H +#define SYS_HEADERS_H + +/****************************************************************************** +* $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-codac-unit-templates/tags/CODAC-CORE-6.0.0/templates/cpp/main/c++/include/sys-headers.h $ +* $Id: sys-headers.h 83098 2018-01-08 13:23:38Z cesnikt $ +* +* Project : CODAC Core System +* +* Description : CODAC Core System - Commonly used program headers +* +* Author : Bertrand Bauvir +* +* Copyright (c) : 2010-2018 ITER Organization, +* CS 90 046 +* 13067 St. Paul-lez-Durance Cedex +* France +* +* This file is part of ITER CODAC software. +* For the terms and conditions of redistribution or use of this software +* refer to the file ITER-LICENSE.TXT located in the top level directory +* of the distribution package. +******************************************************************************/ + +#include +#include /* sscanf, printf, etc. */ +//#include +#include /* strncpy, etc. */ +#include /* va_start, etc. */ +#include /* sigset, etc. */ + +#endif /* SYS_HEADERS_H */ diff --git a/EC-GN-JA-PCF/target/main/epics/CUBApp/.appdesc b/EC-GN-JA-PCF/target/main/epics/CUBApp/.appdesc new file mode 100644 index 0000000..df999dd --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/CUBApp/.appdesc @@ -0,0 +1 @@ +generic \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/epics/CUBApp/Db/Makefile b/EC-GN-JA-PCF/target/main/epics/CUBApp/Db/Makefile new file mode 100644 index 0000000..3ef937f --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/CUBApp/Db/Makefile @@ -0,0 +1,24 @@ +TOP=../.. +include $(TOP)/configure/CONFIG +#---------------------------------------- +# ADD MACRO DEFINITIONS AFTER THIS LINE + +#---------------------------------------------------- +# Optimization of db files using dbst (DEFAULT: NO) +#DB_OPT = YES + +#---------------------------------------------------- +# Create and install (or just install) +# databases, templates, substitutions like this + + +# Automagically install .proto files +DB += $(notdir $(wildcard ../*.proto)) + +#---------------------------------------------------- +# If .db template is not named *.template add +# _TEMPLATE = + +include $(TOP)/configure/RULES +#---------------------------------------- +# ADD RULES AFTER THIS LINE diff --git a/EC-GN-JA-PCF/target/main/epics/CUBApp/Db/O.linux-x86_64/Makefile b/EC-GN-JA-PCF/target/main/epics/CUBApp/Db/O.linux-x86_64/Makefile new file mode 100644 index 0000000..757ce21 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/CUBApp/Db/O.linux-x86_64/Makefile @@ -0,0 +1,10 @@ +#This Makefile created by makeMakefile.pl + + +all : + $(MAKE) -f ../Makefile TOP=../../.. T_A=linux-x86_64 $@ + +.DEFAULT: force + $(MAKE) -f ../Makefile TOP=../../.. T_A=linux-x86_64 $@ + +force: ; diff --git a/EC-GN-JA-PCF/target/main/epics/CUBApp/Makefile b/EC-GN-JA-PCF/target/main/epics/CUBApp/Makefile new file mode 100644 index 0000000..6504a77 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/CUBApp/Makefile @@ -0,0 +1,29 @@ +#+====================================================================== +# $HeadURL: https://svnpub.codac.iter.org/codac/iter/codac/dev/units/m-epics-iter-templates/branches/codac-core-6.1/templates/genericApp/Makefile $ +# $Id: Makefile 96475 2019-01-09 13:47:38Z sivecm $ +# +# Project : CODAC Core System +# +# Description : Makefile +# +# Author(s) : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2019 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== +TOP = .. +include $(TOP)/configure/CONFIG +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *src*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *Src*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *db*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *Db*)) +include $(TOP)/configure/RULES_DIRS + diff --git a/EC-GN-JA-PCF/target/main/epics/CUBApp/src/CUBMain.cpp b/EC-GN-JA-PCF/target/main/epics/CUBApp/src/CUBMain.cpp new file mode 100644 index 0000000..4e9e67d --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/CUBApp/src/CUBMain.cpp @@ -0,0 +1,25 @@ +/* CUBMain.cpp */ +/* Author: Marty Kraimer Date: 17MAR2000 */ + +#include +#include +#include +#include +#include +#include + +#include "epicsExit.h" +#include "epicsThread.h" +#include "iocsh.h" + +int main(int argc,char *argv[]) +{ + sigset(SIGTERM, epicsExit); + if(argc>=2) { + iocsh(argv[1]); + epicsThreadSleep(.2); + } + iocsh(NULL); + epicsExit(0); + return(0); +} diff --git a/EC-GN-JA-PCF/target/main/epics/CUBApp/src/Makefile b/EC-GN-JA-PCF/target/main/epics/CUBApp/src/Makefile new file mode 100644 index 0000000..9dc4a82 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/CUBApp/src/Makefile @@ -0,0 +1,59 @@ +TOP=../.. + +include $(TOP)/configure/CONFIG +#---------------------------------------- +# ADD MACRO DEFINITIONS AFTER THIS LINE +#======================================== + +#======================================== +# Build the IOC application + +PROD_IOC = CUB +# CUB.dbd will be created and installed +DBD += CUB.dbd + +# CUB.dbd will be made up from these files: +-include $(EPICS_ROOT)/mk/codac-common.mk + + +# Add all the support libraries needed by this IOC +-include $(EPICS_ROOT)/mk/asyn.mk +-include $(EPICS_ROOT)/mk/s7PLCAsyn.mk + +CUB_DBD += $(CODAC_DBD) +CUB_LIBS += $(CODAC_LIBS) + +# # SNCSEQ +# _SNCFLAGS += +r -c +d +# CUB_DBD += .dbd +# CUB_SRCS += .stt +# CUB_LIBS += seq pv + + +# CUB_registerRecordDeviceDriver.cpp derives from CUB.dbd +CUB_SRCS += CUB_registerRecordDeviceDriver.cpp + +# Build the main IOC entry point on workstation OSs. +CUB_SRCS_DEFAULT += CUBMain.cpp +CUB_SRCS_vxWorks += -nil- + +# Add support from base/src/vxWorks if needed +#CUB_OBJS_vxWorks += $(EPICS_BASE_BIN)/vxComLibrary + +#============================= +# Include SNL program makefile snippets + +-include ../*.snlprog + +#============================= + + +# Finally link to the EPICS Base libraries +CUB_LIBS += $(EPICS_BASE_IOC_LIBS) + +#=========================== + +include $(TOP)/configure/RULES +#---------------------------------------- +# ADD RULES AFTER THIS LINE +#---------------------------------------- diff --git a/EC-GN-JA-PCF/target/main/epics/CUBApp/src/O.Common/CUB.dbd b/EC-GN-JA-PCF/target/main/epics/CUBApp/src/O.Common/CUB.dbd new file mode 100644 index 0000000..fcba839 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/CUBApp/src/O.Common/CUB.dbd @@ -0,0 +1,19604 @@ +menu(serialPRTY) { + choice(serialPRTY_unknown, "Unknown") + choice(serialPRTY_None, "None") + choice(serialPRTY_Even, "Even") + choice(serialPRTY_Odd, "Odd") +} +menu(waveformPOST) { + choice(waveformPOST_Always, "Always") + choice(waveformPOST_OnChange, "On Change") +} +menu(aaoPOST) { + choice(aaoPOST_Always, "Always") + choice(aaoPOST_OnChange, "On Change") +} +menu(menuPriority) { + choice(menuPriorityLOW, "LOW") + choice(menuPriorityMEDIUM, "MEDIUM") + choice(menuPriorityHIGH, "HIGH") +} +menu(serialSBIT) { + choice(serialSBIT_unknown, "Unknown") + choice(serialSBIT_1, "1") + choice(serialSBIT_2, "2") +} +menu(calcoutDOPT) { + choice(calcoutDOPT_Use_VAL, "Use CALC") + choice(calcoutDOPT_Use_OVAL, "Use OCAL") +} +menu(menuOmsl) { + choice(menuOmslsupervisory, "supervisory") + choice(menuOmslclosed_loop, "closed_loop") +} +menu(menuFtype) { + choice(menuFtypeSTRING, "STRING") + choice(menuFtypeCHAR, "CHAR") + choice(menuFtypeUCHAR, "UCHAR") + choice(menuFtypeSHORT, "SHORT") + choice(menuFtypeUSHORT, "USHORT") + choice(menuFtypeLONG, "LONG") + choice(menuFtypeULONG, "ULONG") + choice(menuFtypeINT64, "INT64") + choice(menuFtypeUINT64, "UINT64") + choice(menuFtypeFLOAT, "FLOAT") + choice(menuFtypeDOUBLE, "DOUBLE") + choice(menuFtypeENUM, "ENUM") +} +menu(stringinPOST) { + choice(stringinPOST_OnChange, "On Change") + choice(stringinPOST_Always, "Always") +} +menu(menuPini) { + choice(menuPiniNO, "NO") + choice(menuPiniYES, "YES") + choice(menuPiniRUN, "RUN") + choice(menuPiniRUNNING, "RUNNING") + choice(menuPiniPAUSE, "PAUSE") + choice(menuPiniPAUSED, "PAUSED") +} +menu(dfanoutSELM) { + choice(dfanoutSELM_All, "All") + choice(dfanoutSELM_Specified, "Specified") + choice(dfanoutSELM_Mask, "Mask") +} +menu(menuScan) { + choice(menuScanPassive, "Passive") + choice(menuScanEvent, "Event") + choice(menuScanI_O_Intr, "I/O Intr") + choice(menuScan10_second, "10 second") + choice(menuScan5_second, "5 second") + choice(menuScan2_second, "2 second") + choice(menuScan1_second, "1 second") + choice(menuScan_5_second, ".5 second") + choice(menuScan_2_second, ".2 second") + choice(menuScan_1_second, ".1 second") +} +menu(gpibACMD) { + choice(gpibACMD_None, "None") + choice(gpibACMD_Group_Execute_Trig___GET_, "Group Execute Trig. (GET)") + choice(gpibACMD_Go_To_Local__GTL_, "Go To Local (GTL)") + choice(gpibACMD_Selected_Dev__Clear__SDC_, "Selected Dev. Clear (SDC)") + choice(gpibACMD_Take_Control__TCT_, "Take Control (TCT)") + choice(gpibACMD_Serial_Poll, "Serial Poll") +} +menu(aSubLFLG) { + choice(aSubLFLG_IGNORE, "IGNORE") + choice(aSubLFLG_READ, "READ") +} +menu(asynTMOD) { + choice(asynTMOD_Write_Read, "Write/Read") + choice(asynTMOD_Write, "Write") + choice(asynTMOD_Read, "Read") + choice(asynTMOD_Flush, "Flush") + choice(asynTMOD_NoIO, "NoI/O") +} +menu(ipDRTO) { + choice(ipDRTO_unknown, "Unknown") + choice(ipDRTO_No, "No") + choice(ipDRTO_Yes, "Yes") +} +menu(menuPost) { + choice(menuPost_OnChange, "On Change") + choice(menuPost_Always, "Always") +} +menu(asynINTERFACE) { + choice(asynINTERFACE_OCTET, "asynOctet") + choice(asynINTERFACE_INT32, "asynInt32") + choice(asynINTERFACE_UINT32, "asynUInt32Digital") + choice(asynINTERFACE_FLOAT64, "asynFloat64") +} +menu(menuAlarmStat) { + choice(menuAlarmStatNO_ALARM, "NO_ALARM") + choice(menuAlarmStatREAD, "READ") + choice(menuAlarmStatWRITE, "WRITE") + choice(menuAlarmStatHIHI, "HIHI") + choice(menuAlarmStatHIGH, "HIGH") + choice(menuAlarmStatLOLO, "LOLO") + choice(menuAlarmStatLOW, "LOW") + choice(menuAlarmStatSTATE, "STATE") + choice(menuAlarmStatCOS, "COS") + choice(menuAlarmStatCOMM, "COMM") + choice(menuAlarmStatTIMEOUT, "TIMEOUT") + choice(menuAlarmStatHWLIMIT, "HWLIMIT") + choice(menuAlarmStatCALC, "CALC") + choice(menuAlarmStatSCAN, "SCAN") + choice(menuAlarmStatLINK, "LINK") + choice(menuAlarmStatSOFT, "SOFT") + choice(menuAlarmStatBAD_SUB, "BAD_SUB") + choice(menuAlarmStatUDF, "UDF") + choice(menuAlarmStatDISABLE, "DISABLE") + choice(menuAlarmStatSIMM, "SIMM") + choice(menuAlarmStatREAD_ACCESS, "READ_ACCESS") + choice(menuAlarmStatWRITE_ACCESS, "WRITE_ACCESS") +} +menu(aoOIF) { + choice(aoOIF_Full, "Full") + choice(aoOIF_Incremental, "Incremental") +} +menu(bufferingALG) { + choice(bufferingALG_FIFO, "FIFO Buffer") + choice(bufferingALG_LIFO, "LIFO Buffer") +} +menu(aaiPOST) { + choice(aaiPOST_Always, "Always") + choice(aaiPOST_OnChange, "On Change") +} +menu(calcoutINAV) { + choice(calcoutINAV_EXT_NC, "Ext PV NC") + choice(calcoutINAV_EXT, "Ext PV OK") + choice(calcoutINAV_LOC, "Local PV") + choice(calcoutINAV_CON, "Constant") +} +menu(epidFeedbackState) { + choice(epidFeedbackState_Off, "Off") + choice(epidFeedbackState_On, "On") +} +menu(asynAUTOCONNECT) { + choice(asynAUTOCONNECT_noAutoConnect, "noAutoConnect") + choice(asynAUTOCONNECT_autoConnect, "autoConnect") +} +menu(asynFMT) { + choice(asynFMT_ASCII, "ASCII") + choice(asynFMT_Hybrid, "Hybrid") + choice(asynFMT_Binary, "Binary") +} +menu(seqSELM) { + choice(seqSELM_All, "All") + choice(seqSELM_Specified, "Specified") + choice(seqSELM_Mask, "Mask") +} +menu(asynCONNECT) { + choice(asynCONNECT_Disconnect, "Disconnect") + choice(asynCONNECT_Connect, "Connect") +} +menu(gpibUCMD) { + choice(gpibUCMD_None, "None") + choice(gpibUCMD_Device_Clear__DCL_, "Device Clear (DCL)") + choice(gpibUCMD_Local_Lockout__LL0_, "Local Lockout (LL0)") + choice(gpibUCMD_Serial_Poll_Disable__SPD_, "Serial Poll Disable (SPD)") + choice(gpibUCMD_Serial_Poll_Enable__SPE_, "Serial Poll Enable (SPE)") + choice(gpibUCMD_Unlisten__UNL_, "Unlisten (UNL)") + choice(gpibUCMD_Untalk__UNT_, "Untalk (UNT)") +} +menu(serialBAUD) { + choice(serialBAUD_unknown, "Unknown") + choice(serialBAUD_300, "300") + choice(serialBAUD_600, "600") + choice(serialBAUD_1200, "1200") + choice(serialBAUD_2400, "2400") + choice(serialBAUD_4800, "4800") + choice(serialBAUD_9600, "9600") + choice(serialBAUD_19200, "19200") + choice(serialBAUD_38400, "38400") + choice(serialBAUD_57600, "57600") + choice(serialBAUD_115200, "115200") + choice(serialBAUD_230400, "230400") + choice(serialBAUD_460800, "460800") + choice(serialBAUD_576000, "576000") + choice(serialBAUD_921600, "921600") + choice(serialBAUD_1152000, "1152000") +} +menu(histogramCMD) { + choice(histogramCMD_Read, "Read") + choice(histogramCMD_Clear, "Clear") + choice(histogramCMD_Start, "Start") + choice(histogramCMD_Stop, "Stop") +} +menu(asynTRACE) { + choice(asynTRACE_Off, "Off") + choice(asynTRACE_On, "On") +} +menu(asynEOMREASON) { + choice(asynEOMREASONNone, "None") + choice(asynEOMREASONCNT, "Count") + choice(asynEOMREASONEOS, "Eos") + choice(asynEOMREASONCNTEOS, "Count Eos") + choice(asynEOMREASONEND, "End") + choice(asynEOMREASONCNTEND, "Count End") + choice(asynEOMREASONEOSEND, "Eos End") + choice(asynEOMREASONCNTEOSEND, "Count Eos End") +} +menu(menuIvoa) { + choice(menuIvoaContinue_normally, "Continue normally") + choice(menuIvoaDon_t_drive_outputs, "Don't drive outputs") + choice(menuIvoaSet_output_to_IVOV, "Set output to IVOV") +} +menu(stringoutPOST) { + choice(stringoutPOST_OnChange, "On Change") + choice(stringoutPOST_Always, "Always") +} +menu(menuAlarmSevr) { + choice(menuAlarmSevrNO_ALARM, "NO_ALARM") + choice(menuAlarmSevrMINOR, "MINOR") + choice(menuAlarmSevrMAJOR, "MAJOR") + choice(menuAlarmSevrINVALID, "INVALID") +} +menu(serialMCTL) { + choice(serialMCTL_unknown, "Unknown") + choice(serialMCTL_CLOCAL, "CLOCAL") + choice(serialMCTL_Yes, "YES") +} +menu(serialFCTL) { + choice(serialFCTL_unknown, "Unknown") + choice(serialFCTL_None, "None") + choice(serialFCTL_Hardware, "Hardware") +} +menu(menuSimm) { + choice(menuSimmNO, "NO") + choice(menuSimmYES, "YES") + choice(menuSimmRAW, "RAW") +} +menu(compressALG) { + choice(compressALG_N_to_1_Low_Value, "N to 1 Low Value") + choice(compressALG_N_to_1_High_Value, "N to 1 High Value") + choice(compressALG_N_to_1_Average, "N to 1 Average") + choice(compressALG_Average, "Average") + choice(compressALG_Circular_Buffer, "Circular Buffer") + choice(compressALG_N_to_1_Median, "N to 1 Median") +} +menu(aSubEFLG) { + choice(aSubEFLG_NEVER, "NEVER") + choice(aSubEFLG_ON_CHANGE, "ON CHANGE") + choice(aSubEFLG_ALWAYS, "ALWAYS") +} +menu(fanoutSELM) { + choice(fanoutSELM_All, "All") + choice(fanoutSELM_Specified, "Specified") + choice(fanoutSELM_Mask, "Mask") +} +menu(calcoutOOPT) { + choice(calcoutOOPT_Every_Time, "Every Time") + choice(calcoutOOPT_On_Change, "On Change") + choice(calcoutOOPT_When_Zero, "When Zero") + choice(calcoutOOPT_When_Non_zero, "When Non-zero") + choice(calcoutOOPT_Transition_To_Zero, "Transition To Zero") + choice(calcoutOOPT_Transition_To_Non_zero, "Transition To Non-zero") +} +menu(asynENABLE) { + choice(asynENABLE_Disable, "Disable") + choice(asynENABLE_Enable, "Enable") +} +menu(epidFeedbackMode) { + choice(epidFeedbackMode_PID, "PID") + choice(epidFeedbackMode_MaxMin, "Max/Min") +} +menu(menuConvert) { + choice(menuConvertNO_CONVERSION, "NO CONVERSION") + choice(menuConvertSLOPE, "SLOPE") + choice(menuConvertLINEAR, "LINEAR") + choice(menuConverttypeKdegF, "typeKdegF") + choice(menuConverttypeKdegC, "typeKdegC") + choice(menuConverttypeJdegF, "typeJdegF") + choice(menuConverttypeJdegC, "typeJdegC") + choice(menuConverttypeEdegF, "typeEdegF(ixe only)") + choice(menuConverttypeEdegC, "typeEdegC(ixe only)") + choice(menuConverttypeTdegF, "typeTdegF") + choice(menuConverttypeTdegC, "typeTdegC") + choice(menuConverttypeRdegF, "typeRdegF") + choice(menuConverttypeRdegC, "typeRdegC") + choice(menuConverttypeSdegF, "typeSdegF") + choice(menuConverttypeSdegC, "typeSdegC") +} +menu(serialIX) { + choice(serialIX_unknown, "Unknown") + choice(serialIX_No, "No") + choice(serialIX_Yes, "Yes") +} +menu(menuYesNo) { + choice(menuYesNoNO, "NO") + choice(menuYesNoYES, "YES") +} +menu(timestampTST) { + choice(timestampTST_YY_MM_DD_HH_MM_SS, "YY/MM/DD HH:MM:SS") + choice(timestampTST_MM_DD_YY_HH_MM_SS, "MM/DD/YY HH:MM:SS") + choice(timestampTST_MM_DD_HH_MM_SS_YY, "Mon DD HH:MM:SS YY") + choice(timestampTST_MM_DD_HH_MM_SS, "Mon DD HH:MM:SS") + choice(timestampTST_HH_MM_SS, "HH:MM:SS") + choice(timestampTST_HH_MM, "HH:MM") + choice(timestampTST_DD_MM_YY_HH_MM_SS, "DD/MM/YY HH:MM:SS") + choice(timestampTST_DD_MM_HH_MM_SS_YY, "DD Mon HH:MM:SS YY") + choice(timestampTST_VMS, "DD-Mon-YYYY HH:MM:SS") + choice(timestampTST_MM_DD_YYYY, "Mon DD, YYYY HH:MM:SS.ns") + choice(timestampTST_MM_DD_YY, "MM/DD/YY HH:MM:SS.ns") +} +menu(serialDBIT) { + choice(serialDBIT_unknown, "Unknown") + choice(serialDBIT_5, "5") + choice(serialDBIT_6, "6") + choice(serialDBIT_7, "7") + choice(serialDBIT_8, "8") +} +menu(selSELM) { + choice(selSELM_Specified, "Specified") + choice(selSELM_High_Signal, "High Signal") + choice(selSELM_Low_Signal, "Low Signal") + choice(selSELM_Median_Signal, "Median Signal") +} +recordtype(calcout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct calcoutRecord; + %typedef struct calcoutdset { + % dset common; + % long (*write)(struct calcoutRecord *prec); + %} calcoutdset; + %#define HAS_calcoutdset + % + %#include "dbScan.h" + %#include "postfix.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(RPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct rpvtStruct *rpvt") + interest(4) + prompt("Record Private") + } + field(VAL, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + prompt("Result") + } + field(PVAL, DBF_DOUBLE) { + prompt("Previous Value") + } + field(CALC, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_CALC) + initial("0") + pp(TRUE) + size(80) + prompt("Calculation") + } + field(CLCV, DBF_LONG) { + interest(1) + prompt("CALC Valid") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input F") + } + field(INPG, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input L") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + special(SPC_MOD) + interest(1) + prompt("Output Specification") + } + field(INAV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPA PV Status") + } + field(INBV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPB PV Status") + } + field(INCV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPC PV Status") + } + field(INDV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPD PV Status") + } + field(INEV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPE PV Status") + } + field(INFV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPF PV Status") + } + field(INGV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPG PV Status") + } + field(INHV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPH PV Status") + } + field(INIV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPI PV Status") + } + field(INJV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPJ PV Status") + } + field(INKV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPK PV Status") + } + field(INLV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPL PV Status") + } + field(OUTV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + interest(1) + prompt("OUT PV Status") + } + field(OOPT, DBF_MENU) { + promptgroup("50 - Output") + menu(calcoutOOPT) + interest(1) + prompt("Output Execute Opt") + } + field(ODLY, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + interest(1) + prompt("Output Execute Delay") + } + field(DLYA, DBF_USHORT) { + special(SPC_NOMOD) + asl(ASL0) + prompt("Output Delay Active") + } + field(DOPT, DBF_MENU) { + promptgroup("30 - Action") + menu(calcoutDOPT) + interest(1) + prompt("Output Data Opt") + } + field(OCAL, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_CALC) + initial("0") + pp(TRUE) + size(80) + prompt("Output Calculation") + } + field(OCLV, DBF_LONG) { + interest(1) + prompt("OCAL Valid") + } + field(OEVT, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_MOD) + asl(ASL0) + size(40) + prompt("Event To Issue") + } + field(EPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("EVENTPVT epvt") + interest(4) + prompt("Event private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Rng") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(A, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input A") + } + field(B, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input B") + } + field(C, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input C") + } + field(D, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input D") + } + field(E, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input E") + } + field(F, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input F") + } + field(G, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input G") + } + field(H, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input H") + } + field(I, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input I") + } + field(J, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input J") + } + field(K, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input K") + } + field(L, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input L") + } + field(OVAL, DBF_DOUBLE) { + asl(ASL0) + prompt("Output Value") + } + field(LA, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of A") + } + field(LB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of B") + } + field(LC, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of C") + } + field(LD, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of D") + } + field(LE, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of E") + } + field(LF, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of F") + } + field(LG, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of G") + } + field(LH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of H") + } + field(LI, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of I") + } + field(LJ, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of J") + } + field(LK, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of K") + } + field(LL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of L") + } + field(POVL, DBF_DOUBLE) { + asl(ASL0) + prompt("Prev Value of OVAL") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(RPCL, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("char rpcl[INFIX_TO_POSTFIX_SIZE(80)]") + interest(4) + prompt("Reverse Polish Calc") + } + field(ORPC, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("char orpc[INFIX_TO_POSTFIX_SIZE(80)]") + interest(4) + prompt("Reverse Polish OCalc") + } +} +device(calcout, CONSTANT, devCalcoutSoft, "Soft Channel") +device(calcout, CONSTANT, devCalcoutSoftCallback, "Async Soft Channel") +recordtype(state) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + size(20) + prompt("Value") + } + field(OVAL, DBF_STRING) { + special(SPC_NOMOD) + interest(3) + size(20) + prompt("Prev Value") + } +} +recordtype(histogram) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct histogramRecord; + %typedef struct histogramdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_histogram)(struct histogramRecord *prec); /*(0,2)=> success and add_count, don't add_count); if add_count then sgnl added to array*/ + % long (*special_linconv)(struct histogramRecord *prec, int after); + %} histogramdset; + %#define HAS_histogramdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + prompt("Value") + } + field(NELM, DBF_USHORT) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Num of Array Elements") + } + field(CSTA, DBF_SHORT) { + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Collection Status") + } + field(CMD, DBF_MENU) { + special(SPC_CALC) + asl(ASL0) + menu(histogramCMD) + interest(1) + prompt("Collection Control") + } + field(ULIM, DBF_DOUBLE) { + prop(YES) + promptgroup("30 - Action") + special(SPC_RESET) + interest(1) + prompt("Upper Signal Limit") + } + field(LLIM, DBF_DOUBLE) { + prop(YES) + promptgroup("30 - Action") + special(SPC_RESET) + interest(1) + prompt("Lower Signal Limit ") + } + field(WDTH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Element Width") + } + field(SGNL, DBF_DOUBLE) { + special(SPC_MOD) + prompt("Signal Value") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(SVL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Signal Value Location") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt32 *bptr") + interest(4) + prompt("Buffer Pointer") + } + field(WDOG, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * wdog") + interest(4) + prompt("Watchdog callback") + } + field(MDEL, DBF_SHORT) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Count Deadband") + } + field(MCNT, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Counts Since Monitor") + } + field(SDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + special(SPC_RESET) + interest(1) + prompt("Monitor Seconds Dband") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_DOUBLE) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(HOPR, DBF_ULONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_ULONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } +} +device(histogram, CONSTANT, devHistogramSoft, "Soft Channel") +recordtype(lsi) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct lsiRecord; + %typedef struct lsidset { + % dset common; + % long (*read_string)(struct lsiRecord *prec); + %} lsidset; + %#define HAS_lsidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("char *val") + pp(TRUE) + prompt("Current Value") + } + field(OVAL, DBF_NOACCESS) { + special(SPC_DBADDR) + extra("char *oval") + interest(3) + prompt("Old Value") + } + field(SIZV, DBF_USHORT) { + promptgroup("40 - Input") + special(SPC_NOMOD) + initial("41") + interest(1) + prompt("Size of buffers") + } + field(LEN, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Length of VAL") + } + field(OLEN, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Length of OVAL") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(menuPost) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(menuPost) + interest(1) + prompt("Post Archive Monitors") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(lsi, CONSTANT, devLsiSoft, "Soft Channel") +device(lsi, INST_IO, devLsiEnviron, "getenv") +device(lsi, INST_IO, devLsiStats, "IOC long string") +device(lsi, INST_IO, asynLsiOctetCmdResponse, "asynOctetCmdResponse") +device(lsi, INST_IO, asynLsiOctetWriteRead, "asynOctetWriteRead") +device(lsi, INST_IO, asynLsiOctetRead, "asynOctetRead") +recordtype(int64out) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct int64outRecord; + %typedef struct int64outdset { + % dset common; + % long (*write_int64out)(struct int64outRecord *prec); + %} int64outdset; + %#define HAS_int64outdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_INT64) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Desired Output") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Units name") + } + field(DRVH, DBF_INT64) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive High Limit") + } + field(DRVL, DBF_INT64) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive Low Limit") + } + field(HOPR, DBF_INT64) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_INT64) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_INT64) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_INT64) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_INT64) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_INT64) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } +} +device(int64out, CONSTANT, devI64outSoft, "Soft Channel") +device(int64out, CONSTANT, devI64outSoftCallback, "Async Soft Channel") +device(int64out, INST_IO, asynInt64Out, "asynInt64") +recordtype(seq) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + asl(ASL0) + pp(TRUE) + prompt("Used to trigger") + } + field(SELM, DBF_MENU) { + promptgroup("30 - Action") + menu(seqSELM) + interest(1) + prompt("Select Mechanism") + } + field(SELN, DBF_USHORT) { + initial("1") + interest(1) + prompt("Link Selection") + } + field(SELL, DBF_INLINK) { + promptgroup("30 - Action") + interest(1) + prompt("Link Selection Loc") + } + field(OFFS, DBF_SHORT) { + promptgroup("30 - Action") + initial("0") + interest(1) + prompt("Offset for Specified") + } + field(SHFT, DBF_SHORT) { + promptgroup("30 - Action") + initial("-1") + interest(1) + prompt("Shift for Mask mode") + } + field(OLDN, DBF_USHORT) { + interest(4) + prompt("Old Selection") + } + field(PREC, DBF_SHORT) { + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(DLY0, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 0") + } + field(DOL0, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 0") + } + field(DO0, DBF_DOUBLE) { + interest(1) + prompt("Value 0") + } + field(LNK0, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 0") + } + field(DLY1, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 1") + } + field(DOL1, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link1") + } + field(DO1, DBF_DOUBLE) { + interest(1) + prompt("Value 1") + } + field(LNK1, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 1") + } + field(DLY2, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 2") + } + field(DOL2, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 2") + } + field(DO2, DBF_DOUBLE) { + interest(1) + prompt("Value 2") + } + field(LNK2, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 2") + } + field(DLY3, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 3") + } + field(DOL3, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 3") + } + field(DO3, DBF_DOUBLE) { + interest(1) + prompt("Value 3") + } + field(LNK3, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 3") + } + field(DLY4, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 4") + } + field(DOL4, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 4") + } + field(DO4, DBF_DOUBLE) { + interest(1) + prompt("Value 4") + } + field(LNK4, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 4") + } + field(DLY5, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 5") + } + field(DOL5, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 5") + } + field(DO5, DBF_DOUBLE) { + interest(1) + prompt("Value 5") + } + field(LNK5, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 5") + } + field(DLY6, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 6") + } + field(DOL6, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 6") + } + field(DO6, DBF_DOUBLE) { + interest(1) + prompt("Value 6") + } + field(LNK6, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 6") + } + field(DLY7, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 7") + } + field(DOL7, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 7") + } + field(DO7, DBF_DOUBLE) { + interest(1) + prompt("Value 7") + } + field(LNK7, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 7") + } + field(DLY8, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 8") + } + field(DOL8, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 8") + } + field(DO8, DBF_DOUBLE) { + interest(1) + prompt("Value 8") + } + field(LNK8, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 8") + } + field(DLY9, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 9") + } + field(DOL9, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 9") + } + field(DO9, DBF_DOUBLE) { + interest(1) + prompt("Value 9") + } + field(LNK9, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 9") + } + field(DLYA, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 10") + } + field(DOLA, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 10") + } + field(DOA, DBF_DOUBLE) { + interest(1) + prompt("Value 10") + } + field(LNKA, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 10") + } + field(DLYB, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 11") + } + field(DOLB, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 11") + } + field(DOB, DBF_DOUBLE) { + interest(1) + prompt("Value 11") + } + field(LNKB, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 11") + } + field(DLYC, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 12") + } + field(DOLC, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 12") + } + field(DOC, DBF_DOUBLE) { + interest(1) + prompt("Value 12") + } + field(LNKC, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 12") + } + field(DLYD, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 13") + } + field(DOLD, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 13") + } + field(DOD, DBF_DOUBLE) { + interest(1) + prompt("Value 13") + } + field(LNKD, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 13") + } + field(DLYE, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 14") + } + field(DOLE, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 14") + } + field(DOE, DBF_DOUBLE) { + interest(1) + prompt("Value 14") + } + field(LNKE, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 14") + } + field(DLYF, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 15") + } + field(DOLF, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 15") + } + field(DOF, DBF_DOUBLE) { + interest(1) + prompt("Value 15") + } + field(LNKF, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 15") + } +} +recordtype(stringout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct stringoutRecord; + %typedef struct stringoutdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*write_stringout)(struct stringoutRecord *prec); /*(-1,0)=>(failure,success)*/ + %} stringoutdset; + %#define HAS_stringoutdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + size(40) + prompt("Current Value") + } + field(OVAL, DBF_STRING) { + special(SPC_NOMOD) + interest(3) + size(40) + prompt("Previous Value") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(stringoutPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(stringoutPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_STRING) { + promptgroup("50 - Output") + interest(2) + size(40) + prompt("INVALID output value") + } +} +device(stringout, CONSTANT, devSoSoft, "Soft Channel") +device(stringout, CONSTANT, devSoSoftCallback, "Async Soft Channel") +device(stringout, INST_IO, devSoStdio, "stdio") +device(stringout, INST_IO, asynSoOctetWrite, "asynOctetWrite") +recordtype(aai) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct aaiRecord; + %typedef struct aaidset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_aai)(struct aaiRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} aaidset; + %#define HAS_aaidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(NELM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Number of Elements") + } + field(FTVL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_NOMOD) + menu(menuFtype) + interest(1) + prompt("Field Type of Value") + } + field(NORD, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Number elements read") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * bptr") + interest(4) + prompt("Buffer Pointer") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(aaiPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(aaiPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(HASH, DBF_ULONG) { + interest(3) + prompt("Hash of OnChange data.") + } +} +device(aai, CONSTANT, devAaiSoft, "Soft Channel") +recordtype(permissive) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_USHORT) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Status") + } + field(WFLG, DBF_USHORT) { + pp(TRUE) + prompt("Wait Flag") + } + field(LABL, DBF_STRING) { + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(20) + prompt("Button Label") + } + field(OVAL, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Old Status") + } + field(OFLG, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Old Flag") + } +} +recordtype(bo) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct boRecord; + %typedef struct bodset { + % dset common; /*init_record returns:(0,2)=>(success,success no convert*/ + % long (*write_bo)(struct boRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} bodset; + %#define HAS_bodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_ENUM) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(HIGH, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Seconds to Hold High") + } + field(ZNAM, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(26) + prompt("Zero Name") + } + field(ONAM, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(26) + prompt("One Name") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("prev Raw Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(RPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * rpvt") + interest(4) + prompt("Record Private") + } + field(WDPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * wdpt") + interest(4) + prompt("Watch Dog Timer ID") + } + field(ZSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Zero Error Severity") + } + field(OSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("One Error Severity") + } + field(COSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Change of State Sevr") + } + field(RBV, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Readback Value") + } + field(ORBV, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Readback Value") + } + field(MLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(LALM, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID outpt action") + } + field(IVOV, DBF_USHORT) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } +} +device(bo, CONSTANT, devBoSoft, "Soft Channel") +device(bo, CONSTANT, devBoSoftRaw, "Raw Soft Channel") +device(bo, CONSTANT, devBoSoftCallback, "Async Soft Channel") +device(bo, INST_IO, devBoGeneralTime, "General Time") +device(bo, INST_IO, devBoDbState, "Db State") +device(bo, INST_IO, devBoSimulation, "IOC SIM") +device(bo, INST_IO, asynBoInt32, "asynInt32") +device(bo, INST_IO, asynBoUInt32Digital, "asynUInt32Digital") +recordtype(dfanout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Desired Output") + } + field(SELM, DBF_MENU) { + promptgroup("30 - Action") + menu(dfanoutSELM) + interest(1) + prompt("Select Mechanism") + } + field(SELN, DBF_USHORT) { + initial("1") + interest(1) + prompt("Link Selection") + } + field(SELL, DBF_INLINK) { + promptgroup("30 - Action") + interest(1) + prompt("Link Selection Loc") + } + field(OUTA, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec A") + } + field(OUTB, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec B") + } + field(OUTC, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec C") + } + field(OUTD, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec D") + } + field(OUTE, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec E") + } + field(OUTF, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec F") + } + field(OUTG, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec G") + } + field(OUTH, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec H") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } +} +recordtype(mbbi) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct mbbiRecord; + %typedef struct mbbidset { + % dset common; /* init_record returns: (-1,0) => (failure, success)*/ + % long (*read_mbbi)(struct mbbiRecord *prec); /* (0, 2) => (success, success no convert)*/ + %} mbbidset; + %#define HAS_mbbidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_ENUM) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + } + field(NOBT, DBF_USHORT) { + promptgroup("40 - Input") + special(SPC_NOMOD) + interest(1) + prompt("Number of Bits") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(ZRVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Zero Value") + } + field(ONVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("One Value") + } + field(TWVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Two Value") + } + field(THVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Three Value") + } + field(FRVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Four Value") + } + field(FVVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Five Value") + } + field(SXVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Six Value") + } + field(SVVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Seven Value") + } + field(EIVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Eight Value") + } + field(NIVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Nine Value") + } + field(TEVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Ten Value") + } + field(ELVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Eleven Value") + } + field(TVVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Twelve Value") + } + field(TTVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Thirteen Value") + } + field(FTVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Fourteen Value") + } + field(FFVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Fifteen Value") + } + field(ZRST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Zero String") + } + field(ONST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("One String") + } + field(TWST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Two String") + } + field(THST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Three String") + } + field(FRST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Four String") + } + field(FVST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Five String") + } + field(SXST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Six String") + } + field(SVST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Seven String") + } + field(EIST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Eight String") + } + field(NIST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Nine String") + } + field(TEST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Ten String") + } + field(ELST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Eleven String") + } + field(TVST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Twelve String") + } + field(TTST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Thirteen String") + } + field(FTST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Fourteen String") + } + field(FFST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Fifteen String") + } + field(ZRSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Zero Severity") + } + field(ONSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State One Severity") + } + field(TWSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Two Severity") + } + field(THSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Three Severity") + } + field(FRSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Four Severity") + } + field(FVSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Five Severity") + } + field(SXSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Six Severity") + } + field(SVSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Seven Severity") + } + field(EISV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Eight Severity") + } + field(NISV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Nine Severity") + } + field(TESV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Ten Severity") + } + field(ELSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Eleven Severity") + } + field(TVSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Twelve Severity") + } + field(TTSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Thirteen Sevr") + } + field(FTSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Fourteen Sevr") + } + field(FFSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Fifteen Severity") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(UNSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Unknown State Severity") + } + field(COSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Change of State Svr") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Raw Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(MLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(LALM, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(SDEF, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("States Defined") + } + field(SHFT, DBF_USHORT) { + promptgroup("40 - Input") + interest(1) + prompt("Shift") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_ULONG) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuSimm) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(mbbi, CONSTANT, devMbbiSoft, "Soft Channel") +device(mbbi, CONSTANT, devMbbiSoftRaw, "Raw Soft Channel") +device(mbbi, CONSTANT, devMbbiSoftCallback, "Async Soft Channel") +device(mbbi, INST_IO, devSysMonMbbiStats, "sysmon") +device(mbbi, INST_IO, asynMbbiInt32, "asynInt32") +device(mbbi, INST_IO, asynMbbiUInt32Digital, "asynUInt32Digital") +recordtype(event) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct eventRecord; + %typedef struct eventdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_event)(struct eventRecord *prec); /*(0)=> success */ + %} eventdset; + %#define HAS_eventdset + % + %#include "dbScan.h" + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("40 - Input") + special(SPC_MOD) + asl(ASL0) + size(40) + prompt("Event Name To Post") + } + field(EPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("EVENTPVT epvt") + interest(4) + prompt("Event private") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Input Specifctn") + } + field(SVAL, DBF_STRING) { + size(40) + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Mode Location") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Sim mode Alarm Svrty") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(event, CONSTANT, devEventSoft, "Soft Channel") +recordtype(compress) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(RES, DBF_SHORT) { + special(SPC_RESET) + asl(ASL0) + interest(3) + prompt("Reset") + } + field(ALG, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_RESET) + menu(compressALG) + interest(1) + prompt("Compression Algorithm") + } + field(BALG, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_RESET) + menu(bufferingALG) + interest(1) + prompt("Buffering Algorithm") + } + field(NSAM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Number of Values") + } + field(N, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_RESET) + initial("1") + interest(1) + prompt("N to 1 Compression") + } + field(IHIL, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Init High Interest Lim") + } + field(ILIL, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Init Low Interest Lim") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(OFF, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Offset") + } + field(NUSE, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Number Used") + } + field(OUSE, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Old Number Used") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("double *bptr") + interest(4) + prompt("Buffer Pointer") + } + field(SPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("double *sptr") + interest(4) + prompt("Summing Buffer Ptr") + } + field(WPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("double *wptr") + interest(4) + prompt("Working Buffer Ptr") + } + field(INPN, DBF_LONG) { + special(SPC_NOMOD) + interest(4) + prompt("Number of elements in Working Buffer") + } + field(CVB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Compress Value Buffer") + } + field(INX, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Compressed Array Inx") + } +} +recordtype(mbbo) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct mbboRecord; + %typedef struct mbbodset { + % dset common; /*init_record returns: (0, 2) => (success, success no convert)*/ + % long (*write_mbbo)(struct mbboRecord *prec); /*returns: (0, 2) => (success, success no convert)*/ + %} mbbodset; + %#define HAS_mbbodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_ENUM) { + promptgroup("50 - Output") + special(SPC_DBADDR) + asl(ASL0) + pp(TRUE) + prompt("Desired Value") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(NOBT, DBF_USHORT) { + promptgroup("50 - Output") + special(SPC_NOMOD) + interest(1) + prompt("Number of Bits") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(ZRVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Zero Value") + } + field(ONVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("One Value") + } + field(TWVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Two Value") + } + field(THVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Three Value") + } + field(FRVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Four Value") + } + field(FVVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Five Value") + } + field(SXVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Six Value") + } + field(SVVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Seven Value") + } + field(EIVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Eight Value") + } + field(NIVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Nine Value") + } + field(TEVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Ten Value") + } + field(ELVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Eleven Value") + } + field(TVVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Twelve Value") + } + field(TTVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Thirteen Value") + } + field(FTVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Fourteen Value") + } + field(FFVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Fifteen Value") + } + field(ZRST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Zero String") + } + field(ONST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("One String") + } + field(TWST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Two String") + } + field(THST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Three String") + } + field(FRST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Four String") + } + field(FVST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Five String") + } + field(SXST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Six String") + } + field(SVST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Seven String") + } + field(EIST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Eight String") + } + field(NIST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Nine String") + } + field(TEST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Ten String") + } + field(ELST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Eleven String") + } + field(TVST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Twelve String") + } + field(TTST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Thirteen String") + } + field(FTST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Fourteen String") + } + field(FFST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Fifteen String") + } + field(ZRSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Zero Severity") + } + field(ONSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State One Severity") + } + field(TWSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Two Severity") + } + field(THSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Three Severity") + } + field(FRSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Four Severity") + } + field(FVSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Five Severity") + } + field(SXSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Six Severity") + } + field(SVSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Seven Severity") + } + field(EISV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Eight Severity") + } + field(NISV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Nine Severity") + } + field(TESV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Ten Severity") + } + field(ELSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Eleven Severity") + } + field(TVSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Twelve Severity") + } + field(TTSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Thirteen Sevr") + } + field(FTSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Fourteen Sevr") + } + field(FFSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Fifteen Sevr") + } + field(UNSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Unknown State Sevr") + } + field(COSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Change of State Sevr") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Raw Value") + } + field(RBV, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Readback Value") + } + field(ORBV, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Readback Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(MLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(LALM, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(SDEF, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("States Defined") + } + field(SHFT, DBF_USHORT) { + promptgroup("50 - Output") + interest(1) + prompt("Shift") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID outpt action") + } + field(IVOV, DBF_USHORT) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } +} +device(mbbo, CONSTANT, devMbboSoft, "Soft Channel") +device(mbbo, CONSTANT, devMbboSoftRaw, "Raw Soft Channel") +device(mbbo, CONSTANT, devMbboSoftCallback, "Async Soft Channel") +device(mbbo, INST_IO, asynMbboInt32, "asynInt32") +device(mbbo, INST_IO, asynMbboUInt32Digital, "asynUInt32Digital") +recordtype(epid) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + prompt("Record Name") + size(61) + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + prompt("Descriptor") + size(41) + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + prompt("Access Security Group") + size(29) + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Event Name") + size(40) + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("epicsMutexId mlok") + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("ELLLIST mlis") + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("ELLLIST bklnk") + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + interest(2) + initial("YES") + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct asgMember *asp") + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct processNotify *ppn") + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct processNotifyRecord *ppnr") + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct scan_element *spvt") + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct typed_rset *rset") + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("unambiguous_dset *dset") + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("void *dpvt") + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct dbRecordType *rdes") + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct lockRecord *lset") + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(1) + extra("epicsUInt8 bkpt") + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + interest(1) + initial("1") + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + initial("INVALID") + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(2) + extra("epicsTimeStamp time") + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Setpoint") + } + field(SMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Setpoint Mode Select") + } + field(STPL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Setpoint Location") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Controlled Value Loc") + } + field(OUTL, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Location") + } + field(TRIG, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Readback Trigger") + } + field(TVAL, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(1) + prompt("Trigger Value") + } + field(CVAL, DBF_DOUBLE) { + special(SPC_NOMOD) + prompt("Controlled Value") + } + field(CVLP, DBF_DOUBLE) { + special(SPC_NOMOD) + prompt("Prev. Controlled Value") + } + field(OVAL, DBF_DOUBLE) { + special(SPC_NOMOD) + prompt("Output value") + } + field(OVLP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev output") + } + field(PREC, DBF_SHORT) { + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(MDT, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Min Delta T") + } + field(FMOD, DBF_MENU) { + promptgroup("30 - Action") + menu(epidFeedbackMode) + interest(1) + prompt("Feedback Mode") + } + field(FBON, DBF_MENU) { + promptgroup("30 - Action") + menu(epidFeedbackState) + interest(1) + prompt("Feedback On/Off") + } + field(FBOP, DBF_MENU) { + promptgroup("30 - Action") + menu(epidFeedbackState) + interest(1) + prompt("Prev. feedback On/Off") + } + field(KP, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Proportional Gain") + } + field(KI, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Integral Gain") + } + field(KD, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Derivative Gain") + } + field(EGU, DBF_STRING) { + promptgroup("80 - Display") + interest(1) + prompt("Engineering Units") + size(16) + } + field(HOPR, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(DRVH, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("High Drive Limit") + } + field(DRVL, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Low Drive Limit") + } + field(HIHI, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Hihi Deviation Limit") + } + field(LOLO, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Lolo Deviation Limit") + } + field(HIGH, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("High Deviation Limit") + } + field(LOW, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Low Deviation Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(ODEL, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Output Deadband") + } + field(P, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("P component") + } + field(PP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("Prev. P component") + } + field(I, DBF_DOUBLE) { + interest(2) + prompt("I component") + } + field(IP, DBF_DOUBLE) { + interest(2) + prompt("Prev. I component") + } + field(D, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("D component") + } + field(DP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("Prev. D component") + } + field(CT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("epicsTimeStamp ct") + prompt("Time") + } + field(CTP, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("epicsTimeStamp ctp") + prompt("Previous time") + } + field(DT, DBF_DOUBLE) { + interest(2) + prompt("Delta T") + } + field(DTP, DBF_DOUBLE) { + interest(2) + prompt("Prev. Delta T") + } + field(ERR, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("Error") + } + field(ERRP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("Prev. Error") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } +} +device(epid, CONSTANT, devEpidSoft, "Soft Channel") +device(epid, CONSTANT, devEpidSoftCB, "Async Soft Channel") +recordtype(ao) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct aoRecord; + %typedef struct aodset { + % dset common; /*init_record returns: (0,2)=>(success,success no convert)*/ + % long (*write_ao)(struct aoRecord *prec); /*(0)=>(success ) */ + % long (*special_linconv)(struct aoRecord *prec, int after); + %} aodset; + %#define HAS_aodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Desired Output") + } + field(OVAL, DBF_DOUBLE) { + prompt("Output Value") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(OROC, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(1) + prompt("Output Rate of Change") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(OIF, DBF_MENU) { + promptgroup("50 - Output") + menu(aoOIF) + interest(1) + prompt("Out Full/Incremental") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(LINR, DBF_MENU) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + menu(menuConvert) + interest(1) + pp(TRUE) + prompt("Linearization") + } + field(EGUF, DBF_DOUBLE) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + interest(1) + pp(TRUE) + prompt("Eng Units Full") + } + field(EGUL, DBF_DOUBLE) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + interest(1) + pp(TRUE) + prompt("Eng Units Low") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(ROFF, DBF_ULONG) { + interest(2) + pp(TRUE) + prompt("Raw Offset") + } + field(EOFF, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(2) + pp(TRUE) + prompt("EGU to Raw Offset") + } + field(ESLO, DBF_DOUBLE) { + promptgroup("60 - Convert") + initial("1") + interest(2) + pp(TRUE) + prompt("EGU to Raw Slope") + } + field(DRVH, DBF_DOUBLE) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive High Limit") + } + field(DRVL, DBF_DOUBLE) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive Low Limit") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(AOFF, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(1) + pp(TRUE) + prompt("Adjustment Offset") + } + field(ASLO, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(1) + pp(TRUE) + prompt("Adjustment Slope") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(RVAL, DBF_LONG) { + pp(TRUE) + prompt("Current Raw Value") + } + field(ORAW, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Previous Raw Value") + } + field(RBV, DBF_LONG) { + special(SPC_NOMOD) + prompt("Readback Value") + } + field(ORBV, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Readback Value") + } + field(PVAL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Previous value") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(PBRK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * pbrk") + interest(4) + prompt("Ptrto brkTable") + } + field(INIT, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Initialized?") + } + field(LBRK, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("LastBreak Point") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } + field(OMOD, DBF_UCHAR) { + special(SPC_NOMOD) + prompt("Was OVAL modified?") + } +} +device(ao, CONSTANT, devAoSoft, "Soft Channel") +device(ao, CONSTANT, devAoSoftRaw, "Raw Soft Channel") +device(ao, CONSTANT, devAoSoftCallback, "Async Soft Channel") +device(ao, INST_IO, devAoStats, "IOC stats") +device(ao, INST_IO, asynAoInt32, "asynInt32") +device(ao, INST_IO, asynAoFloat64, "asynFloat64") +device(ao, INST_IO, asynAoInt64, "asynInt64") +recordtype(aao) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct aaoRecord; + %typedef struct aaodset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*write_aao)(struct aaoRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} aaodset; + %#define HAS_aaodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(NELM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Number of Elements") + } + field(FTVL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_NOMOD) + menu(menuFtype) + interest(1) + prompt("Field Type of Value") + } + field(NORD, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Number elements read") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * bptr") + interest(4) + prompt("Buffer Pointer") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(aaoPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(aaoPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(HASH, DBF_ULONG) { + interest(3) + prompt("Hash of OnChange data.") + } +} +device(aao, CONSTANT, devAaoSoft, "Soft Channel") +recordtype(mbbiDirect) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct mbbiDirectRecord; + %typedef struct mbbidirectdset { + % dset common; /* init_record returns: (-1,0) => (failure, success)*/ + % long (*read_mbbi)(struct mbbiDirectRecord *prec); /* (0, 2) => (success, success no convert)*/ + %} mbbidirectdset; + %#define HAS_mbbidirectdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + } + field(NOBT, DBF_SHORT) { + promptgroup("40 - Input") + special(SPC_NOMOD) + interest(1) + prompt("Number of Bits") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Raw Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(MLST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(SHFT, DBF_USHORT) { + promptgroup("40 - Input") + interest(1) + prompt("Shift") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_LONG) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuSimm) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(B0, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 0") + } + field(B1, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 1") + } + field(B2, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 2") + } + field(B3, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 3") + } + field(B4, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 4") + } + field(B5, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 5") + } + field(B6, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 6") + } + field(B7, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 7") + } + field(B8, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 8") + } + field(B9, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 9") + } + field(BA, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 10") + } + field(BB, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 11") + } + field(BC, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 12") + } + field(BD, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 13") + } + field(BE, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 14") + } + field(BF, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 15") + } + field(B10, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 16") + } + field(B11, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 17") + } + field(B12, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 18") + } + field(B13, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 19") + } + field(B14, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 20") + } + field(B15, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 21") + } + field(B16, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 22") + } + field(B17, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 23") + } + field(B18, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 24") + } + field(B19, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 25") + } + field(B1A, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 26") + } + field(B1B, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 27") + } + field(B1C, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 28") + } + field(B1D, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 29") + } + field(B1E, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 30") + } + field(B1F, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 31") + } +} +device(mbbiDirect, CONSTANT, devMbbiDirectSoft, "Soft Channel") +device(mbbiDirect, CONSTANT, devMbbiDirectSoftRaw, "Raw Soft Channel") +device(mbbiDirect, CONSTANT, devMbbiDirectSoftCallback, "Async Soft Channel") +device(mbbiDirect, INST_IO, devSysMonMbbiDirectStats, "sysmon") +device(mbbiDirect, INST_IO, asynMbbiDirectUInt32Digital, "asynUInt32Digital") +recordtype(asyn) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + asl(ASL0) + interest(4) + prompt("Value field (unused)") + } + field(PORT, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_MOD) + initial("") + interest(1) + size(40) + prompt("asyn port") + } + field(ADDR, DBF_LONG) { + promptgroup("30 - Action") + special(SPC_MOD) + initial("0") + interest(1) + prompt("asyn address") + } + field(PCNCT, DBF_MENU) { + special(SPC_MOD) + menu(asynCONNECT) + interest(2) + prompt("Port Connect/Disconnect") + } + field(DRVINFO, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_MOD) + initial("") + interest(2) + size(40) + prompt("Driver info string") + } + field(REASON, DBF_LONG) { + special(SPC_MOD) + interest(2) + prompt("asynUser->reason") + } + field(TMOD, DBF_MENU) { + promptgroup("30 - Action") + menu(asynTMOD) + interest(1) + prompt("Transaction mode") + } + field(TMOT, DBF_DOUBLE) { + promptgroup("30 - Action") + initial("1.0") + interest(1) + prompt("Timeout (sec)") + } + field(IFACE, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_MOD) + menu(asynINTERFACE) + interest(2) + prompt("Interface") + } + field(OCTETIV, DBF_LONG) { + interest(2) + prompt("asynOctet is valid") + } + field(OPTIONIV, DBF_LONG) { + interest(2) + prompt("asynOption is valid") + } + field(GPIBIV, DBF_LONG) { + interest(2) + prompt("asynGPIB is valid") + } + field(I32IV, DBF_LONG) { + interest(2) + prompt("asynInt32 is valid") + } + field(UI32IV, DBF_LONG) { + interest(2) + prompt("asynUInt32Digital is valid") + } + field(F64IV, DBF_LONG) { + interest(2) + prompt("asynFloat64 is valid") + } + field(AOUT, DBF_STRING) { + promptgroup("50 - Output") + interest(1) + pp(TRUE) + size(40) + prompt("Output (command) string") + } + field(OEOS, DBF_STRING) { + promptgroup("50 - Output") + special(SPC_MOD) + interest(1) + size(40) + prompt("Output delimiter") + } + field(BOUT, DBF_CHAR) { + special(SPC_DBADDR) + interest(1) + pp(TRUE) + prompt("Output binary data") + } + field(OPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *optr") + interest(4) + prompt("Output buffer pointer") + } + field(OMAX, DBF_LONG) { + promptgroup("50 - Output") + special(SPC_NOMOD) + initial("80") + interest(1) + prompt("Max. size of output array") + } + field(NOWT, DBF_LONG) { + promptgroup("50 - Output") + initial("80") + interest(1) + prompt("Number of bytes to write") + } + field(NAWT, DBF_LONG) { + interest(1) + prompt("Number of bytes actually written") + } + field(OFMT, DBF_MENU) { + promptgroup("50 - Output") + menu(asynFMT) + interest(1) + prompt("Output format") + } + field(AINP, DBF_STRING) { + special(SPC_NOMOD) + interest(1) + size(40) + prompt("Input (response) string") + } + field(TINP, DBF_STRING) { + special(SPC_NOMOD) + asl(ASL0) + interest(1) + size(40) + prompt("Translated input string") + } + field(IEOS, DBF_STRING) { + promptgroup("40 - Input") + special(SPC_MOD) + interest(1) + size(40) + prompt("Input Delimiter") + } + field(BINP, DBF_CHAR) { + special(SPC_DBADDR) + asl(ASL0) + prompt("Input binary data") + } + field(IPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *iptr") + interest(4) + size(4) + prompt("Input buffer pointer") + } + field(IMAX, DBF_LONG) { + promptgroup("40 - Input") + special(SPC_NOMOD) + initial("80") + interest(1) + prompt("Max. size of input array") + } + field(NRRD, DBF_LONG) { + promptgroup("40 - Input") + interest(1) + prompt("Number of bytes to read") + } + field(NORD, DBF_LONG) { + special(SPC_NOMOD) + interest(1) + prompt("Number of bytes read") + } + field(IFMT, DBF_MENU) { + promptgroup("40 - Input") + menu(asynFMT) + interest(1) + prompt("Input format") + } + field(EOMR, DBF_MENU) { + special(SPC_NOMOD) + menu(asynEOMREASON) + interest(1) + prompt("EOM reason") + } + field(I32INP, DBF_LONG) { + special(SPC_NOMOD) + interest(2) + prompt("asynInt32 input") + } + field(I32OUT, DBF_LONG) { + promptgroup("50 - Output") + interest(2) + pp(TRUE) + prompt("asynInt32 output") + } + field(UI32INP, DBF_ULONG) { + special(SPC_NOMOD) + interest(2) + prompt("asynUInt32Digital input") + } + field(UI32OUT, DBF_ULONG) { + promptgroup("50 - Output") + interest(2) + pp(TRUE) + prompt("asynUInt32Digital output") + } + field(UI32MASK, DBF_ULONG) { + promptgroup("50 - Output") + special(SPC_MOD) + interest(2) + initial("0xffffffff") + prompt("asynUInt32Digital mask") + } + field(F64INP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("asynFloat64 input") + } + field(F64OUT, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(2) + pp(TRUE) + prompt("asynFloat64 output") + } + field(BAUD, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialBAUD) + interest(2) + prompt("Baud rate") + } + field(LBAUD, DBF_LONG) { + promptgroup("31 - Serial") + special(SPC_MOD) + interest(2) + prompt("Baud rate") + } + field(PRTY, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialPRTY) + interest(2) + prompt("Parity") + } + field(DBIT, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialDBIT) + interest(2) + prompt("Data bits") + } + field(SBIT, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialSBIT) + interest(2) + prompt("Stop bits") + } + field(MCTL, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialMCTL) + interest(2) + prompt("Modem control") + } + field(FCTL, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialFCTL) + interest(2) + prompt("Flow control") + } + field(IXON, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialIX) + interest(2) + prompt("Output XON/XOFF") + } + field(IXOFF, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialIX) + interest(2) + prompt("Input XON/XOFF") + } + field(IXANY, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialIX) + interest(2) + prompt("XON=any character") + } + field(HOSTINFO, DBF_STRING) { + promptgroup("32 - IP") + special(SPC_MOD) + initial("") + interest(1) + size(40) + prompt("host info") + } + field(DRTO, DBF_MENU) { + promptgroup("32 - IP") + special(SPC_MOD) + menu(ipDRTO) + interest(2) + prompt("Disconnect on timeout") + } + field(UCMD, DBF_MENU) { + promptgroup("33 - GPIB") + menu(gpibUCMD) + interest(2) + pp(TRUE) + prompt("Universal command") + } + field(ACMD, DBF_MENU) { + promptgroup("33 - GPIB") + menu(gpibACMD) + interest(2) + pp(TRUE) + prompt("Addressed command") + } + field(SPR, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Serial poll response") + } + field(TMSK, DBF_LONG) { + promptgroup("80 - Display") + special(SPC_MOD) + interest(1) + prompt("Trace mask") + } + field(TB0, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace error") + } + field(TB1, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace IO device") + } + field(TB2, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace IO filter") + } + field(TB3, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace IO driver") + } + field(TB4, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace flow") + } + field(TB5, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace warning") + } + field(TIOM, DBF_LONG) { + promptgroup("80 - Display") + special(SPC_MOD) + interest(1) + prompt("Trace I/O mask") + } + field(TIB0, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace IO ASCII") + } + field(TIB1, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace IO escape") + } + field(TIB2, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace IO hex") + } + field(TINM, DBF_LONG) { + promptgroup("80 - Display") + special(SPC_MOD) + interest(1) + prompt("Trace Info mask") + } + field(TINB0, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace Info Time") + } + field(TINB1, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace Info Port") + } + field(TINB2, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace Info Source") + } + field(TINB3, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace Info Thread") + } + field(TSIZ, DBF_LONG) { + promptgroup("80 - Display") + special(SPC_MOD) + interest(1) + prompt("Trace IO truncate size") + } + field(TFIL, DBF_STRING) { + promptgroup("80 - Display") + special(SPC_MOD) + interest(1) + size(40) + prompt("Trace IO file") + } + field(AUCT, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_MOD) + menu(asynAUTOCONNECT) + interest(1) + prompt("Autoconnect") + } + field(CNCT, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_MOD) + menu(asynCONNECT) + interest(1) + prompt("Connect/Disconnect") + } + field(ENBL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_MOD) + menu(asynENABLE) + interest(1) + prompt("Enable/Disable") + } + field(ERRS, DBF_NOACCESS) { + special(SPC_DBADDR) + extra("char *errs") + interest(4) + prompt("Error string") + } + field(AQR, DBF_UCHAR) { + special(SPC_MOD) + interest(4) + prompt("Abort queueRequest") + } +} +device(asyn, INST_IO, asynRecordDevice, "asynRecordDevice") +recordtype(waveform) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct waveformRecord; + %typedef struct wfdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_wf)(struct waveformRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} wfdset; + %#define HAS_wfdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(RARM, DBF_SHORT) { + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Rearm the waveform") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(NELM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Number of Elements") + } + field(FTVL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_NOMOD) + menu(menuFtype) + interest(1) + prompt("Field Type of Value") + } + field(BUSY, DBF_SHORT) { + special(SPC_NOMOD) + prompt("Busy Indicator") + } + field(NORD, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Number elements read") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * bptr") + interest(4) + prompt("Buffer Pointer") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(waveformPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(waveformPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(HASH, DBF_ULONG) { + interest(3) + prompt("Hash of OnChange data.") + } +} +device(waveform, CONSTANT, devWfSoft, "Soft Channel") +device(waveform, INST_IO, devWaveformStats, "IOC stats") +device(waveform, INST_IO, devSysMonWaveStats, "sysmon") +device(waveform, INST_IO, asynWfOctetCmdResponse, "asynOctetCmdResponse") +device(waveform, INST_IO, asynWfOctetWriteRead, "asynOctetWriteRead") +device(waveform, INST_IO, asynWfOctetRead, "asynOctetRead") +device(waveform, INST_IO, asynWfOctetWrite, "asynOctetWrite") +device(waveform, INST_IO, asynWfOctetWriteBinary, "asynOctetWriteBinary") +device(waveform, INST_IO, asynInt8ArrayWfIn, "asynInt8ArrayIn") +device(waveform, INST_IO, asynInt8ArrayWfOut, "asynInt8ArrayOut") +device(waveform, INST_IO, asynInt16ArrayWfIn, "asynInt16ArrayIn") +device(waveform, INST_IO, asynInt16ArrayWfOut, "asynInt16ArrayOut") +device(waveform, INST_IO, asynInt32ArrayWfIn, "asynInt32ArrayIn") +device(waveform, INST_IO, asynInt32ArrayWfOut, "asynInt32ArrayOut") +device(waveform, INST_IO, asynInt32TimeSeries, "asynInt32TimeSeries") +device(waveform, INST_IO, asynFloat32ArrayWfIn, "asynFloat32ArrayIn") +device(waveform, INST_IO, asynFloat32ArrayWfOut, "asynFloat32ArrayOut") +device(waveform, INST_IO, asynFloat64ArrayWfIn, "asynFloat64ArrayIn") +device(waveform, INST_IO, asynFloat64ArrayWfOut, "asynFloat64ArrayOut") +device(waveform, INST_IO, asynFloat64TimeSeries, "asynFloat64TimeSeries") +device(waveform, INST_IO, asynInt64ArrayWfIn, "asynInt64ArrayIn") +device(waveform, INST_IO, asynInt64ArrayWfOut, "asynInt64ArrayOut") +device(waveform, INST_IO, asynInt64TimeSeries, "asynInt64TimeSeries") +recordtype(timestamp) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + prompt("Record Name") + size(61) + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + prompt("Descriptor") + size(41) + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + prompt("Access Security Group") + size(29) + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Event Name") + size(40) + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("epicsMutexId mlok") + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("ELLLIST mlis") + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("ELLLIST bklnk") + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + interest(2) + initial("YES") + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct asgMember *asp") + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct processNotify *ppn") + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct processNotifyRecord *ppnr") + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct scan_element *spvt") + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct typed_rset *rset") + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("unambiguous_dset *dset") + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("void *dpvt") + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct dbRecordType *rdes") + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct lockRecord *lset") + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(1) + extra("epicsUInt8 bkpt") + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + interest(1) + initial("1") + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + initial("INVALID") + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(2) + extra("epicsTimeStamp time") + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + size(40) + } + field(OVAL, DBF_STRING) { + special(SPC_NOMOD) + interest(3) + prompt("Previous Value") + size(40) + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Current Raw Value") + } + field(TST, DBF_MENU) { + promptgroup("40 - Input") + menu(timestampTST) + interest(2) + prompt("Time Stamp Type") + } +} +recordtype(fanout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + asl(ASL0) + pp(TRUE) + prompt("Used to trigger") + } + field(SELM, DBF_MENU) { + promptgroup("30 - Action") + menu(fanoutSELM) + interest(1) + prompt("Select Mechanism") + } + field(SELN, DBF_USHORT) { + initial("1") + interest(1) + prompt("Link Selection") + } + field(SELL, DBF_INLINK) { + promptgroup("30 - Action") + interest(1) + prompt("Link Selection Loc") + } + field(OFFS, DBF_SHORT) { + promptgroup("30 - Action") + initial("0") + interest(1) + prompt("Offset for Specified") + } + field(SHFT, DBF_SHORT) { + promptgroup("30 - Action") + initial("-1") + interest(1) + prompt("Shift for Mask mode") + } + field(LNK0, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 0") + } + field(LNK1, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 1") + } + field(LNK2, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 2") + } + field(LNK3, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 3") + } + field(LNK4, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 4") + } + field(LNK5, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 5") + } + field(LNK6, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 6") + } + field(LNK7, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 7") + } + field(LNK8, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 8") + } + field(LNK9, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 9") + } + field(LNKA, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 10") + } + field(LNKB, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 11") + } + field(LNKC, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 12") + } + field(LNKD, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 13") + } + field(LNKE, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 14") + } + field(LNKF, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 15") + } +} +recordtype(longin) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct longinRecord; + %typedef struct longindset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_longin)(struct longinRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} longindset; + %#define HAS_longindset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_LONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_LONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_LONG) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(ADEL, DBF_LONG) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_LONG) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Input Specifctn") + } + field(SVAL, DBF_LONG) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Mode Location") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Sim mode Alarm Svrty") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(longin, CONSTANT, devLiSoft, "Soft Channel") +device(longin, CONSTANT, devLiSoftCallback, "Async Soft Channel") +device(longin, INST_IO, devLiGeneralTime, "General Time") +device(longin, INST_IO, asynLiInt32, "asynInt32") +device(longin, INST_IO, asynLiUInt32Digital, "asynUInt32Digital") +device(longin, INST_IO, asynLiInt64, "asynInt64") +recordtype(printf) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct printfRecord; + %typedef struct printfdset { + % dset common; + % long (*write_string)(struct printfRecord *prec); + %} printfdset; + %#define HAS_printfdset + % + %/* Number of INPx fields defined */ + %#define PRINTF_NLINKS 10 + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("char *val") + pp(TRUE) + prompt("Result") + } + field(SIZV, DBF_USHORT) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("41") + interest(1) + prompt("Size of VAL buffer") + } + field(LEN, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Length of VAL") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(FMT, DBF_STRING) { + promptgroup("30 - Action") + pp(TRUE) + size(81) + prompt("Format String") + } + field(IVLS, DBF_STRING) { + promptgroup("30 - Action") + initial("LNK") + size(16) + prompt("Invalid Link String") + } + field(INP0, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 0") + } + field(INP1, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 1") + } + field(INP2, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 2") + } + field(INP3, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 3") + } + field(INP4, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 4") + } + field(INP5, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 5") + } + field(INP6, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 6") + } + field(INP7, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 7") + } + field(INP8, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 8") + } + field(INP9, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 9") + } +} +device(printf, CONSTANT, devPrintfSoft, "Soft Channel") +device(printf, CONSTANT, devPrintfSoftCallback, "Async Soft Channel") +device(printf, INST_IO, devPrintfStdio, "stdio") +device(printf, INST_IO, asynPfOctetWrite, "asynOctetWrite") +recordtype(sel) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("40 - Input") + special(SPC_NOMOD) + asl(ASL0) + prompt("Result") + } + field(SELM, DBF_MENU) { + promptgroup("30 - Action") + menu(selSELM) + prompt("Select Mechanism") + } + field(SELN, DBF_USHORT) { + prompt("Index value") + } + field(PREC, DBF_SHORT) { + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(NVL, DBF_INLINK) { + promptgroup("30 - Action") + interest(1) + prompt("Index Value Location") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input F") + } + field(INPG, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input L") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Rng") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(A, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input A") + } + field(B, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input B") + } + field(C, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input C") + } + field(D, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input D") + } + field(E, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input E") + } + field(F, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input F") + } + field(G, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input G") + } + field(H, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input H") + } + field(I, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input I") + } + field(J, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input J") + } + field(K, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input K") + } + field(L, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input L") + } + field(LA, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of A") + } + field(LB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of B") + } + field(LC, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of C") + } + field(LD, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of D") + } + field(LE, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of E") + } + field(LF, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of F") + } + field(LG, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of G") + } + field(LH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of H") + } + field(LI, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of I") + } + field(LJ, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of J") + } + field(LK, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of K") + } + field(LL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of L") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(NLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Index Monitored") + } +} +recordtype(bi) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct biRecord; + %typedef struct bidset { + % dset common; + % long (*read_bi)(struct biRecord *prec); + %} bidset; + %#define HAS_bidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(VAL, DBF_ENUM) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + } + field(ZSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Zero Error Severity") + } + field(OSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("One Error Severity") + } + field(COSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Change of State Svr") + } + field(ZNAM, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(26) + prompt("Zero Name") + } + field(ONAM, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(26) + prompt("One Name") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("prev Raw Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(LALM, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(MLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_ULONG) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuSimm) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(bi, CONSTANT, devBiSoft, "Soft Channel") +device(bi, CONSTANT, devBiSoftRaw, "Raw Soft Channel") +device(bi, CONSTANT, devBiSoftCallback, "Async Soft Channel") +device(bi, INST_IO, devBiDbState, "Db State") +device(bi, INST_IO, asynBiInt32, "asynInt32") +device(bi, INST_IO, asynBiUInt32Digital, "asynUInt32Digital") +recordtype(lso) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct lsoRecord; + %typedef struct lsodset { + % dset common; + % long (*write_string)(struct lsoRecord *prec); + %} lsodset; + %#define HAS_lsodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("char *val") + pp(TRUE) + prompt("Current Value") + } + field(OVAL, DBF_NOACCESS) { + special(SPC_DBADDR) + extra("char *oval") + interest(3) + prompt("Previous Value") + } + field(SIZV, DBF_USHORT) { + promptgroup("50 - Output") + special(SPC_NOMOD) + initial("41") + interest(1) + prompt("Size of buffers") + } + field(LEN, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Length of VAL") + } + field(OLEN, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Length of OVAL") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Link") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID Output Action") + } + field(IVOV, DBF_STRING) { + promptgroup("50 - Output") + interest(2) + size(40) + prompt("INVALID Output Value") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(menuPost) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(menuPost) + interest(1) + prompt("Post Archive Monitors") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(lso, CONSTANT, devLsoSoft, "Soft Channel") +device(lso, CONSTANT, devLsoSoftCallback, "Async Soft Channel") +device(lso, INST_IO, devLsoStdio, "stdio") +device(lso, INST_IO, asynLsoOctetWrite, "asynOctetWrite") +recordtype(subArray) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct subArrayRecord; + %typedef struct sadset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_sa)(struct subArrayRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} sadset; + %#define HAS_sadset + % + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(FTVL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_NOMOD) + menu(menuFtype) + interest(1) + prompt("Field Type of Value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(MALM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Maximum Elements") + } + field(NELM, DBF_ULONG) { + promptgroup("30 - Action") + initial("1") + pp(TRUE) + prompt("Number of Elements") + } + field(INDX, DBF_ULONG) { + promptgroup("30 - Action") + pp(TRUE) + prompt("Substring Index") + } + field(BUSY, DBF_SHORT) { + special(SPC_NOMOD) + prompt("Busy Indicator") + } + field(NORD, DBF_LONG) { + special(SPC_NOMOD) + prompt("Number elements read") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * bptr") + interest(4) + prompt("Buffer Pointer") + } +} +device(subArray, CONSTANT, devSASoft, "Soft Channel") +recordtype(calc) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %#include "postfix.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + prompt("Result") + } + field(CALC, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_CALC) + initial("0") + pp(TRUE) + size(80) + prompt("Calculation") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input F") + } + field(INPG, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input L") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Rng") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(A, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input A") + } + field(B, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input B") + } + field(C, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input C") + } + field(D, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input D") + } + field(E, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input E") + } + field(F, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input F") + } + field(G, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input G") + } + field(H, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input H") + } + field(I, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input I") + } + field(J, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input J") + } + field(K, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input K") + } + field(L, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input L") + } + field(LA, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of A") + } + field(LB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of B") + } + field(LC, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of C") + } + field(LD, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of D") + } + field(LE, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of E") + } + field(LF, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of F") + } + field(LG, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of G") + } + field(LH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of H") + } + field(LI, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of I") + } + field(LJ, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of J") + } + field(LK, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of K") + } + field(LL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of L") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(RPCL, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("char rpcl[INFIX_TO_POSTFIX_SIZE(80)]") + interest(4) + prompt("Reverse Polish Calc") + } +} +recordtype(mbboDirect) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct mbboDirectRecord; + %typedef struct mbbodirectdset { + % dset common; /*init_record returns: (0, 2)=>(success, success no convert)*/ + % long (*write_mbbo)(struct mbboDirectRecord *prec); /*returns: (0, 2)=>(success, success no convert)*/ + %} mbbodirectdset; + %#define HAS_mbbodirectdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Word") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + special(SPC_RESET) + menu(menuOmsl) + interest(1) + pp(TRUE) + prompt("Output Mode Select") + } + field(NOBT, DBF_SHORT) { + promptgroup("50 - Output") + special(SPC_NOMOD) + interest(1) + prompt("Number of Bits") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(RVAL, DBF_ULONG) { + special(SPC_NOMOD) + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Raw Value") + } + field(RBV, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Readback Value") + } + field(ORBV, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Readback Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(MLST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(SHFT, DBF_USHORT) { + promptgroup("50 - Output") + interest(1) + prompt("Shift") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID outpt action") + } + field(IVOV, DBF_LONG) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } + field(B0, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 0") + } + field(B1, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 1") + } + field(B2, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 2") + } + field(B3, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 3") + } + field(B4, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 4") + } + field(B5, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 5") + } + field(B6, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 6") + } + field(B7, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 7") + } + field(B8, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 8") + } + field(B9, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 9") + } + field(BA, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 10") + } + field(BB, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 11") + } + field(BC, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 12") + } + field(BD, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 13") + } + field(BE, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 14") + } + field(BF, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 15") + } + field(B10, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 16") + } + field(B11, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 17") + } + field(B12, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 18") + } + field(B13, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 19") + } + field(B14, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 20") + } + field(B15, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 21") + } + field(B16, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 22") + } + field(B17, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 23") + } + field(B18, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 24") + } + field(B19, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 25") + } + field(B1A, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 26") + } + field(B1B, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 27") + } + field(B1C, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 28") + } + field(B1D, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 29") + } + field(B1E, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 30") + } + field(B1F, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 31") + } +} +device(mbboDirect, CONSTANT, devMbboDirectSoft, "Soft Channel") +device(mbboDirect, CONSTANT, devMbboDirectSoftRaw, "Raw Soft Channel") +device(mbboDirect, CONSTANT, devMbboDirectSoftCallback, "Async Soft Channel") +device(mbboDirect, INST_IO, asynMbboDirectUInt32Digital, "asynUInt32Digital") +recordtype(longout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct longoutRecord; + %typedef struct longoutdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*write_longout)(struct longoutRecord *prec); /*(-1,0)=>(failure,success*/ + %} longoutdset; + %#define HAS_longoutdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Desired Output") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(DRVH, DBF_LONG) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive High Limit") + } + field(DRVL, DBF_LONG) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive Low Limit") + } + field(HOPR, DBF_LONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_LONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_LONG) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_LONG) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_LONG) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Output Specifctn") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Mode Location") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Sim mode Alarm Svrty") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_LONG) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } +} +device(longout, CONSTANT, devLoSoft, "Soft Channel") +device(longout, CONSTANT, devLoSoftCallback, "Async Soft Channel") +device(longout, INST_IO, asynLoInt32, "asynInt32") +device(longout, INST_IO, asynLoUInt32Digital, "asynUInt32Digital") +device(longout, INST_IO, asynLoInt64, "asynInt64") +recordtype(aSub) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %struct aSubRecord; + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + asl(ASL0) + prompt("Subr. return value") + } + field(OVAL, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Old return value") + } + field(INAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_NOMOD) + interest(1) + size(41) + prompt("Initialize Subr. Name") + } + field(LFLG, DBF_MENU) { + promptgroup("30 - Action") + menu(aSubLFLG) + interest(1) + prompt("Subr. Input Enable") + } + field(SUBL, DBF_INLINK) { + promptgroup("30 - Action") + special(SPC_NOMOD) + interest(1) + prompt("Subroutine Name Link") + } + field(SNAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_MOD) + interest(1) + size(41) + prompt("Process Subr. Name") + } + field(ONAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_NOMOD) + interest(3) + size(41) + prompt("Old Subr. Name") + } + field(SADR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("long (*sadr)(struct aSubRecord *)") + interest(2) + prompt("Subroutine Address") + } + field(CADR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void (*cadr)(struct aSubRecord *)") + interest(2) + prompt("Subroutine Cleanup Address") + } + field(BRSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Bad Return Severity") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(EFLG, DBF_MENU) { + promptgroup("50 - Output") + menu(aSubEFLG) + initial("1") + interest(1) + prompt("Output Event Flag") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link F") + } + field(INPG, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link L") + } + field(INPM, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link M") + } + field(INPN, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link N") + } + field(INPO, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link O") + } + field(INPP, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link P") + } + field(INPQ, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link Q") + } + field(INPR, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link R") + } + field(INPS, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link S") + } + field(INPT, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link T") + } + field(INPU, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link U") + } + field(A, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *a") + interest(2) + prompt("Input value A") + } + field(B, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *b") + interest(2) + prompt("Input value B") + } + field(C, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *c") + interest(2) + prompt("Input value C") + } + field(D, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *d") + interest(2) + prompt("Input value D") + } + field(E, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *e") + interest(2) + prompt("Input value E") + } + field(F, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *f") + interest(2) + prompt("Input value F") + } + field(G, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *g") + interest(2) + prompt("Input value G") + } + field(H, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *h") + interest(2) + prompt("Input value H") + } + field(I, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *i") + interest(2) + prompt("Input value I") + } + field(J, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *j") + interest(2) + prompt("Input value J") + } + field(K, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *k") + interest(2) + prompt("Input value K") + } + field(L, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *l") + interest(2) + prompt("Input value L") + } + field(M, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *m") + interest(2) + prompt("Input value M") + } + field(N, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *n") + interest(2) + prompt("Input value N") + } + field(O, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *o") + interest(2) + prompt("Input value O") + } + field(P, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *p") + interest(2) + prompt("Input value P") + } + field(Q, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *q") + interest(2) + prompt("Input value Q") + } + field(R, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *r") + interest(2) + prompt("Input value R") + } + field(S, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *s") + interest(2) + prompt("Input value S") + } + field(T, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *t") + interest(2) + prompt("Input value T") + } + field(U, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *u") + interest(2) + prompt("Input value U") + } + field(FTA, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of A") + } + field(FTB, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of B") + } + field(FTC, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of C") + } + field(FTD, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of D") + } + field(FTE, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of E") + } + field(FTF, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of F") + } + field(FTG, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of G") + } + field(FTH, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of H") + } + field(FTI, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of I") + } + field(FTJ, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of J") + } + field(FTK, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of K") + } + field(FTL, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of L") + } + field(FTM, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of M") + } + field(FTN, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of N") + } + field(FTO, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of O") + } + field(FTP, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of P") + } + field(FTQ, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of Q") + } + field(FTR, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of R") + } + field(FTS, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of S") + } + field(FTT, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of T") + } + field(FTU, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of U") + } + field(NOA, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in A") + } + field(NOB, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in B") + } + field(NOC, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in C") + } + field(NOD, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in D") + } + field(NOE, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in E") + } + field(NOF, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in F") + } + field(NOG, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in G") + } + field(NOH, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in H") + } + field(NOI, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in I") + } + field(NOJ, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in J") + } + field(NOK, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in K") + } + field(NOL, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in L") + } + field(NOM, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in M") + } + field(NON, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in N") + } + field(NOO, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in O") + } + field(NOP, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in P") + } + field(NOQ, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in Q") + } + field(NOR, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in R") + } + field(NOS, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in S") + } + field(NOT, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in T") + } + field(NOU, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in U") + } + field(NEA, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in A") + } + field(NEB, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in B") + } + field(NEC, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in C") + } + field(NED, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in D") + } + field(NEE, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in E") + } + field(NEF, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in F") + } + field(NEG, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in G") + } + field(NEH, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in H") + } + field(NEI, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in I") + } + field(NEJ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in J") + } + field(NEK, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in K") + } + field(NEL, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in L") + } + field(NEM, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in M") + } + field(NEN, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in N") + } + field(NEO, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in O") + } + field(NEP, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in P") + } + field(NEQ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in Q") + } + field(NER, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in R") + } + field(NES, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in S") + } + field(NET, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in T") + } + field(NEU, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in U") + } + field(OUTA, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link A") + } + field(OUTB, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link B") + } + field(OUTC, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link C") + } + field(OUTD, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link D") + } + field(OUTE, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link E") + } + field(OUTF, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link F") + } + field(OUTG, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link G") + } + field(OUTH, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link H") + } + field(OUTI, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link I") + } + field(OUTJ, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link J") + } + field(OUTK, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link K") + } + field(OUTL, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link L") + } + field(OUTM, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link M") + } + field(OUTN, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link N") + } + field(OUTO, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link O") + } + field(OUTP, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link P") + } + field(OUTQ, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link Q") + } + field(OUTR, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link R") + } + field(OUTS, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link S") + } + field(OUTT, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link T") + } + field(OUTU, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link U") + } + field(VALA, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vala") + interest(2) + prompt("Output value A") + } + field(VALB, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valb") + interest(2) + prompt("Output value B") + } + field(VALC, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valc") + interest(2) + prompt("Output value C") + } + field(VALD, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vald") + interest(2) + prompt("Output value D") + } + field(VALE, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vale") + interest(2) + prompt("Output value E") + } + field(VALF, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valf") + interest(2) + prompt("Output value F") + } + field(VALG, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valg") + interest(2) + prompt("Output value G") + } + field(VALH, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valh") + interest(2) + prompt("Output value H") + } + field(VALI, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vali") + interest(2) + prompt("Output value I") + } + field(VALJ, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valj") + interest(2) + prompt("Output value J") + } + field(VALK, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valk") + interest(2) + prompt("Output value K") + } + field(VALL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vall") + interest(2) + prompt("Output value L") + } + field(VALM, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valm") + interest(2) + prompt("Output value M") + } + field(VALN, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valn") + interest(2) + prompt("Output value N") + } + field(VALO, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valo") + interest(2) + prompt("Output value O") + } + field(VALP, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valp") + interest(2) + prompt("Output value P") + } + field(VALQ, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valq") + interest(2) + prompt("Output value Q") + } + field(VALR, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valr") + interest(2) + prompt("Output value R") + } + field(VALS, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vals") + interest(2) + prompt("Output value S") + } + field(VALT, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valt") + interest(2) + prompt("Output value T") + } + field(VALU, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valu") + interest(2) + prompt("Output value U") + } + field(OVLA, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovla") + interest(4) + prompt("Old Output A") + } + field(OVLB, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlb") + interest(4) + prompt("Old Output B") + } + field(OVLC, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlc") + interest(4) + prompt("Old Output C") + } + field(OVLD, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovld") + interest(4) + prompt("Old Output D") + } + field(OVLE, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovle") + interest(4) + prompt("Old Output E") + } + field(OVLF, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlf") + interest(4) + prompt("Old Output F") + } + field(OVLG, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlg") + interest(4) + prompt("Old Output G") + } + field(OVLH, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlh") + interest(4) + prompt("Old Output H") + } + field(OVLI, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovli") + interest(4) + prompt("Old Output I") + } + field(OVLJ, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlj") + interest(4) + prompt("Old Output J") + } + field(OVLK, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlk") + interest(4) + prompt("Old Output K") + } + field(OVLL, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovll") + interest(4) + prompt("Old Output L") + } + field(OVLM, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlm") + interest(4) + prompt("Old Output M") + } + field(OVLN, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovln") + interest(4) + prompt("Old Output N") + } + field(OVLO, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlo") + interest(4) + prompt("Old Output O") + } + field(OVLP, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlp") + interest(4) + prompt("Old Output P") + } + field(OVLQ, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlq") + interest(4) + prompt("Old Output Q") + } + field(OVLR, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlr") + interest(4) + prompt("Old Output R") + } + field(OVLS, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovls") + interest(4) + prompt("Old Output S") + } + field(OVLT, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlt") + interest(4) + prompt("Old Output T") + } + field(OVLU, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlu") + interest(4) + prompt("Old Output U") + } + field(FTVA, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALA") + } + field(FTVB, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALB") + } + field(FTVC, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALC") + } + field(FTVD, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALD") + } + field(FTVE, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALE") + } + field(FTVF, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALF") + } + field(FTVG, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALG") + } + field(FTVH, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALH") + } + field(FTVI, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALI") + } + field(FTVJ, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALJ") + } + field(FTVK, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALK") + } + field(FTVL, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALL") + } + field(FTVM, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALM") + } + field(FTVN, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALN") + } + field(FTVO, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALO") + } + field(FTVP, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALP") + } + field(FTVQ, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALQ") + } + field(FTVR, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALR") + } + field(FTVS, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALS") + } + field(FTVT, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALT") + } + field(FTVU, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALU") + } + field(NOVA, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALA") + } + field(NOVB, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALB") + } + field(NOVC, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALC") + } + field(NOVD, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALD") + } + field(NOVE, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALE") + } + field(NOVF, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALF") + } + field(NOVG, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALG") + } + field(NOVH, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VAlH") + } + field(NOVI, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALI") + } + field(NOVJ, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALJ") + } + field(NOVK, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALK") + } + field(NOVL, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALL") + } + field(NOVM, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALM") + } + field(NOVN, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALN") + } + field(NOVO, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALO") + } + field(NOVP, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALP") + } + field(NOVQ, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALQ") + } + field(NOVR, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALR") + } + field(NOVS, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALS") + } + field(NOVT, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALT") + } + field(NOVU, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALU") + } + field(NEVA, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALA") + } + field(NEVB, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALB") + } + field(NEVC, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALC") + } + field(NEVD, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALD") + } + field(NEVE, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALE") + } + field(NEVF, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALF") + } + field(NEVG, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALG") + } + field(NEVH, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VAlH") + } + field(NEVI, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALI") + } + field(NEVJ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALJ") + } + field(NEVK, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALK") + } + field(NEVL, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALL") + } + field(NEVM, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALM") + } + field(NEVN, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALN") + } + field(NEVO, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALO") + } + field(NEVP, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALP") + } + field(NEVQ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALQ") + } + field(NEVR, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALR") + } + field(NEVS, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALS") + } + field(NEVT, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALT") + } + field(NEVU, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALU") + } + field(ONVA, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLA") + } + field(ONVB, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLB") + } + field(ONVC, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLC") + } + field(ONVD, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLD") + } + field(ONVE, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLE") + } + field(ONVF, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLF") + } + field(ONVG, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLG") + } + field(ONVH, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in VAlH") + } + field(ONVI, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLI") + } + field(ONVJ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLJ") + } + field(ONVK, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLK") + } + field(ONVL, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLL") + } + field(ONVM, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLM") + } + field(ONVN, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLN") + } + field(ONVO, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLO") + } + field(ONVP, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLP") + } + field(ONVQ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLQ") + } + field(ONVR, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLR") + } + field(ONVS, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLS") + } + field(ONVT, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLT") + } + field(ONVU, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLU") + } +} +recordtype(sub) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %struct subRecord; + %typedef long (*SUBFUNCPTR)(struct subRecord *); + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + asl(ASL0) + pp(TRUE) + prompt("Result") + } + field(INAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_NOMOD) + interest(1) + size(40) + prompt("Init Routine Name") + } + field(SNAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_MOD) + interest(1) + size(40) + prompt("Subroutine Name") + } + field(SADR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("SUBFUNCPTR sadr") + interest(4) + prompt("Subroutine Address") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input F") + } + field(INPG, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input L") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(BRSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Bad Return Severity") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(A, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input A") + } + field(B, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input B") + } + field(C, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input C") + } + field(D, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input D") + } + field(E, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input E") + } + field(F, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input F") + } + field(G, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input G") + } + field(H, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input H") + } + field(I, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input I") + } + field(J, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input J") + } + field(K, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input K") + } + field(L, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input L") + } + field(LA, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of A") + } + field(LB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of B") + } + field(LC, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of C") + } + field(LD, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of D") + } + field(LE, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of E") + } + field(LF, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of F") + } + field(LG, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of G") + } + field(LH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of H") + } + field(LI, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of I") + } + field(LJ, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of J") + } + field(LK, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of K") + } + field(LL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of L") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } +} +recordtype(int64in) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct int64inRecord; + %typedef struct int64indset { + % dset common; + % long (*read_int64in)(struct int64inRecord *prec); + %} int64indset; + %#define HAS_int64indset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_INT64) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Units name") + } + field(HOPR, DBF_INT64) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_INT64) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_INT64) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(ADEL, DBF_INT64) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_INT64) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_INT64) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(int64in, CONSTANT, devI64inSoft, "Soft Channel") +device(int64in, CONSTANT, devI64inSoftCallback, "Async Soft Channel") +device(int64in, INST_IO, asynInt64In, "asynInt64") +recordtype(ai) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct aiRecord; + %typedef struct aidset { + % dset common; + % long (*read_ai)(struct aiRecord *prec); + % long (*special_linconv)(struct aiRecord *prec, int after); + %} aidset; + %#define HAS_aidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current EGU Value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(LINR, DBF_MENU) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + menu(menuConvert) + interest(1) + pp(TRUE) + prompt("Linearization") + } + field(EGUF, DBF_DOUBLE) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + interest(1) + pp(TRUE) + prompt("Engineer Units Full") + } + field(EGUL, DBF_DOUBLE) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + interest(1) + pp(TRUE) + prompt("Engineer Units Low") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(AOFF, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(1) + pp(TRUE) + prompt("Adjustment Offset") + } + field(ASLO, DBF_DOUBLE) { + promptgroup("60 - Convert") + initial("1") + interest(1) + pp(TRUE) + prompt("Adjustment Slope") + } + field(SMOO, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(1) + prompt("Smoothing") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(ESLO, DBF_DOUBLE) { + promptgroup("60 - Convert") + initial("1") + interest(2) + pp(TRUE) + prompt("Raw to EGU Slope") + } + field(EOFF, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(2) + pp(TRUE) + prompt("Raw to EGU Offset") + } + field(ROFF, DBF_ULONG) { + interest(2) + pp(TRUE) + prompt("Raw Offset") + } + field(PBRK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * pbrk") + interest(4) + prompt("Ptrto brkTable") + } + field(INIT, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Initialized?") + } + field(LBRK, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("LastBreak Point") + } + field(RVAL, DBF_LONG) { + pp(TRUE) + prompt("Current Raw Value") + } + field(ORAW, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Previous Raw Value") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_DOUBLE) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuSimm) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(ai, CONSTANT, devAiSoft, "Soft Channel") +device(ai, CONSTANT, devAiSoftRaw, "Raw Soft Channel") +device(ai, CONSTANT, devAiSoftCallback, "Async Soft Channel") +device(ai, INST_IO, devTimestampAI, "Soft Timestamp") +device(ai, INST_IO, devAiGeneralTime, "General Time") +device(ai, INST_IO, devAiStats, "IOC stats") +device(ai, INST_IO, devAiClusts, "IOC stats clusts") +device(ai, CONSTANT, devAiDBCLC, "DBCLC") +device(ai, CONSTANT, devAiDBDLC, "DBDLC") +device(ai, INST_IO, devSysMonAiStats, "sysmon") +device(ai, INST_IO, asynAiInt32, "asynInt32") +device(ai, INST_IO, asynAiInt32Average, "asynInt32Average") +device(ai, INST_IO, asynAiFloat64, "asynFloat64") +device(ai, INST_IO, asynAiFloat64Average, "asynFloat64Average") +device(ai, INST_IO, asynAiInt64, "asynInt64") +recordtype(stringin) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct stringinRecord; + %typedef struct stringindset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_stringin)(struct stringinRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} stringindset; + %#define HAS_stringindset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + size(40) + prompt("Current Value") + } + field(OVAL, DBF_STRING) { + special(SPC_NOMOD) + interest(3) + size(40) + prompt("Previous Value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(stringinPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(stringinPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_STRING) { + pp(TRUE) + size(40) + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(stringin, CONSTANT, devSiSoft, "Soft Channel") +device(stringin, CONSTANT, devSiSoftCallback, "Async Soft Channel") +device(stringin, INST_IO, devTimestampSI, "Soft Timestamp") +device(stringin, INST_IO, devSiGeneralTime, "General Time") +device(stringin, INST_IO, devSiEnviron, "getenv") +device(stringin, INST_IO, devStringinStats, "IOC stats") +device(stringin, INST_IO, devStringinEnvVar, "IOC env var") +device(stringin, INST_IO, devStringinEpics, "IOC epics var") +device(stringin, INST_IO, devSysMonSiStats, "sysmon") +device(stringin, INST_IO, asynSiOctetCmdResponse, "asynOctetCmdResponse") +device(stringin, INST_IO, asynSiOctetWriteRead, "asynOctetWriteRead") +device(stringin, INST_IO, asynSiOctetRead, "asynOctetRead") +driver(drvAsyn) +link(state, lnkStateIf) +link(calc, lnkCalcIf) +link(trace, lnkTraceIf) +link(debug, lnkDebugIf) +link(const, lnkConstIf) +registrar(drvAsynSerialPortRegisterCommands) +registrar(drvCodacHeaderRegister) +registrar(tsInitialize) +registrar(syncInitialize) +registrar(dbrestoreRegister) +registrar(iocSetLogLevelRegister) +registrar(save_restoreRegister) +registrar(asynRegister) +registrar(decInitialize) +registrar(iocSetSimEnableRegister) +registrar(drvCodacRedundantPlcRegister) +registrar(asynInterposeFlushRegister) +registrar(drvAsynIPPortRegisterCommands) +registrar(drvBlockTCPRegister) +registrar(asynInterposeEchoRegister) +registrar(arrInitialize) +registrar(asInitHooksRegister) +registrar(drvBlockTCPEventRegister) +registrar(asynInterposeDelayRegister) +registrar(dbndInitialize) +registrar(drvBlockTCPRedundantPlcRegister) +registrar(iocSetLogSyslogRegister) +registrar(drvAsynIPServerPortRegisterCommands) +registrar(configMenuRegistrar) +registrar(asSub) +registrar(iocSetLogStdoutRegister) +registrar(asynInterposeEosRegister) +registrar(rsrvRegistrar) +registrar(iocSetLogInitRegister) +function(scanMon) +function(rebootProc) +function(scanMonInit) +variable(dbTemplateMaxVars, int) +variable(lnkDebug_debug, int) +variable(asCaDebug, int) +variable(callbackParallelThreadsDefault, int) +variable(save_restoreRemountThreshold, int) +variable(dbAccessDebugPUTF, int) +variable(dbRecordsOnceOnly, int) +variable(save_restoreDebug, int) +variable(save_restoreDatedBackupFiles, int) +variable(calcoutODLYlimit, double) +variable(configMenuDebug, int) +variable(save_restoreIncompleteSetsOk, int) +variable(dbBptNotMonotonic, int) +variable(atExitDebug, int) +variable(boHIGHlimit, double) +variable(dbJLinkDebug, int) +variable(dbConvertStrict, int) +variable(seqDLYprecision, int) +variable(logClientDebug, int) +variable(dbQuietMacroWarnings, int) +variable(save_restoreNumSeqFiles, int) +variable(boHIGHprecision, int) +variable(dbRecordsAbcSorted, int) +variable(seqDLYlimit, double) +variable(calcoutODLYprecision, int) +variable(histogramSDELprecision, int) +variable(dbThreadRealtimeLock, int) +variable(CASDEBUG, int) +variable(save_restoreSeqPeriodInSeconds, int) diff --git a/EC-GN-JA-PCF/target/main/epics/CUBApp/src/O.linux-x86_64/CUB b/EC-GN-JA-PCF/target/main/epics/CUBApp/src/O.linux-x86_64/CUB new file mode 100755 index 0000000000000000000000000000000000000000..72c1b690e6e09c1d42c7c0778973726c04700320 GIT binary patch literal 61720 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 +#ifndef USE_TYPED_RSET +# define USE_TYPED_RSET +#endif +#include "compilerDependencies.h" +#include "epicsStdlib.h" +#include "iocsh.h" +#include "iocshRegisterCommon.h" +#include "registryCommon.h" +#include "recSup.h" + +extern "C" { + +epicsShareExtern typed_rset *pvar_rset_aSubRSET, *pvar_rset_aaiRSET, + *pvar_rset_aaoRSET, *pvar_rset_aiRSET, *pvar_rset_aoRSET, + *pvar_rset_asynRSET, *pvar_rset_biRSET, *pvar_rset_boRSET, + *pvar_rset_calcRSET, *pvar_rset_calcoutRSET, *pvar_rset_compressRSET, + *pvar_rset_dfanoutRSET, *pvar_rset_epidRSET, *pvar_rset_eventRSET, + *pvar_rset_fanoutRSET, *pvar_rset_histogramRSET, + *pvar_rset_int64inRSET, *pvar_rset_int64outRSET, + *pvar_rset_longinRSET, *pvar_rset_longoutRSET, *pvar_rset_lsiRSET, + *pvar_rset_lsoRSET, *pvar_rset_mbbiRSET, *pvar_rset_mbbiDirectRSET, + *pvar_rset_mbboRSET, *pvar_rset_mbboDirectRSET, + *pvar_rset_permissiveRSET, *pvar_rset_printfRSET, *pvar_rset_selRSET, + *pvar_rset_seqRSET, *pvar_rset_stateRSET, *pvar_rset_stringinRSET, + *pvar_rset_stringoutRSET, *pvar_rset_subRSET, *pvar_rset_subArrayRSET, + *pvar_rset_timestampRSET, *pvar_rset_waveformRSET; + +typedef int (*rso_func)(dbRecordType *pdbRecordType); +epicsShareExtern rso_func pvar_func_aSubRecordSizeOffset, + pvar_func_aaiRecordSizeOffset, pvar_func_aaoRecordSizeOffset, + pvar_func_aiRecordSizeOffset, pvar_func_aoRecordSizeOffset, + pvar_func_asynRecordSizeOffset, pvar_func_biRecordSizeOffset, + pvar_func_boRecordSizeOffset, pvar_func_calcRecordSizeOffset, + pvar_func_calcoutRecordSizeOffset, pvar_func_compressRecordSizeOffset, + pvar_func_dfanoutRecordSizeOffset, pvar_func_epidRecordSizeOffset, + pvar_func_eventRecordSizeOffset, pvar_func_fanoutRecordSizeOffset, + pvar_func_histogramRecordSizeOffset, + pvar_func_int64inRecordSizeOffset, pvar_func_int64outRecordSizeOffset, + pvar_func_longinRecordSizeOffset, pvar_func_longoutRecordSizeOffset, + pvar_func_lsiRecordSizeOffset, pvar_func_lsoRecordSizeOffset, + pvar_func_mbbiRecordSizeOffset, pvar_func_mbbiDirectRecordSizeOffset, + pvar_func_mbboRecordSizeOffset, pvar_func_mbboDirectRecordSizeOffset, + pvar_func_permissiveRecordSizeOffset, + pvar_func_printfRecordSizeOffset, pvar_func_selRecordSizeOffset, + pvar_func_seqRecordSizeOffset, pvar_func_stateRecordSizeOffset, + pvar_func_stringinRecordSizeOffset, + pvar_func_stringoutRecordSizeOffset, pvar_func_subRecordSizeOffset, + pvar_func_subArrayRecordSizeOffset, + pvar_func_timestampRecordSizeOffset, + pvar_func_waveformRecordSizeOffset; + +static const char * const recordTypeNames[] = { + "aSub", "aai", "aao", "ai", "ao", "asyn", "bi", "bo", "calc", + "calcout", "compress", "dfanout", "epid", "event", "fanout", + "histogram", "int64in", "int64out", "longin", "longout", "lsi", "lso", + "mbbi", "mbbiDirect", "mbbo", "mbboDirect", "permissive", "printf", + "sel", "seq", "state", "stringin", "stringout", "sub", "subArray", + "timestamp", "waveform" +}; + +static const recordTypeLocation rtl[] = { + {(struct typed_rset *)pvar_rset_aSubRSET, pvar_func_aSubRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_aaiRSET, pvar_func_aaiRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_aaoRSET, pvar_func_aaoRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_aiRSET, pvar_func_aiRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_aoRSET, pvar_func_aoRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_asynRSET, pvar_func_asynRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_biRSET, pvar_func_biRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_boRSET, pvar_func_boRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_calcRSET, pvar_func_calcRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_calcoutRSET, pvar_func_calcoutRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_compressRSET, pvar_func_compressRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_dfanoutRSET, pvar_func_dfanoutRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_epidRSET, pvar_func_epidRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_eventRSET, pvar_func_eventRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_fanoutRSET, pvar_func_fanoutRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_histogramRSET, pvar_func_histogramRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_int64inRSET, pvar_func_int64inRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_int64outRSET, pvar_func_int64outRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_longinRSET, pvar_func_longinRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_longoutRSET, pvar_func_longoutRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_lsiRSET, pvar_func_lsiRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_lsoRSET, pvar_func_lsoRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_mbbiRSET, pvar_func_mbbiRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_mbbiDirectRSET, pvar_func_mbbiDirectRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_mbboRSET, pvar_func_mbboRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_mbboDirectRSET, pvar_func_mbboDirectRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_permissiveRSET, pvar_func_permissiveRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_printfRSET, pvar_func_printfRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_selRSET, pvar_func_selRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_seqRSET, pvar_func_seqRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_stateRSET, pvar_func_stateRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_stringinRSET, pvar_func_stringinRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_stringoutRSET, pvar_func_stringoutRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_subRSET, pvar_func_subRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_subArrayRSET, pvar_func_subArrayRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_timestampRSET, pvar_func_timestampRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_waveformRSET, pvar_func_waveformRecordSizeOffset} +}; + +epicsShareExtern dset *pvar_dset_devAaiSoft, *pvar_dset_devAaoSoft, + *pvar_dset_devAiSoft, *pvar_dset_devAiSoftRaw, + *pvar_dset_devAiSoftCallback, *pvar_dset_devTimestampAI, + *pvar_dset_devAiGeneralTime, *pvar_dset_devAiStats, + *pvar_dset_devAiClusts, *pvar_dset_devAiDBCLC, *pvar_dset_devAiDBDLC, + *pvar_dset_devSysMonAiStats, *pvar_dset_asynAiInt32, + *pvar_dset_asynAiInt32Average, *pvar_dset_asynAiFloat64, + *pvar_dset_asynAiFloat64Average, *pvar_dset_asynAiInt64, + *pvar_dset_devAoSoft, *pvar_dset_devAoSoftRaw, + *pvar_dset_devAoSoftCallback, *pvar_dset_devAoStats, + *pvar_dset_asynAoInt32, *pvar_dset_asynAoFloat64, + *pvar_dset_asynAoInt64, *pvar_dset_asynRecordDevice, + *pvar_dset_devBiSoft, *pvar_dset_devBiSoftRaw, + *pvar_dset_devBiSoftCallback, *pvar_dset_devBiDbState, + *pvar_dset_asynBiInt32, *pvar_dset_asynBiUInt32Digital, + *pvar_dset_devBoSoft, *pvar_dset_devBoSoftRaw, + *pvar_dset_devBoSoftCallback, *pvar_dset_devBoGeneralTime, + *pvar_dset_devBoDbState, *pvar_dset_devBoSimulation, + *pvar_dset_asynBoInt32, *pvar_dset_asynBoUInt32Digital, + *pvar_dset_devCalcoutSoft, *pvar_dset_devCalcoutSoftCallback, + *pvar_dset_devEpidSoft, *pvar_dset_devEpidSoftCB, + *pvar_dset_devEventSoft, *pvar_dset_devHistogramSoft, + *pvar_dset_devI64inSoft, *pvar_dset_devI64inSoftCallback, + *pvar_dset_asynInt64In, *pvar_dset_devI64outSoft, + *pvar_dset_devI64outSoftCallback, *pvar_dset_asynInt64Out, + *pvar_dset_devLiSoft, *pvar_dset_devLiSoftCallback, + *pvar_dset_devLiGeneralTime, *pvar_dset_asynLiInt32, + *pvar_dset_asynLiUInt32Digital, *pvar_dset_asynLiInt64, + *pvar_dset_devLoSoft, *pvar_dset_devLoSoftCallback, + *pvar_dset_asynLoInt32, *pvar_dset_asynLoUInt32Digital, + *pvar_dset_asynLoInt64, *pvar_dset_devLsiSoft, + *pvar_dset_devLsiEnviron, *pvar_dset_devLsiStats, + *pvar_dset_asynLsiOctetCmdResponse, *pvar_dset_asynLsiOctetWriteRead, + *pvar_dset_asynLsiOctetRead, *pvar_dset_devLsoSoft, + *pvar_dset_devLsoSoftCallback, *pvar_dset_devLsoStdio, + *pvar_dset_asynLsoOctetWrite, *pvar_dset_devMbbiSoft, + *pvar_dset_devMbbiSoftRaw, *pvar_dset_devMbbiSoftCallback, + *pvar_dset_devSysMonMbbiStats, *pvar_dset_asynMbbiInt32, + *pvar_dset_asynMbbiUInt32Digital, *pvar_dset_devMbbiDirectSoft, + *pvar_dset_devMbbiDirectSoftRaw, *pvar_dset_devMbbiDirectSoftCallback, + *pvar_dset_devSysMonMbbiDirectStats, + *pvar_dset_asynMbbiDirectUInt32Digital, *pvar_dset_devMbboSoft, + *pvar_dset_devMbboSoftRaw, *pvar_dset_devMbboSoftCallback, + *pvar_dset_asynMbboInt32, *pvar_dset_asynMbboUInt32Digital, + *pvar_dset_devMbboDirectSoft, *pvar_dset_devMbboDirectSoftRaw, + *pvar_dset_devMbboDirectSoftCallback, + *pvar_dset_asynMbboDirectUInt32Digital, *pvar_dset_devPrintfSoft, + *pvar_dset_devPrintfSoftCallback, *pvar_dset_devPrintfStdio, + *pvar_dset_asynPfOctetWrite, *pvar_dset_devSiSoft, + *pvar_dset_devSiSoftCallback, *pvar_dset_devTimestampSI, + *pvar_dset_devSiGeneralTime, *pvar_dset_devSiEnviron, + *pvar_dset_devStringinStats, *pvar_dset_devStringinEnvVar, + *pvar_dset_devStringinEpics, *pvar_dset_devSysMonSiStats, + *pvar_dset_asynSiOctetCmdResponse, *pvar_dset_asynSiOctetWriteRead, + *pvar_dset_asynSiOctetRead, *pvar_dset_devSoSoft, + *pvar_dset_devSoSoftCallback, *pvar_dset_devSoStdio, + *pvar_dset_asynSoOctetWrite, *pvar_dset_devSASoft, + *pvar_dset_devWfSoft, *pvar_dset_devWaveformStats, + *pvar_dset_devSysMonWaveStats, *pvar_dset_asynWfOctetCmdResponse, + *pvar_dset_asynWfOctetWriteRead, *pvar_dset_asynWfOctetRead, + *pvar_dset_asynWfOctetWrite, *pvar_dset_asynWfOctetWriteBinary, + *pvar_dset_asynInt8ArrayWfIn, *pvar_dset_asynInt8ArrayWfOut, + *pvar_dset_asynInt16ArrayWfIn, *pvar_dset_asynInt16ArrayWfOut, + *pvar_dset_asynInt32ArrayWfIn, *pvar_dset_asynInt32ArrayWfOut, + *pvar_dset_asynInt32TimeSeries, *pvar_dset_asynFloat32ArrayWfIn, + *pvar_dset_asynFloat32ArrayWfOut, *pvar_dset_asynFloat64ArrayWfIn, + *pvar_dset_asynFloat64ArrayWfOut, *pvar_dset_asynFloat64TimeSeries, + *pvar_dset_asynInt64ArrayWfIn, *pvar_dset_asynInt64ArrayWfOut, + *pvar_dset_asynInt64TimeSeries; + +static const char * const deviceSupportNames[] = { + "devAaiSoft", "devAaoSoft", "devAiSoft", "devAiSoftRaw", + "devAiSoftCallback", "devTimestampAI", "devAiGeneralTime", + "devAiStats", "devAiClusts", "devAiDBCLC", "devAiDBDLC", + "devSysMonAiStats", "asynAiInt32", "asynAiInt32Average", + "asynAiFloat64", "asynAiFloat64Average", "asynAiInt64", "devAoSoft", + "devAoSoftRaw", "devAoSoftCallback", "devAoStats", "asynAoInt32", + "asynAoFloat64", "asynAoInt64", "asynRecordDevice", "devBiSoft", + "devBiSoftRaw", "devBiSoftCallback", "devBiDbState", "asynBiInt32", + "asynBiUInt32Digital", "devBoSoft", "devBoSoftRaw", + "devBoSoftCallback", "devBoGeneralTime", "devBoDbState", + "devBoSimulation", "asynBoInt32", "asynBoUInt32Digital", + "devCalcoutSoft", "devCalcoutSoftCallback", "devEpidSoft", + "devEpidSoftCB", "devEventSoft", "devHistogramSoft", "devI64inSoft", + "devI64inSoftCallback", "asynInt64In", "devI64outSoft", + "devI64outSoftCallback", "asynInt64Out", "devLiSoft", + "devLiSoftCallback", "devLiGeneralTime", "asynLiInt32", + "asynLiUInt32Digital", "asynLiInt64", "devLoSoft", + "devLoSoftCallback", "asynLoInt32", "asynLoUInt32Digital", + "asynLoInt64", "devLsiSoft", "devLsiEnviron", "devLsiStats", + "asynLsiOctetCmdResponse", "asynLsiOctetWriteRead", + "asynLsiOctetRead", "devLsoSoft", "devLsoSoftCallback", "devLsoStdio", + "asynLsoOctetWrite", "devMbbiSoft", "devMbbiSoftRaw", + "devMbbiSoftCallback", "devSysMonMbbiStats", "asynMbbiInt32", + "asynMbbiUInt32Digital", "devMbbiDirectSoft", "devMbbiDirectSoftRaw", + "devMbbiDirectSoftCallback", "devSysMonMbbiDirectStats", + "asynMbbiDirectUInt32Digital", "devMbboSoft", "devMbboSoftRaw", + "devMbboSoftCallback", "asynMbboInt32", "asynMbboUInt32Digital", + "devMbboDirectSoft", "devMbboDirectSoftRaw", + "devMbboDirectSoftCallback", "asynMbboDirectUInt32Digital", + "devPrintfSoft", "devPrintfSoftCallback", "devPrintfStdio", + "asynPfOctetWrite", "devSiSoft", "devSiSoftCallback", + "devTimestampSI", "devSiGeneralTime", "devSiEnviron", + "devStringinStats", "devStringinEnvVar", "devStringinEpics", + "devSysMonSiStats", "asynSiOctetCmdResponse", "asynSiOctetWriteRead", + "asynSiOctetRead", "devSoSoft", "devSoSoftCallback", "devSoStdio", + "asynSoOctetWrite", "devSASoft", "devWfSoft", "devWaveformStats", + "devSysMonWaveStats", "asynWfOctetCmdResponse", + "asynWfOctetWriteRead", "asynWfOctetRead", "asynWfOctetWrite", + "asynWfOctetWriteBinary", "asynInt8ArrayWfIn", "asynInt8ArrayWfOut", + "asynInt16ArrayWfIn", "asynInt16ArrayWfOut", "asynInt32ArrayWfIn", + "asynInt32ArrayWfOut", "asynInt32TimeSeries", "asynFloat32ArrayWfIn", + "asynFloat32ArrayWfOut", "asynFloat64ArrayWfIn", + "asynFloat64ArrayWfOut", "asynFloat64TimeSeries", + "asynInt64ArrayWfIn", "asynInt64ArrayWfOut", "asynInt64TimeSeries" +}; + +static const dset * const devsl[] = { + pvar_dset_devAaiSoft, pvar_dset_devAaoSoft, pvar_dset_devAiSoft, + pvar_dset_devAiSoftRaw, pvar_dset_devAiSoftCallback, + pvar_dset_devTimestampAI, pvar_dset_devAiGeneralTime, + pvar_dset_devAiStats, pvar_dset_devAiClusts, pvar_dset_devAiDBCLC, + pvar_dset_devAiDBDLC, pvar_dset_devSysMonAiStats, + pvar_dset_asynAiInt32, pvar_dset_asynAiInt32Average, + pvar_dset_asynAiFloat64, pvar_dset_asynAiFloat64Average, + pvar_dset_asynAiInt64, pvar_dset_devAoSoft, pvar_dset_devAoSoftRaw, + pvar_dset_devAoSoftCallback, pvar_dset_devAoStats, + pvar_dset_asynAoInt32, pvar_dset_asynAoFloat64, pvar_dset_asynAoInt64, + pvar_dset_asynRecordDevice, pvar_dset_devBiSoft, + pvar_dset_devBiSoftRaw, pvar_dset_devBiSoftCallback, + pvar_dset_devBiDbState, pvar_dset_asynBiInt32, + pvar_dset_asynBiUInt32Digital, pvar_dset_devBoSoft, + pvar_dset_devBoSoftRaw, pvar_dset_devBoSoftCallback, + pvar_dset_devBoGeneralTime, pvar_dset_devBoDbState, + pvar_dset_devBoSimulation, pvar_dset_asynBoInt32, + pvar_dset_asynBoUInt32Digital, pvar_dset_devCalcoutSoft, + pvar_dset_devCalcoutSoftCallback, pvar_dset_devEpidSoft, + pvar_dset_devEpidSoftCB, pvar_dset_devEventSoft, + pvar_dset_devHistogramSoft, pvar_dset_devI64inSoft, + pvar_dset_devI64inSoftCallback, pvar_dset_asynInt64In, + pvar_dset_devI64outSoft, pvar_dset_devI64outSoftCallback, + pvar_dset_asynInt64Out, pvar_dset_devLiSoft, + pvar_dset_devLiSoftCallback, pvar_dset_devLiGeneralTime, + pvar_dset_asynLiInt32, pvar_dset_asynLiUInt32Digital, + pvar_dset_asynLiInt64, pvar_dset_devLoSoft, + pvar_dset_devLoSoftCallback, pvar_dset_asynLoInt32, + pvar_dset_asynLoUInt32Digital, pvar_dset_asynLoInt64, + pvar_dset_devLsiSoft, pvar_dset_devLsiEnviron, pvar_dset_devLsiStats, + pvar_dset_asynLsiOctetCmdResponse, pvar_dset_asynLsiOctetWriteRead, + pvar_dset_asynLsiOctetRead, pvar_dset_devLsoSoft, + pvar_dset_devLsoSoftCallback, pvar_dset_devLsoStdio, + pvar_dset_asynLsoOctetWrite, pvar_dset_devMbbiSoft, + pvar_dset_devMbbiSoftRaw, pvar_dset_devMbbiSoftCallback, + pvar_dset_devSysMonMbbiStats, pvar_dset_asynMbbiInt32, + pvar_dset_asynMbbiUInt32Digital, pvar_dset_devMbbiDirectSoft, + pvar_dset_devMbbiDirectSoftRaw, pvar_dset_devMbbiDirectSoftCallback, + pvar_dset_devSysMonMbbiDirectStats, + pvar_dset_asynMbbiDirectUInt32Digital, pvar_dset_devMbboSoft, + pvar_dset_devMbboSoftRaw, pvar_dset_devMbboSoftCallback, + pvar_dset_asynMbboInt32, pvar_dset_asynMbboUInt32Digital, + pvar_dset_devMbboDirectSoft, pvar_dset_devMbboDirectSoftRaw, + pvar_dset_devMbboDirectSoftCallback, + pvar_dset_asynMbboDirectUInt32Digital, pvar_dset_devPrintfSoft, + pvar_dset_devPrintfSoftCallback, pvar_dset_devPrintfStdio, + pvar_dset_asynPfOctetWrite, pvar_dset_devSiSoft, + pvar_dset_devSiSoftCallback, pvar_dset_devTimestampSI, + pvar_dset_devSiGeneralTime, pvar_dset_devSiEnviron, + pvar_dset_devStringinStats, pvar_dset_devStringinEnvVar, + pvar_dset_devStringinEpics, pvar_dset_devSysMonSiStats, + pvar_dset_asynSiOctetCmdResponse, pvar_dset_asynSiOctetWriteRead, + pvar_dset_asynSiOctetRead, pvar_dset_devSoSoft, + pvar_dset_devSoSoftCallback, pvar_dset_devSoStdio, + pvar_dset_asynSoOctetWrite, pvar_dset_devSASoft, pvar_dset_devWfSoft, + pvar_dset_devWaveformStats, pvar_dset_devSysMonWaveStats, + pvar_dset_asynWfOctetCmdResponse, pvar_dset_asynWfOctetWriteRead, + pvar_dset_asynWfOctetRead, pvar_dset_asynWfOctetWrite, + pvar_dset_asynWfOctetWriteBinary, pvar_dset_asynInt8ArrayWfIn, + pvar_dset_asynInt8ArrayWfOut, pvar_dset_asynInt16ArrayWfIn, + pvar_dset_asynInt16ArrayWfOut, pvar_dset_asynInt32ArrayWfIn, + pvar_dset_asynInt32ArrayWfOut, pvar_dset_asynInt32TimeSeries, + pvar_dset_asynFloat32ArrayWfIn, pvar_dset_asynFloat32ArrayWfOut, + pvar_dset_asynFloat64ArrayWfIn, pvar_dset_asynFloat64ArrayWfOut, + pvar_dset_asynFloat64TimeSeries, pvar_dset_asynInt64ArrayWfIn, + pvar_dset_asynInt64ArrayWfOut, pvar_dset_asynInt64TimeSeries +}; + +epicsShareExtern drvet *pvar_drvet_drvAsyn; + +static const char *driverSupportNames[] = { + "drvAsyn"}; + +static struct drvet *drvsl[] = { + pvar_drvet_drvAsyn}; + +epicsShareExtern jlif *pvar_jlif_lnkCalcIf, *pvar_jlif_lnkConstIf, + *pvar_jlif_lnkDebugIf, *pvar_jlif_lnkStateIf, *pvar_jlif_lnkTraceIf; + +static struct jlif *jlifsl[] = { + pvar_jlif_lnkCalcIf, + pvar_jlif_lnkConstIf, + pvar_jlif_lnkDebugIf, + pvar_jlif_lnkStateIf, + pvar_jlif_lnkTraceIf}; + +typedef void (*reg_func)(void); +epicsShareExtern reg_func pvar_func_arrInitialize, + pvar_func_asInitHooksRegister, pvar_func_asSub, + pvar_func_asynInterposeDelayRegister, + pvar_func_asynInterposeEchoRegister, + pvar_func_asynInterposeEosRegister, + pvar_func_asynInterposeFlushRegister, pvar_func_asynRegister, + pvar_func_configMenuRegistrar, pvar_func_dbndInitialize, + pvar_func_dbrestoreRegister, pvar_func_decInitialize, + pvar_func_drvAsynIPPortRegisterCommands, + pvar_func_drvAsynIPServerPortRegisterCommands, + pvar_func_drvAsynSerialPortRegisterCommands, + pvar_func_drvBlockTCPEventRegister, + pvar_func_drvBlockTCPRedundantPlcRegister, + pvar_func_drvBlockTCPRegister, pvar_func_drvCodacHeaderRegister, + pvar_func_drvCodacRedundantPlcRegister, + pvar_func_iocSetLogInitRegister, pvar_func_iocSetLogLevelRegister, + pvar_func_iocSetLogStdoutRegister, pvar_func_iocSetLogSyslogRegister, + pvar_func_iocSetSimEnableRegister, pvar_func_rsrvRegistrar, + pvar_func_save_restoreRegister, pvar_func_syncInitialize, + pvar_func_tsInitialize, pvar_func_register_func_rebootProc, + pvar_func_register_func_scanMon, pvar_func_register_func_scanMonInit; + +epicsShareExtern int * const pvar_int_CASDEBUG; +epicsShareExtern int * const pvar_int_asCaDebug; +epicsShareExtern int * const pvar_int_atExitDebug; +epicsShareExtern double * const pvar_double_boHIGHlimit; +epicsShareExtern int * const pvar_int_boHIGHprecision; +epicsShareExtern double * const pvar_double_calcoutODLYlimit; +epicsShareExtern int * const pvar_int_calcoutODLYprecision; +epicsShareExtern int * const pvar_int_callbackParallelThreadsDefault; +epicsShareExtern int * const pvar_int_configMenuDebug; +epicsShareExtern int * const pvar_int_dbAccessDebugPUTF; +epicsShareExtern int * const pvar_int_dbBptNotMonotonic; +epicsShareExtern int * const pvar_int_dbConvertStrict; +epicsShareExtern int * const pvar_int_dbJLinkDebug; +epicsShareExtern int * const pvar_int_dbQuietMacroWarnings; +epicsShareExtern int * const pvar_int_dbRecordsAbcSorted; +epicsShareExtern int * const pvar_int_dbRecordsOnceOnly; +epicsShareExtern int * const pvar_int_dbTemplateMaxVars; +epicsShareExtern int * const pvar_int_dbThreadRealtimeLock; +epicsShareExtern int * const pvar_int_histogramSDELprecision; +epicsShareExtern int * const pvar_int_lnkDebug_debug; +epicsShareExtern int * const pvar_int_logClientDebug; +epicsShareExtern int * const pvar_int_save_restoreDatedBackupFiles; +epicsShareExtern int * const pvar_int_save_restoreDebug; +epicsShareExtern int * const pvar_int_save_restoreIncompleteSetsOk; +epicsShareExtern int * const pvar_int_save_restoreNumSeqFiles; +epicsShareExtern int * const pvar_int_save_restoreRemountThreshold; +epicsShareExtern int * const pvar_int_save_restoreSeqPeriodInSeconds; +epicsShareExtern double * const pvar_double_seqDLYlimit; +epicsShareExtern int * const pvar_int_seqDLYprecision; + +static struct iocshVarDef vardefs[] = { + {"CASDEBUG", iocshArgInt, pvar_int_CASDEBUG}, + {"asCaDebug", iocshArgInt, pvar_int_asCaDebug}, + {"atExitDebug", iocshArgInt, pvar_int_atExitDebug}, + {"boHIGHlimit", iocshArgDouble, pvar_double_boHIGHlimit}, + {"boHIGHprecision", iocshArgInt, pvar_int_boHIGHprecision}, + {"calcoutODLYlimit", iocshArgDouble, pvar_double_calcoutODLYlimit}, + {"calcoutODLYprecision", iocshArgInt, pvar_int_calcoutODLYprecision}, + {"callbackParallelThreadsDefault", iocshArgInt, pvar_int_callbackParallelThreadsDefault}, + {"configMenuDebug", iocshArgInt, pvar_int_configMenuDebug}, + {"dbAccessDebugPUTF", iocshArgInt, pvar_int_dbAccessDebugPUTF}, + {"dbBptNotMonotonic", iocshArgInt, pvar_int_dbBptNotMonotonic}, + {"dbConvertStrict", iocshArgInt, pvar_int_dbConvertStrict}, + {"dbJLinkDebug", iocshArgInt, pvar_int_dbJLinkDebug}, + {"dbQuietMacroWarnings", iocshArgInt, pvar_int_dbQuietMacroWarnings}, + {"dbRecordsAbcSorted", iocshArgInt, pvar_int_dbRecordsAbcSorted}, + {"dbRecordsOnceOnly", iocshArgInt, pvar_int_dbRecordsOnceOnly}, + {"dbTemplateMaxVars", iocshArgInt, pvar_int_dbTemplateMaxVars}, + {"dbThreadRealtimeLock", iocshArgInt, pvar_int_dbThreadRealtimeLock}, + {"histogramSDELprecision", iocshArgInt, pvar_int_histogramSDELprecision}, + {"lnkDebug_debug", iocshArgInt, pvar_int_lnkDebug_debug}, + {"logClientDebug", iocshArgInt, pvar_int_logClientDebug}, + {"save_restoreDatedBackupFiles", iocshArgInt, pvar_int_save_restoreDatedBackupFiles}, + {"save_restoreDebug", iocshArgInt, pvar_int_save_restoreDebug}, + {"save_restoreIncompleteSetsOk", iocshArgInt, pvar_int_save_restoreIncompleteSetsOk}, + {"save_restoreNumSeqFiles", iocshArgInt, pvar_int_save_restoreNumSeqFiles}, + {"save_restoreRemountThreshold", iocshArgInt, pvar_int_save_restoreRemountThreshold}, + {"save_restoreSeqPeriodInSeconds", iocshArgInt, pvar_int_save_restoreSeqPeriodInSeconds}, + {"seqDLYlimit", iocshArgDouble, pvar_double_seqDLYlimit}, + {"seqDLYprecision", iocshArgInt, pvar_int_seqDLYprecision}, + {NULL, iocshArgInt, NULL} +}; + +int CUB_registerRecordDeviceDriver(DBBASE *pbase) +{ + static int executed = 0; + if (!pbase) { + printf("pdbbase is NULL; you must load a DBD file first.\n"); + return -1; + } + + if (executed) { + printf("Warning: Registration already done.\n"); + } + executed = 1; + + registerRecordTypes(pbase, NELEMENTS(rtl), recordTypeNames, rtl); + registerDevices(pbase, NELEMENTS(devsl), deviceSupportNames, devsl); + registerDrivers(pbase, NELEMENTS(drvsl), driverSupportNames, drvsl); + registerJLinks(pbase, NELEMENTS(jlifsl), jlifsl); + pvar_func_arrInitialize(); + pvar_func_asInitHooksRegister(); + pvar_func_asSub(); + pvar_func_asynInterposeDelayRegister(); + pvar_func_asynInterposeEchoRegister(); + pvar_func_asynInterposeEosRegister(); + pvar_func_asynInterposeFlushRegister(); + pvar_func_asynRegister(); + pvar_func_configMenuRegistrar(); + pvar_func_dbndInitialize(); + pvar_func_dbrestoreRegister(); + pvar_func_decInitialize(); + pvar_func_drvAsynIPPortRegisterCommands(); + pvar_func_drvAsynIPServerPortRegisterCommands(); + pvar_func_drvAsynSerialPortRegisterCommands(); + pvar_func_drvBlockTCPEventRegister(); + pvar_func_drvBlockTCPRedundantPlcRegister(); + pvar_func_drvBlockTCPRegister(); + pvar_func_drvCodacHeaderRegister(); + pvar_func_drvCodacRedundantPlcRegister(); + pvar_func_iocSetLogInitRegister(); + pvar_func_iocSetLogLevelRegister(); + pvar_func_iocSetLogStdoutRegister(); + pvar_func_iocSetLogSyslogRegister(); + pvar_func_iocSetSimEnableRegister(); + pvar_func_rsrvRegistrar(); + pvar_func_save_restoreRegister(); + pvar_func_syncInitialize(); + pvar_func_tsInitialize(); + pvar_func_register_func_rebootProc(); + pvar_func_register_func_scanMon(); + pvar_func_register_func_scanMonInit(); + iocshRegisterVariable(vardefs); + return 0; +} + +/* CUB_registerRecordDeviceDriver */ +static const iocshArg rrddArg0 = {"pdbbase", iocshArgPdbbase}; +static const iocshArg *rrddArgs[] = {&rrddArg0}; +static const iocshFuncDef rrddFuncDef = + {"CUB_registerRecordDeviceDriver", 1, rrddArgs}; +static void rrddCallFunc(const iocshArgBuf *) +{ + iocshSetError(CUB_registerRecordDeviceDriver(*iocshPpdbbase)); +} + +} // extern "C" + +/* + * Register commands on application startup + */ +static int Registration() { + iocshRegisterCommon(); + iocshRegister(&rrddFuncDef, rrddCallFunc); + return 0; +} + +static int done EPICS_UNUSED = Registration(); diff --git a/EC-GN-JA-PCF/target/main/epics/CUBApp/src/O.linux-x86_64/CUB_registerRecordDeviceDriver.d b/EC-GN-JA-PCF/target/main/epics/CUBApp/src/O.linux-x86_64/CUB_registerRecordDeviceDriver.d new file mode 100644 index 0000000..70a149b --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/CUBApp/src/O.linux-x86_64/CUB_registerRecordDeviceDriver.d @@ -0,0 +1,26 @@ +CUB_registerRecordDeviceDriver.o: CUB_registerRecordDeviceDriver.cpp \ + /opt/codac-6.3/epics/include/compilerDependencies.h \ + /opt/codac-6.3/epics/include/compiler/gcc/compilerSpecific.h \ + /opt/codac-6.3/epics/include/epicsStdlib.h \ + /opt/codac-6.3/epics/include/libComAPI.h \ + /opt/codac-6.3/epics/include/os/Linux/osdStrtod.h \ + /opt/codac-6.3/epics/include/epicsTypes.h \ + /opt/codac-6.3/epics/include/compilerDependencies.h \ + /opt/codac-6.3/epics/include/errMdef.h \ + /opt/codac-6.3/epics/include/iocsh.h \ + /opt/codac-6.3/epics/include/iocshRegisterCommon.h \ + /opt/codac-6.3/epics/include/shareLib.h \ + /opt/codac-6.3/epics/include/registryCommon.h \ + /opt/codac-6.3/epics/include/dbStaticLib.h \ + /opt/codac-6.3/epics/include/dbFldTypes.h \ + /opt/codac-6.3/epics/include/dbBase.h \ + /opt/codac-6.3/epics/include/ellLib.h \ + /opt/codac-6.3/epics/include/dbDefs.h \ + /opt/codac-6.3/epics/include/recSup.h \ + /opt/codac-6.3/epics/include/devSup.h \ + /opt/codac-6.3/epics/include/link.h \ + /opt/codac-6.3/epics/include/cantProceed.h \ + /opt/codac-6.3/epics/include/dbJLink.h \ + /opt/codac-6.3/epics/include/dbCoreAPI.h \ + /opt/codac-6.3/epics/include/registryRecordType.h \ + /opt/codac-6.3/epics/include/recSup.h diff --git a/EC-GN-JA-PCF/target/main/epics/CUBApp/src/O.linux-x86_64/CUB_registerRecordDeviceDriver.o b/EC-GN-JA-PCF/target/main/epics/CUBApp/src/O.linux-x86_64/CUB_registerRecordDeviceDriver.o new file mode 100644 index 0000000000000000000000000000000000000000..99a4454b5fa9d1509bf0b4b0f00c5f4cb3c8c7ee GIT binary patch literal 44960 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 literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF/target/main/epics/CUBApp/src/O.linux-x86_64/Makefile b/EC-GN-JA-PCF/target/main/epics/CUBApp/src/O.linux-x86_64/Makefile new file mode 100644 index 0000000..757ce21 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/CUBApp/src/O.linux-x86_64/Makefile @@ -0,0 +1,10 @@ +#This Makefile created by makeMakefile.pl + + +all : + $(MAKE) -f ../Makefile TOP=../../.. T_A=linux-x86_64 $@ + +.DEFAULT: force + $(MAKE) -f ../Makefile TOP=../../.. T_A=linux-x86_64 $@ + +force: ; diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/Makefile b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/Makefile new file mode 100755 index 0000000..a526c7e --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/Makefile @@ -0,0 +1,44 @@ +TOP=../.. +include $(TOP)/configure/CONFIG +#---------------------------------------- +# ADD MACRO DEFINITIONS AFTER THIS LINE + +#---------------------------------------------------- +# Optimization of db files using dbst (DEFAULT: NO) +#DB_OPT = YES + +#---------------------------------------------------- +# Create and install (or just install) into /db +# databases, templates, substitutions like this +DB += PCF0-EC-GN-HWCF-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GAF-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GAF-CCPS-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GAF-FHPS-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GAF-GCPS-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GAF-MCPS-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GAFP-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GBF-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GBF-CCPS-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GBF-FHPS-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GBF-GCPS-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GBF-MCPS-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GBFP-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GPF-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-GPS-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-PA1F-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-PA2F-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-PB1F-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-PB2F-iocEC-GN-PSH0PCF.db +DB += PCF0-EC-GN-P01-PMF-iocEC-GN-PSH0PCF.db + + +# Automagically install .proto files +DB += $(notdir $(wildcard ../*.proto)) + +#---------------------------------------------------- +# If .db template is not named *.template add +# _template = + +include $(TOP)/configure/RULES +#---------------------------------------- +# ADD RULES AFTER THIS LINE diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/O.linux-x86_64/Makefile b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/O.linux-x86_64/Makefile new file mode 100644 index 0000000..757ce21 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/O.linux-x86_64/Makefile @@ -0,0 +1,10 @@ +#This Makefile created by makeMakefile.pl + + +all : + $(MAKE) -f ../Makefile TOP=../../.. T_A=linux-x86_64 $@ + +.DEFAULT: force + $(MAKE) -f ../Makefile TOP=../../.. T_A=linux-x86_64 $@ + +force: ; diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-HWCF-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-HWCF-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..9d7c2e6 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-HWCF-iocEC-GN-PSH0PCF.db @@ -0,0 +1,1712 @@ +record (bo,"EC-GN-HWCF:6259-0-ACQ") +{ + field(DESC, "Start/Stop data acquisition") + field(DTYP, "ni6259") + field(ONAM, "START-ACQUISITION") + field(OUT, "#C1 S0 @switch_acquisition") + field(PHAS, "2") + field(PINI, "YES") + field(VAL, "1") + field(ZNAM, "STOP-ACQUISITION") +} + +record (bo,"EC-GN-HWCF:6259-0-CONF") +{ + field(DESC, "Load/reset analog input configuration") + field(DTYP, "ni6259") + field(ONAM, "LOAD-CONF") + field(OUT, "#C1 S0 @ai_conf") + field(PHAS, "1") + field(PINI, "YES") + field(VAL, "1") + field(ZNAM, "RESET-CONF") +} + +record (bo,"EC-GN-HWCF:6259-0-MODE") +{ + field(DESC, "continuous or finite mode") + field(DTYP, "ni6259") + field(ONAM, "CONTINUOUS") + field(OUT, "#C1 S0 @daq_mode") + field(PINI, "YES") + field(VAL, "1") + field(ZNAM, "FINITE") +} + +record (bo,"EC-GN-HWCF:6259-1-ACQ") +{ + field(DESC, "Start/Stop data acquisition") + field(DTYP, "ni6259") + field(ONAM, "START-ACQUISITION") + field(OUT, "#C0 S0 @switch_acquisition") + field(PHAS, "2") + field(PINI, "YES") + field(VAL, "1") + field(ZNAM, "STOP-ACQUISITION") +} + +record (bo,"EC-GN-HWCF:6259-1-CONF") +{ + field(DESC, "Load/reset analog input configuration") + field(DTYP, "ni6259") + field(ONAM, "LOAD-CONF") + field(OUT, "#C0 S0 @ai_conf") + field(PHAS, "1") + field(PINI, "YES") + field(VAL, "1") + field(ZNAM, "RESET-CONF") +} + +record (bo,"EC-GN-HWCF:6259-1-MODE") +{ + field(DESC, "continuous or finite mode") + field(DTYP, "ni6259") + field(ONAM, "CONTINUOUS") + field(OUT, "#C0 S0 @daq_mode") + field(PINI, "YES") + field(VAL, "1") + field(ZNAM, "FINITE") +} + +record (bo,"EC-GN-HWCF:6368-0-AISTSP") +{ + field(DESC, "Start/Stop AI Segment") + field(DTYP, "asynInt32") + field(ONAM, "Start") + field(OUT, "@asyn(ni6368_1, 0) start_stop_ai") + field(PHAS, "2") + field(PINI, "YES") + field(VAL, "0") + field(ZNAM, "Stop") +} + +record (bo,"EC-GN-HWCF:6368-0-AOSTSP") +{ + field(DESC, "Start/Stop AO Segment") + field(DTYP, "asynInt32") + field(ONAM, "Start") + field(OUT, "@asyn(ni6368_1, 0) start_stop_ao") + field(VAL, "0") + field(ZNAM, "Stop") +} + +record (bo,"EC-GN-HWCF:6368-0-LDAICF") +{ + field(DESC, "Load/Reset AI Configuration") + field(DTYP, "asynInt32") + field(ONAM, "Load") + field(OUT, "@asyn(ni6368_1, 0) ai_conf") + field(PHAS, "1") + field(PINI, "YES") + field(VAL, "0") + field(ZNAM, "Reset") +} + +record (bo,"EC-GN-HWCF:6368-0-LDAOCF") +{ + field(DESC, "Load/Reset AO Configuration") + field(DTYP, "asynInt32") + field(ONAM, "Load") + field(OUT, "@asyn(ni6368_1, 0) ao_conf") + field(VAL, "0") + field(ZNAM, "Reset") +} + +record (bo,"EC-GN-HWCF:6368-1-AISTSP") +{ + field(DESC, "Start/Stop AI Segment") + field(DTYP, "asynInt32") + field(ONAM, "Start") + field(OUT, "@asyn(ni6368_0, 0) start_stop_ai") + field(PHAS, "2") + field(PINI, "YES") + field(VAL, "0") + field(ZNAM, "Stop") +} + +record (bo,"EC-GN-HWCF:6368-1-AOSTSP") +{ + field(DESC, "Start/Stop AO Segment") + field(DTYP, "asynInt32") + field(ONAM, "Start") + field(OUT, "@asyn(ni6368_0, 0) start_stop_ao") + field(VAL, "0") + field(ZNAM, "Stop") +} + +record (bo,"EC-GN-HWCF:6368-1-LDAICF") +{ + field(DESC, "Load/Reset AI Configuration") + field(DTYP, "asynInt32") + field(ONAM, "Load") + field(OUT, "@asyn(ni6368_0, 0) ai_conf") + field(PHAS, "1") + field(PINI, "YES") + field(VAL, "0") + field(ZNAM, "Reset") +} + +record (bo,"EC-GN-HWCF:6368-1-LDAOCF") +{ + field(DESC, "Load/Reset AO Configuration") + field(DTYP, "asynInt32") + field(ONAM, "Load") + field(OUT, "@asyn(ni6368_0, 0) ao_conf") + field(VAL, "0") + field(ZNAM, "Reset") +} + +record (bi,"EC-GN-HWCF:6683-0-BLKTMO") +{ + field(DESC, "Block until Finished...") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0) waitForTimeOver") + field(SCAN, "I/O Intr") +} + +record (bo,"EC-GN-HWCF:6683-0-FTEAALL") +{ + field(DESC, "Abort all pending FTEs") + field(DTYP, "asynInt32") + field(ONAM, "1") + field(OUT, "@asyn(ni6683h_0,0)abortAllFtes") + field(VAL, "0") + field(ZNAM, "0") +} + +record (bo,"EC-GN-HWCF:6683-0-RESET") +{ + field(DESC, "Reset Board") + field(DTYP, "asynInt32") + field(ONAM, "1") + field(OUT, "@asyn(ni6683h_0,0)resetCard") + field(VAL, "0") + field(ZNAM, "0") +} + +record (bi,"EC-GN-HWCF:6683-0-TAIUTC") +{ + field(DESC, "PXI-6683.0 TAI/UTC Selection") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)taiutcStatus") + field(ONAM, "TAI") + field(OSV, "MINOR") + field(PINI, "YES") + field(SCAN, "10 second") + field(ZNAM, "UTC") + field(ZSV, "NO_ALARM") +} + +record (stringin,"EC-GN-HWCF:6259-0-DMSG") +{ + field(DESC, "Driver Debug Message") + field(DTYP, "ni6259") + field(INP, "#C1 S0 @dsg") + field(SCAN, "1 second") +} + +record (longout,"EC-GN-HWCF:6259-0-NS") +{ + field(DESC, "number of samples to read") + field(DRVH, "32000") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HIGH, "32001") + field(HOPR, "32000") + field(HSV, "MAJOR") + field(LOPR, "0") + field(LOW, "0") + field(LSV, "MAJOR") + field(OUT, "#C1 S0 @num_samples") + field(PINI, "YES") + field(VAL, "5000") +} + +record (longout,"EC-GN-HWCF:6259-0-POST") +{ + field(DESC, "Posttrigger samples") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "#C1 S0 @posttrig_samples") + field(PINI, "YES") + field(VAL, "4000") +} + +record (longout,"EC-GN-HWCF:6259-0-PRET") +{ + field(DESC, "Pretrigger samples") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "#C1 S0 @pretrig_samples") + field(PINI, "YES") + field(VAL, "2000") +} + +record (calcout,"EC-GN-HWCF:6259-0-SCCC") +{ + field(DESC, "") + field(CALC, "(A==11 andand B >7) || (A!=1 andand A!=11) ? 0: B") + field(HOPR, "15") + field(INPA, "EC-GN-HWCF:6259-0-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6259-0-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6259-0-SCCH PP") +} + +record (mbbo,"EC-GN-HWCF:6259-0-SCCH") +{ + field(DESC, "") + field(EIST, "8") + field(EIVL, "8") + field(ELST, "11") + field(ELVL, "11") + field(FFST, "15") + field(FFVL, "15") + field(FLNK, "EC-GN-HWCF:6259-0-SCCO") + field(FRST, "4") + field(FRVL, "4") + field(FTST, "14") + field(FTVL, "14") + field(FVST, "5") + field(FVVL, "5") + field(NIST, "9") + field(NIVL, "9") + field(ONST, "1") + field(ONVL, "1") + field(PINI, "YES") + field(SVST, "7") + field(SVVL, "7") + field(SXST, "6") + field(SXVL, "6") + field(TEST, "10") + field(TEVL, "10") + field(THST, "3") + field(THVL, "3") + field(TTST, "13") + field(TTVL, "13") + field(TVST, "12") + field(TVVL, "12") + field(TWST, "2") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "0") + field(ZRVL, "0") +} + +record (calcout,"EC-GN-HWCF:6259-0-SCCO") +{ + field(DESC, "") + field(CALC, "A==1?(B<10?A+B:B+11):(A==11?(B<7?A+B:(A>7?0:27)):A)") + field(FLNK, "EC-GN-HWCF:6259-0-SCCC") + field(HOPR, "31") + field(INPA, "EC-GN-HWCF:6259-0-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6259-0-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6259-0-SCLK PP") +} + +record (longout,"EC-GN-HWCF:6259-0-SCLK") +{ + field(DESC, "") + field(DRVH, "31") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HOPR, "31") + field(LOPR, "0") + field(OUT, "#C1 S0 @sample_clock_ai") +} + +record (mbbo,"EC-GN-HWCF:6259-0-SCTY") +{ + field(DESC, "") + field(FLNK, "EC-GN-HWCF:6259-0-SCCO") + field(FRST, "STAR_Trigger") + field(FRVL, "20") + field(FVST, "Analog_Trigger") + field(FVVL, "30") + field(ONST, "PFI") + field(ONVL, "1") + field(PINI, "YES") + field(SXST, "Logic_Low") + field(SXVL, "31") + field(THST, "GCRTOUT") + field(THVL, "19") + field(TWST, "PXI_Trigger") + field(TWVL, "11") + field(VAL, "0") + field(ZRST, "Internal") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6259-0-SR") +{ + field(DESC, "ADC Sampling Rate") + field(DTYP, "ni6259") + field(EGU, "Hz") + field(HIGH, "1000001") + field(HSV, "MAJOR") + field(OUT, "#C1 S0 @sample_rate") + field(PINI, "YES") + field(VAL, "1000000") +} + +record (mbbi,"EC-GN-HWCF:6259-0-STATUS") +{ + field(DESC, "PXI-6259.0 Board Status") + field(DTYP, "ni6259") + field(EIST, "ADC Overrun") + field(EISV, "MAJOR") + field(EIVL, "8") + field(ELST, "Reserved1") + field(ELSV, "INVALID") + field(ELVL, "11") + field(FFST, "MSC_Error") + field(FFSV, "MAJOR") + field(FFVL, "15") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FTST, "Reserved4") + field(FTSV, "INVALID") + field(FTVL, "14") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "#C1 S0 @BoardStatus") + field(NIST, "DAC Overrun") + field(NISV, "MAJOR") + field(NIVL, "9") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, ".1 second") + field(SVST, "AI_FIFO Overflow") + field(SVSV, "MAJOR") + field(SVVL, "7") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(TEST, "Reserved0") + field(TESV, "INVALID") + field(TEVL, "10") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TTST, "Reserved3") + field(TTSV, "INVALID") + field(TTVL, "13") + field(TVST, "Reserved2") + field(TVSV, "INVALID") + field(TVVL, "12") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (stringin,"EC-GN-HWCF:6259-1-DMSG") +{ + field(DESC, "Driver Debug Message") + field(DTYP, "ni6259") + field(INP, "#C0 S0 @dsg") + field(SCAN, "1 second") +} + +record (longout,"EC-GN-HWCF:6259-1-NS") +{ + field(DESC, "number of samples to read") + field(DRVH, "32000") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HIGH, "32001") + field(HOPR, "32000") + field(HSV, "MAJOR") + field(LOPR, "0") + field(LOW, "0") + field(LSV, "MAJOR") + field(OUT, "#C0 S0 @num_samples") + field(PINI, "YES") + field(VAL, "5000") +} + +record (longout,"EC-GN-HWCF:6259-1-POST") +{ + field(DESC, "Posttrigger samples") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "#C0 S0 @posttrig_samples") + field(PINI, "YES") + field(VAL, "4000") +} + +record (longout,"EC-GN-HWCF:6259-1-PRET") +{ + field(DESC, "Pretrigger samples") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "#C0 S0 @pretrig_samples") + field(PINI, "YES") + field(VAL, "2000") +} + +record (calcout,"EC-GN-HWCF:6259-1-SCCC") +{ + field(DESC, "") + field(CALC, "(A==11 andand B >7) || (A!=1 andand A!=11) ? 0: B") + field(HOPR, "15") + field(INPA, "EC-GN-HWCF:6259-1-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6259-1-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6259-1-SCCH PP") +} + +record (mbbo,"EC-GN-HWCF:6259-1-SCCH") +{ + field(DESC, "") + field(EIST, "8") + field(EIVL, "8") + field(ELST, "11") + field(ELVL, "11") + field(FFST, "15") + field(FFVL, "15") + field(FLNK, "EC-GN-HWCF:6259-1-SCCO") + field(FRST, "4") + field(FRVL, "4") + field(FTST, "14") + field(FTVL, "14") + field(FVST, "5") + field(FVVL, "5") + field(NIST, "9") + field(NIVL, "9") + field(ONST, "1") + field(ONVL, "1") + field(PINI, "YES") + field(SVST, "7") + field(SVVL, "7") + field(SXST, "6") + field(SXVL, "6") + field(TEST, "10") + field(TEVL, "10") + field(THST, "3") + field(THVL, "3") + field(TTST, "13") + field(TTVL, "13") + field(TVST, "12") + field(TVVL, "12") + field(TWST, "2") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "0") + field(ZRVL, "0") +} + +record (calcout,"EC-GN-HWCF:6259-1-SCCO") +{ + field(DESC, "") + field(CALC, "A==1?(B<10?A+B:B+11):(A==11?(B<7?A+B:(A>7?0:27)):A)") + field(FLNK, "EC-GN-HWCF:6259-1-SCCC") + field(HOPR, "31") + field(INPA, "EC-GN-HWCF:6259-1-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6259-1-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6259-1-SCLK PP") +} + +record (longout,"EC-GN-HWCF:6259-1-SCLK") +{ + field(DESC, "") + field(DRVH, "31") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HOPR, "31") + field(LOPR, "0") + field(OUT, "#C0 S0 @sample_clock_ai") +} + +record (mbbo,"EC-GN-HWCF:6259-1-SCTY") +{ + field(DESC, "") + field(FLNK, "EC-GN-HWCF:6259-1-SCCO") + field(FRST, "STAR_Trigger") + field(FRVL, "20") + field(FVST, "Analog_Trigger") + field(FVVL, "30") + field(ONST, "PFI") + field(ONVL, "1") + field(PINI, "YES") + field(SXST, "Logic_Low") + field(SXVL, "31") + field(THST, "GCRTOUT") + field(THVL, "19") + field(TWST, "PXI_Trigger") + field(TWVL, "11") + field(VAL, "0") + field(ZRST, "Internal") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6259-1-SR") +{ + field(DESC, "ADC Sampling Rate") + field(DTYP, "ni6259") + field(EGU, "Hz") + field(HIGH, "1000001") + field(HSV, "MAJOR") + field(OUT, "#C0 S0 @sample_rate") + field(PINI, "YES") + field(VAL, "1000000") +} + +record (mbbi,"EC-GN-HWCF:6259-1-STATUS") +{ + field(DESC, "PXI-6259.1 Board Status") + field(DTYP, "ni6259") + field(EIST, "ADC Overrun") + field(EISV, "MAJOR") + field(EIVL, "8") + field(ELST, "Reserved1") + field(ELSV, "INVALID") + field(ELVL, "11") + field(FFST, "MSC_Error") + field(FFSV, "MAJOR") + field(FFVL, "15") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FTST, "Reserved4") + field(FTSV, "INVALID") + field(FTVL, "14") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "#C0 S0 @BoardStatus") + field(NIST, "DAC Overrun") + field(NISV, "MAJOR") + field(NIVL, "9") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, ".1 second") + field(SVST, "AI_FIFO Overflow") + field(SVSV, "MAJOR") + field(SVVL, "7") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(TEST, "Reserved0") + field(TESV, "INVALID") + field(TEVL, "10") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TTST, "Reserved3") + field(TTSV, "INVALID") + field(TTVL, "13") + field(TVST, "Reserved2") + field(TVSV, "INVALID") + field(TVVL, "12") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-HWCF:6368-0-AIPU") +{ + field(DESC, "Software Pulse") + field(DTYP, "asynInt32") + field(FRST, "UPDATECLK") + field(FRVL, "4") + field(ONST, "CONVERTERCLK") + field(ONVL, "1") + field(OUT, "@asyn(ni6368_1, 0) pulse_ai") + field(THST, "REFTRIG") + field(THVL, "3") + field(TWST, "STARTTRIG") + field(TWVL, "2") + field(VAL, "2") + field(ZRST, "SAMPLECLK") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6368-0-AISMPL") +{ + field(DESC, "No of AI sample to be acquire in Block") + field(DRVH, "32000") + field(DRVL, "1") + field(DTYP, "asynInt32") + field(HOPR, "32000") + field(LOPR, "1") + field(OUT, "@asyn(ni6368_1, 0) no_of_samples") + field(PINI, "YES") + field(VAL, "1") +} + +record (longout,"EC-GN-HWCF:6368-0-AISR") +{ + field(DESC, "AI Sampling Rate") + field(DRVH, "2000000") + field(DRVL, "1") + field(DTYP, "asynInt32") + field(HOPR, "2000000") + field(LOPR, "1") + field(OUT, "@asyn(ni6368_1, 0) sampling_rate_ai") + field(PINI, "YES") + field(VAL, "1000000") +} + +record (longout,"EC-GN-HWCF:6368-0-AITB") +{ + field(DESC, "AI Timebase source") + field(DRVH, "60") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "60") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 0) timebase_ai") + field(VAL, "0") +} + +record (mbbo,"EC-GN-HWCF:6368-0-AOPU") +{ + field(DESC, "AO Pulse Source") + field(DTYP, "asynInt32") + field(FRST, "UPDATECLK") + field(FRVL, "4") + field(ONST, "CONVERTERCLK") + field(ONVL, "1") + field(OUT, "@asyn(ni6368_1, 0) pulse_ao") + field(THST, "REFTRIG") + field(THVL, "3") + field(TWST, "STARTTRIG") + field(TWVL, "2") + field(VAL, "2") + field(ZRST, "SAMPLECLK") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6368-0-AOTB") +{ + field(DESC, "AO Timebase source") + field(DRVH, "60") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "60") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 0) timebase_ao") + field(VAL, "0") +} + +record (mbbo,"EC-GN-HWCF:6368-0-CHAIMO") +{ + field(DESC, "Change AI Configuration") + field(DTYP, "asynInt32") + field(FRST, "PreTriggered") + field(FRVL, "7") + field(ONST, "ReTrigger") + field(ONVL, "3") + field(OUT, "@asyn(ni6368_1, 0) ai_mode") + field(PINI, "YES") + field(THST, "SoftwareTimed") + field(THVL, "6") + field(TWST, "Continuous") + field(TWVL, "4") + field(VAL, "2") + field(ZRST, "Finite") + field(ZRVL, "2") +} + +record (mbbo,"EC-GN-HWCF:6368-0-CHAOMO") +{ + field(DESC, "Change AO Configuration") + field(DTYP, "asynInt32") + field(FRST, "PreTriggered") + field(FRVL, "7") + field(ONST, "ReTrigger") + field(ONVL, "3") + field(OUT, "@asyn(ni6368_1, 0) ao_mode") + field(THST, "SoftwareTimed") + field(THVL, "6") + field(TWST, "Continuous") + field(TWVL, "4") + field(VAL, "2") + field(ZRST, "Finite") + field(ZRVL, "2") +} + +record (longout,"EC-GN-HWCF:6368-0-POST") +{ + field(DESC, "Number of AI sample to be acquire") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 0) posttrig_samples") + field(PINI, "YES") + field(VAL, "1") +} + +record (longout,"EC-GN-HWCF:6368-0-PRET") +{ + field(DESC, "Number of AI sample to be acquire") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 0) pretrig_samples") + field(PINI, "YES") + field(VAL, "0") +} + +record (calcout,"EC-GN-HWCF:6368-0-SCCC") +{ + field(DESC, "") + field(CALC, "(A==11 andand B >7) || (A!=1 andand A!=11) ? 0: B") + field(HOPR, "15") + field(INPA, "EC-GN-HWCF:6368-0-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6368-0-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6368-0-SCCH PP") +} + +record (mbbo,"EC-GN-HWCF:6368-0-SCCH") +{ + field(DESC, "") + field(EIST, "8") + field(EIVL, "8") + field(ELST, "11") + field(ELVL, "11") + field(FFST, "15") + field(FFVL, "15") + field(FLNK, "EC-GN-HWCF:6368-0-SCCO") + field(FRST, "4") + field(FRVL, "4") + field(FTST, "14") + field(FTVL, "14") + field(FVST, "5") + field(FVVL, "5") + field(NIST, "9") + field(NIVL, "9") + field(ONST, "1") + field(ONVL, "1") + field(PINI, "YES") + field(SVST, "7") + field(SVVL, "7") + field(SXST, "6") + field(SXVL, "6") + field(TEST, "10") + field(TEVL, "10") + field(THST, "3") + field(THVL, "3") + field(TTST, "13") + field(TTVL, "13") + field(TVST, "12") + field(TVVL, "12") + field(TWST, "2") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "0") + field(ZRVL, "0") +} + +record (calcout,"EC-GN-HWCF:6368-0-SCCO") +{ + field(DESC, "") + field(CALC, "A==1?(B<10?A+B:B+11):(A==11?(B<7?A+B:(A>7?0:27)):A)") + field(FLNK, "EC-GN-HWCF:6368-0-SCCC") + field(HOPR, "31") + field(INPA, "EC-GN-HWCF:6368-0-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6368-0-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6368-0-SCLK PP") +} + +record (longout,"EC-GN-HWCF:6368-0-SCLK") +{ + field(DESC, "") + field(DRVH, "31") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "31") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 0)sample_clock_ai") +} + +record (mbbo,"EC-GN-HWCF:6368-0-SCTY") +{ + field(DESC, "") + field(FLNK, "EC-GN-HWCF:6368-0-SCCO") + field(FRST, "STAR_Trigger") + field(FRVL, "20") + field(FVST, "Analog_Trigger") + field(FVVL, "30") + field(ONST, "PFI") + field(ONVL, "1") + field(PINI, "YES") + field(SXST, "Logic_Low") + field(SXVL, "31") + field(THST, "GCRTOUT") + field(THVL, "19") + field(TWST, "PXI_Trigger") + field(TWVL, "11") + field(VAL, "0") + field(ZRST, "Internal") + field(ZRVL, "0") +} + +record (mbbi,"EC-GN-HWCF:6368-0-STATUS") +{ + field(DESC, "PXIe-6368.0 Board Status") + field(DTYP, "asynInt32") + field(EIST, "DIHW_Error") + field(EISV, "MAJOR") + field(EIVL, "8") + field(ELST, "GPCHW_Error") + field(ELSV, "MAJOR") + field(ELVL, "11") + field(FFST, "MSC_Error") + field(FFSV, "MAJOR") + field(FFVL, "15") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FTST, "Reserved2") + field(FTSV, "INVALID") + field(FTVL, "14") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "@asyn(ni6368_1, 0) board_status") + field(NIST, "AOHW_Error") + field(NISV, "MAJOR") + field(NIVL, "9") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, ".1 second") + field(SVST, "AIHW_Error") + field(SVSV, "MAJOR") + field(SVVL, "7") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(TEST, "DOHW_Error") + field(TESV, "MAJOR") + field(TEVL, "10") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TTST, "Reserved1") + field(TTSV, "INVALID") + field(TTVL, "13") + field(TVST, "Reserved0") + field(TVSV, "INVALID") + field(TVVL, "12") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-HWCF:6368-1-AIPU") +{ + field(DESC, "Software Pulse") + field(DTYP, "asynInt32") + field(FRST, "UPDATECLK") + field(FRVL, "4") + field(ONST, "CONVERTERCLK") + field(ONVL, "1") + field(OUT, "@asyn(ni6368_0, 0) pulse_ai") + field(THST, "REFTRIG") + field(THVL, "3") + field(TWST, "STARTTRIG") + field(TWVL, "2") + field(VAL, "2") + field(ZRST, "SAMPLECLK") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6368-1-AISMPL") +{ + field(DESC, "No of AI sample to be acquire in Block") + field(DRVH, "32000") + field(DRVL, "1") + field(DTYP, "asynInt32") + field(HOPR, "32000") + field(LOPR, "1") + field(OUT, "@asyn(ni6368_0, 0) no_of_samples") + field(PINI, "YES") + field(VAL, "1") +} + +record (longout,"EC-GN-HWCF:6368-1-AISR") +{ + field(DESC, "AI Sampling Rate") + field(DRVH, "2000000") + field(DRVL, "1") + field(DTYP, "asynInt32") + field(HOPR, "2000000") + field(LOPR, "1") + field(OUT, "@asyn(ni6368_0, 0) sampling_rate_ai") + field(PINI, "YES") + field(VAL, "1000000") +} + +record (longout,"EC-GN-HWCF:6368-1-AITB") +{ + field(DESC, "AI Timebase source") + field(DRVH, "60") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "60") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_0, 0) timebase_ai") + field(VAL, "0") +} + +record (mbbo,"EC-GN-HWCF:6368-1-AOPU") +{ + field(DESC, "AO Pulse Source") + field(DTYP, "asynInt32") + field(FRST, "UPDATECLK") + field(FRVL, "4") + field(ONST, "CONVERTERCLK") + field(ONVL, "1") + field(OUT, "@asyn(ni6368_0, 0) pulse_ao") + field(THST, "REFTRIG") + field(THVL, "3") + field(TWST, "STARTTRIG") + field(TWVL, "2") + field(VAL, "2") + field(ZRST, "SAMPLECLK") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6368-1-AOTB") +{ + field(DESC, "AO Timebase source") + field(DRVH, "60") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "60") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_0, 0) timebase_ao") + field(VAL, "0") +} + +record (mbbo,"EC-GN-HWCF:6368-1-CHAIMO") +{ + field(DESC, "Change AI Configuration") + field(DTYP, "asynInt32") + field(FRST, "PreTriggered") + field(FRVL, "7") + field(ONST, "ReTrigger") + field(ONVL, "3") + field(OUT, "@asyn(ni6368_0, 0) ai_mode") + field(PINI, "YES") + field(THST, "SoftwareTimed") + field(THVL, "6") + field(TWST, "Continuous") + field(TWVL, "4") + field(VAL, "2") + field(ZRST, "Finite") + field(ZRVL, "2") +} + +record (mbbo,"EC-GN-HWCF:6368-1-CHAOMO") +{ + field(DESC, "Change AO Configuration") + field(DTYP, "asynInt32") + field(FRST, "PreTriggered") + field(FRVL, "7") + field(ONST, "ReTrigger") + field(ONVL, "3") + field(OUT, "@asyn(ni6368_0, 0) ao_mode") + field(THST, "SoftwareTimed") + field(THVL, "6") + field(TWST, "Continuous") + field(TWVL, "4") + field(VAL, "2") + field(ZRST, "Finite") + field(ZRVL, "2") +} + +record (longout,"EC-GN-HWCF:6368-1-POST") +{ + field(DESC, "Number of AI sample to be acquire") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_0, 0) posttrig_samples") + field(PINI, "YES") + field(VAL, "1") +} + +record (longout,"EC-GN-HWCF:6368-1-PRET") +{ + field(DESC, "Number of AI sample to be acquire") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_0, 0) pretrig_samples") + field(PINI, "YES") + field(VAL, "0") +} + +record (calcout,"EC-GN-HWCF:6368-1-SCCC") +{ + field(DESC, "") + field(CALC, "(A==11 andand B >7) || (A!=1 andand A!=11) ? 0: B") + field(HOPR, "15") + field(INPA, "EC-GN-HWCF:6368-1-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6368-1-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6368-1-SCCH PP") +} + +record (mbbo,"EC-GN-HWCF:6368-1-SCCH") +{ + field(DESC, "") + field(EIST, "8") + field(EIVL, "8") + field(ELST, "11") + field(ELVL, "11") + field(FFST, "15") + field(FFVL, "15") + field(FLNK, "EC-GN-HWCF:6368-1-SCCO") + field(FRST, "4") + field(FRVL, "4") + field(FTST, "14") + field(FTVL, "14") + field(FVST, "5") + field(FVVL, "5") + field(NIST, "9") + field(NIVL, "9") + field(ONST, "1") + field(ONVL, "1") + field(PINI, "YES") + field(SVST, "7") + field(SVVL, "7") + field(SXST, "6") + field(SXVL, "6") + field(TEST, "10") + field(TEVL, "10") + field(THST, "3") + field(THVL, "3") + field(TTST, "13") + field(TTVL, "13") + field(TVST, "12") + field(TVVL, "12") + field(TWST, "2") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "0") + field(ZRVL, "0") +} + +record (calcout,"EC-GN-HWCF:6368-1-SCCO") +{ + field(DESC, "") + field(CALC, "A==1?(B<10?A+B:B+11):(A==11?(B<7?A+B:(A>7?0:27)):A)") + field(FLNK, "EC-GN-HWCF:6368-1-SCCC") + field(HOPR, "31") + field(INPA, "EC-GN-HWCF:6368-1-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6368-1-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6368-1-SCLK PP") +} + +record (longout,"EC-GN-HWCF:6368-1-SCLK") +{ + field(DESC, "") + field(DRVH, "31") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "31") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_0, 0)sample_clock_ai") +} + +record (mbbo,"EC-GN-HWCF:6368-1-SCTY") +{ + field(DESC, "") + field(FLNK, "EC-GN-HWCF:6368-1-SCCO") + field(FRST, "STAR_Trigger") + field(FRVL, "20") + field(FVST, "Analog_Trigger") + field(FVVL, "30") + field(ONST, "PFI") + field(ONVL, "1") + field(PINI, "YES") + field(SXST, "Logic_Low") + field(SXVL, "31") + field(THST, "GCRTOUT") + field(THVL, "19") + field(TWST, "PXI_Trigger") + field(TWVL, "11") + field(VAL, "0") + field(ZRST, "Internal") + field(ZRVL, "0") +} + +record (mbbi,"EC-GN-HWCF:6368-1-STATUS") +{ + field(DESC, "PXIe-6368.1 Board Status") + field(DTYP, "asynInt32") + field(EIST, "DIHW_Error") + field(EISV, "MAJOR") + field(EIVL, "8") + field(ELST, "GPCHW_Error") + field(ELSV, "MAJOR") + field(ELVL, "11") + field(FFST, "MSC_Error") + field(FFSV, "MAJOR") + field(FFVL, "15") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FTST, "Reserved2") + field(FTSV, "INVALID") + field(FTVL, "14") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "@asyn(ni6368_0, 0) board_status") + field(NIST, "AOHW_Error") + field(NISV, "MAJOR") + field(NIVL, "9") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, ".1 second") + field(SVST, "AIHW_Error") + field(SVSV, "MAJOR") + field(SVVL, "7") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(TEST, "DOHW_Error") + field(TESV, "MAJOR") + field(TEVL, "10") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TTST, "Reserved1") + field(TTSV, "INVALID") + field(TTVL, "13") + field(TVST, "Reserved0") + field(TVSV, "INVALID") + field(TVVL, "12") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6528-0-FILTINT") +{ + field(DESC, "Set Filter Interval Value") + field(DRVH, "209715200") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "209715200") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setfilterinterval") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-0-POWERP3") +{ + field(DESC, "Power-UP state of Port3") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynUInt32Digital") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asynMask(ni6528_1,3, 0xff) setportpowerup") + field(PINI, "YES") + field(VAL, "255") +} + +record (longout,"EC-GN-HWCF:6528-0-POWERP4") +{ + field(DESC, "Power-UP state of Port4") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynUInt32Digital") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asynMask(ni6528_1,4, 0xff) setportpowerup") + field(PINI, "YES") + field(VAL, "255") +} + +record (longout,"EC-GN-HWCF:6528-0-POWERP5") +{ + field(DESC, "Power-UP state of Port5") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynUInt32Digital") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asynMask(ni6528_1,5, 0xff) setportpowerup") + field(PINI, "YES") + field(VAL, "255") +} + +record (longout,"EC-GN-HWCF:6528-0-RTSIINPROUT") +{ + field(DESC, "Set RTSI Input Route") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setrtsiinputroute") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-0-RTSIOUTROUT") +{ + field(DESC, "Set RTSI Output Route") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setrtsioutputroute") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-0-RTSIPCHANGE") +{ + field(DESC, "Set RTSI Pulse on Change") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setrtsipulseonchange") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-0-RTSIPWDG") +{ + field(DESC, "Set RTSI pulse on watchdog") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setrtsipulseonwatchdog") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-0-RTSIWDGTRIG") +{ + field(DESC, "Set RTSI on Watchdog Trigger") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setrtsiwatchdogtrigger") + field(VAL, "0") +} + +record (mbbi,"EC-GN-HWCF:6528-0-STATUS") +{ + field(DESC, "PXI-6528.0 Board Status") + field(DTYP, "asynInt32") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "@asyn(ni6528_1,1) board_status") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, "1 second") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (ao,"EC-GN-HWCF:6528-0-WDGTOUT") +{ + field(DESC, "Set Watchdog TimeOut") + field(DRVH, "429496729580") + field(DRVL, "0") + field(DTYP, "asynFloat64") + field(HOPR, "429496729580") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setwatchdogtimeout") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-1-FILTINT") +{ + field(DESC, "Set Filter Interval Value") + field(DRVH, "209715200") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "209715200") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setfilterinterval") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-1-POWERP3") +{ + field(DESC, "Power-UP state of Port3") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynUInt32Digital") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asynMask(ni6528_0,3, 0xff) setportpowerup") + field(PINI, "YES") + field(VAL, "255") +} + +record (longout,"EC-GN-HWCF:6528-1-POWERP4") +{ + field(DESC, "Power-UP state of Port4") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynUInt32Digital") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asynMask(ni6528_0,4, 0xff) setportpowerup") + field(PINI, "YES") + field(VAL, "255") +} + +record (longout,"EC-GN-HWCF:6528-1-POWERP5") +{ + field(DESC, "Power-UP state of Port5") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynUInt32Digital") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asynMask(ni6528_0,5, 0xff) setportpowerup") + field(PINI, "YES") + field(VAL, "255") +} + +record (longout,"EC-GN-HWCF:6528-1-RTSIINPROUT") +{ + field(DESC, "Set RTSI Input Route") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setrtsiinputroute") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-1-RTSIOUTROUT") +{ + field(DESC, "Set RTSI Output Route") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setrtsioutputroute") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-1-RTSIPCHANGE") +{ + field(DESC, "Set RTSI Pulse on Change") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setrtsipulseonchange") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-1-RTSIPWDG") +{ + field(DESC, "Set RTSI pulse on watchdog") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setrtsipulseonwatchdog") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-1-RTSIWDGTRIG") +{ + field(DESC, "Set RTSI on Watchdog Trigger") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setrtsiwatchdogtrigger") + field(VAL, "0") +} + +record (mbbi,"EC-GN-HWCF:6528-1-STATUS") +{ + field(DESC, "PXI-6528.1 Board Status") + field(DTYP, "asynInt32") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "@asyn(ni6528_0,0) board_status") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, "1 second") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (ao,"EC-GN-HWCF:6528-1-WDGTOUT") +{ + field(DESC, "Set Watchdog TimeOut") + field(DRVH, "429496729580") + field(DRVL, "0") + field(DTYP, "asynFloat64") + field(HOPR, "429496729580") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setwatchdogtimeout") + field(VAL, "0") +} + +record (waveform,"EC-GN-HWCF:6683-0-BDTM") +{ + field(DESC, "Board time") + field(DTYP, "asynInt32ArrayIn") + field(FTVL, "ULONG") + field(INP, "@asyn(ni6683h_0,0) getTime") + field(NELM, "2") + field(SCAN, ".1 second") +} + +record (subArray,"EC-GN-HWCF:6683-0-BDTMN") +{ + field(DESC, "Board time [ns]") + field(EGU, "ns") + field(FTVL, "ULONG") + field(INP, "EC-GN-HWCF:6683-0-BDTM CP MS") +} + +record (subArray,"EC-GN-HWCF:6683-0-BDTMS") +{ + field(DESC, "Board time [s]") + field(EGU, "s") + field(FTVL, "ULONG") + field(INP, "EC-GN-HWCF:6683-0-BDTM CP MS") +} + +record (waveform,"EC-GN-HWCF:6683-0-BLKTM") +{ + field(DESC, "Block until...") + field(DTYP, "asynInt32ArrayOut") + field(FTVL, "LONG") + field(HOPR, "4503599627370496") + field(INP, "@asyn(ni6683h_0,0) waitForTime") + field(LOPR, "0") + field(NELM, "2") +} + +record (stringin,"EC-GN-HWCF:6683-0-DEVNAME") +{ + field(DESC, "Device name") + field(DTYP, "asynOctetRead") + field(INP, "@asyn(ni6683h_0,0) deviceName") + field(PINI, "YES") + field(SCAN, "Passive") +} + +record (stringin,"EC-GN-HWCF:6683-0-DRIVER") +{ + field(DESC, "Driver version") + field(DTYP, "asynOctetRead") + field(INP, "@asyn(ni6683h_0,0) driverVersion") + field(PINI, "YES") + field(SCAN, "Passive") +} + +record (longin,"EC-GN-HWCF:6683-0-FTEMAX") +{ + field(DESC, "Max number of scheduled FTEs") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)maxScheduledFtes") + field(PINI, "YES") + field(SCAN, "Passive") +} + +record (longin,"EC-GN-HWCF:6683-0-FTENUM") +{ + field(DESC, "Number of pending FTEs") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)numPendingFtes") + field(SCAN, "5 second") +} + +record (stringin,"EC-GN-HWCF:6683-0-HBDTM") +{ + field(DESC, "Board Time") + field(DTYP, "asynOctetRead") + field(INP, "@asyn(ni6683h_0,0) getTime") + field(PINI, "YES") + field(SCAN, ".1 second") +} + +record (longin,"EC-GN-HWCF:6683-0-LVL_ERRS") +{ + field(DESC, "Check number of FTE level errors") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)checkFteLevels") + field(SCAN, "Passive") +} + +record (longin,"EC-GN-HWCF:6683-0-SERIAL") +{ + field(DESC, "Device serial number") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)deviceSerialNumber") + field(PINI, "YES") + field(SCAN, "Passive") +} + +record (mbbi,"EC-GN-HWCF:6683-0-STATUS") +{ + field(DESC, "PXI-6683.0 Device status") + field(DTYP, "asynInt32") + field(EIST, "FIFO overflow") + field(EISV, "MINOR") + field(EIVL, "8") + field(ELST, "Buffer overflow") + field(ELSV, "MINOR") + field(ELVL, "11") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "@asyn(ni6683h_0,0)deviceStatus") + field(NIST, "FPGA not ready") + field(NISV, "MINOR") + field(NIVL, "9") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, "5 second") + field(SVST, "Reserved") + field(SVSV, "INVALID") + field(SVVL, "7") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(TEST, "Ref clk no lock") + field(TESV, "MINOR") + field(TEVL, "10") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbi,"EC-GN-HWCF:6683-0-SYNC") +{ + field(DESC, "PXI-6683.0 Synchronization status") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)syncStatus") + field(ONST, "SYNCING") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, "1 second") + field(THST, "LOST_SYNC") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "SYNCED") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "NOT_SYNCED") + field(ZRSV, "MAJOR") + field(ZRVL, "0") +} + +record (longin,"EC-GN-HWCF:6683-0-SYNCLOST") +{ + field(DESC, "Seconds since lost synchronization") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)secsSinceSync") + field(SCAN, "1 second") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-CCPS-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-CCPS-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..c812fc7 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-CCPS-iocEC-GN-PSH0PCF.db @@ -0,0 +1,310 @@ +record (bi,"EC-GN-P01-GAF-CCPS:PSU2320-OUTON-RB") +{ + field(DESC, "GY1 CCPS Output ON status") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getOut CCPS1") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-CCPS:PSU2320-OUTON-SP") +{ + field(DESC, "GY1 CCPS Output ON") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PWX1500ML.proto setOut CCPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-RB") +{ + field(DESC, "GY1 CCPS remote readback") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getRem CCPS1") + field(ONAM, "REM") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(ZNAM, "LOC") +} + +record (bo,"EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-SP") +{ + field(DESC, "GY1 CCPS remote control on") + field(DTYP, "stream") + field(ONAM, "REM") + field(OUT, "@PWX1500ML.proto setRem CCPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(ZNAM, "LOC") +} + +record (bo,"EC-GN-P01-GAF-CCPS:PSU2320-RST") +{ + field(DESC, "GY1 CCPS reset device") + field(DTYP, "stream") + field(OUT, "@PWX1500ML.proto resetDevice CCPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") +} + +record (bi,"EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-RB") +{ + field(DESC, "GY1 CCPS signal source on") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getSourceON CCPS1") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-SP") +{ + field(DESC, "GY1 CCPS signal source on") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PWX1500ML.proto setSourceON CCPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAF-CCPS:PSU2320-STAT") +{ + field(DESC, "CCPS1 is running") + field(ONAM, "ON") + field(SCAN, "Passive") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-CCPS:PSU2320-TR") +{ + field(DESC, "GY1 CCPS in Operation") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-CCPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 CCPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-CCPS:STAT-SIMM") +{ + field(DESC, "GY1 CCPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (ai,"EC-GN-P01-GAF-CCPS:PSU2320-CURR-RB") +{ + field(DESC, "GY1 CCPS Output current readback") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "60.0") + field(INP, "@PWX1500ML.proto getCurr CCPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-CCPS:PSU2320-CURR-SP") +{ + field(DESC, "GY1 CCPS Output current setpoint") + field(DRVH, "58.8") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "58.8") + field(LOPR, "0") + field(OUT, "@PWX1500ML.proto setCurr CCPS1") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF-CCPS:PSU2320-DCV-RB") +{ + field(DESC, "GY1 CCPS DCV range readback") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(INP, "@PWX1500ML.proto getVolt CCPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-CCPS:PSU2320-DCV-SP") +{ + field(DESC, "GY1 CCPS Output DCV setpoint") + field(DRVH, "84") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "84") + field(LOPR, "0") + field(OUT, "@PWX1500ML.proto setVolt CCPS1") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-CCPS:PSU2320-EREF") +{ + field(DESC, "GY1 CCPS voltage setpoint") + field(DRVH, "80") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "80") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-CCPS:PSU2320-EREF-MSP") +{ + field(DESC, "GY1 CCPS voltage manual setpoint") + field(DRVH, "80") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "80") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (stringin,"EC-GN-P01-GAF-CCPS:PSU2320-ERROR") +{ + field(DESC, "GY1 CCPS Error message") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getError CCPS1") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") +} + +record (stringin,"EC-GN-P01-GAF-CCPS:PSU2320-IDN") +{ + field(DESC, "GY1 CCPS IDN") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto readDeviceID CCPS1") + field(PINI, "NO") + field(SCAN, "10 second") +} + +record (ai,"EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCI") +{ + field(DESC, "GY1 CCPS Measued DC Current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "58.8") + field(INP, "@PWX1500ML.proto getMeasDCI CCPS1") + field(LOPR, "-58.8") + field(PINI, "NO") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCV") +{ + field(DESC, "GY1 CCPS Measued DC Voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "200") + field(INP, "@PWX1500ML.proto getMeasDCV CCPS1") + field(LOPR, "-200") + field(PINI, "NO") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF-CCPS:STAT-AMP") +{ + field(DESC, "Amplitude") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "3.5") +} + +record (ai,"EC-GN-P01-GAF-CCPS:STAT-FREQ") +{ + field(DESC, "Frequency") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "1") +} + +record (ai,"EC-GN-P01-GAF-CCPS:STAT-OFFS") +{ + field(DESC, "Offset") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "1") +} + +record (calcout,"EC-GN-P01-GAF-CCPS:STAT-OP-CALC") +{ + field(CALC, "(A==1 || B==1 || C==1)?1:0; C:=B; B:=A") + field(DESC, "GYA CCPS operation check") + field(FLNK, "EC-GN-P01-GAF-CCPS:PSU2320-TR") + field(INPA, "EC-GN-P01-GAF-CCPS:STAT-OP-V-DIFF") + field(INPB, "0") + field(INPC, "0") + field(OUT, "EC-GN-P01-GAF-CCPS:PSU2320-TR") + field(SCAN, "Passive") +} + +record (calc,"EC-GN-P01-GAF-CCPS:STAT-OP-V-DIFF") +{ + field(CALC, "(A==1 andand ABS(B-C)>0.1)?1:0; C:=B") + field(DESC, "GYA CCPS operation check") + field(FLNK, "EC-GN-P01-GAF-CCPS:STAT-OP-CALC") + field(INPA, "EC-GN-P01-GAF-CCPS:PSU2320-OUTON-RB") + field(INPB, "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCV PP") + field(SCAN, ".1 second") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-FHPS-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-FHPS-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..6aee723 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-FHPS-iocEC-GN-PSH0PCF.db @@ -0,0 +1,424 @@ +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START") +{ + field(DESC, "Auto rampup start command") + field(HIGH, "0.1") + field(ONAM, "Start") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Stop") +} + +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-LOC") +{ + field(DESC, "Local control ON") + field(DTYP, "stream") + field(ONAM, "LOC") + field(OUT, "@PCR500LE.proto setLoc FHPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB") +{ + field(DESC, "Output ON readback") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto getOut FHPS1") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-OUTON-SP") +{ + field(DESC, "Output ON command") + field(DTYP, "stream") + field(ONAM, "REM") + field(OUT, "@PCR500LE.proto setOut FHPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-REM") +{ + field(DESC, "Remote control on") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PCR500LE.proto setRem FHPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-RST") +{ + field(DESC, "Reset command") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PCR500LE.proto resetDevice FHPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-RB") +{ + field(DESC, "External control readback") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto getSourceON FHPS1") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-SP") +{ + field(DESC, "External control ON command") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PCR500LE.proto setSourceON FHPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP") +{ + field(DESC, "GY1 FHPS rampup comp") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 FHPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:STAT-SIMM") +{ + field(DESC, "GY1 FHPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-ACV-RB") +{ + field(DESC, "Output Voltage readback") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(INP, "@PCR500LE.proto getVolt FHPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-ACV-SP") +{ + field(DESC, "Output voltage setpoint") + field(DRVH, "300") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(LOPR, "0") + field(OUT, "@PCR500LE.proto setVolt FHPS1") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-AUTO-RU-TIME") +{ + field(DESC, "Auto rampup time") + field(DRVH, "100000") + field(DRVL, "10") + field(EGU, "sec") + field(HOPR, "100000") + field(LOPR, "10") + field(PINI, "NO") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "30") +} + +record (mbbo,"EC-GN-P01-GAF-FHPS:PSU2610-AUTO-STAT") +{ + field(DESC, "Auto rampup status") + field(ONST, "IN OPERATION") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(THST, "ERROR") + field(THVL, "3") + field(TWST, "FINISH") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "NOT IN OPERATION") + field(ZRVL, "0") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV") +{ + field(DESC, "Auto rampup target voltage") + field(DRVH, "60") + field(DRVL, "0.0") + field(EGU, "V") + field(HOPR, "60.0") + field(LOPR, "0.0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(VAL, "5") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-CURR-RB") +{ + field(DESC, "Output Current readback") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "5") + field(INP, "@PCR500LE.proto getCurr FHPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-CURR-SP") +{ + field(DESC, "Output current setpoint") + field(DRVH, "5.0") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "5.0") + field(LOPR, "0") + field(OUT, "@PCR500LE.proto setCurr FHPS1") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-EREF") +{ + field(DESC, "GY1 FHPS voltage setpoint") + field(DRVH, "150") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "150") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-EREF-MSP") +{ + field(DESC, "GY1 FHPS voltage manual setpoint") + field(DRVH, "150") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "150") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (stringin,"EC-GN-P01-GAF-FHPS:PSU2610-ERROR") +{ + field(DESC, "Error code") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto getError FHPS1") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-FRQ-RB") +{ + field(DESC, "Output frequency readback") + field(DTYP, "stream") + field(EGU, "Hz") + field(HOPR, "1000") + field(INP, "@PCR500LE.proto getFreq FHPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-FRQ-SP") +{ + field(DESC, "Output frequency setpoint") + field(DRVH, "999.9") + field(DRVL, "1") + field(DTYP, "stream") + field(EGU, "Hz") + field(HOPR, "1000") + field(LOPR, "0") + field(OUT, "@PCR500LE.proto setFreq FHPS1") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "1") +} + +record (stringin,"EC-GN-P01-GAF-FHPS:PSU2610-IDN") +{ + field(DESC, "IDN") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto readDeviceID FHPS1") + field(PINI, "NO") + field(SCAN, "10 second") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACI") +{ + field(DESC, "Measued AC Current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "5.0") + field(INP, "@PCR500LE.proto getMeasACI FHPS1") + field(LOPR, "-5.0") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACP") +{ + field(DESC, "Measued AC Power") + field(DTYP, "stream") + field(EGU, "W") + field(HOPR, "500") + field(INP, "@PCR500LE.proto getMeasACP FHPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV") +{ + field(DESC, "Measued AC Voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(INP, "@PCR500LE.proto getMeasACV FHPS1") + field(LOPR, "-300") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-MEAS-FRQ") +{ + field(DESC, "Measued Frequency") + field(DTYP, "stream") + field(EGU, "Hz") + field(HOPR, "1000") + field(INP, "@PCR500LE.proto getMeasACF FHPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "1") +} + +record (calcout,"EC-GN-P01-GAF-FHPS:STAT-AUTO-MODE-SET") +{ + field(CALC, "A==1?0:1") + field(DESC, "GYA FHPS rampup comp off") + field(INPA, "EC-GN-P01-GAF:STAT-SM") + field(OOPT, "Transition To Zero") + field(OUT, "EC-GN-P01-GAF-FHPS:STAT-MANM PP") + field(SCAN, "1 second") +} + +record (waveform,"EC-GN-P01-GAF-FHPS:STAT-PREP-WF") +{ + field(DESC, "GY1 FHPS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CALC") +{ + field(CALC, "A==2?1:0") + field(DESC, "GYA FHPS rampup comp check") + field(INPA, "EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CMP") + field(OOPT, "When Non-zero") + field(OUT, "EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP PP") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CMP") +{ + field(CALC, "(ABS(A-B)<0.1*B)?2:((C > D)?1:0);D:=C") + field(DESC, "GYA FHPS rampup stat check") + field(FLNK, "EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CALC") + field(INPA, "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV") + field(INPB, "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV") + field(INPC, "EC-GN-P01-GAF-FHPS:PSU2610-EREF") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GAF-FHPS:STAT-RAMPUP-OFF") +{ + field(CALC, "A==0?0:1") + field(DESC, "GYA FHPS rampup comp off") + field(INPA, "EC-GN-P01-GPS:PLC4110-YTS-ST1R") + field(OOPT, "When Zero") + field(OUT, "EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP PP") + field(SCAN, "1 second") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-GCPS-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-GCPS-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..34f5d19 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-GCPS-iocEC-GN-PSH0PCF.db @@ -0,0 +1,273 @@ +record (bo,"EC-GN-P01-GAF-GCPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 GCPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-GCPS:STAT-SIMM") +{ + field(DESC, "GY1 GCPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (mbbi,"EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB") +{ + field(DESC, "GY1 GCPS read ACT") + field(DTYP, "stream") + field(FRST, "ZERO") + field(FRSV, "NO_ALARM") + field(FRVL, "4") + field(INP, "@JASTEC-SCMPS.proto readActivity GC1") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") + field(THST, "FLAT TOP") + field(THSV, "NO_ALARM") + field(THVL, "3") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP") +{ + field(DESC, "GY1 GCPS set ACT") + field(DTYP, "stream") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(OUT, "@JASTEC-SCMPS.proto setActivity GC1") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MI") +{ + field(DESC, "GY1 GCPS ACT set to Marte") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MO") +{ + field(DESC, "GY1 GCPS ACT Marte outputs") + field(FLNK, "EC-GN-P01-GAF-GCPS:STAT-ACT-SP-CALC") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (ai,"EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON") +{ + field(DESC, "GY1 GCPS monitored current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "125") + field(INP, "@JASTEC-SCMPS.proto readMeasCurrent GC1") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") +} + +record (waveform,"EC-GN-P01-GAF-GCPS:PSU2130-ERR") +{ + field(DESC, "GY1 GCPS read error") + field(DTYP, "stream") + field(INP, "@JASTEC-SCMPS.proto readErrStat GC1") + field(NELM, "15") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-GCPS:PSU2130-SWP-LIM") +{ + field(DESC, "GY1 GCPS read sweep limit") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readSweepLim GC1") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-GCPS:PSU2130-SWP-RB") +{ + field(DESC, "GY1 GCPS read targ sweep rate") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readTargSweep GC1") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-RB") +{ + field(DESC, "GY1 GCPS read target current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "120") + field(INP, "@JASTEC-SCMPS.proto readTargCurrent GC1") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET") +{ + field(DESC, "GY1 GCPS set target current") + field(DRVH, "120") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP") + field(HOPR, "125") + field(LOPR, "0") + field(OUT, "@JASTEC-SCMPS.proto setCurrent GC1") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MI") +{ + field(DESC, "GY1 GCPS target current input to Marte") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MO") +{ + field(DESC, "GY1 GCPS target current Marte outputs") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GAF-GCPS:STAT-TRG-CURR-SET-CALC") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-GCPS:PSU2130-TRG-SWPR-SET") +{ + field(DESC, "GY1 GCPS set target swwp rate") + field(DRVH, "5.0") + field(DRVL, "0.01") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(LOPR, "0.01") + field(OUT, "@JASTEC-SCMPS.proto setSweep GC1") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") + field(VAL, "1") +} + +record (ai,"EC-GN-P01-GAF-GCPS:PSU2130-VOLT-MON") +{ + field(DESC, "GY1 GCPS monitored voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "10") + field(INP, "@JASTEC-SCMPS.proto readMeasVoltage GC1") + field(LOPR, "-10") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") +} + +record (calcout,"EC-GN-P01-GAF-GCPS:STAT-ACT-SP-CALC") +{ + field(CALC, "A") + field(DESC, "GCPS#1 state set by Marte") + field(INPA, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-GAF-GCPS:STAT-PREP-WF") +{ + field(DESC, "GY1 GCPS prepro schedule") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-GAF-GCPS:STAT-TRG-CURR-SET-CALC") +{ + field(CALC, "A") + field(DESC, "GCPS#1 current set by Marte") + field(INPA, "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET PP") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-MCPS-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-MCPS-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..ed398a9 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-MCPS-iocEC-GN-PSH0PCF.db @@ -0,0 +1,331 @@ +record (bo,"EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN") +{ + field(DESC, "SCM rampdown comp") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP") +{ + field(DESC, "GY1 SCM rampup comp") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-MCPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 MCPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-MCPS:STAT-SIMM") +{ + field(DESC, "GY1 MCPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (mbbi,"EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB") +{ + field(DESC, "GY1 MCPS read ACT") + field(DTYP, "stream") + field(FRST, "ZERO") + field(FRSV, "NO_ALARM") + field(FRVL, "4") + field(INP, "@JASTEC-SCMPS.proto readActivity MC1") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") + field(THST, "FLAT TOP") + field(THSV, "NO_ALARM") + field(THVL, "3") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP") +{ + field(DESC, "GY1 MCPS set ACT") + field(DTYP, "stream") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(OUT, "@JASTEC-SCMPS.proto setActivity MC1") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MI") +{ + field(DESC, "GY1 MCPS ACT set to Marte") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MO") +{ + field(DESC, "GY1 MCPS ACT Marte outputs") + field(FLNK, "EC-GN-P01-GAF-MCPS:STAT-ACT-SP-CALC") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (ai,"EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON") +{ + field(DESC, "GY1 MCPS monitored current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "125") + field(INP, "@JASTEC-SCMPS.proto readMeasCurrent MC1") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") +} + +record (waveform,"EC-GN-P01-GAF-MCPS:PSU2120-ERR") +{ + field(DESC, "GY1 MCPS read error") + field(DTYP, "stream") + field(INP, "@JASTEC-SCMPS.proto readErrStat MC1") + field(NELM, "15") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-MCPS:PSU2120-SWP-LIM") +{ + field(DESC, "GY1 MCPS read sweep limit") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readSweepLim MC1") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-MCPS:PSU2120-SWP-RB") +{ + field(DESC, "GY1 MCPS read targ sweep rate") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readTargSweep MC1") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-RB") +{ + field(DESC, "GY1 MCPS read target current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "120") + field(INP, "@JASTEC-SCMPS.proto readTargCurrent MC1") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET") +{ + field(DESC, "GY1 MCPS set target current") + field(DRVH, "120") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP") + field(HOPR, "125") + field(LOPR, "0") + field(OUT, "@JASTEC-SCMPS.proto setCurrent MC1") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MI") +{ + field(DESC, "GY1 MCPS target current input to Marte") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MO") +{ + field(DESC, "GY1 MCPS target current Marte outputs") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GAF-MCPS:STAT-TRG-CURR-SET-CALC") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-MCPS:PSU2120-TRG-SWPR-SET") +{ + field(DESC, "GY1 MCPS set target swwp rate") + field(DRVH, "5.0") + field(DRVL, "0.01") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(LOPR, "0.01") + field(OUT, "@JASTEC-SCMPS.proto setSweep MC1") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") + field(VAL, "1.69") +} + +record (ai,"EC-GN-P01-GAF-MCPS:PSU2120-VOLT-MON") +{ + field(DESC, "GY1 MCPS monitored voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "10") + field(INP, "@JASTEC-SCMPS.proto readMeasVoltage MC1") + field(LOPR, "-10") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") +} + +record (calcout,"EC-GN-P01-GAF-MCPS:STAT-ACT-SP-CALC") +{ + field(CALC, "A") + field(DESC, "MCPS#1 state set by Marte") + field(INPA, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-GAF-MCPS:STAT-PREP-WF") +{ + field(DESC, "GY1 MCPS prepro schedule") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-GAF-MCPS:STAT-RAMPDWN-CMP") +{ + field(CALC, "(A==4 andand B==4 and C==4 andand D==4)?1:0") + field(DESC, "SMCPS ramp down check") + field(FLNK, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN") + field(INPA, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB") + field(INPB, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB") + field(INPC, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB") + field(INPD, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GAF-MCPS:STAT-RAMPUP-CMP") +{ + field(CALC, "(A==3 andand B==3)?1:0") + field(DESC, "GYA SCMPS rampup check") + field(FLNK, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP") + field(INPA, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB") + field(INPB, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB") + field(OOPT, "When Non-zero") + field(OUT, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GAF-MCPS:STAT-RAMPUP-OFF") +{ + field(CALC, "A==0?0:1") + field(DESC, "GYA MC GC rampup comp off") + field(INPA, "EC-GN-P01-GPS:PLC4110-YTS-ST1R") + field(OOPT, "When Zero") + field(OUT, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP PP") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GAF-MCPS:STAT-TRG-CURR-SET-CALC") +{ + field(CALC, "A") + field(DESC, "MCPS#1 current set by Marte") + field(INPA, "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET PP") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..fb91d7c --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAF-iocEC-GN-PSH0PCF.db @@ -0,0 +1,389 @@ +record (bi,"EC-GN-P01-GAF:DIO4900-YON") +{ + field(DESC, "GY1 External trigger") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 22) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF:STAT-AI-SIMM") +{ + field(DESC, "GY1 AI Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GAF:STAT-AO-SIMM") +{ + field(DESC, "GY1 AO Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GAF:STAT-CSV-LOAD") +{ + field(DESC, "File load trigger") + field(HIGH, "0.1") + field(ONAM, "Loading") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Load") +} + +record (bo,"EC-GN-P01-GAF:STAT-CSV-LOADED") +{ + field(DESC, "File load status") + field(ONAM, "Loaded") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Loading") +} + +record (bo,"EC-GN-P01-GAF:STAT-DI-SIMM") +{ + field(DESC, "GY1 DI Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GAF:STAT-DO-SIMM") +{ + field(DESC, "GY1 DO Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GAF:STAT-DT-SHOTLEN-EGU") +{ + field(DESC, "GY1 egu of shot length") + field(FLNK, "EC-GN-P01-GAF:STAT-DT-SHOTLEN-CALC") + field(ONAM, "s") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "ms") +} + +record (bo,"EC-GN-P01-GAF:STAT-MST-TRIG") +{ + field(DESC, "GY1 Master trigger") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF:STAT-PREP-MODE") +{ + field(DESC, "GY1 Pre-Pro mode ON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF:STAT-SHORT-PULSE") +{ + field(DESC, "GY1 Short Pulse Mode") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF:STAT-TRIG-SOUR") +{ + field(DESC, "GY1 External Trigger Mode SW") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (ai,"EC-GN-P01-GAF:MOE2810-ET") +{ + field(DESC, "GY1 Arc detect signal 1") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GAF:MOE2810-ET-WF") +{ + field(DESC, "GY1 Arc detect signal 1") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GAF:MOE2820-ET") +{ + field(DESC, "GY1 Arc detect signal 2") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GAF:MOE2820-ET-WF") +{ + field(DESC, "GY1 Arc detect signal 2") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GAF:MOE2830-ET") +{ + field(DESC, "GY1 Arc detect signal 3") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GAF:MOE2830-ET-WF") +{ + field(DESC, "GY1 Arc detect signal 3") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GAF:MRF2910-ET") +{ + field(DESC, "GY1 RF Signal") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GAF:MRF2910-ET-WF") +{ + field(DESC, "GY1 RF Signal") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GAF:STAT-BEAMON-TIME") +{ + field(DESC, "GY1 Beam ON time") + field(EGU, "us") + field(HOPR, "3600000000") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (mbbo,"EC-GN-P01-GAF:STAT-CSV-ERR") +{ + field(DESC, "File load error status") + field(FRST, "Format error") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FVST, "Out of range") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(ONST, "Successfully loaded") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(THST, "Empty data") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "Failed to open") + field(TWSV, "MAJOR") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "Not loaded yet") + field(ZRSV, "MINOR") + field(ZRVL, "0") +} + +record (stringout,"EC-GN-P01-GAF:STAT-CSV-NAME") +{ + field(DESC, "CSV file name") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "shot000000") +} + +record (ai,"EC-GN-P01-GAF:STAT-DT-SHOTLEN") +{ + field(DESC, "GY1 Shot length") + field(EGU, "us") + field(HOPR, "3600000000") + field(LOPR, "100") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "1000000") +} + +record (calcout,"EC-GN-P01-GAF:STAT-DT-SHOTLEN-CALC") +{ + field(CALC, "(!A)?1000*B:1000000*B") + field(DESC, "GY1 shot length convert") + field(FLNK, "EC-GN-P01-GAF:STAT-DT-SHOTLEN") + field(INPA, "EC-GN-P01-GAF:STAT-DT-SHOTLEN-EGU") + field(INPB, "EC-GN-P01-GAF:STAT-DT-SHOTLEN-DAM") + field(OUT, "EC-GN-P01-GAF:STAT-DT-SHOTLEN") + field(SCAN, "Passive") +} + +record (ao,"EC-GN-P01-GAF:STAT-DT-SHOTLEN-DAM") +{ + field(DESC, "GY1 shot length without unit") + field(DRVH, "3600") + field(DRVL, "0") + field(FLNK, "EC-GN-P01-GAF:STAT-DT-SHOTLEN-CALC") + field(HOPR, "3600") + field(LOPR, "0") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF:STAT-ELAPSED") +{ + field(DESC, "GY1 Elapsed time") + field(EGU, "us") + field(HOPR, "4000000000") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (longin,"EC-GN-P01-GAF:STAT-PREHEAT-TIME") +{ + field(DESC, "Pre-heating time") + field(HOPR, "999999") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (waveform,"EC-GN-P01-GAF:STAT-PREP-TIME-WF") +{ + field(DESC, "GY1 prepro time schedule") + field(EGU, "ms") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "0") + field(SCAN, "Passive") +} + +record (fanout,"EC-GN-P01-GAF:STAT-SHOT-FLNK1") +{ + field(DESC, "GY1 fanout1 to AI waveform signal") +} + +record (fanout,"EC-GN-P01-GAF:STAT-SHOT-FLNK2") +{ + field(DESC, "GY1 fanout2 to AI waveform signal") +} + +record (longin,"EC-GN-P01-GAF:STAT-SHOT-ID") +{ + field(DESC, "GY1 shot ID") + field(HOPR, "999999") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (calcout,"EC-GN-P01-GAF:STAT-SHOT-PLOT") +{ + field(CALC, "A andand (B >= C)") + field(DESC, "GY1 judge to plot measured values") + field(INPA, "EC-GN-P01-GPS:PLC4110-YTS-ST3R") + field(INPB, "EC-GN-P01-GAF:STAT-BEAMON-TIME") + field(INPC, "6000000") + field(OOPT, "Transition To Non-zero") + field(OUT, "EC-GN-P01-GAF:STAT-SHOT-FLNK1 PP") + field(SCAN, ".1 second") +} + +record (mbbi,"EC-GN-P01-GAF:STAT-SM") +{ + field(DESC, "GY#1 state machine") + field(EIST, "WaitHVON_SDN") + field(EIVL, "8") + field(FLNK, "EC-GN-P01-GAF:STAT-SHOT-PLOT") + field(FRST, "WaitReady") + field(FRVL, "4") + field(FVST, "WaitPermit") + field(FVVL, "5") + field(NIST, "WaitHVON_SDN_PREP") + field(NIVL, "9") + field(ONST, "Error") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(SVST, "WaitHVON_PREP") + field(SVVL, "7") + field(SXST, "WaitHVON") + field(SXVL, "6") + field(THST, "WaitStandby") + field(THVL, "3") + field(TWST, "Disabled") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "Init") + field(ZRVL, "0") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAFP-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAFP-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..c7cdc88 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GAFP-iocEC-GN-PSH0PCF.db @@ -0,0 +1,146 @@ +record (bi,"EC-GN-P01-GAFP:FMC4310-RV1") +{ + field(DESC, "Reserved for cRIO") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 11) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAFP:FMC4310-RV2") +{ + field(DESC, "Reserved for cRIO") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 12) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAFP:FMC4310-RV3") +{ + field(DESC, "Reserved for cRIO") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 13) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAFP:FMC4310-RV5") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAFP:FMC4310-RV6") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAFP:FMC4310-RV7") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAFP:FMC4310-RV8") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAFP:FMC4310-YFLT-OC") +{ + field(DESC, "MHVPS OC Detected") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 5) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-GAFP:FMC4310-YFLT-OV") +{ + field(DESC, "MHVPS OV Detected") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 4) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bo,"EC-GN-P01-GAFP:FMC4310-YSTA-GAOP") +{ + field(DESC, "GY1 Beam ON Status") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAFP:FMC4310-YTRP") +{ + field(DESC, "Interlock from fast protection 1") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 9) bitread") + field(ONAM, "INTERLOCK") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-GAFP:FMC4310-YTRP2") +{ + field(DESC, "Pause signal from Fast Protection 1") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 10) bitread") + field(ONAM, "PAUSE") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-CCPS-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-CCPS-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..354029a --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-CCPS-iocEC-GN-PSH0PCF.db @@ -0,0 +1,310 @@ +record (bi,"EC-GN-P01-GBF-CCPS:PSU2320-OUTON-RB") +{ + field(DESC, "GY2 CCPS Output ON status") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getOut CCPS2") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-CCPS:PSU2320-OUTON-SP") +{ + field(DESC, "GY2 CCPS Output ON") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PWX1500ML.proto setOut CCPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-RB") +{ + field(DESC, "GY2 CCPS remote readback") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getRem CCPS2") + field(ONAM, "REM") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(ZNAM, "LOC") +} + +record (bo,"EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-SP") +{ + field(DESC, "GY2 CCPS remote control on") + field(DTYP, "stream") + field(ONAM, "REM") + field(OUT, "@PWX1500ML.proto setRem CCPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(ZNAM, "LOC") +} + +record (bo,"EC-GN-P01-GBF-CCPS:PSU2320-RST") +{ + field(DESC, "GY2 CCPS reset device") + field(DTYP, "stream") + field(OUT, "@PWX1500ML.proto resetDevice CCPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") +} + +record (bi,"EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-RB") +{ + field(DESC, "GY2 CCPS signal source on") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getSourceON CCPS2") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-SP") +{ + field(DESC, "GY2 CCPS signal source on") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PWX1500ML.proto setSourceON CCPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBF-CCPS:PSU2320-STAT") +{ + field(DESC, "CCPS2 is running") + field(ONAM, "ON") + field(SCAN, "Passive") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-CCPS:PSU2320-TR") +{ + field(DESC, "GY2 CCPS in Operation") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-CCPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY2 CCPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-CCPS:STAT-SIMM") +{ + field(DESC, "GY2 CCPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (ai,"EC-GN-P01-GBF-CCPS:PSU2320-CURR-RB") +{ + field(DESC, "GY2 CCPS Output current readback") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "60.0") + field(INP, "@PWX1500ML.proto getCurr CCPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-CCPS:PSU2320-CURR-SP") +{ + field(DESC, "GY2 CCPS Output current setpoint") + field(DRVH, "58.8") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "58.8") + field(LOPR, "0") + field(OUT, "@PWX1500ML.proto setCurr CCPS2") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-CCPS:PSU2320-DCV-RB") +{ + field(DESC, "GY2 CCPS V range readback") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(INP, "@PWX1500ML.proto getVolt CCPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-CCPS:PSU2320-DCV-SP") +{ + field(DESC, "GY2 CCPS V range readback") + field(DRVH, "84") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "84") + field(LOPR, "0") + field(OUT, "@PWX1500ML.proto setVolt CCPS2") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-CCPS:PSU2320-EREF") +{ + field(DESC, "GY2 CCPS voltage setpoint") + field(DRVH, "80") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "80") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-CCPS:PSU2320-EREF-MSP") +{ + field(DESC, "GY2 CCPS voltage manual setpoint") + field(DRVH, "80") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "80") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (stringin,"EC-GN-P01-GBF-CCPS:PSU2320-ERROR") +{ + field(DESC, "GY2 CCPS Error message") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getError CCPS2") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") +} + +record (stringin,"EC-GN-P01-GBF-CCPS:PSU2320-IDN") +{ + field(DESC, "GY2 CCPS IDN") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto readDeviceID CCPS2") + field(PINI, "NO") + field(SCAN, "10 second") +} + +record (ai,"EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCI") +{ + field(DESC, "GY2 CCPS Measued DC Current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "58.8") + field(INP, "@PWX1500ML.proto getMeasDCI CCPS2") + field(LOPR, "-58.8") + field(PINI, "NO") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCV") +{ + field(DESC, "GY2 CCPS Measued DC Voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "200") + field(INP, "@PWX1500ML.proto getMeasDCV CCPS2") + field(LOPR, "-200") + field(PINI, "NO") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-CCPS:STAT-AMP") +{ + field(DESC, "Amplitude") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "3.5") +} + +record (ai,"EC-GN-P01-GBF-CCPS:STAT-FREQ") +{ + field(DESC, "Frequency") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "1") +} + +record (ai,"EC-GN-P01-GBF-CCPS:STAT-OFFS") +{ + field(DESC, "Offset") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "1") +} + +record (calcout,"EC-GN-P01-GBF-CCPS:STAT-OP-CALC") +{ + field(CALC, "(A==1 || B==1 || C==1)?1:0; C:=B; B:=A") + field(DESC, "GYB CCPS operation check") + field(FLNK, "EC-GN-P01-GBF-CCPS:PSU2320-TR") + field(INPA, "EC-GN-P01-GBF-CCPS:STAT-OP-V-DIFF") + field(INPB, "0") + field(INPC, "0") + field(OUT, "EC-GN-P01-GBF-CCPS:PSU2320-TR") + field(SCAN, "Passive") +} + +record (calc,"EC-GN-P01-GBF-CCPS:STAT-OP-V-DIFF") +{ + field(CALC, "(A==1 andand ABS(B-C)>0.1)?1:0; C:=B") + field(DESC, "GYB CCPS operation check") + field(FLNK, "EC-GN-P01-GBF-CCPS:STAT-OP-CALC") + field(INPA, "EC-GN-P01-GBF-CCPS:PSU2320-OUTON-RB") + field(INPB, "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCV PP") + field(SCAN, ".1 second") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-FHPS-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-FHPS-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..0b30380 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-FHPS-iocEC-GN-PSH0PCF.db @@ -0,0 +1,424 @@ +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START") +{ + field(DESC, "Auto rampup start command") + field(HIGH, "0.1") + field(ONAM, "Start") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Stop") +} + +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-LOC") +{ + field(DESC, "Local control on") + field(DTYP, "stream") + field(ONAM, "LOC") + field(OUT, "@PCR500LE.proto setLoc FHPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB") +{ + field(DESC, "Output ON readback") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto getOut FHPS2") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-OUTON-SP") +{ + field(DESC, "Output ON command") + field(DTYP, "stream") + field(ONAM, "REM") + field(OUT, "@PCR500LE.proto setOut FHPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-REM") +{ + field(DESC, "Remote control on") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PCR500LE.proto setRem FHPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-RST") +{ + field(DESC, "Reset command") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PCR500LE.proto resetDevice FHPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-RB") +{ + field(DESC, "External control readback") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto getSourceON FHPS2") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-SP") +{ + field(DESC, "External control ON command") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PCR500LE.proto setSourceON FHPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP") +{ + field(DESC, "GY2 FHPS rampup comp") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY2 FHPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:STAT-SIMM") +{ + field(DESC, "GY2 FHPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-ACV-RB") +{ + field(DESC, "Output Voltage readback") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(INP, "@PCR500LE.proto getVolt FHPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-ACV-SP") +{ + field(DESC, "Output voltage setpoint") + field(DRVH, "300") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(LOPR, "0") + field(OUT, "@PCR500LE.proto setVolt FHPS2") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-AUTO-RU-TIME") +{ + field(DESC, "Auto rampup time") + field(DRVH, "100000") + field(DRVL, "10") + field(EGU, "sec") + field(HOPR, "100000") + field(LOPR, "10") + field(PINI, "NO") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "30") +} + +record (mbbo,"EC-GN-P01-GBF-FHPS:PSU2610-AUTO-STAT") +{ + field(DESC, "Auto rampup status") + field(ONST, "IN OPERATION") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(THST, "ERROR") + field(THVL, "3") + field(TWST, "FINISH") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "NOT IN OPERATION") + field(ZRVL, "0") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV") +{ + field(DESC, "Auto rampup target voltage") + field(DRVH, "300") + field(DRVL, "0.0") + field(EGU, "V") + field(HOPR, "60.0") + field(LOPR, "0.0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-CURR-RB") +{ + field(DESC, "Output Current readback") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "5") + field(INP, "@PCR500LE.proto getCurr FHPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-CURR-SP") +{ + field(DESC, "Output current setpoint") + field(DRVH, "5.0") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "5.0") + field(LOPR, "0") + field(OUT, "@PCR500LE.proto setCurr FHPS2") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-EREF") +{ + field(DESC, "GY2 FHPS voltage setpoint") + field(DRVH, "150") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "150") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-EREF-MSP") +{ + field(DESC, "GY2 FHPS voltage manual setpoint") + field(DRVH, "150") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "150") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (stringin,"EC-GN-P01-GBF-FHPS:PSU2610-ERROR") +{ + field(DESC, "Error code") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto getError FHPS2") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-FRQ-RB") +{ + field(DESC, "Output frequency readback") + field(DTYP, "stream") + field(EGU, "Hz") + field(HOPR, "1000") + field(INP, "@PCR500LE.proto getFreq FHPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-FRQ-SP") +{ + field(DESC, "Output frequency setpoint") + field(DRVH, "999.9") + field(DRVL, "1") + field(DTYP, "stream") + field(EGU, "Hz") + field(HOPR, "1000") + field(LOPR, "0") + field(OUT, "@PCR500LE.proto setFreq FHPS2") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "1") +} + +record (stringin,"EC-GN-P01-GBF-FHPS:PSU2610-IDN") +{ + field(DESC, "IDN") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto readDeviceID FHPS2") + field(PINI, "NO") + field(SCAN, "10 second") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACI") +{ + field(DESC, "Measued AC Current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "5.0") + field(INP, "@PCR500LE.proto getMeasACI FHPS2") + field(LOPR, "-5.0") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACP") +{ + field(DESC, "Measued AC Power") + field(DTYP, "stream") + field(EGU, "W") + field(HOPR, "500") + field(INP, "@PCR500LE.proto getMeasACP FHPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV") +{ + field(DESC, "Measued AC Voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(INP, "@PCR500LE.proto getMeasACV FHPS2") + field(LOPR, "-300") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-MEAS-FRQ") +{ + field(DESC, "Measued Frequency") + field(DTYP, "stream") + field(EGU, "Hz") + field(HOPR, "1000") + field(INP, "@PCR500LE.proto getMeasACF FHPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "1") +} + +record (calcout,"EC-GN-P01-GBF-FHPS:STAT-AUTO-MODE-SET") +{ + field(CALC, "A==1?0:1") + field(DESC, "GYB FHPS rampup comp off") + field(INPA, "EC-GN-P01-GBF:STAT-SM") + field(OOPT, "Transition To Zero") + field(OUT, "EC-GN-P01-GBF-FHPS:STAT-MANM PP") + field(SCAN, "1 second") +} + +record (waveform,"EC-GN-P01-GBF-FHPS:STAT-PREP-WF") +{ + field(DESC, "GY2 FHPS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CALC") +{ + field(CALC, "A==2?1:0") + field(DESC, "GYB FHPS rampup comp check") + field(INPA, "EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CMP") + field(OOPT, "When Non-zero") + field(OUT, "EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP PP") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CMP") +{ + field(CALC, "(ABS(A-B)<0.1*B)?2:((C > D)?1:0);D:=C") + field(DESC, "GYB FHPS rampup stat check") + field(FLNK, "EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CALC") + field(INPA, "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV") + field(INPB, "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV") + field(INPC, "EC-GN-P01-GBF-FHPS:PSU2610-EREF") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GBF-FHPS:STAT-RAMPUP-OFF") +{ + field(CALC, "A==0?0:1") + field(DESC, "GYB FHPS rampup comp off") + field(INPA, "EC-GN-P01-GPS:PLC4110-YTS-ST1R") + field(OOPT, "When Zero") + field(OUT, "EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP PP") + field(SCAN, "1 second") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-GCPS-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-GCPS-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..ec4fc1c --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-GCPS-iocEC-GN-PSH0PCF.db @@ -0,0 +1,273 @@ +record (bo,"EC-GN-P01-GBF-GCPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY2 GCPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-GCPS:STAT-SIMM") +{ + field(DESC, "GY2 GCPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (mbbi,"EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB") +{ + field(DESC, "GY2 GCPS read act") + field(DTYP, "stream") + field(FRST, "ZERO") + field(FRSV, "NO_ALARM") + field(FRVL, "4") + field(INP, "@JASTEC-SCMPS.proto readActivity GC2") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") + field(THST, "FLAT TOP") + field(THSV, "NO_ALARM") + field(THVL, "3") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP") +{ + field(DESC, "GY2 GCPS set ACT") + field(DTYP, "stream") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(OUT, "@JASTEC-SCMPS.proto setActivity GC2") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MI") +{ + field(DESC, "GY2 GCPS ACT set to Marte") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MO") +{ + field(DESC, "GY2 GCPS ACT Marte outputs") + field(FLNK, "EC-GN-P01-GBF-GCPS:STAT-ACT-SP-CALC") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (ai,"EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON") +{ + field(DESC, "GY2 GCPS monitored current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "125") + field(INP, "@JASTEC-SCMPS.proto readMeasCurrent GC2") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") +} + +record (waveform,"EC-GN-P01-GBF-GCPS:PSU2130-ERR") +{ + field(DESC, "GY2 GCPS read error") + field(DTYP, "stream") + field(INP, "@JASTEC-SCMPS.proto readErrStat GC2") + field(NELM, "15") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-GCPS:PSU2130-SWP-LIM") +{ + field(DESC, "GY2 GCPS read sweep limit") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readSweepLim GC2") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-GCPS:PSU2130-SWP-RB") +{ + field(DESC, "GY2 GCPS read targ sweep rate") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readTargSweep GC2") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-RB") +{ + field(DESC, "GY2 GCPS read target current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "120") + field(INP, "@JASTEC-SCMPS.proto readTargCurrent GC2") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET") +{ + field(DESC, "GY2 GCPS set target current") + field(DRVH, "120") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP") + field(HOPR, "125") + field(LOPR, "0") + field(OUT, "@JASTEC-SCMPS.proto setCurrent GC2") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MI") +{ + field(DESC, "GY2 GCPS target current input to Marte") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MO") +{ + field(DESC, "GY2 GCPS target current Marte outputs") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GBF-GCPS:STAT-TRG-CURR-SET-CALC") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-GCPS:PSU2130-TRG-SWPR-SET") +{ + field(DESC, "GY2 GCPS set target swwp rate") + field(DRVH, "5.0") + field(DRVL, "0.01") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(LOPR, "0.01") + field(OUT, "@JASTEC-SCMPS.proto setSweep GC2") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") + field(VAL, "1") +} + +record (ai,"EC-GN-P01-GBF-GCPS:PSU2130-VOLT-MON") +{ + field(DESC, "GY2 GCPS monitored voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "10") + field(INP, "@JASTEC-SCMPS.proto readMeasVoltage GC2") + field(LOPR, "-10") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") +} + +record (calcout,"EC-GN-P01-GBF-GCPS:STAT-ACT-SP-CALC") +{ + field(CALC, "A") + field(DESC, "GCPS#2 state set by Marte") + field(INPA, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-GBF-GCPS:STAT-PREP-WF") +{ + field(DESC, "GY2 GCPS prepro schedule") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-GBF-GCPS:STAT-TRG-CURR-SET-CALC") +{ + field(CALC, "A") + field(DESC, "GCPS#2 current set by Mate") + field(INPA, "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET PP") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-MCPS-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-MCPS-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..d766295 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-MCPS-iocEC-GN-PSH0PCF.db @@ -0,0 +1,306 @@ +record (bo,"EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP") +{ + field(DESC, "GY2 SCM rampup comp") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-MCPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY2 MCPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-MCPS:STAT-SIMM") +{ + field(DESC, "GY2 MCPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (mbbi,"EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB") +{ + field(DESC, "GY2 MCPS read act") + field(DTYP, "stream") + field(FRST, "ZERO") + field(FRSV, "NO_ALARM") + field(FRVL, "4") + field(INP, "@JASTEC-SCMPS.proto readActivity MC2") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") + field(THST, "FLAT TOP") + field(THSV, "NO_ALARM") + field(THVL, "3") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP") +{ + field(DESC, "GY2 MCPS set ACT") + field(DTYP, "stream") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(OUT, "@JASTEC-SCMPS.proto setActivity MC2") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MI") +{ + field(DESC, "GY2 MCPS ACT set to Marte") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MO") +{ + field(DESC, "GY2 MCPS ACT Marte outputs") + field(FLNK, "EC-GN-P01-GBF-MCPS:STAT-ACT-SP-CALC") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (ai,"EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON") +{ + field(DESC, "GY2 MCPS monitored current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "125") + field(INP, "@JASTEC-SCMPS.proto readMeasCurrent MC2") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") +} + +record (waveform,"EC-GN-P01-GBF-MCPS:PSU2120-ERR") +{ + field(DESC, "GY2 MCPS read error") + field(DTYP, "stream") + field(INP, "@JASTEC-SCMPS.proto readErrStat MC2") + field(NELM, "15") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-MCPS:PSU2120-SWP-LIM") +{ + field(DESC, "GY2 MCPS read sweep limit") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readSweepLim MC2") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-MCPS:PSU2120-SWP-RB") +{ + field(DESC, "GY2 MCPS read targ sweep rate") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readTargSweep MC2") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-RB") +{ + field(DESC, "GY2 MCPS read target current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "120") + field(INP, "@JASTEC-SCMPS.proto readTargCurrent MC2") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET") +{ + field(DESC, "GY2 MCPS set target current") + field(DRVH, "120") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP") + field(HOPR, "125") + field(LOPR, "0") + field(OUT, "@JASTEC-SCMPS.proto setCurrent MC2") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MI") +{ + field(DESC, "GY2 MCPS target current input to Marte") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MO") +{ + field(DESC, "GY2 MCPS target current Marte outputs") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GBF-MCPS:STAT-TRG-CURR-SET-CALC") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-MCPS:PSU2120-TRG-SWPR-SET") +{ + field(DESC, "GY2 MCPS set target swwp rate") + field(DRVH, "5.0") + field(DRVL, "0.01") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(LOPR, "0.01") + field(OUT, "@JASTEC-SCMPS.proto setSweep MC2") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") + field(VAL, "1.69") +} + +record (ai,"EC-GN-P01-GBF-MCPS:PSU2120-VOLT-MON") +{ + field(DESC, "GY2 MCPS monitored voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "10") + field(INP, "@JASTEC-SCMPS.proto readMeasVoltage MC2") + field(LOPR, "-10") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") +} + +record (calcout,"EC-GN-P01-GBF-MCPS:STAT-ACT-SP-CALC") +{ + field(CALC, "A") + field(DESC, "MCPS#2 state set by Marte") + field(INPA, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-GBF-MCPS:STAT-PREP-WF") +{ + field(DESC, "GY2 MCPS prepro schedule") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-GBF-MCPS:STAT-RAMPUP-CMP") +{ + field(CALC, "(A==3 andand B==3)?1:0") + field(DESC, "GYB SMCPS rampup check") + field(FLNK, "EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP") + field(INPA, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB") + field(INPB, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB") + field(OOPT, "When Non-zero") + field(OUT, "EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GBF-MCPS:STAT-RAMPUP-OFF") +{ + field(CALC, "A==0?0:1") + field(DESC, "GYB MC GC rampup comp off") + field(INPA, "EC-GN-P01-GPS:PLC4110-YTS-ST1R") + field(OOPT, "When Zero") + field(OUT, "EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP PP") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GBF-MCPS:STAT-TRG-CURR-SET-CALC") +{ + field(CALC, "A") + field(DESC, "MCPS#2 current set by Marte") + field(INPA, "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET PP") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..4ff855f --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBF-iocEC-GN-PSH0PCF.db @@ -0,0 +1,389 @@ +record (bi,"EC-GN-P01-GBF:DIO4900-YON") +{ + field(DESC, "GY3 External trigger") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 22) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF:STAT-AI-SIMM") +{ + field(DESC, "GY2 AI Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GBF:STAT-AO-SIMM") +{ + field(DESC, "GY2 AO Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GBF:STAT-CSV-LOAD") +{ + field(DESC, "File load trigger") + field(HIGH, "0.1") + field(ONAM, "Loading") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Load") +} + +record (bo,"EC-GN-P01-GBF:STAT-CSV-LOADED") +{ + field(DESC, "File load status") + field(ONAM, "Loaded") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Loading") +} + +record (bo,"EC-GN-P01-GBF:STAT-DI-SIMM") +{ + field(DESC, "GY2 DI Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GBF:STAT-DO-SIMM") +{ + field(DESC, "GY2 DO Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GBF:STAT-DT-SHOTLEN-EGU") +{ + field(DESC, "GY2 egu of shot length") + field(FLNK, "EC-GN-P01-GBF:STAT-DT-SHOTLEN-CALC") + field(ONAM, "s") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "ms") +} + +record (bo,"EC-GN-P01-GBF:STAT-MST-TRIG") +{ + field(DESC, "GY2 Master trigger") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF:STAT-PREP-MODE") +{ + field(DESC, "GY2 Pre-Pro mode ON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF:STAT-SHORT-PULSE") +{ + field(DESC, "GY2 Short Pulse Mode") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF:STAT-TRIG-SOUR") +{ + field(DESC, "GY2 External Trigger Mode SW") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (ai,"EC-GN-P01-GBF:MOE2810-ET") +{ + field(DESC, "GY2 Arc detect signal 1") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GBF:MOE2810-ET-WF") +{ + field(DESC, "GY2 Arc detect signal 1") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GBF:MOE2820-ET") +{ + field(DESC, "GY2 Arc detect signal 2") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GBF:MOE2820-ET-WF") +{ + field(DESC, "GY2 Arc detect signal 2") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GBF:MOE2830-ET") +{ + field(DESC, "GY2 Arc detect signal 3") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GBF:MOE2830-ET-WF") +{ + field(DESC, "GY2 Arc detect signal 3") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GBF:MRF2910-ET") +{ + field(DESC, "GY2 RF Signal") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GBF:MRF2910-ET-WF") +{ + field(DESC, "GY2 RF Signal") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GBF:STAT-BEAMON-TIME") +{ + field(DESC, "GY2 Beam ON time") + field(EGU, "us") + field(HOPR, "3600000000") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (mbbo,"EC-GN-P01-GBF:STAT-CSV-ERR") +{ + field(DESC, "File load error status") + field(FRST, "Format error") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FVST, "Out of range") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(ONST, "Successfully loaded") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(THST, "Empty data") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "Failed to open") + field(TWSV, "MAJOR") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "Not loaded yet") + field(ZRSV, "MINOR") + field(ZRVL, "0") +} + +record (stringout,"EC-GN-P01-GBF:STAT-CSV-NAME") +{ + field(DESC, "CSV file name") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "shot000000") +} + +record (ai,"EC-GN-P01-GBF:STAT-DT-SHOTLEN") +{ + field(DESC, "GY2 Shot length") + field(EGU, "us") + field(HOPR, "3600000000") + field(LOPR, "100") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "1000000") +} + +record (calcout,"EC-GN-P01-GBF:STAT-DT-SHOTLEN-CALC") +{ + field(CALC, "(!A)?1000*B:1000000*B") + field(DESC, "GY2 shot length convert") + field(FLNK, "EC-GN-P01-GBF:STAT-DT-SHOTLEN") + field(INPA, "EC-GN-P01-GBF:STAT-DT-SHOTLEN-EGU") + field(INPB, "EC-GN-P01-GBF:STAT-DT-SHOTLEN-DAM") + field(OUT, "EC-GN-P01-GBF:STAT-DT-SHOTLEN") + field(SCAN, "Passive") +} + +record (ao,"EC-GN-P01-GBF:STAT-DT-SHOTLEN-DAM") +{ + field(DESC, "GY2 shot length without unit") + field(DRVH, "3600") + field(DRVL, "0") + field(FLNK, "EC-GN-P01-GBF:STAT-DT-SHOTLEN-CALC") + field(HOPR, "3600") + field(LOPR, "0") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF:STAT-ELAPSED") +{ + field(DESC, "GY2 Elapsed time") + field(EGU, "us") + field(HOPR, "4000000000") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (longin,"EC-GN-P01-GBF:STAT-PREHEAT-TIME") +{ + field(DESC, "Pre-heating time") + field(HOPR, "999999") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (waveform,"EC-GN-P01-GBF:STAT-PREP-TIME-WF") +{ + field(DESC, "GY2 prepro time schedule") + field(EGU, "ms") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "0") + field(SCAN, "Passive") +} + +record (fanout,"EC-GN-P01-GBF:STAT-SHOT-FLNK1") +{ + field(DESC, "GY2 fanout1 to AI waveform signal") +} + +record (fanout,"EC-GN-P01-GBF:STAT-SHOT-FLNK2") +{ + field(DESC, "GY2 fanout2 to AI waveform signal") +} + +record (longin,"EC-GN-P01-GBF:STAT-SHOT-ID") +{ + field(DESC, "GY2 shot ID") + field(HOPR, "999999") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (calcout,"EC-GN-P01-GBF:STAT-SHOT-PLOT") +{ + field(CALC, "A andand (B >= C)") + field(DESC, "GY2 judge to plot measured values") + field(INPA, "EC-GN-P01-GPS:PLC4110-YTS-ST3R") + field(INPB, "EC-GN-P01-GBF:STAT-BEAMON-TIME") + field(INPC, "6000000") + field(OOPT, "Transition To Non-zero") + field(OUT, "EC-GN-P01-GBF:STAT-SHOT-FLNK1 PP") + field(SCAN, ".1 second") +} + +record (mbbi,"EC-GN-P01-GBF:STAT-SM") +{ + field(DESC, "GY#2 state machine") + field(EIST, "WaitHVON_SDN") + field(EIVL, "8") + field(FLNK, "EC-GN-P01-GBF:STAT-SHOT-PLOT") + field(FRST, "WaitReady") + field(FRVL, "4") + field(FVST, "WaitPermit") + field(FVVL, "5") + field(NIST, "WaitHVON_SDN_PREP") + field(NIVL, "9") + field(ONST, "Error") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(SVST, "WaitHVON_PREP") + field(SVVL, "7") + field(SXST, "WaitHVON") + field(SXVL, "6") + field(THST, "WaitStandby") + field(THVL, "3") + field(TWST, "Disabled") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "Init") + field(ZRVL, "0") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBFP-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBFP-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..0776c60 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GBFP-iocEC-GN-PSH0PCF.db @@ -0,0 +1,120 @@ +record (bi,"EC-GN-P01-GBFP:FMC4310-RV1") +{ + field(DESC, "Reserved for cRIO") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 11) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBFP:FMC4310-RV2") +{ + field(DESC, "Reserved for cRIO") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 12) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBFP:FMC4310-RV3") +{ + field(DESC, "Reserved for cRIO") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 13) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBFP:FMC4310-RV5") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBFP:FMC4310-RV6") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBFP:FMC4310-RV7") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBFP:FMC4310-RV8") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBFP:FMC4310-YSTA-GBOP") +{ + field(DESC, "GY2 Beam ON Status") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBFP:FMC4310-YTRP") +{ + field(DESC, "Interlock from fast protection 2") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 9) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-GBFP:FMC4310-YTRP2") +{ + field(DESC, "Pause signal from fast protection 2") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 10) bitread") + field(ONAM, "PAUSE") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GPF-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GPF-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..9fe5dd3 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GPF-iocEC-GN-PSH0PCF.db @@ -0,0 +1,349 @@ +record (bo,"EC-GN-P01-GPF:PCF4210-CTRP") +{ + field(DESC, "Fast Controller Fault") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:PCF4210-YTS-GA1") +{ + field(DESC, "GY1 HV Armed") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:PCF4210-YTS-GA2") +{ + field(DESC, "GY1 HV Injection") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:PCF4210-YTS-GA3") +{ + field(DESC, "GY1 in RFON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:PCF4210-YTS-GB1") +{ + field(DESC, "GY2 HV Armed") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:PCF4210-YTS-GB2") +{ + field(DESC, "GY2 HV Injection") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:PCF4210-YTS-GB3") +{ + field(DESC, "GY2 RFON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPF:PSU0000-YSTA-MOD") +{ + field(DESC, "MHVPS modulation en/disable from ECPC") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 8) bitread") + field(ONAM, "ENABLE") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "DISABLE") +} + +record (bo,"EC-GN-P01-GPF:STAT-DAQ-CONF-STAT") +{ + field(DESC, "DAQ config state") + field(ONAM, "Ready") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Not ready") +} + +record (bo,"EC-GN-P01-GPF:STAT-DAQ-RECONF") +{ + field(DESC, "Reset and configure DAQ") + field(HIGH, "0.1") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:STAT-DAQ-SW-TRIG") +{ + field(DESC, "software trigger for DAQ start") + field(HIGH, "0.1") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:STAT-RST-FLT") +{ + field(DESC, "Reset Fault command") + field(HIGH, "0.1") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (ao,"EC-GN-P01-GPF:STAT-DAQ-LEN") +{ + field(DESC, "DAQ sampling time length") + field(DRVH, "3600000") + field(DRVL, "0.01") + field(EGU, "ms") + field(HOPR, "3600000") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "1000.0") +} + +record (ao,"EC-GN-P01-GPF:STAT-DAQ-LEN-RB") +{ + field(DESC, "DAQ sampling time length readback") + field(DRVH, "3600000") + field(DRVL, "0.01") + field(EGU, "ms") + field(HOPR, "3600000") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "1000.0") +} + +record (mbbo,"EC-GN-P01-GPF:STAT-DAQ-MODE") +{ + field(DESC, "DAQ mode") + field(FRST, "Reference") + field(FRVL, "4") + field(ONST, "Finite") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(THST, "Continuous") + field(THVL, "3") + field(TWST, "Retriggerable") + field(TWVL, "2") + field(VAL, "3") + field(ZRST, "Software_triggered") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GPF:STAT-DAQ-MODE-RB") +{ + field(DESC, "DAQ mode readback") + field(FRST, "Reference") + field(FRVL, "4") + field(ONST, "Finite") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(THST, "Continuous") + field(THVL, "3") + field(TWST, "Retriggerable") + field(TWVL, "2") + field(VAL, "3") + field(ZRST, "Software_triggered") + field(ZRVL, "0") +} + +record (ao,"EC-GN-P01-GPF:STAT-DAQ-PUB-DLY") +{ + field(DESC, "DAN publish delay") + field(DRVH, "1000") + field(DRVL, "0.1") + field(EGU, "ms") + field(HOPR, "1000") + field(LOPR, "0.1") + field(PINI, "YES") + field(PREC, "1") + field(SCAN, "Passive") + field(VAL, "10.0") +} + +record (ao,"EC-GN-P01-GPF:STAT-DAQ-PUB-DLY-RB") +{ + field(DESC, "DAN publish delay") + field(DRVH, "1000") + field(DRVL, "0.1") + field(EGU, "ms") + field(HOPR, "1000") + field(LOPR, "0.1") + field(PINI, "YES") + field(PREC, "1") + field(SCAN, "Passive") + field(VAL, "10.0") +} + +record (longout,"EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE") +{ + field(DESC, "sampling rate") + field(DRVH, "1000000000") + field(DRVL, "1") + field(HOPR, "100000000") + field(LOPR, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1000") +} + +record (longout,"EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE-RB") +{ + field(DESC, "sampling rate readback") + field(DRVH, "1000000000") + field(DRVL, "1") + field(HOPR, "100000000") + field(LOPR, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1000") +} + +record (ao,"EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY") +{ + field(DESC, "DAQ start delay") + field(DRVH, "3600000") + field(DRVL, "0.01") + field(EGU, "ms") + field(HOPR, "3600000") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "1.0") +} + +record (ao,"EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY-RB") +{ + field(DESC, "DAQ start delay readback") + field(DRVH, "3600000") + field(DRVL, "0.01") + field(EGU, "ms") + field(HOPR, "3600000") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "1.0") +} + +record (mbbo,"EC-GN-P01-GPF:STAT-DAQ-STAT") +{ + field(DESC, "DAQ operation state") + field(FRSV, "NO_ALARM") + field(ONST, "Waiting trigger") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(THST, "Error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "Aquiring") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(VAL, "3") + field(ZRST, "Not ready") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (longin,"EC-GN-P01-GPF:STAT-MD1-LIM") +{ + field(DESC, "MD1 Pulse Len Limit") + field(HOPR, "500000000") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "10000") +} + +record (longin,"EC-GN-P01-GPF:STAT-MD2-LIM") +{ + field(DESC, "MD2 Pulse Len Limit") + field(HOPR, "500000000") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "100000") +} + +record (longin,"EC-GN-P01-GPF:STAT-MD3-LIM") +{ + field(DESC, "MD3 Pulse Len Limit") + field(HOPR, "500000000") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "30000000") +} + +record (longin,"EC-GN-P01-GPF:STAT-MD4-LIM") +{ + field(DESC, "MD4 Pulse Len Limit") + field(HOPR, "500000000") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "300000000") +} + +record (ai,"EC-GN-P01-GPF:STAT-RDY-TOUT") +{ + field(DESC, "Gyrotron operation ready timeout") + field(EGU, "s") + field(HOPR, "600") + field(LOPR, "1") + field(PINI, "YES") + field(PREC, "1") + field(SCAN, "Passive") + field(VAL, "30.0") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GPS-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GPS-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..5763fa5 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-GPS-iocEC-GN-PSH0PCF.db @@ -0,0 +1,230 @@ +record (bi,"EC-GN-P01-GPS:PLC4110-CON-GY1PRM") +{ + field(DESC, "GY1 Operation Permission") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 18) bitread") + field(ONAM, "PERMITED") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-CON-GY2PRM") +{ + field(DESC, "GY2 Operation Permission") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 18) bitread") + field(ONAM, "PERMITED") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-CON-OPGY1") +{ + field(DESC, "GY1 Selection") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 19) bitread") + field(ONAM, "SELECTED") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-CON-OPGY2") +{ + field(DESC, "GY2 Selection") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 19) bitread") + field(ONAM, "SELECTED") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-RV1") +{ + field(DESC, "Reserved for PLC") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 21) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPS:PLC4110-RV2") +{ + field(DESC, "Reserved for PLC") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPS:PLC4110-RV3") +{ + field(DESC, "Reserved for PLC") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YON-CCPS1") +{ + field(DESC, "GY1 CCPS Start Operation") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 20) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YON-CCPS2") +{ + field(DESC, "GY2 CCPS Start Operation") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 20) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YSTA-MPSS") +{ + field(DESC, "Sync/Asynchronous Flag") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 21) bitread") + field(ONAM, "SYNC") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "ASYNC") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTRP") +{ + field(DESC, "Interlock signal from PLC") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 14) bitread") + field(ONAM, "INTERLOCK") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-MD1") +{ + field(DESC, "Operation Mode 1") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 14) bitread") + field(ONAM, "VSHORT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-MD2") +{ + field(DESC, "Operation Mode 2") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 15) bitread") + field(ONAM, "SHORT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-MD3") +{ + field(DESC, "Operation Mode 3") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 16) bitread") + field(ONAM, "MIDDLE") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-MD4") +{ + field(DESC, "Operation Mode 4") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 17) bitread") + field(ONAM, "LONG") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-ST1R") +{ + field(DESC, "PLC STANDBY state") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 15) bitread") + field(ONAM, "STANDBY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-ST2R") +{ + field(DESC, "PLC READY state") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 16) bitread") + field(ONAM, "READY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-ST3R") +{ + field(DESC, "PLC ON state") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 17) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PA1F-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PA1F-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..3d11cb5 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PA1F-iocEC-GN-PSH0PCF.db @@ -0,0 +1,206 @@ +record (bo,"EC-GN-P01-PA1F:PSU3000-CON-HV") +{ + field(DESC, "GY1 APS HVON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PA1F:PSU3000-CON-SW") +{ + field(DESC, "GY1 APS HV SWON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PA1F:PSU3000-CTRP") +{ + field(DESC, "GY1 APS Shutdonw request") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-PA1F:PSU3000-YFLT") +{ + field(DESC, "GY1 APS Fault") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 1) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-PA1F:PSU3000-YSTA") +{ + field(DESC, "GY1 APS Ready") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 0) bitread") + field(ONAM, "READY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-PA1F:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 APS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (ao,"EC-GN-P01-PA1F:PSU3000-EREF") +{ + field(DESC, "GY1 APS voltage setpoint") + field(DRVH, "10") + field(DRVL, "-20") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "10") + field(LOPR, "-20") + field(OUT, "@asyn(ni6368_1, 1) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PA1F:PSU3000-EREF-MSP") +{ + field(DESC, "GY1 APS voltage manual setpoint") + field(DRVH, "10") + field(DRVL, "-20") + field(EGU, "kV") + field(HOPR, "10") + field(LOPR, "-20") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PA1F:PSU3000-EREF-P") +{ + field(ASLO, "2") + field(DESC, "GY1 APS P-voltage setpoint") + field(DRVH, "0") + field(DRVL, "-20") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "10") + field(LOPR, "-20") + field(OUT, "@asyn(ni6368_1, 2) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-PA1F:PSU3000-ET") +{ + field(DESC, "GY1 APS Measured Volatege") + field(EGU, "kV") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PA1F:PSU3000-ET-WF") +{ + field(DESC, "GY1 APS Measured Volatege") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PA1F:PSU3000-IT") +{ + field(DESC, "GY1 APS Measued Current") + field(EGU, "A") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PA1F:PSU3000-IT-WF") +{ + field(DESC, "GY1 APS Measued Current") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PA1F:STAT-DT-HVON") +{ + field(DESC, "Time diff to GY1 APS Gate ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "500000") +} + +record (ai,"EC-GN-P01-PA1F:STAT-DT-SWON") +{ + field(DESC, "Time diff to GY1 APS SW ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "600000") +} + +record (calcout,"EC-GN-P01-PA1F:STAT-EREF-CONV") +{ + field(CALC, "A>0?A:((A>-20)?A/2:-10)") + field(DESC, "GYA APS engineer value conversion") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-PA1F:PSU3000-EREF PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-PA1F:STAT-PREP-WF") +{ + field(DESC, "GY1 APS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PA2F-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PA2F-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..6a74042 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PA2F-iocEC-GN-PSH0PCF.db @@ -0,0 +1,206 @@ +record (bo,"EC-GN-P01-PA2F:PSU4000-CON-HV") +{ + field(DESC, "GY2 APS HVON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PA2F:PSU4000-CON-SW") +{ + field(DESC, "GY2 APS HV SWON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PA2F:PSU4000-CTRP") +{ + field(DESC, "GY2 APS Shutdown request") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-PA2F:PSU4000-YFLT") +{ + field(DESC, "GY2 APS Fault") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 1) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-PA2F:PSU4000-YSTA") +{ + field(DESC, "GY2 APS Ready") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 0) bitread") + field(ONAM, "READY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-PA2F:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY2 APS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (ao,"EC-GN-P01-PA2F:PSU4000-EREF") +{ + field(DESC, "GY2 APS voltage setpoint") + field(DRVH, "10") + field(DRVL, "-20") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "10") + field(LOPR, "-20") + field(OUT, "@asyn(ni6368_0, 1) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PA2F:PSU4000-EREF-MSP") +{ + field(DESC, "GY2 APS voltage manual setpoint") + field(DRVH, "10") + field(DRVL, "-20") + field(EGU, "kV") + field(HOPR, "10") + field(LOPR, "-20") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PA2F:PSU4000-EREF-P") +{ + field(ASLO, "2") + field(DESC, "GY2 APS P-voltage setpoint") + field(DRVH, "0") + field(DRVL, "-20") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "10") + field(LOPR, "-20") + field(OUT, "@asyn(ni6368_0, 2) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-PA2F:PSU4000-ET") +{ + field(DESC, "GY2 APS Measured Volatege") + field(EGU, "kV") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PA2F:PSU4000-ET-WF") +{ + field(DESC, "GY2 APS Measured Volatege") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PA2F:PSU4000-IT") +{ + field(DESC, "GY2 APS Measued Current") + field(EGU, "A") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PA2F:PSU4000-IT-WF") +{ + field(DESC, "GY2 APS Measued Current") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PA2F:STAT-DT-HVON") +{ + field(DESC, "Time diff to GY2 APS Gate ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "500000") +} + +record (ai,"EC-GN-P01-PA2F:STAT-DT-SWON") +{ + field(DESC, "Time diff to GY2 APS SW ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "600000") +} + +record (calcout,"EC-GN-P01-PA2F:STAT-EREF-CONV") +{ + field(CALC, "A>0?A:((A>-20)?A/2:-10)") + field(DESC, "GYB APS engineer value conversion") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-PA2F:PSU4000-EREF PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-PA2F:STAT-PREP-WF") +{ + field(DESC, "GY2 APS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PB1F-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PB1F-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..66c756d --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PB1F-iocEC-GN-PSH0PCF.db @@ -0,0 +1,180 @@ +record (bo,"EC-GN-P01-PB1F:PSU1000-CON-HV") +{ + field(DESC, "GY1 BPS HVON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PB1F:PSU1000-CON-SW") +{ + field(DESC, "GY1 BPS HV SWON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PB1F:PSU1000-CTRP") +{ + field(DESC, "GY1 BPS Shutdonw request") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-PB1F:PSU1000-YFLT") +{ + field(DESC, "GY1 BPS Fault") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 3) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-PB1F:PSU1000-YSTA") +{ + field(DESC, "GY1 BPS Ready") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 2) bitread") + field(ONAM, "READY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-PB1F:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 BPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (ao,"EC-GN-P01-PB1F:PSU1000-EREF") +{ + field(ASLO, "4") + field(DESC, "GY1 BPS voltage setpoint") + field(DRVH, "40") + field(DRVL, "0") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "40") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 0) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PB1F:PSU1000-EREF-MSP") +{ + field(DESC, "GY1 BPS voltage manual setpoint") + field(DRVH, "40") + field(DRVL, "0") + field(EGU, "kV") + field(HOPR, "40") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-PB1F:PSU1000-ET") +{ + field(DESC, "GY1 BPS Measured Voltage") + field(EGU, "kV") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PB1F:PSU1000-ET-WF") +{ + field(DESC, "GY1 BPS Measured Voltage") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PB1F:PSU1000-IT") +{ + field(DESC, "GY1 BPS Measured Current") + field(EGU, "A") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PB1F:PSU1000-IT-WF") +{ + field(DESC, "GY1 BPS Measured Current") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PB1F:STAT-DT-HVON") +{ + field(DESC, "Time diff to GY1 BPS Gate ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "500000") +} + +record (ai,"EC-GN-P01-PB1F:STAT-DT-SWON") +{ + field(DESC, "Time diff to GY1 BPS SW ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "550000") +} + +record (waveform,"EC-GN-P01-PB1F:STAT-PREP-WF") +{ + field(DESC, "GY1 BPS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PB2F-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PB2F-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..72c14a3 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PB2F-iocEC-GN-PSH0PCF.db @@ -0,0 +1,180 @@ +record (bo,"EC-GN-P01-PB2F:PSU2000-CON-HV") +{ + field(DESC, "GY2 BPS HVON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PB2F:PSU2000-CON-SW") +{ + field(DESC, "GY2 BPS HV SWON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PB2F:PSU2000-CTRP") +{ + field(DESC, "GY2 BPS Shutdonw request") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-PB2F:PSU2000-YFLT") +{ + field(DESC, "GY2 BPS Fault") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 3) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-PB2F:PSU2000-YSTA") +{ + field(DESC, "GY2 BPS Ready") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 2) bitread") + field(ONAM, "READY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-PB2F:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY2 BPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (ao,"EC-GN-P01-PB2F:PSU2000-EREF") +{ + field(ASLO, "4") + field(DESC, "GY2 BPS voltage setpoint") + field(DRVH, "40") + field(DRVL, "0") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "40") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_0, 0) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PB2F:PSU2000-EREF-MSP") +{ + field(DESC, "GY2 BPS voltage manual setpoint") + field(DRVH, "40") + field(DRVL, "0") + field(EGU, "kV") + field(HOPR, "40") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-PB2F:PSU2000-ET") +{ + field(DESC, "GY2 BPS Measured Voltage") + field(EGU, "kV") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PB2F:PSU2000-ET-WF") +{ + field(DESC, "GY2 BPS Measured Voltage") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PB2F:PSU2000-IT") +{ + field(DESC, "GY2 BPS Measured Current") + field(EGU, "A") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PB2F:PSU2000-IT-WF") +{ + field(DESC, "GY2 BPS Measured Current") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PB2F:STAT-DT-HVON") +{ + field(DESC, "Time diff to GY2 BPS Gate ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "500000") +} + +record (ai,"EC-GN-P01-PB2F:STAT-DT-SWON") +{ + field(DESC, "Time diff to GY2 BPS SW ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "550000") +} + +record (waveform,"EC-GN-P01-PB2F:STAT-PREP-WF") +{ + field(DESC, "GY2 BPS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PMF-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PMF-iocEC-GN-PSH0PCF.db new file mode 100755 index 0000000..9778039 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Db/PCF0-EC-GN-P01-PMF-iocEC-GN-PSH0PCF.db @@ -0,0 +1,231 @@ +record (bo,"EC-GN-P01-PMF:PSU0000-COFF") +{ + field(DESC, "MHVPS Shutdown request") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PMF:PSU0000-CON-MOD") +{ + field(DESC, "MHVPS MOD Enable/Disable") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PMF:PSU0000-CON-SW") +{ + field(DESC, "MHVPS Enable/Disable") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-PMF:PSU0000-TYSTA") +{ + field(DESC, "MHVPS Ready status") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 7) bitread") + field(ONAM, "READY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bi,"EC-GN-P01-PMF:PSU0000-YFLT") +{ + field(DESC, "MHVPS Fast Protection Act") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 6) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bo,"EC-GN-P01-PMF:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 APS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (ao,"EC-GN-P01-PMF:PSU0000-EREF") +{ + field(ASLO, "11") + field(DESC, "MHVPS voltage setpoint") + field(DRVH, "55") + field(DRVL, "0") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "55") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 3) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PMF:PSU0000-EREF-MSP") +{ + field(DESC, "MHVPS voltage manual setpoint") + field(DRVH, "55") + field(DRVL, "0") + field(EGU, "kV") + field(HOPR, "55") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-PMF:PSU0000-ET-GA") +{ + field(DESC, "GY1 MHVPS Measued Voltage") + field(EGU, "kV") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PMF:PSU0000-ET-GA-WF") +{ + field(DESC, "GY1 MHVPS Measued Voltage") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PMF:PSU0000-ET-GB") +{ + field(DESC, "GY2 MHVPS Measued Voltage") + field(EGU, "kV") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PMF:PSU0000-ET-GB-WF") +{ + field(DESC, "GY2 MHVPS Measued Voltage") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PMF:PSU0000-IT-GA") +{ + field(DESC, "GY1 MHVPS Measured Current") + field(EGU, "A") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PMF:PSU0000-IT-GA-WF") +{ + field(DESC, "GY1 MHVPS Measured Current") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PMF:PSU0000-IT-GB") +{ + field(DESC, "GY2 MHVPS Measured Current") + field(EGU, "A") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PMF:PSU0000-IT-GB-WF") +{ + field(DESC, "GY2 MHVPS Measured Current") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PMF:STAT-DT-HVON") +{ + field(DESC, "Time diff to MHVPS ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "500000") +} + +record (calcout,"EC-GN-P01-PMF:STAT-EREF-CALC") +{ + field(CALC, "(A!=C)?A:((B!=D)?B:E);C:=A; D:=B") + field(DESC, "determine MHVPS EREF change") + field(INPE, "EC-GN-P01-PMF:PSU0000-EREF") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-PMF:PSU0000-EREF PP") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-PMF:STAT-HVON-CALC") +{ + field(CALC, "(A||B)?1:0") + field(DESC, "determine MHVPS HVON change") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-PMF:PSU0000-CON-SW PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-PMF:STAT-PREP-WF") +{ + field(DESC, "MHVPS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Makefile b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Makefile new file mode 100644 index 0000000..b38d99d --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/Makefile @@ -0,0 +1,29 @@ +#+====================================================================== +# $HeadURL: https://svnpub.codac.iter.org/codac/iter/codac/dev/units/m-epics-iter-templates/branches/codac-core-6.1/templates/sddconfApp/Makefile $ +# $Id: Makefile 96475 2019-01-09 13:47:38Z sivecm $ +# +# Project : CODAC Core System +# +# Description : Makefile +# +# Author(s) : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2019 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== +TOP = .. +include $(TOP)/configure/CONFIG +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *src*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *Src*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *db*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *Db*)) +include $(TOP)/configure/RULES_DIRS + diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/EC-GNMain.cpp b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/EC-GNMain.cpp new file mode 100644 index 0000000..178d63c --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/EC-GNMain.cpp @@ -0,0 +1,25 @@ +/* Main.cpp */ +/* Author: Marty Kraimer Date: 17MAR2000 */ + +#include +#include +#include +#include +#include +#include + +#include "epicsExit.h" +#include "epicsThread.h" +#include "iocsh.h" + +int main(int argc,char *argv[]) +{ + sigset(SIGTERM, epicsExit); + if(argc>=2) { + iocsh(argv[1]); + epicsThreadSleep(.2); + } + iocsh(NULL); + epicsExit(0); + return(0); +} diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/Makefile b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/Makefile new file mode 100755 index 0000000..6b73f87 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/Makefile @@ -0,0 +1,57 @@ +TOP=../.. + +include $(TOP)/configure/CONFIG +#---------------------------------------- +# ADD MACRO DEFINITIONS AFTER THIS LINE +#======================================== + +#======================================== +# Build the IOC application + +PROD_IOC = EC-GN +# EC-GN.dbd will be created and installed +DBD += EC-GN.dbd + +# EC-GN.dbd will be made up from these files: +-include $(EPICS_ROOT)/mk/codac-common.mk + + +# Add all the support libraries needed by this IOC + +EC-GN_DBD += $(CODAC_DBD) +EC-GN_LIBS += $(CODAC_LIBS) + +# # SNCSEQ +# _SNCFLAGS += +r -c +d +# EC-GN_DBD += .dbd +# EC-GN_SRCS += .stt +# EC-GN_LIBS += seq pv + + +# EC-GN_registerRecordDeviceDriver.cpp derives from EC-GN.dbd +EC-GN_SRCS += EC-GN_registerRecordDeviceDriver.cpp + +# Build the main IOC entry point on workstation OSs. +EC-GN_SRCS_DEFAULT += EC-GNMain.cpp +EC-GN_SRCS_vxWorks += -nil- + +# Add support from base/src/vxWorks if needed +#EC-GN_OBJS_vxWorks += $(EPICS_BASE_BIN)/vxComLibrary + +#============================= +# Include SNL program makefile snippets + +-include ../*.snlprog + +#============================= + + +# Finally link to the EPICS Base libraries +EC-GN_LIBS += $(EPICS_BASE_IOC_LIBS) + +#=========================== + +include $(TOP)/configure/RULES +#---------------------------------------- +# ADD RULES AFTER THIS LINE +#---------------------------------------- \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.Common/EC-GN.dbd b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.Common/EC-GN.dbd new file mode 100644 index 0000000..c98cde5 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.Common/EC-GN.dbd @@ -0,0 +1,18666 @@ +menu(waveformPOST) { + choice(waveformPOST_Always, "Always") + choice(waveformPOST_OnChange, "On Change") +} +menu(aaoPOST) { + choice(aaoPOST_Always, "Always") + choice(aaoPOST_OnChange, "On Change") +} +menu(menuPriority) { + choice(menuPriorityLOW, "LOW") + choice(menuPriorityMEDIUM, "MEDIUM") + choice(menuPriorityHIGH, "HIGH") +} +menu(calcoutDOPT) { + choice(calcoutDOPT_Use_VAL, "Use CALC") + choice(calcoutDOPT_Use_OVAL, "Use OCAL") +} +menu(menuOmsl) { + choice(menuOmslsupervisory, "supervisory") + choice(menuOmslclosed_loop, "closed_loop") +} +menu(menuFtype) { + choice(menuFtypeSTRING, "STRING") + choice(menuFtypeCHAR, "CHAR") + choice(menuFtypeUCHAR, "UCHAR") + choice(menuFtypeSHORT, "SHORT") + choice(menuFtypeUSHORT, "USHORT") + choice(menuFtypeLONG, "LONG") + choice(menuFtypeULONG, "ULONG") + choice(menuFtypeINT64, "INT64") + choice(menuFtypeUINT64, "UINT64") + choice(menuFtypeFLOAT, "FLOAT") + choice(menuFtypeDOUBLE, "DOUBLE") + choice(menuFtypeENUM, "ENUM") +} +menu(stringinPOST) { + choice(stringinPOST_OnChange, "On Change") + choice(stringinPOST_Always, "Always") +} +menu(menuPini) { + choice(menuPiniNO, "NO") + choice(menuPiniYES, "YES") + choice(menuPiniRUN, "RUN") + choice(menuPiniRUNNING, "RUNNING") + choice(menuPiniPAUSE, "PAUSE") + choice(menuPiniPAUSED, "PAUSED") +} +menu(dfanoutSELM) { + choice(dfanoutSELM_All, "All") + choice(dfanoutSELM_Specified, "Specified") + choice(dfanoutSELM_Mask, "Mask") +} +menu(menuScan) { + choice(menuScanPassive, "Passive") + choice(menuScanEvent, "Event") + choice(menuScanI_O_Intr, "I/O Intr") + choice(menuScan10_second, "10 second") + choice(menuScan5_second, "5 second") + choice(menuScan2_second, "2 second") + choice(menuScan1_second, "1 second") + choice(menuScan_5_second, ".5 second") + choice(menuScan_2_second, ".2 second") + choice(menuScan_1_second, ".1 second") +} +menu(aSubLFLG) { + choice(aSubLFLG_IGNORE, "IGNORE") + choice(aSubLFLG_READ, "READ") +} +menu(menuPost) { + choice(menuPost_OnChange, "On Change") + choice(menuPost_Always, "Always") +} +menu(menuAlarmStat) { + choice(menuAlarmStatNO_ALARM, "NO_ALARM") + choice(menuAlarmStatREAD, "READ") + choice(menuAlarmStatWRITE, "WRITE") + choice(menuAlarmStatHIHI, "HIHI") + choice(menuAlarmStatHIGH, "HIGH") + choice(menuAlarmStatLOLO, "LOLO") + choice(menuAlarmStatLOW, "LOW") + choice(menuAlarmStatSTATE, "STATE") + choice(menuAlarmStatCOS, "COS") + choice(menuAlarmStatCOMM, "COMM") + choice(menuAlarmStatTIMEOUT, "TIMEOUT") + choice(menuAlarmStatHWLIMIT, "HWLIMIT") + choice(menuAlarmStatCALC, "CALC") + choice(menuAlarmStatSCAN, "SCAN") + choice(menuAlarmStatLINK, "LINK") + choice(menuAlarmStatSOFT, "SOFT") + choice(menuAlarmStatBAD_SUB, "BAD_SUB") + choice(menuAlarmStatUDF, "UDF") + choice(menuAlarmStatDISABLE, "DISABLE") + choice(menuAlarmStatSIMM, "SIMM") + choice(menuAlarmStatREAD_ACCESS, "READ_ACCESS") + choice(menuAlarmStatWRITE_ACCESS, "WRITE_ACCESS") +} +menu(aoOIF) { + choice(aoOIF_Full, "Full") + choice(aoOIF_Incremental, "Incremental") +} +menu(bufferingALG) { + choice(bufferingALG_FIFO, "FIFO Buffer") + choice(bufferingALG_LIFO, "LIFO Buffer") +} +menu(aaiPOST) { + choice(aaiPOST_Always, "Always") + choice(aaiPOST_OnChange, "On Change") +} +menu(calcoutINAV) { + choice(calcoutINAV_EXT_NC, "Ext PV NC") + choice(calcoutINAV_EXT, "Ext PV OK") + choice(calcoutINAV_LOC, "Local PV") + choice(calcoutINAV_CON, "Constant") +} +menu(epidFeedbackState) { + choice(epidFeedbackState_Off, "Off") + choice(epidFeedbackState_On, "On") +} +menu(seqSELM) { + choice(seqSELM_All, "All") + choice(seqSELM_Specified, "Specified") + choice(seqSELM_Mask, "Mask") +} +menu(histogramCMD) { + choice(histogramCMD_Read, "Read") + choice(histogramCMD_Clear, "Clear") + choice(histogramCMD_Start, "Start") + choice(histogramCMD_Stop, "Stop") +} +menu(menuIvoa) { + choice(menuIvoaContinue_normally, "Continue normally") + choice(menuIvoaDon_t_drive_outputs, "Don't drive outputs") + choice(menuIvoaSet_output_to_IVOV, "Set output to IVOV") +} +menu(stringoutPOST) { + choice(stringoutPOST_OnChange, "On Change") + choice(stringoutPOST_Always, "Always") +} +menu(menuAlarmSevr) { + choice(menuAlarmSevrNO_ALARM, "NO_ALARM") + choice(menuAlarmSevrMINOR, "MINOR") + choice(menuAlarmSevrMAJOR, "MAJOR") + choice(menuAlarmSevrINVALID, "INVALID") +} +menu(menuSimm) { + choice(menuSimmNO, "NO") + choice(menuSimmYES, "YES") + choice(menuSimmRAW, "RAW") +} +menu(compressALG) { + choice(compressALG_N_to_1_Low_Value, "N to 1 Low Value") + choice(compressALG_N_to_1_High_Value, "N to 1 High Value") + choice(compressALG_N_to_1_Average, "N to 1 Average") + choice(compressALG_Average, "Average") + choice(compressALG_Circular_Buffer, "Circular Buffer") + choice(compressALG_N_to_1_Median, "N to 1 Median") +} +menu(aSubEFLG) { + choice(aSubEFLG_NEVER, "NEVER") + choice(aSubEFLG_ON_CHANGE, "ON CHANGE") + choice(aSubEFLG_ALWAYS, "ALWAYS") +} +menu(fanoutSELM) { + choice(fanoutSELM_All, "All") + choice(fanoutSELM_Specified, "Specified") + choice(fanoutSELM_Mask, "Mask") +} +menu(calcoutOOPT) { + choice(calcoutOOPT_Every_Time, "Every Time") + choice(calcoutOOPT_On_Change, "On Change") + choice(calcoutOOPT_When_Zero, "When Zero") + choice(calcoutOOPT_When_Non_zero, "When Non-zero") + choice(calcoutOOPT_Transition_To_Zero, "Transition To Zero") + choice(calcoutOOPT_Transition_To_Non_zero, "Transition To Non-zero") +} +menu(epidFeedbackMode) { + choice(epidFeedbackMode_PID, "PID") + choice(epidFeedbackMode_MaxMin, "Max/Min") +} +menu(menuConvert) { + choice(menuConvertNO_CONVERSION, "NO CONVERSION") + choice(menuConvertSLOPE, "SLOPE") + choice(menuConvertLINEAR, "LINEAR") + choice(menuConverttypeKdegF, "typeKdegF") + choice(menuConverttypeKdegC, "typeKdegC") + choice(menuConverttypeJdegF, "typeJdegF") + choice(menuConverttypeJdegC, "typeJdegC") + choice(menuConverttypeEdegF, "typeEdegF(ixe only)") + choice(menuConverttypeEdegC, "typeEdegC(ixe only)") + choice(menuConverttypeTdegF, "typeTdegF") + choice(menuConverttypeTdegC, "typeTdegC") + choice(menuConverttypeRdegF, "typeRdegF") + choice(menuConverttypeRdegC, "typeRdegC") + choice(menuConverttypeSdegF, "typeSdegF") + choice(menuConverttypeSdegC, "typeSdegC") +} +menu(menuYesNo) { + choice(menuYesNoNO, "NO") + choice(menuYesNoYES, "YES") +} +menu(timestampTST) { + choice(timestampTST_YY_MM_DD_HH_MM_SS, "YY/MM/DD HH:MM:SS") + choice(timestampTST_MM_DD_YY_HH_MM_SS, "MM/DD/YY HH:MM:SS") + choice(timestampTST_MM_DD_HH_MM_SS_YY, "Mon DD HH:MM:SS YY") + choice(timestampTST_MM_DD_HH_MM_SS, "Mon DD HH:MM:SS") + choice(timestampTST_HH_MM_SS, "HH:MM:SS") + choice(timestampTST_HH_MM, "HH:MM") + choice(timestampTST_DD_MM_YY_HH_MM_SS, "DD/MM/YY HH:MM:SS") + choice(timestampTST_DD_MM_HH_MM_SS_YY, "DD Mon HH:MM:SS YY") + choice(timestampTST_VMS, "DD-Mon-YYYY HH:MM:SS") + choice(timestampTST_MM_DD_YYYY, "Mon DD, YYYY HH:MM:SS.ns") + choice(timestampTST_MM_DD_YY, "MM/DD/YY HH:MM:SS.ns") +} +menu(selSELM) { + choice(selSELM_Specified, "Specified") + choice(selSELM_High_Signal, "High Signal") + choice(selSELM_Low_Signal, "Low Signal") + choice(selSELM_Median_Signal, "Median Signal") +} +recordtype(calcout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct calcoutRecord; + %typedef struct calcoutdset { + % dset common; + % long (*write)(struct calcoutRecord *prec); + %} calcoutdset; + %#define HAS_calcoutdset + % + %#include "dbScan.h" + %#include "postfix.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(RPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct rpvtStruct *rpvt") + interest(4) + prompt("Record Private") + } + field(VAL, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + prompt("Result") + } + field(PVAL, DBF_DOUBLE) { + prompt("Previous Value") + } + field(CALC, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_CALC) + initial("0") + pp(TRUE) + size(80) + prompt("Calculation") + } + field(CLCV, DBF_LONG) { + interest(1) + prompt("CALC Valid") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input F") + } + field(INPG, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input L") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + special(SPC_MOD) + interest(1) + prompt("Output Specification") + } + field(INAV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPA PV Status") + } + field(INBV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPB PV Status") + } + field(INCV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPC PV Status") + } + field(INDV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPD PV Status") + } + field(INEV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPE PV Status") + } + field(INFV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPF PV Status") + } + field(INGV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPG PV Status") + } + field(INHV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPH PV Status") + } + field(INIV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPI PV Status") + } + field(INJV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPJ PV Status") + } + field(INKV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPK PV Status") + } + field(INLV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPL PV Status") + } + field(OUTV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + interest(1) + prompt("OUT PV Status") + } + field(OOPT, DBF_MENU) { + promptgroup("50 - Output") + menu(calcoutOOPT) + interest(1) + prompt("Output Execute Opt") + } + field(ODLY, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + interest(1) + prompt("Output Execute Delay") + } + field(DLYA, DBF_USHORT) { + special(SPC_NOMOD) + asl(ASL0) + prompt("Output Delay Active") + } + field(DOPT, DBF_MENU) { + promptgroup("30 - Action") + menu(calcoutDOPT) + interest(1) + prompt("Output Data Opt") + } + field(OCAL, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_CALC) + initial("0") + pp(TRUE) + size(80) + prompt("Output Calculation") + } + field(OCLV, DBF_LONG) { + interest(1) + prompt("OCAL Valid") + } + field(OEVT, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_MOD) + asl(ASL0) + size(40) + prompt("Event To Issue") + } + field(EPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("EVENTPVT epvt") + interest(4) + prompt("Event private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Rng") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(A, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input A") + } + field(B, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input B") + } + field(C, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input C") + } + field(D, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input D") + } + field(E, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input E") + } + field(F, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input F") + } + field(G, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input G") + } + field(H, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input H") + } + field(I, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input I") + } + field(J, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input J") + } + field(K, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input K") + } + field(L, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input L") + } + field(OVAL, DBF_DOUBLE) { + asl(ASL0) + prompt("Output Value") + } + field(LA, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of A") + } + field(LB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of B") + } + field(LC, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of C") + } + field(LD, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of D") + } + field(LE, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of E") + } + field(LF, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of F") + } + field(LG, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of G") + } + field(LH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of H") + } + field(LI, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of I") + } + field(LJ, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of J") + } + field(LK, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of K") + } + field(LL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of L") + } + field(POVL, DBF_DOUBLE) { + asl(ASL0) + prompt("Prev Value of OVAL") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(RPCL, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("char rpcl[INFIX_TO_POSTFIX_SIZE(80)]") + interest(4) + prompt("Reverse Polish Calc") + } + field(ORPC, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("char orpc[INFIX_TO_POSTFIX_SIZE(80)]") + interest(4) + prompt("Reverse Polish OCalc") + } +} +device(calcout, CONSTANT, devCalcoutSoft, "Soft Channel") +device(calcout, CONSTANT, devCalcoutSoftCallback, "Async Soft Channel") +recordtype(state) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + size(20) + prompt("Value") + } + field(OVAL, DBF_STRING) { + special(SPC_NOMOD) + interest(3) + size(20) + prompt("Prev Value") + } +} +recordtype(histogram) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct histogramRecord; + %typedef struct histogramdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_histogram)(struct histogramRecord *prec); /*(0,2)=> success and add_count, don't add_count); if add_count then sgnl added to array*/ + % long (*special_linconv)(struct histogramRecord *prec, int after); + %} histogramdset; + %#define HAS_histogramdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + prompt("Value") + } + field(NELM, DBF_USHORT) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Num of Array Elements") + } + field(CSTA, DBF_SHORT) { + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Collection Status") + } + field(CMD, DBF_MENU) { + special(SPC_CALC) + asl(ASL0) + menu(histogramCMD) + interest(1) + prompt("Collection Control") + } + field(ULIM, DBF_DOUBLE) { + prop(YES) + promptgroup("30 - Action") + special(SPC_RESET) + interest(1) + prompt("Upper Signal Limit") + } + field(LLIM, DBF_DOUBLE) { + prop(YES) + promptgroup("30 - Action") + special(SPC_RESET) + interest(1) + prompt("Lower Signal Limit ") + } + field(WDTH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Element Width") + } + field(SGNL, DBF_DOUBLE) { + special(SPC_MOD) + prompt("Signal Value") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(SVL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Signal Value Location") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt32 *bptr") + interest(4) + prompt("Buffer Pointer") + } + field(WDOG, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * wdog") + interest(4) + prompt("Watchdog callback") + } + field(MDEL, DBF_SHORT) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Count Deadband") + } + field(MCNT, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Counts Since Monitor") + } + field(SDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + special(SPC_RESET) + interest(1) + prompt("Monitor Seconds Dband") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_DOUBLE) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(HOPR, DBF_ULONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_ULONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } +} +device(histogram, CONSTANT, devHistogramSoft, "Soft Channel") +recordtype(lsi) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct lsiRecord; + %typedef struct lsidset { + % dset common; + % long (*read_string)(struct lsiRecord *prec); + %} lsidset; + %#define HAS_lsidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("char *val") + pp(TRUE) + prompt("Current Value") + } + field(OVAL, DBF_NOACCESS) { + special(SPC_DBADDR) + extra("char *oval") + interest(3) + prompt("Old Value") + } + field(SIZV, DBF_USHORT) { + promptgroup("40 - Input") + special(SPC_NOMOD) + initial("41") + interest(1) + prompt("Size of buffers") + } + field(LEN, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Length of VAL") + } + field(OLEN, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Length of OVAL") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(menuPost) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(menuPost) + interest(1) + prompt("Post Archive Monitors") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(lsi, CONSTANT, devLsiSoft, "Soft Channel") +device(lsi, INST_IO, devLsiEnviron, "getenv") +device(lsi, INST_IO, devLsiStats, "IOC long string") +recordtype(int64out) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct int64outRecord; + %typedef struct int64outdset { + % dset common; + % long (*write_int64out)(struct int64outRecord *prec); + %} int64outdset; + %#define HAS_int64outdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_INT64) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Desired Output") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Units name") + } + field(DRVH, DBF_INT64) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive High Limit") + } + field(DRVL, DBF_INT64) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive Low Limit") + } + field(HOPR, DBF_INT64) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_INT64) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_INT64) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_INT64) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_INT64) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_INT64) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } +} +device(int64out, CONSTANT, devI64outSoft, "Soft Channel") +device(int64out, CONSTANT, devI64outSoftCallback, "Async Soft Channel") +recordtype(seq) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + asl(ASL0) + pp(TRUE) + prompt("Used to trigger") + } + field(SELM, DBF_MENU) { + promptgroup("30 - Action") + menu(seqSELM) + interest(1) + prompt("Select Mechanism") + } + field(SELN, DBF_USHORT) { + initial("1") + interest(1) + prompt("Link Selection") + } + field(SELL, DBF_INLINK) { + promptgroup("30 - Action") + interest(1) + prompt("Link Selection Loc") + } + field(OFFS, DBF_SHORT) { + promptgroup("30 - Action") + initial("0") + interest(1) + prompt("Offset for Specified") + } + field(SHFT, DBF_SHORT) { + promptgroup("30 - Action") + initial("-1") + interest(1) + prompt("Shift for Mask mode") + } + field(OLDN, DBF_USHORT) { + interest(4) + prompt("Old Selection") + } + field(PREC, DBF_SHORT) { + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(DLY0, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 0") + } + field(DOL0, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 0") + } + field(DO0, DBF_DOUBLE) { + interest(1) + prompt("Value 0") + } + field(LNK0, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 0") + } + field(DLY1, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 1") + } + field(DOL1, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link1") + } + field(DO1, DBF_DOUBLE) { + interest(1) + prompt("Value 1") + } + field(LNK1, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 1") + } + field(DLY2, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 2") + } + field(DOL2, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 2") + } + field(DO2, DBF_DOUBLE) { + interest(1) + prompt("Value 2") + } + field(LNK2, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 2") + } + field(DLY3, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 3") + } + field(DOL3, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 3") + } + field(DO3, DBF_DOUBLE) { + interest(1) + prompt("Value 3") + } + field(LNK3, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 3") + } + field(DLY4, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 4") + } + field(DOL4, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 4") + } + field(DO4, DBF_DOUBLE) { + interest(1) + prompt("Value 4") + } + field(LNK4, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 4") + } + field(DLY5, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 5") + } + field(DOL5, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 5") + } + field(DO5, DBF_DOUBLE) { + interest(1) + prompt("Value 5") + } + field(LNK5, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 5") + } + field(DLY6, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 6") + } + field(DOL6, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 6") + } + field(DO6, DBF_DOUBLE) { + interest(1) + prompt("Value 6") + } + field(LNK6, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 6") + } + field(DLY7, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 7") + } + field(DOL7, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 7") + } + field(DO7, DBF_DOUBLE) { + interest(1) + prompt("Value 7") + } + field(LNK7, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 7") + } + field(DLY8, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 8") + } + field(DOL8, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 8") + } + field(DO8, DBF_DOUBLE) { + interest(1) + prompt("Value 8") + } + field(LNK8, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 8") + } + field(DLY9, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 9") + } + field(DOL9, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 9") + } + field(DO9, DBF_DOUBLE) { + interest(1) + prompt("Value 9") + } + field(LNK9, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 9") + } + field(DLYA, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 10") + } + field(DOLA, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 10") + } + field(DOA, DBF_DOUBLE) { + interest(1) + prompt("Value 10") + } + field(LNKA, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 10") + } + field(DLYB, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 11") + } + field(DOLB, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 11") + } + field(DOB, DBF_DOUBLE) { + interest(1) + prompt("Value 11") + } + field(LNKB, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 11") + } + field(DLYC, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 12") + } + field(DOLC, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 12") + } + field(DOC, DBF_DOUBLE) { + interest(1) + prompt("Value 12") + } + field(LNKC, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 12") + } + field(DLYD, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 13") + } + field(DOLD, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 13") + } + field(DOD, DBF_DOUBLE) { + interest(1) + prompt("Value 13") + } + field(LNKD, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 13") + } + field(DLYE, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 14") + } + field(DOLE, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 14") + } + field(DOE, DBF_DOUBLE) { + interest(1) + prompt("Value 14") + } + field(LNKE, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 14") + } + field(DLYF, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 15") + } + field(DOLF, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 15") + } + field(DOF, DBF_DOUBLE) { + interest(1) + prompt("Value 15") + } + field(LNKF, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 15") + } +} +recordtype(stringout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct stringoutRecord; + %typedef struct stringoutdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*write_stringout)(struct stringoutRecord *prec); /*(-1,0)=>(failure,success)*/ + %} stringoutdset; + %#define HAS_stringoutdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + size(40) + prompt("Current Value") + } + field(OVAL, DBF_STRING) { + special(SPC_NOMOD) + interest(3) + size(40) + prompt("Previous Value") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(stringoutPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(stringoutPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_STRING) { + promptgroup("50 - Output") + interest(2) + size(40) + prompt("INVALID output value") + } +} +device(stringout, CONSTANT, devSoSoft, "Soft Channel") +device(stringout, CONSTANT, devSoSoftCallback, "Async Soft Channel") +device(stringout, INST_IO, devSoStdio, "stdio") +recordtype(aai) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct aaiRecord; + %typedef struct aaidset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_aai)(struct aaiRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} aaidset; + %#define HAS_aaidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(NELM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Number of Elements") + } + field(FTVL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_NOMOD) + menu(menuFtype) + interest(1) + prompt("Field Type of Value") + } + field(NORD, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Number elements read") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * bptr") + interest(4) + prompt("Buffer Pointer") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(aaiPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(aaiPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(HASH, DBF_ULONG) { + interest(3) + prompt("Hash of OnChange data.") + } +} +device(aai, CONSTANT, devAaiSoft, "Soft Channel") +recordtype(permissive) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_USHORT) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Status") + } + field(WFLG, DBF_USHORT) { + pp(TRUE) + prompt("Wait Flag") + } + field(LABL, DBF_STRING) { + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(20) + prompt("Button Label") + } + field(OVAL, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Old Status") + } + field(OFLG, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Old Flag") + } +} +recordtype(bo) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct boRecord; + %typedef struct bodset { + % dset common; /*init_record returns:(0,2)=>(success,success no convert*/ + % long (*write_bo)(struct boRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} bodset; + %#define HAS_bodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_ENUM) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(HIGH, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Seconds to Hold High") + } + field(ZNAM, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(26) + prompt("Zero Name") + } + field(ONAM, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(26) + prompt("One Name") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("prev Raw Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(RPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * rpvt") + interest(4) + prompt("Record Private") + } + field(WDPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * wdpt") + interest(4) + prompt("Watch Dog Timer ID") + } + field(ZSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Zero Error Severity") + } + field(OSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("One Error Severity") + } + field(COSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Change of State Sevr") + } + field(RBV, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Readback Value") + } + field(ORBV, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Readback Value") + } + field(MLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(LALM, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID outpt action") + } + field(IVOV, DBF_USHORT) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } +} +device(bo, CONSTANT, devBoSoft, "Soft Channel") +device(bo, CONSTANT, devBoSoftRaw, "Raw Soft Channel") +device(bo, CONSTANT, devBoSoftCallback, "Async Soft Channel") +device(bo, INST_IO, devBoGeneralTime, "General Time") +device(bo, INST_IO, devBoDbState, "Db State") +device(bo, INST_IO, devBoSimulation, "IOC SIM") +recordtype(dfanout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Desired Output") + } + field(SELM, DBF_MENU) { + promptgroup("30 - Action") + menu(dfanoutSELM) + interest(1) + prompt("Select Mechanism") + } + field(SELN, DBF_USHORT) { + initial("1") + interest(1) + prompt("Link Selection") + } + field(SELL, DBF_INLINK) { + promptgroup("30 - Action") + interest(1) + prompt("Link Selection Loc") + } + field(OUTA, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec A") + } + field(OUTB, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec B") + } + field(OUTC, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec C") + } + field(OUTD, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec D") + } + field(OUTE, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec E") + } + field(OUTF, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec F") + } + field(OUTG, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec G") + } + field(OUTH, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec H") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } +} +recordtype(mbbi) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct mbbiRecord; + %typedef struct mbbidset { + % dset common; /* init_record returns: (-1,0) => (failure, success)*/ + % long (*read_mbbi)(struct mbbiRecord *prec); /* (0, 2) => (success, success no convert)*/ + %} mbbidset; + %#define HAS_mbbidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_ENUM) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + } + field(NOBT, DBF_USHORT) { + promptgroup("40 - Input") + special(SPC_NOMOD) + interest(1) + prompt("Number of Bits") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(ZRVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Zero Value") + } + field(ONVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("One Value") + } + field(TWVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Two Value") + } + field(THVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Three Value") + } + field(FRVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Four Value") + } + field(FVVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Five Value") + } + field(SXVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Six Value") + } + field(SVVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Seven Value") + } + field(EIVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Eight Value") + } + field(NIVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Nine Value") + } + field(TEVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Ten Value") + } + field(ELVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Eleven Value") + } + field(TVVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Twelve Value") + } + field(TTVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Thirteen Value") + } + field(FTVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Fourteen Value") + } + field(FFVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Fifteen Value") + } + field(ZRST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Zero String") + } + field(ONST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("One String") + } + field(TWST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Two String") + } + field(THST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Three String") + } + field(FRST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Four String") + } + field(FVST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Five String") + } + field(SXST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Six String") + } + field(SVST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Seven String") + } + field(EIST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Eight String") + } + field(NIST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Nine String") + } + field(TEST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Ten String") + } + field(ELST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Eleven String") + } + field(TVST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Twelve String") + } + field(TTST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Thirteen String") + } + field(FTST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Fourteen String") + } + field(FFST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Fifteen String") + } + field(ZRSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Zero Severity") + } + field(ONSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State One Severity") + } + field(TWSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Two Severity") + } + field(THSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Three Severity") + } + field(FRSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Four Severity") + } + field(FVSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Five Severity") + } + field(SXSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Six Severity") + } + field(SVSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Seven Severity") + } + field(EISV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Eight Severity") + } + field(NISV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Nine Severity") + } + field(TESV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Ten Severity") + } + field(ELSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Eleven Severity") + } + field(TVSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Twelve Severity") + } + field(TTSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Thirteen Sevr") + } + field(FTSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Fourteen Sevr") + } + field(FFSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Fifteen Severity") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(UNSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Unknown State Severity") + } + field(COSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Change of State Svr") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Raw Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(MLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(LALM, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(SDEF, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("States Defined") + } + field(SHFT, DBF_USHORT) { + promptgroup("40 - Input") + interest(1) + prompt("Shift") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_ULONG) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuSimm) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(mbbi, CONSTANT, devMbbiSoft, "Soft Channel") +device(mbbi, CONSTANT, devMbbiSoftRaw, "Raw Soft Channel") +device(mbbi, CONSTANT, devMbbiSoftCallback, "Async Soft Channel") +device(mbbi, INST_IO, devSysMonMbbiStats, "sysmon") +recordtype(event) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct eventRecord; + %typedef struct eventdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_event)(struct eventRecord *prec); /*(0)=> success */ + %} eventdset; + %#define HAS_eventdset + % + %#include "dbScan.h" + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("40 - Input") + special(SPC_MOD) + asl(ASL0) + size(40) + prompt("Event Name To Post") + } + field(EPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("EVENTPVT epvt") + interest(4) + prompt("Event private") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Input Specifctn") + } + field(SVAL, DBF_STRING) { + size(40) + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Mode Location") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Sim mode Alarm Svrty") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(event, CONSTANT, devEventSoft, "Soft Channel") +recordtype(compress) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(RES, DBF_SHORT) { + special(SPC_RESET) + asl(ASL0) + interest(3) + prompt("Reset") + } + field(ALG, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_RESET) + menu(compressALG) + interest(1) + prompt("Compression Algorithm") + } + field(BALG, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_RESET) + menu(bufferingALG) + interest(1) + prompt("Buffering Algorithm") + } + field(NSAM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Number of Values") + } + field(N, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_RESET) + initial("1") + interest(1) + prompt("N to 1 Compression") + } + field(IHIL, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Init High Interest Lim") + } + field(ILIL, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Init Low Interest Lim") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(OFF, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Offset") + } + field(NUSE, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Number Used") + } + field(OUSE, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Old Number Used") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("double *bptr") + interest(4) + prompt("Buffer Pointer") + } + field(SPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("double *sptr") + interest(4) + prompt("Summing Buffer Ptr") + } + field(WPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("double *wptr") + interest(4) + prompt("Working Buffer Ptr") + } + field(INPN, DBF_LONG) { + special(SPC_NOMOD) + interest(4) + prompt("Number of elements in Working Buffer") + } + field(CVB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Compress Value Buffer") + } + field(INX, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Compressed Array Inx") + } +} +recordtype(mbbo) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct mbboRecord; + %typedef struct mbbodset { + % dset common; /*init_record returns: (0, 2) => (success, success no convert)*/ + % long (*write_mbbo)(struct mbboRecord *prec); /*returns: (0, 2) => (success, success no convert)*/ + %} mbbodset; + %#define HAS_mbbodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_ENUM) { + promptgroup("50 - Output") + special(SPC_DBADDR) + asl(ASL0) + pp(TRUE) + prompt("Desired Value") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(NOBT, DBF_USHORT) { + promptgroup("50 - Output") + special(SPC_NOMOD) + interest(1) + prompt("Number of Bits") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(ZRVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Zero Value") + } + field(ONVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("One Value") + } + field(TWVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Two Value") + } + field(THVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Three Value") + } + field(FRVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Four Value") + } + field(FVVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Five Value") + } + field(SXVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Six Value") + } + field(SVVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Seven Value") + } + field(EIVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Eight Value") + } + field(NIVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Nine Value") + } + field(TEVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Ten Value") + } + field(ELVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Eleven Value") + } + field(TVVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Twelve Value") + } + field(TTVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Thirteen Value") + } + field(FTVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Fourteen Value") + } + field(FFVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Fifteen Value") + } + field(ZRST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Zero String") + } + field(ONST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("One String") + } + field(TWST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Two String") + } + field(THST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Three String") + } + field(FRST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Four String") + } + field(FVST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Five String") + } + field(SXST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Six String") + } + field(SVST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Seven String") + } + field(EIST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Eight String") + } + field(NIST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Nine String") + } + field(TEST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Ten String") + } + field(ELST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Eleven String") + } + field(TVST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Twelve String") + } + field(TTST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Thirteen String") + } + field(FTST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Fourteen String") + } + field(FFST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Fifteen String") + } + field(ZRSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Zero Severity") + } + field(ONSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State One Severity") + } + field(TWSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Two Severity") + } + field(THSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Three Severity") + } + field(FRSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Four Severity") + } + field(FVSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Five Severity") + } + field(SXSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Six Severity") + } + field(SVSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Seven Severity") + } + field(EISV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Eight Severity") + } + field(NISV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Nine Severity") + } + field(TESV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Ten Severity") + } + field(ELSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Eleven Severity") + } + field(TVSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Twelve Severity") + } + field(TTSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Thirteen Sevr") + } + field(FTSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Fourteen Sevr") + } + field(FFSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Fifteen Sevr") + } + field(UNSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Unknown State Sevr") + } + field(COSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Change of State Sevr") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Raw Value") + } + field(RBV, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Readback Value") + } + field(ORBV, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Readback Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(MLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(LALM, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(SDEF, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("States Defined") + } + field(SHFT, DBF_USHORT) { + promptgroup("50 - Output") + interest(1) + prompt("Shift") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID outpt action") + } + field(IVOV, DBF_USHORT) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } +} +device(mbbo, CONSTANT, devMbboSoft, "Soft Channel") +device(mbbo, CONSTANT, devMbboSoftRaw, "Raw Soft Channel") +device(mbbo, CONSTANT, devMbboSoftCallback, "Async Soft Channel") +recordtype(epid) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + prompt("Record Name") + size(61) + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + prompt("Descriptor") + size(41) + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + prompt("Access Security Group") + size(29) + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Event Name") + size(40) + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("epicsMutexId mlok") + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("ELLLIST mlis") + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("ELLLIST bklnk") + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + interest(2) + initial("YES") + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct asgMember *asp") + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct processNotify *ppn") + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct processNotifyRecord *ppnr") + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct scan_element *spvt") + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct typed_rset *rset") + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("unambiguous_dset *dset") + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("void *dpvt") + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct dbRecordType *rdes") + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct lockRecord *lset") + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(1) + extra("epicsUInt8 bkpt") + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + interest(1) + initial("1") + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + initial("INVALID") + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(2) + extra("epicsTimeStamp time") + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Setpoint") + } + field(SMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Setpoint Mode Select") + } + field(STPL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Setpoint Location") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Controlled Value Loc") + } + field(OUTL, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Location") + } + field(TRIG, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Readback Trigger") + } + field(TVAL, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(1) + prompt("Trigger Value") + } + field(CVAL, DBF_DOUBLE) { + special(SPC_NOMOD) + prompt("Controlled Value") + } + field(CVLP, DBF_DOUBLE) { + special(SPC_NOMOD) + prompt("Prev. Controlled Value") + } + field(OVAL, DBF_DOUBLE) { + special(SPC_NOMOD) + prompt("Output value") + } + field(OVLP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev output") + } + field(PREC, DBF_SHORT) { + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(MDT, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Min Delta T") + } + field(FMOD, DBF_MENU) { + promptgroup("30 - Action") + menu(epidFeedbackMode) + interest(1) + prompt("Feedback Mode") + } + field(FBON, DBF_MENU) { + promptgroup("30 - Action") + menu(epidFeedbackState) + interest(1) + prompt("Feedback On/Off") + } + field(FBOP, DBF_MENU) { + promptgroup("30 - Action") + menu(epidFeedbackState) + interest(1) + prompt("Prev. feedback On/Off") + } + field(KP, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Proportional Gain") + } + field(KI, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Integral Gain") + } + field(KD, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Derivative Gain") + } + field(EGU, DBF_STRING) { + promptgroup("80 - Display") + interest(1) + prompt("Engineering Units") + size(16) + } + field(HOPR, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(DRVH, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("High Drive Limit") + } + field(DRVL, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Low Drive Limit") + } + field(HIHI, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Hihi Deviation Limit") + } + field(LOLO, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Lolo Deviation Limit") + } + field(HIGH, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("High Deviation Limit") + } + field(LOW, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Low Deviation Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(ODEL, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Output Deadband") + } + field(P, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("P component") + } + field(PP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("Prev. P component") + } + field(I, DBF_DOUBLE) { + interest(2) + prompt("I component") + } + field(IP, DBF_DOUBLE) { + interest(2) + prompt("Prev. I component") + } + field(D, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("D component") + } + field(DP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("Prev. D component") + } + field(CT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("epicsTimeStamp ct") + prompt("Time") + } + field(CTP, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("epicsTimeStamp ctp") + prompt("Previous time") + } + field(DT, DBF_DOUBLE) { + interest(2) + prompt("Delta T") + } + field(DTP, DBF_DOUBLE) { + interest(2) + prompt("Prev. Delta T") + } + field(ERR, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("Error") + } + field(ERRP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("Prev. Error") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } +} +device(epid, CONSTANT, devEpidSoft, "Soft Channel") +device(epid, CONSTANT, devEpidSoftCB, "Async Soft Channel") +recordtype(ao) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct aoRecord; + %typedef struct aodset { + % dset common; /*init_record returns: (0,2)=>(success,success no convert)*/ + % long (*write_ao)(struct aoRecord *prec); /*(0)=>(success ) */ + % long (*special_linconv)(struct aoRecord *prec, int after); + %} aodset; + %#define HAS_aodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Desired Output") + } + field(OVAL, DBF_DOUBLE) { + prompt("Output Value") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(OROC, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(1) + prompt("Output Rate of Change") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(OIF, DBF_MENU) { + promptgroup("50 - Output") + menu(aoOIF) + interest(1) + prompt("Out Full/Incremental") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(LINR, DBF_MENU) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + menu(menuConvert) + interest(1) + pp(TRUE) + prompt("Linearization") + } + field(EGUF, DBF_DOUBLE) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + interest(1) + pp(TRUE) + prompt("Eng Units Full") + } + field(EGUL, DBF_DOUBLE) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + interest(1) + pp(TRUE) + prompt("Eng Units Low") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(ROFF, DBF_ULONG) { + interest(2) + pp(TRUE) + prompt("Raw Offset") + } + field(EOFF, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(2) + pp(TRUE) + prompt("EGU to Raw Offset") + } + field(ESLO, DBF_DOUBLE) { + promptgroup("60 - Convert") + initial("1") + interest(2) + pp(TRUE) + prompt("EGU to Raw Slope") + } + field(DRVH, DBF_DOUBLE) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive High Limit") + } + field(DRVL, DBF_DOUBLE) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive Low Limit") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(AOFF, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(1) + pp(TRUE) + prompt("Adjustment Offset") + } + field(ASLO, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(1) + pp(TRUE) + prompt("Adjustment Slope") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(RVAL, DBF_LONG) { + pp(TRUE) + prompt("Current Raw Value") + } + field(ORAW, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Previous Raw Value") + } + field(RBV, DBF_LONG) { + special(SPC_NOMOD) + prompt("Readback Value") + } + field(ORBV, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Readback Value") + } + field(PVAL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Previous value") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(PBRK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * pbrk") + interest(4) + prompt("Ptrto brkTable") + } + field(INIT, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Initialized?") + } + field(LBRK, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("LastBreak Point") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } + field(OMOD, DBF_UCHAR) { + special(SPC_NOMOD) + prompt("Was OVAL modified?") + } +} +device(ao, CONSTANT, devAoSoft, "Soft Channel") +device(ao, CONSTANT, devAoSoftRaw, "Raw Soft Channel") +device(ao, CONSTANT, devAoSoftCallback, "Async Soft Channel") +device(ao, INST_IO, devAoStats, "IOC stats") +recordtype(aao) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct aaoRecord; + %typedef struct aaodset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*write_aao)(struct aaoRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} aaodset; + %#define HAS_aaodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(NELM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Number of Elements") + } + field(FTVL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_NOMOD) + menu(menuFtype) + interest(1) + prompt("Field Type of Value") + } + field(NORD, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Number elements read") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * bptr") + interest(4) + prompt("Buffer Pointer") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(aaoPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(aaoPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(HASH, DBF_ULONG) { + interest(3) + prompt("Hash of OnChange data.") + } +} +device(aao, CONSTANT, devAaoSoft, "Soft Channel") +recordtype(mbbiDirect) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct mbbiDirectRecord; + %typedef struct mbbidirectdset { + % dset common; /* init_record returns: (-1,0) => (failure, success)*/ + % long (*read_mbbi)(struct mbbiDirectRecord *prec); /* (0, 2) => (success, success no convert)*/ + %} mbbidirectdset; + %#define HAS_mbbidirectdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + } + field(NOBT, DBF_SHORT) { + promptgroup("40 - Input") + special(SPC_NOMOD) + interest(1) + prompt("Number of Bits") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Raw Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(MLST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(SHFT, DBF_USHORT) { + promptgroup("40 - Input") + interest(1) + prompt("Shift") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_LONG) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuSimm) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(B0, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 0") + } + field(B1, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 1") + } + field(B2, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 2") + } + field(B3, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 3") + } + field(B4, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 4") + } + field(B5, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 5") + } + field(B6, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 6") + } + field(B7, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 7") + } + field(B8, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 8") + } + field(B9, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 9") + } + field(BA, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 10") + } + field(BB, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 11") + } + field(BC, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 12") + } + field(BD, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 13") + } + field(BE, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 14") + } + field(BF, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 15") + } + field(B10, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 16") + } + field(B11, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 17") + } + field(B12, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 18") + } + field(B13, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 19") + } + field(B14, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 20") + } + field(B15, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 21") + } + field(B16, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 22") + } + field(B17, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 23") + } + field(B18, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 24") + } + field(B19, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 25") + } + field(B1A, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 26") + } + field(B1B, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 27") + } + field(B1C, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 28") + } + field(B1D, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 29") + } + field(B1E, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 30") + } + field(B1F, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 31") + } +} +device(mbbiDirect, CONSTANT, devMbbiDirectSoft, "Soft Channel") +device(mbbiDirect, CONSTANT, devMbbiDirectSoftRaw, "Raw Soft Channel") +device(mbbiDirect, CONSTANT, devMbbiDirectSoftCallback, "Async Soft Channel") +device(mbbiDirect, INST_IO, devSysMonMbbiDirectStats, "sysmon") +recordtype(waveform) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct waveformRecord; + %typedef struct wfdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_wf)(struct waveformRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} wfdset; + %#define HAS_wfdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(RARM, DBF_SHORT) { + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Rearm the waveform") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(NELM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Number of Elements") + } + field(FTVL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_NOMOD) + menu(menuFtype) + interest(1) + prompt("Field Type of Value") + } + field(BUSY, DBF_SHORT) { + special(SPC_NOMOD) + prompt("Busy Indicator") + } + field(NORD, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Number elements read") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * bptr") + interest(4) + prompt("Buffer Pointer") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(waveformPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(waveformPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(HASH, DBF_ULONG) { + interest(3) + prompt("Hash of OnChange data.") + } +} +device(waveform, CONSTANT, devWfSoft, "Soft Channel") +device(waveform, INST_IO, devWaveformStats, "IOC stats") +device(waveform, INST_IO, devSysMonWaveStats, "sysmon") +recordtype(timestamp) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + prompt("Record Name") + size(61) + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + prompt("Descriptor") + size(41) + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + prompt("Access Security Group") + size(29) + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Event Name") + size(40) + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("epicsMutexId mlok") + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("ELLLIST mlis") + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("ELLLIST bklnk") + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + interest(2) + initial("YES") + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct asgMember *asp") + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct processNotify *ppn") + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct processNotifyRecord *ppnr") + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct scan_element *spvt") + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct typed_rset *rset") + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("unambiguous_dset *dset") + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("void *dpvt") + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct dbRecordType *rdes") + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct lockRecord *lset") + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(1) + extra("epicsUInt8 bkpt") + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + interest(1) + initial("1") + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + initial("INVALID") + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(2) + extra("epicsTimeStamp time") + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + size(40) + } + field(OVAL, DBF_STRING) { + special(SPC_NOMOD) + interest(3) + prompt("Previous Value") + size(40) + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Current Raw Value") + } + field(TST, DBF_MENU) { + promptgroup("40 - Input") + menu(timestampTST) + interest(2) + prompt("Time Stamp Type") + } +} +recordtype(fanout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + asl(ASL0) + pp(TRUE) + prompt("Used to trigger") + } + field(SELM, DBF_MENU) { + promptgroup("30 - Action") + menu(fanoutSELM) + interest(1) + prompt("Select Mechanism") + } + field(SELN, DBF_USHORT) { + initial("1") + interest(1) + prompt("Link Selection") + } + field(SELL, DBF_INLINK) { + promptgroup("30 - Action") + interest(1) + prompt("Link Selection Loc") + } + field(OFFS, DBF_SHORT) { + promptgroup("30 - Action") + initial("0") + interest(1) + prompt("Offset for Specified") + } + field(SHFT, DBF_SHORT) { + promptgroup("30 - Action") + initial("-1") + interest(1) + prompt("Shift for Mask mode") + } + field(LNK0, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 0") + } + field(LNK1, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 1") + } + field(LNK2, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 2") + } + field(LNK3, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 3") + } + field(LNK4, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 4") + } + field(LNK5, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 5") + } + field(LNK6, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 6") + } + field(LNK7, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 7") + } + field(LNK8, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 8") + } + field(LNK9, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 9") + } + field(LNKA, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 10") + } + field(LNKB, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 11") + } + field(LNKC, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 12") + } + field(LNKD, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 13") + } + field(LNKE, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 14") + } + field(LNKF, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 15") + } +} +recordtype(longin) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct longinRecord; + %typedef struct longindset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_longin)(struct longinRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} longindset; + %#define HAS_longindset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_LONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_LONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_LONG) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(ADEL, DBF_LONG) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_LONG) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Input Specifctn") + } + field(SVAL, DBF_LONG) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Mode Location") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Sim mode Alarm Svrty") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(longin, CONSTANT, devLiSoft, "Soft Channel") +device(longin, CONSTANT, devLiSoftCallback, "Async Soft Channel") +device(longin, INST_IO, devLiGeneralTime, "General Time") +recordtype(printf) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct printfRecord; + %typedef struct printfdset { + % dset common; + % long (*write_string)(struct printfRecord *prec); + %} printfdset; + %#define HAS_printfdset + % + %/* Number of INPx fields defined */ + %#define PRINTF_NLINKS 10 + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("char *val") + pp(TRUE) + prompt("Result") + } + field(SIZV, DBF_USHORT) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("41") + interest(1) + prompt("Size of VAL buffer") + } + field(LEN, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Length of VAL") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(FMT, DBF_STRING) { + promptgroup("30 - Action") + pp(TRUE) + size(81) + prompt("Format String") + } + field(IVLS, DBF_STRING) { + promptgroup("30 - Action") + initial("LNK") + size(16) + prompt("Invalid Link String") + } + field(INP0, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 0") + } + field(INP1, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 1") + } + field(INP2, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 2") + } + field(INP3, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 3") + } + field(INP4, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 4") + } + field(INP5, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 5") + } + field(INP6, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 6") + } + field(INP7, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 7") + } + field(INP8, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 8") + } + field(INP9, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 9") + } +} +device(printf, CONSTANT, devPrintfSoft, "Soft Channel") +device(printf, CONSTANT, devPrintfSoftCallback, "Async Soft Channel") +device(printf, INST_IO, devPrintfStdio, "stdio") +recordtype(sel) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("40 - Input") + special(SPC_NOMOD) + asl(ASL0) + prompt("Result") + } + field(SELM, DBF_MENU) { + promptgroup("30 - Action") + menu(selSELM) + prompt("Select Mechanism") + } + field(SELN, DBF_USHORT) { + prompt("Index value") + } + field(PREC, DBF_SHORT) { + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(NVL, DBF_INLINK) { + promptgroup("30 - Action") + interest(1) + prompt("Index Value Location") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input F") + } + field(INPG, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input L") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Rng") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(A, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input A") + } + field(B, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input B") + } + field(C, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input C") + } + field(D, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input D") + } + field(E, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input E") + } + field(F, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input F") + } + field(G, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input G") + } + field(H, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input H") + } + field(I, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input I") + } + field(J, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input J") + } + field(K, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input K") + } + field(L, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input L") + } + field(LA, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of A") + } + field(LB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of B") + } + field(LC, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of C") + } + field(LD, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of D") + } + field(LE, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of E") + } + field(LF, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of F") + } + field(LG, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of G") + } + field(LH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of H") + } + field(LI, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of I") + } + field(LJ, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of J") + } + field(LK, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of K") + } + field(LL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of L") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(NLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Index Monitored") + } +} +recordtype(bi) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct biRecord; + %typedef struct bidset { + % dset common; + % long (*read_bi)(struct biRecord *prec); + %} bidset; + %#define HAS_bidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(VAL, DBF_ENUM) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + } + field(ZSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Zero Error Severity") + } + field(OSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("One Error Severity") + } + field(COSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Change of State Svr") + } + field(ZNAM, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(26) + prompt("Zero Name") + } + field(ONAM, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(26) + prompt("One Name") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("prev Raw Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(LALM, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(MLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_ULONG) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuSimm) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(bi, CONSTANT, devBiSoft, "Soft Channel") +device(bi, CONSTANT, devBiSoftRaw, "Raw Soft Channel") +device(bi, CONSTANT, devBiSoftCallback, "Async Soft Channel") +device(bi, INST_IO, devBiDbState, "Db State") +recordtype(lso) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct lsoRecord; + %typedef struct lsodset { + % dset common; + % long (*write_string)(struct lsoRecord *prec); + %} lsodset; + %#define HAS_lsodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("char *val") + pp(TRUE) + prompt("Current Value") + } + field(OVAL, DBF_NOACCESS) { + special(SPC_DBADDR) + extra("char *oval") + interest(3) + prompt("Previous Value") + } + field(SIZV, DBF_USHORT) { + promptgroup("50 - Output") + special(SPC_NOMOD) + initial("41") + interest(1) + prompt("Size of buffers") + } + field(LEN, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Length of VAL") + } + field(OLEN, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Length of OVAL") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Link") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID Output Action") + } + field(IVOV, DBF_STRING) { + promptgroup("50 - Output") + interest(2) + size(40) + prompt("INVALID Output Value") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(menuPost) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(menuPost) + interest(1) + prompt("Post Archive Monitors") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(lso, CONSTANT, devLsoSoft, "Soft Channel") +device(lso, CONSTANT, devLsoSoftCallback, "Async Soft Channel") +device(lso, INST_IO, devLsoStdio, "stdio") +recordtype(subArray) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct subArrayRecord; + %typedef struct sadset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_sa)(struct subArrayRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} sadset; + %#define HAS_sadset + % + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(FTVL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_NOMOD) + menu(menuFtype) + interest(1) + prompt("Field Type of Value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(MALM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Maximum Elements") + } + field(NELM, DBF_ULONG) { + promptgroup("30 - Action") + initial("1") + pp(TRUE) + prompt("Number of Elements") + } + field(INDX, DBF_ULONG) { + promptgroup("30 - Action") + pp(TRUE) + prompt("Substring Index") + } + field(BUSY, DBF_SHORT) { + special(SPC_NOMOD) + prompt("Busy Indicator") + } + field(NORD, DBF_LONG) { + special(SPC_NOMOD) + prompt("Number elements read") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * bptr") + interest(4) + prompt("Buffer Pointer") + } +} +device(subArray, CONSTANT, devSASoft, "Soft Channel") +recordtype(calc) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %#include "postfix.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + prompt("Result") + } + field(CALC, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_CALC) + initial("0") + pp(TRUE) + size(80) + prompt("Calculation") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input F") + } + field(INPG, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input L") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Rng") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(A, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input A") + } + field(B, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input B") + } + field(C, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input C") + } + field(D, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input D") + } + field(E, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input E") + } + field(F, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input F") + } + field(G, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input G") + } + field(H, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input H") + } + field(I, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input I") + } + field(J, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input J") + } + field(K, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input K") + } + field(L, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input L") + } + field(LA, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of A") + } + field(LB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of B") + } + field(LC, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of C") + } + field(LD, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of D") + } + field(LE, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of E") + } + field(LF, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of F") + } + field(LG, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of G") + } + field(LH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of H") + } + field(LI, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of I") + } + field(LJ, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of J") + } + field(LK, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of K") + } + field(LL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of L") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(RPCL, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("char rpcl[INFIX_TO_POSTFIX_SIZE(80)]") + interest(4) + prompt("Reverse Polish Calc") + } +} +recordtype(mbboDirect) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct mbboDirectRecord; + %typedef struct mbbodirectdset { + % dset common; /*init_record returns: (0, 2)=>(success, success no convert)*/ + % long (*write_mbbo)(struct mbboDirectRecord *prec); /*returns: (0, 2)=>(success, success no convert)*/ + %} mbbodirectdset; + %#define HAS_mbbodirectdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Word") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + special(SPC_RESET) + menu(menuOmsl) + interest(1) + pp(TRUE) + prompt("Output Mode Select") + } + field(NOBT, DBF_SHORT) { + promptgroup("50 - Output") + special(SPC_NOMOD) + interest(1) + prompt("Number of Bits") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(RVAL, DBF_ULONG) { + special(SPC_NOMOD) + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Raw Value") + } + field(RBV, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Readback Value") + } + field(ORBV, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Readback Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(MLST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(SHFT, DBF_USHORT) { + promptgroup("50 - Output") + interest(1) + prompt("Shift") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID outpt action") + } + field(IVOV, DBF_LONG) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } + field(B0, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 0") + } + field(B1, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 1") + } + field(B2, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 2") + } + field(B3, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 3") + } + field(B4, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 4") + } + field(B5, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 5") + } + field(B6, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 6") + } + field(B7, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 7") + } + field(B8, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 8") + } + field(B9, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 9") + } + field(BA, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 10") + } + field(BB, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 11") + } + field(BC, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 12") + } + field(BD, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 13") + } + field(BE, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 14") + } + field(BF, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 15") + } + field(B10, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 16") + } + field(B11, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 17") + } + field(B12, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 18") + } + field(B13, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 19") + } + field(B14, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 20") + } + field(B15, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 21") + } + field(B16, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 22") + } + field(B17, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 23") + } + field(B18, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 24") + } + field(B19, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 25") + } + field(B1A, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 26") + } + field(B1B, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 27") + } + field(B1C, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 28") + } + field(B1D, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 29") + } + field(B1E, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 30") + } + field(B1F, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 31") + } +} +device(mbboDirect, CONSTANT, devMbboDirectSoft, "Soft Channel") +device(mbboDirect, CONSTANT, devMbboDirectSoftRaw, "Raw Soft Channel") +device(mbboDirect, CONSTANT, devMbboDirectSoftCallback, "Async Soft Channel") +recordtype(longout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct longoutRecord; + %typedef struct longoutdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*write_longout)(struct longoutRecord *prec); /*(-1,0)=>(failure,success*/ + %} longoutdset; + %#define HAS_longoutdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Desired Output") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(DRVH, DBF_LONG) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive High Limit") + } + field(DRVL, DBF_LONG) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive Low Limit") + } + field(HOPR, DBF_LONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_LONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_LONG) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_LONG) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_LONG) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Output Specifctn") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Mode Location") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Sim mode Alarm Svrty") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_LONG) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } +} +device(longout, CONSTANT, devLoSoft, "Soft Channel") +device(longout, CONSTANT, devLoSoftCallback, "Async Soft Channel") +recordtype(aSub) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %struct aSubRecord; + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + asl(ASL0) + prompt("Subr. return value") + } + field(OVAL, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Old return value") + } + field(INAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_NOMOD) + interest(1) + size(41) + prompt("Initialize Subr. Name") + } + field(LFLG, DBF_MENU) { + promptgroup("30 - Action") + menu(aSubLFLG) + interest(1) + prompt("Subr. Input Enable") + } + field(SUBL, DBF_INLINK) { + promptgroup("30 - Action") + special(SPC_NOMOD) + interest(1) + prompt("Subroutine Name Link") + } + field(SNAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_MOD) + interest(1) + size(41) + prompt("Process Subr. Name") + } + field(ONAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_NOMOD) + interest(3) + size(41) + prompt("Old Subr. Name") + } + field(SADR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("long (*sadr)(struct aSubRecord *)") + interest(2) + prompt("Subroutine Address") + } + field(CADR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void (*cadr)(struct aSubRecord *)") + interest(2) + prompt("Subroutine Cleanup Address") + } + field(BRSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Bad Return Severity") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(EFLG, DBF_MENU) { + promptgroup("50 - Output") + menu(aSubEFLG) + initial("1") + interest(1) + prompt("Output Event Flag") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link F") + } + field(INPG, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link L") + } + field(INPM, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link M") + } + field(INPN, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link N") + } + field(INPO, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link O") + } + field(INPP, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link P") + } + field(INPQ, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link Q") + } + field(INPR, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link R") + } + field(INPS, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link S") + } + field(INPT, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link T") + } + field(INPU, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link U") + } + field(A, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *a") + interest(2) + prompt("Input value A") + } + field(B, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *b") + interest(2) + prompt("Input value B") + } + field(C, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *c") + interest(2) + prompt("Input value C") + } + field(D, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *d") + interest(2) + prompt("Input value D") + } + field(E, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *e") + interest(2) + prompt("Input value E") + } + field(F, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *f") + interest(2) + prompt("Input value F") + } + field(G, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *g") + interest(2) + prompt("Input value G") + } + field(H, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *h") + interest(2) + prompt("Input value H") + } + field(I, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *i") + interest(2) + prompt("Input value I") + } + field(J, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *j") + interest(2) + prompt("Input value J") + } + field(K, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *k") + interest(2) + prompt("Input value K") + } + field(L, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *l") + interest(2) + prompt("Input value L") + } + field(M, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *m") + interest(2) + prompt("Input value M") + } + field(N, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *n") + interest(2) + prompt("Input value N") + } + field(O, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *o") + interest(2) + prompt("Input value O") + } + field(P, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *p") + interest(2) + prompt("Input value P") + } + field(Q, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *q") + interest(2) + prompt("Input value Q") + } + field(R, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *r") + interest(2) + prompt("Input value R") + } + field(S, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *s") + interest(2) + prompt("Input value S") + } + field(T, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *t") + interest(2) + prompt("Input value T") + } + field(U, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *u") + interest(2) + prompt("Input value U") + } + field(FTA, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of A") + } + field(FTB, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of B") + } + field(FTC, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of C") + } + field(FTD, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of D") + } + field(FTE, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of E") + } + field(FTF, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of F") + } + field(FTG, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of G") + } + field(FTH, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of H") + } + field(FTI, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of I") + } + field(FTJ, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of J") + } + field(FTK, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of K") + } + field(FTL, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of L") + } + field(FTM, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of M") + } + field(FTN, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of N") + } + field(FTO, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of O") + } + field(FTP, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of P") + } + field(FTQ, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of Q") + } + field(FTR, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of R") + } + field(FTS, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of S") + } + field(FTT, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of T") + } + field(FTU, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of U") + } + field(NOA, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in A") + } + field(NOB, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in B") + } + field(NOC, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in C") + } + field(NOD, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in D") + } + field(NOE, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in E") + } + field(NOF, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in F") + } + field(NOG, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in G") + } + field(NOH, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in H") + } + field(NOI, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in I") + } + field(NOJ, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in J") + } + field(NOK, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in K") + } + field(NOL, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in L") + } + field(NOM, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in M") + } + field(NON, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in N") + } + field(NOO, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in O") + } + field(NOP, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in P") + } + field(NOQ, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in Q") + } + field(NOR, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in R") + } + field(NOS, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in S") + } + field(NOT, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in T") + } + field(NOU, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in U") + } + field(NEA, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in A") + } + field(NEB, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in B") + } + field(NEC, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in C") + } + field(NED, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in D") + } + field(NEE, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in E") + } + field(NEF, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in F") + } + field(NEG, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in G") + } + field(NEH, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in H") + } + field(NEI, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in I") + } + field(NEJ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in J") + } + field(NEK, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in K") + } + field(NEL, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in L") + } + field(NEM, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in M") + } + field(NEN, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in N") + } + field(NEO, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in O") + } + field(NEP, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in P") + } + field(NEQ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in Q") + } + field(NER, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in R") + } + field(NES, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in S") + } + field(NET, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in T") + } + field(NEU, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in U") + } + field(OUTA, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link A") + } + field(OUTB, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link B") + } + field(OUTC, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link C") + } + field(OUTD, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link D") + } + field(OUTE, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link E") + } + field(OUTF, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link F") + } + field(OUTG, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link G") + } + field(OUTH, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link H") + } + field(OUTI, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link I") + } + field(OUTJ, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link J") + } + field(OUTK, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link K") + } + field(OUTL, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link L") + } + field(OUTM, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link M") + } + field(OUTN, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link N") + } + field(OUTO, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link O") + } + field(OUTP, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link P") + } + field(OUTQ, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link Q") + } + field(OUTR, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link R") + } + field(OUTS, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link S") + } + field(OUTT, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link T") + } + field(OUTU, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link U") + } + field(VALA, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vala") + interest(2) + prompt("Output value A") + } + field(VALB, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valb") + interest(2) + prompt("Output value B") + } + field(VALC, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valc") + interest(2) + prompt("Output value C") + } + field(VALD, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vald") + interest(2) + prompt("Output value D") + } + field(VALE, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vale") + interest(2) + prompt("Output value E") + } + field(VALF, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valf") + interest(2) + prompt("Output value F") + } + field(VALG, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valg") + interest(2) + prompt("Output value G") + } + field(VALH, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valh") + interest(2) + prompt("Output value H") + } + field(VALI, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vali") + interest(2) + prompt("Output value I") + } + field(VALJ, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valj") + interest(2) + prompt("Output value J") + } + field(VALK, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valk") + interest(2) + prompt("Output value K") + } + field(VALL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vall") + interest(2) + prompt("Output value L") + } + field(VALM, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valm") + interest(2) + prompt("Output value M") + } + field(VALN, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valn") + interest(2) + prompt("Output value N") + } + field(VALO, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valo") + interest(2) + prompt("Output value O") + } + field(VALP, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valp") + interest(2) + prompt("Output value P") + } + field(VALQ, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valq") + interest(2) + prompt("Output value Q") + } + field(VALR, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valr") + interest(2) + prompt("Output value R") + } + field(VALS, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vals") + interest(2) + prompt("Output value S") + } + field(VALT, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valt") + interest(2) + prompt("Output value T") + } + field(VALU, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valu") + interest(2) + prompt("Output value U") + } + field(OVLA, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovla") + interest(4) + prompt("Old Output A") + } + field(OVLB, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlb") + interest(4) + prompt("Old Output B") + } + field(OVLC, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlc") + interest(4) + prompt("Old Output C") + } + field(OVLD, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovld") + interest(4) + prompt("Old Output D") + } + field(OVLE, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovle") + interest(4) + prompt("Old Output E") + } + field(OVLF, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlf") + interest(4) + prompt("Old Output F") + } + field(OVLG, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlg") + interest(4) + prompt("Old Output G") + } + field(OVLH, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlh") + interest(4) + prompt("Old Output H") + } + field(OVLI, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovli") + interest(4) + prompt("Old Output I") + } + field(OVLJ, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlj") + interest(4) + prompt("Old Output J") + } + field(OVLK, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlk") + interest(4) + prompt("Old Output K") + } + field(OVLL, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovll") + interest(4) + prompt("Old Output L") + } + field(OVLM, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlm") + interest(4) + prompt("Old Output M") + } + field(OVLN, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovln") + interest(4) + prompt("Old Output N") + } + field(OVLO, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlo") + interest(4) + prompt("Old Output O") + } + field(OVLP, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlp") + interest(4) + prompt("Old Output P") + } + field(OVLQ, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlq") + interest(4) + prompt("Old Output Q") + } + field(OVLR, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlr") + interest(4) + prompt("Old Output R") + } + field(OVLS, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovls") + interest(4) + prompt("Old Output S") + } + field(OVLT, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlt") + interest(4) + prompt("Old Output T") + } + field(OVLU, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlu") + interest(4) + prompt("Old Output U") + } + field(FTVA, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALA") + } + field(FTVB, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALB") + } + field(FTVC, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALC") + } + field(FTVD, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALD") + } + field(FTVE, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALE") + } + field(FTVF, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALF") + } + field(FTVG, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALG") + } + field(FTVH, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALH") + } + field(FTVI, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALI") + } + field(FTVJ, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALJ") + } + field(FTVK, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALK") + } + field(FTVL, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALL") + } + field(FTVM, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALM") + } + field(FTVN, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALN") + } + field(FTVO, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALO") + } + field(FTVP, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALP") + } + field(FTVQ, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALQ") + } + field(FTVR, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALR") + } + field(FTVS, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALS") + } + field(FTVT, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALT") + } + field(FTVU, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALU") + } + field(NOVA, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALA") + } + field(NOVB, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALB") + } + field(NOVC, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALC") + } + field(NOVD, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALD") + } + field(NOVE, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALE") + } + field(NOVF, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALF") + } + field(NOVG, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALG") + } + field(NOVH, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VAlH") + } + field(NOVI, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALI") + } + field(NOVJ, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALJ") + } + field(NOVK, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALK") + } + field(NOVL, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALL") + } + field(NOVM, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALM") + } + field(NOVN, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALN") + } + field(NOVO, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALO") + } + field(NOVP, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALP") + } + field(NOVQ, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALQ") + } + field(NOVR, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALR") + } + field(NOVS, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALS") + } + field(NOVT, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALT") + } + field(NOVU, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALU") + } + field(NEVA, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALA") + } + field(NEVB, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALB") + } + field(NEVC, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALC") + } + field(NEVD, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALD") + } + field(NEVE, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALE") + } + field(NEVF, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALF") + } + field(NEVG, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALG") + } + field(NEVH, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VAlH") + } + field(NEVI, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALI") + } + field(NEVJ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALJ") + } + field(NEVK, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALK") + } + field(NEVL, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALL") + } + field(NEVM, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALM") + } + field(NEVN, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALN") + } + field(NEVO, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALO") + } + field(NEVP, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALP") + } + field(NEVQ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALQ") + } + field(NEVR, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALR") + } + field(NEVS, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALS") + } + field(NEVT, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALT") + } + field(NEVU, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALU") + } + field(ONVA, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLA") + } + field(ONVB, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLB") + } + field(ONVC, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLC") + } + field(ONVD, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLD") + } + field(ONVE, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLE") + } + field(ONVF, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLF") + } + field(ONVG, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLG") + } + field(ONVH, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in VAlH") + } + field(ONVI, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLI") + } + field(ONVJ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLJ") + } + field(ONVK, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLK") + } + field(ONVL, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLL") + } + field(ONVM, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLM") + } + field(ONVN, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLN") + } + field(ONVO, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLO") + } + field(ONVP, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLP") + } + field(ONVQ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLQ") + } + field(ONVR, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLR") + } + field(ONVS, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLS") + } + field(ONVT, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLT") + } + field(ONVU, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLU") + } +} +recordtype(sub) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %struct subRecord; + %typedef long (*SUBFUNCPTR)(struct subRecord *); + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + asl(ASL0) + pp(TRUE) + prompt("Result") + } + field(INAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_NOMOD) + interest(1) + size(40) + prompt("Init Routine Name") + } + field(SNAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_MOD) + interest(1) + size(40) + prompt("Subroutine Name") + } + field(SADR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("SUBFUNCPTR sadr") + interest(4) + prompt("Subroutine Address") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input F") + } + field(INPG, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input L") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(BRSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Bad Return Severity") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(A, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input A") + } + field(B, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input B") + } + field(C, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input C") + } + field(D, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input D") + } + field(E, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input E") + } + field(F, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input F") + } + field(G, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input G") + } + field(H, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input H") + } + field(I, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input I") + } + field(J, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input J") + } + field(K, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input K") + } + field(L, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input L") + } + field(LA, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of A") + } + field(LB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of B") + } + field(LC, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of C") + } + field(LD, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of D") + } + field(LE, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of E") + } + field(LF, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of F") + } + field(LG, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of G") + } + field(LH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of H") + } + field(LI, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of I") + } + field(LJ, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of J") + } + field(LK, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of K") + } + field(LL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of L") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } +} +recordtype(int64in) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct int64inRecord; + %typedef struct int64indset { + % dset common; + % long (*read_int64in)(struct int64inRecord *prec); + %} int64indset; + %#define HAS_int64indset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_INT64) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Units name") + } + field(HOPR, DBF_INT64) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_INT64) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_INT64) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(ADEL, DBF_INT64) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_INT64) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_INT64) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(int64in, CONSTANT, devI64inSoft, "Soft Channel") +device(int64in, CONSTANT, devI64inSoftCallback, "Async Soft Channel") +recordtype(ai) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct aiRecord; + %typedef struct aidset { + % dset common; + % long (*read_ai)(struct aiRecord *prec); + % long (*special_linconv)(struct aiRecord *prec, int after); + %} aidset; + %#define HAS_aidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current EGU Value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(LINR, DBF_MENU) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + menu(menuConvert) + interest(1) + pp(TRUE) + prompt("Linearization") + } + field(EGUF, DBF_DOUBLE) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + interest(1) + pp(TRUE) + prompt("Engineer Units Full") + } + field(EGUL, DBF_DOUBLE) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + interest(1) + pp(TRUE) + prompt("Engineer Units Low") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(AOFF, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(1) + pp(TRUE) + prompt("Adjustment Offset") + } + field(ASLO, DBF_DOUBLE) { + promptgroup("60 - Convert") + initial("1") + interest(1) + pp(TRUE) + prompt("Adjustment Slope") + } + field(SMOO, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(1) + prompt("Smoothing") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(ESLO, DBF_DOUBLE) { + promptgroup("60 - Convert") + initial("1") + interest(2) + pp(TRUE) + prompt("Raw to EGU Slope") + } + field(EOFF, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(2) + pp(TRUE) + prompt("Raw to EGU Offset") + } + field(ROFF, DBF_ULONG) { + interest(2) + pp(TRUE) + prompt("Raw Offset") + } + field(PBRK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * pbrk") + interest(4) + prompt("Ptrto brkTable") + } + field(INIT, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Initialized?") + } + field(LBRK, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("LastBreak Point") + } + field(RVAL, DBF_LONG) { + pp(TRUE) + prompt("Current Raw Value") + } + field(ORAW, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Previous Raw Value") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_DOUBLE) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuSimm) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(ai, CONSTANT, devAiSoft, "Soft Channel") +device(ai, CONSTANT, devAiSoftRaw, "Raw Soft Channel") +device(ai, CONSTANT, devAiSoftCallback, "Async Soft Channel") +device(ai, INST_IO, devTimestampAI, "Soft Timestamp") +device(ai, INST_IO, devAiGeneralTime, "General Time") +device(ai, INST_IO, devAiStats, "IOC stats") +device(ai, INST_IO, devAiClusts, "IOC stats clusts") +device(ai, CONSTANT, devAiDBCLC, "DBCLC") +device(ai, CONSTANT, devAiDBDLC, "DBDLC") +device(ai, INST_IO, devSysMonAiStats, "sysmon") +recordtype(stringin) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct stringinRecord; + %typedef struct stringindset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_stringin)(struct stringinRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} stringindset; + %#define HAS_stringindset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + size(40) + prompt("Current Value") + } + field(OVAL, DBF_STRING) { + special(SPC_NOMOD) + interest(3) + size(40) + prompt("Previous Value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(stringinPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(stringinPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_STRING) { + pp(TRUE) + size(40) + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(stringin, CONSTANT, devSiSoft, "Soft Channel") +device(stringin, CONSTANT, devSiSoftCallback, "Async Soft Channel") +device(stringin, INST_IO, devTimestampSI, "Soft Timestamp") +device(stringin, INST_IO, devSiGeneralTime, "General Time") +device(stringin, INST_IO, devSiEnviron, "getenv") +device(stringin, INST_IO, devStringinStats, "IOC stats") +device(stringin, INST_IO, devStringinEnvVar, "IOC env var") +device(stringin, INST_IO, devStringinEpics, "IOC epics var") +device(stringin, INST_IO, devSysMonSiStats, "sysmon") +link(state, lnkStateIf) +link(calc, lnkCalcIf) +link(trace, lnkTraceIf) +link(debug, lnkDebugIf) +link(const, lnkConstIf) +registrar(tsInitialize) +registrar(syncInitialize) +registrar(dbrestoreRegister) +registrar(iocSetLogLevelRegister) +registrar(save_restoreRegister) +registrar(decInitialize) +registrar(iocSetSimEnableRegister) +registrar(arrInitialize) +registrar(asInitHooksRegister) +registrar(dbndInitialize) +registrar(iocSetLogSyslogRegister) +registrar(configMenuRegistrar) +registrar(asSub) +registrar(iocSetLogStdoutRegister) +registrar(rsrvRegistrar) +registrar(iocSetLogInitRegister) +function(scanMon) +function(rebootProc) +function(scanMonInit) +variable(dbTemplateMaxVars, int) +variable(lnkDebug_debug, int) +variable(asCaDebug, int) +variable(callbackParallelThreadsDefault, int) +variable(save_restoreRemountThreshold, int) +variable(dbAccessDebugPUTF, int) +variable(dbRecordsOnceOnly, int) +variable(save_restoreDebug, int) +variable(save_restoreDatedBackupFiles, int) +variable(calcoutODLYlimit, double) +variable(configMenuDebug, int) +variable(save_restoreIncompleteSetsOk, int) +variable(dbBptNotMonotonic, int) +variable(atExitDebug, int) +variable(boHIGHlimit, double) +variable(dbJLinkDebug, int) +variable(dbConvertStrict, int) +variable(seqDLYprecision, int) +variable(logClientDebug, int) +variable(dbQuietMacroWarnings, int) +variable(save_restoreNumSeqFiles, int) +variable(boHIGHprecision, int) +variable(dbRecordsAbcSorted, int) +variable(seqDLYlimit, double) +variable(calcoutODLYprecision, int) +variable(histogramSDELprecision, int) +variable(dbThreadRealtimeLock, int) +variable(CASDEBUG, int) +variable(save_restoreSeqPeriodInSeconds, int) diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.linux-x86_64/EC-GN b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.linux-x86_64/EC-GN new file mode 100755 index 0000000000000000000000000000000000000000..888f6e1cacce6083f7da33c8434b01846ecb5e6c GIT binary patch literal 45464 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 X@cPtwheLboY@@?-p+AG%%=G^cV|=|} literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.linux-x86_64/EC-GN.dbd.d b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.linux-x86_64/EC-GN.dbd.d new file mode 100644 index 0000000..8887f28 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.linux-x86_64/EC-GN.dbd.d @@ -0,0 +1,122 @@ +../O.Common/EC-GN.dbd: /opt/codac-6.3/epics/dbd/base.dbd \ + /opt/codac-6.3/epics/dbd/menuGlobal.dbd \ + /opt/codac-6.3/epics/dbd/menuAlarmSevr.dbd \ + /opt/codac-6.3/epics/dbd/menuAlarmStat.dbd \ + /opt/codac-6.3/epics/dbd/menuFtype.dbd \ + /opt/codac-6.3/epics/dbd/menuIvoa.dbd \ + /opt/codac-6.3/epics/dbd/menuOmsl.dbd \ + /opt/codac-6.3/epics/dbd/menuPini.dbd \ + /opt/codac-6.3/epics/dbd/menuPost.dbd \ + /opt/codac-6.3/epics/dbd/menuPriority.dbd \ + /opt/codac-6.3/epics/dbd/menuYesNo.dbd \ + /opt/codac-6.3/epics/dbd/menuSimm.dbd \ + /opt/codac-6.3/epics/dbd/menuConvert.dbd \ + /opt/codac-6.3/epics/dbd/menuScan.dbd \ + /opt/codac-6.3/epics/dbd/stdRecords.dbd \ + /opt/codac-6.3/epics/dbd/aaiRecord.dbd \ + /opt/codac-6.3/epics/dbd/dbCommon.dbd \ + /opt/codac-6.3/epics/dbd/aaoRecord.dbd \ + /opt/codac-6.3/epics/dbd/aiRecord.dbd \ + /opt/codac-6.3/epics/dbd/aoRecord.dbd \ + /opt/codac-6.3/epics/dbd/aSubRecord.dbd \ + /opt/codac-6.3/epics/dbd/biRecord.dbd \ + /opt/codac-6.3/epics/dbd/boRecord.dbd \ + /opt/codac-6.3/epics/dbd/calcRecord.dbd \ + /opt/codac-6.3/epics/dbd/calcoutRecord.dbd \ + /opt/codac-6.3/epics/dbd/compressRecord.dbd \ + /opt/codac-6.3/epics/dbd/dfanoutRecord.dbd \ + /opt/codac-6.3/epics/dbd/eventRecord.dbd \ + /opt/codac-6.3/epics/dbd/fanoutRecord.dbd \ + /opt/codac-6.3/epics/dbd/histogramRecord.dbd \ + /opt/codac-6.3/epics/dbd/int64inRecord.dbd \ + /opt/codac-6.3/epics/dbd/int64outRecord.dbd \ + /opt/codac-6.3/epics/dbd/longinRecord.dbd \ + /opt/codac-6.3/epics/dbd/longoutRecord.dbd \ + /opt/codac-6.3/epics/dbd/lsiRecord.dbd \ + /opt/codac-6.3/epics/dbd/lsoRecord.dbd \ + /opt/codac-6.3/epics/dbd/mbbiRecord.dbd \ + /opt/codac-6.3/epics/dbd/mbbiDirectRecord.dbd \ + /opt/codac-6.3/epics/dbd/mbboRecord.dbd \ + /opt/codac-6.3/epics/dbd/mbboDirectRecord.dbd \ + /opt/codac-6.3/epics/dbd/permissiveRecord.dbd \ + /opt/codac-6.3/epics/dbd/printfRecord.dbd \ + /opt/codac-6.3/epics/dbd/selRecord.dbd \ + /opt/codac-6.3/epics/dbd/seqRecord.dbd \ + /opt/codac-6.3/epics/dbd/stateRecord.dbd \ + /opt/codac-6.3/epics/dbd/stringinRecord.dbd \ + /opt/codac-6.3/epics/dbd/stringoutRecord.dbd \ + /opt/codac-6.3/epics/dbd/subRecord.dbd \ + /opt/codac-6.3/epics/dbd/subArrayRecord.dbd \ + /opt/codac-6.3/epics/dbd/waveformRecord.dbd \ + /opt/codac-6.3/epics/dbd/filters.dbd \ + /opt/codac-6.3/epics/dbd/links.dbd \ + /opt/codac-6.3/epics/dbd/devSoft.dbd \ + /opt/codac-6.3/epics/dbd/asSub.dbd \ + /opt/codac-6.3/epics/dbd/dbCore.dbd \ + /opt/codac-6.3/epics/dbd/rsrv.dbd \ + /opt/codac-6.3/epics/dbd/std.dbd \ + /opt/codac-6.3/epics/dbd/autosave.dbd \ + /opt/codac-6.3/epics/dbd/iocmon.dbd \ + /opt/codac-6.3/epics/dbd/sysmon.dbd + +/opt/codac-6.3/epics/dbd/base.dbd: +/opt/codac-6.3/epics/dbd/menuGlobal.dbd: +/opt/codac-6.3/epics/dbd/menuAlarmSevr.dbd: +/opt/codac-6.3/epics/dbd/menuAlarmStat.dbd: +/opt/codac-6.3/epics/dbd/menuFtype.dbd: +/opt/codac-6.3/epics/dbd/menuIvoa.dbd: +/opt/codac-6.3/epics/dbd/menuOmsl.dbd: +/opt/codac-6.3/epics/dbd/menuPini.dbd: +/opt/codac-6.3/epics/dbd/menuPost.dbd: +/opt/codac-6.3/epics/dbd/menuPriority.dbd: +/opt/codac-6.3/epics/dbd/menuYesNo.dbd: +/opt/codac-6.3/epics/dbd/menuSimm.dbd: +/opt/codac-6.3/epics/dbd/menuConvert.dbd: +/opt/codac-6.3/epics/dbd/menuScan.dbd: +/opt/codac-6.3/epics/dbd/stdRecords.dbd: +/opt/codac-6.3/epics/dbd/aaiRecord.dbd: +/opt/codac-6.3/epics/dbd/dbCommon.dbd: +/opt/codac-6.3/epics/dbd/aaoRecord.dbd: +/opt/codac-6.3/epics/dbd/aiRecord.dbd: +/opt/codac-6.3/epics/dbd/aoRecord.dbd: +/opt/codac-6.3/epics/dbd/aSubRecord.dbd: +/opt/codac-6.3/epics/dbd/biRecord.dbd: +/opt/codac-6.3/epics/dbd/boRecord.dbd: +/opt/codac-6.3/epics/dbd/calcRecord.dbd: +/opt/codac-6.3/epics/dbd/calcoutRecord.dbd: +/opt/codac-6.3/epics/dbd/compressRecord.dbd: +/opt/codac-6.3/epics/dbd/dfanoutRecord.dbd: +/opt/codac-6.3/epics/dbd/eventRecord.dbd: +/opt/codac-6.3/epics/dbd/fanoutRecord.dbd: +/opt/codac-6.3/epics/dbd/histogramRecord.dbd: +/opt/codac-6.3/epics/dbd/int64inRecord.dbd: +/opt/codac-6.3/epics/dbd/int64outRecord.dbd: +/opt/codac-6.3/epics/dbd/longinRecord.dbd: +/opt/codac-6.3/epics/dbd/longoutRecord.dbd: +/opt/codac-6.3/epics/dbd/lsiRecord.dbd: +/opt/codac-6.3/epics/dbd/lsoRecord.dbd: +/opt/codac-6.3/epics/dbd/mbbiRecord.dbd: +/opt/codac-6.3/epics/dbd/mbbiDirectRecord.dbd: +/opt/codac-6.3/epics/dbd/mbboRecord.dbd: +/opt/codac-6.3/epics/dbd/mbboDirectRecord.dbd: +/opt/codac-6.3/epics/dbd/permissiveRecord.dbd: +/opt/codac-6.3/epics/dbd/printfRecord.dbd: +/opt/codac-6.3/epics/dbd/selRecord.dbd: +/opt/codac-6.3/epics/dbd/seqRecord.dbd: +/opt/codac-6.3/epics/dbd/stateRecord.dbd: +/opt/codac-6.3/epics/dbd/stringinRecord.dbd: +/opt/codac-6.3/epics/dbd/stringoutRecord.dbd: +/opt/codac-6.3/epics/dbd/subRecord.dbd: +/opt/codac-6.3/epics/dbd/subArrayRecord.dbd: +/opt/codac-6.3/epics/dbd/waveformRecord.dbd: +/opt/codac-6.3/epics/dbd/filters.dbd: +/opt/codac-6.3/epics/dbd/links.dbd: +/opt/codac-6.3/epics/dbd/devSoft.dbd: +/opt/codac-6.3/epics/dbd/asSub.dbd: +/opt/codac-6.3/epics/dbd/dbCore.dbd: +/opt/codac-6.3/epics/dbd/rsrv.dbd: +/opt/codac-6.3/epics/dbd/std.dbd: +/opt/codac-6.3/epics/dbd/autosave.dbd: +/opt/codac-6.3/epics/dbd/iocmon.dbd: +/opt/codac-6.3/epics/dbd/sysmon.dbd: +../O.Common/EC-GN.dbd: ../Makefile diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.linux-x86_64/EC-GNMain.d b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.linux-x86_64/EC-GNMain.d new file mode 100644 index 0000000..6f193c6 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.linux-x86_64/EC-GNMain.d @@ -0,0 +1,16 @@ +EC-GNMain.o: ../EC-GNMain.cpp /opt/codac-6.3/epics/include/epicsExit.h \ + /opt/codac-6.3/epics/include/libComAPI.h \ + /opt/codac-6.3/epics/include/epicsThread.h \ + /opt/codac-6.3/epics/include/libComAPI.h \ + /opt/codac-6.3/epics/include/epicsEvent.h \ + /opt/codac-6.3/epics/include/os/Linux/osdEvent.h \ + /opt/codac-6.3/epics/include/epicsMutex.h \ + /opt/codac-6.3/epics/include/epicsAssert.h \ + /opt/codac-6.3/epics/include/compilerDependencies.h \ + /opt/codac-6.3/epics/include/compiler/gcc/compilerSpecific.h \ + /opt/codac-6.3/epics/include/epicsGuard.h \ + /opt/codac-6.3/epics/include/os/Linux/osdMutex.h \ + /opt/codac-6.3/epics/include/os/Linux/osdThread.h \ + /opt/codac-6.3/epics/include/ellLib.h \ + /opt/codac-6.3/epics/include/epicsEvent.h \ + /opt/codac-6.3/epics/include/iocsh.h diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.linux-x86_64/EC-GNMain.o b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.linux-x86_64/EC-GNMain.o new file mode 100644 index 0000000000000000000000000000000000000000..005701bc5770c2ab00b86cd46d22db81f5b1013c GIT binary patch literal 1928 zcmbu9-)qxw5Wp|ZbkWVM4jGgA5K(Xw8`|kc@xir}+K6=zn|%_IERD9h{ve4^1%E(6 z7{2UL{R{jnR8U0!6CZp~!KVrJF8Ln)k|iQ~@Xg(QzIVyxdzU<^)-Pui1y~fg1Y?gW zfHpC@T>NPz;I7_JZC+B6nQ^pvImHUTZNIVtl_oT&P$ym1v(GYD^!cHBRX03+zM^N#x&~nS4?2Opg*xye z-C`?n2LYH(JFvmr@_jHpciT3JVzBK6_xp%?v~N0oPz2NIbvkYrbGp62HSryC80Xv* ziEiuGZO`twqN-#?J(z&+qoiFmu|ohVWRk*>t0`P+suZEZLCG7ND&RRKhzf`HQ5pqE zz0c&ncdX;bzebVJT#^viaWOwf z5QR9MD)RzC6ykKY%!>q3;`dpLaLB11jyELEH4F4#Y5}upX5*7nO1W$NA9GUV$0zk~ z^Uq*DP3OPn)A|0Xex64R3nf02)Hj;mQn)+5SfZfU0#Pq0j=!XN!Kq*L{8{0%+7$-J zGiRSQ)kpa>=d!#IjwwU5DVBtFL$bpSarr1alFfOH?xI1A=1`VT!YRoRZLXU!{SA}O z@0&P3J|{Xq`Yt%1`B7x?-Xj7{6dI5tNxc4~+9~|02xLv)@D#52^Qoq!=QAwhzAW+Q F{|4LKtKR?s literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.linux-x86_64/EC-GN_registerRecordDeviceDriver.cpp b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.linux-x86_64/EC-GN_registerRecordDeviceDriver.cpp new file mode 100644 index 0000000..c3fe39f --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.linux-x86_64/EC-GN_registerRecordDeviceDriver.cpp @@ -0,0 +1,356 @@ +/* THIS IS A GENERATED FILE. DO NOT EDIT! */ +/* Generated from ../O.Common/EC-GN.dbd */ + +#include +#ifndef USE_TYPED_RSET +# define USE_TYPED_RSET +#endif +#include "compilerDependencies.h" +#include "epicsStdlib.h" +#include "iocsh.h" +#include "iocshRegisterCommon.h" +#include "registryCommon.h" +#include "recSup.h" + +extern "C" { + +epicsShareExtern typed_rset *pvar_rset_aSubRSET, *pvar_rset_aaiRSET, + *pvar_rset_aaoRSET, *pvar_rset_aiRSET, *pvar_rset_aoRSET, + *pvar_rset_biRSET, *pvar_rset_boRSET, *pvar_rset_calcRSET, + *pvar_rset_calcoutRSET, *pvar_rset_compressRSET, + *pvar_rset_dfanoutRSET, *pvar_rset_epidRSET, *pvar_rset_eventRSET, + *pvar_rset_fanoutRSET, *pvar_rset_histogramRSET, + *pvar_rset_int64inRSET, *pvar_rset_int64outRSET, + *pvar_rset_longinRSET, *pvar_rset_longoutRSET, *pvar_rset_lsiRSET, + *pvar_rset_lsoRSET, *pvar_rset_mbbiRSET, *pvar_rset_mbbiDirectRSET, + *pvar_rset_mbboRSET, *pvar_rset_mbboDirectRSET, + *pvar_rset_permissiveRSET, *pvar_rset_printfRSET, *pvar_rset_selRSET, + *pvar_rset_seqRSET, *pvar_rset_stateRSET, *pvar_rset_stringinRSET, + *pvar_rset_stringoutRSET, *pvar_rset_subRSET, *pvar_rset_subArrayRSET, + *pvar_rset_timestampRSET, *pvar_rset_waveformRSET; + +typedef int (*rso_func)(dbRecordType *pdbRecordType); +epicsShareExtern rso_func pvar_func_aSubRecordSizeOffset, + pvar_func_aaiRecordSizeOffset, pvar_func_aaoRecordSizeOffset, + pvar_func_aiRecordSizeOffset, pvar_func_aoRecordSizeOffset, + pvar_func_biRecordSizeOffset, pvar_func_boRecordSizeOffset, + pvar_func_calcRecordSizeOffset, pvar_func_calcoutRecordSizeOffset, + pvar_func_compressRecordSizeOffset, pvar_func_dfanoutRecordSizeOffset, + pvar_func_epidRecordSizeOffset, pvar_func_eventRecordSizeOffset, + pvar_func_fanoutRecordSizeOffset, pvar_func_histogramRecordSizeOffset, + pvar_func_int64inRecordSizeOffset, pvar_func_int64outRecordSizeOffset, + pvar_func_longinRecordSizeOffset, pvar_func_longoutRecordSizeOffset, + pvar_func_lsiRecordSizeOffset, pvar_func_lsoRecordSizeOffset, + pvar_func_mbbiRecordSizeOffset, pvar_func_mbbiDirectRecordSizeOffset, + pvar_func_mbboRecordSizeOffset, pvar_func_mbboDirectRecordSizeOffset, + pvar_func_permissiveRecordSizeOffset, + pvar_func_printfRecordSizeOffset, pvar_func_selRecordSizeOffset, + pvar_func_seqRecordSizeOffset, pvar_func_stateRecordSizeOffset, + pvar_func_stringinRecordSizeOffset, + pvar_func_stringoutRecordSizeOffset, pvar_func_subRecordSizeOffset, + pvar_func_subArrayRecordSizeOffset, + pvar_func_timestampRecordSizeOffset, + pvar_func_waveformRecordSizeOffset; + +static const char * const recordTypeNames[] = { + "aSub", "aai", "aao", "ai", "ao", "bi", "bo", "calc", "calcout", + "compress", "dfanout", "epid", "event", "fanout", "histogram", + "int64in", "int64out", "longin", "longout", "lsi", "lso", "mbbi", + "mbbiDirect", "mbbo", "mbboDirect", "permissive", "printf", "sel", + "seq", "state", "stringin", "stringout", "sub", "subArray", + "timestamp", "waveform" +}; + +static const recordTypeLocation rtl[] = { + {(struct typed_rset *)pvar_rset_aSubRSET, pvar_func_aSubRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_aaiRSET, pvar_func_aaiRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_aaoRSET, pvar_func_aaoRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_aiRSET, pvar_func_aiRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_aoRSET, pvar_func_aoRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_biRSET, pvar_func_biRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_boRSET, pvar_func_boRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_calcRSET, pvar_func_calcRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_calcoutRSET, pvar_func_calcoutRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_compressRSET, pvar_func_compressRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_dfanoutRSET, pvar_func_dfanoutRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_epidRSET, pvar_func_epidRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_eventRSET, pvar_func_eventRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_fanoutRSET, pvar_func_fanoutRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_histogramRSET, pvar_func_histogramRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_int64inRSET, pvar_func_int64inRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_int64outRSET, pvar_func_int64outRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_longinRSET, pvar_func_longinRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_longoutRSET, pvar_func_longoutRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_lsiRSET, pvar_func_lsiRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_lsoRSET, pvar_func_lsoRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_mbbiRSET, pvar_func_mbbiRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_mbbiDirectRSET, pvar_func_mbbiDirectRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_mbboRSET, pvar_func_mbboRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_mbboDirectRSET, pvar_func_mbboDirectRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_permissiveRSET, pvar_func_permissiveRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_printfRSET, pvar_func_printfRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_selRSET, pvar_func_selRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_seqRSET, pvar_func_seqRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_stateRSET, pvar_func_stateRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_stringinRSET, pvar_func_stringinRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_stringoutRSET, pvar_func_stringoutRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_subRSET, pvar_func_subRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_subArrayRSET, pvar_func_subArrayRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_timestampRSET, pvar_func_timestampRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_waveformRSET, pvar_func_waveformRecordSizeOffset} +}; + +epicsShareExtern dset *pvar_dset_devAaiSoft, *pvar_dset_devAaoSoft, + *pvar_dset_devAiSoft, *pvar_dset_devAiSoftRaw, + *pvar_dset_devAiSoftCallback, *pvar_dset_devTimestampAI, + *pvar_dset_devAiGeneralTime, *pvar_dset_devAiStats, + *pvar_dset_devAiClusts, *pvar_dset_devAiDBCLC, *pvar_dset_devAiDBDLC, + *pvar_dset_devSysMonAiStats, *pvar_dset_devAoSoft, + *pvar_dset_devAoSoftRaw, *pvar_dset_devAoSoftCallback, + *pvar_dset_devAoStats, *pvar_dset_devBiSoft, *pvar_dset_devBiSoftRaw, + *pvar_dset_devBiSoftCallback, *pvar_dset_devBiDbState, + *pvar_dset_devBoSoft, *pvar_dset_devBoSoftRaw, + *pvar_dset_devBoSoftCallback, *pvar_dset_devBoGeneralTime, + *pvar_dset_devBoDbState, *pvar_dset_devBoSimulation, + *pvar_dset_devCalcoutSoft, *pvar_dset_devCalcoutSoftCallback, + *pvar_dset_devEpidSoft, *pvar_dset_devEpidSoftCB, + *pvar_dset_devEventSoft, *pvar_dset_devHistogramSoft, + *pvar_dset_devI64inSoft, *pvar_dset_devI64inSoftCallback, + *pvar_dset_devI64outSoft, *pvar_dset_devI64outSoftCallback, + *pvar_dset_devLiSoft, *pvar_dset_devLiSoftCallback, + *pvar_dset_devLiGeneralTime, *pvar_dset_devLoSoft, + *pvar_dset_devLoSoftCallback, *pvar_dset_devLsiSoft, + *pvar_dset_devLsiEnviron, *pvar_dset_devLsiStats, + *pvar_dset_devLsoSoft, *pvar_dset_devLsoSoftCallback, + *pvar_dset_devLsoStdio, *pvar_dset_devMbbiSoft, + *pvar_dset_devMbbiSoftRaw, *pvar_dset_devMbbiSoftCallback, + *pvar_dset_devSysMonMbbiStats, *pvar_dset_devMbbiDirectSoft, + *pvar_dset_devMbbiDirectSoftRaw, *pvar_dset_devMbbiDirectSoftCallback, + *pvar_dset_devSysMonMbbiDirectStats, *pvar_dset_devMbboSoft, + *pvar_dset_devMbboSoftRaw, *pvar_dset_devMbboSoftCallback, + *pvar_dset_devMbboDirectSoft, *pvar_dset_devMbboDirectSoftRaw, + *pvar_dset_devMbboDirectSoftCallback, *pvar_dset_devPrintfSoft, + *pvar_dset_devPrintfSoftCallback, *pvar_dset_devPrintfStdio, + *pvar_dset_devSiSoft, *pvar_dset_devSiSoftCallback, + *pvar_dset_devTimestampSI, *pvar_dset_devSiGeneralTime, + *pvar_dset_devSiEnviron, *pvar_dset_devStringinStats, + *pvar_dset_devStringinEnvVar, *pvar_dset_devStringinEpics, + *pvar_dset_devSysMonSiStats, *pvar_dset_devSoSoft, + *pvar_dset_devSoSoftCallback, *pvar_dset_devSoStdio, + *pvar_dset_devSASoft, *pvar_dset_devWfSoft, + *pvar_dset_devWaveformStats, *pvar_dset_devSysMonWaveStats; + +static const char * const deviceSupportNames[] = { + "devAaiSoft", "devAaoSoft", "devAiSoft", "devAiSoftRaw", + "devAiSoftCallback", "devTimestampAI", "devAiGeneralTime", + "devAiStats", "devAiClusts", "devAiDBCLC", "devAiDBDLC", + "devSysMonAiStats", "devAoSoft", "devAoSoftRaw", "devAoSoftCallback", + "devAoStats", "devBiSoft", "devBiSoftRaw", "devBiSoftCallback", + "devBiDbState", "devBoSoft", "devBoSoftRaw", "devBoSoftCallback", + "devBoGeneralTime", "devBoDbState", "devBoSimulation", + "devCalcoutSoft", "devCalcoutSoftCallback", "devEpidSoft", + "devEpidSoftCB", "devEventSoft", "devHistogramSoft", "devI64inSoft", + "devI64inSoftCallback", "devI64outSoft", "devI64outSoftCallback", + "devLiSoft", "devLiSoftCallback", "devLiGeneralTime", "devLoSoft", + "devLoSoftCallback", "devLsiSoft", "devLsiEnviron", "devLsiStats", + "devLsoSoft", "devLsoSoftCallback", "devLsoStdio", "devMbbiSoft", + "devMbbiSoftRaw", "devMbbiSoftCallback", "devSysMonMbbiStats", + "devMbbiDirectSoft", "devMbbiDirectSoftRaw", + "devMbbiDirectSoftCallback", "devSysMonMbbiDirectStats", + "devMbboSoft", "devMbboSoftRaw", "devMbboSoftCallback", + "devMbboDirectSoft", "devMbboDirectSoftRaw", + "devMbboDirectSoftCallback", "devPrintfSoft", "devPrintfSoftCallback", + "devPrintfStdio", "devSiSoft", "devSiSoftCallback", "devTimestampSI", + "devSiGeneralTime", "devSiEnviron", "devStringinStats", + "devStringinEnvVar", "devStringinEpics", "devSysMonSiStats", + "devSoSoft", "devSoSoftCallback", "devSoStdio", "devSASoft", + "devWfSoft", "devWaveformStats", "devSysMonWaveStats" +}; + +static const dset * const devsl[] = { + pvar_dset_devAaiSoft, pvar_dset_devAaoSoft, pvar_dset_devAiSoft, + pvar_dset_devAiSoftRaw, pvar_dset_devAiSoftCallback, + pvar_dset_devTimestampAI, pvar_dset_devAiGeneralTime, + pvar_dset_devAiStats, pvar_dset_devAiClusts, pvar_dset_devAiDBCLC, + pvar_dset_devAiDBDLC, pvar_dset_devSysMonAiStats, pvar_dset_devAoSoft, + pvar_dset_devAoSoftRaw, pvar_dset_devAoSoftCallback, + pvar_dset_devAoStats, pvar_dset_devBiSoft, pvar_dset_devBiSoftRaw, + pvar_dset_devBiSoftCallback, pvar_dset_devBiDbState, + pvar_dset_devBoSoft, pvar_dset_devBoSoftRaw, + pvar_dset_devBoSoftCallback, pvar_dset_devBoGeneralTime, + pvar_dset_devBoDbState, pvar_dset_devBoSimulation, + pvar_dset_devCalcoutSoft, pvar_dset_devCalcoutSoftCallback, + pvar_dset_devEpidSoft, pvar_dset_devEpidSoftCB, + pvar_dset_devEventSoft, pvar_dset_devHistogramSoft, + pvar_dset_devI64inSoft, pvar_dset_devI64inSoftCallback, + pvar_dset_devI64outSoft, pvar_dset_devI64outSoftCallback, + pvar_dset_devLiSoft, pvar_dset_devLiSoftCallback, + pvar_dset_devLiGeneralTime, pvar_dset_devLoSoft, + pvar_dset_devLoSoftCallback, pvar_dset_devLsiSoft, + pvar_dset_devLsiEnviron, pvar_dset_devLsiStats, pvar_dset_devLsoSoft, + pvar_dset_devLsoSoftCallback, pvar_dset_devLsoStdio, + pvar_dset_devMbbiSoft, pvar_dset_devMbbiSoftRaw, + pvar_dset_devMbbiSoftCallback, pvar_dset_devSysMonMbbiStats, + pvar_dset_devMbbiDirectSoft, pvar_dset_devMbbiDirectSoftRaw, + pvar_dset_devMbbiDirectSoftCallback, + pvar_dset_devSysMonMbbiDirectStats, pvar_dset_devMbboSoft, + pvar_dset_devMbboSoftRaw, pvar_dset_devMbboSoftCallback, + pvar_dset_devMbboDirectSoft, pvar_dset_devMbboDirectSoftRaw, + pvar_dset_devMbboDirectSoftCallback, pvar_dset_devPrintfSoft, + pvar_dset_devPrintfSoftCallback, pvar_dset_devPrintfStdio, + pvar_dset_devSiSoft, pvar_dset_devSiSoftCallback, + pvar_dset_devTimestampSI, pvar_dset_devSiGeneralTime, + pvar_dset_devSiEnviron, pvar_dset_devStringinStats, + pvar_dset_devStringinEnvVar, pvar_dset_devStringinEpics, + pvar_dset_devSysMonSiStats, pvar_dset_devSoSoft, + pvar_dset_devSoSoftCallback, pvar_dset_devSoStdio, + pvar_dset_devSASoft, pvar_dset_devWfSoft, pvar_dset_devWaveformStats, + pvar_dset_devSysMonWaveStats +}; + +epicsShareExtern jlif *pvar_jlif_lnkCalcIf, *pvar_jlif_lnkConstIf, + *pvar_jlif_lnkDebugIf, *pvar_jlif_lnkStateIf, *pvar_jlif_lnkTraceIf; + +static struct jlif *jlifsl[] = { + pvar_jlif_lnkCalcIf, + pvar_jlif_lnkConstIf, + pvar_jlif_lnkDebugIf, + pvar_jlif_lnkStateIf, + pvar_jlif_lnkTraceIf}; + +typedef void (*reg_func)(void); +epicsShareExtern reg_func pvar_func_arrInitialize, + pvar_func_asInitHooksRegister, pvar_func_asSub, + pvar_func_configMenuRegistrar, pvar_func_dbndInitialize, + pvar_func_dbrestoreRegister, pvar_func_decInitialize, + pvar_func_iocSetLogInitRegister, pvar_func_iocSetLogLevelRegister, + pvar_func_iocSetLogStdoutRegister, pvar_func_iocSetLogSyslogRegister, + pvar_func_iocSetSimEnableRegister, pvar_func_rsrvRegistrar, + pvar_func_save_restoreRegister, pvar_func_syncInitialize, + pvar_func_tsInitialize, pvar_func_register_func_rebootProc, + pvar_func_register_func_scanMon, pvar_func_register_func_scanMonInit; + +epicsShareExtern int * const pvar_int_CASDEBUG; +epicsShareExtern int * const pvar_int_asCaDebug; +epicsShareExtern int * const pvar_int_atExitDebug; +epicsShareExtern double * const pvar_double_boHIGHlimit; +epicsShareExtern int * const pvar_int_boHIGHprecision; +epicsShareExtern double * const pvar_double_calcoutODLYlimit; +epicsShareExtern int * const pvar_int_calcoutODLYprecision; +epicsShareExtern int * const pvar_int_callbackParallelThreadsDefault; +epicsShareExtern int * const pvar_int_configMenuDebug; +epicsShareExtern int * const pvar_int_dbAccessDebugPUTF; +epicsShareExtern int * const pvar_int_dbBptNotMonotonic; +epicsShareExtern int * const pvar_int_dbConvertStrict; +epicsShareExtern int * const pvar_int_dbJLinkDebug; +epicsShareExtern int * const pvar_int_dbQuietMacroWarnings; +epicsShareExtern int * const pvar_int_dbRecordsAbcSorted; +epicsShareExtern int * const pvar_int_dbRecordsOnceOnly; +epicsShareExtern int * const pvar_int_dbTemplateMaxVars; +epicsShareExtern int * const pvar_int_dbThreadRealtimeLock; +epicsShareExtern int * const pvar_int_histogramSDELprecision; +epicsShareExtern int * const pvar_int_lnkDebug_debug; +epicsShareExtern int * const pvar_int_logClientDebug; +epicsShareExtern int * const pvar_int_save_restoreDatedBackupFiles; +epicsShareExtern int * const pvar_int_save_restoreDebug; +epicsShareExtern int * const pvar_int_save_restoreIncompleteSetsOk; +epicsShareExtern int * const pvar_int_save_restoreNumSeqFiles; +epicsShareExtern int * const pvar_int_save_restoreRemountThreshold; +epicsShareExtern int * const pvar_int_save_restoreSeqPeriodInSeconds; +epicsShareExtern double * const pvar_double_seqDLYlimit; +epicsShareExtern int * const pvar_int_seqDLYprecision; + +static struct iocshVarDef vardefs[] = { + {"CASDEBUG", iocshArgInt, pvar_int_CASDEBUG}, + {"asCaDebug", iocshArgInt, pvar_int_asCaDebug}, + {"atExitDebug", iocshArgInt, pvar_int_atExitDebug}, + {"boHIGHlimit", iocshArgDouble, pvar_double_boHIGHlimit}, + {"boHIGHprecision", iocshArgInt, pvar_int_boHIGHprecision}, + {"calcoutODLYlimit", iocshArgDouble, pvar_double_calcoutODLYlimit}, + {"calcoutODLYprecision", iocshArgInt, pvar_int_calcoutODLYprecision}, + {"callbackParallelThreadsDefault", iocshArgInt, pvar_int_callbackParallelThreadsDefault}, + {"configMenuDebug", iocshArgInt, pvar_int_configMenuDebug}, + {"dbAccessDebugPUTF", iocshArgInt, pvar_int_dbAccessDebugPUTF}, + {"dbBptNotMonotonic", iocshArgInt, pvar_int_dbBptNotMonotonic}, + {"dbConvertStrict", iocshArgInt, pvar_int_dbConvertStrict}, + {"dbJLinkDebug", iocshArgInt, pvar_int_dbJLinkDebug}, + {"dbQuietMacroWarnings", iocshArgInt, pvar_int_dbQuietMacroWarnings}, + {"dbRecordsAbcSorted", iocshArgInt, pvar_int_dbRecordsAbcSorted}, + {"dbRecordsOnceOnly", iocshArgInt, pvar_int_dbRecordsOnceOnly}, + {"dbTemplateMaxVars", iocshArgInt, pvar_int_dbTemplateMaxVars}, + {"dbThreadRealtimeLock", iocshArgInt, pvar_int_dbThreadRealtimeLock}, + {"histogramSDELprecision", iocshArgInt, pvar_int_histogramSDELprecision}, + {"lnkDebug_debug", iocshArgInt, pvar_int_lnkDebug_debug}, + {"logClientDebug", iocshArgInt, pvar_int_logClientDebug}, + {"save_restoreDatedBackupFiles", iocshArgInt, pvar_int_save_restoreDatedBackupFiles}, + {"save_restoreDebug", iocshArgInt, pvar_int_save_restoreDebug}, + {"save_restoreIncompleteSetsOk", iocshArgInt, pvar_int_save_restoreIncompleteSetsOk}, + {"save_restoreNumSeqFiles", iocshArgInt, pvar_int_save_restoreNumSeqFiles}, + {"save_restoreRemountThreshold", iocshArgInt, pvar_int_save_restoreRemountThreshold}, + {"save_restoreSeqPeriodInSeconds", iocshArgInt, pvar_int_save_restoreSeqPeriodInSeconds}, + {"seqDLYlimit", iocshArgDouble, pvar_double_seqDLYlimit}, + {"seqDLYprecision", iocshArgInt, pvar_int_seqDLYprecision}, + {NULL, iocshArgInt, NULL} +}; + +int EC_GN_registerRecordDeviceDriver(DBBASE *pbase) +{ + static int executed = 0; + if (!pbase) { + printf("pdbbase is NULL; you must load a DBD file first.\n"); + return -1; + } + + if (executed) { + printf("Warning: Registration already done.\n"); + } + executed = 1; + + registerRecordTypes(pbase, NELEMENTS(rtl), recordTypeNames, rtl); + registerDevices(pbase, NELEMENTS(devsl), deviceSupportNames, devsl); + registerJLinks(pbase, NELEMENTS(jlifsl), jlifsl); + pvar_func_arrInitialize(); + pvar_func_asInitHooksRegister(); + pvar_func_asSub(); + pvar_func_configMenuRegistrar(); + pvar_func_dbndInitialize(); + pvar_func_dbrestoreRegister(); + pvar_func_decInitialize(); + pvar_func_iocSetLogInitRegister(); + pvar_func_iocSetLogLevelRegister(); + pvar_func_iocSetLogStdoutRegister(); + pvar_func_iocSetLogSyslogRegister(); + pvar_func_iocSetSimEnableRegister(); + pvar_func_rsrvRegistrar(); + pvar_func_save_restoreRegister(); + pvar_func_syncInitialize(); + pvar_func_tsInitialize(); + pvar_func_register_func_rebootProc(); + pvar_func_register_func_scanMon(); + pvar_func_register_func_scanMonInit(); + iocshRegisterVariable(vardefs); + return 0; +} + +/* EC_GN_registerRecordDeviceDriver */ +static const iocshArg rrddArg0 = {"pdbbase", iocshArgPdbbase}; +static const iocshArg *rrddArgs[] = {&rrddArg0}; +static const iocshFuncDef rrddFuncDef = + {"EC_GN_registerRecordDeviceDriver", 1, rrddArgs}; +static void rrddCallFunc(const iocshArgBuf *) +{ + iocshSetError(EC_GN_registerRecordDeviceDriver(*iocshPpdbbase)); +} + +} // extern "C" + +/* + * Register commands on application startup + */ +static int Registration() { + iocshRegisterCommon(); + iocshRegister(&rrddFuncDef, rrddCallFunc); + return 0; +} + +static int done EPICS_UNUSED = Registration(); diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.linux-x86_64/EC-GN_registerRecordDeviceDriver.d b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.linux-x86_64/EC-GN_registerRecordDeviceDriver.d new file mode 100644 index 0000000..d23c55d --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.linux-x86_64/EC-GN_registerRecordDeviceDriver.d @@ -0,0 +1,26 @@ +EC-GN_registerRecordDeviceDriver.o: EC-GN_registerRecordDeviceDriver.cpp \ + /opt/codac-6.3/epics/include/compilerDependencies.h \ + /opt/codac-6.3/epics/include/compiler/gcc/compilerSpecific.h \ + /opt/codac-6.3/epics/include/epicsStdlib.h \ + /opt/codac-6.3/epics/include/libComAPI.h \ + /opt/codac-6.3/epics/include/os/Linux/osdStrtod.h \ + /opt/codac-6.3/epics/include/epicsTypes.h \ + /opt/codac-6.3/epics/include/compilerDependencies.h \ + /opt/codac-6.3/epics/include/errMdef.h \ + /opt/codac-6.3/epics/include/iocsh.h \ + /opt/codac-6.3/epics/include/iocshRegisterCommon.h \ + /opt/codac-6.3/epics/include/shareLib.h \ + /opt/codac-6.3/epics/include/registryCommon.h \ + /opt/codac-6.3/epics/include/dbStaticLib.h \ + /opt/codac-6.3/epics/include/dbFldTypes.h \ + /opt/codac-6.3/epics/include/dbBase.h \ + /opt/codac-6.3/epics/include/ellLib.h \ + /opt/codac-6.3/epics/include/dbDefs.h \ + /opt/codac-6.3/epics/include/recSup.h \ + /opt/codac-6.3/epics/include/devSup.h \ + /opt/codac-6.3/epics/include/link.h \ + /opt/codac-6.3/epics/include/cantProceed.h \ + /opt/codac-6.3/epics/include/dbJLink.h \ + /opt/codac-6.3/epics/include/dbCoreAPI.h \ + /opt/codac-6.3/epics/include/registryRecordType.h \ + /opt/codac-6.3/epics/include/recSup.h diff --git a/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.linux-x86_64/EC-GN_registerRecordDeviceDriver.o b/EC-GN-JA-PCF/target/main/epics/EC-GNApp/src/O.linux-x86_64/EC-GN_registerRecordDeviceDriver.o new file mode 100644 index 0000000000000000000000000000000000000000..3d115aa63159146e6f4b4743eb223918ce6b4781 GIT binary patch literal 33976 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 i+vE2Zk%r6bG.db template is not named *.template add +# _TEMPLATE = + +include $(TOP)/configure/RULES +#---------------------------------------- +# ADD RULES AFTER THIS LINE diff --git a/EC-GN-JA-PCF/target/main/epics/PLCApp/Db/O.linux-x86_64/Makefile b/EC-GN-JA-PCF/target/main/epics/PLCApp/Db/O.linux-x86_64/Makefile new file mode 100644 index 0000000..757ce21 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/PLCApp/Db/O.linux-x86_64/Makefile @@ -0,0 +1,10 @@ +#This Makefile created by makeMakefile.pl + + +all : + $(MAKE) -f ../Makefile TOP=../../.. T_A=linux-x86_64 $@ + +.DEFAULT: force + $(MAKE) -f ../Makefile TOP=../../.. T_A=linux-x86_64 $@ + +force: ; diff --git a/EC-GN-JA-PCF/target/main/epics/PLCApp/Makefile b/EC-GN-JA-PCF/target/main/epics/PLCApp/Makefile new file mode 100644 index 0000000..6504a77 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/PLCApp/Makefile @@ -0,0 +1,29 @@ +#+====================================================================== +# $HeadURL: https://svnpub.codac.iter.org/codac/iter/codac/dev/units/m-epics-iter-templates/branches/codac-core-6.1/templates/genericApp/Makefile $ +# $Id: Makefile 96475 2019-01-09 13:47:38Z sivecm $ +# +# Project : CODAC Core System +# +# Description : Makefile +# +# Author(s) : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2019 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== +TOP = .. +include $(TOP)/configure/CONFIG +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *src*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *Src*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *db*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *Db*)) +include $(TOP)/configure/RULES_DIRS + diff --git a/EC-GN-JA-PCF/target/main/epics/PLCApp/src/Makefile b/EC-GN-JA-PCF/target/main/epics/PLCApp/src/Makefile new file mode 100644 index 0000000..c78bf18 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/PLCApp/src/Makefile @@ -0,0 +1,59 @@ +TOP=../.. + +include $(TOP)/configure/CONFIG +#---------------------------------------- +# ADD MACRO DEFINITIONS AFTER THIS LINE +#======================================== + +#======================================== +# Build the IOC application + +PROD_IOC = PLC +# PLC.dbd will be created and installed +DBD += PLC.dbd + +# PLC.dbd will be made up from these files: +-include $(EPICS_ROOT)/mk/codac-common.mk + + +# Add all the support libraries needed by this IOC +-include $(EPICS_ROOT)/mk/asyn.mk +-include $(EPICS_ROOT)/mk/s7PLCAsyn.mk + +PLC_DBD += $(CODAC_DBD) +PLC_LIBS += $(CODAC_LIBS) + +# # SNCSEQ +# _SNCFLAGS += +r -c +d +# PLC_DBD += .dbd +# PLC_SRCS += .stt +# PLC_LIBS += seq pv + + +# PLC_registerRecordDeviceDriver.cpp derives from PLC.dbd +PLC_SRCS += PLC_registerRecordDeviceDriver.cpp + +# Build the main IOC entry point on workstation OSs. +PLC_SRCS_DEFAULT += PLCMain.cpp +PLC_SRCS_vxWorks += -nil- + +# Add support from base/src/vxWorks if needed +#PLC_OBJS_vxWorks += $(EPICS_BASE_BIN)/vxComLibrary + +#============================= +# Include SNL program makefile snippets + +-include ../*.snlprog + +#============================= + + +# Finally link to the EPICS Base libraries +PLC_LIBS += $(EPICS_BASE_IOC_LIBS) + +#=========================== + +include $(TOP)/configure/RULES +#---------------------------------------- +# ADD RULES AFTER THIS LINE +#---------------------------------------- diff --git a/EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.Common/PLC.dbd b/EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.Common/PLC.dbd new file mode 100644 index 0000000..fcba839 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.Common/PLC.dbd @@ -0,0 +1,19604 @@ +menu(serialPRTY) { + choice(serialPRTY_unknown, "Unknown") + choice(serialPRTY_None, "None") + choice(serialPRTY_Even, "Even") + choice(serialPRTY_Odd, "Odd") +} +menu(waveformPOST) { + choice(waveformPOST_Always, "Always") + choice(waveformPOST_OnChange, "On Change") +} +menu(aaoPOST) { + choice(aaoPOST_Always, "Always") + choice(aaoPOST_OnChange, "On Change") +} +menu(menuPriority) { + choice(menuPriorityLOW, "LOW") + choice(menuPriorityMEDIUM, "MEDIUM") + choice(menuPriorityHIGH, "HIGH") +} +menu(serialSBIT) { + choice(serialSBIT_unknown, "Unknown") + choice(serialSBIT_1, "1") + choice(serialSBIT_2, "2") +} +menu(calcoutDOPT) { + choice(calcoutDOPT_Use_VAL, "Use CALC") + choice(calcoutDOPT_Use_OVAL, "Use OCAL") +} +menu(menuOmsl) { + choice(menuOmslsupervisory, "supervisory") + choice(menuOmslclosed_loop, "closed_loop") +} +menu(menuFtype) { + choice(menuFtypeSTRING, "STRING") + choice(menuFtypeCHAR, "CHAR") + choice(menuFtypeUCHAR, "UCHAR") + choice(menuFtypeSHORT, "SHORT") + choice(menuFtypeUSHORT, "USHORT") + choice(menuFtypeLONG, "LONG") + choice(menuFtypeULONG, "ULONG") + choice(menuFtypeINT64, "INT64") + choice(menuFtypeUINT64, "UINT64") + choice(menuFtypeFLOAT, "FLOAT") + choice(menuFtypeDOUBLE, "DOUBLE") + choice(menuFtypeENUM, "ENUM") +} +menu(stringinPOST) { + choice(stringinPOST_OnChange, "On Change") + choice(stringinPOST_Always, "Always") +} +menu(menuPini) { + choice(menuPiniNO, "NO") + choice(menuPiniYES, "YES") + choice(menuPiniRUN, "RUN") + choice(menuPiniRUNNING, "RUNNING") + choice(menuPiniPAUSE, "PAUSE") + choice(menuPiniPAUSED, "PAUSED") +} +menu(dfanoutSELM) { + choice(dfanoutSELM_All, "All") + choice(dfanoutSELM_Specified, "Specified") + choice(dfanoutSELM_Mask, "Mask") +} +menu(menuScan) { + choice(menuScanPassive, "Passive") + choice(menuScanEvent, "Event") + choice(menuScanI_O_Intr, "I/O Intr") + choice(menuScan10_second, "10 second") + choice(menuScan5_second, "5 second") + choice(menuScan2_second, "2 second") + choice(menuScan1_second, "1 second") + choice(menuScan_5_second, ".5 second") + choice(menuScan_2_second, ".2 second") + choice(menuScan_1_second, ".1 second") +} +menu(gpibACMD) { + choice(gpibACMD_None, "None") + choice(gpibACMD_Group_Execute_Trig___GET_, "Group Execute Trig. (GET)") + choice(gpibACMD_Go_To_Local__GTL_, "Go To Local (GTL)") + choice(gpibACMD_Selected_Dev__Clear__SDC_, "Selected Dev. Clear (SDC)") + choice(gpibACMD_Take_Control__TCT_, "Take Control (TCT)") + choice(gpibACMD_Serial_Poll, "Serial Poll") +} +menu(aSubLFLG) { + choice(aSubLFLG_IGNORE, "IGNORE") + choice(aSubLFLG_READ, "READ") +} +menu(asynTMOD) { + choice(asynTMOD_Write_Read, "Write/Read") + choice(asynTMOD_Write, "Write") + choice(asynTMOD_Read, "Read") + choice(asynTMOD_Flush, "Flush") + choice(asynTMOD_NoIO, "NoI/O") +} +menu(ipDRTO) { + choice(ipDRTO_unknown, "Unknown") + choice(ipDRTO_No, "No") + choice(ipDRTO_Yes, "Yes") +} +menu(menuPost) { + choice(menuPost_OnChange, "On Change") + choice(menuPost_Always, "Always") +} +menu(asynINTERFACE) { + choice(asynINTERFACE_OCTET, "asynOctet") + choice(asynINTERFACE_INT32, "asynInt32") + choice(asynINTERFACE_UINT32, "asynUInt32Digital") + choice(asynINTERFACE_FLOAT64, "asynFloat64") +} +menu(menuAlarmStat) { + choice(menuAlarmStatNO_ALARM, "NO_ALARM") + choice(menuAlarmStatREAD, "READ") + choice(menuAlarmStatWRITE, "WRITE") + choice(menuAlarmStatHIHI, "HIHI") + choice(menuAlarmStatHIGH, "HIGH") + choice(menuAlarmStatLOLO, "LOLO") + choice(menuAlarmStatLOW, "LOW") + choice(menuAlarmStatSTATE, "STATE") + choice(menuAlarmStatCOS, "COS") + choice(menuAlarmStatCOMM, "COMM") + choice(menuAlarmStatTIMEOUT, "TIMEOUT") + choice(menuAlarmStatHWLIMIT, "HWLIMIT") + choice(menuAlarmStatCALC, "CALC") + choice(menuAlarmStatSCAN, "SCAN") + choice(menuAlarmStatLINK, "LINK") + choice(menuAlarmStatSOFT, "SOFT") + choice(menuAlarmStatBAD_SUB, "BAD_SUB") + choice(menuAlarmStatUDF, "UDF") + choice(menuAlarmStatDISABLE, "DISABLE") + choice(menuAlarmStatSIMM, "SIMM") + choice(menuAlarmStatREAD_ACCESS, "READ_ACCESS") + choice(menuAlarmStatWRITE_ACCESS, "WRITE_ACCESS") +} +menu(aoOIF) { + choice(aoOIF_Full, "Full") + choice(aoOIF_Incremental, "Incremental") +} +menu(bufferingALG) { + choice(bufferingALG_FIFO, "FIFO Buffer") + choice(bufferingALG_LIFO, "LIFO Buffer") +} +menu(aaiPOST) { + choice(aaiPOST_Always, "Always") + choice(aaiPOST_OnChange, "On Change") +} +menu(calcoutINAV) { + choice(calcoutINAV_EXT_NC, "Ext PV NC") + choice(calcoutINAV_EXT, "Ext PV OK") + choice(calcoutINAV_LOC, "Local PV") + choice(calcoutINAV_CON, "Constant") +} +menu(epidFeedbackState) { + choice(epidFeedbackState_Off, "Off") + choice(epidFeedbackState_On, "On") +} +menu(asynAUTOCONNECT) { + choice(asynAUTOCONNECT_noAutoConnect, "noAutoConnect") + choice(asynAUTOCONNECT_autoConnect, "autoConnect") +} +menu(asynFMT) { + choice(asynFMT_ASCII, "ASCII") + choice(asynFMT_Hybrid, "Hybrid") + choice(asynFMT_Binary, "Binary") +} +menu(seqSELM) { + choice(seqSELM_All, "All") + choice(seqSELM_Specified, "Specified") + choice(seqSELM_Mask, "Mask") +} +menu(asynCONNECT) { + choice(asynCONNECT_Disconnect, "Disconnect") + choice(asynCONNECT_Connect, "Connect") +} +menu(gpibUCMD) { + choice(gpibUCMD_None, "None") + choice(gpibUCMD_Device_Clear__DCL_, "Device Clear (DCL)") + choice(gpibUCMD_Local_Lockout__LL0_, "Local Lockout (LL0)") + choice(gpibUCMD_Serial_Poll_Disable__SPD_, "Serial Poll Disable (SPD)") + choice(gpibUCMD_Serial_Poll_Enable__SPE_, "Serial Poll Enable (SPE)") + choice(gpibUCMD_Unlisten__UNL_, "Unlisten (UNL)") + choice(gpibUCMD_Untalk__UNT_, "Untalk (UNT)") +} +menu(serialBAUD) { + choice(serialBAUD_unknown, "Unknown") + choice(serialBAUD_300, "300") + choice(serialBAUD_600, "600") + choice(serialBAUD_1200, "1200") + choice(serialBAUD_2400, "2400") + choice(serialBAUD_4800, "4800") + choice(serialBAUD_9600, "9600") + choice(serialBAUD_19200, "19200") + choice(serialBAUD_38400, "38400") + choice(serialBAUD_57600, "57600") + choice(serialBAUD_115200, "115200") + choice(serialBAUD_230400, "230400") + choice(serialBAUD_460800, "460800") + choice(serialBAUD_576000, "576000") + choice(serialBAUD_921600, "921600") + choice(serialBAUD_1152000, "1152000") +} +menu(histogramCMD) { + choice(histogramCMD_Read, "Read") + choice(histogramCMD_Clear, "Clear") + choice(histogramCMD_Start, "Start") + choice(histogramCMD_Stop, "Stop") +} +menu(asynTRACE) { + choice(asynTRACE_Off, "Off") + choice(asynTRACE_On, "On") +} +menu(asynEOMREASON) { + choice(asynEOMREASONNone, "None") + choice(asynEOMREASONCNT, "Count") + choice(asynEOMREASONEOS, "Eos") + choice(asynEOMREASONCNTEOS, "Count Eos") + choice(asynEOMREASONEND, "End") + choice(asynEOMREASONCNTEND, "Count End") + choice(asynEOMREASONEOSEND, "Eos End") + choice(asynEOMREASONCNTEOSEND, "Count Eos End") +} +menu(menuIvoa) { + choice(menuIvoaContinue_normally, "Continue normally") + choice(menuIvoaDon_t_drive_outputs, "Don't drive outputs") + choice(menuIvoaSet_output_to_IVOV, "Set output to IVOV") +} +menu(stringoutPOST) { + choice(stringoutPOST_OnChange, "On Change") + choice(stringoutPOST_Always, "Always") +} +menu(menuAlarmSevr) { + choice(menuAlarmSevrNO_ALARM, "NO_ALARM") + choice(menuAlarmSevrMINOR, "MINOR") + choice(menuAlarmSevrMAJOR, "MAJOR") + choice(menuAlarmSevrINVALID, "INVALID") +} +menu(serialMCTL) { + choice(serialMCTL_unknown, "Unknown") + choice(serialMCTL_CLOCAL, "CLOCAL") + choice(serialMCTL_Yes, "YES") +} +menu(serialFCTL) { + choice(serialFCTL_unknown, "Unknown") + choice(serialFCTL_None, "None") + choice(serialFCTL_Hardware, "Hardware") +} +menu(menuSimm) { + choice(menuSimmNO, "NO") + choice(menuSimmYES, "YES") + choice(menuSimmRAW, "RAW") +} +menu(compressALG) { + choice(compressALG_N_to_1_Low_Value, "N to 1 Low Value") + choice(compressALG_N_to_1_High_Value, "N to 1 High Value") + choice(compressALG_N_to_1_Average, "N to 1 Average") + choice(compressALG_Average, "Average") + choice(compressALG_Circular_Buffer, "Circular Buffer") + choice(compressALG_N_to_1_Median, "N to 1 Median") +} +menu(aSubEFLG) { + choice(aSubEFLG_NEVER, "NEVER") + choice(aSubEFLG_ON_CHANGE, "ON CHANGE") + choice(aSubEFLG_ALWAYS, "ALWAYS") +} +menu(fanoutSELM) { + choice(fanoutSELM_All, "All") + choice(fanoutSELM_Specified, "Specified") + choice(fanoutSELM_Mask, "Mask") +} +menu(calcoutOOPT) { + choice(calcoutOOPT_Every_Time, "Every Time") + choice(calcoutOOPT_On_Change, "On Change") + choice(calcoutOOPT_When_Zero, "When Zero") + choice(calcoutOOPT_When_Non_zero, "When Non-zero") + choice(calcoutOOPT_Transition_To_Zero, "Transition To Zero") + choice(calcoutOOPT_Transition_To_Non_zero, "Transition To Non-zero") +} +menu(asynENABLE) { + choice(asynENABLE_Disable, "Disable") + choice(asynENABLE_Enable, "Enable") +} +menu(epidFeedbackMode) { + choice(epidFeedbackMode_PID, "PID") + choice(epidFeedbackMode_MaxMin, "Max/Min") +} +menu(menuConvert) { + choice(menuConvertNO_CONVERSION, "NO CONVERSION") + choice(menuConvertSLOPE, "SLOPE") + choice(menuConvertLINEAR, "LINEAR") + choice(menuConverttypeKdegF, "typeKdegF") + choice(menuConverttypeKdegC, "typeKdegC") + choice(menuConverttypeJdegF, "typeJdegF") + choice(menuConverttypeJdegC, "typeJdegC") + choice(menuConverttypeEdegF, "typeEdegF(ixe only)") + choice(menuConverttypeEdegC, "typeEdegC(ixe only)") + choice(menuConverttypeTdegF, "typeTdegF") + choice(menuConverttypeTdegC, "typeTdegC") + choice(menuConverttypeRdegF, "typeRdegF") + choice(menuConverttypeRdegC, "typeRdegC") + choice(menuConverttypeSdegF, "typeSdegF") + choice(menuConverttypeSdegC, "typeSdegC") +} +menu(serialIX) { + choice(serialIX_unknown, "Unknown") + choice(serialIX_No, "No") + choice(serialIX_Yes, "Yes") +} +menu(menuYesNo) { + choice(menuYesNoNO, "NO") + choice(menuYesNoYES, "YES") +} +menu(timestampTST) { + choice(timestampTST_YY_MM_DD_HH_MM_SS, "YY/MM/DD HH:MM:SS") + choice(timestampTST_MM_DD_YY_HH_MM_SS, "MM/DD/YY HH:MM:SS") + choice(timestampTST_MM_DD_HH_MM_SS_YY, "Mon DD HH:MM:SS YY") + choice(timestampTST_MM_DD_HH_MM_SS, "Mon DD HH:MM:SS") + choice(timestampTST_HH_MM_SS, "HH:MM:SS") + choice(timestampTST_HH_MM, "HH:MM") + choice(timestampTST_DD_MM_YY_HH_MM_SS, "DD/MM/YY HH:MM:SS") + choice(timestampTST_DD_MM_HH_MM_SS_YY, "DD Mon HH:MM:SS YY") + choice(timestampTST_VMS, "DD-Mon-YYYY HH:MM:SS") + choice(timestampTST_MM_DD_YYYY, "Mon DD, YYYY HH:MM:SS.ns") + choice(timestampTST_MM_DD_YY, "MM/DD/YY HH:MM:SS.ns") +} +menu(serialDBIT) { + choice(serialDBIT_unknown, "Unknown") + choice(serialDBIT_5, "5") + choice(serialDBIT_6, "6") + choice(serialDBIT_7, "7") + choice(serialDBIT_8, "8") +} +menu(selSELM) { + choice(selSELM_Specified, "Specified") + choice(selSELM_High_Signal, "High Signal") + choice(selSELM_Low_Signal, "Low Signal") + choice(selSELM_Median_Signal, "Median Signal") +} +recordtype(calcout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct calcoutRecord; + %typedef struct calcoutdset { + % dset common; + % long (*write)(struct calcoutRecord *prec); + %} calcoutdset; + %#define HAS_calcoutdset + % + %#include "dbScan.h" + %#include "postfix.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(RPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct rpvtStruct *rpvt") + interest(4) + prompt("Record Private") + } + field(VAL, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + prompt("Result") + } + field(PVAL, DBF_DOUBLE) { + prompt("Previous Value") + } + field(CALC, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_CALC) + initial("0") + pp(TRUE) + size(80) + prompt("Calculation") + } + field(CLCV, DBF_LONG) { + interest(1) + prompt("CALC Valid") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input F") + } + field(INPG, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input L") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + special(SPC_MOD) + interest(1) + prompt("Output Specification") + } + field(INAV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPA PV Status") + } + field(INBV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPB PV Status") + } + field(INCV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPC PV Status") + } + field(INDV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPD PV Status") + } + field(INEV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPE PV Status") + } + field(INFV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPF PV Status") + } + field(INGV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPG PV Status") + } + field(INHV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPH PV Status") + } + field(INIV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPI PV Status") + } + field(INJV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPJ PV Status") + } + field(INKV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPK PV Status") + } + field(INLV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPL PV Status") + } + field(OUTV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + interest(1) + prompt("OUT PV Status") + } + field(OOPT, DBF_MENU) { + promptgroup("50 - Output") + menu(calcoutOOPT) + interest(1) + prompt("Output Execute Opt") + } + field(ODLY, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + interest(1) + prompt("Output Execute Delay") + } + field(DLYA, DBF_USHORT) { + special(SPC_NOMOD) + asl(ASL0) + prompt("Output Delay Active") + } + field(DOPT, DBF_MENU) { + promptgroup("30 - Action") + menu(calcoutDOPT) + interest(1) + prompt("Output Data Opt") + } + field(OCAL, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_CALC) + initial("0") + pp(TRUE) + size(80) + prompt("Output Calculation") + } + field(OCLV, DBF_LONG) { + interest(1) + prompt("OCAL Valid") + } + field(OEVT, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_MOD) + asl(ASL0) + size(40) + prompt("Event To Issue") + } + field(EPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("EVENTPVT epvt") + interest(4) + prompt("Event private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Rng") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(A, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input A") + } + field(B, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input B") + } + field(C, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input C") + } + field(D, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input D") + } + field(E, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input E") + } + field(F, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input F") + } + field(G, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input G") + } + field(H, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input H") + } + field(I, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input I") + } + field(J, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input J") + } + field(K, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input K") + } + field(L, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input L") + } + field(OVAL, DBF_DOUBLE) { + asl(ASL0) + prompt("Output Value") + } + field(LA, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of A") + } + field(LB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of B") + } + field(LC, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of C") + } + field(LD, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of D") + } + field(LE, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of E") + } + field(LF, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of F") + } + field(LG, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of G") + } + field(LH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of H") + } + field(LI, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of I") + } + field(LJ, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of J") + } + field(LK, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of K") + } + field(LL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of L") + } + field(POVL, DBF_DOUBLE) { + asl(ASL0) + prompt("Prev Value of OVAL") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(RPCL, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("char rpcl[INFIX_TO_POSTFIX_SIZE(80)]") + interest(4) + prompt("Reverse Polish Calc") + } + field(ORPC, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("char orpc[INFIX_TO_POSTFIX_SIZE(80)]") + interest(4) + prompt("Reverse Polish OCalc") + } +} +device(calcout, CONSTANT, devCalcoutSoft, "Soft Channel") +device(calcout, CONSTANT, devCalcoutSoftCallback, "Async Soft Channel") +recordtype(state) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + size(20) + prompt("Value") + } + field(OVAL, DBF_STRING) { + special(SPC_NOMOD) + interest(3) + size(20) + prompt("Prev Value") + } +} +recordtype(histogram) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct histogramRecord; + %typedef struct histogramdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_histogram)(struct histogramRecord *prec); /*(0,2)=> success and add_count, don't add_count); if add_count then sgnl added to array*/ + % long (*special_linconv)(struct histogramRecord *prec, int after); + %} histogramdset; + %#define HAS_histogramdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + prompt("Value") + } + field(NELM, DBF_USHORT) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Num of Array Elements") + } + field(CSTA, DBF_SHORT) { + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Collection Status") + } + field(CMD, DBF_MENU) { + special(SPC_CALC) + asl(ASL0) + menu(histogramCMD) + interest(1) + prompt("Collection Control") + } + field(ULIM, DBF_DOUBLE) { + prop(YES) + promptgroup("30 - Action") + special(SPC_RESET) + interest(1) + prompt("Upper Signal Limit") + } + field(LLIM, DBF_DOUBLE) { + prop(YES) + promptgroup("30 - Action") + special(SPC_RESET) + interest(1) + prompt("Lower Signal Limit ") + } + field(WDTH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Element Width") + } + field(SGNL, DBF_DOUBLE) { + special(SPC_MOD) + prompt("Signal Value") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(SVL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Signal Value Location") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt32 *bptr") + interest(4) + prompt("Buffer Pointer") + } + field(WDOG, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * wdog") + interest(4) + prompt("Watchdog callback") + } + field(MDEL, DBF_SHORT) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Count Deadband") + } + field(MCNT, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Counts Since Monitor") + } + field(SDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + special(SPC_RESET) + interest(1) + prompt("Monitor Seconds Dband") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_DOUBLE) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(HOPR, DBF_ULONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_ULONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } +} +device(histogram, CONSTANT, devHistogramSoft, "Soft Channel") +recordtype(lsi) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct lsiRecord; + %typedef struct lsidset { + % dset common; + % long (*read_string)(struct lsiRecord *prec); + %} lsidset; + %#define HAS_lsidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("char *val") + pp(TRUE) + prompt("Current Value") + } + field(OVAL, DBF_NOACCESS) { + special(SPC_DBADDR) + extra("char *oval") + interest(3) + prompt("Old Value") + } + field(SIZV, DBF_USHORT) { + promptgroup("40 - Input") + special(SPC_NOMOD) + initial("41") + interest(1) + prompt("Size of buffers") + } + field(LEN, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Length of VAL") + } + field(OLEN, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Length of OVAL") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(menuPost) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(menuPost) + interest(1) + prompt("Post Archive Monitors") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(lsi, CONSTANT, devLsiSoft, "Soft Channel") +device(lsi, INST_IO, devLsiEnviron, "getenv") +device(lsi, INST_IO, devLsiStats, "IOC long string") +device(lsi, INST_IO, asynLsiOctetCmdResponse, "asynOctetCmdResponse") +device(lsi, INST_IO, asynLsiOctetWriteRead, "asynOctetWriteRead") +device(lsi, INST_IO, asynLsiOctetRead, "asynOctetRead") +recordtype(int64out) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct int64outRecord; + %typedef struct int64outdset { + % dset common; + % long (*write_int64out)(struct int64outRecord *prec); + %} int64outdset; + %#define HAS_int64outdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_INT64) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Desired Output") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Units name") + } + field(DRVH, DBF_INT64) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive High Limit") + } + field(DRVL, DBF_INT64) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive Low Limit") + } + field(HOPR, DBF_INT64) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_INT64) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_INT64) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_INT64) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_INT64) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_INT64) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } +} +device(int64out, CONSTANT, devI64outSoft, "Soft Channel") +device(int64out, CONSTANT, devI64outSoftCallback, "Async Soft Channel") +device(int64out, INST_IO, asynInt64Out, "asynInt64") +recordtype(seq) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + asl(ASL0) + pp(TRUE) + prompt("Used to trigger") + } + field(SELM, DBF_MENU) { + promptgroup("30 - Action") + menu(seqSELM) + interest(1) + prompt("Select Mechanism") + } + field(SELN, DBF_USHORT) { + initial("1") + interest(1) + prompt("Link Selection") + } + field(SELL, DBF_INLINK) { + promptgroup("30 - Action") + interest(1) + prompt("Link Selection Loc") + } + field(OFFS, DBF_SHORT) { + promptgroup("30 - Action") + initial("0") + interest(1) + prompt("Offset for Specified") + } + field(SHFT, DBF_SHORT) { + promptgroup("30 - Action") + initial("-1") + interest(1) + prompt("Shift for Mask mode") + } + field(OLDN, DBF_USHORT) { + interest(4) + prompt("Old Selection") + } + field(PREC, DBF_SHORT) { + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(DLY0, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 0") + } + field(DOL0, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 0") + } + field(DO0, DBF_DOUBLE) { + interest(1) + prompt("Value 0") + } + field(LNK0, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 0") + } + field(DLY1, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 1") + } + field(DOL1, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link1") + } + field(DO1, DBF_DOUBLE) { + interest(1) + prompt("Value 1") + } + field(LNK1, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 1") + } + field(DLY2, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 2") + } + field(DOL2, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 2") + } + field(DO2, DBF_DOUBLE) { + interest(1) + prompt("Value 2") + } + field(LNK2, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 2") + } + field(DLY3, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 3") + } + field(DOL3, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 3") + } + field(DO3, DBF_DOUBLE) { + interest(1) + prompt("Value 3") + } + field(LNK3, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 3") + } + field(DLY4, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 4") + } + field(DOL4, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 4") + } + field(DO4, DBF_DOUBLE) { + interest(1) + prompt("Value 4") + } + field(LNK4, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 4") + } + field(DLY5, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 5") + } + field(DOL5, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 5") + } + field(DO5, DBF_DOUBLE) { + interest(1) + prompt("Value 5") + } + field(LNK5, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 5") + } + field(DLY6, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 6") + } + field(DOL6, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 6") + } + field(DO6, DBF_DOUBLE) { + interest(1) + prompt("Value 6") + } + field(LNK6, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 6") + } + field(DLY7, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 7") + } + field(DOL7, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 7") + } + field(DO7, DBF_DOUBLE) { + interest(1) + prompt("Value 7") + } + field(LNK7, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 7") + } + field(DLY8, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 8") + } + field(DOL8, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 8") + } + field(DO8, DBF_DOUBLE) { + interest(1) + prompt("Value 8") + } + field(LNK8, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 8") + } + field(DLY9, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 9") + } + field(DOL9, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 9") + } + field(DO9, DBF_DOUBLE) { + interest(1) + prompt("Value 9") + } + field(LNK9, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 9") + } + field(DLYA, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 10") + } + field(DOLA, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 10") + } + field(DOA, DBF_DOUBLE) { + interest(1) + prompt("Value 10") + } + field(LNKA, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 10") + } + field(DLYB, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 11") + } + field(DOLB, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 11") + } + field(DOB, DBF_DOUBLE) { + interest(1) + prompt("Value 11") + } + field(LNKB, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 11") + } + field(DLYC, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 12") + } + field(DOLC, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 12") + } + field(DOC, DBF_DOUBLE) { + interest(1) + prompt("Value 12") + } + field(LNKC, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 12") + } + field(DLYD, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 13") + } + field(DOLD, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 13") + } + field(DOD, DBF_DOUBLE) { + interest(1) + prompt("Value 13") + } + field(LNKD, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 13") + } + field(DLYE, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 14") + } + field(DOLE, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 14") + } + field(DOE, DBF_DOUBLE) { + interest(1) + prompt("Value 14") + } + field(LNKE, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 14") + } + field(DLYF, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 15") + } + field(DOLF, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 15") + } + field(DOF, DBF_DOUBLE) { + interest(1) + prompt("Value 15") + } + field(LNKF, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 15") + } +} +recordtype(stringout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct stringoutRecord; + %typedef struct stringoutdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*write_stringout)(struct stringoutRecord *prec); /*(-1,0)=>(failure,success)*/ + %} stringoutdset; + %#define HAS_stringoutdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + size(40) + prompt("Current Value") + } + field(OVAL, DBF_STRING) { + special(SPC_NOMOD) + interest(3) + size(40) + prompt("Previous Value") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(stringoutPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(stringoutPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_STRING) { + promptgroup("50 - Output") + interest(2) + size(40) + prompt("INVALID output value") + } +} +device(stringout, CONSTANT, devSoSoft, "Soft Channel") +device(stringout, CONSTANT, devSoSoftCallback, "Async Soft Channel") +device(stringout, INST_IO, devSoStdio, "stdio") +device(stringout, INST_IO, asynSoOctetWrite, "asynOctetWrite") +recordtype(aai) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct aaiRecord; + %typedef struct aaidset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_aai)(struct aaiRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} aaidset; + %#define HAS_aaidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(NELM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Number of Elements") + } + field(FTVL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_NOMOD) + menu(menuFtype) + interest(1) + prompt("Field Type of Value") + } + field(NORD, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Number elements read") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * bptr") + interest(4) + prompt("Buffer Pointer") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(aaiPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(aaiPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(HASH, DBF_ULONG) { + interest(3) + prompt("Hash of OnChange data.") + } +} +device(aai, CONSTANT, devAaiSoft, "Soft Channel") +recordtype(permissive) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_USHORT) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Status") + } + field(WFLG, DBF_USHORT) { + pp(TRUE) + prompt("Wait Flag") + } + field(LABL, DBF_STRING) { + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(20) + prompt("Button Label") + } + field(OVAL, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Old Status") + } + field(OFLG, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Old Flag") + } +} +recordtype(bo) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct boRecord; + %typedef struct bodset { + % dset common; /*init_record returns:(0,2)=>(success,success no convert*/ + % long (*write_bo)(struct boRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} bodset; + %#define HAS_bodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_ENUM) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(HIGH, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Seconds to Hold High") + } + field(ZNAM, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(26) + prompt("Zero Name") + } + field(ONAM, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(26) + prompt("One Name") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("prev Raw Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(RPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * rpvt") + interest(4) + prompt("Record Private") + } + field(WDPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * wdpt") + interest(4) + prompt("Watch Dog Timer ID") + } + field(ZSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Zero Error Severity") + } + field(OSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("One Error Severity") + } + field(COSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Change of State Sevr") + } + field(RBV, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Readback Value") + } + field(ORBV, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Readback Value") + } + field(MLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(LALM, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID outpt action") + } + field(IVOV, DBF_USHORT) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } +} +device(bo, CONSTANT, devBoSoft, "Soft Channel") +device(bo, CONSTANT, devBoSoftRaw, "Raw Soft Channel") +device(bo, CONSTANT, devBoSoftCallback, "Async Soft Channel") +device(bo, INST_IO, devBoGeneralTime, "General Time") +device(bo, INST_IO, devBoDbState, "Db State") +device(bo, INST_IO, devBoSimulation, "IOC SIM") +device(bo, INST_IO, asynBoInt32, "asynInt32") +device(bo, INST_IO, asynBoUInt32Digital, "asynUInt32Digital") +recordtype(dfanout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Desired Output") + } + field(SELM, DBF_MENU) { + promptgroup("30 - Action") + menu(dfanoutSELM) + interest(1) + prompt("Select Mechanism") + } + field(SELN, DBF_USHORT) { + initial("1") + interest(1) + prompt("Link Selection") + } + field(SELL, DBF_INLINK) { + promptgroup("30 - Action") + interest(1) + prompt("Link Selection Loc") + } + field(OUTA, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec A") + } + field(OUTB, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec B") + } + field(OUTC, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec C") + } + field(OUTD, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec D") + } + field(OUTE, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec E") + } + field(OUTF, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec F") + } + field(OUTG, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec G") + } + field(OUTH, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec H") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } +} +recordtype(mbbi) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct mbbiRecord; + %typedef struct mbbidset { + % dset common; /* init_record returns: (-1,0) => (failure, success)*/ + % long (*read_mbbi)(struct mbbiRecord *prec); /* (0, 2) => (success, success no convert)*/ + %} mbbidset; + %#define HAS_mbbidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_ENUM) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + } + field(NOBT, DBF_USHORT) { + promptgroup("40 - Input") + special(SPC_NOMOD) + interest(1) + prompt("Number of Bits") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(ZRVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Zero Value") + } + field(ONVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("One Value") + } + field(TWVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Two Value") + } + field(THVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Three Value") + } + field(FRVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Four Value") + } + field(FVVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Five Value") + } + field(SXVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Six Value") + } + field(SVVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Seven Value") + } + field(EIVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Eight Value") + } + field(NIVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Nine Value") + } + field(TEVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Ten Value") + } + field(ELVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Eleven Value") + } + field(TVVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Twelve Value") + } + field(TTVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Thirteen Value") + } + field(FTVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Fourteen Value") + } + field(FFVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Fifteen Value") + } + field(ZRST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Zero String") + } + field(ONST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("One String") + } + field(TWST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Two String") + } + field(THST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Three String") + } + field(FRST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Four String") + } + field(FVST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Five String") + } + field(SXST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Six String") + } + field(SVST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Seven String") + } + field(EIST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Eight String") + } + field(NIST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Nine String") + } + field(TEST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Ten String") + } + field(ELST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Eleven String") + } + field(TVST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Twelve String") + } + field(TTST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Thirteen String") + } + field(FTST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Fourteen String") + } + field(FFST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Fifteen String") + } + field(ZRSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Zero Severity") + } + field(ONSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State One Severity") + } + field(TWSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Two Severity") + } + field(THSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Three Severity") + } + field(FRSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Four Severity") + } + field(FVSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Five Severity") + } + field(SXSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Six Severity") + } + field(SVSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Seven Severity") + } + field(EISV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Eight Severity") + } + field(NISV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Nine Severity") + } + field(TESV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Ten Severity") + } + field(ELSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Eleven Severity") + } + field(TVSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Twelve Severity") + } + field(TTSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Thirteen Sevr") + } + field(FTSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Fourteen Sevr") + } + field(FFSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Fifteen Severity") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(UNSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Unknown State Severity") + } + field(COSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Change of State Svr") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Raw Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(MLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(LALM, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(SDEF, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("States Defined") + } + field(SHFT, DBF_USHORT) { + promptgroup("40 - Input") + interest(1) + prompt("Shift") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_ULONG) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuSimm) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(mbbi, CONSTANT, devMbbiSoft, "Soft Channel") +device(mbbi, CONSTANT, devMbbiSoftRaw, "Raw Soft Channel") +device(mbbi, CONSTANT, devMbbiSoftCallback, "Async Soft Channel") +device(mbbi, INST_IO, devSysMonMbbiStats, "sysmon") +device(mbbi, INST_IO, asynMbbiInt32, "asynInt32") +device(mbbi, INST_IO, asynMbbiUInt32Digital, "asynUInt32Digital") +recordtype(event) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct eventRecord; + %typedef struct eventdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_event)(struct eventRecord *prec); /*(0)=> success */ + %} eventdset; + %#define HAS_eventdset + % + %#include "dbScan.h" + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("40 - Input") + special(SPC_MOD) + asl(ASL0) + size(40) + prompt("Event Name To Post") + } + field(EPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("EVENTPVT epvt") + interest(4) + prompt("Event private") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Input Specifctn") + } + field(SVAL, DBF_STRING) { + size(40) + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Mode Location") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Sim mode Alarm Svrty") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(event, CONSTANT, devEventSoft, "Soft Channel") +recordtype(compress) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(RES, DBF_SHORT) { + special(SPC_RESET) + asl(ASL0) + interest(3) + prompt("Reset") + } + field(ALG, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_RESET) + menu(compressALG) + interest(1) + prompt("Compression Algorithm") + } + field(BALG, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_RESET) + menu(bufferingALG) + interest(1) + prompt("Buffering Algorithm") + } + field(NSAM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Number of Values") + } + field(N, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_RESET) + initial("1") + interest(1) + prompt("N to 1 Compression") + } + field(IHIL, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Init High Interest Lim") + } + field(ILIL, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Init Low Interest Lim") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(OFF, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Offset") + } + field(NUSE, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Number Used") + } + field(OUSE, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Old Number Used") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("double *bptr") + interest(4) + prompt("Buffer Pointer") + } + field(SPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("double *sptr") + interest(4) + prompt("Summing Buffer Ptr") + } + field(WPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("double *wptr") + interest(4) + prompt("Working Buffer Ptr") + } + field(INPN, DBF_LONG) { + special(SPC_NOMOD) + interest(4) + prompt("Number of elements in Working Buffer") + } + field(CVB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Compress Value Buffer") + } + field(INX, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Compressed Array Inx") + } +} +recordtype(mbbo) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct mbboRecord; + %typedef struct mbbodset { + % dset common; /*init_record returns: (0, 2) => (success, success no convert)*/ + % long (*write_mbbo)(struct mbboRecord *prec); /*returns: (0, 2) => (success, success no convert)*/ + %} mbbodset; + %#define HAS_mbbodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_ENUM) { + promptgroup("50 - Output") + special(SPC_DBADDR) + asl(ASL0) + pp(TRUE) + prompt("Desired Value") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(NOBT, DBF_USHORT) { + promptgroup("50 - Output") + special(SPC_NOMOD) + interest(1) + prompt("Number of Bits") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(ZRVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Zero Value") + } + field(ONVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("One Value") + } + field(TWVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Two Value") + } + field(THVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Three Value") + } + field(FRVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Four Value") + } + field(FVVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Five Value") + } + field(SXVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Six Value") + } + field(SVVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Seven Value") + } + field(EIVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Eight Value") + } + field(NIVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Nine Value") + } + field(TEVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Ten Value") + } + field(ELVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Eleven Value") + } + field(TVVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Twelve Value") + } + field(TTVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Thirteen Value") + } + field(FTVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Fourteen Value") + } + field(FFVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Fifteen Value") + } + field(ZRST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Zero String") + } + field(ONST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("One String") + } + field(TWST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Two String") + } + field(THST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Three String") + } + field(FRST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Four String") + } + field(FVST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Five String") + } + field(SXST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Six String") + } + field(SVST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Seven String") + } + field(EIST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Eight String") + } + field(NIST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Nine String") + } + field(TEST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Ten String") + } + field(ELST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Eleven String") + } + field(TVST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Twelve String") + } + field(TTST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Thirteen String") + } + field(FTST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Fourteen String") + } + field(FFST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Fifteen String") + } + field(ZRSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Zero Severity") + } + field(ONSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State One Severity") + } + field(TWSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Two Severity") + } + field(THSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Three Severity") + } + field(FRSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Four Severity") + } + field(FVSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Five Severity") + } + field(SXSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Six Severity") + } + field(SVSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Seven Severity") + } + field(EISV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Eight Severity") + } + field(NISV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Nine Severity") + } + field(TESV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Ten Severity") + } + field(ELSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Eleven Severity") + } + field(TVSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Twelve Severity") + } + field(TTSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Thirteen Sevr") + } + field(FTSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Fourteen Sevr") + } + field(FFSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Fifteen Sevr") + } + field(UNSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Unknown State Sevr") + } + field(COSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Change of State Sevr") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Raw Value") + } + field(RBV, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Readback Value") + } + field(ORBV, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Readback Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(MLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(LALM, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(SDEF, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("States Defined") + } + field(SHFT, DBF_USHORT) { + promptgroup("50 - Output") + interest(1) + prompt("Shift") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID outpt action") + } + field(IVOV, DBF_USHORT) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } +} +device(mbbo, CONSTANT, devMbboSoft, "Soft Channel") +device(mbbo, CONSTANT, devMbboSoftRaw, "Raw Soft Channel") +device(mbbo, CONSTANT, devMbboSoftCallback, "Async Soft Channel") +device(mbbo, INST_IO, asynMbboInt32, "asynInt32") +device(mbbo, INST_IO, asynMbboUInt32Digital, "asynUInt32Digital") +recordtype(epid) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + prompt("Record Name") + size(61) + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + prompt("Descriptor") + size(41) + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + prompt("Access Security Group") + size(29) + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Event Name") + size(40) + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("epicsMutexId mlok") + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("ELLLIST mlis") + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("ELLLIST bklnk") + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + interest(2) + initial("YES") + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct asgMember *asp") + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct processNotify *ppn") + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct processNotifyRecord *ppnr") + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct scan_element *spvt") + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct typed_rset *rset") + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("unambiguous_dset *dset") + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("void *dpvt") + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct dbRecordType *rdes") + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct lockRecord *lset") + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(1) + extra("epicsUInt8 bkpt") + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + interest(1) + initial("1") + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + initial("INVALID") + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(2) + extra("epicsTimeStamp time") + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Setpoint") + } + field(SMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Setpoint Mode Select") + } + field(STPL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Setpoint Location") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Controlled Value Loc") + } + field(OUTL, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Location") + } + field(TRIG, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Readback Trigger") + } + field(TVAL, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(1) + prompt("Trigger Value") + } + field(CVAL, DBF_DOUBLE) { + special(SPC_NOMOD) + prompt("Controlled Value") + } + field(CVLP, DBF_DOUBLE) { + special(SPC_NOMOD) + prompt("Prev. Controlled Value") + } + field(OVAL, DBF_DOUBLE) { + special(SPC_NOMOD) + prompt("Output value") + } + field(OVLP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev output") + } + field(PREC, DBF_SHORT) { + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(MDT, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Min Delta T") + } + field(FMOD, DBF_MENU) { + promptgroup("30 - Action") + menu(epidFeedbackMode) + interest(1) + prompt("Feedback Mode") + } + field(FBON, DBF_MENU) { + promptgroup("30 - Action") + menu(epidFeedbackState) + interest(1) + prompt("Feedback On/Off") + } + field(FBOP, DBF_MENU) { + promptgroup("30 - Action") + menu(epidFeedbackState) + interest(1) + prompt("Prev. feedback On/Off") + } + field(KP, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Proportional Gain") + } + field(KI, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Integral Gain") + } + field(KD, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Derivative Gain") + } + field(EGU, DBF_STRING) { + promptgroup("80 - Display") + interest(1) + prompt("Engineering Units") + size(16) + } + field(HOPR, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(DRVH, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("High Drive Limit") + } + field(DRVL, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Low Drive Limit") + } + field(HIHI, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Hihi Deviation Limit") + } + field(LOLO, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Lolo Deviation Limit") + } + field(HIGH, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("High Deviation Limit") + } + field(LOW, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Low Deviation Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(ODEL, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Output Deadband") + } + field(P, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("P component") + } + field(PP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("Prev. P component") + } + field(I, DBF_DOUBLE) { + interest(2) + prompt("I component") + } + field(IP, DBF_DOUBLE) { + interest(2) + prompt("Prev. I component") + } + field(D, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("D component") + } + field(DP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("Prev. D component") + } + field(CT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("epicsTimeStamp ct") + prompt("Time") + } + field(CTP, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("epicsTimeStamp ctp") + prompt("Previous time") + } + field(DT, DBF_DOUBLE) { + interest(2) + prompt("Delta T") + } + field(DTP, DBF_DOUBLE) { + interest(2) + prompt("Prev. Delta T") + } + field(ERR, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("Error") + } + field(ERRP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("Prev. Error") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } +} +device(epid, CONSTANT, devEpidSoft, "Soft Channel") +device(epid, CONSTANT, devEpidSoftCB, "Async Soft Channel") +recordtype(ao) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct aoRecord; + %typedef struct aodset { + % dset common; /*init_record returns: (0,2)=>(success,success no convert)*/ + % long (*write_ao)(struct aoRecord *prec); /*(0)=>(success ) */ + % long (*special_linconv)(struct aoRecord *prec, int after); + %} aodset; + %#define HAS_aodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Desired Output") + } + field(OVAL, DBF_DOUBLE) { + prompt("Output Value") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(OROC, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(1) + prompt("Output Rate of Change") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(OIF, DBF_MENU) { + promptgroup("50 - Output") + menu(aoOIF) + interest(1) + prompt("Out Full/Incremental") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(LINR, DBF_MENU) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + menu(menuConvert) + interest(1) + pp(TRUE) + prompt("Linearization") + } + field(EGUF, DBF_DOUBLE) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + interest(1) + pp(TRUE) + prompt("Eng Units Full") + } + field(EGUL, DBF_DOUBLE) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + interest(1) + pp(TRUE) + prompt("Eng Units Low") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(ROFF, DBF_ULONG) { + interest(2) + pp(TRUE) + prompt("Raw Offset") + } + field(EOFF, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(2) + pp(TRUE) + prompt("EGU to Raw Offset") + } + field(ESLO, DBF_DOUBLE) { + promptgroup("60 - Convert") + initial("1") + interest(2) + pp(TRUE) + prompt("EGU to Raw Slope") + } + field(DRVH, DBF_DOUBLE) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive High Limit") + } + field(DRVL, DBF_DOUBLE) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive Low Limit") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(AOFF, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(1) + pp(TRUE) + prompt("Adjustment Offset") + } + field(ASLO, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(1) + pp(TRUE) + prompt("Adjustment Slope") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(RVAL, DBF_LONG) { + pp(TRUE) + prompt("Current Raw Value") + } + field(ORAW, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Previous Raw Value") + } + field(RBV, DBF_LONG) { + special(SPC_NOMOD) + prompt("Readback Value") + } + field(ORBV, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Readback Value") + } + field(PVAL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Previous value") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(PBRK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * pbrk") + interest(4) + prompt("Ptrto brkTable") + } + field(INIT, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Initialized?") + } + field(LBRK, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("LastBreak Point") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } + field(OMOD, DBF_UCHAR) { + special(SPC_NOMOD) + prompt("Was OVAL modified?") + } +} +device(ao, CONSTANT, devAoSoft, "Soft Channel") +device(ao, CONSTANT, devAoSoftRaw, "Raw Soft Channel") +device(ao, CONSTANT, devAoSoftCallback, "Async Soft Channel") +device(ao, INST_IO, devAoStats, "IOC stats") +device(ao, INST_IO, asynAoInt32, "asynInt32") +device(ao, INST_IO, asynAoFloat64, "asynFloat64") +device(ao, INST_IO, asynAoInt64, "asynInt64") +recordtype(aao) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct aaoRecord; + %typedef struct aaodset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*write_aao)(struct aaoRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} aaodset; + %#define HAS_aaodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(NELM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Number of Elements") + } + field(FTVL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_NOMOD) + menu(menuFtype) + interest(1) + prompt("Field Type of Value") + } + field(NORD, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Number elements read") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * bptr") + interest(4) + prompt("Buffer Pointer") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(aaoPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(aaoPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(HASH, DBF_ULONG) { + interest(3) + prompt("Hash of OnChange data.") + } +} +device(aao, CONSTANT, devAaoSoft, "Soft Channel") +recordtype(mbbiDirect) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct mbbiDirectRecord; + %typedef struct mbbidirectdset { + % dset common; /* init_record returns: (-1,0) => (failure, success)*/ + % long (*read_mbbi)(struct mbbiDirectRecord *prec); /* (0, 2) => (success, success no convert)*/ + %} mbbidirectdset; + %#define HAS_mbbidirectdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + } + field(NOBT, DBF_SHORT) { + promptgroup("40 - Input") + special(SPC_NOMOD) + interest(1) + prompt("Number of Bits") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Raw Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(MLST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(SHFT, DBF_USHORT) { + promptgroup("40 - Input") + interest(1) + prompt("Shift") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_LONG) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuSimm) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(B0, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 0") + } + field(B1, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 1") + } + field(B2, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 2") + } + field(B3, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 3") + } + field(B4, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 4") + } + field(B5, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 5") + } + field(B6, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 6") + } + field(B7, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 7") + } + field(B8, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 8") + } + field(B9, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 9") + } + field(BA, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 10") + } + field(BB, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 11") + } + field(BC, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 12") + } + field(BD, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 13") + } + field(BE, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 14") + } + field(BF, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 15") + } + field(B10, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 16") + } + field(B11, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 17") + } + field(B12, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 18") + } + field(B13, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 19") + } + field(B14, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 20") + } + field(B15, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 21") + } + field(B16, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 22") + } + field(B17, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 23") + } + field(B18, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 24") + } + field(B19, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 25") + } + field(B1A, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 26") + } + field(B1B, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 27") + } + field(B1C, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 28") + } + field(B1D, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 29") + } + field(B1E, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 30") + } + field(B1F, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 31") + } +} +device(mbbiDirect, CONSTANT, devMbbiDirectSoft, "Soft Channel") +device(mbbiDirect, CONSTANT, devMbbiDirectSoftRaw, "Raw Soft Channel") +device(mbbiDirect, CONSTANT, devMbbiDirectSoftCallback, "Async Soft Channel") +device(mbbiDirect, INST_IO, devSysMonMbbiDirectStats, "sysmon") +device(mbbiDirect, INST_IO, asynMbbiDirectUInt32Digital, "asynUInt32Digital") +recordtype(asyn) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + asl(ASL0) + interest(4) + prompt("Value field (unused)") + } + field(PORT, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_MOD) + initial("") + interest(1) + size(40) + prompt("asyn port") + } + field(ADDR, DBF_LONG) { + promptgroup("30 - Action") + special(SPC_MOD) + initial("0") + interest(1) + prompt("asyn address") + } + field(PCNCT, DBF_MENU) { + special(SPC_MOD) + menu(asynCONNECT) + interest(2) + prompt("Port Connect/Disconnect") + } + field(DRVINFO, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_MOD) + initial("") + interest(2) + size(40) + prompt("Driver info string") + } + field(REASON, DBF_LONG) { + special(SPC_MOD) + interest(2) + prompt("asynUser->reason") + } + field(TMOD, DBF_MENU) { + promptgroup("30 - Action") + menu(asynTMOD) + interest(1) + prompt("Transaction mode") + } + field(TMOT, DBF_DOUBLE) { + promptgroup("30 - Action") + initial("1.0") + interest(1) + prompt("Timeout (sec)") + } + field(IFACE, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_MOD) + menu(asynINTERFACE) + interest(2) + prompt("Interface") + } + field(OCTETIV, DBF_LONG) { + interest(2) + prompt("asynOctet is valid") + } + field(OPTIONIV, DBF_LONG) { + interest(2) + prompt("asynOption is valid") + } + field(GPIBIV, DBF_LONG) { + interest(2) + prompt("asynGPIB is valid") + } + field(I32IV, DBF_LONG) { + interest(2) + prompt("asynInt32 is valid") + } + field(UI32IV, DBF_LONG) { + interest(2) + prompt("asynUInt32Digital is valid") + } + field(F64IV, DBF_LONG) { + interest(2) + prompt("asynFloat64 is valid") + } + field(AOUT, DBF_STRING) { + promptgroup("50 - Output") + interest(1) + pp(TRUE) + size(40) + prompt("Output (command) string") + } + field(OEOS, DBF_STRING) { + promptgroup("50 - Output") + special(SPC_MOD) + interest(1) + size(40) + prompt("Output delimiter") + } + field(BOUT, DBF_CHAR) { + special(SPC_DBADDR) + interest(1) + pp(TRUE) + prompt("Output binary data") + } + field(OPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *optr") + interest(4) + prompt("Output buffer pointer") + } + field(OMAX, DBF_LONG) { + promptgroup("50 - Output") + special(SPC_NOMOD) + initial("80") + interest(1) + prompt("Max. size of output array") + } + field(NOWT, DBF_LONG) { + promptgroup("50 - Output") + initial("80") + interest(1) + prompt("Number of bytes to write") + } + field(NAWT, DBF_LONG) { + interest(1) + prompt("Number of bytes actually written") + } + field(OFMT, DBF_MENU) { + promptgroup("50 - Output") + menu(asynFMT) + interest(1) + prompt("Output format") + } + field(AINP, DBF_STRING) { + special(SPC_NOMOD) + interest(1) + size(40) + prompt("Input (response) string") + } + field(TINP, DBF_STRING) { + special(SPC_NOMOD) + asl(ASL0) + interest(1) + size(40) + prompt("Translated input string") + } + field(IEOS, DBF_STRING) { + promptgroup("40 - Input") + special(SPC_MOD) + interest(1) + size(40) + prompt("Input Delimiter") + } + field(BINP, DBF_CHAR) { + special(SPC_DBADDR) + asl(ASL0) + prompt("Input binary data") + } + field(IPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *iptr") + interest(4) + size(4) + prompt("Input buffer pointer") + } + field(IMAX, DBF_LONG) { + promptgroup("40 - Input") + special(SPC_NOMOD) + initial("80") + interest(1) + prompt("Max. size of input array") + } + field(NRRD, DBF_LONG) { + promptgroup("40 - Input") + interest(1) + prompt("Number of bytes to read") + } + field(NORD, DBF_LONG) { + special(SPC_NOMOD) + interest(1) + prompt("Number of bytes read") + } + field(IFMT, DBF_MENU) { + promptgroup("40 - Input") + menu(asynFMT) + interest(1) + prompt("Input format") + } + field(EOMR, DBF_MENU) { + special(SPC_NOMOD) + menu(asynEOMREASON) + interest(1) + prompt("EOM reason") + } + field(I32INP, DBF_LONG) { + special(SPC_NOMOD) + interest(2) + prompt("asynInt32 input") + } + field(I32OUT, DBF_LONG) { + promptgroup("50 - Output") + interest(2) + pp(TRUE) + prompt("asynInt32 output") + } + field(UI32INP, DBF_ULONG) { + special(SPC_NOMOD) + interest(2) + prompt("asynUInt32Digital input") + } + field(UI32OUT, DBF_ULONG) { + promptgroup("50 - Output") + interest(2) + pp(TRUE) + prompt("asynUInt32Digital output") + } + field(UI32MASK, DBF_ULONG) { + promptgroup("50 - Output") + special(SPC_MOD) + interest(2) + initial("0xffffffff") + prompt("asynUInt32Digital mask") + } + field(F64INP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("asynFloat64 input") + } + field(F64OUT, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(2) + pp(TRUE) + prompt("asynFloat64 output") + } + field(BAUD, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialBAUD) + interest(2) + prompt("Baud rate") + } + field(LBAUD, DBF_LONG) { + promptgroup("31 - Serial") + special(SPC_MOD) + interest(2) + prompt("Baud rate") + } + field(PRTY, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialPRTY) + interest(2) + prompt("Parity") + } + field(DBIT, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialDBIT) + interest(2) + prompt("Data bits") + } + field(SBIT, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialSBIT) + interest(2) + prompt("Stop bits") + } + field(MCTL, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialMCTL) + interest(2) + prompt("Modem control") + } + field(FCTL, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialFCTL) + interest(2) + prompt("Flow control") + } + field(IXON, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialIX) + interest(2) + prompt("Output XON/XOFF") + } + field(IXOFF, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialIX) + interest(2) + prompt("Input XON/XOFF") + } + field(IXANY, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialIX) + interest(2) + prompt("XON=any character") + } + field(HOSTINFO, DBF_STRING) { + promptgroup("32 - IP") + special(SPC_MOD) + initial("") + interest(1) + size(40) + prompt("host info") + } + field(DRTO, DBF_MENU) { + promptgroup("32 - IP") + special(SPC_MOD) + menu(ipDRTO) + interest(2) + prompt("Disconnect on timeout") + } + field(UCMD, DBF_MENU) { + promptgroup("33 - GPIB") + menu(gpibUCMD) + interest(2) + pp(TRUE) + prompt("Universal command") + } + field(ACMD, DBF_MENU) { + promptgroup("33 - GPIB") + menu(gpibACMD) + interest(2) + pp(TRUE) + prompt("Addressed command") + } + field(SPR, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Serial poll response") + } + field(TMSK, DBF_LONG) { + promptgroup("80 - Display") + special(SPC_MOD) + interest(1) + prompt("Trace mask") + } + field(TB0, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace error") + } + field(TB1, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace IO device") + } + field(TB2, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace IO filter") + } + field(TB3, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace IO driver") + } + field(TB4, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace flow") + } + field(TB5, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace warning") + } + field(TIOM, DBF_LONG) { + promptgroup("80 - Display") + special(SPC_MOD) + interest(1) + prompt("Trace I/O mask") + } + field(TIB0, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace IO ASCII") + } + field(TIB1, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace IO escape") + } + field(TIB2, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace IO hex") + } + field(TINM, DBF_LONG) { + promptgroup("80 - Display") + special(SPC_MOD) + interest(1) + prompt("Trace Info mask") + } + field(TINB0, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace Info Time") + } + field(TINB1, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace Info Port") + } + field(TINB2, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace Info Source") + } + field(TINB3, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace Info Thread") + } + field(TSIZ, DBF_LONG) { + promptgroup("80 - Display") + special(SPC_MOD) + interest(1) + prompt("Trace IO truncate size") + } + field(TFIL, DBF_STRING) { + promptgroup("80 - Display") + special(SPC_MOD) + interest(1) + size(40) + prompt("Trace IO file") + } + field(AUCT, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_MOD) + menu(asynAUTOCONNECT) + interest(1) + prompt("Autoconnect") + } + field(CNCT, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_MOD) + menu(asynCONNECT) + interest(1) + prompt("Connect/Disconnect") + } + field(ENBL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_MOD) + menu(asynENABLE) + interest(1) + prompt("Enable/Disable") + } + field(ERRS, DBF_NOACCESS) { + special(SPC_DBADDR) + extra("char *errs") + interest(4) + prompt("Error string") + } + field(AQR, DBF_UCHAR) { + special(SPC_MOD) + interest(4) + prompt("Abort queueRequest") + } +} +device(asyn, INST_IO, asynRecordDevice, "asynRecordDevice") +recordtype(waveform) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct waveformRecord; + %typedef struct wfdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_wf)(struct waveformRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} wfdset; + %#define HAS_wfdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(RARM, DBF_SHORT) { + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Rearm the waveform") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(NELM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Number of Elements") + } + field(FTVL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_NOMOD) + menu(menuFtype) + interest(1) + prompt("Field Type of Value") + } + field(BUSY, DBF_SHORT) { + special(SPC_NOMOD) + prompt("Busy Indicator") + } + field(NORD, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Number elements read") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * bptr") + interest(4) + prompt("Buffer Pointer") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(waveformPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(waveformPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(HASH, DBF_ULONG) { + interest(3) + prompt("Hash of OnChange data.") + } +} +device(waveform, CONSTANT, devWfSoft, "Soft Channel") +device(waveform, INST_IO, devWaveformStats, "IOC stats") +device(waveform, INST_IO, devSysMonWaveStats, "sysmon") +device(waveform, INST_IO, asynWfOctetCmdResponse, "asynOctetCmdResponse") +device(waveform, INST_IO, asynWfOctetWriteRead, "asynOctetWriteRead") +device(waveform, INST_IO, asynWfOctetRead, "asynOctetRead") +device(waveform, INST_IO, asynWfOctetWrite, "asynOctetWrite") +device(waveform, INST_IO, asynWfOctetWriteBinary, "asynOctetWriteBinary") +device(waveform, INST_IO, asynInt8ArrayWfIn, "asynInt8ArrayIn") +device(waveform, INST_IO, asynInt8ArrayWfOut, "asynInt8ArrayOut") +device(waveform, INST_IO, asynInt16ArrayWfIn, "asynInt16ArrayIn") +device(waveform, INST_IO, asynInt16ArrayWfOut, "asynInt16ArrayOut") +device(waveform, INST_IO, asynInt32ArrayWfIn, "asynInt32ArrayIn") +device(waveform, INST_IO, asynInt32ArrayWfOut, "asynInt32ArrayOut") +device(waveform, INST_IO, asynInt32TimeSeries, "asynInt32TimeSeries") +device(waveform, INST_IO, asynFloat32ArrayWfIn, "asynFloat32ArrayIn") +device(waveform, INST_IO, asynFloat32ArrayWfOut, "asynFloat32ArrayOut") +device(waveform, INST_IO, asynFloat64ArrayWfIn, "asynFloat64ArrayIn") +device(waveform, INST_IO, asynFloat64ArrayWfOut, "asynFloat64ArrayOut") +device(waveform, INST_IO, asynFloat64TimeSeries, "asynFloat64TimeSeries") +device(waveform, INST_IO, asynInt64ArrayWfIn, "asynInt64ArrayIn") +device(waveform, INST_IO, asynInt64ArrayWfOut, "asynInt64ArrayOut") +device(waveform, INST_IO, asynInt64TimeSeries, "asynInt64TimeSeries") +recordtype(timestamp) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + prompt("Record Name") + size(61) + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + prompt("Descriptor") + size(41) + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + prompt("Access Security Group") + size(29) + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Event Name") + size(40) + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("epicsMutexId mlok") + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("ELLLIST mlis") + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("ELLLIST bklnk") + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + interest(2) + initial("YES") + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct asgMember *asp") + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct processNotify *ppn") + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct processNotifyRecord *ppnr") + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct scan_element *spvt") + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct typed_rset *rset") + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("unambiguous_dset *dset") + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("void *dpvt") + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct dbRecordType *rdes") + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct lockRecord *lset") + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(1) + extra("epicsUInt8 bkpt") + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + interest(1) + initial("1") + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + initial("INVALID") + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(2) + extra("epicsTimeStamp time") + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + size(40) + } + field(OVAL, DBF_STRING) { + special(SPC_NOMOD) + interest(3) + prompt("Previous Value") + size(40) + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Current Raw Value") + } + field(TST, DBF_MENU) { + promptgroup("40 - Input") + menu(timestampTST) + interest(2) + prompt("Time Stamp Type") + } +} +recordtype(fanout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + asl(ASL0) + pp(TRUE) + prompt("Used to trigger") + } + field(SELM, DBF_MENU) { + promptgroup("30 - Action") + menu(fanoutSELM) + interest(1) + prompt("Select Mechanism") + } + field(SELN, DBF_USHORT) { + initial("1") + interest(1) + prompt("Link Selection") + } + field(SELL, DBF_INLINK) { + promptgroup("30 - Action") + interest(1) + prompt("Link Selection Loc") + } + field(OFFS, DBF_SHORT) { + promptgroup("30 - Action") + initial("0") + interest(1) + prompt("Offset for Specified") + } + field(SHFT, DBF_SHORT) { + promptgroup("30 - Action") + initial("-1") + interest(1) + prompt("Shift for Mask mode") + } + field(LNK0, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 0") + } + field(LNK1, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 1") + } + field(LNK2, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 2") + } + field(LNK3, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 3") + } + field(LNK4, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 4") + } + field(LNK5, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 5") + } + field(LNK6, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 6") + } + field(LNK7, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 7") + } + field(LNK8, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 8") + } + field(LNK9, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 9") + } + field(LNKA, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 10") + } + field(LNKB, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 11") + } + field(LNKC, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 12") + } + field(LNKD, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 13") + } + field(LNKE, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 14") + } + field(LNKF, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 15") + } +} +recordtype(longin) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct longinRecord; + %typedef struct longindset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_longin)(struct longinRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} longindset; + %#define HAS_longindset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_LONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_LONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_LONG) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(ADEL, DBF_LONG) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_LONG) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Input Specifctn") + } + field(SVAL, DBF_LONG) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Mode Location") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Sim mode Alarm Svrty") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(longin, CONSTANT, devLiSoft, "Soft Channel") +device(longin, CONSTANT, devLiSoftCallback, "Async Soft Channel") +device(longin, INST_IO, devLiGeneralTime, "General Time") +device(longin, INST_IO, asynLiInt32, "asynInt32") +device(longin, INST_IO, asynLiUInt32Digital, "asynUInt32Digital") +device(longin, INST_IO, asynLiInt64, "asynInt64") +recordtype(printf) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct printfRecord; + %typedef struct printfdset { + % dset common; + % long (*write_string)(struct printfRecord *prec); + %} printfdset; + %#define HAS_printfdset + % + %/* Number of INPx fields defined */ + %#define PRINTF_NLINKS 10 + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("char *val") + pp(TRUE) + prompt("Result") + } + field(SIZV, DBF_USHORT) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("41") + interest(1) + prompt("Size of VAL buffer") + } + field(LEN, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Length of VAL") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(FMT, DBF_STRING) { + promptgroup("30 - Action") + pp(TRUE) + size(81) + prompt("Format String") + } + field(IVLS, DBF_STRING) { + promptgroup("30 - Action") + initial("LNK") + size(16) + prompt("Invalid Link String") + } + field(INP0, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 0") + } + field(INP1, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 1") + } + field(INP2, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 2") + } + field(INP3, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 3") + } + field(INP4, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 4") + } + field(INP5, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 5") + } + field(INP6, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 6") + } + field(INP7, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 7") + } + field(INP8, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 8") + } + field(INP9, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 9") + } +} +device(printf, CONSTANT, devPrintfSoft, "Soft Channel") +device(printf, CONSTANT, devPrintfSoftCallback, "Async Soft Channel") +device(printf, INST_IO, devPrintfStdio, "stdio") +device(printf, INST_IO, asynPfOctetWrite, "asynOctetWrite") +recordtype(sel) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("40 - Input") + special(SPC_NOMOD) + asl(ASL0) + prompt("Result") + } + field(SELM, DBF_MENU) { + promptgroup("30 - Action") + menu(selSELM) + prompt("Select Mechanism") + } + field(SELN, DBF_USHORT) { + prompt("Index value") + } + field(PREC, DBF_SHORT) { + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(NVL, DBF_INLINK) { + promptgroup("30 - Action") + interest(1) + prompt("Index Value Location") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input F") + } + field(INPG, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input L") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Rng") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(A, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input A") + } + field(B, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input B") + } + field(C, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input C") + } + field(D, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input D") + } + field(E, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input E") + } + field(F, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input F") + } + field(G, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input G") + } + field(H, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input H") + } + field(I, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input I") + } + field(J, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input J") + } + field(K, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input K") + } + field(L, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input L") + } + field(LA, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of A") + } + field(LB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of B") + } + field(LC, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of C") + } + field(LD, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of D") + } + field(LE, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of E") + } + field(LF, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of F") + } + field(LG, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of G") + } + field(LH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of H") + } + field(LI, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of I") + } + field(LJ, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of J") + } + field(LK, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of K") + } + field(LL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of L") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(NLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Index Monitored") + } +} +recordtype(bi) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct biRecord; + %typedef struct bidset { + % dset common; + % long (*read_bi)(struct biRecord *prec); + %} bidset; + %#define HAS_bidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(VAL, DBF_ENUM) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + } + field(ZSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Zero Error Severity") + } + field(OSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("One Error Severity") + } + field(COSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Change of State Svr") + } + field(ZNAM, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(26) + prompt("Zero Name") + } + field(ONAM, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(26) + prompt("One Name") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("prev Raw Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(LALM, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(MLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_ULONG) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuSimm) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(bi, CONSTANT, devBiSoft, "Soft Channel") +device(bi, CONSTANT, devBiSoftRaw, "Raw Soft Channel") +device(bi, CONSTANT, devBiSoftCallback, "Async Soft Channel") +device(bi, INST_IO, devBiDbState, "Db State") +device(bi, INST_IO, asynBiInt32, "asynInt32") +device(bi, INST_IO, asynBiUInt32Digital, "asynUInt32Digital") +recordtype(lso) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct lsoRecord; + %typedef struct lsodset { + % dset common; + % long (*write_string)(struct lsoRecord *prec); + %} lsodset; + %#define HAS_lsodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("char *val") + pp(TRUE) + prompt("Current Value") + } + field(OVAL, DBF_NOACCESS) { + special(SPC_DBADDR) + extra("char *oval") + interest(3) + prompt("Previous Value") + } + field(SIZV, DBF_USHORT) { + promptgroup("50 - Output") + special(SPC_NOMOD) + initial("41") + interest(1) + prompt("Size of buffers") + } + field(LEN, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Length of VAL") + } + field(OLEN, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Length of OVAL") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Link") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID Output Action") + } + field(IVOV, DBF_STRING) { + promptgroup("50 - Output") + interest(2) + size(40) + prompt("INVALID Output Value") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(menuPost) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(menuPost) + interest(1) + prompt("Post Archive Monitors") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(lso, CONSTANT, devLsoSoft, "Soft Channel") +device(lso, CONSTANT, devLsoSoftCallback, "Async Soft Channel") +device(lso, INST_IO, devLsoStdio, "stdio") +device(lso, INST_IO, asynLsoOctetWrite, "asynOctetWrite") +recordtype(subArray) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct subArrayRecord; + %typedef struct sadset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_sa)(struct subArrayRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} sadset; + %#define HAS_sadset + % + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(FTVL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_NOMOD) + menu(menuFtype) + interest(1) + prompt("Field Type of Value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(MALM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Maximum Elements") + } + field(NELM, DBF_ULONG) { + promptgroup("30 - Action") + initial("1") + pp(TRUE) + prompt("Number of Elements") + } + field(INDX, DBF_ULONG) { + promptgroup("30 - Action") + pp(TRUE) + prompt("Substring Index") + } + field(BUSY, DBF_SHORT) { + special(SPC_NOMOD) + prompt("Busy Indicator") + } + field(NORD, DBF_LONG) { + special(SPC_NOMOD) + prompt("Number elements read") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * bptr") + interest(4) + prompt("Buffer Pointer") + } +} +device(subArray, CONSTANT, devSASoft, "Soft Channel") +recordtype(calc) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %#include "postfix.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + prompt("Result") + } + field(CALC, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_CALC) + initial("0") + pp(TRUE) + size(80) + prompt("Calculation") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input F") + } + field(INPG, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input L") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Rng") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(A, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input A") + } + field(B, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input B") + } + field(C, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input C") + } + field(D, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input D") + } + field(E, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input E") + } + field(F, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input F") + } + field(G, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input G") + } + field(H, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input H") + } + field(I, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input I") + } + field(J, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input J") + } + field(K, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input K") + } + field(L, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input L") + } + field(LA, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of A") + } + field(LB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of B") + } + field(LC, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of C") + } + field(LD, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of D") + } + field(LE, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of E") + } + field(LF, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of F") + } + field(LG, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of G") + } + field(LH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of H") + } + field(LI, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of I") + } + field(LJ, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of J") + } + field(LK, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of K") + } + field(LL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of L") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(RPCL, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("char rpcl[INFIX_TO_POSTFIX_SIZE(80)]") + interest(4) + prompt("Reverse Polish Calc") + } +} +recordtype(mbboDirect) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct mbboDirectRecord; + %typedef struct mbbodirectdset { + % dset common; /*init_record returns: (0, 2)=>(success, success no convert)*/ + % long (*write_mbbo)(struct mbboDirectRecord *prec); /*returns: (0, 2)=>(success, success no convert)*/ + %} mbbodirectdset; + %#define HAS_mbbodirectdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Word") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + special(SPC_RESET) + menu(menuOmsl) + interest(1) + pp(TRUE) + prompt("Output Mode Select") + } + field(NOBT, DBF_SHORT) { + promptgroup("50 - Output") + special(SPC_NOMOD) + interest(1) + prompt("Number of Bits") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(RVAL, DBF_ULONG) { + special(SPC_NOMOD) + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Raw Value") + } + field(RBV, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Readback Value") + } + field(ORBV, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Readback Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(MLST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(SHFT, DBF_USHORT) { + promptgroup("50 - Output") + interest(1) + prompt("Shift") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID outpt action") + } + field(IVOV, DBF_LONG) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } + field(B0, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 0") + } + field(B1, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 1") + } + field(B2, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 2") + } + field(B3, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 3") + } + field(B4, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 4") + } + field(B5, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 5") + } + field(B6, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 6") + } + field(B7, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 7") + } + field(B8, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 8") + } + field(B9, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 9") + } + field(BA, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 10") + } + field(BB, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 11") + } + field(BC, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 12") + } + field(BD, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 13") + } + field(BE, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 14") + } + field(BF, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 15") + } + field(B10, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 16") + } + field(B11, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 17") + } + field(B12, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 18") + } + field(B13, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 19") + } + field(B14, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 20") + } + field(B15, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 21") + } + field(B16, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 22") + } + field(B17, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 23") + } + field(B18, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 24") + } + field(B19, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 25") + } + field(B1A, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 26") + } + field(B1B, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 27") + } + field(B1C, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 28") + } + field(B1D, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 29") + } + field(B1E, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 30") + } + field(B1F, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 31") + } +} +device(mbboDirect, CONSTANT, devMbboDirectSoft, "Soft Channel") +device(mbboDirect, CONSTANT, devMbboDirectSoftRaw, "Raw Soft Channel") +device(mbboDirect, CONSTANT, devMbboDirectSoftCallback, "Async Soft Channel") +device(mbboDirect, INST_IO, asynMbboDirectUInt32Digital, "asynUInt32Digital") +recordtype(longout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct longoutRecord; + %typedef struct longoutdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*write_longout)(struct longoutRecord *prec); /*(-1,0)=>(failure,success*/ + %} longoutdset; + %#define HAS_longoutdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Desired Output") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(DRVH, DBF_LONG) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive High Limit") + } + field(DRVL, DBF_LONG) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive Low Limit") + } + field(HOPR, DBF_LONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_LONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_LONG) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_LONG) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_LONG) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Output Specifctn") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Mode Location") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Sim mode Alarm Svrty") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_LONG) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } +} +device(longout, CONSTANT, devLoSoft, "Soft Channel") +device(longout, CONSTANT, devLoSoftCallback, "Async Soft Channel") +device(longout, INST_IO, asynLoInt32, "asynInt32") +device(longout, INST_IO, asynLoUInt32Digital, "asynUInt32Digital") +device(longout, INST_IO, asynLoInt64, "asynInt64") +recordtype(aSub) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %struct aSubRecord; + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + asl(ASL0) + prompt("Subr. return value") + } + field(OVAL, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Old return value") + } + field(INAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_NOMOD) + interest(1) + size(41) + prompt("Initialize Subr. Name") + } + field(LFLG, DBF_MENU) { + promptgroup("30 - Action") + menu(aSubLFLG) + interest(1) + prompt("Subr. Input Enable") + } + field(SUBL, DBF_INLINK) { + promptgroup("30 - Action") + special(SPC_NOMOD) + interest(1) + prompt("Subroutine Name Link") + } + field(SNAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_MOD) + interest(1) + size(41) + prompt("Process Subr. Name") + } + field(ONAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_NOMOD) + interest(3) + size(41) + prompt("Old Subr. Name") + } + field(SADR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("long (*sadr)(struct aSubRecord *)") + interest(2) + prompt("Subroutine Address") + } + field(CADR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void (*cadr)(struct aSubRecord *)") + interest(2) + prompt("Subroutine Cleanup Address") + } + field(BRSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Bad Return Severity") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(EFLG, DBF_MENU) { + promptgroup("50 - Output") + menu(aSubEFLG) + initial("1") + interest(1) + prompt("Output Event Flag") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link F") + } + field(INPG, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link L") + } + field(INPM, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link M") + } + field(INPN, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link N") + } + field(INPO, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link O") + } + field(INPP, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link P") + } + field(INPQ, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link Q") + } + field(INPR, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link R") + } + field(INPS, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link S") + } + field(INPT, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link T") + } + field(INPU, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link U") + } + field(A, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *a") + interest(2) + prompt("Input value A") + } + field(B, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *b") + interest(2) + prompt("Input value B") + } + field(C, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *c") + interest(2) + prompt("Input value C") + } + field(D, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *d") + interest(2) + prompt("Input value D") + } + field(E, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *e") + interest(2) + prompt("Input value E") + } + field(F, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *f") + interest(2) + prompt("Input value F") + } + field(G, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *g") + interest(2) + prompt("Input value G") + } + field(H, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *h") + interest(2) + prompt("Input value H") + } + field(I, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *i") + interest(2) + prompt("Input value I") + } + field(J, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *j") + interest(2) + prompt("Input value J") + } + field(K, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *k") + interest(2) + prompt("Input value K") + } + field(L, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *l") + interest(2) + prompt("Input value L") + } + field(M, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *m") + interest(2) + prompt("Input value M") + } + field(N, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *n") + interest(2) + prompt("Input value N") + } + field(O, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *o") + interest(2) + prompt("Input value O") + } + field(P, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *p") + interest(2) + prompt("Input value P") + } + field(Q, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *q") + interest(2) + prompt("Input value Q") + } + field(R, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *r") + interest(2) + prompt("Input value R") + } + field(S, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *s") + interest(2) + prompt("Input value S") + } + field(T, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *t") + interest(2) + prompt("Input value T") + } + field(U, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *u") + interest(2) + prompt("Input value U") + } + field(FTA, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of A") + } + field(FTB, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of B") + } + field(FTC, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of C") + } + field(FTD, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of D") + } + field(FTE, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of E") + } + field(FTF, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of F") + } + field(FTG, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of G") + } + field(FTH, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of H") + } + field(FTI, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of I") + } + field(FTJ, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of J") + } + field(FTK, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of K") + } + field(FTL, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of L") + } + field(FTM, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of M") + } + field(FTN, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of N") + } + field(FTO, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of O") + } + field(FTP, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of P") + } + field(FTQ, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of Q") + } + field(FTR, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of R") + } + field(FTS, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of S") + } + field(FTT, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of T") + } + field(FTU, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of U") + } + field(NOA, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in A") + } + field(NOB, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in B") + } + field(NOC, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in C") + } + field(NOD, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in D") + } + field(NOE, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in E") + } + field(NOF, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in F") + } + field(NOG, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in G") + } + field(NOH, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in H") + } + field(NOI, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in I") + } + field(NOJ, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in J") + } + field(NOK, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in K") + } + field(NOL, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in L") + } + field(NOM, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in M") + } + field(NON, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in N") + } + field(NOO, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in O") + } + field(NOP, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in P") + } + field(NOQ, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in Q") + } + field(NOR, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in R") + } + field(NOS, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in S") + } + field(NOT, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in T") + } + field(NOU, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in U") + } + field(NEA, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in A") + } + field(NEB, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in B") + } + field(NEC, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in C") + } + field(NED, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in D") + } + field(NEE, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in E") + } + field(NEF, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in F") + } + field(NEG, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in G") + } + field(NEH, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in H") + } + field(NEI, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in I") + } + field(NEJ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in J") + } + field(NEK, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in K") + } + field(NEL, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in L") + } + field(NEM, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in M") + } + field(NEN, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in N") + } + field(NEO, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in O") + } + field(NEP, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in P") + } + field(NEQ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in Q") + } + field(NER, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in R") + } + field(NES, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in S") + } + field(NET, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in T") + } + field(NEU, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in U") + } + field(OUTA, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link A") + } + field(OUTB, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link B") + } + field(OUTC, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link C") + } + field(OUTD, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link D") + } + field(OUTE, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link E") + } + field(OUTF, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link F") + } + field(OUTG, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link G") + } + field(OUTH, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link H") + } + field(OUTI, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link I") + } + field(OUTJ, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link J") + } + field(OUTK, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link K") + } + field(OUTL, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link L") + } + field(OUTM, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link M") + } + field(OUTN, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link N") + } + field(OUTO, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link O") + } + field(OUTP, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link P") + } + field(OUTQ, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link Q") + } + field(OUTR, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link R") + } + field(OUTS, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link S") + } + field(OUTT, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link T") + } + field(OUTU, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link U") + } + field(VALA, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vala") + interest(2) + prompt("Output value A") + } + field(VALB, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valb") + interest(2) + prompt("Output value B") + } + field(VALC, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valc") + interest(2) + prompt("Output value C") + } + field(VALD, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vald") + interest(2) + prompt("Output value D") + } + field(VALE, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vale") + interest(2) + prompt("Output value E") + } + field(VALF, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valf") + interest(2) + prompt("Output value F") + } + field(VALG, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valg") + interest(2) + prompt("Output value G") + } + field(VALH, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valh") + interest(2) + prompt("Output value H") + } + field(VALI, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vali") + interest(2) + prompt("Output value I") + } + field(VALJ, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valj") + interest(2) + prompt("Output value J") + } + field(VALK, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valk") + interest(2) + prompt("Output value K") + } + field(VALL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vall") + interest(2) + prompt("Output value L") + } + field(VALM, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valm") + interest(2) + prompt("Output value M") + } + field(VALN, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valn") + interest(2) + prompt("Output value N") + } + field(VALO, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valo") + interest(2) + prompt("Output value O") + } + field(VALP, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valp") + interest(2) + prompt("Output value P") + } + field(VALQ, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valq") + interest(2) + prompt("Output value Q") + } + field(VALR, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valr") + interest(2) + prompt("Output value R") + } + field(VALS, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vals") + interest(2) + prompt("Output value S") + } + field(VALT, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valt") + interest(2) + prompt("Output value T") + } + field(VALU, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valu") + interest(2) + prompt("Output value U") + } + field(OVLA, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovla") + interest(4) + prompt("Old Output A") + } + field(OVLB, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlb") + interest(4) + prompt("Old Output B") + } + field(OVLC, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlc") + interest(4) + prompt("Old Output C") + } + field(OVLD, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovld") + interest(4) + prompt("Old Output D") + } + field(OVLE, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovle") + interest(4) + prompt("Old Output E") + } + field(OVLF, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlf") + interest(4) + prompt("Old Output F") + } + field(OVLG, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlg") + interest(4) + prompt("Old Output G") + } + field(OVLH, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlh") + interest(4) + prompt("Old Output H") + } + field(OVLI, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovli") + interest(4) + prompt("Old Output I") + } + field(OVLJ, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlj") + interest(4) + prompt("Old Output J") + } + field(OVLK, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlk") + interest(4) + prompt("Old Output K") + } + field(OVLL, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovll") + interest(4) + prompt("Old Output L") + } + field(OVLM, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlm") + interest(4) + prompt("Old Output M") + } + field(OVLN, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovln") + interest(4) + prompt("Old Output N") + } + field(OVLO, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlo") + interest(4) + prompt("Old Output O") + } + field(OVLP, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlp") + interest(4) + prompt("Old Output P") + } + field(OVLQ, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlq") + interest(4) + prompt("Old Output Q") + } + field(OVLR, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlr") + interest(4) + prompt("Old Output R") + } + field(OVLS, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovls") + interest(4) + prompt("Old Output S") + } + field(OVLT, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlt") + interest(4) + prompt("Old Output T") + } + field(OVLU, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlu") + interest(4) + prompt("Old Output U") + } + field(FTVA, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALA") + } + field(FTVB, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALB") + } + field(FTVC, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALC") + } + field(FTVD, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALD") + } + field(FTVE, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALE") + } + field(FTVF, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALF") + } + field(FTVG, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALG") + } + field(FTVH, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALH") + } + field(FTVI, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALI") + } + field(FTVJ, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALJ") + } + field(FTVK, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALK") + } + field(FTVL, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALL") + } + field(FTVM, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALM") + } + field(FTVN, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALN") + } + field(FTVO, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALO") + } + field(FTVP, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALP") + } + field(FTVQ, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALQ") + } + field(FTVR, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALR") + } + field(FTVS, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALS") + } + field(FTVT, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALT") + } + field(FTVU, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALU") + } + field(NOVA, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALA") + } + field(NOVB, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALB") + } + field(NOVC, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALC") + } + field(NOVD, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALD") + } + field(NOVE, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALE") + } + field(NOVF, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALF") + } + field(NOVG, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALG") + } + field(NOVH, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VAlH") + } + field(NOVI, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALI") + } + field(NOVJ, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALJ") + } + field(NOVK, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALK") + } + field(NOVL, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALL") + } + field(NOVM, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALM") + } + field(NOVN, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALN") + } + field(NOVO, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALO") + } + field(NOVP, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALP") + } + field(NOVQ, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALQ") + } + field(NOVR, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALR") + } + field(NOVS, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALS") + } + field(NOVT, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALT") + } + field(NOVU, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALU") + } + field(NEVA, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALA") + } + field(NEVB, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALB") + } + field(NEVC, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALC") + } + field(NEVD, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALD") + } + field(NEVE, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALE") + } + field(NEVF, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALF") + } + field(NEVG, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALG") + } + field(NEVH, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VAlH") + } + field(NEVI, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALI") + } + field(NEVJ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALJ") + } + field(NEVK, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALK") + } + field(NEVL, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALL") + } + field(NEVM, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALM") + } + field(NEVN, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALN") + } + field(NEVO, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALO") + } + field(NEVP, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALP") + } + field(NEVQ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALQ") + } + field(NEVR, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALR") + } + field(NEVS, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALS") + } + field(NEVT, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALT") + } + field(NEVU, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALU") + } + field(ONVA, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLA") + } + field(ONVB, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLB") + } + field(ONVC, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLC") + } + field(ONVD, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLD") + } + field(ONVE, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLE") + } + field(ONVF, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLF") + } + field(ONVG, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLG") + } + field(ONVH, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in VAlH") + } + field(ONVI, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLI") + } + field(ONVJ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLJ") + } + field(ONVK, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLK") + } + field(ONVL, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLL") + } + field(ONVM, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLM") + } + field(ONVN, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLN") + } + field(ONVO, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLO") + } + field(ONVP, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLP") + } + field(ONVQ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLQ") + } + field(ONVR, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLR") + } + field(ONVS, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLS") + } + field(ONVT, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLT") + } + field(ONVU, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLU") + } +} +recordtype(sub) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %struct subRecord; + %typedef long (*SUBFUNCPTR)(struct subRecord *); + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + asl(ASL0) + pp(TRUE) + prompt("Result") + } + field(INAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_NOMOD) + interest(1) + size(40) + prompt("Init Routine Name") + } + field(SNAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_MOD) + interest(1) + size(40) + prompt("Subroutine Name") + } + field(SADR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("SUBFUNCPTR sadr") + interest(4) + prompt("Subroutine Address") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input F") + } + field(INPG, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input L") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(BRSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Bad Return Severity") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(A, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input A") + } + field(B, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input B") + } + field(C, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input C") + } + field(D, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input D") + } + field(E, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input E") + } + field(F, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input F") + } + field(G, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input G") + } + field(H, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input H") + } + field(I, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input I") + } + field(J, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input J") + } + field(K, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input K") + } + field(L, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input L") + } + field(LA, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of A") + } + field(LB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of B") + } + field(LC, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of C") + } + field(LD, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of D") + } + field(LE, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of E") + } + field(LF, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of F") + } + field(LG, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of G") + } + field(LH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of H") + } + field(LI, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of I") + } + field(LJ, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of J") + } + field(LK, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of K") + } + field(LL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of L") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } +} +recordtype(int64in) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct int64inRecord; + %typedef struct int64indset { + % dset common; + % long (*read_int64in)(struct int64inRecord *prec); + %} int64indset; + %#define HAS_int64indset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_INT64) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Units name") + } + field(HOPR, DBF_INT64) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_INT64) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_INT64) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(ADEL, DBF_INT64) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_INT64) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_INT64) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(int64in, CONSTANT, devI64inSoft, "Soft Channel") +device(int64in, CONSTANT, devI64inSoftCallback, "Async Soft Channel") +device(int64in, INST_IO, asynInt64In, "asynInt64") +recordtype(ai) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct aiRecord; + %typedef struct aidset { + % dset common; + % long (*read_ai)(struct aiRecord *prec); + % long (*special_linconv)(struct aiRecord *prec, int after); + %} aidset; + %#define HAS_aidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current EGU Value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(LINR, DBF_MENU) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + menu(menuConvert) + interest(1) + pp(TRUE) + prompt("Linearization") + } + field(EGUF, DBF_DOUBLE) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + interest(1) + pp(TRUE) + prompt("Engineer Units Full") + } + field(EGUL, DBF_DOUBLE) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + interest(1) + pp(TRUE) + prompt("Engineer Units Low") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(AOFF, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(1) + pp(TRUE) + prompt("Adjustment Offset") + } + field(ASLO, DBF_DOUBLE) { + promptgroup("60 - Convert") + initial("1") + interest(1) + pp(TRUE) + prompt("Adjustment Slope") + } + field(SMOO, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(1) + prompt("Smoothing") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(ESLO, DBF_DOUBLE) { + promptgroup("60 - Convert") + initial("1") + interest(2) + pp(TRUE) + prompt("Raw to EGU Slope") + } + field(EOFF, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(2) + pp(TRUE) + prompt("Raw to EGU Offset") + } + field(ROFF, DBF_ULONG) { + interest(2) + pp(TRUE) + prompt("Raw Offset") + } + field(PBRK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * pbrk") + interest(4) + prompt("Ptrto brkTable") + } + field(INIT, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Initialized?") + } + field(LBRK, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("LastBreak Point") + } + field(RVAL, DBF_LONG) { + pp(TRUE) + prompt("Current Raw Value") + } + field(ORAW, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Previous Raw Value") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_DOUBLE) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuSimm) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(ai, CONSTANT, devAiSoft, "Soft Channel") +device(ai, CONSTANT, devAiSoftRaw, "Raw Soft Channel") +device(ai, CONSTANT, devAiSoftCallback, "Async Soft Channel") +device(ai, INST_IO, devTimestampAI, "Soft Timestamp") +device(ai, INST_IO, devAiGeneralTime, "General Time") +device(ai, INST_IO, devAiStats, "IOC stats") +device(ai, INST_IO, devAiClusts, "IOC stats clusts") +device(ai, CONSTANT, devAiDBCLC, "DBCLC") +device(ai, CONSTANT, devAiDBDLC, "DBDLC") +device(ai, INST_IO, devSysMonAiStats, "sysmon") +device(ai, INST_IO, asynAiInt32, "asynInt32") +device(ai, INST_IO, asynAiInt32Average, "asynInt32Average") +device(ai, INST_IO, asynAiFloat64, "asynFloat64") +device(ai, INST_IO, asynAiFloat64Average, "asynFloat64Average") +device(ai, INST_IO, asynAiInt64, "asynInt64") +recordtype(stringin) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct stringinRecord; + %typedef struct stringindset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_stringin)(struct stringinRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} stringindset; + %#define HAS_stringindset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + size(40) + prompt("Current Value") + } + field(OVAL, DBF_STRING) { + special(SPC_NOMOD) + interest(3) + size(40) + prompt("Previous Value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(stringinPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(stringinPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_STRING) { + pp(TRUE) + size(40) + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(stringin, CONSTANT, devSiSoft, "Soft Channel") +device(stringin, CONSTANT, devSiSoftCallback, "Async Soft Channel") +device(stringin, INST_IO, devTimestampSI, "Soft Timestamp") +device(stringin, INST_IO, devSiGeneralTime, "General Time") +device(stringin, INST_IO, devSiEnviron, "getenv") +device(stringin, INST_IO, devStringinStats, "IOC stats") +device(stringin, INST_IO, devStringinEnvVar, "IOC env var") +device(stringin, INST_IO, devStringinEpics, "IOC epics var") +device(stringin, INST_IO, devSysMonSiStats, "sysmon") +device(stringin, INST_IO, asynSiOctetCmdResponse, "asynOctetCmdResponse") +device(stringin, INST_IO, asynSiOctetWriteRead, "asynOctetWriteRead") +device(stringin, INST_IO, asynSiOctetRead, "asynOctetRead") +driver(drvAsyn) +link(state, lnkStateIf) +link(calc, lnkCalcIf) +link(trace, lnkTraceIf) +link(debug, lnkDebugIf) +link(const, lnkConstIf) +registrar(drvAsynSerialPortRegisterCommands) +registrar(drvCodacHeaderRegister) +registrar(tsInitialize) +registrar(syncInitialize) +registrar(dbrestoreRegister) +registrar(iocSetLogLevelRegister) +registrar(save_restoreRegister) +registrar(asynRegister) +registrar(decInitialize) +registrar(iocSetSimEnableRegister) +registrar(drvCodacRedundantPlcRegister) +registrar(asynInterposeFlushRegister) +registrar(drvAsynIPPortRegisterCommands) +registrar(drvBlockTCPRegister) +registrar(asynInterposeEchoRegister) +registrar(arrInitialize) +registrar(asInitHooksRegister) +registrar(drvBlockTCPEventRegister) +registrar(asynInterposeDelayRegister) +registrar(dbndInitialize) +registrar(drvBlockTCPRedundantPlcRegister) +registrar(iocSetLogSyslogRegister) +registrar(drvAsynIPServerPortRegisterCommands) +registrar(configMenuRegistrar) +registrar(asSub) +registrar(iocSetLogStdoutRegister) +registrar(asynInterposeEosRegister) +registrar(rsrvRegistrar) +registrar(iocSetLogInitRegister) +function(scanMon) +function(rebootProc) +function(scanMonInit) +variable(dbTemplateMaxVars, int) +variable(lnkDebug_debug, int) +variable(asCaDebug, int) +variable(callbackParallelThreadsDefault, int) +variable(save_restoreRemountThreshold, int) +variable(dbAccessDebugPUTF, int) +variable(dbRecordsOnceOnly, int) +variable(save_restoreDebug, int) +variable(save_restoreDatedBackupFiles, int) +variable(calcoutODLYlimit, double) +variable(configMenuDebug, int) +variable(save_restoreIncompleteSetsOk, int) +variable(dbBptNotMonotonic, int) +variable(atExitDebug, int) +variable(boHIGHlimit, double) +variable(dbJLinkDebug, int) +variable(dbConvertStrict, int) +variable(seqDLYprecision, int) +variable(logClientDebug, int) +variable(dbQuietMacroWarnings, int) +variable(save_restoreNumSeqFiles, int) +variable(boHIGHprecision, int) +variable(dbRecordsAbcSorted, int) +variable(seqDLYlimit, double) +variable(calcoutODLYprecision, int) +variable(histogramSDELprecision, int) +variable(dbThreadRealtimeLock, int) +variable(CASDEBUG, int) +variable(save_restoreSeqPeriodInSeconds, int) diff --git a/EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.linux-x86_64/Makefile b/EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.linux-x86_64/Makefile new file mode 100644 index 0000000..757ce21 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.linux-x86_64/Makefile @@ -0,0 +1,10 @@ +#This Makefile created by makeMakefile.pl + + +all : + $(MAKE) -f ../Makefile TOP=../../.. T_A=linux-x86_64 $@ + +.DEFAULT: force + $(MAKE) -f ../Makefile TOP=../../.. T_A=linux-x86_64 $@ + +force: ; diff --git a/EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.linux-x86_64/PLC b/EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.linux-x86_64/PLC new file mode 100755 index 0000000000000000000000000000000000000000..e8d546ae999c2d0194459db9ff2c6ab25b45236c GIT binary patch literal 61720 zcmeIbd0-UP(l^{m2!<_0HbGRz^`b}&s}Zj<*&xvXk$|9xGm~VJj7&0dX2Rw|6!3z$ zM7<)SViZ)sE$+C-6|QUCanHr82Hb+UaNY7&ovPDQeKLd3_dehE{bfT>b^W?dojP^u zoIcajU0G64JSjOT$vRfT!dJw^urrJWJSYK>&^C8g(FDF)0%W^3I%b~5=Hz^jV zR~=~DfG1&_tt;emXda%L&E;luIZd0`eob}zux+@{;PW$*-M}I5Mq=fw&lp8n+)6%= zR^V~kWr_vrRtK6E6KrX!%bf=0xCtz=Z<4{Mr*nOY{IZSh*A)GT+i}4_+4!-?1uI4d z1GV)FM=s1BKXUxo%t$D6v}!l%N7>0!XQH^J{pf;Yw0QvR7z22IL&xfkPtVDGVA9s+ z3tnA6efgfCmA4-h?g!^xu=j#}r8{Zaz@A6Bt!{7pEw|~)tj0^mU1k;Z&UeE(+#CC~ zS{cXW4=Bzmxv1yZj0!8cp=VN`H5Vtly`%cAD7Fr}+MV?MfMwm=T$g5L^eMKI-M1uX zS4(h#skBr=;ZdNzxW4DyU z8hT!u;ch=9xxqTj+b`+JMr-)985!PldMaO_&j!JM0PI6x$L&Dahr)gcGO!&A`(f&c zJ`M+RB=f_W9?kR^pvS^Kl6fSVuxBwpis@*eV__f1{P94uVLyTS6M>!t`^m6RggqB_ zz2(6{0W*b6i-4X2`>C)`fqg3MxJ`roG<9TIr9fx!F-Fkod^`*2Y}n6W{!FHGfX?OP zvw?bHFJrzOXayhpfmZSHIY8&Z9%Mem^jx43*y~}R5Bmbx7s8I)A|lpepy$DUKI|93 zej)5jV8^XNeOlJVOqT*(4*Lq&SHXS->{r6x2>VsAUk&>|VaIJX5&QEx`-l$K0J$Fa z8(_Z?_M2gEf*rS8V82xz(Z_l|z76Oduy2I@F4*sd{eIYSdjR$a)sbaA1oRQuABFvK z#*jP#`%|z#1N*bEjkFUnEngsOMLta&{tu99riaFdmHFGe2nB>*xzUVBcPwc z-Uj=>VaII;5$iLiNWKuq`VcQqyEFszYuLXNJRW`z`ySYTfc;0S)4Z?OLk zyWal5gCzJ5J8sELQM*|nzzUmJhI6ZtKh3(xMc zbaqO?Vb|SQllA+(D=u&O>aFevEpqjYo_EL-=U$aJ?7d+_*UhbY^p>jTo_CL#d0i;U zADA_C+U{vj1{OZl`Psa{%Is?|eQ#;ObLpMw-<|!OJpLnAE>nk764nF?b)#neKe0}o~i(gxO=E3i|C!aZF#fkGT z{MNgnCF_l^{(k*aXUz45w|(?N-Rqxwq4StNdmi}iO82if_quXK$FLdiuN%_+=`VXc z`&-}Z?|tx!o*Qnx?6!gfANF6qaP#KdhOAC4>e;*ZgzI{}@NVCu#*}^d&Bqt`EAM=y zvS02ickejh&|cGX3*Pzqso%Rz$@^_UpMU4goAY_;+dqZRIX&sI?PVJtx@-DFJ0582 zyy~a--)%20J7&p)7gWErzIo@|rWFHj`ex7Q&#tar{LFnXe|6oST_x*R_kU+oNp|1s z!W);5Snb;J&c6rLoOsp9Utjoo*K5bF`)0Fe#HX)5Ftd2##>SHy7PN1@u5RQX`&}_~ z{PLgwx$wH#r{DJQ?NbJ?{$}YHpFV%*rqUxGJ8kXnQ}=)V(a(;%bmyc#*3jAggMAws zD>JUWXWa{5cANj7vkK2Vt^bNSU%fT$lXJW6IO3a!2ljj79v+Sx-= z{2fy_cZ>*Z`t^~d1y!SNUiaq8>x(|Q;G=724j9z_*1+4pomJ>L@UySp`Y!#VxnKJ3 zI`y-bjsMzJa!!xDcZaRcKj*N$_qSQDB}abw?t60vy>(mftSKFn`V82yZqJh9f7L7< zckeaVu1eWFZ)56_%e|vM7&_RBT=>!3+ZOmnJbL-=^sV{XU-v%L{q~2iezvYM^YQn- zU4CQtJv+DmXL+_a`eE;#yZ1&f+K&i2Jni7c>#iC4(Cg1uoL%_PmNPy&Z{vdf9v(Ge^_Ly)r!TIYT>syDPMWx< z>eleuldt$9l(+f)b7vp)#K0@|tUYmcYt0WEe|)OXkJmoGHshW{M_=jM6#2D!;G-|) zUibbF7oXO4_`hzg?6#+R#K=)8^Z&hW`bqg8KAiW&f}A_%|FW{_&DE>>H0(b2#=DL> z<;LuH+RhlV;wt}96T|6iZ+T+OO+VdmZLu|N{tkCa$5+Wqj@z?+L(hk6dkp$IIsM=} zE<65^+dt_ub@1xetG%~;ci)DFFPE=>eB!-NZn+@bJZ%ho9H+U0(5xQ+i&r`-ZBYU7iy@>Hoz) z_hz3m$#(BwcV@nE_Lo@|7cSTm{o~{3|H!UuK5I+L%P+ilU}yJ(J}fxQ=rcw@$um>zx6YPflp1K2j|y# z^8N(!u3_=zk4_{Hb-Uu&QlqA5fOJL8Z11xKQSXI{D z=7o}QZBw6?H60e;h;O{ps}PNEW%<_iPJBxW$uHdG#PK?gda~|v;y3jry!CD;{#Fmd z-S;~2$Dm(OkIS(0=Yt4uH0?|$eES_vJ-NLJ&obm+PbIv;z^`Y#eS=faiSR`S?b&{h z6Tfu`;a0N~?*|KZly5THd+1=on+^Xg(t0*K^<=PrnhpIU`m;TT{5jBZSZ}pq=fBzi zYwmOEf88Q^mw``XKf4Y8oX`GgS?|=do%?IJ5f8oDo(7|TZ|qL>t}xp5emAzq(9@IU z-G)EE9ZK?920n@7!DaZNn&Z5|@Y{3TzpV!T54OLasNN1k|5Uc8(XfBZek4EG@c&-clV!+1%yw=!^xw?#+YCJ&?B_s@2`^EZy$?d!ctuh#!1`_pCE`5^aK zn$h07*`IZWJ;^M;&4{1QLFDIl!=6XM3XBu45r-4ux`6m_L;s;{f0i-s4oD^WHO4&r z2kU7v+SShEw9W9_B#!4M!_EObP74ito@f7CM!)ZZ>pt4wV#LoZ#=VC9bGY7x#(dk@ zlk{X5^$up-W%%txJs%qFdKKc$Wev8PnyBAZ=flTw{YZa81kCz6+p4IG6x6!WUYP=7&wygK+DivMXpX}@~`gaP?OC?6Vlek?gjJTc7 z@zY_<^9OL;T1LOT&f}uQuzyJpvZv9&ui)$HMkD_3)BR=02f4pm%zotfvS zPk_hiM#Defa=mV&UtUcnKWs7Vsp5LujrN`cQKZJBq2~wfA0vLw<$i22{416Way+yc^L7gRt#JrX4%@kZ z8x8$S_*E=7N zi{XafvUGnL@%BY3#YvMfjv6`6XB%<2mgB8sy;s=>%~9KD99JcV|J#)x`dBU8E(l|_ zE$>D3dJR8>dlKGg__+_;-(ig30OQRD{v+#IXy}>1ao%C{Zwkjrvmt*FUq_mZ@xDW~ ztCzK+%FQhzastmkO@{yb^Y^kg!#~^EKPBuRKWqDe<=sYq-OF~mjkvv?=O4GxUstpJ zE<^rs_CuQCxA{DNON{Y5jpHQC=&z%BTv&#GmT^3^8-Bik%9Zu{~)iwSWDKYG?;Ol9#5m&?6o>s%pkAkD{x-i?&bD5e?hICn% zKF@Y~4L^IhA1%XgK8~MiL;nD_v(fO|9X!8z4L=;;jqKcRv}+oV>juM~;p{id7%v-G zPm2-fcd~qw5$9<K|^ zo?l}>dkuf~=6O5A(0?DVA2JL-9NC@x>^0{9-F*nJGw|#5JZbd%V=V7BUdkPo2^4wJg8J@bdzmH_{9{A55isGYmVu?6($U+^ym9KHI=k zczk({dK=jfO~$x;kjIhRXz$BBKcpG*y*X~%3_H)~^=gyh&*5Ben=y_C>__b#ZsJZ#3j{xgWEPdb8Ni z)yDYU&HYkh=$XayNrw@)`*Z)UFxq=3&(CQ_y$jg?&4&Jyc%4vUwCf`Fr)9*?UA!J^ zSm0Lcij6Qnal3%+@f!A=+JpMH(dfrs9RDsO4%dP%oc9`y_CCsSZW;P-V1K#{JBM<= zG#TxBzc=Z(jPX8MuLF&7bTj*>)u^{kUq_5_QN``bHu|@JFRHi2(ElpONt4muFps+i zqaPpS@seTK-@yIip6|x)u%E}<#r38c_E_+|TqIh756F$l91jo4c|27$p;}KQ>I+9b z9?Nsee9v@$RUi`ehx3BINW>qpJVi66cq;s1hG$I43x;a_Gkj%1Kb?zvrf$A3>^ZZK)k{~zo0HqQ5vd@=H(JzSzlZ3@dG&BUmglqlm-_2r&U&h zaQtF~s!CKLTffp1tJhQpPVm)7LlNJ6KYC(Z=BO+y5Gs#U>!w?vt~@fMI_&pVlm`9& zI$>UUsJ1dtHN{_BPtsvun9c@jqaIZ02}5&3VSlOr+!B8{5UMDuEd>i|DYSosx1%I)CK)f&>M|RnZ{^wpITo7=1vL( zp}*~tQm-hhoLf=Gt?XK%qnI!1ugLY4&#SK!%9RFRq^LF!EewU`MQk0=G0+bXkk~Dw zGDnRfV|2KbM#F*Hsz7Z)?flcV*Ojg?$EHVdk#b+{lu#|I7hVFz;JM;ZRk44*KWJC! zh{xPeX`rS)=!*tIwa%(@LZwk(l%1n$vGrj+@zv!7@^kZw^Wqs%8m$P`8^sbg#jqui z7p#vsjBz?3>@N$2q9x%_xwD|{Ka6hYDKs@-o2va?90`b4YjhUGcx5PD6X#TplowtC zuNKtegc09Q+Ag6{6oxJ(kqYIpnPa7i2p82x$BfPihkc7?RTjx$!;>`q z<@@Ic%Kf6B@YJlzY2{IWbXGVJHBW)c@nfge%b@3){NcJ##9vTe9kP8Gi+hxTo>pq7 z!-Qv4m=jQ@8feV9Gu7$*Kvf{>3mQ_zkx)Wwa{`lsAs<+rGv6QfRhf;!3gT5<98%3R zDpHa&;6hUhGp?S)R18&w=jT8J5%&d4LScK%<%Mc$eDF;xtTYboeyi zAM`Cs;MCku92Is&VDhN(i2^{i(QJ=hRCUStv4#(nJMEaVs(d6FvKMes0{@Doq@%7>@gL zUvXT8Dl8MWTMxQKK374IuyhU%gfXMZGhG975?mr;>lx>0*8`7cpM)Kf$Sxcr`>eYl z6uYE5YldQW(08quV=!^IDlhB6m&3cL1O_h&S9>46JIKxB-QewyDgt*V+4Bvwelb+As4R>nZpYotjp$?#jBL*F^UK&2;GI}aC6{-R2% zL>GjGT9*Q3vj5z!)f9~%8>sDCKr74fspg2TiPV>=;ThjIx*V)#5-W|Z8&F2*hHo1f zHT(KLTdZ2=Y;kU!7HdObZEDw{yg+r>Uw;+mE3Gf<>Kgcl14XC%7Eo=_O`dXJusl>B zot9sG2J~flAYy;{Aw9lOObz*5d&{m+_uY)JuiWlCC0iDV71rj%bOqnw0%7wz7G7f$ zI~YpETCG*-B6fq!6Hcd=1}6J!VYL~=bqt+SR#sH{YQY6vO(jov(O#MpGleb*;H0=+ zOmhgUPb^UbP2Y!tL?=aSdC}_VU46Q^YqRw!d#E@aMPVX51c5Sstiwghalwe_Uxjcq z#ayXSRXiZBbqd8+(^@+wt_{N;g88VXE~m(88chXG%oZ*+gdskh0T180;cKX;EL2!D zxiA>0(YFYcJ@yo72e!5bzW&Q$qk2`hY2Urd?TagR>Yq19Bl&GqyhMRGrs<5wS zAMsJ)FUPwO@C^s4`LCn`-(%XYhU3gn zI_*=}`j`u}D8+$Ov=nX)RRlu9?KlSF_mByct-jGa4i3cI7m>cJDLH zM90FRc`1)5|2T%YQtb2XYi5e7yLep!PhEWWX-saY%T%nYgL}(WXhht?sw3xGn_rq= zP;A7yE+3l>onEJ5>eR`$uw!uvBMhQO+F>2HF-iunVsXzZm*W8F;%p3o*p%lqit1fd z+htDHEi84ee^f2Oh=@pAFwV@x-5i^8$jF4HowjMs7}qfs*frFjMxO{5!qq#jkCX@~ zpyfegkwnu7nJ-+dhohR<^>|dZ_#&{T6@!kyW+bi?otpTpm`D-}fm`CMpk9O7N-k@( zduja?-}SVnOmwcxtf<|Q2e-MRPIrXEi7t~O8kFbk?`d%xYB$9(``c|1bEn2;RmSES z>Y4yj85ftl&^7=c{Ll557tS{XzPnFp}@D^wkHW zR+zv0)BSt#gIYydZe4V0CCE3YV{>fk<5 zFba$0Vz@a$V}j0d!JM-4Qn=gg7e6OfltB!^O)~gBBpfJ@*-0g4EUMEt&PmZ}^#Ol$ zimyBzn&k`E!Vho4zPucmz;kC#7K1Sy3D2jS5sqI(!CXK5ZVBJ%r}!4auXaL-FOuh@ z-xY0-h2g3$MJmd2%FE&Yf)Xp4Ib#z3fL-pxt{s~>YE0(w$V2y-eI0X%FIuoL5T$C= zT^(#3{Fsy%48Zqt!qu<6DCX>Tur{E6<%T*U(TegBBe0tBSf#2^9aWW=dm@OBQl^na zT|N9d7YS6sEiCwj9Zlw6*lT=&TFc|F@I`%aqAU_29H80?_%VGNuoZz?PkjXX4Q@)o zPswx}iMogaDqlGXilY`?o+>Gi)O!N>vnN-Id?f(Z^-JkRLN(V64aa{}fEJoW)w zvdWKRp8J1~=Z8lAmkLo!OjGRWf2sEWs<^hrX@!$R#e{Ul|0k9H-%Hm#ad-sC z-nOszs$;}YRY&yEw%)4_5I;d3(MS7wuR1{d7Ij1)9qYa70P%a(5r6RWIEc3iTt9Dx zIOb5%n@h+SYY?b@E)3;$4i-G^7V=Laz*~vH@6sSp{roKI`9k3Oxl6=<5x9PC5pkV6 z22bnfj1b2>E_!Pe^%iIlsD7Rl<$n}-laQY&@D_nzE$~)>V_q7)wF!Kj27$H<93C~a zw+?}iwNW_W=d;kx7X+@~PeS}kfoBML%xj}J{oFmuZ_^-9mym}?!t6~y$BOd5*(l^w z6Y}2++$->10o1inV#GX&lw@J9vSEO4EB z2v2Vj_=Q5gMc@kr-X?IJ;|Nc82)tUz?-lq`fm^qG6^H(B6nL7zrwCj>hluhz*Abp} z3;BNvdHp^U%HJmN5+Q%Hz`X*0U*P)rU(|y+ob;xj<3{`k4Fc8gpCP_R;0;3mrvhIg z@N)#N-!nr!HwwH-$YUNUy|oCuUV}he1%9Hy_51OtKTqIoLVmTt+XcQv;2i>=C~*B= z3+jJK;QDy=@eDNP|F|1^%7D_4_(#&#MA&5%R|ie4D_h30yzlje0PbnBH{$ z62#%rVtZ>7dN9A3-r5EJq6UF>2>cO&>*sS({|KQ+zXyQ$??PTb4~zI1A@AbnWD$Qx z$m{3*5!X4@@U+hNfOswfyt##*r!@%FEAXuXZxHyc0&f(!Ti|O1o-Obuf&VJ-7J;8B z@NEKLA@Ej#zbo)IfiD(#yTGpyxV6cvIP_0Y;QIMu#K#H$>-TIB|4PWagq}=+>%1%| zKSJPHLcUbs`Z;TqKTg!^7V;Me`4WLYCvdO8=LlRsr;qwEN1opF`!|U1(I8NrX9)3u z0&fudKNEP9z;_6|S>QJayhY#*0&f%emjbu=xqGzdaDnUh8WDe1;QIY1#J?7}eh&k2 zolg)?X9@j(7xHd_uM)Ud;O7avLExhWuHQ$;dM^{WexCqw%ulE{o$mzkQ#1&)N$8&? z@MeKOB=8o2|6Aa#0v{vr?E*hi;B5jg7kInCO9b8_@COC1-(SaeT`O>%UkC9C0(bFy z28ioCjd(gs;0FnLx4@4UxPG4!^}H=`{eC3k?+M&1^t>W){k|j0e<<(JP$omAoLg3d4 zT)(e_dN4<*-kOB`D1kQ%{4gyHv_;?-3%pI>d=o{T?GQNTFSR#*uM6!NZ-elCP2gt> zJWJqN0@wLeP)}6gZXti1!1eq6DBmn_ogW49MFRHx676vb`4%C+SID;t{565M3H)+_w+nooz&iv!PvBOw zS8>W7fx84=Cvcrl4&{pkuJc@D&0d zDey*t*9yEz;GF{3d8g3+^99~4_;i801zsueLV?c~c!|LG7xn7* zv(X;RMXoomkjI?kdaD!oR1E@MDDZ~`-XQP|0@v?JW4(t6{f$EY0U^Ie;C~Z%lfZWh zyjkE|1l}U>s|4OE@R7ovHh~uk`3`~qL*V-TY;4zILXUnQ8gb0mt~Z@m67k6z1nR!u zt2o44)DeB?JX?rgBXFJP4Dn?G*ZGhTzenI+q5lnm*9jbR*Xyl8;Gb&{=-?)=;`W12 zA#S+@o~$J3W4ORm1fC`EZUWC1IJQA=Zh?2#AkadAqfL4%5qO#gfzB3qPl0;{-b>)s z0-q%CI)V2Q_(FlF3%o(#eFeTk;QI@_aOu}+g{xBi*)FSac}q04eGi;0T>5<4b3zCX zJI752kq-x9$miEtN5PC_dvcx@yW=e>vy^p|I6{f zqsw<@DgJxpdn4~s{4V6t#XB<;zXN%6?M@4L_S46O;HQD;%(Eui+b6L&7PXa{lUxmCH3h+9tne3!T@$?8_( z_9r`EB5otM3Hq4aph!71#y>?U(P1( zIyyI-xZQMaI&qJaEycurO!ZA7?r9i05an*-PM{V|AZ|TLjwS9k@?a)$?@=EOCvG>j z{V?J_B&!c1u7G?th`3>7X9jWH4?T%Hoa*aF+!QMJM==<QbF*vwU_my=~b5qCV<(m~vA z^2;vbz8bIk_CLh^2$LN2^e4o9Ns`-%JD0dOiTjLde}%Y#)S?%On?^cYh)bf{A0zHL zl6;W3J`@x8a5=JiBXMt#mRpG%L)?wT-A%QxCXVONM&hm_EteAaEBR#^aqm!sTu9vC zC|Va1H-sz;6ZaW$LE@ey&sP%nH1&#?xFphYCUNCt*$m>2q_$5b?f|O2khtr|DPQLj zH;3%}J8>sbYsV9}gt#o?ZXun=5O*rsc?5Ah&mThEG_qwdaYapGmTvxFU*|9mL&0Uiyf*DP+sL#7!jcwi3tJ zqnC)=LlOBraktTEe2Tc^$d)a{?IfM|6Ss<@;4b1uk}bCr_d2z&iMU(HvbDrLH%9f! zKZzSRR&iGlw}jfag18>ke-{(ii~9C_;=ZB!<`XxI>Z>E}dTPTt#O)z16~w(j+}Xta zgCu7YcLrHDow%>aFU7e0#ClGhdXw{;z#Hn@O%G6BaW>M|KiF=f+ zK8(0|h`1{1hYaE_qS|{B*PkM*8*$%|KmWi1v?_H!Dz}%o0JZ3Q;#Lv& zHE}i6zAuOyMz*vO_Y6sXK-@K?^KIfDqI0hi_a(Jx8*#o-$`j8Lw~DNOg1B!;@?qi* zAip#dcN*EUnYdE&=LX_tl3&&l_Z~^EA&%qaYT|g@UPc^`qf3YzM&%laJArgACTnkeJyiudxIp)i0ei5okiSDbnfh9mCg|RleqV(ePQBw9Gy?x zTsn6NaX%B+NL&tiVl8py952MZK$7B z+(lf3TJ!^PC(&s9gSb1`pCeUkeVNL;{fIk}xPyrMow%cjyOLrei@0aV&I!bwN;>n2 ztD)Mb5_dfLdNy$ZYI_-Rd#GHHxXZ~C^MPyM|NG9)r?M8gt*2WSyRG&&cXxJfO$~x# z+|*aozQe4Ug)4u23je4^>B?W9?yF9Goz^}GiZ1;%>B2#Ut1d`uZ-^4Gr0E=__z4w;JUvgIv(m)8JSxbo9S-H&*!$J|TY)>B7BG8Auo|6wN1CabdBPXbwt-<4Z;-ui84XJuo~telmdIj0w` z{3&N<(aLvnW)xq3Wb5HB2)WBgZUrDA)aCe1lnE~VrU_SW*$Fnj!jFT+i=4$$E^iAR&Lb|ZpEfZ zP#o9s`SX}w!nBd;O-%1)`V`aGnSQ|Z3#Pl7{>HS=MO6O~rpGd!z;qhZIZXXb!%UYk zy^`q-OgAxoi0O+=TbX{$^gE`%F-^Oe>^X?(QB21$Ens>&({iQ}rc0P!!}M0Bk1~CM z>03#y#k7U#TTK7W^k=3$mQ%flFwJIq8q*r4il>8ngXVfr1@?*E{A zhcX?(bR5&kOs6v~XIjH_0n-&sZ(w>q)2&S3W7^KNlj;5|sQx3E9?$etre`w^GrffA z4NUK2`XbYhn10VRbtUN^!gM6l(M-oP9mDi^rW2Un$n-9z6Pe~SEoM5C>0G8|OiyQ8 z%{0t(G1H|?FJ*c))74DZGQFAUW~TQteT?Y~OkZKz%JglfA29ul={HPwGyR2Ww@b-i z`V~;fMWk~AsKbzYvlI{MWmo$MQ#9C&{rV~(cFGaRPof0mi@Q`pB@9)EoUce!tAr}4t06V9 z^scHZ(MB^{Bglhm>`W+5RywVKlNe*8^)VzgMh;Uy>Bw@v#0+O+sdpq}YexH&pCKU{ z3BcRgT3IYdLRa}|kO345a8fDz$QD$Hj8?2k=P#sVX9w8lDVjK43aWAXU&#rNnwj?O z^Q?yxI-#OiMkwN90|8E{6rwV>ol?YjEJ>k6RgyfV%8ne)EK$S|iTcnxq~Y9Rvi0c2W6z>#kl&5M)lQozozmZ=|6 znca7EBwGTA%Il$Y84=BC%RmF?Z@?o?3m9vRvNV>)7!}3Iw<=(#tumXdDWrx03&@<4 zCQ7lG@I22KABw#`M6srbiBlSUp77rE3Bh`u}QL!i;iv@{;U_aN2!0_cDjHr16mFE!mm0zTYwJ#rn9phXd%!-IKKsGBT(E15V4XLPq&g5 zW+V;myuzcGnOW&EJ^B_o>tJylaB4e4eJTQp8a)a=OGAyTq&HzI+nrS z1od3rhwzjYee80me*^3pJ3BkkPgYKP#wE!`>4TT1oSN43esJdcPmIAepzZ^de$Y~3)8cg?l&df9Zb*8NzckjAD)};%1s{( z^0}Y~?ZoFbU0`Q2>iKK?%L9LT;4csS<$=FE@RtYv^1xpn_{#%-dEhS({N;haJn)wX z{(tvC$pW{kv$>jR7W3K=z73*oSsg4<3y$RU#`40{L zGrW-@&OfVea>V4{H2Cquobm+*Kh5AVrzCE@iC8PD-0FzUu%3tKrf?ggKH)wKJo$#( zQ1uD-PnaIaw2;rU+3Nlip8D~R&JfZy$!;VTyTPhHn)vPth4=e<6W^2hZZ10L#r$BV z1DR@)q7Rz9>PX*XQE$!xqVGrT$8rZSbyd36k;eC)O1!?mG@KjOgXMMo@SK=x&vurF zhsqSM`wFrESJN}GsTkPJaNS{mNpC6O}cO}4&WnA}{t~5J=d|?9lGZM(xC1^)&0{IIQ z;Ef6JTNB{-C%~UhfWMsp|1tso-voHCRq^}9l>k3J0X``KJ~IIxPJk~4H! zn4lluWqC7xb|lcFs2KaSeyRhUO~t zMF}4{YW&fbl^I!76ZMq=jfRO<>m&F%3jRo`l?jQ_{h2wrMI)oWD(0$c>od#h1Hp=s z@H18>a@D>_wUt@1s221QjfUwAW)H_dU!}yD@xZw-{FzQHz(;kEr9D$6%Fc}X7s9bh zlARfbzv2doxikIMo=W(GJAO}f1(eksmGJoR@Ay#(eSA(ih=F!r4Wx9>tO|ib_{dbX zkVeS#ZDqm_b2acli0Mm{Pl2mycCy=qtrU2Mc1B!0#frwoyV=(*sVoJqV)}aJ#Jk(q zH7CBG74LeG0#`|W9dXL{u=MrFiTAYhb<2tOvajDxytmcN^Sl%9W9jvd6Hm9V`%b*C z)yC@qC!S%YUFMdMI!=MVL_a$&-p^h~$U-TQc}%Y#ocI6>pSU--6vz-5?|PSF4YKoL z%Q7hzT=jW<;KT=8O>yxdR?B*?6jjG5mR{||PT@Sz&Dz}=L+I!TAW5)#YJw;AapUEn zH64x-#}@){E8zvpnQ)v08NBfw0o;c31cQqSl*ji2aC5VwMR1Jr_{soo8ovsTQ6AqN zz%5OETGkCfldQp3^LnpBH2#3Xp}j0WT%EP7rxZTe!UybeYh^oMg5zYXkA?4(;C6`m zq+E80>$p!meS~)6t0%a*)F=#ybprIpgN{g&UOqA=V0R7qDvEtnjXJ{s!yO-$Pj3 z`dG<#9WRO6^_!C4-)g?xtyL)66Z$O)R>AScQ9Qp5Qu2MRc4NFBuJEqo?pTEnwzjPI zI_k{^95P;Z8P`RO>+ch~&{;}P*KryKe1C`&Jsx#DT*-LrdaqKU@jDpbZs5-{-e%w* zFy3z9zcAim;Db}h9&3Zw!cEsZo^hSeUgJfKy9{|h<5>p&560aF-o$u`fj`N(&S$Ud zeS>kYA^#KOI-k9k?+^0|`nkc7Kc4YM1E0;f&S$Un)H2>=$X~*Ei-B)oyw$)TW4z74 zKV)3zv)A?h#CV4xpOMP_b(^!lG8s=Z@QI9P82B8<2OIcBjJpi{X23IG9y7kRyG#v2U$M8;Pb_;kh_4Lrd38UtU(c$0zOz<9HP zH#5G)z~5%P#lUv~?gD?B*XtiyzRi&DxgYtV!@!SWe6NA$GH%`Oj1wQ@X$Br;+-2Zb zD?GMdg0NKEEiCUg<@IM%DHShy_P`h+qd=OLH7{=QS`BKK)4ZI%keq2_P zWh~!e$Zud==gZgiKFzpwhgYf5_{U0r9}C}Y#Z5h11at?>ry24;GVU_){ynL^ZUZ09 zc%gxx!nn?(uk8r~9<{gvkdtujO+aRTK;Ut-G==6jF%YrI>7r`UB8cS zV0o`0{|e(e@4l}0bEQXxtmES+majAP^n|aJ*pE6Nzt-boyupwk%XpK4moVOJ;B}0* z82Adt+YG#kaci@)e;;97=i}FQzQ%ZlA-{`pmw|UOo@L;N!xv2SgWJFh8TT4^2=I9G z?FB5~V92j!T<7W6_TS5Rqapu70{w5Xyw2aR^?b>AlcDD~#+wcNp#6FL8u-bKw;K2? z#&!OFU2iSpZHD}E#&!OFEx(%a4nzJ?#;rS@{r(By@%;QP%V!w!eLxud(PiL=F`i}M z*^Ijld?w>1242Uw&g-AXqwFfc`@#K$%Z&R5YgpcE=(&$^o$p`kd6Dr3L;hpN8x8y` z#+wX0xj*?q=lj?C2Q%Jm$Y%l$s=93XEZ<_t2N`cQ@QWC4Gw@p(x9;+)I?}kNM;Lb* z_{WTA8F_Q#lTNsyw$*GGOqv5 zfVRJm@is&L62?0Wd?Vx5Jc-K?Dua0&j9<)`&YlP ze3~KO2Ywn+*I5HUmhs^RUdXuHz-s`HH*YUdcpnQ>Na5yJpYS&*6Ubl7`b!M`&5X}B z@D~~P8u&+y*BST^j5io~|DoiEMgu>V@g@V$WxUzI&juX*fGN4;R?YG)hWtg0w;K3r z#@h`1ZpPaU{AI>F47`nTtJ$l}(ed^J<1Pd52@e8cJm|lNpygeRXBqM*F|Pj}f|j4l zxZ99Fm+=wm`;UGIyGHyZL^Fy3U~sRvVg_1{C#dR&Y*8}cVI z-eTa>0C&j_=i_-S-)hKT&Ul-FKgxKAfq%%jb)Q#h)^>i!c$$HCgCF?fjmN+0M_)5mz2EGpPer$szPqKWWA^!&BB?kT- z5MNl@H)mD4E##QR~YymfXA!%8J2G}&`Y{36CX4E#36t^2(eZaO}nbCEqR1OEu{ zekf>cU%Nsq$jh8X5|89fEql|kE{Z})t|89ep z-^6%>A^#_TygswMuFmqDdFGg`eJ5%w$o4Pvm)FCq%OG7mCL9eS9W^fOFNYVaXDq7o zPld;HA_$IyTm}(3oehV9a(`)kU0o;~6%yf?L^uFX2bmJ%&j|)9Ny+i^ec=j!WyA`H zD=PAQ!QiC&+H%V?xp-P`PO--WudjQGJo`3YnK}x~W7&LvB?4nHM;#tyv4 zS?ISZzCf*VP-(l>KCf?06{;vG;{ozvEx8<93c-r4@FNmdEkkq@FI(zhpMQr zsaXU?1n0rWs2rjm&!p)&QwlrO>$jL1(@K|-wVV;VJA8esy5;BK_Ith=Md5jn4V}&4O zoGCigsY>WLY+DhuG2jaZ7W=6lRF&YB{Fq9%WBgc=x*>KJD%6QrFuclqF$(TyP%xRUCpeAOlnZ3YahnX42agq}{DNNNBOZX7K zI=c^YDD{obN#)QAO&2+CoGnrcptXSN>`P7oLsfaf07PuQ%4ndfL_BVO z28TiD1C=)=*3e2{Eu@n8lSb0%d^O>S&ceQziBMu%A#X=~m8w;~P}g2Ja=h4$lBpNE zH!m0@76j8i(zer^jle1?T6$)X0Stt}O35Uu>Q9B8WJpiXc&JU$R zH4)N-7;VH7IRTwvELIufl;_hQ77BEp5JL+@j5Cdzvo&@qE(e_Bqf|PvN}Vl?l>2I@ zgdjIffSaJbg8@v*xZsIV4^2!?%@9w%Xhb*$42+YuiwcG6%YuH7%$E^UW;@i*Dg#+* z)M@2UNXQb1xdNlTJeC9{mT$vTG!4wG2-JG&BXBuYs`8u&n z{Ai}B0#d(3E8`1jM~c*6vD(BOV~=mUKtSeZQe{+S=%ym|6mclxF9=2AL{2awJS7^D zaF{EZK&ZUbA1w}5VH7yEDx0`sk-SJ5rR{Z2b1hK;d?T=flNHr*er|2uN-)R6cJ; zUWsj;Q>Qbdk`Cw!8V54Nk8LGHwYo}{_`-1H56-B@q`whZSNZDUacW4vHZMQ+SuKj16tk#prmMyDR1cm<&K|EE}OZqsB8|cDhvH%pVw& zhe;!5jcP3SM^Oo+wSrY{2`qwjFXX`^=&<}^*Vyw1<#vjx(JkkMVKK9@L5{p?>J$wn zNF?S7`y;T>jD@7LWHIKDgXDh-MaP@zo1Ee}2IA$fb4oe0aM{-y-2@{?p|dQQBh!i5 zcFA;83Zx){IZ%D^FjrX0k1D}d%!RrqV&kBqzP7?w8!dsA9WUQwjxaM)k(o3a#B@%n zlwuZP-^aB`x4zVos!kQuoi65cEe*>oz2Y*0I49Kg@{F_TzAIOmvTvu? z#882}YUL4{hDw8ef1U6dE=Fj5;Am1#fHT25P)?}nz^F8Ii1=op+N9?>kK%ZJLNzNF z+4U=Cd7eyd&PVK3;Tke_)@MTT7B`=5$z1JVhG2e-G|C-T`DhB z8;R;tI5*2Fu}fM%RaEJYO*V;xJRAwnr&`0lF!@d!fvXXCS zi8vOk75;MbhLiF(esfOj=S24vbOh;zNCAEm)|ESbA1AMFtRc7ziC?`r?qd01Md?rt zd>4(tw=%qQYc8O4mzX(}Re4)IEC^I8XqDVKc8cemu5+ZCSUCT(LtNk55Frzd#C17O z>v4@%f#{>OGC z91uzZFT(LHrBTQW$=Fb|yG7>n74f7dIP|_=@GCt!IjzzI_nwWrClu$HIJS!|a3h*; zTj+>Z>w!Y}66g=dk7wtlD4uPOr4Ucl`ineH^|Ai6?>fbe1=|_+eJsaqPh~NyrweL9 zc{RA3*Q2pcN15Vy>sh-3^-JkRLN z(V6(8MleuT?kSJd)1^UOU`79f9riL-W$2EXi1n!JvNLSyn^DXs%2D=D05RO|C;r-R z%!TSS)NU_5Am4bbZZVTNQCf=I9#daD3Kr^nk~C-*)pogR=-Tj`6s#bfI&%a1FC)YZ zU?+FIbE`G!KT#1Yg02+zQ0?}sMYO|*dJgImfi&ymgeJc4*^2m!Cwh$2bUP~NOy&+O zb{(T8tIoo<#rlb$E;n*e2%{WES(m9nUw#sFX>4#fu0%K#x+Zy!nTs`+b_scVVFqyr z>oQN#j4AMyILs3U{9Xpm^v^JsiRB!mac3w!Y35*kepq4#6E7x7_D_HRfUc*&bOx6G z!zz(L6)bcU4osDD!SF-ZKlKn3P_=cr^{e_(t+DK|LXX=i#8r9iO$;ymy2sN4to_4L z58lmm8mY=C#UKG!B3rW^lPWySh$OF-CB6j)EyxYY7I-{Wu>Pfq6MiaH^(rlJpCfK3 z+6I_^S|e7}2S4P*FU&2%bnLhkz*ecaN*q;obKAC;dp&^9T*$z?=r=5?Xs!6zv zPuwPO4UQiiIrc24+C;;LN=EFg>FShiogSF-PlUuA5}TysR=O7n>))Ysu8=u_izs{`kIA{>HO*4=96U zcN6IviC?^8MyN1!%>AlR4fwxHEyiOh|BqRCyv|C3T|Zxyo$Lk<@^LW$kE1y@l$G1z zz`!e`cKI2}Zs07)gQAG#B4U4bvybRt6cAZHn(S65qFnw6#l=3%^7(M;C&-DV?O&7Z zR>Er-c%p}5?Yv<6xfnt%YbqS{f?b!_c~@rlCW#DqZVfkh4Osa}mxsr4)pk03!Yl7~ zd7XEx`e-`e%|%pyn*KW*PGF8NUBAxb5-g$;K|Ybn3bdT2^8m-3VVc+ZUbde~1zcRt zw4Y&XF&v;zb$Oi^W-pi5dCGMCX8V_M`CL}0^T)U<3D9}cuspidEPn-H=o7RLH=QSL zMHTVz7_4J6`+p^zmF0Clnr1GqP6`e1dXm~S{U>ma^87q(b2Z8J+n=cZ)a5k477k>2 zo!9R9MI^!Dr^S`8Z3YgSV8`;>|2hv&8e6B@>%G9i-{@Gc zh}8=3&B)Cq8945Q9qZ3Ba9w_+fuk&Ln&R-%b*mHn@j2I@rUe-{Sfxjg9a+9(195GK f5j_~lMA)_8^!$zEGhY3zTdCZ(Ly787v;O}B-mYDA literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.linux-x86_64/PLC.dbd.d b/EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.linux-x86_64/PLC.dbd.d new file mode 100644 index 0000000..f969328 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.linux-x86_64/PLC.dbd.d @@ -0,0 +1,168 @@ +../O.Common/PLC.dbd: /opt/codac-6.3/epics/dbd/base.dbd \ + /opt/codac-6.3/epics/dbd/menuGlobal.dbd \ + /opt/codac-6.3/epics/dbd/menuAlarmSevr.dbd \ + /opt/codac-6.3/epics/dbd/menuAlarmStat.dbd \ + /opt/codac-6.3/epics/dbd/menuFtype.dbd \ + /opt/codac-6.3/epics/dbd/menuIvoa.dbd \ + /opt/codac-6.3/epics/dbd/menuOmsl.dbd \ + /opt/codac-6.3/epics/dbd/menuPini.dbd \ + /opt/codac-6.3/epics/dbd/menuPost.dbd \ + /opt/codac-6.3/epics/dbd/menuPriority.dbd \ + /opt/codac-6.3/epics/dbd/menuYesNo.dbd \ + /opt/codac-6.3/epics/dbd/menuSimm.dbd \ + /opt/codac-6.3/epics/dbd/menuConvert.dbd \ + /opt/codac-6.3/epics/dbd/menuScan.dbd \ + /opt/codac-6.3/epics/dbd/stdRecords.dbd \ + /opt/codac-6.3/epics/dbd/aaiRecord.dbd \ + /opt/codac-6.3/epics/dbd/dbCommon.dbd \ + /opt/codac-6.3/epics/dbd/aaoRecord.dbd \ + /opt/codac-6.3/epics/dbd/aiRecord.dbd \ + /opt/codac-6.3/epics/dbd/aoRecord.dbd \ + /opt/codac-6.3/epics/dbd/aSubRecord.dbd \ + /opt/codac-6.3/epics/dbd/biRecord.dbd \ + /opt/codac-6.3/epics/dbd/boRecord.dbd \ + /opt/codac-6.3/epics/dbd/calcRecord.dbd \ + /opt/codac-6.3/epics/dbd/calcoutRecord.dbd \ + /opt/codac-6.3/epics/dbd/compressRecord.dbd \ + /opt/codac-6.3/epics/dbd/dfanoutRecord.dbd \ + /opt/codac-6.3/epics/dbd/eventRecord.dbd \ + /opt/codac-6.3/epics/dbd/fanoutRecord.dbd \ + /opt/codac-6.3/epics/dbd/histogramRecord.dbd \ + /opt/codac-6.3/epics/dbd/int64inRecord.dbd \ + /opt/codac-6.3/epics/dbd/int64outRecord.dbd \ + /opt/codac-6.3/epics/dbd/longinRecord.dbd \ + /opt/codac-6.3/epics/dbd/longoutRecord.dbd \ + /opt/codac-6.3/epics/dbd/lsiRecord.dbd \ + /opt/codac-6.3/epics/dbd/lsoRecord.dbd \ + /opt/codac-6.3/epics/dbd/mbbiRecord.dbd \ + /opt/codac-6.3/epics/dbd/mbbiDirectRecord.dbd \ + /opt/codac-6.3/epics/dbd/mbboRecord.dbd \ + /opt/codac-6.3/epics/dbd/mbboDirectRecord.dbd \ + /opt/codac-6.3/epics/dbd/permissiveRecord.dbd \ + /opt/codac-6.3/epics/dbd/printfRecord.dbd \ + /opt/codac-6.3/epics/dbd/selRecord.dbd \ + /opt/codac-6.3/epics/dbd/seqRecord.dbd \ + /opt/codac-6.3/epics/dbd/stateRecord.dbd \ + /opt/codac-6.3/epics/dbd/stringinRecord.dbd \ + /opt/codac-6.3/epics/dbd/stringoutRecord.dbd \ + /opt/codac-6.3/epics/dbd/subRecord.dbd \ + /opt/codac-6.3/epics/dbd/subArrayRecord.dbd \ + /opt/codac-6.3/epics/dbd/waveformRecord.dbd \ + /opt/codac-6.3/epics/dbd/filters.dbd \ + /opt/codac-6.3/epics/dbd/links.dbd \ + /opt/codac-6.3/epics/dbd/devSoft.dbd \ + /opt/codac-6.3/epics/dbd/asSub.dbd \ + /opt/codac-6.3/epics/dbd/dbCore.dbd \ + /opt/codac-6.3/epics/dbd/rsrv.dbd \ + /opt/codac-6.3/epics/dbd/std.dbd \ + /opt/codac-6.3/epics/dbd/autosave.dbd \ + /opt/codac-6.3/epics/dbd/iocmon.dbd \ + /opt/codac-6.3/epics/dbd/sysmon.dbd \ + /opt/codac-6.3/epics/dbd/asyn.dbd \ + /opt/codac-6.3/epics/dbd/asynRecord.dbd \ + /opt/codac-6.3/epics/dbd/devEpics.dbd \ + /opt/codac-6.3/epics/dbd/devAsynOctet.dbd \ + /opt/codac-6.3/epics/dbd/devAsynInt32.dbd \ + /opt/codac-6.3/epics/dbd/devAsynInt8Array.dbd \ + /opt/codac-6.3/epics/dbd/devAsynInt16Array.dbd \ + /opt/codac-6.3/epics/dbd/devAsynInt32Array.dbd \ + /opt/codac-6.3/epics/dbd/devAsynInt32TimeSeries.dbd \ + /opt/codac-6.3/epics/dbd/devAsynUInt32Digital.dbd \ + /opt/codac-6.3/epics/dbd/devAsynFloat64.dbd \ + /opt/codac-6.3/epics/dbd/devAsynFloat32Array.dbd \ + /opt/codac-6.3/epics/dbd/devAsynFloat64Array.dbd \ + /opt/codac-6.3/epics/dbd/devAsynFloat64TimeSeries.dbd \ + /opt/codac-6.3/epics/dbd/devAsynRecord.dbd \ + /opt/codac-6.3/epics/dbd/devAsynOctetLs.dbd \ + /opt/codac-6.3/epics/dbd/devAsynInt64.dbd \ + /opt/codac-6.3/epics/dbd/devAsynInt64Array.dbd \ + /opt/codac-6.3/epics/dbd/devAsynInt64TimeSeries.dbd \ + /opt/codac-6.3/epics/dbd/devAsynInt64Misc.dbd \ + /opt/codac-6.3/epics/dbd/drvAsynSerialPort.dbd \ + /opt/codac-6.3/epics/dbd/drvAsynIPPort.dbd \ + /opt/codac-6.3/epics/dbd/s7PLCAsyn.dbd + +/opt/codac-6.3/epics/dbd/base.dbd: +/opt/codac-6.3/epics/dbd/menuGlobal.dbd: +/opt/codac-6.3/epics/dbd/menuAlarmSevr.dbd: +/opt/codac-6.3/epics/dbd/menuAlarmStat.dbd: +/opt/codac-6.3/epics/dbd/menuFtype.dbd: +/opt/codac-6.3/epics/dbd/menuIvoa.dbd: +/opt/codac-6.3/epics/dbd/menuOmsl.dbd: +/opt/codac-6.3/epics/dbd/menuPini.dbd: +/opt/codac-6.3/epics/dbd/menuPost.dbd: +/opt/codac-6.3/epics/dbd/menuPriority.dbd: +/opt/codac-6.3/epics/dbd/menuYesNo.dbd: +/opt/codac-6.3/epics/dbd/menuSimm.dbd: +/opt/codac-6.3/epics/dbd/menuConvert.dbd: +/opt/codac-6.3/epics/dbd/menuScan.dbd: +/opt/codac-6.3/epics/dbd/stdRecords.dbd: +/opt/codac-6.3/epics/dbd/aaiRecord.dbd: +/opt/codac-6.3/epics/dbd/dbCommon.dbd: +/opt/codac-6.3/epics/dbd/aaoRecord.dbd: +/opt/codac-6.3/epics/dbd/aiRecord.dbd: +/opt/codac-6.3/epics/dbd/aoRecord.dbd: +/opt/codac-6.3/epics/dbd/aSubRecord.dbd: +/opt/codac-6.3/epics/dbd/biRecord.dbd: +/opt/codac-6.3/epics/dbd/boRecord.dbd: +/opt/codac-6.3/epics/dbd/calcRecord.dbd: +/opt/codac-6.3/epics/dbd/calcoutRecord.dbd: +/opt/codac-6.3/epics/dbd/compressRecord.dbd: +/opt/codac-6.3/epics/dbd/dfanoutRecord.dbd: +/opt/codac-6.3/epics/dbd/eventRecord.dbd: +/opt/codac-6.3/epics/dbd/fanoutRecord.dbd: +/opt/codac-6.3/epics/dbd/histogramRecord.dbd: +/opt/codac-6.3/epics/dbd/int64inRecord.dbd: +/opt/codac-6.3/epics/dbd/int64outRecord.dbd: +/opt/codac-6.3/epics/dbd/longinRecord.dbd: +/opt/codac-6.3/epics/dbd/longoutRecord.dbd: +/opt/codac-6.3/epics/dbd/lsiRecord.dbd: +/opt/codac-6.3/epics/dbd/lsoRecord.dbd: +/opt/codac-6.3/epics/dbd/mbbiRecord.dbd: +/opt/codac-6.3/epics/dbd/mbbiDirectRecord.dbd: +/opt/codac-6.3/epics/dbd/mbboRecord.dbd: +/opt/codac-6.3/epics/dbd/mbboDirectRecord.dbd: +/opt/codac-6.3/epics/dbd/permissiveRecord.dbd: +/opt/codac-6.3/epics/dbd/printfRecord.dbd: +/opt/codac-6.3/epics/dbd/selRecord.dbd: +/opt/codac-6.3/epics/dbd/seqRecord.dbd: +/opt/codac-6.3/epics/dbd/stateRecord.dbd: +/opt/codac-6.3/epics/dbd/stringinRecord.dbd: +/opt/codac-6.3/epics/dbd/stringoutRecord.dbd: +/opt/codac-6.3/epics/dbd/subRecord.dbd: +/opt/codac-6.3/epics/dbd/subArrayRecord.dbd: +/opt/codac-6.3/epics/dbd/waveformRecord.dbd: +/opt/codac-6.3/epics/dbd/filters.dbd: +/opt/codac-6.3/epics/dbd/links.dbd: +/opt/codac-6.3/epics/dbd/devSoft.dbd: +/opt/codac-6.3/epics/dbd/asSub.dbd: +/opt/codac-6.3/epics/dbd/dbCore.dbd: +/opt/codac-6.3/epics/dbd/rsrv.dbd: +/opt/codac-6.3/epics/dbd/std.dbd: +/opt/codac-6.3/epics/dbd/autosave.dbd: +/opt/codac-6.3/epics/dbd/iocmon.dbd: +/opt/codac-6.3/epics/dbd/sysmon.dbd: +/opt/codac-6.3/epics/dbd/asyn.dbd: +/opt/codac-6.3/epics/dbd/asynRecord.dbd: +/opt/codac-6.3/epics/dbd/devEpics.dbd: +/opt/codac-6.3/epics/dbd/devAsynOctet.dbd: +/opt/codac-6.3/epics/dbd/devAsynInt32.dbd: +/opt/codac-6.3/epics/dbd/devAsynInt8Array.dbd: +/opt/codac-6.3/epics/dbd/devAsynInt16Array.dbd: +/opt/codac-6.3/epics/dbd/devAsynInt32Array.dbd: +/opt/codac-6.3/epics/dbd/devAsynInt32TimeSeries.dbd: +/opt/codac-6.3/epics/dbd/devAsynUInt32Digital.dbd: +/opt/codac-6.3/epics/dbd/devAsynFloat64.dbd: +/opt/codac-6.3/epics/dbd/devAsynFloat32Array.dbd: +/opt/codac-6.3/epics/dbd/devAsynFloat64Array.dbd: +/opt/codac-6.3/epics/dbd/devAsynFloat64TimeSeries.dbd: +/opt/codac-6.3/epics/dbd/devAsynRecord.dbd: +/opt/codac-6.3/epics/dbd/devAsynOctetLs.dbd: +/opt/codac-6.3/epics/dbd/devAsynInt64.dbd: +/opt/codac-6.3/epics/dbd/devAsynInt64Array.dbd: +/opt/codac-6.3/epics/dbd/devAsynInt64TimeSeries.dbd: +/opt/codac-6.3/epics/dbd/devAsynInt64Misc.dbd: +/opt/codac-6.3/epics/dbd/drvAsynSerialPort.dbd: +/opt/codac-6.3/epics/dbd/drvAsynIPPort.dbd: +/opt/codac-6.3/epics/dbd/s7PLCAsyn.dbd: +../O.Common/PLC.dbd: ../Makefile diff --git a/EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.linux-x86_64/PLCMain.d b/EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.linux-x86_64/PLCMain.d new file mode 100644 index 0000000..85a2b61 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.linux-x86_64/PLCMain.d @@ -0,0 +1,16 @@ +PLCMain.o: ../PLCMain.cpp /opt/codac-6.3/epics/include/epicsExit.h \ + /opt/codac-6.3/epics/include/libComAPI.h \ + /opt/codac-6.3/epics/include/epicsThread.h \ + /opt/codac-6.3/epics/include/libComAPI.h \ + /opt/codac-6.3/epics/include/epicsEvent.h \ + /opt/codac-6.3/epics/include/os/Linux/osdEvent.h \ + /opt/codac-6.3/epics/include/epicsMutex.h \ + /opt/codac-6.3/epics/include/epicsAssert.h \ + /opt/codac-6.3/epics/include/compilerDependencies.h \ + /opt/codac-6.3/epics/include/compiler/gcc/compilerSpecific.h \ + /opt/codac-6.3/epics/include/epicsGuard.h \ + /opt/codac-6.3/epics/include/os/Linux/osdMutex.h \ + /opt/codac-6.3/epics/include/os/Linux/osdThread.h \ + /opt/codac-6.3/epics/include/ellLib.h \ + /opt/codac-6.3/epics/include/epicsEvent.h \ + /opt/codac-6.3/epics/include/iocsh.h diff --git a/EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.linux-x86_64/PLCMain.o b/EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.linux-x86_64/PLCMain.o new file mode 100644 index 0000000000000000000000000000000000000000..76fd7b1b6aa4dd43c63dd2c51d0a7ec86c32fcfa GIT binary patch literal 1920 zcmbu9&ubG=5XWb;)ka&lu}Ce{!wP~a*d?j96c2VwsErs!T5}SSZL*qZ(}e5_QSb)@ zgyN+~^)K+RP(cy>PkQj8;Hg5L@8%78YyhE!jkYdXG)C3(&hHPfH+J?vPOvWbe`NOn`uoQ7sq*V*1MAmB?g(h)Djw*n-2aj- ze!6q_GyLz~LcTB4TB&r|&ad69&f1rpC1=5&FBBIFi}M%l{JLMa%U(F(bH&A3&O3!< z7UStU8NHk_Gd`N#JLRq@$WO+?vGqlprP@J48=J zB<-BhL-CVLCbc1pdd2KCuiT+%qO&PHpTeCKPPZzh8(wqUsdc!El~RFPY?0q-)`Hbu zGo+yTAn-$KwrfFSfNwXtzE|Ja^8F4`G}L_dabDxRM5fdR9l>4vIT#4$5dv=U5`F=Y z1su02ya>nwj^`zO36Ldz&hh|99Q8=Nt#PSYq5o1doQ+wHciK%k6|uUYk6`f$b@d=^ zAJ0F}K1}7m=Hq^GW?KC+ha3_~d=}9+ydpR94*$5Sp!W))7l@M=G_5%Lh3{kjb=g&h z#EVaC(Wnpk1qo34jnbHVUF7~mSJ^3hJ?^V+X#05VLzRy?)a9EpTpjXW>K2Uuf=Tzc zr|wVg3HOJ0A^E~jGK=?~5oJ}OAq-98^}~+Wj_{W%P&D4~7_a#EQB%_Q1 +#ifndef USE_TYPED_RSET +# define USE_TYPED_RSET +#endif +#include "compilerDependencies.h" +#include "epicsStdlib.h" +#include "iocsh.h" +#include "iocshRegisterCommon.h" +#include "registryCommon.h" +#include "recSup.h" + +extern "C" { + +epicsShareExtern typed_rset *pvar_rset_aSubRSET, *pvar_rset_aaiRSET, + *pvar_rset_aaoRSET, *pvar_rset_aiRSET, *pvar_rset_aoRSET, + *pvar_rset_asynRSET, *pvar_rset_biRSET, *pvar_rset_boRSET, + *pvar_rset_calcRSET, *pvar_rset_calcoutRSET, *pvar_rset_compressRSET, + *pvar_rset_dfanoutRSET, *pvar_rset_epidRSET, *pvar_rset_eventRSET, + *pvar_rset_fanoutRSET, *pvar_rset_histogramRSET, + *pvar_rset_int64inRSET, *pvar_rset_int64outRSET, + *pvar_rset_longinRSET, *pvar_rset_longoutRSET, *pvar_rset_lsiRSET, + *pvar_rset_lsoRSET, *pvar_rset_mbbiRSET, *pvar_rset_mbbiDirectRSET, + *pvar_rset_mbboRSET, *pvar_rset_mbboDirectRSET, + *pvar_rset_permissiveRSET, *pvar_rset_printfRSET, *pvar_rset_selRSET, + *pvar_rset_seqRSET, *pvar_rset_stateRSET, *pvar_rset_stringinRSET, + *pvar_rset_stringoutRSET, *pvar_rset_subRSET, *pvar_rset_subArrayRSET, + *pvar_rset_timestampRSET, *pvar_rset_waveformRSET; + +typedef int (*rso_func)(dbRecordType *pdbRecordType); +epicsShareExtern rso_func pvar_func_aSubRecordSizeOffset, + pvar_func_aaiRecordSizeOffset, pvar_func_aaoRecordSizeOffset, + pvar_func_aiRecordSizeOffset, pvar_func_aoRecordSizeOffset, + pvar_func_asynRecordSizeOffset, pvar_func_biRecordSizeOffset, + pvar_func_boRecordSizeOffset, pvar_func_calcRecordSizeOffset, + pvar_func_calcoutRecordSizeOffset, pvar_func_compressRecordSizeOffset, + pvar_func_dfanoutRecordSizeOffset, pvar_func_epidRecordSizeOffset, + pvar_func_eventRecordSizeOffset, pvar_func_fanoutRecordSizeOffset, + pvar_func_histogramRecordSizeOffset, + pvar_func_int64inRecordSizeOffset, pvar_func_int64outRecordSizeOffset, + pvar_func_longinRecordSizeOffset, pvar_func_longoutRecordSizeOffset, + pvar_func_lsiRecordSizeOffset, pvar_func_lsoRecordSizeOffset, + pvar_func_mbbiRecordSizeOffset, pvar_func_mbbiDirectRecordSizeOffset, + pvar_func_mbboRecordSizeOffset, pvar_func_mbboDirectRecordSizeOffset, + pvar_func_permissiveRecordSizeOffset, + pvar_func_printfRecordSizeOffset, pvar_func_selRecordSizeOffset, + pvar_func_seqRecordSizeOffset, pvar_func_stateRecordSizeOffset, + pvar_func_stringinRecordSizeOffset, + pvar_func_stringoutRecordSizeOffset, pvar_func_subRecordSizeOffset, + pvar_func_subArrayRecordSizeOffset, + pvar_func_timestampRecordSizeOffset, + pvar_func_waveformRecordSizeOffset; + +static const char * const recordTypeNames[] = { + "aSub", "aai", "aao", "ai", "ao", "asyn", "bi", "bo", "calc", + "calcout", "compress", "dfanout", "epid", "event", "fanout", + "histogram", "int64in", "int64out", "longin", "longout", "lsi", "lso", + "mbbi", "mbbiDirect", "mbbo", "mbboDirect", "permissive", "printf", + "sel", "seq", "state", "stringin", "stringout", "sub", "subArray", + "timestamp", "waveform" +}; + +static const recordTypeLocation rtl[] = { + {(struct typed_rset *)pvar_rset_aSubRSET, pvar_func_aSubRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_aaiRSET, pvar_func_aaiRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_aaoRSET, pvar_func_aaoRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_aiRSET, pvar_func_aiRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_aoRSET, pvar_func_aoRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_asynRSET, pvar_func_asynRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_biRSET, pvar_func_biRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_boRSET, pvar_func_boRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_calcRSET, pvar_func_calcRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_calcoutRSET, pvar_func_calcoutRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_compressRSET, pvar_func_compressRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_dfanoutRSET, pvar_func_dfanoutRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_epidRSET, pvar_func_epidRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_eventRSET, pvar_func_eventRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_fanoutRSET, pvar_func_fanoutRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_histogramRSET, pvar_func_histogramRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_int64inRSET, pvar_func_int64inRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_int64outRSET, pvar_func_int64outRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_longinRSET, pvar_func_longinRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_longoutRSET, pvar_func_longoutRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_lsiRSET, pvar_func_lsiRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_lsoRSET, pvar_func_lsoRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_mbbiRSET, pvar_func_mbbiRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_mbbiDirectRSET, pvar_func_mbbiDirectRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_mbboRSET, pvar_func_mbboRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_mbboDirectRSET, pvar_func_mbboDirectRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_permissiveRSET, pvar_func_permissiveRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_printfRSET, pvar_func_printfRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_selRSET, pvar_func_selRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_seqRSET, pvar_func_seqRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_stateRSET, pvar_func_stateRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_stringinRSET, pvar_func_stringinRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_stringoutRSET, pvar_func_stringoutRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_subRSET, pvar_func_subRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_subArrayRSET, pvar_func_subArrayRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_timestampRSET, pvar_func_timestampRecordSizeOffset}, + {(struct typed_rset *)pvar_rset_waveformRSET, pvar_func_waveformRecordSizeOffset} +}; + +epicsShareExtern dset *pvar_dset_devAaiSoft, *pvar_dset_devAaoSoft, + *pvar_dset_devAiSoft, *pvar_dset_devAiSoftRaw, + *pvar_dset_devAiSoftCallback, *pvar_dset_devTimestampAI, + *pvar_dset_devAiGeneralTime, *pvar_dset_devAiStats, + *pvar_dset_devAiClusts, *pvar_dset_devAiDBCLC, *pvar_dset_devAiDBDLC, + *pvar_dset_devSysMonAiStats, *pvar_dset_asynAiInt32, + *pvar_dset_asynAiInt32Average, *pvar_dset_asynAiFloat64, + *pvar_dset_asynAiFloat64Average, *pvar_dset_asynAiInt64, + *pvar_dset_devAoSoft, *pvar_dset_devAoSoftRaw, + *pvar_dset_devAoSoftCallback, *pvar_dset_devAoStats, + *pvar_dset_asynAoInt32, *pvar_dset_asynAoFloat64, + *pvar_dset_asynAoInt64, *pvar_dset_asynRecordDevice, + *pvar_dset_devBiSoft, *pvar_dset_devBiSoftRaw, + *pvar_dset_devBiSoftCallback, *pvar_dset_devBiDbState, + *pvar_dset_asynBiInt32, *pvar_dset_asynBiUInt32Digital, + *pvar_dset_devBoSoft, *pvar_dset_devBoSoftRaw, + *pvar_dset_devBoSoftCallback, *pvar_dset_devBoGeneralTime, + *pvar_dset_devBoDbState, *pvar_dset_devBoSimulation, + *pvar_dset_asynBoInt32, *pvar_dset_asynBoUInt32Digital, + *pvar_dset_devCalcoutSoft, *pvar_dset_devCalcoutSoftCallback, + *pvar_dset_devEpidSoft, *pvar_dset_devEpidSoftCB, + *pvar_dset_devEventSoft, *pvar_dset_devHistogramSoft, + *pvar_dset_devI64inSoft, *pvar_dset_devI64inSoftCallback, + *pvar_dset_asynInt64In, *pvar_dset_devI64outSoft, + *pvar_dset_devI64outSoftCallback, *pvar_dset_asynInt64Out, + *pvar_dset_devLiSoft, *pvar_dset_devLiSoftCallback, + *pvar_dset_devLiGeneralTime, *pvar_dset_asynLiInt32, + *pvar_dset_asynLiUInt32Digital, *pvar_dset_asynLiInt64, + *pvar_dset_devLoSoft, *pvar_dset_devLoSoftCallback, + *pvar_dset_asynLoInt32, *pvar_dset_asynLoUInt32Digital, + *pvar_dset_asynLoInt64, *pvar_dset_devLsiSoft, + *pvar_dset_devLsiEnviron, *pvar_dset_devLsiStats, + *pvar_dset_asynLsiOctetCmdResponse, *pvar_dset_asynLsiOctetWriteRead, + *pvar_dset_asynLsiOctetRead, *pvar_dset_devLsoSoft, + *pvar_dset_devLsoSoftCallback, *pvar_dset_devLsoStdio, + *pvar_dset_asynLsoOctetWrite, *pvar_dset_devMbbiSoft, + *pvar_dset_devMbbiSoftRaw, *pvar_dset_devMbbiSoftCallback, + *pvar_dset_devSysMonMbbiStats, *pvar_dset_asynMbbiInt32, + *pvar_dset_asynMbbiUInt32Digital, *pvar_dset_devMbbiDirectSoft, + *pvar_dset_devMbbiDirectSoftRaw, *pvar_dset_devMbbiDirectSoftCallback, + *pvar_dset_devSysMonMbbiDirectStats, + *pvar_dset_asynMbbiDirectUInt32Digital, *pvar_dset_devMbboSoft, + *pvar_dset_devMbboSoftRaw, *pvar_dset_devMbboSoftCallback, + *pvar_dset_asynMbboInt32, *pvar_dset_asynMbboUInt32Digital, + *pvar_dset_devMbboDirectSoft, *pvar_dset_devMbboDirectSoftRaw, + *pvar_dset_devMbboDirectSoftCallback, + *pvar_dset_asynMbboDirectUInt32Digital, *pvar_dset_devPrintfSoft, + *pvar_dset_devPrintfSoftCallback, *pvar_dset_devPrintfStdio, + *pvar_dset_asynPfOctetWrite, *pvar_dset_devSiSoft, + *pvar_dset_devSiSoftCallback, *pvar_dset_devTimestampSI, + *pvar_dset_devSiGeneralTime, *pvar_dset_devSiEnviron, + *pvar_dset_devStringinStats, *pvar_dset_devStringinEnvVar, + *pvar_dset_devStringinEpics, *pvar_dset_devSysMonSiStats, + *pvar_dset_asynSiOctetCmdResponse, *pvar_dset_asynSiOctetWriteRead, + *pvar_dset_asynSiOctetRead, *pvar_dset_devSoSoft, + *pvar_dset_devSoSoftCallback, *pvar_dset_devSoStdio, + *pvar_dset_asynSoOctetWrite, *pvar_dset_devSASoft, + *pvar_dset_devWfSoft, *pvar_dset_devWaveformStats, + *pvar_dset_devSysMonWaveStats, *pvar_dset_asynWfOctetCmdResponse, + *pvar_dset_asynWfOctetWriteRead, *pvar_dset_asynWfOctetRead, + *pvar_dset_asynWfOctetWrite, *pvar_dset_asynWfOctetWriteBinary, + *pvar_dset_asynInt8ArrayWfIn, *pvar_dset_asynInt8ArrayWfOut, + *pvar_dset_asynInt16ArrayWfIn, *pvar_dset_asynInt16ArrayWfOut, + *pvar_dset_asynInt32ArrayWfIn, *pvar_dset_asynInt32ArrayWfOut, + *pvar_dset_asynInt32TimeSeries, *pvar_dset_asynFloat32ArrayWfIn, + *pvar_dset_asynFloat32ArrayWfOut, *pvar_dset_asynFloat64ArrayWfIn, + *pvar_dset_asynFloat64ArrayWfOut, *pvar_dset_asynFloat64TimeSeries, + *pvar_dset_asynInt64ArrayWfIn, *pvar_dset_asynInt64ArrayWfOut, + *pvar_dset_asynInt64TimeSeries; + +static const char * const deviceSupportNames[] = { + "devAaiSoft", "devAaoSoft", "devAiSoft", "devAiSoftRaw", + "devAiSoftCallback", "devTimestampAI", "devAiGeneralTime", + "devAiStats", "devAiClusts", "devAiDBCLC", "devAiDBDLC", + "devSysMonAiStats", "asynAiInt32", "asynAiInt32Average", + "asynAiFloat64", "asynAiFloat64Average", "asynAiInt64", "devAoSoft", + "devAoSoftRaw", "devAoSoftCallback", "devAoStats", "asynAoInt32", + "asynAoFloat64", "asynAoInt64", "asynRecordDevice", "devBiSoft", + "devBiSoftRaw", "devBiSoftCallback", "devBiDbState", "asynBiInt32", + "asynBiUInt32Digital", "devBoSoft", "devBoSoftRaw", + "devBoSoftCallback", "devBoGeneralTime", "devBoDbState", + "devBoSimulation", "asynBoInt32", "asynBoUInt32Digital", + "devCalcoutSoft", "devCalcoutSoftCallback", "devEpidSoft", + "devEpidSoftCB", "devEventSoft", "devHistogramSoft", "devI64inSoft", + "devI64inSoftCallback", "asynInt64In", "devI64outSoft", + "devI64outSoftCallback", "asynInt64Out", "devLiSoft", + "devLiSoftCallback", "devLiGeneralTime", "asynLiInt32", + "asynLiUInt32Digital", "asynLiInt64", "devLoSoft", + "devLoSoftCallback", "asynLoInt32", "asynLoUInt32Digital", + "asynLoInt64", "devLsiSoft", "devLsiEnviron", "devLsiStats", + "asynLsiOctetCmdResponse", "asynLsiOctetWriteRead", + "asynLsiOctetRead", "devLsoSoft", "devLsoSoftCallback", "devLsoStdio", + "asynLsoOctetWrite", "devMbbiSoft", "devMbbiSoftRaw", + "devMbbiSoftCallback", "devSysMonMbbiStats", "asynMbbiInt32", + "asynMbbiUInt32Digital", "devMbbiDirectSoft", "devMbbiDirectSoftRaw", + "devMbbiDirectSoftCallback", "devSysMonMbbiDirectStats", + "asynMbbiDirectUInt32Digital", "devMbboSoft", "devMbboSoftRaw", + "devMbboSoftCallback", "asynMbboInt32", "asynMbboUInt32Digital", + "devMbboDirectSoft", "devMbboDirectSoftRaw", + "devMbboDirectSoftCallback", "asynMbboDirectUInt32Digital", + "devPrintfSoft", "devPrintfSoftCallback", "devPrintfStdio", + "asynPfOctetWrite", "devSiSoft", "devSiSoftCallback", + "devTimestampSI", "devSiGeneralTime", "devSiEnviron", + "devStringinStats", "devStringinEnvVar", "devStringinEpics", + "devSysMonSiStats", "asynSiOctetCmdResponse", "asynSiOctetWriteRead", + "asynSiOctetRead", "devSoSoft", "devSoSoftCallback", "devSoStdio", + "asynSoOctetWrite", "devSASoft", "devWfSoft", "devWaveformStats", + "devSysMonWaveStats", "asynWfOctetCmdResponse", + "asynWfOctetWriteRead", "asynWfOctetRead", "asynWfOctetWrite", + "asynWfOctetWriteBinary", "asynInt8ArrayWfIn", "asynInt8ArrayWfOut", + "asynInt16ArrayWfIn", "asynInt16ArrayWfOut", "asynInt32ArrayWfIn", + "asynInt32ArrayWfOut", "asynInt32TimeSeries", "asynFloat32ArrayWfIn", + "asynFloat32ArrayWfOut", "asynFloat64ArrayWfIn", + "asynFloat64ArrayWfOut", "asynFloat64TimeSeries", + "asynInt64ArrayWfIn", "asynInt64ArrayWfOut", "asynInt64TimeSeries" +}; + +static const dset * const devsl[] = { + pvar_dset_devAaiSoft, pvar_dset_devAaoSoft, pvar_dset_devAiSoft, + pvar_dset_devAiSoftRaw, pvar_dset_devAiSoftCallback, + pvar_dset_devTimestampAI, pvar_dset_devAiGeneralTime, + pvar_dset_devAiStats, pvar_dset_devAiClusts, pvar_dset_devAiDBCLC, + pvar_dset_devAiDBDLC, pvar_dset_devSysMonAiStats, + pvar_dset_asynAiInt32, pvar_dset_asynAiInt32Average, + pvar_dset_asynAiFloat64, pvar_dset_asynAiFloat64Average, + pvar_dset_asynAiInt64, pvar_dset_devAoSoft, pvar_dset_devAoSoftRaw, + pvar_dset_devAoSoftCallback, pvar_dset_devAoStats, + pvar_dset_asynAoInt32, pvar_dset_asynAoFloat64, pvar_dset_asynAoInt64, + pvar_dset_asynRecordDevice, pvar_dset_devBiSoft, + pvar_dset_devBiSoftRaw, pvar_dset_devBiSoftCallback, + pvar_dset_devBiDbState, pvar_dset_asynBiInt32, + pvar_dset_asynBiUInt32Digital, pvar_dset_devBoSoft, + pvar_dset_devBoSoftRaw, pvar_dset_devBoSoftCallback, + pvar_dset_devBoGeneralTime, pvar_dset_devBoDbState, + pvar_dset_devBoSimulation, pvar_dset_asynBoInt32, + pvar_dset_asynBoUInt32Digital, pvar_dset_devCalcoutSoft, + pvar_dset_devCalcoutSoftCallback, pvar_dset_devEpidSoft, + pvar_dset_devEpidSoftCB, pvar_dset_devEventSoft, + pvar_dset_devHistogramSoft, pvar_dset_devI64inSoft, + pvar_dset_devI64inSoftCallback, pvar_dset_asynInt64In, + pvar_dset_devI64outSoft, pvar_dset_devI64outSoftCallback, + pvar_dset_asynInt64Out, pvar_dset_devLiSoft, + pvar_dset_devLiSoftCallback, pvar_dset_devLiGeneralTime, + pvar_dset_asynLiInt32, pvar_dset_asynLiUInt32Digital, + pvar_dset_asynLiInt64, pvar_dset_devLoSoft, + pvar_dset_devLoSoftCallback, pvar_dset_asynLoInt32, + pvar_dset_asynLoUInt32Digital, pvar_dset_asynLoInt64, + pvar_dset_devLsiSoft, pvar_dset_devLsiEnviron, pvar_dset_devLsiStats, + pvar_dset_asynLsiOctetCmdResponse, pvar_dset_asynLsiOctetWriteRead, + pvar_dset_asynLsiOctetRead, pvar_dset_devLsoSoft, + pvar_dset_devLsoSoftCallback, pvar_dset_devLsoStdio, + pvar_dset_asynLsoOctetWrite, pvar_dset_devMbbiSoft, + pvar_dset_devMbbiSoftRaw, pvar_dset_devMbbiSoftCallback, + pvar_dset_devSysMonMbbiStats, pvar_dset_asynMbbiInt32, + pvar_dset_asynMbbiUInt32Digital, pvar_dset_devMbbiDirectSoft, + pvar_dset_devMbbiDirectSoftRaw, pvar_dset_devMbbiDirectSoftCallback, + pvar_dset_devSysMonMbbiDirectStats, + pvar_dset_asynMbbiDirectUInt32Digital, pvar_dset_devMbboSoft, + pvar_dset_devMbboSoftRaw, pvar_dset_devMbboSoftCallback, + pvar_dset_asynMbboInt32, pvar_dset_asynMbboUInt32Digital, + pvar_dset_devMbboDirectSoft, pvar_dset_devMbboDirectSoftRaw, + pvar_dset_devMbboDirectSoftCallback, + pvar_dset_asynMbboDirectUInt32Digital, pvar_dset_devPrintfSoft, + pvar_dset_devPrintfSoftCallback, pvar_dset_devPrintfStdio, + pvar_dset_asynPfOctetWrite, pvar_dset_devSiSoft, + pvar_dset_devSiSoftCallback, pvar_dset_devTimestampSI, + pvar_dset_devSiGeneralTime, pvar_dset_devSiEnviron, + pvar_dset_devStringinStats, pvar_dset_devStringinEnvVar, + pvar_dset_devStringinEpics, pvar_dset_devSysMonSiStats, + pvar_dset_asynSiOctetCmdResponse, pvar_dset_asynSiOctetWriteRead, + pvar_dset_asynSiOctetRead, pvar_dset_devSoSoft, + pvar_dset_devSoSoftCallback, pvar_dset_devSoStdio, + pvar_dset_asynSoOctetWrite, pvar_dset_devSASoft, pvar_dset_devWfSoft, + pvar_dset_devWaveformStats, pvar_dset_devSysMonWaveStats, + pvar_dset_asynWfOctetCmdResponse, pvar_dset_asynWfOctetWriteRead, + pvar_dset_asynWfOctetRead, pvar_dset_asynWfOctetWrite, + pvar_dset_asynWfOctetWriteBinary, pvar_dset_asynInt8ArrayWfIn, + pvar_dset_asynInt8ArrayWfOut, pvar_dset_asynInt16ArrayWfIn, + pvar_dset_asynInt16ArrayWfOut, pvar_dset_asynInt32ArrayWfIn, + pvar_dset_asynInt32ArrayWfOut, pvar_dset_asynInt32TimeSeries, + pvar_dset_asynFloat32ArrayWfIn, pvar_dset_asynFloat32ArrayWfOut, + pvar_dset_asynFloat64ArrayWfIn, pvar_dset_asynFloat64ArrayWfOut, + pvar_dset_asynFloat64TimeSeries, pvar_dset_asynInt64ArrayWfIn, + pvar_dset_asynInt64ArrayWfOut, pvar_dset_asynInt64TimeSeries +}; + +epicsShareExtern drvet *pvar_drvet_drvAsyn; + +static const char *driverSupportNames[] = { + "drvAsyn"}; + +static struct drvet *drvsl[] = { + pvar_drvet_drvAsyn}; + +epicsShareExtern jlif *pvar_jlif_lnkCalcIf, *pvar_jlif_lnkConstIf, + *pvar_jlif_lnkDebugIf, *pvar_jlif_lnkStateIf, *pvar_jlif_lnkTraceIf; + +static struct jlif *jlifsl[] = { + pvar_jlif_lnkCalcIf, + pvar_jlif_lnkConstIf, + pvar_jlif_lnkDebugIf, + pvar_jlif_lnkStateIf, + pvar_jlif_lnkTraceIf}; + +typedef void (*reg_func)(void); +epicsShareExtern reg_func pvar_func_arrInitialize, + pvar_func_asInitHooksRegister, pvar_func_asSub, + pvar_func_asynInterposeDelayRegister, + pvar_func_asynInterposeEchoRegister, + pvar_func_asynInterposeEosRegister, + pvar_func_asynInterposeFlushRegister, pvar_func_asynRegister, + pvar_func_configMenuRegistrar, pvar_func_dbndInitialize, + pvar_func_dbrestoreRegister, pvar_func_decInitialize, + pvar_func_drvAsynIPPortRegisterCommands, + pvar_func_drvAsynIPServerPortRegisterCommands, + pvar_func_drvAsynSerialPortRegisterCommands, + pvar_func_drvBlockTCPEventRegister, + pvar_func_drvBlockTCPRedundantPlcRegister, + pvar_func_drvBlockTCPRegister, pvar_func_drvCodacHeaderRegister, + pvar_func_drvCodacRedundantPlcRegister, + pvar_func_iocSetLogInitRegister, pvar_func_iocSetLogLevelRegister, + pvar_func_iocSetLogStdoutRegister, pvar_func_iocSetLogSyslogRegister, + pvar_func_iocSetSimEnableRegister, pvar_func_rsrvRegistrar, + pvar_func_save_restoreRegister, pvar_func_syncInitialize, + pvar_func_tsInitialize, pvar_func_register_func_rebootProc, + pvar_func_register_func_scanMon, pvar_func_register_func_scanMonInit; + +epicsShareExtern int * const pvar_int_CASDEBUG; +epicsShareExtern int * const pvar_int_asCaDebug; +epicsShareExtern int * const pvar_int_atExitDebug; +epicsShareExtern double * const pvar_double_boHIGHlimit; +epicsShareExtern int * const pvar_int_boHIGHprecision; +epicsShareExtern double * const pvar_double_calcoutODLYlimit; +epicsShareExtern int * const pvar_int_calcoutODLYprecision; +epicsShareExtern int * const pvar_int_callbackParallelThreadsDefault; +epicsShareExtern int * const pvar_int_configMenuDebug; +epicsShareExtern int * const pvar_int_dbAccessDebugPUTF; +epicsShareExtern int * const pvar_int_dbBptNotMonotonic; +epicsShareExtern int * const pvar_int_dbConvertStrict; +epicsShareExtern int * const pvar_int_dbJLinkDebug; +epicsShareExtern int * const pvar_int_dbQuietMacroWarnings; +epicsShareExtern int * const pvar_int_dbRecordsAbcSorted; +epicsShareExtern int * const pvar_int_dbRecordsOnceOnly; +epicsShareExtern int * const pvar_int_dbTemplateMaxVars; +epicsShareExtern int * const pvar_int_dbThreadRealtimeLock; +epicsShareExtern int * const pvar_int_histogramSDELprecision; +epicsShareExtern int * const pvar_int_lnkDebug_debug; +epicsShareExtern int * const pvar_int_logClientDebug; +epicsShareExtern int * const pvar_int_save_restoreDatedBackupFiles; +epicsShareExtern int * const pvar_int_save_restoreDebug; +epicsShareExtern int * const pvar_int_save_restoreIncompleteSetsOk; +epicsShareExtern int * const pvar_int_save_restoreNumSeqFiles; +epicsShareExtern int * const pvar_int_save_restoreRemountThreshold; +epicsShareExtern int * const pvar_int_save_restoreSeqPeriodInSeconds; +epicsShareExtern double * const pvar_double_seqDLYlimit; +epicsShareExtern int * const pvar_int_seqDLYprecision; + +static struct iocshVarDef vardefs[] = { + {"CASDEBUG", iocshArgInt, pvar_int_CASDEBUG}, + {"asCaDebug", iocshArgInt, pvar_int_asCaDebug}, + {"atExitDebug", iocshArgInt, pvar_int_atExitDebug}, + {"boHIGHlimit", iocshArgDouble, pvar_double_boHIGHlimit}, + {"boHIGHprecision", iocshArgInt, pvar_int_boHIGHprecision}, + {"calcoutODLYlimit", iocshArgDouble, pvar_double_calcoutODLYlimit}, + {"calcoutODLYprecision", iocshArgInt, pvar_int_calcoutODLYprecision}, + {"callbackParallelThreadsDefault", iocshArgInt, pvar_int_callbackParallelThreadsDefault}, + {"configMenuDebug", iocshArgInt, pvar_int_configMenuDebug}, + {"dbAccessDebugPUTF", iocshArgInt, pvar_int_dbAccessDebugPUTF}, + {"dbBptNotMonotonic", iocshArgInt, pvar_int_dbBptNotMonotonic}, + {"dbConvertStrict", iocshArgInt, pvar_int_dbConvertStrict}, + {"dbJLinkDebug", iocshArgInt, pvar_int_dbJLinkDebug}, + {"dbQuietMacroWarnings", iocshArgInt, pvar_int_dbQuietMacroWarnings}, + {"dbRecordsAbcSorted", iocshArgInt, pvar_int_dbRecordsAbcSorted}, + {"dbRecordsOnceOnly", iocshArgInt, pvar_int_dbRecordsOnceOnly}, + {"dbTemplateMaxVars", iocshArgInt, pvar_int_dbTemplateMaxVars}, + {"dbThreadRealtimeLock", iocshArgInt, pvar_int_dbThreadRealtimeLock}, + {"histogramSDELprecision", iocshArgInt, pvar_int_histogramSDELprecision}, + {"lnkDebug_debug", iocshArgInt, pvar_int_lnkDebug_debug}, + {"logClientDebug", iocshArgInt, pvar_int_logClientDebug}, + {"save_restoreDatedBackupFiles", iocshArgInt, pvar_int_save_restoreDatedBackupFiles}, + {"save_restoreDebug", iocshArgInt, pvar_int_save_restoreDebug}, + {"save_restoreIncompleteSetsOk", iocshArgInt, pvar_int_save_restoreIncompleteSetsOk}, + {"save_restoreNumSeqFiles", iocshArgInt, pvar_int_save_restoreNumSeqFiles}, + {"save_restoreRemountThreshold", iocshArgInt, pvar_int_save_restoreRemountThreshold}, + {"save_restoreSeqPeriodInSeconds", iocshArgInt, pvar_int_save_restoreSeqPeriodInSeconds}, + {"seqDLYlimit", iocshArgDouble, pvar_double_seqDLYlimit}, + {"seqDLYprecision", iocshArgInt, pvar_int_seqDLYprecision}, + {NULL, iocshArgInt, NULL} +}; + +int PLC_registerRecordDeviceDriver(DBBASE *pbase) +{ + static int executed = 0; + if (!pbase) { + printf("pdbbase is NULL; you must load a DBD file first.\n"); + return -1; + } + + if (executed) { + printf("Warning: Registration already done.\n"); + } + executed = 1; + + registerRecordTypes(pbase, NELEMENTS(rtl), recordTypeNames, rtl); + registerDevices(pbase, NELEMENTS(devsl), deviceSupportNames, devsl); + registerDrivers(pbase, NELEMENTS(drvsl), driverSupportNames, drvsl); + registerJLinks(pbase, NELEMENTS(jlifsl), jlifsl); + pvar_func_arrInitialize(); + pvar_func_asInitHooksRegister(); + pvar_func_asSub(); + pvar_func_asynInterposeDelayRegister(); + pvar_func_asynInterposeEchoRegister(); + pvar_func_asynInterposeEosRegister(); + pvar_func_asynInterposeFlushRegister(); + pvar_func_asynRegister(); + pvar_func_configMenuRegistrar(); + pvar_func_dbndInitialize(); + pvar_func_dbrestoreRegister(); + pvar_func_decInitialize(); + pvar_func_drvAsynIPPortRegisterCommands(); + pvar_func_drvAsynIPServerPortRegisterCommands(); + pvar_func_drvAsynSerialPortRegisterCommands(); + pvar_func_drvBlockTCPEventRegister(); + pvar_func_drvBlockTCPRedundantPlcRegister(); + pvar_func_drvBlockTCPRegister(); + pvar_func_drvCodacHeaderRegister(); + pvar_func_drvCodacRedundantPlcRegister(); + pvar_func_iocSetLogInitRegister(); + pvar_func_iocSetLogLevelRegister(); + pvar_func_iocSetLogStdoutRegister(); + pvar_func_iocSetLogSyslogRegister(); + pvar_func_iocSetSimEnableRegister(); + pvar_func_rsrvRegistrar(); + pvar_func_save_restoreRegister(); + pvar_func_syncInitialize(); + pvar_func_tsInitialize(); + pvar_func_register_func_rebootProc(); + pvar_func_register_func_scanMon(); + pvar_func_register_func_scanMonInit(); + iocshRegisterVariable(vardefs); + return 0; +} + +/* PLC_registerRecordDeviceDriver */ +static const iocshArg rrddArg0 = {"pdbbase", iocshArgPdbbase}; +static const iocshArg *rrddArgs[] = {&rrddArg0}; +static const iocshFuncDef rrddFuncDef = + {"PLC_registerRecordDeviceDriver", 1, rrddArgs}; +static void rrddCallFunc(const iocshArgBuf *) +{ + iocshSetError(PLC_registerRecordDeviceDriver(*iocshPpdbbase)); +} + +} // extern "C" + +/* + * Register commands on application startup + */ +static int Registration() { + iocshRegisterCommon(); + iocshRegister(&rrddFuncDef, rrddCallFunc); + return 0; +} + +static int done EPICS_UNUSED = Registration(); diff --git a/EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.linux-x86_64/PLC_registerRecordDeviceDriver.d b/EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.linux-x86_64/PLC_registerRecordDeviceDriver.d new file mode 100644 index 0000000..c97df07 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.linux-x86_64/PLC_registerRecordDeviceDriver.d @@ -0,0 +1,26 @@ +PLC_registerRecordDeviceDriver.o: PLC_registerRecordDeviceDriver.cpp \ + /opt/codac-6.3/epics/include/compilerDependencies.h \ + /opt/codac-6.3/epics/include/compiler/gcc/compilerSpecific.h \ + /opt/codac-6.3/epics/include/epicsStdlib.h \ + /opt/codac-6.3/epics/include/libComAPI.h \ + /opt/codac-6.3/epics/include/os/Linux/osdStrtod.h \ + /opt/codac-6.3/epics/include/epicsTypes.h \ + /opt/codac-6.3/epics/include/compilerDependencies.h \ + /opt/codac-6.3/epics/include/errMdef.h \ + /opt/codac-6.3/epics/include/iocsh.h \ + /opt/codac-6.3/epics/include/iocshRegisterCommon.h \ + /opt/codac-6.3/epics/include/shareLib.h \ + /opt/codac-6.3/epics/include/registryCommon.h \ + /opt/codac-6.3/epics/include/dbStaticLib.h \ + /opt/codac-6.3/epics/include/dbFldTypes.h \ + /opt/codac-6.3/epics/include/dbBase.h \ + /opt/codac-6.3/epics/include/ellLib.h \ + /opt/codac-6.3/epics/include/dbDefs.h \ + /opt/codac-6.3/epics/include/recSup.h \ + /opt/codac-6.3/epics/include/devSup.h \ + /opt/codac-6.3/epics/include/link.h \ + /opt/codac-6.3/epics/include/cantProceed.h \ + /opt/codac-6.3/epics/include/dbJLink.h \ + /opt/codac-6.3/epics/include/dbCoreAPI.h \ + /opt/codac-6.3/epics/include/registryRecordType.h \ + /opt/codac-6.3/epics/include/recSup.h diff --git a/EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.linux-x86_64/PLC_registerRecordDeviceDriver.o b/EC-GN-JA-PCF/target/main/epics/PLCApp/src/O.linux-x86_64/PLC_registerRecordDeviceDriver.o new file mode 100644 index 0000000000000000000000000000000000000000..f21fa1c05a36974b4e58e071232247c435b3f67a GIT binary patch literal 44960 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 literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF/target/main/epics/PLCApp/src/PLCMain.cpp b/EC-GN-JA-PCF/target/main/epics/PLCApp/src/PLCMain.cpp new file mode 100644 index 0000000..1edd319 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/PLCApp/src/PLCMain.cpp @@ -0,0 +1,25 @@ +/* PLCMain.cpp */ +/* Author: Marty Kraimer Date: 17MAR2000 */ + +#include +#include +#include +#include +#include +#include + +#include "epicsExit.h" +#include "epicsThread.h" +#include "iocsh.h" + +int main(int argc,char *argv[]) +{ + sigset(SIGTERM, epicsExit); + if(argc>=2) { + iocsh(argv[1]); + epicsThreadSleep(.2); + } + iocsh(NULL); + epicsExit(0); + return(0); +} diff --git a/EC-GN-JA-PCF/target/main/epics/bin/linux-x86_64/CUB b/EC-GN-JA-PCF/target/main/epics/bin/linux-x86_64/CUB new file mode 100755 index 0000000000000000000000000000000000000000..72c1b690e6e09c1d42c7c0778973726c04700320 GIT binary patch literal 61720 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 X@cPtwheLboY@@?-p+AG%%=G^cV|=|} literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF/target/main/epics/bin/linux-x86_64/PLC b/EC-GN-JA-PCF/target/main/epics/bin/linux-x86_64/PLC new file mode 100755 index 0000000000000000000000000000000000000000..e8d546ae999c2d0194459db9ff2c6ab25b45236c GIT binary patch literal 61720 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 literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF/target/main/epics/configure/CONFIG b/EC-GN-JA-PCF/target/main/epics/configure/CONFIG new file mode 100644 index 0000000..c1a4703 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/configure/CONFIG @@ -0,0 +1,29 @@ +# CONFIG - Load build configuration data +# +# Do not make changes to this file! + +# Allow user to override where the build rules come from +RULES = $(EPICS_BASE) + +# RELEASE files point to other application tops +include $(TOP)/configure/RELEASE +-include $(TOP)/configure/RELEASE.$(EPICS_HOST_ARCH).Common +ifdef T_A +-include $(TOP)/configure/RELEASE.Common.$(T_A) +-include $(TOP)/configure/RELEASE.$(EPICS_HOST_ARCH).$(T_A) +endif + +CONFIG = $(RULES)/configure +include $(CONFIG)/CONFIG + +# Override the Base definition: +INSTALL_LOCATION = $(TOP) + +# CONFIG_SITE files contain other build configuration settings +include $(TOP)/configure/CONFIG_SITE +-include $(TOP)/configure/CONFIG_SITE.$(EPICS_HOST_ARCH).Common +ifdef T_A + -include $(TOP)/configure/CONFIG_SITE.Common.$(T_A) + -include $(TOP)/configure/CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A) +endif + diff --git a/EC-GN-JA-PCF/target/main/epics/configure/CONFIG_SITE b/EC-GN-JA-PCF/target/main/epics/configure/CONFIG_SITE new file mode 100644 index 0000000..212485e --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/configure/CONFIG_SITE @@ -0,0 +1,43 @@ +# CONFIG_SITE + +# Make any application-specific changes to the EPICS build +# configuration variables in this file. +# +# Host/target specific settings can be specified in files named +# CONFIG_SITE.$(EPICS_HOST_ARCH).Common +# CONFIG_SITE.Common.$(T_A) +# CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A) + +# CHECK_RELEASE controls the consistency checking of the support +# applications pointed to by the RELEASE* files. +# Normally CHECK_RELEASE should be set to YES. +# Set CHECK_RELEASE to NO to disable checking completely. +# Set CHECK_RELEASE to WARN to perform consistency checking but +# continue building even if conflicts are found. +CHECK_RELEASE = YES + +# Set this when you only want to compile this application +# for a subset of the cross-compiled target architectures +# that Base is built for. +#CROSS_COMPILER_TARGET_ARCHS = vxWorks-ppc32 + +# To install files into a location other than $(TOP) define +# INSTALL_LOCATION here. +#INSTALL_LOCATION= + +# Set this when the IOC and build host use different paths +# to the install location. This may be needed to boot from +# a Microsoft FTP server say, or on some NFS configurations. +#IOCS_APPL_TOP = + +# For application debugging purposes, override the HOST_OPT and/ +# or CROSS_OPT settings from base/configure/CONFIG_SITE +#HOST_OPT = NO +#CROSS_OPT = NO + +# These allow developers to override the CONFIG_SITE variable +# settings without having to modify the configure/CONFIG_SITE +# file itself. +-include $(TOP)/../CONFIG_SITE.local +-include $(TOP)/configure/CONFIG_SITE.local + diff --git a/EC-GN-JA-PCF/target/main/epics/configure/Makefile b/EC-GN-JA-PCF/target/main/epics/configure/Makefile new file mode 100644 index 0000000..9254309 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/configure/Makefile @@ -0,0 +1,8 @@ +TOP=.. + +include $(TOP)/configure/CONFIG + +TARGETS = $(CONFIG_TARGETS) +CONFIGS += $(subst ../,,$(wildcard $(CONFIG_INSTALLS))) + +include $(TOP)/configure/RULES diff --git a/EC-GN-JA-PCF/target/main/epics/configure/O.linux-x86_64/Makefile b/EC-GN-JA-PCF/target/main/epics/configure/O.linux-x86_64/Makefile new file mode 100644 index 0000000..a76e591 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/configure/O.linux-x86_64/Makefile @@ -0,0 +1,10 @@ +#This Makefile created by makeMakefile.pl + + +all : + $(MAKE) -f ../Makefile TOP=../.. T_A=linux-x86_64 $@ + +.DEFAULT: force + $(MAKE) -f ../Makefile TOP=../.. T_A=linux-x86_64 $@ + +force: ; diff --git a/EC-GN-JA-PCF/target/main/epics/configure/RELEASE b/EC-GN-JA-PCF/target/main/epics/configure/RELEASE new file mode 100644 index 0000000..67df4c2 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/configure/RELEASE @@ -0,0 +1,6 @@ + +# Maven ITER plugin generated RELEASE file contents: + +EPICS_BASE=/opt/codac-6.3/epics + +-include $(TOP)/configure/RELEASE.local diff --git a/EC-GN-JA-PCF/target/main/epics/configure/RULES b/EC-GN-JA-PCF/target/main/epics/configure/RULES new file mode 100644 index 0000000..6d56e14 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/configure/RULES @@ -0,0 +1,6 @@ +# RULES + +include $(CONFIG)/RULES + +# Library should be rebuilt because LIBOBJS may have changed. +$(LIBNAME): ../Makefile diff --git a/EC-GN-JA-PCF/target/main/epics/configure/RULES.ioc b/EC-GN-JA-PCF/target/main/epics/configure/RULES.ioc new file mode 100644 index 0000000..901987c --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/configure/RULES.ioc @@ -0,0 +1,2 @@ +#RULES.ioc +include $(CONFIG)/RULES.ioc diff --git a/EC-GN-JA-PCF/target/main/epics/configure/RULES_DIRS b/EC-GN-JA-PCF/target/main/epics/configure/RULES_DIRS new file mode 100644 index 0000000..3ba269d --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/configure/RULES_DIRS @@ -0,0 +1,2 @@ +#RULES_DIRS +include $(CONFIG)/RULES_DIRS diff --git a/EC-GN-JA-PCF/target/main/epics/configure/RULES_TOP b/EC-GN-JA-PCF/target/main/epics/configure/RULES_TOP new file mode 100644 index 0000000..d09d668 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/configure/RULES_TOP @@ -0,0 +1,3 @@ +#RULES_TOP +include $(CONFIG)/RULES_TOP + diff --git a/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-HWCF-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-HWCF-iocEC-GN-PSH0PCF.db new file mode 100644 index 0000000..9d7c2e6 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-HWCF-iocEC-GN-PSH0PCF.db @@ -0,0 +1,1712 @@ +record (bo,"EC-GN-HWCF:6259-0-ACQ") +{ + field(DESC, "Start/Stop data acquisition") + field(DTYP, "ni6259") + field(ONAM, "START-ACQUISITION") + field(OUT, "#C1 S0 @switch_acquisition") + field(PHAS, "2") + field(PINI, "YES") + field(VAL, "1") + field(ZNAM, "STOP-ACQUISITION") +} + +record (bo,"EC-GN-HWCF:6259-0-CONF") +{ + field(DESC, "Load/reset analog input configuration") + field(DTYP, "ni6259") + field(ONAM, "LOAD-CONF") + field(OUT, "#C1 S0 @ai_conf") + field(PHAS, "1") + field(PINI, "YES") + field(VAL, "1") + field(ZNAM, "RESET-CONF") +} + +record (bo,"EC-GN-HWCF:6259-0-MODE") +{ + field(DESC, "continuous or finite mode") + field(DTYP, "ni6259") + field(ONAM, "CONTINUOUS") + field(OUT, "#C1 S0 @daq_mode") + field(PINI, "YES") + field(VAL, "1") + field(ZNAM, "FINITE") +} + +record (bo,"EC-GN-HWCF:6259-1-ACQ") +{ + field(DESC, "Start/Stop data acquisition") + field(DTYP, "ni6259") + field(ONAM, "START-ACQUISITION") + field(OUT, "#C0 S0 @switch_acquisition") + field(PHAS, "2") + field(PINI, "YES") + field(VAL, "1") + field(ZNAM, "STOP-ACQUISITION") +} + +record (bo,"EC-GN-HWCF:6259-1-CONF") +{ + field(DESC, "Load/reset analog input configuration") + field(DTYP, "ni6259") + field(ONAM, "LOAD-CONF") + field(OUT, "#C0 S0 @ai_conf") + field(PHAS, "1") + field(PINI, "YES") + field(VAL, "1") + field(ZNAM, "RESET-CONF") +} + +record (bo,"EC-GN-HWCF:6259-1-MODE") +{ + field(DESC, "continuous or finite mode") + field(DTYP, "ni6259") + field(ONAM, "CONTINUOUS") + field(OUT, "#C0 S0 @daq_mode") + field(PINI, "YES") + field(VAL, "1") + field(ZNAM, "FINITE") +} + +record (bo,"EC-GN-HWCF:6368-0-AISTSP") +{ + field(DESC, "Start/Stop AI Segment") + field(DTYP, "asynInt32") + field(ONAM, "Start") + field(OUT, "@asyn(ni6368_1, 0) start_stop_ai") + field(PHAS, "2") + field(PINI, "YES") + field(VAL, "0") + field(ZNAM, "Stop") +} + +record (bo,"EC-GN-HWCF:6368-0-AOSTSP") +{ + field(DESC, "Start/Stop AO Segment") + field(DTYP, "asynInt32") + field(ONAM, "Start") + field(OUT, "@asyn(ni6368_1, 0) start_stop_ao") + field(VAL, "0") + field(ZNAM, "Stop") +} + +record (bo,"EC-GN-HWCF:6368-0-LDAICF") +{ + field(DESC, "Load/Reset AI Configuration") + field(DTYP, "asynInt32") + field(ONAM, "Load") + field(OUT, "@asyn(ni6368_1, 0) ai_conf") + field(PHAS, "1") + field(PINI, "YES") + field(VAL, "0") + field(ZNAM, "Reset") +} + +record (bo,"EC-GN-HWCF:6368-0-LDAOCF") +{ + field(DESC, "Load/Reset AO Configuration") + field(DTYP, "asynInt32") + field(ONAM, "Load") + field(OUT, "@asyn(ni6368_1, 0) ao_conf") + field(VAL, "0") + field(ZNAM, "Reset") +} + +record (bo,"EC-GN-HWCF:6368-1-AISTSP") +{ + field(DESC, "Start/Stop AI Segment") + field(DTYP, "asynInt32") + field(ONAM, "Start") + field(OUT, "@asyn(ni6368_0, 0) start_stop_ai") + field(PHAS, "2") + field(PINI, "YES") + field(VAL, "0") + field(ZNAM, "Stop") +} + +record (bo,"EC-GN-HWCF:6368-1-AOSTSP") +{ + field(DESC, "Start/Stop AO Segment") + field(DTYP, "asynInt32") + field(ONAM, "Start") + field(OUT, "@asyn(ni6368_0, 0) start_stop_ao") + field(VAL, "0") + field(ZNAM, "Stop") +} + +record (bo,"EC-GN-HWCF:6368-1-LDAICF") +{ + field(DESC, "Load/Reset AI Configuration") + field(DTYP, "asynInt32") + field(ONAM, "Load") + field(OUT, "@asyn(ni6368_0, 0) ai_conf") + field(PHAS, "1") + field(PINI, "YES") + field(VAL, "0") + field(ZNAM, "Reset") +} + +record (bo,"EC-GN-HWCF:6368-1-LDAOCF") +{ + field(DESC, "Load/Reset AO Configuration") + field(DTYP, "asynInt32") + field(ONAM, "Load") + field(OUT, "@asyn(ni6368_0, 0) ao_conf") + field(VAL, "0") + field(ZNAM, "Reset") +} + +record (bi,"EC-GN-HWCF:6683-0-BLKTMO") +{ + field(DESC, "Block until Finished...") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0) waitForTimeOver") + field(SCAN, "I/O Intr") +} + +record (bo,"EC-GN-HWCF:6683-0-FTEAALL") +{ + field(DESC, "Abort all pending FTEs") + field(DTYP, "asynInt32") + field(ONAM, "1") + field(OUT, "@asyn(ni6683h_0,0)abortAllFtes") + field(VAL, "0") + field(ZNAM, "0") +} + +record (bo,"EC-GN-HWCF:6683-0-RESET") +{ + field(DESC, "Reset Board") + field(DTYP, "asynInt32") + field(ONAM, "1") + field(OUT, "@asyn(ni6683h_0,0)resetCard") + field(VAL, "0") + field(ZNAM, "0") +} + +record (bi,"EC-GN-HWCF:6683-0-TAIUTC") +{ + field(DESC, "PXI-6683.0 TAI/UTC Selection") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)taiutcStatus") + field(ONAM, "TAI") + field(OSV, "MINOR") + field(PINI, "YES") + field(SCAN, "10 second") + field(ZNAM, "UTC") + field(ZSV, "NO_ALARM") +} + +record (stringin,"EC-GN-HWCF:6259-0-DMSG") +{ + field(DESC, "Driver Debug Message") + field(DTYP, "ni6259") + field(INP, "#C1 S0 @dsg") + field(SCAN, "1 second") +} + +record (longout,"EC-GN-HWCF:6259-0-NS") +{ + field(DESC, "number of samples to read") + field(DRVH, "32000") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HIGH, "32001") + field(HOPR, "32000") + field(HSV, "MAJOR") + field(LOPR, "0") + field(LOW, "0") + field(LSV, "MAJOR") + field(OUT, "#C1 S0 @num_samples") + field(PINI, "YES") + field(VAL, "5000") +} + +record (longout,"EC-GN-HWCF:6259-0-POST") +{ + field(DESC, "Posttrigger samples") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "#C1 S0 @posttrig_samples") + field(PINI, "YES") + field(VAL, "4000") +} + +record (longout,"EC-GN-HWCF:6259-0-PRET") +{ + field(DESC, "Pretrigger samples") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "#C1 S0 @pretrig_samples") + field(PINI, "YES") + field(VAL, "2000") +} + +record (calcout,"EC-GN-HWCF:6259-0-SCCC") +{ + field(DESC, "") + field(CALC, "(A==11 andand B >7) || (A!=1 andand A!=11) ? 0: B") + field(HOPR, "15") + field(INPA, "EC-GN-HWCF:6259-0-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6259-0-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6259-0-SCCH PP") +} + +record (mbbo,"EC-GN-HWCF:6259-0-SCCH") +{ + field(DESC, "") + field(EIST, "8") + field(EIVL, "8") + field(ELST, "11") + field(ELVL, "11") + field(FFST, "15") + field(FFVL, "15") + field(FLNK, "EC-GN-HWCF:6259-0-SCCO") + field(FRST, "4") + field(FRVL, "4") + field(FTST, "14") + field(FTVL, "14") + field(FVST, "5") + field(FVVL, "5") + field(NIST, "9") + field(NIVL, "9") + field(ONST, "1") + field(ONVL, "1") + field(PINI, "YES") + field(SVST, "7") + field(SVVL, "7") + field(SXST, "6") + field(SXVL, "6") + field(TEST, "10") + field(TEVL, "10") + field(THST, "3") + field(THVL, "3") + field(TTST, "13") + field(TTVL, "13") + field(TVST, "12") + field(TVVL, "12") + field(TWST, "2") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "0") + field(ZRVL, "0") +} + +record (calcout,"EC-GN-HWCF:6259-0-SCCO") +{ + field(DESC, "") + field(CALC, "A==1?(B<10?A+B:B+11):(A==11?(B<7?A+B:(A>7?0:27)):A)") + field(FLNK, "EC-GN-HWCF:6259-0-SCCC") + field(HOPR, "31") + field(INPA, "EC-GN-HWCF:6259-0-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6259-0-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6259-0-SCLK PP") +} + +record (longout,"EC-GN-HWCF:6259-0-SCLK") +{ + field(DESC, "") + field(DRVH, "31") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HOPR, "31") + field(LOPR, "0") + field(OUT, "#C1 S0 @sample_clock_ai") +} + +record (mbbo,"EC-GN-HWCF:6259-0-SCTY") +{ + field(DESC, "") + field(FLNK, "EC-GN-HWCF:6259-0-SCCO") + field(FRST, "STAR_Trigger") + field(FRVL, "20") + field(FVST, "Analog_Trigger") + field(FVVL, "30") + field(ONST, "PFI") + field(ONVL, "1") + field(PINI, "YES") + field(SXST, "Logic_Low") + field(SXVL, "31") + field(THST, "GCRTOUT") + field(THVL, "19") + field(TWST, "PXI_Trigger") + field(TWVL, "11") + field(VAL, "0") + field(ZRST, "Internal") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6259-0-SR") +{ + field(DESC, "ADC Sampling Rate") + field(DTYP, "ni6259") + field(EGU, "Hz") + field(HIGH, "1000001") + field(HSV, "MAJOR") + field(OUT, "#C1 S0 @sample_rate") + field(PINI, "YES") + field(VAL, "1000000") +} + +record (mbbi,"EC-GN-HWCF:6259-0-STATUS") +{ + field(DESC, "PXI-6259.0 Board Status") + field(DTYP, "ni6259") + field(EIST, "ADC Overrun") + field(EISV, "MAJOR") + field(EIVL, "8") + field(ELST, "Reserved1") + field(ELSV, "INVALID") + field(ELVL, "11") + field(FFST, "MSC_Error") + field(FFSV, "MAJOR") + field(FFVL, "15") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FTST, "Reserved4") + field(FTSV, "INVALID") + field(FTVL, "14") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "#C1 S0 @BoardStatus") + field(NIST, "DAC Overrun") + field(NISV, "MAJOR") + field(NIVL, "9") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, ".1 second") + field(SVST, "AI_FIFO Overflow") + field(SVSV, "MAJOR") + field(SVVL, "7") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(TEST, "Reserved0") + field(TESV, "INVALID") + field(TEVL, "10") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TTST, "Reserved3") + field(TTSV, "INVALID") + field(TTVL, "13") + field(TVST, "Reserved2") + field(TVSV, "INVALID") + field(TVVL, "12") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (stringin,"EC-GN-HWCF:6259-1-DMSG") +{ + field(DESC, "Driver Debug Message") + field(DTYP, "ni6259") + field(INP, "#C0 S0 @dsg") + field(SCAN, "1 second") +} + +record (longout,"EC-GN-HWCF:6259-1-NS") +{ + field(DESC, "number of samples to read") + field(DRVH, "32000") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HIGH, "32001") + field(HOPR, "32000") + field(HSV, "MAJOR") + field(LOPR, "0") + field(LOW, "0") + field(LSV, "MAJOR") + field(OUT, "#C0 S0 @num_samples") + field(PINI, "YES") + field(VAL, "5000") +} + +record (longout,"EC-GN-HWCF:6259-1-POST") +{ + field(DESC, "Posttrigger samples") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "#C0 S0 @posttrig_samples") + field(PINI, "YES") + field(VAL, "4000") +} + +record (longout,"EC-GN-HWCF:6259-1-PRET") +{ + field(DESC, "Pretrigger samples") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "#C0 S0 @pretrig_samples") + field(PINI, "YES") + field(VAL, "2000") +} + +record (calcout,"EC-GN-HWCF:6259-1-SCCC") +{ + field(DESC, "") + field(CALC, "(A==11 andand B >7) || (A!=1 andand A!=11) ? 0: B") + field(HOPR, "15") + field(INPA, "EC-GN-HWCF:6259-1-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6259-1-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6259-1-SCCH PP") +} + +record (mbbo,"EC-GN-HWCF:6259-1-SCCH") +{ + field(DESC, "") + field(EIST, "8") + field(EIVL, "8") + field(ELST, "11") + field(ELVL, "11") + field(FFST, "15") + field(FFVL, "15") + field(FLNK, "EC-GN-HWCF:6259-1-SCCO") + field(FRST, "4") + field(FRVL, "4") + field(FTST, "14") + field(FTVL, "14") + field(FVST, "5") + field(FVVL, "5") + field(NIST, "9") + field(NIVL, "9") + field(ONST, "1") + field(ONVL, "1") + field(PINI, "YES") + field(SVST, "7") + field(SVVL, "7") + field(SXST, "6") + field(SXVL, "6") + field(TEST, "10") + field(TEVL, "10") + field(THST, "3") + field(THVL, "3") + field(TTST, "13") + field(TTVL, "13") + field(TVST, "12") + field(TVVL, "12") + field(TWST, "2") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "0") + field(ZRVL, "0") +} + +record (calcout,"EC-GN-HWCF:6259-1-SCCO") +{ + field(DESC, "") + field(CALC, "A==1?(B<10?A+B:B+11):(A==11?(B<7?A+B:(A>7?0:27)):A)") + field(FLNK, "EC-GN-HWCF:6259-1-SCCC") + field(HOPR, "31") + field(INPA, "EC-GN-HWCF:6259-1-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6259-1-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6259-1-SCLK PP") +} + +record (longout,"EC-GN-HWCF:6259-1-SCLK") +{ + field(DESC, "") + field(DRVH, "31") + field(DRVL, "0") + field(DTYP, "ni6259") + field(HOPR, "31") + field(LOPR, "0") + field(OUT, "#C0 S0 @sample_clock_ai") +} + +record (mbbo,"EC-GN-HWCF:6259-1-SCTY") +{ + field(DESC, "") + field(FLNK, "EC-GN-HWCF:6259-1-SCCO") + field(FRST, "STAR_Trigger") + field(FRVL, "20") + field(FVST, "Analog_Trigger") + field(FVVL, "30") + field(ONST, "PFI") + field(ONVL, "1") + field(PINI, "YES") + field(SXST, "Logic_Low") + field(SXVL, "31") + field(THST, "GCRTOUT") + field(THVL, "19") + field(TWST, "PXI_Trigger") + field(TWVL, "11") + field(VAL, "0") + field(ZRST, "Internal") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6259-1-SR") +{ + field(DESC, "ADC Sampling Rate") + field(DTYP, "ni6259") + field(EGU, "Hz") + field(HIGH, "1000001") + field(HSV, "MAJOR") + field(OUT, "#C0 S0 @sample_rate") + field(PINI, "YES") + field(VAL, "1000000") +} + +record (mbbi,"EC-GN-HWCF:6259-1-STATUS") +{ + field(DESC, "PXI-6259.1 Board Status") + field(DTYP, "ni6259") + field(EIST, "ADC Overrun") + field(EISV, "MAJOR") + field(EIVL, "8") + field(ELST, "Reserved1") + field(ELSV, "INVALID") + field(ELVL, "11") + field(FFST, "MSC_Error") + field(FFSV, "MAJOR") + field(FFVL, "15") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FTST, "Reserved4") + field(FTSV, "INVALID") + field(FTVL, "14") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "#C0 S0 @BoardStatus") + field(NIST, "DAC Overrun") + field(NISV, "MAJOR") + field(NIVL, "9") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, ".1 second") + field(SVST, "AI_FIFO Overflow") + field(SVSV, "MAJOR") + field(SVVL, "7") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(TEST, "Reserved0") + field(TESV, "INVALID") + field(TEVL, "10") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TTST, "Reserved3") + field(TTSV, "INVALID") + field(TTVL, "13") + field(TVST, "Reserved2") + field(TVSV, "INVALID") + field(TVVL, "12") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-HWCF:6368-0-AIPU") +{ + field(DESC, "Software Pulse") + field(DTYP, "asynInt32") + field(FRST, "UPDATECLK") + field(FRVL, "4") + field(ONST, "CONVERTERCLK") + field(ONVL, "1") + field(OUT, "@asyn(ni6368_1, 0) pulse_ai") + field(THST, "REFTRIG") + field(THVL, "3") + field(TWST, "STARTTRIG") + field(TWVL, "2") + field(VAL, "2") + field(ZRST, "SAMPLECLK") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6368-0-AISMPL") +{ + field(DESC, "No of AI sample to be acquire in Block") + field(DRVH, "32000") + field(DRVL, "1") + field(DTYP, "asynInt32") + field(HOPR, "32000") + field(LOPR, "1") + field(OUT, "@asyn(ni6368_1, 0) no_of_samples") + field(PINI, "YES") + field(VAL, "1") +} + +record (longout,"EC-GN-HWCF:6368-0-AISR") +{ + field(DESC, "AI Sampling Rate") + field(DRVH, "2000000") + field(DRVL, "1") + field(DTYP, "asynInt32") + field(HOPR, "2000000") + field(LOPR, "1") + field(OUT, "@asyn(ni6368_1, 0) sampling_rate_ai") + field(PINI, "YES") + field(VAL, "1000000") +} + +record (longout,"EC-GN-HWCF:6368-0-AITB") +{ + field(DESC, "AI Timebase source") + field(DRVH, "60") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "60") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 0) timebase_ai") + field(VAL, "0") +} + +record (mbbo,"EC-GN-HWCF:6368-0-AOPU") +{ + field(DESC, "AO Pulse Source") + field(DTYP, "asynInt32") + field(FRST, "UPDATECLK") + field(FRVL, "4") + field(ONST, "CONVERTERCLK") + field(ONVL, "1") + field(OUT, "@asyn(ni6368_1, 0) pulse_ao") + field(THST, "REFTRIG") + field(THVL, "3") + field(TWST, "STARTTRIG") + field(TWVL, "2") + field(VAL, "2") + field(ZRST, "SAMPLECLK") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6368-0-AOTB") +{ + field(DESC, "AO Timebase source") + field(DRVH, "60") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "60") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 0) timebase_ao") + field(VAL, "0") +} + +record (mbbo,"EC-GN-HWCF:6368-0-CHAIMO") +{ + field(DESC, "Change AI Configuration") + field(DTYP, "asynInt32") + field(FRST, "PreTriggered") + field(FRVL, "7") + field(ONST, "ReTrigger") + field(ONVL, "3") + field(OUT, "@asyn(ni6368_1, 0) ai_mode") + field(PINI, "YES") + field(THST, "SoftwareTimed") + field(THVL, "6") + field(TWST, "Continuous") + field(TWVL, "4") + field(VAL, "2") + field(ZRST, "Finite") + field(ZRVL, "2") +} + +record (mbbo,"EC-GN-HWCF:6368-0-CHAOMO") +{ + field(DESC, "Change AO Configuration") + field(DTYP, "asynInt32") + field(FRST, "PreTriggered") + field(FRVL, "7") + field(ONST, "ReTrigger") + field(ONVL, "3") + field(OUT, "@asyn(ni6368_1, 0) ao_mode") + field(THST, "SoftwareTimed") + field(THVL, "6") + field(TWST, "Continuous") + field(TWVL, "4") + field(VAL, "2") + field(ZRST, "Finite") + field(ZRVL, "2") +} + +record (longout,"EC-GN-HWCF:6368-0-POST") +{ + field(DESC, "Number of AI sample to be acquire") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 0) posttrig_samples") + field(PINI, "YES") + field(VAL, "1") +} + +record (longout,"EC-GN-HWCF:6368-0-PRET") +{ + field(DESC, "Number of AI sample to be acquire") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 0) pretrig_samples") + field(PINI, "YES") + field(VAL, "0") +} + +record (calcout,"EC-GN-HWCF:6368-0-SCCC") +{ + field(DESC, "") + field(CALC, "(A==11 andand B >7) || (A!=1 andand A!=11) ? 0: B") + field(HOPR, "15") + field(INPA, "EC-GN-HWCF:6368-0-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6368-0-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6368-0-SCCH PP") +} + +record (mbbo,"EC-GN-HWCF:6368-0-SCCH") +{ + field(DESC, "") + field(EIST, "8") + field(EIVL, "8") + field(ELST, "11") + field(ELVL, "11") + field(FFST, "15") + field(FFVL, "15") + field(FLNK, "EC-GN-HWCF:6368-0-SCCO") + field(FRST, "4") + field(FRVL, "4") + field(FTST, "14") + field(FTVL, "14") + field(FVST, "5") + field(FVVL, "5") + field(NIST, "9") + field(NIVL, "9") + field(ONST, "1") + field(ONVL, "1") + field(PINI, "YES") + field(SVST, "7") + field(SVVL, "7") + field(SXST, "6") + field(SXVL, "6") + field(TEST, "10") + field(TEVL, "10") + field(THST, "3") + field(THVL, "3") + field(TTST, "13") + field(TTVL, "13") + field(TVST, "12") + field(TVVL, "12") + field(TWST, "2") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "0") + field(ZRVL, "0") +} + +record (calcout,"EC-GN-HWCF:6368-0-SCCO") +{ + field(DESC, "") + field(CALC, "A==1?(B<10?A+B:B+11):(A==11?(B<7?A+B:(A>7?0:27)):A)") + field(FLNK, "EC-GN-HWCF:6368-0-SCCC") + field(HOPR, "31") + field(INPA, "EC-GN-HWCF:6368-0-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6368-0-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6368-0-SCLK PP") +} + +record (longout,"EC-GN-HWCF:6368-0-SCLK") +{ + field(DESC, "") + field(DRVH, "31") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "31") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 0)sample_clock_ai") +} + +record (mbbo,"EC-GN-HWCF:6368-0-SCTY") +{ + field(DESC, "") + field(FLNK, "EC-GN-HWCF:6368-0-SCCO") + field(FRST, "STAR_Trigger") + field(FRVL, "20") + field(FVST, "Analog_Trigger") + field(FVVL, "30") + field(ONST, "PFI") + field(ONVL, "1") + field(PINI, "YES") + field(SXST, "Logic_Low") + field(SXVL, "31") + field(THST, "GCRTOUT") + field(THVL, "19") + field(TWST, "PXI_Trigger") + field(TWVL, "11") + field(VAL, "0") + field(ZRST, "Internal") + field(ZRVL, "0") +} + +record (mbbi,"EC-GN-HWCF:6368-0-STATUS") +{ + field(DESC, "PXIe-6368.0 Board Status") + field(DTYP, "asynInt32") + field(EIST, "DIHW_Error") + field(EISV, "MAJOR") + field(EIVL, "8") + field(ELST, "GPCHW_Error") + field(ELSV, "MAJOR") + field(ELVL, "11") + field(FFST, "MSC_Error") + field(FFSV, "MAJOR") + field(FFVL, "15") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FTST, "Reserved2") + field(FTSV, "INVALID") + field(FTVL, "14") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "@asyn(ni6368_1, 0) board_status") + field(NIST, "AOHW_Error") + field(NISV, "MAJOR") + field(NIVL, "9") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, ".1 second") + field(SVST, "AIHW_Error") + field(SVSV, "MAJOR") + field(SVVL, "7") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(TEST, "DOHW_Error") + field(TESV, "MAJOR") + field(TEVL, "10") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TTST, "Reserved1") + field(TTSV, "INVALID") + field(TTVL, "13") + field(TVST, "Reserved0") + field(TVSV, "INVALID") + field(TVVL, "12") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-HWCF:6368-1-AIPU") +{ + field(DESC, "Software Pulse") + field(DTYP, "asynInt32") + field(FRST, "UPDATECLK") + field(FRVL, "4") + field(ONST, "CONVERTERCLK") + field(ONVL, "1") + field(OUT, "@asyn(ni6368_0, 0) pulse_ai") + field(THST, "REFTRIG") + field(THVL, "3") + field(TWST, "STARTTRIG") + field(TWVL, "2") + field(VAL, "2") + field(ZRST, "SAMPLECLK") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6368-1-AISMPL") +{ + field(DESC, "No of AI sample to be acquire in Block") + field(DRVH, "32000") + field(DRVL, "1") + field(DTYP, "asynInt32") + field(HOPR, "32000") + field(LOPR, "1") + field(OUT, "@asyn(ni6368_0, 0) no_of_samples") + field(PINI, "YES") + field(VAL, "1") +} + +record (longout,"EC-GN-HWCF:6368-1-AISR") +{ + field(DESC, "AI Sampling Rate") + field(DRVH, "2000000") + field(DRVL, "1") + field(DTYP, "asynInt32") + field(HOPR, "2000000") + field(LOPR, "1") + field(OUT, "@asyn(ni6368_0, 0) sampling_rate_ai") + field(PINI, "YES") + field(VAL, "1000000") +} + +record (longout,"EC-GN-HWCF:6368-1-AITB") +{ + field(DESC, "AI Timebase source") + field(DRVH, "60") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "60") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_0, 0) timebase_ai") + field(VAL, "0") +} + +record (mbbo,"EC-GN-HWCF:6368-1-AOPU") +{ + field(DESC, "AO Pulse Source") + field(DTYP, "asynInt32") + field(FRST, "UPDATECLK") + field(FRVL, "4") + field(ONST, "CONVERTERCLK") + field(ONVL, "1") + field(OUT, "@asyn(ni6368_0, 0) pulse_ao") + field(THST, "REFTRIG") + field(THVL, "3") + field(TWST, "STARTTRIG") + field(TWVL, "2") + field(VAL, "2") + field(ZRST, "SAMPLECLK") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6368-1-AOTB") +{ + field(DESC, "AO Timebase source") + field(DRVH, "60") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "60") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_0, 0) timebase_ao") + field(VAL, "0") +} + +record (mbbo,"EC-GN-HWCF:6368-1-CHAIMO") +{ + field(DESC, "Change AI Configuration") + field(DTYP, "asynInt32") + field(FRST, "PreTriggered") + field(FRVL, "7") + field(ONST, "ReTrigger") + field(ONVL, "3") + field(OUT, "@asyn(ni6368_0, 0) ai_mode") + field(PINI, "YES") + field(THST, "SoftwareTimed") + field(THVL, "6") + field(TWST, "Continuous") + field(TWVL, "4") + field(VAL, "2") + field(ZRST, "Finite") + field(ZRVL, "2") +} + +record (mbbo,"EC-GN-HWCF:6368-1-CHAOMO") +{ + field(DESC, "Change AO Configuration") + field(DTYP, "asynInt32") + field(FRST, "PreTriggered") + field(FRVL, "7") + field(ONST, "ReTrigger") + field(ONVL, "3") + field(OUT, "@asyn(ni6368_0, 0) ao_mode") + field(THST, "SoftwareTimed") + field(THVL, "6") + field(TWST, "Continuous") + field(TWVL, "4") + field(VAL, "2") + field(ZRST, "Finite") + field(ZRVL, "2") +} + +record (longout,"EC-GN-HWCF:6368-1-POST") +{ + field(DESC, "Number of AI sample to be acquire") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_0, 0) posttrig_samples") + field(PINI, "YES") + field(VAL, "1") +} + +record (longout,"EC-GN-HWCF:6368-1-PRET") +{ + field(DESC, "Number of AI sample to be acquire") + field(DRVH, "50000") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "50000") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_0, 0) pretrig_samples") + field(PINI, "YES") + field(VAL, "0") +} + +record (calcout,"EC-GN-HWCF:6368-1-SCCC") +{ + field(DESC, "") + field(CALC, "(A==11 andand B >7) || (A!=1 andand A!=11) ? 0: B") + field(HOPR, "15") + field(INPA, "EC-GN-HWCF:6368-1-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6368-1-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6368-1-SCCH PP") +} + +record (mbbo,"EC-GN-HWCF:6368-1-SCCH") +{ + field(DESC, "") + field(EIST, "8") + field(EIVL, "8") + field(ELST, "11") + field(ELVL, "11") + field(FFST, "15") + field(FFVL, "15") + field(FLNK, "EC-GN-HWCF:6368-1-SCCO") + field(FRST, "4") + field(FRVL, "4") + field(FTST, "14") + field(FTVL, "14") + field(FVST, "5") + field(FVVL, "5") + field(NIST, "9") + field(NIVL, "9") + field(ONST, "1") + field(ONVL, "1") + field(PINI, "YES") + field(SVST, "7") + field(SVVL, "7") + field(SXST, "6") + field(SXVL, "6") + field(TEST, "10") + field(TEVL, "10") + field(THST, "3") + field(THVL, "3") + field(TTST, "13") + field(TTVL, "13") + field(TVST, "12") + field(TVVL, "12") + field(TWST, "2") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "0") + field(ZRVL, "0") +} + +record (calcout,"EC-GN-HWCF:6368-1-SCCO") +{ + field(DESC, "") + field(CALC, "A==1?(B<10?A+B:B+11):(A==11?(B<7?A+B:(A>7?0:27)):A)") + field(FLNK, "EC-GN-HWCF:6368-1-SCCC") + field(HOPR, "31") + field(INPA, "EC-GN-HWCF:6368-1-SCTY.RVAL") + field(INPB, "EC-GN-HWCF:6368-1-SCCH") + field(LOPR, "0") + field(OUT, "EC-GN-HWCF:6368-1-SCLK PP") +} + +record (longout,"EC-GN-HWCF:6368-1-SCLK") +{ + field(DESC, "") + field(DRVH, "31") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "31") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_0, 0)sample_clock_ai") +} + +record (mbbo,"EC-GN-HWCF:6368-1-SCTY") +{ + field(DESC, "") + field(FLNK, "EC-GN-HWCF:6368-1-SCCO") + field(FRST, "STAR_Trigger") + field(FRVL, "20") + field(FVST, "Analog_Trigger") + field(FVVL, "30") + field(ONST, "PFI") + field(ONVL, "1") + field(PINI, "YES") + field(SXST, "Logic_Low") + field(SXVL, "31") + field(THST, "GCRTOUT") + field(THVL, "19") + field(TWST, "PXI_Trigger") + field(TWVL, "11") + field(VAL, "0") + field(ZRST, "Internal") + field(ZRVL, "0") +} + +record (mbbi,"EC-GN-HWCF:6368-1-STATUS") +{ + field(DESC, "PXIe-6368.1 Board Status") + field(DTYP, "asynInt32") + field(EIST, "DIHW_Error") + field(EISV, "MAJOR") + field(EIVL, "8") + field(ELST, "GPCHW_Error") + field(ELSV, "MAJOR") + field(ELVL, "11") + field(FFST, "MSC_Error") + field(FFSV, "MAJOR") + field(FFVL, "15") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FTST, "Reserved2") + field(FTSV, "INVALID") + field(FTVL, "14") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "@asyn(ni6368_0, 0) board_status") + field(NIST, "AOHW_Error") + field(NISV, "MAJOR") + field(NIVL, "9") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, ".1 second") + field(SVST, "AIHW_Error") + field(SVSV, "MAJOR") + field(SVVL, "7") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(TEST, "DOHW_Error") + field(TESV, "MAJOR") + field(TEVL, "10") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TTST, "Reserved1") + field(TTSV, "INVALID") + field(TTVL, "13") + field(TVST, "Reserved0") + field(TVSV, "INVALID") + field(TVVL, "12") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (longout,"EC-GN-HWCF:6528-0-FILTINT") +{ + field(DESC, "Set Filter Interval Value") + field(DRVH, "209715200") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "209715200") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setfilterinterval") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-0-POWERP3") +{ + field(DESC, "Power-UP state of Port3") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynUInt32Digital") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asynMask(ni6528_1,3, 0xff) setportpowerup") + field(PINI, "YES") + field(VAL, "255") +} + +record (longout,"EC-GN-HWCF:6528-0-POWERP4") +{ + field(DESC, "Power-UP state of Port4") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynUInt32Digital") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asynMask(ni6528_1,4, 0xff) setportpowerup") + field(PINI, "YES") + field(VAL, "255") +} + +record (longout,"EC-GN-HWCF:6528-0-POWERP5") +{ + field(DESC, "Power-UP state of Port5") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynUInt32Digital") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asynMask(ni6528_1,5, 0xff) setportpowerup") + field(PINI, "YES") + field(VAL, "255") +} + +record (longout,"EC-GN-HWCF:6528-0-RTSIINPROUT") +{ + field(DESC, "Set RTSI Input Route") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setrtsiinputroute") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-0-RTSIOUTROUT") +{ + field(DESC, "Set RTSI Output Route") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setrtsioutputroute") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-0-RTSIPCHANGE") +{ + field(DESC, "Set RTSI Pulse on Change") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setrtsipulseonchange") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-0-RTSIPWDG") +{ + field(DESC, "Set RTSI pulse on watchdog") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setrtsipulseonwatchdog") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-0-RTSIWDGTRIG") +{ + field(DESC, "Set RTSI on Watchdog Trigger") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setrtsiwatchdogtrigger") + field(VAL, "0") +} + +record (mbbi,"EC-GN-HWCF:6528-0-STATUS") +{ + field(DESC, "PXI-6528.0 Board Status") + field(DTYP, "asynInt32") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "@asyn(ni6528_1,1) board_status") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, "1 second") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (ao,"EC-GN-HWCF:6528-0-WDGTOUT") +{ + field(DESC, "Set Watchdog TimeOut") + field(DRVH, "429496729580") + field(DRVL, "0") + field(DTYP, "asynFloat64") + field(HOPR, "429496729580") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_1) setwatchdogtimeout") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-1-FILTINT") +{ + field(DESC, "Set Filter Interval Value") + field(DRVH, "209715200") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "209715200") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setfilterinterval") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-1-POWERP3") +{ + field(DESC, "Power-UP state of Port3") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynUInt32Digital") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asynMask(ni6528_0,3, 0xff) setportpowerup") + field(PINI, "YES") + field(VAL, "255") +} + +record (longout,"EC-GN-HWCF:6528-1-POWERP4") +{ + field(DESC, "Power-UP state of Port4") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynUInt32Digital") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asynMask(ni6528_0,4, 0xff) setportpowerup") + field(PINI, "YES") + field(VAL, "255") +} + +record (longout,"EC-GN-HWCF:6528-1-POWERP5") +{ + field(DESC, "Power-UP state of Port5") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynUInt32Digital") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asynMask(ni6528_0,5, 0xff) setportpowerup") + field(PINI, "YES") + field(VAL, "255") +} + +record (longout,"EC-GN-HWCF:6528-1-RTSIINPROUT") +{ + field(DESC, "Set RTSI Input Route") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setrtsiinputroute") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-1-RTSIOUTROUT") +{ + field(DESC, "Set RTSI Output Route") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setrtsioutputroute") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-1-RTSIPCHANGE") +{ + field(DESC, "Set RTSI Pulse on Change") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setrtsipulseonchange") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-1-RTSIPWDG") +{ + field(DESC, "Set RTSI pulse on watchdog") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setrtsipulseonwatchdog") + field(VAL, "0") +} + +record (longout,"EC-GN-HWCF:6528-1-RTSIWDGTRIG") +{ + field(DESC, "Set RTSI on Watchdog Trigger") + field(DRVH, "255") + field(DRVL, "0") + field(DTYP, "asynInt32") + field(HOPR, "255") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setrtsiwatchdogtrigger") + field(VAL, "0") +} + +record (mbbi,"EC-GN-HWCF:6528-1-STATUS") +{ + field(DESC, "PXI-6528.1 Board Status") + field(DTYP, "asynInt32") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "@asyn(ni6528_0,0) board_status") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, "1 second") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (ao,"EC-GN-HWCF:6528-1-WDGTOUT") +{ + field(DESC, "Set Watchdog TimeOut") + field(DRVH, "429496729580") + field(DRVL, "0") + field(DTYP, "asynFloat64") + field(HOPR, "429496729580") + field(LOPR, "0") + field(OUT, "@asyn(ni6528_0) setwatchdogtimeout") + field(VAL, "0") +} + +record (waveform,"EC-GN-HWCF:6683-0-BDTM") +{ + field(DESC, "Board time") + field(DTYP, "asynInt32ArrayIn") + field(FTVL, "ULONG") + field(INP, "@asyn(ni6683h_0,0) getTime") + field(NELM, "2") + field(SCAN, ".1 second") +} + +record (subArray,"EC-GN-HWCF:6683-0-BDTMN") +{ + field(DESC, "Board time [ns]") + field(EGU, "ns") + field(FTVL, "ULONG") + field(INP, "EC-GN-HWCF:6683-0-BDTM CP MS") +} + +record (subArray,"EC-GN-HWCF:6683-0-BDTMS") +{ + field(DESC, "Board time [s]") + field(EGU, "s") + field(FTVL, "ULONG") + field(INP, "EC-GN-HWCF:6683-0-BDTM CP MS") +} + +record (waveform,"EC-GN-HWCF:6683-0-BLKTM") +{ + field(DESC, "Block until...") + field(DTYP, "asynInt32ArrayOut") + field(FTVL, "LONG") + field(HOPR, "4503599627370496") + field(INP, "@asyn(ni6683h_0,0) waitForTime") + field(LOPR, "0") + field(NELM, "2") +} + +record (stringin,"EC-GN-HWCF:6683-0-DEVNAME") +{ + field(DESC, "Device name") + field(DTYP, "asynOctetRead") + field(INP, "@asyn(ni6683h_0,0) deviceName") + field(PINI, "YES") + field(SCAN, "Passive") +} + +record (stringin,"EC-GN-HWCF:6683-0-DRIVER") +{ + field(DESC, "Driver version") + field(DTYP, "asynOctetRead") + field(INP, "@asyn(ni6683h_0,0) driverVersion") + field(PINI, "YES") + field(SCAN, "Passive") +} + +record (longin,"EC-GN-HWCF:6683-0-FTEMAX") +{ + field(DESC, "Max number of scheduled FTEs") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)maxScheduledFtes") + field(PINI, "YES") + field(SCAN, "Passive") +} + +record (longin,"EC-GN-HWCF:6683-0-FTENUM") +{ + field(DESC, "Number of pending FTEs") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)numPendingFtes") + field(SCAN, "5 second") +} + +record (stringin,"EC-GN-HWCF:6683-0-HBDTM") +{ + field(DESC, "Board Time") + field(DTYP, "asynOctetRead") + field(INP, "@asyn(ni6683h_0,0) getTime") + field(PINI, "YES") + field(SCAN, ".1 second") +} + +record (longin,"EC-GN-HWCF:6683-0-LVL_ERRS") +{ + field(DESC, "Check number of FTE level errors") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)checkFteLevels") + field(SCAN, "Passive") +} + +record (longin,"EC-GN-HWCF:6683-0-SERIAL") +{ + field(DESC, "Device serial number") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)deviceSerialNumber") + field(PINI, "YES") + field(SCAN, "Passive") +} + +record (mbbi,"EC-GN-HWCF:6683-0-STATUS") +{ + field(DESC, "PXI-6683.0 Device status") + field(DTYP, "asynInt32") + field(EIST, "FIFO overflow") + field(EISV, "MINOR") + field(EIVL, "8") + field(ELST, "Buffer overflow") + field(ELSV, "MINOR") + field(ELVL, "11") + field(FRST, "No board") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FVST, "StatConf error") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(INP, "@asyn(ni6683h_0,0)deviceStatus") + field(NIST, "FPGA not ready") + field(NISV, "MINOR") + field(NIVL, "9") + field(ONST, "Initializing") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, "5 second") + field(SVST, "Reserved") + field(SVSV, "INVALID") + field(SVVL, "7") + field(SXST, "DynConf error") + field(SXSV, "MAJOR") + field(SXVL, "6") + field(TEST, "Ref clk no lock") + field(TESV, "MINOR") + field(TEVL, "10") + field(THST, "Hardware error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "Resetting") + field(TWSV, "MINOR") + field(TWVL, "2") + field(VAL, "4") + field(ZRST, "Ok") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbi,"EC-GN-HWCF:6683-0-SYNC") +{ + field(DESC, "PXI-6683.0 Synchronization status") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)syncStatus") + field(ONST, "SYNCING") + field(ONSV, "MINOR") + field(ONVL, "1") + field(SCAN, "1 second") + field(THST, "LOST_SYNC") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "SYNCED") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "NOT_SYNCED") + field(ZRSV, "MAJOR") + field(ZRVL, "0") +} + +record (longin,"EC-GN-HWCF:6683-0-SYNCLOST") +{ + field(DESC, "Seconds since lost synchronization") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6683h_0,0)secsSinceSync") + field(SCAN, "1 second") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GAF-CCPS-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GAF-CCPS-iocEC-GN-PSH0PCF.db new file mode 100644 index 0000000..c812fc7 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GAF-CCPS-iocEC-GN-PSH0PCF.db @@ -0,0 +1,310 @@ +record (bi,"EC-GN-P01-GAF-CCPS:PSU2320-OUTON-RB") +{ + field(DESC, "GY1 CCPS Output ON status") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getOut CCPS1") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-CCPS:PSU2320-OUTON-SP") +{ + field(DESC, "GY1 CCPS Output ON") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PWX1500ML.proto setOut CCPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-RB") +{ + field(DESC, "GY1 CCPS remote readback") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getRem CCPS1") + field(ONAM, "REM") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(ZNAM, "LOC") +} + +record (bo,"EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-SP") +{ + field(DESC, "GY1 CCPS remote control on") + field(DTYP, "stream") + field(ONAM, "REM") + field(OUT, "@PWX1500ML.proto setRem CCPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(ZNAM, "LOC") +} + +record (bo,"EC-GN-P01-GAF-CCPS:PSU2320-RST") +{ + field(DESC, "GY1 CCPS reset device") + field(DTYP, "stream") + field(OUT, "@PWX1500ML.proto resetDevice CCPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") +} + +record (bi,"EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-RB") +{ + field(DESC, "GY1 CCPS signal source on") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getSourceON CCPS1") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-SP") +{ + field(DESC, "GY1 CCPS signal source on") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PWX1500ML.proto setSourceON CCPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAF-CCPS:PSU2320-STAT") +{ + field(DESC, "CCPS1 is running") + field(ONAM, "ON") + field(SCAN, "Passive") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-CCPS:PSU2320-TR") +{ + field(DESC, "GY1 CCPS in Operation") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-CCPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 CCPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-CCPS:STAT-SIMM") +{ + field(DESC, "GY1 CCPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (ai,"EC-GN-P01-GAF-CCPS:PSU2320-CURR-RB") +{ + field(DESC, "GY1 CCPS Output current readback") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "60.0") + field(INP, "@PWX1500ML.proto getCurr CCPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-CCPS:PSU2320-CURR-SP") +{ + field(DESC, "GY1 CCPS Output current setpoint") + field(DRVH, "58.8") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "58.8") + field(LOPR, "0") + field(OUT, "@PWX1500ML.proto setCurr CCPS1") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF-CCPS:PSU2320-DCV-RB") +{ + field(DESC, "GY1 CCPS DCV range readback") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(INP, "@PWX1500ML.proto getVolt CCPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-CCPS:PSU2320-DCV-SP") +{ + field(DESC, "GY1 CCPS Output DCV setpoint") + field(DRVH, "84") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "84") + field(LOPR, "0") + field(OUT, "@PWX1500ML.proto setVolt CCPS1") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-CCPS:PSU2320-EREF") +{ + field(DESC, "GY1 CCPS voltage setpoint") + field(DRVH, "80") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "80") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-CCPS:PSU2320-EREF-MSP") +{ + field(DESC, "GY1 CCPS voltage manual setpoint") + field(DRVH, "80") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "80") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (stringin,"EC-GN-P01-GAF-CCPS:PSU2320-ERROR") +{ + field(DESC, "GY1 CCPS Error message") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getError CCPS1") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") +} + +record (stringin,"EC-GN-P01-GAF-CCPS:PSU2320-IDN") +{ + field(DESC, "GY1 CCPS IDN") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto readDeviceID CCPS1") + field(PINI, "NO") + field(SCAN, "10 second") +} + +record (ai,"EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCI") +{ + field(DESC, "GY1 CCPS Measued DC Current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "58.8") + field(INP, "@PWX1500ML.proto getMeasDCI CCPS1") + field(LOPR, "-58.8") + field(PINI, "NO") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCV") +{ + field(DESC, "GY1 CCPS Measued DC Voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "200") + field(INP, "@PWX1500ML.proto getMeasDCV CCPS1") + field(LOPR, "-200") + field(PINI, "NO") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF-CCPS:STAT-AMP") +{ + field(DESC, "Amplitude") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "3.5") +} + +record (ai,"EC-GN-P01-GAF-CCPS:STAT-FREQ") +{ + field(DESC, "Frequency") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "1") +} + +record (ai,"EC-GN-P01-GAF-CCPS:STAT-OFFS") +{ + field(DESC, "Offset") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "1") +} + +record (calcout,"EC-GN-P01-GAF-CCPS:STAT-OP-CALC") +{ + field(CALC, "(A==1 || B==1 || C==1)?1:0; C:=B; B:=A") + field(DESC, "GYA CCPS operation check") + field(FLNK, "EC-GN-P01-GAF-CCPS:PSU2320-TR") + field(INPA, "EC-GN-P01-GAF-CCPS:STAT-OP-V-DIFF") + field(INPB, "0") + field(INPC, "0") + field(OUT, "EC-GN-P01-GAF-CCPS:PSU2320-TR") + field(SCAN, "Passive") +} + +record (calc,"EC-GN-P01-GAF-CCPS:STAT-OP-V-DIFF") +{ + field(CALC, "(A==1 andand ABS(B-C)>0.1)?1:0; C:=B") + field(DESC, "GYA CCPS operation check") + field(FLNK, "EC-GN-P01-GAF-CCPS:STAT-OP-CALC") + field(INPA, "EC-GN-P01-GAF-CCPS:PSU2320-OUTON-RB") + field(INPB, "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCV PP") + field(SCAN, ".1 second") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GAF-FHPS-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GAF-FHPS-iocEC-GN-PSH0PCF.db new file mode 100644 index 0000000..6aee723 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GAF-FHPS-iocEC-GN-PSH0PCF.db @@ -0,0 +1,424 @@ +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START") +{ + field(DESC, "Auto rampup start command") + field(HIGH, "0.1") + field(ONAM, "Start") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Stop") +} + +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-LOC") +{ + field(DESC, "Local control ON") + field(DTYP, "stream") + field(ONAM, "LOC") + field(OUT, "@PCR500LE.proto setLoc FHPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB") +{ + field(DESC, "Output ON readback") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto getOut FHPS1") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-OUTON-SP") +{ + field(DESC, "Output ON command") + field(DTYP, "stream") + field(ONAM, "REM") + field(OUT, "@PCR500LE.proto setOut FHPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-REM") +{ + field(DESC, "Remote control on") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PCR500LE.proto setRem FHPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-RST") +{ + field(DESC, "Reset command") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PCR500LE.proto resetDevice FHPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-RB") +{ + field(DESC, "External control readback") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto getSourceON FHPS1") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-SP") +{ + field(DESC, "External control ON command") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PCR500LE.proto setSourceON FHPS1") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP") +{ + field(DESC, "GY1 FHPS rampup comp") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 FHPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-FHPS:STAT-SIMM") +{ + field(DESC, "GY1 FHPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-ACV-RB") +{ + field(DESC, "Output Voltage readback") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(INP, "@PCR500LE.proto getVolt FHPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-ACV-SP") +{ + field(DESC, "Output voltage setpoint") + field(DRVH, "300") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(LOPR, "0") + field(OUT, "@PCR500LE.proto setVolt FHPS1") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-AUTO-RU-TIME") +{ + field(DESC, "Auto rampup time") + field(DRVH, "100000") + field(DRVL, "10") + field(EGU, "sec") + field(HOPR, "100000") + field(LOPR, "10") + field(PINI, "NO") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "30") +} + +record (mbbo,"EC-GN-P01-GAF-FHPS:PSU2610-AUTO-STAT") +{ + field(DESC, "Auto rampup status") + field(ONST, "IN OPERATION") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(THST, "ERROR") + field(THVL, "3") + field(TWST, "FINISH") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "NOT IN OPERATION") + field(ZRVL, "0") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV") +{ + field(DESC, "Auto rampup target voltage") + field(DRVH, "60") + field(DRVL, "0.0") + field(EGU, "V") + field(HOPR, "60.0") + field(LOPR, "0.0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(VAL, "5") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-CURR-RB") +{ + field(DESC, "Output Current readback") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "5") + field(INP, "@PCR500LE.proto getCurr FHPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-CURR-SP") +{ + field(DESC, "Output current setpoint") + field(DRVH, "5.0") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "5.0") + field(LOPR, "0") + field(OUT, "@PCR500LE.proto setCurr FHPS1") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-EREF") +{ + field(DESC, "GY1 FHPS voltage setpoint") + field(DRVH, "150") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "150") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-EREF-MSP") +{ + field(DESC, "GY1 FHPS voltage manual setpoint") + field(DRVH, "150") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "150") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (stringin,"EC-GN-P01-GAF-FHPS:PSU2610-ERROR") +{ + field(DESC, "Error code") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto getError FHPS1") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-FRQ-RB") +{ + field(DESC, "Output frequency readback") + field(DTYP, "stream") + field(EGU, "Hz") + field(HOPR, "1000") + field(INP, "@PCR500LE.proto getFreq FHPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-FHPS:PSU2610-FRQ-SP") +{ + field(DESC, "Output frequency setpoint") + field(DRVH, "999.9") + field(DRVL, "1") + field(DTYP, "stream") + field(EGU, "Hz") + field(HOPR, "1000") + field(LOPR, "0") + field(OUT, "@PCR500LE.proto setFreq FHPS1") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "1") +} + +record (stringin,"EC-GN-P01-GAF-FHPS:PSU2610-IDN") +{ + field(DESC, "IDN") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto readDeviceID FHPS1") + field(PINI, "NO") + field(SCAN, "10 second") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACI") +{ + field(DESC, "Measued AC Current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "5.0") + field(INP, "@PCR500LE.proto getMeasACI FHPS1") + field(LOPR, "-5.0") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACP") +{ + field(DESC, "Measued AC Power") + field(DTYP, "stream") + field(EGU, "W") + field(HOPR, "500") + field(INP, "@PCR500LE.proto getMeasACP FHPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV") +{ + field(DESC, "Measued AC Voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(INP, "@PCR500LE.proto getMeasACV FHPS1") + field(LOPR, "-300") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF-FHPS:PSU2610-MEAS-FRQ") +{ + field(DESC, "Measued Frequency") + field(DTYP, "stream") + field(EGU, "Hz") + field(HOPR, "1000") + field(INP, "@PCR500LE.proto getMeasACF FHPS1") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-FHPS:STAT-SIMM") + field(VAL, "1") +} + +record (calcout,"EC-GN-P01-GAF-FHPS:STAT-AUTO-MODE-SET") +{ + field(CALC, "A==1?0:1") + field(DESC, "GYA FHPS rampup comp off") + field(INPA, "EC-GN-P01-GAF:STAT-SM") + field(OOPT, "Transition To Zero") + field(OUT, "EC-GN-P01-GAF-FHPS:STAT-MANM PP") + field(SCAN, "1 second") +} + +record (waveform,"EC-GN-P01-GAF-FHPS:STAT-PREP-WF") +{ + field(DESC, "GY1 FHPS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CALC") +{ + field(CALC, "A==2?1:0") + field(DESC, "GYA FHPS rampup comp check") + field(INPA, "EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CMP") + field(OOPT, "When Non-zero") + field(OUT, "EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP PP") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CMP") +{ + field(CALC, "(ABS(A-B)<0.1*B)?2:((C > D)?1:0);D:=C") + field(DESC, "GYA FHPS rampup stat check") + field(FLNK, "EC-GN-P01-GAF-FHPS:STAT-RAMPUP-CALC") + field(INPA, "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV") + field(INPB, "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV") + field(INPC, "EC-GN-P01-GAF-FHPS:PSU2610-EREF") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GAF-FHPS:STAT-RAMPUP-OFF") +{ + field(CALC, "A==0?0:1") + field(DESC, "GYA FHPS rampup comp off") + field(INPA, "EC-GN-P01-GPS:PLC4110-YTS-ST1R") + field(OOPT, "When Zero") + field(OUT, "EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP PP") + field(SCAN, "1 second") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GAF-GCPS-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GAF-GCPS-iocEC-GN-PSH0PCF.db new file mode 100644 index 0000000..34f5d19 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GAF-GCPS-iocEC-GN-PSH0PCF.db @@ -0,0 +1,273 @@ +record (bo,"EC-GN-P01-GAF-GCPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 GCPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-GCPS:STAT-SIMM") +{ + field(DESC, "GY1 GCPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (mbbi,"EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB") +{ + field(DESC, "GY1 GCPS read ACT") + field(DTYP, "stream") + field(FRST, "ZERO") + field(FRSV, "NO_ALARM") + field(FRVL, "4") + field(INP, "@JASTEC-SCMPS.proto readActivity GC1") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") + field(THST, "FLAT TOP") + field(THSV, "NO_ALARM") + field(THVL, "3") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP") +{ + field(DESC, "GY1 GCPS set ACT") + field(DTYP, "stream") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(OUT, "@JASTEC-SCMPS.proto setActivity GC1") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MI") +{ + field(DESC, "GY1 GCPS ACT set to Marte") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MO") +{ + field(DESC, "GY1 GCPS ACT Marte outputs") + field(FLNK, "EC-GN-P01-GAF-GCPS:STAT-ACT-SP-CALC") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (ai,"EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON") +{ + field(DESC, "GY1 GCPS monitored current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "125") + field(INP, "@JASTEC-SCMPS.proto readMeasCurrent GC1") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") +} + +record (waveform,"EC-GN-P01-GAF-GCPS:PSU2130-ERR") +{ + field(DESC, "GY1 GCPS read error") + field(DTYP, "stream") + field(INP, "@JASTEC-SCMPS.proto readErrStat GC1") + field(NELM, "15") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-GCPS:PSU2130-SWP-LIM") +{ + field(DESC, "GY1 GCPS read sweep limit") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readSweepLim GC1") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-GCPS:PSU2130-SWP-RB") +{ + field(DESC, "GY1 GCPS read targ sweep rate") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readTargSweep GC1") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-RB") +{ + field(DESC, "GY1 GCPS read target current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "120") + field(INP, "@JASTEC-SCMPS.proto readTargCurrent GC1") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET") +{ + field(DESC, "GY1 GCPS set target current") + field(DRVH, "120") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP") + field(HOPR, "125") + field(LOPR, "0") + field(OUT, "@JASTEC-SCMPS.proto setCurrent GC1") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MI") +{ + field(DESC, "GY1 GCPS target current input to Marte") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MO") +{ + field(DESC, "GY1 GCPS target current Marte outputs") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GAF-GCPS:STAT-TRG-CURR-SET-CALC") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-GCPS:PSU2130-TRG-SWPR-SET") +{ + field(DESC, "GY1 GCPS set target swwp rate") + field(DRVH, "5.0") + field(DRVL, "0.01") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(LOPR, "0.01") + field(OUT, "@JASTEC-SCMPS.proto setSweep GC1") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") + field(VAL, "1") +} + +record (ai,"EC-GN-P01-GAF-GCPS:PSU2130-VOLT-MON") +{ + field(DESC, "GY1 GCPS monitored voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "10") + field(INP, "@JASTEC-SCMPS.proto readMeasVoltage GC1") + field(LOPR, "-10") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-GCPS:STAT-SIMM") +} + +record (calcout,"EC-GN-P01-GAF-GCPS:STAT-ACT-SP-CALC") +{ + field(CALC, "A") + field(DESC, "GCPS#1 state set by Marte") + field(INPA, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-GAF-GCPS:STAT-PREP-WF") +{ + field(DESC, "GY1 GCPS prepro schedule") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-GAF-GCPS:STAT-TRG-CURR-SET-CALC") +{ + field(CALC, "A") + field(DESC, "GCPS#1 current set by Marte") + field(INPA, "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET PP") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GAF-MCPS-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GAF-MCPS-iocEC-GN-PSH0PCF.db new file mode 100644 index 0000000..ed398a9 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GAF-MCPS-iocEC-GN-PSH0PCF.db @@ -0,0 +1,331 @@ +record (bo,"EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN") +{ + field(DESC, "SCM rampdown comp") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP") +{ + field(DESC, "GY1 SCM rampup comp") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-MCPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 MCPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF-MCPS:STAT-SIMM") +{ + field(DESC, "GY1 MCPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (mbbi,"EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB") +{ + field(DESC, "GY1 MCPS read ACT") + field(DTYP, "stream") + field(FRST, "ZERO") + field(FRSV, "NO_ALARM") + field(FRVL, "4") + field(INP, "@JASTEC-SCMPS.proto readActivity MC1") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") + field(THST, "FLAT TOP") + field(THSV, "NO_ALARM") + field(THVL, "3") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP") +{ + field(DESC, "GY1 MCPS set ACT") + field(DTYP, "stream") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(OUT, "@JASTEC-SCMPS.proto setActivity MC1") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MI") +{ + field(DESC, "GY1 MCPS ACT set to Marte") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MO") +{ + field(DESC, "GY1 MCPS ACT Marte outputs") + field(FLNK, "EC-GN-P01-GAF-MCPS:STAT-ACT-SP-CALC") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (ai,"EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON") +{ + field(DESC, "GY1 MCPS monitored current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "125") + field(INP, "@JASTEC-SCMPS.proto readMeasCurrent MC1") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") +} + +record (waveform,"EC-GN-P01-GAF-MCPS:PSU2120-ERR") +{ + field(DESC, "GY1 MCPS read error") + field(DTYP, "stream") + field(INP, "@JASTEC-SCMPS.proto readErrStat MC1") + field(NELM, "15") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-MCPS:PSU2120-SWP-LIM") +{ + field(DESC, "GY1 MCPS read sweep limit") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readSweepLim MC1") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-MCPS:PSU2120-SWP-RB") +{ + field(DESC, "GY1 MCPS read targ sweep rate") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readTargSweep MC1") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-RB") +{ + field(DESC, "GY1 MCPS read target current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "120") + field(INP, "@JASTEC-SCMPS.proto readTargCurrent MC1") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET") +{ + field(DESC, "GY1 MCPS set target current") + field(DRVH, "120") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP") + field(HOPR, "125") + field(LOPR, "0") + field(OUT, "@JASTEC-SCMPS.proto setCurrent MC1") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MI") +{ + field(DESC, "GY1 MCPS target current input to Marte") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MO") +{ + field(DESC, "GY1 MCPS target current Marte outputs") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GAF-MCPS:STAT-TRG-CURR-SET-CALC") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GAF-MCPS:PSU2120-TRG-SWPR-SET") +{ + field(DESC, "GY1 MCPS set target swwp rate") + field(DRVH, "5.0") + field(DRVL, "0.01") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(LOPR, "0.01") + field(OUT, "@JASTEC-SCMPS.proto setSweep MC1") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") + field(VAL, "1.69") +} + +record (ai,"EC-GN-P01-GAF-MCPS:PSU2120-VOLT-MON") +{ + field(DESC, "GY1 MCPS monitored voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "10") + field(INP, "@JASTEC-SCMPS.proto readMeasVoltage MC1") + field(LOPR, "-10") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GAF-MCPS:STAT-SIMM") +} + +record (calcout,"EC-GN-P01-GAF-MCPS:STAT-ACT-SP-CALC") +{ + field(CALC, "A") + field(DESC, "MCPS#1 state set by Marte") + field(INPA, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-GAF-MCPS:STAT-PREP-WF") +{ + field(DESC, "GY1 MCPS prepro schedule") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-GAF-MCPS:STAT-RAMPDWN-CMP") +{ + field(CALC, "(A==4 andand B==4 and C==4 andand D==4)?1:0") + field(DESC, "SMCPS ramp down check") + field(FLNK, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN") + field(INPA, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB") + field(INPB, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB") + field(INPC, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB") + field(INPD, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GAF-MCPS:STAT-RAMPUP-CMP") +{ + field(CALC, "(A==3 andand B==3)?1:0") + field(DESC, "GYA SCMPS rampup check") + field(FLNK, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP") + field(INPA, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB") + field(INPB, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB") + field(OOPT, "When Non-zero") + field(OUT, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GAF-MCPS:STAT-RAMPUP-OFF") +{ + field(CALC, "A==0?0:1") + field(DESC, "GYA MC GC rampup comp off") + field(INPA, "EC-GN-P01-GPS:PLC4110-YTS-ST1R") + field(OOPT, "When Zero") + field(OUT, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP PP") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GAF-MCPS:STAT-TRG-CURR-SET-CALC") +{ + field(CALC, "A") + field(DESC, "MCPS#1 current set by Marte") + field(INPA, "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET PP") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GAF-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GAF-iocEC-GN-PSH0PCF.db new file mode 100644 index 0000000..fb91d7c --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GAF-iocEC-GN-PSH0PCF.db @@ -0,0 +1,389 @@ +record (bi,"EC-GN-P01-GAF:DIO4900-YON") +{ + field(DESC, "GY1 External trigger") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 22) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF:STAT-AI-SIMM") +{ + field(DESC, "GY1 AI Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GAF:STAT-AO-SIMM") +{ + field(DESC, "GY1 AO Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GAF:STAT-CSV-LOAD") +{ + field(DESC, "File load trigger") + field(HIGH, "0.1") + field(ONAM, "Loading") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Load") +} + +record (bo,"EC-GN-P01-GAF:STAT-CSV-LOADED") +{ + field(DESC, "File load status") + field(ONAM, "Loaded") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Loading") +} + +record (bo,"EC-GN-P01-GAF:STAT-DI-SIMM") +{ + field(DESC, "GY1 DI Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GAF:STAT-DO-SIMM") +{ + field(DESC, "GY1 DO Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GAF:STAT-DT-SHOTLEN-EGU") +{ + field(DESC, "GY1 egu of shot length") + field(FLNK, "EC-GN-P01-GAF:STAT-DT-SHOTLEN-CALC") + field(ONAM, "s") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "ms") +} + +record (bo,"EC-GN-P01-GAF:STAT-MST-TRIG") +{ + field(DESC, "GY1 Master trigger") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF:STAT-PREP-MODE") +{ + field(DESC, "GY1 Pre-Pro mode ON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF:STAT-SHORT-PULSE") +{ + field(DESC, "GY1 Short Pulse Mode") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAF:STAT-TRIG-SOUR") +{ + field(DESC, "GY1 External Trigger Mode SW") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (ai,"EC-GN-P01-GAF:MOE2810-ET") +{ + field(DESC, "GY1 Arc detect signal 1") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GAF:MOE2810-ET-WF") +{ + field(DESC, "GY1 Arc detect signal 1") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GAF:MOE2820-ET") +{ + field(DESC, "GY1 Arc detect signal 2") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GAF:MOE2820-ET-WF") +{ + field(DESC, "GY1 Arc detect signal 2") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GAF:MOE2830-ET") +{ + field(DESC, "GY1 Arc detect signal 3") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GAF:MOE2830-ET-WF") +{ + field(DESC, "GY1 Arc detect signal 3") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GAF:MRF2910-ET") +{ + field(DESC, "GY1 RF Signal") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GAF:MRF2910-ET-WF") +{ + field(DESC, "GY1 RF Signal") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GAF:STAT-BEAMON-TIME") +{ + field(DESC, "GY1 Beam ON time") + field(EGU, "us") + field(HOPR, "3600000000") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (mbbo,"EC-GN-P01-GAF:STAT-CSV-ERR") +{ + field(DESC, "File load error status") + field(FRST, "Format error") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FVST, "Out of range") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(ONST, "Successfully loaded") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(THST, "Empty data") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "Failed to open") + field(TWSV, "MAJOR") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "Not loaded yet") + field(ZRSV, "MINOR") + field(ZRVL, "0") +} + +record (stringout,"EC-GN-P01-GAF:STAT-CSV-NAME") +{ + field(DESC, "CSV file name") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "shot000000") +} + +record (ai,"EC-GN-P01-GAF:STAT-DT-SHOTLEN") +{ + field(DESC, "GY1 Shot length") + field(EGU, "us") + field(HOPR, "3600000000") + field(LOPR, "100") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "1000000") +} + +record (calcout,"EC-GN-P01-GAF:STAT-DT-SHOTLEN-CALC") +{ + field(CALC, "(!A)?1000*B:1000000*B") + field(DESC, "GY1 shot length convert") + field(FLNK, "EC-GN-P01-GAF:STAT-DT-SHOTLEN") + field(INPA, "EC-GN-P01-GAF:STAT-DT-SHOTLEN-EGU") + field(INPB, "EC-GN-P01-GAF:STAT-DT-SHOTLEN-DAM") + field(OUT, "EC-GN-P01-GAF:STAT-DT-SHOTLEN") + field(SCAN, "Passive") +} + +record (ao,"EC-GN-P01-GAF:STAT-DT-SHOTLEN-DAM") +{ + field(DESC, "GY1 shot length without unit") + field(DRVH, "3600") + field(DRVL, "0") + field(FLNK, "EC-GN-P01-GAF:STAT-DT-SHOTLEN-CALC") + field(HOPR, "3600") + field(LOPR, "0") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GAF:STAT-ELAPSED") +{ + field(DESC, "GY1 Elapsed time") + field(EGU, "us") + field(HOPR, "4000000000") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (longin,"EC-GN-P01-GAF:STAT-PREHEAT-TIME") +{ + field(DESC, "Pre-heating time") + field(HOPR, "999999") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (waveform,"EC-GN-P01-GAF:STAT-PREP-TIME-WF") +{ + field(DESC, "GY1 prepro time schedule") + field(EGU, "ms") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "0") + field(SCAN, "Passive") +} + +record (fanout,"EC-GN-P01-GAF:STAT-SHOT-FLNK1") +{ + field(DESC, "GY1 fanout1 to AI waveform signal") +} + +record (fanout,"EC-GN-P01-GAF:STAT-SHOT-FLNK2") +{ + field(DESC, "GY1 fanout2 to AI waveform signal") +} + +record (longin,"EC-GN-P01-GAF:STAT-SHOT-ID") +{ + field(DESC, "GY1 shot ID") + field(HOPR, "999999") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (calcout,"EC-GN-P01-GAF:STAT-SHOT-PLOT") +{ + field(CALC, "A andand (B >= C)") + field(DESC, "GY1 judge to plot measured values") + field(INPA, "EC-GN-P01-GPS:PLC4110-YTS-ST3R") + field(INPB, "EC-GN-P01-GAF:STAT-BEAMON-TIME") + field(INPC, "6000000") + field(OOPT, "Transition To Non-zero") + field(OUT, "EC-GN-P01-GAF:STAT-SHOT-FLNK1 PP") + field(SCAN, ".1 second") +} + +record (mbbi,"EC-GN-P01-GAF:STAT-SM") +{ + field(DESC, "GY#1 state machine") + field(EIST, "WaitHVON_SDN") + field(EIVL, "8") + field(FLNK, "EC-GN-P01-GAF:STAT-SHOT-PLOT") + field(FRST, "WaitReady") + field(FRVL, "4") + field(FVST, "WaitPermit") + field(FVVL, "5") + field(NIST, "WaitHVON_SDN_PREP") + field(NIVL, "9") + field(ONST, "Error") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(SVST, "WaitHVON_PREP") + field(SVVL, "7") + field(SXST, "WaitHVON") + field(SXVL, "6") + field(THST, "WaitStandby") + field(THVL, "3") + field(TWST, "Disabled") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "Init") + field(ZRVL, "0") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GAFP-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GAFP-iocEC-GN-PSH0PCF.db new file mode 100644 index 0000000..c7cdc88 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GAFP-iocEC-GN-PSH0PCF.db @@ -0,0 +1,146 @@ +record (bi,"EC-GN-P01-GAFP:FMC4310-RV1") +{ + field(DESC, "Reserved for cRIO") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 11) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAFP:FMC4310-RV2") +{ + field(DESC, "Reserved for cRIO") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 12) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAFP:FMC4310-RV3") +{ + field(DESC, "Reserved for cRIO") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 13) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAFP:FMC4310-RV5") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAFP:FMC4310-RV6") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAFP:FMC4310-RV7") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GAFP:FMC4310-RV8") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAFP:FMC4310-YFLT-OC") +{ + field(DESC, "MHVPS OC Detected") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 5) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-GAFP:FMC4310-YFLT-OV") +{ + field(DESC, "MHVPS OV Detected") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 4) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bo,"EC-GN-P01-GAFP:FMC4310-YSTA-GAOP") +{ + field(DESC, "GY1 Beam ON Status") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GAFP:FMC4310-YTRP") +{ + field(DESC, "Interlock from fast protection 1") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 9) bitread") + field(ONAM, "INTERLOCK") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-GAFP:FMC4310-YTRP2") +{ + field(DESC, "Pause signal from Fast Protection 1") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 10) bitread") + field(ONAM, "PAUSE") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GBF-CCPS-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GBF-CCPS-iocEC-GN-PSH0PCF.db new file mode 100644 index 0000000..354029a --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GBF-CCPS-iocEC-GN-PSH0PCF.db @@ -0,0 +1,310 @@ +record (bi,"EC-GN-P01-GBF-CCPS:PSU2320-OUTON-RB") +{ + field(DESC, "GY2 CCPS Output ON status") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getOut CCPS2") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-CCPS:PSU2320-OUTON-SP") +{ + field(DESC, "GY2 CCPS Output ON") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PWX1500ML.proto setOut CCPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-RB") +{ + field(DESC, "GY2 CCPS remote readback") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getRem CCPS2") + field(ONAM, "REM") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(ZNAM, "LOC") +} + +record (bo,"EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-SP") +{ + field(DESC, "GY2 CCPS remote control on") + field(DTYP, "stream") + field(ONAM, "REM") + field(OUT, "@PWX1500ML.proto setRem CCPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(ZNAM, "LOC") +} + +record (bo,"EC-GN-P01-GBF-CCPS:PSU2320-RST") +{ + field(DESC, "GY2 CCPS reset device") + field(DTYP, "stream") + field(OUT, "@PWX1500ML.proto resetDevice CCPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") +} + +record (bi,"EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-RB") +{ + field(DESC, "GY2 CCPS signal source on") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getSourceON CCPS2") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-SP") +{ + field(DESC, "GY2 CCPS signal source on") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PWX1500ML.proto setSourceON CCPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBF-CCPS:PSU2320-STAT") +{ + field(DESC, "CCPS2 is running") + field(ONAM, "ON") + field(SCAN, "Passive") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-CCPS:PSU2320-TR") +{ + field(DESC, "GY2 CCPS in Operation") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-CCPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY2 CCPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-CCPS:STAT-SIMM") +{ + field(DESC, "GY2 CCPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (ai,"EC-GN-P01-GBF-CCPS:PSU2320-CURR-RB") +{ + field(DESC, "GY2 CCPS Output current readback") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "60.0") + field(INP, "@PWX1500ML.proto getCurr CCPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-CCPS:PSU2320-CURR-SP") +{ + field(DESC, "GY2 CCPS Output current setpoint") + field(DRVH, "58.8") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "58.8") + field(LOPR, "0") + field(OUT, "@PWX1500ML.proto setCurr CCPS2") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-CCPS:PSU2320-DCV-RB") +{ + field(DESC, "GY2 CCPS V range readback") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(INP, "@PWX1500ML.proto getVolt CCPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-CCPS:PSU2320-DCV-SP") +{ + field(DESC, "GY2 CCPS V range readback") + field(DRVH, "84") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "84") + field(LOPR, "0") + field(OUT, "@PWX1500ML.proto setVolt CCPS2") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-CCPS:PSU2320-EREF") +{ + field(DESC, "GY2 CCPS voltage setpoint") + field(DRVH, "80") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "80") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-CCPS:PSU2320-EREF-MSP") +{ + field(DESC, "GY2 CCPS voltage manual setpoint") + field(DRVH, "80") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "80") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (stringin,"EC-GN-P01-GBF-CCPS:PSU2320-ERROR") +{ + field(DESC, "GY2 CCPS Error message") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto getError CCPS2") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") +} + +record (stringin,"EC-GN-P01-GBF-CCPS:PSU2320-IDN") +{ + field(DESC, "GY2 CCPS IDN") + field(DTYP, "stream") + field(INP, "@PWX1500ML.proto readDeviceID CCPS2") + field(PINI, "NO") + field(SCAN, "10 second") +} + +record (ai,"EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCI") +{ + field(DESC, "GY2 CCPS Measued DC Current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "58.8") + field(INP, "@PWX1500ML.proto getMeasDCI CCPS2") + field(LOPR, "-58.8") + field(PINI, "NO") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCV") +{ + field(DESC, "GY2 CCPS Measued DC Voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "200") + field(INP, "@PWX1500ML.proto getMeasDCV CCPS2") + field(LOPR, "-200") + field(PINI, "NO") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-CCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-CCPS:STAT-AMP") +{ + field(DESC, "Amplitude") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "3.5") +} + +record (ai,"EC-GN-P01-GBF-CCPS:STAT-FREQ") +{ + field(DESC, "Frequency") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "1") +} + +record (ai,"EC-GN-P01-GBF-CCPS:STAT-OFFS") +{ + field(DESC, "Offset") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "1") +} + +record (calcout,"EC-GN-P01-GBF-CCPS:STAT-OP-CALC") +{ + field(CALC, "(A==1 || B==1 || C==1)?1:0; C:=B; B:=A") + field(DESC, "GYB CCPS operation check") + field(FLNK, "EC-GN-P01-GBF-CCPS:PSU2320-TR") + field(INPA, "EC-GN-P01-GBF-CCPS:STAT-OP-V-DIFF") + field(INPB, "0") + field(INPC, "0") + field(OUT, "EC-GN-P01-GBF-CCPS:PSU2320-TR") + field(SCAN, "Passive") +} + +record (calc,"EC-GN-P01-GBF-CCPS:STAT-OP-V-DIFF") +{ + field(CALC, "(A==1 andand ABS(B-C)>0.1)?1:0; C:=B") + field(DESC, "GYB CCPS operation check") + field(FLNK, "EC-GN-P01-GBF-CCPS:STAT-OP-CALC") + field(INPA, "EC-GN-P01-GBF-CCPS:PSU2320-OUTON-RB") + field(INPB, "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCV PP") + field(SCAN, ".1 second") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GBF-FHPS-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GBF-FHPS-iocEC-GN-PSH0PCF.db new file mode 100644 index 0000000..0b30380 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GBF-FHPS-iocEC-GN-PSH0PCF.db @@ -0,0 +1,424 @@ +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START") +{ + field(DESC, "Auto rampup start command") + field(HIGH, "0.1") + field(ONAM, "Start") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Stop") +} + +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-LOC") +{ + field(DESC, "Local control on") + field(DTYP, "stream") + field(ONAM, "LOC") + field(OUT, "@PCR500LE.proto setLoc FHPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB") +{ + field(DESC, "Output ON readback") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto getOut FHPS2") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-OUTON-SP") +{ + field(DESC, "Output ON command") + field(DTYP, "stream") + field(ONAM, "REM") + field(OUT, "@PCR500LE.proto setOut FHPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-REM") +{ + field(DESC, "Remote control on") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PCR500LE.proto setRem FHPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-RST") +{ + field(DESC, "Reset command") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PCR500LE.proto resetDevice FHPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-RB") +{ + field(DESC, "External control readback") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto getSourceON FHPS2") + field(ONAM, "ON") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-SP") +{ + field(DESC, "External control ON command") + field(DTYP, "stream") + field(ONAM, "ON") + field(OUT, "@PCR500LE.proto setSourceON FHPS2") + field(PINI, "NO") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP") +{ + field(DESC, "GY2 FHPS rampup comp") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY2 FHPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-FHPS:STAT-SIMM") +{ + field(DESC, "GY2 FHPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-ACV-RB") +{ + field(DESC, "Output Voltage readback") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(INP, "@PCR500LE.proto getVolt FHPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-ACV-SP") +{ + field(DESC, "Output voltage setpoint") + field(DRVH, "300") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(LOPR, "0") + field(OUT, "@PCR500LE.proto setVolt FHPS2") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-AUTO-RU-TIME") +{ + field(DESC, "Auto rampup time") + field(DRVH, "100000") + field(DRVL, "10") + field(EGU, "sec") + field(HOPR, "100000") + field(LOPR, "10") + field(PINI, "NO") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "30") +} + +record (mbbo,"EC-GN-P01-GBF-FHPS:PSU2610-AUTO-STAT") +{ + field(DESC, "Auto rampup status") + field(ONST, "IN OPERATION") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(THST, "ERROR") + field(THVL, "3") + field(TWST, "FINISH") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "NOT IN OPERATION") + field(ZRVL, "0") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV") +{ + field(DESC, "Auto rampup target voltage") + field(DRVH, "300") + field(DRVL, "0.0") + field(EGU, "V") + field(HOPR, "60.0") + field(LOPR, "0.0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-CURR-RB") +{ + field(DESC, "Output Current readback") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "5") + field(INP, "@PCR500LE.proto getCurr FHPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-CURR-SP") +{ + field(DESC, "Output current setpoint") + field(DRVH, "5.0") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "5.0") + field(LOPR, "0") + field(OUT, "@PCR500LE.proto setCurr FHPS2") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-EREF") +{ + field(DESC, "GY2 FHPS voltage setpoint") + field(DRVH, "150") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "150") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-EREF-MSP") +{ + field(DESC, "GY2 FHPS voltage manual setpoint") + field(DRVH, "150") + field(DRVL, "0") + field(EGU, "V") + field(HOPR, "150") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (stringin,"EC-GN-P01-GBF-FHPS:PSU2610-ERROR") +{ + field(DESC, "Error code") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto getError FHPS2") + field(PINI, "NO") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-FRQ-RB") +{ + field(DESC, "Output frequency readback") + field(DTYP, "stream") + field(EGU, "Hz") + field(HOPR, "1000") + field(INP, "@PCR500LE.proto getFreq FHPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-FHPS:PSU2610-FRQ-SP") +{ + field(DESC, "Output frequency setpoint") + field(DRVH, "999.9") + field(DRVL, "1") + field(DTYP, "stream") + field(EGU, "Hz") + field(HOPR, "1000") + field(LOPR, "0") + field(OUT, "@PCR500LE.proto setFreq FHPS2") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "1") +} + +record (stringin,"EC-GN-P01-GBF-FHPS:PSU2610-IDN") +{ + field(DESC, "IDN") + field(DTYP, "stream") + field(INP, "@PCR500LE.proto readDeviceID FHPS2") + field(PINI, "NO") + field(SCAN, "10 second") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACI") +{ + field(DESC, "Measued AC Current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "5.0") + field(INP, "@PCR500LE.proto getMeasACI FHPS2") + field(LOPR, "-5.0") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACP") +{ + field(DESC, "Measued AC Power") + field(DTYP, "stream") + field(EGU, "W") + field(HOPR, "500") + field(INP, "@PCR500LE.proto getMeasACP FHPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV") +{ + field(DESC, "Measued AC Voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "300") + field(INP, "@PCR500LE.proto getMeasACV FHPS2") + field(LOPR, "-300") + field(PINI, "NO") + field(PREC, "1") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF-FHPS:PSU2610-MEAS-FRQ") +{ + field(DESC, "Measued Frequency") + field(DTYP, "stream") + field(EGU, "Hz") + field(HOPR, "1000") + field(INP, "@PCR500LE.proto getMeasACF FHPS2") + field(LOPR, "0") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-FHPS:STAT-SIMM") + field(VAL, "1") +} + +record (calcout,"EC-GN-P01-GBF-FHPS:STAT-AUTO-MODE-SET") +{ + field(CALC, "A==1?0:1") + field(DESC, "GYB FHPS rampup comp off") + field(INPA, "EC-GN-P01-GBF:STAT-SM") + field(OOPT, "Transition To Zero") + field(OUT, "EC-GN-P01-GBF-FHPS:STAT-MANM PP") + field(SCAN, "1 second") +} + +record (waveform,"EC-GN-P01-GBF-FHPS:STAT-PREP-WF") +{ + field(DESC, "GY2 FHPS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CALC") +{ + field(CALC, "A==2?1:0") + field(DESC, "GYB FHPS rampup comp check") + field(INPA, "EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CMP") + field(OOPT, "When Non-zero") + field(OUT, "EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP PP") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CMP") +{ + field(CALC, "(ABS(A-B)<0.1*B)?2:((C > D)?1:0);D:=C") + field(DESC, "GYB FHPS rampup stat check") + field(FLNK, "EC-GN-P01-GBF-FHPS:STAT-RAMPUP-CALC") + field(INPA, "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV") + field(INPB, "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV") + field(INPC, "EC-GN-P01-GBF-FHPS:PSU2610-EREF") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GBF-FHPS:STAT-RAMPUP-OFF") +{ + field(CALC, "A==0?0:1") + field(DESC, "GYB FHPS rampup comp off") + field(INPA, "EC-GN-P01-GPS:PLC4110-YTS-ST1R") + field(OOPT, "When Zero") + field(OUT, "EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP PP") + field(SCAN, "1 second") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GBF-GCPS-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GBF-GCPS-iocEC-GN-PSH0PCF.db new file mode 100644 index 0000000..ec4fc1c --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GBF-GCPS-iocEC-GN-PSH0PCF.db @@ -0,0 +1,273 @@ +record (bo,"EC-GN-P01-GBF-GCPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY2 GCPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-GCPS:STAT-SIMM") +{ + field(DESC, "GY2 GCPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (mbbi,"EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB") +{ + field(DESC, "GY2 GCPS read act") + field(DTYP, "stream") + field(FRST, "ZERO") + field(FRSV, "NO_ALARM") + field(FRVL, "4") + field(INP, "@JASTEC-SCMPS.proto readActivity GC2") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") + field(THST, "FLAT TOP") + field(THSV, "NO_ALARM") + field(THVL, "3") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP") +{ + field(DESC, "GY2 GCPS set ACT") + field(DTYP, "stream") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(OUT, "@JASTEC-SCMPS.proto setActivity GC2") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MI") +{ + field(DESC, "GY2 GCPS ACT set to Marte") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MO") +{ + field(DESC, "GY2 GCPS ACT Marte outputs") + field(FLNK, "EC-GN-P01-GBF-GCPS:STAT-ACT-SP-CALC") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (ai,"EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON") +{ + field(DESC, "GY2 GCPS monitored current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "125") + field(INP, "@JASTEC-SCMPS.proto readMeasCurrent GC2") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") +} + +record (waveform,"EC-GN-P01-GBF-GCPS:PSU2130-ERR") +{ + field(DESC, "GY2 GCPS read error") + field(DTYP, "stream") + field(INP, "@JASTEC-SCMPS.proto readErrStat GC2") + field(NELM, "15") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-GCPS:PSU2130-SWP-LIM") +{ + field(DESC, "GY2 GCPS read sweep limit") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readSweepLim GC2") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-GCPS:PSU2130-SWP-RB") +{ + field(DESC, "GY2 GCPS read targ sweep rate") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readTargSweep GC2") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-RB") +{ + field(DESC, "GY2 GCPS read target current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "120") + field(INP, "@JASTEC-SCMPS.proto readTargCurrent GC2") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET") +{ + field(DESC, "GY2 GCPS set target current") + field(DRVH, "120") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP") + field(HOPR, "125") + field(LOPR, "0") + field(OUT, "@JASTEC-SCMPS.proto setCurrent GC2") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MI") +{ + field(DESC, "GY2 GCPS target current input to Marte") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MO") +{ + field(DESC, "GY2 GCPS target current Marte outputs") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GBF-GCPS:STAT-TRG-CURR-SET-CALC") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-GCPS:PSU2130-TRG-SWPR-SET") +{ + field(DESC, "GY2 GCPS set target swwp rate") + field(DRVH, "5.0") + field(DRVL, "0.01") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(LOPR, "0.01") + field(OUT, "@JASTEC-SCMPS.proto setSweep GC2") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") + field(VAL, "1") +} + +record (ai,"EC-GN-P01-GBF-GCPS:PSU2130-VOLT-MON") +{ + field(DESC, "GY2 GCPS monitored voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "10") + field(INP, "@JASTEC-SCMPS.proto readMeasVoltage GC2") + field(LOPR, "-10") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-GCPS:STAT-SIMM") +} + +record (calcout,"EC-GN-P01-GBF-GCPS:STAT-ACT-SP-CALC") +{ + field(CALC, "A") + field(DESC, "GCPS#2 state set by Marte") + field(INPA, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-GBF-GCPS:STAT-PREP-WF") +{ + field(DESC, "GY2 GCPS prepro schedule") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-GBF-GCPS:STAT-TRG-CURR-SET-CALC") +{ + field(CALC, "A") + field(DESC, "GCPS#2 current set by Mate") + field(INPA, "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET PP") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GBF-MCPS-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GBF-MCPS-iocEC-GN-PSH0PCF.db new file mode 100644 index 0000000..d766295 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GBF-MCPS-iocEC-GN-PSH0PCF.db @@ -0,0 +1,306 @@ +record (bo,"EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP") +{ + field(DESC, "GY2 SCM rampup comp") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-MCPS:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY2 MCPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF-MCPS:STAT-SIMM") +{ + field(DESC, "GY2 MCPS Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (mbbi,"EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB") +{ + field(DESC, "GY2 MCPS read act") + field(DTYP, "stream") + field(FRST, "ZERO") + field(FRSV, "NO_ALARM") + field(FRVL, "4") + field(INP, "@JASTEC-SCMPS.proto readActivity MC2") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") + field(THST, "FLAT TOP") + field(THSV, "NO_ALARM") + field(THVL, "3") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP") +{ + field(DESC, "GY2 MCPS set ACT") + field(DTYP, "stream") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(OUT, "@JASTEC-SCMPS.proto setActivity MC2") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MI") +{ + field(DESC, "GY2 MCPS ACT set to Marte") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MO") +{ + field(DESC, "GY2 MCPS ACT Marte outputs") + field(FLNK, "EC-GN-P01-GBF-MCPS:STAT-ACT-SP-CALC") + field(ONST, "SET") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "NO") + field(SCAN, "Passive") + field(TWST, "DOWN") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(ZRST, "HOLD") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (ai,"EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON") +{ + field(DESC, "GY2 MCPS monitored current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "125") + field(INP, "@JASTEC-SCMPS.proto readMeasCurrent MC2") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") +} + +record (waveform,"EC-GN-P01-GBF-MCPS:PSU2120-ERR") +{ + field(DESC, "GY2 MCPS read error") + field(DTYP, "stream") + field(INP, "@JASTEC-SCMPS.proto readErrStat MC2") + field(NELM, "15") + field(PINI, "YES") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-MCPS:PSU2120-SWP-LIM") +{ + field(DESC, "GY2 MCPS read sweep limit") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readSweepLim MC2") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-MCPS:PSU2120-SWP-RB") +{ + field(DESC, "GY2 MCPS read targ sweep rate") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(INP, "@JASTEC-SCMPS.proto readTargSweep MC2") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") +} + +record (ai,"EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-RB") +{ + field(DESC, "GY2 MCPS read target current") + field(DTYP, "stream") + field(EGU, "A") + field(HOPR, "120") + field(INP, "@JASTEC-SCMPS.proto readTargCurrent MC2") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") +} + +record (ao,"EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET") +{ + field(DESC, "GY2 MCPS set target current") + field(DRVH, "120") + field(DRVL, "0") + field(DTYP, "stream") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP") + field(HOPR, "125") + field(LOPR, "0") + field(OUT, "@JASTEC-SCMPS.proto setCurrent MC2") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MI") +{ + field(DESC, "GY2 MCPS target current input to Marte") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MO") +{ + field(DESC, "GY2 MCPS target current Marte outputs") + field(DRVH, "120") + field(DRVL, "-120") + field(EGU, "A") + field(FLNK, "EC-GN-P01-GBF-MCPS:STAT-TRG-CURR-SET-CALC") + field(HOPR, "125") + field(LOPR, "-125") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-GBF-MCPS:PSU2120-TRG-SWPR-SET") +{ + field(DESC, "GY2 MCPS set target swwp rate") + field(DRVH, "5.0") + field(DRVL, "0.01") + field(DTYP, "stream") + field(EGU, "A/min") + field(HOPR, "99.99") + field(LOPR, "0.01") + field(OUT, "@JASTEC-SCMPS.proto setSweep MC2") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") + field(VAL, "1.69") +} + +record (ai,"EC-GN-P01-GBF-MCPS:PSU2120-VOLT-MON") +{ + field(DESC, "GY2 MCPS monitored voltage") + field(DTYP, "stream") + field(EGU, "V") + field(HOPR, "10") + field(INP, "@JASTEC-SCMPS.proto readMeasVoltage MC2") + field(LOPR, "-10") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "1 second") + field(SIML, "EC-GN-P01-GBF-MCPS:STAT-SIMM") +} + +record (calcout,"EC-GN-P01-GBF-MCPS:STAT-ACT-SP-CALC") +{ + field(CALC, "A") + field(DESC, "MCPS#2 state set by Marte") + field(INPA, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-GBF-MCPS:STAT-PREP-WF") +{ + field(DESC, "GY2 MCPS prepro schedule") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-GBF-MCPS:STAT-RAMPUP-CMP") +{ + field(CALC, "(A==3 andand B==3)?1:0") + field(DESC, "GYB SMCPS rampup check") + field(FLNK, "EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP") + field(INPA, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB") + field(INPB, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB") + field(OOPT, "When Non-zero") + field(OUT, "EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GBF-MCPS:STAT-RAMPUP-OFF") +{ + field(CALC, "A==0?0:1") + field(DESC, "GYB MC GC rampup comp off") + field(INPA, "EC-GN-P01-GPS:PLC4110-YTS-ST1R") + field(OOPT, "When Zero") + field(OUT, "EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP PP") + field(SCAN, "1 second") +} + +record (calcout,"EC-GN-P01-GBF-MCPS:STAT-TRG-CURR-SET-CALC") +{ + field(CALC, "A") + field(DESC, "MCPS#2 current set by Marte") + field(INPA, "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MO") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET PP") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GBF-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GBF-iocEC-GN-PSH0PCF.db new file mode 100644 index 0000000..4ff855f --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GBF-iocEC-GN-PSH0PCF.db @@ -0,0 +1,389 @@ +record (bi,"EC-GN-P01-GBF:DIO4900-YON") +{ + field(DESC, "GY3 External trigger") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 22) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF:STAT-AI-SIMM") +{ + field(DESC, "GY2 AI Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GBF:STAT-AO-SIMM") +{ + field(DESC, "GY2 AO Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GBF:STAT-CSV-LOAD") +{ + field(DESC, "File load trigger") + field(HIGH, "0.1") + field(ONAM, "Loading") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Load") +} + +record (bo,"EC-GN-P01-GBF:STAT-CSV-LOADED") +{ + field(DESC, "File load status") + field(ONAM, "Loaded") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Loading") +} + +record (bo,"EC-GN-P01-GBF:STAT-DI-SIMM") +{ + field(DESC, "GY2 DI Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GBF:STAT-DO-SIMM") +{ + field(DESC, "GY2 DO Simulation Mode SW") + field(ONAM, "YES") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-GBF:STAT-DT-SHOTLEN-EGU") +{ + field(DESC, "GY2 egu of shot length") + field(FLNK, "EC-GN-P01-GBF:STAT-DT-SHOTLEN-CALC") + field(ONAM, "s") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "ms") +} + +record (bo,"EC-GN-P01-GBF:STAT-MST-TRIG") +{ + field(DESC, "GY2 Master trigger") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF:STAT-PREP-MODE") +{ + field(DESC, "GY2 Pre-Pro mode ON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF:STAT-SHORT-PULSE") +{ + field(DESC, "GY2 Short Pulse Mode") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBF:STAT-TRIG-SOUR") +{ + field(DESC, "GY2 External Trigger Mode SW") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (ai,"EC-GN-P01-GBF:MOE2810-ET") +{ + field(DESC, "GY2 Arc detect signal 1") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GBF:MOE2810-ET-WF") +{ + field(DESC, "GY2 Arc detect signal 1") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GBF:MOE2820-ET") +{ + field(DESC, "GY2 Arc detect signal 2") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GBF:MOE2820-ET-WF") +{ + field(DESC, "GY2 Arc detect signal 2") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GBF:MOE2830-ET") +{ + field(DESC, "GY2 Arc detect signal 3") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GBF:MOE2830-ET-WF") +{ + field(DESC, "GY2 Arc detect signal 3") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GBF:MRF2910-ET") +{ + field(DESC, "GY2 RF Signal") + field(EGU, "V") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-GBF:MRF2910-ET-WF") +{ + field(DESC, "GY2 RF Signal") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-GBF:STAT-BEAMON-TIME") +{ + field(DESC, "GY2 Beam ON time") + field(EGU, "us") + field(HOPR, "3600000000") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (mbbo,"EC-GN-P01-GBF:STAT-CSV-ERR") +{ + field(DESC, "File load error status") + field(FRST, "Format error") + field(FRSV, "MAJOR") + field(FRVL, "4") + field(FVST, "Out of range") + field(FVSV, "MAJOR") + field(FVVL, "5") + field(ONST, "Successfully loaded") + field(ONSV, "NO_ALARM") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(THST, "Empty data") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "Failed to open") + field(TWSV, "MAJOR") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "Not loaded yet") + field(ZRSV, "MINOR") + field(ZRVL, "0") +} + +record (stringout,"EC-GN-P01-GBF:STAT-CSV-NAME") +{ + field(DESC, "CSV file name") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "shot000000") +} + +record (ai,"EC-GN-P01-GBF:STAT-DT-SHOTLEN") +{ + field(DESC, "GY2 Shot length") + field(EGU, "us") + field(HOPR, "3600000000") + field(LOPR, "100") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "1000000") +} + +record (calcout,"EC-GN-P01-GBF:STAT-DT-SHOTLEN-CALC") +{ + field(CALC, "(!A)?1000*B:1000000*B") + field(DESC, "GY2 shot length convert") + field(FLNK, "EC-GN-P01-GBF:STAT-DT-SHOTLEN") + field(INPA, "EC-GN-P01-GBF:STAT-DT-SHOTLEN-EGU") + field(INPB, "EC-GN-P01-GBF:STAT-DT-SHOTLEN-DAM") + field(OUT, "EC-GN-P01-GBF:STAT-DT-SHOTLEN") + field(SCAN, "Passive") +} + +record (ao,"EC-GN-P01-GBF:STAT-DT-SHOTLEN-DAM") +{ + field(DESC, "GY2 shot length without unit") + field(DRVH, "3600") + field(DRVL, "0") + field(FLNK, "EC-GN-P01-GBF:STAT-DT-SHOTLEN-CALC") + field(HOPR, "3600") + field(LOPR, "0") + field(PINI, "NO") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-GBF:STAT-ELAPSED") +{ + field(DESC, "GY2 Elapsed time") + field(EGU, "us") + field(HOPR, "4000000000") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (longin,"EC-GN-P01-GBF:STAT-PREHEAT-TIME") +{ + field(DESC, "Pre-heating time") + field(HOPR, "999999") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (waveform,"EC-GN-P01-GBF:STAT-PREP-TIME-WF") +{ + field(DESC, "GY2 prepro time schedule") + field(EGU, "ms") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "0") + field(SCAN, "Passive") +} + +record (fanout,"EC-GN-P01-GBF:STAT-SHOT-FLNK1") +{ + field(DESC, "GY2 fanout1 to AI waveform signal") +} + +record (fanout,"EC-GN-P01-GBF:STAT-SHOT-FLNK2") +{ + field(DESC, "GY2 fanout2 to AI waveform signal") +} + +record (longin,"EC-GN-P01-GBF:STAT-SHOT-ID") +{ + field(DESC, "GY2 shot ID") + field(HOPR, "999999") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (calcout,"EC-GN-P01-GBF:STAT-SHOT-PLOT") +{ + field(CALC, "A andand (B >= C)") + field(DESC, "GY2 judge to plot measured values") + field(INPA, "EC-GN-P01-GPS:PLC4110-YTS-ST3R") + field(INPB, "EC-GN-P01-GBF:STAT-BEAMON-TIME") + field(INPC, "6000000") + field(OOPT, "Transition To Non-zero") + field(OUT, "EC-GN-P01-GBF:STAT-SHOT-FLNK1 PP") + field(SCAN, ".1 second") +} + +record (mbbi,"EC-GN-P01-GBF:STAT-SM") +{ + field(DESC, "GY#2 state machine") + field(EIST, "WaitHVON_SDN") + field(EIVL, "8") + field(FLNK, "EC-GN-P01-GBF:STAT-SHOT-PLOT") + field(FRST, "WaitReady") + field(FRVL, "4") + field(FVST, "WaitPermit") + field(FVVL, "5") + field(NIST, "WaitHVON_SDN_PREP") + field(NIVL, "9") + field(ONST, "Error") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(SVST, "WaitHVON_PREP") + field(SVVL, "7") + field(SXST, "WaitHVON") + field(SXVL, "6") + field(THST, "WaitStandby") + field(THVL, "3") + field(TWST, "Disabled") + field(TWVL, "2") + field(VAL, "0") + field(ZRST, "Init") + field(ZRVL, "0") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GBFP-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GBFP-iocEC-GN-PSH0PCF.db new file mode 100644 index 0000000..0776c60 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GBFP-iocEC-GN-PSH0PCF.db @@ -0,0 +1,120 @@ +record (bi,"EC-GN-P01-GBFP:FMC4310-RV1") +{ + field(DESC, "Reserved for cRIO") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 11) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBFP:FMC4310-RV2") +{ + field(DESC, "Reserved for cRIO") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 12) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBFP:FMC4310-RV3") +{ + field(DESC, "Reserved for cRIO") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 13) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBFP:FMC4310-RV5") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBFP:FMC4310-RV6") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBFP:FMC4310-RV7") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBFP:FMC4310-RV8") +{ + field(DESC, "Reserved for cRIO") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GBFP:FMC4310-YSTA-GBOP") +{ + field(DESC, "GY2 Beam ON Status") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GBFP:FMC4310-YTRP") +{ + field(DESC, "Interlock from fast protection 2") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 9) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-GBFP:FMC4310-YTRP2") +{ + field(DESC, "Pause signal from fast protection 2") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 10) bitread") + field(ONAM, "PAUSE") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GPF-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GPF-iocEC-GN-PSH0PCF.db new file mode 100644 index 0000000..9fe5dd3 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GPF-iocEC-GN-PSH0PCF.db @@ -0,0 +1,349 @@ +record (bo,"EC-GN-P01-GPF:PCF4210-CTRP") +{ + field(DESC, "Fast Controller Fault") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:PCF4210-YTS-GA1") +{ + field(DESC, "GY1 HV Armed") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:PCF4210-YTS-GA2") +{ + field(DESC, "GY1 HV Injection") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:PCF4210-YTS-GA3") +{ + field(DESC, "GY1 in RFON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:PCF4210-YTS-GB1") +{ + field(DESC, "GY2 HV Armed") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:PCF4210-YTS-GB2") +{ + field(DESC, "GY2 HV Injection") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:PCF4210-YTS-GB3") +{ + field(DESC, "GY2 RFON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPF:PSU0000-YSTA-MOD") +{ + field(DESC, "MHVPS modulation en/disable from ECPC") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 8) bitread") + field(ONAM, "ENABLE") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "DISABLE") +} + +record (bo,"EC-GN-P01-GPF:STAT-DAQ-CONF-STAT") +{ + field(DESC, "DAQ config state") + field(ONAM, "Ready") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "Not ready") +} + +record (bo,"EC-GN-P01-GPF:STAT-DAQ-RECONF") +{ + field(DESC, "Reset and configure DAQ") + field(HIGH, "0.1") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:STAT-DAQ-SW-TRIG") +{ + field(DESC, "software trigger for DAQ start") + field(HIGH, "0.1") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPF:STAT-RST-FLT") +{ + field(DESC, "Reset Fault command") + field(HIGH, "0.1") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (ao,"EC-GN-P01-GPF:STAT-DAQ-LEN") +{ + field(DESC, "DAQ sampling time length") + field(DRVH, "3600000") + field(DRVL, "0.01") + field(EGU, "ms") + field(HOPR, "3600000") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "1000.0") +} + +record (ao,"EC-GN-P01-GPF:STAT-DAQ-LEN-RB") +{ + field(DESC, "DAQ sampling time length readback") + field(DRVH, "3600000") + field(DRVL, "0.01") + field(EGU, "ms") + field(HOPR, "3600000") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "1000.0") +} + +record (mbbo,"EC-GN-P01-GPF:STAT-DAQ-MODE") +{ + field(DESC, "DAQ mode") + field(FRST, "Reference") + field(FRVL, "4") + field(ONST, "Finite") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(THST, "Continuous") + field(THVL, "3") + field(TWST, "Retriggerable") + field(TWVL, "2") + field(VAL, "3") + field(ZRST, "Software_triggered") + field(ZRVL, "0") +} + +record (mbbo,"EC-GN-P01-GPF:STAT-DAQ-MODE-RB") +{ + field(DESC, "DAQ mode readback") + field(FRST, "Reference") + field(FRVL, "4") + field(ONST, "Finite") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(THST, "Continuous") + field(THVL, "3") + field(TWST, "Retriggerable") + field(TWVL, "2") + field(VAL, "3") + field(ZRST, "Software_triggered") + field(ZRVL, "0") +} + +record (ao,"EC-GN-P01-GPF:STAT-DAQ-PUB-DLY") +{ + field(DESC, "DAN publish delay") + field(DRVH, "1000") + field(DRVL, "0.1") + field(EGU, "ms") + field(HOPR, "1000") + field(LOPR, "0.1") + field(PINI, "YES") + field(PREC, "1") + field(SCAN, "Passive") + field(VAL, "10.0") +} + +record (ao,"EC-GN-P01-GPF:STAT-DAQ-PUB-DLY-RB") +{ + field(DESC, "DAN publish delay") + field(DRVH, "1000") + field(DRVL, "0.1") + field(EGU, "ms") + field(HOPR, "1000") + field(LOPR, "0.1") + field(PINI, "YES") + field(PREC, "1") + field(SCAN, "Passive") + field(VAL, "10.0") +} + +record (longout,"EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE") +{ + field(DESC, "sampling rate") + field(DRVH, "1000000000") + field(DRVL, "1") + field(HOPR, "100000000") + field(LOPR, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1000") +} + +record (longout,"EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE-RB") +{ + field(DESC, "sampling rate readback") + field(DRVH, "1000000000") + field(DRVL, "1") + field(HOPR, "100000000") + field(LOPR, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1000") +} + +record (ao,"EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY") +{ + field(DESC, "DAQ start delay") + field(DRVH, "3600000") + field(DRVL, "0.01") + field(EGU, "ms") + field(HOPR, "3600000") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "1.0") +} + +record (ao,"EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY-RB") +{ + field(DESC, "DAQ start delay readback") + field(DRVH, "3600000") + field(DRVL, "0.01") + field(EGU, "ms") + field(HOPR, "3600000") + field(LOPR, "0.01") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "1.0") +} + +record (mbbo,"EC-GN-P01-GPF:STAT-DAQ-STAT") +{ + field(DESC, "DAQ operation state") + field(FRSV, "NO_ALARM") + field(ONST, "Waiting trigger") + field(ONVL, "1") + field(PINI, "YES") + field(SCAN, "Passive") + field(THST, "Error") + field(THSV, "MAJOR") + field(THVL, "3") + field(TWST, "Aquiring") + field(TWSV, "NO_ALARM") + field(TWVL, "2") + field(VAL, "3") + field(ZRST, "Not ready") + field(ZRSV, "NO_ALARM") + field(ZRVL, "0") +} + +record (longin,"EC-GN-P01-GPF:STAT-MD1-LIM") +{ + field(DESC, "MD1 Pulse Len Limit") + field(HOPR, "500000000") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "10000") +} + +record (longin,"EC-GN-P01-GPF:STAT-MD2-LIM") +{ + field(DESC, "MD2 Pulse Len Limit") + field(HOPR, "500000000") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "100000") +} + +record (longin,"EC-GN-P01-GPF:STAT-MD3-LIM") +{ + field(DESC, "MD3 Pulse Len Limit") + field(HOPR, "500000000") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "30000000") +} + +record (longin,"EC-GN-P01-GPF:STAT-MD4-LIM") +{ + field(DESC, "MD4 Pulse Len Limit") + field(HOPR, "500000000") + field(LOPR, "0") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "300000000") +} + +record (ai,"EC-GN-P01-GPF:STAT-RDY-TOUT") +{ + field(DESC, "Gyrotron operation ready timeout") + field(EGU, "s") + field(HOPR, "600") + field(LOPR, "1") + field(PINI, "YES") + field(PREC, "1") + field(SCAN, "Passive") + field(VAL, "30.0") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GPS-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GPS-iocEC-GN-PSH0PCF.db new file mode 100644 index 0000000..5763fa5 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-GPS-iocEC-GN-PSH0PCF.db @@ -0,0 +1,230 @@ +record (bi,"EC-GN-P01-GPS:PLC4110-CON-GY1PRM") +{ + field(DESC, "GY1 Operation Permission") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 18) bitread") + field(ONAM, "PERMITED") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-CON-GY2PRM") +{ + field(DESC, "GY2 Operation Permission") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 18) bitread") + field(ONAM, "PERMITED") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-CON-OPGY1") +{ + field(DESC, "GY1 Selection") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 19) bitread") + field(ONAM, "SELECTED") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-CON-OPGY2") +{ + field(DESC, "GY2 Selection") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 19) bitread") + field(ONAM, "SELECTED") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-RV1") +{ + field(DESC, "Reserved for PLC") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 21) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPS:PLC4110-RV2") +{ + field(DESC, "Reserved for PLC") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-GPS:PLC4110-RV3") +{ + field(DESC, "Reserved for PLC") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YON-CCPS1") +{ + field(DESC, "GY1 CCPS Start Operation") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 20) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YON-CCPS2") +{ + field(DESC, "GY2 CCPS Start Operation") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 20) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YSTA-MPSS") +{ + field(DESC, "Sync/Asynchronous Flag") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 21) bitread") + field(ONAM, "SYNC") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "ASYNC") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTRP") +{ + field(DESC, "Interlock signal from PLC") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 14) bitread") + field(ONAM, "INTERLOCK") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-MD1") +{ + field(DESC, "Operation Mode 1") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 14) bitread") + field(ONAM, "VSHORT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-MD2") +{ + field(DESC, "Operation Mode 2") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 15) bitread") + field(ONAM, "SHORT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-MD3") +{ + field(DESC, "Operation Mode 3") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 16) bitread") + field(ONAM, "MIDDLE") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-MD4") +{ + field(DESC, "Operation Mode 4") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 17) bitread") + field(ONAM, "LONG") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-ST1R") +{ + field(DESC, "PLC STANDBY state") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 15) bitread") + field(ONAM, "STANDBY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-ST2R") +{ + field(DESC, "PLC READY state") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 16) bitread") + field(ONAM, "READY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-GPS:PLC4110-YTS-ST3R") +{ + field(DESC, "PLC ON state") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 17) bitread") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-PA1F-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-PA1F-iocEC-GN-PSH0PCF.db new file mode 100644 index 0000000..3d11cb5 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-PA1F-iocEC-GN-PSH0PCF.db @@ -0,0 +1,206 @@ +record (bo,"EC-GN-P01-PA1F:PSU3000-CON-HV") +{ + field(DESC, "GY1 APS HVON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PA1F:PSU3000-CON-SW") +{ + field(DESC, "GY1 APS HV SWON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PA1F:PSU3000-CTRP") +{ + field(DESC, "GY1 APS Shutdonw request") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-PA1F:PSU3000-YFLT") +{ + field(DESC, "GY1 APS Fault") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 1) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-PA1F:PSU3000-YSTA") +{ + field(DESC, "GY1 APS Ready") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 0) bitread") + field(ONAM, "READY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-PA1F:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 APS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (ao,"EC-GN-P01-PA1F:PSU3000-EREF") +{ + field(DESC, "GY1 APS voltage setpoint") + field(DRVH, "10") + field(DRVL, "-20") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "10") + field(LOPR, "-20") + field(OUT, "@asyn(ni6368_1, 1) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PA1F:PSU3000-EREF-MSP") +{ + field(DESC, "GY1 APS voltage manual setpoint") + field(DRVH, "10") + field(DRVL, "-20") + field(EGU, "kV") + field(HOPR, "10") + field(LOPR, "-20") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PA1F:PSU3000-EREF-P") +{ + field(ASLO, "2") + field(DESC, "GY1 APS P-voltage setpoint") + field(DRVH, "0") + field(DRVL, "-20") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "10") + field(LOPR, "-20") + field(OUT, "@asyn(ni6368_1, 2) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-PA1F:PSU3000-ET") +{ + field(DESC, "GY1 APS Measured Volatege") + field(EGU, "kV") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PA1F:PSU3000-ET-WF") +{ + field(DESC, "GY1 APS Measured Volatege") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PA1F:PSU3000-IT") +{ + field(DESC, "GY1 APS Measued Current") + field(EGU, "A") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PA1F:PSU3000-IT-WF") +{ + field(DESC, "GY1 APS Measued Current") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PA1F:STAT-DT-HVON") +{ + field(DESC, "Time diff to GY1 APS Gate ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "500000") +} + +record (ai,"EC-GN-P01-PA1F:STAT-DT-SWON") +{ + field(DESC, "Time diff to GY1 APS SW ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "600000") +} + +record (calcout,"EC-GN-P01-PA1F:STAT-EREF-CONV") +{ + field(CALC, "A>0?A:((A>-20)?A/2:-10)") + field(DESC, "GYA APS engineer value conversion") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-PA1F:PSU3000-EREF PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-PA1F:STAT-PREP-WF") +{ + field(DESC, "GY1 APS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-PA2F-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-PA2F-iocEC-GN-PSH0PCF.db new file mode 100644 index 0000000..6a74042 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-PA2F-iocEC-GN-PSH0PCF.db @@ -0,0 +1,206 @@ +record (bo,"EC-GN-P01-PA2F:PSU4000-CON-HV") +{ + field(DESC, "GY2 APS HVON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PA2F:PSU4000-CON-SW") +{ + field(DESC, "GY2 APS HV SWON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PA2F:PSU4000-CTRP") +{ + field(DESC, "GY2 APS Shutdown request") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-PA2F:PSU4000-YFLT") +{ + field(DESC, "GY2 APS Fault") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 1) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-PA2F:PSU4000-YSTA") +{ + field(DESC, "GY2 APS Ready") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 0) bitread") + field(ONAM, "READY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-PA2F:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY2 APS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (ao,"EC-GN-P01-PA2F:PSU4000-EREF") +{ + field(DESC, "GY2 APS voltage setpoint") + field(DRVH, "10") + field(DRVL, "-20") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "10") + field(LOPR, "-20") + field(OUT, "@asyn(ni6368_0, 1) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PA2F:PSU4000-EREF-MSP") +{ + field(DESC, "GY2 APS voltage manual setpoint") + field(DRVH, "10") + field(DRVL, "-20") + field(EGU, "kV") + field(HOPR, "10") + field(LOPR, "-20") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PA2F:PSU4000-EREF-P") +{ + field(ASLO, "2") + field(DESC, "GY2 APS P-voltage setpoint") + field(DRVH, "0") + field(DRVL, "-20") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "10") + field(LOPR, "-20") + field(OUT, "@asyn(ni6368_0, 2) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-PA2F:PSU4000-ET") +{ + field(DESC, "GY2 APS Measured Volatege") + field(EGU, "kV") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PA2F:PSU4000-ET-WF") +{ + field(DESC, "GY2 APS Measured Volatege") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PA2F:PSU4000-IT") +{ + field(DESC, "GY2 APS Measued Current") + field(EGU, "A") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PA2F:PSU4000-IT-WF") +{ + field(DESC, "GY2 APS Measued Current") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PA2F:STAT-DT-HVON") +{ + field(DESC, "Time diff to GY2 APS Gate ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "500000") +} + +record (ai,"EC-GN-P01-PA2F:STAT-DT-SWON") +{ + field(DESC, "Time diff to GY2 APS SW ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "600000") +} + +record (calcout,"EC-GN-P01-PA2F:STAT-EREF-CONV") +{ + field(CALC, "A>0?A:((A>-20)?A/2:-10)") + field(DESC, "GYB APS engineer value conversion") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-PA2F:PSU4000-EREF PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-PA2F:STAT-PREP-WF") +{ + field(DESC, "GY2 APS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-PB1F-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-PB1F-iocEC-GN-PSH0PCF.db new file mode 100644 index 0000000..66c756d --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-PB1F-iocEC-GN-PSH0PCF.db @@ -0,0 +1,180 @@ +record (bo,"EC-GN-P01-PB1F:PSU1000-CON-HV") +{ + field(DESC, "GY1 BPS HVON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PB1F:PSU1000-CON-SW") +{ + field(DESC, "GY1 BPS HV SWON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PB1F:PSU1000-CTRP") +{ + field(DESC, "GY1 BPS Shutdonw request") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-PB1F:PSU1000-YFLT") +{ + field(DESC, "GY1 BPS Fault") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 3) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-PB1F:PSU1000-YSTA") +{ + field(DESC, "GY1 BPS Ready") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 2) bitread") + field(ONAM, "READY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-PB1F:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 BPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (ao,"EC-GN-P01-PB1F:PSU1000-EREF") +{ + field(ASLO, "4") + field(DESC, "GY1 BPS voltage setpoint") + field(DRVH, "40") + field(DRVL, "0") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "40") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 0) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PB1F:PSU1000-EREF-MSP") +{ + field(DESC, "GY1 BPS voltage manual setpoint") + field(DRVH, "40") + field(DRVL, "0") + field(EGU, "kV") + field(HOPR, "40") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-PB1F:PSU1000-ET") +{ + field(DESC, "GY1 BPS Measured Voltage") + field(EGU, "kV") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PB1F:PSU1000-ET-WF") +{ + field(DESC, "GY1 BPS Measured Voltage") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PB1F:PSU1000-IT") +{ + field(DESC, "GY1 BPS Measured Current") + field(EGU, "A") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PB1F:PSU1000-IT-WF") +{ + field(DESC, "GY1 BPS Measured Current") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PB1F:STAT-DT-HVON") +{ + field(DESC, "Time diff to GY1 BPS Gate ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "500000") +} + +record (ai,"EC-GN-P01-PB1F:STAT-DT-SWON") +{ + field(DESC, "Time diff to GY1 BPS SW ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "550000") +} + +record (waveform,"EC-GN-P01-PB1F:STAT-PREP-WF") +{ + field(DESC, "GY1 BPS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-PB2F-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-PB2F-iocEC-GN-PSH0PCF.db new file mode 100644 index 0000000..72c14a3 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-PB2F-iocEC-GN-PSH0PCF.db @@ -0,0 +1,180 @@ +record (bo,"EC-GN-P01-PB2F:PSU2000-CON-HV") +{ + field(DESC, "GY2 BPS HVON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PB2F:PSU2000-CON-SW") +{ + field(DESC, "GY2 BPS HV SWON") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PB2F:PSU2000-CTRP") +{ + field(DESC, "GY2 BPS Shutdonw request") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-PB2F:PSU2000-YFLT") +{ + field(DESC, "GY2 BPS Fault") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 3) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bi,"EC-GN-P01-PB2F:PSU2000-YSTA") +{ + field(DESC, "GY2 BPS Ready") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_0, 2) bitread") + field(ONAM, "READY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GBF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bo,"EC-GN-P01-PB2F:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY2 BPS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (ao,"EC-GN-P01-PB2F:PSU2000-EREF") +{ + field(ASLO, "4") + field(DESC, "GY2 BPS voltage setpoint") + field(DRVH, "40") + field(DRVL, "0") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "40") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_0, 0) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PB2F:PSU2000-EREF-MSP") +{ + field(DESC, "GY2 BPS voltage manual setpoint") + field(DRVH, "40") + field(DRVL, "0") + field(EGU, "kV") + field(HOPR, "40") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-PB2F:PSU2000-ET") +{ + field(DESC, "GY2 BPS Measured Voltage") + field(EGU, "kV") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PB2F:PSU2000-ET-WF") +{ + field(DESC, "GY2 BPS Measured Voltage") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PB2F:PSU2000-IT") +{ + field(DESC, "GY2 BPS Measured Current") + field(EGU, "A") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PB2F:PSU2000-IT-WF") +{ + field(DESC, "GY2 BPS Measured Current") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PB2F:STAT-DT-HVON") +{ + field(DESC, "Time diff to GY2 BPS Gate ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "500000") +} + +record (ai,"EC-GN-P01-PB2F:STAT-DT-SWON") +{ + field(DESC, "Time diff to GY2 BPS SW ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "550000") +} + +record (waveform,"EC-GN-P01-PB2F:STAT-PREP-WF") +{ + field(DESC, "GY2 BPS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-PMF-iocEC-GN-PSH0PCF.db b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-PMF-iocEC-GN-PSH0PCF.db new file mode 100644 index 0000000..9778039 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/db/PCF0-EC-GN-P01-PMF-iocEC-GN-PSH0PCF.db @@ -0,0 +1,231 @@ +record (bo,"EC-GN-P01-PMF:PSU0000-COFF") +{ + field(DESC, "MHVPS Shutdown request") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PMF:PSU0000-CON-MOD") +{ + field(DESC, "MHVPS MOD Enable/Disable") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bo,"EC-GN-P01-PMF:PSU0000-CON-SW") +{ + field(DESC, "MHVPS Enable/Disable") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-DO-SIMM") + field(VAL, "0") + field(ZNAM, "OFF") +} + +record (bi,"EC-GN-P01-PMF:PSU0000-TYSTA") +{ + field(DESC, "MHVPS Ready status") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 7) bitread") + field(ONAM, "READY") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NO") +} + +record (bi,"EC-GN-P01-PMF:PSU0000-YFLT") +{ + field(DESC, "MHVPS Fast Protection Act") + field(DTYP, "asynInt32") + field(INP, "@asyn(ni6528_1, 6) bitread") + field(ONAM, "FAULT") + field(PINI, "YES") + field(SCAN, "I/O Intr") + field(SIML, "EC-GN-P01-GAF:STAT-DI-SIMM") + field(VAL, "0") + field(ZNAM, "NORMAL") +} + +record (bo,"EC-GN-P01-PMF:STAT-MANM") +{ + field(DESC, "Manual Mode SW for GY1 APS") + field(ONAM, "ON") + field(PINI, "YES") + field(SCAN, "Passive") + field(VAL, "1") + field(ZNAM, "OFF") +} + +record (ao,"EC-GN-P01-PMF:PSU0000-EREF") +{ + field(ASLO, "11") + field(DESC, "MHVPS voltage setpoint") + field(DRVH, "55") + field(DRVL, "0") + field(DTYP, "asynFloat64") + field(EGU, "kV") + field(HOPR, "55") + field(LOPR, "0") + field(OUT, "@asyn(ni6368_1, 3) write_ao") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AO-SIMM") + field(VAL, "0") +} + +record (ao,"EC-GN-P01-PMF:PSU0000-EREF-MSP") +{ + field(DESC, "MHVPS voltage manual setpoint") + field(DRVH, "55") + field(DRVL, "0") + field(EGU, "kV") + field(HOPR, "55") + field(LOPR, "0") + field(PINI, "YES") + field(PREC, "2") + field(SCAN, "Passive") + field(VAL, "0") +} + +record (ai,"EC-GN-P01-PMF:PSU0000-ET-GA") +{ + field(DESC, "GY1 MHVPS Measued Voltage") + field(EGU, "kV") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PMF:PSU0000-ET-GA-WF") +{ + field(DESC, "GY1 MHVPS Measued Voltage") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PMF:PSU0000-ET-GB") +{ + field(DESC, "GY2 MHVPS Measued Voltage") + field(EGU, "kV") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PMF:PSU0000-ET-GB-WF") +{ + field(DESC, "GY2 MHVPS Measued Voltage") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PMF:PSU0000-IT-GA") +{ + field(DESC, "GY1 MHVPS Measured Current") + field(EGU, "A") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PMF:PSU0000-IT-GA-WF") +{ + field(DESC, "GY1 MHVPS Measured Current") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GAF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PMF:PSU0000-IT-GB") +{ + field(DESC, "GY2 MHVPS Measured Current") + field(EGU, "A") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, ".1 second") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (waveform,"EC-GN-P01-PMF:PSU0000-IT-GB-WF") +{ + field(DESC, "GY2 MHVPS Measured Current") + field(EGU, "A") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "YES") + field(PREC, "3") + field(SCAN, "Passive") + field(SIML, "EC-GN-P01-GBF:STAT-AI-SIMM") +} + +record (ai,"EC-GN-P01-PMF:STAT-DT-HVON") +{ + field(DESC, "Time diff to MHVPS ON") + field(EGU, "us") + field(HOPR, "5000000") + field(LOPR, "1000") + field(PINI, "YES") + field(PREC, "0") + field(SCAN, "Passive") + field(VAL, "500000") +} + +record (calcout,"EC-GN-P01-PMF:STAT-EREF-CALC") +{ + field(CALC, "(A!=C)?A:((B!=D)?B:E);C:=A; D:=B") + field(DESC, "determine MHVPS EREF change") + field(INPE, "EC-GN-P01-PMF:PSU0000-EREF") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-PMF:PSU0000-EREF PP") + field(SCAN, "Passive") +} + +record (calcout,"EC-GN-P01-PMF:STAT-HVON-CALC") +{ + field(CALC, "(A||B)?1:0") + field(DESC, "determine MHVPS HVON change") + field(OOPT, "On Change") + field(OUT, "EC-GN-P01-PMF:PSU0000-CON-SW PP") + field(SCAN, "Passive") +} + +record (waveform,"EC-GN-P01-PMF:STAT-PREP-WF") +{ + field(DESC, "MHVPS prepro schedule") + field(EGU, "V") + field(FTVL, "FLOAT") + field(NELM, "8000") + field(PINI, "NO") + field(PREC, "2") + field(SCAN, "Passive") +} + diff --git a/EC-GN-JA-PCF/target/main/epics/dbd/CUB.dbd b/EC-GN-JA-PCF/target/main/epics/dbd/CUB.dbd new file mode 100644 index 0000000..fcba839 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/dbd/CUB.dbd @@ -0,0 +1,19604 @@ +menu(serialPRTY) { + choice(serialPRTY_unknown, "Unknown") + choice(serialPRTY_None, "None") + choice(serialPRTY_Even, "Even") + choice(serialPRTY_Odd, "Odd") +} +menu(waveformPOST) { + choice(waveformPOST_Always, "Always") + choice(waveformPOST_OnChange, "On Change") +} +menu(aaoPOST) { + choice(aaoPOST_Always, "Always") + choice(aaoPOST_OnChange, "On Change") +} +menu(menuPriority) { + choice(menuPriorityLOW, "LOW") + choice(menuPriorityMEDIUM, "MEDIUM") + choice(menuPriorityHIGH, "HIGH") +} +menu(serialSBIT) { + choice(serialSBIT_unknown, "Unknown") + choice(serialSBIT_1, "1") + choice(serialSBIT_2, "2") +} +menu(calcoutDOPT) { + choice(calcoutDOPT_Use_VAL, "Use CALC") + choice(calcoutDOPT_Use_OVAL, "Use OCAL") +} +menu(menuOmsl) { + choice(menuOmslsupervisory, "supervisory") + choice(menuOmslclosed_loop, "closed_loop") +} +menu(menuFtype) { + choice(menuFtypeSTRING, "STRING") + choice(menuFtypeCHAR, "CHAR") + choice(menuFtypeUCHAR, "UCHAR") + choice(menuFtypeSHORT, "SHORT") + choice(menuFtypeUSHORT, "USHORT") + choice(menuFtypeLONG, "LONG") + choice(menuFtypeULONG, "ULONG") + choice(menuFtypeINT64, "INT64") + choice(menuFtypeUINT64, "UINT64") + choice(menuFtypeFLOAT, "FLOAT") + choice(menuFtypeDOUBLE, "DOUBLE") + choice(menuFtypeENUM, "ENUM") +} +menu(stringinPOST) { + choice(stringinPOST_OnChange, "On Change") + choice(stringinPOST_Always, "Always") +} +menu(menuPini) { + choice(menuPiniNO, "NO") + choice(menuPiniYES, "YES") + choice(menuPiniRUN, "RUN") + choice(menuPiniRUNNING, "RUNNING") + choice(menuPiniPAUSE, "PAUSE") + choice(menuPiniPAUSED, "PAUSED") +} +menu(dfanoutSELM) { + choice(dfanoutSELM_All, "All") + choice(dfanoutSELM_Specified, "Specified") + choice(dfanoutSELM_Mask, "Mask") +} +menu(menuScan) { + choice(menuScanPassive, "Passive") + choice(menuScanEvent, "Event") + choice(menuScanI_O_Intr, "I/O Intr") + choice(menuScan10_second, "10 second") + choice(menuScan5_second, "5 second") + choice(menuScan2_second, "2 second") + choice(menuScan1_second, "1 second") + choice(menuScan_5_second, ".5 second") + choice(menuScan_2_second, ".2 second") + choice(menuScan_1_second, ".1 second") +} +menu(gpibACMD) { + choice(gpibACMD_None, "None") + choice(gpibACMD_Group_Execute_Trig___GET_, "Group Execute Trig. (GET)") + choice(gpibACMD_Go_To_Local__GTL_, "Go To Local (GTL)") + choice(gpibACMD_Selected_Dev__Clear__SDC_, "Selected Dev. Clear (SDC)") + choice(gpibACMD_Take_Control__TCT_, "Take Control (TCT)") + choice(gpibACMD_Serial_Poll, "Serial Poll") +} +menu(aSubLFLG) { + choice(aSubLFLG_IGNORE, "IGNORE") + choice(aSubLFLG_READ, "READ") +} +menu(asynTMOD) { + choice(asynTMOD_Write_Read, "Write/Read") + choice(asynTMOD_Write, "Write") + choice(asynTMOD_Read, "Read") + choice(asynTMOD_Flush, "Flush") + choice(asynTMOD_NoIO, "NoI/O") +} +menu(ipDRTO) { + choice(ipDRTO_unknown, "Unknown") + choice(ipDRTO_No, "No") + choice(ipDRTO_Yes, "Yes") +} +menu(menuPost) { + choice(menuPost_OnChange, "On Change") + choice(menuPost_Always, "Always") +} +menu(asynINTERFACE) { + choice(asynINTERFACE_OCTET, "asynOctet") + choice(asynINTERFACE_INT32, "asynInt32") + choice(asynINTERFACE_UINT32, "asynUInt32Digital") + choice(asynINTERFACE_FLOAT64, "asynFloat64") +} +menu(menuAlarmStat) { + choice(menuAlarmStatNO_ALARM, "NO_ALARM") + choice(menuAlarmStatREAD, "READ") + choice(menuAlarmStatWRITE, "WRITE") + choice(menuAlarmStatHIHI, "HIHI") + choice(menuAlarmStatHIGH, "HIGH") + choice(menuAlarmStatLOLO, "LOLO") + choice(menuAlarmStatLOW, "LOW") + choice(menuAlarmStatSTATE, "STATE") + choice(menuAlarmStatCOS, "COS") + choice(menuAlarmStatCOMM, "COMM") + choice(menuAlarmStatTIMEOUT, "TIMEOUT") + choice(menuAlarmStatHWLIMIT, "HWLIMIT") + choice(menuAlarmStatCALC, "CALC") + choice(menuAlarmStatSCAN, "SCAN") + choice(menuAlarmStatLINK, "LINK") + choice(menuAlarmStatSOFT, "SOFT") + choice(menuAlarmStatBAD_SUB, "BAD_SUB") + choice(menuAlarmStatUDF, "UDF") + choice(menuAlarmStatDISABLE, "DISABLE") + choice(menuAlarmStatSIMM, "SIMM") + choice(menuAlarmStatREAD_ACCESS, "READ_ACCESS") + choice(menuAlarmStatWRITE_ACCESS, "WRITE_ACCESS") +} +menu(aoOIF) { + choice(aoOIF_Full, "Full") + choice(aoOIF_Incremental, "Incremental") +} +menu(bufferingALG) { + choice(bufferingALG_FIFO, "FIFO Buffer") + choice(bufferingALG_LIFO, "LIFO Buffer") +} +menu(aaiPOST) { + choice(aaiPOST_Always, "Always") + choice(aaiPOST_OnChange, "On Change") +} +menu(calcoutINAV) { + choice(calcoutINAV_EXT_NC, "Ext PV NC") + choice(calcoutINAV_EXT, "Ext PV OK") + choice(calcoutINAV_LOC, "Local PV") + choice(calcoutINAV_CON, "Constant") +} +menu(epidFeedbackState) { + choice(epidFeedbackState_Off, "Off") + choice(epidFeedbackState_On, "On") +} +menu(asynAUTOCONNECT) { + choice(asynAUTOCONNECT_noAutoConnect, "noAutoConnect") + choice(asynAUTOCONNECT_autoConnect, "autoConnect") +} +menu(asynFMT) { + choice(asynFMT_ASCII, "ASCII") + choice(asynFMT_Hybrid, "Hybrid") + choice(asynFMT_Binary, "Binary") +} +menu(seqSELM) { + choice(seqSELM_All, "All") + choice(seqSELM_Specified, "Specified") + choice(seqSELM_Mask, "Mask") +} +menu(asynCONNECT) { + choice(asynCONNECT_Disconnect, "Disconnect") + choice(asynCONNECT_Connect, "Connect") +} +menu(gpibUCMD) { + choice(gpibUCMD_None, "None") + choice(gpibUCMD_Device_Clear__DCL_, "Device Clear (DCL)") + choice(gpibUCMD_Local_Lockout__LL0_, "Local Lockout (LL0)") + choice(gpibUCMD_Serial_Poll_Disable__SPD_, "Serial Poll Disable (SPD)") + choice(gpibUCMD_Serial_Poll_Enable__SPE_, "Serial Poll Enable (SPE)") + choice(gpibUCMD_Unlisten__UNL_, "Unlisten (UNL)") + choice(gpibUCMD_Untalk__UNT_, "Untalk (UNT)") +} +menu(serialBAUD) { + choice(serialBAUD_unknown, "Unknown") + choice(serialBAUD_300, "300") + choice(serialBAUD_600, "600") + choice(serialBAUD_1200, "1200") + choice(serialBAUD_2400, "2400") + choice(serialBAUD_4800, "4800") + choice(serialBAUD_9600, "9600") + choice(serialBAUD_19200, "19200") + choice(serialBAUD_38400, "38400") + choice(serialBAUD_57600, "57600") + choice(serialBAUD_115200, "115200") + choice(serialBAUD_230400, "230400") + choice(serialBAUD_460800, "460800") + choice(serialBAUD_576000, "576000") + choice(serialBAUD_921600, "921600") + choice(serialBAUD_1152000, "1152000") +} +menu(histogramCMD) { + choice(histogramCMD_Read, "Read") + choice(histogramCMD_Clear, "Clear") + choice(histogramCMD_Start, "Start") + choice(histogramCMD_Stop, "Stop") +} +menu(asynTRACE) { + choice(asynTRACE_Off, "Off") + choice(asynTRACE_On, "On") +} +menu(asynEOMREASON) { + choice(asynEOMREASONNone, "None") + choice(asynEOMREASONCNT, "Count") + choice(asynEOMREASONEOS, "Eos") + choice(asynEOMREASONCNTEOS, "Count Eos") + choice(asynEOMREASONEND, "End") + choice(asynEOMREASONCNTEND, "Count End") + choice(asynEOMREASONEOSEND, "Eos End") + choice(asynEOMREASONCNTEOSEND, "Count Eos End") +} +menu(menuIvoa) { + choice(menuIvoaContinue_normally, "Continue normally") + choice(menuIvoaDon_t_drive_outputs, "Don't drive outputs") + choice(menuIvoaSet_output_to_IVOV, "Set output to IVOV") +} +menu(stringoutPOST) { + choice(stringoutPOST_OnChange, "On Change") + choice(stringoutPOST_Always, "Always") +} +menu(menuAlarmSevr) { + choice(menuAlarmSevrNO_ALARM, "NO_ALARM") + choice(menuAlarmSevrMINOR, "MINOR") + choice(menuAlarmSevrMAJOR, "MAJOR") + choice(menuAlarmSevrINVALID, "INVALID") +} +menu(serialMCTL) { + choice(serialMCTL_unknown, "Unknown") + choice(serialMCTL_CLOCAL, "CLOCAL") + choice(serialMCTL_Yes, "YES") +} +menu(serialFCTL) { + choice(serialFCTL_unknown, "Unknown") + choice(serialFCTL_None, "None") + choice(serialFCTL_Hardware, "Hardware") +} +menu(menuSimm) { + choice(menuSimmNO, "NO") + choice(menuSimmYES, "YES") + choice(menuSimmRAW, "RAW") +} +menu(compressALG) { + choice(compressALG_N_to_1_Low_Value, "N to 1 Low Value") + choice(compressALG_N_to_1_High_Value, "N to 1 High Value") + choice(compressALG_N_to_1_Average, "N to 1 Average") + choice(compressALG_Average, "Average") + choice(compressALG_Circular_Buffer, "Circular Buffer") + choice(compressALG_N_to_1_Median, "N to 1 Median") +} +menu(aSubEFLG) { + choice(aSubEFLG_NEVER, "NEVER") + choice(aSubEFLG_ON_CHANGE, "ON CHANGE") + choice(aSubEFLG_ALWAYS, "ALWAYS") +} +menu(fanoutSELM) { + choice(fanoutSELM_All, "All") + choice(fanoutSELM_Specified, "Specified") + choice(fanoutSELM_Mask, "Mask") +} +menu(calcoutOOPT) { + choice(calcoutOOPT_Every_Time, "Every Time") + choice(calcoutOOPT_On_Change, "On Change") + choice(calcoutOOPT_When_Zero, "When Zero") + choice(calcoutOOPT_When_Non_zero, "When Non-zero") + choice(calcoutOOPT_Transition_To_Zero, "Transition To Zero") + choice(calcoutOOPT_Transition_To_Non_zero, "Transition To Non-zero") +} +menu(asynENABLE) { + choice(asynENABLE_Disable, "Disable") + choice(asynENABLE_Enable, "Enable") +} +menu(epidFeedbackMode) { + choice(epidFeedbackMode_PID, "PID") + choice(epidFeedbackMode_MaxMin, "Max/Min") +} +menu(menuConvert) { + choice(menuConvertNO_CONVERSION, "NO CONVERSION") + choice(menuConvertSLOPE, "SLOPE") + choice(menuConvertLINEAR, "LINEAR") + choice(menuConverttypeKdegF, "typeKdegF") + choice(menuConverttypeKdegC, "typeKdegC") + choice(menuConverttypeJdegF, "typeJdegF") + choice(menuConverttypeJdegC, "typeJdegC") + choice(menuConverttypeEdegF, "typeEdegF(ixe only)") + choice(menuConverttypeEdegC, "typeEdegC(ixe only)") + choice(menuConverttypeTdegF, "typeTdegF") + choice(menuConverttypeTdegC, "typeTdegC") + choice(menuConverttypeRdegF, "typeRdegF") + choice(menuConverttypeRdegC, "typeRdegC") + choice(menuConverttypeSdegF, "typeSdegF") + choice(menuConverttypeSdegC, "typeSdegC") +} +menu(serialIX) { + choice(serialIX_unknown, "Unknown") + choice(serialIX_No, "No") + choice(serialIX_Yes, "Yes") +} +menu(menuYesNo) { + choice(menuYesNoNO, "NO") + choice(menuYesNoYES, "YES") +} +menu(timestampTST) { + choice(timestampTST_YY_MM_DD_HH_MM_SS, "YY/MM/DD HH:MM:SS") + choice(timestampTST_MM_DD_YY_HH_MM_SS, "MM/DD/YY HH:MM:SS") + choice(timestampTST_MM_DD_HH_MM_SS_YY, "Mon DD HH:MM:SS YY") + choice(timestampTST_MM_DD_HH_MM_SS, "Mon DD HH:MM:SS") + choice(timestampTST_HH_MM_SS, "HH:MM:SS") + choice(timestampTST_HH_MM, "HH:MM") + choice(timestampTST_DD_MM_YY_HH_MM_SS, "DD/MM/YY HH:MM:SS") + choice(timestampTST_DD_MM_HH_MM_SS_YY, "DD Mon HH:MM:SS YY") + choice(timestampTST_VMS, "DD-Mon-YYYY HH:MM:SS") + choice(timestampTST_MM_DD_YYYY, "Mon DD, YYYY HH:MM:SS.ns") + choice(timestampTST_MM_DD_YY, "MM/DD/YY HH:MM:SS.ns") +} +menu(serialDBIT) { + choice(serialDBIT_unknown, "Unknown") + choice(serialDBIT_5, "5") + choice(serialDBIT_6, "6") + choice(serialDBIT_7, "7") + choice(serialDBIT_8, "8") +} +menu(selSELM) { + choice(selSELM_Specified, "Specified") + choice(selSELM_High_Signal, "High Signal") + choice(selSELM_Low_Signal, "Low Signal") + choice(selSELM_Median_Signal, "Median Signal") +} +recordtype(calcout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct calcoutRecord; + %typedef struct calcoutdset { + % dset common; + % long (*write)(struct calcoutRecord *prec); + %} calcoutdset; + %#define HAS_calcoutdset + % + %#include "dbScan.h" + %#include "postfix.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(RPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct rpvtStruct *rpvt") + interest(4) + prompt("Record Private") + } + field(VAL, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + prompt("Result") + } + field(PVAL, DBF_DOUBLE) { + prompt("Previous Value") + } + field(CALC, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_CALC) + initial("0") + pp(TRUE) + size(80) + prompt("Calculation") + } + field(CLCV, DBF_LONG) { + interest(1) + prompt("CALC Valid") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input F") + } + field(INPG, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input L") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + special(SPC_MOD) + interest(1) + prompt("Output Specification") + } + field(INAV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPA PV Status") + } + field(INBV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPB PV Status") + } + field(INCV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPC PV Status") + } + field(INDV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPD PV Status") + } + field(INEV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPE PV Status") + } + field(INFV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPF PV Status") + } + field(INGV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPG PV Status") + } + field(INHV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPH PV Status") + } + field(INIV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPI PV Status") + } + field(INJV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPJ PV Status") + } + field(INKV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPK PV Status") + } + field(INLV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPL PV Status") + } + field(OUTV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + interest(1) + prompt("OUT PV Status") + } + field(OOPT, DBF_MENU) { + promptgroup("50 - Output") + menu(calcoutOOPT) + interest(1) + prompt("Output Execute Opt") + } + field(ODLY, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + interest(1) + prompt("Output Execute Delay") + } + field(DLYA, DBF_USHORT) { + special(SPC_NOMOD) + asl(ASL0) + prompt("Output Delay Active") + } + field(DOPT, DBF_MENU) { + promptgroup("30 - Action") + menu(calcoutDOPT) + interest(1) + prompt("Output Data Opt") + } + field(OCAL, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_CALC) + initial("0") + pp(TRUE) + size(80) + prompt("Output Calculation") + } + field(OCLV, DBF_LONG) { + interest(1) + prompt("OCAL Valid") + } + field(OEVT, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_MOD) + asl(ASL0) + size(40) + prompt("Event To Issue") + } + field(EPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("EVENTPVT epvt") + interest(4) + prompt("Event private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Rng") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(A, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input A") + } + field(B, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input B") + } + field(C, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input C") + } + field(D, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input D") + } + field(E, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input E") + } + field(F, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input F") + } + field(G, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input G") + } + field(H, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input H") + } + field(I, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input I") + } + field(J, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input J") + } + field(K, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input K") + } + field(L, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input L") + } + field(OVAL, DBF_DOUBLE) { + asl(ASL0) + prompt("Output Value") + } + field(LA, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of A") + } + field(LB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of B") + } + field(LC, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of C") + } + field(LD, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of D") + } + field(LE, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of E") + } + field(LF, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of F") + } + field(LG, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of G") + } + field(LH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of H") + } + field(LI, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of I") + } + field(LJ, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of J") + } + field(LK, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of K") + } + field(LL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of L") + } + field(POVL, DBF_DOUBLE) { + asl(ASL0) + prompt("Prev Value of OVAL") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(RPCL, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("char rpcl[INFIX_TO_POSTFIX_SIZE(80)]") + interest(4) + prompt("Reverse Polish Calc") + } + field(ORPC, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("char orpc[INFIX_TO_POSTFIX_SIZE(80)]") + interest(4) + prompt("Reverse Polish OCalc") + } +} +device(calcout, CONSTANT, devCalcoutSoft, "Soft Channel") +device(calcout, CONSTANT, devCalcoutSoftCallback, "Async Soft Channel") +recordtype(state) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + size(20) + prompt("Value") + } + field(OVAL, DBF_STRING) { + special(SPC_NOMOD) + interest(3) + size(20) + prompt("Prev Value") + } +} +recordtype(histogram) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct histogramRecord; + %typedef struct histogramdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_histogram)(struct histogramRecord *prec); /*(0,2)=> success and add_count, don't add_count); if add_count then sgnl added to array*/ + % long (*special_linconv)(struct histogramRecord *prec, int after); + %} histogramdset; + %#define HAS_histogramdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + prompt("Value") + } + field(NELM, DBF_USHORT) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Num of Array Elements") + } + field(CSTA, DBF_SHORT) { + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Collection Status") + } + field(CMD, DBF_MENU) { + special(SPC_CALC) + asl(ASL0) + menu(histogramCMD) + interest(1) + prompt("Collection Control") + } + field(ULIM, DBF_DOUBLE) { + prop(YES) + promptgroup("30 - Action") + special(SPC_RESET) + interest(1) + prompt("Upper Signal Limit") + } + field(LLIM, DBF_DOUBLE) { + prop(YES) + promptgroup("30 - Action") + special(SPC_RESET) + interest(1) + prompt("Lower Signal Limit ") + } + field(WDTH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Element Width") + } + field(SGNL, DBF_DOUBLE) { + special(SPC_MOD) + prompt("Signal Value") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(SVL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Signal Value Location") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt32 *bptr") + interest(4) + prompt("Buffer Pointer") + } + field(WDOG, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * wdog") + interest(4) + prompt("Watchdog callback") + } + field(MDEL, DBF_SHORT) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Count Deadband") + } + field(MCNT, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Counts Since Monitor") + } + field(SDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + special(SPC_RESET) + interest(1) + prompt("Monitor Seconds Dband") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_DOUBLE) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(HOPR, DBF_ULONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_ULONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } +} +device(histogram, CONSTANT, devHistogramSoft, "Soft Channel") +recordtype(lsi) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct lsiRecord; + %typedef struct lsidset { + % dset common; + % long (*read_string)(struct lsiRecord *prec); + %} lsidset; + %#define HAS_lsidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("char *val") + pp(TRUE) + prompt("Current Value") + } + field(OVAL, DBF_NOACCESS) { + special(SPC_DBADDR) + extra("char *oval") + interest(3) + prompt("Old Value") + } + field(SIZV, DBF_USHORT) { + promptgroup("40 - Input") + special(SPC_NOMOD) + initial("41") + interest(1) + prompt("Size of buffers") + } + field(LEN, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Length of VAL") + } + field(OLEN, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Length of OVAL") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(menuPost) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(menuPost) + interest(1) + prompt("Post Archive Monitors") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(lsi, CONSTANT, devLsiSoft, "Soft Channel") +device(lsi, INST_IO, devLsiEnviron, "getenv") +device(lsi, INST_IO, devLsiStats, "IOC long string") +device(lsi, INST_IO, asynLsiOctetCmdResponse, "asynOctetCmdResponse") +device(lsi, INST_IO, asynLsiOctetWriteRead, "asynOctetWriteRead") +device(lsi, INST_IO, asynLsiOctetRead, "asynOctetRead") +recordtype(int64out) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct int64outRecord; + %typedef struct int64outdset { + % dset common; + % long (*write_int64out)(struct int64outRecord *prec); + %} int64outdset; + %#define HAS_int64outdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_INT64) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Desired Output") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Units name") + } + field(DRVH, DBF_INT64) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive High Limit") + } + field(DRVL, DBF_INT64) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive Low Limit") + } + field(HOPR, DBF_INT64) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_INT64) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_INT64) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_INT64) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_INT64) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_INT64) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } +} +device(int64out, CONSTANT, devI64outSoft, "Soft Channel") +device(int64out, CONSTANT, devI64outSoftCallback, "Async Soft Channel") +device(int64out, INST_IO, asynInt64Out, "asynInt64") +recordtype(seq) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + asl(ASL0) + pp(TRUE) + prompt("Used to trigger") + } + field(SELM, DBF_MENU) { + promptgroup("30 - Action") + menu(seqSELM) + interest(1) + prompt("Select Mechanism") + } + field(SELN, DBF_USHORT) { + initial("1") + interest(1) + prompt("Link Selection") + } + field(SELL, DBF_INLINK) { + promptgroup("30 - Action") + interest(1) + prompt("Link Selection Loc") + } + field(OFFS, DBF_SHORT) { + promptgroup("30 - Action") + initial("0") + interest(1) + prompt("Offset for Specified") + } + field(SHFT, DBF_SHORT) { + promptgroup("30 - Action") + initial("-1") + interest(1) + prompt("Shift for Mask mode") + } + field(OLDN, DBF_USHORT) { + interest(4) + prompt("Old Selection") + } + field(PREC, DBF_SHORT) { + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(DLY0, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 0") + } + field(DOL0, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 0") + } + field(DO0, DBF_DOUBLE) { + interest(1) + prompt("Value 0") + } + field(LNK0, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 0") + } + field(DLY1, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 1") + } + field(DOL1, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link1") + } + field(DO1, DBF_DOUBLE) { + interest(1) + prompt("Value 1") + } + field(LNK1, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 1") + } + field(DLY2, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 2") + } + field(DOL2, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 2") + } + field(DO2, DBF_DOUBLE) { + interest(1) + prompt("Value 2") + } + field(LNK2, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 2") + } + field(DLY3, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 3") + } + field(DOL3, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 3") + } + field(DO3, DBF_DOUBLE) { + interest(1) + prompt("Value 3") + } + field(LNK3, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 3") + } + field(DLY4, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 4") + } + field(DOL4, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 4") + } + field(DO4, DBF_DOUBLE) { + interest(1) + prompt("Value 4") + } + field(LNK4, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 4") + } + field(DLY5, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 5") + } + field(DOL5, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 5") + } + field(DO5, DBF_DOUBLE) { + interest(1) + prompt("Value 5") + } + field(LNK5, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 5") + } + field(DLY6, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 6") + } + field(DOL6, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 6") + } + field(DO6, DBF_DOUBLE) { + interest(1) + prompt("Value 6") + } + field(LNK6, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 6") + } + field(DLY7, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 7") + } + field(DOL7, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 7") + } + field(DO7, DBF_DOUBLE) { + interest(1) + prompt("Value 7") + } + field(LNK7, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 7") + } + field(DLY8, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 8") + } + field(DOL8, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 8") + } + field(DO8, DBF_DOUBLE) { + interest(1) + prompt("Value 8") + } + field(LNK8, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 8") + } + field(DLY9, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 9") + } + field(DOL9, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 9") + } + field(DO9, DBF_DOUBLE) { + interest(1) + prompt("Value 9") + } + field(LNK9, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 9") + } + field(DLYA, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 10") + } + field(DOLA, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 10") + } + field(DOA, DBF_DOUBLE) { + interest(1) + prompt("Value 10") + } + field(LNKA, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 10") + } + field(DLYB, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 11") + } + field(DOLB, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 11") + } + field(DOB, DBF_DOUBLE) { + interest(1) + prompt("Value 11") + } + field(LNKB, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 11") + } + field(DLYC, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 12") + } + field(DOLC, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 12") + } + field(DOC, DBF_DOUBLE) { + interest(1) + prompt("Value 12") + } + field(LNKC, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 12") + } + field(DLYD, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 13") + } + field(DOLD, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 13") + } + field(DOD, DBF_DOUBLE) { + interest(1) + prompt("Value 13") + } + field(LNKD, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 13") + } + field(DLYE, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 14") + } + field(DOLE, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 14") + } + field(DOE, DBF_DOUBLE) { + interest(1) + prompt("Value 14") + } + field(LNKE, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 14") + } + field(DLYF, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 15") + } + field(DOLF, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 15") + } + field(DOF, DBF_DOUBLE) { + interest(1) + prompt("Value 15") + } + field(LNKF, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 15") + } +} +recordtype(stringout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct stringoutRecord; + %typedef struct stringoutdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*write_stringout)(struct stringoutRecord *prec); /*(-1,0)=>(failure,success)*/ + %} stringoutdset; + %#define HAS_stringoutdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + size(40) + prompt("Current Value") + } + field(OVAL, DBF_STRING) { + special(SPC_NOMOD) + interest(3) + size(40) + prompt("Previous Value") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(stringoutPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(stringoutPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_STRING) { + promptgroup("50 - Output") + interest(2) + size(40) + prompt("INVALID output value") + } +} +device(stringout, CONSTANT, devSoSoft, "Soft Channel") +device(stringout, CONSTANT, devSoSoftCallback, "Async Soft Channel") +device(stringout, INST_IO, devSoStdio, "stdio") +device(stringout, INST_IO, asynSoOctetWrite, "asynOctetWrite") +recordtype(aai) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct aaiRecord; + %typedef struct aaidset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_aai)(struct aaiRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} aaidset; + %#define HAS_aaidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(NELM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Number of Elements") + } + field(FTVL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_NOMOD) + menu(menuFtype) + interest(1) + prompt("Field Type of Value") + } + field(NORD, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Number elements read") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * bptr") + interest(4) + prompt("Buffer Pointer") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(aaiPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(aaiPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(HASH, DBF_ULONG) { + interest(3) + prompt("Hash of OnChange data.") + } +} +device(aai, CONSTANT, devAaiSoft, "Soft Channel") +recordtype(permissive) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_USHORT) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Status") + } + field(WFLG, DBF_USHORT) { + pp(TRUE) + prompt("Wait Flag") + } + field(LABL, DBF_STRING) { + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(20) + prompt("Button Label") + } + field(OVAL, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Old Status") + } + field(OFLG, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Old Flag") + } +} +recordtype(bo) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct boRecord; + %typedef struct bodset { + % dset common; /*init_record returns:(0,2)=>(success,success no convert*/ + % long (*write_bo)(struct boRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} bodset; + %#define HAS_bodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_ENUM) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(HIGH, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Seconds to Hold High") + } + field(ZNAM, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(26) + prompt("Zero Name") + } + field(ONAM, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(26) + prompt("One Name") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("prev Raw Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(RPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * rpvt") + interest(4) + prompt("Record Private") + } + field(WDPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * wdpt") + interest(4) + prompt("Watch Dog Timer ID") + } + field(ZSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Zero Error Severity") + } + field(OSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("One Error Severity") + } + field(COSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Change of State Sevr") + } + field(RBV, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Readback Value") + } + field(ORBV, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Readback Value") + } + field(MLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(LALM, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID outpt action") + } + field(IVOV, DBF_USHORT) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } +} +device(bo, CONSTANT, devBoSoft, "Soft Channel") +device(bo, CONSTANT, devBoSoftRaw, "Raw Soft Channel") +device(bo, CONSTANT, devBoSoftCallback, "Async Soft Channel") +device(bo, INST_IO, devBoGeneralTime, "General Time") +device(bo, INST_IO, devBoDbState, "Db State") +device(bo, INST_IO, devBoSimulation, "IOC SIM") +device(bo, INST_IO, asynBoInt32, "asynInt32") +device(bo, INST_IO, asynBoUInt32Digital, "asynUInt32Digital") +recordtype(dfanout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Desired Output") + } + field(SELM, DBF_MENU) { + promptgroup("30 - Action") + menu(dfanoutSELM) + interest(1) + prompt("Select Mechanism") + } + field(SELN, DBF_USHORT) { + initial("1") + interest(1) + prompt("Link Selection") + } + field(SELL, DBF_INLINK) { + promptgroup("30 - Action") + interest(1) + prompt("Link Selection Loc") + } + field(OUTA, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec A") + } + field(OUTB, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec B") + } + field(OUTC, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec C") + } + field(OUTD, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec D") + } + field(OUTE, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec E") + } + field(OUTF, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec F") + } + field(OUTG, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec G") + } + field(OUTH, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec H") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } +} +recordtype(mbbi) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct mbbiRecord; + %typedef struct mbbidset { + % dset common; /* init_record returns: (-1,0) => (failure, success)*/ + % long (*read_mbbi)(struct mbbiRecord *prec); /* (0, 2) => (success, success no convert)*/ + %} mbbidset; + %#define HAS_mbbidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_ENUM) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + } + field(NOBT, DBF_USHORT) { + promptgroup("40 - Input") + special(SPC_NOMOD) + interest(1) + prompt("Number of Bits") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(ZRVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Zero Value") + } + field(ONVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("One Value") + } + field(TWVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Two Value") + } + field(THVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Three Value") + } + field(FRVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Four Value") + } + field(FVVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Five Value") + } + field(SXVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Six Value") + } + field(SVVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Seven Value") + } + field(EIVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Eight Value") + } + field(NIVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Nine Value") + } + field(TEVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Ten Value") + } + field(ELVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Eleven Value") + } + field(TVVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Twelve Value") + } + field(TTVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Thirteen Value") + } + field(FTVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Fourteen Value") + } + field(FFVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Fifteen Value") + } + field(ZRST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Zero String") + } + field(ONST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("One String") + } + field(TWST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Two String") + } + field(THST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Three String") + } + field(FRST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Four String") + } + field(FVST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Five String") + } + field(SXST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Six String") + } + field(SVST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Seven String") + } + field(EIST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Eight String") + } + field(NIST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Nine String") + } + field(TEST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Ten String") + } + field(ELST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Eleven String") + } + field(TVST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Twelve String") + } + field(TTST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Thirteen String") + } + field(FTST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Fourteen String") + } + field(FFST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Fifteen String") + } + field(ZRSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Zero Severity") + } + field(ONSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State One Severity") + } + field(TWSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Two Severity") + } + field(THSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Three Severity") + } + field(FRSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Four Severity") + } + field(FVSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Five Severity") + } + field(SXSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Six Severity") + } + field(SVSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Seven Severity") + } + field(EISV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Eight Severity") + } + field(NISV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Nine Severity") + } + field(TESV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Ten Severity") + } + field(ELSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Eleven Severity") + } + field(TVSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Twelve Severity") + } + field(TTSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Thirteen Sevr") + } + field(FTSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Fourteen Sevr") + } + field(FFSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Fifteen Severity") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(UNSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Unknown State Severity") + } + field(COSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Change of State Svr") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Raw Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(MLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(LALM, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(SDEF, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("States Defined") + } + field(SHFT, DBF_USHORT) { + promptgroup("40 - Input") + interest(1) + prompt("Shift") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_ULONG) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuSimm) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(mbbi, CONSTANT, devMbbiSoft, "Soft Channel") +device(mbbi, CONSTANT, devMbbiSoftRaw, "Raw Soft Channel") +device(mbbi, CONSTANT, devMbbiSoftCallback, "Async Soft Channel") +device(mbbi, INST_IO, devSysMonMbbiStats, "sysmon") +device(mbbi, INST_IO, asynMbbiInt32, "asynInt32") +device(mbbi, INST_IO, asynMbbiUInt32Digital, "asynUInt32Digital") +recordtype(event) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct eventRecord; + %typedef struct eventdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_event)(struct eventRecord *prec); /*(0)=> success */ + %} eventdset; + %#define HAS_eventdset + % + %#include "dbScan.h" + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("40 - Input") + special(SPC_MOD) + asl(ASL0) + size(40) + prompt("Event Name To Post") + } + field(EPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("EVENTPVT epvt") + interest(4) + prompt("Event private") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Input Specifctn") + } + field(SVAL, DBF_STRING) { + size(40) + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Mode Location") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Sim mode Alarm Svrty") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(event, CONSTANT, devEventSoft, "Soft Channel") +recordtype(compress) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(RES, DBF_SHORT) { + special(SPC_RESET) + asl(ASL0) + interest(3) + prompt("Reset") + } + field(ALG, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_RESET) + menu(compressALG) + interest(1) + prompt("Compression Algorithm") + } + field(BALG, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_RESET) + menu(bufferingALG) + interest(1) + prompt("Buffering Algorithm") + } + field(NSAM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Number of Values") + } + field(N, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_RESET) + initial("1") + interest(1) + prompt("N to 1 Compression") + } + field(IHIL, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Init High Interest Lim") + } + field(ILIL, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Init Low Interest Lim") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(OFF, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Offset") + } + field(NUSE, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Number Used") + } + field(OUSE, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Old Number Used") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("double *bptr") + interest(4) + prompt("Buffer Pointer") + } + field(SPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("double *sptr") + interest(4) + prompt("Summing Buffer Ptr") + } + field(WPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("double *wptr") + interest(4) + prompt("Working Buffer Ptr") + } + field(INPN, DBF_LONG) { + special(SPC_NOMOD) + interest(4) + prompt("Number of elements in Working Buffer") + } + field(CVB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Compress Value Buffer") + } + field(INX, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Compressed Array Inx") + } +} +recordtype(mbbo) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct mbboRecord; + %typedef struct mbbodset { + % dset common; /*init_record returns: (0, 2) => (success, success no convert)*/ + % long (*write_mbbo)(struct mbboRecord *prec); /*returns: (0, 2) => (success, success no convert)*/ + %} mbbodset; + %#define HAS_mbbodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_ENUM) { + promptgroup("50 - Output") + special(SPC_DBADDR) + asl(ASL0) + pp(TRUE) + prompt("Desired Value") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(NOBT, DBF_USHORT) { + promptgroup("50 - Output") + special(SPC_NOMOD) + interest(1) + prompt("Number of Bits") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(ZRVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Zero Value") + } + field(ONVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("One Value") + } + field(TWVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Two Value") + } + field(THVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Three Value") + } + field(FRVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Four Value") + } + field(FVVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Five Value") + } + field(SXVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Six Value") + } + field(SVVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Seven Value") + } + field(EIVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Eight Value") + } + field(NIVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Nine Value") + } + field(TEVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Ten Value") + } + field(ELVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Eleven Value") + } + field(TVVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Twelve Value") + } + field(TTVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Thirteen Value") + } + field(FTVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Fourteen Value") + } + field(FFVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Fifteen Value") + } + field(ZRST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Zero String") + } + field(ONST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("One String") + } + field(TWST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Two String") + } + field(THST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Three String") + } + field(FRST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Four String") + } + field(FVST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Five String") + } + field(SXST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Six String") + } + field(SVST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Seven String") + } + field(EIST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Eight String") + } + field(NIST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Nine String") + } + field(TEST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Ten String") + } + field(ELST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Eleven String") + } + field(TVST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Twelve String") + } + field(TTST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Thirteen String") + } + field(FTST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Fourteen String") + } + field(FFST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Fifteen String") + } + field(ZRSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Zero Severity") + } + field(ONSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State One Severity") + } + field(TWSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Two Severity") + } + field(THSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Three Severity") + } + field(FRSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Four Severity") + } + field(FVSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Five Severity") + } + field(SXSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Six Severity") + } + field(SVSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Seven Severity") + } + field(EISV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Eight Severity") + } + field(NISV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Nine Severity") + } + field(TESV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Ten Severity") + } + field(ELSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Eleven Severity") + } + field(TVSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Twelve Severity") + } + field(TTSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Thirteen Sevr") + } + field(FTSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Fourteen Sevr") + } + field(FFSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Fifteen Sevr") + } + field(UNSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Unknown State Sevr") + } + field(COSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Change of State Sevr") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Raw Value") + } + field(RBV, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Readback Value") + } + field(ORBV, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Readback Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(MLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(LALM, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(SDEF, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("States Defined") + } + field(SHFT, DBF_USHORT) { + promptgroup("50 - Output") + interest(1) + prompt("Shift") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID outpt action") + } + field(IVOV, DBF_USHORT) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } +} +device(mbbo, CONSTANT, devMbboSoft, "Soft Channel") +device(mbbo, CONSTANT, devMbboSoftRaw, "Raw Soft Channel") +device(mbbo, CONSTANT, devMbboSoftCallback, "Async Soft Channel") +device(mbbo, INST_IO, asynMbboInt32, "asynInt32") +device(mbbo, INST_IO, asynMbboUInt32Digital, "asynUInt32Digital") +recordtype(epid) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + prompt("Record Name") + size(61) + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + prompt("Descriptor") + size(41) + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + prompt("Access Security Group") + size(29) + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Event Name") + size(40) + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("epicsMutexId mlok") + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("ELLLIST mlis") + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("ELLLIST bklnk") + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + interest(2) + initial("YES") + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct asgMember *asp") + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct processNotify *ppn") + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct processNotifyRecord *ppnr") + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct scan_element *spvt") + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct typed_rset *rset") + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("unambiguous_dset *dset") + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("void *dpvt") + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct dbRecordType *rdes") + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct lockRecord *lset") + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(1) + extra("epicsUInt8 bkpt") + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + interest(1) + initial("1") + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + initial("INVALID") + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(2) + extra("epicsTimeStamp time") + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Setpoint") + } + field(SMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Setpoint Mode Select") + } + field(STPL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Setpoint Location") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Controlled Value Loc") + } + field(OUTL, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Location") + } + field(TRIG, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Readback Trigger") + } + field(TVAL, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(1) + prompt("Trigger Value") + } + field(CVAL, DBF_DOUBLE) { + special(SPC_NOMOD) + prompt("Controlled Value") + } + field(CVLP, DBF_DOUBLE) { + special(SPC_NOMOD) + prompt("Prev. Controlled Value") + } + field(OVAL, DBF_DOUBLE) { + special(SPC_NOMOD) + prompt("Output value") + } + field(OVLP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev output") + } + field(PREC, DBF_SHORT) { + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(MDT, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Min Delta T") + } + field(FMOD, DBF_MENU) { + promptgroup("30 - Action") + menu(epidFeedbackMode) + interest(1) + prompt("Feedback Mode") + } + field(FBON, DBF_MENU) { + promptgroup("30 - Action") + menu(epidFeedbackState) + interest(1) + prompt("Feedback On/Off") + } + field(FBOP, DBF_MENU) { + promptgroup("30 - Action") + menu(epidFeedbackState) + interest(1) + prompt("Prev. feedback On/Off") + } + field(KP, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Proportional Gain") + } + field(KI, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Integral Gain") + } + field(KD, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Derivative Gain") + } + field(EGU, DBF_STRING) { + promptgroup("80 - Display") + interest(1) + prompt("Engineering Units") + size(16) + } + field(HOPR, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(DRVH, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("High Drive Limit") + } + field(DRVL, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Low Drive Limit") + } + field(HIHI, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Hihi Deviation Limit") + } + field(LOLO, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Lolo Deviation Limit") + } + field(HIGH, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("High Deviation Limit") + } + field(LOW, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Low Deviation Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(ODEL, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Output Deadband") + } + field(P, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("P component") + } + field(PP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("Prev. P component") + } + field(I, DBF_DOUBLE) { + interest(2) + prompt("I component") + } + field(IP, DBF_DOUBLE) { + interest(2) + prompt("Prev. I component") + } + field(D, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("D component") + } + field(DP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("Prev. D component") + } + field(CT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("epicsTimeStamp ct") + prompt("Time") + } + field(CTP, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("epicsTimeStamp ctp") + prompt("Previous time") + } + field(DT, DBF_DOUBLE) { + interest(2) + prompt("Delta T") + } + field(DTP, DBF_DOUBLE) { + interest(2) + prompt("Prev. Delta T") + } + field(ERR, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("Error") + } + field(ERRP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("Prev. Error") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } +} +device(epid, CONSTANT, devEpidSoft, "Soft Channel") +device(epid, CONSTANT, devEpidSoftCB, "Async Soft Channel") +recordtype(ao) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct aoRecord; + %typedef struct aodset { + % dset common; /*init_record returns: (0,2)=>(success,success no convert)*/ + % long (*write_ao)(struct aoRecord *prec); /*(0)=>(success ) */ + % long (*special_linconv)(struct aoRecord *prec, int after); + %} aodset; + %#define HAS_aodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Desired Output") + } + field(OVAL, DBF_DOUBLE) { + prompt("Output Value") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(OROC, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(1) + prompt("Output Rate of Change") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(OIF, DBF_MENU) { + promptgroup("50 - Output") + menu(aoOIF) + interest(1) + prompt("Out Full/Incremental") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(LINR, DBF_MENU) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + menu(menuConvert) + interest(1) + pp(TRUE) + prompt("Linearization") + } + field(EGUF, DBF_DOUBLE) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + interest(1) + pp(TRUE) + prompt("Eng Units Full") + } + field(EGUL, DBF_DOUBLE) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + interest(1) + pp(TRUE) + prompt("Eng Units Low") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(ROFF, DBF_ULONG) { + interest(2) + pp(TRUE) + prompt("Raw Offset") + } + field(EOFF, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(2) + pp(TRUE) + prompt("EGU to Raw Offset") + } + field(ESLO, DBF_DOUBLE) { + promptgroup("60 - Convert") + initial("1") + interest(2) + pp(TRUE) + prompt("EGU to Raw Slope") + } + field(DRVH, DBF_DOUBLE) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive High Limit") + } + field(DRVL, DBF_DOUBLE) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive Low Limit") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(AOFF, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(1) + pp(TRUE) + prompt("Adjustment Offset") + } + field(ASLO, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(1) + pp(TRUE) + prompt("Adjustment Slope") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(RVAL, DBF_LONG) { + pp(TRUE) + prompt("Current Raw Value") + } + field(ORAW, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Previous Raw Value") + } + field(RBV, DBF_LONG) { + special(SPC_NOMOD) + prompt("Readback Value") + } + field(ORBV, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Readback Value") + } + field(PVAL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Previous value") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(PBRK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * pbrk") + interest(4) + prompt("Ptrto brkTable") + } + field(INIT, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Initialized?") + } + field(LBRK, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("LastBreak Point") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } + field(OMOD, DBF_UCHAR) { + special(SPC_NOMOD) + prompt("Was OVAL modified?") + } +} +device(ao, CONSTANT, devAoSoft, "Soft Channel") +device(ao, CONSTANT, devAoSoftRaw, "Raw Soft Channel") +device(ao, CONSTANT, devAoSoftCallback, "Async Soft Channel") +device(ao, INST_IO, devAoStats, "IOC stats") +device(ao, INST_IO, asynAoInt32, "asynInt32") +device(ao, INST_IO, asynAoFloat64, "asynFloat64") +device(ao, INST_IO, asynAoInt64, "asynInt64") +recordtype(aao) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct aaoRecord; + %typedef struct aaodset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*write_aao)(struct aaoRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} aaodset; + %#define HAS_aaodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(NELM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Number of Elements") + } + field(FTVL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_NOMOD) + menu(menuFtype) + interest(1) + prompt("Field Type of Value") + } + field(NORD, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Number elements read") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * bptr") + interest(4) + prompt("Buffer Pointer") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(aaoPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(aaoPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(HASH, DBF_ULONG) { + interest(3) + prompt("Hash of OnChange data.") + } +} +device(aao, CONSTANT, devAaoSoft, "Soft Channel") +recordtype(mbbiDirect) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct mbbiDirectRecord; + %typedef struct mbbidirectdset { + % dset common; /* init_record returns: (-1,0) => (failure, success)*/ + % long (*read_mbbi)(struct mbbiDirectRecord *prec); /* (0, 2) => (success, success no convert)*/ + %} mbbidirectdset; + %#define HAS_mbbidirectdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + } + field(NOBT, DBF_SHORT) { + promptgroup("40 - Input") + special(SPC_NOMOD) + interest(1) + prompt("Number of Bits") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Raw Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(MLST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(SHFT, DBF_USHORT) { + promptgroup("40 - Input") + interest(1) + prompt("Shift") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_LONG) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuSimm) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(B0, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 0") + } + field(B1, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 1") + } + field(B2, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 2") + } + field(B3, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 3") + } + field(B4, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 4") + } + field(B5, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 5") + } + field(B6, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 6") + } + field(B7, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 7") + } + field(B8, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 8") + } + field(B9, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 9") + } + field(BA, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 10") + } + field(BB, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 11") + } + field(BC, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 12") + } + field(BD, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 13") + } + field(BE, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 14") + } + field(BF, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 15") + } + field(B10, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 16") + } + field(B11, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 17") + } + field(B12, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 18") + } + field(B13, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 19") + } + field(B14, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 20") + } + field(B15, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 21") + } + field(B16, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 22") + } + field(B17, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 23") + } + field(B18, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 24") + } + field(B19, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 25") + } + field(B1A, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 26") + } + field(B1B, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 27") + } + field(B1C, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 28") + } + field(B1D, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 29") + } + field(B1E, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 30") + } + field(B1F, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 31") + } +} +device(mbbiDirect, CONSTANT, devMbbiDirectSoft, "Soft Channel") +device(mbbiDirect, CONSTANT, devMbbiDirectSoftRaw, "Raw Soft Channel") +device(mbbiDirect, CONSTANT, devMbbiDirectSoftCallback, "Async Soft Channel") +device(mbbiDirect, INST_IO, devSysMonMbbiDirectStats, "sysmon") +device(mbbiDirect, INST_IO, asynMbbiDirectUInt32Digital, "asynUInt32Digital") +recordtype(asyn) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + asl(ASL0) + interest(4) + prompt("Value field (unused)") + } + field(PORT, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_MOD) + initial("") + interest(1) + size(40) + prompt("asyn port") + } + field(ADDR, DBF_LONG) { + promptgroup("30 - Action") + special(SPC_MOD) + initial("0") + interest(1) + prompt("asyn address") + } + field(PCNCT, DBF_MENU) { + special(SPC_MOD) + menu(asynCONNECT) + interest(2) + prompt("Port Connect/Disconnect") + } + field(DRVINFO, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_MOD) + initial("") + interest(2) + size(40) + prompt("Driver info string") + } + field(REASON, DBF_LONG) { + special(SPC_MOD) + interest(2) + prompt("asynUser->reason") + } + field(TMOD, DBF_MENU) { + promptgroup("30 - Action") + menu(asynTMOD) + interest(1) + prompt("Transaction mode") + } + field(TMOT, DBF_DOUBLE) { + promptgroup("30 - Action") + initial("1.0") + interest(1) + prompt("Timeout (sec)") + } + field(IFACE, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_MOD) + menu(asynINTERFACE) + interest(2) + prompt("Interface") + } + field(OCTETIV, DBF_LONG) { + interest(2) + prompt("asynOctet is valid") + } + field(OPTIONIV, DBF_LONG) { + interest(2) + prompt("asynOption is valid") + } + field(GPIBIV, DBF_LONG) { + interest(2) + prompt("asynGPIB is valid") + } + field(I32IV, DBF_LONG) { + interest(2) + prompt("asynInt32 is valid") + } + field(UI32IV, DBF_LONG) { + interest(2) + prompt("asynUInt32Digital is valid") + } + field(F64IV, DBF_LONG) { + interest(2) + prompt("asynFloat64 is valid") + } + field(AOUT, DBF_STRING) { + promptgroup("50 - Output") + interest(1) + pp(TRUE) + size(40) + prompt("Output (command) string") + } + field(OEOS, DBF_STRING) { + promptgroup("50 - Output") + special(SPC_MOD) + interest(1) + size(40) + prompt("Output delimiter") + } + field(BOUT, DBF_CHAR) { + special(SPC_DBADDR) + interest(1) + pp(TRUE) + prompt("Output binary data") + } + field(OPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *optr") + interest(4) + prompt("Output buffer pointer") + } + field(OMAX, DBF_LONG) { + promptgroup("50 - Output") + special(SPC_NOMOD) + initial("80") + interest(1) + prompt("Max. size of output array") + } + field(NOWT, DBF_LONG) { + promptgroup("50 - Output") + initial("80") + interest(1) + prompt("Number of bytes to write") + } + field(NAWT, DBF_LONG) { + interest(1) + prompt("Number of bytes actually written") + } + field(OFMT, DBF_MENU) { + promptgroup("50 - Output") + menu(asynFMT) + interest(1) + prompt("Output format") + } + field(AINP, DBF_STRING) { + special(SPC_NOMOD) + interest(1) + size(40) + prompt("Input (response) string") + } + field(TINP, DBF_STRING) { + special(SPC_NOMOD) + asl(ASL0) + interest(1) + size(40) + prompt("Translated input string") + } + field(IEOS, DBF_STRING) { + promptgroup("40 - Input") + special(SPC_MOD) + interest(1) + size(40) + prompt("Input Delimiter") + } + field(BINP, DBF_CHAR) { + special(SPC_DBADDR) + asl(ASL0) + prompt("Input binary data") + } + field(IPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *iptr") + interest(4) + size(4) + prompt("Input buffer pointer") + } + field(IMAX, DBF_LONG) { + promptgroup("40 - Input") + special(SPC_NOMOD) + initial("80") + interest(1) + prompt("Max. size of input array") + } + field(NRRD, DBF_LONG) { + promptgroup("40 - Input") + interest(1) + prompt("Number of bytes to read") + } + field(NORD, DBF_LONG) { + special(SPC_NOMOD) + interest(1) + prompt("Number of bytes read") + } + field(IFMT, DBF_MENU) { + promptgroup("40 - Input") + menu(asynFMT) + interest(1) + prompt("Input format") + } + field(EOMR, DBF_MENU) { + special(SPC_NOMOD) + menu(asynEOMREASON) + interest(1) + prompt("EOM reason") + } + field(I32INP, DBF_LONG) { + special(SPC_NOMOD) + interest(2) + prompt("asynInt32 input") + } + field(I32OUT, DBF_LONG) { + promptgroup("50 - Output") + interest(2) + pp(TRUE) + prompt("asynInt32 output") + } + field(UI32INP, DBF_ULONG) { + special(SPC_NOMOD) + interest(2) + prompt("asynUInt32Digital input") + } + field(UI32OUT, DBF_ULONG) { + promptgroup("50 - Output") + interest(2) + pp(TRUE) + prompt("asynUInt32Digital output") + } + field(UI32MASK, DBF_ULONG) { + promptgroup("50 - Output") + special(SPC_MOD) + interest(2) + initial("0xffffffff") + prompt("asynUInt32Digital mask") + } + field(F64INP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("asynFloat64 input") + } + field(F64OUT, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(2) + pp(TRUE) + prompt("asynFloat64 output") + } + field(BAUD, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialBAUD) + interest(2) + prompt("Baud rate") + } + field(LBAUD, DBF_LONG) { + promptgroup("31 - Serial") + special(SPC_MOD) + interest(2) + prompt("Baud rate") + } + field(PRTY, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialPRTY) + interest(2) + prompt("Parity") + } + field(DBIT, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialDBIT) + interest(2) + prompt("Data bits") + } + field(SBIT, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialSBIT) + interest(2) + prompt("Stop bits") + } + field(MCTL, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialMCTL) + interest(2) + prompt("Modem control") + } + field(FCTL, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialFCTL) + interest(2) + prompt("Flow control") + } + field(IXON, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialIX) + interest(2) + prompt("Output XON/XOFF") + } + field(IXOFF, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialIX) + interest(2) + prompt("Input XON/XOFF") + } + field(IXANY, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialIX) + interest(2) + prompt("XON=any character") + } + field(HOSTINFO, DBF_STRING) { + promptgroup("32 - IP") + special(SPC_MOD) + initial("") + interest(1) + size(40) + prompt("host info") + } + field(DRTO, DBF_MENU) { + promptgroup("32 - IP") + special(SPC_MOD) + menu(ipDRTO) + interest(2) + prompt("Disconnect on timeout") + } + field(UCMD, DBF_MENU) { + promptgroup("33 - GPIB") + menu(gpibUCMD) + interest(2) + pp(TRUE) + prompt("Universal command") + } + field(ACMD, DBF_MENU) { + promptgroup("33 - GPIB") + menu(gpibACMD) + interest(2) + pp(TRUE) + prompt("Addressed command") + } + field(SPR, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Serial poll response") + } + field(TMSK, DBF_LONG) { + promptgroup("80 - Display") + special(SPC_MOD) + interest(1) + prompt("Trace mask") + } + field(TB0, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace error") + } + field(TB1, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace IO device") + } + field(TB2, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace IO filter") + } + field(TB3, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace IO driver") + } + field(TB4, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace flow") + } + field(TB5, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace warning") + } + field(TIOM, DBF_LONG) { + promptgroup("80 - Display") + special(SPC_MOD) + interest(1) + prompt("Trace I/O mask") + } + field(TIB0, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace IO ASCII") + } + field(TIB1, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace IO escape") + } + field(TIB2, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace IO hex") + } + field(TINM, DBF_LONG) { + promptgroup("80 - Display") + special(SPC_MOD) + interest(1) + prompt("Trace Info mask") + } + field(TINB0, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace Info Time") + } + field(TINB1, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace Info Port") + } + field(TINB2, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace Info Source") + } + field(TINB3, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace Info Thread") + } + field(TSIZ, DBF_LONG) { + promptgroup("80 - Display") + special(SPC_MOD) + interest(1) + prompt("Trace IO truncate size") + } + field(TFIL, DBF_STRING) { + promptgroup("80 - Display") + special(SPC_MOD) + interest(1) + size(40) + prompt("Trace IO file") + } + field(AUCT, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_MOD) + menu(asynAUTOCONNECT) + interest(1) + prompt("Autoconnect") + } + field(CNCT, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_MOD) + menu(asynCONNECT) + interest(1) + prompt("Connect/Disconnect") + } + field(ENBL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_MOD) + menu(asynENABLE) + interest(1) + prompt("Enable/Disable") + } + field(ERRS, DBF_NOACCESS) { + special(SPC_DBADDR) + extra("char *errs") + interest(4) + prompt("Error string") + } + field(AQR, DBF_UCHAR) { + special(SPC_MOD) + interest(4) + prompt("Abort queueRequest") + } +} +device(asyn, INST_IO, asynRecordDevice, "asynRecordDevice") +recordtype(waveform) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct waveformRecord; + %typedef struct wfdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_wf)(struct waveformRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} wfdset; + %#define HAS_wfdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(RARM, DBF_SHORT) { + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Rearm the waveform") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(NELM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Number of Elements") + } + field(FTVL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_NOMOD) + menu(menuFtype) + interest(1) + prompt("Field Type of Value") + } + field(BUSY, DBF_SHORT) { + special(SPC_NOMOD) + prompt("Busy Indicator") + } + field(NORD, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Number elements read") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * bptr") + interest(4) + prompt("Buffer Pointer") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(waveformPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(waveformPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(HASH, DBF_ULONG) { + interest(3) + prompt("Hash of OnChange data.") + } +} +device(waveform, CONSTANT, devWfSoft, "Soft Channel") +device(waveform, INST_IO, devWaveformStats, "IOC stats") +device(waveform, INST_IO, devSysMonWaveStats, "sysmon") +device(waveform, INST_IO, asynWfOctetCmdResponse, "asynOctetCmdResponse") +device(waveform, INST_IO, asynWfOctetWriteRead, "asynOctetWriteRead") +device(waveform, INST_IO, asynWfOctetRead, "asynOctetRead") +device(waveform, INST_IO, asynWfOctetWrite, "asynOctetWrite") +device(waveform, INST_IO, asynWfOctetWriteBinary, "asynOctetWriteBinary") +device(waveform, INST_IO, asynInt8ArrayWfIn, "asynInt8ArrayIn") +device(waveform, INST_IO, asynInt8ArrayWfOut, "asynInt8ArrayOut") +device(waveform, INST_IO, asynInt16ArrayWfIn, "asynInt16ArrayIn") +device(waveform, INST_IO, asynInt16ArrayWfOut, "asynInt16ArrayOut") +device(waveform, INST_IO, asynInt32ArrayWfIn, "asynInt32ArrayIn") +device(waveform, INST_IO, asynInt32ArrayWfOut, "asynInt32ArrayOut") +device(waveform, INST_IO, asynInt32TimeSeries, "asynInt32TimeSeries") +device(waveform, INST_IO, asynFloat32ArrayWfIn, "asynFloat32ArrayIn") +device(waveform, INST_IO, asynFloat32ArrayWfOut, "asynFloat32ArrayOut") +device(waveform, INST_IO, asynFloat64ArrayWfIn, "asynFloat64ArrayIn") +device(waveform, INST_IO, asynFloat64ArrayWfOut, "asynFloat64ArrayOut") +device(waveform, INST_IO, asynFloat64TimeSeries, "asynFloat64TimeSeries") +device(waveform, INST_IO, asynInt64ArrayWfIn, "asynInt64ArrayIn") +device(waveform, INST_IO, asynInt64ArrayWfOut, "asynInt64ArrayOut") +device(waveform, INST_IO, asynInt64TimeSeries, "asynInt64TimeSeries") +recordtype(timestamp) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + prompt("Record Name") + size(61) + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + prompt("Descriptor") + size(41) + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + prompt("Access Security Group") + size(29) + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Event Name") + size(40) + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("epicsMutexId mlok") + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("ELLLIST mlis") + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("ELLLIST bklnk") + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + interest(2) + initial("YES") + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct asgMember *asp") + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct processNotify *ppn") + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct processNotifyRecord *ppnr") + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct scan_element *spvt") + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct typed_rset *rset") + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("unambiguous_dset *dset") + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("void *dpvt") + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct dbRecordType *rdes") + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct lockRecord *lset") + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(1) + extra("epicsUInt8 bkpt") + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + interest(1) + initial("1") + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + initial("INVALID") + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(2) + extra("epicsTimeStamp time") + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + size(40) + } + field(OVAL, DBF_STRING) { + special(SPC_NOMOD) + interest(3) + prompt("Previous Value") + size(40) + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Current Raw Value") + } + field(TST, DBF_MENU) { + promptgroup("40 - Input") + menu(timestampTST) + interest(2) + prompt("Time Stamp Type") + } +} +recordtype(fanout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + asl(ASL0) + pp(TRUE) + prompt("Used to trigger") + } + field(SELM, DBF_MENU) { + promptgroup("30 - Action") + menu(fanoutSELM) + interest(1) + prompt("Select Mechanism") + } + field(SELN, DBF_USHORT) { + initial("1") + interest(1) + prompt("Link Selection") + } + field(SELL, DBF_INLINK) { + promptgroup("30 - Action") + interest(1) + prompt("Link Selection Loc") + } + field(OFFS, DBF_SHORT) { + promptgroup("30 - Action") + initial("0") + interest(1) + prompt("Offset for Specified") + } + field(SHFT, DBF_SHORT) { + promptgroup("30 - Action") + initial("-1") + interest(1) + prompt("Shift for Mask mode") + } + field(LNK0, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 0") + } + field(LNK1, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 1") + } + field(LNK2, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 2") + } + field(LNK3, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 3") + } + field(LNK4, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 4") + } + field(LNK5, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 5") + } + field(LNK6, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 6") + } + field(LNK7, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 7") + } + field(LNK8, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 8") + } + field(LNK9, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 9") + } + field(LNKA, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 10") + } + field(LNKB, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 11") + } + field(LNKC, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 12") + } + field(LNKD, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 13") + } + field(LNKE, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 14") + } + field(LNKF, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 15") + } +} +recordtype(longin) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct longinRecord; + %typedef struct longindset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_longin)(struct longinRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} longindset; + %#define HAS_longindset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_LONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_LONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_LONG) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(ADEL, DBF_LONG) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_LONG) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Input Specifctn") + } + field(SVAL, DBF_LONG) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Mode Location") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Sim mode Alarm Svrty") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(longin, CONSTANT, devLiSoft, "Soft Channel") +device(longin, CONSTANT, devLiSoftCallback, "Async Soft Channel") +device(longin, INST_IO, devLiGeneralTime, "General Time") +device(longin, INST_IO, asynLiInt32, "asynInt32") +device(longin, INST_IO, asynLiUInt32Digital, "asynUInt32Digital") +device(longin, INST_IO, asynLiInt64, "asynInt64") +recordtype(printf) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct printfRecord; + %typedef struct printfdset { + % dset common; + % long (*write_string)(struct printfRecord *prec); + %} printfdset; + %#define HAS_printfdset + % + %/* Number of INPx fields defined */ + %#define PRINTF_NLINKS 10 + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("char *val") + pp(TRUE) + prompt("Result") + } + field(SIZV, DBF_USHORT) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("41") + interest(1) + prompt("Size of VAL buffer") + } + field(LEN, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Length of VAL") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(FMT, DBF_STRING) { + promptgroup("30 - Action") + pp(TRUE) + size(81) + prompt("Format String") + } + field(IVLS, DBF_STRING) { + promptgroup("30 - Action") + initial("LNK") + size(16) + prompt("Invalid Link String") + } + field(INP0, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 0") + } + field(INP1, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 1") + } + field(INP2, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 2") + } + field(INP3, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 3") + } + field(INP4, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 4") + } + field(INP5, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 5") + } + field(INP6, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 6") + } + field(INP7, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 7") + } + field(INP8, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 8") + } + field(INP9, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 9") + } +} +device(printf, CONSTANT, devPrintfSoft, "Soft Channel") +device(printf, CONSTANT, devPrintfSoftCallback, "Async Soft Channel") +device(printf, INST_IO, devPrintfStdio, "stdio") +device(printf, INST_IO, asynPfOctetWrite, "asynOctetWrite") +recordtype(sel) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("40 - Input") + special(SPC_NOMOD) + asl(ASL0) + prompt("Result") + } + field(SELM, DBF_MENU) { + promptgroup("30 - Action") + menu(selSELM) + prompt("Select Mechanism") + } + field(SELN, DBF_USHORT) { + prompt("Index value") + } + field(PREC, DBF_SHORT) { + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(NVL, DBF_INLINK) { + promptgroup("30 - Action") + interest(1) + prompt("Index Value Location") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input F") + } + field(INPG, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input L") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Rng") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(A, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input A") + } + field(B, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input B") + } + field(C, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input C") + } + field(D, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input D") + } + field(E, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input E") + } + field(F, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input F") + } + field(G, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input G") + } + field(H, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input H") + } + field(I, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input I") + } + field(J, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input J") + } + field(K, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input K") + } + field(L, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input L") + } + field(LA, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of A") + } + field(LB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of B") + } + field(LC, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of C") + } + field(LD, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of D") + } + field(LE, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of E") + } + field(LF, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of F") + } + field(LG, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of G") + } + field(LH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of H") + } + field(LI, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of I") + } + field(LJ, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of J") + } + field(LK, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of K") + } + field(LL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of L") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(NLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Index Monitored") + } +} +recordtype(bi) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct biRecord; + %typedef struct bidset { + % dset common; + % long (*read_bi)(struct biRecord *prec); + %} bidset; + %#define HAS_bidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(VAL, DBF_ENUM) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + } + field(ZSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Zero Error Severity") + } + field(OSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("One Error Severity") + } + field(COSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Change of State Svr") + } + field(ZNAM, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(26) + prompt("Zero Name") + } + field(ONAM, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(26) + prompt("One Name") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("prev Raw Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(LALM, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(MLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_ULONG) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuSimm) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(bi, CONSTANT, devBiSoft, "Soft Channel") +device(bi, CONSTANT, devBiSoftRaw, "Raw Soft Channel") +device(bi, CONSTANT, devBiSoftCallback, "Async Soft Channel") +device(bi, INST_IO, devBiDbState, "Db State") +device(bi, INST_IO, asynBiInt32, "asynInt32") +device(bi, INST_IO, asynBiUInt32Digital, "asynUInt32Digital") +recordtype(lso) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct lsoRecord; + %typedef struct lsodset { + % dset common; + % long (*write_string)(struct lsoRecord *prec); + %} lsodset; + %#define HAS_lsodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("char *val") + pp(TRUE) + prompt("Current Value") + } + field(OVAL, DBF_NOACCESS) { + special(SPC_DBADDR) + extra("char *oval") + interest(3) + prompt("Previous Value") + } + field(SIZV, DBF_USHORT) { + promptgroup("50 - Output") + special(SPC_NOMOD) + initial("41") + interest(1) + prompt("Size of buffers") + } + field(LEN, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Length of VAL") + } + field(OLEN, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Length of OVAL") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Link") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID Output Action") + } + field(IVOV, DBF_STRING) { + promptgroup("50 - Output") + interest(2) + size(40) + prompt("INVALID Output Value") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(menuPost) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(menuPost) + interest(1) + prompt("Post Archive Monitors") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(lso, CONSTANT, devLsoSoft, "Soft Channel") +device(lso, CONSTANT, devLsoSoftCallback, "Async Soft Channel") +device(lso, INST_IO, devLsoStdio, "stdio") +device(lso, INST_IO, asynLsoOctetWrite, "asynOctetWrite") +recordtype(subArray) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct subArrayRecord; + %typedef struct sadset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_sa)(struct subArrayRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} sadset; + %#define HAS_sadset + % + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(FTVL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_NOMOD) + menu(menuFtype) + interest(1) + prompt("Field Type of Value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(MALM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Maximum Elements") + } + field(NELM, DBF_ULONG) { + promptgroup("30 - Action") + initial("1") + pp(TRUE) + prompt("Number of Elements") + } + field(INDX, DBF_ULONG) { + promptgroup("30 - Action") + pp(TRUE) + prompt("Substring Index") + } + field(BUSY, DBF_SHORT) { + special(SPC_NOMOD) + prompt("Busy Indicator") + } + field(NORD, DBF_LONG) { + special(SPC_NOMOD) + prompt("Number elements read") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * bptr") + interest(4) + prompt("Buffer Pointer") + } +} +device(subArray, CONSTANT, devSASoft, "Soft Channel") +recordtype(calc) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %#include "postfix.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + prompt("Result") + } + field(CALC, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_CALC) + initial("0") + pp(TRUE) + size(80) + prompt("Calculation") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input F") + } + field(INPG, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input L") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Rng") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(A, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input A") + } + field(B, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input B") + } + field(C, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input C") + } + field(D, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input D") + } + field(E, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input E") + } + field(F, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input F") + } + field(G, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input G") + } + field(H, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input H") + } + field(I, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input I") + } + field(J, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input J") + } + field(K, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input K") + } + field(L, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input L") + } + field(LA, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of A") + } + field(LB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of B") + } + field(LC, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of C") + } + field(LD, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of D") + } + field(LE, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of E") + } + field(LF, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of F") + } + field(LG, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of G") + } + field(LH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of H") + } + field(LI, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of I") + } + field(LJ, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of J") + } + field(LK, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of K") + } + field(LL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of L") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(RPCL, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("char rpcl[INFIX_TO_POSTFIX_SIZE(80)]") + interest(4) + prompt("Reverse Polish Calc") + } +} +recordtype(mbboDirect) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct mbboDirectRecord; + %typedef struct mbbodirectdset { + % dset common; /*init_record returns: (0, 2)=>(success, success no convert)*/ + % long (*write_mbbo)(struct mbboDirectRecord *prec); /*returns: (0, 2)=>(success, success no convert)*/ + %} mbbodirectdset; + %#define HAS_mbbodirectdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Word") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + special(SPC_RESET) + menu(menuOmsl) + interest(1) + pp(TRUE) + prompt("Output Mode Select") + } + field(NOBT, DBF_SHORT) { + promptgroup("50 - Output") + special(SPC_NOMOD) + interest(1) + prompt("Number of Bits") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(RVAL, DBF_ULONG) { + special(SPC_NOMOD) + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Raw Value") + } + field(RBV, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Readback Value") + } + field(ORBV, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Readback Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(MLST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(SHFT, DBF_USHORT) { + promptgroup("50 - Output") + interest(1) + prompt("Shift") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID outpt action") + } + field(IVOV, DBF_LONG) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } + field(B0, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 0") + } + field(B1, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 1") + } + field(B2, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 2") + } + field(B3, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 3") + } + field(B4, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 4") + } + field(B5, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 5") + } + field(B6, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 6") + } + field(B7, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 7") + } + field(B8, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 8") + } + field(B9, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 9") + } + field(BA, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 10") + } + field(BB, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 11") + } + field(BC, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 12") + } + field(BD, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 13") + } + field(BE, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 14") + } + field(BF, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 15") + } + field(B10, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 16") + } + field(B11, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 17") + } + field(B12, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 18") + } + field(B13, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 19") + } + field(B14, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 20") + } + field(B15, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 21") + } + field(B16, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 22") + } + field(B17, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 23") + } + field(B18, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 24") + } + field(B19, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 25") + } + field(B1A, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 26") + } + field(B1B, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 27") + } + field(B1C, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 28") + } + field(B1D, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 29") + } + field(B1E, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 30") + } + field(B1F, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 31") + } +} +device(mbboDirect, CONSTANT, devMbboDirectSoft, "Soft Channel") +device(mbboDirect, CONSTANT, devMbboDirectSoftRaw, "Raw Soft Channel") +device(mbboDirect, CONSTANT, devMbboDirectSoftCallback, "Async Soft Channel") +device(mbboDirect, INST_IO, asynMbboDirectUInt32Digital, "asynUInt32Digital") +recordtype(longout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct longoutRecord; + %typedef struct longoutdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*write_longout)(struct longoutRecord *prec); /*(-1,0)=>(failure,success*/ + %} longoutdset; + %#define HAS_longoutdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Desired Output") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(DRVH, DBF_LONG) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive High Limit") + } + field(DRVL, DBF_LONG) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive Low Limit") + } + field(HOPR, DBF_LONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_LONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_LONG) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_LONG) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_LONG) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Output Specifctn") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Mode Location") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Sim mode Alarm Svrty") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_LONG) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } +} +device(longout, CONSTANT, devLoSoft, "Soft Channel") +device(longout, CONSTANT, devLoSoftCallback, "Async Soft Channel") +device(longout, INST_IO, asynLoInt32, "asynInt32") +device(longout, INST_IO, asynLoUInt32Digital, "asynUInt32Digital") +device(longout, INST_IO, asynLoInt64, "asynInt64") +recordtype(aSub) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %struct aSubRecord; + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + asl(ASL0) + prompt("Subr. return value") + } + field(OVAL, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Old return value") + } + field(INAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_NOMOD) + interest(1) + size(41) + prompt("Initialize Subr. Name") + } + field(LFLG, DBF_MENU) { + promptgroup("30 - Action") + menu(aSubLFLG) + interest(1) + prompt("Subr. Input Enable") + } + field(SUBL, DBF_INLINK) { + promptgroup("30 - Action") + special(SPC_NOMOD) + interest(1) + prompt("Subroutine Name Link") + } + field(SNAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_MOD) + interest(1) + size(41) + prompt("Process Subr. Name") + } + field(ONAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_NOMOD) + interest(3) + size(41) + prompt("Old Subr. Name") + } + field(SADR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("long (*sadr)(struct aSubRecord *)") + interest(2) + prompt("Subroutine Address") + } + field(CADR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void (*cadr)(struct aSubRecord *)") + interest(2) + prompt("Subroutine Cleanup Address") + } + field(BRSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Bad Return Severity") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(EFLG, DBF_MENU) { + promptgroup("50 - Output") + menu(aSubEFLG) + initial("1") + interest(1) + prompt("Output Event Flag") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link F") + } + field(INPG, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link L") + } + field(INPM, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link M") + } + field(INPN, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link N") + } + field(INPO, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link O") + } + field(INPP, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link P") + } + field(INPQ, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link Q") + } + field(INPR, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link R") + } + field(INPS, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link S") + } + field(INPT, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link T") + } + field(INPU, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link U") + } + field(A, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *a") + interest(2) + prompt("Input value A") + } + field(B, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *b") + interest(2) + prompt("Input value B") + } + field(C, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *c") + interest(2) + prompt("Input value C") + } + field(D, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *d") + interest(2) + prompt("Input value D") + } + field(E, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *e") + interest(2) + prompt("Input value E") + } + field(F, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *f") + interest(2) + prompt("Input value F") + } + field(G, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *g") + interest(2) + prompt("Input value G") + } + field(H, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *h") + interest(2) + prompt("Input value H") + } + field(I, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *i") + interest(2) + prompt("Input value I") + } + field(J, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *j") + interest(2) + prompt("Input value J") + } + field(K, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *k") + interest(2) + prompt("Input value K") + } + field(L, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *l") + interest(2) + prompt("Input value L") + } + field(M, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *m") + interest(2) + prompt("Input value M") + } + field(N, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *n") + interest(2) + prompt("Input value N") + } + field(O, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *o") + interest(2) + prompt("Input value O") + } + field(P, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *p") + interest(2) + prompt("Input value P") + } + field(Q, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *q") + interest(2) + prompt("Input value Q") + } + field(R, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *r") + interest(2) + prompt("Input value R") + } + field(S, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *s") + interest(2) + prompt("Input value S") + } + field(T, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *t") + interest(2) + prompt("Input value T") + } + field(U, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *u") + interest(2) + prompt("Input value U") + } + field(FTA, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of A") + } + field(FTB, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of B") + } + field(FTC, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of C") + } + field(FTD, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of D") + } + field(FTE, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of E") + } + field(FTF, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of F") + } + field(FTG, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of G") + } + field(FTH, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of H") + } + field(FTI, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of I") + } + field(FTJ, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of J") + } + field(FTK, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of K") + } + field(FTL, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of L") + } + field(FTM, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of M") + } + field(FTN, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of N") + } + field(FTO, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of O") + } + field(FTP, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of P") + } + field(FTQ, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of Q") + } + field(FTR, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of R") + } + field(FTS, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of S") + } + field(FTT, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of T") + } + field(FTU, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of U") + } + field(NOA, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in A") + } + field(NOB, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in B") + } + field(NOC, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in C") + } + field(NOD, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in D") + } + field(NOE, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in E") + } + field(NOF, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in F") + } + field(NOG, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in G") + } + field(NOH, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in H") + } + field(NOI, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in I") + } + field(NOJ, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in J") + } + field(NOK, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in K") + } + field(NOL, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in L") + } + field(NOM, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in M") + } + field(NON, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in N") + } + field(NOO, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in O") + } + field(NOP, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in P") + } + field(NOQ, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in Q") + } + field(NOR, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in R") + } + field(NOS, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in S") + } + field(NOT, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in T") + } + field(NOU, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in U") + } + field(NEA, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in A") + } + field(NEB, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in B") + } + field(NEC, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in C") + } + field(NED, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in D") + } + field(NEE, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in E") + } + field(NEF, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in F") + } + field(NEG, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in G") + } + field(NEH, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in H") + } + field(NEI, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in I") + } + field(NEJ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in J") + } + field(NEK, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in K") + } + field(NEL, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in L") + } + field(NEM, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in M") + } + field(NEN, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in N") + } + field(NEO, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in O") + } + field(NEP, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in P") + } + field(NEQ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in Q") + } + field(NER, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in R") + } + field(NES, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in S") + } + field(NET, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in T") + } + field(NEU, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in U") + } + field(OUTA, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link A") + } + field(OUTB, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link B") + } + field(OUTC, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link C") + } + field(OUTD, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link D") + } + field(OUTE, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link E") + } + field(OUTF, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link F") + } + field(OUTG, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link G") + } + field(OUTH, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link H") + } + field(OUTI, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link I") + } + field(OUTJ, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link J") + } + field(OUTK, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link K") + } + field(OUTL, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link L") + } + field(OUTM, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link M") + } + field(OUTN, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link N") + } + field(OUTO, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link O") + } + field(OUTP, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link P") + } + field(OUTQ, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link Q") + } + field(OUTR, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link R") + } + field(OUTS, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link S") + } + field(OUTT, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link T") + } + field(OUTU, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link U") + } + field(VALA, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vala") + interest(2) + prompt("Output value A") + } + field(VALB, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valb") + interest(2) + prompt("Output value B") + } + field(VALC, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valc") + interest(2) + prompt("Output value C") + } + field(VALD, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vald") + interest(2) + prompt("Output value D") + } + field(VALE, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vale") + interest(2) + prompt("Output value E") + } + field(VALF, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valf") + interest(2) + prompt("Output value F") + } + field(VALG, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valg") + interest(2) + prompt("Output value G") + } + field(VALH, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valh") + interest(2) + prompt("Output value H") + } + field(VALI, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vali") + interest(2) + prompt("Output value I") + } + field(VALJ, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valj") + interest(2) + prompt("Output value J") + } + field(VALK, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valk") + interest(2) + prompt("Output value K") + } + field(VALL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vall") + interest(2) + prompt("Output value L") + } + field(VALM, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valm") + interest(2) + prompt("Output value M") + } + field(VALN, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valn") + interest(2) + prompt("Output value N") + } + field(VALO, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valo") + interest(2) + prompt("Output value O") + } + field(VALP, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valp") + interest(2) + prompt("Output value P") + } + field(VALQ, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valq") + interest(2) + prompt("Output value Q") + } + field(VALR, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valr") + interest(2) + prompt("Output value R") + } + field(VALS, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vals") + interest(2) + prompt("Output value S") + } + field(VALT, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valt") + interest(2) + prompt("Output value T") + } + field(VALU, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valu") + interest(2) + prompt("Output value U") + } + field(OVLA, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovla") + interest(4) + prompt("Old Output A") + } + field(OVLB, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlb") + interest(4) + prompt("Old Output B") + } + field(OVLC, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlc") + interest(4) + prompt("Old Output C") + } + field(OVLD, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovld") + interest(4) + prompt("Old Output D") + } + field(OVLE, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovle") + interest(4) + prompt("Old Output E") + } + field(OVLF, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlf") + interest(4) + prompt("Old Output F") + } + field(OVLG, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlg") + interest(4) + prompt("Old Output G") + } + field(OVLH, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlh") + interest(4) + prompt("Old Output H") + } + field(OVLI, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovli") + interest(4) + prompt("Old Output I") + } + field(OVLJ, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlj") + interest(4) + prompt("Old Output J") + } + field(OVLK, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlk") + interest(4) + prompt("Old Output K") + } + field(OVLL, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovll") + interest(4) + prompt("Old Output L") + } + field(OVLM, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlm") + interest(4) + prompt("Old Output M") + } + field(OVLN, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovln") + interest(4) + prompt("Old Output N") + } + field(OVLO, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlo") + interest(4) + prompt("Old Output O") + } + field(OVLP, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlp") + interest(4) + prompt("Old Output P") + } + field(OVLQ, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlq") + interest(4) + prompt("Old Output Q") + } + field(OVLR, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlr") + interest(4) + prompt("Old Output R") + } + field(OVLS, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovls") + interest(4) + prompt("Old Output S") + } + field(OVLT, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlt") + interest(4) + prompt("Old Output T") + } + field(OVLU, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlu") + interest(4) + prompt("Old Output U") + } + field(FTVA, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALA") + } + field(FTVB, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALB") + } + field(FTVC, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALC") + } + field(FTVD, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALD") + } + field(FTVE, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALE") + } + field(FTVF, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALF") + } + field(FTVG, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALG") + } + field(FTVH, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALH") + } + field(FTVI, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALI") + } + field(FTVJ, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALJ") + } + field(FTVK, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALK") + } + field(FTVL, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALL") + } + field(FTVM, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALM") + } + field(FTVN, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALN") + } + field(FTVO, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALO") + } + field(FTVP, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALP") + } + field(FTVQ, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALQ") + } + field(FTVR, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALR") + } + field(FTVS, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALS") + } + field(FTVT, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALT") + } + field(FTVU, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALU") + } + field(NOVA, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALA") + } + field(NOVB, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALB") + } + field(NOVC, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALC") + } + field(NOVD, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALD") + } + field(NOVE, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALE") + } + field(NOVF, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALF") + } + field(NOVG, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALG") + } + field(NOVH, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VAlH") + } + field(NOVI, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALI") + } + field(NOVJ, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALJ") + } + field(NOVK, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALK") + } + field(NOVL, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALL") + } + field(NOVM, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALM") + } + field(NOVN, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALN") + } + field(NOVO, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALO") + } + field(NOVP, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALP") + } + field(NOVQ, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALQ") + } + field(NOVR, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALR") + } + field(NOVS, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALS") + } + field(NOVT, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALT") + } + field(NOVU, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALU") + } + field(NEVA, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALA") + } + field(NEVB, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALB") + } + field(NEVC, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALC") + } + field(NEVD, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALD") + } + field(NEVE, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALE") + } + field(NEVF, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALF") + } + field(NEVG, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALG") + } + field(NEVH, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VAlH") + } + field(NEVI, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALI") + } + field(NEVJ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALJ") + } + field(NEVK, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALK") + } + field(NEVL, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALL") + } + field(NEVM, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALM") + } + field(NEVN, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALN") + } + field(NEVO, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALO") + } + field(NEVP, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALP") + } + field(NEVQ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALQ") + } + field(NEVR, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALR") + } + field(NEVS, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALS") + } + field(NEVT, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALT") + } + field(NEVU, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALU") + } + field(ONVA, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLA") + } + field(ONVB, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLB") + } + field(ONVC, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLC") + } + field(ONVD, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLD") + } + field(ONVE, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLE") + } + field(ONVF, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLF") + } + field(ONVG, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLG") + } + field(ONVH, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in VAlH") + } + field(ONVI, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLI") + } + field(ONVJ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLJ") + } + field(ONVK, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLK") + } + field(ONVL, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLL") + } + field(ONVM, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLM") + } + field(ONVN, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLN") + } + field(ONVO, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLO") + } + field(ONVP, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLP") + } + field(ONVQ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLQ") + } + field(ONVR, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLR") + } + field(ONVS, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLS") + } + field(ONVT, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLT") + } + field(ONVU, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLU") + } +} +recordtype(sub) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %struct subRecord; + %typedef long (*SUBFUNCPTR)(struct subRecord *); + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + asl(ASL0) + pp(TRUE) + prompt("Result") + } + field(INAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_NOMOD) + interest(1) + size(40) + prompt("Init Routine Name") + } + field(SNAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_MOD) + interest(1) + size(40) + prompt("Subroutine Name") + } + field(SADR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("SUBFUNCPTR sadr") + interest(4) + prompt("Subroutine Address") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input F") + } + field(INPG, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input L") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(BRSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Bad Return Severity") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(A, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input A") + } + field(B, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input B") + } + field(C, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input C") + } + field(D, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input D") + } + field(E, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input E") + } + field(F, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input F") + } + field(G, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input G") + } + field(H, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input H") + } + field(I, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input I") + } + field(J, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input J") + } + field(K, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input K") + } + field(L, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input L") + } + field(LA, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of A") + } + field(LB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of B") + } + field(LC, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of C") + } + field(LD, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of D") + } + field(LE, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of E") + } + field(LF, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of F") + } + field(LG, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of G") + } + field(LH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of H") + } + field(LI, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of I") + } + field(LJ, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of J") + } + field(LK, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of K") + } + field(LL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of L") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } +} +recordtype(int64in) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct int64inRecord; + %typedef struct int64indset { + % dset common; + % long (*read_int64in)(struct int64inRecord *prec); + %} int64indset; + %#define HAS_int64indset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_INT64) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Units name") + } + field(HOPR, DBF_INT64) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_INT64) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_INT64) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(ADEL, DBF_INT64) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_INT64) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_INT64) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(int64in, CONSTANT, devI64inSoft, "Soft Channel") +device(int64in, CONSTANT, devI64inSoftCallback, "Async Soft Channel") +device(int64in, INST_IO, asynInt64In, "asynInt64") +recordtype(ai) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct aiRecord; + %typedef struct aidset { + % dset common; + % long (*read_ai)(struct aiRecord *prec); + % long (*special_linconv)(struct aiRecord *prec, int after); + %} aidset; + %#define HAS_aidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current EGU Value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(LINR, DBF_MENU) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + menu(menuConvert) + interest(1) + pp(TRUE) + prompt("Linearization") + } + field(EGUF, DBF_DOUBLE) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + interest(1) + pp(TRUE) + prompt("Engineer Units Full") + } + field(EGUL, DBF_DOUBLE) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + interest(1) + pp(TRUE) + prompt("Engineer Units Low") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(AOFF, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(1) + pp(TRUE) + prompt("Adjustment Offset") + } + field(ASLO, DBF_DOUBLE) { + promptgroup("60 - Convert") + initial("1") + interest(1) + pp(TRUE) + prompt("Adjustment Slope") + } + field(SMOO, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(1) + prompt("Smoothing") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(ESLO, DBF_DOUBLE) { + promptgroup("60 - Convert") + initial("1") + interest(2) + pp(TRUE) + prompt("Raw to EGU Slope") + } + field(EOFF, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(2) + pp(TRUE) + prompt("Raw to EGU Offset") + } + field(ROFF, DBF_ULONG) { + interest(2) + pp(TRUE) + prompt("Raw Offset") + } + field(PBRK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * pbrk") + interest(4) + prompt("Ptrto brkTable") + } + field(INIT, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Initialized?") + } + field(LBRK, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("LastBreak Point") + } + field(RVAL, DBF_LONG) { + pp(TRUE) + prompt("Current Raw Value") + } + field(ORAW, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Previous Raw Value") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_DOUBLE) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuSimm) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(ai, CONSTANT, devAiSoft, "Soft Channel") +device(ai, CONSTANT, devAiSoftRaw, "Raw Soft Channel") +device(ai, CONSTANT, devAiSoftCallback, "Async Soft Channel") +device(ai, INST_IO, devTimestampAI, "Soft Timestamp") +device(ai, INST_IO, devAiGeneralTime, "General Time") +device(ai, INST_IO, devAiStats, "IOC stats") +device(ai, INST_IO, devAiClusts, "IOC stats clusts") +device(ai, CONSTANT, devAiDBCLC, "DBCLC") +device(ai, CONSTANT, devAiDBDLC, "DBDLC") +device(ai, INST_IO, devSysMonAiStats, "sysmon") +device(ai, INST_IO, asynAiInt32, "asynInt32") +device(ai, INST_IO, asynAiInt32Average, "asynInt32Average") +device(ai, INST_IO, asynAiFloat64, "asynFloat64") +device(ai, INST_IO, asynAiFloat64Average, "asynFloat64Average") +device(ai, INST_IO, asynAiInt64, "asynInt64") +recordtype(stringin) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct stringinRecord; + %typedef struct stringindset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_stringin)(struct stringinRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} stringindset; + %#define HAS_stringindset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + size(40) + prompt("Current Value") + } + field(OVAL, DBF_STRING) { + special(SPC_NOMOD) + interest(3) + size(40) + prompt("Previous Value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(stringinPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(stringinPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_STRING) { + pp(TRUE) + size(40) + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(stringin, CONSTANT, devSiSoft, "Soft Channel") +device(stringin, CONSTANT, devSiSoftCallback, "Async Soft Channel") +device(stringin, INST_IO, devTimestampSI, "Soft Timestamp") +device(stringin, INST_IO, devSiGeneralTime, "General Time") +device(stringin, INST_IO, devSiEnviron, "getenv") +device(stringin, INST_IO, devStringinStats, "IOC stats") +device(stringin, INST_IO, devStringinEnvVar, "IOC env var") +device(stringin, INST_IO, devStringinEpics, "IOC epics var") +device(stringin, INST_IO, devSysMonSiStats, "sysmon") +device(stringin, INST_IO, asynSiOctetCmdResponse, "asynOctetCmdResponse") +device(stringin, INST_IO, asynSiOctetWriteRead, "asynOctetWriteRead") +device(stringin, INST_IO, asynSiOctetRead, "asynOctetRead") +driver(drvAsyn) +link(state, lnkStateIf) +link(calc, lnkCalcIf) +link(trace, lnkTraceIf) +link(debug, lnkDebugIf) +link(const, lnkConstIf) +registrar(drvAsynSerialPortRegisterCommands) +registrar(drvCodacHeaderRegister) +registrar(tsInitialize) +registrar(syncInitialize) +registrar(dbrestoreRegister) +registrar(iocSetLogLevelRegister) +registrar(save_restoreRegister) +registrar(asynRegister) +registrar(decInitialize) +registrar(iocSetSimEnableRegister) +registrar(drvCodacRedundantPlcRegister) +registrar(asynInterposeFlushRegister) +registrar(drvAsynIPPortRegisterCommands) +registrar(drvBlockTCPRegister) +registrar(asynInterposeEchoRegister) +registrar(arrInitialize) +registrar(asInitHooksRegister) +registrar(drvBlockTCPEventRegister) +registrar(asynInterposeDelayRegister) +registrar(dbndInitialize) +registrar(drvBlockTCPRedundantPlcRegister) +registrar(iocSetLogSyslogRegister) +registrar(drvAsynIPServerPortRegisterCommands) +registrar(configMenuRegistrar) +registrar(asSub) +registrar(iocSetLogStdoutRegister) +registrar(asynInterposeEosRegister) +registrar(rsrvRegistrar) +registrar(iocSetLogInitRegister) +function(scanMon) +function(rebootProc) +function(scanMonInit) +variable(dbTemplateMaxVars, int) +variable(lnkDebug_debug, int) +variable(asCaDebug, int) +variable(callbackParallelThreadsDefault, int) +variable(save_restoreRemountThreshold, int) +variable(dbAccessDebugPUTF, int) +variable(dbRecordsOnceOnly, int) +variable(save_restoreDebug, int) +variable(save_restoreDatedBackupFiles, int) +variable(calcoutODLYlimit, double) +variable(configMenuDebug, int) +variable(save_restoreIncompleteSetsOk, int) +variable(dbBptNotMonotonic, int) +variable(atExitDebug, int) +variable(boHIGHlimit, double) +variable(dbJLinkDebug, int) +variable(dbConvertStrict, int) +variable(seqDLYprecision, int) +variable(logClientDebug, int) +variable(dbQuietMacroWarnings, int) +variable(save_restoreNumSeqFiles, int) +variable(boHIGHprecision, int) +variable(dbRecordsAbcSorted, int) +variable(seqDLYlimit, double) +variable(calcoutODLYprecision, int) +variable(histogramSDELprecision, int) +variable(dbThreadRealtimeLock, int) +variable(CASDEBUG, int) +variable(save_restoreSeqPeriodInSeconds, int) diff --git a/EC-GN-JA-PCF/target/main/epics/dbd/EC-GN.dbd b/EC-GN-JA-PCF/target/main/epics/dbd/EC-GN.dbd new file mode 100644 index 0000000..c98cde5 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/dbd/EC-GN.dbd @@ -0,0 +1,18666 @@ +menu(waveformPOST) { + choice(waveformPOST_Always, "Always") + choice(waveformPOST_OnChange, "On Change") +} +menu(aaoPOST) { + choice(aaoPOST_Always, "Always") + choice(aaoPOST_OnChange, "On Change") +} +menu(menuPriority) { + choice(menuPriorityLOW, "LOW") + choice(menuPriorityMEDIUM, "MEDIUM") + choice(menuPriorityHIGH, "HIGH") +} +menu(calcoutDOPT) { + choice(calcoutDOPT_Use_VAL, "Use CALC") + choice(calcoutDOPT_Use_OVAL, "Use OCAL") +} +menu(menuOmsl) { + choice(menuOmslsupervisory, "supervisory") + choice(menuOmslclosed_loop, "closed_loop") +} +menu(menuFtype) { + choice(menuFtypeSTRING, "STRING") + choice(menuFtypeCHAR, "CHAR") + choice(menuFtypeUCHAR, "UCHAR") + choice(menuFtypeSHORT, "SHORT") + choice(menuFtypeUSHORT, "USHORT") + choice(menuFtypeLONG, "LONG") + choice(menuFtypeULONG, "ULONG") + choice(menuFtypeINT64, "INT64") + choice(menuFtypeUINT64, "UINT64") + choice(menuFtypeFLOAT, "FLOAT") + choice(menuFtypeDOUBLE, "DOUBLE") + choice(menuFtypeENUM, "ENUM") +} +menu(stringinPOST) { + choice(stringinPOST_OnChange, "On Change") + choice(stringinPOST_Always, "Always") +} +menu(menuPini) { + choice(menuPiniNO, "NO") + choice(menuPiniYES, "YES") + choice(menuPiniRUN, "RUN") + choice(menuPiniRUNNING, "RUNNING") + choice(menuPiniPAUSE, "PAUSE") + choice(menuPiniPAUSED, "PAUSED") +} +menu(dfanoutSELM) { + choice(dfanoutSELM_All, "All") + choice(dfanoutSELM_Specified, "Specified") + choice(dfanoutSELM_Mask, "Mask") +} +menu(menuScan) { + choice(menuScanPassive, "Passive") + choice(menuScanEvent, "Event") + choice(menuScanI_O_Intr, "I/O Intr") + choice(menuScan10_second, "10 second") + choice(menuScan5_second, "5 second") + choice(menuScan2_second, "2 second") + choice(menuScan1_second, "1 second") + choice(menuScan_5_second, ".5 second") + choice(menuScan_2_second, ".2 second") + choice(menuScan_1_second, ".1 second") +} +menu(aSubLFLG) { + choice(aSubLFLG_IGNORE, "IGNORE") + choice(aSubLFLG_READ, "READ") +} +menu(menuPost) { + choice(menuPost_OnChange, "On Change") + choice(menuPost_Always, "Always") +} +menu(menuAlarmStat) { + choice(menuAlarmStatNO_ALARM, "NO_ALARM") + choice(menuAlarmStatREAD, "READ") + choice(menuAlarmStatWRITE, "WRITE") + choice(menuAlarmStatHIHI, "HIHI") + choice(menuAlarmStatHIGH, "HIGH") + choice(menuAlarmStatLOLO, "LOLO") + choice(menuAlarmStatLOW, "LOW") + choice(menuAlarmStatSTATE, "STATE") + choice(menuAlarmStatCOS, "COS") + choice(menuAlarmStatCOMM, "COMM") + choice(menuAlarmStatTIMEOUT, "TIMEOUT") + choice(menuAlarmStatHWLIMIT, "HWLIMIT") + choice(menuAlarmStatCALC, "CALC") + choice(menuAlarmStatSCAN, "SCAN") + choice(menuAlarmStatLINK, "LINK") + choice(menuAlarmStatSOFT, "SOFT") + choice(menuAlarmStatBAD_SUB, "BAD_SUB") + choice(menuAlarmStatUDF, "UDF") + choice(menuAlarmStatDISABLE, "DISABLE") + choice(menuAlarmStatSIMM, "SIMM") + choice(menuAlarmStatREAD_ACCESS, "READ_ACCESS") + choice(menuAlarmStatWRITE_ACCESS, "WRITE_ACCESS") +} +menu(aoOIF) { + choice(aoOIF_Full, "Full") + choice(aoOIF_Incremental, "Incremental") +} +menu(bufferingALG) { + choice(bufferingALG_FIFO, "FIFO Buffer") + choice(bufferingALG_LIFO, "LIFO Buffer") +} +menu(aaiPOST) { + choice(aaiPOST_Always, "Always") + choice(aaiPOST_OnChange, "On Change") +} +menu(calcoutINAV) { + choice(calcoutINAV_EXT_NC, "Ext PV NC") + choice(calcoutINAV_EXT, "Ext PV OK") + choice(calcoutINAV_LOC, "Local PV") + choice(calcoutINAV_CON, "Constant") +} +menu(epidFeedbackState) { + choice(epidFeedbackState_Off, "Off") + choice(epidFeedbackState_On, "On") +} +menu(seqSELM) { + choice(seqSELM_All, "All") + choice(seqSELM_Specified, "Specified") + choice(seqSELM_Mask, "Mask") +} +menu(histogramCMD) { + choice(histogramCMD_Read, "Read") + choice(histogramCMD_Clear, "Clear") + choice(histogramCMD_Start, "Start") + choice(histogramCMD_Stop, "Stop") +} +menu(menuIvoa) { + choice(menuIvoaContinue_normally, "Continue normally") + choice(menuIvoaDon_t_drive_outputs, "Don't drive outputs") + choice(menuIvoaSet_output_to_IVOV, "Set output to IVOV") +} +menu(stringoutPOST) { + choice(stringoutPOST_OnChange, "On Change") + choice(stringoutPOST_Always, "Always") +} +menu(menuAlarmSevr) { + choice(menuAlarmSevrNO_ALARM, "NO_ALARM") + choice(menuAlarmSevrMINOR, "MINOR") + choice(menuAlarmSevrMAJOR, "MAJOR") + choice(menuAlarmSevrINVALID, "INVALID") +} +menu(menuSimm) { + choice(menuSimmNO, "NO") + choice(menuSimmYES, "YES") + choice(menuSimmRAW, "RAW") +} +menu(compressALG) { + choice(compressALG_N_to_1_Low_Value, "N to 1 Low Value") + choice(compressALG_N_to_1_High_Value, "N to 1 High Value") + choice(compressALG_N_to_1_Average, "N to 1 Average") + choice(compressALG_Average, "Average") + choice(compressALG_Circular_Buffer, "Circular Buffer") + choice(compressALG_N_to_1_Median, "N to 1 Median") +} +menu(aSubEFLG) { + choice(aSubEFLG_NEVER, "NEVER") + choice(aSubEFLG_ON_CHANGE, "ON CHANGE") + choice(aSubEFLG_ALWAYS, "ALWAYS") +} +menu(fanoutSELM) { + choice(fanoutSELM_All, "All") + choice(fanoutSELM_Specified, "Specified") + choice(fanoutSELM_Mask, "Mask") +} +menu(calcoutOOPT) { + choice(calcoutOOPT_Every_Time, "Every Time") + choice(calcoutOOPT_On_Change, "On Change") + choice(calcoutOOPT_When_Zero, "When Zero") + choice(calcoutOOPT_When_Non_zero, "When Non-zero") + choice(calcoutOOPT_Transition_To_Zero, "Transition To Zero") + choice(calcoutOOPT_Transition_To_Non_zero, "Transition To Non-zero") +} +menu(epidFeedbackMode) { + choice(epidFeedbackMode_PID, "PID") + choice(epidFeedbackMode_MaxMin, "Max/Min") +} +menu(menuConvert) { + choice(menuConvertNO_CONVERSION, "NO CONVERSION") + choice(menuConvertSLOPE, "SLOPE") + choice(menuConvertLINEAR, "LINEAR") + choice(menuConverttypeKdegF, "typeKdegF") + choice(menuConverttypeKdegC, "typeKdegC") + choice(menuConverttypeJdegF, "typeJdegF") + choice(menuConverttypeJdegC, "typeJdegC") + choice(menuConverttypeEdegF, "typeEdegF(ixe only)") + choice(menuConverttypeEdegC, "typeEdegC(ixe only)") + choice(menuConverttypeTdegF, "typeTdegF") + choice(menuConverttypeTdegC, "typeTdegC") + choice(menuConverttypeRdegF, "typeRdegF") + choice(menuConverttypeRdegC, "typeRdegC") + choice(menuConverttypeSdegF, "typeSdegF") + choice(menuConverttypeSdegC, "typeSdegC") +} +menu(menuYesNo) { + choice(menuYesNoNO, "NO") + choice(menuYesNoYES, "YES") +} +menu(timestampTST) { + choice(timestampTST_YY_MM_DD_HH_MM_SS, "YY/MM/DD HH:MM:SS") + choice(timestampTST_MM_DD_YY_HH_MM_SS, "MM/DD/YY HH:MM:SS") + choice(timestampTST_MM_DD_HH_MM_SS_YY, "Mon DD HH:MM:SS YY") + choice(timestampTST_MM_DD_HH_MM_SS, "Mon DD HH:MM:SS") + choice(timestampTST_HH_MM_SS, "HH:MM:SS") + choice(timestampTST_HH_MM, "HH:MM") + choice(timestampTST_DD_MM_YY_HH_MM_SS, "DD/MM/YY HH:MM:SS") + choice(timestampTST_DD_MM_HH_MM_SS_YY, "DD Mon HH:MM:SS YY") + choice(timestampTST_VMS, "DD-Mon-YYYY HH:MM:SS") + choice(timestampTST_MM_DD_YYYY, "Mon DD, YYYY HH:MM:SS.ns") + choice(timestampTST_MM_DD_YY, "MM/DD/YY HH:MM:SS.ns") +} +menu(selSELM) { + choice(selSELM_Specified, "Specified") + choice(selSELM_High_Signal, "High Signal") + choice(selSELM_Low_Signal, "Low Signal") + choice(selSELM_Median_Signal, "Median Signal") +} +recordtype(calcout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct calcoutRecord; + %typedef struct calcoutdset { + % dset common; + % long (*write)(struct calcoutRecord *prec); + %} calcoutdset; + %#define HAS_calcoutdset + % + %#include "dbScan.h" + %#include "postfix.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(RPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct rpvtStruct *rpvt") + interest(4) + prompt("Record Private") + } + field(VAL, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + prompt("Result") + } + field(PVAL, DBF_DOUBLE) { + prompt("Previous Value") + } + field(CALC, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_CALC) + initial("0") + pp(TRUE) + size(80) + prompt("Calculation") + } + field(CLCV, DBF_LONG) { + interest(1) + prompt("CALC Valid") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input F") + } + field(INPG, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input L") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + special(SPC_MOD) + interest(1) + prompt("Output Specification") + } + field(INAV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPA PV Status") + } + field(INBV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPB PV Status") + } + field(INCV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPC PV Status") + } + field(INDV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPD PV Status") + } + field(INEV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPE PV Status") + } + field(INFV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPF PV Status") + } + field(INGV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPG PV Status") + } + field(INHV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPH PV Status") + } + field(INIV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPI PV Status") + } + field(INJV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPJ PV Status") + } + field(INKV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPK PV Status") + } + field(INLV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPL PV Status") + } + field(OUTV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + interest(1) + prompt("OUT PV Status") + } + field(OOPT, DBF_MENU) { + promptgroup("50 - Output") + menu(calcoutOOPT) + interest(1) + prompt("Output Execute Opt") + } + field(ODLY, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + interest(1) + prompt("Output Execute Delay") + } + field(DLYA, DBF_USHORT) { + special(SPC_NOMOD) + asl(ASL0) + prompt("Output Delay Active") + } + field(DOPT, DBF_MENU) { + promptgroup("30 - Action") + menu(calcoutDOPT) + interest(1) + prompt("Output Data Opt") + } + field(OCAL, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_CALC) + initial("0") + pp(TRUE) + size(80) + prompt("Output Calculation") + } + field(OCLV, DBF_LONG) { + interest(1) + prompt("OCAL Valid") + } + field(OEVT, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_MOD) + asl(ASL0) + size(40) + prompt("Event To Issue") + } + field(EPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("EVENTPVT epvt") + interest(4) + prompt("Event private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Rng") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(A, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input A") + } + field(B, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input B") + } + field(C, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input C") + } + field(D, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input D") + } + field(E, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input E") + } + field(F, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input F") + } + field(G, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input G") + } + field(H, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input H") + } + field(I, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input I") + } + field(J, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input J") + } + field(K, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input K") + } + field(L, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input L") + } + field(OVAL, DBF_DOUBLE) { + asl(ASL0) + prompt("Output Value") + } + field(LA, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of A") + } + field(LB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of B") + } + field(LC, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of C") + } + field(LD, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of D") + } + field(LE, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of E") + } + field(LF, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of F") + } + field(LG, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of G") + } + field(LH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of H") + } + field(LI, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of I") + } + field(LJ, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of J") + } + field(LK, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of K") + } + field(LL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of L") + } + field(POVL, DBF_DOUBLE) { + asl(ASL0) + prompt("Prev Value of OVAL") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(RPCL, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("char rpcl[INFIX_TO_POSTFIX_SIZE(80)]") + interest(4) + prompt("Reverse Polish Calc") + } + field(ORPC, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("char orpc[INFIX_TO_POSTFIX_SIZE(80)]") + interest(4) + prompt("Reverse Polish OCalc") + } +} +device(calcout, CONSTANT, devCalcoutSoft, "Soft Channel") +device(calcout, CONSTANT, devCalcoutSoftCallback, "Async Soft Channel") +recordtype(state) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + size(20) + prompt("Value") + } + field(OVAL, DBF_STRING) { + special(SPC_NOMOD) + interest(3) + size(20) + prompt("Prev Value") + } +} +recordtype(histogram) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct histogramRecord; + %typedef struct histogramdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_histogram)(struct histogramRecord *prec); /*(0,2)=> success and add_count, don't add_count); if add_count then sgnl added to array*/ + % long (*special_linconv)(struct histogramRecord *prec, int after); + %} histogramdset; + %#define HAS_histogramdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + prompt("Value") + } + field(NELM, DBF_USHORT) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Num of Array Elements") + } + field(CSTA, DBF_SHORT) { + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Collection Status") + } + field(CMD, DBF_MENU) { + special(SPC_CALC) + asl(ASL0) + menu(histogramCMD) + interest(1) + prompt("Collection Control") + } + field(ULIM, DBF_DOUBLE) { + prop(YES) + promptgroup("30 - Action") + special(SPC_RESET) + interest(1) + prompt("Upper Signal Limit") + } + field(LLIM, DBF_DOUBLE) { + prop(YES) + promptgroup("30 - Action") + special(SPC_RESET) + interest(1) + prompt("Lower Signal Limit ") + } + field(WDTH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Element Width") + } + field(SGNL, DBF_DOUBLE) { + special(SPC_MOD) + prompt("Signal Value") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(SVL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Signal Value Location") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt32 *bptr") + interest(4) + prompt("Buffer Pointer") + } + field(WDOG, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * wdog") + interest(4) + prompt("Watchdog callback") + } + field(MDEL, DBF_SHORT) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Count Deadband") + } + field(MCNT, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Counts Since Monitor") + } + field(SDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + special(SPC_RESET) + interest(1) + prompt("Monitor Seconds Dband") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_DOUBLE) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(HOPR, DBF_ULONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_ULONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } +} +device(histogram, CONSTANT, devHistogramSoft, "Soft Channel") +recordtype(lsi) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct lsiRecord; + %typedef struct lsidset { + % dset common; + % long (*read_string)(struct lsiRecord *prec); + %} lsidset; + %#define HAS_lsidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("char *val") + pp(TRUE) + prompt("Current Value") + } + field(OVAL, DBF_NOACCESS) { + special(SPC_DBADDR) + extra("char *oval") + interest(3) + prompt("Old Value") + } + field(SIZV, DBF_USHORT) { + promptgroup("40 - Input") + special(SPC_NOMOD) + initial("41") + interest(1) + prompt("Size of buffers") + } + field(LEN, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Length of VAL") + } + field(OLEN, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Length of OVAL") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(menuPost) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(menuPost) + interest(1) + prompt("Post Archive Monitors") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(lsi, CONSTANT, devLsiSoft, "Soft Channel") +device(lsi, INST_IO, devLsiEnviron, "getenv") +device(lsi, INST_IO, devLsiStats, "IOC long string") +recordtype(int64out) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct int64outRecord; + %typedef struct int64outdset { + % dset common; + % long (*write_int64out)(struct int64outRecord *prec); + %} int64outdset; + %#define HAS_int64outdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_INT64) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Desired Output") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Units name") + } + field(DRVH, DBF_INT64) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive High Limit") + } + field(DRVL, DBF_INT64) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive Low Limit") + } + field(HOPR, DBF_INT64) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_INT64) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_INT64) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_INT64) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_INT64) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_INT64) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } +} +device(int64out, CONSTANT, devI64outSoft, "Soft Channel") +device(int64out, CONSTANT, devI64outSoftCallback, "Async Soft Channel") +recordtype(seq) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + asl(ASL0) + pp(TRUE) + prompt("Used to trigger") + } + field(SELM, DBF_MENU) { + promptgroup("30 - Action") + menu(seqSELM) + interest(1) + prompt("Select Mechanism") + } + field(SELN, DBF_USHORT) { + initial("1") + interest(1) + prompt("Link Selection") + } + field(SELL, DBF_INLINK) { + promptgroup("30 - Action") + interest(1) + prompt("Link Selection Loc") + } + field(OFFS, DBF_SHORT) { + promptgroup("30 - Action") + initial("0") + interest(1) + prompt("Offset for Specified") + } + field(SHFT, DBF_SHORT) { + promptgroup("30 - Action") + initial("-1") + interest(1) + prompt("Shift for Mask mode") + } + field(OLDN, DBF_USHORT) { + interest(4) + prompt("Old Selection") + } + field(PREC, DBF_SHORT) { + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(DLY0, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 0") + } + field(DOL0, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 0") + } + field(DO0, DBF_DOUBLE) { + interest(1) + prompt("Value 0") + } + field(LNK0, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 0") + } + field(DLY1, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 1") + } + field(DOL1, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link1") + } + field(DO1, DBF_DOUBLE) { + interest(1) + prompt("Value 1") + } + field(LNK1, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 1") + } + field(DLY2, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 2") + } + field(DOL2, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 2") + } + field(DO2, DBF_DOUBLE) { + interest(1) + prompt("Value 2") + } + field(LNK2, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 2") + } + field(DLY3, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 3") + } + field(DOL3, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 3") + } + field(DO3, DBF_DOUBLE) { + interest(1) + prompt("Value 3") + } + field(LNK3, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 3") + } + field(DLY4, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 4") + } + field(DOL4, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 4") + } + field(DO4, DBF_DOUBLE) { + interest(1) + prompt("Value 4") + } + field(LNK4, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 4") + } + field(DLY5, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 5") + } + field(DOL5, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 5") + } + field(DO5, DBF_DOUBLE) { + interest(1) + prompt("Value 5") + } + field(LNK5, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 5") + } + field(DLY6, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 6") + } + field(DOL6, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 6") + } + field(DO6, DBF_DOUBLE) { + interest(1) + prompt("Value 6") + } + field(LNK6, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 6") + } + field(DLY7, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 7") + } + field(DOL7, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 7") + } + field(DO7, DBF_DOUBLE) { + interest(1) + prompt("Value 7") + } + field(LNK7, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 7") + } + field(DLY8, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 8") + } + field(DOL8, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 8") + } + field(DO8, DBF_DOUBLE) { + interest(1) + prompt("Value 8") + } + field(LNK8, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 8") + } + field(DLY9, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 9") + } + field(DOL9, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 9") + } + field(DO9, DBF_DOUBLE) { + interest(1) + prompt("Value 9") + } + field(LNK9, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 9") + } + field(DLYA, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 10") + } + field(DOLA, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 10") + } + field(DOA, DBF_DOUBLE) { + interest(1) + prompt("Value 10") + } + field(LNKA, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 10") + } + field(DLYB, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 11") + } + field(DOLB, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 11") + } + field(DOB, DBF_DOUBLE) { + interest(1) + prompt("Value 11") + } + field(LNKB, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 11") + } + field(DLYC, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 12") + } + field(DOLC, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 12") + } + field(DOC, DBF_DOUBLE) { + interest(1) + prompt("Value 12") + } + field(LNKC, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 12") + } + field(DLYD, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 13") + } + field(DOLD, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 13") + } + field(DOD, DBF_DOUBLE) { + interest(1) + prompt("Value 13") + } + field(LNKD, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 13") + } + field(DLYE, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 14") + } + field(DOLE, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 14") + } + field(DOE, DBF_DOUBLE) { + interest(1) + prompt("Value 14") + } + field(LNKE, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 14") + } + field(DLYF, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 15") + } + field(DOLF, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 15") + } + field(DOF, DBF_DOUBLE) { + interest(1) + prompt("Value 15") + } + field(LNKF, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 15") + } +} +recordtype(stringout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct stringoutRecord; + %typedef struct stringoutdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*write_stringout)(struct stringoutRecord *prec); /*(-1,0)=>(failure,success)*/ + %} stringoutdset; + %#define HAS_stringoutdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + size(40) + prompt("Current Value") + } + field(OVAL, DBF_STRING) { + special(SPC_NOMOD) + interest(3) + size(40) + prompt("Previous Value") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(stringoutPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(stringoutPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_STRING) { + promptgroup("50 - Output") + interest(2) + size(40) + prompt("INVALID output value") + } +} +device(stringout, CONSTANT, devSoSoft, "Soft Channel") +device(stringout, CONSTANT, devSoSoftCallback, "Async Soft Channel") +device(stringout, INST_IO, devSoStdio, "stdio") +recordtype(aai) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct aaiRecord; + %typedef struct aaidset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_aai)(struct aaiRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} aaidset; + %#define HAS_aaidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(NELM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Number of Elements") + } + field(FTVL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_NOMOD) + menu(menuFtype) + interest(1) + prompt("Field Type of Value") + } + field(NORD, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Number elements read") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * bptr") + interest(4) + prompt("Buffer Pointer") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(aaiPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(aaiPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(HASH, DBF_ULONG) { + interest(3) + prompt("Hash of OnChange data.") + } +} +device(aai, CONSTANT, devAaiSoft, "Soft Channel") +recordtype(permissive) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_USHORT) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Status") + } + field(WFLG, DBF_USHORT) { + pp(TRUE) + prompt("Wait Flag") + } + field(LABL, DBF_STRING) { + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(20) + prompt("Button Label") + } + field(OVAL, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Old Status") + } + field(OFLG, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Old Flag") + } +} +recordtype(bo) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct boRecord; + %typedef struct bodset { + % dset common; /*init_record returns:(0,2)=>(success,success no convert*/ + % long (*write_bo)(struct boRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} bodset; + %#define HAS_bodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_ENUM) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(HIGH, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Seconds to Hold High") + } + field(ZNAM, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(26) + prompt("Zero Name") + } + field(ONAM, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(26) + prompt("One Name") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("prev Raw Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(RPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * rpvt") + interest(4) + prompt("Record Private") + } + field(WDPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * wdpt") + interest(4) + prompt("Watch Dog Timer ID") + } + field(ZSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Zero Error Severity") + } + field(OSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("One Error Severity") + } + field(COSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Change of State Sevr") + } + field(RBV, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Readback Value") + } + field(ORBV, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Readback Value") + } + field(MLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(LALM, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID outpt action") + } + field(IVOV, DBF_USHORT) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } +} +device(bo, CONSTANT, devBoSoft, "Soft Channel") +device(bo, CONSTANT, devBoSoftRaw, "Raw Soft Channel") +device(bo, CONSTANT, devBoSoftCallback, "Async Soft Channel") +device(bo, INST_IO, devBoGeneralTime, "General Time") +device(bo, INST_IO, devBoDbState, "Db State") +device(bo, INST_IO, devBoSimulation, "IOC SIM") +recordtype(dfanout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Desired Output") + } + field(SELM, DBF_MENU) { + promptgroup("30 - Action") + menu(dfanoutSELM) + interest(1) + prompt("Select Mechanism") + } + field(SELN, DBF_USHORT) { + initial("1") + interest(1) + prompt("Link Selection") + } + field(SELL, DBF_INLINK) { + promptgroup("30 - Action") + interest(1) + prompt("Link Selection Loc") + } + field(OUTA, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec A") + } + field(OUTB, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec B") + } + field(OUTC, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec C") + } + field(OUTD, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec D") + } + field(OUTE, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec E") + } + field(OUTF, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec F") + } + field(OUTG, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec G") + } + field(OUTH, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec H") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } +} +recordtype(mbbi) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct mbbiRecord; + %typedef struct mbbidset { + % dset common; /* init_record returns: (-1,0) => (failure, success)*/ + % long (*read_mbbi)(struct mbbiRecord *prec); /* (0, 2) => (success, success no convert)*/ + %} mbbidset; + %#define HAS_mbbidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_ENUM) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + } + field(NOBT, DBF_USHORT) { + promptgroup("40 - Input") + special(SPC_NOMOD) + interest(1) + prompt("Number of Bits") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(ZRVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Zero Value") + } + field(ONVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("One Value") + } + field(TWVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Two Value") + } + field(THVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Three Value") + } + field(FRVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Four Value") + } + field(FVVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Five Value") + } + field(SXVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Six Value") + } + field(SVVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Seven Value") + } + field(EIVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Eight Value") + } + field(NIVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Nine Value") + } + field(TEVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Ten Value") + } + field(ELVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Eleven Value") + } + field(TVVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Twelve Value") + } + field(TTVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Thirteen Value") + } + field(FTVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Fourteen Value") + } + field(FFVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Fifteen Value") + } + field(ZRST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Zero String") + } + field(ONST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("One String") + } + field(TWST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Two String") + } + field(THST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Three String") + } + field(FRST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Four String") + } + field(FVST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Five String") + } + field(SXST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Six String") + } + field(SVST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Seven String") + } + field(EIST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Eight String") + } + field(NIST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Nine String") + } + field(TEST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Ten String") + } + field(ELST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Eleven String") + } + field(TVST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Twelve String") + } + field(TTST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Thirteen String") + } + field(FTST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Fourteen String") + } + field(FFST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Fifteen String") + } + field(ZRSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Zero Severity") + } + field(ONSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State One Severity") + } + field(TWSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Two Severity") + } + field(THSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Three Severity") + } + field(FRSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Four Severity") + } + field(FVSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Five Severity") + } + field(SXSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Six Severity") + } + field(SVSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Seven Severity") + } + field(EISV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Eight Severity") + } + field(NISV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Nine Severity") + } + field(TESV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Ten Severity") + } + field(ELSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Eleven Severity") + } + field(TVSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Twelve Severity") + } + field(TTSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Thirteen Sevr") + } + field(FTSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Fourteen Sevr") + } + field(FFSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Fifteen Severity") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(UNSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Unknown State Severity") + } + field(COSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Change of State Svr") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Raw Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(MLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(LALM, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(SDEF, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("States Defined") + } + field(SHFT, DBF_USHORT) { + promptgroup("40 - Input") + interest(1) + prompt("Shift") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_ULONG) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuSimm) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(mbbi, CONSTANT, devMbbiSoft, "Soft Channel") +device(mbbi, CONSTANT, devMbbiSoftRaw, "Raw Soft Channel") +device(mbbi, CONSTANT, devMbbiSoftCallback, "Async Soft Channel") +device(mbbi, INST_IO, devSysMonMbbiStats, "sysmon") +recordtype(event) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct eventRecord; + %typedef struct eventdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_event)(struct eventRecord *prec); /*(0)=> success */ + %} eventdset; + %#define HAS_eventdset + % + %#include "dbScan.h" + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("40 - Input") + special(SPC_MOD) + asl(ASL0) + size(40) + prompt("Event Name To Post") + } + field(EPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("EVENTPVT epvt") + interest(4) + prompt("Event private") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Input Specifctn") + } + field(SVAL, DBF_STRING) { + size(40) + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Mode Location") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Sim mode Alarm Svrty") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(event, CONSTANT, devEventSoft, "Soft Channel") +recordtype(compress) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(RES, DBF_SHORT) { + special(SPC_RESET) + asl(ASL0) + interest(3) + prompt("Reset") + } + field(ALG, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_RESET) + menu(compressALG) + interest(1) + prompt("Compression Algorithm") + } + field(BALG, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_RESET) + menu(bufferingALG) + interest(1) + prompt("Buffering Algorithm") + } + field(NSAM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Number of Values") + } + field(N, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_RESET) + initial("1") + interest(1) + prompt("N to 1 Compression") + } + field(IHIL, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Init High Interest Lim") + } + field(ILIL, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Init Low Interest Lim") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(OFF, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Offset") + } + field(NUSE, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Number Used") + } + field(OUSE, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Old Number Used") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("double *bptr") + interest(4) + prompt("Buffer Pointer") + } + field(SPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("double *sptr") + interest(4) + prompt("Summing Buffer Ptr") + } + field(WPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("double *wptr") + interest(4) + prompt("Working Buffer Ptr") + } + field(INPN, DBF_LONG) { + special(SPC_NOMOD) + interest(4) + prompt("Number of elements in Working Buffer") + } + field(CVB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Compress Value Buffer") + } + field(INX, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Compressed Array Inx") + } +} +recordtype(mbbo) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct mbboRecord; + %typedef struct mbbodset { + % dset common; /*init_record returns: (0, 2) => (success, success no convert)*/ + % long (*write_mbbo)(struct mbboRecord *prec); /*returns: (0, 2) => (success, success no convert)*/ + %} mbbodset; + %#define HAS_mbbodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_ENUM) { + promptgroup("50 - Output") + special(SPC_DBADDR) + asl(ASL0) + pp(TRUE) + prompt("Desired Value") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(NOBT, DBF_USHORT) { + promptgroup("50 - Output") + special(SPC_NOMOD) + interest(1) + prompt("Number of Bits") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(ZRVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Zero Value") + } + field(ONVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("One Value") + } + field(TWVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Two Value") + } + field(THVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Three Value") + } + field(FRVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Four Value") + } + field(FVVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Five Value") + } + field(SXVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Six Value") + } + field(SVVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Seven Value") + } + field(EIVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Eight Value") + } + field(NIVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Nine Value") + } + field(TEVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Ten Value") + } + field(ELVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Eleven Value") + } + field(TVVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Twelve Value") + } + field(TTVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Thirteen Value") + } + field(FTVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Fourteen Value") + } + field(FFVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Fifteen Value") + } + field(ZRST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Zero String") + } + field(ONST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("One String") + } + field(TWST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Two String") + } + field(THST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Three String") + } + field(FRST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Four String") + } + field(FVST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Five String") + } + field(SXST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Six String") + } + field(SVST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Seven String") + } + field(EIST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Eight String") + } + field(NIST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Nine String") + } + field(TEST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Ten String") + } + field(ELST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Eleven String") + } + field(TVST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Twelve String") + } + field(TTST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Thirteen String") + } + field(FTST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Fourteen String") + } + field(FFST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Fifteen String") + } + field(ZRSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Zero Severity") + } + field(ONSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State One Severity") + } + field(TWSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Two Severity") + } + field(THSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Three Severity") + } + field(FRSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Four Severity") + } + field(FVSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Five Severity") + } + field(SXSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Six Severity") + } + field(SVSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Seven Severity") + } + field(EISV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Eight Severity") + } + field(NISV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Nine Severity") + } + field(TESV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Ten Severity") + } + field(ELSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Eleven Severity") + } + field(TVSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Twelve Severity") + } + field(TTSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Thirteen Sevr") + } + field(FTSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Fourteen Sevr") + } + field(FFSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Fifteen Sevr") + } + field(UNSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Unknown State Sevr") + } + field(COSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Change of State Sevr") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Raw Value") + } + field(RBV, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Readback Value") + } + field(ORBV, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Readback Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(MLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(LALM, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(SDEF, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("States Defined") + } + field(SHFT, DBF_USHORT) { + promptgroup("50 - Output") + interest(1) + prompt("Shift") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID outpt action") + } + field(IVOV, DBF_USHORT) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } +} +device(mbbo, CONSTANT, devMbboSoft, "Soft Channel") +device(mbbo, CONSTANT, devMbboSoftRaw, "Raw Soft Channel") +device(mbbo, CONSTANT, devMbboSoftCallback, "Async Soft Channel") +recordtype(epid) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + prompt("Record Name") + size(61) + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + prompt("Descriptor") + size(41) + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + prompt("Access Security Group") + size(29) + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Event Name") + size(40) + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("epicsMutexId mlok") + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("ELLLIST mlis") + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("ELLLIST bklnk") + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + interest(2) + initial("YES") + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct asgMember *asp") + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct processNotify *ppn") + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct processNotifyRecord *ppnr") + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct scan_element *spvt") + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct typed_rset *rset") + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("unambiguous_dset *dset") + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("void *dpvt") + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct dbRecordType *rdes") + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct lockRecord *lset") + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(1) + extra("epicsUInt8 bkpt") + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + interest(1) + initial("1") + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + initial("INVALID") + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(2) + extra("epicsTimeStamp time") + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Setpoint") + } + field(SMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Setpoint Mode Select") + } + field(STPL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Setpoint Location") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Controlled Value Loc") + } + field(OUTL, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Location") + } + field(TRIG, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Readback Trigger") + } + field(TVAL, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(1) + prompt("Trigger Value") + } + field(CVAL, DBF_DOUBLE) { + special(SPC_NOMOD) + prompt("Controlled Value") + } + field(CVLP, DBF_DOUBLE) { + special(SPC_NOMOD) + prompt("Prev. Controlled Value") + } + field(OVAL, DBF_DOUBLE) { + special(SPC_NOMOD) + prompt("Output value") + } + field(OVLP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev output") + } + field(PREC, DBF_SHORT) { + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(MDT, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Min Delta T") + } + field(FMOD, DBF_MENU) { + promptgroup("30 - Action") + menu(epidFeedbackMode) + interest(1) + prompt("Feedback Mode") + } + field(FBON, DBF_MENU) { + promptgroup("30 - Action") + menu(epidFeedbackState) + interest(1) + prompt("Feedback On/Off") + } + field(FBOP, DBF_MENU) { + promptgroup("30 - Action") + menu(epidFeedbackState) + interest(1) + prompt("Prev. feedback On/Off") + } + field(KP, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Proportional Gain") + } + field(KI, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Integral Gain") + } + field(KD, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Derivative Gain") + } + field(EGU, DBF_STRING) { + promptgroup("80 - Display") + interest(1) + prompt("Engineering Units") + size(16) + } + field(HOPR, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(DRVH, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("High Drive Limit") + } + field(DRVL, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Low Drive Limit") + } + field(HIHI, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Hihi Deviation Limit") + } + field(LOLO, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Lolo Deviation Limit") + } + field(HIGH, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("High Deviation Limit") + } + field(LOW, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Low Deviation Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(ODEL, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Output Deadband") + } + field(P, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("P component") + } + field(PP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("Prev. P component") + } + field(I, DBF_DOUBLE) { + interest(2) + prompt("I component") + } + field(IP, DBF_DOUBLE) { + interest(2) + prompt("Prev. I component") + } + field(D, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("D component") + } + field(DP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("Prev. D component") + } + field(CT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("epicsTimeStamp ct") + prompt("Time") + } + field(CTP, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("epicsTimeStamp ctp") + prompt("Previous time") + } + field(DT, DBF_DOUBLE) { + interest(2) + prompt("Delta T") + } + field(DTP, DBF_DOUBLE) { + interest(2) + prompt("Prev. Delta T") + } + field(ERR, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("Error") + } + field(ERRP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("Prev. Error") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } +} +device(epid, CONSTANT, devEpidSoft, "Soft Channel") +device(epid, CONSTANT, devEpidSoftCB, "Async Soft Channel") +recordtype(ao) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct aoRecord; + %typedef struct aodset { + % dset common; /*init_record returns: (0,2)=>(success,success no convert)*/ + % long (*write_ao)(struct aoRecord *prec); /*(0)=>(success ) */ + % long (*special_linconv)(struct aoRecord *prec, int after); + %} aodset; + %#define HAS_aodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Desired Output") + } + field(OVAL, DBF_DOUBLE) { + prompt("Output Value") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(OROC, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(1) + prompt("Output Rate of Change") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(OIF, DBF_MENU) { + promptgroup("50 - Output") + menu(aoOIF) + interest(1) + prompt("Out Full/Incremental") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(LINR, DBF_MENU) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + menu(menuConvert) + interest(1) + pp(TRUE) + prompt("Linearization") + } + field(EGUF, DBF_DOUBLE) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + interest(1) + pp(TRUE) + prompt("Eng Units Full") + } + field(EGUL, DBF_DOUBLE) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + interest(1) + pp(TRUE) + prompt("Eng Units Low") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(ROFF, DBF_ULONG) { + interest(2) + pp(TRUE) + prompt("Raw Offset") + } + field(EOFF, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(2) + pp(TRUE) + prompt("EGU to Raw Offset") + } + field(ESLO, DBF_DOUBLE) { + promptgroup("60 - Convert") + initial("1") + interest(2) + pp(TRUE) + prompt("EGU to Raw Slope") + } + field(DRVH, DBF_DOUBLE) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive High Limit") + } + field(DRVL, DBF_DOUBLE) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive Low Limit") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(AOFF, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(1) + pp(TRUE) + prompt("Adjustment Offset") + } + field(ASLO, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(1) + pp(TRUE) + prompt("Adjustment Slope") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(RVAL, DBF_LONG) { + pp(TRUE) + prompt("Current Raw Value") + } + field(ORAW, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Previous Raw Value") + } + field(RBV, DBF_LONG) { + special(SPC_NOMOD) + prompt("Readback Value") + } + field(ORBV, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Readback Value") + } + field(PVAL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Previous value") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(PBRK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * pbrk") + interest(4) + prompt("Ptrto brkTable") + } + field(INIT, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Initialized?") + } + field(LBRK, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("LastBreak Point") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } + field(OMOD, DBF_UCHAR) { + special(SPC_NOMOD) + prompt("Was OVAL modified?") + } +} +device(ao, CONSTANT, devAoSoft, "Soft Channel") +device(ao, CONSTANT, devAoSoftRaw, "Raw Soft Channel") +device(ao, CONSTANT, devAoSoftCallback, "Async Soft Channel") +device(ao, INST_IO, devAoStats, "IOC stats") +recordtype(aao) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct aaoRecord; + %typedef struct aaodset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*write_aao)(struct aaoRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} aaodset; + %#define HAS_aaodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(NELM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Number of Elements") + } + field(FTVL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_NOMOD) + menu(menuFtype) + interest(1) + prompt("Field Type of Value") + } + field(NORD, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Number elements read") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * bptr") + interest(4) + prompt("Buffer Pointer") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(aaoPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(aaoPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(HASH, DBF_ULONG) { + interest(3) + prompt("Hash of OnChange data.") + } +} +device(aao, CONSTANT, devAaoSoft, "Soft Channel") +recordtype(mbbiDirect) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct mbbiDirectRecord; + %typedef struct mbbidirectdset { + % dset common; /* init_record returns: (-1,0) => (failure, success)*/ + % long (*read_mbbi)(struct mbbiDirectRecord *prec); /* (0, 2) => (success, success no convert)*/ + %} mbbidirectdset; + %#define HAS_mbbidirectdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + } + field(NOBT, DBF_SHORT) { + promptgroup("40 - Input") + special(SPC_NOMOD) + interest(1) + prompt("Number of Bits") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Raw Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(MLST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(SHFT, DBF_USHORT) { + promptgroup("40 - Input") + interest(1) + prompt("Shift") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_LONG) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuSimm) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(B0, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 0") + } + field(B1, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 1") + } + field(B2, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 2") + } + field(B3, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 3") + } + field(B4, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 4") + } + field(B5, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 5") + } + field(B6, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 6") + } + field(B7, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 7") + } + field(B8, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 8") + } + field(B9, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 9") + } + field(BA, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 10") + } + field(BB, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 11") + } + field(BC, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 12") + } + field(BD, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 13") + } + field(BE, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 14") + } + field(BF, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 15") + } + field(B10, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 16") + } + field(B11, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 17") + } + field(B12, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 18") + } + field(B13, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 19") + } + field(B14, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 20") + } + field(B15, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 21") + } + field(B16, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 22") + } + field(B17, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 23") + } + field(B18, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 24") + } + field(B19, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 25") + } + field(B1A, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 26") + } + field(B1B, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 27") + } + field(B1C, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 28") + } + field(B1D, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 29") + } + field(B1E, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 30") + } + field(B1F, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 31") + } +} +device(mbbiDirect, CONSTANT, devMbbiDirectSoft, "Soft Channel") +device(mbbiDirect, CONSTANT, devMbbiDirectSoftRaw, "Raw Soft Channel") +device(mbbiDirect, CONSTANT, devMbbiDirectSoftCallback, "Async Soft Channel") +device(mbbiDirect, INST_IO, devSysMonMbbiDirectStats, "sysmon") +recordtype(waveform) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct waveformRecord; + %typedef struct wfdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_wf)(struct waveformRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} wfdset; + %#define HAS_wfdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(RARM, DBF_SHORT) { + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Rearm the waveform") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(NELM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Number of Elements") + } + field(FTVL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_NOMOD) + menu(menuFtype) + interest(1) + prompt("Field Type of Value") + } + field(BUSY, DBF_SHORT) { + special(SPC_NOMOD) + prompt("Busy Indicator") + } + field(NORD, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Number elements read") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * bptr") + interest(4) + prompt("Buffer Pointer") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(waveformPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(waveformPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(HASH, DBF_ULONG) { + interest(3) + prompt("Hash of OnChange data.") + } +} +device(waveform, CONSTANT, devWfSoft, "Soft Channel") +device(waveform, INST_IO, devWaveformStats, "IOC stats") +device(waveform, INST_IO, devSysMonWaveStats, "sysmon") +recordtype(timestamp) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + prompt("Record Name") + size(61) + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + prompt("Descriptor") + size(41) + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + prompt("Access Security Group") + size(29) + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Event Name") + size(40) + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("epicsMutexId mlok") + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("ELLLIST mlis") + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("ELLLIST bklnk") + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + interest(2) + initial("YES") + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct asgMember *asp") + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct processNotify *ppn") + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct processNotifyRecord *ppnr") + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct scan_element *spvt") + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct typed_rset *rset") + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("unambiguous_dset *dset") + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("void *dpvt") + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct dbRecordType *rdes") + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct lockRecord *lset") + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(1) + extra("epicsUInt8 bkpt") + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + interest(1) + initial("1") + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + initial("INVALID") + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(2) + extra("epicsTimeStamp time") + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + size(40) + } + field(OVAL, DBF_STRING) { + special(SPC_NOMOD) + interest(3) + prompt("Previous Value") + size(40) + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Current Raw Value") + } + field(TST, DBF_MENU) { + promptgroup("40 - Input") + menu(timestampTST) + interest(2) + prompt("Time Stamp Type") + } +} +recordtype(fanout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + asl(ASL0) + pp(TRUE) + prompt("Used to trigger") + } + field(SELM, DBF_MENU) { + promptgroup("30 - Action") + menu(fanoutSELM) + interest(1) + prompt("Select Mechanism") + } + field(SELN, DBF_USHORT) { + initial("1") + interest(1) + prompt("Link Selection") + } + field(SELL, DBF_INLINK) { + promptgroup("30 - Action") + interest(1) + prompt("Link Selection Loc") + } + field(OFFS, DBF_SHORT) { + promptgroup("30 - Action") + initial("0") + interest(1) + prompt("Offset for Specified") + } + field(SHFT, DBF_SHORT) { + promptgroup("30 - Action") + initial("-1") + interest(1) + prompt("Shift for Mask mode") + } + field(LNK0, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 0") + } + field(LNK1, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 1") + } + field(LNK2, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 2") + } + field(LNK3, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 3") + } + field(LNK4, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 4") + } + field(LNK5, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 5") + } + field(LNK6, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 6") + } + field(LNK7, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 7") + } + field(LNK8, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 8") + } + field(LNK9, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 9") + } + field(LNKA, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 10") + } + field(LNKB, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 11") + } + field(LNKC, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 12") + } + field(LNKD, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 13") + } + field(LNKE, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 14") + } + field(LNKF, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 15") + } +} +recordtype(longin) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct longinRecord; + %typedef struct longindset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_longin)(struct longinRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} longindset; + %#define HAS_longindset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_LONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_LONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_LONG) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(ADEL, DBF_LONG) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_LONG) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Input Specifctn") + } + field(SVAL, DBF_LONG) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Mode Location") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Sim mode Alarm Svrty") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(longin, CONSTANT, devLiSoft, "Soft Channel") +device(longin, CONSTANT, devLiSoftCallback, "Async Soft Channel") +device(longin, INST_IO, devLiGeneralTime, "General Time") +recordtype(printf) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct printfRecord; + %typedef struct printfdset { + % dset common; + % long (*write_string)(struct printfRecord *prec); + %} printfdset; + %#define HAS_printfdset + % + %/* Number of INPx fields defined */ + %#define PRINTF_NLINKS 10 + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("char *val") + pp(TRUE) + prompt("Result") + } + field(SIZV, DBF_USHORT) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("41") + interest(1) + prompt("Size of VAL buffer") + } + field(LEN, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Length of VAL") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(FMT, DBF_STRING) { + promptgroup("30 - Action") + pp(TRUE) + size(81) + prompt("Format String") + } + field(IVLS, DBF_STRING) { + promptgroup("30 - Action") + initial("LNK") + size(16) + prompt("Invalid Link String") + } + field(INP0, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 0") + } + field(INP1, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 1") + } + field(INP2, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 2") + } + field(INP3, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 3") + } + field(INP4, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 4") + } + field(INP5, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 5") + } + field(INP6, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 6") + } + field(INP7, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 7") + } + field(INP8, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 8") + } + field(INP9, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 9") + } +} +device(printf, CONSTANT, devPrintfSoft, "Soft Channel") +device(printf, CONSTANT, devPrintfSoftCallback, "Async Soft Channel") +device(printf, INST_IO, devPrintfStdio, "stdio") +recordtype(sel) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("40 - Input") + special(SPC_NOMOD) + asl(ASL0) + prompt("Result") + } + field(SELM, DBF_MENU) { + promptgroup("30 - Action") + menu(selSELM) + prompt("Select Mechanism") + } + field(SELN, DBF_USHORT) { + prompt("Index value") + } + field(PREC, DBF_SHORT) { + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(NVL, DBF_INLINK) { + promptgroup("30 - Action") + interest(1) + prompt("Index Value Location") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input F") + } + field(INPG, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input L") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Rng") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(A, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input A") + } + field(B, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input B") + } + field(C, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input C") + } + field(D, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input D") + } + field(E, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input E") + } + field(F, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input F") + } + field(G, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input G") + } + field(H, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input H") + } + field(I, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input I") + } + field(J, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input J") + } + field(K, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input K") + } + field(L, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input L") + } + field(LA, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of A") + } + field(LB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of B") + } + field(LC, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of C") + } + field(LD, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of D") + } + field(LE, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of E") + } + field(LF, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of F") + } + field(LG, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of G") + } + field(LH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of H") + } + field(LI, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of I") + } + field(LJ, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of J") + } + field(LK, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of K") + } + field(LL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of L") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(NLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Index Monitored") + } +} +recordtype(bi) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct biRecord; + %typedef struct bidset { + % dset common; + % long (*read_bi)(struct biRecord *prec); + %} bidset; + %#define HAS_bidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(VAL, DBF_ENUM) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + } + field(ZSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Zero Error Severity") + } + field(OSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("One Error Severity") + } + field(COSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Change of State Svr") + } + field(ZNAM, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(26) + prompt("Zero Name") + } + field(ONAM, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(26) + prompt("One Name") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("prev Raw Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(LALM, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(MLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_ULONG) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuSimm) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(bi, CONSTANT, devBiSoft, "Soft Channel") +device(bi, CONSTANT, devBiSoftRaw, "Raw Soft Channel") +device(bi, CONSTANT, devBiSoftCallback, "Async Soft Channel") +device(bi, INST_IO, devBiDbState, "Db State") +recordtype(lso) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct lsoRecord; + %typedef struct lsodset { + % dset common; + % long (*write_string)(struct lsoRecord *prec); + %} lsodset; + %#define HAS_lsodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("char *val") + pp(TRUE) + prompt("Current Value") + } + field(OVAL, DBF_NOACCESS) { + special(SPC_DBADDR) + extra("char *oval") + interest(3) + prompt("Previous Value") + } + field(SIZV, DBF_USHORT) { + promptgroup("50 - Output") + special(SPC_NOMOD) + initial("41") + interest(1) + prompt("Size of buffers") + } + field(LEN, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Length of VAL") + } + field(OLEN, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Length of OVAL") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Link") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID Output Action") + } + field(IVOV, DBF_STRING) { + promptgroup("50 - Output") + interest(2) + size(40) + prompt("INVALID Output Value") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(menuPost) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(menuPost) + interest(1) + prompt("Post Archive Monitors") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(lso, CONSTANT, devLsoSoft, "Soft Channel") +device(lso, CONSTANT, devLsoSoftCallback, "Async Soft Channel") +device(lso, INST_IO, devLsoStdio, "stdio") +recordtype(subArray) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct subArrayRecord; + %typedef struct sadset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_sa)(struct subArrayRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} sadset; + %#define HAS_sadset + % + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(FTVL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_NOMOD) + menu(menuFtype) + interest(1) + prompt("Field Type of Value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(MALM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Maximum Elements") + } + field(NELM, DBF_ULONG) { + promptgroup("30 - Action") + initial("1") + pp(TRUE) + prompt("Number of Elements") + } + field(INDX, DBF_ULONG) { + promptgroup("30 - Action") + pp(TRUE) + prompt("Substring Index") + } + field(BUSY, DBF_SHORT) { + special(SPC_NOMOD) + prompt("Busy Indicator") + } + field(NORD, DBF_LONG) { + special(SPC_NOMOD) + prompt("Number elements read") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * bptr") + interest(4) + prompt("Buffer Pointer") + } +} +device(subArray, CONSTANT, devSASoft, "Soft Channel") +recordtype(calc) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %#include "postfix.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + prompt("Result") + } + field(CALC, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_CALC) + initial("0") + pp(TRUE) + size(80) + prompt("Calculation") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input F") + } + field(INPG, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input L") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Rng") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(A, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input A") + } + field(B, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input B") + } + field(C, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input C") + } + field(D, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input D") + } + field(E, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input E") + } + field(F, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input F") + } + field(G, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input G") + } + field(H, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input H") + } + field(I, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input I") + } + field(J, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input J") + } + field(K, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input K") + } + field(L, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input L") + } + field(LA, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of A") + } + field(LB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of B") + } + field(LC, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of C") + } + field(LD, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of D") + } + field(LE, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of E") + } + field(LF, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of F") + } + field(LG, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of G") + } + field(LH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of H") + } + field(LI, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of I") + } + field(LJ, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of J") + } + field(LK, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of K") + } + field(LL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of L") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(RPCL, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("char rpcl[INFIX_TO_POSTFIX_SIZE(80)]") + interest(4) + prompt("Reverse Polish Calc") + } +} +recordtype(mbboDirect) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct mbboDirectRecord; + %typedef struct mbbodirectdset { + % dset common; /*init_record returns: (0, 2)=>(success, success no convert)*/ + % long (*write_mbbo)(struct mbboDirectRecord *prec); /*returns: (0, 2)=>(success, success no convert)*/ + %} mbbodirectdset; + %#define HAS_mbbodirectdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Word") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + special(SPC_RESET) + menu(menuOmsl) + interest(1) + pp(TRUE) + prompt("Output Mode Select") + } + field(NOBT, DBF_SHORT) { + promptgroup("50 - Output") + special(SPC_NOMOD) + interest(1) + prompt("Number of Bits") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(RVAL, DBF_ULONG) { + special(SPC_NOMOD) + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Raw Value") + } + field(RBV, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Readback Value") + } + field(ORBV, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Readback Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(MLST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(SHFT, DBF_USHORT) { + promptgroup("50 - Output") + interest(1) + prompt("Shift") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID outpt action") + } + field(IVOV, DBF_LONG) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } + field(B0, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 0") + } + field(B1, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 1") + } + field(B2, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 2") + } + field(B3, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 3") + } + field(B4, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 4") + } + field(B5, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 5") + } + field(B6, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 6") + } + field(B7, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 7") + } + field(B8, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 8") + } + field(B9, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 9") + } + field(BA, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 10") + } + field(BB, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 11") + } + field(BC, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 12") + } + field(BD, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 13") + } + field(BE, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 14") + } + field(BF, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 15") + } + field(B10, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 16") + } + field(B11, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 17") + } + field(B12, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 18") + } + field(B13, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 19") + } + field(B14, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 20") + } + field(B15, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 21") + } + field(B16, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 22") + } + field(B17, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 23") + } + field(B18, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 24") + } + field(B19, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 25") + } + field(B1A, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 26") + } + field(B1B, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 27") + } + field(B1C, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 28") + } + field(B1D, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 29") + } + field(B1E, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 30") + } + field(B1F, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 31") + } +} +device(mbboDirect, CONSTANT, devMbboDirectSoft, "Soft Channel") +device(mbboDirect, CONSTANT, devMbboDirectSoftRaw, "Raw Soft Channel") +device(mbboDirect, CONSTANT, devMbboDirectSoftCallback, "Async Soft Channel") +recordtype(longout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct longoutRecord; + %typedef struct longoutdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*write_longout)(struct longoutRecord *prec); /*(-1,0)=>(failure,success*/ + %} longoutdset; + %#define HAS_longoutdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Desired Output") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(DRVH, DBF_LONG) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive High Limit") + } + field(DRVL, DBF_LONG) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive Low Limit") + } + field(HOPR, DBF_LONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_LONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_LONG) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_LONG) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_LONG) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Output Specifctn") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Mode Location") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Sim mode Alarm Svrty") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_LONG) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } +} +device(longout, CONSTANT, devLoSoft, "Soft Channel") +device(longout, CONSTANT, devLoSoftCallback, "Async Soft Channel") +recordtype(aSub) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %struct aSubRecord; + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + asl(ASL0) + prompt("Subr. return value") + } + field(OVAL, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Old return value") + } + field(INAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_NOMOD) + interest(1) + size(41) + prompt("Initialize Subr. Name") + } + field(LFLG, DBF_MENU) { + promptgroup("30 - Action") + menu(aSubLFLG) + interest(1) + prompt("Subr. Input Enable") + } + field(SUBL, DBF_INLINK) { + promptgroup("30 - Action") + special(SPC_NOMOD) + interest(1) + prompt("Subroutine Name Link") + } + field(SNAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_MOD) + interest(1) + size(41) + prompt("Process Subr. Name") + } + field(ONAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_NOMOD) + interest(3) + size(41) + prompt("Old Subr. Name") + } + field(SADR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("long (*sadr)(struct aSubRecord *)") + interest(2) + prompt("Subroutine Address") + } + field(CADR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void (*cadr)(struct aSubRecord *)") + interest(2) + prompt("Subroutine Cleanup Address") + } + field(BRSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Bad Return Severity") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(EFLG, DBF_MENU) { + promptgroup("50 - Output") + menu(aSubEFLG) + initial("1") + interest(1) + prompt("Output Event Flag") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link F") + } + field(INPG, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link L") + } + field(INPM, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link M") + } + field(INPN, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link N") + } + field(INPO, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link O") + } + field(INPP, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link P") + } + field(INPQ, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link Q") + } + field(INPR, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link R") + } + field(INPS, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link S") + } + field(INPT, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link T") + } + field(INPU, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link U") + } + field(A, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *a") + interest(2) + prompt("Input value A") + } + field(B, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *b") + interest(2) + prompt("Input value B") + } + field(C, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *c") + interest(2) + prompt("Input value C") + } + field(D, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *d") + interest(2) + prompt("Input value D") + } + field(E, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *e") + interest(2) + prompt("Input value E") + } + field(F, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *f") + interest(2) + prompt("Input value F") + } + field(G, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *g") + interest(2) + prompt("Input value G") + } + field(H, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *h") + interest(2) + prompt("Input value H") + } + field(I, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *i") + interest(2) + prompt("Input value I") + } + field(J, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *j") + interest(2) + prompt("Input value J") + } + field(K, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *k") + interest(2) + prompt("Input value K") + } + field(L, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *l") + interest(2) + prompt("Input value L") + } + field(M, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *m") + interest(2) + prompt("Input value M") + } + field(N, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *n") + interest(2) + prompt("Input value N") + } + field(O, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *o") + interest(2) + prompt("Input value O") + } + field(P, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *p") + interest(2) + prompt("Input value P") + } + field(Q, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *q") + interest(2) + prompt("Input value Q") + } + field(R, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *r") + interest(2) + prompt("Input value R") + } + field(S, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *s") + interest(2) + prompt("Input value S") + } + field(T, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *t") + interest(2) + prompt("Input value T") + } + field(U, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *u") + interest(2) + prompt("Input value U") + } + field(FTA, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of A") + } + field(FTB, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of B") + } + field(FTC, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of C") + } + field(FTD, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of D") + } + field(FTE, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of E") + } + field(FTF, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of F") + } + field(FTG, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of G") + } + field(FTH, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of H") + } + field(FTI, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of I") + } + field(FTJ, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of J") + } + field(FTK, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of K") + } + field(FTL, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of L") + } + field(FTM, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of M") + } + field(FTN, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of N") + } + field(FTO, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of O") + } + field(FTP, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of P") + } + field(FTQ, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of Q") + } + field(FTR, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of R") + } + field(FTS, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of S") + } + field(FTT, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of T") + } + field(FTU, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of U") + } + field(NOA, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in A") + } + field(NOB, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in B") + } + field(NOC, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in C") + } + field(NOD, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in D") + } + field(NOE, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in E") + } + field(NOF, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in F") + } + field(NOG, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in G") + } + field(NOH, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in H") + } + field(NOI, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in I") + } + field(NOJ, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in J") + } + field(NOK, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in K") + } + field(NOL, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in L") + } + field(NOM, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in M") + } + field(NON, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in N") + } + field(NOO, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in O") + } + field(NOP, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in P") + } + field(NOQ, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in Q") + } + field(NOR, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in R") + } + field(NOS, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in S") + } + field(NOT, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in T") + } + field(NOU, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in U") + } + field(NEA, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in A") + } + field(NEB, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in B") + } + field(NEC, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in C") + } + field(NED, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in D") + } + field(NEE, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in E") + } + field(NEF, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in F") + } + field(NEG, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in G") + } + field(NEH, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in H") + } + field(NEI, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in I") + } + field(NEJ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in J") + } + field(NEK, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in K") + } + field(NEL, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in L") + } + field(NEM, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in M") + } + field(NEN, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in N") + } + field(NEO, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in O") + } + field(NEP, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in P") + } + field(NEQ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in Q") + } + field(NER, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in R") + } + field(NES, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in S") + } + field(NET, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in T") + } + field(NEU, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in U") + } + field(OUTA, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link A") + } + field(OUTB, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link B") + } + field(OUTC, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link C") + } + field(OUTD, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link D") + } + field(OUTE, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link E") + } + field(OUTF, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link F") + } + field(OUTG, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link G") + } + field(OUTH, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link H") + } + field(OUTI, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link I") + } + field(OUTJ, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link J") + } + field(OUTK, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link K") + } + field(OUTL, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link L") + } + field(OUTM, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link M") + } + field(OUTN, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link N") + } + field(OUTO, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link O") + } + field(OUTP, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link P") + } + field(OUTQ, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link Q") + } + field(OUTR, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link R") + } + field(OUTS, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link S") + } + field(OUTT, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link T") + } + field(OUTU, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link U") + } + field(VALA, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vala") + interest(2) + prompt("Output value A") + } + field(VALB, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valb") + interest(2) + prompt("Output value B") + } + field(VALC, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valc") + interest(2) + prompt("Output value C") + } + field(VALD, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vald") + interest(2) + prompt("Output value D") + } + field(VALE, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vale") + interest(2) + prompt("Output value E") + } + field(VALF, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valf") + interest(2) + prompt("Output value F") + } + field(VALG, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valg") + interest(2) + prompt("Output value G") + } + field(VALH, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valh") + interest(2) + prompt("Output value H") + } + field(VALI, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vali") + interest(2) + prompt("Output value I") + } + field(VALJ, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valj") + interest(2) + prompt("Output value J") + } + field(VALK, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valk") + interest(2) + prompt("Output value K") + } + field(VALL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vall") + interest(2) + prompt("Output value L") + } + field(VALM, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valm") + interest(2) + prompt("Output value M") + } + field(VALN, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valn") + interest(2) + prompt("Output value N") + } + field(VALO, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valo") + interest(2) + prompt("Output value O") + } + field(VALP, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valp") + interest(2) + prompt("Output value P") + } + field(VALQ, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valq") + interest(2) + prompt("Output value Q") + } + field(VALR, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valr") + interest(2) + prompt("Output value R") + } + field(VALS, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vals") + interest(2) + prompt("Output value S") + } + field(VALT, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valt") + interest(2) + prompt("Output value T") + } + field(VALU, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valu") + interest(2) + prompt("Output value U") + } + field(OVLA, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovla") + interest(4) + prompt("Old Output A") + } + field(OVLB, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlb") + interest(4) + prompt("Old Output B") + } + field(OVLC, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlc") + interest(4) + prompt("Old Output C") + } + field(OVLD, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovld") + interest(4) + prompt("Old Output D") + } + field(OVLE, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovle") + interest(4) + prompt("Old Output E") + } + field(OVLF, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlf") + interest(4) + prompt("Old Output F") + } + field(OVLG, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlg") + interest(4) + prompt("Old Output G") + } + field(OVLH, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlh") + interest(4) + prompt("Old Output H") + } + field(OVLI, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovli") + interest(4) + prompt("Old Output I") + } + field(OVLJ, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlj") + interest(4) + prompt("Old Output J") + } + field(OVLK, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlk") + interest(4) + prompt("Old Output K") + } + field(OVLL, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovll") + interest(4) + prompt("Old Output L") + } + field(OVLM, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlm") + interest(4) + prompt("Old Output M") + } + field(OVLN, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovln") + interest(4) + prompt("Old Output N") + } + field(OVLO, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlo") + interest(4) + prompt("Old Output O") + } + field(OVLP, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlp") + interest(4) + prompt("Old Output P") + } + field(OVLQ, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlq") + interest(4) + prompt("Old Output Q") + } + field(OVLR, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlr") + interest(4) + prompt("Old Output R") + } + field(OVLS, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovls") + interest(4) + prompt("Old Output S") + } + field(OVLT, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlt") + interest(4) + prompt("Old Output T") + } + field(OVLU, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlu") + interest(4) + prompt("Old Output U") + } + field(FTVA, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALA") + } + field(FTVB, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALB") + } + field(FTVC, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALC") + } + field(FTVD, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALD") + } + field(FTVE, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALE") + } + field(FTVF, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALF") + } + field(FTVG, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALG") + } + field(FTVH, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALH") + } + field(FTVI, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALI") + } + field(FTVJ, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALJ") + } + field(FTVK, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALK") + } + field(FTVL, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALL") + } + field(FTVM, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALM") + } + field(FTVN, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALN") + } + field(FTVO, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALO") + } + field(FTVP, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALP") + } + field(FTVQ, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALQ") + } + field(FTVR, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALR") + } + field(FTVS, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALS") + } + field(FTVT, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALT") + } + field(FTVU, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALU") + } + field(NOVA, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALA") + } + field(NOVB, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALB") + } + field(NOVC, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALC") + } + field(NOVD, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALD") + } + field(NOVE, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALE") + } + field(NOVF, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALF") + } + field(NOVG, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALG") + } + field(NOVH, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VAlH") + } + field(NOVI, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALI") + } + field(NOVJ, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALJ") + } + field(NOVK, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALK") + } + field(NOVL, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALL") + } + field(NOVM, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALM") + } + field(NOVN, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALN") + } + field(NOVO, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALO") + } + field(NOVP, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALP") + } + field(NOVQ, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALQ") + } + field(NOVR, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALR") + } + field(NOVS, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALS") + } + field(NOVT, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALT") + } + field(NOVU, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALU") + } + field(NEVA, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALA") + } + field(NEVB, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALB") + } + field(NEVC, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALC") + } + field(NEVD, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALD") + } + field(NEVE, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALE") + } + field(NEVF, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALF") + } + field(NEVG, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALG") + } + field(NEVH, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VAlH") + } + field(NEVI, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALI") + } + field(NEVJ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALJ") + } + field(NEVK, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALK") + } + field(NEVL, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALL") + } + field(NEVM, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALM") + } + field(NEVN, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALN") + } + field(NEVO, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALO") + } + field(NEVP, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALP") + } + field(NEVQ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALQ") + } + field(NEVR, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALR") + } + field(NEVS, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALS") + } + field(NEVT, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALT") + } + field(NEVU, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALU") + } + field(ONVA, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLA") + } + field(ONVB, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLB") + } + field(ONVC, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLC") + } + field(ONVD, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLD") + } + field(ONVE, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLE") + } + field(ONVF, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLF") + } + field(ONVG, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLG") + } + field(ONVH, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in VAlH") + } + field(ONVI, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLI") + } + field(ONVJ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLJ") + } + field(ONVK, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLK") + } + field(ONVL, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLL") + } + field(ONVM, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLM") + } + field(ONVN, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLN") + } + field(ONVO, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLO") + } + field(ONVP, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLP") + } + field(ONVQ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLQ") + } + field(ONVR, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLR") + } + field(ONVS, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLS") + } + field(ONVT, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLT") + } + field(ONVU, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLU") + } +} +recordtype(sub) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %struct subRecord; + %typedef long (*SUBFUNCPTR)(struct subRecord *); + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + asl(ASL0) + pp(TRUE) + prompt("Result") + } + field(INAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_NOMOD) + interest(1) + size(40) + prompt("Init Routine Name") + } + field(SNAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_MOD) + interest(1) + size(40) + prompt("Subroutine Name") + } + field(SADR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("SUBFUNCPTR sadr") + interest(4) + prompt("Subroutine Address") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input F") + } + field(INPG, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input L") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(BRSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Bad Return Severity") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(A, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input A") + } + field(B, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input B") + } + field(C, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input C") + } + field(D, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input D") + } + field(E, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input E") + } + field(F, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input F") + } + field(G, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input G") + } + field(H, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input H") + } + field(I, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input I") + } + field(J, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input J") + } + field(K, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input K") + } + field(L, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input L") + } + field(LA, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of A") + } + field(LB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of B") + } + field(LC, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of C") + } + field(LD, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of D") + } + field(LE, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of E") + } + field(LF, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of F") + } + field(LG, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of G") + } + field(LH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of H") + } + field(LI, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of I") + } + field(LJ, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of J") + } + field(LK, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of K") + } + field(LL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of L") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } +} +recordtype(int64in) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct int64inRecord; + %typedef struct int64indset { + % dset common; + % long (*read_int64in)(struct int64inRecord *prec); + %} int64indset; + %#define HAS_int64indset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_INT64) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Units name") + } + field(HOPR, DBF_INT64) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_INT64) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_INT64) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(ADEL, DBF_INT64) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_INT64) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_INT64) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(int64in, CONSTANT, devI64inSoft, "Soft Channel") +device(int64in, CONSTANT, devI64inSoftCallback, "Async Soft Channel") +recordtype(ai) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct aiRecord; + %typedef struct aidset { + % dset common; + % long (*read_ai)(struct aiRecord *prec); + % long (*special_linconv)(struct aiRecord *prec, int after); + %} aidset; + %#define HAS_aidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current EGU Value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(LINR, DBF_MENU) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + menu(menuConvert) + interest(1) + pp(TRUE) + prompt("Linearization") + } + field(EGUF, DBF_DOUBLE) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + interest(1) + pp(TRUE) + prompt("Engineer Units Full") + } + field(EGUL, DBF_DOUBLE) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + interest(1) + pp(TRUE) + prompt("Engineer Units Low") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(AOFF, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(1) + pp(TRUE) + prompt("Adjustment Offset") + } + field(ASLO, DBF_DOUBLE) { + promptgroup("60 - Convert") + initial("1") + interest(1) + pp(TRUE) + prompt("Adjustment Slope") + } + field(SMOO, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(1) + prompt("Smoothing") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(ESLO, DBF_DOUBLE) { + promptgroup("60 - Convert") + initial("1") + interest(2) + pp(TRUE) + prompt("Raw to EGU Slope") + } + field(EOFF, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(2) + pp(TRUE) + prompt("Raw to EGU Offset") + } + field(ROFF, DBF_ULONG) { + interest(2) + pp(TRUE) + prompt("Raw Offset") + } + field(PBRK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * pbrk") + interest(4) + prompt("Ptrto brkTable") + } + field(INIT, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Initialized?") + } + field(LBRK, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("LastBreak Point") + } + field(RVAL, DBF_LONG) { + pp(TRUE) + prompt("Current Raw Value") + } + field(ORAW, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Previous Raw Value") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_DOUBLE) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuSimm) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(ai, CONSTANT, devAiSoft, "Soft Channel") +device(ai, CONSTANT, devAiSoftRaw, "Raw Soft Channel") +device(ai, CONSTANT, devAiSoftCallback, "Async Soft Channel") +device(ai, INST_IO, devTimestampAI, "Soft Timestamp") +device(ai, INST_IO, devAiGeneralTime, "General Time") +device(ai, INST_IO, devAiStats, "IOC stats") +device(ai, INST_IO, devAiClusts, "IOC stats clusts") +device(ai, CONSTANT, devAiDBCLC, "DBCLC") +device(ai, CONSTANT, devAiDBDLC, "DBDLC") +device(ai, INST_IO, devSysMonAiStats, "sysmon") +recordtype(stringin) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct stringinRecord; + %typedef struct stringindset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_stringin)(struct stringinRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} stringindset; + %#define HAS_stringindset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + size(40) + prompt("Current Value") + } + field(OVAL, DBF_STRING) { + special(SPC_NOMOD) + interest(3) + size(40) + prompt("Previous Value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(stringinPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(stringinPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_STRING) { + pp(TRUE) + size(40) + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(stringin, CONSTANT, devSiSoft, "Soft Channel") +device(stringin, CONSTANT, devSiSoftCallback, "Async Soft Channel") +device(stringin, INST_IO, devTimestampSI, "Soft Timestamp") +device(stringin, INST_IO, devSiGeneralTime, "General Time") +device(stringin, INST_IO, devSiEnviron, "getenv") +device(stringin, INST_IO, devStringinStats, "IOC stats") +device(stringin, INST_IO, devStringinEnvVar, "IOC env var") +device(stringin, INST_IO, devStringinEpics, "IOC epics var") +device(stringin, INST_IO, devSysMonSiStats, "sysmon") +link(state, lnkStateIf) +link(calc, lnkCalcIf) +link(trace, lnkTraceIf) +link(debug, lnkDebugIf) +link(const, lnkConstIf) +registrar(tsInitialize) +registrar(syncInitialize) +registrar(dbrestoreRegister) +registrar(iocSetLogLevelRegister) +registrar(save_restoreRegister) +registrar(decInitialize) +registrar(iocSetSimEnableRegister) +registrar(arrInitialize) +registrar(asInitHooksRegister) +registrar(dbndInitialize) +registrar(iocSetLogSyslogRegister) +registrar(configMenuRegistrar) +registrar(asSub) +registrar(iocSetLogStdoutRegister) +registrar(rsrvRegistrar) +registrar(iocSetLogInitRegister) +function(scanMon) +function(rebootProc) +function(scanMonInit) +variable(dbTemplateMaxVars, int) +variable(lnkDebug_debug, int) +variable(asCaDebug, int) +variable(callbackParallelThreadsDefault, int) +variable(save_restoreRemountThreshold, int) +variable(dbAccessDebugPUTF, int) +variable(dbRecordsOnceOnly, int) +variable(save_restoreDebug, int) +variable(save_restoreDatedBackupFiles, int) +variable(calcoutODLYlimit, double) +variable(configMenuDebug, int) +variable(save_restoreIncompleteSetsOk, int) +variable(dbBptNotMonotonic, int) +variable(atExitDebug, int) +variable(boHIGHlimit, double) +variable(dbJLinkDebug, int) +variable(dbConvertStrict, int) +variable(seqDLYprecision, int) +variable(logClientDebug, int) +variable(dbQuietMacroWarnings, int) +variable(save_restoreNumSeqFiles, int) +variable(boHIGHprecision, int) +variable(dbRecordsAbcSorted, int) +variable(seqDLYlimit, double) +variable(calcoutODLYprecision, int) +variable(histogramSDELprecision, int) +variable(dbThreadRealtimeLock, int) +variable(CASDEBUG, int) +variable(save_restoreSeqPeriodInSeconds, int) diff --git a/EC-GN-JA-PCF/target/main/epics/dbd/PLC.dbd b/EC-GN-JA-PCF/target/main/epics/dbd/PLC.dbd new file mode 100644 index 0000000..fcba839 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/dbd/PLC.dbd @@ -0,0 +1,19604 @@ +menu(serialPRTY) { + choice(serialPRTY_unknown, "Unknown") + choice(serialPRTY_None, "None") + choice(serialPRTY_Even, "Even") + choice(serialPRTY_Odd, "Odd") +} +menu(waveformPOST) { + choice(waveformPOST_Always, "Always") + choice(waveformPOST_OnChange, "On Change") +} +menu(aaoPOST) { + choice(aaoPOST_Always, "Always") + choice(aaoPOST_OnChange, "On Change") +} +menu(menuPriority) { + choice(menuPriorityLOW, "LOW") + choice(menuPriorityMEDIUM, "MEDIUM") + choice(menuPriorityHIGH, "HIGH") +} +menu(serialSBIT) { + choice(serialSBIT_unknown, "Unknown") + choice(serialSBIT_1, "1") + choice(serialSBIT_2, "2") +} +menu(calcoutDOPT) { + choice(calcoutDOPT_Use_VAL, "Use CALC") + choice(calcoutDOPT_Use_OVAL, "Use OCAL") +} +menu(menuOmsl) { + choice(menuOmslsupervisory, "supervisory") + choice(menuOmslclosed_loop, "closed_loop") +} +menu(menuFtype) { + choice(menuFtypeSTRING, "STRING") + choice(menuFtypeCHAR, "CHAR") + choice(menuFtypeUCHAR, "UCHAR") + choice(menuFtypeSHORT, "SHORT") + choice(menuFtypeUSHORT, "USHORT") + choice(menuFtypeLONG, "LONG") + choice(menuFtypeULONG, "ULONG") + choice(menuFtypeINT64, "INT64") + choice(menuFtypeUINT64, "UINT64") + choice(menuFtypeFLOAT, "FLOAT") + choice(menuFtypeDOUBLE, "DOUBLE") + choice(menuFtypeENUM, "ENUM") +} +menu(stringinPOST) { + choice(stringinPOST_OnChange, "On Change") + choice(stringinPOST_Always, "Always") +} +menu(menuPini) { + choice(menuPiniNO, "NO") + choice(menuPiniYES, "YES") + choice(menuPiniRUN, "RUN") + choice(menuPiniRUNNING, "RUNNING") + choice(menuPiniPAUSE, "PAUSE") + choice(menuPiniPAUSED, "PAUSED") +} +menu(dfanoutSELM) { + choice(dfanoutSELM_All, "All") + choice(dfanoutSELM_Specified, "Specified") + choice(dfanoutSELM_Mask, "Mask") +} +menu(menuScan) { + choice(menuScanPassive, "Passive") + choice(menuScanEvent, "Event") + choice(menuScanI_O_Intr, "I/O Intr") + choice(menuScan10_second, "10 second") + choice(menuScan5_second, "5 second") + choice(menuScan2_second, "2 second") + choice(menuScan1_second, "1 second") + choice(menuScan_5_second, ".5 second") + choice(menuScan_2_second, ".2 second") + choice(menuScan_1_second, ".1 second") +} +menu(gpibACMD) { + choice(gpibACMD_None, "None") + choice(gpibACMD_Group_Execute_Trig___GET_, "Group Execute Trig. (GET)") + choice(gpibACMD_Go_To_Local__GTL_, "Go To Local (GTL)") + choice(gpibACMD_Selected_Dev__Clear__SDC_, "Selected Dev. Clear (SDC)") + choice(gpibACMD_Take_Control__TCT_, "Take Control (TCT)") + choice(gpibACMD_Serial_Poll, "Serial Poll") +} +menu(aSubLFLG) { + choice(aSubLFLG_IGNORE, "IGNORE") + choice(aSubLFLG_READ, "READ") +} +menu(asynTMOD) { + choice(asynTMOD_Write_Read, "Write/Read") + choice(asynTMOD_Write, "Write") + choice(asynTMOD_Read, "Read") + choice(asynTMOD_Flush, "Flush") + choice(asynTMOD_NoIO, "NoI/O") +} +menu(ipDRTO) { + choice(ipDRTO_unknown, "Unknown") + choice(ipDRTO_No, "No") + choice(ipDRTO_Yes, "Yes") +} +menu(menuPost) { + choice(menuPost_OnChange, "On Change") + choice(menuPost_Always, "Always") +} +menu(asynINTERFACE) { + choice(asynINTERFACE_OCTET, "asynOctet") + choice(asynINTERFACE_INT32, "asynInt32") + choice(asynINTERFACE_UINT32, "asynUInt32Digital") + choice(asynINTERFACE_FLOAT64, "asynFloat64") +} +menu(menuAlarmStat) { + choice(menuAlarmStatNO_ALARM, "NO_ALARM") + choice(menuAlarmStatREAD, "READ") + choice(menuAlarmStatWRITE, "WRITE") + choice(menuAlarmStatHIHI, "HIHI") + choice(menuAlarmStatHIGH, "HIGH") + choice(menuAlarmStatLOLO, "LOLO") + choice(menuAlarmStatLOW, "LOW") + choice(menuAlarmStatSTATE, "STATE") + choice(menuAlarmStatCOS, "COS") + choice(menuAlarmStatCOMM, "COMM") + choice(menuAlarmStatTIMEOUT, "TIMEOUT") + choice(menuAlarmStatHWLIMIT, "HWLIMIT") + choice(menuAlarmStatCALC, "CALC") + choice(menuAlarmStatSCAN, "SCAN") + choice(menuAlarmStatLINK, "LINK") + choice(menuAlarmStatSOFT, "SOFT") + choice(menuAlarmStatBAD_SUB, "BAD_SUB") + choice(menuAlarmStatUDF, "UDF") + choice(menuAlarmStatDISABLE, "DISABLE") + choice(menuAlarmStatSIMM, "SIMM") + choice(menuAlarmStatREAD_ACCESS, "READ_ACCESS") + choice(menuAlarmStatWRITE_ACCESS, "WRITE_ACCESS") +} +menu(aoOIF) { + choice(aoOIF_Full, "Full") + choice(aoOIF_Incremental, "Incremental") +} +menu(bufferingALG) { + choice(bufferingALG_FIFO, "FIFO Buffer") + choice(bufferingALG_LIFO, "LIFO Buffer") +} +menu(aaiPOST) { + choice(aaiPOST_Always, "Always") + choice(aaiPOST_OnChange, "On Change") +} +menu(calcoutINAV) { + choice(calcoutINAV_EXT_NC, "Ext PV NC") + choice(calcoutINAV_EXT, "Ext PV OK") + choice(calcoutINAV_LOC, "Local PV") + choice(calcoutINAV_CON, "Constant") +} +menu(epidFeedbackState) { + choice(epidFeedbackState_Off, "Off") + choice(epidFeedbackState_On, "On") +} +menu(asynAUTOCONNECT) { + choice(asynAUTOCONNECT_noAutoConnect, "noAutoConnect") + choice(asynAUTOCONNECT_autoConnect, "autoConnect") +} +menu(asynFMT) { + choice(asynFMT_ASCII, "ASCII") + choice(asynFMT_Hybrid, "Hybrid") + choice(asynFMT_Binary, "Binary") +} +menu(seqSELM) { + choice(seqSELM_All, "All") + choice(seqSELM_Specified, "Specified") + choice(seqSELM_Mask, "Mask") +} +menu(asynCONNECT) { + choice(asynCONNECT_Disconnect, "Disconnect") + choice(asynCONNECT_Connect, "Connect") +} +menu(gpibUCMD) { + choice(gpibUCMD_None, "None") + choice(gpibUCMD_Device_Clear__DCL_, "Device Clear (DCL)") + choice(gpibUCMD_Local_Lockout__LL0_, "Local Lockout (LL0)") + choice(gpibUCMD_Serial_Poll_Disable__SPD_, "Serial Poll Disable (SPD)") + choice(gpibUCMD_Serial_Poll_Enable__SPE_, "Serial Poll Enable (SPE)") + choice(gpibUCMD_Unlisten__UNL_, "Unlisten (UNL)") + choice(gpibUCMD_Untalk__UNT_, "Untalk (UNT)") +} +menu(serialBAUD) { + choice(serialBAUD_unknown, "Unknown") + choice(serialBAUD_300, "300") + choice(serialBAUD_600, "600") + choice(serialBAUD_1200, "1200") + choice(serialBAUD_2400, "2400") + choice(serialBAUD_4800, "4800") + choice(serialBAUD_9600, "9600") + choice(serialBAUD_19200, "19200") + choice(serialBAUD_38400, "38400") + choice(serialBAUD_57600, "57600") + choice(serialBAUD_115200, "115200") + choice(serialBAUD_230400, "230400") + choice(serialBAUD_460800, "460800") + choice(serialBAUD_576000, "576000") + choice(serialBAUD_921600, "921600") + choice(serialBAUD_1152000, "1152000") +} +menu(histogramCMD) { + choice(histogramCMD_Read, "Read") + choice(histogramCMD_Clear, "Clear") + choice(histogramCMD_Start, "Start") + choice(histogramCMD_Stop, "Stop") +} +menu(asynTRACE) { + choice(asynTRACE_Off, "Off") + choice(asynTRACE_On, "On") +} +menu(asynEOMREASON) { + choice(asynEOMREASONNone, "None") + choice(asynEOMREASONCNT, "Count") + choice(asynEOMREASONEOS, "Eos") + choice(asynEOMREASONCNTEOS, "Count Eos") + choice(asynEOMREASONEND, "End") + choice(asynEOMREASONCNTEND, "Count End") + choice(asynEOMREASONEOSEND, "Eos End") + choice(asynEOMREASONCNTEOSEND, "Count Eos End") +} +menu(menuIvoa) { + choice(menuIvoaContinue_normally, "Continue normally") + choice(menuIvoaDon_t_drive_outputs, "Don't drive outputs") + choice(menuIvoaSet_output_to_IVOV, "Set output to IVOV") +} +menu(stringoutPOST) { + choice(stringoutPOST_OnChange, "On Change") + choice(stringoutPOST_Always, "Always") +} +menu(menuAlarmSevr) { + choice(menuAlarmSevrNO_ALARM, "NO_ALARM") + choice(menuAlarmSevrMINOR, "MINOR") + choice(menuAlarmSevrMAJOR, "MAJOR") + choice(menuAlarmSevrINVALID, "INVALID") +} +menu(serialMCTL) { + choice(serialMCTL_unknown, "Unknown") + choice(serialMCTL_CLOCAL, "CLOCAL") + choice(serialMCTL_Yes, "YES") +} +menu(serialFCTL) { + choice(serialFCTL_unknown, "Unknown") + choice(serialFCTL_None, "None") + choice(serialFCTL_Hardware, "Hardware") +} +menu(menuSimm) { + choice(menuSimmNO, "NO") + choice(menuSimmYES, "YES") + choice(menuSimmRAW, "RAW") +} +menu(compressALG) { + choice(compressALG_N_to_1_Low_Value, "N to 1 Low Value") + choice(compressALG_N_to_1_High_Value, "N to 1 High Value") + choice(compressALG_N_to_1_Average, "N to 1 Average") + choice(compressALG_Average, "Average") + choice(compressALG_Circular_Buffer, "Circular Buffer") + choice(compressALG_N_to_1_Median, "N to 1 Median") +} +menu(aSubEFLG) { + choice(aSubEFLG_NEVER, "NEVER") + choice(aSubEFLG_ON_CHANGE, "ON CHANGE") + choice(aSubEFLG_ALWAYS, "ALWAYS") +} +menu(fanoutSELM) { + choice(fanoutSELM_All, "All") + choice(fanoutSELM_Specified, "Specified") + choice(fanoutSELM_Mask, "Mask") +} +menu(calcoutOOPT) { + choice(calcoutOOPT_Every_Time, "Every Time") + choice(calcoutOOPT_On_Change, "On Change") + choice(calcoutOOPT_When_Zero, "When Zero") + choice(calcoutOOPT_When_Non_zero, "When Non-zero") + choice(calcoutOOPT_Transition_To_Zero, "Transition To Zero") + choice(calcoutOOPT_Transition_To_Non_zero, "Transition To Non-zero") +} +menu(asynENABLE) { + choice(asynENABLE_Disable, "Disable") + choice(asynENABLE_Enable, "Enable") +} +menu(epidFeedbackMode) { + choice(epidFeedbackMode_PID, "PID") + choice(epidFeedbackMode_MaxMin, "Max/Min") +} +menu(menuConvert) { + choice(menuConvertNO_CONVERSION, "NO CONVERSION") + choice(menuConvertSLOPE, "SLOPE") + choice(menuConvertLINEAR, "LINEAR") + choice(menuConverttypeKdegF, "typeKdegF") + choice(menuConverttypeKdegC, "typeKdegC") + choice(menuConverttypeJdegF, "typeJdegF") + choice(menuConverttypeJdegC, "typeJdegC") + choice(menuConverttypeEdegF, "typeEdegF(ixe only)") + choice(menuConverttypeEdegC, "typeEdegC(ixe only)") + choice(menuConverttypeTdegF, "typeTdegF") + choice(menuConverttypeTdegC, "typeTdegC") + choice(menuConverttypeRdegF, "typeRdegF") + choice(menuConverttypeRdegC, "typeRdegC") + choice(menuConverttypeSdegF, "typeSdegF") + choice(menuConverttypeSdegC, "typeSdegC") +} +menu(serialIX) { + choice(serialIX_unknown, "Unknown") + choice(serialIX_No, "No") + choice(serialIX_Yes, "Yes") +} +menu(menuYesNo) { + choice(menuYesNoNO, "NO") + choice(menuYesNoYES, "YES") +} +menu(timestampTST) { + choice(timestampTST_YY_MM_DD_HH_MM_SS, "YY/MM/DD HH:MM:SS") + choice(timestampTST_MM_DD_YY_HH_MM_SS, "MM/DD/YY HH:MM:SS") + choice(timestampTST_MM_DD_HH_MM_SS_YY, "Mon DD HH:MM:SS YY") + choice(timestampTST_MM_DD_HH_MM_SS, "Mon DD HH:MM:SS") + choice(timestampTST_HH_MM_SS, "HH:MM:SS") + choice(timestampTST_HH_MM, "HH:MM") + choice(timestampTST_DD_MM_YY_HH_MM_SS, "DD/MM/YY HH:MM:SS") + choice(timestampTST_DD_MM_HH_MM_SS_YY, "DD Mon HH:MM:SS YY") + choice(timestampTST_VMS, "DD-Mon-YYYY HH:MM:SS") + choice(timestampTST_MM_DD_YYYY, "Mon DD, YYYY HH:MM:SS.ns") + choice(timestampTST_MM_DD_YY, "MM/DD/YY HH:MM:SS.ns") +} +menu(serialDBIT) { + choice(serialDBIT_unknown, "Unknown") + choice(serialDBIT_5, "5") + choice(serialDBIT_6, "6") + choice(serialDBIT_7, "7") + choice(serialDBIT_8, "8") +} +menu(selSELM) { + choice(selSELM_Specified, "Specified") + choice(selSELM_High_Signal, "High Signal") + choice(selSELM_Low_Signal, "Low Signal") + choice(selSELM_Median_Signal, "Median Signal") +} +recordtype(calcout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct calcoutRecord; + %typedef struct calcoutdset { + % dset common; + % long (*write)(struct calcoutRecord *prec); + %} calcoutdset; + %#define HAS_calcoutdset + % + %#include "dbScan.h" + %#include "postfix.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(RPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct rpvtStruct *rpvt") + interest(4) + prompt("Record Private") + } + field(VAL, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + prompt("Result") + } + field(PVAL, DBF_DOUBLE) { + prompt("Previous Value") + } + field(CALC, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_CALC) + initial("0") + pp(TRUE) + size(80) + prompt("Calculation") + } + field(CLCV, DBF_LONG) { + interest(1) + prompt("CALC Valid") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-F") + special(SPC_MOD) + interest(1) + prompt("Input F") + } + field(INPG, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input G-L") + special(SPC_MOD) + interest(1) + prompt("Input L") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + special(SPC_MOD) + interest(1) + prompt("Output Specification") + } + field(INAV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPA PV Status") + } + field(INBV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPB PV Status") + } + field(INCV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPC PV Status") + } + field(INDV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPD PV Status") + } + field(INEV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPE PV Status") + } + field(INFV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPF PV Status") + } + field(INGV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPG PV Status") + } + field(INHV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPH PV Status") + } + field(INIV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPI PV Status") + } + field(INJV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPJ PV Status") + } + field(INKV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPK PV Status") + } + field(INLV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + initial("1") + interest(1) + prompt("INPL PV Status") + } + field(OUTV, DBF_MENU) { + special(SPC_NOMOD) + menu(calcoutINAV) + interest(1) + prompt("OUT PV Status") + } + field(OOPT, DBF_MENU) { + promptgroup("50 - Output") + menu(calcoutOOPT) + interest(1) + prompt("Output Execute Opt") + } + field(ODLY, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + interest(1) + prompt("Output Execute Delay") + } + field(DLYA, DBF_USHORT) { + special(SPC_NOMOD) + asl(ASL0) + prompt("Output Delay Active") + } + field(DOPT, DBF_MENU) { + promptgroup("30 - Action") + menu(calcoutDOPT) + interest(1) + prompt("Output Data Opt") + } + field(OCAL, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_CALC) + initial("0") + pp(TRUE) + size(80) + prompt("Output Calculation") + } + field(OCLV, DBF_LONG) { + interest(1) + prompt("OCAL Valid") + } + field(OEVT, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_MOD) + asl(ASL0) + size(40) + prompt("Event To Issue") + } + field(EPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("EVENTPVT epvt") + interest(4) + prompt("Event private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Rng") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(A, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input A") + } + field(B, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input B") + } + field(C, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input C") + } + field(D, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input D") + } + field(E, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input E") + } + field(F, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input F") + } + field(G, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input G") + } + field(H, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input H") + } + field(I, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input I") + } + field(J, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input J") + } + field(K, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input K") + } + field(L, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input L") + } + field(OVAL, DBF_DOUBLE) { + asl(ASL0) + prompt("Output Value") + } + field(LA, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of A") + } + field(LB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of B") + } + field(LC, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of C") + } + field(LD, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of D") + } + field(LE, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of E") + } + field(LF, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of F") + } + field(LG, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of G") + } + field(LH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of H") + } + field(LI, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of I") + } + field(LJ, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of J") + } + field(LK, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of K") + } + field(LL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of L") + } + field(POVL, DBF_DOUBLE) { + asl(ASL0) + prompt("Prev Value of OVAL") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(RPCL, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("char rpcl[INFIX_TO_POSTFIX_SIZE(80)]") + interest(4) + prompt("Reverse Polish Calc") + } + field(ORPC, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("char orpc[INFIX_TO_POSTFIX_SIZE(80)]") + interest(4) + prompt("Reverse Polish OCalc") + } +} +device(calcout, CONSTANT, devCalcoutSoft, "Soft Channel") +device(calcout, CONSTANT, devCalcoutSoftCallback, "Async Soft Channel") +recordtype(state) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + size(20) + prompt("Value") + } + field(OVAL, DBF_STRING) { + special(SPC_NOMOD) + interest(3) + size(20) + prompt("Prev Value") + } +} +recordtype(histogram) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct histogramRecord; + %typedef struct histogramdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_histogram)(struct histogramRecord *prec); /*(0,2)=> success and add_count, don't add_count); if add_count then sgnl added to array*/ + % long (*special_linconv)(struct histogramRecord *prec, int after); + %} histogramdset; + %#define HAS_histogramdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + prompt("Value") + } + field(NELM, DBF_USHORT) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Num of Array Elements") + } + field(CSTA, DBF_SHORT) { + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Collection Status") + } + field(CMD, DBF_MENU) { + special(SPC_CALC) + asl(ASL0) + menu(histogramCMD) + interest(1) + prompt("Collection Control") + } + field(ULIM, DBF_DOUBLE) { + prop(YES) + promptgroup("30 - Action") + special(SPC_RESET) + interest(1) + prompt("Upper Signal Limit") + } + field(LLIM, DBF_DOUBLE) { + prop(YES) + promptgroup("30 - Action") + special(SPC_RESET) + interest(1) + prompt("Lower Signal Limit ") + } + field(WDTH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Element Width") + } + field(SGNL, DBF_DOUBLE) { + special(SPC_MOD) + prompt("Signal Value") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(SVL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Signal Value Location") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt32 *bptr") + interest(4) + prompt("Buffer Pointer") + } + field(WDOG, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * wdog") + interest(4) + prompt("Watchdog callback") + } + field(MDEL, DBF_SHORT) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Count Deadband") + } + field(MCNT, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Counts Since Monitor") + } + field(SDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + special(SPC_RESET) + interest(1) + prompt("Monitor Seconds Dband") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_DOUBLE) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(HOPR, DBF_ULONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_ULONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } +} +device(histogram, CONSTANT, devHistogramSoft, "Soft Channel") +recordtype(lsi) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct lsiRecord; + %typedef struct lsidset { + % dset common; + % long (*read_string)(struct lsiRecord *prec); + %} lsidset; + %#define HAS_lsidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("char *val") + pp(TRUE) + prompt("Current Value") + } + field(OVAL, DBF_NOACCESS) { + special(SPC_DBADDR) + extra("char *oval") + interest(3) + prompt("Old Value") + } + field(SIZV, DBF_USHORT) { + promptgroup("40 - Input") + special(SPC_NOMOD) + initial("41") + interest(1) + prompt("Size of buffers") + } + field(LEN, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Length of VAL") + } + field(OLEN, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Length of OVAL") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(menuPost) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(menuPost) + interest(1) + prompt("Post Archive Monitors") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(lsi, CONSTANT, devLsiSoft, "Soft Channel") +device(lsi, INST_IO, devLsiEnviron, "getenv") +device(lsi, INST_IO, devLsiStats, "IOC long string") +device(lsi, INST_IO, asynLsiOctetCmdResponse, "asynOctetCmdResponse") +device(lsi, INST_IO, asynLsiOctetWriteRead, "asynOctetWriteRead") +device(lsi, INST_IO, asynLsiOctetRead, "asynOctetRead") +recordtype(int64out) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct int64outRecord; + %typedef struct int64outdset { + % dset common; + % long (*write_int64out)(struct int64outRecord *prec); + %} int64outdset; + %#define HAS_int64outdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_INT64) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Desired Output") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Units name") + } + field(DRVH, DBF_INT64) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive High Limit") + } + field(DRVL, DBF_INT64) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive Low Limit") + } + field(HOPR, DBF_INT64) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_INT64) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_INT64) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_INT64) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_INT64) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_INT64) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } +} +device(int64out, CONSTANT, devI64outSoft, "Soft Channel") +device(int64out, CONSTANT, devI64outSoftCallback, "Async Soft Channel") +device(int64out, INST_IO, asynInt64Out, "asynInt64") +recordtype(seq) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + asl(ASL0) + pp(TRUE) + prompt("Used to trigger") + } + field(SELM, DBF_MENU) { + promptgroup("30 - Action") + menu(seqSELM) + interest(1) + prompt("Select Mechanism") + } + field(SELN, DBF_USHORT) { + initial("1") + interest(1) + prompt("Link Selection") + } + field(SELL, DBF_INLINK) { + promptgroup("30 - Action") + interest(1) + prompt("Link Selection Loc") + } + field(OFFS, DBF_SHORT) { + promptgroup("30 - Action") + initial("0") + interest(1) + prompt("Offset for Specified") + } + field(SHFT, DBF_SHORT) { + promptgroup("30 - Action") + initial("-1") + interest(1) + prompt("Shift for Mask mode") + } + field(OLDN, DBF_USHORT) { + interest(4) + prompt("Old Selection") + } + field(PREC, DBF_SHORT) { + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(DLY0, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 0") + } + field(DOL0, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 0") + } + field(DO0, DBF_DOUBLE) { + interest(1) + prompt("Value 0") + } + field(LNK0, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 0") + } + field(DLY1, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 1") + } + field(DOL1, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link1") + } + field(DO1, DBF_DOUBLE) { + interest(1) + prompt("Value 1") + } + field(LNK1, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 1") + } + field(DLY2, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 2") + } + field(DOL2, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 2") + } + field(DO2, DBF_DOUBLE) { + interest(1) + prompt("Value 2") + } + field(LNK2, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 2") + } + field(DLY3, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 3") + } + field(DOL3, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 3") + } + field(DO3, DBF_DOUBLE) { + interest(1) + prompt("Value 3") + } + field(LNK3, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 3") + } + field(DLY4, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 4") + } + field(DOL4, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 4") + } + field(DO4, DBF_DOUBLE) { + interest(1) + prompt("Value 4") + } + field(LNK4, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 4") + } + field(DLY5, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 5") + } + field(DOL5, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 5") + } + field(DO5, DBF_DOUBLE) { + interest(1) + prompt("Value 5") + } + field(LNK5, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 5") + } + field(DLY6, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 6") + } + field(DOL6, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 6") + } + field(DO6, DBF_DOUBLE) { + interest(1) + prompt("Value 6") + } + field(LNK6, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 6") + } + field(DLY7, DBF_DOUBLE) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Delay 7") + } + field(DOL7, DBF_INLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Input link 7") + } + field(DO7, DBF_DOUBLE) { + interest(1) + prompt("Value 7") + } + field(LNK7, DBF_OUTLINK) { + promptgroup("41 - Link 0-7") + interest(1) + prompt("Output Link 7") + } + field(DLY8, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 8") + } + field(DOL8, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 8") + } + field(DO8, DBF_DOUBLE) { + interest(1) + prompt("Value 8") + } + field(LNK8, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 8") + } + field(DLY9, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 9") + } + field(DOL9, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 9") + } + field(DO9, DBF_DOUBLE) { + interest(1) + prompt("Value 9") + } + field(LNK9, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 9") + } + field(DLYA, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 10") + } + field(DOLA, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 10") + } + field(DOA, DBF_DOUBLE) { + interest(1) + prompt("Value 10") + } + field(LNKA, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 10") + } + field(DLYB, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 11") + } + field(DOLB, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 11") + } + field(DOB, DBF_DOUBLE) { + interest(1) + prompt("Value 11") + } + field(LNKB, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 11") + } + field(DLYC, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 12") + } + field(DOLC, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 12") + } + field(DOC, DBF_DOUBLE) { + interest(1) + prompt("Value 12") + } + field(LNKC, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 12") + } + field(DLYD, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 13") + } + field(DOLD, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 13") + } + field(DOD, DBF_DOUBLE) { + interest(1) + prompt("Value 13") + } + field(LNKD, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 13") + } + field(DLYE, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 14") + } + field(DOLE, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 14") + } + field(DOE, DBF_DOUBLE) { + interest(1) + prompt("Value 14") + } + field(LNKE, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 14") + } + field(DLYF, DBF_DOUBLE) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Delay 15") + } + field(DOLF, DBF_INLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Input link 15") + } + field(DOF, DBF_DOUBLE) { + interest(1) + prompt("Value 15") + } + field(LNKF, DBF_OUTLINK) { + promptgroup("42 - Link 8-F") + interest(1) + prompt("Output Link 15") + } +} +recordtype(stringout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct stringoutRecord; + %typedef struct stringoutdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*write_stringout)(struct stringoutRecord *prec); /*(-1,0)=>(failure,success)*/ + %} stringoutdset; + %#define HAS_stringoutdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + size(40) + prompt("Current Value") + } + field(OVAL, DBF_STRING) { + special(SPC_NOMOD) + interest(3) + size(40) + prompt("Previous Value") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(stringoutPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(stringoutPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_STRING) { + promptgroup("50 - Output") + interest(2) + size(40) + prompt("INVALID output value") + } +} +device(stringout, CONSTANT, devSoSoft, "Soft Channel") +device(stringout, CONSTANT, devSoSoftCallback, "Async Soft Channel") +device(stringout, INST_IO, devSoStdio, "stdio") +device(stringout, INST_IO, asynSoOctetWrite, "asynOctetWrite") +recordtype(aai) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct aaiRecord; + %typedef struct aaidset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_aai)(struct aaiRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} aaidset; + %#define HAS_aaidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(NELM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Number of Elements") + } + field(FTVL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_NOMOD) + menu(menuFtype) + interest(1) + prompt("Field Type of Value") + } + field(NORD, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Number elements read") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * bptr") + interest(4) + prompt("Buffer Pointer") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(aaiPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(aaiPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(HASH, DBF_ULONG) { + interest(3) + prompt("Hash of OnChange data.") + } +} +device(aai, CONSTANT, devAaiSoft, "Soft Channel") +recordtype(permissive) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_USHORT) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Status") + } + field(WFLG, DBF_USHORT) { + pp(TRUE) + prompt("Wait Flag") + } + field(LABL, DBF_STRING) { + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(20) + prompt("Button Label") + } + field(OVAL, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Old Status") + } + field(OFLG, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Old Flag") + } +} +recordtype(bo) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct boRecord; + %typedef struct bodset { + % dset common; /*init_record returns:(0,2)=>(success,success no convert*/ + % long (*write_bo)(struct boRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} bodset; + %#define HAS_bodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_ENUM) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(HIGH, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Seconds to Hold High") + } + field(ZNAM, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(26) + prompt("Zero Name") + } + field(ONAM, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(26) + prompt("One Name") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("prev Raw Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(RPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * rpvt") + interest(4) + prompt("Record Private") + } + field(WDPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * wdpt") + interest(4) + prompt("Watch Dog Timer ID") + } + field(ZSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Zero Error Severity") + } + field(OSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("One Error Severity") + } + field(COSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Change of State Sevr") + } + field(RBV, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Readback Value") + } + field(ORBV, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Readback Value") + } + field(MLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(LALM, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID outpt action") + } + field(IVOV, DBF_USHORT) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } +} +device(bo, CONSTANT, devBoSoft, "Soft Channel") +device(bo, CONSTANT, devBoSoftRaw, "Raw Soft Channel") +device(bo, CONSTANT, devBoSoftCallback, "Async Soft Channel") +device(bo, INST_IO, devBoGeneralTime, "General Time") +device(bo, INST_IO, devBoDbState, "Db State") +device(bo, INST_IO, devBoSimulation, "IOC SIM") +device(bo, INST_IO, asynBoInt32, "asynInt32") +device(bo, INST_IO, asynBoUInt32Digital, "asynUInt32Digital") +recordtype(dfanout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Desired Output") + } + field(SELM, DBF_MENU) { + promptgroup("30 - Action") + menu(dfanoutSELM) + interest(1) + prompt("Select Mechanism") + } + field(SELN, DBF_USHORT) { + initial("1") + interest(1) + prompt("Link Selection") + } + field(SELL, DBF_INLINK) { + promptgroup("30 - Action") + interest(1) + prompt("Link Selection Loc") + } + field(OUTA, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec A") + } + field(OUTB, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec B") + } + field(OUTC, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec C") + } + field(OUTD, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec D") + } + field(OUTE, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec E") + } + field(OUTF, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec F") + } + field(OUTG, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec G") + } + field(OUTH, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Spec H") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } +} +recordtype(mbbi) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct mbbiRecord; + %typedef struct mbbidset { + % dset common; /* init_record returns: (-1,0) => (failure, success)*/ + % long (*read_mbbi)(struct mbbiRecord *prec); /* (0, 2) => (success, success no convert)*/ + %} mbbidset; + %#define HAS_mbbidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_ENUM) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + } + field(NOBT, DBF_USHORT) { + promptgroup("40 - Input") + special(SPC_NOMOD) + interest(1) + prompt("Number of Bits") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(ZRVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Zero Value") + } + field(ONVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("One Value") + } + field(TWVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Two Value") + } + field(THVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Three Value") + } + field(FRVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Four Value") + } + field(FVVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Five Value") + } + field(SXVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Six Value") + } + field(SVVL, DBF_ULONG) { + base(HEX) + promptgroup("41 - Input 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Seven Value") + } + field(EIVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Eight Value") + } + field(NIVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Nine Value") + } + field(TEVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Ten Value") + } + field(ELVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Eleven Value") + } + field(TVVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Twelve Value") + } + field(TTVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Thirteen Value") + } + field(FTVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Fourteen Value") + } + field(FFVL, DBF_ULONG) { + base(HEX) + promptgroup("42 - Input 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Fifteen Value") + } + field(ZRST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Zero String") + } + field(ONST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("One String") + } + field(TWST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Two String") + } + field(THST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Three String") + } + field(FRST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Four String") + } + field(FVST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Five String") + } + field(SXST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Six String") + } + field(SVST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Seven String") + } + field(EIST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Eight String") + } + field(NIST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Nine String") + } + field(TEST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Ten String") + } + field(ELST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Eleven String") + } + field(TVST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Twelve String") + } + field(TTST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Thirteen String") + } + field(FTST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Fourteen String") + } + field(FFST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Fifteen String") + } + field(ZRSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Zero Severity") + } + field(ONSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State One Severity") + } + field(TWSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Two Severity") + } + field(THSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Three Severity") + } + field(FRSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Four Severity") + } + field(FVSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Five Severity") + } + field(SXSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Six Severity") + } + field(SVSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Seven Severity") + } + field(EISV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Eight Severity") + } + field(NISV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Nine Severity") + } + field(TESV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Ten Severity") + } + field(ELSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Eleven Severity") + } + field(TVSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Twelve Severity") + } + field(TTSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Thirteen Sevr") + } + field(FTSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Fourteen Sevr") + } + field(FFSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Fifteen Severity") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(UNSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Unknown State Severity") + } + field(COSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Change of State Svr") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Raw Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(MLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(LALM, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(SDEF, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("States Defined") + } + field(SHFT, DBF_USHORT) { + promptgroup("40 - Input") + interest(1) + prompt("Shift") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_ULONG) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuSimm) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(mbbi, CONSTANT, devMbbiSoft, "Soft Channel") +device(mbbi, CONSTANT, devMbbiSoftRaw, "Raw Soft Channel") +device(mbbi, CONSTANT, devMbbiSoftCallback, "Async Soft Channel") +device(mbbi, INST_IO, devSysMonMbbiStats, "sysmon") +device(mbbi, INST_IO, asynMbbiInt32, "asynInt32") +device(mbbi, INST_IO, asynMbbiUInt32Digital, "asynUInt32Digital") +recordtype(event) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct eventRecord; + %typedef struct eventdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_event)(struct eventRecord *prec); /*(0)=> success */ + %} eventdset; + %#define HAS_eventdset + % + %#include "dbScan.h" + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("40 - Input") + special(SPC_MOD) + asl(ASL0) + size(40) + prompt("Event Name To Post") + } + field(EPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("EVENTPVT epvt") + interest(4) + prompt("Event private") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Input Specifctn") + } + field(SVAL, DBF_STRING) { + size(40) + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Mode Location") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Sim mode Alarm Svrty") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(event, CONSTANT, devEventSoft, "Soft Channel") +recordtype(compress) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(RES, DBF_SHORT) { + special(SPC_RESET) + asl(ASL0) + interest(3) + prompt("Reset") + } + field(ALG, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_RESET) + menu(compressALG) + interest(1) + prompt("Compression Algorithm") + } + field(BALG, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_RESET) + menu(bufferingALG) + interest(1) + prompt("Buffering Algorithm") + } + field(NSAM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Number of Values") + } + field(N, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_RESET) + initial("1") + interest(1) + prompt("N to 1 Compression") + } + field(IHIL, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Init High Interest Lim") + } + field(ILIL, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Init Low Interest Lim") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(OFF, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Offset") + } + field(NUSE, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Number Used") + } + field(OUSE, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Old Number Used") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("double *bptr") + interest(4) + prompt("Buffer Pointer") + } + field(SPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("double *sptr") + interest(4) + prompt("Summing Buffer Ptr") + } + field(WPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("double *wptr") + interest(4) + prompt("Working Buffer Ptr") + } + field(INPN, DBF_LONG) { + special(SPC_NOMOD) + interest(4) + prompt("Number of elements in Working Buffer") + } + field(CVB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Compress Value Buffer") + } + field(INX, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Compressed Array Inx") + } +} +recordtype(mbbo) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct mbboRecord; + %typedef struct mbbodset { + % dset common; /*init_record returns: (0, 2) => (success, success no convert)*/ + % long (*write_mbbo)(struct mbboRecord *prec); /*returns: (0, 2) => (success, success no convert)*/ + %} mbbodset; + %#define HAS_mbbodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_ENUM) { + promptgroup("50 - Output") + special(SPC_DBADDR) + asl(ASL0) + pp(TRUE) + prompt("Desired Value") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(NOBT, DBF_USHORT) { + promptgroup("50 - Output") + special(SPC_NOMOD) + interest(1) + prompt("Number of Bits") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(ZRVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Zero Value") + } + field(ONVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("One Value") + } + field(TWVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Two Value") + } + field(THVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Three Value") + } + field(FRVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Four Value") + } + field(FVVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Five Value") + } + field(SXVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Six Value") + } + field(SVVL, DBF_ULONG) { + base(HEX) + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Seven Value") + } + field(EIVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Eight Value") + } + field(NIVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Nine Value") + } + field(TEVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Ten Value") + } + field(ELVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Eleven Value") + } + field(TVVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Twelve Value") + } + field(TTVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Thirteen Value") + } + field(FTVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Fourteen Value") + } + field(FFVL, DBF_ULONG) { + base(HEX) + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Fifteen Value") + } + field(ZRST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Zero String") + } + field(ONST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("One String") + } + field(TWST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Two String") + } + field(THST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Three String") + } + field(FRST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Four String") + } + field(FVST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Five String") + } + field(SXST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Six String") + } + field(SVST, DBF_STRING) { + promptgroup("81 - Display 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Seven String") + } + field(EIST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Eight String") + } + field(NIST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Nine String") + } + field(TEST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Ten String") + } + field(ELST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Eleven String") + } + field(TVST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Twelve String") + } + field(TTST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Thirteen String") + } + field(FTST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Fourteen String") + } + field(FFST, DBF_STRING) { + promptgroup("82 - Display 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + size(26) + prompt("Fifteen String") + } + field(ZRSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Zero Severity") + } + field(ONSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State One Severity") + } + field(TWSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Two Severity") + } + field(THSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Three Severity") + } + field(FRSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Four Severity") + } + field(FVSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Five Severity") + } + field(SXSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Six Severity") + } + field(SVSV, DBF_MENU) { + promptgroup("71 - Alarm 0-7") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Seven Severity") + } + field(EISV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Eight Severity") + } + field(NISV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Nine Severity") + } + field(TESV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Ten Severity") + } + field(ELSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Eleven Severity") + } + field(TVSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Twelve Severity") + } + field(TTSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Thirteen Sevr") + } + field(FTSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Fourteen Sevr") + } + field(FFSV, DBF_MENU) { + promptgroup("72 - Alarm 8-15") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("State Fifteen Sevr") + } + field(UNSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Unknown State Sevr") + } + field(COSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Change of State Sevr") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Raw Value") + } + field(RBV, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Readback Value") + } + field(ORBV, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Readback Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(MLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(LALM, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(SDEF, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("States Defined") + } + field(SHFT, DBF_USHORT) { + promptgroup("50 - Output") + interest(1) + prompt("Shift") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID outpt action") + } + field(IVOV, DBF_USHORT) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } +} +device(mbbo, CONSTANT, devMbboSoft, "Soft Channel") +device(mbbo, CONSTANT, devMbboSoftRaw, "Raw Soft Channel") +device(mbbo, CONSTANT, devMbboSoftCallback, "Async Soft Channel") +device(mbbo, INST_IO, asynMbboInt32, "asynInt32") +device(mbbo, INST_IO, asynMbboUInt32Digital, "asynUInt32Digital") +recordtype(epid) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + prompt("Record Name") + size(61) + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + prompt("Descriptor") + size(41) + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + prompt("Access Security Group") + size(29) + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Event Name") + size(40) + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("epicsMutexId mlok") + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("ELLLIST mlis") + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("ELLLIST bklnk") + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + interest(2) + initial("YES") + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct asgMember *asp") + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct processNotify *ppn") + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct processNotifyRecord *ppnr") + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct scan_element *spvt") + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct typed_rset *rset") + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("unambiguous_dset *dset") + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("void *dpvt") + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct dbRecordType *rdes") + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct lockRecord *lset") + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(1) + extra("epicsUInt8 bkpt") + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + interest(1) + initial("1") + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + initial("INVALID") + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(2) + extra("epicsTimeStamp time") + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Setpoint") + } + field(SMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Setpoint Mode Select") + } + field(STPL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Setpoint Location") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Controlled Value Loc") + } + field(OUTL, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Location") + } + field(TRIG, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Readback Trigger") + } + field(TVAL, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(1) + prompt("Trigger Value") + } + field(CVAL, DBF_DOUBLE) { + special(SPC_NOMOD) + prompt("Controlled Value") + } + field(CVLP, DBF_DOUBLE) { + special(SPC_NOMOD) + prompt("Prev. Controlled Value") + } + field(OVAL, DBF_DOUBLE) { + special(SPC_NOMOD) + prompt("Output value") + } + field(OVLP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev output") + } + field(PREC, DBF_SHORT) { + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(MDT, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Min Delta T") + } + field(FMOD, DBF_MENU) { + promptgroup("30 - Action") + menu(epidFeedbackMode) + interest(1) + prompt("Feedback Mode") + } + field(FBON, DBF_MENU) { + promptgroup("30 - Action") + menu(epidFeedbackState) + interest(1) + prompt("Feedback On/Off") + } + field(FBOP, DBF_MENU) { + promptgroup("30 - Action") + menu(epidFeedbackState) + interest(1) + prompt("Prev. feedback On/Off") + } + field(KP, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Proportional Gain") + } + field(KI, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Integral Gain") + } + field(KD, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Derivative Gain") + } + field(EGU, DBF_STRING) { + promptgroup("80 - Display") + interest(1) + prompt("Engineering Units") + size(16) + } + field(HOPR, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(DRVH, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("High Drive Limit") + } + field(DRVL, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Low Drive Limit") + } + field(HIHI, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Hihi Deviation Limit") + } + field(LOLO, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Lolo Deviation Limit") + } + field(HIGH, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("High Deviation Limit") + } + field(LOW, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Low Deviation Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(ODEL, DBF_DOUBLE) { + promptgroup("30 - Action") + interest(1) + prompt("Output Deadband") + } + field(P, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("P component") + } + field(PP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("Prev. P component") + } + field(I, DBF_DOUBLE) { + interest(2) + prompt("I component") + } + field(IP, DBF_DOUBLE) { + interest(2) + prompt("Prev. I component") + } + field(D, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("D component") + } + field(DP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("Prev. D component") + } + field(CT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("epicsTimeStamp ct") + prompt("Time") + } + field(CTP, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("epicsTimeStamp ctp") + prompt("Previous time") + } + field(DT, DBF_DOUBLE) { + interest(2) + prompt("Delta T") + } + field(DTP, DBF_DOUBLE) { + interest(2) + prompt("Prev. Delta T") + } + field(ERR, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("Error") + } + field(ERRP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("Prev. Error") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } +} +device(epid, CONSTANT, devEpidSoft, "Soft Channel") +device(epid, CONSTANT, devEpidSoftCB, "Async Soft Channel") +recordtype(ao) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct aoRecord; + %typedef struct aodset { + % dset common; /*init_record returns: (0,2)=>(success,success no convert)*/ + % long (*write_ao)(struct aoRecord *prec); /*(0)=>(success ) */ + % long (*special_linconv)(struct aoRecord *prec, int after); + %} aodset; + %#define HAS_aodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Desired Output") + } + field(OVAL, DBF_DOUBLE) { + prompt("Output Value") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(OROC, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(1) + prompt("Output Rate of Change") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(OIF, DBF_MENU) { + promptgroup("50 - Output") + menu(aoOIF) + interest(1) + prompt("Out Full/Incremental") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(LINR, DBF_MENU) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + menu(menuConvert) + interest(1) + pp(TRUE) + prompt("Linearization") + } + field(EGUF, DBF_DOUBLE) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + interest(1) + pp(TRUE) + prompt("Eng Units Full") + } + field(EGUL, DBF_DOUBLE) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + interest(1) + pp(TRUE) + prompt("Eng Units Low") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(ROFF, DBF_ULONG) { + interest(2) + pp(TRUE) + prompt("Raw Offset") + } + field(EOFF, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(2) + pp(TRUE) + prompt("EGU to Raw Offset") + } + field(ESLO, DBF_DOUBLE) { + promptgroup("60 - Convert") + initial("1") + interest(2) + pp(TRUE) + prompt("EGU to Raw Slope") + } + field(DRVH, DBF_DOUBLE) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive High Limit") + } + field(DRVL, DBF_DOUBLE) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive Low Limit") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(AOFF, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(1) + pp(TRUE) + prompt("Adjustment Offset") + } + field(ASLO, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(1) + pp(TRUE) + prompt("Adjustment Slope") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(RVAL, DBF_LONG) { + pp(TRUE) + prompt("Current Raw Value") + } + field(ORAW, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Previous Raw Value") + } + field(RBV, DBF_LONG) { + special(SPC_NOMOD) + prompt("Readback Value") + } + field(ORBV, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Readback Value") + } + field(PVAL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Previous value") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(PBRK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * pbrk") + interest(4) + prompt("Ptrto brkTable") + } + field(INIT, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Initialized?") + } + field(LBRK, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("LastBreak Point") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } + field(OMOD, DBF_UCHAR) { + special(SPC_NOMOD) + prompt("Was OVAL modified?") + } +} +device(ao, CONSTANT, devAoSoft, "Soft Channel") +device(ao, CONSTANT, devAoSoftRaw, "Raw Soft Channel") +device(ao, CONSTANT, devAoSoftCallback, "Async Soft Channel") +device(ao, INST_IO, devAoStats, "IOC stats") +device(ao, INST_IO, asynAoInt32, "asynInt32") +device(ao, INST_IO, asynAoFloat64, "asynFloat64") +device(ao, INST_IO, asynAoInt64, "asynInt64") +recordtype(aao) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct aaoRecord; + %typedef struct aaodset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*write_aao)(struct aaoRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} aaodset; + %#define HAS_aaodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(NELM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Number of Elements") + } + field(FTVL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_NOMOD) + menu(menuFtype) + interest(1) + prompt("Field Type of Value") + } + field(NORD, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Number elements read") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * bptr") + interest(4) + prompt("Buffer Pointer") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(aaoPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(aaoPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(HASH, DBF_ULONG) { + interest(3) + prompt("Hash of OnChange data.") + } +} +device(aao, CONSTANT, devAaoSoft, "Soft Channel") +recordtype(mbbiDirect) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct mbbiDirectRecord; + %typedef struct mbbidirectdset { + % dset common; /* init_record returns: (-1,0) => (failure, success)*/ + % long (*read_mbbi)(struct mbbiDirectRecord *prec); /* (0, 2) => (success, success no convert)*/ + %} mbbidirectdset; + %#define HAS_mbbidirectdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + } + field(NOBT, DBF_SHORT) { + promptgroup("40 - Input") + special(SPC_NOMOD) + interest(1) + prompt("Number of Bits") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Raw Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(MLST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(SHFT, DBF_USHORT) { + promptgroup("40 - Input") + interest(1) + prompt("Shift") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_LONG) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuSimm) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(B0, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 0") + } + field(B1, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 1") + } + field(B2, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 2") + } + field(B3, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 3") + } + field(B4, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 4") + } + field(B5, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 5") + } + field(B6, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 6") + } + field(B7, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 7") + } + field(B8, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 8") + } + field(B9, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 9") + } + field(BA, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 10") + } + field(BB, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 11") + } + field(BC, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 12") + } + field(BD, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 13") + } + field(BE, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 14") + } + field(BF, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 15") + } + field(B10, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 16") + } + field(B11, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 17") + } + field(B12, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 18") + } + field(B13, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 19") + } + field(B14, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 20") + } + field(B15, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 21") + } + field(B16, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 22") + } + field(B17, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 23") + } + field(B18, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 24") + } + field(B19, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 25") + } + field(B1A, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 26") + } + field(B1B, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 27") + } + field(B1C, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 28") + } + field(B1D, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 29") + } + field(B1E, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 30") + } + field(B1F, DBF_UCHAR) { + interest(1) + pp(TRUE) + prompt("Bit 31") + } +} +device(mbbiDirect, CONSTANT, devMbbiDirectSoft, "Soft Channel") +device(mbbiDirect, CONSTANT, devMbbiDirectSoftRaw, "Raw Soft Channel") +device(mbbiDirect, CONSTANT, devMbbiDirectSoftCallback, "Async Soft Channel") +device(mbbiDirect, INST_IO, devSysMonMbbiDirectStats, "sysmon") +device(mbbiDirect, INST_IO, asynMbbiDirectUInt32Digital, "asynUInt32Digital") +recordtype(asyn) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + asl(ASL0) + interest(4) + prompt("Value field (unused)") + } + field(PORT, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_MOD) + initial("") + interest(1) + size(40) + prompt("asyn port") + } + field(ADDR, DBF_LONG) { + promptgroup("30 - Action") + special(SPC_MOD) + initial("0") + interest(1) + prompt("asyn address") + } + field(PCNCT, DBF_MENU) { + special(SPC_MOD) + menu(asynCONNECT) + interest(2) + prompt("Port Connect/Disconnect") + } + field(DRVINFO, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_MOD) + initial("") + interest(2) + size(40) + prompt("Driver info string") + } + field(REASON, DBF_LONG) { + special(SPC_MOD) + interest(2) + prompt("asynUser->reason") + } + field(TMOD, DBF_MENU) { + promptgroup("30 - Action") + menu(asynTMOD) + interest(1) + prompt("Transaction mode") + } + field(TMOT, DBF_DOUBLE) { + promptgroup("30 - Action") + initial("1.0") + interest(1) + prompt("Timeout (sec)") + } + field(IFACE, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_MOD) + menu(asynINTERFACE) + interest(2) + prompt("Interface") + } + field(OCTETIV, DBF_LONG) { + interest(2) + prompt("asynOctet is valid") + } + field(OPTIONIV, DBF_LONG) { + interest(2) + prompt("asynOption is valid") + } + field(GPIBIV, DBF_LONG) { + interest(2) + prompt("asynGPIB is valid") + } + field(I32IV, DBF_LONG) { + interest(2) + prompt("asynInt32 is valid") + } + field(UI32IV, DBF_LONG) { + interest(2) + prompt("asynUInt32Digital is valid") + } + field(F64IV, DBF_LONG) { + interest(2) + prompt("asynFloat64 is valid") + } + field(AOUT, DBF_STRING) { + promptgroup("50 - Output") + interest(1) + pp(TRUE) + size(40) + prompt("Output (command) string") + } + field(OEOS, DBF_STRING) { + promptgroup("50 - Output") + special(SPC_MOD) + interest(1) + size(40) + prompt("Output delimiter") + } + field(BOUT, DBF_CHAR) { + special(SPC_DBADDR) + interest(1) + pp(TRUE) + prompt("Output binary data") + } + field(OPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *optr") + interest(4) + prompt("Output buffer pointer") + } + field(OMAX, DBF_LONG) { + promptgroup("50 - Output") + special(SPC_NOMOD) + initial("80") + interest(1) + prompt("Max. size of output array") + } + field(NOWT, DBF_LONG) { + promptgroup("50 - Output") + initial("80") + interest(1) + prompt("Number of bytes to write") + } + field(NAWT, DBF_LONG) { + interest(1) + prompt("Number of bytes actually written") + } + field(OFMT, DBF_MENU) { + promptgroup("50 - Output") + menu(asynFMT) + interest(1) + prompt("Output format") + } + field(AINP, DBF_STRING) { + special(SPC_NOMOD) + interest(1) + size(40) + prompt("Input (response) string") + } + field(TINP, DBF_STRING) { + special(SPC_NOMOD) + asl(ASL0) + interest(1) + size(40) + prompt("Translated input string") + } + field(IEOS, DBF_STRING) { + promptgroup("40 - Input") + special(SPC_MOD) + interest(1) + size(40) + prompt("Input Delimiter") + } + field(BINP, DBF_CHAR) { + special(SPC_DBADDR) + asl(ASL0) + prompt("Input binary data") + } + field(IPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *iptr") + interest(4) + size(4) + prompt("Input buffer pointer") + } + field(IMAX, DBF_LONG) { + promptgroup("40 - Input") + special(SPC_NOMOD) + initial("80") + interest(1) + prompt("Max. size of input array") + } + field(NRRD, DBF_LONG) { + promptgroup("40 - Input") + interest(1) + prompt("Number of bytes to read") + } + field(NORD, DBF_LONG) { + special(SPC_NOMOD) + interest(1) + prompt("Number of bytes read") + } + field(IFMT, DBF_MENU) { + promptgroup("40 - Input") + menu(asynFMT) + interest(1) + prompt("Input format") + } + field(EOMR, DBF_MENU) { + special(SPC_NOMOD) + menu(asynEOMREASON) + interest(1) + prompt("EOM reason") + } + field(I32INP, DBF_LONG) { + special(SPC_NOMOD) + interest(2) + prompt("asynInt32 input") + } + field(I32OUT, DBF_LONG) { + promptgroup("50 - Output") + interest(2) + pp(TRUE) + prompt("asynInt32 output") + } + field(UI32INP, DBF_ULONG) { + special(SPC_NOMOD) + interest(2) + prompt("asynUInt32Digital input") + } + field(UI32OUT, DBF_ULONG) { + promptgroup("50 - Output") + interest(2) + pp(TRUE) + prompt("asynUInt32Digital output") + } + field(UI32MASK, DBF_ULONG) { + promptgroup("50 - Output") + special(SPC_MOD) + interest(2) + initial("0xffffffff") + prompt("asynUInt32Digital mask") + } + field(F64INP, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(2) + prompt("asynFloat64 input") + } + field(F64OUT, DBF_DOUBLE) { + promptgroup("50 - Output") + interest(2) + pp(TRUE) + prompt("asynFloat64 output") + } + field(BAUD, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialBAUD) + interest(2) + prompt("Baud rate") + } + field(LBAUD, DBF_LONG) { + promptgroup("31 - Serial") + special(SPC_MOD) + interest(2) + prompt("Baud rate") + } + field(PRTY, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialPRTY) + interest(2) + prompt("Parity") + } + field(DBIT, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialDBIT) + interest(2) + prompt("Data bits") + } + field(SBIT, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialSBIT) + interest(2) + prompt("Stop bits") + } + field(MCTL, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialMCTL) + interest(2) + prompt("Modem control") + } + field(FCTL, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialFCTL) + interest(2) + prompt("Flow control") + } + field(IXON, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialIX) + interest(2) + prompt("Output XON/XOFF") + } + field(IXOFF, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialIX) + interest(2) + prompt("Input XON/XOFF") + } + field(IXANY, DBF_MENU) { + promptgroup("31 - Serial") + special(SPC_MOD) + menu(serialIX) + interest(2) + prompt("XON=any character") + } + field(HOSTINFO, DBF_STRING) { + promptgroup("32 - IP") + special(SPC_MOD) + initial("") + interest(1) + size(40) + prompt("host info") + } + field(DRTO, DBF_MENU) { + promptgroup("32 - IP") + special(SPC_MOD) + menu(ipDRTO) + interest(2) + prompt("Disconnect on timeout") + } + field(UCMD, DBF_MENU) { + promptgroup("33 - GPIB") + menu(gpibUCMD) + interest(2) + pp(TRUE) + prompt("Universal command") + } + field(ACMD, DBF_MENU) { + promptgroup("33 - GPIB") + menu(gpibACMD) + interest(2) + pp(TRUE) + prompt("Addressed command") + } + field(SPR, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Serial poll response") + } + field(TMSK, DBF_LONG) { + promptgroup("80 - Display") + special(SPC_MOD) + interest(1) + prompt("Trace mask") + } + field(TB0, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace error") + } + field(TB1, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace IO device") + } + field(TB2, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace IO filter") + } + field(TB3, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace IO driver") + } + field(TB4, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace flow") + } + field(TB5, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace warning") + } + field(TIOM, DBF_LONG) { + promptgroup("80 - Display") + special(SPC_MOD) + interest(1) + prompt("Trace I/O mask") + } + field(TIB0, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace IO ASCII") + } + field(TIB1, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace IO escape") + } + field(TIB2, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace IO hex") + } + field(TINM, DBF_LONG) { + promptgroup("80 - Display") + special(SPC_MOD) + interest(1) + prompt("Trace Info mask") + } + field(TINB0, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace Info Time") + } + field(TINB1, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace Info Port") + } + field(TINB2, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace Info Source") + } + field(TINB3, DBF_MENU) { + promptgroup("80 - Display") + special(SPC_MOD) + menu(asynTRACE) + interest(1) + prompt("Trace Info Thread") + } + field(TSIZ, DBF_LONG) { + promptgroup("80 - Display") + special(SPC_MOD) + interest(1) + prompt("Trace IO truncate size") + } + field(TFIL, DBF_STRING) { + promptgroup("80 - Display") + special(SPC_MOD) + interest(1) + size(40) + prompt("Trace IO file") + } + field(AUCT, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_MOD) + menu(asynAUTOCONNECT) + interest(1) + prompt("Autoconnect") + } + field(CNCT, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_MOD) + menu(asynCONNECT) + interest(1) + prompt("Connect/Disconnect") + } + field(ENBL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_MOD) + menu(asynENABLE) + interest(1) + prompt("Enable/Disable") + } + field(ERRS, DBF_NOACCESS) { + special(SPC_DBADDR) + extra("char *errs") + interest(4) + prompt("Error string") + } + field(AQR, DBF_UCHAR) { + special(SPC_MOD) + interest(4) + prompt("Abort queueRequest") + } +} +device(asyn, INST_IO, asynRecordDevice, "asynRecordDevice") +recordtype(waveform) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct waveformRecord; + %typedef struct wfdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_wf)(struct waveformRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} wfdset; + %#define HAS_wfdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(RARM, DBF_SHORT) { + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Rearm the waveform") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(NELM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Number of Elements") + } + field(FTVL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_NOMOD) + menu(menuFtype) + interest(1) + prompt("Field Type of Value") + } + field(BUSY, DBF_SHORT) { + special(SPC_NOMOD) + prompt("Busy Indicator") + } + field(NORD, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Number elements read") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * bptr") + interest(4) + prompt("Buffer Pointer") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(waveformPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(waveformPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(HASH, DBF_ULONG) { + interest(3) + prompt("Hash of OnChange data.") + } +} +device(waveform, CONSTANT, devWfSoft, "Soft Channel") +device(waveform, INST_IO, devWaveformStats, "IOC stats") +device(waveform, INST_IO, devSysMonWaveStats, "sysmon") +device(waveform, INST_IO, asynWfOctetCmdResponse, "asynOctetCmdResponse") +device(waveform, INST_IO, asynWfOctetWriteRead, "asynOctetWriteRead") +device(waveform, INST_IO, asynWfOctetRead, "asynOctetRead") +device(waveform, INST_IO, asynWfOctetWrite, "asynOctetWrite") +device(waveform, INST_IO, asynWfOctetWriteBinary, "asynOctetWriteBinary") +device(waveform, INST_IO, asynInt8ArrayWfIn, "asynInt8ArrayIn") +device(waveform, INST_IO, asynInt8ArrayWfOut, "asynInt8ArrayOut") +device(waveform, INST_IO, asynInt16ArrayWfIn, "asynInt16ArrayIn") +device(waveform, INST_IO, asynInt16ArrayWfOut, "asynInt16ArrayOut") +device(waveform, INST_IO, asynInt32ArrayWfIn, "asynInt32ArrayIn") +device(waveform, INST_IO, asynInt32ArrayWfOut, "asynInt32ArrayOut") +device(waveform, INST_IO, asynInt32TimeSeries, "asynInt32TimeSeries") +device(waveform, INST_IO, asynFloat32ArrayWfIn, "asynFloat32ArrayIn") +device(waveform, INST_IO, asynFloat32ArrayWfOut, "asynFloat32ArrayOut") +device(waveform, INST_IO, asynFloat64ArrayWfIn, "asynFloat64ArrayIn") +device(waveform, INST_IO, asynFloat64ArrayWfOut, "asynFloat64ArrayOut") +device(waveform, INST_IO, asynFloat64TimeSeries, "asynFloat64TimeSeries") +device(waveform, INST_IO, asynInt64ArrayWfIn, "asynInt64ArrayIn") +device(waveform, INST_IO, asynInt64ArrayWfOut, "asynInt64ArrayOut") +device(waveform, INST_IO, asynInt64TimeSeries, "asynInt64TimeSeries") +recordtype(timestamp) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + prompt("Record Name") + size(61) + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + prompt("Descriptor") + size(41) + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + prompt("Access Security Group") + size(29) + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Event Name") + size(40) + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("epicsMutexId mlok") + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("ELLLIST mlis") + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("ELLLIST bklnk") + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + interest(2) + initial("YES") + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct asgMember *asp") + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct processNotify *ppn") + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct processNotifyRecord *ppnr") + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct scan_element *spvt") + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct typed_rset *rset") + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("unambiguous_dset *dset") + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("void *dpvt") + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct dbRecordType *rdes") + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(4) + extra("struct lockRecord *lset") + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(1) + extra("epicsUInt8 bkpt") + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + interest(1) + initial("1") + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + initial("INVALID") + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + interest(2) + extra("epicsTimeStamp time") + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + size(40) + } + field(OVAL, DBF_STRING) { + special(SPC_NOMOD) + interest(3) + prompt("Previous Value") + size(40) + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Current Raw Value") + } + field(TST, DBF_MENU) { + promptgroup("40 - Input") + menu(timestampTST) + interest(2) + prompt("Time Stamp Type") + } +} +recordtype(fanout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + asl(ASL0) + pp(TRUE) + prompt("Used to trigger") + } + field(SELM, DBF_MENU) { + promptgroup("30 - Action") + menu(fanoutSELM) + interest(1) + prompt("Select Mechanism") + } + field(SELN, DBF_USHORT) { + initial("1") + interest(1) + prompt("Link Selection") + } + field(SELL, DBF_INLINK) { + promptgroup("30 - Action") + interest(1) + prompt("Link Selection Loc") + } + field(OFFS, DBF_SHORT) { + promptgroup("30 - Action") + initial("0") + interest(1) + prompt("Offset for Specified") + } + field(SHFT, DBF_SHORT) { + promptgroup("30 - Action") + initial("-1") + interest(1) + prompt("Shift for Mask mode") + } + field(LNK0, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 0") + } + field(LNK1, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 1") + } + field(LNK2, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 2") + } + field(LNK3, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 3") + } + field(LNK4, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 4") + } + field(LNK5, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 5") + } + field(LNK6, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 6") + } + field(LNK7, DBF_FWDLINK) { + promptgroup("51 - Output 0-7") + interest(1) + prompt("Forward Link 7") + } + field(LNK8, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 8") + } + field(LNK9, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 9") + } + field(LNKA, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 10") + } + field(LNKB, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 11") + } + field(LNKC, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 12") + } + field(LNKD, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 13") + } + field(LNKE, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 14") + } + field(LNKF, DBF_FWDLINK) { + promptgroup("52 - Output 8-F") + interest(1) + prompt("Forward Link 15") + } +} +recordtype(longin) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct longinRecord; + %typedef struct longindset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_longin)(struct longinRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} longindset; + %#define HAS_longindset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_LONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_LONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_LONG) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(ADEL, DBF_LONG) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_LONG) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Input Specifctn") + } + field(SVAL, DBF_LONG) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Mode Location") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Sim mode Alarm Svrty") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(longin, CONSTANT, devLiSoft, "Soft Channel") +device(longin, CONSTANT, devLiSoftCallback, "Async Soft Channel") +device(longin, INST_IO, devLiGeneralTime, "General Time") +device(longin, INST_IO, asynLiInt32, "asynInt32") +device(longin, INST_IO, asynLiUInt32Digital, "asynUInt32Digital") +device(longin, INST_IO, asynLiInt64, "asynInt64") +recordtype(printf) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct printfRecord; + %typedef struct printfdset { + % dset common; + % long (*write_string)(struct printfRecord *prec); + %} printfdset; + %#define HAS_printfdset + % + %/* Number of INPx fields defined */ + %#define PRINTF_NLINKS 10 + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("char *val") + pp(TRUE) + prompt("Result") + } + field(SIZV, DBF_USHORT) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("41") + interest(1) + prompt("Size of VAL buffer") + } + field(LEN, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Length of VAL") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(FMT, DBF_STRING) { + promptgroup("30 - Action") + pp(TRUE) + size(81) + prompt("Format String") + } + field(IVLS, DBF_STRING) { + promptgroup("30 - Action") + initial("LNK") + size(16) + prompt("Invalid Link String") + } + field(INP0, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 0") + } + field(INP1, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 1") + } + field(INP2, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 2") + } + field(INP3, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 3") + } + field(INP4, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 4") + } + field(INP5, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 5") + } + field(INP6, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 6") + } + field(INP7, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 7") + } + field(INP8, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 8") + } + field(INP9, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input 9") + } +} +device(printf, CONSTANT, devPrintfSoft, "Soft Channel") +device(printf, CONSTANT, devPrintfSoftCallback, "Async Soft Channel") +device(printf, INST_IO, devPrintfStdio, "stdio") +device(printf, INST_IO, asynPfOctetWrite, "asynOctetWrite") +recordtype(sel) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("40 - Input") + special(SPC_NOMOD) + asl(ASL0) + prompt("Result") + } + field(SELM, DBF_MENU) { + promptgroup("30 - Action") + menu(selSELM) + prompt("Select Mechanism") + } + field(SELN, DBF_USHORT) { + prompt("Index value") + } + field(PREC, DBF_SHORT) { + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(NVL, DBF_INLINK) { + promptgroup("30 - Action") + interest(1) + prompt("Index Value Location") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input F") + } + field(INPG, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input L") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Rng") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(A, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input A") + } + field(B, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input B") + } + field(C, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input C") + } + field(D, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input D") + } + field(E, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input E") + } + field(F, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input F") + } + field(G, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input G") + } + field(H, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input H") + } + field(I, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input I") + } + field(J, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input J") + } + field(K, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input K") + } + field(L, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input L") + } + field(LA, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of A") + } + field(LB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of B") + } + field(LC, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of C") + } + field(LD, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of D") + } + field(LE, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of E") + } + field(LF, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of F") + } + field(LG, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of G") + } + field(LH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of H") + } + field(LI, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of I") + } + field(LJ, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of J") + } + field(LK, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of K") + } + field(LL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of L") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(NLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Index Monitored") + } +} +recordtype(bi) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct biRecord; + %typedef struct bidset { + % dset common; + % long (*read_bi)(struct biRecord *prec); + %} bidset; + %#define HAS_bidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(VAL, DBF_ENUM) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current Value") + } + field(ZSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Zero Error Severity") + } + field(OSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("One Error Severity") + } + field(COSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Change of State Svr") + } + field(ZNAM, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(26) + prompt("Zero Name") + } + field(ONAM, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + pp(TRUE) + size(26) + prompt("One Name") + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("prev Raw Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(LALM, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(MLST, DBF_USHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_ULONG) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuSimm) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(bi, CONSTANT, devBiSoft, "Soft Channel") +device(bi, CONSTANT, devBiSoftRaw, "Raw Soft Channel") +device(bi, CONSTANT, devBiSoftCallback, "Async Soft Channel") +device(bi, INST_IO, devBiDbState, "Db State") +device(bi, INST_IO, asynBiInt32, "asynInt32") +device(bi, INST_IO, asynBiUInt32Digital, "asynUInt32Digital") +recordtype(lso) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct lsoRecord; + %typedef struct lsodset { + % dset common; + % long (*write_string)(struct lsoRecord *prec); + %} lsodset; + %#define HAS_lsodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("char *val") + pp(TRUE) + prompt("Current Value") + } + field(OVAL, DBF_NOACCESS) { + special(SPC_DBADDR) + extra("char *oval") + interest(3) + prompt("Previous Value") + } + field(SIZV, DBF_USHORT) { + promptgroup("50 - Output") + special(SPC_NOMOD) + initial("41") + interest(1) + prompt("Size of buffers") + } + field(LEN, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Length of VAL") + } + field(OLEN, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Length of OVAL") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Link") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID Output Action") + } + field(IVOV, DBF_STRING) { + promptgroup("50 - Output") + interest(2) + size(40) + prompt("INVALID Output Value") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(menuPost) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(menuPost) + interest(1) + prompt("Post Archive Monitors") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(lso, CONSTANT, devLsoSoft, "Soft Channel") +device(lso, CONSTANT, devLsoSoftCallback, "Async Soft Channel") +device(lso, INST_IO, devLsoStdio, "stdio") +device(lso, INST_IO, asynLsoOctetWrite, "asynOctetWrite") +recordtype(subArray) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct subArrayRecord; + %typedef struct sadset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_sa)(struct subArrayRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} sadset; + %#define HAS_sadset + % + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void * val") + pp(TRUE) + prompt("Value") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(FTVL, DBF_MENU) { + promptgroup("30 - Action") + special(SPC_NOMOD) + menu(menuFtype) + interest(1) + prompt("Field Type of Value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(MALM, DBF_ULONG) { + promptgroup("30 - Action") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Maximum Elements") + } + field(NELM, DBF_ULONG) { + promptgroup("30 - Action") + initial("1") + pp(TRUE) + prompt("Number of Elements") + } + field(INDX, DBF_ULONG) { + promptgroup("30 - Action") + pp(TRUE) + prompt("Substring Index") + } + field(BUSY, DBF_SHORT) { + special(SPC_NOMOD) + prompt("Busy Indicator") + } + field(NORD, DBF_LONG) { + special(SPC_NOMOD) + prompt("Number elements read") + } + field(BPTR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * bptr") + interest(4) + prompt("Buffer Pointer") + } +} +device(subArray, CONSTANT, devSASoft, "Soft Channel") +recordtype(calc) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %#include "postfix.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("50 - Output") + asl(ASL0) + prompt("Result") + } + field(CALC, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_CALC) + initial("0") + pp(TRUE) + size(80) + prompt("Calculation") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input F") + } + field(INPG, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input L") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Rng") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(A, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input A") + } + field(B, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input B") + } + field(C, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input C") + } + field(D, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input D") + } + field(E, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input E") + } + field(F, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input F") + } + field(G, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input G") + } + field(H, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input H") + } + field(I, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input I") + } + field(J, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input J") + } + field(K, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input K") + } + field(L, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input L") + } + field(LA, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of A") + } + field(LB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of B") + } + field(LC, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of C") + } + field(LD, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of D") + } + field(LE, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of E") + } + field(LF, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of F") + } + field(LG, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of G") + } + field(LH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of H") + } + field(LI, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of I") + } + field(LJ, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of J") + } + field(LK, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of K") + } + field(LL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of L") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(RPCL, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("char rpcl[INFIX_TO_POSTFIX_SIZE(80)]") + interest(4) + prompt("Reverse Polish Calc") + } +} +recordtype(mbboDirect) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct mbboDirectRecord; + %typedef struct mbbodirectdset { + % dset common; /*init_record returns: (0, 2)=>(success, success no convert)*/ + % long (*write_mbbo)(struct mbboDirectRecord *prec); /*returns: (0, 2)=>(success, success no convert)*/ + %} mbbodirectdset; + %#define HAS_mbbodirectdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Word") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + special(SPC_RESET) + menu(menuOmsl) + interest(1) + pp(TRUE) + prompt("Output Mode Select") + } + field(NOBT, DBF_SHORT) { + promptgroup("50 - Output") + special(SPC_NOMOD) + interest(1) + prompt("Number of Bits") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(RVAL, DBF_ULONG) { + special(SPC_NOMOD) + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Raw Value") + } + field(RBV, DBF_ULONG) { + special(SPC_NOMOD) + prompt("Readback Value") + } + field(ORBV, DBF_ULONG) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Readback Value") + } + field(MASK, DBF_ULONG) { + special(SPC_NOMOD) + interest(1) + prompt("Hardware Mask") + } + field(MLST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } + field(SHFT, DBF_USHORT) { + promptgroup("50 - Output") + interest(1) + prompt("Shift") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Output Link") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID outpt action") + } + field(IVOV, DBF_LONG) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } + field(B0, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 0") + } + field(B1, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 1") + } + field(B2, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 2") + } + field(B3, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 3") + } + field(B4, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 4") + } + field(B5, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 5") + } + field(B6, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 6") + } + field(B7, DBF_UCHAR) { + promptgroup("51 - Output 0-7") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 7") + } + field(B8, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 8") + } + field(B9, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 9") + } + field(BA, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 10") + } + field(BB, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 11") + } + field(BC, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 12") + } + field(BD, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 13") + } + field(BE, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 14") + } + field(BF, DBF_UCHAR) { + promptgroup("52 - Output 8-15") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 15") + } + field(B10, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 16") + } + field(B11, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 17") + } + field(B12, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 18") + } + field(B13, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 19") + } + field(B14, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 20") + } + field(B15, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 21") + } + field(B16, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 22") + } + field(B17, DBF_UCHAR) { + promptgroup("53 - Output 16-23") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 23") + } + field(B18, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 24") + } + field(B19, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 25") + } + field(B1A, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 26") + } + field(B1B, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 27") + } + field(B1C, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 28") + } + field(B1D, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 29") + } + field(B1E, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 30") + } + field(B1F, DBF_UCHAR) { + promptgroup("54 - Output 24-31") + special(SPC_MOD) + interest(1) + pp(TRUE) + prompt("Bit 31") + } +} +device(mbboDirect, CONSTANT, devMbboDirectSoft, "Soft Channel") +device(mbboDirect, CONSTANT, devMbboDirectSoftRaw, "Raw Soft Channel") +device(mbboDirect, CONSTANT, devMbboDirectSoftCallback, "Async Soft Channel") +device(mbboDirect, INST_IO, asynMbboDirectUInt32Digital, "asynUInt32Digital") +recordtype(longout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct longoutRecord; + %typedef struct longoutdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*write_longout)(struct longoutRecord *prec); /*(-1,0)=>(failure,success*/ + %} longoutdset; + %#define HAS_longoutdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + promptgroup("50 - Output") + asl(ASL0) + pp(TRUE) + prompt("Desired Output") + } + field(OUT, DBF_OUTLINK) { + promptgroup("50 - Output") + interest(1) + prompt("Output Specification") + } + field(DOL, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Desired Output Loc") + } + field(OMSL, DBF_MENU) { + promptgroup("50 - Output") + menu(menuOmsl) + interest(1) + prompt("Output Mode Select") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(DRVH, DBF_LONG) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive High Limit") + } + field(DRVL, DBF_LONG) { + prop(YES) + promptgroup("30 - Action") + interest(1) + pp(TRUE) + prompt("Drive Low Limit") + } + field(HOPR, DBF_LONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_LONG) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_LONG) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_LONG) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_LONG) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_LONG) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(SIOL, DBF_OUTLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Output Specifctn") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Sim Mode Location") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Sim mode Alarm Svrty") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } + field(IVOA, DBF_MENU) { + promptgroup("50 - Output") + menu(menuIvoa) + interest(2) + prompt("INVALID output action") + } + field(IVOV, DBF_LONG) { + promptgroup("50 - Output") + interest(2) + prompt("INVALID output value") + } +} +device(longout, CONSTANT, devLoSoft, "Soft Channel") +device(longout, CONSTANT, devLoSoftCallback, "Async Soft Channel") +device(longout, INST_IO, asynLoInt32, "asynInt32") +device(longout, INST_IO, asynLoUInt32Digital, "asynUInt32Digital") +device(longout, INST_IO, asynLoInt64, "asynInt64") +recordtype(aSub) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %struct aSubRecord; + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_LONG) { + asl(ASL0) + prompt("Subr. return value") + } + field(OVAL, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Old return value") + } + field(INAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_NOMOD) + interest(1) + size(41) + prompt("Initialize Subr. Name") + } + field(LFLG, DBF_MENU) { + promptgroup("30 - Action") + menu(aSubLFLG) + interest(1) + prompt("Subr. Input Enable") + } + field(SUBL, DBF_INLINK) { + promptgroup("30 - Action") + special(SPC_NOMOD) + interest(1) + prompt("Subroutine Name Link") + } + field(SNAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_MOD) + interest(1) + size(41) + prompt("Process Subr. Name") + } + field(ONAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_NOMOD) + interest(3) + size(41) + prompt("Old Subr. Name") + } + field(SADR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("long (*sadr)(struct aSubRecord *)") + interest(2) + prompt("Subroutine Address") + } + field(CADR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void (*cadr)(struct aSubRecord *)") + interest(2) + prompt("Subroutine Cleanup Address") + } + field(BRSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Bad Return Severity") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(EFLG, DBF_MENU) { + promptgroup("50 - Output") + menu(aSubEFLG) + initial("1") + interest(1) + prompt("Output Event Flag") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link F") + } + field(INPG, DBF_INLINK) { + promptgroup("41 - Input A-G") + interest(1) + prompt("Input Link G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link L") + } + field(INPM, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link M") + } + field(INPN, DBF_INLINK) { + promptgroup("42 - Input H-N") + interest(1) + prompt("Input Link N") + } + field(INPO, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link O") + } + field(INPP, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link P") + } + field(INPQ, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link Q") + } + field(INPR, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link R") + } + field(INPS, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link S") + } + field(INPT, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link T") + } + field(INPU, DBF_INLINK) { + promptgroup("43 - Input O-U") + interest(1) + prompt("Input Link U") + } + field(A, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *a") + interest(2) + prompt("Input value A") + } + field(B, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *b") + interest(2) + prompt("Input value B") + } + field(C, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *c") + interest(2) + prompt("Input value C") + } + field(D, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *d") + interest(2) + prompt("Input value D") + } + field(E, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *e") + interest(2) + prompt("Input value E") + } + field(F, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *f") + interest(2) + prompt("Input value F") + } + field(G, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *g") + interest(2) + prompt("Input value G") + } + field(H, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *h") + interest(2) + prompt("Input value H") + } + field(I, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *i") + interest(2) + prompt("Input value I") + } + field(J, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *j") + interest(2) + prompt("Input value J") + } + field(K, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *k") + interest(2) + prompt("Input value K") + } + field(L, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *l") + interest(2) + prompt("Input value L") + } + field(M, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *m") + interest(2) + prompt("Input value M") + } + field(N, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *n") + interest(2) + prompt("Input value N") + } + field(O, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *o") + interest(2) + prompt("Input value O") + } + field(P, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *p") + interest(2) + prompt("Input value P") + } + field(Q, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *q") + interest(2) + prompt("Input value Q") + } + field(R, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *r") + interest(2) + prompt("Input value R") + } + field(S, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *s") + interest(2) + prompt("Input value S") + } + field(T, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *t") + interest(2) + prompt("Input value T") + } + field(U, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *u") + interest(2) + prompt("Input value U") + } + field(FTA, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of A") + } + field(FTB, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of B") + } + field(FTC, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of C") + } + field(FTD, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of D") + } + field(FTE, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of E") + } + field(FTF, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of F") + } + field(FTG, DBF_MENU) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of G") + } + field(FTH, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of H") + } + field(FTI, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of I") + } + field(FTJ, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of J") + } + field(FTK, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of K") + } + field(FTL, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of L") + } + field(FTM, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of M") + } + field(FTN, DBF_MENU) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of N") + } + field(FTO, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of O") + } + field(FTP, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of P") + } + field(FTQ, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of Q") + } + field(FTR, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of R") + } + field(FTS, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of S") + } + field(FTT, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of T") + } + field(FTU, DBF_MENU) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of U") + } + field(NOA, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in A") + } + field(NOB, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in B") + } + field(NOC, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in C") + } + field(NOD, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in D") + } + field(NOE, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in E") + } + field(NOF, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in F") + } + field(NOG, DBF_ULONG) { + promptgroup("41 - Input A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in G") + } + field(NOH, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in H") + } + field(NOI, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in I") + } + field(NOJ, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in J") + } + field(NOK, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in K") + } + field(NOL, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in L") + } + field(NOM, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in M") + } + field(NON, DBF_ULONG) { + promptgroup("42 - Input H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in N") + } + field(NOO, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in O") + } + field(NOP, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in P") + } + field(NOQ, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in Q") + } + field(NOR, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in R") + } + field(NOS, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in S") + } + field(NOT, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in T") + } + field(NOU, DBF_ULONG) { + promptgroup("43 - Input O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in U") + } + field(NEA, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in A") + } + field(NEB, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in B") + } + field(NEC, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in C") + } + field(NED, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in D") + } + field(NEE, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in E") + } + field(NEF, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in F") + } + field(NEG, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in G") + } + field(NEH, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in H") + } + field(NEI, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in I") + } + field(NEJ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in J") + } + field(NEK, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in K") + } + field(NEL, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in L") + } + field(NEM, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in M") + } + field(NEN, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in N") + } + field(NEO, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in O") + } + field(NEP, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in P") + } + field(NEQ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in Q") + } + field(NER, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in R") + } + field(NES, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in S") + } + field(NET, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in T") + } + field(NEU, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in U") + } + field(OUTA, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link A") + } + field(OUTB, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link B") + } + field(OUTC, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link C") + } + field(OUTD, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link D") + } + field(OUTE, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link E") + } + field(OUTF, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link F") + } + field(OUTG, DBF_OUTLINK) { + promptgroup("51 - Output A-G") + interest(1) + prompt("Output Link G") + } + field(OUTH, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link H") + } + field(OUTI, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link I") + } + field(OUTJ, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link J") + } + field(OUTK, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link K") + } + field(OUTL, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link L") + } + field(OUTM, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link M") + } + field(OUTN, DBF_OUTLINK) { + promptgroup("52 - Output H-N") + interest(1) + prompt("Output Link N") + } + field(OUTO, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link O") + } + field(OUTP, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link P") + } + field(OUTQ, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link Q") + } + field(OUTR, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link R") + } + field(OUTS, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link S") + } + field(OUTT, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link T") + } + field(OUTU, DBF_OUTLINK) { + promptgroup("53 - Output O-U") + interest(1) + prompt("Output Link U") + } + field(VALA, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vala") + interest(2) + prompt("Output value A") + } + field(VALB, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valb") + interest(2) + prompt("Output value B") + } + field(VALC, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valc") + interest(2) + prompt("Output value C") + } + field(VALD, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vald") + interest(2) + prompt("Output value D") + } + field(VALE, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vale") + interest(2) + prompt("Output value E") + } + field(VALF, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valf") + interest(2) + prompt("Output value F") + } + field(VALG, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valg") + interest(2) + prompt("Output value G") + } + field(VALH, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valh") + interest(2) + prompt("Output value H") + } + field(VALI, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vali") + interest(2) + prompt("Output value I") + } + field(VALJ, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valj") + interest(2) + prompt("Output value J") + } + field(VALK, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valk") + interest(2) + prompt("Output value K") + } + field(VALL, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vall") + interest(2) + prompt("Output value L") + } + field(VALM, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valm") + interest(2) + prompt("Output value M") + } + field(VALN, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valn") + interest(2) + prompt("Output value N") + } + field(VALO, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valo") + interest(2) + prompt("Output value O") + } + field(VALP, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valp") + interest(2) + prompt("Output value P") + } + field(VALQ, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valq") + interest(2) + prompt("Output value Q") + } + field(VALR, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valr") + interest(2) + prompt("Output value R") + } + field(VALS, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *vals") + interest(2) + prompt("Output value S") + } + field(VALT, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valt") + interest(2) + prompt("Output value T") + } + field(VALU, DBF_NOACCESS) { + special(SPC_DBADDR) + asl(ASL0) + extra("void *valu") + interest(2) + prompt("Output value U") + } + field(OVLA, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovla") + interest(4) + prompt("Old Output A") + } + field(OVLB, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlb") + interest(4) + prompt("Old Output B") + } + field(OVLC, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlc") + interest(4) + prompt("Old Output C") + } + field(OVLD, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovld") + interest(4) + prompt("Old Output D") + } + field(OVLE, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovle") + interest(4) + prompt("Old Output E") + } + field(OVLF, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlf") + interest(4) + prompt("Old Output F") + } + field(OVLG, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlg") + interest(4) + prompt("Old Output G") + } + field(OVLH, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlh") + interest(4) + prompt("Old Output H") + } + field(OVLI, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovli") + interest(4) + prompt("Old Output I") + } + field(OVLJ, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlj") + interest(4) + prompt("Old Output J") + } + field(OVLK, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlk") + interest(4) + prompt("Old Output K") + } + field(OVLL, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovll") + interest(4) + prompt("Old Output L") + } + field(OVLM, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlm") + interest(4) + prompt("Old Output M") + } + field(OVLN, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovln") + interest(4) + prompt("Old Output N") + } + field(OVLO, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlo") + interest(4) + prompt("Old Output O") + } + field(OVLP, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlp") + interest(4) + prompt("Old Output P") + } + field(OVLQ, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlq") + interest(4) + prompt("Old Output Q") + } + field(OVLR, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlr") + interest(4) + prompt("Old Output R") + } + field(OVLS, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovls") + interest(4) + prompt("Old Output S") + } + field(OVLT, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlt") + interest(4) + prompt("Old Output T") + } + field(OVLU, DBF_NOACCESS) { + special(SPC_NOMOD) + asl(ASL0) + extra("void *ovlu") + interest(4) + prompt("Old Output U") + } + field(FTVA, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALA") + } + field(FTVB, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALB") + } + field(FTVC, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALC") + } + field(FTVD, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALD") + } + field(FTVE, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALE") + } + field(FTVF, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALF") + } + field(FTVG, DBF_MENU) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALG") + } + field(FTVH, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALH") + } + field(FTVI, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALI") + } + field(FTVJ, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALJ") + } + field(FTVK, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALK") + } + field(FTVL, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALL") + } + field(FTVM, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALM") + } + field(FTVN, DBF_MENU) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALN") + } + field(FTVO, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALO") + } + field(FTVP, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALP") + } + field(FTVQ, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALQ") + } + field(FTVR, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALR") + } + field(FTVS, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALS") + } + field(FTVT, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALT") + } + field(FTVU, DBF_MENU) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + menu(menuFtype) + initial("DOUBLE") + interest(1) + prompt("Type of VALU") + } + field(NOVA, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALA") + } + field(NOVB, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALB") + } + field(NOVC, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALC") + } + field(NOVD, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALD") + } + field(NOVE, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALE") + } + field(NOVF, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALF") + } + field(NOVG, DBF_ULONG) { + promptgroup("51 - Output A-G") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALG") + } + field(NOVH, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VAlH") + } + field(NOVI, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALI") + } + field(NOVJ, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALJ") + } + field(NOVK, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALK") + } + field(NOVL, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALL") + } + field(NOVM, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALM") + } + field(NOVN, DBF_ULONG) { + promptgroup("52 - Output H-N") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALN") + } + field(NOVO, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALO") + } + field(NOVP, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALP") + } + field(NOVQ, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALQ") + } + field(NOVR, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALR") + } + field(NOVS, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALS") + } + field(NOVT, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALT") + } + field(NOVU, DBF_ULONG) { + promptgroup("53 - Output O-U") + special(SPC_NOMOD) + initial("1") + interest(1) + prompt("Max. elements in VALU") + } + field(NEVA, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALA") + } + field(NEVB, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALB") + } + field(NEVC, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALC") + } + field(NEVD, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALD") + } + field(NEVE, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALE") + } + field(NEVF, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALF") + } + field(NEVG, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALG") + } + field(NEVH, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VAlH") + } + field(NEVI, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALI") + } + field(NEVJ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALJ") + } + field(NEVK, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALK") + } + field(NEVL, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALL") + } + field(NEVM, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALM") + } + field(NEVN, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALN") + } + field(NEVO, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALO") + } + field(NEVP, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALP") + } + field(NEVQ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALQ") + } + field(NEVR, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALR") + } + field(NEVS, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALS") + } + field(NEVT, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALT") + } + field(NEVU, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(3) + prompt("Num. elements in VALU") + } + field(ONVA, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLA") + } + field(ONVB, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLB") + } + field(ONVC, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLC") + } + field(ONVD, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLD") + } + field(ONVE, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLE") + } + field(ONVF, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLF") + } + field(ONVG, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLG") + } + field(ONVH, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in VAlH") + } + field(ONVI, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLI") + } + field(ONVJ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLJ") + } + field(ONVK, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLK") + } + field(ONVL, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLL") + } + field(ONVM, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLM") + } + field(ONVN, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLN") + } + field(ONVO, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLO") + } + field(ONVP, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLP") + } + field(ONVQ, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLQ") + } + field(ONVR, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLR") + } + field(ONVS, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLS") + } + field(ONVT, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLT") + } + field(ONVU, DBF_ULONG) { + special(SPC_NOMOD) + initial("1") + interest(4) + prompt("Num. elements in OVLU") + } +} +recordtype(sub) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %struct subRecord; + %typedef long (*SUBFUNCPTR)(struct subRecord *); + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + asl(ASL0) + pp(TRUE) + prompt("Result") + } + field(INAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_NOMOD) + interest(1) + size(40) + prompt("Init Routine Name") + } + field(SNAM, DBF_STRING) { + promptgroup("30 - Action") + special(SPC_MOD) + interest(1) + size(40) + prompt("Subroutine Name") + } + field(SADR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("SUBFUNCPTR sadr") + interest(4) + prompt("Subroutine Address") + } + field(INPA, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input A") + } + field(INPB, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input B") + } + field(INPC, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input C") + } + field(INPD, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input D") + } + field(INPE, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input E") + } + field(INPF, DBF_INLINK) { + promptgroup("41 - Input A-F") + interest(1) + prompt("Input F") + } + field(INPG, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input G") + } + field(INPH, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input H") + } + field(INPI, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input I") + } + field(INPJ, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input J") + } + field(INPK, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input K") + } + field(INPL, DBF_INLINK) { + promptgroup("42 - Input G-L") + interest(1) + prompt("Input L") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(BRSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Bad Return Severity") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(A, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input A") + } + field(B, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input B") + } + field(C, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input C") + } + field(D, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input D") + } + field(E, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input E") + } + field(F, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input F") + } + field(G, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input G") + } + field(H, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input H") + } + field(I, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input I") + } + field(J, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input J") + } + field(K, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input K") + } + field(L, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input L") + } + field(LA, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of A") + } + field(LB, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of B") + } + field(LC, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of C") + } + field(LD, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of D") + } + field(LE, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of E") + } + field(LF, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of F") + } + field(LG, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of G") + } + field(LH, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of H") + } + field(LI, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of I") + } + field(LJ, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of J") + } + field(LK, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of K") + } + field(LL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Prev Value of L") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Monitored") + } +} +recordtype(int64in) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct int64inRecord; + %typedef struct int64indset { + % dset common; + % long (*read_int64in)(struct int64inRecord *prec); + %} int64indset; + %#define HAS_int64indset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_INT64) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Units name") + } + field(HOPR, DBF_INT64) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_INT64) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(HIHI, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_INT64) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_INT64) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(ADEL, DBF_INT64) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_INT64) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(ALST, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_INT64) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_INT64) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(int64in, CONSTANT, devI64inSoft, "Soft Channel") +device(int64in, CONSTANT, devI64inSoftCallback, "Async Soft Channel") +device(int64in, INST_IO, asynInt64In, "asynInt64") +recordtype(ai) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct aiRecord; + %typedef struct aidset { + % dset common; + % long (*read_ai)(struct aiRecord *prec); + % long (*special_linconv)(struct aiRecord *prec, int after); + %} aidset; + %#define HAS_aidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_DOUBLE) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + prompt("Current EGU Value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(PREC, DBF_SHORT) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Display Precision") + } + field(LINR, DBF_MENU) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + menu(menuConvert) + interest(1) + pp(TRUE) + prompt("Linearization") + } + field(EGUF, DBF_DOUBLE) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + interest(1) + pp(TRUE) + prompt("Engineer Units Full") + } + field(EGUL, DBF_DOUBLE) { + promptgroup("60 - Convert") + special(SPC_LINCONV) + interest(1) + pp(TRUE) + prompt("Engineer Units Low") + } + field(EGU, DBF_STRING) { + prop(YES) + promptgroup("80 - Display") + interest(1) + size(16) + prompt("Engineering Units") + } + field(HOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("High Operating Range") + } + field(LOPR, DBF_DOUBLE) { + prop(YES) + promptgroup("80 - Display") + interest(1) + prompt("Low Operating Range") + } + field(AOFF, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(1) + pp(TRUE) + prompt("Adjustment Offset") + } + field(ASLO, DBF_DOUBLE) { + promptgroup("60 - Convert") + initial("1") + interest(1) + pp(TRUE) + prompt("Adjustment Slope") + } + field(SMOO, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(1) + prompt("Smoothing") + } + field(HIHI, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Hihi Alarm Limit") + } + field(LOLO, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Lolo Alarm Limit") + } + field(HIGH, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("High Alarm Limit") + } + field(LOW, DBF_DOUBLE) { + prop(YES) + promptgroup("70 - Alarm") + interest(1) + pp(TRUE) + prompt("Low Alarm Limit") + } + field(HHSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Hihi Severity") + } + field(LLSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Lolo Severity") + } + field(HSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("High Severity") + } + field(LSV, DBF_MENU) { + prop(YES) + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + pp(TRUE) + prompt("Low Severity") + } + field(HYST, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Deadband") + } + field(AFTC, DBF_DOUBLE) { + promptgroup("70 - Alarm") + interest(1) + prompt("Alarm Filter Time Constant") + } + field(ADEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Archive Deadband") + } + field(MDEL, DBF_DOUBLE) { + promptgroup("80 - Display") + interest(1) + prompt("Monitor Deadband") + } + field(LALM, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Alarmed") + } + field(AFVL, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Alarm Filter Value") + } + field(ALST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Value Archived") + } + field(MLST, DBF_DOUBLE) { + special(SPC_NOMOD) + interest(3) + prompt("Last Val Monitored") + } + field(ESLO, DBF_DOUBLE) { + promptgroup("60 - Convert") + initial("1") + interest(2) + pp(TRUE) + prompt("Raw to EGU Slope") + } + field(EOFF, DBF_DOUBLE) { + promptgroup("60 - Convert") + interest(2) + pp(TRUE) + prompt("Raw to EGU Offset") + } + field(ROFF, DBF_ULONG) { + interest(2) + pp(TRUE) + prompt("Raw Offset") + } + field(PBRK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void * pbrk") + interest(4) + prompt("Ptrto brkTable") + } + field(INIT, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("Initialized?") + } + field(LBRK, DBF_SHORT) { + special(SPC_NOMOD) + interest(3) + prompt("LastBreak Point") + } + field(RVAL, DBF_LONG) { + pp(TRUE) + prompt("Current Raw Value") + } + field(ORAW, DBF_LONG) { + special(SPC_NOMOD) + interest(3) + prompt("Previous Raw Value") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_DOUBLE) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuSimm) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(ai, CONSTANT, devAiSoft, "Soft Channel") +device(ai, CONSTANT, devAiSoftRaw, "Raw Soft Channel") +device(ai, CONSTANT, devAiSoftCallback, "Async Soft Channel") +device(ai, INST_IO, devTimestampAI, "Soft Timestamp") +device(ai, INST_IO, devAiGeneralTime, "General Time") +device(ai, INST_IO, devAiStats, "IOC stats") +device(ai, INST_IO, devAiClusts, "IOC stats clusts") +device(ai, CONSTANT, devAiDBCLC, "DBCLC") +device(ai, CONSTANT, devAiDBDLC, "DBDLC") +device(ai, INST_IO, devSysMonAiStats, "sysmon") +device(ai, INST_IO, asynAiInt32, "asynInt32") +device(ai, INST_IO, asynAiInt32Average, "asynInt32Average") +device(ai, INST_IO, asynAiFloat64, "asynFloat64") +device(ai, INST_IO, asynAiFloat64Average, "asynFloat64Average") +device(ai, INST_IO, asynAiInt64, "asynInt64") +recordtype(stringin) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct stringinRecord; + %typedef struct stringindset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_stringin)(struct stringinRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} stringindset; + %#define HAS_stringindset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + special(SPC_NOMOD) + size(61) + prompt("Record Name") + } + field(DESC, DBF_STRING) { + promptgroup("10 - Common") + size(41) + prompt("Descriptor") + } + field(ASG, DBF_STRING) { + promptgroup("10 - Common") + special(SPC_AS) + size(29) + prompt("Access Security Group") + } + field(SCAN, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuScan) + interest(1) + prompt("Scan Mechanism") + } + field(PINI, DBF_MENU) { + promptgroup("20 - Scan") + menu(menuPini) + interest(1) + prompt("Process at iocInit") + } + field(PHAS, DBF_SHORT) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + prompt("Scan Phase") + } + field(EVNT, DBF_STRING) { + promptgroup("20 - Scan") + special(SPC_SCAN) + interest(1) + size(40) + prompt("Event Name") + } + field(TSE, DBF_SHORT) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Event") + } + field(TSEL, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Time Stamp Link") + } + field(DTYP, DBF_DEVICE) { + promptgroup("10 - Common") + interest(1) + prompt("Device Type") + } + field(DISV, DBF_SHORT) { + promptgroup("20 - Scan") + initial("1") + prompt("Disable Value") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Scanning Disable") + } + field(MLOK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsMutexId mlok") + interest(4) + prompt("Monitor lock") + } + field(MLIS, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST mlis") + interest(4) + prompt("Monitor List") + } + field(BKLNK, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("ELLLIST bklnk") + interest(4) + prompt("Backwards link tracking") + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + } + field(PROC, DBF_UCHAR) { + interest(3) + pp(TRUE) + prompt("Force Processing") + } + field(STAT, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + initial("UDF") + prompt("Alarm Status") + } + field(SEVR, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + prompt("Alarm Severity") + } + field(NSTA, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmStat) + interest(2) + prompt("New Alarm Status") + } + field(NSEV, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("New Alarm Severity") + } + field(ACKS, DBF_MENU) { + special(SPC_NOMOD) + menu(menuAlarmSevr) + interest(2) + prompt("Alarm Ack Severity") + } + field(ACKT, DBF_MENU) { + promptgroup("70 - Alarm") + special(SPC_NOMOD) + menu(menuYesNo) + initial("YES") + interest(2) + prompt("Alarm Ack Transient") + } + field(DISS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + interest(1) + prompt("Disable Alarm Sevrty") + } + field(LCNT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(2) + prompt("Lock Count") + } + field(PACT, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Record active") + } + field(PUTF, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("dbPutField process") + } + field(RPRO, DBF_UCHAR) { + special(SPC_NOMOD) + interest(1) + prompt("Reprocess ") + } + field(ASP, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct asgMember *asp") + interest(4) + prompt("Access Security Pvt") + } + field(PPN, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotify *ppn") + interest(4) + prompt("pprocessNotify") + } + field(PPNR, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct processNotifyRecord *ppnr") + interest(4) + prompt("pprocessNotifyRecord") + } + field(SPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct scan_element *spvt") + interest(4) + prompt("Scan Private") + } + field(RSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct typed_rset *rset") + interest(4) + prompt("Address of RSET") + } + field(DSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("unambiguous_dset *dset") + interest(4) + prompt("DSET address") + } + field(DPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("void *dpvt") + interest(4) + prompt("Device Private") + } + field(RDES, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct dbRecordType *rdes") + interest(4) + prompt("Address of dbRecordType") + } + field(LSET, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("struct lockRecord *lset") + interest(4) + prompt("Lock Set") + } + field(PRIO, DBF_MENU) { + promptgroup("20 - Scan") + special(SPC_SCAN) + menu(menuPriority) + interest(1) + prompt("Scheduling Priority") + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsUInt8 bkpt") + interest(1) + prompt("Break Point") + } + field(UDF, DBF_UCHAR) { + promptgroup("10 - Common") + initial("1") + interest(1) + pp(TRUE) + prompt("Undefined") + } + field(UDFS, DBF_MENU) { + promptgroup("70 - Alarm") + menu(menuAlarmSevr) + initial("INVALID") + interest(1) + prompt("Undefined Alarm Sevrty") + } + field(TIME, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsTimeStamp time") + interest(2) + prompt("Time") + } + field(FLNK, DBF_FWDLINK) { + promptgroup("20 - Scan") + interest(1) + prompt("Forward Process Link") + } + field(VAL, DBF_STRING) { + promptgroup("40 - Input") + asl(ASL0) + pp(TRUE) + size(40) + prompt("Current Value") + } + field(OVAL, DBF_STRING) { + special(SPC_NOMOD) + interest(3) + size(40) + prompt("Previous Value") + } + field(INP, DBF_INLINK) { + promptgroup("40 - Input") + interest(1) + prompt("Input Specification") + } + field(MPST, DBF_MENU) { + promptgroup("80 - Display") + menu(stringinPOST) + interest(1) + prompt("Post Value Monitors") + } + field(APST, DBF_MENU) { + promptgroup("80 - Display") + menu(stringinPOST) + interest(1) + prompt("Post Archive Monitors") + } + field(SIOL, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Input Link") + } + field(SVAL, DBF_STRING) { + pp(TRUE) + size(40) + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + promptgroup("90 - Simulate") + interest(1) + prompt("Simulation Mode Link") + } + field(SIMM, DBF_MENU) { + special(SPC_MOD) + menu(menuYesNo) + interest(1) + prompt("Simulation Mode") + } + field(SIMS, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuAlarmSevr) + interest(2) + prompt("Simulation Mode Severity") + } + field(OLDSIMM, DBF_MENU) { + special(SPC_NOMOD) + menu(menuSimm) + interest(4) + prompt("Prev. Simulation Mode") + } + field(SSCN, DBF_MENU) { + promptgroup("90 - Simulate") + menu(menuScan) + initial("65535") + interest(1) + prompt("Sim. Mode Scan") + } + field(SDLY, DBF_DOUBLE) { + promptgroup("90 - Simulate") + initial("-1.0") + interest(2) + prompt("Sim. Mode Async Delay") + } + field(SIMPVT, DBF_NOACCESS) { + special(SPC_NOMOD) + extra("epicsCallback *simpvt") + interest(4) + prompt("Sim. Mode Private") + } +} +device(stringin, CONSTANT, devSiSoft, "Soft Channel") +device(stringin, CONSTANT, devSiSoftCallback, "Async Soft Channel") +device(stringin, INST_IO, devTimestampSI, "Soft Timestamp") +device(stringin, INST_IO, devSiGeneralTime, "General Time") +device(stringin, INST_IO, devSiEnviron, "getenv") +device(stringin, INST_IO, devStringinStats, "IOC stats") +device(stringin, INST_IO, devStringinEnvVar, "IOC env var") +device(stringin, INST_IO, devStringinEpics, "IOC epics var") +device(stringin, INST_IO, devSysMonSiStats, "sysmon") +device(stringin, INST_IO, asynSiOctetCmdResponse, "asynOctetCmdResponse") +device(stringin, INST_IO, asynSiOctetWriteRead, "asynOctetWriteRead") +device(stringin, INST_IO, asynSiOctetRead, "asynOctetRead") +driver(drvAsyn) +link(state, lnkStateIf) +link(calc, lnkCalcIf) +link(trace, lnkTraceIf) +link(debug, lnkDebugIf) +link(const, lnkConstIf) +registrar(drvAsynSerialPortRegisterCommands) +registrar(drvCodacHeaderRegister) +registrar(tsInitialize) +registrar(syncInitialize) +registrar(dbrestoreRegister) +registrar(iocSetLogLevelRegister) +registrar(save_restoreRegister) +registrar(asynRegister) +registrar(decInitialize) +registrar(iocSetSimEnableRegister) +registrar(drvCodacRedundantPlcRegister) +registrar(asynInterposeFlushRegister) +registrar(drvAsynIPPortRegisterCommands) +registrar(drvBlockTCPRegister) +registrar(asynInterposeEchoRegister) +registrar(arrInitialize) +registrar(asInitHooksRegister) +registrar(drvBlockTCPEventRegister) +registrar(asynInterposeDelayRegister) +registrar(dbndInitialize) +registrar(drvBlockTCPRedundantPlcRegister) +registrar(iocSetLogSyslogRegister) +registrar(drvAsynIPServerPortRegisterCommands) +registrar(configMenuRegistrar) +registrar(asSub) +registrar(iocSetLogStdoutRegister) +registrar(asynInterposeEosRegister) +registrar(rsrvRegistrar) +registrar(iocSetLogInitRegister) +function(scanMon) +function(rebootProc) +function(scanMonInit) +variable(dbTemplateMaxVars, int) +variable(lnkDebug_debug, int) +variable(asCaDebug, int) +variable(callbackParallelThreadsDefault, int) +variable(save_restoreRemountThreshold, int) +variable(dbAccessDebugPUTF, int) +variable(dbRecordsOnceOnly, int) +variable(save_restoreDebug, int) +variable(save_restoreDatedBackupFiles, int) +variable(calcoutODLYlimit, double) +variable(configMenuDebug, int) +variable(save_restoreIncompleteSetsOk, int) +variable(dbBptNotMonotonic, int) +variable(atExitDebug, int) +variable(boHIGHlimit, double) +variable(dbJLinkDebug, int) +variable(dbConvertStrict, int) +variable(seqDLYprecision, int) +variable(logClientDebug, int) +variable(dbQuietMacroWarnings, int) +variable(save_restoreNumSeqFiles, int) +variable(boHIGHprecision, int) +variable(dbRecordsAbcSorted, int) +variable(seqDLYlimit, double) +variable(calcoutODLYprecision, int) +variable(histogramSDELprecision, int) +variable(dbThreadRealtimeLock, int) +variable(CASDEBUG, int) +variable(save_restoreSeqPeriodInSeconds, int) diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/Makefile b/EC-GN-JA-PCF/target/main/epics/iocBoot/Makefile new file mode 100644 index 0000000..91e47d0 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/Makefile @@ -0,0 +1,6 @@ +TOP = .. +include $(TOP)/configure/CONFIG +DIRS += $(wildcard *ioc*) +DIRS += $(wildcard as*) +include $(CONFIG)/RULES_DIRS + diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/Makefile b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/Makefile new file mode 100644 index 0000000..79c4ce6 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/Makefile @@ -0,0 +1,5 @@ +TOP = ../.. +include $(TOP)/configure/CONFIG +ARCH = linux-x86_64 +TARGETS = envPaths +include $(TOP)/configure/RULES.ioc diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/dbToLoad.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/dbToLoad.cmd new file mode 100755 index 0000000..e012c40 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/dbToLoad.cmd @@ -0,0 +1,17 @@ + +#====================================================================== +# SYS Monitor +#====================================================================== +cd $(EPICS_ROOT)/db +#dbLoadRecords("picmg-sensors.db","CBS=EC-GN-SYSM, CTRLTYPE=F, IDX=0, PP=01, PPPP=52RF, NNNN=4210, TTT=PCF") +#dbLoadRecords("sysmon.db","CBS=EC-GN-SYSM, CTRLTYPE=F, IDX=0, PP=01, PPPP=52RF, NNNN=4210, TTT=PCF") + + +#====================================================================== +# IOC Monitor +#====================================================================== +cd $(EPICS_ROOT)/db +dbLoadRecords("iocmon.db","CBS=EC-GN-SYSM, CTRLTYPE=F, IDX=0, IOCTYPE=SYSM, PP=01, PPPP=52RF, NNNN=4210, TTT=PCF") + + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/envPaths b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/envPaths new file mode 100644 index 0000000..0202169 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/envPaths @@ -0,0 +1,3 @@ +epicsEnvSet("IOC","iocEC-GN-PCF0SYSM") +epicsEnvSet("TOP","/mnt/ITER/ferrog/MARTe2Project/GIT/ec-gn-ja-pcf/EC-GN-JA-PCF/target/main/epics") +epicsEnvSet("EPICS_BASE","/opt/codac-6.3/epics") diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/envSystem b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/envSystem new file mode 100755 index 0000000..347e683 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/envSystem @@ -0,0 +1,8 @@ +############################################################################ +## CODAC specific environment variables +############################################################################ + +epicsEnvSet("AUTOSAVE_SYSM_PV_PREFIX","EC-GN-SYSM:PCF0SYSM-") +epicsEnvSet("IOCSH_PS1","${IOC}> ") +epicsEnvSet("STREAM_PROTOCOL_PATH","$(TOP)/db:$(EPICS_ROOT)/db") + diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/envUser b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/envUser new file mode 100644 index 0000000..90ddfc7 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/envUser @@ -0,0 +1,9 @@ +############################################################################ +## User provided environment variables +############################################################################ + +#epicsEnvSet("EPICS_CA_SERVER_PORT", "5064") +#epicsEnvSet("EPICS_CA_ADDR_LIST", "") +#epicsEnvSet("EPICS_CA_AUTO_ADDR_LIST", "YES") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/iocEC-GN-PCF0SYSM-postSaveRestore.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/iocEC-GN-PCF0SYSM-postSaveRestore.cmd new file mode 100755 index 0000000..864013e --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/iocEC-GN-PCF0SYSM-postSaveRestore.cmd @@ -0,0 +1,8 @@ +############################################################################ +## Autosave monitor post setup +############################################################################ + +cd "${TOP}/iocBoot/$(IOC)" +create_monitor_set(".req",30,"P=$(AUTOSAVE_SYSM_PV_PREFIX)") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/iocEC-GN-PCF0SYSM-preSaveRestore.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/iocEC-GN-PCF0SYSM-preSaveRestore.cmd new file mode 100755 index 0000000..114fba6 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/iocEC-GN-PCF0SYSM-preSaveRestore.cmd @@ -0,0 +1,42 @@ +############################################################################ +## Save and restore +############################################################################ + +### save_restore setup +# status-PV prefix +save_restoreSet_status_prefix("$(AUTOSAVE_SYSM_PV_PREFIX)") + +# Use status-PV +save_restoreSet_UseStatusPVs(1) + +# Debug-output level +save_restoreSet_Debug(0) + +# Ok to save/restore save sets with missing values (no CA connection to PV)? +save_restoreSet_IncompleteSetsOk(1) +# Save dated backup files? +save_restoreSet_DatedBackupFiles(1) + +# Number of sequenced backup files to write +save_restoreSet_NumSeqFiles(3) +# Time interval between sequenced backups +save_restoreSet_SeqPeriodInSeconds(300) + +# specify where save files should be +set_savefile_path("$(EPICS_AUTOSAVE_VAR)/$(UNIT_NAME)") + +# specify what save files should be restored. Note these files must be +# in the directory specified in set_savefile_path(), or, if that function +# has not been called, from the directory current when iocInit is invoked + +# Save files associated with the request files 'auto-output.req' and +# 'auto-input.req'. These files are the standard way to use autosave + +set_pass1_restoreFile(".sav") + +# specify directories in which to to search for included request files +set_requestfile_path("./") + +dbLoadRecords("$(EPICS_ROOT)/db/save_restoreStatus.db", "P=$(AUTOSAVE_SYSM_PV_PREFIX)") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/iocEC-GN-PCF0SYSM.req b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/iocEC-GN-PCF0SYSM.req new file mode 100755 index 0000000..e69de29 diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/sddPostDriverConf.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/sddPostDriverConf.cmd new file mode 100644 index 0000000..d223981 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/sddPostDriverConf.cmd @@ -0,0 +1,6 @@ +############################################################################ +## SDD provided PLC or fast controller driver post configuration +############################################################################ + + +#- End-of-file marker - do not delete or add lines below! \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/sddPreDriverConf.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/sddPreDriverConf.cmd new file mode 100644 index 0000000..770f841 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/sddPreDriverConf.cmd @@ -0,0 +1,86 @@ +#====================================================================== +# PLC(s) driver configuration commands +#====================================================================== +# level=-1: no output +# level=0: errors only +# level=1: startup messages +# level=2: + output record processing +# level=3: + input record processing +# level=4: + driver calls +# level=5: + io printout +# be careful using level>1 since many messages may introduce delays + +# var s7plcDebug 2 + +# s7plcConfigure name,IPaddr,port,inSize,outSize,bigEndian,recvTimeout,sendIntervall, configversion +# connects to PLC on address port +# : size of data block PLC -> IOC [bytes] +# : size of data block IOC -> PLC [bytes] +# =1 : motorola format data (MSB first) +# =0 : intel format data (LSB first) +# : receive buffer interval [ms] (Default : 50ms) +# : time to wait before sending new data to PLC [ms] +# : database configuration version + +# s7plcConfigureCmd name,IPaddr,port,outSize,bigEndian,sendIntervall +# connects to PLC on address port +# : size of data block IOC -> PLC [bytes] +# =1 : motorola format data (MSB first) +# =0 : intel format data (LSB first) +# : time to wait before sending new data to PLC [ms] + + + +#============================================================================ +# s7plc asyn driver configuration commands +#============================================================================ + +#============================================================================ +# NI-6259 DAQ I/O Module driver configuration commands +#============================================================================ +# Reference: ITER_D_3DEY52 v1.3 - NI PXI-6259 EPICS Driver User’s Guide + +# For analogue input, analogue output, waveform, initialize using below function +# pxi6259_ai_init(uint8 cardnumber, uint32 range, uint32 clk_source, uint32 clk_edge); +# Example: pxi6259_ai_init(0, 1, 0, 0) + +# For binary input, binary output, multi-bit binary input, multi bit binary output, initialize using below function +# pxi6259init(uint8 cardnumber, uint32 portmask0, uint8 portmask1, uint8 portmask2); +# Example: pxi6259_bio_init(0, 0xFF000000, 0xFF, 0xFF) + + +#============================================================================ +# NI-6682 Timing and Synchronization I/O Module driver configuration commands +#============================================================================ +# Reference ITER_D_33Q5TX v1.7 - NI Sync EPICS Driver User’s Guide + +# nisyncDrvInit(string port, char* type, int cardNumber); +# Example: nisyncDrvInit("S0", "PXI-6682", "0"); +# Example: nisyncDrvInit("S0", "PXI-6683H", "0"); +# nisyncTimeInit(int cardID, char* type, int cardNumber); +# Example: nisyncTimeInit("0", "PXI-6682", "0") +# Example: nisyncTimeInit("0", "PXI-6683H", "0") + + +#============================================================================================ +# NI-6368 X Series - Multifunction Data Acquisition I/O Module driver configuration commands +#============================================================================================ +# Reference ITER_D_3P4N3R v1.2 - NI X Series EPICS Driver User’s Guide + +# nixseriesInit(char *portName, char *nix6368Card); +# Example: nixseriesInit("ni6368_0", "/dev/ni6368.0"); + + +#============================================================================ +# NI-6528 DAQ I/O Module driver configuration commands +#============================================================================ +# Reference ITER_D_433VEW - NI PXI-6528 EPICS Driver User's Manual +# ni6528_init(char *portName, char *ni6528Card); +# Example: pxi6528_init("ni6528_0", "/dev/ni6528.0") +# asynSetTraceMask("",0,255) +# Example: asynSetTraceMask("pxi6528_0",0,255) +# pxi6528_reset(char *portName) +# Example: pxi6528_reset("pxi6528_0") + + +#- End-of-file marker - do not delete or add lines below! \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/sddSeqToLoad.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/sddSeqToLoad.cmd new file mode 100644 index 0000000..a23d75a --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/sddSeqToLoad.cmd @@ -0,0 +1,6 @@ +############################################################################ +## SDD provided sequence programs to load +############################################################################ + + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/seqToLoad.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/seqToLoad.cmd new file mode 100644 index 0000000..30e4bde --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/seqToLoad.cmd @@ -0,0 +1,8 @@ +############################################################################ +## Sequence programs to load +############################################################################ + +## Start any sequence programs +#seq sncxxx,"user=codac-devHost" + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/st.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/st.cmd new file mode 100755 index 0000000..420177c --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/st.cmd @@ -0,0 +1,67 @@ +#!../../bin/linux-x86_64/EC-GN +#+====================================================================== +# $HeadURL: https://svnpub.codac.iter.org/codac/iter/codac/dev/units/m-epics-iter-templates/branches/codac-core-6.1/templates/genericBoot/ioc/st.cmd $ +# $Id: st.cmd 96475 2019-01-09 13:47:38Z sivecm $ +# +# Project : CODAC Core System +# +# Description : ITER ioc template EPICS start up file +# +# Author(s) : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2019 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== + +< envPaths +< envSystem +< envUser + +cd "${TOP}" + +############################################################################ +## Register all support components +############################################################################ + +dbLoadDatabase "dbd/EC-GN.dbd" +EC_GN_registerRecordDeviceDriver pdbbase + +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/sddPreDriverConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/userPreDriverConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/threadSchedulingConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/dbToLoad.cmd" +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/iocEC-GN-PCF0SYSM-preSaveRestore.cmd" + +############################################################################ +## IOC Logging +############################################################################ +iocLogInit +iocLogPrefix "${STY} : " + +############################################################################ +## IOC initialization +############################################################################ +cd "${TOP}/db" +iocInit + +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/iocEC-GN-PCF0SYSM-postSaveRestore.cmd" +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/sddSeqToLoad.cmd" +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/seqToLoad.cmd" +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/sddPostDriverConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PCF0SYSM/userPostDriverConf.cmd" + + +dbl > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbl" +dbla > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbla" +dbior > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbior" +dbhcr > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbhcr" + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/threadSchedulingConf.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/threadSchedulingConf.cmd new file mode 100644 index 0000000..29d9b00 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/threadSchedulingConf.cmd @@ -0,0 +1,6 @@ +############################################################################ +## Thread scheduling configuration for real-time tuning +############################################################################ + + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/userPostDriverConf.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/userPostDriverConf.cmd new file mode 100644 index 0000000..8786feb --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/userPostDriverConf.cmd @@ -0,0 +1,6 @@ +############################################################################ +## User provided PLC or fast controller driver post configuration +############################################################################ + + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/userPreDriverConf.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/userPreDriverConf.cmd new file mode 100644 index 0000000..6c9a40e --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PCF0SYSM/userPreDriverConf.cmd @@ -0,0 +1,12 @@ +############################################################################ +## User provided PLC or fast controller driver pre configuration +############################################################################ + +# Enable parallel callback threads to improve 'I/O Intr' record scanning +# see https://bugzilla.iter.org/codac/show_bug.cgi?id=10413 +callbackParallelThreads + +callbackSetQueueSize(100000) +scanOnceSetQueueSize(100000) + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/Makefile b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/Makefile new file mode 100644 index 0000000..79c4ce6 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/Makefile @@ -0,0 +1,5 @@ +TOP = ../.. +include $(TOP)/configure/CONFIG +ARCH = linux-x86_64 +TARGETS = envPaths +include $(TOP)/configure/RULES.ioc diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/dbToLoad.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/dbToLoad.cmd new file mode 100755 index 0000000..ef13828 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/dbToLoad.cmd @@ -0,0 +1,25 @@ +#====================================================================== +# Loading DBs +#====================================================================== +cd $(TOP)/db + + +#====================================================================== +# Loading Substitution Files +#====================================================================== +cd $(TOP)/iocBoot/$(IOC) + + +#====================================================================== +# PLC Communication Monitoring PVs DB Loading +#====================================================================== +cd $(EPICS_ROOT)/db + + +#====================================================================== +# IOC Monitor +#====================================================================== +cd $(EPICS_ROOT)/db +#dbLoadRecords("iocmon.db","CBS=EC-GN-SYSM, CTRLTYPE=À)ú, IDX=0, IOCTYPE=CUB, PP=, PPPP=, NNNN=, TTT=") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/envPaths b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/envPaths new file mode 100644 index 0000000..bb3dfe0 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/envPaths @@ -0,0 +1,3 @@ +epicsEnvSet("IOC","iocEC-GN-PSH0CUB") +epicsEnvSet("TOP","/mnt/ITER/ferrog/MARTe2Project/GIT/ec-gn-ja-pcf/EC-GN-JA-PCF/target/main/epics") +epicsEnvSet("EPICS_BASE","/opt/codac-6.3/epics") diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/envSystem b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/envSystem new file mode 100755 index 0000000..39d71cf --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/envSystem @@ -0,0 +1,8 @@ +epicsEnvSet("AUTOSAVE_SYSM_PV_PREFIX", "EC-GN-SYSM:PSH0CUB-") +epicsEnvSet("IOCSH_PS1", "${IOC}> ") +epicsEnvSet("STREAM_PROTOCOL_PATH", "$(TOP)/db:$(EPICS_ROOT)/db") +epicsEnvSet("IPPort_priority","0") +epicsEnvSet("IPPort_noAutoConnect", "0") +epicsEnvSet("IPPort_noProcessEos", "0") + +#- End-of-file marker - do not delete or add lines below! \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/envUser b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/envUser new file mode 100644 index 0000000..90ddfc7 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/envUser @@ -0,0 +1,9 @@ +############################################################################ +## User provided environment variables +############################################################################ + +#epicsEnvSet("EPICS_CA_SERVER_PORT", "5064") +#epicsEnvSet("EPICS_CA_ADDR_LIST", "") +#epicsEnvSet("EPICS_CA_AUTO_ADDR_LIST", "YES") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/iocEC-GN-PSH0CUB-postSaveRestore.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/iocEC-GN-PSH0CUB-postSaveRestore.cmd new file mode 100755 index 0000000..864013e --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/iocEC-GN-PSH0CUB-postSaveRestore.cmd @@ -0,0 +1,8 @@ +############################################################################ +## Autosave monitor post setup +############################################################################ + +cd "${TOP}/iocBoot/$(IOC)" +create_monitor_set(".req",30,"P=$(AUTOSAVE_SYSM_PV_PREFIX)") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/iocEC-GN-PSH0CUB-preSaveRestore.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/iocEC-GN-PSH0CUB-preSaveRestore.cmd new file mode 100755 index 0000000..114fba6 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/iocEC-GN-PSH0CUB-preSaveRestore.cmd @@ -0,0 +1,42 @@ +############################################################################ +## Save and restore +############################################################################ + +### save_restore setup +# status-PV prefix +save_restoreSet_status_prefix("$(AUTOSAVE_SYSM_PV_PREFIX)") + +# Use status-PV +save_restoreSet_UseStatusPVs(1) + +# Debug-output level +save_restoreSet_Debug(0) + +# Ok to save/restore save sets with missing values (no CA connection to PV)? +save_restoreSet_IncompleteSetsOk(1) +# Save dated backup files? +save_restoreSet_DatedBackupFiles(1) + +# Number of sequenced backup files to write +save_restoreSet_NumSeqFiles(3) +# Time interval between sequenced backups +save_restoreSet_SeqPeriodInSeconds(300) + +# specify where save files should be +set_savefile_path("$(EPICS_AUTOSAVE_VAR)/$(UNIT_NAME)") + +# specify what save files should be restored. Note these files must be +# in the directory specified in set_savefile_path(), or, if that function +# has not been called, from the directory current when iocInit is invoked + +# Save files associated with the request files 'auto-output.req' and +# 'auto-input.req'. These files are the standard way to use autosave + +set_pass1_restoreFile(".sav") + +# specify directories in which to to search for included request files +set_requestfile_path("./") + +dbLoadRecords("$(EPICS_ROOT)/db/save_restoreStatus.db", "P=$(AUTOSAVE_SYSM_PV_PREFIX)") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/sddPostDriverConf.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/sddPostDriverConf.cmd new file mode 100644 index 0000000..d223981 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/sddPostDriverConf.cmd @@ -0,0 +1,6 @@ +############################################################################ +## SDD provided PLC or fast controller driver post configuration +############################################################################ + + +#- End-of-file marker - do not delete or add lines below! \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/sddPreDriverConf.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/sddPreDriverConf.cmd new file mode 100644 index 0000000..770f841 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/sddPreDriverConf.cmd @@ -0,0 +1,86 @@ +#====================================================================== +# PLC(s) driver configuration commands +#====================================================================== +# level=-1: no output +# level=0: errors only +# level=1: startup messages +# level=2: + output record processing +# level=3: + input record processing +# level=4: + driver calls +# level=5: + io printout +# be careful using level>1 since many messages may introduce delays + +# var s7plcDebug 2 + +# s7plcConfigure name,IPaddr,port,inSize,outSize,bigEndian,recvTimeout,sendIntervall, configversion +# connects to PLC on address port +# : size of data block PLC -> IOC [bytes] +# : size of data block IOC -> PLC [bytes] +# =1 : motorola format data (MSB first) +# =0 : intel format data (LSB first) +# : receive buffer interval [ms] (Default : 50ms) +# : time to wait before sending new data to PLC [ms] +# : database configuration version + +# s7plcConfigureCmd name,IPaddr,port,outSize,bigEndian,sendIntervall +# connects to PLC on address port +# : size of data block IOC -> PLC [bytes] +# =1 : motorola format data (MSB first) +# =0 : intel format data (LSB first) +# : time to wait before sending new data to PLC [ms] + + + +#============================================================================ +# s7plc asyn driver configuration commands +#============================================================================ + +#============================================================================ +# NI-6259 DAQ I/O Module driver configuration commands +#============================================================================ +# Reference: ITER_D_3DEY52 v1.3 - NI PXI-6259 EPICS Driver User’s Guide + +# For analogue input, analogue output, waveform, initialize using below function +# pxi6259_ai_init(uint8 cardnumber, uint32 range, uint32 clk_source, uint32 clk_edge); +# Example: pxi6259_ai_init(0, 1, 0, 0) + +# For binary input, binary output, multi-bit binary input, multi bit binary output, initialize using below function +# pxi6259init(uint8 cardnumber, uint32 portmask0, uint8 portmask1, uint8 portmask2); +# Example: pxi6259_bio_init(0, 0xFF000000, 0xFF, 0xFF) + + +#============================================================================ +# NI-6682 Timing and Synchronization I/O Module driver configuration commands +#============================================================================ +# Reference ITER_D_33Q5TX v1.7 - NI Sync EPICS Driver User’s Guide + +# nisyncDrvInit(string port, char* type, int cardNumber); +# Example: nisyncDrvInit("S0", "PXI-6682", "0"); +# Example: nisyncDrvInit("S0", "PXI-6683H", "0"); +# nisyncTimeInit(int cardID, char* type, int cardNumber); +# Example: nisyncTimeInit("0", "PXI-6682", "0") +# Example: nisyncTimeInit("0", "PXI-6683H", "0") + + +#============================================================================================ +# NI-6368 X Series - Multifunction Data Acquisition I/O Module driver configuration commands +#============================================================================================ +# Reference ITER_D_3P4N3R v1.2 - NI X Series EPICS Driver User’s Guide + +# nixseriesInit(char *portName, char *nix6368Card); +# Example: nixseriesInit("ni6368_0", "/dev/ni6368.0"); + + +#============================================================================ +# NI-6528 DAQ I/O Module driver configuration commands +#============================================================================ +# Reference ITER_D_433VEW - NI PXI-6528 EPICS Driver User's Manual +# ni6528_init(char *portName, char *ni6528Card); +# Example: pxi6528_init("ni6528_0", "/dev/ni6528.0") +# asynSetTraceMask("",0,255) +# Example: asynSetTraceMask("pxi6528_0",0,255) +# pxi6528_reset(char *portName) +# Example: pxi6528_reset("pxi6528_0") + + +#- End-of-file marker - do not delete or add lines below! \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/sddSeqToLoad.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/sddSeqToLoad.cmd new file mode 100644 index 0000000..a23d75a --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/sddSeqToLoad.cmd @@ -0,0 +1,6 @@ +############################################################################ +## SDD provided sequence programs to load +############################################################################ + + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/seqToLoad.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/seqToLoad.cmd new file mode 100644 index 0000000..30e4bde --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/seqToLoad.cmd @@ -0,0 +1,8 @@ +############################################################################ +## Sequence programs to load +############################################################################ + +## Start any sequence programs +#seq sncxxx,"user=codac-devHost" + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/st.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/st.cmd new file mode 100755 index 0000000..443faa9 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/st.cmd @@ -0,0 +1,67 @@ +#!../../bin/linux-x86_64/EC-GN +#+====================================================================== +# $HeadURL: https://svnpub.codac.iter.org/codac/iter/codac/dev/units/m-epics-iter-templates/branches/codac-core-6.1/templates/genericBoot/ioc/st.cmd $ +# $Id: st.cmd 96475 2019-01-09 13:47:38Z sivecm $ +# +# Project : CODAC Core System +# +# Description : ITER ioc template EPICS start up file +# +# Author(s) : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2019 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== + +< envPaths +< envSystem +< envUser + +cd "${TOP}" + +############################################################################ +## Register all support components +############################################################################ + +dbLoadDatabase "dbd/CUB.dbd" +EC_GN_registerRecordDeviceDriver pdbbase + +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/sddPreDriverConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/userPreDriverConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/threadSchedulingConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/dbToLoad.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/iocEC-GN-PSH0CUB-preSaveRestore.cmd" + +############################################################################ +## IOC Logging +############################################################################ +iocLogInit +iocLogPrefix "${STY} : " + +############################################################################ +## IOC initialization +############################################################################ +cd "${TOP}/db" +iocInit + +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/iocEC-GN-PSH0CUB-postSaveRestore.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/sddSeqToLoad.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/seqToLoad.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/sddPostDriverConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0CUB/userPostDriverConf.cmd" + + +dbl > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbl" +dbla > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbla" +dbior > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbior" +dbhcr > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbhcr" + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/threadSchedulingConf.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/threadSchedulingConf.cmd new file mode 100644 index 0000000..29d9b00 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/threadSchedulingConf.cmd @@ -0,0 +1,6 @@ +############################################################################ +## Thread scheduling configuration for real-time tuning +############################################################################ + + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/userPostDriverConf.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/userPostDriverConf.cmd new file mode 100644 index 0000000..8786feb --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/userPostDriverConf.cmd @@ -0,0 +1,6 @@ +############################################################################ +## User provided PLC or fast controller driver post configuration +############################################################################ + + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/userPreDriverConf.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/userPreDriverConf.cmd new file mode 100644 index 0000000..6c9a40e --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0CUB/userPreDriverConf.cmd @@ -0,0 +1,12 @@ +############################################################################ +## User provided PLC or fast controller driver pre configuration +############################################################################ + +# Enable parallel callback threads to improve 'I/O Intr' record scanning +# see https://bugzilla.iter.org/codac/show_bug.cgi?id=10413 +callbackParallelThreads + +callbackSetQueueSize(100000) +scanOnceSetQueueSize(100000) + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/Makefile b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/Makefile new file mode 100644 index 0000000..79c4ce6 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/Makefile @@ -0,0 +1,5 @@ +TOP = ../.. +include $(TOP)/configure/CONFIG +ARCH = linux-x86_64 +TARGETS = envPaths +include $(TOP)/configure/RULES.ioc diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/dbToLoad.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/dbToLoad.cmd new file mode 100755 index 0000000..9a1eb6b --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/dbToLoad.cmd @@ -0,0 +1,45 @@ +#====================================================================== +# Loading DBs +#====================================================================== +cd $(TOP)/db +dbLoadRecords("PCF0-EC-GN-HWCF-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GAF-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GAF-CCPS-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GAF-FHPS-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GAF-GCPS-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GAF-MCPS-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GAFP-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GBF-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GBF-CCPS-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GBF-FHPS-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GBF-GCPS-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GBF-MCPS-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GBFP-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GPF-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-GPS-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-PA1F-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-PA2F-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-PB1F-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-PB2F-iocEC-GN-PSH0PCF.db") +dbLoadRecords("PCF0-EC-GN-P01-PMF-iocEC-GN-PSH0PCF.db") + + +#====================================================================== +# Loading Substitution Files +#====================================================================== +cd $(TOP)/iocBoot/$(IOC) + + +#====================================================================== +# PLC Communication Monitoring PVs DB Loading +#====================================================================== +cd $(EPICS_ROOT)/db + + +#====================================================================== +# IOC Monitor +#====================================================================== +cd $(EPICS_ROOT)/db +#dbLoadRecords("iocmon.db","CBS=EC-GN-SYSM, CTRLTYPE=F, IDX=0, IOCTYPE=CORE, PP=01, PPPP=52RF, NNNN=4210, TTT=PCF") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/envPaths b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/envPaths new file mode 100644 index 0000000..8a3ebab --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/envPaths @@ -0,0 +1,3 @@ +epicsEnvSet("IOC","iocEC-GN-PSH0PCF") +epicsEnvSet("TOP","/mnt/ITER/ferrog/MARTe2Project/GIT/ec-gn-ja-pcf/EC-GN-JA-PCF/target/main/epics") +epicsEnvSet("EPICS_BASE","/opt/codac-6.3/epics") diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/envSystem b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/envSystem new file mode 100755 index 0000000..5dc56ee --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/envSystem @@ -0,0 +1,10 @@ +############################################################################ +## CODAC specific environment variables +############################################################################ + +epicsEnvSet("AUTOSAVE_SYSM_PV_PREFIX","EC-GN-SYSM:PCF0CORE-") +epicsEnvSet("IOCSH_PS1","${IOC}> ") +epicsEnvSet("STREAM_PROTOCOL_PATH","$(TOP)/db:$(EPICS_ROOT)/db") + + +#- End-of-file marker - do not delete or add lines below! \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/envUser b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/envUser new file mode 100644 index 0000000..90ddfc7 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/envUser @@ -0,0 +1,9 @@ +############################################################################ +## User provided environment variables +############################################################################ + +#epicsEnvSet("EPICS_CA_SERVER_PORT", "5064") +#epicsEnvSet("EPICS_CA_ADDR_LIST", "") +#epicsEnvSet("EPICS_CA_AUTO_ADDR_LIST", "YES") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/iocEC-GN-PSH0PCF-postSaveRestore.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/iocEC-GN-PSH0PCF-postSaveRestore.cmd new file mode 100755 index 0000000..d5356be --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/iocEC-GN-PSH0PCF-postSaveRestore.cmd @@ -0,0 +1,8 @@ +############################################################################ +## Autosave monitor post setup +############################################################################ + +cd "${TOP}/iocBoot/$(IOC)" +create_monitor_set("iocEC-GN-PSH0PCF.req",30,"P=$(AUTOSAVE_SYSM_PV_PREFIX)") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/iocEC-GN-PSH0PCF-preSaveRestore.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/iocEC-GN-PSH0PCF-preSaveRestore.cmd new file mode 100755 index 0000000..bb00d97 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/iocEC-GN-PSH0PCF-preSaveRestore.cmd @@ -0,0 +1,42 @@ +############################################################################ +## Save and restore +############################################################################ + +### save_restore setup +# status-PV prefix +save_restoreSet_status_prefix("$(AUTOSAVE_SYSM_PV_PREFIX)") + +# Use status-PV +save_restoreSet_UseStatusPVs(1) + +# Debug-output level +save_restoreSet_Debug(0) + +# Ok to save/restore save sets with missing values (no CA connection to PV)? +save_restoreSet_IncompleteSetsOk(1) +# Save dated backup files? +save_restoreSet_DatedBackupFiles(1) + +# Number of sequenced backup files to write +save_restoreSet_NumSeqFiles(3) +# Time interval between sequenced backups +save_restoreSet_SeqPeriodInSeconds(300) + +# specify where save files should be +set_savefile_path("$(EPICS_AUTOSAVE_VAR)/$(UNIT_NAME)") + +# specify what save files should be restored. Note these files must be +# in the directory specified in set_savefile_path(), or, if that function +# has not been called, from the directory current when iocInit is invoked + +# Save files associated with the request files 'auto-output.req' and +# 'auto-input.req'. These files are the standard way to use autosave + +set_pass1_restoreFile("iocEC-GN-PSH0PCF.sav") + +# specify directories in which to to search for included request files +set_requestfile_path("./") + +dbLoadRecords("$(EPICS_ROOT)/db/save_restoreStatus.db", "P=$(AUTOSAVE_SYSM_PV_PREFIX)") + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/iocEC-GN-PSH0PCF.req b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/iocEC-GN-PSH0PCF.req new file mode 100755 index 0000000..e69de29 diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/sddPostDriverConf.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/sddPostDriverConf.cmd new file mode 100755 index 0000000..2340b6e --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/sddPostDriverConf.cmd @@ -0,0 +1,2 @@ + +#- End-of-file marker - do not delete or add lines below! \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/sddPreDriverConf.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/sddPreDriverConf.cmd new file mode 100755 index 0000000..2340b6e --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/sddPreDriverConf.cmd @@ -0,0 +1,2 @@ + +#- End-of-file marker - do not delete or add lines below! \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/sddSeqToLoad.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/sddSeqToLoad.cmd new file mode 100644 index 0000000..a23d75a --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/sddSeqToLoad.cmd @@ -0,0 +1,6 @@ +############################################################################ +## SDD provided sequence programs to load +############################################################################ + + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/seqToLoad.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/seqToLoad.cmd new file mode 100644 index 0000000..30e4bde --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/seqToLoad.cmd @@ -0,0 +1,8 @@ +############################################################################ +## Sequence programs to load +############################################################################ + +## Start any sequence programs +#seq sncxxx,"user=codac-devHost" + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/st.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/st.cmd new file mode 100755 index 0000000..60517bb --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/st.cmd @@ -0,0 +1,67 @@ +#!../../bin/linux-x86_64/EC-GN +#+====================================================================== +# $HeadURL: https://svnpub.codac.iter.org/codac/iter/codac/dev/units/m-epics-iter-templates/branches/codac-core-6.1/templates/genericBoot/ioc/st.cmd $ +# $Id: st.cmd 96475 2019-01-09 13:47:38Z sivecm $ +# +# Project : CODAC Core System +# +# Description : ITER ioc template EPICS start up file +# +# Author(s) : This file was generated by CODAC development toolkit +# +# Copyright (c) : 2010-2019 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== + +< envPaths +< envSystem +< envUser + +cd "${TOP}" + +############################################################################ +## Register all support components +############################################################################ + +dbLoadDatabase "dbd/EC-GN.dbd" +EC_GN_registerRecordDeviceDriver pdbbase + +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/sddPreDriverConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/userPreDriverConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/threadSchedulingConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/dbToLoad.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/iocEC-GN-PSH0PCF-preSaveRestore.cmd" + +############################################################################ +## IOC Logging +############################################################################ +iocLogInit +iocLogPrefix "${STY} : " + +############################################################################ +## IOC initialization +############################################################################ +cd "${TOP}/db" +iocInit + +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/iocEC-GN-PSH0PCF-postSaveRestore.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/sddSeqToLoad.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/seqToLoad.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/sddPostDriverConf.cmd" +< "${TOP}/iocBoot/iocEC-GN-PSH0PCF/userPostDriverConf.cmd" + + +dbl > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbl" +dbla > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbla" +dbior > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbior" +dbhcr > "${CODAC_VAR}/iocdump/${UNIT_NAME}/${IOC_NAME}-${IOC_BOOT_TIME}.dbhcr" + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/threadSchedulingConf.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/threadSchedulingConf.cmd new file mode 100644 index 0000000..29d9b00 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/threadSchedulingConf.cmd @@ -0,0 +1,6 @@ +############################################################################ +## Thread scheduling configuration for real-time tuning +############################################################################ + + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/userPostDriverConf.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/userPostDriverConf.cmd new file mode 100644 index 0000000..8786feb --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/userPostDriverConf.cmd @@ -0,0 +1,6 @@ +############################################################################ +## User provided PLC or fast controller driver post configuration +############################################################################ + + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/userPreDriverConf.cmd b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/userPreDriverConf.cmd new file mode 100644 index 0000000..6c9a40e --- /dev/null +++ b/EC-GN-JA-PCF/target/main/epics/iocBoot/iocEC-GN-PSH0PCF/userPreDriverConf.cmd @@ -0,0 +1,12 @@ +############################################################################ +## User provided PLC or fast controller driver pre configuration +############################################################################ + +# Enable parallel callback threads to improve 'I/O Intr' record scanning +# see https://bugzilla.iter.org/codac/show_bug.cgi?id=10413 +callbackParallelThreads + +callbackSetQueueSize(100000) +scanOnceSetQueueSize(100000) + +#- End-of-file marker - do not delete or add lines below! diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/.gitignore b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/.gitignore new file mode 100644 index 0000000..5eba449 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/.gitignore @@ -0,0 +1,2 @@ +Build/ + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/100s.csv b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/100s.csv new file mode 100644 index 0000000..98fb573 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/100s.csv @@ -0,0 +1,1013 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,60,45,10,10,10,10 +10,55,40,9,9,9,9 +20,50,35,8,8,8,8 +30,45,30,7,7,7,7 +40,40,25,6,6,6,6 +50,35,20,5,5,5,5 +60,30,15,4,4,4,4 +70,25,10,3,3,3,3 +80,20,5,2,2,2,2 +90,15,0,1,1,1,1 +100,10,-5,0,0,0,0 +110,5,0,1,1,1,1 +120,0,5,2,2,2,2 +130,-5,10,3,3,3,3 +140,0,15,4,4,4,4 +150,5,20,5,5,5,5 +160,10,25,6,6,6,6 +170,15,30,7,7,7,7 +180,20,35,8,8,8,8 +190,25,40,9,9,9,9 +200,30,45,10,10,10,10 +210,35,40,11,9,9,9 +220,40,35,12,8,8,8 +230,45,30,11,7,7,7 +240,50,25,10,6,6,6 +250,55,20,9,5,5,5 +260,60,15,8,4,4,4 +270,55,10,7,3,3,3 +280,50,5,6,2,2,2 +290,45,0,5,1,1,1 +300,40,-5,4,0,0,0 +310,35,0,3,1,1,1 +320,30,5,2,2,2,2 +330,25,10,1,3,3,3 +340,20,15,0,4,4,4 +350,15,20,1,5,5,5 +360,10,25,2,6,6,6 +370,5,30,3,7,7,7 +380,0,35,4,8,8,8 +390,-5,40,5,9,9,9 +400,0,45,6,10,10,10 +410,5,40,7,9,9,9 +420,10,35,8,8,8,8 +430,15,30,9,7,7,7 +440,20,25,10,6,6,6 +450,25,20,11,5,5,5 +460,30,15,12,4,4,4 +470,35,10,11,3,3,3 +480,40,5,10,2,2,2 +490,45,0,9,1,1,1 +500,50,-5,8,0,0,0 +510,55,0,7,1,1,1 +520,60,5,6,2,2,2 +530,55,10,5,3,3,3 +540,50,15,4,4,4,4 +550,45,20,3,5,5,5 +560,40,25,2,6,6,6 +570,35,30,1,7,7,7 +580,30,35,0,8,8,8 +590,25,40,1,9,9,9 +600,20,45,2,10,10,10 +610,15,40,3,9,9,9 +620,10,35,4,8,8,8 +630,5,30,5,7,7,7 +640,0,25,6,6,6,6 +650,-5,20,7,5,5,5 +660,0,15,8,4,4,4 +670,5,10,9,3,3,3 +680,10,5,10,2,2,2 +690,15,0,11,1,1,1 +700,20,-5,12,0,0,0 +710,25,0,11,1,1,1 +720,30,5,10,2,2,2 +730,35,10,9,3,3,3 +740,40,15,8,4,4,4 +750,45,20,7,5,5,5 +760,50,25,6,6,6,6 +770,55,30,5,7,7,7 +780,60,35,4,8,8,8 +790,55,40,3,9,9,9 +800,50,45,2,10,10,10 +810,45,40,1,9,9,9 +820,40,35,0,8,8,8 +830,35,30,1,7,7,7 +840,30,25,2,6,6,6 +850,25,20,3,5,5,5 +860,20,15,4,4,4,4 +870,15,10,5,3,3,3 +880,10,5,6,2,2,2 +890,5,0,7,1,1,1 +900,0,-5,8,0,0,0 +910,-5,0,9,1,1,1 +920,0,5,10,2,2,2 +930,5,10,11,3,3,3 +940,10,15,12,4,4,4 +950,15,20,11,5,5,5 +960,20,25,10,6,6,6 +970,25,30,9,7,7,7 +980,30,35,8,8,8,8 +990,35,40,7,9,9,9 +1000,40,45,6,10,10,10 +1010,30,20,10,10,10,10 +1020,30,20,10,10,10,10 +1030,30,20,10,10,10,10 +1040,30,20,10,10,10,10 +1050,30,20,10,10,10,10 +1060,30,20,10,10,10,10 +1070,30,20,10,10,10,10 +1080,30,20,10,10,10,10 +1090,30,20,10,10,10,10 +1100,30,20,10,10,10,10 +1110,30,20,10,10,10,10 +1120,30,20,10,10,10,10 +1130,30,20,10,10,10,10 +1140,30,20,10,10,10,10 +1150,30,20,10,10,10,10 +1160,30,20,10,10,10,10 +1170,30,20,10,10,10,10 +1180,30,20,10,10,10,10 +1190,30,20,10,10,10,10 +1200,30,20,10,10,10,10 +1210,30,20,10,10,10,10 +1220,30,20,10,10,10,10 +1230,30,20,10,10,10,10 +1240,30,20,10,10,10,10 +1250,30,20,10,10,10,10 +1260,30,20,10,10,10,10 +1270,30,20,10,10,10,10 +1280,30,20,10,10,10,10 +1290,30,20,10,10,10,10 +1300,30,20,10,10,10,10 +1310,30,20,10,10,10,10 +1320,30,20,10,10,10,10 +1330,30,20,10,10,10,10 +1340,30,20,10,10,10,10 +1350,30,20,10,10,10,10 +1360,30,20,10,10,10,10 +1370,30,20,10,10,10,10 +1380,30,20,10,10,10,10 +1390,30,20,10,10,10,10 +1400,30,20,10,10,10,10 +1410,30,20,10,10,10,10 +1420,30,20,10,10,10,10 +1430,30,20,10,10,10,10 +1440,30,20,10,10,10,10 +1450,30,20,10,10,10,10 +1460,30,20,10,10,10,10 +1470,30,20,10,10,10,10 +1480,30,20,10,10,10,10 +1490,30,20,10,10,10,10 +1500,30,20,10,10,10,10 +1510,30,20,10,10,10,10 +1520,30,20,10,10,10,10 +1530,30,20,10,10,10,10 +1540,30,20,10,10,10,10 +1550,30,20,10,10,10,10 +1560,30,20,10,10,10,10 +1570,30,20,10,10,10,10 +1580,30,20,10,10,10,10 +1590,30,20,10,10,10,10 +1600,30,20,10,10,10,10 +1610,30,20,10,10,10,10 +1620,30,20,10,10,10,10 +1630,30,20,10,10,10,10 +1640,30,20,10,10,10,10 +1650,30,20,10,10,10,10 +1660,30,20,10,10,10,10 +1670,30,20,10,10,10,10 +1680,30,20,10,10,10,10 +1690,30,20,10,10,10,10 +1700,30,20,10,10,10,10 +1710,30,20,10,10,10,10 +1720,30,20,10,10,10,10 +1730,30,20,10,10,10,10 +1740,30,20,10,10,10,10 +1750,30,20,10,10,10,10 +1760,30,20,10,10,10,10 +1770,30,20,10,10,10,10 +1780,30,20,10,10,10,10 +1790,30,20,10,10,10,10 +1800,30,20,10,10,10,10 +1810,30,20,10,10,10,10 +1820,30,20,10,10,10,10 +1830,30,20,10,10,10,10 +1840,30,20,10,10,10,10 +1850,30,20,10,10,10,10 +1860,30,20,10,10,10,10 +1870,30,20,10,10,10,10 +1880,30,20,10,10,10,10 +1890,30,20,10,10,10,10 +1900,30,20,10,10,10,10 +1910,30,20,10,10,10,10 +1920,30,20,10,10,10,10 +1930,30,20,10,10,10,10 +1940,30,20,10,10,10,10 +1950,30,20,10,10,10,10 +1960,30,20,10,10,10,10 +1970,30,20,10,10,10,10 +1980,30,20,10,10,10,10 +1990,30,20,10,10,10,10 +2000,30,20,10,10,10,10 +2010,30,20,10,10,10,10 +2020,30,20,10,10,10,10 +2030,30,20,10,10,10,10 +2040,30,20,10,10,10,10 +2050,30,20,10,10,10,10 +2060,30,20,10,10,10,10 +2070,30,20,10,10,10,10 +2080,30,20,10,10,10,10 +2090,30,20,10,10,10,10 +2100,30,20,10,10,10,10 +2110,30,20,10,10,10,10 +2120,30,20,10,10,10,10 +2130,30,20,10,10,10,10 +2140,30,20,10,10,10,10 +2150,30,20,10,10,10,10 +2160,30,20,10,10,10,10 +2170,30,20,10,10,10,10 +2180,30,20,10,10,10,10 +2190,30,20,10,10,10,10 +2200,30,20,10,10,10,10 +2210,30,20,10,10,10,10 +2220,30,20,10,10,10,10 +2230,30,20,10,10,10,10 +2240,30,20,10,10,10,10 +2250,30,20,10,10,10,10 +2260,30,20,10,10,10,10 +2270,30,20,10,10,10,10 +2280,30,20,10,10,10,10 +2290,30,20,10,10,10,10 +2300,30,20,10,10,10,10 +2310,30,20,10,10,10,10 +2320,30,20,10,10,10,10 +2330,30,20,10,10,10,10 +2340,30,20,10,10,10,10 +2350,30,20,10,10,10,10 +2360,30,20,10,10,10,10 +2370,30,20,10,10,10,10 +2380,30,20,10,10,10,10 +2390,30,20,10,10,10,10 +2400,30,20,10,10,10,10 +2410,30,20,10,10,10,10 +2420,30,20,10,10,10,10 +2430,30,20,10,10,10,10 +2440,30,20,10,10,10,10 +2450,30,20,10,10,10,10 +2460,30,20,10,10,10,10 +2470,30,20,10,10,10,10 +2480,30,20,10,10,10,10 +2490,30,20,10,10,10,10 +2500,30,20,10,10,10,10 +2510,30,20,10,10,10,10 +2520,30,20,10,10,10,10 +2530,30,20,10,10,10,10 +2540,30,20,10,10,10,10 +2550,30,20,10,10,10,10 +2560,30,20,10,10,10,10 +2570,30,20,10,10,10,10 +2580,30,20,10,10,10,10 +2590,30,20,10,10,10,10 +2600,30,20,10,10,10,10 +2610,30,20,10,10,10,10 +2620,30,20,10,10,10,10 +2630,30,20,10,10,10,10 +2640,30,20,10,10,10,10 +2650,30,20,10,10,10,10 +2660,30,20,10,10,10,10 +2670,30,20,10,10,10,10 +2680,30,20,10,10,10,10 +2690,30,20,10,10,10,10 +2700,30,20,10,10,10,10 +2710,30,20,10,10,10,10 +2720,30,20,10,10,10,10 +2730,30,20,10,10,10,10 +2740,30,20,10,10,10,10 +2750,30,20,10,10,10,10 +2760,30,20,10,10,10,10 +2770,30,20,10,10,10,10 +2780,30,20,10,10,10,10 +2790,30,20,10,10,10,10 +2800,30,20,10,10,10,10 +2810,30,20,10,10,10,10 +2820,30,20,10,10,10,10 +2830,30,20,10,10,10,10 +2840,30,20,10,10,10,10 +2850,30,20,10,10,10,10 +2860,30,20,10,10,10,10 +2870,30,20,10,10,10,10 +2880,30,20,10,10,10,10 +2890,30,20,10,10,10,10 +2900,30,20,10,10,10,10 +2910,30,20,10,10,10,10 +2920,30,20,10,10,10,10 +2930,30,20,10,10,10,10 +2940,30,20,10,10,10,10 +2950,30,20,10,10,10,10 +2960,30,20,10,10,10,10 +2970,30,20,10,10,10,10 +2980,30,20,10,10,10,10 +2990,30,20,10,10,10,10 +3000,30,20,10,10,10,10 +3010,30,20,10,10,10,10 +3020,30,20,10,10,10,10 +3030,30,20,10,10,10,10 +3040,30,20,10,10,10,10 +3050,30,20,10,10,10,10 +3060,30,20,10,10,10,10 +3070,30,20,10,10,10,10 +3080,30,20,10,10,10,10 +3090,30,20,10,10,10,10 +3100,30,20,10,10,10,10 +3110,30,20,10,10,10,10 +3120,30,20,10,10,10,10 +3130,30,20,10,10,10,10 +3140,30,20,10,10,10,10 +3150,30,20,10,10,10,10 +3160,30,20,10,10,10,10 +3170,30,20,10,10,10,10 +3180,30,20,10,10,10,10 +3190,30,20,10,10,10,10 +3200,30,20,10,10,10,10 +3210,30,20,10,10,10,10 +3220,30,20,10,10,10,10 +3230,30,20,10,10,10,10 +3240,30,20,10,10,10,10 +3250,30,20,10,10,10,10 +3260,30,20,10,10,10,10 +3270,30,20,10,10,10,10 +3280,30,20,10,10,10,10 +3290,30,20,10,10,10,10 +3300,30,20,10,10,10,10 +3310,30,20,10,10,10,10 +3320,30,20,10,10,10,10 +3330,30,20,10,10,10,10 +3340,30,20,10,10,10,10 +3350,30,20,10,10,10,10 +3360,30,20,10,10,10,10 +3370,30,20,10,10,10,10 +3380,30,20,10,10,10,10 +3390,30,20,10,10,10,10 +3400,30,20,10,10,10,10 +3410,30,20,10,10,10,10 +3420,30,20,10,10,10,10 +3430,30,20,10,10,10,10 +3440,30,20,10,10,10,10 +3450,30,20,10,10,10,10 +3460,30,20,10,10,10,10 +3470,30,20,10,10,10,10 +3480,30,20,10,10,10,10 +3490,30,20,10,10,10,10 +3500,30,20,10,10,10,10 +3510,30,20,10,10,10,10 +3520,30,20,10,10,10,10 +3530,30,20,10,10,10,10 +3540,30,20,10,10,10,10 +3550,30,20,10,10,10,10 +3560,30,20,10,10,10,10 +3570,30,20,10,10,10,10 +3580,30,20,10,10,10,10 +3590,30,20,10,10,10,10 +3600,30,20,10,10,10,10 +3610,30,20,10,10,10,10 +3620,30,20,10,10,10,10 +3630,30,20,10,10,10,10 +3640,30,20,10,10,10,10 +3650,30,20,10,10,10,10 +3660,30,20,10,10,10,10 +3670,30,20,10,10,10,10 +3680,30,20,10,10,10,10 +3690,30,20,10,10,10,10 +3700,30,20,10,10,10,10 +3710,30,20,10,10,10,10 +3720,30,20,10,10,10,10 +3730,30,20,10,10,10,10 +3740,30,20,10,10,10,10 +3750,30,20,10,10,10,10 +3760,30,20,10,10,10,10 +3770,30,20,10,10,10,10 +3780,30,20,10,10,10,10 +3790,30,20,10,10,10,10 +3800,30,20,10,10,10,10 +3810,30,20,10,10,10,10 +3820,30,20,10,10,10,10 +3830,30,20,10,10,10,10 +3840,30,20,10,10,10,10 +3850,30,20,10,10,10,10 +3860,30,20,10,10,10,10 +3870,30,20,10,10,10,10 +3880,30,20,10,10,10,10 +3890,30,20,10,10,10,10 +3900,30,20,10,10,10,10 +3910,30,20,10,10,10,10 +3920,30,20,10,10,10,10 +3930,30,20,10,10,10,10 +3940,30,20,10,10,10,10 +3950,30,20,10,10,10,10 +3960,30,20,10,10,10,10 +3970,30,20,10,10,10,10 +3980,30,20,10,10,10,10 +3990,30,20,10,10,10,10 +4000,30,20,10,10,10,10 +4010,30,20,10,10,10,10 +4020,30,20,10,10,10,10 +4030,30,20,10,10,10,10 +4040,30,20,10,10,10,10 +4050,30,20,10,10,10,10 +4060,30,20,10,10,10,10 +4070,30,20,10,10,10,10 +4080,30,20,10,10,10,10 +4090,30,20,10,10,10,10 +4100,30,20,10,10,10,10 +4110,30,20,10,10,10,10 +4120,30,20,10,10,10,10 +4130,30,20,10,10,10,10 +4140,30,20,10,10,10,10 +4150,30,20,10,10,10,10 +4160,30,20,10,10,10,10 +4170,30,20,10,10,10,10 +4180,30,20,10,10,10,10 +4190,30,20,10,10,10,10 +4200,30,20,10,10,10,10 +4210,30,20,10,10,10,10 +4220,30,20,10,10,10,10 +4230,30,20,10,10,10,10 +4240,30,20,10,10,10,10 +4250,30,20,10,10,10,10 +4260,30,20,10,10,10,10 +4270,30,20,10,10,10,10 +4280,30,20,10,10,10,10 +4290,30,20,10,10,10,10 +4300,30,20,10,10,10,10 +4310,30,20,10,10,10,10 +4320,30,20,10,10,10,10 +4330,30,20,10,10,10,10 +4340,30,20,10,10,10,10 +4350,30,20,10,10,10,10 +4360,30,20,10,10,10,10 +4370,30,20,10,10,10,10 +4380,30,20,10,10,10,10 +4390,30,20,10,10,10,10 +4400,30,20,10,10,10,10 +4410,30,20,10,10,10,10 +4420,30,20,10,10,10,10 +4430,30,20,10,10,10,10 +4440,30,20,10,10,10,10 +4450,30,20,10,10,10,10 +4460,30,20,10,10,10,10 +4470,30,20,10,10,10,10 +4480,30,20,10,10,10,10 +4490,30,20,10,10,10,10 +4500,30,20,10,10,10,10 +4510,30,20,10,10,10,10 +4520,30,20,10,10,10,10 +4530,30,20,10,10,10,10 +4540,30,20,10,10,10,10 +4550,30,20,10,10,10,10 +4560,30,20,10,10,10,10 +4570,30,20,10,10,10,10 +4580,30,20,10,10,10,10 +4590,30,20,10,10,10,10 +4600,30,20,10,10,10,10 +4610,30,20,10,10,10,10 +4620,30,20,10,10,10,10 +4630,30,20,10,10,10,10 +4640,30,20,10,10,10,10 +4650,30,20,10,10,10,10 +4660,30,20,10,10,10,10 +4670,30,20,10,10,10,10 +4680,30,20,10,10,10,10 +4690,30,20,10,10,10,10 +4700,30,20,10,10,10,10 +4710,30,20,10,10,10,10 +4720,30,20,10,10,10,10 +4730,30,20,10,10,10,10 +4740,30,20,10,10,10,10 +4750,30,20,10,10,10,10 +4760,30,20,10,10,10,10 +4770,30,20,10,10,10,10 +4780,30,20,10,10,10,10 +4790,30,20,10,10,10,10 +4800,30,20,10,10,10,10 +4810,30,20,10,10,10,10 +4820,30,20,10,10,10,10 +4830,30,20,10,10,10,10 +4840,30,20,10,10,10,10 +4850,30,20,10,10,10,10 +4860,30,20,10,10,10,10 +4870,30,20,10,10,10,10 +4880,30,20,10,10,10,10 +4890,30,20,10,10,10,10 +4900,30,20,10,10,10,10 +4910,30,20,10,10,10,10 +4920,30,20,10,10,10,10 +4930,30,20,10,10,10,10 +4940,30,20,10,10,10,10 +4950,30,20,10,10,10,10 +4960,30,20,10,10,10,10 +4970,30,20,10,10,10,10 +4980,30,20,10,10,10,10 +4990,30,20,10,10,10,10 +5000,30,20,10,10,10,10 +5010,30,20,10,10,10,10 +5020,30,20,10,10,10,10 +5030,30,20,10,10,10,10 +5040,30,20,10,10,10,10 +5050,30,20,10,10,10,10 +5060,30,20,10,10,10,10 +5070,30,20,10,10,10,10 +5080,30,20,10,10,10,10 +5090,30,20,10,10,10,10 +5100,30,20,10,10,10,10 +5110,30,20,10,10,10,10 +5120,30,20,10,10,10,10 +5130,30,20,10,10,10,10 +5140,30,20,10,10,10,10 +5150,30,20,10,10,10,10 +5160,30,20,10,10,10,10 +5170,30,20,10,10,10,10 +5180,30,20,10,10,10,10 +5190,30,20,10,10,10,10 +5200,30,20,10,10,10,10 +5210,30,20,10,10,10,10 +5220,30,20,10,10,10,10 +5230,30,20,10,10,10,10 +5240,30,20,10,10,10,10 +5250,30,20,10,10,10,10 +5260,30,20,10,10,10,10 +5270,30,20,10,10,10,10 +5280,30,20,10,10,10,10 +5290,30,20,10,10,10,10 +5300,30,20,10,10,10,10 +5310,30,20,10,10,10,10 +5320,30,20,10,10,10,10 +5330,30,20,10,10,10,10 +5340,30,20,10,10,10,10 +5350,30,20,10,10,10,10 +5360,30,20,10,10,10,10 +5370,30,20,10,10,10,10 +5380,30,20,10,10,10,10 +5390,30,20,10,10,10,10 +5400,30,20,10,10,10,10 +5410,30,20,10,10,10,10 +5420,30,20,10,10,10,10 +5430,30,20,10,10,10,10 +5440,30,20,10,10,10,10 +5450,30,20,10,10,10,10 +5460,30,20,10,10,10,10 +5470,30,20,10,10,10,10 +5480,30,20,10,10,10,10 +5490,30,20,10,10,10,10 +5500,30,20,10,10,10,10 +5510,30,20,10,10,10,10 +5520,30,20,10,10,10,10 +5530,30,20,10,10,10,10 +5540,30,20,10,10,10,10 +5550,30,20,10,10,10,10 +5560,30,20,10,10,10,10 +5570,30,20,10,10,10,10 +5580,30,20,10,10,10,10 +5590,30,20,10,10,10,10 +5600,30,20,10,10,10,10 +5610,30,20,10,10,10,10 +5620,30,20,10,10,10,10 +5630,30,20,10,10,10,10 +5640,30,20,10,10,10,10 +5650,30,20,10,10,10,10 +5660,30,20,10,10,10,10 +5670,30,20,10,10,10,10 +5680,30,20,10,10,10,10 +5690,30,20,10,10,10,10 +5700,30,20,10,10,10,10 +5710,30,20,10,10,10,10 +5720,30,20,10,10,10,10 +5730,30,20,10,10,10,10 +5740,30,20,10,10,10,10 +5750,30,20,10,10,10,10 +5760,30,20,10,10,10,10 +5770,30,20,10,10,10,10 +5780,30,20,10,10,10,10 +5790,30,20,10,10,10,10 +5800,30,20,10,10,10,10 +5810,30,20,10,10,10,10 +5820,30,20,10,10,10,10 +5830,30,20,10,10,10,10 +5840,30,20,10,10,10,10 +5850,30,20,10,10,10,10 +5860,30,20,10,10,10,10 +5870,30,20,10,10,10,10 +5880,30,20,10,10,10,10 +5890,30,20,10,10,10,10 +5900,30,20,10,10,10,10 +5910,30,20,10,10,10,10 +5920,30,20,10,10,10,10 +5930,30,20,10,10,10,10 +5940,30,20,10,10,10,10 +5950,30,20,10,10,10,10 +5960,30,20,10,10,10,10 +5970,30,20,10,10,10,10 +5980,30,20,10,10,10,10 +5990,30,20,10,10,10,10 +6000,30,20,10,10,10,10 +6010,30,20,10,10,10,10 +6020,30,20,10,10,10,10 +6030,30,20,10,10,10,10 +6040,30,20,10,10,10,10 +6050,30,20,10,10,10,10 +6060,30,20,10,10,10,10 +6070,30,20,10,10,10,10 +6080,30,20,10,10,10,10 +6090,30,20,10,10,10,10 +6100,30,20,10,10,10,10 +6110,30,20,10,10,10,10 +6120,30,20,10,10,10,10 +6130,30,20,10,10,10,10 +6140,30,20,10,10,10,10 +6150,30,20,10,10,10,10 +6160,30,20,10,10,10,10 +6170,30,20,10,10,10,10 +6180,30,20,10,10,10,10 +6190,30,20,10,10,10,10 +6200,30,20,10,10,10,10 +6210,30,20,10,10,10,10 +6220,30,20,10,10,10,10 +6230,30,20,10,10,10,10 +6240,30,20,10,10,10,10 +6250,30,20,10,10,10,10 +6260,30,20,10,10,10,10 +6270,30,20,10,10,10,10 +6280,30,20,10,10,10,10 +6290,30,20,10,10,10,10 +6300,30,20,10,10,10,10 +6310,30,20,10,10,10,10 +6320,30,20,10,10,10,10 +6330,30,20,10,10,10,10 +6340,30,20,10,10,10,10 +6350,30,20,10,10,10,10 +6360,30,20,10,10,10,10 +6370,30,20,10,10,10,10 +6380,30,20,10,10,10,10 +6390,30,20,10,10,10,10 +6400,30,20,10,10,10,10 +6410,30,20,10,10,10,10 +6420,30,20,10,10,10,10 +6430,30,20,10,10,10,10 +6440,30,20,10,10,10,10 +6450,30,20,10,10,10,10 +6460,30,20,10,10,10,10 +6470,30,20,10,10,10,10 +6480,30,20,10,10,10,10 +6490,30,20,10,10,10,10 +6500,30,20,10,10,10,10 +6510,30,20,10,10,10,10 +6520,30,20,10,10,10,10 +6530,30,20,10,10,10,10 +6540,30,20,10,10,10,10 +6550,30,20,10,10,10,10 +6560,30,20,10,10,10,10 +6570,30,20,10,10,10,10 +6580,30,20,10,10,10,10 +6590,30,20,10,10,10,10 +6600,30,20,10,10,10,10 +6610,30,20,10,10,10,10 +6620,30,20,10,10,10,10 +6630,30,20,10,10,10,10 +6640,30,20,10,10,10,10 +6650,30,20,10,10,10,10 +6660,30,20,10,10,10,10 +6670,30,20,10,10,10,10 +6680,30,20,10,10,10,10 +6690,30,20,10,10,10,10 +6700,30,20,10,10,10,10 +6710,30,20,10,10,10,10 +6720,30,20,10,10,10,10 +6730,30,20,10,10,10,10 +6740,30,20,10,10,10,10 +6750,30,20,10,10,10,10 +6760,30,20,10,10,10,10 +6770,30,20,10,10,10,10 +6780,30,20,10,10,10,10 +6790,30,20,10,10,10,10 +6800,30,20,10,10,10,10 +6810,30,20,10,10,10,10 +6820,30,20,10,10,10,10 +6830,30,20,10,10,10,10 +6840,30,20,10,10,10,10 +6850,30,20,10,10,10,10 +6860,30,20,10,10,10,10 +6870,30,20,10,10,10,10 +6880,30,20,10,10,10,10 +6890,30,20,10,10,10,10 +6900,30,20,10,10,10,10 +6910,30,20,10,10,10,10 +6920,30,20,10,10,10,10 +6930,30,20,10,10,10,10 +6940,30,20,10,10,10,10 +6950,30,20,10,10,10,10 +6960,30,20,10,10,10,10 +6970,30,20,10,10,10,10 +6980,30,20,10,10,10,10 +6990,30,20,10,10,10,10 +7000,30,20,10,10,10,10 +7010,30,20,10,10,10,10 +7020,30,20,10,10,10,10 +7030,30,20,10,10,10,10 +7040,30,20,10,10,10,10 +7050,30,20,10,10,10,10 +7060,30,20,10,10,10,10 +7070,30,20,10,10,10,10 +7080,30,20,10,10,10,10 +7090,30,20,10,10,10,10 +7100,30,20,10,10,10,10 +7110,30,20,10,10,10,10 +7120,30,20,10,10,10,10 +7130,30,20,10,10,10,10 +7140,30,20,10,10,10,10 +7150,30,20,10,10,10,10 +7160,30,20,10,10,10,10 +7170,30,20,10,10,10,10 +7180,30,20,10,10,10,10 +7190,30,20,10,10,10,10 +7200,30,20,10,10,10,10 +7210,30,20,10,10,10,10 +7220,30,20,10,10,10,10 +7230,30,20,10,10,10,10 +7240,30,20,10,10,10,10 +7250,30,20,10,10,10,10 +7260,30,20,10,10,10,10 +7270,30,20,10,10,10,10 +7280,30,20,10,10,10,10 +7290,30,20,10,10,10,10 +7300,30,20,10,10,10,10 +7310,30,20,10,10,10,10 +7320,30,20,10,10,10,10 +7330,30,20,10,10,10,10 +7340,30,20,10,10,10,10 +7350,30,20,10,10,10,10 +7360,30,20,10,10,10,10 +7370,30,20,10,10,10,10 +7380,30,20,10,10,10,10 +7390,30,20,10,10,10,10 +7400,30,20,10,10,10,10 +7410,30,20,10,10,10,10 +7420,30,20,10,10,10,10 +7430,30,20,10,10,10,10 +7440,30,20,10,10,10,10 +7450,30,20,10,10,10,10 +7460,30,20,10,10,10,10 +7470,30,20,10,10,10,10 +7480,30,20,10,10,10,10 +7490,30,20,10,10,10,10 +7500,30,20,10,10,10,10 +7510,30,20,10,10,10,10 +7520,30,20,10,10,10,10 +7530,30,20,10,10,10,10 +7540,30,20,10,10,10,10 +7550,30,20,10,10,10,10 +7560,30,20,10,10,10,10 +7570,30,20,10,10,10,10 +7580,30,20,10,10,10,10 +7590,30,20,10,10,10,10 +7600,30,20,10,10,10,10 +7610,30,20,10,10,10,10 +7620,30,20,10,10,10,10 +7630,30,20,10,10,10,10 +7640,30,20,10,10,10,10 +7650,30,20,10,10,10,10 +7660,30,20,10,10,10,10 +7670,30,20,10,10,10,10 +7680,30,20,10,10,10,10 +7690,30,20,10,10,10,10 +7700,30,20,10,10,10,10 +7710,30,20,10,10,10,10 +7720,30,20,10,10,10,10 +7730,30,20,10,10,10,10 +7740,30,20,10,10,10,10 +7750,30,20,10,10,10,10 +7760,30,20,10,10,10,10 +7770,30,20,10,10,10,10 +7780,30,20,10,10,10,10 +7790,30,20,10,10,10,10 +7800,30,20,10,10,10,10 +7810,30,20,10,10,10,10 +7820,30,20,10,10,10,10 +7830,30,20,10,10,10,10 +7840,30,20,10,10,10,10 +7850,30,20,10,10,10,10 +7860,30,20,10,10,10,10 +7870,30,20,10,10,10,10 +7880,30,20,10,10,10,10 +7890,30,20,10,10,10,10 +7900,30,20,10,10,10,10 +7910,30,20,10,10,10,10 +7920,30,20,10,10,10,10 +7930,30,20,10,10,10,10 +7940,30,20,10,10,10,10 +7950,30,20,10,10,10,10 +7960,30,20,10,10,10,10 +7970,30,20,10,10,10,10 +7980,30,20,10,10,10,10 +7990,30,20,10,10,10,10 +8000,30,20,10,10,10,10 +8010,30,20,10,10,10,10 +8020,30,20,10,10,10,10 +8030,30,20,10,10,10,10 +8040,30,20,10,10,10,10 +8050,30,20,10,10,10,10 +8060,30,20,10,10,10,10 +8070,30,20,10,10,10,10 +8080,30,20,10,10,10,10 +8090,30,20,10,10,10,10 +8100,30,20,10,10,10,10 +8110,30,20,10,10,10,10 +8120,30,20,10,10,10,10 +8130,30,20,10,10,10,10 +8140,30,20,10,10,10,10 +8150,30,20,10,10,10,10 +8160,30,20,10,10,10,10 +8170,30,20,10,10,10,10 +8180,30,20,10,10,10,10 +8190,30,20,10,10,10,10 +8200,30,20,10,10,10,10 +8210,30,20,10,10,10,10 +8220,30,20,10,10,10,10 +8230,30,20,10,10,10,10 +8240,30,20,10,10,10,10 +8250,30,20,10,10,10,10 +8260,30,20,10,10,10,10 +8270,30,20,10,10,10,10 +8280,30,20,10,10,10,10 +8290,30,20,10,10,10,10 +8300,30,20,10,10,10,10 +8310,30,20,10,10,10,10 +8320,30,20,10,10,10,10 +8330,30,20,10,10,10,10 +8340,30,20,10,10,10,10 +8350,30,20,10,10,10,10 +8360,30,20,10,10,10,10 +8370,30,20,10,10,10,10 +8380,30,20,10,10,10,10 +8390,30,20,10,10,10,10 +8400,30,20,10,10,10,10 +8410,30,20,10,10,10,10 +8420,30,20,10,10,10,10 +8430,30,20,10,10,10,10 +8440,30,20,10,10,10,10 +8450,30,20,10,10,10,10 +8460,30,20,10,10,10,10 +8470,30,20,10,10,10,10 +8480,30,20,10,10,10,10 +8490,30,20,10,10,10,10 +8500,30,20,10,10,10,10 +8510,30,20,10,10,10,10 +8520,30,20,10,10,10,10 +8530,30,20,10,10,10,10 +8540,30,20,10,10,10,10 +8550,30,20,10,10,10,10 +8560,30,20,10,10,10,10 +8570,30,20,10,10,10,10 +8580,30,20,10,10,10,10 +8590,30,20,10,10,10,10 +8600,30,20,10,10,10,10 +8610,30,20,10,10,10,10 +8620,30,20,10,10,10,10 +8630,30,20,10,10,10,10 +8640,30,20,10,10,10,10 +8650,30,20,10,10,10,10 +8660,30,20,10,10,10,10 +8670,30,20,10,10,10,10 +8680,30,20,10,10,10,10 +8690,30,20,10,10,10,10 +8700,30,20,10,10,10,10 +8710,30,20,10,10,10,10 +8720,30,20,10,10,10,10 +8730,30,20,10,10,10,10 +8740,30,20,10,10,10,10 +8750,30,20,10,10,10,10 +8760,30,20,10,10,10,10 +8770,30,20,10,10,10,10 +8780,30,20,10,10,10,10 +8790,30,20,10,10,10,10 +8800,30,20,10,10,10,10 +8810,30,20,10,10,10,10 +8820,30,20,10,10,10,10 +8830,30,20,10,10,10,10 +8840,30,20,10,10,10,10 +8850,30,20,10,10,10,10 +8860,30,20,10,10,10,10 +8870,30,20,10,10,10,10 +8880,30,20,10,10,10,10 +8890,30,20,10,10,10,10 +8900,30,20,10,10,10,10 +8910,30,20,10,10,10,10 +8920,30,20,10,10,10,10 +8930,30,20,10,10,10,10 +8940,30,20,10,10,10,10 +8950,30,20,10,10,10,10 +8960,30,20,10,10,10,10 +8970,30,20,10,10,10,10 +8980,30,20,10,10,10,10 +8990,30,20,10,10,10,10 +9000,30,20,10,10,10,10 +9010,30,20,10,10,10,10 +9020,30,20,10,10,10,10 +9030,30,20,10,10,10,10 +9040,30,20,10,10,10,10 +9050,30,20,10,10,10,10 +9060,30,20,10,10,10,10 +9070,30,20,10,10,10,10 +9080,30,20,10,10,10,10 +9090,30,20,10,10,10,10 +9100,30,20,10,10,10,10 +9110,30,20,10,10,10,10 +9120,30,20,10,10,10,10 +9130,30,20,10,10,10,10 +9140,30,20,10,10,10,10 +9150,30,20,10,10,10,10 +9160,30,20,10,10,10,10 +9170,30,20,10,10,10,10 +9180,30,20,10,10,10,10 +9190,30,20,10,10,10,10 +9200,30,20,10,10,10,10 +9210,30,20,10,10,10,10 +9220,30,20,10,10,10,10 +9230,30,20,10,10,10,10 +9240,30,20,10,10,10,10 +9250,30,20,10,10,10,10 +9260,30,20,10,10,10,10 +9270,30,20,10,10,10,10 +9280,30,20,10,10,10,10 +9290,30,20,10,10,10,10 +9300,30,20,10,10,10,10 +9310,30,20,10,10,10,10 +9320,30,20,10,10,10,10 +9330,30,20,10,10,10,10 +9340,30,20,10,10,10,10 +9350,30,20,10,10,10,10 +9360,30,20,10,10,10,10 +9370,30,20,10,10,10,10 +9380,30,20,10,10,10,10 +9390,30,20,10,10,10,10 +9400,30,20,10,10,10,10 +9410,30,20,10,10,10,10 +9420,30,20,10,10,10,10 +9430,30,20,10,10,10,10 +9440,30,20,10,10,10,10 +9450,30,20,10,10,10,10 +9460,30,20,10,10,10,10 +9470,30,20,10,10,10,10 +9480,30,20,10,10,10,10 +9490,30,20,10,10,10,10 +9500,30,20,10,10,10,10 +9510,30,20,10,10,10,10 +9520,30,20,10,10,10,10 +9530,30,20,10,10,10,10 +9540,30,20,10,10,10,10 +9550,30,20,10,10,10,10 +9560,30,20,10,10,10,10 +9570,30,20,10,10,10,10 +9580,30,20,10,10,10,10 +9590,30,20,10,10,10,10 +9600,30,20,10,10,10,10 +9610,30,20,10,10,10,10 +9620,30,20,10,10,10,10 +9630,30,20,10,10,10,10 +9640,30,20,10,10,10,10 +9650,30,20,10,10,10,10 +9660,30,20,10,10,10,10 +9670,30,20,10,10,10,10 +9680,30,20,10,10,10,10 +9690,30,20,10,10,10,10 +9700,30,20,10,10,10,10 +9710,30,20,10,10,10,10 +9720,30,20,10,10,10,10 +9730,30,20,10,10,10,10 +9740,30,20,10,10,10,10 +9750,30,20,10,10,10,10 +9760,30,20,10,10,10,10 +9770,30,20,10,10,10,10 +9780,30,20,10,10,10,10 +9790,30,20,10,10,10,10 +9800,30,20,10,10,10,10 +9810,30,20,10,10,10,10 +9820,30,20,10,10,10,10 +9830,30,20,10,10,10,10 +9840,30,20,10,10,10,10 +9850,30,20,10,10,10,10 +9860,30,20,10,10,10,10 +9870,30,20,10,10,10,10 +9880,30,20,10,10,10,10 +9890,30,20,10,10,10,10 +9900,30,20,10,10,10,10 +9910,30,20,10,10,10,10 +9920,30,20,10,10,10,10 +9930,30,20,10,10,10,10 +9940,30,20,10,10,10,10 +9950,30,20,10,10,10,10 +9960,30,20,10,10,10,10 +9970,30,20,10,10,10,10 +9980,30,20,10,10,10,10 +9990,30,20,10,10,10,10 +10000,30,20,10,10,10,10 +10010,30,20,10,10,10,10 +10020,30,20,10,10,10,10 +10030,30,20,10,10,10,10 +10040,30,20,10,10,10,10 +10050,30,20,10,10,10,10 +10060,30,20,10,10,10,10 +10070,30,20,10,10,10,10 +10080,30,20,10,10,10,10 +10090,30,20,10,10,10,10 +10100,30,20,10,10,10,10 diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20201224_fat.csv b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20201224_fat.csv new file mode 100644 index 0000000..e981b6d --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20201224_fat.csv @@ -0,0 +1,1013 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,0,1,1,100,1,5 +10,0,1,1,100,1,5 +20,0,1,1,100,1,5 +30,0,1,1,100,1,5 +40,0,1,1,100,1,5 +50,0,1,1,100,1,5 +60,0,1,1,100,1,5 +70,0,1,1,100,1,5 +80,0,1,1,100,1,5 +90,0,1,1,100,1,5 +100,0,1,1,100,1,5 +110,0,1,1,100,1,5 +120,0,1,1,100,1,5 +130,0,1,1,100,1,5 +140,0,1,1,100,1,5 +150,0,1,1,100,1,5 +160,0,1,1,100,1,5 +170,0,1,1,100,1,5 +180,0,1,1,100,1,5 +190,0,1,1,100,1,5 +200,0,1,1,100,1,5 +210,0,1,1,100,1,5 +220,0,1,1,100,1,5 +230,0,1,1,100,1,5 +240,0,1,1,100,1,5 +250,0,1,1,100,1,5 +260,0,1,1,100,1,5 +270,0,1,1,100,1,5 +280,0,1,1,100,1,5 +290,0,1,1,100,1,5 +300,0,1,1,100,1,5 +310,0,1,1,100,1,5 +320,0,1,1,100,1,5 +330,0,1,1,100,1,5 +340,0,1,1,100,1,5 +350,0,1,1,100,1,5 +360,0,1,1,100,1,5 +370,0,1,1,100,1,5 +380,0,1,1,100,1,5 +390,0,1,1,100,1,5 +400,0,1,1,100,1,5 +410,0,1,1,100,1,5 +420,0,1,1,100,1,5 +430,0,1,1,100,1,5 +440,0,1,1,100,1,5 +450,0,1,1,100,1,5 +460,0,1,1,100,1,5 +470,0,1,1,100,1,5 +480,0,1,1,100,1,5 +490,0,1,1,100,1,5 +500,0,1,1,100,1,5 +510,0,1,1,100,1,5 +520,0,1,1,100,1,5 +530,0,1,1,100,1,5 +540,0,1,1,100,1,5 +550,0,1,1,100,1,5 +560,0,1,1,100,1,5 +570,0,1,1,100,1,5 +580,0,1,1,100,1,5 +590,0,1,1,100,1,5 +600,0,1,1,100,1,5 +610,0,1,1,100,1,5 +620,0,1,1,100,1,5 +630,0,1,1,100,1,5 +640,0,1,1,100,1,5 +650,0,1,1,100,1,5 +660,0,1,1,100,1,5 +670,0,1,1,100,1,5 +680,0,1,1,100,1,5 +690,0,1,1,100,1,5 +700,0,1,1,100,1,5 +710,0,1,1,100,1,5 +720,0,1,1,100,1,5 +730,0,1,1,100,1,5 +740,0,1,1,100,1,5 +750,0,1,1,100,1,5 +760,0,1,1,100,1,5 +770,0,1,1,100,1,5 +780,0,1,1,100,1,5 +790,0,1,1,100,1,5 +800,0,1,1,100,1,5 +810,0,1,1,100,1,5 +820,0,1,1,100,1,5 +830,0,1,1,100,1,5 +840,0,1,1,100,1,5 +850,0,1,1,100,1,5 +860,0,1,1,100,1,5 +870,0,1,1,100,1,5 +880,0,1,1,100,1,5 +890,0,1,1,100,1,5 +900,0,1,1,100,1,5 +910,0,1,1,100,1,5 +920,0,1,1,100,1,5 +930,0,1,1,100,1,5 +940,0,1,1,100,1,5 +950,0,1,1,100,1,5 +960,0,1,1,100,1,5 +970,0,1,1,100,1,5 +980,0,1,1,100,1,5 +990,0,1,1,100,1,5 +1000,0,1,1,100,1,5 +1010,0,1,1,100,1,5 +1020,0,1,1,100,1,5 +1030,0,1,1,100,1,5 +1040,0,1,1,100,1,5 +1050,0,1,1,100,1,5 +1060,0,1,1,100,1,5 +1070,0,1,1,100,1,5 +1080,0,1,1,100,1,5 +1090,0,1,1,100,1,5 +1100,0,1,1,100,1,5 +1110,0,1,1,100,1,5 +1120,0,1,1,100,1,5 +1130,0,1,1,100,1,5 +1140,0,1,1,100,1,5 +1150,0,1,1,100,1,5 +1160,0,1,1,100,1,5 +1170,0,1,1,100,1,5 +1180,0,1,1,100,1,5 +1190,0,1,1,100,1,5 +1200,0,1,1,100,1,5 +1210,0,1,1,100,1,5 +1220,0,1,1,100,1,5 +1230,0,1,1,100,1,5 +1240,0,1,1,100,1,5 +1250,0,1,1,100,1,5 +1260,0,1,1,100,1,5 +1270,0,1,1,100,1,5 +1280,0,1,1,100,1,5 +1290,0,1,1,100,1,5 +1300,0,1,1,100,1,5 +1310,0,1,1,100,1,5 +1320,0,1,1,100,1,5 +1330,0,1,1,100,1,5 +1340,0,1,1,100,1,5 +1350,0,1,1,100,1,5 +1360,0,1,1,100,1,5 +1370,0,1,1,100,1,5 +1380,0,1,1,100,1,5 +1390,0,1,1,100,1,5 +1400,0,1,1,100,1,5 +1410,0,1,1,100,1,5 +1420,0,1,1,100,1,5 +1430,0,1,1,100,1,5 +1440,0,1,1,100,1,5 +1450,0,1,1,100,1,5 +1460,0,1,1,100,1,5 +1470,0,1,1,100,1,5 +1480,0,1,1,100,1,5 +1490,0,1,1,100,1,5 +1500,0,1,1,100,1,5 +1510,0,1,1,100,1,5 +1520,0,1,1,100,1,5 +1530,0,1,1,100,1,5 +1540,0,1,1,100,1,5 +1550,0,1,1,100,1,5 +1560,0,1,1,100,1,5 +1570,0,1,1,100,1,5 +1580,0,1,1,100,1,5 +1590,0,1,1,100,1,5 +1600,0,1,1,100,1,5 +1610,0,1,1,100,1,5 +1620,0,1,1,100,1,5 +1630,0,1,1,100,1,5 +1640,0,1,1,100,1,5 +1650,0,1,1,100,1,5 +1660,0,1,1,100,1,5 +1670,0,1,1,100,1,5 +1680,0,1,1,100,1,5 +1690,0,1,1,100,1,5 +1700,0,1,1,100,1,5 +1710,0,1,1,100,1,5 +1720,0,1,1,100,1,5 +1730,0,1,1,100,1,5 +1740,0,1,1,100,1,5 +1750,0,1,1,100,1,5 +1760,0,1,1,100,1,5 +1770,0,1,1,100,1,5 +1780,0,1,1,100,1,5 +1790,0,1,1,100,1,5 +1800,0,1,1,100,1,5 +1810,0,1,1,100,1,5 +1820,0,1,1,100,1,5 +1830,0,1,1,100,1,5 +1840,0,1,1,100,1,5 +1850,0,1,1,100,1,5 +1860,0,1,1,100,1,5 +1870,0,1,1,100,1,5 +1880,0,1,1,100,1,5 +1890,0,1,1,100,1,5 +1900,0,1,1,100,1,5 +1910,0,1,1,100,1,5 +1920,0,1,1,100,1,5 +1930,0,1,1,100,1,5 +1940,0,1,1,100,1,5 +1950,0,1,1,100,1,5 +1960,0,1,1,100,1,5 +1970,0,1,1,100,1,5 +1980,0,1,1,100,1,5 +1990,0,1,1,100,1,5 +2000,0,1,1,100,1,5 +2010,0,1,1,100,1,5 +2020,0,1,1,100,1,5 +2030,0,1,1,100,1,5 +2040,0,1,1,100,1,5 +2050,0,1,1,100,1,5 +2060,0,1,1,100,1,5 +2070,0,1,1,100,1,5 +2080,0,1,1,100,1,5 +2090,0,1,1,100,1,5 +2100,0,1,1,100,1,5 +2110,0,1,1,100,1,5 +2120,0,1,1,100,1,5 +2130,0,1,1,100,1,5 +2140,0,1,1,100,1,5 +2150,0,1,1,100,1,5 +2160,0,1,1,100,1,5 +2170,0,1,1,100,1,5 +2180,0,1,1,100,1,5 +2190,0,1,1,100,1,5 +2200,0,1,1,100,1,5 +2210,0,1,1,100,1,5 +2220,0,1,1,100,1,5 +2230,0,1,1,100,1,5 +2240,0,1,1,100,1,5 +2250,0,1,1,100,1,5 +2260,0,1,1,100,1,5 +2270,0,1,1,100,1,5 +2280,0,1,1,100,1,5 +2290,0,1,1,100,1,5 +2300,0,1,1,100,1,5 +2310,0,1,1,100,1,5 +2320,0,1,1,100,1,5 +2330,0,1,1,100,1,5 +2340,0,1,1,100,1,5 +2350,0,1,1,100,1,5 +2360,0,1,1,100,1,5 +2370,0,1,1,100,1,5 +2380,0,1,1,100,1,5 +2390,0,1,1,100,1,5 +2400,0,1,1,100,1,5 +2410,0,1,1,100,1,5 +2420,0,1,1,100,1,5 +2430,0,1,1,100,1,5 +2440,0,1,1,100,1,5 +2450,0,1,1,100,1,5 +2460,0,1,1,100,1,5 +2470,0,1,1,100,1,5 +2480,0,1,1,100,1,5 +2490,0,1,1,100,1,5 +2500,0,1,1,100,1,5 +2510,0,1,1,100,1,5 +2520,0,1,1,100,1,5 +2530,0,1,1,100,1,5 +2540,0,1,1,100,1,5 +2550,0,1,1,100,1,5 +2560,0,1,1,100,1,5 +2570,0,1,1,100,1,5 +2580,0,1,1,100,1,5 +2590,0,1,1,100,1,5 +2600,0,1,1,100,1,5 +2610,0,1,1,100,1,5 +2620,0,1,1,100,1,5 +2630,0,1,1,100,1,5 +2640,0,1,1,100,1,5 +2650,0,1,1,100,1,5 +2660,0,1,1,100,1,5 +2670,0,1,1,100,1,5 +2680,0,1,1,100,1,5 +2690,0,1,1,100,1,5 +2700,0,1,1,100,1,5 +2710,0,1,1,100,1,5 +2720,0,1,1,100,1,5 +2730,0,1,1,100,1,5 +2740,0,1,1,100,1,5 +2750,0,1,1,100,1,5 +2760,0,1,1,100,1,5 +2770,0,1,1,100,1,5 +2780,0,1,1,100,1,5 +2790,0,1,1,100,1,5 +2800,0,1,1,100,1,5 +2810,0,1,1,100,1,5 +2820,0,1,1,100,1,5 +2830,0,1,1,100,1,5 +2840,0,1,1,100,1,5 +2850,0,1,1,100,1,5 +2860,0,1,1,100,1,5 +2870,0,1,1,100,1,5 +2880,0,1,1,100,1,5 +2890,0,1,1,100,1,5 +2900,0,1,1,100,1,5 +2910,0,1,1,100,1,5 +2920,0,1,1,100,1,5 +2930,0,1,1,100,1,5 +2940,0,1,1,100,1,5 +2950,0,1,1,100,1,5 +2960,0,1,1,100,1,5 +2970,0,1,1,100,1,5 +2980,0,1,1,100,1,5 +2990,0,1,1,100,1,5 +3000,0,1,1,100,1,5 +3010,0,1,1,100,1,5 +3020,0,1,1,100,1,5 +3030,0,1,1,100,1,5 +3040,0,1,1,100,1,5 +3050,0,1,1,100,1,5 +3060,0,1,1,100,1,5 +3070,0,1,1,100,1,5 +3080,0,1,1,100,1,5 +3090,0,1,1,100,1,5 +3100,0,1,1,100,1,5 +3110,0,1,1,100,1,5 +3120,0,1,1,100,1,5 +3130,0,1,1,100,1,5 +3140,0,1,1,100,1,5 +3150,0,1,1,100,1,5 +3160,0,1,1,100,1,5 +3170,0,1,1,100,1,5 +3180,0,1,1,100,1,5 +3190,0,1,1,100,1,5 +3200,0,1,1,100,1,5 +3210,0,1,1,100,1,5 +3220,0,1,1,100,1,5 +3230,0,1,1,100,1,5 +3240,0,1,1,100,1,5 +3250,0,1,1,100,1,5 +3260,0,1,1,100,1,5 +3270,0,1,1,100,1,5 +3280,0,1,1,100,1,5 +3290,0,1,1,100,1,5 +3300,0,1,1,100,1,5 +3310,0,1,1,100,1,5 +3320,0,1,1,100,1,5 +3330,0,1,1,100,1,5 +3340,0,1,1,100,1,5 +3350,0,1,1,100,1,5 +3360,0,1,1,100,1,5 +3370,0,1,1,100,1,5 +3380,0,1,1,100,1,5 +3390,0,1,1,100,1,5 +3400,0,1,1,100,1,5 +3410,0,1,1,100,1,5 +3420,0,1,1,100,1,5 +3430,0,1,1,100,1,5 +3440,0,1,1,100,1,5 +3450,0,1,1,100,1,5 +3460,0,1,1,100,1,5 +3470,0,1,1,100,1,5 +3480,0,1,1,100,1,5 +3490,0,1,1,100,1,5 +3500,0,1,1,100,1,5 +3510,0,1,1,100,1,5 +3520,0,1,1,100,1,5 +3530,0,1,1,100,1,5 +3540,0,1,1,100,1,5 +3550,0,1,1,100,1,5 +3560,0,1,1,100,1,5 +3570,0,1,1,100,1,5 +3580,0,1,1,100,1,5 +3590,0,1,1,100,1,5 +3600,0,1,1,100,1,5 +3610,0,1,1,100,1,5 +3620,0,1,1,100,1,5 +3630,0,1,1,100,1,5 +3640,0,1,1,100,1,5 +3650,0,1,1,100,1,5 +3660,0,1,1,100,1,5 +3670,0,1,1,100,1,5 +3680,0,1,1,100,1,5 +3690,0,1,1,100,1,5 +3700,0,1,1,100,1,5 +3710,0,1,1,100,1,5 +3720,0,1,1,100,1,5 +3730,0,1,1,100,1,5 +3740,0,1,1,100,1,5 +3750,0,1,1,100,1,5 +3760,0,1,1,100,1,5 +3770,0,1,1,100,1,5 +3780,0,1,1,100,1,5 +3790,0,1,1,100,1,5 +3800,0,1,1,100,1,5 +3810,0,1,1,100,1,5 +3820,0,1,1,100,1,5 +3830,0,1,1,100,1,5 +3840,0,1,1,100,1,5 +3850,0,1,1,100,1,5 +3860,0,1,1,100,1,5 +3870,0,1,1,100,1,5 +3880,0,1,1,100,1,5 +3890,0,1,1,100,1,5 +3900,0,1,1,100,1,5 +3910,0,1,1,100,1,5 +3920,0,1,1,100,1,5 +3930,0,1,1,100,1,5 +3940,0,1,1,100,1,5 +3950,0,1,1,100,1,5 +3960,0,1,1,100,1,5 +3970,0,1,1,100,1,5 +3980,0,1,1,100,1,5 +3990,0,1,1,100,1,5 +4000,0,1,1,100,1,5 +4010,0,1,1,100,1,5 +4020,0,1,1,100,1,5 +4030,0,1,1,100,1,5 +4040,0,1,1,100,1,5 +4050,0,1,1,100,1,5 +4060,0,1,1,100,1,5 +4070,0,1,1,100,1,5 +4080,0,1,1,100,1,5 +4090,0,1,1,100,1,5 +4100,0,1,1,100,1,5 +4110,0,1,1,100,1,5 +4120,0,1,1,100,1,5 +4130,0,1,1,100,1,5 +4140,0,1,1,100,1,5 +4150,0,1,1,100,1,5 +4160,0,1,1,100,1,5 +4170,0,1,1,100,1,5 +4180,0,1,1,100,1,5 +4190,0,1,1,100,1,5 +4200,0,1,1,100,1,5 +4210,0,1,1,100,1,5 +4220,0,1,1,100,1,5 +4230,0,1,1,100,1,5 +4240,0,1,1,100,1,5 +4250,0,1,1,100,1,5 +4260,0,1,1,100,1,5 +4270,0,1,1,100,1,5 +4280,0,1,1,100,1,5 +4290,0,1,1,100,1,5 +4300,0,1,1,100,1,5 +4310,0,1,1,100,1,5 +4320,0,1,1,100,1,5 +4330,0,1,1,100,1,5 +4340,0,1,1,100,1,5 +4350,0,1,1,100,1,5 +4360,0,1,1,100,1,5 +4370,0,1,1,100,1,5 +4380,0,1,1,100,1,5 +4390,0,1,1,100,1,5 +4400,0,1,1,100,1,5 +4410,0,1,1,100,1,5 +4420,0,1,1,100,1,5 +4430,0,1,1,100,1,5 +4440,0,1,1,100,1,5 +4450,0,1,1,100,1,5 +4460,0,1,1,100,1,5 +4470,0,1,1,100,1,5 +4480,0,1,1,100,1,5 +4490,0,1,1,100,1,5 +4500,0,1,1,100,1,5 +4510,0,1,1,100,1,5 +4520,0,1,1,100,1,5 +4530,0,1,1,100,1,5 +4540,0,1,1,100,1,5 +4550,0,1,1,100,1,5 +4560,0,1,1,100,1,5 +4570,0,1,1,100,1,5 +4580,0,1,1,100,1,5 +4590,0,1,1,100,1,5 +4600,0,1,1,100,1,5 +4610,0,1,1,100,1,5 +4620,0,1,1,100,1,5 +4630,0,1,1,100,1,5 +4640,0,1,1,100,1,5 +4650,0,1,1,100,1,5 +4660,0,1,1,100,1,5 +4670,0,1,1,100,1,5 +4680,0,1,1,100,1,5 +4690,0,1,1,100,1,5 +4700,0,1,1,100,1,5 +4710,0,1,1,100,1,5 +4720,0,1,1,100,1,5 +4730,0,1,1,100,1,5 +4740,0,1,1,100,1,5 +4750,0,1,1,100,1,5 +4760,0,1,1,100,1,5 +4770,0,1,1,100,1,5 +4780,0,1,1,100,1,5 +4790,0,1,1,100,1,5 +4800,0,1,1,100,1,5 +4810,0,1,1,100,1,5 +4820,0,1,1,100,1,5 +4830,0,1,1,100,1,5 +4840,0,1,1,100,1,5 +4850,0,1,1,100,1,5 +4860,0,1,1,100,1,5 +4870,0,1,1,100,1,5 +4880,0,1,1,100,1,5 +4890,0,1,1,100,1,5 +4900,0,1,1,100,1,5 +4910,0,1,1,100,1,5 +4920,0,1,1,100,1,5 +4930,0,1,1,100,1,5 +4940,0,1,1,100,1,5 +4950,0,1,1,100,1,5 +4960,0,1,1,100,1,5 +4970,0,1,1,100,1,5 +4980,0,1,1,100,1,5 +4990,0,1,1,100,1,5 +5000,0,2,2,100,1,5 +5010,0,2,2,100,1,5 +5020,0,2,2,100,1,5 +5030,0,2,2,100,1,5 +5040,0,2,2,100,1,5 +5050,0,2,2,100,1,5 +5060,0,2,2,100,1,5 +5070,0,2,2,100,1,5 +5080,0,2,2,100,1,5 +5090,0,2,2,100,1,5 +5100,0,2,2,100,1,5 +5110,0,2,2,100,1,5 +5120,0,2,2,100,1,5 +5130,0,2,2,100,1,5 +5140,0,2,2,100,1,5 +5150,0,2,2,100,1,5 +5160,0,2,2,100,1,5 +5170,0,2,2,100,1,5 +5180,0,2,2,100,1,5 +5190,0,2,2,100,1,5 +5200,0,2,2,100,1,5 +5210,0,2,2,100,1,5 +5220,0,2,2,100,1,5 +5230,0,2,2,100,1,5 +5240,0,2,2,100,1,5 +5250,0,2,2,100,1,5 +5260,0,2,2,100,1,5 +5270,0,2,2,100,1,5 +5280,0,2,2,100,1,5 +5290,0,2,2,100,1,5 +5300,0,2,2,100,1,5 +5310,0,2,2,100,1,5 +5320,0,2,2,100,1,5 +5330,0,2,2,100,1,5 +5340,0,2,2,100,1,5 +5350,0,2,2,100,1,5 +5360,0,2,2,100,1,5 +5370,0,2,2,100,1,5 +5380,0,2,2,100,1,5 +5390,0,2,2,100,1,5 +5400,0,2,2,100,1,5 +5410,0,2,2,100,1,5 +5420,0,2,2,100,1,5 +5430,0,2,2,100,1,5 +5440,0,2,2,100,1,5 +5450,0,2,2,100,1,5 +5460,0,2,2,100,1,5 +5470,0,2,2,100,1,5 +5480,0,2,2,100,1,5 +5490,0,2,2,100,1,5 +5500,0,2,2,100,1,5 +5510,0,2,2,100,1,5 +5520,0,2,2,100,1,5 +5530,0,2,2,100,1,5 +5540,0,2,2,100,1,5 +5550,0,2,2,100,1,5 +5560,0,2,2,100,1,5 +5570,0,2,2,100,1,5 +5580,0,2,2,100,1,5 +5590,0,2,2,100,1,5 +5600,0,2,2,100,1,5 +5610,0,2,2,100,1,5 +5620,0,2,2,100,1,5 +5630,0,2,2,100,1,5 +5640,0,2,2,100,1,5 +5650,0,2,2,100,1,5 +5660,0,2,2,100,1,5 +5670,0,2,2,100,1,5 +5680,0,2,2,100,1,5 +5690,0,2,2,100,1,5 +5700,0,2,2,100,1,5 +5710,0,2,2,100,1,5 +5720,0,2,2,100,1,5 +5730,0,2,2,100,1,5 +5740,0,2,2,100,1,5 +5750,0,2,2,100,1,5 +5760,0,2,2,100,1,5 +5770,0,2,2,100,1,5 +5780,0,2,2,100,1,5 +5790,0,2,2,100,1,5 +5800,0,2,2,100,1,5 +5810,0,2,2,100,1,5 +5820,0,2,2,100,1,5 +5830,0,2,2,100,1,5 +5840,0,2,2,100,1,5 +5850,0,2,2,100,1,5 +5860,0,2,2,100,1,5 +5870,0,2,2,100,1,5 +5880,0,2,2,100,1,5 +5890,0,2,2,100,1,5 +5900,0,2,2,100,1,5 +5910,0,2,2,100,1,5 +5920,0,2,2,100,1,5 +5930,0,2,2,100,1,5 +5940,0,2,2,100,1,5 +5950,0,2,2,100,1,5 +5960,0,2,2,100,1,5 +5970,0,2,2,100,1,5 +5980,0,2,2,100,1,5 +5990,0,2,2,100,1,5 +6000,0,2,2,100,1,5 +6010,0,2,2,100,1,5 +6020,0,2,2,100,1,5 +6030,0,2,2,100,1,5 +6040,0,2,2,100,1,5 +6050,0,2,2,100,1,5 +6060,0,2,2,100,1,5 +6070,0,2,2,100,1,5 +6080,0,2,2,100,1,5 +6090,0,2,2,100,1,5 +6100,0,2,2,100,1,5 +6110,0,2,2,100,1,5 +6120,0,2,2,100,1,5 +6130,0,2,2,100,1,5 +6140,0,2,2,100,1,5 +6150,0,2,2,100,1,5 +6160,0,2,2,100,1,5 +6170,0,2,2,100,1,5 +6180,0,2,2,100,1,5 +6190,0,2,2,100,1,5 +6200,0,2,2,100,1,5 +6210,0,2,2,100,1,5 +6220,0,2,2,100,1,5 +6230,0,2,2,100,1,5 +6240,0,2,2,100,1,5 +6250,0,2,2,100,1,5 +6260,0,2,2,100,1,5 +6270,0,2,2,100,1,5 +6280,0,2,2,100,1,5 +6290,0,2,2,100,1,5 +6300,0,2,2,100,1,5 +6310,0,2,2,100,1,5 +6320,0,2,2,100,1,5 +6330,0,2,2,100,1,5 +6340,0,2,2,100,1,5 +6350,0,2,2,100,1,5 +6360,0,2,2,100,1,5 +6370,0,2,2,100,1,5 +6380,0,2,2,100,1,5 +6390,0,2,2,100,1,5 +6400,0,2,2,100,1,5 +6410,0,2,2,100,1,5 +6420,0,2,2,100,1,5 +6430,0,2,2,100,1,5 +6440,0,2,2,100,1,5 +6450,0,2,2,100,1,5 +6460,0,2,2,100,1,5 +6470,0,2,2,100,1,5 +6480,0,2,2,100,1,5 +6490,0,2,2,100,1,5 +6500,0,2,2,100,1,5 +6510,0,2,2,100,1,5 +6520,0,2,2,100,1,5 +6530,0,2,2,100,1,5 +6540,0,2,2,100,1,5 +6550,0,2,2,100,1,5 +6560,0,2,2,100,1,5 +6570,0,2,2,100,1,5 +6580,0,2,2,100,1,5 +6590,0,2,2,100,1,5 +6600,0,2,2,100,1,5 +6610,0,2,2,100,1,5 +6620,0,2,2,100,1,5 +6630,0,2,2,100,1,5 +6640,0,2,2,100,1,5 +6650,0,2,2,100,1,5 +6660,0,2,2,100,1,5 +6670,0,2,2,100,1,5 +6680,0,2,2,100,1,5 +6690,0,2,2,100,1,5 +6700,0,2,2,100,1,5 +6710,0,2,2,100,1,5 +6720,0,2,2,100,1,5 +6730,0,2,2,100,1,5 +6740,0,2,2,100,1,5 +6750,0,2,2,100,1,5 +6760,0,2,2,100,1,5 +6770,0,2,2,100,1,5 +6780,0,2,2,100,1,5 +6790,0,2,2,100,1,5 +6800,0,2,2,100,1,5 +6810,0,2,2,100,1,5 +6820,0,2,2,100,1,5 +6830,0,2,2,100,1,5 +6840,0,2,2,100,1,5 +6850,0,2,2,100,1,5 +6860,0,2,2,100,1,5 +6870,0,2,2,100,1,5 +6880,0,2,2,100,1,5 +6890,0,2,2,100,1,5 +6900,0,2,2,100,1,5 +6910,0,2,2,100,1,5 +6920,0,2,2,100,1,5 +6930,0,2,2,100,1,5 +6940,0,2,2,100,1,5 +6950,0,2,2,100,1,5 +6960,0,2,2,100,1,5 +6970,0,2,2,100,1,5 +6980,0,2,2,100,1,5 +6990,0,2,2,100,1,5 +7000,0,2,2,100,1,5 +7010,0,2,2,100,1,5 +7020,0,2,2,100,1,5 +7030,0,2,2,100,1,5 +7040,0,2,2,100,1,5 +7050,0,2,2,100,1,5 +7060,0,2,2,100,1,5 +7070,0,2,2,100,1,5 +7080,0,2,2,100,1,5 +7090,0,2,2,100,1,5 +7100,0,2,2,100,1,5 +7110,0,2,2,100,1,5 +7120,0,2,2,100,1,5 +7130,0,2,2,100,1,5 +7140,0,2,2,100,1,5 +7150,0,2,2,100,1,5 +7160,0,2,2,100,1,5 +7170,0,2,2,100,1,5 +7180,0,2,2,100,1,5 +7190,0,2,2,100,1,5 +7200,0,2,2,100,1,5 +7210,0,2,2,100,1,5 +7220,0,2,2,100,1,5 +7230,0,2,2,100,1,5 +7240,0,2,2,100,1,5 +7250,0,2,2,100,1,5 +7260,0,2,2,100,1,5 +7270,0,2,2,100,1,5 +7280,0,2,2,100,1,5 +7290,0,2,2,100,1,5 +7300,0,2,2,100,1,5 +7310,0,2,2,100,1,5 +7320,0,2,2,100,1,5 +7330,0,2,2,100,1,5 +7340,0,2,2,100,1,5 +7350,0,2,2,100,1,5 +7360,0,2,2,100,1,5 +7370,0,2,2,100,1,5 +7380,0,2,2,100,1,5 +7390,0,2,2,100,1,5 +7400,0,2,2,100,1,5 +7410,0,2,2,100,1,5 +7420,0,2,2,100,1,5 +7430,0,2,2,100,1,5 +7440,0,2,2,100,1,5 +7450,0,2,2,100,1,5 +7460,0,2,2,100,1,5 +7470,0,2,2,100,1,5 +7480,0,2,2,100,1,5 +7490,0,2,2,100,1,5 +7500,0,2,2,100,1,5 +7510,0,2,2,100,1,5 +7520,0,2,2,100,1,5 +7530,0,2,2,100,1,5 +7540,0,2,2,100,1,5 +7550,0,2,2,100,1,5 +7560,0,2,2,100,1,5 +7570,0,2,2,100,1,5 +7580,0,2,2,100,1,5 +7590,0,2,2,100,1,5 +7600,0,2,2,100,1,5 +7610,0,2,2,100,1,5 +7620,0,2,2,100,1,5 +7630,0,2,2,100,1,5 +7640,0,2,2,100,1,5 +7650,0,2,2,100,1,5 +7660,0,2,2,100,1,5 +7670,0,2,2,100,1,5 +7680,0,2,2,100,1,5 +7690,0,2,2,100,1,5 +7700,0,2,2,100,1,5 +7710,0,2,2,100,1,5 +7720,0,2,2,100,1,5 +7730,0,2,2,100,1,5 +7740,0,2,2,100,1,5 +7750,0,2,2,100,1,5 +7760,0,2,2,100,1,5 +7770,0,2,2,100,1,5 +7780,0,2,2,100,1,5 +7790,0,2,2,100,1,5 +7800,0,2,2,100,1,5 +7810,0,2,2,100,1,5 +7820,0,2,2,100,1,5 +7830,0,2,2,100,1,5 +7840,0,2,2,100,1,5 +7850,0,2,2,100,1,5 +7860,0,2,2,100,1,5 +7870,0,2,2,100,1,5 +7880,0,2,2,100,1,5 +7890,0,2,2,100,1,5 +7900,0,2,2,100,1,5 +7910,0,2,2,100,1,5 +7920,0,2,2,100,1,5 +7930,0,2,2,100,1,5 +7940,0,2,2,100,1,5 +7950,0,2,2,100,1,5 +7960,0,2,2,100,1,5 +7970,0,2,2,100,1,5 +7980,0,2,2,100,1,5 +7990,0,2,2,100,1,5 +8000,0,2,2,100,1,5 +8010,0,2,2,100,1,5 +8020,0,2,2,100,1,5 +8030,0,2,2,100,1,5 +8040,0,2,2,100,1,5 +8050,0,2,2,100,1,5 +8060,0,2,2,100,1,5 +8070,0,2,2,100,1,5 +8080,0,2,2,100,1,5 +8090,0,2,2,100,1,5 +8100,0,2,2,100,1,5 +8110,0,2,2,100,1,5 +8120,0,2,2,100,1,5 +8130,0,2,2,100,1,5 +8140,0,2,2,100,1,5 +8150,0,2,2,100,1,5 +8160,0,2,2,100,1,5 +8170,0,2,2,100,1,5 +8180,0,2,2,100,1,5 +8190,0,2,2,100,1,5 +8200,0,2,2,100,1,5 +8210,0,2,2,100,1,5 +8220,0,2,2,100,1,5 +8230,0,2,2,100,1,5 +8240,0,2,2,100,1,5 +8250,0,2,2,100,1,5 +8260,0,2,2,100,1,5 +8270,0,2,2,100,1,5 +8280,0,2,2,100,1,5 +8290,0,2,2,100,1,5 +8300,0,2,2,100,1,5 +8310,0,2,2,100,1,5 +8320,0,2,2,100,1,5 +8330,0,2,2,100,1,5 +8340,0,2,2,100,1,5 +8350,0,2,2,100,1,5 +8360,0,2,2,100,1,5 +8370,0,2,2,100,1,5 +8380,0,2,2,100,1,5 +8390,0,2,2,100,1,5 +8400,0,2,2,100,1,5 +8410,0,2,2,100,1,5 +8420,0,2,2,100,1,5 +8430,0,2,2,100,1,5 +8440,0,2,2,100,1,5 +8450,0,2,2,100,1,5 +8460,0,2,2,100,1,5 +8470,0,2,2,100,1,5 +8480,0,2,2,100,1,5 +8490,0,2,2,100,1,5 +8500,0,2,2,100,1,5 +8510,0,2,2,100,1,5 +8520,0,2,2,100,1,5 +8530,0,2,2,100,1,5 +8540,0,2,2,100,1,5 +8550,0,2,2,100,1,5 +8560,0,2,2,100,1,5 +8570,0,2,2,100,1,5 +8580,0,2,2,100,1,5 +8590,0,2,2,100,1,5 +8600,0,2,2,100,1,5 +8610,0,2,2,100,1,5 +8620,0,2,2,100,1,5 +8630,0,2,2,100,1,5 +8640,0,2,2,100,1,5 +8650,0,2,2,100,1,5 +8660,0,2,2,100,1,5 +8670,0,2,2,100,1,5 +8680,0,2,2,100,1,5 +8690,0,2,2,100,1,5 +8700,0,2,2,100,1,5 +8710,0,2,2,100,1,5 +8720,0,2,2,100,1,5 +8730,0,2,2,100,1,5 +8740,0,2,2,100,1,5 +8750,0,2,2,100,1,5 +8760,0,2,2,100,1,5 +8770,0,2,2,100,1,5 +8780,0,2,2,100,1,5 +8790,0,2,2,100,1,5 +8800,0,2,2,100,1,5 +8810,0,2,2,100,1,5 +8820,0,2,2,100,1,5 +8830,0,2,2,100,1,5 +8840,0,2,2,100,1,5 +8850,0,2,2,100,1,5 +8860,0,2,2,100,1,5 +8870,0,2,2,100,1,5 +8880,0,2,2,100,1,5 +8890,0,2,2,100,1,5 +8900,0,2,2,100,1,5 +8910,0,2,2,100,1,5 +8920,0,2,2,100,1,5 +8930,0,2,2,100,1,5 +8940,0,2,2,100,1,5 +8950,0,2,2,100,1,5 +8960,0,2,2,100,1,5 +8970,0,2,2,100,1,5 +8980,0,2,2,100,1,5 +8990,0,2,2,100,1,5 +9000,0,2,2,100,1,5 +9010,0,2,2,100,1,5 +9020,0,2,2,100,1,5 +9030,0,2,2,100,1,5 +9040,0,2,2,100,1,5 +9050,0,2,2,100,1,5 +9060,0,2,2,100,1,5 +9070,0,2,2,100,1,5 +9080,0,2,2,100,1,5 +9090,0,2,2,100,1,5 +9100,0,2,2,100,1,5 +9110,0,2,2,100,1,5 +9120,0,2,2,100,1,5 +9130,0,2,2,100,1,5 +9140,0,2,2,100,1,5 +9150,0,2,2,100,1,5 +9160,0,2,2,100,1,5 +9170,0,2,2,100,1,5 +9180,0,2,2,100,1,5 +9190,0,2,2,100,1,5 +9200,0,2,2,100,1,5 +9210,0,2,2,100,1,5 +9220,0,2,2,100,1,5 +9230,0,2,2,100,1,5 +9240,0,2,2,100,1,5 +9250,0,2,2,100,1,5 +9260,0,2,2,100,1,5 +9270,0,2,2,100,1,5 +9280,0,2,2,100,1,5 +9290,0,2,2,100,1,5 +9300,0,2,2,100,1,5 +9310,0,2,2,100,1,5 +9320,0,2,2,100,1,5 +9330,0,2,2,100,1,5 +9340,0,2,2,100,1,5 +9350,0,2,2,100,1,5 +9360,0,2,2,100,1,5 +9370,0,2,2,100,1,5 +9380,0,2,2,100,1,5 +9390,0,2,2,100,1,5 +9400,0,2,2,100,1,5 +9410,0,2,2,100,1,5 +9420,0,2,2,100,1,5 +9430,0,2,2,100,1,5 +9440,0,2,2,100,1,5 +9450,0,2,2,100,1,5 +9460,0,2,2,100,1,5 +9470,0,2,2,100,1,5 +9480,0,2,2,100,1,5 +9490,0,2,2,100,1,5 +9500,0,2,2,100,1,5 +9510,0,2,2,100,1,5 +9520,0,2,2,100,1,5 +9530,0,2,2,100,1,5 +9540,0,2,2,100,1,5 +9550,0,2,2,100,1,5 +9560,0,2,2,100,1,5 +9570,0,2,2,100,1,5 +9580,0,2,2,100,1,5 +9590,0,2,2,100,1,5 +9600,0,2,2,100,1,5 +9610,0,2,2,100,1,5 +9620,0,2,2,100,1,5 +9630,0,2,2,100,1,5 +9640,0,2,2,100,1,5 +9650,0,2,2,100,1,5 +9660,0,2,2,100,1,5 +9670,0,2,2,100,1,5 +9680,0,2,2,100,1,5 +9690,0,2,2,100,1,5 +9700,0,2,2,100,1,5 +9710,0,2,2,100,1,5 +9720,0,2,2,100,1,5 +9730,0,2,2,100,1,5 +9740,0,2,2,100,1,5 +9750,0,2,2,100,1,5 +9760,0,2,2,100,1,5 +9770,0,2,2,100,1,5 +9780,0,2,2,100,1,5 +9790,0,2,2,100,1,5 +9800,0,2,2,100,1,5 +9810,0,2,2,100,1,5 +9820,0,2,2,100,1,5 +9830,0,2,2,100,1,5 +9840,0,2,2,100,1,5 +9850,0,2,2,100,1,5 +9860,0,2,2,100,1,5 +9870,0,2,2,100,1,5 +9880,0,2,2,100,1,5 +9890,0,2,2,100,1,5 +9900,0,2,2,100,1,5 +9910,0,2,2,100,1,5 +9920,0,2,2,100,1,5 +9930,0,2,2,100,1,5 +9940,0,2,2,100,1,5 +9950,0,2,2,100,1,5 +9960,0,2,2,100,1,5 +9970,0,2,2,100,1,5 +9980,0,2,2,100,1,5 +9990,0,2,2,100,1,5 +10000,0,2,2,100,1,5 +10010,0,2,2,100,1,5 +10020,0,2,2,100,1,5 +10030,0,2,2,100,1,5 +10040,0,2,2,100,1,5 +10050,0,2,2,100,1,5 +10060,0,2,2,100,1,5 +10070,0,2,2,100,1,5 +10080,0,2,2,100,1,5 +10090,0,2,2,100,1,5 +10100,0,2,2,100,1,5 diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20210105_fat.csv b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20210105_fat.csv new file mode 100644 index 0000000..fda3c4d --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20210105_fat.csv @@ -0,0 +1,1013 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,0,0.5,0.5,100,1,5 +10,0,0.5,0.5,100,1,5 +20,0,0.5,0.5,100,1,5 +30,0,0.5,0.5,100,1,5 +40,0,0.5,0.5,100,1,5 +50,0,0.5,0.5,100,1,5 +60,0,0.5,0.5,100,1,5 +70,0,0.5,0.5,100,1,5 +80,0,0.5,0.5,100,1,5 +90,0,0.5,0.5,100,1,5 +100,0,0.5,0.5,100,1,5 +110,0,0.5,0.5,100,1,5 +120,0,0.5,0.5,100,1,5 +130,0,0.5,0.5,100,1,5 +140,0,0.5,0.5,100,1,5 +150,0,0.5,0.5,100,1,5 +160,0,0.5,0.5,100,1,5 +170,0,0.5,0.5,100,1,5 +180,0,0.5,0.5,100,1,5 +190,0,0.5,0.5,100,1,5 +200,0,0.5,0.5,100,1,5 +210,0,0.5,0.5,100,1,5 +220,0,0.5,0.5,100,1,5 +230,0,0.5,0.5,100,1,5 +240,0,0.5,0.5,100,1,5 +250,0,0.5,0.5,100,1,5 +260,0,0.5,0.5,100,1,5 +270,0,0.5,0.5,100,1,5 +280,0,0.5,0.5,100,1,5 +290,0,0.5,0.5,100,1,5 +300,0,0.5,0.5,100,1,5 +310,0,0.5,0.5,100,1,5 +320,0,0.5,0.5,100,1,5 +330,0,0.5,0.5,100,1,5 +340,0,0.5,0.5,100,1,5 +350,0,0.5,0.5,100,1,5 +360,0,0.5,0.5,100,1,5 +370,0,0.5,0.5,100,1,5 +380,0,0.5,0.5,100,1,5 +390,0,0.5,0.5,100,1,5 +400,0,0.5,0.5,100,1,5 +410,0,0.5,0.5,100,1,5 +420,0,0.5,0.5,100,1,5 +430,0,0.5,0.5,100,1,5 +440,0,0.5,0.5,100,1,5 +450,0,0.5,0.5,100,1,5 +460,0,0.5,0.5,100,1,5 +470,0,0.5,0.5,100,1,5 +480,0,0.5,0.5,100,1,5 +490,0,0.5,0.5,100,1,5 +500,0,0.5,0.5,100,1,5 +510,0,0.5,0.5,100,1,5 +520,0,0.5,0.5,100,1,5 +530,0,0.5,0.5,100,1,5 +540,0,0.5,0.5,100,1,5 +550,0,0.5,0.5,100,1,5 +560,0,0.5,0.5,100,1,5 +570,0,0.5,0.5,100,1,5 +580,0,0.5,0.5,100,1,5 +590,0,0.5,0.5,100,1,5 +600,0,0.5,0.5,100,1,5 +610,0,0.5,0.5,100,1,5 +620,0,0.5,0.5,100,1,5 +630,0,0.5,0.5,100,1,5 +640,0,0.5,0.5,100,1,5 +650,0,0.5,0.5,100,1,5 +660,0,0.5,0.5,100,1,5 +670,0,0.5,0.5,100,1,5 +680,0,0.5,0.5,100,1,5 +690,0,0.5,0.5,100,1,5 +700,0,0.5,0.5,100,1,5 +710,0,0.5,0.5,100,1,5 +720,0,0.5,0.5,100,1,5 +730,0,0.5,0.5,100,1,5 +740,0,0.5,0.5,100,1,5 +750,0,0.5,0.5,100,1,5 +760,0,0.5,0.5,100,1,5 +770,0,0.5,0.5,100,1,5 +780,0,0.5,0.5,100,1,5 +790,0,0.5,0.5,100,1,5 +800,0,0.5,0.5,100,1,5 +810,0,0.5,0.5,100,1,5 +820,0,0.5,0.5,100,1,5 +830,0,0.5,0.5,100,1,5 +840,0,0.5,0.5,100,1,5 +850,0,0.5,0.5,100,1,5 +860,0,0.5,0.5,100,1,5 +870,0,0.5,0.5,100,1,5 +880,0,0.5,0.5,100,1,5 +890,0,0.5,0.5,100,1,5 +900,0,0.5,0.5,100,1,5 +910,0,0.5,0.5,100,1,5 +920,0,0.5,0.5,100,1,5 +930,0,0.5,0.5,100,1,5 +940,0,0.5,0.5,100,1,5 +950,0,0.5,0.5,100,1,5 +960,0,0.5,0.5,100,1,5 +970,0,0.5,0.5,100,1,5 +980,0,0.5,0.5,100,1,5 +990,0,0.5,0.5,100,1,5 +1000,0,0.5,0.5,100,1,5 +1010,0,1,1,100,1,5 +1020,0,1,1,100,1,5 +1030,0,1,1,100,1,5 +1040,0,1,1,100,1,5 +1050,0,1,1,100,1,5 +1060,0,1,1,100,1,5 +1070,0,1,1,100,1,5 +1080,0,1,1,100,1,5 +1090,0,1,1,100,1,5 +1100,0,1,1,100,1,5 +1110,0,1,1,100,1,5 +1120,0,1,1,100,1,5 +1130,0,1,1,100,1,5 +1140,0,1,1,100,1,5 +1150,0,1,1,100,1,5 +1160,0,1,1,100,1,5 +1170,0,1,1,100,1,5 +1180,0,1,1,100,1,5 +1190,0,1,1,100,1,5 +1200,0,1,1,100,1,5 +1210,0,1,1,100,1,5 +1220,0,1,1,100,1,5 +1230,0,1,1,100,1,5 +1240,0,1,1,100,1,5 +1250,0,1,1,100,1,5 +1260,0,1,1,100,1,5 +1270,0,1,1,100,1,5 +1280,0,1,1,100,1,5 +1290,0,1,1,100,1,5 +1300,0,1,1,100,1,5 +1310,0,1,1,100,1,5 +1320,0,1,1,100,1,5 +1330,0,1,1,100,1,5 +1340,0,1,1,100,1,5 +1350,0,1,1,100,1,5 +1360,0,1,1,100,1,5 +1370,0,1,1,100,1,5 +1380,0,1,1,100,1,5 +1390,0,1,1,100,1,5 +1400,0,1,1,100,1,5 +1410,0,1,1,100,1,5 +1420,0,1,1,100,1,5 +1430,0,1,1,100,1,5 +1440,0,1,1,100,1,5 +1450,0,1,1,100,1,5 +1460,0,1,1,100,1,5 +1470,0,1,1,100,1,5 +1480,0,1,1,100,1,5 +1490,0,1,1,100,1,5 +1500,0,1,1,100,1,5 +1510,0,1,1,100,1,5 +1520,0,1,1,100,1,5 +1530,0,1,1,100,1,5 +1540,0,1,1,100,1,5 +1550,0,1,1,100,1,5 +1560,0,1,1,100,1,5 +1570,0,1,1,100,1,5 +1580,0,1,1,100,1,5 +1590,0,1,1,100,1,5 +1600,0,1,1,100,1,5 +1610,0,1,1,100,1,5 +1620,0,1,1,100,1,5 +1630,0,1,1,100,1,5 +1640,0,1,1,100,1,5 +1650,0,1,1,100,1,5 +1660,0,1,1,100,1,5 +1670,0,1,1,100,1,5 +1680,0,1,1,100,1,5 +1690,0,1,1,100,1,5 +1700,0,1,1,100,1,5 +1710,0,1,1,100,1,5 +1720,0,1,1,100,1,5 +1730,0,1,1,100,1,5 +1740,0,1,1,100,1,5 +1750,0,1,1,100,1,5 +1760,0,1,1,100,1,5 +1770,0,1,1,100,1,5 +1780,0,1,1,100,1,5 +1790,0,1,1,100,1,5 +1800,0,1,1,100,1,5 +1810,0,1,1,100,1,5 +1820,0,1,1,100,1,5 +1830,0,1,1,100,1,5 +1840,0,1,1,100,1,5 +1850,0,1,1,100,1,5 +1860,0,1,1,100,1,5 +1870,0,1,1,100,1,5 +1880,0,1,1,100,1,5 +1890,0,1,1,100,1,5 +1900,0,1,1,100,1,5 +1910,0,1,1,100,1,5 +1920,0,1,1,100,1,5 +1930,0,1,1,100,1,5 +1940,0,1,1,100,1,5 +1950,0,1,1,100,1,5 +1960,0,1,1,100,1,5 +1970,0,1,1,100,1,5 +1980,0,1,1,100,1,5 +1990,0,1,1,100,1,5 +2000,0,1,1,100,1,5 +2010,0,1,1,100,1,5 +2020,0,1,1,100,1,5 +2030,0,1,1,100,1,5 +2040,0,1,1,100,1,5 +2050,0,1,1,100,1,5 +2060,0,1,1,100,1,5 +2070,0,1,1,100,1,5 +2080,0,1,1,100,1,5 +2090,0,1,1,100,1,5 +2100,0,1,1,100,1,5 +2110,0,1,1,100,1,5 +2120,0,1,1,100,1,5 +2130,0,1,1,100,1,5 +2140,0,1,1,100,1,5 +2150,0,1,1,100,1,5 +2160,0,1,1,100,1,5 +2170,0,1,1,100,1,5 +2180,0,1,1,100,1,5 +2190,0,1,1,100,1,5 +2200,0,1,1,100,1,5 +2210,0,1,1,100,1,5 +2220,0,1,1,100,1,5 +2230,0,1,1,100,1,5 +2240,0,1,1,100,1,5 +2250,0,1,1,100,1,5 +2260,0,1,1,100,1,5 +2270,0,1,1,100,1,5 +2280,0,1,1,100,1,5 +2290,0,1,1,100,1,5 +2300,0,1,1,100,1,5 +2310,0,1,1,100,1,5 +2320,0,1,1,100,1,5 +2330,0,1,1,100,1,5 +2340,0,1,1,100,1,5 +2350,0,1,1,100,1,5 +2360,0,1,1,100,1,5 +2370,0,1,1,100,1,5 +2380,0,1,1,100,1,5 +2390,0,1,1,100,1,5 +2400,0,1,1,100,1,5 +2410,0,1,1,100,1,5 +2420,0,1,1,100,1,5 +2430,0,1,1,100,1,5 +2440,0,1,1,100,1,5 +2450,0,1,1,100,1,5 +2460,0,1,1,100,1,5 +2470,0,1,1,100,1,5 +2480,0,1,1,100,1,5 +2490,0,1,1,100,1,5 +2500,0,1,1,100,1,5 +2510,0,1,1,100,1,5 +2520,0,1,1,100,1,5 +2530,0,1,1,100,1,5 +2540,0,1,1,100,1,5 +2550,0,1,1,100,1,5 +2560,0,1,1,100,1,5 +2570,0,1,1,100,1,5 +2580,0,1,1,100,1,5 +2590,0,1,1,100,1,5 +2600,0,1,1,100,1,5 +2610,0,1,1,100,1,5 +2620,0,1,1,100,1,5 +2630,0,1,1,100,1,5 +2640,0,1,1,100,1,5 +2650,0,1,1,100,1,5 +2660,0,1,1,100,1,5 +2670,0,1,1,100,1,5 +2680,0,1,1,100,1,5 +2690,0,1,1,100,1,5 +2700,0,1,1,100,1,5 +2710,0,1,1,100,1,5 +2720,0,1,1,100,1,5 +2730,0,1,1,100,1,5 +2740,0,1,1,100,1,5 +2750,0,1,1,100,1,5 +2760,0,1,1,100,1,5 +2770,0,1,1,100,1,5 +2780,0,1,1,100,1,5 +2790,0,1,1,100,1,5 +2800,0,1,1,100,1,5 +2810,0,1,1,100,1,5 +2820,0,1,1,100,1,5 +2830,0,1,1,100,1,5 +2840,0,1,1,100,1,5 +2850,0,1,1,100,1,5 +2860,0,1,1,100,1,5 +2870,0,1,1,100,1,5 +2880,0,1,1,100,1,5 +2890,0,1,1,100,1,5 +2900,0,1,1,100,1,5 +2910,0,1,1,100,1,5 +2920,0,1,1,100,1,5 +2930,0,1,1,100,1,5 +2940,0,1,1,100,1,5 +2950,0,1,1,100,1,5 +2960,0,1,1,100,1,5 +2970,0,1,1,100,1,5 +2980,0,1,1,100,1,5 +2990,0,1,1,100,1,5 +3000,0,1,1,100,1,5 +3010,0,1,1,100,1,5 +3020,0,1,1,100,1,5 +3030,0,1,1,100,1,5 +3040,0,1,1,100,1,5 +3050,0,1,1,100,1,5 +3060,0,1,1,100,1,5 +3070,0,1,1,100,1,5 +3080,0,1,1,100,1,5 +3090,0,1,1,100,1,5 +3100,0,1,1,100,1,5 +3110,0,1,1,100,1,5 +3120,0,1,1,100,1,5 +3130,0,1,1,100,1,5 +3140,0,1,1,100,1,5 +3150,0,1,1,100,1,5 +3160,0,1,1,100,1,5 +3170,0,1,1,100,1,5 +3180,0,1,1,100,1,5 +3190,0,1,1,100,1,5 +3200,0,1,1,100,1,5 +3210,0,1,1,100,1,5 +3220,0,1,1,100,1,5 +3230,0,1,1,100,1,5 +3240,0,1,1,100,1,5 +3250,0,1,1,100,1,5 +3260,0,1,1,100,1,5 +3270,0,1,1,100,1,5 +3280,0,1,1,100,1,5 +3290,0,1,1,100,1,5 +3300,0,1,1,100,1,5 +3310,0,1,1,100,1,5 +3320,0,1,1,100,1,5 +3330,0,1,1,100,1,5 +3340,0,1,1,100,1,5 +3350,0,1,1,100,1,5 +3360,0,1,1,100,1,5 +3370,0,1,1,100,1,5 +3380,0,1,1,100,1,5 +3390,0,1,1,100,1,5 +3400,0,1,1,100,1,5 +3410,0,1,1,100,1,5 +3420,0,1,1,100,1,5 +3430,0,1,1,100,1,5 +3440,0,1,1,100,1,5 +3450,0,1,1,100,1,5 +3460,0,1,1,100,1,5 +3470,0,1,1,100,1,5 +3480,0,1,1,100,1,5 +3490,0,1,1,100,1,5 +3500,0,1,1,100,1,5 +3510,0,1,1,100,1,5 +3520,0,1,1,100,1,5 +3530,0,1,1,100,1,5 +3540,0,1,1,100,1,5 +3550,0,1,1,100,1,5 +3560,0,1,1,100,1,5 +3570,0,1,1,100,1,5 +3580,0,1,1,100,1,5 +3590,0,1,1,100,1,5 +3600,0,1,1,100,1,5 +3610,0,1,1,100,1,5 +3620,0,1,1,100,1,5 +3630,0,1,1,100,1,5 +3640,0,1,1,100,1,5 +3650,0,1,1,100,1,5 +3660,0,1,1,100,1,5 +3670,0,1,1,100,1,5 +3680,0,1,1,100,1,5 +3690,0,1,1,100,1,5 +3700,0,1,1,100,1,5 +3710,0,1,1,100,1,5 +3720,0,1,1,100,1,5 +3730,0,1,1,100,1,5 +3740,0,1,1,100,1,5 +3750,0,1,1,100,1,5 +3760,0,1,1,100,1,5 +3770,0,1,1,100,1,5 +3780,0,1,1,100,1,5 +3790,0,1,1,100,1,5 +3800,0,1,1,100,1,5 +3810,0,1,1,100,1,5 +3820,0,1,1,100,1,5 +3830,0,1,1,100,1,5 +3840,0,1,1,100,1,5 +3850,0,1,1,100,1,5 +3860,0,1,1,100,1,5 +3870,0,1,1,100,1,5 +3880,0,1,1,100,1,5 +3890,0,1,1,100,1,5 +3900,0,1,1,100,1,5 +3910,0,1,1,100,1,5 +3920,0,1,1,100,1,5 +3930,0,1,1,100,1,5 +3940,0,1,1,100,1,5 +3950,0,1,1,100,1,5 +3960,0,1,1,100,1,5 +3970,0,1,1,100,1,5 +3980,0,1,1,100,1,5 +3990,0,1,1,100,1,5 +4000,0,1,1,100,1,5 +4010,0,1,1,100,1,5 +4020,0,1,1,100,1,5 +4030,0,1,1,100,1,5 +4040,0,1,1,100,1,5 +4050,0,1,1,100,1,5 +4060,0,1,1,100,1,5 +4070,0,1,1,100,1,5 +4080,0,1,1,100,1,5 +4090,0,1,1,100,1,5 +4100,0,1,1,100,1,5 +4110,0,1,1,100,1,5 +4120,0,1,1,100,1,5 +4130,0,1,1,100,1,5 +4140,0,1,1,100,1,5 +4150,0,1,1,100,1,5 +4160,0,1,1,100,1,5 +4170,0,1,1,100,1,5 +4180,0,1,1,100,1,5 +4190,0,1,1,100,1,5 +4200,0,1,1,100,1,5 +4210,0,1,1,100,1,5 +4220,0,1,1,100,1,5 +4230,0,1,1,100,1,5 +4240,0,1,1,100,1,5 +4250,0,1,1,100,1,5 +4260,0,1,1,100,1,5 +4270,0,1,1,100,1,5 +4280,0,1,1,100,1,5 +4290,0,1,1,100,1,5 +4300,0,1,1,100,1,5 +4310,0,1,1,100,1,5 +4320,0,1,1,100,1,5 +4330,0,1,1,100,1,5 +4340,0,1,1,100,1,5 +4350,0,1,1,100,1,5 +4360,0,1,1,100,1,5 +4370,0,1,1,100,1,5 +4380,0,1,1,100,1,5 +4390,0,1,1,100,1,5 +4400,0,1,1,100,1,5 +4410,0,1,1,100,1,5 +4420,0,1,1,100,1,5 +4430,0,1,1,100,1,5 +4440,0,1,1,100,1,5 +4450,0,1,1,100,1,5 +4460,0,1,1,100,1,5 +4470,0,1,1,100,1,5 +4480,0,1,1,100,1,5 +4490,0,1,1,100,1,5 +4500,0,1,1,100,1,5 +4510,0,1,1,100,1,5 +4520,0,1,1,100,1,5 +4530,0,1,1,100,1,5 +4540,0,1,1,100,1,5 +4550,0,1,1,100,1,5 +4560,0,1,1,100,1,5 +4570,0,1,1,100,1,5 +4580,0,1,1,100,1,5 +4590,0,1,1,100,1,5 +4600,0,1,1,100,1,5 +4610,0,1,1,100,1,5 +4620,0,1,1,100,1,5 +4630,0,1,1,100,1,5 +4640,0,1,1,100,1,5 +4650,0,1,1,100,1,5 +4660,0,1,1,100,1,5 +4670,0,1,1,100,1,5 +4680,0,1,1,100,1,5 +4690,0,1,1,100,1,5 +4700,0,1,1,100,1,5 +4710,0,1,1,100,1,5 +4720,0,1,1,100,1,5 +4730,0,1,1,100,1,5 +4740,0,1,1,100,1,5 +4750,0,1,1,100,1,5 +4760,0,1,1,100,1,5 +4770,0,1,1,100,1,5 +4780,0,1,1,100,1,5 +4790,0,1,1,100,1,5 +4800,0,1,1,100,1,5 +4810,0,1,1,100,1,5 +4820,0,1,1,100,1,5 +4830,0,1,1,100,1,5 +4840,0,1,1,100,1,5 +4850,0,1,1,100,1,5 +4860,0,1,1,100,1,5 +4870,0,1,1,100,1,5 +4880,0,1,1,100,1,5 +4890,0,1,1,100,1,5 +4900,0,1,1,100,1,5 +4910,0,1,1,100,1,5 +4920,0,1,1,100,1,5 +4930,0,1,1,100,1,5 +4940,0,1,1,100,1,5 +4950,0,1,1,100,1,5 +4960,0,1,1,100,1,5 +4970,0,1,1,100,1,5 +4980,0,1,1,100,1,5 +4990,0,1,1,100,1,5 +5000,0,2,2,100,1,5 +5010,0,2,2,100,1,5 +5020,0,2,2,100,1,5 +5030,0,2,2,100,1,5 +5040,0,2,2,100,1,5 +5050,0,2,2,100,1,5 +5060,0,2,2,100,1,5 +5070,0,2,2,100,1,5 +5080,0,2,2,100,1,5 +5090,0,2,2,100,1,5 +5100,0,2,2,100,1,5 +5110,0,2,2,100,1,5 +5120,0,2,2,100,1,5 +5130,0,2,2,100,1,5 +5140,0,2,2,100,1,5 +5150,0,2,2,100,1,5 +5160,0,2,2,100,1,5 +5170,0,2,2,100,1,5 +5180,0,2,2,100,1,5 +5190,0,2,2,100,1,5 +5200,0,2,2,100,1,5 +5210,0,2,2,100,1,5 +5220,0,2,2,100,1,5 +5230,0,2,2,100,1,5 +5240,0,2,2,100,1,5 +5250,0,2,2,100,1,5 +5260,0,2,2,100,1,5 +5270,0,2,2,100,1,5 +5280,0,2,2,100,1,5 +5290,0,2,2,100,1,5 +5300,0,2,2,100,1,5 +5310,0,2,2,100,1,5 +5320,0,2,2,100,1,5 +5330,0,2,2,100,1,5 +5340,0,2,2,100,1,5 +5350,0,2,2,100,1,5 +5360,0,2,2,100,1,5 +5370,0,2,2,100,1,5 +5380,0,2,2,100,1,5 +5390,0,2,2,100,1,5 +5400,0,2,2,100,1,5 +5410,0,2,2,100,1,5 +5420,0,2,2,100,1,5 +5430,0,2,2,100,1,5 +5440,0,2,2,100,1,5 +5450,0,2,2,100,1,5 +5460,0,2,2,100,1,5 +5470,0,2,2,100,1,5 +5480,0,2,2,100,1,5 +5490,0,2,2,100,1,5 +5500,0,2,2,100,1,5 +5510,0,2,2,100,1,5 +5520,0,2,2,100,1,5 +5530,0,2,2,100,1,5 +5540,0,2,2,100,1,5 +5550,0,2,2,100,1,5 +5560,0,2,2,100,1,5 +5570,0,2,2,100,1,5 +5580,0,2,2,100,1,5 +5590,0,2,2,100,1,5 +5600,0,2,2,100,1,5 +5610,0,2,2,100,1,5 +5620,0,2,2,100,1,5 +5630,0,2,2,100,1,5 +5640,0,2,2,100,1,5 +5650,0,2,2,100,1,5 +5660,0,2,2,100,1,5 +5670,0,2,2,100,1,5 +5680,0,2,2,100,1,5 +5690,0,2,2,100,1,5 +5700,0,2,2,100,1,5 +5710,0,2,2,100,1,5 +5720,0,2,2,100,1,5 +5730,0,2,2,100,1,5 +5740,0,2,2,100,1,5 +5750,0,2,2,100,1,5 +5760,0,2,2,100,1,5 +5770,0,2,2,100,1,5 +5780,0,2,2,100,1,5 +5790,0,2,2,100,1,5 +5800,0,2,2,100,1,5 +5810,0,2,2,100,1,5 +5820,0,2,2,100,1,5 +5830,0,2,2,100,1,5 +5840,0,2,2,100,1,5 +5850,0,2,2,100,1,5 +5860,0,2,2,100,1,5 +5870,0,2,2,100,1,5 +5880,0,2,2,100,1,5 +5890,0,2,2,100,1,5 +5900,0,2,2,100,1,5 +5910,0,2,2,100,1,5 +5920,0,2,2,100,1,5 +5930,0,2,2,100,1,5 +5940,0,2,2,100,1,5 +5950,0,2,2,100,1,5 +5960,0,2,2,100,1,5 +5970,0,2,2,100,1,5 +5980,0,2,2,100,1,5 +5990,0,2,2,100,1,5 +6000,0,2,2,100,1,5 +6010,0,2,2,100,1,5 +6020,0,2,2,100,1,5 +6030,0,2,2,100,1,5 +6040,0,2,2,100,1,5 +6050,0,2,2,100,1,5 +6060,0,2,2,100,1,5 +6070,0,2,2,100,1,5 +6080,0,2,2,100,1,5 +6090,0,2,2,100,1,5 +6100,0,2,2,100,1,5 +6110,0,2,2,100,1,5 +6120,0,2,2,100,1,5 +6130,0,2,2,100,1,5 +6140,0,2,2,100,1,5 +6150,0,2,2,100,1,5 +6160,0,2,2,100,1,5 +6170,0,2,2,100,1,5 +6180,0,2,2,100,1,5 +6190,0,2,2,100,1,5 +6200,0,2,2,100,1,5 +6210,0,2,2,100,1,5 +6220,0,2,2,100,1,5 +6230,0,2,2,100,1,5 +6240,0,2,2,100,1,5 +6250,0,2,2,100,1,5 +6260,0,2,2,100,1,5 +6270,0,2,2,100,1,5 +6280,0,2,2,100,1,5 +6290,0,2,2,100,1,5 +6300,0,2,2,100,1,5 +6310,0,2,2,100,1,5 +6320,0,2,2,100,1,5 +6330,0,2,2,100,1,5 +6340,0,2,2,100,1,5 +6350,0,2,2,100,1,5 +6360,0,2,2,100,1,5 +6370,0,2,2,100,1,5 +6380,0,2,2,100,1,5 +6390,0,2,2,100,1,5 +6400,0,2,2,100,1,5 +6410,0,2,2,100,1,5 +6420,0,2,2,100,1,5 +6430,0,2,2,100,1,5 +6440,0,2,2,100,1,5 +6450,0,2,2,100,1,5 +6460,0,2,2,100,1,5 +6470,0,2,2,100,1,5 +6480,0,2,2,100,1,5 +6490,0,2,2,100,1,5 +6500,0,2,2,100,1,5 +6510,0,2,2,100,1,5 +6520,0,2,2,100,1,5 +6530,0,2,2,100,1,5 +6540,0,2,2,100,1,5 +6550,0,2,2,100,1,5 +6560,0,2,2,100,1,5 +6570,0,2,2,100,1,5 +6580,0,2,2,100,1,5 +6590,0,2,2,100,1,5 +6600,0,2,2,100,1,5 +6610,0,2,2,100,1,5 +6620,0,2,2,100,1,5 +6630,0,2,2,100,1,5 +6640,0,2,2,100,1,5 +6650,0,2,2,100,1,5 +6660,0,2,2,100,1,5 +6670,0,2,2,100,1,5 +6680,0,2,2,100,1,5 +6690,0,2,2,100,1,5 +6700,0,2,2,100,1,5 +6710,0,2,2,100,1,5 +6720,0,2,2,100,1,5 +6730,0,2,2,100,1,5 +6740,0,2,2,100,1,5 +6750,0,2,2,100,1,5 +6760,0,2,2,100,1,5 +6770,0,2,2,100,1,5 +6780,0,2,2,100,1,5 +6790,0,2,2,100,1,5 +6800,0,2,2,100,1,5 +6810,0,2,2,100,1,5 +6820,0,2,2,100,1,5 +6830,0,2,2,100,1,5 +6840,0,2,2,100,1,5 +6850,0,2,2,100,1,5 +6860,0,2,2,100,1,5 +6870,0,2,2,100,1,5 +6880,0,2,2,100,1,5 +6890,0,2,2,100,1,5 +6900,0,2,2,100,1,5 +6910,0,2,2,100,1,5 +6920,0,2,2,100,1,5 +6930,0,2,2,100,1,5 +6940,0,2,2,100,1,5 +6950,0,2,2,100,1,5 +6960,0,2,2,100,1,5 +6970,0,2,2,100,1,5 +6980,0,2,2,100,1,5 +6990,0,2,2,100,1,5 +7000,0,2,2,100,1,5 +7010,0,2,2,100,1,5 +7020,0,2,2,100,1,5 +7030,0,2,2,100,1,5 +7040,0,2,2,100,1,5 +7050,0,2,2,100,1,5 +7060,0,2,2,100,1,5 +7070,0,2,2,100,1,5 +7080,0,2,2,100,1,5 +7090,0,2,2,100,1,5 +7100,0,2,2,100,1,5 +7110,0,2,2,100,1,5 +7120,0,2,2,100,1,5 +7130,0,2,2,100,1,5 +7140,0,2,2,100,1,5 +7150,0,2,2,100,1,5 +7160,0,2,2,100,1,5 +7170,0,2,2,100,1,5 +7180,0,2,2,100,1,5 +7190,0,2,2,100,1,5 +7200,0,2,2,100,1,5 +7210,0,2,2,100,1,5 +7220,0,2,2,100,1,5 +7230,0,2,2,100,1,5 +7240,0,2,2,100,1,5 +7250,0,2,2,100,1,5 +7260,0,2,2,100,1,5 +7270,0,2,2,100,1,5 +7280,0,2,2,100,1,5 +7290,0,2,2,100,1,5 +7300,0,2,2,100,1,5 +7310,0,2,2,100,1,5 +7320,0,2,2,100,1,5 +7330,0,2,2,100,1,5 +7340,0,2,2,100,1,5 +7350,0,2,2,100,1,5 +7360,0,2,2,100,1,5 +7370,0,2,2,100,1,5 +7380,0,2,2,100,1,5 +7390,0,2,2,100,1,5 +7400,0,2,2,100,1,5 +7410,0,2,2,100,1,5 +7420,0,2,2,100,1,5 +7430,0,2,2,100,1,5 +7440,0,2,2,100,1,5 +7450,0,2,2,100,1,5 +7460,0,2,2,100,1,5 +7470,0,2,2,100,1,5 +7480,0,2,2,100,1,5 +7490,0,2,2,100,1,5 +7500,0,2,2,100,1,5 +7510,0,2,2,100,1,5 +7520,0,2,2,100,1,5 +7530,0,2,2,100,1,5 +7540,0,2,2,100,1,5 +7550,0,2,2,100,1,5 +7560,0,2,2,100,1,5 +7570,0,2,2,100,1,5 +7580,0,2,2,100,1,5 +7590,0,2,2,100,1,5 +7600,0,2,2,100,1,5 +7610,0,2,2,100,1,5 +7620,0,2,2,100,1,5 +7630,0,2,2,100,1,5 +7640,0,2,2,100,1,5 +7650,0,2,2,100,1,5 +7660,0,2,2,100,1,5 +7670,0,2,2,100,1,5 +7680,0,2,2,100,1,5 +7690,0,2,2,100,1,5 +7700,0,2,2,100,1,5 +7710,0,2,2,100,1,5 +7720,0,2,2,100,1,5 +7730,0,2,2,100,1,5 +7740,0,2,2,100,1,5 +7750,0,2,2,100,1,5 +7760,0,2,2,100,1,5 +7770,0,2,2,100,1,5 +7780,0,2,2,100,1,5 +7790,0,2,2,100,1,5 +7800,0,2,2,100,1,5 +7810,0,2,2,100,1,5 +7820,0,2,2,100,1,5 +7830,0,2,2,100,1,5 +7840,0,2,2,100,1,5 +7850,0,2,2,100,1,5 +7860,0,2,2,100,1,5 +7870,0,2,2,100,1,5 +7880,0,2,2,100,1,5 +7890,0,2,2,100,1,5 +7900,0,2,2,100,1,5 +7910,0,2,2,100,1,5 +7920,0,2,2,100,1,5 +7930,0,2,2,100,1,5 +7940,0,2,2,100,1,5 +7950,0,2,2,100,1,5 +7960,0,2,2,100,1,5 +7970,0,2,2,100,1,5 +7980,0,2,2,100,1,5 +7990,0,2,2,100,1,5 +8000,0,2,2,100,1,5 +8010,0,2,2,100,1,5 +8020,0,2,2,100,1,5 +8030,0,2,2,100,1,5 +8040,0,2,2,100,1,5 +8050,0,2,2,100,1,5 +8060,0,2,2,100,1,5 +8070,0,2,2,100,1,5 +8080,0,2,2,100,1,5 +8090,0,2,2,100,1,5 +8100,0,2,2,100,1,5 +8110,0,2,2,100,1,5 +8120,0,2,2,100,1,5 +8130,0,2,2,100,1,5 +8140,0,2,2,100,1,5 +8150,0,2,2,100,1,5 +8160,0,2,2,100,1,5 +8170,0,2,2,100,1,5 +8180,0,2,2,100,1,5 +8190,0,2,2,100,1,5 +8200,0,2,2,100,1,5 +8210,0,2,2,100,1,5 +8220,0,2,2,100,1,5 +8230,0,2,2,100,1,5 +8240,0,2,2,100,1,5 +8250,0,2,2,100,1,5 +8260,0,2,2,100,1,5 +8270,0,2,2,100,1,5 +8280,0,2,2,100,1,5 +8290,0,2,2,100,1,5 +8300,0,2,2,100,1,5 +8310,0,2,2,100,1,5 +8320,0,2,2,100,1,5 +8330,0,2,2,100,1,5 +8340,0,2,2,100,1,5 +8350,0,2,2,100,1,5 +8360,0,2,2,100,1,5 +8370,0,2,2,100,1,5 +8380,0,2,2,100,1,5 +8390,0,2,2,100,1,5 +8400,0,2,2,100,1,5 +8410,0,2,2,100,1,5 +8420,0,2,2,100,1,5 +8430,0,2,2,100,1,5 +8440,0,2,2,100,1,5 +8450,0,2,2,100,1,5 +8460,0,2,2,100,1,5 +8470,0,2,2,100,1,5 +8480,0,2,2,100,1,5 +8490,0,2,2,100,1,5 +8500,0,2,2,100,1,5 +8510,0,2,2,100,1,5 +8520,0,2,2,100,1,5 +8530,0,2,2,100,1,5 +8540,0,2,2,100,1,5 +8550,0,2,2,100,1,5 +8560,0,2,2,100,1,5 +8570,0,2,2,100,1,5 +8580,0,2,2,100,1,5 +8590,0,2,2,100,1,5 +8600,0,2,2,100,1,5 +8610,0,2,2,100,1,5 +8620,0,2,2,100,1,5 +8630,0,2,2,100,1,5 +8640,0,2,2,100,1,5 +8650,0,2,2,100,1,5 +8660,0,2,2,100,1,5 +8670,0,2,2,100,1,5 +8680,0,2,2,100,1,5 +8690,0,2,2,100,1,5 +8700,0,2,2,100,1,5 +8710,0,2,2,100,1,5 +8720,0,2,2,100,1,5 +8730,0,2,2,100,1,5 +8740,0,2,2,100,1,5 +8750,0,2,2,100,1,5 +8760,0,2,2,100,1,5 +8770,0,2,2,100,1,5 +8780,0,2,2,100,1,5 +8790,0,2,2,100,1,5 +8800,0,2,2,100,1,5 +8810,0,2,2,100,1,5 +8820,0,2,2,100,1,5 +8830,0,2,2,100,1,5 +8840,0,2,2,100,1,5 +8850,0,2,2,100,1,5 +8860,0,2,2,100,1,5 +8870,0,2,2,100,1,5 +8880,0,2,2,100,1,5 +8890,0,2,2,100,1,5 +8900,0,2,2,100,1,5 +8910,0,2,2,100,1,5 +8920,0,2,2,100,1,5 +8930,0,2,2,100,1,5 +8940,0,2,2,100,1,5 +8950,0,2,2,100,1,5 +8960,0,2,2,100,1,5 +8970,0,2,2,100,1,5 +8980,0,2,2,100,1,5 +8990,0,2,2,100,1,5 +9000,0,2,2,100,1,5 +9010,0,2,2,100,1,5 +9020,0,2,2,100,1,5 +9030,0,2,2,100,1,5 +9040,0,2,2,100,1,5 +9050,0,2,2,100,1,5 +9060,0,2,2,100,1,5 +9070,0,2,2,100,1,5 +9080,0,2,2,100,1,5 +9090,0,2,2,100,1,5 +9100,0,2,2,100,1,5 +9110,0,2,2,100,1,5 +9120,0,2,2,100,1,5 +9130,0,2,2,100,1,5 +9140,0,2,2,100,1,5 +9150,0,2,2,100,1,5 +9160,0,2,2,100,1,5 +9170,0,2,2,100,1,5 +9180,0,2,2,100,1,5 +9190,0,2,2,100,1,5 +9200,0,2,2,100,1,5 +9210,0,2,2,100,1,5 +9220,0,2,2,100,1,5 +9230,0,2,2,100,1,5 +9240,0,2,2,100,1,5 +9250,0,2,2,100,1,5 +9260,0,2,2,100,1,5 +9270,0,2,2,100,1,5 +9280,0,2,2,100,1,5 +9290,0,2,2,100,1,5 +9300,0,2,2,100,1,5 +9310,0,2,2,100,1,5 +9320,0,2,2,100,1,5 +9330,0,2,2,100,1,5 +9340,0,2,2,100,1,5 +9350,0,2,2,100,1,5 +9360,0,2,2,100,1,5 +9370,0,2,2,100,1,5 +9380,0,2,2,100,1,5 +9390,0,2,2,100,1,5 +9400,0,2,2,100,1,5 +9410,0,2,2,100,1,5 +9420,0,2,2,100,1,5 +9430,0,2,2,100,1,5 +9440,0,2,2,100,1,5 +9450,0,2,2,100,1,5 +9460,0,2,2,100,1,5 +9470,0,2,2,100,1,5 +9480,0,2,2,100,1,5 +9490,0,2,2,100,1,5 +9500,0,2,2,100,1,5 +9510,0,2,2,100,1,5 +9520,0,2,2,100,1,5 +9530,0,2,2,100,1,5 +9540,0,2,2,100,1,5 +9550,0,2,2,100,1,5 +9560,0,2,2,100,1,5 +9570,0,2,2,100,1,5 +9580,0,2,2,100,1,5 +9590,0,2,2,100,1,5 +9600,0,2,2,100,1,5 +9610,0,2,2,100,1,5 +9620,0,2,2,100,1,5 +9630,0,2,2,100,1,5 +9640,0,2,2,100,1,5 +9650,0,2,2,100,1,5 +9660,0,2,2,100,1,5 +9670,0,2,2,100,1,5 +9680,0,2,2,100,1,5 +9690,0,2,2,100,1,5 +9700,0,2,2,100,1,5 +9710,0,2,2,100,1,5 +9720,0,2,2,100,1,5 +9730,0,2,2,100,1,5 +9740,0,2,2,100,1,5 +9750,0,2,2,100,1,5 +9760,0,2,2,100,1,5 +9770,0,2,2,100,1,5 +9780,0,2,2,100,1,5 +9790,0,2,2,100,1,5 +9800,0,2,2,100,1,5 +9810,0,2,2,100,1,5 +9820,0,2,2,100,1,5 +9830,0,2,2,100,1,5 +9840,0,2,2,100,1,5 +9850,0,2,2,100,1,5 +9860,0,2,2,100,1,5 +9870,0,2,2,100,1,5 +9880,0,2,2,100,1,5 +9890,0,2,2,100,1,5 +9900,0,2,2,100,1,5 +9910,0,2,2,100,1,5 +9920,0,2,2,100,1,5 +9930,0,2,2,100,1,5 +9940,0,2,2,100,1,5 +9950,0,2,2,100,1,5 +9960,0,2,2,100,1,5 +9970,0,2,2,100,1,5 +9980,0,2,2,100,1,5 +9990,0,2,2,100,1,5 +10000,0,2,2,100,1,5 +10010,0,2,2,100,1,5 +10020,0,2,2,100,1,5 +10030,0,2,2,100,1,5 +10040,0,2,2,100,1,5 +10050,0,2,2,100,1,5 +10060,0,2,2,100,1,5 +10070,0,2,2,100,1,5 +10080,0,2,2,100,1,5 +10090,0,2,2,100,1,5 +10100,0,2,2,100,1,5 diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20210120_fat.csv b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20210120_fat.csv new file mode 100644 index 0000000..832aa45 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/100s_20210120_fat.csv @@ -0,0 +1,1013 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,0,0.5,0.5,1,1,5 +10,0,0.5,0.5,1,1,5 +20,0,0.5,0.5,1,1,5 +30,0,0.5,0.5,1,1,5 +40,0,0.5,0.5,1,1,5 +50,0,0.5,0.5,1,1,5 +60,0,0.5,0.5,1,1,5 +70,0,0.5,0.5,1,1,5 +80,0,0.5,0.5,1,1,5 +90,0,0.5,0.5,1,1,5 +100,0,0.5,0.5,1,1,5 +110,0,0.5,0.5,1,1,5 +120,0,0.5,0.5,1,1,5 +130,0,0.5,0.5,1,1,5 +140,0,0.5,0.5,1,1,5 +150,0,0.5,0.5,1,1,5 +160,0,0.5,0.5,1,1,5 +170,0,0.5,0.5,1,1,5 +180,0,0.5,0.5,1,1,5 +190,0,0.5,0.5,1,1,5 +200,0,0.5,0.5,1,1,5 +210,0,0.5,0.5,1,1,5 +220,0,0.5,0.5,1,1,5 +230,0,0.5,0.5,1,1,5 +240,0,0.5,0.5,1,1,5 +250,0,0.5,0.5,1,1,5 +260,0,0.5,0.5,1,1,5 +270,0,0.5,0.5,1,1,5 +280,0,0.5,0.5,1,1,5 +290,0,0.5,0.5,1,1,5 +300,0,0.5,0.5,1,1,5 +310,0,0.5,0.5,1,1,5 +320,0,0.5,0.5,1,1,5 +330,0,0.5,0.5,1,1,5 +340,0,0.5,0.5,1,1,5 +350,0,0.5,0.5,1,1,5 +360,0,0.5,0.5,1,1,5 +370,0,0.5,0.5,1,1,5 +380,0,0.5,0.5,1,1,5 +390,0,0.5,0.5,1,1,5 +400,0,0.5,0.5,1,1,5 +410,0,0.5,0.5,1,1,5 +420,0,0.5,0.5,1,1,5 +430,0,0.5,0.5,1,1,5 +440,0,0.5,0.5,1,1,5 +450,0,0.5,0.5,1,1,5 +460,0,0.5,0.5,1,1,5 +470,0,0.5,0.5,1,1,5 +480,0,0.5,0.5,1,1,5 +490,0,0.5,0.5,1,1,5 +500,0,0.5,0.5,1,1,5 +510,0,0.5,0.5,1,1,5 +520,0,0.5,0.5,1,1,5 +530,0,0.5,0.5,1,1,5 +540,0,0.5,0.5,1,1,5 +550,0,0.5,0.5,1,1,5 +560,0,0.5,0.5,1,1,5 +570,0,0.5,0.5,1,1,5 +580,0,0.5,0.5,1,1,5 +590,0,0.5,0.5,1,1,5 +600,0,0.5,0.5,1,1,5 +610,0,0.5,0.5,1,1,5 +620,0,0.5,0.5,1,1,5 +630,0,0.5,0.5,1,1,5 +640,0,0.5,0.5,1,1,5 +650,0,0.5,0.5,1,1,5 +660,0,0.5,0.5,1,1,5 +670,0,0.5,0.5,1,1,5 +680,0,0.5,0.5,1,1,5 +690,0,0.5,0.5,1,1,5 +700,0,0.5,0.5,1,1,5 +710,0,0.5,0.5,1,1,5 +720,0,0.5,0.5,1,1,5 +730,0,0.5,0.5,1,1,5 +740,0,0.5,0.5,1,1,5 +750,0,0.5,0.5,1,1,5 +760,0,0.5,0.5,1,1,5 +770,0,0.5,0.5,1,1,5 +780,0,0.5,0.5,1,1,5 +790,0,0.5,0.5,1,1,5 +800,0,0.5,0.5,1,1,5 +810,0,0.5,0.5,1,1,5 +820,0,0.5,0.5,1,1,5 +830,0,0.5,0.5,1,1,5 +840,0,0.5,0.5,1,1,5 +850,0,0.5,0.5,1,1,5 +860,0,0.5,0.5,1,1,5 +870,0,0.5,0.5,1,1,5 +880,0,0.5,0.5,1,1,5 +890,0,0.5,0.5,1,1,5 +900,0,0.5,0.5,1,1,5 +910,0,0.5,0.5,1,1,5 +920,0,0.5,0.5,1,1,5 +930,0,0.5,0.5,1,1,5 +940,0,0.5,0.5,1,1,5 +950,0,0.5,0.5,1,1,5 +960,0,0.5,0.5,1,1,5 +970,0,0.5,0.5,1,1,5 +980,0,0.5,0.5,1,1,5 +990,0,0.5,0.5,1,1,5 +1000,0,0.5,0.5,1,1,5 +1010,0,1,1,1,1,5 +1020,0,1,1,1,1,5 +1030,0,1,1,1,1,5 +1040,0,1,1,1,1,5 +1050,0,1,1,1,1,5 +1060,0,1,1,1,1,5 +1070,0,1,1,1,1,5 +1080,0,1,1,1,1,5 +1090,0,1,1,1,1,5 +1100,0,1,1,1,1,5 +1110,0,1,1,1,1,5 +1120,0,1,1,1,1,5 +1130,0,1,1,1,1,5 +1140,0,1,1,1,1,5 +1150,0,1,1,1,1,5 +1160,0,1,1,1,1,5 +1170,0,1,1,1,1,5 +1180,0,1,1,1,1,5 +1190,0,1,1,1,1,5 +1200,0,1,1,1,1,5 +1210,0,1,1,1,1,5 +1220,0,1,1,1,1,5 +1230,0,1,1,1,1,5 +1240,0,1,1,1,1,5 +1250,0,1,1,1,1,5 +1260,0,1,1,1,1,5 +1270,0,1,1,1,1,5 +1280,0,1,1,1,1,5 +1290,0,1,1,1,1,5 +1300,0,1,1,1,1,5 +1310,0,1,1,1,1,5 +1320,0,1,1,1,1,5 +1330,0,1,1,1,1,5 +1340,0,1,1,1,1,5 +1350,0,1,1,1,1,5 +1360,0,1,1,1,1,5 +1370,0,1,1,1,1,5 +1380,0,1,1,1,1,5 +1390,0,1,1,1,1,5 +1400,0,1,1,1,1,5 +1410,0,1,1,1,1,5 +1420,0,1,1,1,1,5 +1430,0,1,1,1,1,5 +1440,0,1,1,1,1,5 +1450,0,1,1,1,1,5 +1460,0,1,1,1,1,5 +1470,0,1,1,1,1,5 +1480,0,1,1,1,1,5 +1490,0,1,1,1,1,5 +1500,0,1,1,1,1,5 +1510,0,1,1,1,1,5 +1520,0,1,1,1,1,5 +1530,0,1,1,1,1,5 +1540,0,1,1,1,1,5 +1550,0,1,1,1,1,5 +1560,0,1,1,1,1,5 +1570,0,1,1,1,1,5 +1580,0,1,1,1,1,5 +1590,0,1,1,1,1,5 +1600,0,1,1,1,1,5 +1610,0,1,1,1,1,5 +1620,0,1,1,1,1,5 +1630,0,1,1,1,1,5 +1640,0,1,1,1,1,5 +1650,0,1,1,1,1,5 +1660,0,1,1,1,1,5 +1670,0,1,1,1,1,5 +1680,0,1,1,1,1,5 +1690,0,1,1,1,1,5 +1700,0,1,1,1,1,5 +1710,0,1,1,1,1,5 +1720,0,1,1,1,1,5 +1730,0,1,1,1,1,5 +1740,0,1,1,1,1,5 +1750,0,1,1,1,1,5 +1760,0,1,1,1,1,5 +1770,0,1,1,1,1,5 +1780,0,1,1,1,1,5 +1790,0,1,1,1,1,5 +1800,0,1,1,1,1,5 +1810,0,1,1,1,1,5 +1820,0,1,1,1,1,5 +1830,0,1,1,1,1,5 +1840,0,1,1,1,1,5 +1850,0,1,1,1,1,5 +1860,0,1,1,1,1,5 +1870,0,1,1,1,1,5 +1880,0,1,1,1,1,5 +1890,0,1,1,1,1,5 +1900,0,1,1,1,1,5 +1910,0,1,1,1,1,5 +1920,0,1,1,1,1,5 +1930,0,1,1,1,1,5 +1940,0,1,1,1,1,5 +1950,0,1,1,1,1,5 +1960,0,1,1,1,1,5 +1970,0,1,1,1,1,5 +1980,0,1,1,1,1,5 +1990,0,1,1,1,1,5 +2000,0,1,1,1,1,5 +2010,0,1,1,1,1,5 +2020,0,1,1,1,1,5 +2030,0,1,1,1,1,5 +2040,0,1,1,1,1,5 +2050,0,1,1,1,1,5 +2060,0,1,1,1,1,5 +2070,0,1,1,1,1,5 +2080,0,1,1,1,1,5 +2090,0,1,1,1,1,5 +2100,0,1,1,1,1,5 +2110,0,1,1,1,1,5 +2120,0,1,1,1,1,5 +2130,0,1,1,1,1,5 +2140,0,1,1,1,1,5 +2150,0,1,1,1,1,5 +2160,0,1,1,1,1,5 +2170,0,1,1,1,1,5 +2180,0,1,1,1,1,5 +2190,0,1,1,1,1,5 +2200,0,1,1,1,1,5 +2210,0,1,1,1,1,5 +2220,0,1,1,1,1,5 +2230,0,1,1,1,1,5 +2240,0,1,1,1,1,5 +2250,0,1,1,1,1,5 +2260,0,1,1,1,1,5 +2270,0,1,1,1,1,5 +2280,0,1,1,1,1,5 +2290,0,1,1,1,1,5 +2300,0,1,1,1,1,5 +2310,0,1,1,1,1,5 +2320,0,1,1,1,1,5 +2330,0,1,1,1,1,5 +2340,0,1,1,1,1,5 +2350,0,1,1,1,1,5 +2360,0,1,1,1,1,5 +2370,0,1,1,1,1,5 +2380,0,1,1,1,1,5 +2390,0,1,1,1,1,5 +2400,0,1,1,1,1,5 +2410,0,1,1,1,1,5 +2420,0,1,1,1,1,5 +2430,0,1,1,1,1,5 +2440,0,1,1,1,1,5 +2450,0,1,1,1,1,5 +2460,0,1,1,1,1,5 +2470,0,1,1,1,1,5 +2480,0,1,1,1,1,5 +2490,0,1,1,1,1,5 +2500,0,1,1,1,1,5 +2510,0,1,1,1,1,5 +2520,0,1,1,1,1,5 +2530,0,1,1,1,1,5 +2540,0,1,1,1,1,5 +2550,0,1,1,1,1,5 +2560,0,1,1,1,1,5 +2570,0,1,1,1,1,5 +2580,0,1,1,1,1,5 +2590,0,1,1,1,1,5 +2600,0,1,1,1,1,5 +2610,0,1,1,1,1,5 +2620,0,1,1,1,1,5 +2630,0,1,1,1,1,5 +2640,0,1,1,1,1,5 +2650,0,1,1,1,1,5 +2660,0,1,1,1,1,5 +2670,0,1,1,1,1,5 +2680,0,1,1,1,1,5 +2690,0,1,1,1,1,5 +2700,0,1,1,1,1,5 +2710,0,1,1,1,1,5 +2720,0,1,1,1,1,5 +2730,0,1,1,1,1,5 +2740,0,1,1,1,1,5 +2750,0,1,1,1,1,5 +2760,0,1,1,1,1,5 +2770,0,1,1,1,1,5 +2780,0,1,1,1,1,5 +2790,0,1,1,1,1,5 +2800,0,1,1,1,1,5 +2810,0,1,1,1,1,5 +2820,0,1,1,1,1,5 +2830,0,1,1,1,1,5 +2840,0,1,1,1,1,5 +2850,0,1,1,1,1,5 +2860,0,1,1,1,1,5 +2870,0,1,1,1,1,5 +2880,0,1,1,1,1,5 +2890,0,1,1,1,1,5 +2900,0,1,1,1,1,5 +2910,0,1,1,1,1,5 +2920,0,1,1,1,1,5 +2930,0,1,1,1,1,5 +2940,0,1,1,1,1,5 +2950,0,1,1,1,1,5 +2960,0,1,1,1,1,5 +2970,0,1,1,1,1,5 +2980,0,1,1,1,1,5 +2990,0,1,1,1,1,5 +3000,0,1,1,1,1,5 +3010,0,1,1,1,1,5 +3020,0,1,1,1,1,5 +3030,0,1,1,1,1,5 +3040,0,1,1,1,1,5 +3050,0,1,1,1,1,5 +3060,0,1,1,1,1,5 +3070,0,1,1,1,1,5 +3080,0,1,1,1,1,5 +3090,0,1,1,1,1,5 +3100,0,1,1,1,1,5 +3110,0,1,1,1,1,5 +3120,0,1,1,1,1,5 +3130,0,1,1,1,1,5 +3140,0,1,1,1,1,5 +3150,0,1,1,1,1,5 +3160,0,1,1,1,1,5 +3170,0,1,1,1,1,5 +3180,0,1,1,1,1,5 +3190,0,1,1,1,1,5 +3200,0,1,1,1,1,5 +3210,0,1,1,1,1,5 +3220,0,1,1,1,1,5 +3230,0,1,1,1,1,5 +3240,0,1,1,1,1,5 +3250,0,1,1,1,1,5 +3260,0,1,1,1,1,5 +3270,0,1,1,1,1,5 +3280,0,1,1,1,1,5 +3290,0,1,1,1,1,5 +3300,0,1,1,1,1,5 +3310,0,1,1,1,1,5 +3320,0,1,1,1,1,5 +3330,0,1,1,1,1,5 +3340,0,1,1,1,1,5 +3350,0,1,1,1,1,5 +3360,0,1,1,1,1,5 +3370,0,1,1,1,1,5 +3380,0,1,1,1,1,5 +3390,0,1,1,1,1,5 +3400,0,1,1,1,1,5 +3410,0,1,1,1,1,5 +3420,0,1,1,1,1,5 +3430,0,1,1,1,1,5 +3440,0,1,1,1,1,5 +3450,0,1,1,1,1,5 +3460,0,1,1,1,1,5 +3470,0,1,1,1,1,5 +3480,0,1,1,1,1,5 +3490,0,1,1,1,1,5 +3500,0,1,1,1,1,5 +3510,0,1,1,1,1,5 +3520,0,1,1,1,1,5 +3530,0,1,1,1,1,5 +3540,0,1,1,1,1,5 +3550,0,1,1,1,1,5 +3560,0,1,1,1,1,5 +3570,0,1,1,1,1,5 +3580,0,1,1,1,1,5 +3590,0,1,1,1,1,5 +3600,0,1,1,1,1,5 +3610,0,1,1,1,1,5 +3620,0,1,1,1,1,5 +3630,0,1,1,1,1,5 +3640,0,1,1,1,1,5 +3650,0,1,1,1,1,5 +3660,0,1,1,1,1,5 +3670,0,1,1,1,1,5 +3680,0,1,1,1,1,5 +3690,0,1,1,1,1,5 +3700,0,1,1,1,1,5 +3710,0,1,1,1,1,5 +3720,0,1,1,1,1,5 +3730,0,1,1,1,1,5 +3740,0,1,1,1,1,5 +3750,0,1,1,1,1,5 +3760,0,1,1,1,1,5 +3770,0,1,1,1,1,5 +3780,0,1,1,1,1,5 +3790,0,1,1,1,1,5 +3800,0,1,1,1,1,5 +3810,0,1,1,1,1,5 +3820,0,1,1,1,1,5 +3830,0,1,1,1,1,5 +3840,0,1,1,1,1,5 +3850,0,1,1,1,1,5 +3860,0,1,1,1,1,5 +3870,0,1,1,1,1,5 +3880,0,1,1,1,1,5 +3890,0,1,1,1,1,5 +3900,0,1,1,1,1,5 +3910,0,1,1,1,1,5 +3920,0,1,1,1,1,5 +3930,0,1,1,1,1,5 +3940,0,1,1,1,1,5 +3950,0,1,1,1,1,5 +3960,0,1,1,1,1,5 +3970,0,1,1,1,1,5 +3980,0,1,1,1,1,5 +3990,0,1,1,1,1,5 +4000,0,1,1,1,1,5 +4010,0,1,1,1,1,5 +4020,0,1,1,1,1,5 +4030,0,1,1,1,1,5 +4040,0,1,1,1,1,5 +4050,0,1,1,1,1,5 +4060,0,1,1,1,1,5 +4070,0,1,1,1,1,5 +4080,0,1,1,1,1,5 +4090,0,1,1,1,1,5 +4100,0,1,1,1,1,5 +4110,0,1,1,1,1,5 +4120,0,1,1,1,1,5 +4130,0,1,1,1,1,5 +4140,0,1,1,1,1,5 +4150,0,1,1,1,1,5 +4160,0,1,1,1,1,5 +4170,0,1,1,1,1,5 +4180,0,1,1,1,1,5 +4190,0,1,1,1,1,5 +4200,0,1,1,1,1,5 +4210,0,1,1,1,1,5 +4220,0,1,1,1,1,5 +4230,0,1,1,1,1,5 +4240,0,1,1,1,1,5 +4250,0,1,1,1,1,5 +4260,0,1,1,1,1,5 +4270,0,1,1,1,1,5 +4280,0,1,1,1,1,5 +4290,0,1,1,1,1,5 +4300,0,1,1,1,1,5 +4310,0,1,1,1,1,5 +4320,0,1,1,1,1,5 +4330,0,1,1,1,1,5 +4340,0,1,1,1,1,5 +4350,0,1,1,1,1,5 +4360,0,1,1,1,1,5 +4370,0,1,1,1,1,5 +4380,0,1,1,1,1,5 +4390,0,1,1,1,1,5 +4400,0,1,1,1,1,5 +4410,0,1,1,1,1,5 +4420,0,1,1,1,1,5 +4430,0,1,1,1,1,5 +4440,0,1,1,1,1,5 +4450,0,1,1,1,1,5 +4460,0,1,1,1,1,5 +4470,0,1,1,1,1,5 +4480,0,1,1,1,1,5 +4490,0,1,1,1,1,5 +4500,0,1,1,1,1,5 +4510,0,1,1,1,1,5 +4520,0,1,1,1,1,5 +4530,0,1,1,1,1,5 +4540,0,1,1,1,1,5 +4550,0,1,1,1,1,5 +4560,0,1,1,1,1,5 +4570,0,1,1,1,1,5 +4580,0,1,1,1,1,5 +4590,0,1,1,1,1,5 +4600,0,1,1,1,1,5 +4610,0,1,1,1,1,5 +4620,0,1,1,1,1,5 +4630,0,1,1,1,1,5 +4640,0,1,1,1,1,5 +4650,0,1,1,1,1,5 +4660,0,1,1,1,1,5 +4670,0,1,1,1,1,5 +4680,0,1,1,1,1,5 +4690,0,1,1,1,1,5 +4700,0,1,1,1,1,5 +4710,0,1,1,1,1,5 +4720,0,1,1,1,1,5 +4730,0,1,1,1,1,5 +4740,0,1,1,1,1,5 +4750,0,1,1,1,1,5 +4760,0,1,1,1,1,5 +4770,0,1,1,1,1,5 +4780,0,1,1,1,1,5 +4790,0,1,1,1,1,5 +4800,0,1,1,1,1,5 +4810,0,1,1,1,1,5 +4820,0,1,1,1,1,5 +4830,0,1,1,1,1,5 +4840,0,1,1,1,1,5 +4850,0,1,1,1,1,5 +4860,0,1,1,1,1,5 +4870,0,1,1,1,1,5 +4880,0,1,1,1,1,5 +4890,0,1,1,1,1,5 +4900,0,1,1,1,1,5 +4910,0,1,1,1,1,5 +4920,0,1,1,1,1,5 +4930,0,1,1,1,1,5 +4940,0,1,1,1,1,5 +4950,0,1,1,1,1,5 +4960,0,1,1,1,1,5 +4970,0,1,1,1,1,5 +4980,0,1,1,1,1,5 +4990,0,1,1,1,1,5 +5000,0,2,2,1,1,5 +5010,0,2,2,1,1,5 +5020,0,2,2,1,1,5 +5030,0,2,2,1,1,5 +5040,0,2,2,1,1,5 +5050,0,2,2,1,1,5 +5060,0,2,2,1,1,5 +5070,0,2,2,1,1,5 +5080,0,2,2,1,1,5 +5090,0,2,2,1,1,5 +5100,0,2,2,1,1,5 +5110,0,2,2,1,1,5 +5120,0,2,2,1,1,5 +5130,0,2,2,1,1,5 +5140,0,2,2,1,1,5 +5150,0,2,2,1,1,5 +5160,0,2,2,1,1,5 +5170,0,2,2,1,1,5 +5180,0,2,2,1,1,5 +5190,0,2,2,1,1,5 +5200,0,2,2,1,1,5 +5210,0,2,2,1,1,5 +5220,0,2,2,1,1,5 +5230,0,2,2,1,1,5 +5240,0,2,2,1,1,5 +5250,0,2,2,1,1,5 +5260,0,2,2,1,1,5 +5270,0,2,2,1,1,5 +5280,0,2,2,1,1,5 +5290,0,2,2,1,1,5 +5300,0,2,2,1,1,5 +5310,0,2,2,1,1,5 +5320,0,2,2,1,1,5 +5330,0,2,2,1,1,5 +5340,0,2,2,1,1,5 +5350,0,2,2,1,1,5 +5360,0,2,2,1,1,5 +5370,0,2,2,1,1,5 +5380,0,2,2,1,1,5 +5390,0,2,2,1,1,5 +5400,0,2,2,1,1,5 +5410,0,2,2,1,1,5 +5420,0,2,2,1,1,5 +5430,0,2,2,1,1,5 +5440,0,2,2,1,1,5 +5450,0,2,2,1,1,5 +5460,0,2,2,1,1,5 +5470,0,2,2,1,1,5 +5480,0,2,2,1,1,5 +5490,0,2,2,1,1,5 +5500,0,2,2,1,1,5 +5510,0,2,2,1,1,5 +5520,0,2,2,1,1,5 +5530,0,2,2,1,1,5 +5540,0,2,2,1,1,5 +5550,0,2,2,1,1,5 +5560,0,2,2,1,1,5 +5570,0,2,2,1,1,5 +5580,0,2,2,1,1,5 +5590,0,2,2,1,1,5 +5600,0,2,2,1,1,5 +5610,0,2,2,1,1,5 +5620,0,2,2,1,1,5 +5630,0,2,2,1,1,5 +5640,0,2,2,1,1,5 +5650,0,2,2,1,1,5 +5660,0,2,2,1,1,5 +5670,0,2,2,1,1,5 +5680,0,2,2,1,1,5 +5690,0,2,2,1,1,5 +5700,0,2,2,1,1,5 +5710,0,2,2,1,1,5 +5720,0,2,2,1,1,5 +5730,0,2,2,1,1,5 +5740,0,2,2,1,1,5 +5750,0,2,2,1,1,5 +5760,0,2,2,1,1,5 +5770,0,2,2,1,1,5 +5780,0,2,2,1,1,5 +5790,0,2,2,1,1,5 +5800,0,2,2,1,1,5 +5810,0,2,2,1,1,5 +5820,0,2,2,1,1,5 +5830,0,2,2,1,1,5 +5840,0,2,2,1,1,5 +5850,0,2,2,1,1,5 +5860,0,2,2,1,1,5 +5870,0,2,2,1,1,5 +5880,0,2,2,1,1,5 +5890,0,2,2,1,1,5 +5900,0,2,2,1,1,5 +5910,0,2,2,1,1,5 +5920,0,2,2,1,1,5 +5930,0,2,2,1,1,5 +5940,0,2,2,1,1,5 +5950,0,2,2,1,1,5 +5960,0,2,2,1,1,5 +5970,0,2,2,1,1,5 +5980,0,2,2,1,1,5 +5990,0,2,2,1,1,5 +6000,0,2,2,1,1,5 +6010,0,2,2,1,1,5 +6020,0,2,2,1,1,5 +6030,0,2,2,1,1,5 +6040,0,2,2,1,1,5 +6050,0,2,2,1,1,5 +6060,0,2,2,1,1,5 +6070,0,2,2,1,1,5 +6080,0,2,2,1,1,5 +6090,0,2,2,1,1,5 +6100,0,2,2,1,1,5 +6110,0,2,2,1,1,5 +6120,0,2,2,1,1,5 +6130,0,2,2,1,1,5 +6140,0,2,2,1,1,5 +6150,0,2,2,1,1,5 +6160,0,2,2,1,1,5 +6170,0,2,2,1,1,5 +6180,0,2,2,1,1,5 +6190,0,2,2,1,1,5 +6200,0,2,2,1,1,5 +6210,0,2,2,1,1,5 +6220,0,2,2,1,1,5 +6230,0,2,2,1,1,5 +6240,0,2,2,1,1,5 +6250,0,2,2,1,1,5 +6260,0,2,2,1,1,5 +6270,0,2,2,1,1,5 +6280,0,2,2,1,1,5 +6290,0,2,2,1,1,5 +6300,0,2,2,1,1,5 +6310,0,2,2,1,1,5 +6320,0,2,2,1,1,5 +6330,0,2,2,1,1,5 +6340,0,2,2,1,1,5 +6350,0,2,2,1,1,5 +6360,0,2,2,1,1,5 +6370,0,2,2,1,1,5 +6380,0,2,2,1,1,5 +6390,0,2,2,1,1,5 +6400,0,2,2,1,1,5 +6410,0,2,2,1,1,5 +6420,0,2,2,1,1,5 +6430,0,2,2,1,1,5 +6440,0,2,2,1,1,5 +6450,0,2,2,1,1,5 +6460,0,2,2,1,1,5 +6470,0,2,2,1,1,5 +6480,0,2,2,1,1,5 +6490,0,2,2,1,1,5 +6500,0,2,2,1,1,5 +6510,0,2,2,1,1,5 +6520,0,2,2,1,1,5 +6530,0,2,2,1,1,5 +6540,0,2,2,1,1,5 +6550,0,2,2,1,1,5 +6560,0,2,2,1,1,5 +6570,0,2,2,1,1,5 +6580,0,2,2,1,1,5 +6590,0,2,2,1,1,5 +6600,0,2,2,1,1,5 +6610,0,2,2,1,1,5 +6620,0,2,2,1,1,5 +6630,0,2,2,1,1,5 +6640,0,2,2,1,1,5 +6650,0,2,2,1,1,5 +6660,0,2,2,1,1,5 +6670,0,2,2,1,1,5 +6680,0,2,2,1,1,5 +6690,0,2,2,1,1,5 +6700,0,2,2,1,1,5 +6710,0,2,2,1,1,5 +6720,0,2,2,1,1,5 +6730,0,2,2,1,1,5 +6740,0,2,2,1,1,5 +6750,0,2,2,1,1,5 +6760,0,2,2,1,1,5 +6770,0,2,2,1,1,5 +6780,0,2,2,1,1,5 +6790,0,2,2,1,1,5 +6800,0,2,2,1,1,5 +6810,0,2,2,1,1,5 +6820,0,2,2,1,1,5 +6830,0,2,2,1,1,5 +6840,0,2,2,1,1,5 +6850,0,2,2,1,1,5 +6860,0,2,2,1,1,5 +6870,0,2,2,1,1,5 +6880,0,2,2,1,1,5 +6890,0,2,2,1,1,5 +6900,0,2,2,1,1,5 +6910,0,2,2,1,1,5 +6920,0,2,2,1,1,5 +6930,0,2,2,1,1,5 +6940,0,2,2,1,1,5 +6950,0,2,2,1,1,5 +6960,0,2,2,1,1,5 +6970,0,2,2,1,1,5 +6980,0,2,2,1,1,5 +6990,0,2,2,1,1,5 +7000,0,2,2,1,1,5 +7010,0,2,2,1,1,5 +7020,0,2,2,1,1,5 +7030,0,2,2,1,1,5 +7040,0,2,2,1,1,5 +7050,0,2,2,1,1,5 +7060,0,2,2,1,1,5 +7070,0,2,2,1,1,5 +7080,0,2,2,1,1,5 +7090,0,2,2,1,1,5 +7100,0,2,2,1,1,5 +7110,0,2,2,1,1,5 +7120,0,2,2,1,1,5 +7130,0,2,2,1,1,5 +7140,0,2,2,1,1,5 +7150,0,2,2,1,1,5 +7160,0,2,2,1,1,5 +7170,0,2,2,1,1,5 +7180,0,2,2,1,1,5 +7190,0,2,2,1,1,5 +7200,0,2,2,1,1,5 +7210,0,2,2,1,1,5 +7220,0,2,2,1,1,5 +7230,0,2,2,1,1,5 +7240,0,2,2,1,1,5 +7250,0,2,2,1,1,5 +7260,0,2,2,1,1,5 +7270,0,2,2,1,1,5 +7280,0,2,2,1,1,5 +7290,0,2,2,1,1,5 +7300,0,2,2,1,1,5 +7310,0,2,2,1,1,5 +7320,0,2,2,1,1,5 +7330,0,2,2,1,1,5 +7340,0,2,2,1,1,5 +7350,0,2,2,1,1,5 +7360,0,2,2,1,1,5 +7370,0,2,2,1,1,5 +7380,0,2,2,1,1,5 +7390,0,2,2,1,1,5 +7400,0,2,2,1,1,5 +7410,0,2,2,1,1,5 +7420,0,2,2,1,1,5 +7430,0,2,2,1,1,5 +7440,0,2,2,1,1,5 +7450,0,2,2,1,1,5 +7460,0,2,2,1,1,5 +7470,0,2,2,1,1,5 +7480,0,2,2,1,1,5 +7490,0,2,2,1,1,5 +7500,0,2,2,1,1,5 +7510,0,2,2,1,1,5 +7520,0,2,2,1,1,5 +7530,0,2,2,1,1,5 +7540,0,2,2,1,1,5 +7550,0,2,2,1,1,5 +7560,0,2,2,1,1,5 +7570,0,2,2,1,1,5 +7580,0,2,2,1,1,5 +7590,0,2,2,1,1,5 +7600,0,2,2,1,1,5 +7610,0,2,2,1,1,5 +7620,0,2,2,1,1,5 +7630,0,2,2,1,1,5 +7640,0,2,2,1,1,5 +7650,0,2,2,1,1,5 +7660,0,2,2,1,1,5 +7670,0,2,2,1,1,5 +7680,0,2,2,1,1,5 +7690,0,2,2,1,1,5 +7700,0,2,2,1,1,5 +7710,0,2,2,1,1,5 +7720,0,2,2,1,1,5 +7730,0,2,2,1,1,5 +7740,0,2,2,1,1,5 +7750,0,2,2,1,1,5 +7760,0,2,2,1,1,5 +7770,0,2,2,1,1,5 +7780,0,2,2,1,1,5 +7790,0,2,2,1,1,5 +7800,0,2,2,1,1,5 +7810,0,2,2,1,1,5 +7820,0,2,2,1,1,5 +7830,0,2,2,1,1,5 +7840,0,2,2,1,1,5 +7850,0,2,2,1,1,5 +7860,0,2,2,1,1,5 +7870,0,2,2,1,1,5 +7880,0,2,2,1,1,5 +7890,0,2,2,1,1,5 +7900,0,2,2,1,1,5 +7910,0,2,2,1,1,5 +7920,0,2,2,1,1,5 +7930,0,2,2,1,1,5 +7940,0,2,2,1,1,5 +7950,0,2,2,1,1,5 +7960,0,2,2,1,1,5 +7970,0,2,2,1,1,5 +7980,0,2,2,1,1,5 +7990,0,2,2,1,1,5 +8000,0,2,2,1,1,5 +8010,0,2,2,1,1,5 +8020,0,2,2,1,1,5 +8030,0,2,2,1,1,5 +8040,0,2,2,1,1,5 +8050,0,2,2,1,1,5 +8060,0,2,2,1,1,5 +8070,0,2,2,1,1,5 +8080,0,2,2,1,1,5 +8090,0,2,2,1,1,5 +8100,0,2,2,1,1,5 +8110,0,2,2,1,1,5 +8120,0,2,2,1,1,5 +8130,0,2,2,1,1,5 +8140,0,2,2,1,1,5 +8150,0,2,2,1,1,5 +8160,0,2,2,1,1,5 +8170,0,2,2,1,1,5 +8180,0,2,2,1,1,5 +8190,0,2,2,1,1,5 +8200,0,2,2,1,1,5 +8210,0,2,2,1,1,5 +8220,0,2,2,1,1,5 +8230,0,2,2,1,1,5 +8240,0,2,2,1,1,5 +8250,0,2,2,1,1,5 +8260,0,2,2,1,1,5 +8270,0,2,2,1,1,5 +8280,0,2,2,1,1,5 +8290,0,2,2,1,1,5 +8300,0,2,2,1,1,5 +8310,0,2,2,1,1,5 +8320,0,2,2,1,1,5 +8330,0,2,2,1,1,5 +8340,0,2,2,1,1,5 +8350,0,2,2,1,1,5 +8360,0,2,2,1,1,5 +8370,0,2,2,1,1,5 +8380,0,2,2,1,1,5 +8390,0,2,2,1,1,5 +8400,0,2,2,1,1,5 +8410,0,2,2,1,1,5 +8420,0,2,2,1,1,5 +8430,0,2,2,1,1,5 +8440,0,2,2,1,1,5 +8450,0,2,2,1,1,5 +8460,0,2,2,1,1,5 +8470,0,2,2,1,1,5 +8480,0,2,2,1,1,5 +8490,0,2,2,1,1,5 +8500,0,2,2,1,1,5 +8510,0,2,2,1,1,5 +8520,0,2,2,1,1,5 +8530,0,2,2,1,1,5 +8540,0,2,2,1,1,5 +8550,0,2,2,1,1,5 +8560,0,2,2,1,1,5 +8570,0,2,2,1,1,5 +8580,0,2,2,1,1,5 +8590,0,2,2,1,1,5 +8600,0,2,2,1,1,5 +8610,0,2,2,1,1,5 +8620,0,2,2,1,1,5 +8630,0,2,2,1,1,5 +8640,0,2,2,1,1,5 +8650,0,2,2,1,1,5 +8660,0,2,2,1,1,5 +8670,0,2,2,1,1,5 +8680,0,2,2,1,1,5 +8690,0,2,2,1,1,5 +8700,0,2,2,1,1,5 +8710,0,2,2,1,1,5 +8720,0,2,2,1,1,5 +8730,0,2,2,1,1,5 +8740,0,2,2,1,1,5 +8750,0,2,2,1,1,5 +8760,0,2,2,1,1,5 +8770,0,2,2,1,1,5 +8780,0,2,2,1,1,5 +8790,0,2,2,1,1,5 +8800,0,2,2,1,1,5 +8810,0,2,2,1,1,5 +8820,0,2,2,1,1,5 +8830,0,2,2,1,1,5 +8840,0,2,2,1,1,5 +8850,0,2,2,1,1,5 +8860,0,2,2,1,1,5 +8870,0,2,2,1,1,5 +8880,0,2,2,1,1,5 +8890,0,2,2,1,1,5 +8900,0,2,2,1,1,5 +8910,0,2,2,1,1,5 +8920,0,2,2,1,1,5 +8930,0,2,2,1,1,5 +8940,0,2,2,1,1,5 +8950,0,2,2,1,1,5 +8960,0,2,2,1,1,5 +8970,0,2,2,1,1,5 +8980,0,2,2,1,1,5 +8990,0,2,2,1,1,5 +9000,0,2,2,1,1,5 +9010,0,2,2,1,1,5 +9020,0,2,2,1,1,5 +9030,0,2,2,1,1,5 +9040,0,2,2,1,1,5 +9050,0,2,2,1,1,5 +9060,0,2,2,1,1,5 +9070,0,2,2,1,1,5 +9080,0,2,2,1,1,5 +9090,0,2,2,1,1,5 +9100,0,2,2,1,1,5 +9110,0,2,2,1,1,5 +9120,0,2,2,1,1,5 +9130,0,2,2,1,1,5 +9140,0,2,2,1,1,5 +9150,0,2,2,1,1,5 +9160,0,2,2,1,1,5 +9170,0,2,2,1,1,5 +9180,0,2,2,1,1,5 +9190,0,2,2,1,1,5 +9200,0,2,2,1,1,5 +9210,0,2,2,1,1,5 +9220,0,2,2,1,1,5 +9230,0,2,2,1,1,5 +9240,0,2,2,1,1,5 +9250,0,2,2,1,1,5 +9260,0,2,2,1,1,5 +9270,0,2,2,1,1,5 +9280,0,2,2,1,1,5 +9290,0,2,2,1,1,5 +9300,0,2,2,1,1,5 +9310,0,2,2,1,1,5 +9320,0,2,2,1,1,5 +9330,0,2,2,1,1,5 +9340,0,2,2,1,1,5 +9350,0,2,2,1,1,5 +9360,0,2,2,1,1,5 +9370,0,2,2,1,1,5 +9380,0,2,2,1,1,5 +9390,0,2,2,1,1,5 +9400,0,2,2,1,1,5 +9410,0,2,2,1,1,5 +9420,0,2,2,1,1,5 +9430,0,2,2,1,1,5 +9440,0,2,2,1,1,5 +9450,0,2,2,1,1,5 +9460,0,2,2,1,1,5 +9470,0,2,2,1,1,5 +9480,0,2,2,1,1,5 +9490,0,2,2,1,1,5 +9500,0,2,2,1,1,5 +9510,0,2,2,1,1,5 +9520,0,2,2,1,1,5 +9530,0,2,2,1,1,5 +9540,0,2,2,1,1,5 +9550,0,2,2,1,1,5 +9560,0,2,2,1,1,5 +9570,0,2,2,1,1,5 +9580,0,2,2,1,1,5 +9590,0,2,2,1,1,5 +9600,0,2,2,1,1,5 +9610,0,2,2,1,1,5 +9620,0,2,2,1,1,5 +9630,0,2,2,1,1,5 +9640,0,2,2,1,1,5 +9650,0,2,2,1,1,5 +9660,0,2,2,1,1,5 +9670,0,2,2,1,1,5 +9680,0,2,2,1,1,5 +9690,0,2,2,1,1,5 +9700,0,2,2,1,1,5 +9710,0,2,2,1,1,5 +9720,0,2,2,1,1,5 +9730,0,2,2,1,1,5 +9740,0,2,2,1,1,5 +9750,0,2,2,1,1,5 +9760,0,2,2,1,1,5 +9770,0,2,2,1,1,5 +9780,0,2,2,1,1,5 +9790,0,2,2,1,1,5 +9800,0,2,2,1,1,5 +9810,0,2,2,1,1,5 +9820,0,2,2,1,1,5 +9830,0,2,2,1,1,5 +9840,0,2,2,1,1,5 +9850,0,2,2,1,1,5 +9860,0,2,2,1,1,5 +9870,0,2,2,1,1,5 +9880,0,2,2,1,1,5 +9890,0,2,2,1,1,5 +9900,0,2,2,1,1,5 +9910,0,2,2,1,1,5 +9920,0,2,2,1,1,5 +9930,0,2,2,1,1,5 +9940,0,2,2,1,1,5 +9950,0,2,2,1,1,5 +9960,0,2,2,1,1,5 +9970,0,2,2,1,1,5 +9980,0,2,2,1,1,5 +9990,0,2,2,1,1,5 +10000,0,2,2,1,1,5 +10010,0,2,2,1,1,5 +10020,0,2,2,1,1,5 +10030,0,2,2,1,1,5 +10040,0,2,2,1,1,5 +10050,0,2,2,1,1,5 +10060,0,2,2,1,1,5 +10070,0,2,2,1,1,5 +10080,0,2,2,1,1,5 +10090,0,2,2,1,1,5 +10100,0,2,2,1,1,5 diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/1ms-minus.csv b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/1ms-minus.csv new file mode 100644 index 0000000..954c588 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/1ms-minus.csv @@ -0,0 +1,103 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,60,45,0,10,10,10 +10,55,40,-2,9,9,9 +20,50,35,-4,8,8,8 +30,45,30,-6,7,7,7 +40,40,25,-8,6,6,6 +50,35,20,-10,5,5,5 +60,30,15,-12,4,4,4 +70,25,10,-14,3,3,3 +80,20,5,-16,2,2,2 +90,15,0,-18,1,1,1 +100,10,-5,-20,0,0,0 +110,5,0,-22,1,1,1 +120,0,5,-20,2,2,2 +130,-5,10,-18,3,3,3 +140,0,15,-16,4,4,4 +150,5,20,-14,5,5,5 +160,10,25,-12,6,6,6 +170,15,30,-10,7,7,7 +180,20,35,-8,8,8,8 +190,25,40,-6,9,9,9 +200,30,45,-4,10,10,10 +210,35,40,-2,9,9,9 +220,40,35,0,8,8,8 +230,45,30,-2,7,7,7 +240,50,25,-4,6,6,6 +250,55,20,-6,5,5,5 +260,60,15,-8,4,4,4 +270,55,10,-10,3,3,3 +280,50,5,-12,2,2,2 +290,45,0,-14,1,1,1 +300,40,-5,-16,0,0,0 +310,35,0,-18,1,1,1 +320,30,5,-20,2,2,2 +330,25,10,-25,3,3,3 +340,20,15,-20,4,4,4 +350,15,20,-18,5,5,5 +360,10,25,-16,6,6,6 +370,5,30,-14,7,7,7 +380,0,35,-12,8,8,8 +390,-5,40,-10,9,9,9 +400,0,45,-8,10,10,10 +410,5,40,-6,9,9,9 +420,10,35,-4,8,8,8 +430,15,30,-2,7,7,7 +440,20,25,0,6,6,6 +450,25,20,-2,5,5,5 +460,30,15,-4,4,4,4 +470,35,10,-6,3,3,3 +480,40,5,-8,2,2,2 +490,45,0,-10,1,1,1 +500,50,-5,-12,0,0,0 +510,55,0,-14,1,1,1 +520,60,5,-16,2,2,2 +530,55,10,-18,3,3,3 +540,50,15,-20,4,4,4 +550,45,20,-30,5,5,5 +560,40,25,-20,6,6,6 +570,35,30,-18,7,7,7 +580,30,35,-16,8,8,8 +590,25,40,-14,9,9,9 +600,20,45,-12,10,10,10 +610,15,40,-10,9,9,9 +620,10,35,-8,8,8,8 +630,5,30,-6,7,7,7 +640,0,25,-4,6,6,6 +650,-5,20,-2,5,5,5 +660,0,15,0,4,4,4 +670,5,10,-2,3,3,3 +680,10,5,-4,2,2,2 +690,15,0,-6,1,1,1 +700,20,-5,-8,0,0,0 +710,25,0,-10,1,1,1 +720,30,5,-12,2,2,2 +730,35,10,-14,3,3,3 +740,40,15,-16,4,4,4 +750,45,20,-18,5,5,5 +760,50,25,-20,6,6,6 +770,55,30,-22,7,7,7 +780,60,35,-20,8,8,8 +790,55,40,-18,9,9,9 +800,50,45,-16,10,10,10 +810,45,40,-14,9,9,9 +820,40,35,-12,8,8,8 +830,35,30,-10,7,7,7 +840,30,25,-8,6,6,6 +850,25,20,-6,5,5,5 +860,20,15,-4,4,4,4 +870,15,10,-2,3,3,3 +880,10,5,0,2,2,2 +890,5,0,-2,1,1,1 +900,0,-5,-4,0,0,0 +910,-5,0,-6,1,1,1 +920,0,5,-8,2,2,2 +930,5,10,-10,3,3,3 +940,10,15,-12,4,4,4 +950,15,20,-14,5,5,5 +960,20,25,-16,6,6,6 +970,25,30,-18,7,7,7 +980,30,35,-20,8,8,8 +990,35,40,-22,9,9,9 +1000,40,45,-20,10,10,10 diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/1ms-plus.csv b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/1ms-plus.csv new file mode 100644 index 0000000..9ae00ed --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/1ms-plus.csv @@ -0,0 +1,103 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,60,45,10,10,10,10 +10,55,40,9,9,9,9 +20,50,35,8,8,8,8 +30,45,30,7,7,7,7 +40,40,25,6,6,6,6 +50,35,20,5,5,5,5 +60,30,15,4,4,4,4 +70,25,10,3,3,3,3 +80,20,5,2,2,2,2 +90,15,0,1,1,1,1 +100,10,-5,0,0,0,0 +110,5,0,1,1,1,1 +120,0,5,2,2,2,2 +130,-5,10,3,3,3,3 +140,0,15,4,4,4,4 +150,5,20,5,5,5,5 +160,10,25,6,6,6,6 +170,15,30,7,7,7,7 +180,20,35,8,8,8,8 +190,25,40,9,9,9,9 +200,30,45,10,10,10,10 +210,35,40,11,9,9,9 +220,40,35,12,8,8,8 +230,45,30,11,7,7,7 +240,50,25,10,6,6,6 +250,55,20,9,5,5,5 +260,60,15,8,4,4,4 +270,55,10,7,3,3,3 +280,50,5,6,2,2,2 +290,45,0,5,1,1,1 +300,40,-5,4,0,0,0 +310,35,0,3,1,1,1 +320,30,5,2,2,2,2 +330,25,10,1,3,3,3 +340,20,15,0,4,4,4 +350,15,20,1,5,5,5 +360,10,25,2,6,6,6 +370,5,30,3,7,7,7 +380,0,35,4,8,8,8 +390,-5,40,5,9,9,9 +400,0,45,6,10,10,10 +410,5,40,7,9,9,9 +420,10,35,8,8,8,8 +430,15,30,9,7,7,7 +440,20,25,10,6,6,6 +450,25,20,11,5,5,5 +460,30,15,12,4,4,4 +470,35,10,11,3,3,3 +480,40,5,10,2,2,2 +490,45,0,9,1,1,1 +500,50,-5,8,0,0,0 +510,55,0,7,1,1,1 +520,60,5,6,2,2,2 +530,55,10,5,3,3,3 +540,50,15,4,4,4,4 +550,45,20,3,5,5,5 +560,40,25,2,6,6,6 +570,35,30,1,7,7,7 +580,30,35,0,8,8,8 +590,25,40,1,9,9,9 +600,20,45,2,10,10,10 +610,15,40,3,9,9,9 +620,10,35,4,8,8,8 +630,5,30,5,7,7,7 +640,0,25,6,6,6,6 +650,-5,20,7,5,5,5 +660,0,15,8,4,4,4 +670,5,10,9,3,3,3 +680,10,5,10,2,2,2 +690,15,0,11,1,1,1 +700,20,-5,12,0,0,0 +710,25,0,11,1,1,1 +720,30,5,10,2,2,2 +730,35,10,9,3,3,3 +740,40,15,8,4,4,4 +750,45,20,7,5,5,5 +760,50,25,6,6,6,6 +770,55,30,5,7,7,7 +780,60,35,4,8,8,8 +790,55,40,3,9,9,9 +800,50,45,2,10,10,10 +810,45,40,1,9,9,9 +820,40,35,0,8,8,8 +830,35,30,1,7,7,7 +840,30,25,2,6,6,6 +850,25,20,3,5,5,5 +860,20,15,4,4,4,4 +870,15,10,5,3,3,3 +880,10,5,6,2,2,2 +890,5,0,7,1,1,1 +900,0,-5,8,0,0,0 +910,-5,0,9,1,1,1 +920,0,5,10,2,2,2 +930,5,10,11,3,3,3 +940,10,15,12,4,4,4 +950,15,20,11,5,5,5 +960,20,25,10,6,6,6 +970,25,30,9,7,7,7 +980,30,35,8,8,8,8 +990,35,40,7,9,9,9 +1000,40,45,6,10,10,10 diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/1ms.csv b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/1ms.csv new file mode 100644 index 0000000..1fa4757 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/1ms.csv @@ -0,0 +1,103 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,60,45,10,10,10,10 +10,55,40,7,9,9,9 +20,50,35,4,8,8,8 +30,45,30,1,7,7,7 +40,40,25,-2,6,6,6 +50,35,20,-5,5,5,5 +60,30,15,-8,4,4,4 +70,25,10,-11,3,3,3 +80,20,5,-14,2,2,2 +90,15,0,-17,1,1,1 +100,10,-5,-20,0,0,0 +110,5,0,-23,1,1,1 +120,0,5,-20,2,2,2 +130,-5,10,-17,3,3,3 +140,0,15,-14,4,4,4 +150,5,20,-11,5,5,5 +160,10,25,-8,6,6,6 +170,15,30,-5,7,7,7 +180,20,35,-2,8,8,8 +190,25,40,1,9,9,9 +200,30,45,4,10,10,10 +210,35,40,7,9,9,9 +220,40,35,10,8,8,8 +230,45,30,13,7,7,7 +240,50,25,10,6,6,6 +250,55,20,7,5,5,5 +260,60,15,4,4,4,4 +270,55,10,1,3,3,3 +280,50,5,-2,2,2,2 +290,45,0,-5,1,1,1 +300,40,-5,-8,0,0,0 +310,35,0,-11,1,1,1 +320,30,5,-14,2,2,2 +330,25,10,-17,3,3,3 +340,20,15,-20,4,4,4 +350,15,20,-23,5,5,5 +360,10,25,-20,6,6,6 +370,5,30,-17,7,7,7 +380,0,35,-14,8,8,8 +390,-5,40,-11,9,9,9 +400,0,45,-8,10,10,10 +410,5,40,-5,9,9,9 +420,10,35,-2,8,8,8 +430,15,30,1,7,7,7 +440,20,25,4,6,6,6 +450,25,20,7,5,5,5 +460,30,15,10,4,4,4 +470,35,10,13,3,3,3 +480,40,5,10,2,2,2 +490,45,0,7,1,1,1 +500,50,-5,4,0,0,0 +510,55,0,1,1,1,1 +520,60,5,-2,2,2,2 +530,55,10,-5,3,3,3 +540,50,15,-8,4,4,4 +550,45,20,-11,5,5,5 +560,40,25,-14,6,6,6 +570,35,30,-17,7,7,7 +580,30,35,-20,8,8,8 +590,25,40,-23,9,9,9 +600,20,45,-20,10,10,10 +610,15,40,-17,9,9,9 +620,10,35,-14,8,8,8 +630,5,30,-11,7,7,7 +640,0,25,-8,6,6,6 +650,-5,20,-5,5,5,5 +660,0,15,-2,4,4,4 +670,5,10,1,3,3,3 +680,10,5,4,2,2,2 +690,15,0,7,1,1,1 +700,20,-5,10,0,0,0 +710,25,0,13,1,1,1 +720,30,5,10,2,2,2 +730,35,10,7,3,3,3 +740,40,15,4,4,4,4 +750,45,20,1,5,5,5 +760,50,25,-2,6,6,6 +770,55,30,-5,7,7,7 +780,60,35,-8,8,8,8 +790,55,40,-11,9,9,9 +800,50,45,-14,10,10,10 +810,45,40,-17,9,9,9 +820,40,35,-20,8,8,8 +830,35,30,-23,7,7,7 +840,30,25,-20,6,6,6 +850,25,20,-17,5,5,5 +860,20,15,-14,4,4,4 +870,15,10,-11,3,3,3 +880,10,5,-8,2,2,2 +890,5,0,-5,1,1,1 +900,0,-5,-2,0,0,0 +910,-5,0,1,1,1,1 +920,0,5,4,2,2,2 +930,5,10,7,3,3,3 +940,10,15,10,4,4,4 +950,15,20,13,5,5,5 +960,20,25,10,6,6,6 +970,25,30,7,7,7,7 +980,30,35,4,8,8,8 +990,35,40,1,9,9,9 +1000,40,45,-2,10,10,10 diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronA_FY19_P1.cfg b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronA_FY19_P1.cfg new file mode 100644 index 0000000..a4cf645 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronA_FY19_P1.cfg @@ -0,0 +1,4981 @@ +// LoggerService node: See /var/log/messages file. +// +LoggerService = { +// Class = LoggerService +// CPUs = 0x800 +// StackSize = 32768 +// NumberOfLogPages = 128 +// +SysLogger = { +// Class = SysLogger +// Format = "EtOoFmC" +// PrintKeys = 1 +// Ident = "JAGyA" +// } +// } + +// StateMachine node ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +Start = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +DISABLED = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITSTANDBY = { + Class = ReferenceContainer + +GoWaitReady = { + Class = StateMachineEvent + NextState = "WAITREADY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitReady + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoDisabled = { + Class = StateMachineEvent + NextState = "DISABLED" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Disabled + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITREADY = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITPERMIT = { + Class = ReferenceContainer + +GoWaitReady = { + Class = StateMachineEvent + NextState = "WAITREADY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitReady + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON = { + Class = StateMachineEvent + NextState = "WAITHVON" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON_SDN = { + Class = StateMachineEvent + NextState = "WAITHVON_SDN" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON_SDN + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON_PREP = { + Class = StateMachineEvent + NextState = "WAITHVON_PREP" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON_PREP + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON_SDN_PREP = { + Class = StateMachineEvent + NextState = "WAITHVON_SDN_PREP" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON_SDN_PREP + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + // HVPS sequence control states. + +WAITHVON = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITHVON_SDN = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITHVON_PREP = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITHVON_SDN_PREP = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + // Error State (Enter by HVPS errors) + +ERROR = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } +} + +// RealTime Application node ++JAGyrotronRTApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + //Timer GAM for thread 1. + +Timer1kHzGAM = { + Class = IOGAM + InputSignals = { + Counter = { + DataSource = Timer1kHz + Type = uint32 + Frequency = 1000 //Hz + } + Time = { + DataSource = Timer1kHz + Type = uint32 + } + } + OutputSignals = { + Counter1kHz = { + DataSource = DDB1 + Type = uint32 + } + Time1kHz = { + DataSource = DDB1 + Type = uint32 + } + } + } + +Timer10HzGAM = { + Class = IOGAM + InputSignals = { + Counter = { + DataSource = Timer10Hz + Type = uint32 + Frequency = 1 //Hz + } + Time = { + DataSource = Timer10Hz + Type = uint32 + } + } + OutputSignals = { + Counter10Hz = { + DataSource = DDB1 + Type = uint32 + } + Time1Hz = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM to update PCF state-machine state + +InErrorGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 1 + } + } + } + +InDisabledGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 2 + } + } + } + +InWaitStandbyGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 3 + } + } + } + +InWaitReadyGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 4 + } + } + } + +InWaitPermitGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 5 + } + } + } + +InWaitHVONGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 6 + } + } + } + +InWaitHVON_PREPGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 7 + } + } + } + +InWaitHVON_SDNGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 8 + } + } + } + +InWaitHVON_SDN_PREPGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 9 + } + } + } + + // Copy data from DDB1 to EPICSCAOutput DataSource. + +EPICSOutputGAM = { + Class = IOGAM + InputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + } + MCPS_ACT_SP = { + DataSource = DDB1 + Type = uint32 + } + GCPS_ACT_SP = { + DataSource = DDB1 + Type = uint32 + } + BPS_OUT = { + DataSource = DDB1 + Type = float32 + } + APS_OUT = { + DataSource = DDB1 + Type = float32 + } + MCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + GCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + FHPS_REF = { + DataSource = DDB1 + Type = float32 + } + CSV_LOADED = { + DataSource = DDB1 + Type = uint32 + } + CSV_ERR = { + DataSource = DDB1 + Type = uint32 + } + ELAPSED_TIME = { + DataSource = DDB1 + Type = uint32 + } + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + RFON = { + DataSource = DDB1 + Type = uint32 + } + MHVPS_OUT = { + DataSource = DDB1 + Type = float32 + } + PREP_TIME_WF = { + DataSource = DDB1 + Type = int32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + MHVPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + BPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + APS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + MCPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GCPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + FHPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + CCPS_REF = { + DataSource = DDB1 + Type = float32 + } + MHVPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + APS_STOP = { + DataSource = DDB1 + Type = uint32 + } + BPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + BEAM_ON_TIME = { + DataSource = DDB1 + Type = uint32 + } + PCF_FLT = { + DataSource = DDB1 + Type = uint32 + } + BEAM_ON_STAT = { + DataSource = DDB1 + Type = uint32 + } + SHOT_ID = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + FHPS_AUTO_STAT = { + DataSource = DDB1 + Type = uint32 + } + //Add 20201117 + APS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + APS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + MHVPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + PCF_STATE = { + DataSource = EPICSCAOutput + Type = uint32 + } + MCPS_ACT_SP = { + DataSource = EPICSCAOutput + Type = uint32 + } + GCPS_ACT_SP = { + DataSource = EPICSCAOutput + Type = uint32 + } + BPS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + APS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + MCPS_TRG_CURR_SET = { + DataSource = EPICSCAOutput + Type = float32 + } + GCPS_TRG_CURR_SET = { + DataSource = EPICSCAOutput + Type = float32 + } + FHPS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + CSV_LOADED = { + DataSource = EPICSCAOutput + Type = uint32 + } + CSV_ERR = { + DataSource = EPICSCAOutput + Type = uint32 + } + ELAPSED_TIME = { + DataSource = EPICSCAOutput + Type = uint32 + } + HVARMED = { + DataSource = EPICSCAOutput + Type = uint32 + } + HVINJECTION = { + DataSource = EPICSCAOutput + Type = uint32 + } + RFON = { + DataSource = EPICSCAOutput + Type = uint32 + } + + MHVPS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + PREP_TIME_WF = { + DataSource = EPICSCAOutput + } + MHVPS_PREP_WF = { + DataSource = EPICSCAOutput + } + BPS_PREP_WF = { + DataSource = EPICSCAOutput + } + APS_PREP_WF = { + DataSource = EPICSCAOutput + } + MCPS_PREP_WF = { + DataSource = EPICSCAOutput + } + GCPS_PREP_WF = { + DataSource = EPICSCAOutput + } + FHPS_PREP_WF = { + DataSource = EPICSCAOutput + } + CCPS_REF = { + DataSource = EPICSCAOutput + } + MHVPS_STOP = { + DataSource = EPICSCAOutput + Type = uint32 + } + APS_STOP = { + DataSource = EPICSCAOutput + Type = uint32 + } + BPS_STOP = { + DataSource = EPICSCAOutput + Type = uint32 + } + BEAM_ON_TIME = { + DataSource = EPICSCAOutput + Type = uint32 + } + PCF_FLT = { + DataSource = EPICSCAOutput + } + BEAM_ON_STAT = { + DataSource = EPICSCAOutput + } + SHOT_ID = { + DataSource = EPICSCAOutput + } + FHPS_AUTO_STAT = { + DataSource = EPICSCAOutput + } + //Added 20201117 + APS_HVON = { + DataSource = EPICSCAOutput + } + APS_SWON = { + DataSource = EPICSCAOutput + } + BPS_HVON = { + DataSource = EPICSCAOutput + } + BPS_SWON = { + DataSource = EPICSCAOutput + } + MHVPS_HVON = { + DataSource = EPICSCAOutput + } + } + } + + // Message GAM in Disabled state. + +GoWaitStandbyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1} + Comparators = {EQUALS} + InputSignals = { + PLC_SELECT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + +GoWaitStandbyFromReadyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0} + Comparators = {EQUALS} + InputSignals = { + PLC_STANDBY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + + // MCPS, GCPS PV to DDB1 + +GCPSGAM = { + Class = IOGAM + InputSignals = { + GCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + GCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + } + } + +MCPSGAM = { + Class = IOGAM + InputSignals = { + MCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + MCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + } + } + // Message GAM in Standby state. + +GoDisabledGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0} + Comparators = {EQUALS} + InputSignals = { + PLC_SELECT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoDisabled + } + } + + //GAM in WaitReady state. Check MCPS,GCPS,FHPS state for state transition. + +GoWaitReadyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {3 3 1} + ExpectedFloatValues = {0 0 0} + Comparators = {EQUALS GREATER EQUALS GREATER EQUALS GREATER} + InputSignals = { + MCPS_ACT_RB = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_MCPS_CURR_MON = { + DataSource = EPICSCAInput + Type = float32 + } + GCPS_ACT_RB = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_GCPS_CURR_MON = { + DataSource = EPICSCAInput + Type = float32 + } + FHPS_RU = { + DataSource = EPICSCAInput + Type = uint32 + } + FHPS_MEAS_ACV = { + DataSource = EPICSCAInput + Type = float32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitReady + } + } + + //GAM for prepro + +WFRecordGAM = { + Class = JAWFRecordGAM + Directory = "../Configurations" //TODO: Enter directory path for prepro files. + InputSignals = { + CSV_LOAD = { + DataSource = EPICSCAInput + Type = uint32 + } + Filename = { + Alias = CSV_NAME + DataSource = EPICSCAInput + } + } + OutputSignals = { + PREP_TIME_WF = { + DataSource = DDB1 + } + MHVPS_PREP_WF = { + DataSource = DDB1 + } + BPS_PREP_WF = { + DataSource = DDB1 + } + APS_PREP_WF = { + DataSource = DDB1 + } + MCPS_PREP_WF = { + DataSource = DDB1 + } + GCPS_PREP_WF = { + DataSource = DDB1 + } + FHPS_PREP_WF = { + DataSource = DDB1 + } + } + } + +PreProgrammedGAM = { + Class = JAPreProgrammedGAM + Directory = "../Configurations" // TODO: Enter the directory path for prepro files. + PreProgrammedPeriodMs = 1 // Parameter update periods in ms. + InputSignals = { + CSV_LOAD = { + DataSource = EPICSCAInput + Type = uint32 + } + Filename = { + Alias = CSV_NAME + DataSource = EPICSCAInput + } + FHPS_REF = { + Alias = FHPS_AUTO_TAGV + DataSource = EPICSCAInput + Type = float32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + GYA_PREPRO_TIME = { + DataSource = DDB1 + Type = int32 + } + MHVPS_REF = { + DataSource = DDB1 + Type = float32 + } + BPS_REF = { + DataSource = DDB1 + Type = float32 + } + APS_REF = { + DataSource = DDB1 + Type = float32 + } + MCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + GCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + FHPS_PrePro = { + DataSource = DDB1 + Type = float32 + } + CSV_LOADED = { + DataSource = DDB1 + Type = uint32 + } + CSV_ERR = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM in WaitReady state. Check PLC_READY and CCPS_IN_OPERATION status. + +GoWaitPermitGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 1} //20201222 modified. In the past, 0 1. + Comparators = {EQUALS EQUALS} + InputSignals = { + CCPS_IN_OPERATION = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_READY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitPermit + } + } + + //GAM in WaitPermit state. Check Permit and States of Operation Modes. + +GoWaitReadyFromWaitPermitGAM = { + Class = JAMessageGAM + Operation = OR + ExpectedIntValues = {0 0} + Comparators = {EQUALS EQUALS} + InputSignals = { + PLC_STANDBY = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_READY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitReady + } + } + +GoWaitHVONGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0 0 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON + } + } + +GoWaitHVON_PREP_GAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0 1 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON_PREP + } + } + +GoWaitHVON_SDN_GAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 0 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON_SDN + } + } + +GoWaitHVON_SDN_PREP_GAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 1 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON_SDN_PREP + } + } + + //GAM in WaitHVON_xx states. If PLC_READY is zero, goto WaitStandby. + +FromWaitHVONToWaitStandby = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0} + Comparators = {EQUALS} + InputSignals = { + PLC_READY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + //GAM in WaitHVON_xx states. If PLC_PERMIT is zero, goto WaitPermit. + +FromWaitHVONToWaitPermit = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0 0 0 0 0 0} //modified 20201222 + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} //modified 20201222 + InputSignals = { + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + //add 20201222 + APS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + MHVPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + APS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + }//20201222 + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitPermit + } + } + + // Check the selected mode, and check maximum pulse length. Use with a StateMachineGAM + +ModeLimitGAM = { + Class = JAModeControlGAM + InputSignals = { + PLC_MODE1 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD1_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_MODE2 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD2_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_MODE3 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD3_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_MODE4 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD4_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + Time = { + DataSource = DDB1 + Type = uint32 + } + HVInjection = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + MODE_SHOTLEN_FLAG = { + DataSource = DDB1 + Type = uint32 + } + } + } + + // State notify GAMs. These GAMs are in all WaitHVON states. + +writeBeamONStateGAM = { + Class = IOGAM + InputSignals = { + BEAM_ON_STAT = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + BEAM_ON_STAT = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeHVArmedStateGAM = { + Class = IOGAM + InputSignals = { + HVARMED = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeHVInjectionStateGAM = { + Class = IOGAM + InputSignals = { + HVINJECTION = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeRFONStateGAM = { + Class = IOGAM + InputSignals = { + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + RFON = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeBeamONTimeGAM = { + Class = IOGAM + InputSignals = { + BeamONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + ELAPSED_TIME = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeRFONTimeGAM = { + Class = IOGAM + InputSignals = { + RFONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + BEAM_ON_TIME = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM for trianguler waveform generation. + +CCPSWaveformGAM = { + Class = JATriangleWaveGAM + InputSignals = { + Frequency = { + Alias = CCPS_OUTPUT_FREQ + DataSource = EPICSCAInput + Type = float32 + } + Amplitude = { + Alias = CCPS_OUTPUT_AMP + DataSource = EPICSCAInput + Type = float32 + } + Offset = { + Alias = CCPS_OUTPUT_OFFS + DataSource = EPICSCAInput + Type = float32 + } + PLCSTANDBY = { + Alias = PLC_STANDBY + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + CCPS_REF = { + DataSource = DDB1 + Type = float32 + } + } + } + //GAM for FHPS ramping up operation. + +FHPSSetpointGAM = { + Class = IOGAM + InputSignals = { + FHPS_AUTO_TAGV = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + FHPS_TAGV = { + DataSource = DDB1 + Type = float32 + } + } + } + +FHPSRampupGAM = { + Class = JARampupGAM + InputSignals = { + Currspv = { + Alias = FHPS_REF + DataSource = DDB1 + Type = float32 + } + Targetv = { + Alias = FHPS_TAGV + DataSource = DDB1 + Type = float32 + } + Time = { + Alias = FHPS_AUTO_TIME + DataSource = EPICSCAInput + Type = float32 + } + Start = { + Alias = FHPS_AUTO_START + DataSource = EPICSCAInput + Type = uint32 + } + PLC_STANDBY = { + Alias = PLC_STANDBY + DataSource = EPICSCAInput + Type = uint32 + } + MANUAL_AUTO = { + Alias = FHPS_MANM + DataSource = EPICSCAInput + Type = uint32 + } + FHPS_PrePro = { + DataSource = DDB1 + Type = float32 + } + } + OutputSignals = { + FHPS_REF = { + DataSource = DDB1 + Type = float32 + } + FHPS_AUTO_STAT = { + DataSource = DDB1 + Type = uint32 + } + } + } + //GAM for error handling. + // GAM that sets ERROR and STOP FLAGS for APS, BPS and MHVPS when we enter Error state and resets them when we leave Error state + +ErrorGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = AND + ExpectedValues = {1 0 0 0 0 0 0 0 0 0 0} + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} + Values = {0 0 0} + InputSignals = { + // Conditional signals + RESET_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + MHVPS_STOP_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + APS_STOP_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + BPS_STOP_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + MHVPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + APS_STOP = { + DataSource = DDB1 + Type = uint32 + } + BPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + } + } + +StopRequestGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {1 1 1 1 1 1 1 1 1 1} + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} + Values = {1} + InputSignals = { + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + StopRequest_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + StopRequest = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //Test whether board status are stable + +GAMDisplayDebug = { + Class = IOGAM + InputSignals = { + RESET_FLT = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + RESET_FLT_DISP = { + DataSource = Display + Type = uint32 + } + } + } + //Check PXI board status. + +PXI6259ErrorGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {0 0 0 0} + Comparators = {GREATER GREATER GREATER GREATER} + Values = {1} + InputSignals = { + // Conditional signals + PXI6259_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6259_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6528_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6528_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + PCF_FLT_6259_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT_6259 = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PXI6368Error03GAM = {// detect Hardware error (status number 3) for PXI6368 boards. + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {3 3} + Comparators = {EQUALS EQUALS} + Values = {1} + InputSignals = { + PXI6368_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6368_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + PCF_FLT_6368_ERRNO_03_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT_6368_ERRNO_03 = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PXI6368Error04GAM = {// detect No board error (status number 4) for PXI6368 boards. + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {4 4} + Comparators = {EQUALS EQUALS} + Values = {1} + InputSignals = { + PXI6368_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6368_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + PCF_FLT_6368_ERRNO_04_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT_6368_ERRNO_04 = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PXIErrorGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {0 0 0} + Comparators = {GREATER GREATER GREATER} + Values = {1} + InputSignals = { + PCF_FLT_6368_ERRNO_03 = { + DataSource = DDB1 + Type = uint32 + } + PCF_FLT_6368_ERRNO_04 = { + DataSource = DDB1 + Type = uint32 + } + PCF_FLT_6259 = { + DataSource = DDB1 + Type = uint32 + } + // Default values + PCF_FLT_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT = { + DataSource = DDB1 + Type = uint32 + } + } + } + + + +FromErrorToWaitStandbyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 0 0 0 0 0 0 0 0 0 0} + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} + InputSignals = { + RESET_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + // From any state to Error state. + +GoErrorGAM = { + Class = JAMessageGAM + Operation = OR + ExpectedIntValues = {1 1 1 1 1 1 1 1 1 1} + InputSignals = { + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoError + } + } + // Reset HVPS outputs. ToDo: Fix to access NI d.s. + +ResetPSsGAM = { + Class = ConstantGAM + OutputSignals = { + MHVPS_HVON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + BPS_HVON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + BPS_SWON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + APS_HVON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + APS_SWON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + //here + } + } + // Update status. ToDo: Fix to access NI d.s. + +ExitedHVArmedInjectionRFONGAM = { + Class = JAConditionalSignalUpdateGAM + Values = {0 0 0} + InputSignals = { + // Condition signals + // Default output values + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + RFON = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + RFON = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM for SDN communication.(ProcessWF:thread1, Subscribe/Publish:thread2) + +SDNCommandGAM = { + Class = IOGAM + InputSignals = { + Command = { + DataSource = SDNSubCommands + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 64 + Ranges = {{0 0}} + // TODO uncomment this for release/testing + //Frequency = 1 + } + ESDNTime = { + DataSource = SDNSubCommands + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + OutputSignals = { + Command = { + DataSource = RealTimeThreadAsyncBridge + Type = uint16 + } + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + } + } + +debugSDNGAM = {//for debug + Class = IOGAM + InputSignals = { + Command = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + Command_DISP = { + DataSource = Display + Type = float32 + } + ESDNTime_DISP = { + DataSource = Display + Type = uint32 + } + } + } + +SDNReplyGAM = { + Class = IOGAM + InputSignals = { + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + WaveformPacketID = { + DataSource = DDB1 + Type = uint16 + } + GYA_BPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_BPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_BPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_BPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_APS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_APS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_APS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_APS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC1_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC1_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC1_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC1_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC2_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC2_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC2_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC2_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_MHVPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_MHVPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_MHVPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_MHVPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_MCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYB_MCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYA_GCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYB_GCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYA_FHPS_MEAS_ACI = { + DataSource = EPICSCAInput + } + GYB_FHPS_MEAS_ACI = { + DataSource = EPICSCAInput + } + GYA_CCPS_MEAS_DCI = { + DataSource = EPICSCAInput + } + GYB_CCPS_MEAS_DCI = { + DataSource = EPICSCAInput + } + } + OutputSignals = { + ESDNTime = { + DataSource = SDNReply + Type = uint32 + Trigger = 1 + } + ReplyWaveformAck = { + DataSource = SDNReply + Type = uint16 + } + GYA_BPS_MESVOLT = { + DataSource = SDNReply + } + GYB_BPS_MESVOLT = { + DataSource = SDNReply + } + GYA_BPS_MESCURR = { + DataSource = SDNReply + } + GYB_BPS_MESCURR = { + DataSource = SDNReply + } + GYA_APS_MESVOLT = { + DataSource = SDNReply + } + GYB_APS_MESVOLT = { + DataSource = SDNReply + } + GYA_APS_MESCURR = { + DataSource = SDNReply + } + GYB_APS_MESCURR = { + DataSource = SDNReply + } + GYA_ARC1_MESVOLT = { + DataSource = SDNReply + } + GYB_ARC1_MESVOLT = { + DataSource = SDNReply + } + GYA_ARC1_MESCURR = { + DataSource = SDNReply + } + GYB_ARC1_MESCURR = { + DataSource = SDNReply + } + GYA_ARC2_MESVOLT = { + DataSource = SDNReply + } + GYB_ARC2_MESVOLT = { + DataSource = SDNReply + } + GYA_ARC2_MESCURR = { + DataSource = SDNReply + } + GYB_ARC2_MESCURR = { + DataSource = SDNReply + } + GYA_MHVPS_MESVOLT = { + DataSource = SDNReply + } + GYB_MHVPS_MESVOLT = { + DataSource = SDNReply + } + GYA_MHVPS_MESCURR = { + DataSource = SDNReply + } + GYB_MHVPS_MESCURR = { + DataSource = SDNReply + } + GYA_MCPS_CURR_MON = { + DataSource = SDNReply + } + GYB_MCPS_CURR_MON = { + DataSource = SDNReply + } + GYA_GCPS_CURR_MON = { + DataSource = SDNReply + } + GYB_GCPS_CURR_MON = { + DataSource = SDNReply + } + GYA_FHPS_MEAS_ACI = { + DataSource = SDNReply + } + GYB_FHPS_MEAS_ACI = { + DataSource = SDNReply + } + GYA_CCPS_MEAS_DCI = { + DataSource = SDNReply + } + GYB_CCPS_MEAS_DCI = { + DataSource = SDNReply + } + } + } + //Write SDN waveform data into PS setpoint PV. + + // Timer for SDN thread. + +TimeSDNGAM = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = TimerSDN + Type = uint32 + } + Counter = { + DataSource = TimerSDN + Type = uint32 + Frequency = 1000 //operation:1k(=1ms cyc), debug:10 + } + } + OutputSignals = { + TimeSDN = { + DataSource = DDB1 + Type = uint32 + } + CounterSDN = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM for realtime statemachine + +Timer100kHzGAM = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = Timer + Type = uint32 + } + Counter = { + DataSource = Timer + Type = uint32 + Frequency = 200000 //operation:10k(=100us cyc) + //Frequency = 100000 //operation:100k(=10us cyc) + } + RTThreadPerf = { + DataSource = Timings + Alias = "WaitHVON.Thread3_CycleTime" + Type = uint32 + } + } + OutputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerf = { + DataSource = DDB1 + Type = uint32 + } + } + } + + // Digital Output port access. + // EPICS PV to one uint8 variable + +NI6528P3GAM = { + Class = JABitSumGAM + InputSignals = { + APS_HVON = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_SWON = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_STOP = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_HVON = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_SWON = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_STOP = { + DataSource = EPICSCAInput + Type = uint32 + } + BEAM_ON_STAT = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV5 = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + NI6528P3CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P4GAM = { + Class = JABitSumGAM + InputSignals = { + DO_REV6 = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV7 = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV8 = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_HVON = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_STOP = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_MODSW = { + DataSource = EPICSCAInput + Type = uint32 + } + PCF_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + HVARMED = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + NI6528P4CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P5GAM = { + Class = JABitSumGAM + InputSignals = { + HVINJECTION = { + DataSource = EPICSCAInput + Type = uint32 + } + RFON = { + DataSource = EPICSCAInput + Type = uint32 + } + FHPS_RU = { + DataSource = EPICSCAInput + Type = uint32 + } + SCM_RU = { + DataSource = EPICSCAInput + Type = uint32 + } + SCM_RD = { + DataSource = EPICSCAInput + Type = uint32 + } + CCPS_IN_OPERATION = { + DataSource = EPICSCAInput + Type = uint32 + } + NONE1 = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + NONE2 = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + NI6528P5CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + // reversed uint8 variable (value to write on port.) + +NI6528P3PV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P3CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P3PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P4PV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P4CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P4PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P5PV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P5CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P5PortValue = { + DataSource = NI6528P5 + Type = uint8 + } + } + } + // write a uint8 port value to PXI data source. + +NI6528P3WriteGAM = { + Class = IOGAM + InputSignals = { + NI6528P3PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P3Value = { + DataSource = NI6528P3 + Type = uint8 + } + } + } + +NI6528P4WriteGAM = { + Class = IOGAM + InputSignals = { + NI6528P4PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P4Value = { + DataSource = NI6528P4 + Type = uint8 + } + } + } + + //Thread3 pulse parameter EPICS PVs read. + +GAMEPICSCA = { + Class = IOGAM + InputSignals = { + MHVPS_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_HVON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_SWON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_HVON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_SWON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + SHOTLEN = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ON = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + MHVPS_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + SHOTLEN = { + DataSource = DDB1 + Type = uint32 + } + PLC_ON = { + DataSource = DDB1 + Type = uint32 + } + } + } + + // Real-Time state machine GAMs + +GAMRealTimeStateMachine = { + Class = JARTStateMachineGAM + ConditionTrigger = 1 + mhvps_hvon = 4 + aps_hvon = 1 + aps_swon = 16 + bps_hvon = 2 + bps_swon = 8 + InputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + PLC_ON = { + DataSource = DDB1 + Type = uint32 + } + MHVPS_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + SHOTLEN = { + DataSource = DDB1 + Type = uint32 + } + StopRequest = { + DataSource = DDB1 + Type = uint32 + } + MODE_SHOTLEN_FLAG = { + DataSource = DDB1 + Type = uint32 + } + SHORT_PULSE_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + //Add 20210120 + MHVPS_MODSW = { + DataSource = EPICSCAInput + Type = uint32 + } + //Add 20210121 + DO_REV6 = { + DataSource = EPICSCAInput + Type = uint32 + } + + } + OutputSignals = { + RTSMValue = { + DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + BEAM_ON_STAT = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVARMED = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVINJECTION = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BeamONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + SHOT_ID = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + //Added 20201117 + APS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + APS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + MHVPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + NI6259Value = { + DataSource = NI6259 + //DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + NI6528P3Value = { + DataSource = NI6528P3 + //DataSource = DDB1 + Type = uint8 + } + NI6528P4Value = { + DataSource = NI6528P4 + //DataSource = DDB1 + Type = uint8 + } + } + } + +GAMSDNRealTimeStateMachine = { + Class = JASDNRTStateMachineGAM + ConditionTrigger = 1 + mhvps_hvon = 4 + aps_hvon = 1 + aps_swon = 16 + bps_hvon = 2 + bps_swon = 8 + InputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + PLC_ON = { + DataSource = DDB1 + Type = uint32 + } + MHVPS_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + SHOTLEN = { + DataSource = DDB1 + Type = uint32 + } + StopRequest = { + DataSource = DDB1 + Type = uint32 + } + MODE_SHOTLEN_FLAG = { + DataSource = DDB1 + Type = uint32 + } + Command = { + DataSource = RealTimeThreadAsyncBridge + Type = uint16 + } + + } + OutputSignals = { + RTSMValue = { + DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + BeamON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVARMED = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVINJECTION = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BeamONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + SHOT_ID = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + } + + //Terminal Interface reads three inputs. + // INPUTs: StateMahine Value, NI6528P3Value and NI6528P4Value + // OUTPUTs: Each NIxxx data sources. + +terminalInterfaceGAM = { + Class = JATerminalInterfaceGAM + mhvps_hvon_term = 4 + aps_hvon_term = 1 + aps_swon_term = 16 + bps_hvon_term = 2 + bps_swon_term = 8 + InputSignals = { + MHVPS_HVON = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON = { + DataSource = DDB1 + Type = uint32 + } + SHORT_PULSE_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + //Input signals about HW terminal. + RTSMValue = { + DataSource = DDB1 + Type = uint32 + } + NI6528P3CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + NI6528P4CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6259Value = { + DataSource = NI6259 + //DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + NI6528P3Value = { + DataSource = NI6528P3 + //DataSource = DDB1 + Type = uint8 + } + NI6528P4Value = { + DataSource = NI6528P4 + //DataSource = DDB1 + Type = uint8 + } + } + } + + // Switching AO port source between internal variable and EPICS PV. + +choiseGAM = { + Class = JASourceChoiseGAM + numberOfPVs = 5 + InputSignals = { + BPS_REF = { + DataSource = DDB1 + Type = float32 + } + BPS_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + BPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + APS_REF = { + DataSource = DDB1 + Type = float32 + } + APS_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + APS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + MHVPS_REF = { + DataSource = DDB1 + Type = float32 + } + MHVPS_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + MHVPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + MCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + MCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + MCPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + GCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + GCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + GCPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + } + OutputSignals = { + BPS_OUT = { + DataSource = DDB1 + Type = float32 + } + APS_OUT = { + DataSource = DDB1 + Type = float32 + } + MHVPS_OUT = { + DataSource = DDB1 + Type = float32 + } + MCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + GCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + } + } + + //debug + +debugTimerGAM = { + Class = IOGAM + InputSignals = { + Time1kHz = { + DataSource = DDB1 + Type = uint32 + } + TimeSDN = { + DataSource = DDB1 + Type = uint32 + } + Time = { + DataSource = DDB1 + Type = uint32 + } + Time1Hz = { + DataSource = DDB1 + Type = uint32 + } + + } + OutputSignals = { + T1_time = { + DataSource = Display + Type = uint32 + } + T2_time = { + DataSource = Display + Type = uint32 + } + T3_time = { + DataSource = Display + Type = uint32 + } + T4_time = { + DataSource = Display + Type = uint32 + } + } + } + +GAMExecTime = {//debug + Class = IOGAM + InputSignals = { + GAMEPICSCA_ExecTime = { + DataSource = Timings + Type = uint32 + } + StopRequestGAM_ExecTime = { + DataSource = Timings + Type = uint32 + } + ModeLimitGAM_ExecTime = { + DataSource = Timings + Type = uint32 + } + NI6528P3GAM_ExecTime = { + DataSource = Timings + Type = uint32 + } + terminalInterfaceGAM_ExecTime = { + DataSource = Timings + Type = uint32 + } + GAMRealTimeStateMachine_ExecTime = { + DataSource = Timings + Type = uint32 + } + + } + OutputSignals = { + GAMEPICSCA_ExecTime = { + DataSource = Display + Type = uint32 + } + StopRequestGAM_ExecTime = { + DataSource = Display + Type = uint32 + } + ModeLimitGAM_ExecTime = { + DataSource = Display + Type = uint32 + } + NI6528P3GAM_ExecTime = { + DataSource = Display + Type = uint32 + } + terminalInterfaceGAM_ExecTime = { + DataSource = Display + Type = uint32 + } + GAMRealTimeStateMachine_ExecTime = { + DataSource = Display + Type = uint32 + } + } + } + + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + AllowNoProducers = 1 + ResetUnusedVariablesAtStateChange = 0 + } + // Timer for thread 1 (Normal RT state execution cycle.) + +Timer1kHz = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x100 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + +TimerSDN = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x200 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + +Timer10Hz = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x800 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + // Timer for thread 3 (RTStateMachineGAM execution cycle.) + +Timer = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x400 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + + +Timings = { + Class = TimingDataSource + } + +Display = { + Class = LoggerDataSource + } + // for data exechange between threads. + +RealTimeThreadAsyncBridge = { + Class = RealTimeThreadAsyncBridge + NumberOfBuffers = 20 + } + // for access ECPIS PV. + +EPICSCAInput = { + Class = "EPICSCA::EPICSCAInput" + CPUMask = "0x100" //change from 200 + StackSize = "10000000" + Signals = { + // PV for manually setting + BPS_MM = { + PVName = "EC-GN-P01-PB1F:STAT-MANM" + Type = uint32 + } + BPS_MANUAL = { + PVName = "EC-GN-P01-PB1F:PSU1000-EREF-MSP" + Type = float32 + } + APS_MM = { + PVName = "EC-GN-P01-PA1F:STAT-MANM" + Type = uint32 + } + APS_MANUAL = { + PVName = "EC-GN-P01-PA1F:PSU3000-EREF-MSP" + Type = float32 + } + MHVPS_MANUAL = { + PVName = "EC-GN-P01-PMF:PSU0000-EREF-MSP" + Type = float32 + } + MHVPS_MM = { + PVName = "EC-GN-P01-PMF:STAT-MANM" + Type = uint32 + } + // Analog Input PVs. + GYA_BPS_MESVOLT = { + PVName = "EC-GN-P01-PB1F:PSU1000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_BPS_MESVOLT = { + PVName = "EC-GN-P01-PB2F:PSU2000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_BPS_MESCURR = { + PVName = "EC-GN-P01-PB1F:PSU1000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_BPS_MESCURR = { + PVName = "EC-GN-P01-PB2F:PSU2000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_APS_MESVOLT = { + PVName = "EC-GN-P01-PA1F:PSU3000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_APS_MESVOLT = { + PVName = "EC-GN-P01-PA2F:PSU4000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_APS_MESCURR = { + PVName = "EC-GN-P01-PA1F:PSU3000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_APS_MESCURR = { + PVName = "EC-GN-P01-PA2F:PSU4000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC1_MESVOLT = { + PVName = "EC-GN-P01-GAF:MOE2810-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC1_MESVOLT = { + PVName = "EC-GN-P01-GBF:MOE2810-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC1_MESCURR = { + PVName = "EC-GN-P01-GAF:MOE2820-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC1_MESCURR = { + PVName = "EC-GN-P01-GBF:MOE2820-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC2_MESVOLT = { + PVName = "EC-GN-P01-GAF:MOE2830-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC2_MESVOLT = { + PVName = "EC-GN-P01-GBF:MOE2830-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC2_MESCURR = { + PVName = "EC-GN-P01-GAF:MRF2910-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC2_MESCURR = { + PVName = "EC-GN-P01-GBF:MRF2910-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_MHVPS_MESVOLT = { + PVName = "EC-GN-P01-PMF:PSU0000-ET-GA" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_MHVPS_MESVOLT = { + PVName = "EC-GN-P01-PMF:PSU0000-ET-GB" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_MHVPS_MESCURR = { + PVName = "EC-GN-P01-PMF:PSU0000-IT-GA" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_MHVPS_MESCURR = { + PVName = "EC-GN-P01-PMF:PSU0000-IT-GB" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + + //Digital Input PVs in Signal-Variable tab. + APS_READY = { + PVName = "EC-GN-P01-PA1F:PSU3000-YSTA" + Type = uint32 + } + GYA_APS_FLT = { + PVName = "EC-GN-P01-PA1F:PSU3000-YFLT" + Type = uint32 + } + GYB_APS_FLT = { + PVName = "EC-GN-P01-PA2F:PSU4000-YFLT" + Type = uint32 + } + BPS_READY = { + PVName = "EC-GN-P01-PB1F:PSU1000-YSTA" + Type = uint32 + } + GYA_BPS_FLT = { + PVName = "EC-GN-P01-PB1F:PSU1000-YFLT" + Type = uint32 + } + GYB_BPS_FLT = { + PVName = "EC-GN-P01-PB2F:PSU2000-YFLT" + Type = uint32 + } + MHVPS_OV = { + PVName = "EC-GN-P01-GAFP:FMC4310-YFLT-OC" + Type = uint32 + } + MHVPS_OC = { + PVName = "EC-GN-P01-GAFP:FMC4310-YFLT-OV" + Type = uint32 + } + MHVPS_FLT = { + PVName = "EC-GN-P01-PMF:PSU0000-YFLT" + Type = uint32 + } + MHVPS_READY = { + PVName = "EC-GN-P01-PMF:PSU0000-TYSTA" + Type = uint32 + } + MHVPS_MODON = { + PVName = "EC-GN-P01-GPF:PSU0000-YSTA-MOD" + Type = uint32 + } + MIS_ITL = { + PVName = "EC-GN-P01-GAFP:FMC4310-YTRP" + Type = uint32 + } + MISB_ITL = { + PVName = "EC-GN-P01-GBFP:FMC4310-YTRP" + Type = uint32 + } + PLC_ITL = { + PVName = "EC-GN-P01-GPS:PLC4110-YTRP" + Type = uint32 + } + PLC_STANDBY = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-ST1R" + Type = uint32 + } + PLC_READY = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-ST2R" + Type = uint32 + } + PLC_ON = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-ST3R" + Type = uint32 + } + PLC_MODE1 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD1" + Type = uint32 + } + PLC_MODE2 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD2" + Type = uint32 + } + PLC_MODE3 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD3" + Type = uint32 + } + PLC_MODE4 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD4" + Type = uint32 + } + PLC_PERMIT = { + PVName = "EC-GN-P01-GPS:PLC4110-CON-GY1PRM" + Type = uint32 + } + PLC_SELECT = { + PVName = "EC-GN-P01-GPS:PLC4110-CON-OPGY1" + Type = uint32 + } + PLC_SYNCMODE = { + PVName = "EC-GN-P01-GPS:PLC4110-YSTA-MPSS" + Type = uint32 + } + PLC_CCPSON = { + PVName = "EC-GN-P01-GPS:PLC4110-YON-CCPS1" + Type = uint32 + } + EXT_TRIG = { + PVName = "EC-GN-P01-GAF:DIO4900-YON" + Type = uint32 + } + + //Digital Output PVs in Variables-signal tab + APS_HVON = { + PVName = "EC-GN-P01-PA1F:PSU3000-CON-HV" + Type = uint32 + } + APS_SWON = { + PVName = "EC-GN-P01-PA1F:PSU3000-CON-SW" + Type = uint32 + } + APS_STOP = { + PVName = "EC-GN-P01-PA1F:PSU3000-CTRP" + Type = uint32 + } + BPS_HVON = { + PVName = "EC-GN-P01-PB1F:PSU1000-CON-HV" + Type = uint32 + } + BPS_SWON = { + PVName = "EC-GN-P01-PB1F:PSU1000-CON-SW" + Type = uint32 + } + BPS_STOP = { + PVName = "EC-GN-P01-PB1F:PSU1000-CTRP" + Type = uint32 + } + BEAM_ON_STAT = { + PVName = "EC-GN-P01-GAFP:FMC4310-YSTA-GAOP" + Type = uint32 + } + DO_REV5 = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV5" + Type = uint32 + } + DO_REV6 = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV6" + Type = uint32 + } + DO_REV7 = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV7" + Type = uint32 + } + DO_REV8 = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV8" + Type = uint32 + } + MHVPS_HVON = { + PVName = "EC-GN-P01-PMF:PSU0000-CON-SW" + Type = uint32 + } + MHVPS_STOP = { + PVName = "EC-GN-P01-PMF:PSU0000-COFF" + Type = uint32 + } + MHVPS_MODSW = { + PVName = "EC-GN-P01-PMF:PSU0000-CON-MOD" + Type = uint32 + } + PCF_FLT = { + PVName = "EC-GN-P01-GPF:PCF4210-CTRP" + Type = uint32 + } + HVARMED = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA1" + Type = uint32 + } + HVINJECTION = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA2" + Type = uint32 + } + RFON = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA3" + Type = uint32 + } + FHPS_RU = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP" + Type = uint32 + } + SCM_RU = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP" + Type = uint32 + } + SCM_RD = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN" + Type = uint32 + } + CCPS_IN_OPERATION = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-TR" + Type = uint32 + } + //Input PVs in Variables-Operation tab. + PREP_MODE = { + PVName = "EC-GN-P01-GAF:STAT-PREP-MODE" + Type = uint32 + } + SHORT_PULSE_MODE = { + PVName = "EC-GN-P01-GAF:STAT-SHORT-PULSE" + Type = uint32 + } + + MHVPS_DT = { + PVName = "EC-GN-P01-PMF:STAT-DT-HVON" + Type = uint32 + } + APS_HVON_DT = { + PVName = "EC-GN-P01-PA1F:STAT-DT-HVON" + Type = uint32 + } + APS_SWON_DT = { + PVName = "EC-GN-P01-PA1F:STAT-DT-SWON" + Type = uint32 + } + BPS_HVON_DT = { + PVName = "EC-GN-P01-PB1F:STAT-DT-HVON" + Type = uint32 + } + BPS_SWON_DT = { + PVName = "EC-GN-P01-PB1F:STAT-DT-SWON" + Type = uint32 + } + SHOTLEN = { + PVName = "EC-GN-P01-GAF:STAT-DT-SHOTLEN" + Type = uint32 + } + + MD1_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD1-LIM" + Type = uint32 + } + MD2_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD2-LIM" + Type = uint32 + } + MD3_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD3-LIM" + Type = uint32 + } + MD4_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD4-LIM" + Type = uint32 + } + + FHPS_MANM = { + PVName = "EC-GN-P01-GAF-FHPS:STAT-MANM" + Type = uint32 + } + + CSV_LOAD = { + PVName = "EC-GN-P01-GAF:STAT-CSV-LOAD" + Type = uint32 + } + CSV_NAME = { + PVName = "EC-GN-P01-GAF:STAT-CSV-NAME" + Type = char8 + NumberOfElements = 40 + } + RESET_FLT = { + PVName = "EC-GN-P01-GPF:STAT-RST-FLT" + //PVName = "EC-GN-P01-GPS-MEM:CMD-CONALARMRESET-HMI" + Type = uint32 + } + + //Input PVs in Variables-JASTEC tab. + MCPS_ACT_SP = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-ACT-SET-MI" + Type = uint32 + } + MCPS_TRG_CURR_MANUAL = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MI" + Type = float32 + } + MCPS_ACT_RB = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB" + Type = uint32 + } + MCPS_CURR_RB = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-RB" + Type = uint32 + } + GYA_MCPS_CURR_MON = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON" + Type = float32 + } + GYB_MCPS_CURR_MON = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON" + Type = float32 + } + MCPS_VOLT_MON = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-VOLT-MON" + Type = uint32 + } + MCPS_SWP_RB = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-SWP-RB" + Type = uint32 + } + MCPS_SWP_LIM = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-SWP-LIM" + Type = uint32 + } + MCPS_ERR = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-ERR" + Type = uint32 + } + MCPS_MM = { + PVName = "EC-GN-P01-GAF-MCPS:STAT-MANM" + Type = uint32 + } + //GCPS PVs + GCPS_ACT_SP = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MI" + Type = uint32 + } + GCPS_TRG_CURR_MANUAL = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MI" + Type = float32 + } + GCPS_ACT_RB = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB" + Type = uint32 + } + GCPS_CURR_RB = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-RB" + Type = uint32 + } + GYA_GCPS_CURR_MON = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON" + Type = float32 + } + GYB_GCPS_CURR_MON = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON" + Type = float32 + } + GCPS_VOLT_MON = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-VOLT-MON" + Type = uint32 + } + GCPS_SWP_RB = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-SWP-RB" + Type = uint32 + } + GCPS_SWP_LIM = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-SWP-LIM" + Type = uint32 + } + GCPS_ERR = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-ERR" + Type = uint32 + } + GCPS_MM = { + PVName = "EC-GN-P01-GAF-GCPS:STAT-MANM" + Type = uint32 + } + //Input PVs in Variables-kikusui tab. + FHPS_REM_RB = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-REM-RB" + Type = uint32 + } + FHPS_OUTON_RB = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB" + Type = uint32 + } + FHPS_CURR_RB = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-CURR-RB" + Type = uint32 + } + FHPS_ACV_RB = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-ACV-RB" + Type = uint32 + } + FHPS_FRQ_RB = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-FRQ-RB" + Type = uint32 + } + FHPS_SOUR_ON_RB = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-RB" + Type = uint32 + } + FHPS_MEAS_ACV = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV" + Type = float32 + } + GYA_FHPS_MEAS_ACI = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACI" + Type = float32 + } + GYB_FHPS_MEAS_ACI = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACI" + Type = float32 + } + FHPS_MEAS_ACP = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACP" + Type = uint32 + } + FHPS_MEAS_FRQ = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-FRQ" + Type = uint32 + } + FHPS_ERR = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-ERROR" + Type = uint32 + } + FHPS_AUTO_TAGV = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV" + Type = float32 + } + FHPS_AUTO_TIME = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-RU-TIME" + Type = float32 + } + FHPS_AUTO_START = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START" + Type = uint32 + } + + CCPS_REMLOC_RB = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-RB" + Type = uint32 + } + CCPS_OUTON_RB = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-OUTON-RB" + Type = uint32 + } + CCPS_CURR_RB = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-CURR-RB" + Type = uint32 + } + CCPS_DCV_RB = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-DCV-RB" + Type = uint32 + } + CCPS_RANG_RB = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-RANG-RB" + Type = uint32 + } + CCPS_SOUR_ON_RB = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-RB" + Type = uint32 + } + CCPS_MEAS_DCV = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCV" + Type = uint32 + } + GYA_CCPS_MEAS_DCI = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCI" + Type = float32 + } + GYB_CCPS_MEAS_DCI = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCI" + Type = float32 + } + CCPS_MEAS_DCP = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCP" + Type = uint32 + } + CCPS_ERR = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-ERROR" + Type = uint32 + } + CCPS_OUTPUT_AMP = { + PVName = "EC-GN-P01-GAF-CCPS:STAT-AMP" + Type = float32 + } + CCPS_OUTPUT_FREQ = { + PVName = "EC-GN-P01-GAF-CCPS:STAT-FREQ" + Type = float32 + } + CCPS_OUTPUT_OFFS = { + PVName = "EC-GN-P01-GAF-CCPS:STAT-OFFS" + Type = float32 + } + //PXI Board status PVs + PXI6259_0 = { + PVName = "EC-GN-HWCF:6259-0-STATUS" + Type = uint32 + } + PXI6259_1 = { + PVName = "EC-GN-HWCF:6259-1-STATUS" + Type = uint32 + } + PXI6528_0 = { + PVName = "EC-GN-HWCF:6528-0-STATUS" + Type = uint32 + } + PXI6528_1 = { + PVName = "EC-GN-HWCF:6528-1-STATUS" + Type = uint32 + } + PXI6368_0 = { + PVName = "EC-GN-HWCF:6368-0-STATUS" + Type = uint32 + } + PXI6368_1 = { + PVName = "EC-GN-HWCF:6368-1-STATUS" + Type = uint32 + } + } + } + +EPICSCAOutput = { + Class = "EPICSCA::EPICSCAOutput" + CPUMask = "0x100" //change from 0x200 + StackSize = "10000000" + NumberOfBuffers = 2 + Signals = { + PCF_STATE = { + PVName = "EC-GN-P01-GAF:STAT-SM" + Type = uint32 + } + //Analog Output PVs in Variables-signal tab. + FHPS_REF = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-EREF" + Type = float32 + } + BPS_REF = { + PVName = "EC-GN-P01-PB1F:PSU1000-EREF" + Type = float32 + } + APS_REF = { + PVName = "EC-GN-P01-PA1F:STAT-EREF-CONV.A" + Type = float32 + } + MHVPS_REF = { + PVName = "EC-GN-P01-PMF:STAT-EREF-CALC.A" + Type = float32 + } + + //Digital Output PVs in Variables-signal tab. + APS_STOP = { + PVName = "EC-GN-P01-PA1F:PSU3000-CTRP" + Type = uint32 + } + + BPS_STOP = { + PVName = "EC-GN-P01-PB1F:PSU1000-CTRP" + Type = uint32 + } + + BEAM_ON_STAT = { + PVName = "EC-GN-P01-GAFP:FMC4310-YSTA-GAOP" + Type = uint32 + } + + MHVPS_STOP = { + PVName = "EC-GN-P01-PMF:PSU0000-COFF" + Type = uint32 + } + PCF_FLT = { + PVName = "EC-GN-P01-GPF:PCF4210-CTRP" + Type = uint32 + } + HVARMED = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA1" + Type = uint32 + } + HVINJECTION = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA2" + Type = uint32 + } + RFON = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA3" + Type = uint32 + } + + //Output PVs in Variables-operation tab. + MHVPS_PREP_WF = { + PVName = "EC-GN-P01-PMF:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + + } + BPS_PREP_WF = { + PVName = "EC-GN-P01-PB1F:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + APS_PREP_WF = { + PVName = "EC-GN-P01-PA1F:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + FHPS_PREP_WF = { + PVName = "EC-GN-P01-GAF-FHPS:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + MCPS_PREP_WF = { + PVName = "EC-GN-P01-GAF-MCPS:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GCPS_PREP_WF = { + PVName = "EC-GN-P01-GAF-GCPS:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + PREP_TIME_WF = { + PVName = "EC-GN-P01-GAF:STAT-PREP-TIME-WF" + Type = int32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + BEAM_ON_TIME = { + PVName = "EC-GN-P01-GAF:STAT-BEAMON-TIME" + Type = uint32 + } + ELAPSED_TIME = { + PVName = "EC-GN-P01-GAF:STAT-ELAPSED" + Type = uint32 + } + SHOT_ID = { + PVName = "EC-GN-P01-GAF:STAT-SHOT-ID" + Type = uint32 + } + + CSV_LOADED = { + PVName = "EC-GN-P01-GAF:STAT-CSV-LOADED" + Type = uint32 + } + CSV_ERR = { + PVName = "EC-GN-P01-GAF:STAT-CSV-ERR" + Type = uint32 + } + + //Output PVs in Variables-jastec tab. + MCPS_TRG_CURR_SET = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MO" + Type = float32 + } + MCPS_ACT_SP = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP-MO" + Type = uint32 + } + GCPS_TRG_CURR_SET = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MO" + Type = float32 + } + GCPS_ACT_SP = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP-MO" + Type = uint32 + } + + //Output PVs in Variables-kikusui tab. + CCPS_REF = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-EREF" + Type = float32 + } + FHPS_AUTO_STAT = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-STAT" + Type = uint32 + } + //Add 20201117 + APS_HVON = { + PVName = "EC-GN-P01-PA1F:PSU3000-CON-HV" + Type = uint32 + } + APS_SWON = { + PVName = "EC-GN-P01-PA1F:PSU3000-CON-SW" + Type = uint32 + } + BPS_HVON = { + PVName = "EC-GN-P01-PB1F:PSU1000-CON-HV" + Type = uint32 + } + BPS_SWON = { + PVName = "EC-GN-P01-PB1F:PSU1000-CON-SW" + Type = uint32 + } + MHVPS_HVON = { + PVName = "EC-GN-P01-PMF:STAT-HVON-CALC.A" + Type = uint32 + } + } + } + // for ESDN packet subscription/publication. + +SDNSubCommands = { + Class = SDN::SDNSubscriber + Topic = ECPC2SCUJA + Interface = enp27s0f0 + CPUs = 0x200 //change from 100 + Locked = 1 + Timeout = 2 + Signals = { + Header = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + Command = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 64 + } + } + } + +SDNReply = { + Class = SDN::SDNPublisher + Topic = SCUJA2ECPC + Interface = enp27s0f0 + CPUs = 0x200 //changed from 0x100 + Locked = 1 + Signals = { + Header = { + Type = uint8 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ReplyStatus = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ReplyWaveformAck = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + //Status (26Bytes?) is not assigned + //GyrotronA measurements + //56Bytes are used as Gyrotron1 Measurements (verified on 2020/10/22) + GYA_MHVPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_MHVPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_BPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_BPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_APS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_APS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC1_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC1_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC2_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC2_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_MCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_GCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_FHPS_MEAS_ACI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_CCPS_MEAS_DCI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + //GyrotronB measurements + GYB_MHVPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_MHVPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_BPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_BPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_APS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_APS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC1_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC1_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC2_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC2_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_MCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_GCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_FHPS_MEAS_ACI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_CCPS_MEAS_DCI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + } + + // Direct HW accesses. Follwing device/port assignment must be consistent with actual wiring. + // NI6259.0 + // APS_SWON BoardId=0, PortId=3.0 + +NI6259 = { + Class = NI6259::NI6259DIO + DeviceName = "/dev/pxi6259" + BoardId = 1 + Signals = { + NI6259Value = { + Type = uint32 + Mask = 0xFF + PortId = 0 + } + } + } + + //NI6528 digital output has logic low == 0 == close relay. ((See Driver Manual.) + //When the program send ON signal, this program writes 0 on the data source. + +NI6528P3 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.1" + Port = 3 + NI6528P3Value = { + NI6528P3Value = { + Type = uint8 + } + } + } + //P3.0 APS_HVON + //P3.1 APS_SWON + //P3.2 APS_Shutdown + //P3.3 BPS_HVON + //P3.4 BPS_SWON + //P3.5 BPS_Shutdown + //P3.6 GY1_Beam_ON_status + //P3.7 RV5 _cRIO + + +NI6528P4 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.1" + Port = 4 + NI6528P4Value = { + NI6528P4Value = { + Type = uint8 + } + } + } + //P4.0 RV6 _cRIO + //P4.1 RV7 _cRIO + //P4.2 RV8 _cRIO + //P4.3 MHVPS_HVON + //P4.4 MHVPS_Shutdown + //P4.5 MHVPS_MOD + //P4.6 PCF_FLT + //P4.7 HVArmed + + +NI6528P5 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.1" + Port = 5 + NI6528P5Value = { + NI6528P5Value = { + Type = uint8 + } + } + } + //P5.0 HVInjection + //P5.1 RFON + //P5.2 FHPS_Rampup_complete + //P5.3 SCM_RU_Complete + //P5.4 SCM_RD_Complete + //P5.5 CCPS_IN_OPERATION + //P5.6 None + //P5.7 None + + } + +States = { + Class = ReferenceContainer + +Disabled = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM GoErrorGAM InDisabledGAM + GoWaitStandbyGAM choiseGAM MCPSGAM GCPSGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM} + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM } + CPUs = 0x400 + } + } + } + +WaitStandby = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM FHPSSetpointGAM FHPSRampupGAM InWaitStandbyGAM + choiseGAM MCPSGAM GCPSGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + GoDisabledGAM GoWaitReadyGAM GoErrorGAM } + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM } + CPUs = 0x400 + } + } + } + +WaitReady = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM WFRecordGAM PreProgrammedGAM FHPSSetpointGAM FHPSRampupGAM InWaitReadyGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + GoWaitPermitGAM GoWaitStandbyFromReadyGAM GoErrorGAM } + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM } + CPUs = 0x400 + } + } + } + +WaitPermit = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM WFRecordGAM PreProgrammedGAM FHPSSetpointGAM FHPSRampupGAM InWaitPermitGAM + choiseGAM EPICSOutputGAM GoWaitReadyFromWaitPermitGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + GoWaitHVONGAM GoWaitHVON_PREP_GAM GoWaitHVON_SDN_GAM GoWaitHVON_SDN_PREP_GAM GoErrorGAM } + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM } + CPUs = 0x400 + } + } + } + + //Real-Time state for HVPS sequence timing control. + +WaitHVON = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM FHPSSetpointGAM FHPSRampupGAM InWaitHVONGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM } + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM + GAMRealTimeStateMachine NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x400 + } +// +Thread4 = { +// Class = RealTimeThread +// Functions = {Timer10HzGAM GAMExecTime } +// CPUs = 0x800 +// } + } + } + +WaitHVON_SDN = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM FHPSRampupGAM InWaitHVON_SDNGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM } + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM + GAMSDNRealTimeStateMachine terminalInterfaceGAM NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x400 + } + } + } + +WaitHVON_PREP = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM PreProgrammedGAM FHPSRampupGAM InWaitHVON_PREPGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM } + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM + GAMRealTimeStateMachine NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x400 + } + } + } + +WaitHVON_SDN_PREP = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM PreProgrammedGAM FHPSRampupGAM InWaitHVON_SDN_PREPGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM} + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM + GAMSDNRealTimeStateMachine terminalInterfaceGAM NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x400 + } + } + } + + +Error = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM InErrorGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + ExitedHVArmedInjectionRFONGAM ResetPSsGAM + FromErrorToWaitStandbyGAM ErrorGAM choiseGAM EPICSOutputGAM FHPSSetpointGAM FHPSRampupGAM CCPSWaveformGAM} + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM } + CPUs = 0x400 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronB_FY19_P1.cfg b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronB_FY19_P1.cfg new file mode 100644 index 0000000..6fb3d04 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronB_FY19_P1.cfg @@ -0,0 +1,4946 @@ +// LoggerService node: See /var/log/messages file. +// +LoggerService = { +// Class = LoggerService +// CPUs = 0x8000 +// StackSize = 32768 +// NumberOfLogPages = 128 +// +SysLogger = { +// Class = SysLogger +// Format = "EtOoFmC" +// PrintKeys = 1 +// Ident = "JAGyA" +// } +// } + +// StateMachine node ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +Start = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +DISABLED = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITSTANDBY = { + Class = ReferenceContainer + +GoWaitReady = { + Class = StateMachineEvent + NextState = "WAITREADY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitReady + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoDisabled = { + Class = StateMachineEvent + NextState = "DISABLED" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Disabled + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITREADY = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITPERMIT = { + Class = ReferenceContainer + +GoWaitReady = { + Class = StateMachineEvent + NextState = "WAITREADY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitReady + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON = { + Class = StateMachineEvent + NextState = "WAITHVON" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON_SDN = { + Class = StateMachineEvent + NextState = "WAITHVON_SDN" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON_SDN + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON_PREP = { + Class = StateMachineEvent + NextState = "WAITHVON_PREP" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON_PREP + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitHVON_SDN_PREP = { + Class = StateMachineEvent + NextState = "WAITHVON_SDN_PREP" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitHVON_SDN_PREP + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + // HVPS sequence control states. + +WAITHVON = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITHVON_SDN = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITHVON_PREP = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITHVON_SDN_PREP = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoWaitPermit = { + Class = StateMachineEvent + NextState = "WAITPERMIT" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitPermit + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + +GoError = { + Class = StateMachineEvent + NextState = "ERROR" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = Error + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + // Error State (Enter by HVPS errors) + +ERROR = { + Class = ReferenceContainer + +GoWaitStandby = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "ERROR" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } +} + +// RealTime Application node ++JAGyrotronRTApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + //Timer GAM for thread 1. + +Timer1kHzGAM = { + Class = IOGAM + InputSignals = { + Counter = { + DataSource = Timer1kHz + Type = uint32 + Frequency = 1000 //Hz + } + Time = { + DataSource = Timer1kHz + Type = uint32 + } + } + OutputSignals = { + Counter1kHz = { + DataSource = DDB1 + Type = uint32 + } + Time1kHz = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM to update PCF state-machine state + +InErrorGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 1 + } + } + } + +InDisabledGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 2 + } + } + } + +InWaitStandbyGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 3 + } + } + } + +InWaitReadyGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 4 + } + } + } + +InWaitPermitGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 5 + } + } + } + +InWaitHVONGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 6 + } + } + } + +InWaitHVON_PREPGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 7 + } + } + } + +InWaitHVON_SDNGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 8 + } + } + } + +InWaitHVON_SDN_PREPGAM = { + Class = ConstantGAM + OutputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + Default = 9 + } + } + } + + // Copy data from DDB1 to EPICSCAOutput DataSource. + +EPICSOutputGAM = { + Class = IOGAM + InputSignals = { + PCF_STATE = { + DataSource = DDB1 + Type = uint32 + } + MCPS_ACT_SP = { + DataSource = DDB1 + Type = uint32 + } + GCPS_ACT_SP = { + DataSource = DDB1 + Type = uint32 + } + BPS_OUT = { + DataSource = DDB1 + Type = float32 + } + APS_OUT = { + DataSource = DDB1 + Type = float32 + } + MCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + GCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + FHPS_REF = { + DataSource = DDB1 + Type = float32 + } + CSV_LOADED = { + DataSource = DDB1 + Type = uint32 + } + CSV_ERR = { + DataSource = DDB1 + Type = uint32 + } + ELAPSED_TIME = { + DataSource = DDB1 + Type = uint32 + } + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + RFON = { + DataSource = DDB1 + Type = uint32 + } + MHVPS_OUT = { + DataSource = DDB1 + Type = float32 + } + PREP_TIME_WF = { + DataSource = DDB1 + Type = int32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + MHVPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + BPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + APS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + MCPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GCPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + FHPS_PREP_WF = { + DataSource = DDB1 + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + CCPS_REF = { + DataSource = DDB1 + Type = float32 + } + MHVPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + APS_STOP = { + DataSource = DDB1 + Type = uint32 + } + BPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + BEAM_ON_TIME = { + DataSource = DDB1 + Type = uint32 + } + PCF_FLT = { + DataSource = DDB1 + Type = uint32 + } + BEAM_ON_STAT = { + DataSource = DDB1 + Type = uint32 + } + SHOT_ID = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + FHPS_AUTO_STAT = { + DataSource = DDB1 + Type = uint32 + } + //Add 20201117 + APS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + APS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + MHVPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + PCF_STATE = { + DataSource = EPICSCAOutput + Type = uint32 + } + MCPS_ACT_SP = { + DataSource = EPICSCAOutput + Type = uint32 + } + GCPS_ACT_SP = { + DataSource = EPICSCAOutput + Type = uint32 + } + BPS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + APS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + MCPS_TRG_CURR_SET = { + DataSource = EPICSCAOutput + Type = float32 + } + GCPS_TRG_CURR_SET = { + DataSource = EPICSCAOutput + Type = float32 + } + FHPS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + CSV_LOADED = { + DataSource = EPICSCAOutput + Type = uint32 + } + CSV_ERR = { + DataSource = EPICSCAOutput + Type = uint32 + } + ELAPSED_TIME = { + DataSource = EPICSCAOutput + Type = uint32 + } + HVARMED = { + DataSource = EPICSCAOutput + Type = uint32 + } + HVINJECTION = { + DataSource = EPICSCAOutput + Type = uint32 + } + RFON = { + DataSource = EPICSCAOutput + Type = uint32 + } + + MHVPS_REF = { + DataSource = EPICSCAOutput + Type = float32 + } + PREP_TIME_WF = { + DataSource = EPICSCAOutput + } + MHVPS_PREP_WF = { + DataSource = EPICSCAOutput + } + BPS_PREP_WF = { + DataSource = EPICSCAOutput + } + APS_PREP_WF = { + DataSource = EPICSCAOutput + } + MCPS_PREP_WF = { + DataSource = EPICSCAOutput + } + GCPS_PREP_WF = { + DataSource = EPICSCAOutput + } + FHPS_PREP_WF = { + DataSource = EPICSCAOutput + } + CCPS_REF = { + DataSource = EPICSCAOutput + } + MHVPS_STOP = { + DataSource = EPICSCAOutput + Type = uint32 + } + APS_STOP = { + DataSource = EPICSCAOutput + Type = uint32 + } + BPS_STOP = { + DataSource = EPICSCAOutput + Type = uint32 + } + BEAM_ON_TIME = { + DataSource = EPICSCAOutput + Type = uint32 + } + PCF_FLT = { + DataSource = EPICSCAOutput + } + BEAM_ON_STAT = { + DataSource = EPICSCAOutput + } + SHOT_ID = { + DataSource = EPICSCAOutput + } + FHPS_AUTO_STAT = { + DataSource = EPICSCAOutput + } + //Added 20201117 + APS_HVON = { + DataSource = EPICSCAOutput + } + APS_SWON = { + DataSource = EPICSCAOutput + } + BPS_HVON = { + DataSource = EPICSCAOutput + } + BPS_SWON = { + DataSource = EPICSCAOutput + } + MHVPS_HVON = { + DataSource = EPICSCAOutput + } + } + } + + // Message GAM in Disabled state. + +GoWaitStandbyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1} + Comparators = {EQUALS} + InputSignals = { + PLC_SELECT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + +GoWaitStandbyFromReadyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0} + Comparators = {EQUALS} + InputSignals = { + PLC_STANDBY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + + // MCPS, GCPS PV to DDB1 + +GCPSGAM = { + Class = IOGAM + InputSignals = { + GCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + GCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + } + } + +MCPSGAM = { + Class = IOGAM + InputSignals = { + MCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + MCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + } + } + // Message GAM in Standby state. + +GoDisabledGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0} + Comparators = {EQUALS} + InputSignals = { + PLC_SELECT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoDisabled + } + } + + //GAM in WaitReady state. Check MCPS,GCPS,FHPS state for state transition. + +GoWaitReadyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {3 3 1} + ExpectedFloatValues = {0 0 0} + Comparators = {EQUALS GREATER EQUALS GREATER EQUALS GREATER} + InputSignals = { + MCPS_ACT_RB = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_MCPS_CURR_MON = { + DataSource = EPICSCAInput + Type = float32 + } + GCPS_ACT_RB = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_GCPS_CURR_MON = { + DataSource = EPICSCAInput + Type = float32 + } + FHPS_RU = { + DataSource = EPICSCAInput + Type = uint32 + } + FHPS_MEAS_ACV = { + DataSource = EPICSCAInput + Type = float32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitReady + } + } + + //GAM for prepro + +WFRecordGAM = { + Class = JAWFRecordGAM + Directory = "../Configurations" //TODO: Enter directory path for prepro files. + InputSignals = { + CSV_LOAD = { + DataSource = EPICSCAInput + Type = uint32 + } + Filename = { + Alias = CSV_NAME + DataSource = EPICSCAInput + } + } + OutputSignals = { + PREP_TIME_WF = { + DataSource = DDB1 + } + MHVPS_PREP_WF = { + DataSource = DDB1 + } + BPS_PREP_WF = { + DataSource = DDB1 + } + APS_PREP_WF = { + DataSource = DDB1 + } + MCPS_PREP_WF = { + DataSource = DDB1 + } + GCPS_PREP_WF = { + DataSource = DDB1 + } + FHPS_PREP_WF = { + DataSource = DDB1 + } + } + } + +PreProgrammedGAM = { + Class = JAPreProgrammedGAM + Directory = "../Configurations" // TODO: Enter the directory path for prepro files. + PreProgrammedPeriodMs = 1 // Parameter update periods in ms. + InputSignals = { + CSV_LOAD = { + DataSource = EPICSCAInput + Type = uint32 + } + Filename = { + Alias = CSV_NAME + DataSource = EPICSCAInput + } + FHPS_REF = { + Alias = FHPS_AUTO_TAGV + DataSource = EPICSCAInput + Type = float32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + GYA_PREPRO_TIME = { + DataSource = DDB1 + Type = int32 + } + MHVPS_REF = { + DataSource = DDB1 + Type = float32 + } + BPS_REF = { + DataSource = DDB1 + Type = float32 + } + APS_REF = { + DataSource = DDB1 + Type = float32 + } + MCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + GCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + FHPS_PrePro = { + DataSource = DDB1 + Type = float32 + } + CSV_LOADED = { + DataSource = DDB1 + Type = uint32 + } + CSV_ERR = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM in WaitReady state. Check PLC_READY and CCPS_IN_OPERATION status. + +GoWaitPermitGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 1} //20201222 modified. In the past, 0 1. + Comparators = {EQUALS EQUALS} + InputSignals = { + CCPS_IN_OPERATION = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_READY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitPermit + } + } + + //GAM in WaitPermit state. Check Permit and States of Operation Modes. + +GoWaitReadyFromWaitPermitGAM = { + Class = JAMessageGAM + Operation = OR + ExpectedIntValues = {0 0} + Comparators = {EQUALS EQUALS} + InputSignals = { + PLC_STANDBY = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_READY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitReady + } + } + +GoWaitHVONGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0 0 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON + } + } + +GoWaitHVON_PREP_GAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0 1 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON_PREP + } + } + +GoWaitHVON_SDN_GAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 0 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON_SDN + } + } + +GoWaitHVON_SDN_PREP_GAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 1 1} + Comparators = {EQUALS EQUALS EQUALS} + InputSignals = { + PLC_SYNCMODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PREP_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitHVON_SDN_PREP + } + } + + //GAM in WaitHVON_xx states. If PLC_READY is zero, goto WaitStandby. + +FromWaitHVONToWaitStandby = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0} + Comparators = {EQUALS} + InputSignals = { + PLC_READY = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + //GAM in WaitHVON_xx states. If PLC_PERMIT is zero, goto WaitPermit. + +FromWaitHVONToWaitPermit = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {0 0 0 0 0 0} //modified 20201222 + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} //modified 20201222 + InputSignals = { + PLC_PERMIT = { + DataSource = EPICSCAInput + Type = uint32 + } + //add 20201222 + APS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + MHVPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + APS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + }//20201222 + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitPermit + } + } + + // Check the selected mode, and check maximum pulse length. Use with a StateMachineGAM + +ModeLimitGAM = { + Class = JAModeControlGAM + InputSignals = { + PLC_MODE1 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD1_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_MODE2 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD2_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_MODE3 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD3_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_MODE4 = { + DataSource = EPICSCAInput + Type = uint32 + } + MD4_SHOTLEN_LIM = { + DataSource = EPICSCAInput + Type = uint32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + Time = { + DataSource = DDB1 + Type = uint32 + } + HVInjection = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + MODE_SHOTLEN_FLAG = { + DataSource = DDB1 + Type = uint32 + } + } + } + + // State notify GAMs. These GAMs are in all WaitHVON states. + +writeBeamONStateGAM = { + Class = IOGAM + InputSignals = { + BEAM_ON_STAT = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + BEAM_ON_STAT = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeHVArmedStateGAM = { + Class = IOGAM + InputSignals = { + HVARMED = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeHVInjectionStateGAM = { + Class = IOGAM + InputSignals = { + HVINJECTION = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeRFONStateGAM = { + Class = IOGAM + InputSignals = { + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + RFON = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeBeamONTimeGAM = { + Class = IOGAM + InputSignals = { + BeamONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + ELAPSED_TIME = { + DataSource = DDB1 + Type = uint32 + } + } + } + +writeRFONTimeGAM = { + Class = IOGAM + InputSignals = { + RFONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + OutputSignals = { + BEAM_ON_TIME = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM for trianguler waveform generation. + +CCPSWaveformGAM = { + Class = JATriangleWaveGAM + InputSignals = { + Frequency = { + Alias = CCPS_OUTPUT_FREQ + DataSource = EPICSCAInput + Type = float32 + } + Amplitude = { + Alias = CCPS_OUTPUT_AMP + DataSource = EPICSCAInput + Type = float32 + } + Offset = { + Alias = CCPS_OUTPUT_OFFS + DataSource = EPICSCAInput + Type = float32 + } + PLCSTANDBY = { + Alias = PLC_STANDBY + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + CCPS_REF = { + DataSource = DDB1 + Type = float32 + } + } + } + //GAM for FHPS ramping up operation. + +FHPSSetpointGAM = { + Class = IOGAM + InputSignals = { + FHPS_AUTO_TAGV = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + FHPS_TAGV = { + DataSource = DDB1 + Type = float32 + } + } + } + +FHPSRampupGAM = { + Class = JARampupGAM + InputSignals = { + Currspv = { + Alias = FHPS_REF + DataSource = DDB1 + Type = float32 + } + Targetv = { + Alias = FHPS_TAGV + DataSource = DDB1 + Type = float32 + } + Time = { + Alias = FHPS_AUTO_TIME + DataSource = EPICSCAInput + Type = float32 + } + Start = { + Alias = FHPS_AUTO_START + DataSource = EPICSCAInput + Type = uint32 + } + PLC_STANDBY = { + Alias = PLC_STANDBY + DataSource = EPICSCAInput + Type = uint32 + } + MANUAL_AUTO = { + Alias = FHPS_MANM + DataSource = EPICSCAInput + Type = uint32 + } + FHPS_PrePro = { + DataSource = DDB1 + Type = float32 + } + } + OutputSignals = { + FHPS_REF = { + DataSource = DDB1 + Type = float32 + } + FHPS_AUTO_STAT = { + DataSource = DDB1 + Type = uint32 + } + } + } + //GAM for error handling. + // GAM that sets ERROR and STOP FLAGS for APS, BPS and MHVPS when we enter Error state and resets them when we leave Error state + +ErrorGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = AND + ExpectedValues = {1 0 0 0 0 0 0 0 0 0 0} + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} + Values = {0 0 0} + InputSignals = { + // Conditional signals + RESET_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + MHVPS_STOP_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + APS_STOP_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + BPS_STOP_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + MHVPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + APS_STOP = { + DataSource = DDB1 + Type = uint32 + } + BPS_STOP = { + DataSource = DDB1 + Type = uint32 + } + } + } + +StopRequestGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {1 1 1 1 1 1 1 1 1 1} + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} + Values = {1} + InputSignals = { + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + StopRequest_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + StopRequest = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //Test whether board status are stable + +GAMDisplayBoardStatus = { + Class = IOGAM + InputSignals = { + CCPS_OUTPUT_OFFS = { + DataSource = EPICSCAInput + Type = float32 + } + } + OutputSignals = { + CCPS_OUTPUT_FREQ_DISP = { + DataSource = Display + Type = float32 + } + } + } + //Check PXI board status. + +PXI6259ErrorGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {0 0 0 0} + Comparators = {GREATER GREATER GREATER GREATER} + Values = {1} + InputSignals = { + // Conditional signals + PXI6259_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6259_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6528_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6528_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + PCF_FLT_6259_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT_6259 = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PXI6368Error03GAM = {// detect Hardware error (status number 3) for PXI6368 boards. + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {3 3} + Comparators = {EQUALS EQUALS} + Values = {1} + InputSignals = { + PXI6368_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6368_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + PCF_FLT_6368_ERRNO_03_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT_6368_ERRNO_03 = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PXI6368Error04GAM = {// detect No board error (status number 4) for PXI6368 boards. + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {4 4} + Comparators = {EQUALS EQUALS} + Values = {1} + InputSignals = { + PXI6368_0 = { + DataSource = EPICSCAInput + Type = uint32 + } + PXI6368_1 = { + DataSource = EPICSCAInput + Type = uint32 + } + // Default values + PCF_FLT_6368_ERRNO_04_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT_6368_ERRNO_04 = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PXIErrorGAM = { + Class = JAConditionalSignalUpdateGAM + Operation = OR + ExpectedValues = {0 0 0} + Comparators = {GREATER GREATER GREATER} + Values = {1} + InputSignals = { + PCF_FLT_6368_ERRNO_03 = { + DataSource = DDB1 + Type = uint32 + } + PCF_FLT_6368_ERRNO_04 = { + DataSource = DDB1 + Type = uint32 + } + PCF_FLT_6259 = { + DataSource = DDB1 + Type = uint32 + } + // Default values + PCF_FLT_DEFAULT = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + PCF_FLT = { + DataSource = DDB1 + Type = uint32 + } + } + } + + + +FromErrorToWaitStandbyGAM = { + Class = JAMessageGAM + Operation = AND + ExpectedIntValues = {1 0 0 0 0 0 0 0 0 0 0} + Comparators = {EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS EQUALS} + InputSignals = { + RESET_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoWaitStandby + } + } + // From any state to Error state. + +GoErrorGAM = { + Class = JAMessageGAM + Operation = OR + ExpectedIntValues = {1 1 1 1 1 1 1 1 1 1} + InputSignals = { + GYA_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_APS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYA_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + GYB_BPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OV = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_OC = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + MIS_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + MISB_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ITL = { + DataSource = EPICSCAInput + Type = uint32 + } + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoError + } + } + // Reset HVPS outputs. ToDo: Fix to access NI d.s. + +ResetPSsGAM = { + Class = ConstantGAM + OutputSignals = { + MHVPS_HVON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + BPS_HVON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + BPS_SWON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + APS_HVON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + APS_SWON = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + } + // Update status. ToDo: Fix to access NI d.s. + +ExitedHVArmedInjectionRFONGAM = { + Class = JAConditionalSignalUpdateGAM + Values = {0 0 0} + InputSignals = { + // Condition signals + // Default output values + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + RFON = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + HVARMED = { + DataSource = DDB1 + Type = uint32 + } + HVINJECTION = { + DataSource = DDB1 + Type = uint32 + } + RFON = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM for SDN communication.(ProcessWF:thread1, Subscribe/Publish:thread2) + +SDNCommandGAM = { + Class = IOGAM + InputSignals = { + Command = { + DataSource = SDNSubCommands + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 64 + Ranges = {{0 0}} + // TODO uncomment this for release/testing + //Frequency = 1 + } + ESDNTime = { + DataSource = SDNSubCommands + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + OutputSignals = { + Command = { + DataSource = RealTimeThreadAsyncBridge + Type = uint16 + } + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + } + } + + +SDNReplyGAM = { + Class = IOGAM + InputSignals = { + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + WaveformPacketID = { + DataSource = DDB1 + Type = uint16 + } + GYA_BPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_BPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_BPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_BPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_APS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_APS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_APS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_APS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC1_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC1_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC1_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC1_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC2_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC2_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_ARC2_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_ARC2_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_MHVPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_MHVPS_MESVOLT = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_MHVPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYB_MHVPS_MESCURR = { + DataSource = EPICSCAInput + Ranges = {{0 0}} + } + GYA_MCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYB_MCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYA_GCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYB_GCPS_CURR_MON = { + DataSource = EPICSCAInput + } + GYA_FHPS_MEAS_ACI = { + DataSource = EPICSCAInput + } + GYB_FHPS_MEAS_ACI = { + DataSource = EPICSCAInput + } + GYA_CCPS_MEAS_DCI = { + DataSource = EPICSCAInput + } + GYB_CCPS_MEAS_DCI = { + DataSource = EPICSCAInput + } + } + OutputSignals = { + ESDNTime = { + DataSource = SDNReply + Type = uint32 + Trigger = 1 + } + ReplyWaveformAck = { + DataSource = SDNReply + Type = uint16 + } + GYA_BPS_MESVOLT = { + DataSource = SDNReply + } + GYB_BPS_MESVOLT = { + DataSource = SDNReply + } + GYA_BPS_MESCURR = { + DataSource = SDNReply + } + GYB_BPS_MESCURR = { + DataSource = SDNReply + } + GYA_APS_MESVOLT = { + DataSource = SDNReply + } + GYB_APS_MESVOLT = { + DataSource = SDNReply + } + GYA_APS_MESCURR = { + DataSource = SDNReply + } + GYB_APS_MESCURR = { + DataSource = SDNReply + } + GYA_ARC1_MESVOLT = { + DataSource = SDNReply + } + GYB_ARC1_MESVOLT = { + DataSource = SDNReply + } + GYA_ARC1_MESCURR = { + DataSource = SDNReply + } + GYB_ARC1_MESCURR = { + DataSource = SDNReply + } + GYA_ARC2_MESVOLT = { + DataSource = SDNReply + } + GYB_ARC2_MESVOLT = { + DataSource = SDNReply + } + GYA_ARC2_MESCURR = { + DataSource = SDNReply + } + GYB_ARC2_MESCURR = { + DataSource = SDNReply + } + GYA_MHVPS_MESVOLT = { + DataSource = SDNReply + } + GYB_MHVPS_MESVOLT = { + DataSource = SDNReply + } + GYA_MHVPS_MESCURR = { + DataSource = SDNReply + } + GYB_MHVPS_MESCURR = { + DataSource = SDNReply + } + GYA_MCPS_CURR_MON = { + DataSource = SDNReply + } + GYB_MCPS_CURR_MON = { + DataSource = SDNReply + } + GYA_GCPS_CURR_MON = { + DataSource = SDNReply + } + GYB_GCPS_CURR_MON = { + DataSource = SDNReply + } + GYA_FHPS_MEAS_ACI = { + DataSource = SDNReply + } + GYB_FHPS_MEAS_ACI = { + DataSource = SDNReply + } + GYA_CCPS_MEAS_DCI = { + DataSource = SDNReply + } + GYB_CCPS_MEAS_DCI = { + DataSource = SDNReply + } + } + } + //Write SDN waveform data into PS setpoint PV. + + // Timer for SDN thread. + +TimeSDNGAM = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = TimerSDN + Type = uint32 + } + Counter = { + DataSource = TimerSDN + Type = uint32 + Frequency = 1000 //operation:1k(=1ms cyc), debug:10 + } + RTThreadPerf = { + DataSource = Timings + Alias = "WaitHVON.Thread3_CycleTime" + Type = uint32 + } + } + OutputSignals = { + TimeSDN = { + DataSource = DDB1 + Type = uint32 + } + CounterSDN = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerfSDN = { + DataSource = DDB1 + Type = uint32 + } + } + } + + //GAM for realtime statemachine + +Timer100kHzGAM = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = Timer + Type = uint32 + } + Counter = { + DataSource = Timer + Type = uint32 + Frequency = 200000 //operation:100k(=10us cyc), debug:10 + } + RTThreadPerf = { + DataSource = Timings + Alias = "WaitHVON.Thread3_CycleTime" + Type = uint32 + } + } + OutputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerf = { + DataSource = DDB1 + Type = uint32 + } + } + } + + // Digital Output port access. (These GAMs are different from GYA.) + // EPICS PV to one uint8 variable + +NI6528P3GAM = { + Class = JABitSumGAM + InputSignals = { + APS_HVON = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_SWON = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_STOP = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_HVON = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_SWON = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_STOP = { + DataSource = EPICSCAInput + Type = uint32 + } + BEAM_ON_STAT = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV5 = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + NI6528P3CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P4GAM = { + Class = JABitSumGAM + InputSignals = { + DO_REV6 = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV7 = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV8 = { + DataSource = EPICSCAInput + Type = uint32 + } + None1 = { + DataSource = DDB1 + Type = uint32 + Defualt = 0 + } + None2 = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + None3 = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + HVARMED = { + DataSource = EPICSCAInput + Type = uint32 + } + HVINJECTION = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + NI6528P4CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P4GYAGAM = { + Class = JABitSumGAM + InputSignals = { + DO_REV6_GYA = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV7_GYA = { + DataSource = EPICSCAInput + Type = uint32 + } + DO_REV8_GYA = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_HVON = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_STOP = { + DataSource = EPICSCAInput + Type = uint32 + } + MHVPS_MODSW = { + DataSource = EPICSCAInput + Type = uint32 + } + PCF_FLT = { + DataSource = EPICSCAInput + Type = uint32 + } + HVARMED_GYA = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + NI6528P4GYACurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P5GAM = { + Class = JABitSumGAM + InputSignals = { + RFON = { + DataSource = EPICSCAInput + Type = uint32 + } + FHPS_RU = { + DataSource = EPICSCAInput + Type = uint32 + } + SCM_RU = { + DataSource = EPICSCAInput + Type = uint32 + } + CCPS_IN_OPERATION = { + DataSource = EPICSCAInput + Type = uint32 + } + REV2_PLC = { + DataSource = EPICSCAInput + Type = uint32 + } + REV3_PLC = { + DataSource = EPICSCAInput + Type = uint32 + } + None4 = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + None5 = { + DataSource = DDB1 + Type = uint32 + Default = 0 + } + } + OutputSignals = { + NI6528P5CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + // reversed uint8 variable (value to write on port.) + +NI6528P3PV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P3CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P3PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P4PV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P4CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P4PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P4GYAPV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P4GYACurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P4GYAPortValue = { + DataSource = DDB1 + Type = uint8 + } + } + } + +NI6528P5PV2PortGAM = { + Class = JABitReverseGAM + InputSignals = { + NI6528P5CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P5PortValue = { + DataSource = NI6528P5 + Type = uint8 + } + } + } + // write a uint8 port value to PXI data source. + +NI6528P3WriteGAM = { + Class = IOGAM + InputSignals = { + NI6528P3PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P3Value = { + DataSource = NI6528P3 + Type = uint8 + } + } + } + +NI6528P4WriteGAM = { + Class = IOGAM + InputSignals = { + NI6528P4PortValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P4Value = { + DataSource = NI6528P4 + Type = uint8 + } + } + } + +NI6528P4GYAWriteGAM = { + Class = IOGAM + InputSignals = { + NI6528P4GYAPortValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6528P4GYAValue = { + DataSource = NI6528P4GYA + Type = uint8 + } + } + } + + //Thread3 pulse parameter EPICS PVs read. + +GAMEPICSCA = { + Class = IOGAM + InputSignals = { + MHVPS_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_HVON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + APS_SWON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_HVON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + BPS_SWON_DT = { + DataSource = EPICSCAInput + Type = uint32 + } + SHOTLEN = { + DataSource = EPICSCAInput + Type = uint32 + } + PLC_ON = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + MHVPS_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + SHOTLEN = { + DataSource = DDB1 + Type = uint32 + } + PLC_ON = { + DataSource = DDB1 + Type = uint32 + } + } + } + + // Real-Time state machine GAMs + +GAMRealTimeStateMachine = { + Class = JARTStateMachineGAM + ConditionTrigger = 1 + mhvps_hvon = 4 + aps_hvon = 1 + aps_swon = 16 + bps_hvon = 2 + bps_swon = 8 + InputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + PLC_ON = { + DataSource = DDB1 + Type = uint32 + } + MHVPS_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + SHOTLEN = { + DataSource = DDB1 + Type = uint32 + } + StopRequest = { + DataSource = DDB1 + Type = uint32 + } + MODE_SHOTLEN_FLAG = { + DataSource = DDB1 + Type = uint32 + } + SHORT_PULSE_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + //Add 20210120 + MHVPS_MODSW = { + DataSource = EPICSCAInput + Type = uint32 + } + //Add 20210120 + DO_REV6_GYA = { + DataSource = EPICSCAInput + Type = uint32 + } + + } + OutputSignals = { + RTSMValue = { + DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + BEAM_ON_STAT = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVARMED = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVINJECTION = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BeamONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + SHOT_ID = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + //Added 20201117 + APS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + APS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BPS_SWON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + MHVPS_HVON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + NI6259Value = { + DataSource = NI6259 + //DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + NI6528P3Value = { + DataSource = NI6528P3 + //DataSource = DDB1 + Type = uint8 + } + NI6528P4GYAValue = { + DataSource = NI6528P4GYA + //DataSource = DDB1 + Type = uint8 + } + } + } + +GAMSDNRealTimeStateMachine = { + Class = JASDNRTStateMachineGAM + ConditionTrigger = 1 + mhvps_hvon = 4 + aps_hvon = 1 + aps_swon = 16 + bps_hvon = 2 + bps_swon = 8 + InputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + PLC_ON = { + DataSource = DDB1 + Type = uint32 + } + MHVPS_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON_DT = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON_DT = { + DataSource = DDB1 + Type = uint32 + } + SHOTLEN = { + DataSource = DDB1 + Type = uint32 + } + StopRequest = { + DataSource = DDB1 + Type = uint32 + } + MODE_SHOTLEN_FLAG = { + DataSource = DDB1 + Type = uint32 + } + Command = { + DataSource = RealTimeThreadAsyncBridge + Type = uint16 + } + + } + OutputSignals = { + RTSMValue = { + DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + BeamON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVARMED = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + HVINJECTION = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFON = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + BeamONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + RFONTime = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + SHOT_ID = { + DataSource = RealTimeThreadAsyncBridge + Type = uint32 + } + } + } + + //Terminal Interface reads three inputs. + // INPUTs: StateMahine Value, NI6528P3Value and NI6528P4Value + // OUTPUTs: Each NIxxx data sources. + +terminalInterfaceGAM = { + Class = JATerminalInterfaceGAM + mhvps_hvon_term = 4 + aps_hvon_term = 1 + aps_swon_term = 16 + bps_hvon_term = 2 + bps_swon_term = 8 + InputSignals = { + MHVPS_HVON = { + DataSource = DDB1 + Type = uint32 + } + APS_HVON = { + DataSource = DDB1 + Type = uint32 + } + APS_SWON = { + DataSource = DDB1 + Type = uint32 + } + BPS_HVON = { + DataSource = DDB1 + Type = uint32 + } + BPS_SWON = { + DataSource = DDB1 + Type = uint32 + } + SHORT_PULSE_MODE = { + DataSource = EPICSCAInput + Type = uint32 + } + //Input signals about HW terminal. + RTSMValue = { + DataSource = DDB1 + Type = uint32 + } + NI6528P3CurrentValue = { + DataSource = DDB1 + Type = uint8 + } + NI6528P4GYACurrentValue = { + DataSource = DDB1 + Type = uint8 + } + } + OutputSignals = { + NI6259Value = { + DataSource = NI6259 + //DataSource = DDB1 + Type = uint32 + Trigger = 1 + } + NI6528P3Value = { + DataSource = NI6528P3 + //DataSource = DDB1 + Type = uint8 + } + NI6528P4GYAValue = { + DataSource = NI6528P4GYA + //DataSource = DDB1 + Type = uint8 + } + } + } + + // Switching AO port source between internal variable and EPICS PV. + +choiseGAM = { + Class = JASourceChoiseGAM + numberOfPVs = 5 + InputSignals = { + BPS_REF = { + DataSource = DDB1 + Type = float32 + } + BPS_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + BPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + APS_REF = { + DataSource = DDB1 + Type = float32 + } + APS_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + APS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + MHVPS_REF = { + DataSource = DDB1 + Type = float32 + } + MHVPS_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + MHVPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + MCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + MCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + MCPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + GCPS_TRG_CURR_SET = { + DataSource = DDB1 + Type = float32 + } + GCPS_TRG_CURR_MANUAL = { + DataSource = EPICSCAInput + Type = float32 + } + GCPS_MM = { + DataSource = EPICSCAInput + Type = uint32 + } + + } + OutputSignals = { + BPS_OUT = { + DataSource = DDB1 + Type = float32 + } + APS_OUT = { + DataSource = DDB1 + Type = float32 + } + MHVPS_OUT = { + DataSource = DDB1 + Type = float32 + } + MCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + GCPS_OUT = { + DataSource = DDB1 + Type = float32 + } + } + } + + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + AllowNoProducers = 1 + ResetUnusedVariablesAtStateChange = 0 + } + // Timer for thread 1 (Normal RT state execution cycle.) + +Timer1kHz = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x1000 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + +TimerSDN = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x2000 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + // Timer for thread 3 (RTStateMachineGAM execution cycle.) + +Timer = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 40 + ExecutionMode = RealTimeThread + CPUMask = 0x4000 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + + +Timings = { + Class = TimingDataSource + } + +Display = { + Class = LoggerDataSource + } + // for data exechange between threads. + +RealTimeThreadAsyncBridge = { + Class = RealTimeThreadAsyncBridge + NumberOfBuffers = 20 + } + // for access ECPIS PV. + +EPICSCAInput = { + Class = "EPICSCA::EPICSCAInput" + CPUMask = "0x1000" //change from 200 + StackSize = "10000000" + Signals = { + // PV for GYA(6528.1 port4) + DO_REV6_GYA = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV6" + Type = uint32 + } + DO_REV7_GYA = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV7" + Type = uint32 + } + DO_REV8_GYA = { + PVName = "EC-GN-P01-GAFP:FMC4310-RV8" + Type = uint32 + } + HVARMED_GYA = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GA1" + Type = uint32 + } + // PV for DO + REV2_PLC = { + PVName = "EC-GN-P01-GPS:PLC4110-RV2" + Type = uint32 + } + REV3_PLC = { + PVName = "EC-GN-P01-GPS:PLC4110-RV3" + Type = uint32 + } + // PV for manually setting + BPS_MM = { + PVName = "EC-GN-P01-PB2F:STAT-MANM" + Type = uint32 + } + BPS_MANUAL = { + PVName = "EC-GN-P01-PB2F:PSU2000-EREF-MSP" + Type = float32 + } + APS_MM = { + PVName = "EC-GN-P01-PA2F:STAT-MANM" + Type = uint32 + } + APS_MANUAL = { + PVName = "EC-GN-P01-PA2F:PSU4000-EREF-MSP" + Type = float32 + } + MHVPS_MANUAL = { + PVName = "EC-GN-P01-PMF:PSU0000-EREF-MSP" + Type = float32 + } + MHVPS_MM = { + PVName = "EC-GN-P01-PMF:STAT-MANM" + Type = uint32 + } + // Analog Input PVs. + GYA_BPS_MESVOLT = { + PVName = "EC-GN-P01-PB1F:PSU1000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_BPS_MESVOLT = { + PVName = "EC-GN-P01-PB2F:PSU2000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_BPS_MESCURR = { + PVName = "EC-GN-P01-PB1F:PSU1000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_BPS_MESCURR = { + PVName = "EC-GN-P01-PB2F:PSU2000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_APS_MESVOLT = { + PVName = "EC-GN-P01-PA1F:PSU3000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_APS_MESVOLT = { + PVName = "EC-GN-P01-PA2F:PSU4000-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_APS_MESCURR = { + PVName = "EC-GN-P01-PA1F:PSU3000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_APS_MESCURR = { + PVName = "EC-GN-P01-PA2F:PSU4000-IT" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC1_MESVOLT = { + PVName = "EC-GN-P01-GAF:MOE2810-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC1_MESVOLT = { + PVName = "EC-GN-P01-GBF:MOE2810-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC1_MESCURR = { + PVName = "EC-GN-P01-GAF:MOE2820-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC1_MESCURR = { + PVName = "EC-GN-P01-GBF:MOE2820-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC2_MESVOLT = { + PVName = "EC-GN-P01-GAF:MOE2830-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC2_MESVOLT = { + PVName = "EC-GN-P01-GBF:MOE2830-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_ARC2_MESCURR = { + PVName = "EC-GN-P01-GAF:MRF2910-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_ARC2_MESCURR = { + PVName = "EC-GN-P01-GBF:MRF2910-ET" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_MHVPS_MESVOLT = { + PVName = "EC-GN-P01-PMF:PSU0000-ET-GA" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_MHVPS_MESVOLT = { + PVName = "EC-GN-P01-PMF:PSU0000-ET-GB" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYA_MHVPS_MESCURR = { + PVName = "EC-GN-P01-PMF:PSU0000-IT-GA" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GYB_MHVPS_MESCURR = { + PVName = "EC-GN-P01-PMF:PSU0000-IT-GB" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + + //Digital Input PVs in Signal-Variable tab. + APS_READY = { + PVName = "EC-GN-P01-PA2F:PSU4000-YSTA" + Type = uint32 + } + GYA_APS_FLT = { + PVName = "EC-GN-P01-PA1F:PSU3000-YFLT" + Type = uint32 + } + GYB_APS_FLT = { + PVName = "EC-GN-P01-PA2F:PSU4000-YFLT" + Type = uint32 + } + BPS_READY = { + PVName = "EC-GN-P01-PB2F:PSU2000-YSTA" + Type = uint32 + } + GYA_BPS_FLT = { + PVName = "EC-GN-P01-PB1F:PSU1000-YFLT" + Type = uint32 + } + GYB_BPS_FLT = { + PVName = "EC-GN-P01-PB2F:PSU2000-YFLT" + Type = uint32 + } + MHVPS_OV = { + PVName = "EC-GN-P01-GAFP:FMC4310-YFLT-OC" + Type = uint32 + } + MHVPS_OC = { + PVName = "EC-GN-P01-GAFP:FMC4310-YFLT-OV" + Type = uint32 + } + MHVPS_FLT = { + PVName = "EC-GN-P01-PMF:PSU0000-YFLT" + Type = uint32 + } + MHVPS_READY = { + PVName = "EC-GN-P01-PMF:PSU0000-TYSTA" + Type = uint32 + } + MHVPS_MODON = { + PVName = "EC-GN-P01-GPF:PSU0000-YSTA-MOD" + Type = uint32 + } + MIS_ITL = { + PVName = "EC-GN-P01-GAFP:FMC4310-YTRP" + Type = uint32 + } + MISB_ITL = { + PVName = "EC-GN-P01-GBFP:FMC4310-YTRP" + Type = uint32 + } + PLC_ITL = { + PVName = "EC-GN-P01-GPS:PLC4110-YTRP" + Type = uint32 + } + PLC_STANDBY = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-ST1R" + Type = uint32 + } + PLC_READY = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-ST2R" + Type = uint32 + } + PLC_ON = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-ST3R" + Type = uint32 + } + PLC_MODE1 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD1" + Type = uint32 + } + PLC_MODE2 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD2" + Type = uint32 + } + PLC_MODE3 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD3" + Type = uint32 + } + PLC_MODE4 = { + PVName = "EC-GN-P01-GPS:PLC4110-YTS-MD4" + Type = uint32 + } + PLC_PERMIT = { + PVName = "EC-GN-P01-GPS:PLC4110-CON-GY2PRM" + Type = uint32 + } + PLC_SELECT = { + PVName = "EC-GN-P01-GPS:PLC4110-CON-OPGY2" + Type = uint32 + } + PLC_SYNCMODE = { + PVName = "EC-GN-P01-GPS:PLC4110-YSTA-MPSS" + Type = uint32 + } + PLC_CCPSON = { + PVName = "EC-GN-P01-GPS:PLC4110-YON-CCPS2" + Type = uint32 + } + EXT_TRIG = { + PVName = "EC-GN-P01-GBF:DIO4900-YON" + Type = uint32 + } + + //Digital Output PVs in Variables-signal tab + APS_HVON = { + PVName = "EC-GN-P01-PA2F:PSU4000-CON-HV" + Type = uint32 + } + APS_SWON = { + PVName = "EC-GN-P01-PA2F:PSU4000-CON-SW" + Type = uint32 + } + APS_STOP = { + PVName = "EC-GN-P01-PA2F:PSU4000-CTRP" + Type = uint32 + } + BPS_HVON = { + PVName = "EC-GN-P01-PB2F:PSU2000-CON-HV" + Type = uint32 + } + BPS_SWON = { + PVName = "EC-GN-P01-PB2F:PSU2000-CON-SW" + Type = uint32 + } + BPS_STOP = { + PVName = "EC-GN-P01-PB2F:PSU2000-CTRP" + Type = uint32 + } + BEAM_ON_STAT = { + PVName = "EC-GN-P01-GBFP:FMC4310-YSTA-GBOP" + Type = uint32 + } + DO_REV5 = { + PVName = "EC-GN-P01-GBFP:FMC4310-RV5" + Type = uint32 + } + DO_REV6 = { + PVName = "EC-GN-P01-GBFP:FMC4310-RV6" + Type = uint32 + } + DO_REV7 = { + PVName = "EC-GN-P01-GBFP:FMC4310-RV7" + Type = uint32 + } + DO_REV8 = { + PVName = "EC-GN-P01-GBFP:FMC4310-RV8" + Type = uint32 + } + MHVPS_HVON = { + PVName = "EC-GN-P01-PMF:PSU0000-CON-SW" + Type = uint32 + } + MHVPS_STOP = { + PVName = "EC-GN-P01-PMF:PSU0000-COFF" + Type = uint32 + } + MHVPS_MODSW = { + PVName = "EC-GN-P01-PMF:PSU0000-CON-MOD" + Type = uint32 + } + PCF_FLT = { + PVName = "EC-GN-P01-GPF:PCF4210-CTRP" + Type = uint32 + } + HVARMED = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GB1" + Type = uint32 + } + HVINJECTION = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GB2" + Type = uint32 + } + RFON = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GB3" + Type = uint32 + } + FHPS_RU = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP" + Type = uint32 + } + SCM_RU = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP" + Type = uint32 + } + SCM_RD = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-YTS-RDOWN" + Type = uint32 + } + CCPS_IN_OPERATION = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-TR" + Type = uint32 + } + //Input PVs in Variables-Operation tab. + PREP_MODE = { + PVName = "EC-GN-P01-GBF:STAT-PREP-MODE" + Type = uint32 + } + SHORT_PULSE_MODE = { + PVName = "EC-GN-P01-GBF:STAT-SHORT-PULSE" + Type = uint32 + } + + MHVPS_DT = { + PVName = "EC-GN-P01-PMF:STAT-DT-HVON" + Type = uint32 + } + APS_HVON_DT = { + PVName = "EC-GN-P01-PA2F:STAT-DT-HVON" + Type = uint32 + } + APS_SWON_DT = { + PVName = "EC-GN-P01-PA2F:STAT-DT-SWON" + Type = uint32 + } + BPS_HVON_DT = { + PVName = "EC-GN-P01-PB2F:STAT-DT-HVON" + Type = uint32 + } + BPS_SWON_DT = { + PVName = "EC-GN-P01-PB2F:STAT-DT-SWON" + Type = uint32 + } + SHOTLEN = { + PVName = "EC-GN-P01-GBF:STAT-DT-SHOTLEN" + Type = uint32 + } + + MD1_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD1-LIM" + Type = uint32 + } + MD2_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD2-LIM" + Type = uint32 + } + MD3_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD3-LIM" + Type = uint32 + } + MD4_SHOTLEN_LIM = { + PVName = "EC-GN-P01-GPF:STAT-MD4-LIM" + Type = uint32 + } + + FHPS_MANM = { + PVName = "EC-GN-P01-GBF-FHPS:STAT-MANM" + Type = uint32 + } + + CSV_LOAD = { + PVName = "EC-GN-P01-GBF:STAT-CSV-LOAD" + Type = uint32 + } + CSV_NAME = { + PVName = "EC-GN-P01-GBF:STAT-CSV-NAME" + Type = char8 + NumberOfElements = 40 + } + RESET_FLT = { + PVName = "EC-GN-P01-GPF:STAT-RST-FLT" + //PVName = "EC-GN-P01-GPS-MEM:CMD-CONALARMRESET-HMI" + Type = uint32 + } + + //Input PVs in Variables-JASTEC tab. + MCPS_ACT_SP = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-ACT-SET-MI" + Type = uint32 + } + MCPS_TRG_CURR_MANUAL = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MI" + Type = float32 + } + MCPS_ACT_RB = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB" + Type = uint32 + } + MCPS_CURR_RB = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-RB" + Type = uint32 + } + GYA_MCPS_CURR_MON = { + PVName = "EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON" + Type = float32 + } + GYB_MCPS_CURR_MON = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON" + Type = float32 + } + MCPS_VOLT_MON = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-VOLT-MON" + Type = uint32 + } + MCPS_SWP_RB = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-SWP-RB" + Type = uint32 + } + MCPS_SWP_LIM = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-SWP-LIM" + Type = uint32 + } + MCPS_ERR = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-ERR" + Type = uint32 + } + MCPS_MM = { + PVName = "EC-GN-P01-GBF-MCPS:STAT-MANM" + Type = uint32 + } + //GCPS PVs + GCPS_ACT_SP = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MI" + Type = uint32 + } + GCPS_TRG_CURR_MANUAL = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MI" + Type = float32 + } + GCPS_ACT_RB = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB" + Type = uint32 + } + GCPS_CURR_RB = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-RB" + Type = uint32 + } + GYA_GCPS_CURR_MON = { + PVName = "EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON" + Type = float32 + } + GYB_GCPS_CURR_MON = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON" + Type = float32 + } + GCPS_VOLT_MON = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-VOLT-MON" + Type = uint32 + } + GCPS_SWP_RB = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-SWP-RB" + Type = uint32 + } + GCPS_SWP_LIM = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-SWP-LIM" + Type = uint32 + } + GCPS_ERR = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-ERR" + Type = uint32 + } + GCPS_MM = { + PVName = "EC-GN-P01-GBF-GCPS:STAT-MANM" + Type = uint32 + } + //Input PVs in Variables-kikusui tab. + FHPS_REM_RB = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-REM-RB" + Type = uint32 + } + FHPS_OUTON_RB = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB" + Type = uint32 + } + FHPS_CURR_RB = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-CURR-RB" + Type = uint32 + } + FHPS_ACV_RB = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-ACV-RB" + Type = uint32 + } + FHPS_FRQ_RB = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-FRQ-RB" + Type = uint32 + } + FHPS_SOUR_ON_RB = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-RB" + Type = uint32 + } + FHPS_MEAS_ACV = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV" + Type = float32 + } + GYA_FHPS_MEAS_ACI = { + PVName = "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACI" + Type = float32 + } + GYB_FHPS_MEAS_ACI = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACI" + Type = float32 + } + FHPS_MEAS_ACP = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACP" + Type = uint32 + } + FHPS_MEAS_FRQ = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-FRQ" + Type = uint32 + } + FHPS_ERR = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-ERROR" + Type = uint32 + } + FHPS_AUTO_TAGV = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV" + Type = float32 + } + FHPS_AUTO_TIME = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-RU-TIME" + Type = float32 + } + FHPS_AUTO_START = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START" + Type = uint32 + } + + CCPS_REMLOC_RB = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-RB" + Type = uint32 + } + CCPS_OUTON_RB = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-OUTON-RB" + Type = uint32 + } + CCPS_CURR_RB = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-CURR-RB" + Type = uint32 + } + CCPS_DCV_RB = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-DCV-RB" + Type = uint32 + } + CCPS_RANG_RB = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-RANG-RB" + Type = uint32 + } + CCPS_SOUR_ON_RB = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-RB" + Type = uint32 + } + CCPS_MEAS_DCV = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCV" + Type = uint32 + } + GYA_CCPS_MEAS_DCI = { + PVName = "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCI" + Type = float32 + } + GYB_CCPS_MEAS_DCI = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCI" + Type = float32 + } + CCPS_MEAS_DCP = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCP" + Type = uint32 + } + CCPS_ERR = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-ERROR" + Type = uint32 + } + CCPS_OUTPUT_AMP = { + PVName = "EC-GN-P01-GBF-CCPS:STAT-AMP" + Type = float32 + } + CCPS_OUTPUT_FREQ = { + PVName = "EC-GN-P01-GBF-CCPS:STAT-FREQ" + Type = float32 + } + CCPS_OUTPUT_OFFS = { + PVName = "EC-GN-P01-GBF-CCPS:STAT-OFFS" + Type = float32 + } + //PXI Board status PVs + PXI6259_0 = { + PVName = "EC-GN-HWCF:6259-0-STATUS" + Type = uint32 + } + PXI6259_1 = { + PVName = "EC-GN-HWCF:6259-1-STATUS" + Type = uint32 + } + PXI6528_0 = { + PVName = "EC-GN-HWCF:6528-0-STATUS" + Type = uint32 + } + PXI6528_1 = { + PVName = "EC-GN-HWCF:6528-1-STATUS" + Type = uint32 + } + PXI6368_0 = { + PVName = "EC-GN-HWCF:6368-0-STATUS" + Type = uint32 + } + PXI6368_1 = { + PVName = "EC-GN-HWCF:6368-1-STATUS" + Type = uint32 + } + } + } + +EPICSCAOutput = { + Class = "EPICSCA::EPICSCAOutput" + CPUMask = "0x1000" //change from 0x200 + StackSize = "10000000" + NumberOfBuffers = 2 + Signals = { + PCF_STATE = { + PVName = "EC-GN-P01-GBF:STAT-SM" + Type = uint32 + } + //Analog Output PVs in Variables-signal tab. + FHPS_REF = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-EREF" + Type = float32 + } + BPS_REF = { + PVName = "EC-GN-P01-PB2F:PSU2000-EREF" + Type = float32 + } + APS_REF = { + PVName = "EC-GN-P01-PA2F:STAT-EREF-CONV.A" + Type = float32 + } + MHVPS_REF = { + PVName = "EC-GN-P01-PMF:STAT-EREF-CALC.B" + Type = float32 + } + + //Digital Output PVs in Variables-signal tab. + APS_STOP = { + PVName = "EC-GN-P01-PA2F:PSU4000-CTRP" + Type = uint32 + } + + BPS_STOP = { + PVName = "EC-GN-P01-PB2F:PSU2000-CTRP" + Type = uint32 + } + + BEAM_ON_STAT = { + PVName = "EC-GN-P01-GBFP:FMC4310-YSTA-GBOP" + Type = uint32 + } + + MHVPS_STOP = { + PVName = "EC-GN-P01-PMF:PSU0000-COFF" + Type = uint32 + } + PCF_FLT = { + PVName = "EC-GN-P01-GPF:PCF4210-CTRP" + Type = uint32 + } + HVARMED = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GB1" + Type = uint32 + } + HVINJECTION = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GB2" + Type = uint32 + } + RFON = { + PVName = "EC-GN-P01-GPF:PCF4210-YTS-GB3" + Type = uint32 + } + + //Output PVs in Variables-operation tab. + MHVPS_PREP_WF = { + PVName = "EC-GN-P01-PB2F:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + + NumberOfDimensions = 1 + } + BPS_PREP_WF = { + PVName = "EC-GN-P01-PB2F:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + APS_PREP_WF = { + PVName = "EC-GN-P01-PA2F:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + FHPS_PREP_WF = { + PVName = "EC-GN-P01-GBF-FHPS:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + MCPS_PREP_WF = { + PVName = "EC-GN-P01-GBF-MCPS:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + GCPS_PREP_WF = { + PVName = "EC-GN-P01-GBF-GCPS:STAT-PREP-WF" + Type = float32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + PREP_TIME_WF = { + PVName = "EC-GN-P01-GBF:STAT-PREP-TIME-WF" + Type = int32 + NumberOfElements = 8000 + NumberOfDimensions = 1 + } + BEAM_ON_TIME = { + PVName = "EC-GN-P01-GBF:STAT-BEAMON-TIME" + Type = uint32 + } + ELAPSED_TIME = { + PVName = "EC-GN-P01-GBF:STAT-ELAPSED" + Type = uint32 + } + SHOT_ID = { + PVName = "EC-GN-P01-GBF:STAT-SHOT-ID" + Type = uint32 + } + + CSV_LOADED = { + PVName = "EC-GN-P01-GBF:STAT-CSV-LOADED" + Type = uint32 + } + CSV_ERR = { + PVName = "EC-GN-P01-GBF:STAT-CSV-ERR" + Type = uint32 + } + + //Output PVs in Variables-jastec tab. + MCPS_TRG_CURR_SET = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MO" + Type = float32 + } + MCPS_ACT_SP = { + PVName = "EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP-MO" + Type = uint32 + } + GCPS_TRG_CURR_SET = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MO" + Type = float32 + } + GCPS_ACT_SP = { + PVName = "EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP-MO" + Type = uint32 + } + + //Output PVs in Variables-kikusui tab. + CCPS_REF = { + PVName = "EC-GN-P01-GBF-CCPS:PSU2320-EREF" + Type = float32 + } + FHPS_AUTO_STAT = { + PVName = "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-STAT" + Type = uint32 + } + //Add 20201117 + APS_HVON = { + PVName = "EC-GN-P01-PA2F:PSU4000-CON-HV" + Type = uint32 + } + APS_SWON = { + PVName = "EC-GN-P01-PA2F:PSU4000-CON-SW" + Type = uint32 + } + BPS_HVON = { + PVName = "EC-GN-P01-PB2F:PSU2000-CON-HV" + Type = uint32 + } + BPS_SWON = { + PVName = "EC-GN-P01-PB2F:PSU2000-CON-SW" + Type = uint32 + } + MHVPS_HVON = { + PVName = "EC-GN-P01-PMF:STAT-HVON-CALC.B" + Type = uint32 + } + } + } + // for ESDN packet subscription/publication. + +SDNSubCommands = { + Class = SDN::SDNSubscriber + Topic = ECPC2SCUJA + Interface = enp27s0f0 + CPUs = 0x2000 + Locked = 1 + Timeout = 2 + Signals = { + Header = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + Command = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 64 + } + } + } + +SDNReply = { + Class = SDN::SDNPublisher + //Topic = SCUJAB2ECPC + Topic = SCUJA2ECPC + Interface = enp27s0f0 + CPUs = 0x2000 + Locked = 1 + Signals = { + Header = { + Type = uint8 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ReplyStatus = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ReplyWaveformAck = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + //Status (26Bytes?) is not assigned + //GyrotronA measurements + //56Bytes are used as Gyrotron1 Measurements (verified on 2020/10/22) + GYA_MHVPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_MHVPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_BPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_BPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_APS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_APS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC1_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC1_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC2_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_ARC2_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_MCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_GCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_FHPS_MEAS_ACI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_CCPS_MEAS_DCI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + //GyrotronB measurements + GYB_MHVPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_MHVPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_BPS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_BPS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_APS_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_APS_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC1_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC1_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC2_MESVOLT = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_ARC2_MESCURR = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_MCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_GCPS_CURR_MON = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_FHPS_MEAS_ACI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYB_CCPS_MEAS_DCI = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + } + + // Direct HW accesses. Follwing device/port assignment must be consistent with actual wiring. + // NI6259.0 + // APS_SWON BoardId=0, PortId=3.0 + +NI6259 = { + Class = NI6259::NI6259DIO + DeviceName = "/dev/pxi6259" + BoardId = 0 + Signals = { + NI6259Value = { + Type = uint32 + Mask = 0xFF + PortId = 0 + } + } + } + + //NI6528 digital output has logic low == 0 == close relay. ((See Driver Manual.) + //When the program send ON signal, this program writes 0 on the data source. + +NI6528P3 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.0" + Port = 3 + NI6528P3Value = { + NI6528P3Value = { + Type = uint8 + } + } + } + //P3.0 APS_HVON + //P3.1 APS_SWON + //P3.2 APS_Shutdown + //P3.3 BPS_HVON + //P3.4 BPS_SWON + //P3.5 BPS_Shutdown + //P3.6 GY1_Beam_ON_status + //P3.7 RV5 _cRIO + + +NI6528P4 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.0" + Port = 4 + NI6528P4Value = { + NI6528P4Value = { + Type = uint8 + } + } + } + //P4.0 RV6 _cRIO + //P4.1 RV7 _cRIO + //P4.2 RV8 _cRIO + //P4.3 emp + //P4.4 emp + //P4.5 emp + //P4.6 HVArmed + //P4.7 HVInjection + + +NI6528P5 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.0" + Port = 5 + NI6528P5Value = { + NI6528P5Value = { + Type = uint8 + } + } + } + //P5.0 RFON + //P5.1 FHPS_Rampup_complete + //P5.2 SCM_RU_Complete + //P5.3 CCPS_IN_OPERATION + //P5.4 REV2 _PLC + //P5.5 REV3 _PLC + //P5.6 None + //P5.7 None + + +NI6528P4GYA = { + Class = NI6528 + DeviceName = "/dev/pxi6528.1" + Port = 4 + NI6528P4GYAValue = { + NI6528P4GYAValue = { + Type = uint8 + } + } + } + //P4.0 RV6 _cRIO + //P4.1 RV7 _cRIO + //P4.2 RV8 _cRIO + //P4.3 MHVPS_HVON + //P4.4 MHVPS_Shutdown + //P4.5 MHVPS_MOD + //P4.6 PCF_FLT + //P4.7 HVArmed_GYA + + } + +States = { + Class = ReferenceContainer + +Disabled = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM GoErrorGAM InDisabledGAM + GoWaitStandbyGAM choiseGAM MCPSGAM GCPSGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM} + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P4GYAPV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM NI6528P4GYAWriteGAM} + CPUs = 0x4000 + } + } + } + +WaitStandby = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM FHPSSetpointGAM FHPSRampupGAM InWaitStandbyGAM + choiseGAM MCPSGAM GCPSGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + GoDisabledGAM GoWaitReadyGAM GoErrorGAM CCPSWaveformGAM } + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P4GYAPV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM NI6528P4GYAWriteGAM} + CPUs = 0x4000 + } + } + } + +WaitReady = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM WFRecordGAM PreProgrammedGAM FHPSSetpointGAM FHPSRampupGAM InWaitReadyGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + GoWaitPermitGAM GoWaitStandbyFromReadyGAM GoErrorGAM } + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P4GYAPV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM NI6528P4GYAWriteGAM} + CPUs = 0x4000 + } + } + } + +WaitPermit = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM WFRecordGAM PreProgrammedGAM FHPSSetpointGAM FHPSRampupGAM InWaitPermitGAM + choiseGAM EPICSOutputGAM GoWaitReadyFromWaitPermitGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + GoWaitHVONGAM GoWaitHVON_PREP_GAM GoWaitHVON_SDN_GAM GoWaitHVON_SDN_PREP_GAM GoErrorGAM } + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P4GYAPV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM NI6528P4GYAWriteGAM} + CPUs = 0x4000 + } + } + } + + //Real-Time state for HVPS sequence timing control. + +WaitHVON = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM FHPSSetpointGAM FHPSRampupGAM InWaitHVONGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM } + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P4PV2PortGAM NI6528P4WriteGAM + GAMRealTimeStateMachine NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x4000 + } + } + } + +WaitHVON_SDN = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM FHPSRampupGAM InWaitHVON_SDNGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM } + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P4PV2PortGAM NI6528P4WriteGAM + GAMSDNRealTimeStateMachine terminalInterfaceGAM NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x4000 + } + } + } + +WaitHVON_PREP = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM PreProgrammedGAM FHPSRampupGAM InWaitHVON_PREPGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM } + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P4PV2PortGAM NI6528P4WriteGAM + GAMRealTimeStateMachine NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x4000 + } + } + } + +WaitHVON_SDN_PREP = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM CCPSWaveformGAM PreProgrammedGAM FHPSRampupGAM InWaitHVON_SDN_PREPGAM + choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM + writeBeamONTimeGAM writeRFONTimeGAM + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM} + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P4PV2PortGAM NI6528P4WriteGAM + GAMSDNRealTimeStateMachine terminalInterfaceGAM NI6528P5GAM NI6528P5PV2PortGAM} + CPUs = 0x4000 + } + } + } + + +Error = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {Timer1kHzGAM InErrorGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM + ExitedHVArmedInjectionRFONGAM ResetPSsGAM + FromErrorToWaitStandbyGAM ErrorGAM choiseGAM EPICSOutputGAM FHPSSetpointGAM FHPSRampupGAM CCPSWaveformGAM} + CPUs = 0x1000 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + CPUs = 0x2000 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM + NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P5GAM + NI6528P3PV2PortGAM NI6528P4PV2PortGAM NI6528P4GYAPV2PortGAM NI6528P5PV2PortGAM + NI6528P3WriteGAM NI6528P4WriteGAM NI6528P4GYAWriteGAM} + CPUs = 0x4000 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronIOC.db b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronIOC.db new file mode 100644 index 0000000..3bb3f94 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronIOC.db @@ -0,0 +1,1384 @@ + +record(bo, "EC-GN-P01-GAF:STAT-SHORT-PULSE"){ + field(SCAN, "Passive") + field(ONAM, "SHORT MODE") + field(ZNAM, "LONG MODE") +} + +record(ao, "EC-GN-P01-GAF-FHPS:PSU2320-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-CCPS:PSU2610-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-FHPS:PSU2320-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-CCPS:PSU2610-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PB1F:PSU1000-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PA1F:PSU3000-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PA1F:PSU3000-EREF-P"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PMF:PSU0000-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PB2F:PSU2000-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PA2F:PSU4000-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-PA2F:PSU4000-EREF-P"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-FHPS:PSU2610-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-CCPS:PSU2320-EREF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GAF-MCPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PB1F:PSU1000-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PB1F:PSU1000-IT"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PA1F:PSU3000-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PA1F:PSU3000-IT"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF:MOE2810-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF:MOE2820-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF:MOE2830-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF:MRF2910-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PMF:PSU0000-ET-GA"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PMF:PSU0000-IT-GA"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PB2F:PSU2000-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PB2F:PSU2000-IT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PA2F:PSU4000-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PA2F:PSU4000-IT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF:MOE2810-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF:MOE2820-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF:MOE2830-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF:MRF2910-ET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PMF:PSU0000-ET-GB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PMF:PSU0000-IT-GB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA1F:PSU3000-CON-HV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA1F:PSU3000-CON-SW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA1F:PSU3000-CTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB1F:PSU1000-CON-HV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB1F:PSU1000-CON-SW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB1F:PSU1000-CTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAFP:FMC4310-YSTA-GAOP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAFP:FMC4310-RV5"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAFP:FMC4310-RV6"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAFP:FMC4310-RV7"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAFP:FMC4310-RV8"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PMF:PSU0000-CON-SW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PMF:PSU0000-COFF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PMF:PSU0000-CON-MOD"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-CTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-YTS-GA1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-YTS-GA2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-YTS-GA3"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-YTS-RUP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RUP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-MCPS:PSU2120-YTS-RDOWN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-CCPS:PSU2320-TR"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA2F:PSU4000-CON-HV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA2F:PSU4000-CON-SW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA2F:PSU4000-CTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB2F:PSU2000-CON-HV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB2F:PSU2000-CON-SW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB2F:PSU2000-CTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBFP:FMC4310-YSTA-GBOP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBFP:FMC4310-RV5"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBFP:FMC4310-RV6"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBFP:FMC4310-RV7"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBFP:FMC4310-RV8"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-YTS-GB1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-YTS-GB2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:PCF4210-YTS-GB3"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-YTS-RUP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-MCPS:PSU2120-YTS-RUP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-CCPS:PSU2320-TR"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPS:PLC4110-RV2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPS:PLC4110-RV3"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:PCF4210-CTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PA1F:PSU3000-YSTA"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PA1F:PSU3000-YFLT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PB1F:PSU1000-YSTA"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PB1F:PSU1000-YFLT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-YFLT-OC"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-YFLT-OV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PMF:PSU0000-YFLT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PMF:PSU0000-TYSTA"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPF:PSU0000-YSTA-MOD"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-YTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-YTRP2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-RV1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-RV2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAFP:FMC4310-RV3"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-ST1R"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-ST2R"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-ST3R"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-CON-GY1PRM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-CON-OPGY1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YON-CCPS1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YSTA-MPSS"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF:DIO4900-YON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PA2F:PSU4000-YSTA"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PA2F:PSU4000-YFLT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PB2F:PSU2000-YSTA"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PB2F:PSU2000-YFLT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBFP:FMC4310-YTRP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBFP:FMC4310-YTRP2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBFP:FMC4310-RV1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBFP:FMC4310-RV2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBFP:FMC4310-RV3"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-MD1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-MD2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-MD3"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YTS-MD4"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-CON-GY2PRM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-CON-OPGY2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-YON-CCPS2"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GPS:PLC4110-RV1"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF:DIO4900-YON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PMF:STAT-DT-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PA1F:STAT-DT-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PA1F:STAT-DT-SWON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PB1F:STAT-DT-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PB1F:STAT-DT-SWON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PA2F:STAT-DT-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PA2F:STAT-DT-SWON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PB2F:STAT-DT-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-PB2F:STAT-DT-SWON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF:STAT-DT-SHOTLEN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF:STAT-DT-SHOTLEN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF:STAT-BEAMON-TIME"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF:STAT-BEAMON-TIME"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF:STAT-ELAPSED"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF:STAT-ELAPSED"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GPF:STAT-RDY-TOUT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PMF:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA1F:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB1F:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA2F:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PB2F:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-MCPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-GCPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-CCPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-MCPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-GCPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-CCPS:STAT-MANM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:STAT-TRIG-SOUR"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF:STAT-TRIG-SOUR"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longin, "EC-GN-P01-GPF:STAT-MD1-LIM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longin, "EC-GN-P01-GPF:STAT-MD2-LIM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longin, "EC-GN-P01-GPF:STST-MD3-LIM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longin, "EC-GN-P01-GPF:STAT-MD4-LIM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:STAT-SIMM-MODE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF:STAT-SIMM-MODE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:STAT-PREP-MODE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF:STAT-PREP-MODE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:STAT-MST-TRIG"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF:STAT-MST-TRIG"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:STAT-RST-FLT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longout, "EC-GN-P01-GAF:STAT-SHOT-ID"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GAF:STAT-FC-SUBSTATE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longin, "EC-GN-P01-GAF:STAT-PREHEAT-TIME"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longout, "EC-GN-P01-GBF:STAT-SHOT-ID"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GBF:STAT-FC-SUBSTATE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longin, "EC-GN-P01-GBF:STAT-PREHEAT-TIME"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA1F:STAT-POLSW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-PA2F:STAT-POLSW"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:STAT-CSV-LOAD"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF:STAT-CSV-LOADED"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(stringout, "EC-GN-P01-GAF:STAT-CSV-NAME"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GAF:STAT-CSV-ERR"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF:STAT-CSV-LOAD"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF:STAT-CSV-LOADED"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(stringout, "EC-GN-P01-GBF:STAT-CSV-NAME"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GBF:STAT-CSV-ERR"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longout, "EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GPF:STAT-DAQ-MODE"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:STAT-DAQ-SW-TRIG"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GPF:STAT-DAQ-STAT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:STAT-DAQ-CONF-STAT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GPF:STAT-DAQ-LEN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GPF:STAT-DAQ-RECONF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GPF:STAT-DAQ-PUB-DLY"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(longout, "EC-GN-P01-GPF:STAT-DAQ-SMPL-RATE-RB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GPF:STAT-DAQ-MODE-RB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GPF:STAT-DAQ-SMPL-ST-DLY-RB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GPF:STAT-DAQ-LEN-RB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GPF:STAT-DAQ-PUB-DLY-RB"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PB1F:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PA1F:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF-FHPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF-CCPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GAF-MCPS:STATPREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF-GCPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "FLOAT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-GAF:STAT-PREP-TIME-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") + field(FTVL, "SHORT") + field(NELM, 8000) +} +record(waveform, "EC-GN-P01-PB2F:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-PA2F:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF-FHPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF-CCPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF-MCPS:STATPREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF-GCPS:STAT-PREP-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF:STAT-PREP-TIME-WF"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-MCPS:PSU2120-TRG-SWPR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbi, "EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-MCPS:PSU2120-VOLT-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-MCPS:PSU2120-SWP-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-MCPS:PSU2120-SWP-LIM"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GAF-MCPS:PSU2120-ERR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-GCPS:PSU2130-TRG-SWPR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbi, "EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-GCPS:PSU2130-VOLT-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-GCPS:PSU2130-SWP-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-GCPS:PSU2130-SWP-LIM"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GAF-GCPS:PSU2130-ERR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-MCPS:PSU2120-TRG-SWPR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbi, "EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-MCPS:PSU2120-VOLT-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-MCPS:PSU2120-SWP-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-MCPS:PSU2120-SWP-LIM"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF-MCPS:PSU2120-ERR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-GCPS:PSU2130-TRG-SWPR-SET"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbi, "EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-GCPS:PSU2130-VOLT-MON"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-GCPS:PSU2130-SWP-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-GCPS:PSU2130-SWP-LIM"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(waveform, "EC-GN-P01-GBF-GCPS:PSU2130-ERR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GAF-FHPS:PSU2610-IDN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-RST"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-REM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-OUTON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-FHPS:PSU2610-CURR-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-FHPS:PSU2610-ACV-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-FHPS:PSU2610-FRQ-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF-FHPS:PSU2610-REM-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-ACV-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-FRQ-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF-FHPS:PSU2610-SOUR-ON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACI"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACP"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-FHPS:PSU2610-MEAS-FRQ"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GAF-FHPS:PSU2610-ERROR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-STAT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-FHPS:PSU2610-AUTO-STOP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GAF-CCPS:PSU2320-IDN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-CCPS:PSU2320-RST"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-CCPS:PSU2320-OUTON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-CCPS:PSU2320-CURR-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-CCPS:PSU2320-DCV-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GAF-CCPS:PSU2320-RANG-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF-CCPS:PSU2320-REMLOC-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF-CCPS:PSU2320-OUTON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:PSU2320-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:PSU2320-DCV-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:PSU2320-RANG-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GAF-CCPS:PSU2320-SOUR-ON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCV"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCI"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:PSU2320-MEAS-DCP"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GAF-CCPS:PSU2320-ERROR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:STAT-AMP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GAF-CCPS:STAT-FREQ"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GBF-FHPS:PSU2610-IDN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-RST"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-REM"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-OUTON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-FHPS:PSU2610-CURR-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-FHPS:PSU2610-ACV-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-FHPS:PSU2610-FRQ-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF-FHPS:PSU2610-REM-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-ACV-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-FRQ-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF-FHPS:PSU2610-SOUR-ON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACI"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACP"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-FHPS:PSU2610-MEAS-FRQ"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GBF-FHPS:PSU2610-ERROR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(mbbo, "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-STAT"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-FHPS:PSU2610-AUTO-STOP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GBF-CCPS:PSU2320-IDN"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-CCPS:PSU2320-RST"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-CCPS:PSU2320-OUTON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-CCPS:PSU2320-CURR-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-CCPS:PSU2320-DCV-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ao, "EC-GN-P01-GBF-CCPS:PSU2320-RANG-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bo, "EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-SP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF-CCPS:PSU2320-REMLOC-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF-CCPS:PSU2320-OUTON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:PSU2320-CURR-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:PSU2320-DCV-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:PSU2320-RANG-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-GBF-CCPS:PSU2320-SOUR-ON-RB"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCV"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCI"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:PSU2320-MEAS-DCP"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(stringin, "EC-GN-P01-GBF-CCPS:PSU2320-ERROR"){ + field(SCAN, "1 second") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:STAT-AMP"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(ai, "EC-GN-P01-GBF-CCPS:STAT-FREQ"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PMF:STAT-GYA-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(bi, "EC-GN-P01-PMF:STAT-GYB-HVON"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(calcout, "EC-GN-P01-PMF:STAT-HVON-CALC"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(calcout, "EC-GN-P01-GAF:STAT-MST-TRIG-CALC"){ + field(SCAN, "Passive") + field(PINI, "YES") +} +record(calcout, "EC-GN-P01-GBF:STAT-MST-TRIG-CALC"){ + field(SCAN, "Passive") + field(PINI, "YES") +} + +record(bi, "EC-GN-P01-GAF-CCPS:PSU2320-STAT"){ + field(SCAN, "Passive") +} +record(bi, "EC-GN-P01-GBF-CCPS:PSU2320-STAT"){ + field(SCAN, "Passive") +} diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/shot0001.csv b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/shot0001.csv new file mode 100644 index 0000000..e69de29 diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/test.csv b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/test.csv new file mode 100644 index 0000000..e7ba9e5 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/test.csv @@ -0,0 +1,41 @@ +-100,0,0,0,0,0,0 +-90,1,1,1,1,1,1 +-80,2,2,2,2,2,2 +-70,3,3,3,3,3,3 +-60,4,4,4,4,4,4 +-50,5,5,5,5,5,5 +-40,6,6,6,6,6,6 +-30,7,7,7,7,7,7 +-20,8,8,8,8,8,8 +-10,9,9,9,9,9,9 +0,10,10,10,10,10,10 +10,9,9,9,9,9,9 +20,8,8,8,8,8,8 +30,7,7,7,7,7,7 +40,6,6,6,6,6,6 +50,5,5,5,5,5,5 +60,4,4,4,4,4,4 +70,3,3,3,3,3,3 +80,2,2,2,2,2,2 +90,1,1,1,1,1,1 +100,0,0,0,0,0,0 +110,1,1,1,1,1,1 +120,2,2,2,2,2,2 +130,3,3,3,3,3,3 +140,4,4,4,4,4,4 +150,5,5,5,5,5,5 +160,6,6,6,6,6,6 +170,7,7,7,7,7,7 +180,8,8,8,8,8,8 +190,9,9,9,9,9,9 +200,10,10,10,10,10,10 +210,9,9,9,9,9,9 +220,8,8,8,8,8,8 +230,7,7,7,7,7,7 +240,6,6,6,6,6,6 +250,5,5,5,5,5,5 +260,4,4,4,4,4,4 +270,3,3,3,3,3,3 +280,2,2,2,2,2,2 +290,1,1,1,1,1,1 +300,0,0,0,0,0,0 diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/test.csv.original b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/test.csv.original new file mode 100644 index 0000000..c942204 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/test.csv.original @@ -0,0 +1,41 @@ +-100,0,0,0,0,0 +-90,1,1,1,1,1 +-80,2,2,2,2,2 +-70,3,3,3,3,3 +-60,4,4,4,4,4 +-50,5,5,5,5,5 +-40,6,6,6,6,6 +-30,7,7,7,7,7 +-20,8,8,8,8,8 +-10,9,9,9,9,9 +0,10,10,10,10,10 +10,9,9,9,9,9 +20,8,8,8,8,8 +30,7,7,7,7,7 +40,6,6,6,6,6 +50,5,5,5,5,5 +60,4,4,4,4,4 +70,3,3,3,3,3 +80,2,2,2,2,2 +90,1,1,1,1,1 +100,0,0,0,0,0 +110,1,1,1,1,1 +120,2,2,2,2,2 +130,3,3,3,3,3 +140,4,4,4,4,4 +150,5,5,5,5,5 +160,6,6,6,6,6 +170,7,7,7,7,7 +180,8,8,8,8,8 +190,9,9,9,9,9 +200,10,10,10,10,10 +210,9,9,9,9,9 +220,8,8,8,8,8 +230,7,7,7,7,7 +240,6,6,6,6,6 +250,5,5,5,5,5 +260,4,4,4,4,4 +270,3,3,3,3,3 +280,2,2,2,2,2 +290,1,1,1,1,1 +300,0,0,0,0,0 diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/test2.csv b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/test2.csv new file mode 100644 index 0000000..d05acb7 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/test2.csv @@ -0,0 +1,103 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,10,10,10,10,10,10 +10,9,9,9,9,9,9 +20,8,8,8,8,8,8 +30,7,7,7,7,7,7 +40,6,6,6,6,6,6 +50,5,5,5,5,5,5 +60,4,4,4,4,4,4 +70,3,3,3,3,3,3 +80,2,2,2,2,2,2 +90,1,1,1,1,1,1 +100,0,0,0,0,0,0 +110,1,1,1,1,1,1 +120,2,2,2,2,2,2 +130,3,3,3,3,3,3 +140,4,4,4,4,4,4 +150,5,5,5,5,5,5 +160,6,6,6,6,6,6 +170,7,7,7,7,7,7 +180,8,8,8,8,8,8 +190,9,9,9,9,9,9 +200,10,10,10,10,10,10 +210,9,9,9,9,9,9 +220,8,8,8,8,8,8 +230,7,7,7,7,7,7 +240,6,6,6,6,6,6 +250,5,5,5,5,5,5 +260,4,4,4,4,4,4 +270,3,3,3,3,3,3 +280,2,2,2,2,2,2 +290,1,1,1,1,1,1 +300,0,0,0,0,0,0 +310,1,1,1,1,1,1 +320,2,2,2,2,2,2 +330,3,3,3,3,3,3 +340,4,4,4,4,4,4 +350,5,5,5,5,5,5 +360,6,6,6,6,6,6 +370,7,7,7,7,7,7 +380,8,8,8,8,8,8 +390,9,9,9,9,9,9 +400,10,10,10,10,10,10 +410,9,9,9,9,9,9 +420,8,8,8,8,8,8 +430,7,7,7,7,7,7 +440,6,6,6,6,6,6 +450,5,5,5,5,5,5 +460,4,4,4,4,4,4 +470,3,3,3,3,3,3 +480,2,2,2,2,2,2 +490,1,1,1,1,1,1 +500,0,0,0,0,0,0 +510,1,1,1,1,1,1 +520,2,2,2,2,2,2 +530,3,3,3,3,3,3 +540,4,4,4,4,4,4 +550,5,5,5,5,5,5 +560,6,6,6,6,6,6 +570,7,7,7,7,7,7 +580,8,8,8,8,8,8 +590,9,9,9,9,9,9 +600,10,10,10,10,10,10 +610,9,9,9,9,9,9 +620,8,8,8,8,8,8 +630,7,7,7,7,7,7 +640,6,6,6,6,6,6 +650,5,5,5,5,5,5 +660,4,4,4,4,4,4 +670,3,3,3,3,3,3 +680,2,2,2,2,2,2 +690,1,1,1,1,1,1 +700,0,0,0,0,0,0 +710,1,1,1,1,1,1 +720,2,2,2,2,2,2 +730,3,3,3,3,3,3 +740,4,4,4,4,4,4 +750,5,5,5,5,5,5 +760,6,6,6,6,6,6 +770,7,7,7,7,7,7 +780,8,8,8,8,8,8 +790,9,9,9,9,9,9 +800,10,10,10,10,10,10 +810,9,9,9,9,9,9 +820,8,8,8,8,8,8 +830,7,7,7,7,7,7 +840,6,6,6,6,6,6 +850,5,5,5,5,5,5 +860,4,4,4,4,4,4 +870,3,3,3,3,3,3 +880,2,2,2,2,2,2 +890,1,1,1,1,1,1 +900,0,0,0,0,0,0 +910,1,1,1,1,1,1 +920,2,2,2,2,2,2 +930,3,3,3,3,3,3 +940,4,4,4,4,4,4 +950,5,5,5,5,5,5 +960,6,6,6,6,6,6 +970,7,7,7,7,7,7 +980,8,8,8,8,8,8 +990,9,9,9,9,9,9 +1000,10,10,10,10,10,10 diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/test2.csv.original b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/test2.csv.original new file mode 100644 index 0000000..07d2393 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/test2.csv.original @@ -0,0 +1,103 @@ +#test configuration file2 +#Time,BPS,APS,MC,GC,FHPS +0,10,10,10,10,10 +10,9,9,9,9,9 +20,8,8,8,8,8 +30,7,7,7,7,7 +40,6,6,6,6,6 +50,5,5,5,5,5 +60,4,4,4,4,4 +70,3,3,3,3,3 +80,2,2,2,2,2 +90,1,1,1,1,1 +100,0,0,0,0,0 +110,1,1,1,1,1 +120,2,2,2,2,2 +130,3,3,3,3,3 +140,4,4,4,4,4 +150,5,5,5,5,5 +160,6,6,6,6,6 +170,7,7,7,7,7 +180,8,8,8,8,8 +190,9,9,9,9,9 +200,10,10,10,10,10 +210,9,9,9,9,9 +220,8,8,8,8,8 +230,7,7,7,7,7 +240,6,6,6,6,6 +250,5,5,5,5,5 +260,4,4,4,4,4 +270,3,3,3,3,3 +280,2,2,2,2,2 +290,1,1,1,1,1 +300,0,0,0,0,0 +310,1,1,1,1,1 +320,2,2,2,2,2 +330,3,3,3,3,3 +340,4,4,4,4,4 +350,5,5,5,5,5 +360,6,6,6,6,6 +370,7,7,7,7,7 +380,8,8,8,8,8 +390,9,9,9,9,9 +400,10,10,10,10,10 +410,9,9,9,9,9 +420,8,8,8,8,8 +430,7,7,7,7,7 +440,6,6,6,6,6 +450,5,5,5,5,5 +460,4,4,4,4,4 +470,3,3,3,3,3 +480,2,2,2,2,2 +490,1,1,1,1,1 +500,0,0,0,0,0 +510,1,1,1,1,1 +520,2,2,2,2,2 +530,3,3,3,3,3 +540,4,4,4,4,4 +550,5,5,5,5,5 +560,6,6,6,6,6 +570,7,7,7,7,7 +580,8,8,8,8,8 +590,9,9,9,9,9 +600,10,10,10,10,10 +610,9,9,9,9,9 +620,8,8,8,8,8 +630,7,7,7,7,7 +640,6,6,6,6,6 +650,5,5,5,5,5 +660,4,4,4,4,4 +670,3,3,3,3,3 +680,2,2,2,2,2 +690,1,1,1,1,1 +700,0,0,0,0,0 +710,1,1,1,1,1 +720,2,2,2,2,2 +730,3,3,3,3,3 +740,4,4,4,4,4 +750,5,5,5,5,5 +760,6,6,6,6,6 +770,7,7,7,7,7 +780,8,8,8,8,8 +790,9,9,9,9,9 +800,10,10,10,10,10 +810,9,9,9,9,9 +820,8,8,8,8,8 +830,7,7,7,7,7 +840,6,6,6,6,6 +850,5,5,5,5,5 +860,4,4,4,4,4 +870,3,3,3,3,3 +880,2,2,2,2,2 +890,1,1,1,1,1 +900,0,0,0,0,0 +910,1,1,1,1,1 +920,2,2,2,2,2 +930,3,3,3,3,3 +940,4,4,4,4,4 +950,5,5,5,5,5 +960,6,6,6,6,6 +970,7,7,7,7,7 +980,8,8,8,8,8 +990,9,9,9,9,9 +1000,10,10,10,10,10 diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/test3.csv b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/test3.csv new file mode 100644 index 0000000..6751924 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/test3.csv @@ -0,0 +1,6002 @@ +t (100ms),EW6-Voset (kV),EW2-Voset (kV),EW3-VOset (kV),EW101-MC-Ioset (A),EW101-GC-Ioset (A),FPS101-Voset (V) +0,46,20,15,111.3,1.7,53.2 +1,46,20.5,14.5,111.3,1.7,62 +2,46,21,14,111.3,1.7,62 +3,46,21.5,13.5,111.3,1.7,62 +4,46,22,13,111.3,1.7,62 +5,46,22.5,12.5,111.3,1.7,62 +6,46,23,12,111.3,1.7,62 +7,46,23.5,11.5,111.3,1.7,62 +8,46,24,11,111.3,1.7,62 +9,46,24.5,10.5,111.3,1.7,62 +10,46,25,10,111.3,1.7,62 +11,46,25.5,9.5,111.3,1.7,62 +12,46,26,9,111.3,1.7,62 +13,46,26.5,8.5,111.3,1.7,62 +14,46,27,8,111.3,1.7,62 +15,46,27.5,7.5,111.3,1.7,62 +16,46,28,7,111.3,1.7,62 +17,46,28.5,6.5,111.3,1.7,62 +18,46,29,6,111.3,1.7,62 +19,46,29.5,5.5,111.3,1.7,62 +20,46,30,5,111.3,1.7,62 +21,46,30,4.5,111.3,1.7,62 +22,46,30,4,111.3,1.7,62 +23,46,30,4,111.3,1.7,62 +24,46,30,4,111.3,1.7,62 +25,46,30,4,111.3,1.7,62 +26,46,30,4,111.3,1.7,62 +27,46,30,4,111.3,1.7,62 +28,46,30,4,111.3,1.7,62 +29,46,30,4,111.3,1.7,62 +30,46,30,4,111.3,1.7,62 +31,46,30,3.4,111.3,1.7,62 +32,46,30,3.4,111.3,1.7,62 +33,46,30,3.4,111.3,1.7,62 +34,46,30,3.4,111.3,1.7,62 +35,46,30,3.4,111.3,1.7,62 +36,46,30,3.4,111.3,1.7,62 +37,46,30,3.4,111.3,1.7,62 +38,46,30,3.4,111.3,1.7,62 +39,46,30,3.4,111.3,1.7,62 +40,46,30,3.4,111.3,1.7,62 +41,46,30,3.4,111.3,1.7,62 +42,46,30,3.4,111.3,1.7,62 +43,46,30,3.4,111.3,1.7,62 +44,46,30,3.4,111.3,1.7,62 +45,46,30,3.4,111.3,1.7,62 +46,46,30,3.4,111.3,1.7,62 +47,46,30,3.4,111.3,1.7,62 +48,46,30,3.4,111.3,1.7,62 +49,46,30,3.4,111.3,1.7,62 +50,46,30,3.4,111.3,1.7,62 +51,46,30,3.4,111.3,1.7,62.1 +52,46,30,3.4,111.3,1.7,62.2 +53,46,30,3.4,111.3,1.7,62.3 +54,46,30,3.4,111.3,1.7,62.4 +55,46,30,3.4,111.3,1.7,62.5 +56,46,30,3.4,111.3,1.7,62.6 +57,46,30,3.4,111.3,1.7,62.7 +58,46,30,3.4,111.3,1.7,62.8 +59,46,30,3.4,111.3,1.7,62.9 +60,46,30,3.4,111.3,1.7,63 +61,46,30,3,111.3,1.7,63.1 +62,46,30,3,111.3,1.7,63.2 +63,46,30,3,111.3,1.7,63.3 +64,46,30,3,111.3,1.7,63.4 +65,46,30,3,111.3,1.7,63.5 +66,46,30,3,111.3,1.7,63.6 +67,46,30,3,111.3,1.7,63.7 +68,46,30,3,111.3,1.7,63.8 +69,46,30,3,111.3,1.7,63.9 +70,46,30,3,111.3,1.7,64 +71,46,30,3,111.3,1.7,64.1 +72,46,30,3,111.3,1.7,64.2 +73,46,30,3,111.3,1.7,64.3 +74,46,30,3,111.3,1.7,64.4 +75,46,30,3,111.3,1.7,64.5 +76,46,30,3,111.3,1.7,64.6 +77,46,30,3,111.3,1.7,64.7 +78,46,30,3,111.3,1.7,64.8 +79,46,30,3,111.3,1.7,64.9 +80,46,30,3,111.3,1.7,65 +81,46,30,3,111.3,1.7,65.1 +82,46,30,3,111.3,1.7,65.2 +83,46,30,3,111.3,1.7,65.3 +84,46,30,3,111.3,1.7,65.4 +85,46,30,3,111.3,1.7,65.5 +86,46,30,3,111.3,1.7,65.6 +87,46,30,3,111.3,1.7,65.7 +88,46,30,3,111.3,1.7,65.8 +89,46,30,3,111.3,1.7,65.9 +90,46,30,3,111.3,1.7,66 +91,46,30,3,111.3,1.7,66.1 +92,46,30,3,111.3,1.7,66.2 +93,46,30,3,111.3,1.7,66.3 +94,46,30,3,111.3,1.7,66.4 +95,46,30,3,111.3,1.7,66.5 +96,46,30,3,111.3,1.7,66.6 +97,46,30,3,111.3,1.7,66.7 +98,46,30,3,111.3,1.7,66.8 +99,46,30,3,111.3,1.7,66.9 +100,46,30,3,111.3,1.7,67 +101,46,30,3,111.3,1.7,67 +102,46,30,3,111.3,1.7,67 +103,46,30,3,111.3,1.7,67 +104,46,30,3,111.3,1.7,67 +105,46,30,3,111.3,1.7,67 +106,46,30,3,111.3,1.7,67 +107,46,30,3,111.3,1.7,67 +108,46,30,3,111.3,1.7,67 +109,46,30,3,111.3,1.7,67 +110,46,30,3,111.3,1.7,67 +111,46,30,3,111.3,1.7,67 +112,46,30,3,111.3,1.7,67 +113,46,30,3,111.3,1.7,67 +114,46,30,3,111.3,1.7,67 +115,46,30,3,111.3,1.7,67 +116,46,30,3,111.3,1.7,67 +117,46,30,3,111.3,1.7,67 +118,46,30,3,111.3,1.7,67 +119,46,30,3,111.3,1.7,67 +120,46,30,3,111.3,1.7,67 +121,46,30,3,111.3,1.7,67 +122,46,30,3,111.3,1.7,67 +123,46,30,3,111.3,1.7,67 +124,46,30,3,111.3,1.7,67 +125,46,30,3,111.3,1.7,67 +126,46,30,3,111.3,1.7,67 +127,46,30,3,111.3,1.7,67 +128,46,30,3,111.3,1.7,67 +129,46,30,3,111.3,1.7,67 +130,46,30,3,111.3,1.7,67 +131,46,30,3,111.3,1.7,67 +132,46,30,3,111.3,1.7,67 +133,46,30,3,111.3,1.7,67 +134,46,30,3,111.3,1.7,67 +135,46,30,3,111.3,1.7,67 +136,46,30,3,111.3,1.7,67 +137,46,30,3,111.3,1.7,67 +138,46,30,3,111.3,1.7,67 +139,46,30,3,111.3,1.7,67 +140,46,30,3,111.3,1.7,67 +141,46,30,3,111.3,1.7,67 +142,46,30,3,111.3,1.7,67 +143,46,30,3,111.3,1.7,67 +144,46,30,3,111.3,1.7,67 +145,46,30,3,111.3,1.7,67 +146,46,30,3,111.3,1.7,67 +147,46,30,3,111.3,1.7,67 +148,46,30,3,111.3,1.7,67 +149,46,30,3,111.3,1.7,67 +150,46,30,3,111.3,1.7,67 +151,46,30,3,111.3,1.7,67 +152,46,30,3,111.3,1.7,67 +153,46,30,3,111.3,1.7,67 +154,46,30,3,111.3,1.7,67 +155,46,30,3,111.3,1.7,67 +156,46,30,3,111.3,1.7,67 +157,46,30,3,111.3,1.7,67 +158,46,30,3,111.3,1.7,67 +159,46,30,3,111.3,1.7,67 +160,46,30,3,111.3,1.7,67 +161,46,30,3,111.3,1.7,67 +162,46,30,3,111.3,1.7,67 +163,46,30,3,111.3,1.7,67 +164,46,30,3,111.3,1.7,67 +165,46,30,3,111.3,1.7,67 +166,46,30,3,111.3,1.7,67 +167,46,30,3,111.3,1.7,67 +168,46,30,3,111.3,1.7,67 +169,46,30,3,111.3,1.7,67 +170,46,30,3,111.3,1.7,67 +171,46,30,3,111.3,1.7,67 +172,46,30,3,111.3,1.7,67 +173,46,30,3,111.3,1.7,67 +174,46,30,3,111.3,1.7,67 +175,46,30,3,111.3,1.7,67 +176,46,30,3,111.3,1.7,67 +177,46,30,3,111.3,1.7,67 +178,46,30,3,111.3,1.7,67 +179,46,30,3,111.3,1.7,67 +180,46,30,3,111.3,1.7,67 +181,46,30,3,111.3,1.7,67 +182,46,30,3,111.3,1.7,67 +183,46,30,3,111.3,1.7,67 +184,46,30,3,111.3,1.7,67 +185,46,30,3,111.3,1.7,67 +186,46,30,3,111.3,1.7,67 +187,46,30,3,111.3,1.7,67 +188,46,30,3,111.3,1.7,67 +189,46,30,3,111.3,1.7,67 +190,46,30,3,111.3,1.7,67 +191,46,30,3,111.3,1.7,67 +192,46,30,3,111.3,1.7,67 +193,46,30,3,111.3,1.7,67 +194,46,30,3,111.3,1.7,67 +195,46,30,3,111.3,1.7,67 +196,46,30,3,111.3,1.7,67 +197,46,30,3,111.3,1.7,67 +198,46,30,3,111.3,1.7,67 +199,46,30,3,111.3,1.7,67 +200,46,30,2.9,111.3,1.7,67 +201,46,30,2.9,111.05,1.7,67 +202,46,30,2.9,111.05,1.7,67 +203,46,30,2.9,111.05,1.7,67 +204,46,30,2.9,111.05,1.7,67 +205,46,30,2.9,111.05,1.7,67 +206,46,30,2.9,111.05,1.7,67 +207,46,30,2.9,111.05,1.7,67 +208,46,30,2.9,111.05,1.7,67 +209,46,30,2.9,111.05,1.7,67 +210,46,30,2.9,111.05,1.7,67 +211,46,30,2.9,111.05,1.7,67 +212,46,30,2.9,111.05,1.7,67 +213,46,30,2.9,111.05,1.7,67 +214,46,30,2.9,111.05,1.7,67 +215,46,30,2.9,111.05,1.7,67 +216,46,30,2.9,111.05,1.7,67 +217,46,30,2.9,111.05,1.7,67 +218,46,30,2.9,111.05,1.7,67 +219,46,30,2.9,111.05,1.7,67 +220,46,30,2.9,111.05,1.7,67 +221,46,30,2.9,111.05,1.7,67 +222,46,30,2.9,111.05,1.7,67 +223,46,30,2.9,111.05,1.7,67 +224,46,30,2.9,111.05,1.7,67 +225,46,30,2.9,111.05,1.7,67 +226,46,30,2.9,111.05,1.7,67 +227,46,30,2.9,111.05,1.7,67 +228,46,30,2.9,111.05,1.7,67 +229,46,30,2.9,111.05,1.7,67 +230,46,30,2.9,111.05,1.7,67 +231,46,30,2.9,111.05,1.7,67 +232,46,30,2.9,111.05,1.7,67 +233,46,30,2.9,111.05,1.7,67 +234,46,30,2.9,111.05,1.7,67 +235,46,30,2.9,111.05,1.7,67 +236,46,30,2.9,111.05,1.7,67 +237,46,30,2.9,111.05,1.7,67 +238,46,30,2.9,111.05,1.7,67 +239,46,30,2.9,111.05,1.7,67 +240,46,30,2.9,111.05,1.7,67 +241,46,30,2.9,111.05,1.7,67 +242,46,30,2.9,111.05,1.7,67 +243,46,30,2.9,111.05,1.7,67 +244,46,30,2.9,111.05,1.7,67 +245,46,30,2.9,111.05,1.7,67 +246,46,30,2.9,111.05,1.7,67 +247,46,30,2.9,111.05,1.7,67 +248,46,30,2.9,111.05,1.7,67 +249,46,30,2.9,111.05,1.7,67 +250,46,30,2.8,111.05,1.7,67 +251,46,30,2.8,111.05,1.7,67 +252,46,30,2.8,111.05,1.7,67 +253,46,30,2.8,111.05,1.7,67 +254,46,30,2.8,111.05,1.7,67 +255,46,30,2.8,111.05,1.7,67 +256,46,30,2.8,111.05,1.7,67 +257,46,30,2.8,111.05,1.7,67 +258,46,30,2.8,111.05,1.7,67 +259,46,30,2.8,111.05,1.7,67 +260,46,30,2.8,111.05,1.7,67 +261,46,30,2.8,111.05,1.7,67 +262,46,30,2.8,111.05,1.7,67 +263,46,30,2.8,111.05,1.7,67 +264,46,30,2.8,111.05,1.7,67 +265,46,30,2.8,111.05,1.7,67 +266,46,30,2.8,111.05,1.7,67 +267,46,30,2.8,111.05,1.7,67 +268,46,30,2.8,111.05,1.7,67 +269,46,30,2.8,111.05,1.7,67 +270,46,30,2.8,111.05,1.7,67 +271,46,30,2.8,111.05,1.7,67 +272,46,30,2.8,111.05,1.7,67 +273,46,30,2.8,111.05,1.7,67 +274,46,30,2.8,111.05,1.7,67 +275,46,30,2.8,111.05,1.7,67 +276,46,30,2.8,111.05,1.7,67 +277,46,30,2.8,111.05,1.7,67 +278,46,30,2.8,111.05,1.7,67 +279,46,30,2.8,111.05,1.7,67 +280,46,30,2.8,111.05,1.7,67 +281,46,30,2.8,111.05,1.7,67 +282,46,30,2.8,111.05,1.7,67 +283,46,30,2.8,111.05,1.7,67 +284,46,30,2.8,111.05,1.7,67 +285,46,30,2.8,111.05,1.7,67 +286,46,30,2.8,111.05,1.7,67 +287,46,30,2.8,111.05,1.7,67 +288,46,30,2.8,111.05,1.7,67 +289,46,30,2.8,111.05,1.7,67 +290,46,30,2.8,111.05,1.7,67 +291,46,30,2.8,111.05,1.7,67 +292,46,30,2.8,111.05,1.7,67 +293,46,30,2.8,111.05,1.7,67 +294,46,30,2.8,111.05,1.7,67 +295,46,30,2.8,111.05,1.7,67 +296,46,30,2.8,111.05,1.7,67 +297,46,30,2.8,111.05,1.7,67 +298,46,30,2.8,111.05,1.7,67 +299,46,30,2.8,111.05,1.7,67 +300,46,30,2.7,111.05,1.7,67 +301,46,30,2.7,111.05,1.7,67 +302,46,30,2.7,111.05,1.7,67 +303,46,30,2.7,111.05,1.7,67 +304,46,30,2.7,111.05,1.7,67 +305,46,30,2.7,111.05,1.7,67 +306,46,30,2.7,111.05,1.7,67 +307,46,30,2.7,111.05,1.7,67 +308,46,30,2.7,111.05,1.7,67 +309,46,30,2.7,111.05,1.7,67 +310,46,30,2.7,111.05,1.7,67 +311,46,30,2.7,111.05,1.7,67 +312,46,30,2.7,111.05,1.7,67 +313,46,30,2.7,111.05,1.7,67 +314,46,30,2.7,111.05,1.7,67 +315,46,30,2.7,111.05,1.7,67 +316,46,30,2.7,111.05,1.7,67 +317,46,30,2.7,111.05,1.7,67 +318,46,30,2.7,111.05,1.7,67 +319,46,30,2.7,111.05,1.7,67 +320,46,30,2.7,111.05,1.7,67 +321,46,30,2.7,111.05,1.7,67 +322,46,30,2.7,111.05,1.7,67 +323,46,30,2.7,111.05,1.7,67 +324,46,30,2.7,111.05,1.7,67 +325,46,30,2.7,111.05,1.7,67 +326,46,30,2.7,111.05,1.7,67 +327,46,30,2.7,111.05,1.7,67 +328,46,30,2.7,111.05,1.7,67 +329,46,30,2.7,111.05,1.7,67 +330,46,30,2.7,111.05,1.7,67 +331,46,30,2.7,111.05,1.7,67 +332,46,30,2.7,111.05,1.7,67 +333,46,30,2.7,111.05,1.7,67 +334,46,30,2.7,111.05,1.7,67 +335,46,30,2.7,111.05,1.7,67 +336,46,30,2.7,111.05,1.7,67 +337,46,30,2.7,111.05,1.7,67 +338,46,30,2.7,111.05,1.7,67 +339,46,30,2.7,111.05,1.7,67 +340,46,30,2.7,111.05,1.7,67 +341,46,30,2.7,111.05,1.7,67 +342,46,30,2.7,111.05,1.7,67 +343,46,30,2.7,111.05,1.7,67 +344,46,30,2.7,111.05,1.7,67 +345,46,30,2.7,111.05,1.7,67 +346,46,30,2.7,111.05,1.7,67 +347,46,30,2.7,111.05,1.7,67 +348,46,30,2.7,111.05,1.7,67 +349,46,30,2.7,111.05,1.7,67 +350,46,30,2.7,111.05,1.7,67 +351,46,30,2.7,111.05,1.7,67 +352,46,30,2.7,111.05,1.7,67 +353,46,30,2.7,111.05,1.7,67 +354,46,30,2.7,111.05,1.7,67 +355,46,30,2.7,111.05,1.7,67 +356,46,30,2.7,111.05,1.7,67 +357,46,30,2.7,111.05,1.7,67 +358,46,30,2.7,111.05,1.7,67 +359,46,30,2.7,111.05,1.7,67 +360,46,30,2.7,111.05,1.7,67 +361,46,30,2.7,111.05,1.7,67 +362,46,30,2.7,111.05,1.7,67 +363,46,30,2.7,111.05,1.7,67 +364,46,30,2.7,111.05,1.7,67 +365,46,30,2.7,111.05,1.7,67 +366,46,30,2.7,111.05,1.7,67 +367,46,30,2.7,111.05,1.7,67 +368,46,30,2.7,111.05,1.7,67 +369,46,30,2.7,111.05,1.7,67 +370,46,30,2.7,111.05,1.7,67 +371,46,30,2.7,111.05,1.7,67 +372,46,30,2.7,111.05,1.7,67 +373,46,30,2.7,111.05,1.7,67 +374,46,30,2.7,111.05,1.7,67 +375,46,30,2.7,111.05,1.7,67 +376,46,30,2.7,111.05,1.7,67 +377,46,30,2.7,111.05,1.7,67 +378,46,30,2.7,111.05,1.7,67 +379,46,30,2.7,111.05,1.7,67 +380,46,30,2.7,111.05,1.7,67 +381,46,30,2.7,111.05,1.7,67 +382,46,30,2.7,111.05,1.7,67 +383,46,30,2.7,111.05,1.7,67 +384,46,30,2.7,111.05,1.7,67 +385,46,30,2.7,111.05,1.7,67 +386,46,30,2.7,111.05,1.7,67 +387,46,30,2.7,111.05,1.7,67 +388,46,30,2.7,111.05,1.7,67 +389,46,30,2.7,111.05,1.7,67 +390,46,30,2.7,111.05,1.7,67 +391,46,30,2.7,111.05,1.7,67 +392,46,30,2.7,111.05,1.7,67 +393,46,30,2.7,111.05,1.7,67 +394,46,30,2.7,111.05,1.7,67 +395,46,30,2.7,111.05,1.7,67 +396,46,30,2.7,111.05,1.7,67 +397,46,30,2.7,111.05,1.7,67 +398,46,30,2.7,111.05,1.7,67 +399,46,30,2.7,111.05,1.7,67 +400,46,30,2.7,111.05,1.7,67 +401,46,30,2.7,111.05,1.7,66.9975 +402,46,30,2.7,111.05,1.7,66.995 +403,46,30,2.7,111.05,1.7,66.9925 +404,46,30,2.7,111.05,1.7,66.99 +405,46,30,2.7,111.05,1.7,66.9875 +406,46,30,2.7,111.05,1.7,66.985 +407,46,30,2.7,111.05,1.7,66.9825 +408,46,30,2.7,111.05,1.7,66.98 +409,46,30,2.7,111.05,1.7,66.9775 +410,46,30,2.7,111.05,1.7,66.975 +411,46,30,2.7,111.05,1.7,66.9725 +412,46,30,2.7,111.05,1.7,66.97 +413,46,30,2.7,111.05,1.7,66.9675 +414,46,30,2.7,111.05,1.7,66.965 +415,46,30,2.7,111.05,1.7,66.9625 +416,46,30,2.7,111.05,1.7,66.96 +417,46,30,2.7,111.05,1.7,66.9575 +418,46,30,2.7,111.05,1.7,66.955 +419,46,30,2.7,111.05,1.7,66.9525 +420,46,30,2.7,111.05,1.7,66.95 +421,46,30,2.7,111.05,1.7,66.9475 +422,46,30,2.7,111.05,1.7,66.945 +423,46,30,2.7,111.05,1.7,66.9425 +424,46,30,2.7,111.05,1.7,66.94 +425,46,30,2.7,111.05,1.7,66.9375 +426,46,30,2.7,111.05,1.7,66.935 +427,46,30,2.7,111.05,1.7,66.9325 +428,46,30,2.7,111.05,1.7,66.93 +429,46,30,2.7,111.05,1.7,66.9275 +430,46,30,2.7,111.05,1.7,66.925 +431,46,30,2.7,111.05,1.7,66.9225 +432,46,30,2.7,111.05,1.7,66.92 +433,46,30,2.7,111.05,1.7,66.9175 +434,46,30,2.7,111.05,1.7,66.915 +435,46,30,2.7,111.05,1.7,66.9125 +436,46,30,2.7,111.05,1.7,66.91 +437,46,30,2.7,111.05,1.7,66.9075 +438,46,30,2.7,111.05,1.7,66.905 +439,46,30,2.7,111.05,1.7,66.9025 +440,46,30,2.7,111.05,1.7,66.9 +441,46,30,2.7,111.05,1.7,66.8975 +442,46,30,2.7,111.05,1.7,66.895 +443,46,30,2.7,111.05,1.7,66.8925 +444,46,30,2.7,111.05,1.7,66.89 +445,46,30,2.7,111.05,1.7,66.8875 +446,46,30,2.7,111.05,1.7,66.885 +447,46,30,2.7,111.05,1.7,66.8825 +448,46,30,2.7,111.05,1.7,66.88 +449,46,30,2.7,111.05,1.7,66.8775 +450,46,30,2.7,111.05,1.7,66.875 +451,46,30,2.7,111.05,1.7,66.8725 +452,46,30,2.7,111.05,1.7,66.87 +453,46,30,2.7,111.05,1.7,66.8675 +454,46,30,2.7,111.05,1.7,66.865 +455,46,30,2.7,111.05,1.7,66.8625 +456,46,30,2.7,111.05,1.7,66.86 +457,46,30,2.7,111.05,1.7,66.8575 +458,46,30,2.7,111.05,1.7,66.855 +459,46,30,2.7,111.05,1.7,66.8525 +460,46,30,2.7,111.05,1.7,66.85 +461,46,30,2.7,111.05,1.7,66.8475 +462,46,30,2.7,111.05,1.7,66.845 +463,46,30,2.7,111.05,1.7,66.8425 +464,46,30,2.7,111.05,1.7,66.84 +465,46,30,2.7,111.05,1.7,66.8375 +466,46,30,2.7,111.05,1.7,66.835 +467,46,30,2.7,111.05,1.7,66.8325 +468,46,30,2.7,111.05,1.7,66.83 +469,46,30,2.7,111.05,1.7,66.8275 +470,46,30,2.7,111.05,1.7,66.825 +471,46,30,2.7,111.05,1.7,66.8225 +472,46,30,2.7,111.05,1.7,66.82 +473,46,30,2.7,111.05,1.7,66.8175 +474,46,30,2.7,111.05,1.7,66.815 +475,46,30,2.7,111.05,1.7,66.8125 +476,46,30,2.7,111.05,1.7,66.81 +477,46,30,2.7,111.05,1.7,66.8075 +478,46,30,2.7,111.05,1.7,66.805 +479,46,30,2.7,111.05,1.7,66.8025 +480,46,30,2.7,111.05,1.7,66.8 +481,46,30,2.7,111.05,1.7,66.7975 +482,46,30,2.7,111.05,1.7,66.795 +483,46,30,2.7,111.05,1.7,66.7925 +484,46,30,2.7,111.05,1.7,66.79 +485,46,30,2.7,111.05,1.7,66.7875 +486,46,30,2.7,111.05,1.7,66.785 +487,46,30,2.7,111.05,1.7,66.7825 +488,46,30,2.7,111.05,1.7,66.78 +489,46,30,2.7,111.05,1.7,66.7775 +490,46,30,2.7,111.05,1.7,66.775 +491,46,30,2.7,111.05,1.7,66.7725 +492,46,30,2.7,111.05,1.7,66.77 +493,46,30,2.7,111.05,1.7,66.7675 +494,46,30,2.7,111.05,1.7,66.765 +495,46,30,2.7,111.05,1.7,66.7625 +496,46,30,2.7,111.05,1.7,66.76 +497,46,30,2.7,111.05,1.7,66.7575 +498,46,30,2.7,111.05,1.7,66.755 +499,46,30,2.7,111.05,1.7,66.7525 +500,46,30,2.7,111.05,1.7,66.75 +501,46,30,2.7,111.05,1.7,66.7475 +502,46,30,2.7,111.05,1.7,66.745 +503,46,30,2.7,111.05,1.7,66.7425 +504,46,30,2.7,111.05,1.7,66.74 +505,46,30,2.7,111.05,1.7,66.7375 +506,46,30,2.7,111.05,1.7,66.735 +507,46,30,2.7,111.05,1.7,66.7325 +508,46,30,2.7,111.05,1.7,66.73 +509,46,30,2.7,111.05,1.7,66.7275 +510,46,30,2.7,111.05,1.7,66.725 +511,46,30,2.7,111.05,1.7,66.7225 +512,46,30,2.7,111.05,1.7,66.72 +513,46,30,2.7,111.05,1.7,66.7175 +514,46,30,2.7,111.05,1.7,66.715 +515,46,30,2.7,111.05,1.7,66.7125 +516,46,30,2.7,111.05,1.7,66.71 +517,46,30,2.7,111.05,1.7,66.7075 +518,46,30,2.7,111.05,1.7,66.705 +519,46,30,2.7,111.05,1.7,66.7025 +520,46,30,2.7,111.05,1.7,66.7 +521,46,30,2.7,111.05,1.7,66.6975 +522,46,30,2.7,111.05,1.7,66.695 +523,46,30,2.7,111.05,1.7,66.6925 +524,46,30,2.7,111.05,1.7,66.69 +525,46,30,2.7,111.05,1.7,66.6875 +526,46,30,2.7,111.05,1.7,66.685 +527,46,30,2.7,111.05,1.7,66.6825 +528,46,30,2.7,111.05,1.7,66.68 +529,46,30,2.7,111.05,1.7,66.6775 +530,46,30,2.7,111.05,1.7,66.675 +531,46,30,2.7,111.05,1.7,66.6725 +532,46,30,2.7,111.05,1.7,66.67 +533,46,30,2.7,111.05,1.7,66.6675 +534,46,30,2.7,111.05,1.7,66.665 +535,46,30,2.7,111.05,1.7,66.6625 +536,46,30,2.7,111.05,1.7,66.66 +537,46,30,2.7,111.05,1.7,66.6575 +538,46,30,2.7,111.05,1.7,66.655 +539,46,30,2.7,111.05,1.7,66.6525 +540,46,30,2.7,111.05,1.7,66.65 +541,46,30,2.7,111.05,1.7,66.6475 +542,46,30,2.7,111.05,1.7,66.645 +543,46,30,2.7,111.05,1.7,66.6425 +544,46,30,2.7,111.05,1.7,66.64 +545,46,30,2.7,111.05,1.7,66.6375 +546,46,30,2.7,111.05,1.7,66.635 +547,46,30,2.7,111.05,1.7,66.6325 +548,46,30,2.7,111.05,1.7,66.63 +549,46,30,2.7,111.05,1.7,66.6275 +550,46,30,2.7,111.05,1.7,66.625 +551,46,30,2.7,111.05,1.7,66.6225 +552,46,30,2.7,111.05,1.7,66.62 +553,46,30,2.7,111.05,1.7,66.6175 +554,46,30,2.7,111.05,1.7,66.615 +555,46,30,2.7,111.05,1.7,66.6125 +556,46,30,2.7,111.05,1.7,66.61 +557,46,30,2.7,111.05,1.7,66.6075 +558,46,30,2.7,111.05,1.7,66.605 +559,46,30,2.7,111.05,1.7,66.6025 +560,46,30,2.7,111.05,1.7,66.6 +561,46,30,2.7,111.05,1.7,66.5975 +562,46,30,2.7,111.05,1.7,66.595 +563,46,30,2.7,111.05,1.7,66.5925 +564,46,30,2.7,111.05,1.7,66.59 +565,46,30,2.7,111.05,1.7,66.5875 +566,46,30,2.7,111.05,1.7,66.585 +567,46,30,2.7,111.05,1.7,66.5825 +568,46,30,2.7,111.05,1.7,66.58 +569,46,30,2.7,111.05,1.7,66.5775 +570,46,30,2.7,111.05,1.7,66.575 +571,46,30,2.7,111.05,1.7,66.5725 +572,46,30,2.7,111.05,1.7,66.57 +573,46,30,2.7,111.05,1.7,66.5675 +574,46,30,2.7,111.05,1.7,66.565 +575,46,30,2.7,111.05,1.7,66.5625 +576,46,30,2.7,111.05,1.7,66.56 +577,46,30,2.7,111.05,1.7,66.5575 +578,46,30,2.7,111.05,1.7,66.555 +579,46,30,2.7,111.05,1.7,66.5525 +580,46,30,2.7,111.05,1.7,66.55 +581,46,30,2.7,111.05,1.7,66.5475 +582,46,30,2.7,111.05,1.7,66.545 +583,46,30,2.7,111.05,1.7,66.5425 +584,46,30,2.7,111.05,1.7,66.54 +585,46,30,2.7,111.05,1.7,66.5375 +586,46,30,2.7,111.05,1.7,66.535 +587,46,30,2.7,111.05,1.7,66.5325 +588,46,30,2.7,111.05,1.7,66.53 +589,46,30,2.7,111.05,1.7,66.5275 +590,46,30,2.7,111.05,1.7,66.525 +591,46,30,2.7,111.05,1.7,66.5225 +592,46,30,2.7,111.05,1.7,66.52 +593,46,30,2.7,111.05,1.7,66.5175 +594,46,30,2.7,111.05,1.7,66.515 +595,46,30,2.7,111.05,1.7,66.5125 +596,46,30,2.7,111.05,1.7,66.51 +597,46,30,2.7,111.05,1.7,66.5075 +598,46,30,2.7,111.05,1.7,66.505 +599,46,30,2.7,111.05,1.7,66.5025 +600,46,30,2.7,111.05,1.7,66.5 +601,46,30,2.7,111.05,1.7,66.495 +602,46,30,2.7,111.05,1.7,66.49 +603,46,30,2.7,111.05,1.7,66.485 +604,46,30,2.7,111.05,1.7,66.48 +605,46,30,2.7,111.05,1.7,66.475 +606,46,30,2.7,111.05,1.7,66.47 +607,46,30,2.7,111.05,1.7,66.465 +608,46,30,2.7,111.05,1.7,66.46 +609,46,30,2.7,111.05,1.7,66.455 +610,46,30,2.7,111.05,1.7,66.45 +611,46,30,2.7,111.05,1.7,66.445 +612,46,30,2.7,111.05,1.7,66.44 +613,46,30,2.7,111.05,1.7,66.435 +614,46,30,2.7,111.05,1.7,66.43 +615,46,30,2.7,111.05,1.7,66.425 +616,46,30,2.7,111.05,1.7,66.42 +617,46,30,2.7,111.05,1.7,66.415 +618,46,30,2.7,111.05,1.7,66.41 +619,46,30,2.7,111.05,1.7,66.405 +620,46,30,2.7,111.05,1.7,66.4 +621,46,30,2.7,111.05,1.7,66.395 +622,46,30,2.7,111.05,1.7,66.39 +623,46,30,2.7,111.05,1.7,66.385 +624,46,30,2.7,111.05,1.7,66.38 +625,46,30,2.7,111.05,1.7,66.375 +626,46,30,2.7,111.05,1.7,66.37 +627,46,30,2.7,111.05,1.7,66.365 +628,46,30,2.7,111.05,1.7,66.36 +629,46,30,2.7,111.05,1.7,66.355 +630,46,30,2.7,111.05,1.7,66.35 +631,46,30,2.7,111.05,1.7,66.345 +632,46,30,2.7,111.05,1.7,66.34 +633,46,30,2.7,111.05,1.7,66.335 +634,46,30,2.7,111.05,1.7,66.33 +635,46,30,2.7,111.05,1.7,66.325 +636,46,30,2.7,111.05,1.7,66.32 +637,46,30,2.7,111.05,1.7,66.315 +638,46,30,2.7,111.05,1.7,66.31 +639,46,30,2.7,111.05,1.7,66.305 +640,46,30,2.7,111.05,1.7,66.3 +641,46,30,2.7,111.05,1.7,66.295 +642,46,30,2.7,111.05,1.7,66.29 +643,46,30,2.7,111.05,1.7,66.285 +644,46,30,2.7,111.05,1.7,66.28 +645,46,30,2.7,111.05,1.7,66.275 +646,46,30,2.7,111.05,1.7,66.27 +647,46,30,2.7,111.05,1.7,66.265 +648,46,30,2.7,111.05,1.7,66.26 +649,46,30,2.7,111.05,1.7,66.255 +650,46,30,2.7,111.05,1.7,66.25 +651,46,30,2.7,111.05,1.7,66.245 +652,46,30,2.7,111.05,1.7,66.24 +653,46,30,2.7,111.05,1.7,66.235 +654,46,30,2.7,111.05,1.7,66.23 +655,46,30,2.7,111.05,1.7,66.225 +656,46,30,2.7,111.05,1.7,66.22 +657,46,30,2.7,111.05,1.7,66.215 +658,46,30,2.7,111.05,1.7,66.21 +659,46,30,2.7,111.05,1.7,66.205 +660,46,30,2.7,111.05,1.7,66.2 +661,46,30,2.7,111.05,1.7,66.195 +662,46,30,2.7,111.05,1.7,66.19 +663,46,30,2.7,111.05,1.7,66.185 +664,46,30,2.7,111.05,1.7,66.18 +665,46,30,2.7,111.05,1.7,66.175 +666,46,30,2.7,111.05,1.7,66.17 +667,46,30,2.7,111.05,1.7,66.165 +668,46,30,2.7,111.05,1.7,66.16 +669,46,30,2.7,111.05,1.7,66.155 +670,46,30,2.7,111.05,1.7,66.15 +671,46,30,2.7,111.05,1.7,66.145 +672,46,30,2.7,111.05,1.7,66.14 +673,46,30,2.7,111.05,1.7,66.135 +674,46,30,2.7,111.05,1.7,66.13 +675,46,30,2.7,111.05,1.7,66.125 +676,46,30,2.7,111.05,1.7,66.12 +677,46,30,2.7,111.05,1.7,66.115 +678,46,30,2.7,111.05,1.7,66.11 +679,46,30,2.7,111.05,1.7,66.105 +680,46,30,2.7,111.05,1.7,66.1 +681,46,30,2.7,111.05,1.7,66.095 +682,46,30,2.7,111.05,1.7,66.09 +683,46,30,2.7,111.05,1.7,66.085 +684,46,30,2.7,111.05,1.7,66.08 +685,46,30,2.7,111.05,1.7,66.075 +686,46,30,2.7,111.05,1.7,66.07 +687,46,30,2.7,111.05,1.7,66.065 +688,46,30,2.7,111.05,1.7,66.06 +689,46,30,2.7,111.05,1.7,66.055 +690,46,30,2.7,111.05,1.7,66.05 +691,46,30,2.7,111.05,1.7,66.045 +692,46,30,2.7,111.05,1.7,66.04 +693,46,30,2.7,111.05,1.7,66.035 +694,46,30,2.7,111.05,1.7,66.03 +695,46,30,2.7,111.05,1.7,66.025 +696,46,30,2.7,111.05,1.7,66.02 +697,46,30,2.7,111.05,1.7,66.015 +698,46,30,2.7,111.05,1.7,66.01 +699,46,30,2.7,111.05,1.7,66.005 +700,46,30,2.7,111.05,1.7,66 +701,46,30,2.7,111.05,1.7,65.995 +702,46,30,2.7,111.05,1.7,65.99 +703,46,30,2.7,111.05,1.7,65.985 +704,46,30,2.7,111.05,1.7,65.98 +705,46,30,2.7,111.05,1.7,65.975 +706,46,30,2.7,111.05,1.7,65.97 +707,46,30,2.7,111.05,1.7,65.965 +708,46,30,2.7,111.05,1.7,65.96 +709,46,30,2.7,111.05,1.7,65.955 +710,46,30,2.7,111.05,1.7,65.95 +711,46,30,2.7,111.05,1.7,65.945 +712,46,30,2.7,111.05,1.7,65.94 +713,46,30,2.7,111.05,1.7,65.935 +714,46,30,2.7,111.05,1.7,65.93 +715,46,30,2.7,111.05,1.7,65.925 +716,46,30,2.7,111.05,1.7,65.92 +717,46,30,2.7,111.05,1.7,65.915 +718,46,30,2.7,111.05,1.7,65.91 +719,46,30,2.7,111.05,1.7,65.905 +720,46,30,2.7,111.05,1.7,65.9 +721,46,30,2.7,111.05,1.7,65.895 +722,46,30,2.7,111.05,1.7,65.89 +723,46,30,2.7,111.05,1.7,65.885 +724,46,30,2.7,111.05,1.7,65.88 +725,46,30,2.7,111.05,1.7,65.875 +726,46,30,2.7,111.05,1.7,65.87 +727,46,30,2.7,111.05,1.7,65.865 +728,46,30,2.7,111.05,1.7,65.86 +729,46,30,2.7,111.05,1.7,65.855 +730,46,30,2.7,111.05,1.7,65.85 +731,46,30,2.7,111.05,1.7,65.845 +732,46,30,2.7,111.05,1.7,65.84 +733,46,30,2.7,111.05,1.7,65.835 +734,46,30,2.7,111.05,1.7,65.83 +735,46,30,2.7,111.05,1.7,65.825 +736,46,30,2.7,111.05,1.7,65.82 +737,46,30,2.7,111.05,1.7,65.815 +738,46,30,2.7,111.05,1.7,65.81 +739,46,30,2.7,111.05,1.7,65.805 +740,46,30,2.7,111.05,1.7,65.8 +741,46,30,2.7,111.05,1.7,65.795 +742,46,30,2.7,111.05,1.7,65.79 +743,46,30,2.7,111.05,1.7,65.785 +744,46,30,2.7,111.05,1.7,65.78 +745,46,30,2.7,111.05,1.7,65.775 +746,46,30,2.7,111.05,1.7,65.77 +747,46,30,2.7,111.05,1.7,65.765 +748,46,30,2.7,111.05,1.7,65.76 +749,46,30,2.7,111.05,1.7,65.755 +750,46,30,2.7,111.05,1.7,65.75 +751,46,30,2.7,111.05,1.7,65.745 +752,46,30,2.7,111.05,1.7,65.74 +753,46,30,2.7,111.05,1.7,65.735 +754,46,30,2.7,111.05,1.7,65.73 +755,46,30,2.7,111.05,1.7,65.725 +756,46,30,2.7,111.05,1.7,65.72 +757,46,30,2.7,111.05,1.7,65.715 +758,46,30,2.7,111.05,1.7,65.71 +759,46,30,2.7,111.05,1.7,65.705 +760,46,30,2.7,111.05,1.7,65.7 +761,46,30,2.7,111.05,1.7,65.695 +762,46,30,2.7,111.05,1.7,65.69 +763,46,30,2.7,111.05,1.7,65.685 +764,46,30,2.7,111.05,1.7,65.68 +765,46,30,2.7,111.05,1.7,65.675 +766,46,30,2.7,111.05,1.7,65.67 +767,46,30,2.7,111.05,1.7,65.665 +768,46,30,2.7,111.05,1.7,65.66 +769,46,30,2.7,111.05,1.7,65.655 +770,46,30,2.7,111.05,1.7,65.65 +771,46,30,2.7,111.05,1.7,65.645 +772,46,30,2.7,111.05,1.7,65.64 +773,46,30,2.7,111.05,1.7,65.635 +774,46,30,2.7,111.05,1.7,65.63 +775,46,30,2.7,111.05,1.7,65.625 +776,46,30,2.7,111.05,1.7,65.62 +777,46,30,2.7,111.05,1.7,65.615 +778,46,30,2.7,111.05,1.7,65.61 +779,46,30,2.7,111.05,1.7,65.605 +780,46,30,2.7,111.05,1.7,65.6 +781,46,30,2.7,111.05,1.7,65.595 +782,46,30,2.7,111.05,1.7,65.59 +783,46,30,2.7,111.05,1.7,65.585 +784,46,30,2.7,111.05,1.7,65.58 +785,46,30,2.7,111.05,1.7,65.575 +786,46,30,2.7,111.05,1.7,65.57 +787,46,30,2.7,111.05,1.7,65.565 +788,46,30,2.7,111.05,1.7,65.56 +789,46,30,2.7,111.05,1.7,65.555 +790,46,30,2.7,111.05,1.7,65.55 +791,46,30,2.7,111.05,1.7,65.545 +792,46,30,2.7,111.05,1.7,65.54 +793,46,30,2.7,111.05,1.7,65.535 +794,46,30,2.7,111.05,1.7,65.53 +795,46,30,2.7,111.05,1.7,65.525 +796,46,30,2.7,111.05,1.7,65.52 +797,46,30,2.7,111.05,1.7,65.515 +798,46,30,2.7,111.05,1.7,65.51 +799,46,30,2.7,111.05,1.7,65.505 +800,46,30,2.7,111.05,1.7,65.5 +801,46,30,2.7,111.05,1.7,65.495 +802,46,30,2.7,111.05,1.7,65.49 +803,46,30,2.7,111.05,1.7,65.485 +804,46,30,2.7,111.05,1.7,65.48 +805,46,30,2.7,111.05,1.7,65.475 +806,46,30,2.7,111.05,1.7,65.47 +807,46,30,2.7,111.05,1.7,65.465 +808,46,30,2.7,111.05,1.7,65.46 +809,46,30,2.7,111.05,1.7,65.455 +810,46,30,2.7,111.05,1.7,65.45 +811,46,30,2.7,111.05,1.7,65.445 +812,46,30,2.7,111.05,1.7,65.44 +813,46,30,2.7,111.05,1.7,65.435 +814,46,30,2.7,111.05,1.7,65.43 +815,46,30,2.7,111.05,1.7,65.425 +816,46,30,2.7,111.05,1.7,65.42 +817,46,30,2.7,111.05,1.7,65.415 +818,46,30,2.7,111.05,1.7,65.41 +819,46,30,2.7,111.05,1.7,65.405 +820,46,30,2.7,111.05,1.7,65.4 +821,46,30,2.7,111.05,1.7,65.395 +822,46,30,2.7,111.05,1.7,65.39 +823,46,30,2.7,111.05,1.7,65.385 +824,46,30,2.7,111.05,1.7,65.38 +825,46,30,2.7,111.05,1.7,65.375 +826,46,30,2.7,111.05,1.7,65.37 +827,46,30,2.7,111.05,1.7,65.365 +828,46,30,2.7,111.05,1.7,65.36 +829,46,30,2.7,111.05,1.7,65.355 +830,46,30,2.7,111.05,1.7,65.35 +831,46,30,2.7,111.05,1.7,65.345 +832,46,30,2.7,111.05,1.7,65.34 +833,46,30,2.7,111.05,1.7,65.335 +834,46,30,2.7,111.05,1.7,65.33 +835,46,30,2.7,111.05,1.7,65.325 +836,46,30,2.7,111.05,1.7,65.32 +837,46,30,2.7,111.05,1.7,65.315 +838,46,30,2.7,111.05,1.7,65.31 +839,46,30,2.7,111.05,1.7,65.305 +840,46,30,2.7,111.05,1.7,65.3 +841,46,30,2.7,111.05,1.7,65.295 +842,46,30,2.7,111.05,1.7,65.29 +843,46,30,2.7,111.05,1.7,65.285 +844,46,30,2.7,111.05,1.7,65.28 +845,46,30,2.7,111.05,1.7,65.275 +846,46,30,2.7,111.05,1.7,65.27 +847,46,30,2.7,111.05,1.7,65.265 +848,46,30,2.7,111.05,1.7,65.26 +849,46,30,2.7,111.05,1.7,65.255 +850,46,30,2.7,111.05,1.7,65.25 +851,46,30,2.7,111.05,1.7,65.245 +852,46,30,2.7,111.05,1.7,65.24 +853,46,30,2.7,111.05,1.7,65.235 +854,46,30,2.7,111.05,1.7,65.23 +855,46,30,2.7,111.05,1.7,65.225 +856,46,30,2.7,111.05,1.7,65.22 +857,46,30,2.7,111.05,1.7,65.215 +858,46,30,2.7,111.05,1.7,65.21 +859,46,30,2.7,111.05,1.7,65.205 +860,46,30,2.7,111.05,1.7,65.2 +861,46,30,2.7,111.05,1.7,65.195 +862,46,30,2.7,111.05,1.7,65.19 +863,46,30,2.7,111.05,1.7,65.185 +864,46,30,2.7,111.05,1.7,65.18 +865,46,30,2.7,111.05,1.7,65.175 +866,46,30,2.7,111.05,1.7,65.17 +867,46,30,2.7,111.05,1.7,65.165 +868,46,30,2.7,111.05,1.7,65.16 +869,46,30,2.7,111.05,1.7,65.155 +870,46,30,2.7,111.05,1.7,65.15 +871,46,30,2.7,111.05,1.7,65.145 +872,46,30,2.7,111.05,1.7,65.14 +873,46,30,2.7,111.05,1.7,65.135 +874,46,30,2.7,111.05,1.7,65.13 +875,46,30,2.7,111.05,1.7,65.125 +876,46,30,2.7,111.05,1.7,65.12 +877,46,30,2.7,111.05,1.7,65.115 +878,46,30,2.7,111.05,1.7,65.11 +879,46,30,2.7,111.05,1.7,65.105 +880,46,30,2.7,111.05,1.7,65.1 +881,46,30,2.7,111.05,1.7,65.095 +882,46,30,2.7,111.05,1.7,65.09 +883,46,30,2.7,111.05,1.7,65.085 +884,46,30,2.7,111.05,1.7,65.08 +885,46,30,2.7,111.05,1.7,65.075 +886,46,30,2.7,111.05,1.7,65.07 +887,46,30,2.7,111.05,1.7,65.065 +888,46,30,2.7,111.05,1.7,65.06 +889,46,30,2.7,111.05,1.7,65.055 +890,46,30,2.7,111.05,1.7,65.05 +891,46,30,2.7,111.05,1.7,65.045 +892,46,30,2.7,111.05,1.7,65.04 +893,46,30,2.7,111.05,1.7,65.035 +894,46,30,2.7,111.05,1.7,65.03 +895,46,30,2.7,111.05,1.7,65.025 +896,46,30,2.7,111.05,1.7,65.02 +897,46,30,2.7,111.05,1.7,65.015 +898,46,30,2.7,111.05,1.7,65.01 +899,46,30,2.7,111.05,1.7,65.005 +900,46,30,2.7,111.05,1.7,65 +901,46,30,2.7,111.05,1.7,64.99833333 +902,46,30,2.7,111.05,1.7,64.99666667 +903,46,30,2.7,111.05,1.7,64.995 +904,46,30,2.7,111.05,1.7,64.99333333 +905,46,30,2.7,111.05,1.7,64.99166667 +906,46,30,2.7,111.05,1.7,64.99 +907,46,30,2.7,111.05,1.7,64.98833333 +908,46,30,2.7,111.05,1.7,64.98666667 +909,46,30,2.7,111.05,1.7,64.985 +910,46,30,2.7,111.05,1.7,64.98333333 +911,46,30,2.7,111.05,1.7,64.98166667 +912,46,30,2.7,111.05,1.7,64.98 +913,46,30,2.7,111.05,1.7,64.97833333 +914,46,30,2.7,111.05,1.7,64.97666667 +915,46,30,2.7,111.05,1.7,64.975 +916,46,30,2.7,111.05,1.7,64.97333333 +917,46,30,2.7,111.05,1.7,64.97166667 +918,46,30,2.7,111.05,1.7,64.97 +919,46,30,2.7,111.05,1.7,64.96833333 +920,46,30,2.7,111.05,1.7,64.96666667 +921,46,30,2.7,111.05,1.7,64.965 +922,46,30,2.7,111.05,1.7,64.96333333 +923,46,30,2.7,111.05,1.7,64.96166667 +924,46,30,2.7,111.05,1.7,64.96 +925,46,30,2.7,111.05,1.7,64.95833333 +926,46,30,2.7,111.05,1.7,64.95666667 +927,46,30,2.7,111.05,1.7,64.955 +928,46,30,2.7,111.05,1.7,64.95333333 +929,46,30,2.7,111.05,1.7,64.95166667 +930,46,30,2.7,111.05,1.7,64.95 +931,46,30,2.7,111.05,1.7,64.94833333 +932,46,30,2.7,111.05,1.7,64.94666667 +933,46,30,2.7,111.05,1.7,64.945 +934,46,30,2.7,111.05,1.7,64.94333333 +935,46,30,2.7,111.05,1.7,64.94166667 +936,46,30,2.7,111.05,1.7,64.94 +937,46,30,2.7,111.05,1.7,64.93833333 +938,46,30,2.7,111.05,1.7,64.93666667 +939,46,30,2.7,111.05,1.7,64.935 +940,46,30,2.7,111.05,1.7,64.93333333 +941,46,30,2.7,111.05,1.7,64.93166667 +942,46,30,2.7,111.05,1.7,64.93 +943,46,30,2.7,111.05,1.7,64.92833333 +944,46,30,2.7,111.05,1.7,64.92666667 +945,46,30,2.7,111.05,1.7,64.925 +946,46,30,2.7,111.05,1.7,64.92333333 +947,46,30,2.7,111.05,1.7,64.92166667 +948,46,30,2.7,111.05,1.7,64.92 +949,46,30,2.7,111.05,1.7,64.91833333 +950,46,30,2.7,111.05,1.7,64.91666667 +951,46,30,2.7,111.05,1.7,64.915 +952,46,30,2.7,111.05,1.7,64.91333333 +953,46,30,2.7,111.05,1.7,64.91166666 +954,46,30,2.7,111.05,1.7,64.91 +955,46,30,2.7,111.05,1.7,64.90833333 +956,46,30,2.7,111.05,1.7,64.90666666 +957,46,30,2.7,111.05,1.7,64.905 +958,46,30,2.7,111.05,1.7,64.90333333 +959,46,30,2.7,111.05,1.7,64.90166666 +960,46,30,2.7,111.05,1.7,64.9 +961,46,30,2.7,111.05,1.7,64.89833333 +962,46,30,2.7,111.05,1.7,64.89666666 +963,46,30,2.7,111.05,1.7,64.895 +964,46,30,2.7,111.05,1.7,64.89333333 +965,46,30,2.7,111.05,1.7,64.89166666 +966,46,30,2.7,111.05,1.7,64.89 +967,46,30,2.7,111.05,1.7,64.88833333 +968,46,30,2.7,111.05,1.7,64.88666666 +969,46,30,2.7,111.05,1.7,64.885 +970,46,30,2.7,111.05,1.7,64.88333333 +971,46,30,2.7,111.05,1.7,64.88166666 +972,46,30,2.7,111.05,1.7,64.88 +973,46,30,2.7,111.05,1.7,64.87833333 +974,46,30,2.7,111.05,1.7,64.87666666 +975,46,30,2.7,111.05,1.7,64.875 +976,46,30,2.7,111.05,1.7,64.87333333 +977,46,30,2.7,111.05,1.7,64.87166666 +978,46,30,2.7,111.05,1.7,64.87 +979,46,30,2.7,111.05,1.7,64.86833333 +980,46,30,2.7,111.05,1.7,64.86666666 +981,46,30,2.7,111.05,1.7,64.865 +982,46,30,2.7,111.05,1.7,64.86333333 +983,46,30,2.7,111.05,1.7,64.86166666 +984,46,30,2.7,111.05,1.7,64.86 +985,46,30,2.7,111.05,1.7,64.85833333 +986,46,30,2.7,111.05,1.7,64.85666666 +987,46,30,2.7,111.05,1.7,64.855 +988,46,30,2.7,111.05,1.7,64.85333333 +989,46,30,2.7,111.05,1.7,64.85166666 +990,46,30,2.7,111.05,1.7,64.85 +991,46,30,2.7,111.05,1.7,64.84833333 +992,46,30,2.7,111.05,1.7,64.84666666 +993,46,30,2.7,111.05,1.7,64.845 +994,46,30,2.7,111.05,1.7,64.84333333 +995,46,30,2.7,111.05,1.7,64.84166666 +996,46,30,2.7,111.05,1.7,64.84 +997,46,30,2.7,111.05,1.7,64.83833333 +998,46,30,2.7,111.05,1.7,64.83666666 +999,46,30,2.7,111.05,1.7,64.835 +1000,46,30,2.7,111.05,1.7,64.83333333 +1001,46,30,2.7,111.05,1.7,64.83166666 +1002,46,30,2.7,111.05,1.7,64.83 +1003,46,30,2.7,111.05,1.7,64.82833333 +1004,46,30,2.7,111.05,1.7,64.82666666 +1005,46,30,2.7,111.05,1.7,64.825 +1006,46,30,2.7,111.05,1.7,64.82333333 +1007,46,30,2.7,111.05,1.7,64.82166666 +1008,46,30,2.7,111.05,1.7,64.82 +1009,46,30,2.7,111.05,1.7,64.81833333 +1010,46,30,2.7,111.05,1.7,64.81666666 +1011,46,30,2.7,111.05,1.7,64.815 +1012,46,30,2.7,111.05,1.7,64.81333333 +1013,46,30,2.7,111.05,1.7,64.81166666 +1014,46,30,2.7,111.05,1.7,64.81 +1015,46,30,2.7,111.05,1.7,64.80833333 +1016,46,30,2.7,111.05,1.7,64.80666666 +1017,46,30,2.7,111.05,1.7,64.805 +1018,46,30,2.7,111.05,1.7,64.80333333 +1019,46,30,2.7,111.05,1.7,64.80166666 +1020,46,30,2.7,111.05,1.7,64.8 +1021,46,30,2.7,111.05,1.7,64.79833333 +1022,46,30,2.7,111.05,1.7,64.79666666 +1023,46,30,2.7,111.05,1.7,64.795 +1024,46,30,2.7,111.05,1.7,64.79333333 +1025,46,30,2.7,111.05,1.7,64.79166666 +1026,46,30,2.7,111.05,1.7,64.79 +1027,46,30,2.7,111.05,1.7,64.78833333 +1028,46,30,2.7,111.05,1.7,64.78666666 +1029,46,30,2.7,111.05,1.7,64.785 +1030,46,30,2.7,111.05,1.7,64.78333333 +1031,46,30,2.7,111.05,1.7,64.78166666 +1032,46,30,2.7,111.05,1.7,64.78 +1033,46,30,2.7,111.05,1.7,64.77833333 +1034,46,30,2.7,111.05,1.7,64.77666666 +1035,46,30,2.7,111.05,1.7,64.775 +1036,46,30,2.7,111.05,1.7,64.77333333 +1037,46,30,2.7,111.05,1.7,64.77166666 +1038,46,30,2.7,111.05,1.7,64.77 +1039,46,30,2.7,111.05,1.7,64.76833333 +1040,46,30,2.7,111.05,1.7,64.76666666 +1041,46,30,2.7,111.05,1.7,64.765 +1042,46,30,2.7,111.05,1.7,64.76333333 +1043,46,30,2.7,111.05,1.7,64.76166666 +1044,46,30,2.7,111.05,1.7,64.76 +1045,46,30,2.7,111.05,1.7,64.75833333 +1046,46,30,2.7,111.05,1.7,64.75666666 +1047,46,30,2.7,111.05,1.7,64.755 +1048,46,30,2.7,111.05,1.7,64.75333333 +1049,46,30,2.7,111.05,1.7,64.75166666 +1050,46,30,2.7,111.05,1.7,64.75 +1051,46,30,2.7,111.05,1.7,64.74833333 +1052,46,30,2.7,111.05,1.7,64.74666666 +1053,46,30,2.7,111.05,1.7,64.74499999 +1054,46,30,2.7,111.05,1.7,64.74333333 +1055,46,30,2.7,111.05,1.7,64.74166666 +1056,46,30,2.7,111.05,1.7,64.73999999 +1057,46,30,2.7,111.05,1.7,64.73833333 +1058,46,30,2.7,111.05,1.7,64.73666666 +1059,46,30,2.7,111.05,1.7,64.73499999 +1060,46,30,2.7,111.05,1.7,64.73333333 +1061,46,30,2.7,111.05,1.7,64.73166666 +1062,46,30,2.7,111.05,1.7,64.72999999 +1063,46,30,2.7,111.05,1.7,64.72833333 +1064,46,30,2.7,111.05,1.7,64.72666666 +1065,46,30,2.7,111.05,1.7,64.72499999 +1066,46,30,2.7,111.05,1.7,64.72333333 +1067,46,30,2.7,111.05,1.7,64.72166666 +1068,46,30,2.7,111.05,1.7,64.71999999 +1069,46,30,2.7,111.05,1.7,64.71833333 +1070,46,30,2.7,111.05,1.7,64.71666666 +1071,46,30,2.7,111.05,1.7,64.71499999 +1072,46,30,2.7,111.05,1.7,64.71333333 +1073,46,30,2.7,111.05,1.7,64.71166666 +1074,46,30,2.7,111.05,1.7,64.70999999 +1075,46,30,2.7,111.05,1.7,64.70833333 +1076,46,30,2.7,111.05,1.7,64.70666666 +1077,46,30,2.7,111.05,1.7,64.70499999 +1078,46,30,2.7,111.05,1.7,64.70333333 +1079,46,30,2.7,111.05,1.7,64.70166666 +1080,46,30,2.7,111.05,1.7,64.69999999 +1081,46,30,2.7,111.05,1.7,64.69833333 +1082,46,30,2.7,111.05,1.7,64.69666666 +1083,46,30,2.7,111.05,1.7,64.69499999 +1084,46,30,2.7,111.05,1.7,64.69333333 +1085,46,30,2.7,111.05,1.7,64.69166666 +1086,46,30,2.7,111.05,1.7,64.68999999 +1087,46,30,2.7,111.05,1.7,64.68833333 +1088,46,30,2.7,111.05,1.7,64.68666666 +1089,46,30,2.7,111.05,1.7,64.68499999 +1090,46,30,2.7,111.05,1.7,64.68333333 +1091,46,30,2.7,111.05,1.7,64.68166666 +1092,46,30,2.7,111.05,1.7,64.67999999 +1093,46,30,2.7,111.05,1.7,64.67833333 +1094,46,30,2.7,111.05,1.7,64.67666666 +1095,46,30,2.7,111.05,1.7,64.67499999 +1096,46,30,2.7,111.05,1.7,64.67333333 +1097,46,30,2.7,111.05,1.7,64.67166666 +1098,46,30,2.7,111.05,1.7,64.66999999 +1099,46,30,2.7,111.05,1.7,64.66833333 +1100,46,30,2.7,111.05,1.7,64.66666666 +1101,46,30,2.7,111.05,1.7,64.66499999 +1102,46,30,2.7,111.05,1.7,64.66333333 +1103,46,30,2.7,111.05,1.7,64.66166666 +1104,46,30,2.7,111.05,1.7,64.65999999 +1105,46,30,2.7,111.05,1.7,64.65833333 +1106,46,30,2.7,111.05,1.7,64.65666666 +1107,46,30,2.7,111.05,1.7,64.65499999 +1108,46,30,2.7,111.05,1.7,64.65333333 +1109,46,30,2.7,111.05,1.7,64.65166666 +1110,46,30,2.7,111.05,1.7,64.64999999 +1111,46,30,2.7,111.05,1.7,64.64833333 +1112,46,30,2.7,111.05,1.7,64.64666666 +1113,46,30,2.7,111.05,1.7,64.64499999 +1114,46,30,2.7,111.05,1.7,64.64333333 +1115,46,30,2.7,111.05,1.7,64.64166666 +1116,46,30,2.7,111.05,1.7,64.63999999 +1117,46,30,2.7,111.05,1.7,64.63833333 +1118,46,30,2.7,111.05,1.7,64.63666666 +1119,46,30,2.7,111.05,1.7,64.63499999 +1120,46,30,2.7,111.05,1.7,64.63333333 +1121,46,30,2.7,111.05,1.7,64.63166666 +1122,46,30,2.7,111.05,1.7,64.62999999 +1123,46,30,2.7,111.05,1.7,64.62833333 +1124,46,30,2.7,111.05,1.7,64.62666666 +1125,46,30,2.7,111.05,1.7,64.62499999 +1126,46,30,2.7,111.05,1.7,64.62333333 +1127,46,30,2.7,111.05,1.7,64.62166666 +1128,46,30,2.7,111.05,1.7,64.61999999 +1129,46,30,2.7,111.05,1.7,64.61833333 +1130,46,30,2.7,111.05,1.7,64.61666666 +1131,46,30,2.7,111.05,1.7,64.61499999 +1132,46,30,2.7,111.05,1.7,64.61333333 +1133,46,30,2.7,111.05,1.7,64.61166666 +1134,46,30,2.7,111.05,1.7,64.60999999 +1135,46,30,2.7,111.05,1.7,64.60833333 +1136,46,30,2.7,111.05,1.7,64.60666666 +1137,46,30,2.7,111.05,1.7,64.60499999 +1138,46,30,2.7,111.05,1.7,64.60333333 +1139,46,30,2.7,111.05,1.7,64.60166666 +1140,46,30,2.7,111.05,1.7,64.59999999 +1141,46,30,2.7,111.05,1.7,64.59833333 +1142,46,30,2.7,111.05,1.7,64.59666666 +1143,46,30,2.7,111.05,1.7,64.59499999 +1144,46,30,2.7,111.05,1.7,64.59333333 +1145,46,30,2.7,111.05,1.7,64.59166666 +1146,46,30,2.7,111.05,1.7,64.58999999 +1147,46,30,2.7,111.05,1.7,64.58833333 +1148,46,30,2.7,111.05,1.7,64.58666666 +1149,46,30,2.7,111.05,1.7,64.58499999 +1150,46,30,2.7,111.05,1.7,64.58333333 +1151,46,30,2.7,111.05,1.7,64.58166666 +1152,46,30,2.7,111.05,1.7,64.57999999 +1153,46,30,2.7,111.05,1.7,64.57833332 +1154,46,30,2.7,111.05,1.7,64.57666666 +1155,46,30,2.7,111.05,1.7,64.57499999 +1156,46,30,2.7,111.05,1.7,64.57333332 +1157,46,30,2.7,111.05,1.7,64.57166666 +1158,46,30,2.7,111.05,1.7,64.56999999 +1159,46,30,2.7,111.05,1.7,64.56833332 +1160,46,30,2.7,111.05,1.7,64.56666666 +1161,46,30,2.7,111.05,1.7,64.56499999 +1162,46,30,2.7,111.05,1.7,64.56333332 +1163,46,30,2.7,111.05,1.7,64.56166666 +1164,46,30,2.7,111.05,1.7,64.55999999 +1165,46,30,2.7,111.05,1.7,64.55833332 +1166,46,30,2.7,111.05,1.7,64.55666666 +1167,46,30,2.7,111.05,1.7,64.55499999 +1168,46,30,2.7,111.05,1.7,64.55333332 +1169,46,30,2.7,111.05,1.7,64.55166666 +1170,46,30,2.7,111.05,1.7,64.54999999 +1171,46,30,2.7,111.05,1.7,64.54833332 +1172,46,30,2.7,111.05,1.7,64.54666666 +1173,46,30,2.7,111.05,1.7,64.54499999 +1174,46,30,2.7,111.05,1.7,64.54333332 +1175,46,30,2.7,111.05,1.7,64.54166666 +1176,46,30,2.7,111.05,1.7,64.53999999 +1177,46,30,2.7,111.05,1.7,64.53833332 +1178,46,30,2.7,111.05,1.7,64.53666666 +1179,46,30,2.7,111.05,1.7,64.53499999 +1180,46,30,2.7,111.05,1.7,64.53333332 +1181,46,30,2.7,111.05,1.7,64.53166666 +1182,46,30,2.7,111.05,1.7,64.52999999 +1183,46,30,2.7,111.05,1.7,64.52833332 +1184,46,30,2.7,111.05,1.7,64.52666666 +1185,46,30,2.7,111.05,1.7,64.52499999 +1186,46,30,2.7,111.05,1.7,64.52333332 +1187,46,30,2.7,111.05,1.7,64.52166666 +1188,46,30,2.7,111.05,1.7,64.51999999 +1189,46,30,2.7,111.05,1.7,64.51833332 +1190,46,30,2.7,111.05,1.7,64.51666666 +1191,46,30,2.7,111.05,1.7,64.51499999 +1192,46,30,2.7,111.05,1.7,64.51333332 +1193,46,30,2.7,111.05,1.7,64.51166666 +1194,46,30,2.7,111.05,1.7,64.50999999 +1195,46,30,2.7,111.05,1.7,64.50833332 +1196,46,30,2.7,111.05,1.7,64.50666666 +1197,46,30,2.7,111.05,1.7,64.50499999 +1198,46,30,2.7,111.05,1.7,64.50333332 +1199,46,30,2.7,111.05,1.7,64.50166666 +1200,46,30,2.7,111.05,1.7,64.5 +1201,46,30,2.7,111.05,1.7,64.499375 +1202,46,30,2.7,111.05,1.7,64.49875 +1203,46,30,2.7,111.05,1.7,64.498125 +1204,46,30,2.7,111.05,1.7,64.4975 +1205,46,30,2.7,111.05,1.7,64.496875 +1206,46,30,2.7,111.05,1.7,64.49625 +1207,46,30,2.7,111.05,1.7,64.495625 +1208,46,30,2.7,111.05,1.7,64.495 +1209,46,30,2.7,111.05,1.7,64.494375 +1210,46,30,2.7,111.05,1.7,64.49375 +1211,46,30,2.7,111.05,1.7,64.493125 +1212,46,30,2.7,111.05,1.7,64.4925 +1213,46,30,2.7,111.05,1.7,64.491875 +1214,46,30,2.7,111.05,1.7,64.49125 +1215,46,30,2.7,111.05,1.7,64.490625 +1216,46,30,2.7,111.05,1.7,64.49 +1217,46,30,2.7,111.05,1.7,64.489375 +1218,46,30,2.7,111.05,1.7,64.48875 +1219,46,30,2.7,111.05,1.7,64.488125 +1220,46,30,2.7,111.05,1.7,64.4875 +1221,46,30,2.7,111.05,1.7,64.486875 +1222,46,30,2.7,111.05,1.7,64.48625 +1223,46,30,2.7,111.05,1.7,64.485625 +1224,46,30,2.7,111.05,1.7,64.485 +1225,46,30,2.7,111.05,1.7,64.484375 +1226,46,30,2.7,111.05,1.7,64.48375 +1227,46,30,2.7,111.05,1.7,64.483125 +1228,46,30,2.7,111.05,1.7,64.4825 +1229,46,30,2.7,111.05,1.7,64.481875 +1230,46,30,2.7,111.05,1.7,64.48125 +1231,46,30,2.7,111.05,1.7,64.480625 +1232,46,30,2.7,111.05,1.7,64.48 +1233,46,30,2.7,111.05,1.7,64.479375 +1234,46,30,2.7,111.05,1.7,64.47875 +1235,46,30,2.7,111.05,1.7,64.478125 +1236,46,30,2.7,111.05,1.7,64.4775 +1237,46,30,2.7,111.05,1.7,64.476875 +1238,46,30,2.7,111.05,1.7,64.47625 +1239,46,30,2.7,111.05,1.7,64.475625 +1240,46,30,2.7,111.05,1.7,64.475 +1241,46,30,2.7,111.05,1.7,64.474375 +1242,46,30,2.7,111.05,1.7,64.47375 +1243,46,30,2.7,111.05,1.7,64.473125 +1244,46,30,2.7,111.05,1.7,64.4725 +1245,46,30,2.7,111.05,1.7,64.471875 +1246,46,30,2.7,111.05,1.7,64.47125 +1247,46,30,2.7,111.05,1.7,64.470625 +1248,46,30,2.7,111.05,1.7,64.47 +1249,46,30,2.7,111.05,1.7,64.469375 +1250,46,30,2.7,111.05,1.7,64.46875 +1251,46,30,2.7,111.05,1.7,64.468125 +1252,46,30,2.7,111.05,1.7,64.4675 +1253,46,30,2.7,111.05,1.7,64.466875 +1254,46,30,2.7,111.05,1.7,64.46625 +1255,46,30,2.7,111.05,1.7,64.465625 +1256,46,30,2.7,111.05,1.7,64.465 +1257,46,30,2.7,111.05,1.7,64.464375 +1258,46,30,2.7,111.05,1.7,64.46375 +1259,46,30,2.7,111.05,1.7,64.463125 +1260,46,30,2.7,111.05,1.7,64.4625 +1261,46,30,2.7,111.05,1.7,64.461875 +1262,46,30,2.7,111.05,1.7,64.46125 +1263,46,30,2.7,111.05,1.7,64.460625 +1264,46,30,2.7,111.05,1.7,64.46 +1265,46,30,2.7,111.05,1.7,64.459375 +1266,46,30,2.7,111.05,1.7,64.45875 +1267,46,30,2.7,111.05,1.7,64.458125 +1268,46,30,2.7,111.05,1.7,64.4575 +1269,46,30,2.7,111.05,1.7,64.456875 +1270,46,30,2.7,111.05,1.7,64.45625 +1271,46,30,2.7,111.05,1.7,64.455625 +1272,46,30,2.7,111.05,1.7,64.455 +1273,46,30,2.7,111.05,1.7,64.454375 +1274,46,30,2.7,111.05,1.7,64.45375 +1275,46,30,2.7,111.05,1.7,64.453125 +1276,46,30,2.7,111.05,1.7,64.4525 +1277,46,30,2.7,111.05,1.7,64.451875 +1278,46,30,2.7,111.05,1.7,64.45125 +1279,46,30,2.7,111.05,1.7,64.450625 +1280,46,30,2.7,111.05,1.7,64.45 +1281,46,30,2.7,111.05,1.7,64.449375 +1282,46,30,2.7,111.05,1.7,64.44875 +1283,46,30,2.7,111.05,1.7,64.448125 +1284,46,30,2.7,111.05,1.7,64.4475 +1285,46,30,2.7,111.05,1.7,64.446875 +1286,46,30,2.7,111.05,1.7,64.44625 +1287,46,30,2.7,111.05,1.7,64.445625 +1288,46,30,2.7,111.05,1.7,64.445 +1289,46,30,2.7,111.05,1.7,64.444375 +1290,46,30,2.7,111.05,1.7,64.44375 +1291,46,30,2.7,111.05,1.7,64.443125 +1292,46,30,2.7,111.05,1.7,64.4425 +1293,46,30,2.7,111.05,1.7,64.441875 +1294,46,30,2.7,111.05,1.7,64.44125 +1295,46,30,2.7,111.05,1.7,64.440625 +1296,46,30,2.7,111.05,1.7,64.44 +1297,46,30,2.7,111.05,1.7,64.439375 +1298,46,30,2.7,111.05,1.7,64.43875 +1299,46,30,2.7,111.05,1.7,64.438125 +1300,46,30,2.7,111.05,1.7,64.4375 +1301,46,30,2.7,111.05,1.7,64.436875 +1302,46,30,2.7,111.05,1.7,64.43625 +1303,46,30,2.7,111.05,1.7,64.435625 +1304,46,30,2.7,111.05,1.7,64.435 +1305,46,30,2.7,111.05,1.7,64.434375 +1306,46,30,2.7,111.05,1.7,64.43375 +1307,46,30,2.7,111.05,1.7,64.433125 +1308,46,30,2.7,111.05,1.7,64.4325 +1309,46,30,2.7,111.05,1.7,64.431875 +1310,46,30,2.7,111.05,1.7,64.43125 +1311,46,30,2.7,111.05,1.7,64.430625 +1312,46,30,2.7,111.05,1.7,64.43 +1313,46,30,2.7,111.05,1.7,64.429375 +1314,46,30,2.7,111.05,1.7,64.42875 +1315,46,30,2.7,111.05,1.7,64.428125 +1316,46,30,2.7,111.05,1.7,64.4275 +1317,46,30,2.7,111.05,1.7,64.426875 +1318,46,30,2.7,111.05,1.7,64.42625 +1319,46,30,2.7,111.05,1.7,64.425625 +1320,46,30,2.7,111.05,1.7,64.425 +1321,46,30,2.7,111.05,1.7,64.424375 +1322,46,30,2.7,111.05,1.7,64.42375 +1323,46,30,2.7,111.05,1.7,64.423125 +1324,46,30,2.7,111.05,1.7,64.4225 +1325,46,30,2.7,111.05,1.7,64.421875 +1326,46,30,2.7,111.05,1.7,64.42125 +1327,46,30,2.7,111.05,1.7,64.420625 +1328,46,30,2.7,111.05,1.7,64.42 +1329,46,30,2.7,111.05,1.7,64.419375 +1330,46,30,2.7,111.05,1.7,64.41875 +1331,46,30,2.7,111.05,1.7,64.418125 +1332,46,30,2.7,111.05,1.7,64.4175 +1333,46,30,2.7,111.05,1.7,64.416875 +1334,46,30,2.7,111.05,1.7,64.41625 +1335,46,30,2.7,111.05,1.7,64.415625 +1336,46,30,2.7,111.05,1.7,64.415 +1337,46,30,2.7,111.05,1.7,64.414375 +1338,46,30,2.7,111.05,1.7,64.41375 +1339,46,30,2.7,111.05,1.7,64.413125 +1340,46,30,2.7,111.05,1.7,64.4125 +1341,46,30,2.7,111.05,1.7,64.411875 +1342,46,30,2.7,111.05,1.7,64.41125 +1343,46,30,2.7,111.05,1.7,64.410625 +1344,46,30,2.7,111.05,1.7,64.41 +1345,46,30,2.7,111.05,1.7,64.409375 +1346,46,30,2.7,111.05,1.7,64.40875 +1347,46,30,2.7,111.05,1.7,64.408125 +1348,46,30,2.7,111.05,1.7,64.4075 +1349,46,30,2.7,111.05,1.7,64.406875 +1350,46,30,2.7,111.05,1.7,64.40625 +1351,46,30,2.7,111.05,1.7,64.405625 +1352,46,30,2.7,111.05,1.7,64.405 +1353,46,30,2.7,111.05,1.7,64.404375 +1354,46,30,2.7,111.05,1.7,64.40375 +1355,46,30,2.7,111.05,1.7,64.403125 +1356,46,30,2.7,111.05,1.7,64.4025 +1357,46,30,2.7,111.05,1.7,64.401875 +1358,46,30,2.7,111.05,1.7,64.40125 +1359,46,30,2.7,111.05,1.7,64.400625 +1360,46,30,2.7,111.05,1.7,64.4 +1361,46,30,2.7,111.05,1.7,64.399375 +1362,46,30,2.7,111.05,1.7,64.39875 +1363,46,30,2.7,111.05,1.7,64.398125 +1364,46,30,2.7,111.05,1.7,64.3975 +1365,46,30,2.7,111.05,1.7,64.396875 +1366,46,30,2.7,111.05,1.7,64.39625 +1367,46,30,2.7,111.05,1.7,64.395625 +1368,46,30,2.7,111.05,1.7,64.395 +1369,46,30,2.7,111.05,1.7,64.394375 +1370,46,30,2.7,111.05,1.7,64.39375 +1371,46,30,2.7,111.05,1.7,64.393125 +1372,46,30,2.7,111.05,1.7,64.3925 +1373,46,30,2.7,111.05,1.7,64.391875 +1374,46,30,2.7,111.05,1.7,64.39125 +1375,46,30,2.7,111.05,1.7,64.390625 +1376,46,30,2.7,111.05,1.7,64.39 +1377,46,30,2.7,111.05,1.7,64.389375 +1378,46,30,2.7,111.05,1.7,64.38875 +1379,46,30,2.7,111.05,1.7,64.388125 +1380,46,30,2.7,111.05,1.7,64.3875 +1381,46,30,2.7,111.05,1.7,64.386875 +1382,46,30,2.7,111.05,1.7,64.38625 +1383,46,30,2.7,111.05,1.7,64.385625 +1384,46,30,2.7,111.05,1.7,64.385 +1385,46,30,2.7,111.05,1.7,64.384375 +1386,46,30,2.7,111.05,1.7,64.38375 +1387,46,30,2.7,111.05,1.7,64.383125 +1388,46,30,2.7,111.05,1.7,64.3825 +1389,46,30,2.7,111.05,1.7,64.381875 +1390,46,30,2.7,111.05,1.7,64.38125 +1391,46,30,2.7,111.05,1.7,64.380625 +1392,46,30,2.7,111.05,1.7,64.38 +1393,46,30,2.7,111.05,1.7,64.379375 +1394,46,30,2.7,111.05,1.7,64.37875 +1395,46,30,2.7,111.05,1.7,64.378125 +1396,46,30,2.7,111.05,1.7,64.3775 +1397,46,30,2.7,111.05,1.7,64.376875 +1398,46,30,2.7,111.05,1.7,64.37625 +1399,46,30,2.7,111.05,1.7,64.375625 +1400,46,30,2.7,111.05,1.7,64.375 +1401,46,30,2.7,111.05,1.7,64.374375 +1402,46,30,2.7,111.05,1.7,64.37375 +1403,46,30,2.7,111.05,1.7,64.373125 +1404,46,30,2.7,111.05,1.7,64.3725 +1405,46,30,2.7,111.05,1.7,64.371875 +1406,46,30,2.7,111.05,1.7,64.37125 +1407,46,30,2.7,111.05,1.7,64.370625 +1408,46,30,2.7,111.05,1.7,64.37 +1409,46,30,2.7,111.05,1.7,64.369375 +1410,46,30,2.7,111.05,1.7,64.36875 +1411,46,30,2.7,111.05,1.7,64.368125 +1412,46,30,2.7,111.05,1.7,64.3675 +1413,46,30,2.7,111.05,1.7,64.366875 +1414,46,30,2.7,111.05,1.7,64.36625 +1415,46,30,2.7,111.05,1.7,64.365625 +1416,46,30,2.7,111.05,1.7,64.365 +1417,46,30,2.7,111.05,1.7,64.364375 +1418,46,30,2.7,111.05,1.7,64.36375 +1419,46,30,2.7,111.05,1.7,64.363125 +1420,46,30,2.7,111.05,1.7,64.3625 +1421,46,30,2.7,111.05,1.7,64.361875 +1422,46,30,2.7,111.05,1.7,64.36125 +1423,46,30,2.7,111.05,1.7,64.360625 +1424,46,30,2.7,111.05,1.7,64.36 +1425,46,30,2.7,111.05,1.7,64.359375 +1426,46,30,2.7,111.05,1.7,64.35875 +1427,46,30,2.7,111.05,1.7,64.358125 +1428,46,30,2.7,111.05,1.7,64.3575 +1429,46,30,2.7,111.05,1.7,64.356875 +1430,46,30,2.7,111.05,1.7,64.35625 +1431,46,30,2.7,111.05,1.7,64.355625 +1432,46,30,2.7,111.05,1.7,64.355 +1433,46,30,2.7,111.05,1.7,64.354375 +1434,46,30,2.7,111.05,1.7,64.35375 +1435,46,30,2.7,111.05,1.7,64.353125 +1436,46,30,2.7,111.05,1.7,64.3525 +1437,46,30,2.7,111.05,1.7,64.351875 +1438,46,30,2.7,111.05,1.7,64.35125 +1439,46,30,2.7,111.05,1.7,64.350625 +1440,46,30,2.7,111.05,1.7,64.35 +1441,46,30,2.7,111.05,1.7,64.349375 +1442,46,30,2.7,111.05,1.7,64.34875 +1443,46,30,2.7,111.05,1.7,64.348125 +1444,46,30,2.7,111.05,1.7,64.3475 +1445,46,30,2.7,111.05,1.7,64.346875 +1446,46,30,2.7,111.05,1.7,64.34625 +1447,46,30,2.7,111.05,1.7,64.345625 +1448,46,30,2.7,111.05,1.7,64.345 +1449,46,30,2.7,111.05,1.7,64.344375 +1450,46,30,2.7,111.05,1.7,64.34375 +1451,46,30,2.7,111.05,1.7,64.343125 +1452,46,30,2.7,111.05,1.7,64.3425 +1453,46,30,2.7,111.05,1.7,64.341875 +1454,46,30,2.7,111.05,1.7,64.34125 +1455,46,30,2.7,111.05,1.7,64.340625 +1456,46,30,2.7,111.05,1.7,64.34 +1457,46,30,2.7,111.05,1.7,64.339375 +1458,46,30,2.7,111.05,1.7,64.33875 +1459,46,30,2.7,111.05,1.7,64.338125 +1460,46,30,2.7,111.05,1.7,64.3375 +1461,46,30,2.7,111.05,1.7,64.336875 +1462,46,30,2.7,111.05,1.7,64.33625 +1463,46,30,2.7,111.05,1.7,64.335625 +1464,46,30,2.7,111.05,1.7,64.335 +1465,46,30,2.7,111.05,1.7,64.334375 +1466,46,30,2.7,111.05,1.7,64.33375 +1467,46,30,2.7,111.05,1.7,64.333125 +1468,46,30,2.7,111.05,1.7,64.3325 +1469,46,30,2.7,111.05,1.7,64.331875 +1470,46,30,2.7,111.05,1.7,64.33125 +1471,46,30,2.7,111.05,1.7,64.330625 +1472,46,30,2.7,111.05,1.7,64.33 +1473,46,30,2.7,111.05,1.7,64.329375 +1474,46,30,2.7,111.05,1.7,64.32875 +1475,46,30,2.7,111.05,1.7,64.328125 +1476,46,30,2.7,111.05,1.7,64.3275 +1477,46,30,2.7,111.05,1.7,64.326875 +1478,46,30,2.7,111.05,1.7,64.32625 +1479,46,30,2.7,111.05,1.7,64.325625 +1480,46,30,2.7,111.05,1.7,64.325 +1481,46,30,2.7,111.05,1.7,64.324375 +1482,46,30,2.7,111.05,1.7,64.32375 +1483,46,30,2.7,111.05,1.7,64.323125 +1484,46,30,2.7,111.05,1.7,64.3225 +1485,46,30,2.7,111.05,1.7,64.321875 +1486,46,30,2.7,111.05,1.7,64.32125 +1487,46,30,2.7,111.05,1.7,64.320625 +1488,46,30,2.7,111.05,1.7,64.32 +1489,46,30,2.7,111.05,1.7,64.319375 +1490,46,30,2.6,111.05,1.7,64.31875 +1491,46,30,2.6,111.05,1.7,64.318125 +1492,46,30,2.6,111.05,1.7,64.3175 +1493,46,30,2.6,111.05,1.7,64.316875 +1494,46,30,2.6,111.05,1.7,64.31625 +1495,46,30,2.6,111.05,1.7,64.315625 +1496,46,30,2.6,111.05,1.7,64.315 +1497,46,30,2.6,111.05,1.7,64.314375 +1498,46,30,2.6,111.05,1.7,64.31375 +1499,46,30,2.6,111.05,1.7,64.313125 +1500,46,30,2.6,111.05,1.7,64.3125 +1501,46,30,2.6,111.05,1.7,64.311875 +1502,46,30,2.6,111.05,1.7,64.31125 +1503,46,30,2.6,111.05,1.7,64.310625 +1504,46,30,2.6,111.05,1.7,64.31 +1505,46,30,2.6,111.05,1.7,64.309375 +1506,46,30,2.6,111.05,1.7,64.30875 +1507,46,30,2.6,111.05,1.7,64.308125 +1508,46,30,2.6,111.05,1.7,64.3075 +1509,46,30,2.6,111.05,1.7,64.306875 +1510,46,30,2.6,111.05,1.7,64.30625 +1511,46,30,2.6,111.05,1.7,64.305625 +1512,46,30,2.6,111.05,1.7,64.305 +1513,46,30,2.6,111.05,1.7,64.304375 +1514,46,30,2.6,111.05,1.7,64.30375 +1515,46,30,2.6,111.05,1.7,64.303125 +1516,46,30,2.6,111.05,1.7,64.3025 +1517,46,30,2.6,111.05,1.7,64.301875 +1518,46,30,2.6,111.05,1.7,64.30125 +1519,46,30,2.6,111.05,1.7,64.300625 +1520,46,30,2.6,111.05,1.7,64.3 +1521,46,30,2.6,111.05,1.7,64.299375 +1522,46,30,2.6,111.05,1.7,64.29875 +1523,46,30,2.6,111.05,1.7,64.298125 +1524,46,30,2.6,111.05,1.7,64.2975 +1525,46,30,2.6,111.05,1.7,64.296875 +1526,46,30,2.6,111.05,1.7,64.29625 +1527,46,30,2.6,111.05,1.7,64.295625 +1528,46,30,2.6,111.05,1.7,64.295 +1529,46,30,2.6,111.05,1.7,64.294375 +1530,46,30,2.6,111.05,1.7,64.29375 +1531,46,30,2.6,111.05,1.7,64.293125 +1532,46,30,2.6,111.05,1.7,64.2925 +1533,46,30,2.6,111.05,1.7,64.291875 +1534,46,30,2.6,111.05,1.7,64.29125 +1535,46,30,2.6,111.05,1.7,64.290625 +1536,46,30,2.6,111.05,1.7,64.29 +1537,46,30,2.6,111.05,1.7,64.289375 +1538,46,30,2.6,111.05,1.7,64.28875 +1539,46,30,2.6,111.05,1.7,64.288125 +1540,46,30,2.6,111.05,1.7,64.2875 +1541,46,30,2.6,111.05,1.7,64.286875 +1542,46,30,2.6,111.05,1.7,64.28625 +1543,46,30,2.6,111.05,1.7,64.285625 +1544,46,30,2.6,111.05,1.7,64.285 +1545,46,30,2.6,111.05,1.7,64.284375 +1546,46,30,2.6,111.05,1.7,64.28375 +1547,46,30,2.6,111.05,1.7,64.283125 +1548,46,30,2.6,111.05,1.7,64.2825 +1549,46,30,2.6,111.05,1.7,64.281875 +1550,46,30,2.6,111.05,1.7,64.28125 +1551,46,30,2.6,111.05,1.7,64.280625 +1552,46,30,2.6,111.05,1.7,64.28 +1553,46,30,2.6,111.05,1.7,64.279375 +1554,46,30,2.6,111.05,1.7,64.27875 +1555,46,30,2.6,111.05,1.7,64.278125 +1556,46,30,2.6,111.05,1.7,64.2775 +1557,46,30,2.6,111.05,1.7,64.276875 +1558,46,30,2.6,111.05,1.7,64.27625 +1559,46,30,2.6,111.05,1.7,64.275625 +1560,46,30,2.6,111.05,1.7,64.275 +1561,46,30,2.6,111.05,1.7,64.274375 +1562,46,30,2.6,111.05,1.7,64.27375 +1563,46,30,2.6,111.05,1.7,64.273125 +1564,46,30,2.6,111.05,1.7,64.2725 +1565,46,30,2.6,111.05,1.7,64.271875 +1566,46,30,2.6,111.05,1.7,64.27125 +1567,46,30,2.6,111.05,1.7,64.270625 +1568,46,30,2.6,111.05,1.7,64.27 +1569,46,30,2.6,111.05,1.7,64.269375 +1570,46,30,2.6,111.05,1.7,64.26875 +1571,46,30,2.6,111.05,1.7,64.268125 +1572,46,30,2.6,111.05,1.7,64.2675 +1573,46,30,2.6,111.05,1.7,64.266875 +1574,46,30,2.6,111.05,1.7,64.26625 +1575,46,30,2.6,111.05,1.7,64.265625 +1576,46,30,2.6,111.05,1.7,64.265 +1577,46,30,2.6,111.05,1.7,64.264375 +1578,46,30,2.6,111.05,1.7,64.26375 +1579,46,30,2.6,111.05,1.7,64.263125 +1580,46,30,2.6,111.05,1.7,64.2625 +1581,46,30,2.6,111.05,1.7,64.261875 +1582,46,30,2.6,111.05,1.7,64.26125 +1583,46,30,2.6,111.05,1.7,64.260625 +1584,46,30,2.6,111.05,1.7,64.26 +1585,46,30,2.6,111.05,1.7,64.259375 +1586,46,30,2.6,111.05,1.7,64.25875 +1587,46,30,2.6,111.05,1.7,64.258125 +1588,46,30,2.6,111.05,1.7,64.2575 +1589,46,30,2.6,111.05,1.7,64.256875 +1590,46,30,2.6,111.05,1.7,64.25625 +1591,46,30,2.6,111.05,1.7,64.255625 +1592,46,30,2.6,111.05,1.7,64.255 +1593,46,30,2.6,111.05,1.7,64.254375 +1594,46,30,2.6,111.05,1.7,64.25375 +1595,46,30,2.6,111.05,1.7,64.253125 +1596,46,30,2.6,111.05,1.7,64.2525 +1597,46,30,2.6,111.05,1.7,64.251875 +1598,46,30,2.6,111.05,1.7,64.25125 +1599,46,30,2.6,111.05,1.7,64.250625 +1600,46,30,2.6,111.05,1.7,64.25 +1601,46,30,2.6,111.05,1.7,64.249375 +1602,46,30,2.6,111.05,1.7,64.24875 +1603,46,30,2.6,111.05,1.7,64.248125 +1604,46,30,2.6,111.05,1.7,64.2475 +1605,46,30,2.6,111.05,1.7,64.246875 +1606,46,30,2.6,111.05,1.7,64.24625 +1607,46,30,2.6,111.05,1.7,64.245625 +1608,46,30,2.6,111.05,1.7,64.245 +1609,46,30,2.6,111.05,1.7,64.244375 +1610,46,30,2.6,111.05,1.7,64.24375 +1611,46,30,2.6,111.05,1.7,64.243125 +1612,46,30,2.6,111.05,1.7,64.2425 +1613,46,30,2.6,111.05,1.7,64.241875 +1614,46,30,2.6,111.05,1.7,64.24125 +1615,46,30,2.6,111.05,1.7,64.240625 +1616,46,30,2.6,111.05,1.7,64.24 +1617,46,30,2.6,111.05,1.7,64.239375 +1618,46,30,2.6,111.05,1.7,64.23875 +1619,46,30,2.6,111.05,1.7,64.238125 +1620,46,30,2.6,111.05,1.7,64.2375 +1621,46,30,2.6,111.05,1.7,64.236875 +1622,46,30,2.6,111.05,1.7,64.23625 +1623,46,30,2.6,111.05,1.7,64.235625 +1624,46,30,2.6,111.05,1.7,64.235 +1625,46,30,2.6,111.05,1.7,64.234375 +1626,46,30,2.6,111.05,1.7,64.23375 +1627,46,30,2.6,111.05,1.7,64.233125 +1628,46,30,2.6,111.05,1.7,64.2325 +1629,46,30,2.6,111.05,1.7,64.231875 +1630,46,30,2.6,111.05,1.7,64.23125 +1631,46,30,2.6,111.05,1.7,64.230625 +1632,46,30,2.6,111.05,1.7,64.23 +1633,46,30,2.6,111.05,1.7,64.229375 +1634,46,30,2.6,111.05,1.7,64.22875 +1635,46,30,2.6,111.05,1.7,64.228125 +1636,46,30,2.6,111.05,1.7,64.2275 +1637,46,30,2.6,111.05,1.7,64.226875 +1638,46,30,2.6,111.05,1.7,64.22625 +1639,46,30,2.6,111.05,1.7,64.225625 +1640,46,30,2.6,111.05,1.7,64.225 +1641,46,30,2.6,111.05,1.7,64.224375 +1642,46,30,2.6,111.05,1.7,64.22375 +1643,46,30,2.6,111.05,1.7,64.223125 +1644,46,30,2.6,111.05,1.7,64.2225 +1645,46,30,2.6,111.05,1.7,64.221875 +1646,46,30,2.6,111.05,1.7,64.22125 +1647,46,30,2.6,111.05,1.7,64.220625 +1648,46,30,2.6,111.05,1.7,64.22 +1649,46,30,2.6,111.05,1.7,64.219375 +1650,46,30,2.6,111.05,1.7,64.21875 +1651,46,30,2.6,111.05,1.7,64.218125 +1652,46,30,2.6,111.05,1.7,64.2175 +1653,46,30,2.6,111.05,1.7,64.216875 +1654,46,30,2.6,111.05,1.7,64.21625 +1655,46,30,2.6,111.05,1.7,64.215625 +1656,46,30,2.6,111.05,1.7,64.215 +1657,46,30,2.6,111.05,1.7,64.214375 +1658,46,30,2.6,111.05,1.7,64.21375 +1659,46,30,2.6,111.05,1.7,64.213125 +1660,46,30,2.6,111.05,1.7,64.2125 +1661,46,30,2.6,111.05,1.7,64.211875 +1662,46,30,2.6,111.05,1.7,64.21125 +1663,46,30,2.6,111.05,1.7,64.210625 +1664,46,30,2.6,111.05,1.7,64.21 +1665,46,30,2.6,111.05,1.7,64.209375 +1666,46,30,2.6,111.05,1.7,64.20875 +1667,46,30,2.6,111.05,1.7,64.208125 +1668,46,30,2.6,111.05,1.7,64.2075 +1669,46,30,2.6,111.05,1.7,64.206875 +1670,46,30,2.6,111.05,1.7,64.20625 +1671,46,30,2.6,111.05,1.7,64.205625 +1672,46,30,2.6,111.05,1.7,64.205 +1673,46,30,2.6,111.05,1.7,64.204375 +1674,46,30,2.6,111.05,1.7,64.20375 +1675,46,30,2.6,111.05,1.7,64.203125 +1676,46,30,2.6,111.05,1.7,64.2025 +1677,46,30,2.6,111.05,1.7,64.201875 +1678,46,30,2.6,111.05,1.7,64.20125 +1679,46,30,2.6,111.05,1.7,64.200625 +1680,46,30,2.6,111.05,1.7,64.2 +1681,46,30,2.6,111.05,1.7,64.199375 +1682,46,30,2.6,111.05,1.7,64.19875 +1683,46,30,2.6,111.05,1.7,64.198125 +1684,46,30,2.6,111.05,1.7,64.1975 +1685,46,30,2.6,111.05,1.7,64.196875 +1686,46,30,2.6,111.05,1.7,64.19625 +1687,46,30,2.6,111.05,1.7,64.195625 +1688,46,30,2.6,111.05,1.7,64.195 +1689,46,30,2.6,111.05,1.7,64.194375 +1690,46,30,2.6,111.05,1.7,64.19375 +1691,46,30,2.6,111.05,1.7,64.193125 +1692,46,30,2.6,111.05,1.7,64.1925 +1693,46,30,2.6,111.05,1.7,64.191875 +1694,46,30,2.6,111.05,1.7,64.19125 +1695,46,30,2.6,111.05,1.7,64.190625 +1696,46,30,2.6,111.05,1.7,64.19 +1697,46,30,2.6,111.05,1.7,64.189375 +1698,46,30,2.6,111.05,1.7,64.18875 +1699,46,30,2.6,111.05,1.7,64.188125 +1700,46,30,2.6,111.05,1.7,64.1875 +1701,46,30,2.6,111.05,1.7,64.186875 +1702,46,30,2.6,111.05,1.7,64.18625 +1703,46,30,2.6,111.05,1.7,64.185625 +1704,46,30,2.6,111.05,1.7,64.185 +1705,46,30,2.6,111.05,1.7,64.184375 +1706,46,30,2.6,111.05,1.7,64.18375 +1707,46,30,2.6,111.05,1.7,64.183125 +1708,46,30,2.6,111.05,1.7,64.1825 +1709,46,30,2.6,111.05,1.7,64.181875 +1710,46,30,2.6,111.05,1.7,64.18125 +1711,46,30,2.6,111.05,1.7,64.180625 +1712,46,30,2.6,111.05,1.7,64.18 +1713,46,30,2.6,111.05,1.7,64.179375 +1714,46,30,2.6,111.05,1.7,64.17875 +1715,46,30,2.6,111.05,1.7,64.178125 +1716,46,30,2.6,111.05,1.7,64.1775 +1717,46,30,2.6,111.05,1.7,64.176875 +1718,46,30,2.6,111.05,1.7,64.17625 +1719,46,30,2.6,111.05,1.7,64.175625 +1720,46,30,2.6,111.05,1.7,64.175 +1721,46,30,2.6,111.05,1.7,64.174375 +1722,46,30,2.6,111.05,1.7,64.17375 +1723,46,30,2.6,111.05,1.7,64.173125 +1724,46,30,2.6,111.05,1.7,64.1725 +1725,46,30,2.6,111.05,1.7,64.171875 +1726,46,30,2.6,111.05,1.7,64.17125 +1727,46,30,2.6,111.05,1.7,64.170625 +1728,46,30,2.6,111.05,1.7,64.17 +1729,46,30,2.6,111.05,1.7,64.169375 +1730,46,30,2.6,111.05,1.7,64.16875 +1731,46,30,2.6,111.05,1.7,64.168125 +1732,46,30,2.6,111.05,1.7,64.1675 +1733,46,30,2.6,111.05,1.7,64.166875 +1734,46,30,2.6,111.05,1.7,64.16625 +1735,46,30,2.6,111.05,1.7,64.165625 +1736,46,30,2.6,111.05,1.7,64.165 +1737,46,30,2.6,111.05,1.7,64.164375 +1738,46,30,2.6,111.05,1.7,64.16375 +1739,46,30,2.6,111.05,1.7,64.163125 +1740,46,30,2.6,111.05,1.7,64.1625 +1741,46,30,2.6,111.05,1.7,64.161875 +1742,46,30,2.6,111.05,1.7,64.16125 +1743,46,30,2.6,111.05,1.7,64.160625 +1744,46,30,2.6,111.05,1.7,64.16 +1745,46,30,2.6,111.05,1.7,64.159375 +1746,46,30,2.6,111.05,1.7,64.15875 +1747,46,30,2.6,111.05,1.7,64.158125 +1748,46,30,2.6,111.05,1.7,64.1575 +1749,46,30,2.6,111.05,1.7,64.156875 +1750,46,30,2.6,111.05,1.7,64.15625 +1751,46,30,2.6,111.05,1.7,64.155625 +1752,46,30,2.6,111.05,1.7,64.155 +1753,46,30,2.6,111.05,1.7,64.154375 +1754,46,30,2.6,111.05,1.7,64.15375 +1755,46,30,2.6,111.05,1.7,64.153125 +1756,46,30,2.6,111.05,1.7,64.1525 +1757,46,30,2.6,111.05,1.7,64.151875 +1758,46,30,2.6,111.05,1.7,64.15125 +1759,46,30,2.6,111.05,1.7,64.150625 +1760,46,30,2.6,111.05,1.7,64.15 +1761,46,30,2.6,111.05,1.7,64.149375 +1762,46,30,2.6,111.05,1.7,64.14875 +1763,46,30,2.6,111.05,1.7,64.148125 +1764,46,30,2.6,111.05,1.7,64.1475 +1765,46,30,2.6,111.05,1.7,64.146875 +1766,46,30,2.6,111.05,1.7,64.14625 +1767,46,30,2.6,111.05,1.7,64.145625 +1768,46,30,2.6,111.05,1.7,64.145 +1769,46,30,2.6,111.05,1.7,64.144375 +1770,46,30,2.6,111.05,1.7,64.14375 +1771,46,30,2.6,111.05,1.7,64.143125 +1772,46,30,2.6,111.05,1.7,64.1425 +1773,46,30,2.6,111.05,1.7,64.141875 +1774,46,30,2.6,111.05,1.7,64.14125 +1775,46,30,2.6,111.05,1.7,64.140625 +1776,46,30,2.6,111.05,1.7,64.14 +1777,46,30,2.6,111.05,1.7,64.139375 +1778,46,30,2.6,111.05,1.7,64.13875 +1779,46,30,2.6,111.05,1.7,64.138125 +1780,46,30,2.6,111.05,1.7,64.1375 +1781,46,30,2.6,111.05,1.7,64.136875 +1782,46,30,2.6,111.05,1.7,64.13625 +1783,46,30,2.6,111.05,1.7,64.135625 +1784,46,30,2.6,111.05,1.7,64.135 +1785,46,30,2.6,111.05,1.7,64.134375 +1786,46,30,2.6,111.05,1.7,64.13375 +1787,46,30,2.6,111.05,1.7,64.133125 +1788,46,30,2.6,111.05,1.7,64.1325 +1789,46,30,2.6,111.05,1.7,64.131875 +1790,46,30,2.6,111.05,1.7,64.13125 +1791,46,30,2.6,111.05,1.7,64.130625 +1792,46,30,2.6,111.05,1.7,64.13 +1793,46,30,2.6,111.05,1.7,64.129375 +1794,46,30,2.6,111.05,1.7,64.12875 +1795,46,30,2.6,111.05,1.7,64.128125 +1796,46,30,2.6,111.05,1.7,64.1275 +1797,46,30,2.6,111.05,1.7,64.126875 +1798,46,30,2.6,111.05,1.7,64.12625 +1799,46,30,2.6,111.05,1.7,64.125625 +1800,46,30,2.6,111.05,1.7,64.125 +1801,46,30,2.6,111.05,1.7,64.124375 +1802,46,30,2.6,111.05,1.7,64.12375 +1803,46,30,2.6,111.05,1.7,64.123125 +1804,46,30,2.6,111.05,1.7,64.1225 +1805,46,30,2.6,111.05,1.7,64.121875 +1806,46,30,2.6,111.05,1.7,64.12125 +1807,46,30,2.6,111.05,1.7,64.120625 +1808,46,30,2.6,111.05,1.7,64.12 +1809,46,30,2.6,111.05,1.7,64.119375 +1810,46,30,2.6,111.05,1.7,64.11875 +1811,46,30,2.6,111.05,1.7,64.118125 +1812,46,30,2.6,111.05,1.7,64.1175 +1813,46,30,2.6,111.05,1.7,64.116875 +1814,46,30,2.6,111.05,1.7,64.11625 +1815,46,30,2.6,111.05,1.7,64.115625 +1816,46,30,2.6,111.05,1.7,64.115 +1817,46,30,2.6,111.05,1.7,64.114375 +1818,46,30,2.6,111.05,1.7,64.11375 +1819,46,30,2.6,111.05,1.7,64.113125 +1820,46,30,2.6,111.05,1.7,64.1125 +1821,46,30,2.6,111.05,1.7,64.111875 +1822,46,30,2.6,111.05,1.7,64.11125 +1823,46,30,2.6,111.05,1.7,64.110625 +1824,46,30,2.6,111.05,1.7,64.11 +1825,46,30,2.6,111.05,1.7,64.109375 +1826,46,30,2.6,111.05,1.7,64.10875 +1827,46,30,2.6,111.05,1.7,64.108125 +1828,46,30,2.6,111.05,1.7,64.1075 +1829,46,30,2.6,111.05,1.7,64.106875 +1830,46,30,2.6,111.05,1.7,64.10625 +1831,46,30,2.6,111.05,1.7,64.105625 +1832,46,30,2.6,111.05,1.7,64.105 +1833,46,30,2.6,111.05,1.7,64.104375 +1834,46,30,2.6,111.05,1.7,64.10375 +1835,46,30,2.6,111.05,1.7,64.103125 +1836,46,30,2.6,111.05,1.7,64.1025 +1837,46,30,2.6,111.05,1.7,64.101875 +1838,46,30,2.6,111.05,1.7,64.10125 +1839,46,30,2.6,111.05,1.7,64.100625 +1840,46,30,2.6,111.05,1.7,64.1 +1841,46,30,2.6,111.05,1.7,64.099375 +1842,46,30,2.6,111.05,1.7,64.09875 +1843,46,30,2.6,111.05,1.7,64.098125 +1844,46,30,2.6,111.05,1.7,64.0975 +1845,46,30,2.6,111.05,1.7,64.096875 +1846,46,30,2.6,111.05,1.7,64.09625 +1847,46,30,2.6,111.05,1.7,64.095625 +1848,46,30,2.6,111.05,1.7,64.095 +1849,46,30,2.6,111.05,1.7,64.094375 +1850,46,30,2.6,111.05,1.7,64.09375 +1851,46,30,2.6,111.05,1.7,64.093125 +1852,46,30,2.6,111.05,1.7,64.0925 +1853,46,30,2.6,111.05,1.7,64.091875 +1854,46,30,2.6,111.05,1.7,64.09125 +1855,46,30,2.6,111.05,1.7,64.090625 +1856,46,30,2.6,111.05,1.7,64.09 +1857,46,30,2.6,111.05,1.7,64.089375 +1858,46,30,2.6,111.05,1.7,64.08875 +1859,46,30,2.6,111.05,1.7,64.088125 +1860,46,30,2.6,111.05,1.7,64.0875 +1861,46,30,2.6,111.05,1.7,64.086875 +1862,46,30,2.6,111.05,1.7,64.08625 +1863,46,30,2.6,111.05,1.7,64.085625 +1864,46,30,2.6,111.05,1.7,64.085 +1865,46,30,2.6,111.05,1.7,64.084375 +1866,46,30,2.6,111.05,1.7,64.08375 +1867,46,30,2.6,111.05,1.7,64.083125 +1868,46,30,2.6,111.05,1.7,64.0825 +1869,46,30,2.6,111.05,1.7,64.081875 +1870,46,30,2.6,111.05,1.7,64.08125 +1871,46,30,2.6,111.05,1.7,64.080625 +1872,46,30,2.6,111.05,1.7,64.08 +1873,46,30,2.6,111.05,1.7,64.079375 +1874,46,30,2.6,111.05,1.7,64.07875 +1875,46,30,2.6,111.05,1.7,64.078125 +1876,46,30,2.6,111.05,1.7,64.0775 +1877,46,30,2.6,111.05,1.7,64.076875 +1878,46,30,2.6,111.05,1.7,64.07625 +1879,46,30,2.6,111.05,1.7,64.075625 +1880,46,30,2.6,111.05,1.7,64.075 +1881,46,30,2.6,111.05,1.7,64.074375 +1882,46,30,2.6,111.05,1.7,64.07375 +1883,46,30,2.6,111.05,1.7,64.073125 +1884,46,30,2.6,111.05,1.7,64.0725 +1885,46,30,2.6,111.05,1.7,64.071875 +1886,46,30,2.6,111.05,1.7,64.07125 +1887,46,30,2.6,111.05,1.7,64.070625 +1888,46,30,2.6,111.05,1.7,64.07 +1889,46,30,2.6,111.05,1.7,64.069375 +1890,46,30,2.6,111.05,1.7,64.06875 +1891,46,30,2.6,111.05,1.7,64.068125 +1892,46,30,2.6,111.05,1.7,64.0675 +1893,46,30,2.6,111.05,1.7,64.066875 +1894,46,30,2.6,111.05,1.7,64.06625 +1895,46,30,2.6,111.05,1.7,64.065625 +1896,46,30,2.6,111.05,1.7,64.065 +1897,46,30,2.6,111.05,1.7,64.064375 +1898,46,30,2.6,111.05,1.7,64.06375 +1899,46,30,2.6,111.05,1.7,64.063125 +1900,46,30,2.6,111.05,1.7,64.0625 +1901,46,30,2.6,111.05,1.7,64.061875 +1902,46,30,2.6,111.05,1.7,64.06125 +1903,46,30,2.6,111.05,1.7,64.060625 +1904,46,30,2.6,111.05,1.7,64.06 +1905,46,30,2.6,111.05,1.7,64.059375 +1906,46,30,2.6,111.05,1.7,64.05875 +1907,46,30,2.6,111.05,1.7,64.058125 +1908,46,30,2.6,111.05,1.7,64.0575 +1909,46,30,2.6,111.05,1.7,64.056875 +1910,46,30,2.6,111.05,1.7,64.05625 +1911,46,30,2.6,111.05,1.7,64.055625 +1912,46,30,2.6,111.05,1.7,64.055 +1913,46,30,2.6,111.05,1.7,64.054375 +1914,46,30,2.6,111.05,1.7,64.05375 +1915,46,30,2.6,111.05,1.7,64.053125 +1916,46,30,2.6,111.05,1.7,64.0525 +1917,46,30,2.6,111.05,1.7,64.051875 +1918,46,30,2.6,111.05,1.7,64.05125 +1919,46,30,2.6,111.05,1.7,64.050625 +1920,46,30,2.6,111.05,1.7,64.05 +1921,46,30,2.6,111.05,1.7,64.049375 +1922,46,30,2.6,111.05,1.7,64.04875 +1923,46,30,2.6,111.05,1.7,64.048125 +1924,46,30,2.6,111.05,1.7,64.0475 +1925,46,30,2.6,111.05,1.7,64.046875 +1926,46,30,2.6,111.05,1.7,64.04625 +1927,46,30,2.6,111.05,1.7,64.045625 +1928,46,30,2.6,111.05,1.7,64.045 +1929,46,30,2.6,111.05,1.7,64.044375 +1930,46,30,2.6,111.05,1.7,64.04375 +1931,46,30,2.6,111.05,1.7,64.043125 +1932,46,30,2.6,111.05,1.7,64.0425 +1933,46,30,2.6,111.05,1.7,64.041875 +1934,46,30,2.6,111.05,1.7,64.04125 +1935,46,30,2.6,111.05,1.7,64.040625 +1936,46,30,2.6,111.05,1.7,64.04 +1937,46,30,2.6,111.05,1.7,64.039375 +1938,46,30,2.6,111.05,1.7,64.03875 +1939,46,30,2.6,111.05,1.7,64.038125 +1940,46,30,2.6,111.05,1.7,64.0375 +1941,46,30,2.6,111.05,1.7,64.036875 +1942,46,30,2.6,111.05,1.7,64.03625 +1943,46,30,2.6,111.05,1.7,64.035625 +1944,46,30,2.6,111.05,1.7,64.035 +1945,46,30,2.6,111.05,1.7,64.034375 +1946,46,30,2.6,111.05,1.7,64.03375 +1947,46,30,2.6,111.05,1.7,64.033125 +1948,46,30,2.6,111.05,1.7,64.0325 +1949,46,30,2.6,111.05,1.7,64.031875 +1950,46,30,2.6,111.05,1.7,64.03125 +1951,46,30,2.6,111.05,1.7,64.030625 +1952,46,30,2.6,111.05,1.7,64.03 +1953,46,30,2.6,111.05,1.7,64.029375 +1954,46,30,2.6,111.05,1.7,64.02875 +1955,46,30,2.6,111.05,1.7,64.028125 +1956,46,30,2.6,111.05,1.7,64.0275 +1957,46,30,2.6,111.05,1.7,64.026875 +1958,46,30,2.6,111.05,1.7,64.02625 +1959,46,30,2.6,111.05,1.7,64.025625 +1960,46,30,2.6,111.05,1.7,64.025 +1961,46,30,2.6,111.05,1.7,64.024375 +1962,46,30,2.6,111.05,1.7,64.02375 +1963,46,30,2.6,111.05,1.7,64.023125 +1964,46,30,2.6,111.05,1.7,64.0225 +1965,46,30,2.6,111.05,1.7,64.021875 +1966,46,30,2.6,111.05,1.7,64.02125 +1967,46,30,2.6,111.05,1.7,64.020625 +1968,46,30,2.6,111.05,1.7,64.02 +1969,46,30,2.6,111.05,1.7,64.019375 +1970,46,30,2.6,111.05,1.7,64.01875 +1971,46,30,2.6,111.05,1.7,64.018125 +1972,46,30,2.6,111.05,1.7,64.0175 +1973,46,30,2.6,111.05,1.7,64.016875 +1974,46,30,2.6,111.05,1.7,64.01625 +1975,46,30,2.6,111.05,1.7,64.015625 +1976,46,30,2.6,111.05,1.7,64.015 +1977,46,30,2.6,111.05,1.7,64.014375 +1978,46,30,2.6,111.05,1.7,64.01375 +1979,46,30,2.6,111.05,1.7,64.013125 +1980,46,30,2.6,111.05,1.7,64.0125 +1981,46,30,2.6,111.05,1.7,64.011875 +1982,46,30,2.6,111.05,1.7,64.01125 +1983,46,30,2.6,111.05,1.7,64.010625 +1984,46,30,2.6,111.05,1.7,64.01 +1985,46,30,2.6,111.05,1.7,64.009375 +1986,46,30,2.6,111.05,1.7,64.00875 +1987,46,30,2.6,111.05,1.7,64.008125 +1988,46,30,2.6,111.05,1.7,64.0075 +1989,46,30,2.6,111.05,1.7,64.006875 +1990,46,30,2.6,111.05,1.7,64.00625 +1991,46,30,2.6,111.05,1.7,64.005625 +1992,46,30,2.6,111.05,1.7,64.005 +1993,46,30,2.6,111.05,1.7,64.004375 +1994,46,30,2.6,111.05,1.7,64.00375 +1995,46,30,2.6,111.05,1.7,64.003125 +1996,46,30,2.6,111.05,1.7,64.0025 +1997,46,30,2.6,111.05,1.7,64.001875 +1998,46,30,2.6,111.05,1.7,64.00125 +1999,46,30,2.6,111.05,1.7,64.000625 +2000,46,30,2.6,111.05,1.7,64 +2001,46,30,2.6,111.05,1.7,63.99975 +2002,46,30,2.6,111.05,1.7,63.9995 +2003,46,30,2.6,111.05,1.7,63.99925 +2004,46,30,2.6,111.05,1.7,63.999 +2005,46,30,2.6,111.05,1.7,63.99875 +2006,46,30,2.6,111.05,1.7,63.9985 +2007,46,30,2.6,111.05,1.7,63.99825 +2008,46,30,2.6,111.05,1.7,63.998 +2009,46,30,2.6,111.05,1.7,63.99775 +2010,46,30,2.6,111.05,1.7,63.9975 +2011,46,30,2.6,111.05,1.7,63.99725 +2012,46,30,2.6,111.05,1.7,63.997 +2013,46,30,2.6,111.05,1.7,63.99675 +2014,46,30,2.6,111.05,1.7,63.9965 +2015,46,30,2.6,111.05,1.7,63.99625 +2016,46,30,2.6,111.05,1.7,63.996 +2017,46,30,2.6,111.05,1.7,63.99575 +2018,46,30,2.6,111.05,1.7,63.9955 +2019,46,30,2.6,111.05,1.7,63.99525 +2020,46,30,2.6,111.05,1.7,63.995 +2021,46,30,2.6,111.05,1.7,63.99475 +2022,46,30,2.6,111.05,1.7,63.9945 +2023,46,30,2.6,111.05,1.7,63.99425 +2024,46,30,2.6,111.05,1.7,63.994 +2025,46,30,2.6,111.05,1.7,63.99375 +2026,46,30,2.6,111.05,1.7,63.9935 +2027,46,30,2.6,111.05,1.7,63.99325 +2028,46,30,2.6,111.05,1.7,63.993 +2029,46,30,2.6,111.05,1.7,63.99275 +2030,46,30,2.6,111.05,1.7,63.9925 +2031,46,30,2.6,111.05,1.7,63.99225 +2032,46,30,2.6,111.05,1.7,63.992 +2033,46,30,2.6,111.05,1.7,63.99175 +2034,46,30,2.6,111.05,1.7,63.9915 +2035,46,30,2.6,111.05,1.7,63.99125 +2036,46,30,2.6,111.05,1.7,63.991 +2037,46,30,2.6,111.05,1.7,63.99075 +2038,46,30,2.6,111.05,1.7,63.9905 +2039,46,30,2.6,111.05,1.7,63.99025 +2040,46,30,2.6,111.05,1.7,63.99 +2041,46,30,2.6,111.05,1.7,63.98975 +2042,46,30,2.6,111.05,1.7,63.9895 +2043,46,30,2.6,111.05,1.7,63.98925 +2044,46,30,2.6,111.05,1.7,63.989 +2045,46,30,2.6,111.05,1.7,63.98875 +2046,46,30,2.6,111.05,1.7,63.9885 +2047,46,30,2.6,111.05,1.7,63.98825 +2048,46,30,2.6,111.05,1.7,63.988 +2049,46,30,2.6,111.05,1.7,63.98775 +2050,46,30,2.6,111.05,1.7,63.9875 +2051,46,30,2.6,111.05,1.7,63.98725 +2052,46,30,2.6,111.05,1.7,63.987 +2053,46,30,2.6,111.05,1.7,63.98675 +2054,46,30,2.6,111.05,1.7,63.9865 +2055,46,30,2.6,111.05,1.7,63.98625 +2056,46,30,2.6,111.05,1.7,63.986 +2057,46,30,2.6,111.05,1.7,63.98575 +2058,46,30,2.6,111.05,1.7,63.9855 +2059,46,30,2.6,111.05,1.7,63.98525 +2060,46,30,2.6,111.05,1.7,63.985 +2061,46,30,2.6,111.05,1.7,63.98475 +2062,46,30,2.6,111.05,1.7,63.9845 +2063,46,30,2.6,111.05,1.7,63.98425 +2064,46,30,2.6,111.05,1.7,63.984 +2065,46,30,2.6,111.05,1.7,63.98375 +2066,46,30,2.6,111.05,1.7,63.9835 +2067,46,30,2.6,111.05,1.7,63.98325 +2068,46,30,2.6,111.05,1.7,63.983 +2069,46,30,2.6,111.05,1.7,63.98275 +2070,46,30,2.6,111.05,1.7,63.9825 +2071,46,30,2.6,111.05,1.7,63.98225 +2072,46,30,2.6,111.05,1.7,63.982 +2073,46,30,2.6,111.05,1.7,63.98175 +2074,46,30,2.6,111.05,1.7,63.9815 +2075,46,30,2.6,111.05,1.7,63.98125 +2076,46,30,2.6,111.05,1.7,63.981 +2077,46,30,2.6,111.05,1.7,63.98075 +2078,46,30,2.6,111.05,1.7,63.9805 +2079,46,30,2.6,111.05,1.7,63.98025 +2080,46,30,2.6,111.05,1.7,63.98 +2081,46,30,2.6,111.05,1.7,63.97975 +2082,46,30,2.6,111.05,1.7,63.9795 +2083,46,30,2.6,111.05,1.7,63.97925 +2084,46,30,2.6,111.05,1.7,63.979 +2085,46,30,2.6,111.05,1.7,63.97875 +2086,46,30,2.6,111.05,1.7,63.9785 +2087,46,30,2.6,111.05,1.7,63.97825 +2088,46,30,2.6,111.05,1.7,63.978 +2089,46,30,2.6,111.05,1.7,63.97775 +2090,46,30,2.6,111.05,1.7,63.9775 +2091,46,30,2.6,111.05,1.7,63.97725 +2092,46,30,2.6,111.05,1.7,63.977 +2093,46,30,2.6,111.05,1.7,63.97675 +2094,46,30,2.6,111.05,1.7,63.9765 +2095,46,30,2.6,111.05,1.7,63.97625 +2096,46,30,2.6,111.05,1.7,63.976 +2097,46,30,2.6,111.05,1.7,63.97575 +2098,46,30,2.6,111.05,1.7,63.9755 +2099,46,30,2.6,111.05,1.7,63.97525 +2100,46,30,2.6,111.05,1.7,63.975 +2101,46,30,2.6,111.05,1.7,63.97475 +2102,46,30,2.6,111.05,1.7,63.9745 +2103,46,30,2.6,111.05,1.7,63.97425 +2104,46,30,2.6,111.05,1.7,63.974 +2105,46,30,2.6,111.05,1.7,63.97375 +2106,46,30,2.6,111.05,1.7,63.9735 +2107,46,30,2.6,111.05,1.7,63.97325 +2108,46,30,2.6,111.05,1.7,63.973 +2109,46,30,2.6,111.05,1.7,63.97275 +2110,46,30,2.6,111.05,1.7,63.9725 +2111,46,30,2.6,111.05,1.7,63.97225 +2112,46,30,2.6,111.05,1.7,63.972 +2113,46,30,2.6,111.05,1.7,63.97175 +2114,46,30,2.6,111.05,1.7,63.9715 +2115,46,30,2.6,111.05,1.7,63.97125 +2116,46,30,2.6,111.05,1.7,63.971 +2117,46,30,2.6,111.05,1.7,63.97075 +2118,46,30,2.6,111.05,1.7,63.9705 +2119,46,30,2.6,111.05,1.7,63.97025 +2120,46,30,2.6,111.05,1.7,63.97 +2121,46,30,2.6,111.05,1.7,63.96975 +2122,46,30,2.6,111.05,1.7,63.9695 +2123,46,30,2.6,111.05,1.7,63.96925 +2124,46,30,2.6,111.05,1.7,63.969 +2125,46,30,2.6,111.05,1.7,63.96875 +2126,46,30,2.6,111.05,1.7,63.9685 +2127,46,30,2.6,111.05,1.7,63.96825 +2128,46,30,2.6,111.05,1.7,63.968 +2129,46,30,2.6,111.05,1.7,63.96775 +2130,46,30,2.6,111.05,1.7,63.9675 +2131,46,30,2.6,111.05,1.7,63.96725 +2132,46,30,2.6,111.05,1.7,63.967 +2133,46,30,2.6,111.05,1.7,63.96675 +2134,46,30,2.6,111.05,1.7,63.9665 +2135,46,30,2.6,111.05,1.7,63.96625 +2136,46,30,2.6,111.05,1.7,63.966 +2137,46,30,2.6,111.05,1.7,63.96575 +2138,46,30,2.6,111.05,1.7,63.9655 +2139,46,30,2.6,111.05,1.7,63.96525 +2140,46,30,2.6,111.05,1.7,63.965 +2141,46,30,2.6,111.05,1.7,63.96475 +2142,46,30,2.6,111.05,1.7,63.9645 +2143,46,30,2.6,111.05,1.7,63.96425 +2144,46,30,2.6,111.05,1.7,63.964 +2145,46,30,2.6,111.05,1.7,63.96375 +2146,46,30,2.6,111.05,1.7,63.9635 +2147,46,30,2.6,111.05,1.7,63.96325 +2148,46,30,2.6,111.05,1.7,63.963 +2149,46,30,2.6,111.05,1.7,63.96275 +2150,46,30,2.6,111.05,1.7,63.9625 +2151,46,30,2.6,111.05,1.7,63.96225 +2152,46,30,2.6,111.05,1.7,63.962 +2153,46,30,2.6,111.05,1.7,63.96175 +2154,46,30,2.6,111.05,1.7,63.9615 +2155,46,30,2.6,111.05,1.7,63.96125 +2156,46,30,2.6,111.05,1.7,63.961 +2157,46,30,2.6,111.05,1.7,63.96075 +2158,46,30,2.6,111.05,1.7,63.9605 +2159,46,30,2.6,111.05,1.7,63.96025 +2160,46,30,2.6,111.05,1.7,63.96 +2161,46,30,2.6,111.05,1.7,63.95975 +2162,46,30,2.6,111.05,1.7,63.9595 +2163,46,30,2.6,111.05,1.7,63.95925 +2164,46,30,2.6,111.05,1.7,63.959 +2165,46,30,2.6,111.05,1.7,63.95875 +2166,46,30,2.6,111.05,1.7,63.9585 +2167,46,30,2.6,111.05,1.7,63.95825 +2168,46,30,2.6,111.05,1.7,63.958 +2169,46,30,2.6,111.05,1.7,63.95775 +2170,46,30,2.6,111.05,1.7,63.9575 +2171,46,30,2.6,111.05,1.7,63.95725 +2172,46,30,2.6,111.05,1.7,63.957 +2173,46,30,2.6,111.05,1.7,63.95675 +2174,46,30,2.6,111.05,1.7,63.9565 +2175,46,30,2.6,111.05,1.7,63.95625 +2176,46,30,2.6,111.05,1.7,63.956 +2177,46,30,2.6,111.05,1.7,63.95575 +2178,46,30,2.6,111.05,1.7,63.9555 +2179,46,30,2.6,111.05,1.7,63.95525 +2180,46,30,2.6,111.05,1.7,63.955 +2181,46,30,2.6,111.05,1.7,63.95475 +2182,46,30,2.6,111.05,1.7,63.9545 +2183,46,30,2.6,111.05,1.7,63.95425 +2184,46,30,2.6,111.05,1.7,63.954 +2185,46,30,2.6,111.05,1.7,63.95375 +2186,46,30,2.6,111.05,1.7,63.9535 +2187,46,30,2.6,111.05,1.7,63.95325 +2188,46,30,2.6,111.05,1.7,63.953 +2189,46,30,2.6,111.05,1.7,63.95275 +2190,46,30,2.6,111.05,1.7,63.9525 +2191,46,30,2.6,111.05,1.7,63.95225 +2192,46,30,2.6,111.05,1.7,63.952 +2193,46,30,2.6,111.05,1.7,63.95175 +2194,46,30,2.6,111.05,1.7,63.9515 +2195,46,30,2.6,111.05,1.7,63.95125 +2196,46,30,2.6,111.05,1.7,63.951 +2197,46,30,2.6,111.05,1.7,63.95075 +2198,46,30,2.6,111.05,1.7,63.9505 +2199,46,30,2.6,111.05,1.7,63.95025 +2200,46,30,2.6,111.05,1.7,63.95 +2201,46,30,2.6,111.05,1.7,63.94975 +2202,46,30,2.6,111.05,1.7,63.9495 +2203,46,30,2.6,111.05,1.7,63.94925 +2204,46,30,2.6,111.05,1.7,63.949 +2205,46,30,2.6,111.05,1.7,63.94875 +2206,46,30,2.6,111.05,1.7,63.9485 +2207,46,30,2.6,111.05,1.7,63.94825 +2208,46,30,2.6,111.05,1.7,63.948 +2209,46,30,2.6,111.05,1.7,63.94775 +2210,46,30,2.6,111.05,1.7,63.9475 +2211,46,30,2.6,111.05,1.7,63.94725 +2212,46,30,2.6,111.05,1.7,63.947 +2213,46,30,2.6,111.05,1.7,63.94675 +2214,46,30,2.6,111.05,1.7,63.9465 +2215,46,30,2.6,111.05,1.7,63.94625 +2216,46,30,2.6,111.05,1.7,63.946 +2217,46,30,2.6,111.05,1.7,63.94575 +2218,46,30,2.6,111.05,1.7,63.9455 +2219,46,30,2.6,111.05,1.7,63.94525 +2220,46,30,2.6,111.05,1.7,63.945 +2221,46,30,2.6,111.05,1.7,63.94475 +2222,46,30,2.6,111.05,1.7,63.9445 +2223,46,30,2.6,111.05,1.7,63.94425 +2224,46,30,2.6,111.05,1.7,63.944 +2225,46,30,2.6,111.05,1.7,63.94375 +2226,46,30,2.6,111.05,1.7,63.9435 +2227,46,30,2.6,111.05,1.7,63.94325 +2228,46,30,2.6,111.05,1.7,63.943 +2229,46,30,2.6,111.05,1.7,63.94275 +2230,46,30,2.6,111.05,1.7,63.9425 +2231,46,30,2.6,111.05,1.7,63.94225 +2232,46,30,2.6,111.05,1.7,63.942 +2233,46,30,2.6,111.05,1.7,63.94175 +2234,46,30,2.6,111.05,1.7,63.9415 +2235,46,30,2.6,111.05,1.7,63.94125 +2236,46,30,2.6,111.05,1.7,63.941 +2237,46,30,2.6,111.05,1.7,63.94075 +2238,46,30,2.6,111.05,1.7,63.9405 +2239,46,30,2.6,111.05,1.7,63.94025 +2240,46,30,2.6,111.05,1.7,63.94 +2241,46,30,2.6,111.05,1.7,63.93975 +2242,46,30,2.6,111.05,1.7,63.9395 +2243,46,30,2.6,111.05,1.7,63.93925 +2244,46,30,2.6,111.05,1.7,63.939 +2245,46,30,2.6,111.05,1.7,63.93875 +2246,46,30,2.6,111.05,1.7,63.9385 +2247,46,30,2.6,111.05,1.7,63.93825 +2248,46,30,2.6,111.05,1.7,63.938 +2249,46,30,2.6,111.05,1.7,63.93775 +2250,46,30,2.6,111.05,1.7,63.9375 +2251,46,30,2.6,111.05,1.7,63.93725 +2252,46,30,2.6,111.05,1.7,63.937 +2253,46,30,2.6,111.05,1.7,63.93675 +2254,46,30,2.6,111.05,1.7,63.9365 +2255,46,30,2.6,111.05,1.7,63.93625 +2256,46,30,2.6,111.05,1.7,63.936 +2257,46,30,2.6,111.05,1.7,63.93575 +2258,46,30,2.6,111.05,1.7,63.9355 +2259,46,30,2.6,111.05,1.7,63.93525 +2260,46,30,2.6,111.05,1.7,63.935 +2261,46,30,2.6,111.05,1.7,63.93475 +2262,46,30,2.6,111.05,1.7,63.9345 +2263,46,30,2.6,111.05,1.7,63.93425 +2264,46,30,2.6,111.05,1.7,63.934 +2265,46,30,2.6,111.05,1.7,63.93375 +2266,46,30,2.6,111.05,1.7,63.9335 +2267,46,30,2.6,111.05,1.7,63.93325 +2268,46,30,2.6,111.05,1.7,63.933 +2269,46,30,2.6,111.05,1.7,63.93275 +2270,46,30,2.6,111.05,1.7,63.9325 +2271,46,30,2.6,111.05,1.7,63.93225 +2272,46,30,2.6,111.05,1.7,63.932 +2273,46,30,2.6,111.05,1.7,63.93175 +2274,46,30,2.6,111.05,1.7,63.9315 +2275,46,30,2.6,111.05,1.7,63.93125 +2276,46,30,2.6,111.05,1.7,63.931 +2277,46,30,2.6,111.05,1.7,63.93075 +2278,46,30,2.6,111.05,1.7,63.9305 +2279,46,30,2.6,111.05,1.7,63.93025 +2280,46,30,2.6,111.05,1.7,63.93 +2281,46,30,2.6,111.05,1.7,63.92975 +2282,46,30,2.6,111.05,1.7,63.9295 +2283,46,30,2.6,111.05,1.7,63.92925 +2284,46,30,2.6,111.05,1.7,63.929 +2285,46,30,2.6,111.05,1.7,63.92875 +2286,46,30,2.6,111.05,1.7,63.9285 +2287,46,30,2.6,111.05,1.7,63.92825 +2288,46,30,2.6,111.05,1.7,63.928 +2289,46,30,2.6,111.05,1.7,63.92775 +2290,46,30,2.6,111.05,1.7,63.9275 +2291,46,30,2.6,111.05,1.7,63.92725 +2292,46,30,2.6,111.05,1.7,63.927 +2293,46,30,2.6,111.05,1.7,63.92675 +2294,46,30,2.6,111.05,1.7,63.9265 +2295,46,30,2.6,111.05,1.7,63.92625 +2296,46,30,2.6,111.05,1.7,63.926 +2297,46,30,2.6,111.05,1.7,63.92575 +2298,46,30,2.6,111.05,1.7,63.9255 +2299,46,30,2.6,111.05,1.7,63.92525 +2300,46,30,2.6,111.05,1.7,63.925 +2301,46,30,2.6,111.05,1.7,63.92475 +2302,46,30,2.6,111.05,1.7,63.9245 +2303,46,30,2.6,111.05,1.7,63.92425 +2304,46,30,2.6,111.05,1.7,63.924 +2305,46,30,2.6,111.05,1.7,63.92375 +2306,46,30,2.6,111.05,1.7,63.9235 +2307,46,30,2.6,111.05,1.7,63.92325 +2308,46,30,2.6,111.05,1.7,63.923 +2309,46,30,2.6,111.05,1.7,63.92275 +2310,46,30,2.6,111.05,1.7,63.9225 +2311,46,30,2.6,111.05,1.7,63.92225 +2312,46,30,2.6,111.05,1.7,63.922 +2313,46,30,2.6,111.05,1.7,63.92175 +2314,46,30,2.6,111.05,1.7,63.9215 +2315,46,30,2.6,111.05,1.7,63.92125 +2316,46,30,2.6,111.05,1.7,63.921 +2317,46,30,2.6,111.05,1.7,63.92075 +2318,46,30,2.6,111.05,1.7,63.9205 +2319,46,30,2.6,111.05,1.7,63.92025 +2320,46,30,2.6,111.05,1.7,63.92 +2321,46,30,2.6,111.05,1.7,63.91975 +2322,46,30,2.6,111.05,1.7,63.9195 +2323,46,30,2.6,111.05,1.7,63.91925 +2324,46,30,2.6,111.05,1.7,63.919 +2325,46,30,2.6,111.05,1.7,63.91875 +2326,46,30,2.6,111.05,1.7,63.9185 +2327,46,30,2.6,111.05,1.7,63.91825 +2328,46,30,2.6,111.05,1.7,63.918 +2329,46,30,2.6,111.05,1.7,63.91775 +2330,46,30,2.6,111.05,1.7,63.9175 +2331,46,30,2.6,111.05,1.7,63.91725 +2332,46,30,2.6,111.05,1.7,63.917 +2333,46,30,2.6,111.05,1.7,63.91675 +2334,46,30,2.6,111.05,1.7,63.9165 +2335,46,30,2.6,111.05,1.7,63.91625 +2336,46,30,2.6,111.05,1.7,63.916 +2337,46,30,2.6,111.05,1.7,63.91575 +2338,46,30,2.6,111.05,1.7,63.9155 +2339,46,30,2.6,111.05,1.7,63.91525 +2340,46,30,2.6,111.05,1.7,63.915 +2341,46,30,2.6,111.05,1.7,63.91475 +2342,46,30,2.6,111.05,1.7,63.9145 +2343,46,30,2.6,111.05,1.7,63.91425 +2344,46,30,2.6,111.05,1.7,63.914 +2345,46,30,2.6,111.05,1.7,63.91375 +2346,46,30,2.6,111.05,1.7,63.9135 +2347,46,30,2.6,111.05,1.7,63.91325 +2348,46,30,2.6,111.05,1.7,63.913 +2349,46,30,2.6,111.05,1.7,63.91275 +2350,46,30,2.6,111.05,1.7,63.9125 +2351,46,30,2.6,111.05,1.7,63.91225 +2352,46,30,2.6,111.05,1.7,63.912 +2353,46,30,2.6,111.05,1.7,63.91175 +2354,46,30,2.6,111.05,1.7,63.9115 +2355,46,30,2.6,111.05,1.7,63.91125 +2356,46,30,2.6,111.05,1.7,63.911 +2357,46,30,2.6,111.05,1.7,63.91075 +2358,46,30,2.6,111.05,1.7,63.9105 +2359,46,30,2.6,111.05,1.7,63.91025 +2360,46,30,2.6,111.05,1.7,63.91 +2361,46,30,2.6,111.05,1.7,63.90975 +2362,46,30,2.6,111.05,1.7,63.9095 +2363,46,30,2.6,111.05,1.7,63.90925 +2364,46,30,2.6,111.05,1.7,63.909 +2365,46,30,2.6,111.05,1.7,63.90875 +2366,46,30,2.6,111.05,1.7,63.9085 +2367,46,30,2.6,111.05,1.7,63.90825 +2368,46,30,2.6,111.05,1.7,63.908 +2369,46,30,2.6,111.05,1.7,63.90775 +2370,46,30,2.6,111.05,1.7,63.9075 +2371,46,30,2.6,111.05,1.7,63.90725 +2372,46,30,2.6,111.05,1.7,63.907 +2373,46,30,2.6,111.05,1.7,63.90675 +2374,46,30,2.6,111.05,1.7,63.9065 +2375,46,30,2.6,111.05,1.7,63.90625 +2376,46,30,2.6,111.05,1.7,63.906 +2377,46,30,2.6,111.05,1.7,63.90575 +2378,46,30,2.6,111.05,1.7,63.9055 +2379,46,30,2.6,111.05,1.7,63.90525 +2380,46,30,2.6,111.05,1.7,63.905 +2381,46,30,2.6,111.05,1.7,63.90475 +2382,46,30,2.6,111.05,1.7,63.9045 +2383,46,30,2.6,111.05,1.7,63.90425 +2384,46,30,2.6,111.05,1.7,63.904 +2385,46,30,2.6,111.05,1.7,63.90375 +2386,46,30,2.6,111.05,1.7,63.9035 +2387,46,30,2.6,111.05,1.7,63.90325 +2388,46,30,2.6,111.05,1.7,63.903 +2389,46,30,2.6,111.05,1.7,63.90275 +2390,46,30,2.6,111.05,1.7,63.9025 +2391,46,30,2.6,111.05,1.7,63.90225 +2392,46,30,2.6,111.05,1.7,63.902 +2393,46,30,2.6,111.05,1.7,63.90175 +2394,46,30,2.6,111.05,1.7,63.9015 +2395,46,30,2.6,111.05,1.7,63.90125 +2396,46,30,2.6,111.05,1.7,63.901 +2397,46,30,2.6,111.05,1.7,63.90075 +2398,46,30,2.6,111.05,1.7,63.9005 +2399,46,30,2.6,111.05,1.7,63.90025 +2400,46,30,2.6,111.05,1.7,63.9 +2401,46,30,2.6,111.05,1.7,63.89975 +2402,46,30,2.6,111.05,1.7,63.8995 +2403,46,30,2.6,111.05,1.7,63.89925 +2404,46,30,2.6,111.05,1.7,63.899 +2405,46,30,2.6,111.05,1.7,63.89875 +2406,46,30,2.6,111.05,1.7,63.8985 +2407,46,30,2.6,111.05,1.7,63.89825 +2408,46,30,2.6,111.05,1.7,63.898 +2409,46,30,2.6,111.05,1.7,63.89775 +2410,46,30,2.6,111.05,1.7,63.8975 +2411,46,30,2.6,111.05,1.7,63.89725 +2412,46,30,2.6,111.05,1.7,63.897 +2413,46,30,2.6,111.05,1.7,63.89675 +2414,46,30,2.6,111.05,1.7,63.8965 +2415,46,30,2.6,111.05,1.7,63.89625 +2416,46,30,2.6,111.05,1.7,63.896 +2417,46,30,2.6,111.05,1.7,63.89575 +2418,46,30,2.6,111.05,1.7,63.8955 +2419,46,30,2.6,111.05,1.7,63.89525 +2420,46,30,2.6,111.05,1.7,63.895 +2421,46,30,2.6,111.05,1.7,63.89475 +2422,46,30,2.6,111.05,1.7,63.8945 +2423,46,30,2.6,111.05,1.7,63.89425 +2424,46,30,2.6,111.05,1.7,63.894 +2425,46,30,2.6,111.05,1.7,63.89375 +2426,46,30,2.6,111.05,1.7,63.8935 +2427,46,30,2.6,111.05,1.7,63.89325 +2428,46,30,2.6,111.05,1.7,63.893 +2429,46,30,2.6,111.05,1.7,63.89275 +2430,46,30,2.6,111.05,1.7,63.8925 +2431,46,30,2.6,111.05,1.7,63.89225 +2432,46,30,2.6,111.05,1.7,63.892 +2433,46,30,2.6,111.05,1.7,63.89175 +2434,46,30,2.6,111.05,1.7,63.8915 +2435,46,30,2.6,111.05,1.7,63.89125 +2436,46,30,2.6,111.05,1.7,63.891 +2437,46,30,2.6,111.05,1.7,63.89075 +2438,46,30,2.6,111.05,1.7,63.8905 +2439,46,30,2.6,111.05,1.7,63.89025 +2440,46,30,2.6,111.05,1.7,63.89 +2441,46,30,2.6,111.05,1.7,63.88975 +2442,46,30,2.6,111.05,1.7,63.8895 +2443,46,30,2.6,111.05,1.7,63.88925 +2444,46,30,2.6,111.05,1.7,63.889 +2445,46,30,2.6,111.05,1.7,63.88875 +2446,46,30,2.6,111.05,1.7,63.8885 +2447,46,30,2.6,111.05,1.7,63.88825 +2448,46,30,2.6,111.05,1.7,63.888 +2449,46,30,2.6,111.05,1.7,63.88775 +2450,46,30,2.6,111.05,1.7,63.8875 +2451,46,30,2.6,111.05,1.7,63.88725 +2452,46,30,2.6,111.05,1.7,63.887 +2453,46,30,2.6,111.05,1.7,63.88675 +2454,46,30,2.6,111.05,1.7,63.8865 +2455,46,30,2.6,111.05,1.7,63.88625 +2456,46,30,2.6,111.05,1.7,63.886 +2457,46,30,2.6,111.05,1.7,63.88575 +2458,46,30,2.6,111.05,1.7,63.8855 +2459,46,30,2.6,111.05,1.7,63.88525 +2460,46,30,2.6,111.05,1.7,63.885 +2461,46,30,2.6,111.05,1.7,63.88475 +2462,46,30,2.6,111.05,1.7,63.8845 +2463,46,30,2.6,111.05,1.7,63.88425 +2464,46,30,2.6,111.05,1.7,63.884 +2465,46,30,2.6,111.05,1.7,63.88375 +2466,46,30,2.6,111.05,1.7,63.8835 +2467,46,30,2.6,111.05,1.7,63.88325 +2468,46,30,2.6,111.05,1.7,63.883 +2469,46,30,2.6,111.05,1.7,63.88275 +2470,46,30,2.6,111.05,1.7,63.8825 +2471,46,30,2.6,111.05,1.7,63.88225 +2472,46,30,2.6,111.05,1.7,63.882 +2473,46,30,2.6,111.05,1.7,63.88175 +2474,46,30,2.6,111.05,1.7,63.8815 +2475,46,30,2.6,111.05,1.7,63.88125 +2476,46,30,2.6,111.05,1.7,63.881 +2477,46,30,2.6,111.05,1.7,63.88075 +2478,46,30,2.6,111.05,1.7,63.8805 +2479,46,30,2.6,111.05,1.7,63.88025 +2480,46,30,2.6,111.05,1.7,63.88 +2481,46,30,2.6,111.05,1.7,63.87975 +2482,46,30,2.6,111.05,1.7,63.8795 +2483,46,30,2.6,111.05,1.7,63.87925 +2484,46,30,2.6,111.05,1.7,63.879 +2485,46,30,2.6,111.05,1.7,63.87875 +2486,46,30,2.6,111.05,1.7,63.8785 +2487,46,30,2.6,111.05,1.7,63.87825 +2488,46,30,2.6,111.05,1.7,63.878 +2489,46,30,2.6,111.05,1.7,63.87775 +2490,46,30,2.5,111.05,1.7,63.8775 +2491,46,30,2.5,111.05,1.7,63.87725 +2492,46,30,2.5,111.05,1.7,63.877 +2493,46,30,2.5,111.05,1.7,63.87675 +2494,46,30,2.5,111.05,1.7,63.8765 +2495,46,30,2.5,111.05,1.7,63.87625 +2496,46,30,2.5,111.05,1.7,63.876 +2497,46,30,2.5,111.05,1.7,63.87575 +2498,46,30,2.5,111.05,1.7,63.8755 +2499,46,30,2.5,111.05,1.7,63.87525 +2500,46,30,2.5,111.05,1.7,63.875 +2501,46,30,2.5,111.05,1.7,63.87475 +2502,46,30,2.5,111.05,1.7,63.8745 +2503,46,30,2.5,111.05,1.7,63.87425 +2504,46,30,2.5,111.05,1.7,63.874 +2505,46,30,2.5,111.05,1.7,63.87375 +2506,46,30,2.5,111.05,1.7,63.8735 +2507,46,30,2.5,111.05,1.7,63.87325 +2508,46,30,2.5,111.05,1.7,63.873 +2509,46,30,2.5,111.05,1.7,63.87275 +2510,46,30,2.5,111.05,1.7,63.8725 +2511,46,30,2.5,111.05,1.7,63.87225 +2512,46,30,2.5,111.05,1.7,63.872 +2513,46,30,2.5,111.05,1.7,63.87175 +2514,46,30,2.5,111.05,1.7,63.8715 +2515,46,30,2.5,111.05,1.7,63.87125 +2516,46,30,2.5,111.05,1.7,63.871 +2517,46,30,2.5,111.05,1.7,63.87075 +2518,46,30,2.5,111.05,1.7,63.8705 +2519,46,30,2.5,111.05,1.7,63.87025 +2520,46,30,2.5,111.05,1.7,63.87 +2521,46,30,2.5,111.05,1.7,63.86975 +2522,46,30,2.5,111.05,1.7,63.8695 +2523,46,30,2.5,111.05,1.7,63.86925 +2524,46,30,2.5,111.05,1.7,63.869 +2525,46,30,2.5,111.05,1.7,63.86875 +2526,46,30,2.5,111.05,1.7,63.8685 +2527,46,30,2.5,111.05,1.7,63.86825 +2528,46,30,2.5,111.05,1.7,63.868 +2529,46,30,2.5,111.05,1.7,63.86775 +2530,46,30,2.5,111.05,1.7,63.8675 +2531,46,30,2.5,111.05,1.7,63.86725 +2532,46,30,2.5,111.05,1.7,63.867 +2533,46,30,2.5,111.05,1.7,63.86675 +2534,46,30,2.5,111.05,1.7,63.8665 +2535,46,30,2.5,111.05,1.7,63.86625 +2536,46,30,2.5,111.05,1.7,63.866 +2537,46,30,2.5,111.05,1.7,63.86575 +2538,46,30,2.5,111.05,1.7,63.8655 +2539,46,30,2.5,111.05,1.7,63.86525 +2540,46,30,2.5,111.05,1.7,63.865 +2541,46,30,2.5,111.05,1.7,63.86475 +2542,46,30,2.5,111.05,1.7,63.8645 +2543,46,30,2.5,111.05,1.7,63.86425 +2544,46,30,2.5,111.05,1.7,63.864 +2545,46,30,2.5,111.05,1.7,63.86375 +2546,46,30,2.5,111.05,1.7,63.8635 +2547,46,30,2.5,111.05,1.7,63.86325 +2548,46,30,2.5,111.05,1.7,63.863 +2549,46,30,2.5,111.05,1.7,63.86275 +2550,46,30,2.5,111.05,1.7,63.8625 +2551,46,30,2.5,111.05,1.7,63.86225 +2552,46,30,2.5,111.05,1.7,63.862 +2553,46,30,2.5,111.05,1.7,63.86175 +2554,46,30,2.5,111.05,1.7,63.8615 +2555,46,30,2.5,111.05,1.7,63.86125 +2556,46,30,2.5,111.05,1.7,63.861 +2557,46,30,2.5,111.05,1.7,63.86075 +2558,46,30,2.5,111.05,1.7,63.8605 +2559,46,30,2.5,111.05,1.7,63.86025 +2560,46,30,2.5,111.05,1.7,63.86 +2561,46,30,2.5,111.05,1.7,63.85975 +2562,46,30,2.5,111.05,1.7,63.8595 +2563,46,30,2.5,111.05,1.7,63.85925 +2564,46,30,2.5,111.05,1.7,63.859 +2565,46,30,2.5,111.05,1.7,63.85875 +2566,46,30,2.5,111.05,1.7,63.8585 +2567,46,30,2.5,111.05,1.7,63.85825 +2568,46,30,2.5,111.05,1.7,63.858 +2569,46,30,2.5,111.05,1.7,63.85775 +2570,46,30,2.5,111.05,1.7,63.8575 +2571,46,30,2.5,111.05,1.7,63.85725 +2572,46,30,2.5,111.05,1.7,63.857 +2573,46,30,2.5,111.05,1.7,63.85675 +2574,46,30,2.5,111.05,1.7,63.8565 +2575,46,30,2.5,111.05,1.7,63.85625 +2576,46,30,2.5,111.05,1.7,63.856 +2577,46,30,2.5,111.05,1.7,63.85575 +2578,46,30,2.5,111.05,1.7,63.8555 +2579,46,30,2.5,111.05,1.7,63.85525 +2580,46,30,2.5,111.05,1.7,63.855 +2581,46,30,2.5,111.05,1.7,63.85475 +2582,46,30,2.5,111.05,1.7,63.8545 +2583,46,30,2.5,111.05,1.7,63.85425 +2584,46,30,2.5,111.05,1.7,63.854 +2585,46,30,2.5,111.05,1.7,63.85375 +2586,46,30,2.5,111.05,1.7,63.8535 +2587,46,30,2.5,111.05,1.7,63.85325 +2588,46,30,2.5,111.05,1.7,63.853 +2589,46,30,2.5,111.05,1.7,63.85275 +2590,46,30,2.5,111.05,1.7,63.8525 +2591,46,30,2.5,111.05,1.7,63.85225 +2592,46,30,2.5,111.05,1.7,63.852 +2593,46,30,2.5,111.05,1.7,63.85175 +2594,46,30,2.5,111.05,1.7,63.8515 +2595,46,30,2.5,111.05,1.7,63.85125 +2596,46,30,2.5,111.05,1.7,63.851 +2597,46,30,2.5,111.05,1.7,63.85075 +2598,46,30,2.5,111.05,1.7,63.8505 +2599,46,30,2.5,111.05,1.7,63.85025 +2600,46,30,2.5,111.05,1.7,63.85 +2601,46,30,2.5,111.05,1.7,63.84975 +2602,46,30,2.5,111.05,1.7,63.8495 +2603,46,30,2.5,111.05,1.7,63.84925 +2604,46,30,2.5,111.05,1.7,63.849 +2605,46,30,2.5,111.05,1.7,63.84875 +2606,46,30,2.5,111.05,1.7,63.8485 +2607,46,30,2.5,111.05,1.7,63.84825 +2608,46,30,2.5,111.05,1.7,63.848 +2609,46,30,2.5,111.05,1.7,63.84775 +2610,46,30,2.5,111.05,1.7,63.8475 +2611,46,30,2.5,111.05,1.7,63.84725 +2612,46,30,2.5,111.05,1.7,63.847 +2613,46,30,2.5,111.05,1.7,63.84675 +2614,46,30,2.5,111.05,1.7,63.8465 +2615,46,30,2.5,111.05,1.7,63.84625 +2616,46,30,2.5,111.05,1.7,63.846 +2617,46,30,2.5,111.05,1.7,63.84575 +2618,46,30,2.5,111.05,1.7,63.8455 +2619,46,30,2.5,111.05,1.7,63.84525 +2620,46,30,2.5,111.05,1.7,63.845 +2621,46,30,2.5,111.05,1.7,63.84475 +2622,46,30,2.5,111.05,1.7,63.8445 +2623,46,30,2.5,111.05,1.7,63.84425 +2624,46,30,2.5,111.05,1.7,63.844 +2625,46,30,2.5,111.05,1.7,63.84375 +2626,46,30,2.5,111.05,1.7,63.8435 +2627,46,30,2.5,111.05,1.7,63.84325 +2628,46,30,2.5,111.05,1.7,63.843 +2629,46,30,2.5,111.05,1.7,63.84275 +2630,46,30,2.5,111.05,1.7,63.8425 +2631,46,30,2.5,111.05,1.7,63.84225 +2632,46,30,2.5,111.05,1.7,63.842 +2633,46,30,2.5,111.05,1.7,63.84175 +2634,46,30,2.5,111.05,1.7,63.8415 +2635,46,30,2.5,111.05,1.7,63.84125 +2636,46,30,2.5,111.05,1.7,63.841 +2637,46,30,2.5,111.05,1.7,63.84075 +2638,46,30,2.5,111.05,1.7,63.8405 +2639,46,30,2.5,111.05,1.7,63.84025 +2640,46,30,2.5,111.05,1.7,63.84 +2641,46,30,2.5,111.05,1.7,63.83975 +2642,46,30,2.5,111.05,1.7,63.8395 +2643,46,30,2.5,111.05,1.7,63.83925 +2644,46,30,2.5,111.05,1.7,63.839 +2645,46,30,2.5,111.05,1.7,63.83875 +2646,46,30,2.5,111.05,1.7,63.8385 +2647,46,30,2.5,111.05,1.7,63.83825 +2648,46,30,2.5,111.05,1.7,63.838 +2649,46,30,2.5,111.05,1.7,63.83775 +2650,46,30,2.5,111.05,1.7,63.8375 +2651,46,30,2.5,111.05,1.7,63.83725 +2652,46,30,2.5,111.05,1.7,63.837 +2653,46,30,2.5,111.05,1.7,63.83675 +2654,46,30,2.5,111.05,1.7,63.8365 +2655,46,30,2.5,111.05,1.7,63.83625 +2656,46,30,2.5,111.05,1.7,63.836 +2657,46,30,2.5,111.05,1.7,63.83575 +2658,46,30,2.5,111.05,1.7,63.8355 +2659,46,30,2.5,111.05,1.7,63.83525 +2660,46,30,2.5,111.05,1.7,63.835 +2661,46,30,2.5,111.05,1.7,63.83475 +2662,46,30,2.5,111.05,1.7,63.8345 +2663,46,30,2.5,111.05,1.7,63.83425 +2664,46,30,2.5,111.05,1.7,63.834 +2665,46,30,2.5,111.05,1.7,63.83375 +2666,46,30,2.5,111.05,1.7,63.8335 +2667,46,30,2.5,111.05,1.7,63.83325 +2668,46,30,2.5,111.05,1.7,63.833 +2669,46,30,2.5,111.05,1.7,63.83275 +2670,46,30,2.5,111.05,1.7,63.8325 +2671,46,30,2.5,111.05,1.7,63.83225 +2672,46,30,2.5,111.05,1.7,63.832 +2673,46,30,2.5,111.05,1.7,63.83175 +2674,46,30,2.5,111.05,1.7,63.8315 +2675,46,30,2.5,111.05,1.7,63.83125 +2676,46,30,2.5,111.05,1.7,63.831 +2677,46,30,2.5,111.05,1.7,63.83075 +2678,46,30,2.5,111.05,1.7,63.8305 +2679,46,30,2.5,111.05,1.7,63.83025 +2680,46,30,2.5,111.05,1.7,63.83 +2681,46,30,2.5,111.05,1.7,63.82975 +2682,46,30,2.5,111.05,1.7,63.8295 +2683,46,30,2.5,111.05,1.7,63.82925 +2684,46,30,2.5,111.05,1.7,63.829 +2685,46,30,2.5,111.05,1.7,63.82875 +2686,46,30,2.5,111.05,1.7,63.8285 +2687,46,30,2.5,111.05,1.7,63.82825 +2688,46,30,2.5,111.05,1.7,63.828 +2689,46,30,2.5,111.05,1.7,63.82775 +2690,46,30,2.5,111.05,1.7,63.8275 +2691,46,30,2.5,111.05,1.7,63.82725 +2692,46,30,2.5,111.05,1.7,63.827 +2693,46,30,2.5,111.05,1.7,63.82675 +2694,46,30,2.5,111.05,1.7,63.8265 +2695,46,30,2.5,111.05,1.7,63.82625 +2696,46,30,2.5,111.05,1.7,63.826 +2697,46,30,2.5,111.05,1.7,63.82575 +2698,46,30,2.5,111.05,1.7,63.8255 +2699,46,30,2.5,111.05,1.7,63.82525 +2700,46,30,2.5,111.05,1.7,63.825 +2701,46,30,2.5,111.05,1.7,63.82475 +2702,46,30,2.5,111.05,1.7,63.8245 +2703,46,30,2.5,111.05,1.7,63.82425 +2704,46,30,2.5,111.05,1.7,63.824 +2705,46,30,2.5,111.05,1.7,63.82375 +2706,46,30,2.5,111.05,1.7,63.8235 +2707,46,30,2.5,111.05,1.7,63.82325 +2708,46,30,2.5,111.05,1.7,63.823 +2709,46,30,2.5,111.05,1.7,63.82275 +2710,46,30,2.5,111.05,1.7,63.8225 +2711,46,30,2.5,111.05,1.7,63.82225 +2712,46,30,2.5,111.05,1.7,63.822 +2713,46,30,2.5,111.05,1.7,63.82175 +2714,46,30,2.5,111.05,1.7,63.8215 +2715,46,30,2.5,111.05,1.7,63.82125 +2716,46,30,2.5,111.05,1.7,63.821 +2717,46,30,2.5,111.05,1.7,63.82075 +2718,46,30,2.5,111.05,1.7,63.8205 +2719,46,30,2.5,111.05,1.7,63.82025 +2720,46,30,2.5,111.05,1.7,63.82 +2721,46,30,2.5,111.05,1.7,63.81975 +2722,46,30,2.5,111.05,1.7,63.8195 +2723,46,30,2.5,111.05,1.7,63.81925 +2724,46,30,2.5,111.05,1.7,63.819 +2725,46,30,2.5,111.05,1.7,63.81875 +2726,46,30,2.5,111.05,1.7,63.8185 +2727,46,30,2.5,111.05,1.7,63.81825 +2728,46,30,2.5,111.05,1.7,63.818 +2729,46,30,2.5,111.05,1.7,63.81775 +2730,46,30,2.5,111.05,1.7,63.8175 +2731,46,30,2.5,111.05,1.7,63.81725 +2732,46,30,2.5,111.05,1.7,63.817 +2733,46,30,2.5,111.05,1.7,63.81675 +2734,46,30,2.5,111.05,1.7,63.8165 +2735,46,30,2.5,111.05,1.7,63.81625 +2736,46,30,2.5,111.05,1.7,63.816 +2737,46,30,2.5,111.05,1.7,63.81575 +2738,46,30,2.5,111.05,1.7,63.8155 +2739,46,30,2.5,111.05,1.7,63.81525 +2740,46,30,2.5,111.05,1.7,63.815 +2741,46,30,2.5,111.05,1.7,63.81475 +2742,46,30,2.5,111.05,1.7,63.8145 +2743,46,30,2.5,111.05,1.7,63.81425 +2744,46,30,2.5,111.05,1.7,63.814 +2745,46,30,2.5,111.05,1.7,63.81375 +2746,46,30,2.5,111.05,1.7,63.8135 +2747,46,30,2.5,111.05,1.7,63.81325 +2748,46,30,2.5,111.05,1.7,63.813 +2749,46,30,2.5,111.05,1.7,63.81275 +2750,46,30,2.5,111.05,1.7,63.8125 +2751,46,30,2.5,111.05,1.7,63.81225 +2752,46,30,2.5,111.05,1.7,63.812 +2753,46,30,2.5,111.05,1.7,63.81175 +2754,46,30,2.5,111.05,1.7,63.8115 +2755,46,30,2.5,111.05,1.7,63.81125 +2756,46,30,2.5,111.05,1.7,63.811 +2757,46,30,2.5,111.05,1.7,63.81075 +2758,46,30,2.5,111.05,1.7,63.8105 +2759,46,30,2.5,111.05,1.7,63.81025 +2760,46,30,2.5,111.05,1.7,63.81 +2761,46,30,2.5,111.05,1.7,63.80975 +2762,46,30,2.5,111.05,1.7,63.8095 +2763,46,30,2.5,111.05,1.7,63.80925 +2764,46,30,2.5,111.05,1.7,63.809 +2765,46,30,2.5,111.05,1.7,63.80875 +2766,46,30,2.5,111.05,1.7,63.8085 +2767,46,30,2.5,111.05,1.7,63.80825 +2768,46,30,2.5,111.05,1.7,63.808 +2769,46,30,2.5,111.05,1.7,63.80775 +2770,46,30,2.5,111.05,1.7,63.8075 +2771,46,30,2.5,111.05,1.7,63.80725 +2772,46,30,2.5,111.05,1.7,63.807 +2773,46,30,2.5,111.05,1.7,63.80675 +2774,46,30,2.5,111.05,1.7,63.8065 +2775,46,30,2.5,111.05,1.7,63.80625 +2776,46,30,2.5,111.05,1.7,63.806 +2777,46,30,2.5,111.05,1.7,63.80575 +2778,46,30,2.5,111.05,1.7,63.8055 +2779,46,30,2.5,111.05,1.7,63.80525 +2780,46,30,2.5,111.05,1.7,63.805 +2781,46,30,2.5,111.05,1.7,63.80475 +2782,46,30,2.5,111.05,1.7,63.8045 +2783,46,30,2.5,111.05,1.7,63.80425 +2784,46,30,2.5,111.05,1.7,63.804 +2785,46,30,2.5,111.05,1.7,63.80375 +2786,46,30,2.5,111.05,1.7,63.8035 +2787,46,30,2.5,111.05,1.7,63.80325 +2788,46,30,2.5,111.05,1.7,63.803 +2789,46,30,2.5,111.05,1.7,63.80275 +2790,46,30,2.5,111.05,1.7,63.8025 +2791,46,30,2.5,111.05,1.7,63.80225 +2792,46,30,2.5,111.05,1.7,63.802 +2793,46,30,2.5,111.05,1.7,63.80175 +2794,46,30,2.5,111.05,1.7,63.8015 +2795,46,30,2.5,111.05,1.7,63.80125 +2796,46,30,2.5,111.05,1.7,63.801 +2797,46,30,2.5,111.05,1.7,63.80075 +2798,46,30,2.5,111.05,1.7,63.8005 +2799,46,30,2.5,111.05,1.7,63.80025 +2800,46,30,2.5,111.05,1.7,63.8 +2801,46,30,2.5,111.05,1.7,63.79975 +2802,46,30,2.5,111.05,1.7,63.7995 +2803,46,30,2.5,111.05,1.7,63.79925 +2804,46,30,2.5,111.05,1.7,63.799 +2805,46,30,2.5,111.05,1.7,63.79875 +2806,46,30,2.5,111.05,1.7,63.7985 +2807,46,30,2.5,111.05,1.7,63.79825 +2808,46,30,2.5,111.05,1.7,63.798 +2809,46,30,2.5,111.05,1.7,63.79775 +2810,46,30,2.5,111.05,1.7,63.7975 +2811,46,30,2.5,111.05,1.7,63.79725 +2812,46,30,2.5,111.05,1.7,63.797 +2813,46,30,2.5,111.05,1.7,63.79675 +2814,46,30,2.5,111.05,1.7,63.7965 +2815,46,30,2.5,111.05,1.7,63.79625 +2816,46,30,2.5,111.05,1.7,63.796 +2817,46,30,2.5,111.05,1.7,63.79575 +2818,46,30,2.5,111.05,1.7,63.7955 +2819,46,30,2.5,111.05,1.7,63.79525 +2820,46,30,2.5,111.05,1.7,63.795 +2821,46,30,2.5,111.05,1.7,63.79475 +2822,46,30,2.5,111.05,1.7,63.7945 +2823,46,30,2.5,111.05,1.7,63.79425 +2824,46,30,2.5,111.05,1.7,63.794 +2825,46,30,2.5,111.05,1.7,63.79375 +2826,46,30,2.5,111.05,1.7,63.7935 +2827,46,30,2.5,111.05,1.7,63.79325 +2828,46,30,2.5,111.05,1.7,63.793 +2829,46,30,2.5,111.05,1.7,63.79275 +2830,46,30,2.5,111.05,1.7,63.7925 +2831,46,30,2.5,111.05,1.7,63.79225 +2832,46,30,2.5,111.05,1.7,63.792 +2833,46,30,2.5,111.05,1.7,63.79175 +2834,46,30,2.5,111.05,1.7,63.7915 +2835,46,30,2.5,111.05,1.7,63.79125 +2836,46,30,2.5,111.05,1.7,63.791 +2837,46,30,2.5,111.05,1.7,63.79075 +2838,46,30,2.5,111.05,1.7,63.7905 +2839,46,30,2.5,111.05,1.7,63.79025 +2840,46,30,2.5,111.05,1.7,63.79 +2841,46,30,2.5,111.05,1.7,63.78975 +2842,46,30,2.5,111.05,1.7,63.7895 +2843,46,30,2.5,111.05,1.7,63.78925 +2844,46,30,2.5,111.05,1.7,63.789 +2845,46,30,2.5,111.05,1.7,63.78875 +2846,46,30,2.5,111.05,1.7,63.7885 +2847,46,30,2.5,111.05,1.7,63.78825 +2848,46,30,2.5,111.05,1.7,63.788 +2849,46,30,2.5,111.05,1.7,63.78775 +2850,46,30,2.5,111.05,1.7,63.7875 +2851,46,30,2.5,111.05,1.7,63.78725 +2852,46,30,2.5,111.05,1.7,63.787 +2853,46,30,2.5,111.05,1.7,63.78675 +2854,46,30,2.5,111.05,1.7,63.7865 +2855,46,30,2.5,111.05,1.7,63.78625 +2856,46,30,2.5,111.05,1.7,63.786 +2857,46,30,2.5,111.05,1.7,63.78575 +2858,46,30,2.5,111.05,1.7,63.7855 +2859,46,30,2.5,111.05,1.7,63.78525 +2860,46,30,2.5,111.05,1.7,63.785 +2861,46,30,2.5,111.05,1.7,63.78475 +2862,46,30,2.5,111.05,1.7,63.7845 +2863,46,30,2.5,111.05,1.7,63.78425 +2864,46,30,2.5,111.05,1.7,63.784 +2865,46,30,2.5,111.05,1.7,63.78375 +2866,46,30,2.5,111.05,1.7,63.7835 +2867,46,30,2.5,111.05,1.7,63.78325 +2868,46,30,2.5,111.05,1.7,63.783 +2869,46,30,2.5,111.05,1.7,63.78275 +2870,46,30,2.5,111.05,1.7,63.7825 +2871,46,30,2.5,111.05,1.7,63.78225 +2872,46,30,2.5,111.05,1.7,63.782 +2873,46,30,2.5,111.05,1.7,63.78175 +2874,46,30,2.5,111.05,1.7,63.7815 +2875,46,30,2.5,111.05,1.7,63.78125 +2876,46,30,2.5,111.05,1.7,63.781 +2877,46,30,2.5,111.05,1.7,63.78075 +2878,46,30,2.5,111.05,1.7,63.7805 +2879,46,30,2.5,111.05,1.7,63.78025 +2880,46,30,2.5,111.05,1.7,63.78 +2881,46,30,2.5,111.05,1.7,63.77975 +2882,46,30,2.5,111.05,1.7,63.7795 +2883,46,30,2.5,111.05,1.7,63.77925 +2884,46,30,2.5,111.05,1.7,63.779 +2885,46,30,2.5,111.05,1.7,63.77875 +2886,46,30,2.5,111.05,1.7,63.7785 +2887,46,30,2.5,111.05,1.7,63.77825 +2888,46,30,2.5,111.05,1.7,63.778 +2889,46,30,2.5,111.05,1.7,63.77775 +2890,46,30,2.5,111.05,1.7,63.7775 +2891,46,30,2.5,111.05,1.7,63.77725 +2892,46,30,2.5,111.05,1.7,63.777 +2893,46,30,2.5,111.05,1.7,63.77675 +2894,46,30,2.5,111.05,1.7,63.7765 +2895,46,30,2.5,111.05,1.7,63.77625 +2896,46,30,2.5,111.05,1.7,63.776 +2897,46,30,2.5,111.05,1.7,63.77575 +2898,46,30,2.5,111.05,1.7,63.7755 +2899,46,30,2.5,111.05,1.7,63.77525 +2900,46,30,2.5,111.05,1.7,63.775 +2901,46,30,2.5,111.05,1.7,63.77475 +2902,46,30,2.5,111.05,1.7,63.7745 +2903,46,30,2.5,111.05,1.7,63.77425 +2904,46,30,2.5,111.05,1.7,63.774 +2905,46,30,2.5,111.05,1.7,63.77375 +2906,46,30,2.5,111.05,1.7,63.7735 +2907,46,30,2.5,111.05,1.7,63.77325 +2908,46,30,2.5,111.05,1.7,63.773 +2909,46,30,2.5,111.05,1.7,63.77275 +2910,46,30,2.5,111.05,1.7,63.7725 +2911,46,30,2.5,111.05,1.7,63.77225 +2912,46,30,2.5,111.05,1.7,63.772 +2913,46,30,2.5,111.05,1.7,63.77175 +2914,46,30,2.5,111.05,1.7,63.7715 +2915,46,30,2.5,111.05,1.7,63.77125 +2916,46,30,2.5,111.05,1.7,63.771 +2917,46,30,2.5,111.05,1.7,63.77075 +2918,46,30,2.5,111.05,1.7,63.7705 +2919,46,30,2.5,111.05,1.7,63.77025 +2920,46,30,2.5,111.05,1.7,63.77 +2921,46,30,2.5,111.05,1.7,63.76975 +2922,46,30,2.5,111.05,1.7,63.7695 +2923,46,30,2.5,111.05,1.7,63.76925 +2924,46,30,2.5,111.05,1.7,63.769 +2925,46,30,2.5,111.05,1.7,63.76875 +2926,46,30,2.5,111.05,1.7,63.7685 +2927,46,30,2.5,111.05,1.7,63.76825 +2928,46,30,2.5,111.05,1.7,63.768 +2929,46,30,2.5,111.05,1.7,63.76775 +2930,46,30,2.5,111.05,1.7,63.7675 +2931,46,30,2.5,111.05,1.7,63.76725 +2932,46,30,2.5,111.05,1.7,63.767 +2933,46,30,2.5,111.05,1.7,63.76675 +2934,46,30,2.5,111.05,1.7,63.7665 +2935,46,30,2.5,111.05,1.7,63.76625 +2936,46,30,2.5,111.05,1.7,63.766 +2937,46,30,2.5,111.05,1.7,63.76575 +2938,46,30,2.5,111.05,1.7,63.7655 +2939,46,30,2.5,111.05,1.7,63.76525 +2940,46,30,2.5,111.05,1.7,63.765 +2941,46,30,2.5,111.05,1.7,63.76475 +2942,46,30,2.5,111.05,1.7,63.7645 +2943,46,30,2.5,111.05,1.7,63.76425 +2944,46,30,2.5,111.05,1.7,63.764 +2945,46,30,2.5,111.05,1.7,63.76375 +2946,46,30,2.5,111.05,1.7,63.7635 +2947,46,30,2.5,111.05,1.7,63.76325 +2948,46,30,2.5,111.05,1.7,63.763 +2949,46,30,2.5,111.05,1.7,63.76275 +2950,46,30,2.5,111.05,1.7,63.7625 +2951,46,30,2.5,111.05,1.7,63.76225 +2952,46,30,2.5,111.05,1.7,63.762 +2953,46,30,2.5,111.05,1.7,63.76175 +2954,46,30,2.5,111.05,1.7,63.7615 +2955,46,30,2.5,111.05,1.7,63.76125 +2956,46,30,2.5,111.05,1.7,63.761 +2957,46,30,2.5,111.05,1.7,63.76075 +2958,46,30,2.5,111.05,1.7,63.7605 +2959,46,30,2.5,111.05,1.7,63.76025 +2960,46,30,2.5,111.05,1.7,63.76 +2961,46,30,2.5,111.05,1.7,63.75975 +2962,46,30,2.5,111.05,1.7,63.7595 +2963,46,30,2.5,111.05,1.7,63.75925 +2964,46,30,2.5,111.05,1.7,63.759 +2965,46,30,2.5,111.05,1.7,63.75875 +2966,46,30,2.5,111.05,1.7,63.7585 +2967,46,30,2.5,111.05,1.7,63.75825 +2968,46,30,2.5,111.05,1.7,63.758 +2969,46,30,2.5,111.05,1.7,63.75775 +2970,46,30,2.5,111.05,1.7,63.7575 +2971,46,30,2.5,111.05,1.7,63.75725 +2972,46,30,2.5,111.05,1.7,63.757 +2973,46,30,2.5,111.05,1.7,63.75675 +2974,46,30,2.5,111.05,1.7,63.7565 +2975,46,30,2.5,111.05,1.7,63.75625 +2976,46,30,2.5,111.05,1.7,63.756 +2977,46,30,2.5,111.05,1.7,63.75575 +2978,46,30,2.5,111.05,1.7,63.7555 +2979,46,30,2.5,111.05,1.7,63.75525 +2980,46,30,2.5,111.05,1.7,63.755 +2981,46,30,2.5,111.05,1.7,63.75475 +2982,46,30,2.5,111.05,1.7,63.7545 +2983,46,30,2.5,111.05,1.7,63.75425 +2984,46,30,2.5,111.05,1.7,63.754 +2985,46,30,2.5,111.05,1.7,63.75375 +2986,46,30,2.5,111.05,1.7,63.7535 +2987,46,30,2.5,111.05,1.7,63.75325 +2988,46,30,2.5,111.05,1.7,63.753 +2989,46,30,2.5,111.05,1.7,63.75275 +2990,46,30,2.5,111.05,1.7,63.7525 +2991,46,30,2.5,111.05,1.7,63.75225 +2992,46,30,2.5,111.05,1.7,63.752 +2993,46,30,2.5,111.05,1.7,63.75175 +2994,46,30,2.5,111.05,1.7,63.7515 +2995,46,30,2.5,111.05,1.7,63.75125 +2996,46,30,2.5,111.05,1.7,63.751 +2997,46,30,2.5,111.05,1.7,63.75075 +2998,46,30,2.5,111.05,1.7,63.7505 +2999,46,30,2.5,111.05,1.7,63.75025 +3000,46,30,2.5,111.05,1.7,63.75 +3001,46,30,2.5,111.05,1.7,63.75 +3002,46,30,2.5,111.05,1.7,63.75 +3003,46,30,2.5,111.05,1.7,63.75 +3004,46,30,2.5,111.05,1.7,63.75 +3005,46,30,2.5,111.05,1.7,63.75 +3006,46,30,2.5,111.05,1.7,63.75 +3007,46,30,2.5,111.05,1.7,63.75 +3008,46,30,2.5,111.05,1.7,63.75 +3009,46,30,2.5,111.05,1.7,63.75 +3010,46,30,2.5,111.05,1.7,63.75 +3011,46,30,2.5,111.05,1.7,63.75 +3012,46,30,2.5,111.05,1.7,63.75 +3013,46,30,2.5,111.05,1.7,63.75 +3014,46,30,2.5,111.05,1.7,63.75 +3015,46,30,2.5,111.05,1.7,63.75 +3016,46,30,2.5,111.05,1.7,63.75 +3017,46,30,2.5,111.05,1.7,63.75 +3018,46,30,2.5,111.05,1.7,63.75 +3019,46,30,2.5,111.05,1.7,63.75 +3020,46,30,2.5,111.05,1.7,63.75 +3021,46,30,2.5,111.05,1.7,63.75 +3022,46,30,2.5,111.05,1.7,63.75 +3023,46,30,2.5,111.05,1.7,63.75 +3024,46,30,2.5,111.05,1.7,63.75 +3025,46,30,2.5,111.05,1.7,63.75 +3026,46,30,2.5,111.05,1.7,63.75 +3027,46,30,2.5,111.05,1.7,63.75 +3028,46,30,2.5,111.05,1.7,63.75 +3029,46,30,2.5,111.05,1.7,63.75 +3030,46,30,2.5,111.05,1.7,63.75 +3031,46,30,2.5,111.05,1.7,63.75 +3032,46,30,2.5,111.05,1.7,63.75 +3033,46,30,2.5,111.05,1.7,63.75 +3034,46,30,2.5,111.05,1.7,63.75 +3035,46,30,2.5,111.05,1.7,63.75 +3036,46,30,2.5,111.05,1.7,63.75 +3037,46,30,2.5,111.05,1.7,63.75 +3038,46,30,2.5,111.05,1.7,63.75 +3039,46,30,2.5,111.05,1.7,63.75 +3040,46,30,2.5,111.05,1.7,63.75 +3041,46,30,2.5,111.05,1.7,63.75 +3042,46,30,2.5,111.05,1.7,63.75 +3043,46,30,2.5,111.05,1.7,63.75 +3044,46,30,2.5,111.05,1.7,63.75 +3045,46,30,2.5,111.05,1.7,63.75 +3046,46,30,2.5,111.05,1.7,63.75 +3047,46,30,2.5,111.05,1.7,63.75 +3048,46,30,2.5,111.05,1.7,63.75 +3049,46,30,2.5,111.05,1.7,63.75 +3050,46,30,2.5,111.05,1.7,63.75 +3051,46,30,2.5,111.05,1.7,63.75 +3052,46,30,2.5,111.05,1.7,63.75 +3053,46,30,2.5,111.05,1.7,63.75 +3054,46,30,2.5,111.05,1.7,63.75 +3055,46,30,2.5,111.05,1.7,63.75 +3056,46,30,2.5,111.05,1.7,63.75 +3057,46,30,2.5,111.05,1.7,63.75 +3058,46,30,2.5,111.05,1.7,63.75 +3059,46,30,2.5,111.05,1.7,63.75 +3060,46,30,2.5,111.05,1.7,63.75 +3061,46,30,2.5,111.05,1.7,63.75 +3062,46,30,2.5,111.05,1.7,63.75 +3063,46,30,2.5,111.05,1.7,63.75 +3064,46,30,2.5,111.05,1.7,63.75 +3065,46,30,2.5,111.05,1.7,63.75 +3066,46,30,2.5,111.05,1.7,63.75 +3067,46,30,2.5,111.05,1.7,63.75 +3068,46,30,2.5,111.05,1.7,63.75 +3069,46,30,2.5,111.05,1.7,63.75 +3070,46,30,2.5,111.05,1.7,63.75 +3071,46,30,2.5,111.05,1.7,63.75 +3072,46,30,2.5,111.05,1.7,63.75 +3073,46,30,2.5,111.05,1.7,63.75 +3074,46,30,2.5,111.05,1.7,63.75 +3075,46,30,2.5,111.05,1.7,63.75 +3076,46,30,2.5,111.05,1.7,63.75 +3077,46,30,2.5,111.05,1.7,63.75 +3078,46,30,2.5,111.05,1.7,63.75 +3079,46,30,2.5,111.05,1.7,63.75 +3080,46,30,2.5,111.05,1.7,63.75 +3081,46,30,2.5,111.05,1.7,63.75 +3082,46,30,2.5,111.05,1.7,63.75 +3083,46,30,2.5,111.05,1.7,63.75 +3084,46,30,2.5,111.05,1.7,63.75 +3085,46,30,2.5,111.05,1.7,63.75 +3086,46,30,2.5,111.05,1.7,63.75 +3087,46,30,2.5,111.05,1.7,63.75 +3088,46,30,2.5,111.05,1.7,63.75 +3089,46,30,2.5,111.05,1.7,63.75 +3090,46,30,2.5,111.05,1.7,63.75 +3091,46,30,2.5,111.05,1.7,63.75 +3092,46,30,2.5,111.05,1.7,63.75 +3093,46,30,2.5,111.05,1.7,63.75 +3094,46,30,2.5,111.05,1.7,63.75 +3095,46,30,2.5,111.05,1.7,63.75 +3096,46,30,2.5,111.05,1.7,63.75 +3097,46,30,2.5,111.05,1.7,63.75 +3098,46,30,2.5,111.05,1.7,63.75 +3099,46,30,2.5,111.05,1.7,63.75 +3100,46,30,2.5,111.05,1.7,63.75 +3101,46,30,2.5,111.05,1.7,63.75 +3102,46,30,2.5,111.05,1.7,63.75 +3103,46,30,2.5,111.05,1.7,63.75 +3104,46,30,2.5,111.05,1.7,63.75 +3105,46,30,2.5,111.05,1.7,63.75 +3106,46,30,2.5,111.05,1.7,63.75 +3107,46,30,2.5,111.05,1.7,63.75 +3108,46,30,2.5,111.05,1.7,63.75 +3109,46,30,2.5,111.05,1.7,63.75 +3110,46,30,2.5,111.05,1.7,63.75 +3111,46,30,2.5,111.05,1.7,63.75 +3112,46,30,2.5,111.05,1.7,63.75 +3113,46,30,2.5,111.05,1.7,63.75 +3114,46,30,2.5,111.05,1.7,63.75 +3115,46,30,2.5,111.05,1.7,63.75 +3116,46,30,2.5,111.05,1.7,63.75 +3117,46,30,2.5,111.05,1.7,63.75 +3118,46,30,2.5,111.05,1.7,63.75 +3119,46,30,2.5,111.05,1.7,63.75 +3120,46,30,2.5,111.05,1.7,63.75 +3121,46,30,2.5,111.05,1.7,63.75 +3122,46,30,2.5,111.05,1.7,63.75 +3123,46,30,2.5,111.05,1.7,63.75 +3124,46,30,2.5,111.05,1.7,63.75 +3125,46,30,2.5,111.05,1.7,63.75 +3126,46,30,2.5,111.05,1.7,63.75 +3127,46,30,2.5,111.05,1.7,63.75 +3128,46,30,2.5,111.05,1.7,63.75 +3129,46,30,2.5,111.05,1.7,63.75 +3130,46,30,2.5,111.05,1.7,63.75 +3131,46,30,2.5,111.05,1.7,63.75 +3132,46,30,2.5,111.05,1.7,63.75 +3133,46,30,2.5,111.05,1.7,63.75 +3134,46,30,2.5,111.05,1.7,63.75 +3135,46,30,2.5,111.05,1.7,63.75 +3136,46,30,2.5,111.05,1.7,63.75 +3137,46,30,2.5,111.05,1.7,63.75 +3138,46,30,2.5,111.05,1.7,63.75 +3139,46,30,2.5,111.05,1.7,63.75 +3140,46,30,2.5,111.05,1.7,63.75 +3141,46,30,2.5,111.05,1.7,63.75 +3142,46,30,2.5,111.05,1.7,63.75 +3143,46,30,2.5,111.05,1.7,63.75 +3144,46,30,2.5,111.05,1.7,63.75 +3145,46,30,2.5,111.05,1.7,63.75 +3146,46,30,2.5,111.05,1.7,63.75 +3147,46,30,2.5,111.05,1.7,63.75 +3148,46,30,2.5,111.05,1.7,63.75 +3149,46,30,2.5,111.05,1.7,63.75 +3150,46,30,2.5,111.05,1.7,63.75 +3151,46,30,2.5,111.05,1.7,63.75 +3152,46,30,2.5,111.05,1.7,63.75 +3153,46,30,2.5,111.05,1.7,63.75 +3154,46,30,2.5,111.05,1.7,63.75 +3155,46,30,2.5,111.05,1.7,63.75 +3156,46,30,2.5,111.05,1.7,63.75 +3157,46,30,2.5,111.05,1.7,63.75 +3158,46,30,2.5,111.05,1.7,63.75 +3159,46,30,2.5,111.05,1.7,63.75 +3160,46,30,2.5,111.05,1.7,63.75 +3161,46,30,2.5,111.05,1.7,63.75 +3162,46,30,2.5,111.05,1.7,63.75 +3163,46,30,2.5,111.05,1.7,63.75 +3164,46,30,2.5,111.05,1.7,63.75 +3165,46,30,2.5,111.05,1.7,63.75 +3166,46,30,2.5,111.05,1.7,63.75 +3167,46,30,2.5,111.05,1.7,63.75 +3168,46,30,2.5,111.05,1.7,63.75 +3169,46,30,2.5,111.05,1.7,63.75 +3170,46,30,2.5,111.05,1.7,63.75 +3171,46,30,2.5,111.05,1.7,63.75 +3172,46,30,2.5,111.05,1.7,63.75 +3173,46,30,2.5,111.05,1.7,63.75 +3174,46,30,2.5,111.05,1.7,63.75 +3175,46,30,2.5,111.05,1.7,63.75 +3176,46,30,2.5,111.05,1.7,63.75 +3177,46,30,2.5,111.05,1.7,63.75 +3178,46,30,2.5,111.05,1.7,63.75 +3179,46,30,2.5,111.05,1.7,63.75 +3180,46,30,2.5,111.05,1.7,63.75 +3181,46,30,2.5,111.05,1.7,63.75 +3182,46,30,2.5,111.05,1.7,63.75 +3183,46,30,2.5,111.05,1.7,63.75 +3184,46,30,2.5,111.05,1.7,63.75 +3185,46,30,2.5,111.05,1.7,63.75 +3186,46,30,2.5,111.05,1.7,63.75 +3187,46,30,2.5,111.05,1.7,63.75 +3188,46,30,2.5,111.05,1.7,63.75 +3189,46,30,2.5,111.05,1.7,63.75 +3190,46,30,2.5,111.05,1.7,63.75 +3191,46,30,2.5,111.05,1.7,63.75 +3192,46,30,2.5,111.05,1.7,63.75 +3193,46,30,2.5,111.05,1.7,63.75 +3194,46,30,2.5,111.05,1.7,63.75 +3195,46,30,2.5,111.05,1.7,63.75 +3196,46,30,2.5,111.05,1.7,63.75 +3197,46,30,2.5,111.05,1.7,63.75 +3198,46,30,2.5,111.05,1.7,63.75 +3199,46,30,2.5,111.05,1.7,63.75 +3200,46,30,2.5,111.05,1.7,63.75 +3201,46,30,2.5,111.05,1.7,63.75 +3202,46,30,2.5,111.05,1.7,63.75 +3203,46,30,2.5,111.05,1.7,63.75 +3204,46,30,2.5,111.05,1.7,63.75 +3205,46,30,2.5,111.05,1.7,63.75 +3206,46,30,2.5,111.05,1.7,63.75 +3207,46,30,2.5,111.05,1.7,63.75 +3208,46,30,2.5,111.05,1.7,63.75 +3209,46,30,2.5,111.05,1.7,63.75 +3210,46,30,2.5,111.05,1.7,63.75 +3211,46,30,2.5,111.05,1.7,63.75 +3212,46,30,2.5,111.05,1.7,63.75 +3213,46,30,2.5,111.05,1.7,63.75 +3214,46,30,2.5,111.05,1.7,63.75 +3215,46,30,2.5,111.05,1.7,63.75 +3216,46,30,2.5,111.05,1.7,63.75 +3217,46,30,2.5,111.05,1.7,63.75 +3218,46,30,2.5,111.05,1.7,63.75 +3219,46,30,2.5,111.05,1.7,63.75 +3220,46,30,2.5,111.05,1.7,63.75 +3221,46,30,2.5,111.05,1.7,63.75 +3222,46,30,2.5,111.05,1.7,63.75 +3223,46,30,2.5,111.05,1.7,63.75 +3224,46,30,2.5,111.05,1.7,63.75 +3225,46,30,2.5,111.05,1.7,63.75 +3226,46,30,2.5,111.05,1.7,63.75 +3227,46,30,2.5,111.05,1.7,63.75 +3228,46,30,2.5,111.05,1.7,63.75 +3229,46,30,2.5,111.05,1.7,63.75 +3230,46,30,2.5,111.05,1.7,63.75 +3231,46,30,2.5,111.05,1.7,63.75 +3232,46,30,2.5,111.05,1.7,63.75 +3233,46,30,2.5,111.05,1.7,63.75 +3234,46,30,2.5,111.05,1.7,63.75 +3235,46,30,2.5,111.05,1.7,63.75 +3236,46,30,2.5,111.05,1.7,63.75 +3237,46,30,2.5,111.05,1.7,63.75 +3238,46,30,2.5,111.05,1.7,63.75 +3239,46,30,2.5,111.05,1.7,63.75 +3240,46,30,2.5,111.05,1.7,63.75 +3241,46,30,2.5,111.05,1.7,63.75 +3242,46,30,2.5,111.05,1.7,63.75 +3243,46,30,2.5,111.05,1.7,63.75 +3244,46,30,2.5,111.05,1.7,63.75 +3245,46,30,2.5,111.05,1.7,63.75 +3246,46,30,2.5,111.05,1.7,63.75 +3247,46,30,2.5,111.05,1.7,63.75 +3248,46,30,2.5,111.05,1.7,63.75 +3249,46,30,2.5,111.05,1.7,63.75 +3250,46,30,2.5,111.05,1.7,63.75 +3251,46,30,2.5,111.05,1.7,63.75 +3252,46,30,2.5,111.05,1.7,63.75 +3253,46,30,2.5,111.05,1.7,63.75 +3254,46,30,2.5,111.05,1.7,63.75 +3255,46,30,2.5,111.05,1.7,63.75 +3256,46,30,2.5,111.05,1.7,63.75 +3257,46,30,2.5,111.05,1.7,63.75 +3258,46,30,2.5,111.05,1.7,63.75 +3259,46,30,2.5,111.05,1.7,63.75 +3260,46,30,2.5,111.05,1.7,63.75 +3261,46,30,2.5,111.05,1.7,63.75 +3262,46,30,2.5,111.05,1.7,63.75 +3263,46,30,2.5,111.05,1.7,63.75 +3264,46,30,2.5,111.05,1.7,63.75 +3265,46,30,2.5,111.05,1.7,63.75 +3266,46,30,2.5,111.05,1.7,63.75 +3267,46,30,2.5,111.05,1.7,63.75 +3268,46,30,2.5,111.05,1.7,63.75 +3269,46,30,2.5,111.05,1.7,63.75 +3270,46,30,2.5,111.05,1.7,63.75 +3271,46,30,2.5,111.05,1.7,63.75 +3272,46,30,2.5,111.05,1.7,63.75 +3273,46,30,2.5,111.05,1.7,63.75 +3274,46,30,2.5,111.05,1.7,63.75 +3275,46,30,2.5,111.05,1.7,63.75 +3276,46,30,2.5,111.05,1.7,63.75 +3277,46,30,2.5,111.05,1.7,63.75 +3278,46,30,2.5,111.05,1.7,63.75 +3279,46,30,2.5,111.05,1.7,63.75 +3280,46,30,2.5,111.05,1.7,63.75 +3281,46,30,2.5,111.05,1.7,63.75 +3282,46,30,2.5,111.05,1.7,63.75 +3283,46,30,2.5,111.05,1.7,63.75 +3284,46,30,2.5,111.05,1.7,63.75 +3285,46,30,2.5,111.05,1.7,63.75 +3286,46,30,2.5,111.05,1.7,63.75 +3287,46,30,2.5,111.05,1.7,63.75 +3288,46,30,2.5,111.05,1.7,63.75 +3289,46,30,2.5,111.05,1.7,63.75 +3290,46,30,2.5,111.05,1.7,63.75 +3291,46,30,2.5,111.05,1.7,63.75 +3292,46,30,2.5,111.05,1.7,63.75 +3293,46,30,2.5,111.05,1.7,63.75 +3294,46,30,2.5,111.05,1.7,63.75 +3295,46,30,2.5,111.05,1.7,63.75 +3296,46,30,2.5,111.05,1.7,63.75 +3297,46,30,2.5,111.05,1.7,63.75 +3298,46,30,2.5,111.05,1.7,63.75 +3299,46,30,2.5,111.05,1.7,63.75 +3300,46,30,2.5,111.05,1.7,63.75 +3301,46,30,2.5,111.05,1.7,63.75 +3302,46,30,2.5,111.05,1.7,63.75 +3303,46,30,2.5,111.05,1.7,63.75 +3304,46,30,2.5,111.05,1.7,63.75 +3305,46,30,2.5,111.05,1.7,63.75 +3306,46,30,2.5,111.05,1.7,63.75 +3307,46,30,2.5,111.05,1.7,63.75 +3308,46,30,2.5,111.05,1.7,63.75 +3309,46,30,2.5,111.05,1.7,63.75 +3310,46,30,2.5,111.05,1.7,63.75 +3311,46,30,2.5,111.05,1.7,63.75 +3312,46,30,2.5,111.05,1.7,63.75 +3313,46,30,2.5,111.05,1.7,63.75 +3314,46,30,2.5,111.05,1.7,63.75 +3315,46,30,2.5,111.05,1.7,63.75 +3316,46,30,2.5,111.05,1.7,63.75 +3317,46,30,2.5,111.05,1.7,63.75 +3318,46,30,2.5,111.05,1.7,63.75 +3319,46,30,2.5,111.05,1.7,63.75 +3320,46,30,2.5,111.05,1.7,63.75 +3321,46,30,2.5,111.05,1.7,63.75 +3322,46,30,2.5,111.05,1.7,63.75 +3323,46,30,2.5,111.05,1.7,63.75 +3324,46,30,2.5,111.05,1.7,63.75 +3325,46,30,2.5,111.05,1.7,63.75 +3326,46,30,2.5,111.05,1.7,63.75 +3327,46,30,2.5,111.05,1.7,63.75 +3328,46,30,2.5,111.05,1.7,63.75 +3329,46,30,2.5,111.05,1.7,63.75 +3330,46,30,2.5,111.05,1.7,63.75 +3331,46,30,2.5,111.05,1.7,63.75 +3332,46,30,2.5,111.05,1.7,63.75 +3333,46,30,2.5,111.05,1.7,63.75 +3334,46,30,2.5,111.05,1.7,63.75 +3335,46,30,2.5,111.05,1.7,63.75 +3336,46,30,2.5,111.05,1.7,63.75 +3337,46,30,2.5,111.05,1.7,63.75 +3338,46,30,2.5,111.05,1.7,63.75 +3339,46,30,2.5,111.05,1.7,63.75 +3340,46,30,2.5,111.05,1.7,63.75 +3341,46,30,2.5,111.05,1.7,63.75 +3342,46,30,2.5,111.05,1.7,63.75 +3343,46,30,2.5,111.05,1.7,63.75 +3344,46,30,2.5,111.05,1.7,63.75 +3345,46,30,2.5,111.05,1.7,63.75 +3346,46,30,2.5,111.05,1.7,63.75 +3347,46,30,2.5,111.05,1.7,63.75 +3348,46,30,2.5,111.05,1.7,63.75 +3349,46,30,2.5,111.05,1.7,63.75 +3350,46,30,2.5,111.05,1.7,63.75 +3351,46,30,2.5,111.05,1.7,63.75 +3352,46,30,2.5,111.05,1.7,63.75 +3353,46,30,2.5,111.05,1.7,63.75 +3354,46,30,2.5,111.05,1.7,63.75 +3355,46,30,2.5,111.05,1.7,63.75 +3356,46,30,2.5,111.05,1.7,63.75 +3357,46,30,2.5,111.05,1.7,63.75 +3358,46,30,2.5,111.05,1.7,63.75 +3359,46,30,2.5,111.05,1.7,63.75 +3360,46,30,2.5,111.05,1.7,63.75 +3361,46,30,2.5,111.05,1.7,63.75 +3362,46,30,2.5,111.05,1.7,63.75 +3363,46,30,2.5,111.05,1.7,63.75 +3364,46,30,2.5,111.05,1.7,63.75 +3365,46,30,2.5,111.05,1.7,63.75 +3366,46,30,2.5,111.05,1.7,63.75 +3367,46,30,2.5,111.05,1.7,63.75 +3368,46,30,2.5,111.05,1.7,63.75 +3369,46,30,2.5,111.05,1.7,63.75 +3370,46,30,2.5,111.05,1.7,63.75 +3371,46,30,2.5,111.05,1.7,63.75 +3372,46,30,2.5,111.05,1.7,63.75 +3373,46,30,2.5,111.05,1.7,63.75 +3374,46,30,2.5,111.05,1.7,63.75 +3375,46,30,2.5,111.05,1.7,63.75 +3376,46,30,2.5,111.05,1.7,63.75 +3377,46,30,2.5,111.05,1.7,63.75 +3378,46,30,2.5,111.05,1.7,63.75 +3379,46,30,2.5,111.05,1.7,63.75 +3380,46,30,2.5,111.05,1.7,63.75 +3381,46,30,2.5,111.05,1.7,63.75 +3382,46,30,2.5,111.05,1.7,63.75 +3383,46,30,2.5,111.05,1.7,63.75 +3384,46,30,2.5,111.05,1.7,63.75 +3385,46,30,2.5,111.05,1.7,63.75 +3386,46,30,2.5,111.05,1.7,63.75 +3387,46,30,2.5,111.05,1.7,63.75 +3388,46,30,2.5,111.05,1.7,63.75 +3389,46,30,2.5,111.05,1.7,63.75 +3390,46,30,2.5,111.05,1.7,63.75 +3391,46,30,2.5,111.05,1.7,63.75 +3392,46,30,2.5,111.05,1.7,63.75 +3393,46,30,2.5,111.05,1.7,63.75 +3394,46,30,2.5,111.05,1.7,63.75 +3395,46,30,2.5,111.05,1.7,63.75 +3396,46,30,2.5,111.05,1.7,63.75 +3397,46,30,2.5,111.05,1.7,63.75 +3398,46,30,2.5,111.05,1.7,63.75 +3399,46,30,2.5,111.05,1.7,63.75 +3400,46,30,2.5,111.05,1.7,63.75 +3401,46,30,2.5,111.05,1.7,63.75 +3402,46,30,2.5,111.05,1.7,63.75 +3403,46,30,2.5,111.05,1.7,63.75 +3404,46,30,2.5,111.05,1.7,63.75 +3405,46,30,2.5,111.05,1.7,63.75 +3406,46,30,2.5,111.05,1.7,63.75 +3407,46,30,2.5,111.05,1.7,63.75 +3408,46,30,2.5,111.05,1.7,63.75 +3409,46,30,2.5,111.05,1.7,63.75 +3410,46,30,2.5,111.05,1.7,63.75 +3411,46,30,2.5,111.05,1.7,63.75 +3412,46,30,2.5,111.05,1.7,63.75 +3413,46,30,2.5,111.05,1.7,63.75 +3414,46,30,2.5,111.05,1.7,63.75 +3415,46,30,2.5,111.05,1.7,63.75 +3416,46,30,2.5,111.05,1.7,63.75 +3417,46,30,2.5,111.05,1.7,63.75 +3418,46,30,2.5,111.05,1.7,63.75 +3419,46,30,2.5,111.05,1.7,63.75 +3420,46,30,2.5,111.05,1.7,63.75 +3421,46,30,2.5,111.05,1.7,63.75 +3422,46,30,2.5,111.05,1.7,63.75 +3423,46,30,2.5,111.05,1.7,63.75 +3424,46,30,2.5,111.05,1.7,63.75 +3425,46,30,2.5,111.05,1.7,63.75 +3426,46,30,2.5,111.05,1.7,63.75 +3427,46,30,2.5,111.05,1.7,63.75 +3428,46,30,2.5,111.05,1.7,63.75 +3429,46,30,2.5,111.05,1.7,63.75 +3430,46,30,2.5,111.05,1.7,63.75 +3431,46,30,2.5,111.05,1.7,63.75 +3432,46,30,2.5,111.05,1.7,63.75 +3433,46,30,2.5,111.05,1.7,63.75 +3434,46,30,2.5,111.05,1.7,63.75 +3435,46,30,2.5,111.05,1.7,63.75 +3436,46,30,2.5,111.05,1.7,63.75 +3437,46,30,2.5,111.05,1.7,63.75 +3438,46,30,2.5,111.05,1.7,63.75 +3439,46,30,2.5,111.05,1.7,63.75 +3440,46,30,2.5,111.05,1.7,63.75 +3441,46,30,2.5,111.05,1.7,63.75 +3442,46,30,2.5,111.05,1.7,63.75 +3443,46,30,2.5,111.05,1.7,63.75 +3444,46,30,2.5,111.05,1.7,63.75 +3445,46,30,2.5,111.05,1.7,63.75 +3446,46,30,2.5,111.05,1.7,63.75 +3447,46,30,2.5,111.05,1.7,63.75 +3448,46,30,2.5,111.05,1.7,63.75 +3449,46,30,2.5,111.05,1.7,63.75 +3450,46,30,2.5,111.05,1.7,63.75 +3451,46,30,2.5,111.05,1.7,63.75 +3452,46,30,2.5,111.05,1.7,63.75 +3453,46,30,2.5,111.05,1.7,63.75 +3454,46,30,2.5,111.05,1.7,63.75 +3455,46,30,2.5,111.05,1.7,63.75 +3456,46,30,2.5,111.05,1.7,63.75 +3457,46,30,2.5,111.05,1.7,63.75 +3458,46,30,2.5,111.05,1.7,63.75 +3459,46,30,2.5,111.05,1.7,63.75 +3460,46,30,2.5,111.05,1.7,63.75 +3461,46,30,2.5,111.05,1.7,63.75 +3462,46,30,2.5,111.05,1.7,63.75 +3463,46,30,2.5,111.05,1.7,63.75 +3464,46,30,2.5,111.05,1.7,63.75 +3465,46,30,2.5,111.05,1.7,63.75 +3466,46,30,2.5,111.05,1.7,63.75 +3467,46,30,2.5,111.05,1.7,63.75 +3468,46,30,2.5,111.05,1.7,63.75 +3469,46,30,2.5,111.05,1.7,63.75 +3470,46,30,2.5,111.05,1.7,63.75 +3471,46,30,2.5,111.05,1.7,63.75 +3472,46,30,2.5,111.05,1.7,63.75 +3473,46,30,2.5,111.05,1.7,63.75 +3474,46,30,2.5,111.05,1.7,63.75 +3475,46,30,2.5,111.05,1.7,63.75 +3476,46,30,2.5,111.05,1.7,63.75 +3477,46,30,2.5,111.05,1.7,63.75 +3478,46,30,2.5,111.05,1.7,63.75 +3479,46,30,2.5,111.05,1.7,63.75 +3480,46,30,2.5,111.05,1.7,63.75 +3481,46,30,2.5,111.05,1.7,63.75 +3482,46,30,2.5,111.05,1.7,63.75 +3483,46,30,2.5,111.05,1.7,63.75 +3484,46,30,2.5,111.05,1.7,63.75 +3485,46,30,2.5,111.05,1.7,63.75 +3486,46,30,2.5,111.05,1.7,63.75 +3487,46,30,2.5,111.05,1.7,63.75 +3488,46,30,2.5,111.05,1.7,63.75 +3489,46,30,2.5,111.05,1.7,63.75 +3490,46,30,2.5,111.05,1.7,63.75 +3491,46,30,2.5,111.05,1.7,63.75 +3492,46,30,2.5,111.05,1.7,63.75 +3493,46,30,2.5,111.05,1.7,63.75 +3494,46,30,2.5,111.05,1.7,63.75 +3495,46,30,2.5,111.05,1.7,63.75 +3496,46,30,2.5,111.05,1.7,63.75 +3497,46,30,2.5,111.05,1.7,63.75 +3498,46,30,2.5,111.05,1.7,63.75 +3499,46,30,2.5,111.05,1.7,63.75 +3500,46,30,2.5,111.05,1.7,63.75 +3501,46,30,2.5,111.05,1.7,63.75 +3502,46,30,2.5,111.05,1.7,63.75 +3503,46,30,2.5,111.05,1.7,63.75 +3504,46,30,2.5,111.05,1.7,63.75 +3505,46,30,2.5,111.05,1.7,63.75 +3506,46,30,2.5,111.05,1.7,63.75 +3507,46,30,2.5,111.05,1.7,63.75 +3508,46,30,2.5,111.05,1.7,63.75 +3509,46,30,2.5,111.05,1.7,63.75 +3510,46,30,2.5,111.05,1.7,63.75 +3511,46,30,2.5,111.05,1.7,63.75 +3512,46,30,2.5,111.05,1.7,63.75 +3513,46,30,2.5,111.05,1.7,63.75 +3514,46,30,2.5,111.05,1.7,63.75 +3515,46,30,2.5,111.05,1.7,63.75 +3516,46,30,2.5,111.05,1.7,63.75 +3517,46,30,2.5,111.05,1.7,63.75 +3518,46,30,2.5,111.05,1.7,63.75 +3519,46,30,2.5,111.05,1.7,63.75 +3520,46,30,2.5,111.05,1.7,63.75 +3521,46,30,2.5,111.05,1.7,63.75 +3522,46,30,2.5,111.05,1.7,63.75 +3523,46,30,2.5,111.05,1.7,63.75 +3524,46,30,2.5,111.05,1.7,63.75 +3525,46,30,2.5,111.05,1.7,63.75 +3526,46,30,2.5,111.05,1.7,63.75 +3527,46,30,2.5,111.05,1.7,63.75 +3528,46,30,2.5,111.05,1.7,63.75 +3529,46,30,2.5,111.05,1.7,63.75 +3530,46,30,2.5,111.05,1.7,63.75 +3531,46,30,2.5,111.05,1.7,63.75 +3532,46,30,2.5,111.05,1.7,63.75 +3533,46,30,2.5,111.05,1.7,63.75 +3534,46,30,2.5,111.05,1.7,63.75 +3535,46,30,2.5,111.05,1.7,63.75 +3536,46,30,2.5,111.05,1.7,63.75 +3537,46,30,2.5,111.05,1.7,63.75 +3538,46,30,2.5,111.05,1.7,63.75 +3539,46,30,2.5,111.05,1.7,63.75 +3540,46,30,2.5,111.05,1.7,63.75 +3541,46,30,2.5,111.05,1.7,63.75 +3542,46,30,2.5,111.05,1.7,63.75 +3543,46,30,2.5,111.05,1.7,63.75 +3544,46,30,2.5,111.05,1.7,63.75 +3545,46,30,2.5,111.05,1.7,63.75 +3546,46,30,2.5,111.05,1.7,63.75 +3547,46,30,2.5,111.05,1.7,63.75 +3548,46,30,2.5,111.05,1.7,63.75 +3549,46,30,2.5,111.05,1.7,63.75 +3550,46,30,2.5,111.05,1.7,63.75 +3551,46,30,2.5,111.05,1.7,63.75 +3552,46,30,2.5,111.05,1.7,63.75 +3553,46,30,2.5,111.05,1.7,63.75 +3554,46,30,2.5,111.05,1.7,63.75 +3555,46,30,2.5,111.05,1.7,63.75 +3556,46,30,2.5,111.05,1.7,63.75 +3557,46,30,2.5,111.05,1.7,63.75 +3558,46,30,2.5,111.05,1.7,63.75 +3559,46,30,2.5,111.05,1.7,63.75 +3560,46,30,2.5,111.05,1.7,63.75 +3561,46,30,2.5,111.05,1.7,63.75 +3562,46,30,2.5,111.05,1.7,63.75 +3563,46,30,2.5,111.05,1.7,63.75 +3564,46,30,2.5,111.05,1.7,63.75 +3565,46,30,2.5,111.05,1.7,63.75 +3566,46,30,2.5,111.05,1.7,63.75 +3567,46,30,2.5,111.05,1.7,63.75 +3568,46,30,2.5,111.05,1.7,63.75 +3569,46,30,2.5,111.05,1.7,63.75 +3570,46,30,2.5,111.05,1.7,63.75 +3571,46,30,2.5,111.05,1.7,63.75 +3572,46,30,2.5,111.05,1.7,63.75 +3573,46,30,2.5,111.05,1.7,63.75 +3574,46,30,2.5,111.05,1.7,63.75 +3575,46,30,2.5,111.05,1.7,63.75 +3576,46,30,2.5,111.05,1.7,63.75 +3577,46,30,2.5,111.05,1.7,63.75 +3578,46,30,2.5,111.05,1.7,63.75 +3579,46,30,2.5,111.05,1.7,63.75 +3580,46,30,2.5,111.05,1.7,63.75 +3581,46,30,2.5,111.05,1.7,63.75 +3582,46,30,2.5,111.05,1.7,63.75 +3583,46,30,2.5,111.05,1.7,63.75 +3584,46,30,2.5,111.05,1.7,63.75 +3585,46,30,2.5,111.05,1.7,63.75 +3586,46,30,2.5,111.05,1.7,63.75 +3587,46,30,2.5,111.05,1.7,63.75 +3588,46,30,2.5,111.05,1.7,63.75 +3589,46,30,2.5,111.05,1.7,63.75 +3590,46,30,2.5,111.05,1.7,63.75 +3591,46,30,2.5,111.05,1.7,63.75 +3592,46,30,2.5,111.05,1.7,63.75 +3593,46,30,2.5,111.05,1.7,63.75 +3594,46,30,2.5,111.05,1.7,63.75 +3595,46,30,2.5,111.05,1.7,63.75 +3596,46,30,2.5,111.05,1.7,63.75 +3597,46,30,2.5,111.05,1.7,63.75 +3598,46,30,2.5,111.05,1.7,63.75 +3599,46,30,2.5,111.05,1.7,63.75 +3600,46,30,2.5,111.05,1.7,63.75 +3601,46,30,2.5,111.05,1.7,63.75 +3602,46,30,2.5,111.05,1.7,63.75 +3603,46,30,2.5,111.05,1.7,63.75 +3604,46,30,2.5,111.05,1.7,63.75 +3605,46,30,2.5,111.05,1.7,63.75 +3606,46,30,2.5,111.05,1.7,63.75 +3607,46,30,2.5,111.05,1.7,63.75 +3608,46,30,2.5,111.05,1.7,63.75 +3609,46,30,2.5,111.05,1.7,63.75 +3610,46,30,2.5,111.05,1.7,63.75 +3611,46,30,2.5,111.05,1.7,63.75 +3612,46,30,2.5,111.05,1.7,63.75 +3613,46,30,2.5,111.05,1.7,63.75 +3614,46,30,2.5,111.05,1.7,63.75 +3615,46,30,2.5,111.05,1.7,63.75 +3616,46,30,2.5,111.05,1.7,63.75 +3617,46,30,2.5,111.05,1.7,63.75 +3618,46,30,2.5,111.05,1.7,63.75 +3619,46,30,2.5,111.05,1.7,63.75 +3620,46,30,2.5,111.05,1.7,63.75 +3621,46,30,2.5,111.05,1.7,63.75 +3622,46,30,2.5,111.05,1.7,63.75 +3623,46,30,2.5,111.05,1.7,63.75 +3624,46,30,2.5,111.05,1.7,63.75 +3625,46,30,2.5,111.05,1.7,63.75 +3626,46,30,2.5,111.05,1.7,63.75 +3627,46,30,2.5,111.05,1.7,63.75 +3628,46,30,2.5,111.05,1.7,63.75 +3629,46,30,2.5,111.05,1.7,63.75 +3630,46,30,2.5,111.05,1.7,63.75 +3631,46,30,2.5,111.05,1.7,63.75 +3632,46,30,2.5,111.05,1.7,63.75 +3633,46,30,2.5,111.05,1.7,63.75 +3634,46,30,2.5,111.05,1.7,63.75 +3635,46,30,2.5,111.05,1.7,63.75 +3636,46,30,2.5,111.05,1.7,63.75 +3637,46,30,2.5,111.05,1.7,63.75 +3638,46,30,2.5,111.05,1.7,63.75 +3639,46,30,2.5,111.05,1.7,63.75 +3640,46,30,2.5,111.05,1.7,63.75 +3641,46,30,2.5,111.05,1.7,63.75 +3642,46,30,2.5,111.05,1.7,63.75 +3643,46,30,2.5,111.05,1.7,63.75 +3644,46,30,2.5,111.05,1.7,63.75 +3645,46,30,2.5,111.05,1.7,63.75 +3646,46,30,2.5,111.05,1.7,63.75 +3647,46,30,2.5,111.05,1.7,63.75 +3648,46,30,2.5,111.05,1.7,63.75 +3649,46,30,2.5,111.05,1.7,63.75 +3650,46,30,2.5,111.05,1.7,63.75 +3651,46,30,2.5,111.05,1.7,63.75 +3652,46,30,2.5,111.05,1.7,63.75 +3653,46,30,2.5,111.05,1.7,63.75 +3654,46,30,2.5,111.05,1.7,63.75 +3655,46,30,2.5,111.05,1.7,63.75 +3656,46,30,2.5,111.05,1.7,63.75 +3657,46,30,2.5,111.05,1.7,63.75 +3658,46,30,2.5,111.05,1.7,63.75 +3659,46,30,2.5,111.05,1.7,63.75 +3660,46,30,2.5,111.05,1.7,63.75 +3661,46,30,2.5,111.05,1.7,63.75 +3662,46,30,2.5,111.05,1.7,63.75 +3663,46,30,2.5,111.05,1.7,63.75 +3664,46,30,2.5,111.05,1.7,63.75 +3665,46,30,2.5,111.05,1.7,63.75 +3666,46,30,2.5,111.05,1.7,63.75 +3667,46,30,2.5,111.05,1.7,63.75 +3668,46,30,2.5,111.05,1.7,63.75 +3669,46,30,2.5,111.05,1.7,63.75 +3670,46,30,2.5,111.05,1.7,63.75 +3671,46,30,2.5,111.05,1.7,63.75 +3672,46,30,2.5,111.05,1.7,63.75 +3673,46,30,2.5,111.05,1.7,63.75 +3674,46,30,2.5,111.05,1.7,63.75 +3675,46,30,2.5,111.05,1.7,63.75 +3676,46,30,2.5,111.05,1.7,63.75 +3677,46,30,2.5,111.05,1.7,63.75 +3678,46,30,2.5,111.05,1.7,63.75 +3679,46,30,2.5,111.05,1.7,63.75 +3680,46,30,2.5,111.05,1.7,63.75 +3681,46,30,2.5,111.05,1.7,63.75 +3682,46,30,2.5,111.05,1.7,63.75 +3683,46,30,2.5,111.05,1.7,63.75 +3684,46,30,2.5,111.05,1.7,63.75 +3685,46,30,2.5,111.05,1.7,63.75 +3686,46,30,2.5,111.05,1.7,63.75 +3687,46,30,2.5,111.05,1.7,63.75 +3688,46,30,2.5,111.05,1.7,63.75 +3689,46,30,2.5,111.05,1.7,63.75 +3690,46,30,2.5,111.05,1.7,63.75 +3691,46,30,2.5,111.05,1.7,63.75 +3692,46,30,2.5,111.05,1.7,63.75 +3693,46,30,2.5,111.05,1.7,63.75 +3694,46,30,2.5,111.05,1.7,63.75 +3695,46,30,2.5,111.05,1.7,63.75 +3696,46,30,2.5,111.05,1.7,63.75 +3697,46,30,2.5,111.05,1.7,63.75 +3698,46,30,2.5,111.05,1.7,63.75 +3699,46,30,2.5,111.05,1.7,63.75 +3700,46,30,2.5,111.05,1.7,63.75 +3701,46,30,2.5,111.05,1.7,63.75 +3702,46,30,2.5,111.05,1.7,63.75 +3703,46,30,2.5,111.05,1.7,63.75 +3704,46,30,2.5,111.05,1.7,63.75 +3705,46,30,2.5,111.05,1.7,63.75 +3706,46,30,2.5,111.05,1.7,63.75 +3707,46,30,2.5,111.05,1.7,63.75 +3708,46,30,2.5,111.05,1.7,63.75 +3709,46,30,2.5,111.05,1.7,63.75 +3710,46,30,2.5,111.05,1.7,63.75 +3711,46,30,2.5,111.05,1.7,63.75 +3712,46,30,2.5,111.05,1.7,63.75 +3713,46,30,2.5,111.05,1.7,63.75 +3714,46,30,2.5,111.05,1.7,63.75 +3715,46,30,2.5,111.05,1.7,63.75 +3716,46,30,2.5,111.05,1.7,63.75 +3717,46,30,2.5,111.05,1.7,63.75 +3718,46,30,2.5,111.05,1.7,63.75 +3719,46,30,2.5,111.05,1.7,63.75 +3720,46,30,2.5,111.05,1.7,63.75 +3721,46,30,2.5,111.05,1.7,63.75 +3722,46,30,2.5,111.05,1.7,63.75 +3723,46,30,2.5,111.05,1.7,63.75 +3724,46,30,2.5,111.05,1.7,63.75 +3725,46,30,2.5,111.05,1.7,63.75 +3726,46,30,2.5,111.05,1.7,63.75 +3727,46,30,2.5,111.05,1.7,63.75 +3728,46,30,2.5,111.05,1.7,63.75 +3729,46,30,2.5,111.05,1.7,63.75 +3730,46,30,2.5,111.05,1.7,63.75 +3731,46,30,2.5,111.05,1.7,63.75 +3732,46,30,2.5,111.05,1.7,63.75 +3733,46,30,2.5,111.05,1.7,63.75 +3734,46,30,2.5,111.05,1.7,63.75 +3735,46,30,2.5,111.05,1.7,63.75 +3736,46,30,2.5,111.05,1.7,63.75 +3737,46,30,2.5,111.05,1.7,63.75 +3738,46,30,2.5,111.05,1.7,63.75 +3739,46,30,2.5,111.05,1.7,63.75 +3740,46,30,2.5,111.05,1.7,63.75 +3741,46,30,2.5,111.05,1.7,63.75 +3742,46,30,2.5,111.05,1.7,63.75 +3743,46,30,2.5,111.05,1.7,63.75 +3744,46,30,2.5,111.05,1.7,63.75 +3745,46,30,2.5,111.05,1.7,63.75 +3746,46,30,2.5,111.05,1.7,63.75 +3747,46,30,2.5,111.05,1.7,63.75 +3748,46,30,2.5,111.05,1.7,63.75 +3749,46,30,2.5,111.05,1.7,63.75 +3750,46,30,2.5,111.05,1.7,63.75 +3751,46,30,2.5,111.05,1.7,63.75 +3752,46,30,2.5,111.05,1.7,63.75 +3753,46,30,2.5,111.05,1.7,63.75 +3754,46,30,2.5,111.05,1.7,63.75 +3755,46,30,2.5,111.05,1.7,63.75 +3756,46,30,2.5,111.05,1.7,63.75 +3757,46,30,2.5,111.05,1.7,63.75 +3758,46,30,2.5,111.05,1.7,63.75 +3759,46,30,2.5,111.05,1.7,63.75 +3760,46,30,2.5,111.05,1.7,63.75 +3761,46,30,2.5,111.05,1.7,63.75 +3762,46,30,2.5,111.05,1.7,63.75 +3763,46,30,2.5,111.05,1.7,63.75 +3764,46,30,2.5,111.05,1.7,63.75 +3765,46,30,2.5,111.05,1.7,63.75 +3766,46,30,2.5,111.05,1.7,63.75 +3767,46,30,2.5,111.05,1.7,63.75 +3768,46,30,2.5,111.05,1.7,63.75 +3769,46,30,2.5,111.05,1.7,63.75 +3770,46,30,2.5,111.05,1.7,63.75 +3771,46,30,2.5,111.05,1.7,63.75 +3772,46,30,2.5,111.05,1.7,63.75 +3773,46,30,2.5,111.05,1.7,63.75 +3774,46,30,2.5,111.05,1.7,63.75 +3775,46,30,2.5,111.05,1.7,63.75 +3776,46,30,2.5,111.05,1.7,63.75 +3777,46,30,2.5,111.05,1.7,63.75 +3778,46,30,2.5,111.05,1.7,63.75 +3779,46,30,2.5,111.05,1.7,63.75 +3780,46,30,2.5,111.05,1.7,63.75 +3781,46,30,2.5,111.05,1.7,63.75 +3782,46,30,2.5,111.05,1.7,63.75 +3783,46,30,2.5,111.05,1.7,63.75 +3784,46,30,2.5,111.05,1.7,63.75 +3785,46,30,2.5,111.05,1.7,63.75 +3786,46,30,2.5,111.05,1.7,63.75 +3787,46,30,2.5,111.05,1.7,63.75 +3788,46,30,2.5,111.05,1.7,63.75 +3789,46,30,2.5,111.05,1.7,63.75 +3790,46,30,2.5,111.05,1.7,63.75 +3791,46,30,2.5,111.05,1.7,63.75 +3792,46,30,2.5,111.05,1.7,63.75 +3793,46,30,2.5,111.05,1.7,63.75 +3794,46,30,2.5,111.05,1.7,63.75 +3795,46,30,2.5,111.05,1.7,63.75 +3796,46,30,2.5,111.05,1.7,63.75 +3797,46,30,2.5,111.05,1.7,63.75 +3798,46,30,2.5,111.05,1.7,63.75 +3799,46,30,2.5,111.05,1.7,63.75 +3800,46,30,2.5,111.05,1.7,63.75 +3801,46,30,2.5,111.05,1.7,63.75 +3802,46,30,2.5,111.05,1.7,63.75 +3803,46,30,2.5,111.05,1.7,63.75 +3804,46,30,2.5,111.05,1.7,63.75 +3805,46,30,2.5,111.05,1.7,63.75 +3806,46,30,2.5,111.05,1.7,63.75 +3807,46,30,2.5,111.05,1.7,63.75 +3808,46,30,2.5,111.05,1.7,63.75 +3809,46,30,2.5,111.05,1.7,63.75 +3810,46,30,2.5,111.05,1.7,63.75 +3811,46,30,2.5,111.05,1.7,63.75 +3812,46,30,2.5,111.05,1.7,63.75 +3813,46,30,2.5,111.05,1.7,63.75 +3814,46,30,2.5,111.05,1.7,63.75 +3815,46,30,2.5,111.05,1.7,63.75 +3816,46,30,2.5,111.05,1.7,63.75 +3817,46,30,2.5,111.05,1.7,63.75 +3818,46,30,2.5,111.05,1.7,63.75 +3819,46,30,2.5,111.05,1.7,63.75 +3820,46,30,2.5,111.05,1.7,63.75 +3821,46,30,2.5,111.05,1.7,63.75 +3822,46,30,2.5,111.05,1.7,63.75 +3823,46,30,2.5,111.05,1.7,63.75 +3824,46,30,2.5,111.05,1.7,63.75 +3825,46,30,2.5,111.05,1.7,63.75 +3826,46,30,2.5,111.05,1.7,63.75 +3827,46,30,2.5,111.05,1.7,63.75 +3828,46,30,2.5,111.05,1.7,63.75 +3829,46,30,2.5,111.05,1.7,63.75 +3830,46,30,2.5,111.05,1.7,63.75 +3831,46,30,2.5,111.05,1.7,63.75 +3832,46,30,2.5,111.05,1.7,63.75 +3833,46,30,2.5,111.05,1.7,63.75 +3834,46,30,2.5,111.05,1.7,63.75 +3835,46,30,2.5,111.05,1.7,63.75 +3836,46,30,2.5,111.05,1.7,63.75 +3837,46,30,2.5,111.05,1.7,63.75 +3838,46,30,2.5,111.05,1.7,63.75 +3839,46,30,2.5,111.05,1.7,63.75 +3840,46,30,2.5,111.05,1.7,63.75 +3841,46,30,2.5,111.05,1.7,63.75 +3842,46,30,2.5,111.05,1.7,63.75 +3843,46,30,2.5,111.05,1.7,63.75 +3844,46,30,2.5,111.05,1.7,63.75 +3845,46,30,2.5,111.05,1.7,63.75 +3846,46,30,2.5,111.05,1.7,63.75 +3847,46,30,2.5,111.05,1.7,63.75 +3848,46,30,2.5,111.05,1.7,63.75 +3849,46,30,2.5,111.05,1.7,63.75 +3850,46,30,2.5,111.05,1.7,63.75 +3851,46,30,2.5,111.05,1.7,63.75 +3852,46,30,2.5,111.05,1.7,63.75 +3853,46,30,2.5,111.05,1.7,63.75 +3854,46,30,2.5,111.05,1.7,63.75 +3855,46,30,2.5,111.05,1.7,63.75 +3856,46,30,2.5,111.05,1.7,63.75 +3857,46,30,2.5,111.05,1.7,63.75 +3858,46,30,2.5,111.05,1.7,63.75 +3859,46,30,2.5,111.05,1.7,63.75 +3860,46,30,2.5,111.05,1.7,63.75 +3861,46,30,2.5,111.05,1.7,63.75 +3862,46,30,2.5,111.05,1.7,63.75 +3863,46,30,2.5,111.05,1.7,63.75 +3864,46,30,2.5,111.05,1.7,63.75 +3865,46,30,2.5,111.05,1.7,63.75 +3866,46,30,2.5,111.05,1.7,63.75 +3867,46,30,2.5,111.05,1.7,63.75 +3868,46,30,2.5,111.05,1.7,63.75 +3869,46,30,2.5,111.05,1.7,63.75 +3870,46,30,2.5,111.05,1.7,63.75 +3871,46,30,2.5,111.05,1.7,63.75 +3872,46,30,2.5,111.05,1.7,63.75 +3873,46,30,2.5,111.05,1.7,63.75 +3874,46,30,2.5,111.05,1.7,63.75 +3875,46,30,2.5,111.05,1.7,63.75 +3876,46,30,2.5,111.05,1.7,63.75 +3877,46,30,2.5,111.05,1.7,63.75 +3878,46,30,2.5,111.05,1.7,63.75 +3879,46,30,2.5,111.05,1.7,63.75 +3880,46,30,2.5,111.05,1.7,63.75 +3881,46,30,2.5,111.05,1.7,63.75 +3882,46,30,2.5,111.05,1.7,63.75 +3883,46,30,2.5,111.05,1.7,63.75 +3884,46,30,2.5,111.05,1.7,63.75 +3885,46,30,2.5,111.05,1.7,63.75 +3886,46,30,2.5,111.05,1.7,63.75 +3887,46,30,2.5,111.05,1.7,63.75 +3888,46,30,2.5,111.05,1.7,63.75 +3889,46,30,2.5,111.05,1.7,63.75 +3890,46,30,2.5,111.05,1.7,63.75 +3891,46,30,2.5,111.05,1.7,63.75 +3892,46,30,2.5,111.05,1.7,63.75 +3893,46,30,2.5,111.05,1.7,63.75 +3894,46,30,2.5,111.05,1.7,63.75 +3895,46,30,2.5,111.05,1.7,63.75 +3896,46,30,2.5,111.05,1.7,63.75 +3897,46,30,2.5,111.05,1.7,63.75 +3898,46,30,2.5,111.05,1.7,63.75 +3899,46,30,2.5,111.05,1.7,63.75 +3900,46,30,2.5,111.05,1.7,63.75 +3901,46,30,2.5,111.05,1.7,63.75 +3902,46,30,2.5,111.05,1.7,63.75 +3903,46,30,2.5,111.05,1.7,63.75 +3904,46,30,2.5,111.05,1.7,63.75 +3905,46,30,2.5,111.05,1.7,63.75 +3906,46,30,2.5,111.05,1.7,63.75 +3907,46,30,2.5,111.05,1.7,63.75 +3908,46,30,2.5,111.05,1.7,63.75 +3909,46,30,2.5,111.05,1.7,63.75 +3910,46,30,2.5,111.05,1.7,63.75 +3911,46,30,2.5,111.05,1.7,63.75 +3912,46,30,2.5,111.05,1.7,63.75 +3913,46,30,2.5,111.05,1.7,63.75 +3914,46,30,2.5,111.05,1.7,63.75 +3915,46,30,2.5,111.05,1.7,63.75 +3916,46,30,2.5,111.05,1.7,63.75 +3917,46,30,2.5,111.05,1.7,63.75 +3918,46,30,2.5,111.05,1.7,63.75 +3919,46,30,2.5,111.05,1.7,63.75 +3920,46,30,2.5,111.05,1.7,63.75 +3921,46,30,2.5,111.05,1.7,63.75 +3922,46,30,2.5,111.05,1.7,63.75 +3923,46,30,2.5,111.05,1.7,63.75 +3924,46,30,2.5,111.05,1.7,63.75 +3925,46,30,2.5,111.05,1.7,63.75 +3926,46,30,2.5,111.05,1.7,63.75 +3927,46,30,2.5,111.05,1.7,63.75 +3928,46,30,2.5,111.05,1.7,63.75 +3929,46,30,2.5,111.05,1.7,63.75 +3930,46,30,2.5,111.05,1.7,63.75 +3931,46,30,2.5,111.05,1.7,63.75 +3932,46,30,2.5,111.05,1.7,63.75 +3933,46,30,2.5,111.05,1.7,63.75 +3934,46,30,2.5,111.05,1.7,63.75 +3935,46,30,2.5,111.05,1.7,63.75 +3936,46,30,2.5,111.05,1.7,63.75 +3937,46,30,2.5,111.05,1.7,63.75 +3938,46,30,2.5,111.05,1.7,63.75 +3939,46,30,2.5,111.05,1.7,63.75 +3940,46,30,2.5,111.05,1.7,63.75 +3941,46,30,2.5,111.05,1.7,63.75 +3942,46,30,2.5,111.05,1.7,63.75 +3943,46,30,2.5,111.05,1.7,63.75 +3944,46,30,2.5,111.05,1.7,63.75 +3945,46,30,2.5,111.05,1.7,63.75 +3946,46,30,2.5,111.05,1.7,63.75 +3947,46,30,2.5,111.05,1.7,63.75 +3948,46,30,2.5,111.05,1.7,63.75 +3949,46,30,2.5,111.05,1.7,63.75 +3950,46,30,2.5,111.05,1.7,63.75 +3951,46,30,2.5,111.05,1.7,63.75 +3952,46,30,2.5,111.05,1.7,63.75 +3953,46,30,2.5,111.05,1.7,63.75 +3954,46,30,2.5,111.05,1.7,63.75 +3955,46,30,2.5,111.05,1.7,63.75 +3956,46,30,2.5,111.05,1.7,63.75 +3957,46,30,2.5,111.05,1.7,63.75 +3958,46,30,2.5,111.05,1.7,63.75 +3959,46,30,2.5,111.05,1.7,63.75 +3960,46,30,2.5,111.05,1.7,63.75 +3961,46,30,2.5,111.05,1.7,63.75 +3962,46,30,2.5,111.05,1.7,63.75 +3963,46,30,2.5,111.05,1.7,63.75 +3964,46,30,2.5,111.05,1.7,63.75 +3965,46,30,2.5,111.05,1.7,63.75 +3966,46,30,2.5,111.05,1.7,63.75 +3967,46,30,2.5,111.05,1.7,63.75 +3968,46,30,2.5,111.05,1.7,63.75 +3969,46,30,2.5,111.05,1.7,63.75 +3970,46,30,2.5,111.05,1.7,63.75 +3971,46,30,2.5,111.05,1.7,63.75 +3972,46,30,2.5,111.05,1.7,63.75 +3973,46,30,2.5,111.05,1.7,63.75 +3974,46,30,2.5,111.05,1.7,63.75 +3975,46,30,2.5,111.05,1.7,63.75 +3976,46,30,2.5,111.05,1.7,63.75 +3977,46,30,2.5,111.05,1.7,63.75 +3978,46,30,2.5,111.05,1.7,63.75 +3979,46,30,2.5,111.05,1.7,63.75 +3980,46,30,2.5,111.05,1.7,63.75 +3981,46,30,2.5,111.05,1.7,63.75 +3982,46,30,2.5,111.05,1.7,63.75 +3983,46,30,2.5,111.05,1.7,63.75 +3984,46,30,2.5,111.05,1.7,63.75 +3985,46,30,2.5,111.05,1.7,63.75 +3986,46,30,2.5,111.05,1.7,63.75 +3987,46,30,2.5,111.05,1.7,63.75 +3988,46,30,2.5,111.05,1.7,63.75 +3989,46,30,2.5,111.05,1.7,63.75 +3990,46,30,2.5,111.05,1.7,63.75 +3991,46,30,2.5,111.05,1.7,63.75 +3992,46,30,2.5,111.05,1.7,63.75 +3993,46,30,2.5,111.05,1.7,63.75 +3994,46,30,2.5,111.05,1.7,63.75 +3995,46,30,2.5,111.05,1.7,63.75 +3996,46,30,2.5,111.05,1.7,63.75 +3997,46,30,2.5,111.05,1.7,63.75 +3998,46,30,2.5,111.05,1.7,63.75 +3999,46,30,2.5,111.05,1.7,63.75 +4000,46,30,2.5,111.05,1.7,63.75 +4001,46,30,2.5,111.05,1.7,63.75 +4002,46,30,2.5,111.05,1.7,63.75 +4003,46,30,2.5,111.05,1.7,63.75 +4004,46,30,2.5,111.05,1.7,63.75 +4005,46,30,2.5,111.05,1.7,63.75 +4006,46,30,2.5,111.05,1.7,63.75 +4007,46,30,2.5,111.05,1.7,63.75 +4008,46,30,2.5,111.05,1.7,63.75 +4009,46,30,2.5,111.05,1.7,63.75 +4010,46,30,2.5,111.05,1.7,63.75 +4011,46,30,2.5,111.05,1.7,63.75 +4012,46,30,2.5,111.05,1.7,63.75 +4013,46,30,2.5,111.05,1.7,63.75 +4014,46,30,2.5,111.05,1.7,63.75 +4015,46,30,2.5,111.05,1.7,63.75 +4016,46,30,2.5,111.05,1.7,63.75 +4017,46,30,2.5,111.05,1.7,63.75 +4018,46,30,2.5,111.05,1.7,63.75 +4019,46,30,2.5,111.05,1.7,63.75 +4020,46,30,2.5,111.05,1.7,63.75 +4021,46,30,2.5,111.05,1.7,63.75 +4022,46,30,2.5,111.05,1.7,63.75 +4023,46,30,2.5,111.05,1.7,63.75 +4024,46,30,2.5,111.05,1.7,63.75 +4025,46,30,2.5,111.05,1.7,63.75 +4026,46,30,2.5,111.05,1.7,63.75 +4027,46,30,2.5,111.05,1.7,63.75 +4028,46,30,2.5,111.05,1.7,63.75 +4029,46,30,2.5,111.05,1.7,63.75 +4030,46,30,2.5,111.05,1.7,63.75 +4031,46,30,2.5,111.05,1.7,63.75 +4032,46,30,2.5,111.05,1.7,63.75 +4033,46,30,2.5,111.05,1.7,63.75 +4034,46,30,2.5,111.05,1.7,63.75 +4035,46,30,2.5,111.05,1.7,63.75 +4036,46,30,2.5,111.05,1.7,63.75 +4037,46,30,2.5,111.05,1.7,63.75 +4038,46,30,2.5,111.05,1.7,63.75 +4039,46,30,2.5,111.05,1.7,63.75 +4040,46,30,2.5,111.05,1.7,63.75 +4041,46,30,2.5,111.05,1.7,63.75 +4042,46,30,2.5,111.05,1.7,63.75 +4043,46,30,2.5,111.05,1.7,63.75 +4044,46,30,2.5,111.05,1.7,63.75 +4045,46,30,2.5,111.05,1.7,63.75 +4046,46,30,2.5,111.05,1.7,63.75 +4047,46,30,2.5,111.05,1.7,63.75 +4048,46,30,2.5,111.05,1.7,63.75 +4049,46,30,2.5,111.05,1.7,63.75 +4050,46,30,2.5,111.05,1.7,63.75 +4051,46,30,2.5,111.05,1.7,63.75 +4052,46,30,2.5,111.05,1.7,63.75 +4053,46,30,2.5,111.05,1.7,63.75 +4054,46,30,2.5,111.05,1.7,63.75 +4055,46,30,2.5,111.05,1.7,63.75 +4056,46,30,2.5,111.05,1.7,63.75 +4057,46,30,2.5,111.05,1.7,63.75 +4058,46,30,2.5,111.05,1.7,63.75 +4059,46,30,2.5,111.05,1.7,63.75 +4060,46,30,2.5,111.05,1.7,63.75 +4061,46,30,2.5,111.05,1.7,63.75 +4062,46,30,2.5,111.05,1.7,63.75 +4063,46,30,2.5,111.05,1.7,63.75 +4064,46,30,2.5,111.05,1.7,63.75 +4065,46,30,2.5,111.05,1.7,63.75 +4066,46,30,2.5,111.05,1.7,63.75 +4067,46,30,2.5,111.05,1.7,63.75 +4068,46,30,2.5,111.05,1.7,63.75 +4069,46,30,2.5,111.05,1.7,63.75 +4070,46,30,2.5,111.05,1.7,63.75 +4071,46,30,2.5,111.05,1.7,63.75 +4072,46,30,2.5,111.05,1.7,63.75 +4073,46,30,2.5,111.05,1.7,63.75 +4074,46,30,2.5,111.05,1.7,63.75 +4075,46,30,2.5,111.05,1.7,63.75 +4076,46,30,2.5,111.05,1.7,63.75 +4077,46,30,2.5,111.05,1.7,63.75 +4078,46,30,2.5,111.05,1.7,63.75 +4079,46,30,2.5,111.05,1.7,63.75 +4080,46,30,2.5,111.05,1.7,63.75 +4081,46,30,2.5,111.05,1.7,63.75 +4082,46,30,2.5,111.05,1.7,63.75 +4083,46,30,2.5,111.05,1.7,63.75 +4084,46,30,2.5,111.05,1.7,63.75 +4085,46,30,2.5,111.05,1.7,63.75 +4086,46,30,2.5,111.05,1.7,63.75 +4087,46,30,2.5,111.05,1.7,63.75 +4088,46,30,2.5,111.05,1.7,63.75 +4089,46,30,2.5,111.05,1.7,63.75 +4090,46,30,2.5,111.05,1.7,63.75 +4091,46,30,2.5,111.05,1.7,63.75 +4092,46,30,2.5,111.05,1.7,63.75 +4093,46,30,2.5,111.05,1.7,63.75 +4094,46,30,2.5,111.05,1.7,63.75 +4095,46,30,2.5,111.05,1.7,63.75 +4096,46,30,2.5,111.05,1.7,63.75 +4097,46,30,2.5,111.05,1.7,63.75 +4098,46,30,2.5,111.05,1.7,63.75 +4099,46,30,2.5,111.05,1.7,63.75 +4100,46,30,2.5,111.05,1.7,63.75 +4101,46,30,2.5,111.05,1.7,63.75 +4102,46,30,2.5,111.05,1.7,63.75 +4103,46,30,2.5,111.05,1.7,63.75 +4104,46,30,2.5,111.05,1.7,63.75 +4105,46,30,2.5,111.05,1.7,63.75 +4106,46,30,2.5,111.05,1.7,63.75 +4107,46,30,2.5,111.05,1.7,63.75 +4108,46,30,2.5,111.05,1.7,63.75 +4109,46,30,2.5,111.05,1.7,63.75 +4110,46,30,2.5,111.05,1.7,63.75 +4111,46,30,2.5,111.05,1.7,63.75 +4112,46,30,2.5,111.05,1.7,63.75 +4113,46,30,2.5,111.05,1.7,63.75 +4114,46,30,2.5,111.05,1.7,63.75 +4115,46,30,2.5,111.05,1.7,63.75 +4116,46,30,2.5,111.05,1.7,63.75 +4117,46,30,2.5,111.05,1.7,63.75 +4118,46,30,2.5,111.05,1.7,63.75 +4119,46,30,2.5,111.05,1.7,63.75 +4120,46,30,2.5,111.05,1.7,63.75 +4121,46,30,2.5,111.05,1.7,63.75 +4122,46,30,2.5,111.05,1.7,63.75 +4123,46,30,2.5,111.05,1.7,63.75 +4124,46,30,2.5,111.05,1.7,63.75 +4125,46,30,2.5,111.05,1.7,63.75 +4126,46,30,2.5,111.05,1.7,63.75 +4127,46,30,2.5,111.05,1.7,63.75 +4128,46,30,2.5,111.05,1.7,63.75 +4129,46,30,2.5,111.05,1.7,63.75 +4130,46,30,2.5,111.05,1.7,63.75 +4131,46,30,2.5,111.05,1.7,63.75 +4132,46,30,2.5,111.05,1.7,63.75 +4133,46,30,2.5,111.05,1.7,63.75 +4134,46,30,2.5,111.05,1.7,63.75 +4135,46,30,2.5,111.05,1.7,63.75 +4136,46,30,2.5,111.05,1.7,63.75 +4137,46,30,2.5,111.05,1.7,63.75 +4138,46,30,2.5,111.05,1.7,63.75 +4139,46,30,2.5,111.05,1.7,63.75 +4140,46,30,2.5,111.05,1.7,63.75 +4141,46,30,2.5,111.05,1.7,63.75 +4142,46,30,2.5,111.05,1.7,63.75 +4143,46,30,2.5,111.05,1.7,63.75 +4144,46,30,2.5,111.05,1.7,63.75 +4145,46,30,2.5,111.05,1.7,63.75 +4146,46,30,2.5,111.05,1.7,63.75 +4147,46,30,2.5,111.05,1.7,63.75 +4148,46,30,2.5,111.05,1.7,63.75 +4149,46,30,2.5,111.05,1.7,63.75 +4150,46,30,2.5,111.05,1.7,63.75 +4151,46,30,2.5,111.05,1.7,63.75 +4152,46,30,2.5,111.05,1.7,63.75 +4153,46,30,2.5,111.05,1.7,63.75 +4154,46,30,2.5,111.05,1.7,63.75 +4155,46,30,2.5,111.05,1.7,63.75 +4156,46,30,2.5,111.05,1.7,63.75 +4157,46,30,2.5,111.05,1.7,63.75 +4158,46,30,2.5,111.05,1.7,63.75 +4159,46,30,2.5,111.05,1.7,63.75 +4160,46,30,2.5,111.05,1.7,63.75 +4161,46,30,2.5,111.05,1.7,63.75 +4162,46,30,2.5,111.05,1.7,63.75 +4163,46,30,2.5,111.05,1.7,63.75 +4164,46,30,2.5,111.05,1.7,63.75 +4165,46,30,2.5,111.05,1.7,63.75 +4166,46,30,2.5,111.05,1.7,63.75 +4167,46,30,2.5,111.05,1.7,63.75 +4168,46,30,2.5,111.05,1.7,63.75 +4169,46,30,2.5,111.05,1.7,63.75 +4170,46,30,2.5,111.05,1.7,63.75 +4171,46,30,2.5,111.05,1.7,63.75 +4172,46,30,2.5,111.05,1.7,63.75 +4173,46,30,2.5,111.05,1.7,63.75 +4174,46,30,2.5,111.05,1.7,63.75 +4175,46,30,2.5,111.05,1.7,63.75 +4176,46,30,2.5,111.05,1.7,63.75 +4177,46,30,2.5,111.05,1.7,63.75 +4178,46,30,2.5,111.05,1.7,63.75 +4179,46,30,2.5,111.05,1.7,63.75 +4180,46,30,2.5,111.05,1.7,63.75 +4181,46,30,2.5,111.05,1.7,63.75 +4182,46,30,2.5,111.05,1.7,63.75 +4183,46,30,2.5,111.05,1.7,63.75 +4184,46,30,2.5,111.05,1.7,63.75 +4185,46,30,2.5,111.05,1.7,63.75 +4186,46,30,2.5,111.05,1.7,63.75 +4187,46,30,2.5,111.05,1.7,63.75 +4188,46,30,2.5,111.05,1.7,63.75 +4189,46,30,2.5,111.05,1.7,63.75 +4190,46,30,2.5,111.05,1.7,63.75 +4191,46,30,2.5,111.05,1.7,63.75 +4192,46,30,2.5,111.05,1.7,63.75 +4193,46,30,2.5,111.05,1.7,63.75 +4194,46,30,2.5,111.05,1.7,63.75 +4195,46,30,2.5,111.05,1.7,63.75 +4196,46,30,2.5,111.05,1.7,63.75 +4197,46,30,2.5,111.05,1.7,63.75 +4198,46,30,2.5,111.05,1.7,63.75 +4199,46,30,2.5,111.05,1.7,63.75 +4200,46,30,2.5,111.05,1.7,63.75 +4201,46,30,2.5,111.05,1.7,63.75 +4202,46,30,2.5,111.05,1.7,63.75 +4203,46,30,2.5,111.05,1.7,63.75 +4204,46,30,2.5,111.05,1.7,63.75 +4205,46,30,2.5,111.05,1.7,63.75 +4206,46,30,2.5,111.05,1.7,63.75 +4207,46,30,2.5,111.05,1.7,63.75 +4208,46,30,2.5,111.05,1.7,63.75 +4209,46,30,2.5,111.05,1.7,63.75 +4210,46,30,2.5,111.05,1.7,63.75 +4211,46,30,2.5,111.05,1.7,63.75 +4212,46,30,2.5,111.05,1.7,63.75 +4213,46,30,2.5,111.05,1.7,63.75 +4214,46,30,2.5,111.05,1.7,63.75 +4215,46,30,2.5,111.05,1.7,63.75 +4216,46,30,2.5,111.05,1.7,63.75 +4217,46,30,2.5,111.05,1.7,63.75 +4218,46,30,2.5,111.05,1.7,63.75 +4219,46,30,2.5,111.05,1.7,63.75 +4220,46,30,2.5,111.05,1.7,63.75 +4221,46,30,2.5,111.05,1.7,63.75 +4222,46,30,2.5,111.05,1.7,63.75 +4223,46,30,2.5,111.05,1.7,63.75 +4224,46,30,2.5,111.05,1.7,63.75 +4225,46,30,2.5,111.05,1.7,63.75 +4226,46,30,2.5,111.05,1.7,63.75 +4227,46,30,2.5,111.05,1.7,63.75 +4228,46,30,2.5,111.05,1.7,63.75 +4229,46,30,2.5,111.05,1.7,63.75 +4230,46,30,2.5,111.05,1.7,63.75 +4231,46,30,2.5,111.05,1.7,63.75 +4232,46,30,2.5,111.05,1.7,63.75 +4233,46,30,2.5,111.05,1.7,63.75 +4234,46,30,2.5,111.05,1.7,63.75 +4235,46,30,2.5,111.05,1.7,63.75 +4236,46,30,2.5,111.05,1.7,63.75 +4237,46,30,2.5,111.05,1.7,63.75 +4238,46,30,2.5,111.05,1.7,63.75 +4239,46,30,2.5,111.05,1.7,63.75 +4240,46,30,2.5,111.05,1.7,63.75 +4241,46,30,2.5,111.05,1.7,63.75 +4242,46,30,2.5,111.05,1.7,63.75 +4243,46,30,2.5,111.05,1.7,63.75 +4244,46,30,2.5,111.05,1.7,63.75 +4245,46,30,2.5,111.05,1.7,63.75 +4246,46,30,2.5,111.05,1.7,63.75 +4247,46,30,2.5,111.05,1.7,63.75 +4248,46,30,2.5,111.05,1.7,63.75 +4249,46,30,2.5,111.05,1.7,63.75 +4250,46,30,2.5,111.05,1.7,63.75 +4251,46,30,2.5,111.05,1.7,63.75 +4252,46,30,2.5,111.05,1.7,63.75 +4253,46,30,2.5,111.05,1.7,63.75 +4254,46,30,2.5,111.05,1.7,63.75 +4255,46,30,2.5,111.05,1.7,63.75 +4256,46,30,2.5,111.05,1.7,63.75 +4257,46,30,2.5,111.05,1.7,63.75 +4258,46,30,2.5,111.05,1.7,63.75 +4259,46,30,2.5,111.05,1.7,63.75 +4260,46,30,2.5,111.05,1.7,63.75 +4261,46,30,2.5,111.05,1.7,63.75 +4262,46,30,2.5,111.05,1.7,63.75 +4263,46,30,2.5,111.05,1.7,63.75 +4264,46,30,2.5,111.05,1.7,63.75 +4265,46,30,2.5,111.05,1.7,63.75 +4266,46,30,2.5,111.05,1.7,63.75 +4267,46,30,2.5,111.05,1.7,63.75 +4268,46,30,2.5,111.05,1.7,63.75 +4269,46,30,2.5,111.05,1.7,63.75 +4270,46,30,2.5,111.05,1.7,63.75 +4271,46,30,2.5,111.05,1.7,63.75 +4272,46,30,2.5,111.05,1.7,63.75 +4273,46,30,2.5,111.05,1.7,63.75 +4274,46,30,2.5,111.05,1.7,63.75 +4275,46,30,2.5,111.05,1.7,63.75 +4276,46,30,2.5,111.05,1.7,63.75 +4277,46,30,2.5,111.05,1.7,63.75 +4278,46,30,2.5,111.05,1.7,63.75 +4279,46,30,2.5,111.05,1.7,63.75 +4280,46,30,2.5,111.05,1.7,63.75 +4281,46,30,2.5,111.05,1.7,63.75 +4282,46,30,2.5,111.05,1.7,63.75 +4283,46,30,2.5,111.05,1.7,63.75 +4284,46,30,2.5,111.05,1.7,63.75 +4285,46,30,2.5,111.05,1.7,63.75 +4286,46,30,2.5,111.05,1.7,63.75 +4287,46,30,2.5,111.05,1.7,63.75 +4288,46,30,2.5,111.05,1.7,63.75 +4289,46,30,2.5,111.05,1.7,63.75 +4290,46,30,2.5,111.05,1.7,63.75 +4291,46,30,2.5,111.05,1.7,63.75 +4292,46,30,2.5,111.05,1.7,63.75 +4293,46,30,2.5,111.05,1.7,63.75 +4294,46,30,2.5,111.05,1.7,63.75 +4295,46,30,2.5,111.05,1.7,63.75 +4296,46,30,2.5,111.05,1.7,63.75 +4297,46,30,2.5,111.05,1.7,63.75 +4298,46,30,2.5,111.05,1.7,63.75 +4299,46,30,2.5,111.05,1.7,63.75 +4300,46,30,2.5,111.05,1.7,63.75 +4301,46,30,2.5,111.05,1.7,63.75 +4302,46,30,2.5,111.05,1.7,63.75 +4303,46,30,2.5,111.05,1.7,63.75 +4304,46,30,2.5,111.05,1.7,63.75 +4305,46,30,2.5,111.05,1.7,63.75 +4306,46,30,2.5,111.05,1.7,63.75 +4307,46,30,2.5,111.05,1.7,63.75 +4308,46,30,2.5,111.05,1.7,63.75 +4309,46,30,2.5,111.05,1.7,63.75 +4310,46,30,2.5,111.05,1.7,63.75 +4311,46,30,2.5,111.05,1.7,63.75 +4312,46,30,2.5,111.05,1.7,63.75 +4313,46,30,2.5,111.05,1.7,63.75 +4314,46,30,2.5,111.05,1.7,63.75 +4315,46,30,2.5,111.05,1.7,63.75 +4316,46,30,2.5,111.05,1.7,63.75 +4317,46,30,2.5,111.05,1.7,63.75 +4318,46,30,2.5,111.05,1.7,63.75 +4319,46,30,2.5,111.05,1.7,63.75 +4320,46,30,2.5,111.05,1.7,63.75 +4321,46,30,2.5,111.05,1.7,63.75 +4322,46,30,2.5,111.05,1.7,63.75 +4323,46,30,2.5,111.05,1.7,63.75 +4324,46,30,2.5,111.05,1.7,63.75 +4325,46,30,2.5,111.05,1.7,63.75 +4326,46,30,2.5,111.05,1.7,63.75 +4327,46,30,2.5,111.05,1.7,63.75 +4328,46,30,2.5,111.05,1.7,63.75 +4329,46,30,2.5,111.05,1.7,63.75 +4330,46,30,2.5,111.05,1.7,63.75 +4331,46,30,2.5,111.05,1.7,63.75 +4332,46,30,2.5,111.05,1.7,63.75 +4333,46,30,2.5,111.05,1.7,63.75 +4334,46,30,2.5,111.05,1.7,63.75 +4335,46,30,2.5,111.05,1.7,63.75 +4336,46,30,2.5,111.05,1.7,63.75 +4337,46,30,2.5,111.05,1.7,63.75 +4338,46,30,2.5,111.05,1.7,63.75 +4339,46,30,2.5,111.05,1.7,63.75 +4340,46,30,2.5,111.05,1.7,63.75 +4341,46,30,2.5,111.05,1.7,63.75 +4342,46,30,2.5,111.05,1.7,63.75 +4343,46,30,2.5,111.05,1.7,63.75 +4344,46,30,2.5,111.05,1.7,63.75 +4345,46,30,2.5,111.05,1.7,63.75 +4346,46,30,2.5,111.05,1.7,63.75 +4347,46,30,2.5,111.05,1.7,63.75 +4348,46,30,2.5,111.05,1.7,63.75 +4349,46,30,2.5,111.05,1.7,63.75 +4350,46,30,2.5,111.05,1.7,63.75 +4351,46,30,2.5,111.05,1.7,63.75 +4352,46,30,2.5,111.05,1.7,63.75 +4353,46,30,2.5,111.05,1.7,63.75 +4354,46,30,2.5,111.05,1.7,63.75 +4355,46,30,2.5,111.05,1.7,63.75 +4356,46,30,2.5,111.05,1.7,63.75 +4357,46,30,2.5,111.05,1.7,63.75 +4358,46,30,2.5,111.05,1.7,63.75 +4359,46,30,2.5,111.05,1.7,63.75 +4360,46,30,2.5,111.05,1.7,63.75 +4361,46,30,2.5,111.05,1.7,63.75 +4362,46,30,2.5,111.05,1.7,63.75 +4363,46,30,2.5,111.05,1.7,63.75 +4364,46,30,2.5,111.05,1.7,63.75 +4365,46,30,2.5,111.05,1.7,63.75 +4366,46,30,2.5,111.05,1.7,63.75 +4367,46,30,2.5,111.05,1.7,63.75 +4368,46,30,2.5,111.05,1.7,63.75 +4369,46,30,2.5,111.05,1.7,63.75 +4370,46,30,2.5,111.05,1.7,63.75 +4371,46,30,2.5,111.05,1.7,63.75 +4372,46,30,2.5,111.05,1.7,63.75 +4373,46,30,2.5,111.05,1.7,63.75 +4374,46,30,2.5,111.05,1.7,63.75 +4375,46,30,2.5,111.05,1.7,63.75 +4376,46,30,2.5,111.05,1.7,63.75 +4377,46,30,2.5,111.05,1.7,63.75 +4378,46,30,2.5,111.05,1.7,63.75 +4379,46,30,2.5,111.05,1.7,63.75 +4380,46,30,2.5,111.05,1.7,63.75 +4381,46,30,2.5,111.05,1.7,63.75 +4382,46,30,2.5,111.05,1.7,63.75 +4383,46,30,2.5,111.05,1.7,63.75 +4384,46,30,2.5,111.05,1.7,63.75 +4385,46,30,2.5,111.05,1.7,63.75 +4386,46,30,2.5,111.05,1.7,63.75 +4387,46,30,2.5,111.05,1.7,63.75 +4388,46,30,2.5,111.05,1.7,63.75 +4389,46,30,2.5,111.05,1.7,63.75 +4390,46,30,2.5,111.05,1.7,63.75 +4391,46,30,2.5,111.05,1.7,63.75 +4392,46,30,2.5,111.05,1.7,63.75 +4393,46,30,2.5,111.05,1.7,63.75 +4394,46,30,2.5,111.05,1.7,63.75 +4395,46,30,2.5,111.05,1.7,63.75 +4396,46,30,2.5,111.05,1.7,63.75 +4397,46,30,2.5,111.05,1.7,63.75 +4398,46,30,2.5,111.05,1.7,63.75 +4399,46,30,2.5,111.05,1.7,63.75 +4400,46,30,2.5,111.05,1.7,63.75 +4401,46,30,2.5,111.05,1.7,63.75 +4402,46,30,2.5,111.05,1.7,63.75 +4403,46,30,2.5,111.05,1.7,63.75 +4404,46,30,2.5,111.05,1.7,63.75 +4405,46,30,2.5,111.05,1.7,63.75 +4406,46,30,2.5,111.05,1.7,63.75 +4407,46,30,2.5,111.05,1.7,63.75 +4408,46,30,2.5,111.05,1.7,63.75 +4409,46,30,2.5,111.05,1.7,63.75 +4410,46,30,2.5,111.05,1.7,63.75 +4411,46,30,2.5,111.05,1.7,63.75 +4412,46,30,2.5,111.05,1.7,63.75 +4413,46,30,2.5,111.05,1.7,63.75 +4414,46,30,2.5,111.05,1.7,63.75 +4415,46,30,2.5,111.05,1.7,63.75 +4416,46,30,2.5,111.05,1.7,63.75 +4417,46,30,2.5,111.05,1.7,63.75 +4418,46,30,2.5,111.05,1.7,63.75 +4419,46,30,2.5,111.05,1.7,63.75 +4420,46,30,2.5,111.05,1.7,63.75 +4421,46,30,2.5,111.05,1.7,63.75 +4422,46,30,2.5,111.05,1.7,63.75 +4423,46,30,2.5,111.05,1.7,63.75 +4424,46,30,2.5,111.05,1.7,63.75 +4425,46,30,2.5,111.05,1.7,63.75 +4426,46,30,2.5,111.05,1.7,63.75 +4427,46,30,2.5,111.05,1.7,63.75 +4428,46,30,2.5,111.05,1.7,63.75 +4429,46,30,2.5,111.05,1.7,63.75 +4430,46,30,2.5,111.05,1.7,63.75 +4431,46,30,2.5,111.05,1.7,63.75 +4432,46,30,2.5,111.05,1.7,63.75 +4433,46,30,2.5,111.05,1.7,63.75 +4434,46,30,2.5,111.05,1.7,63.75 +4435,46,30,2.5,111.05,1.7,63.75 +4436,46,30,2.5,111.05,1.7,63.75 +4437,46,30,2.5,111.05,1.7,63.75 +4438,46,30,2.5,111.05,1.7,63.75 +4439,46,30,2.5,111.05,1.7,63.75 +4440,46,30,2.5,111.05,1.7,63.75 +4441,46,30,2.5,111.05,1.7,63.75 +4442,46,30,2.5,111.05,1.7,63.75 +4443,46,30,2.5,111.05,1.7,63.75 +4444,46,30,2.5,111.05,1.7,63.75 +4445,46,30,2.5,111.05,1.7,63.75 +4446,46,30,2.5,111.05,1.7,63.75 +4447,46,30,2.5,111.05,1.7,63.75 +4448,46,30,2.5,111.05,1.7,63.75 +4449,46,30,2.5,111.05,1.7,63.75 +4450,46,30,2.5,111.05,1.7,63.75 +4451,46,30,2.5,111.05,1.7,63.75 +4452,46,30,2.5,111.05,1.7,63.75 +4453,46,30,2.5,111.05,1.7,63.75 +4454,46,30,2.5,111.05,1.7,63.75 +4455,46,30,2.5,111.05,1.7,63.75 +4456,46,30,2.5,111.05,1.7,63.75 +4457,46,30,2.5,111.05,1.7,63.75 +4458,46,30,2.5,111.05,1.7,63.75 +4459,46,30,2.5,111.05,1.7,63.75 +4460,46,30,2.5,111.05,1.7,63.75 +4461,46,30,2.5,111.05,1.7,63.75 +4462,46,30,2.5,111.05,1.7,63.75 +4463,46,30,2.5,111.05,1.7,63.75 +4464,46,30,2.5,111.05,1.7,63.75 +4465,46,30,2.5,111.05,1.7,63.75 +4466,46,30,2.5,111.05,1.7,63.75 +4467,46,30,2.5,111.05,1.7,63.75 +4468,46,30,2.5,111.05,1.7,63.75 +4469,46,30,2.5,111.05,1.7,63.75 +4470,46,30,2.5,111.05,1.7,63.75 +4471,46,30,2.5,111.05,1.7,63.75 +4472,46,30,2.5,111.05,1.7,63.75 +4473,46,30,2.5,111.05,1.7,63.75 +4474,46,30,2.5,111.05,1.7,63.75 +4475,46,30,2.5,111.05,1.7,63.75 +4476,46,30,2.5,111.05,1.7,63.75 +4477,46,30,2.5,111.05,1.7,63.75 +4478,46,30,2.5,111.05,1.7,63.75 +4479,46,30,2.5,111.05,1.7,63.75 +4480,46,30,2.5,111.05,1.7,63.75 +4481,46,30,2.5,111.05,1.7,63.75 +4482,46,30,2.5,111.05,1.7,63.75 +4483,46,30,2.5,111.05,1.7,63.75 +4484,46,30,2.5,111.05,1.7,63.75 +4485,46,30,2.5,111.05,1.7,63.75 +4486,46,30,2.5,111.05,1.7,63.75 +4487,46,30,2.5,111.05,1.7,63.75 +4488,46,30,2.5,111.05,1.7,63.75 +4489,46,30,2.5,111.05,1.7,63.75 +4490,46,30,2.5,111.05,1.7,63.75 +4491,46,30,2.5,111.05,1.7,63.75 +4492,46,30,2.5,111.05,1.7,63.75 +4493,46,30,2.5,111.05,1.7,63.75 +4494,46,30,2.5,111.05,1.7,63.75 +4495,46,30,2.5,111.05,1.7,63.75 +4496,46,30,2.5,111.05,1.7,63.75 +4497,46,30,2.5,111.05,1.7,63.75 +4498,46,30,2.5,111.05,1.7,63.75 +4499,46,30,2.5,111.05,1.7,63.75 +4500,46,30,2.5,111.05,1.7,63.75 +4501,46,30,2.5,111.05,1.7,63.75 +4502,46,30,2.5,111.05,1.7,63.75 +4503,46,30,2.5,111.05,1.7,63.75 +4504,46,30,2.5,111.05,1.7,63.75 +4505,46,30,2.5,111.05,1.7,63.75 +4506,46,30,2.5,111.05,1.7,63.75 +4507,46,30,2.5,111.05,1.7,63.75 +4508,46,30,2.5,111.05,1.7,63.75 +4509,46,30,2.5,111.05,1.7,63.75 +4510,46,30,2.5,111.05,1.7,63.75 +4511,46,30,2.5,111.05,1.7,63.75 +4512,46,30,2.5,111.05,1.7,63.75 +4513,46,30,2.5,111.05,1.7,63.75 +4514,46,30,2.5,111.05,1.7,63.75 +4515,46,30,2.5,111.05,1.7,63.75 +4516,46,30,2.5,111.05,1.7,63.75 +4517,46,30,2.5,111.05,1.7,63.75 +4518,46,30,2.5,111.05,1.7,63.75 +4519,46,30,2.5,111.05,1.7,63.75 +4520,46,30,2.5,111.05,1.7,63.75 +4521,46,30,2.5,111.05,1.7,63.75 +4522,46,30,2.5,111.05,1.7,63.75 +4523,46,30,2.5,111.05,1.7,63.75 +4524,46,30,2.5,111.05,1.7,63.75 +4525,46,30,2.5,111.05,1.7,63.75 +4526,46,30,2.5,111.05,1.7,63.75 +4527,46,30,2.5,111.05,1.7,63.75 +4528,46,30,2.5,111.05,1.7,63.75 +4529,46,30,2.5,111.05,1.7,63.75 +4530,46,30,2.5,111.05,1.7,63.75 +4531,46,30,2.5,111.05,1.7,63.75 +4532,46,30,2.5,111.05,1.7,63.75 +4533,46,30,2.5,111.05,1.7,63.75 +4534,46,30,2.5,111.05,1.7,63.75 +4535,46,30,2.5,111.05,1.7,63.75 +4536,46,30,2.5,111.05,1.7,63.75 +4537,46,30,2.5,111.05,1.7,63.75 +4538,46,30,2.5,111.05,1.7,63.75 +4539,46,30,2.5,111.05,1.7,63.75 +4540,46,30,2.5,111.05,1.7,63.75 +4541,46,30,2.5,111.05,1.7,63.75 +4542,46,30,2.5,111.05,1.7,63.75 +4543,46,30,2.5,111.05,1.7,63.75 +4544,46,30,2.5,111.05,1.7,63.75 +4545,46,30,2.5,111.05,1.7,63.75 +4546,46,30,2.5,111.05,1.7,63.75 +4547,46,30,2.5,111.05,1.7,63.75 +4548,46,30,2.5,111.05,1.7,63.75 +4549,46,30,2.5,111.05,1.7,63.75 +4550,46,30,2.5,111.05,1.7,63.75 +4551,46,30,2.5,111.05,1.7,63.75 +4552,46,30,2.5,111.05,1.7,63.75 +4553,46,30,2.5,111.05,1.7,63.75 +4554,46,30,2.5,111.05,1.7,63.75 +4555,46,30,2.5,111.05,1.7,63.75 +4556,46,30,2.5,111.05,1.7,63.75 +4557,46,30,2.5,111.05,1.7,63.75 +4558,46,30,2.5,111.05,1.7,63.75 +4559,46,30,2.5,111.05,1.7,63.75 +4560,46,30,2.5,111.05,1.7,63.75 +4561,46,30,2.5,111.05,1.7,63.75 +4562,46,30,2.5,111.05,1.7,63.75 +4563,46,30,2.5,111.05,1.7,63.75 +4564,46,30,2.5,111.05,1.7,63.75 +4565,46,30,2.5,111.05,1.7,63.75 +4566,46,30,2.5,111.05,1.7,63.75 +4567,46,30,2.5,111.05,1.7,63.75 +4568,46,30,2.5,111.05,1.7,63.75 +4569,46,30,2.5,111.05,1.7,63.75 +4570,46,30,2.5,111.05,1.7,63.75 +4571,46,30,2.5,111.05,1.7,63.75 +4572,46,30,2.5,111.05,1.7,63.75 +4573,46,30,2.5,111.05,1.7,63.75 +4574,46,30,2.5,111.05,1.7,63.75 +4575,46,30,2.5,111.05,1.7,63.75 +4576,46,30,2.5,111.05,1.7,63.75 +4577,46,30,2.5,111.05,1.7,63.75 +4578,46,30,2.5,111.05,1.7,63.75 +4579,46,30,2.5,111.05,1.7,63.75 +4580,46,30,2.5,111.05,1.7,63.75 +4581,46,30,2.5,111.05,1.7,63.75 +4582,46,30,2.5,111.05,1.7,63.75 +4583,46,30,2.5,111.05,1.7,63.75 +4584,46,30,2.5,111.05,1.7,63.75 +4585,46,30,2.5,111.05,1.7,63.75 +4586,46,30,2.5,111.05,1.7,63.75 +4587,46,30,2.5,111.05,1.7,63.75 +4588,46,30,2.5,111.05,1.7,63.75 +4589,46,30,2.5,111.05,1.7,63.75 +4590,46,30,2.5,111.05,1.7,63.75 +4591,46,30,2.5,111.05,1.7,63.75 +4592,46,30,2.5,111.05,1.7,63.75 +4593,46,30,2.5,111.05,1.7,63.75 +4594,46,30,2.5,111.05,1.7,63.75 +4595,46,30,2.5,111.05,1.7,63.75 +4596,46,30,2.5,111.05,1.7,63.75 +4597,46,30,2.5,111.05,1.7,63.75 +4598,46,30,2.5,111.05,1.7,63.75 +4599,46,30,2.5,111.05,1.7,63.75 +4600,46,30,2.5,111.05,1.7,63.75 +4601,46,30,2.5,111.05,1.7,63.75 +4602,46,30,2.5,111.05,1.7,63.75 +4603,46,30,2.5,111.05,1.7,63.75 +4604,46,30,2.5,111.05,1.7,63.75 +4605,46,30,2.5,111.05,1.7,63.75 +4606,46,30,2.5,111.05,1.7,63.75 +4607,46,30,2.5,111.05,1.7,63.75 +4608,46,30,2.5,111.05,1.7,63.75 +4609,46,30,2.5,111.05,1.7,63.75 +4610,46,30,2.5,111.05,1.7,63.75 +4611,46,30,2.5,111.05,1.7,63.75 +4612,46,30,2.5,111.05,1.7,63.75 +4613,46,30,2.5,111.05,1.7,63.75 +4614,46,30,2.5,111.05,1.7,63.75 +4615,46,30,2.5,111.05,1.7,63.75 +4616,46,30,2.5,111.05,1.7,63.75 +4617,46,30,2.5,111.05,1.7,63.75 +4618,46,30,2.5,111.05,1.7,63.75 +4619,46,30,2.5,111.05,1.7,63.75 +4620,46,30,2.5,111.05,1.7,63.75 +4621,46,30,2.5,111.05,1.7,63.75 +4622,46,30,2.5,111.05,1.7,63.75 +4623,46,30,2.5,111.05,1.7,63.75 +4624,46,30,2.5,111.05,1.7,63.75 +4625,46,30,2.5,111.05,1.7,63.75 +4626,46,30,2.5,111.05,1.7,63.75 +4627,46,30,2.5,111.05,1.7,63.75 +4628,46,30,2.5,111.05,1.7,63.75 +4629,46,30,2.5,111.05,1.7,63.75 +4630,46,30,2.5,111.05,1.7,63.75 +4631,46,30,2.5,111.05,1.7,63.75 +4632,46,30,2.5,111.05,1.7,63.75 +4633,46,30,2.5,111.05,1.7,63.75 +4634,46,30,2.5,111.05,1.7,63.75 +4635,46,30,2.5,111.05,1.7,63.75 +4636,46,30,2.5,111.05,1.7,63.75 +4637,46,30,2.5,111.05,1.7,63.75 +4638,46,30,2.5,111.05,1.7,63.75 +4639,46,30,2.5,111.05,1.7,63.75 +4640,46,30,2.5,111.05,1.7,63.75 +4641,46,30,2.5,111.05,1.7,63.75 +4642,46,30,2.5,111.05,1.7,63.75 +4643,46,30,2.5,111.05,1.7,63.75 +4644,46,30,2.5,111.05,1.7,63.75 +4645,46,30,2.5,111.05,1.7,63.75 +4646,46,30,2.5,111.05,1.7,63.75 +4647,46,30,2.5,111.05,1.7,63.75 +4648,46,30,2.5,111.05,1.7,63.75 +4649,46,30,2.5,111.05,1.7,63.75 +4650,46,30,2.5,111.05,1.7,63.75 +4651,46,30,2.5,111.05,1.7,63.75 +4652,46,30,2.5,111.05,1.7,63.75 +4653,46,30,2.5,111.05,1.7,63.75 +4654,46,30,2.5,111.05,1.7,63.75 +4655,46,30,2.5,111.05,1.7,63.75 +4656,46,30,2.5,111.05,1.7,63.75 +4657,46,30,2.5,111.05,1.7,63.75 +4658,46,30,2.5,111.05,1.7,63.75 +4659,46,30,2.5,111.05,1.7,63.75 +4660,46,30,2.5,111.05,1.7,63.75 +4661,46,30,2.5,111.05,1.7,63.75 +4662,46,30,2.5,111.05,1.7,63.75 +4663,46,30,2.5,111.05,1.7,63.75 +4664,46,30,2.5,111.05,1.7,63.75 +4665,46,30,2.5,111.05,1.7,63.75 +4666,46,30,2.5,111.05,1.7,63.75 +4667,46,30,2.5,111.05,1.7,63.75 +4668,46,30,2.5,111.05,1.7,63.75 +4669,46,30,2.5,111.05,1.7,63.75 +4670,46,30,2.5,111.05,1.7,63.75 +4671,46,30,2.5,111.05,1.7,63.75 +4672,46,30,2.5,111.05,1.7,63.75 +4673,46,30,2.5,111.05,1.7,63.75 +4674,46,30,2.5,111.05,1.7,63.75 +4675,46,30,2.5,111.05,1.7,63.75 +4676,46,30,2.5,111.05,1.7,63.75 +4677,46,30,2.5,111.05,1.7,63.75 +4678,46,30,2.5,111.05,1.7,63.75 +4679,46,30,2.5,111.05,1.7,63.75 +4680,46,30,2.5,111.05,1.7,63.75 +4681,46,30,2.5,111.05,1.7,63.75 +4682,46,30,2.5,111.05,1.7,63.75 +4683,46,30,2.5,111.05,1.7,63.75 +4684,46,30,2.5,111.05,1.7,63.75 +4685,46,30,2.5,111.05,1.7,63.75 +4686,46,30,2.5,111.05,1.7,63.75 +4687,46,30,2.5,111.05,1.7,63.75 +4688,46,30,2.5,111.05,1.7,63.75 +4689,46,30,2.5,111.05,1.7,63.75 +4690,46,30,2.5,111.05,1.7,63.75 +4691,46,30,2.5,111.05,1.7,63.75 +4692,46,30,2.5,111.05,1.7,63.75 +4693,46,30,2.5,111.05,1.7,63.75 +4694,46,30,2.5,111.05,1.7,63.75 +4695,46,30,2.5,111.05,1.7,63.75 +4696,46,30,2.5,111.05,1.7,63.75 +4697,46,30,2.5,111.05,1.7,63.75 +4698,46,30,2.5,111.05,1.7,63.75 +4699,46,30,2.5,111.05,1.7,63.75 +4700,46,30,2.5,111.05,1.7,63.75 +4701,46,30,2.5,111.05,1.7,63.75 +4702,46,30,2.5,111.05,1.7,63.75 +4703,46,30,2.5,111.05,1.7,63.75 +4704,46,30,2.5,111.05,1.7,63.75 +4705,46,30,2.5,111.05,1.7,63.75 +4706,46,30,2.5,111.05,1.7,63.75 +4707,46,30,2.5,111.05,1.7,63.75 +4708,46,30,2.5,111.05,1.7,63.75 +4709,46,30,2.5,111.05,1.7,63.75 +4710,46,30,2.5,111.05,1.7,63.75 +4711,46,30,2.5,111.05,1.7,63.75 +4712,46,30,2.5,111.05,1.7,63.75 +4713,46,30,2.5,111.05,1.7,63.75 +4714,46,30,2.5,111.05,1.7,63.75 +4715,46,30,2.5,111.05,1.7,63.75 +4716,46,30,2.5,111.05,1.7,63.75 +4717,46,30,2.5,111.05,1.7,63.75 +4718,46,30,2.5,111.05,1.7,63.75 +4719,46,30,2.5,111.05,1.7,63.75 +4720,46,30,2.5,111.05,1.7,63.75 +4721,46,30,2.5,111.05,1.7,63.75 +4722,46,30,2.5,111.05,1.7,63.75 +4723,46,30,2.5,111.05,1.7,63.75 +4724,46,30,2.5,111.05,1.7,63.75 +4725,46,30,2.5,111.05,1.7,63.75 +4726,46,30,2.5,111.05,1.7,63.75 +4727,46,30,2.5,111.05,1.7,63.75 +4728,46,30,2.5,111.05,1.7,63.75 +4729,46,30,2.5,111.05,1.7,63.75 +4730,46,30,2.5,111.05,1.7,63.75 +4731,46,30,2.5,111.05,1.7,63.75 +4732,46,30,2.5,111.05,1.7,63.75 +4733,46,30,2.5,111.05,1.7,63.75 +4734,46,30,2.5,111.05,1.7,63.75 +4735,46,30,2.5,111.05,1.7,63.75 +4736,46,30,2.5,111.05,1.7,63.75 +4737,46,30,2.5,111.05,1.7,63.75 +4738,46,30,2.5,111.05,1.7,63.75 +4739,46,30,2.5,111.05,1.7,63.75 +4740,46,30,2.5,111.05,1.7,63.75 +4741,46,30,2.5,111.05,1.7,63.75 +4742,46,30,2.5,111.05,1.7,63.75 +4743,46,30,2.5,111.05,1.7,63.75 +4744,46,30,2.5,111.05,1.7,63.75 +4745,46,30,2.5,111.05,1.7,63.75 +4746,46,30,2.5,111.05,1.7,63.75 +4747,46,30,2.5,111.05,1.7,63.75 +4748,46,30,2.5,111.05,1.7,63.75 +4749,46,30,2.5,111.05,1.7,63.75 +4750,46,30,2.5,111.05,1.7,63.75 +4751,46,30,2.5,111.05,1.7,63.75 +4752,46,30,2.5,111.05,1.7,63.75 +4753,46,30,2.5,111.05,1.7,63.75 +4754,46,30,2.5,111.05,1.7,63.75 +4755,46,30,2.5,111.05,1.7,63.75 +4756,46,30,2.5,111.05,1.7,63.75 +4757,46,30,2.5,111.05,1.7,63.75 +4758,46,30,2.5,111.05,1.7,63.75 +4759,46,30,2.5,111.05,1.7,63.75 +4760,46,30,2.5,111.05,1.7,63.75 +4761,46,30,2.5,111.05,1.7,63.75 +4762,46,30,2.5,111.05,1.7,63.75 +4763,46,30,2.5,111.05,1.7,63.75 +4764,46,30,2.5,111.05,1.7,63.75 +4765,46,30,2.5,111.05,1.7,63.75 +4766,46,30,2.5,111.05,1.7,63.75 +4767,46,30,2.5,111.05,1.7,63.75 +4768,46,30,2.5,111.05,1.7,63.75 +4769,46,30,2.5,111.05,1.7,63.75 +4770,46,30,2.5,111.05,1.7,63.75 +4771,46,30,2.5,111.05,1.7,63.75 +4772,46,30,2.5,111.05,1.7,63.75 +4773,46,30,2.5,111.05,1.7,63.75 +4774,46,30,2.5,111.05,1.7,63.75 +4775,46,30,2.5,111.05,1.7,63.75 +4776,46,30,2.5,111.05,1.7,63.75 +4777,46,30,2.5,111.05,1.7,63.75 +4778,46,30,2.5,111.05,1.7,63.75 +4779,46,30,2.5,111.05,1.7,63.75 +4780,46,30,2.5,111.05,1.7,63.75 +4781,46,30,2.5,111.05,1.7,63.75 +4782,46,30,2.5,111.05,1.7,63.75 +4783,46,30,2.5,111.05,1.7,63.75 +4784,46,30,2.5,111.05,1.7,63.75 +4785,46,30,2.5,111.05,1.7,63.75 +4786,46,30,2.5,111.05,1.7,63.75 +4787,46,30,2.5,111.05,1.7,63.75 +4788,46,30,2.5,111.05,1.7,63.75 +4789,46,30,2.5,111.05,1.7,63.75 +4790,46,30,2.5,111.05,1.7,63.75 +4791,46,30,2.5,111.05,1.7,63.75 +4792,46,30,2.5,111.05,1.7,63.75 +4793,46,30,2.5,111.05,1.7,63.75 +4794,46,30,2.5,111.05,1.7,63.75 +4795,46,30,2.5,111.05,1.7,63.75 +4796,46,30,2.5,111.05,1.7,63.75 +4797,46,30,2.5,111.05,1.7,63.75 +4798,46,30,2.5,111.05,1.7,63.75 +4799,46,30,2.5,111.05,1.7,63.75 +4800,46,30,2.5,111.05,1.7,63.75 +4801,46,30,2.5,111.05,1.7,63.75 +4802,46,30,2.5,111.05,1.7,63.75 +4803,46,30,2.5,111.05,1.7,63.75 +4804,46,30,2.5,111.05,1.7,63.75 +4805,46,30,2.5,111.05,1.7,63.75 +4806,46,30,2.5,111.05,1.7,63.75 +4807,46,30,2.5,111.05,1.7,63.75 +4808,46,30,2.5,111.05,1.7,63.75 +4809,46,30,2.5,111.05,1.7,63.75 +4810,46,30,2.5,111.05,1.7,63.75 +4811,46,30,2.5,111.05,1.7,63.75 +4812,46,30,2.5,111.05,1.7,63.75 +4813,46,30,2.5,111.05,1.7,63.75 +4814,46,30,2.5,111.05,1.7,63.75 +4815,46,30,2.5,111.05,1.7,63.75 +4816,46,30,2.5,111.05,1.7,63.75 +4817,46,30,2.5,111.05,1.7,63.75 +4818,46,30,2.5,111.05,1.7,63.75 +4819,46,30,2.5,111.05,1.7,63.75 +4820,46,30,2.5,111.05,1.7,63.75 +4821,46,30,2.5,111.05,1.7,63.75 +4822,46,30,2.5,111.05,1.7,63.75 +4823,46,30,2.5,111.05,1.7,63.75 +4824,46,30,2.5,111.05,1.7,63.75 +4825,46,30,2.5,111.05,1.7,63.75 +4826,46,30,2.5,111.05,1.7,63.75 +4827,46,30,2.5,111.05,1.7,63.75 +4828,46,30,2.5,111.05,1.7,63.75 +4829,46,30,2.5,111.05,1.7,63.75 +4830,46,30,2.5,111.05,1.7,63.75 +4831,46,30,2.5,111.05,1.7,63.75 +4832,46,30,2.5,111.05,1.7,63.75 +4833,46,30,2.5,111.05,1.7,63.75 +4834,46,30,2.5,111.05,1.7,63.75 +4835,46,30,2.5,111.05,1.7,63.75 +4836,46,30,2.5,111.05,1.7,63.75 +4837,46,30,2.5,111.05,1.7,63.75 +4838,46,30,2.5,111.05,1.7,63.75 +4839,46,30,2.5,111.05,1.7,63.75 +4840,46,30,2.5,111.05,1.7,63.75 +4841,46,30,2.5,111.05,1.7,63.75 +4842,46,30,2.5,111.05,1.7,63.75 +4843,46,30,2.5,111.05,1.7,63.75 +4844,46,30,2.5,111.05,1.7,63.75 +4845,46,30,2.5,111.05,1.7,63.75 +4846,46,30,2.5,111.05,1.7,63.75 +4847,46,30,2.5,111.05,1.7,63.75 +4848,46,30,2.5,111.05,1.7,63.75 +4849,46,30,2.5,111.05,1.7,63.75 +4850,46,30,2.5,111.05,1.7,63.75 +4851,46,30,2.5,111.05,1.7,63.75 +4852,46,30,2.5,111.05,1.7,63.75 +4853,46,30,2.5,111.05,1.7,63.75 +4854,46,30,2.5,111.05,1.7,63.75 +4855,46,30,2.5,111.05,1.7,63.75 +4856,46,30,2.5,111.05,1.7,63.75 +4857,46,30,2.5,111.05,1.7,63.75 +4858,46,30,2.5,111.05,1.7,63.75 +4859,46,30,2.5,111.05,1.7,63.75 +4860,46,30,2.5,111.05,1.7,63.75 +4861,46,30,2.5,111.05,1.7,63.75 +4862,46,30,2.5,111.05,1.7,63.75 +4863,46,30,2.5,111.05,1.7,63.75 +4864,46,30,2.5,111.05,1.7,63.75 +4865,46,30,2.5,111.05,1.7,63.75 +4866,46,30,2.5,111.05,1.7,63.75 +4867,46,30,2.5,111.05,1.7,63.75 +4868,46,30,2.5,111.05,1.7,63.75 +4869,46,30,2.5,111.05,1.7,63.75 +4870,46,30,2.5,111.05,1.7,63.75 +4871,46,30,2.5,111.05,1.7,63.75 +4872,46,30,2.5,111.05,1.7,63.75 +4873,46,30,2.5,111.05,1.7,63.75 +4874,46,30,2.5,111.05,1.7,63.75 +4875,46,30,2.5,111.05,1.7,63.75 +4876,46,30,2.5,111.05,1.7,63.75 +4877,46,30,2.5,111.05,1.7,63.75 +4878,46,30,2.5,111.05,1.7,63.75 +4879,46,30,2.5,111.05,1.7,63.75 +4880,46,30,2.5,111.05,1.7,63.75 +4881,46,30,2.5,111.05,1.7,63.75 +4882,46,30,2.5,111.05,1.7,63.75 +4883,46,30,2.5,111.05,1.7,63.75 +4884,46,30,2.5,111.05,1.7,63.75 +4885,46,30,2.5,111.05,1.7,63.75 +4886,46,30,2.5,111.05,1.7,63.75 +4887,46,30,2.5,111.05,1.7,63.75 +4888,46,30,2.5,111.05,1.7,63.75 +4889,46,30,2.5,111.05,1.7,63.75 +4890,46,30,2.5,111.05,1.7,63.75 +4891,46,30,2.5,111.05,1.7,63.75 +4892,46,30,2.5,111.05,1.7,63.75 +4893,46,30,2.5,111.05,1.7,63.75 +4894,46,30,2.5,111.05,1.7,63.75 +4895,46,30,2.5,111.05,1.7,63.75 +4896,46,30,2.5,111.05,1.7,63.75 +4897,46,30,2.5,111.05,1.7,63.75 +4898,46,30,2.5,111.05,1.7,63.75 +4899,46,30,2.5,111.05,1.7,63.75 +4900,46,30,2.5,111.05,1.7,63.75 +4901,46,30,2.5,111.05,1.7,63.75 +4902,46,30,2.5,111.05,1.7,63.75 +4903,46,30,2.5,111.05,1.7,63.75 +4904,46,30,2.5,111.05,1.7,63.75 +4905,46,30,2.5,111.05,1.7,63.75 +4906,46,30,2.5,111.05,1.7,63.75 +4907,46,30,2.5,111.05,1.7,63.75 +4908,46,30,2.5,111.05,1.7,63.75 +4909,46,30,2.5,111.05,1.7,63.75 +4910,46,30,2.5,111.05,1.7,63.75 +4911,46,30,2.5,111.05,1.7,63.75 +4912,46,30,2.5,111.05,1.7,63.75 +4913,46,30,2.5,111.05,1.7,63.75 +4914,46,30,2.5,111.05,1.7,63.75 +4915,46,30,2.5,111.05,1.7,63.75 +4916,46,30,2.5,111.05,1.7,63.75 +4917,46,30,2.5,111.05,1.7,63.75 +4918,46,30,2.5,111.05,1.7,63.75 +4919,46,30,2.5,111.05,1.7,63.75 +4920,46,30,2.5,111.05,1.7,63.75 +4921,46,30,2.5,111.05,1.7,63.75 +4922,46,30,2.5,111.05,1.7,63.75 +4923,46,30,2.5,111.05,1.7,63.75 +4924,46,30,2.5,111.05,1.7,63.75 +4925,46,30,2.5,111.05,1.7,63.75 +4926,46,30,2.5,111.05,1.7,63.75 +4927,46,30,2.5,111.05,1.7,63.75 +4928,46,30,2.5,111.05,1.7,63.75 +4929,46,30,2.5,111.05,1.7,63.75 +4930,46,30,2.5,111.05,1.7,63.75 +4931,46,30,2.5,111.05,1.7,63.75 +4932,46,30,2.5,111.05,1.7,63.75 +4933,46,30,2.5,111.05,1.7,63.75 +4934,46,30,2.5,111.05,1.7,63.75 +4935,46,30,2.5,111.05,1.7,63.75 +4936,46,30,2.5,111.05,1.7,63.75 +4937,46,30,2.5,111.05,1.7,63.75 +4938,46,30,2.5,111.05,1.7,63.75 +4939,46,30,2.5,111.05,1.7,63.75 +4940,46,30,2.5,111.05,1.7,63.75 +4941,46,30,2.5,111.05,1.7,63.75 +4942,46,30,2.5,111.05,1.7,63.75 +4943,46,30,2.5,111.05,1.7,63.75 +4944,46,30,2.5,111.05,1.7,63.75 +4945,46,30,2.5,111.05,1.7,63.75 +4946,46,30,2.5,111.05,1.7,63.75 +4947,46,30,2.5,111.05,1.7,63.75 +4948,46,30,2.5,111.05,1.7,63.75 +4949,46,30,2.5,111.05,1.7,63.75 +4950,46,30,2.5,111.05,1.7,63.75 +4951,46,30,2.5,111.05,1.7,63.75 +4952,46,30,2.5,111.05,1.7,63.75 +4953,46,30,2.5,111.05,1.7,63.75 +4954,46,30,2.5,111.05,1.7,63.75 +4955,46,30,2.5,111.05,1.7,63.75 +4956,46,30,2.5,111.05,1.7,63.75 +4957,46,30,2.5,111.05,1.7,63.75 +4958,46,30,2.5,111.05,1.7,63.75 +4959,46,30,2.5,111.05,1.7,63.75 +4960,46,30,2.5,111.05,1.7,63.75 +4961,46,30,2.5,111.05,1.7,63.75 +4962,46,30,2.5,111.05,1.7,63.75 +4963,46,30,2.5,111.05,1.7,63.75 +4964,46,30,2.5,111.05,1.7,63.75 +4965,46,30,2.5,111.05,1.7,63.75 +4966,46,30,2.5,111.05,1.7,63.75 +4967,46,30,2.5,111.05,1.7,63.75 +4968,46,30,2.5,111.05,1.7,63.75 +4969,46,30,2.5,111.05,1.7,63.75 +4970,46,30,2.5,111.05,1.7,63.75 +4971,46,30,2.5,111.05,1.7,63.75 +4972,46,30,2.5,111.05,1.7,63.75 +4973,46,30,2.5,111.05,1.7,63.75 +4974,46,30,2.5,111.05,1.7,63.75 +4975,46,30,2.5,111.05,1.7,63.75 +4976,46,30,2.5,111.05,1.7,63.75 +4977,46,30,2.5,111.05,1.7,63.75 +4978,46,30,2.5,111.05,1.7,63.75 +4979,46,30,2.5,111.05,1.7,63.75 +4980,46,30,2.5,111.05,1.7,63.75 +4981,46,30,2.5,111.05,1.7,63.75 +4982,46,30,2.5,111.05,1.7,63.75 +4983,46,30,2.5,111.05,1.7,63.75 +4984,46,30,2.5,111.05,1.7,63.75 +4985,46,30,2.5,111.05,1.7,63.75 +4986,46,30,2.5,111.05,1.7,63.75 +4987,46,30,2.5,111.05,1.7,63.75 +4988,46,30,2.5,111.05,1.7,63.75 +4989,46,30,2.5,111.05,1.7,63.75 +4990,46,30,2.5,111.05,1.7,63.75 +4991,46,30,2.5,111.05,1.7,63.75 +4992,46,30,2.5,111.05,1.7,63.75 +4993,46,30,2.5,111.05,1.7,63.75 +4994,46,30,2.5,111.05,1.7,63.75 +4995,46,30,2.5,111.05,1.7,63.75 +4996,46,30,2.5,111.05,1.7,63.75 +4997,46,30,2.5,111.05,1.7,63.75 +4998,46,30,2.5,111.05,1.7,63.75 +4999,46,30,2.5,111.05,1.7,63.75 +5000,46,30,2.5,111.05,1.7,63.75 +5001,46,30,2.5,111.05,1.7,63.75 +5002,46,30,2.5,111.05,1.7,63.75 +5003,46,30,2.5,111.05,1.7,63.75 +5004,46,30,2.5,111.05,1.7,63.75 +5005,46,30,2.5,111.05,1.7,63.75 +5006,46,30,2.5,111.05,1.7,63.75 +5007,46,30,2.5,111.05,1.7,63.75 +5008,46,30,2.5,111.05,1.7,63.75 +5009,46,30,2.5,111.05,1.7,63.75 +5010,46,30,2.5,111.05,1.7,63.75 +5011,46,30,2.5,111.05,1.7,63.75 +5012,46,30,2.5,111.05,1.7,63.75 +5013,46,30,2.5,111.05,1.7,63.75 +5014,46,30,2.5,111.05,1.7,63.75 +5015,46,30,2.5,111.05,1.7,63.75 +5016,46,30,2.5,111.05,1.7,63.75 +5017,46,30,2.5,111.05,1.7,63.75 +5018,46,30,2.5,111.05,1.7,63.75 +5019,46,30,2.5,111.05,1.7,63.75 +5020,46,30,2.5,111.05,1.7,63.75 +5021,46,30,2.5,111.05,1.7,63.75 +5022,46,30,2.5,111.05,1.7,63.75 +5023,46,30,2.5,111.05,1.7,63.75 +5024,46,30,2.5,111.05,1.7,63.75 +5025,46,30,2.5,111.05,1.7,63.75 +5026,46,30,2.5,111.05,1.7,63.75 +5027,46,30,2.5,111.05,1.7,63.75 +5028,46,30,2.5,111.05,1.7,63.75 +5029,46,30,2.5,111.05,1.7,63.75 +5030,46,30,2.5,111.05,1.7,63.75 +5031,46,30,2.5,111.05,1.7,63.75 +5032,46,30,2.5,111.05,1.7,63.75 +5033,46,30,2.5,111.05,1.7,63.75 +5034,46,30,2.5,111.05,1.7,63.75 +5035,46,30,2.5,111.05,1.7,63.75 +5036,46,30,2.5,111.05,1.7,63.75 +5037,46,30,2.5,111.05,1.7,63.75 +5038,46,30,2.5,111.05,1.7,63.75 +5039,46,30,2.5,111.05,1.7,63.75 +5040,46,30,2.5,111.05,1.7,63.75 +5041,46,30,2.5,111.05,1.7,63.75 +5042,46,30,2.5,111.05,1.7,63.75 +5043,46,30,2.5,111.05,1.7,63.75 +5044,46,30,2.5,111.05,1.7,63.75 +5045,46,30,2.5,111.05,1.7,63.75 +5046,46,30,2.5,111.05,1.7,63.75 +5047,46,30,2.5,111.05,1.7,63.75 +5048,46,30,2.5,111.05,1.7,63.75 +5049,46,30,2.5,111.05,1.7,63.75 +5050,46,30,2.5,111.05,1.7,63.75 +5051,46,30,2.5,111.05,1.7,63.75 +5052,46,30,2.5,111.05,1.7,63.75 +5053,46,30,2.5,111.05,1.7,63.75 +5054,46,30,2.5,111.05,1.7,63.75 +5055,46,30,2.5,111.05,1.7,63.75 +5056,46,30,2.5,111.05,1.7,63.75 +5057,46,30,2.5,111.05,1.7,63.75 +5058,46,30,2.5,111.05,1.7,63.75 +5059,46,30,2.5,111.05,1.7,63.75 +5060,46,30,2.5,111.05,1.7,63.75 +5061,46,30,2.5,111.05,1.7,63.75 +5062,46,30,2.5,111.05,1.7,63.75 +5063,46,30,2.5,111.05,1.7,63.75 +5064,46,30,2.5,111.05,1.7,63.75 +5065,46,30,2.5,111.05,1.7,63.75 +5066,46,30,2.5,111.05,1.7,63.75 +5067,46,30,2.5,111.05,1.7,63.75 +5068,46,30,2.5,111.05,1.7,63.75 +5069,46,30,2.5,111.05,1.7,63.75 +5070,46,30,2.5,111.05,1.7,63.75 +5071,46,30,2.5,111.05,1.7,63.75 +5072,46,30,2.5,111.05,1.7,63.75 +5073,46,30,2.5,111.05,1.7,63.75 +5074,46,30,2.5,111.05,1.7,63.75 +5075,46,30,2.5,111.05,1.7,63.75 +5076,46,30,2.5,111.05,1.7,63.75 +5077,46,30,2.5,111.05,1.7,63.75 +5078,46,30,2.5,111.05,1.7,63.75 +5079,46,30,2.5,111.05,1.7,63.75 +5080,46,30,2.5,111.05,1.7,63.75 +5081,46,30,2.5,111.05,1.7,63.75 +5082,46,30,2.5,111.05,1.7,63.75 +5083,46,30,2.5,111.05,1.7,63.75 +5084,46,30,2.5,111.05,1.7,63.75 +5085,46,30,2.5,111.05,1.7,63.75 +5086,46,30,2.5,111.05,1.7,63.75 +5087,46,30,2.5,111.05,1.7,63.75 +5088,46,30,2.5,111.05,1.7,63.75 +5089,46,30,2.5,111.05,1.7,63.75 +5090,46,30,2.5,111.05,1.7,63.75 +5091,46,30,2.5,111.05,1.7,63.75 +5092,46,30,2.5,111.05,1.7,63.75 +5093,46,30,2.5,111.05,1.7,63.75 +5094,46,30,2.5,111.05,1.7,63.75 +5095,46,30,2.5,111.05,1.7,63.75 +5096,46,30,2.5,111.05,1.7,63.75 +5097,46,30,2.5,111.05,1.7,63.75 +5098,46,30,2.5,111.05,1.7,63.75 +5099,46,30,2.5,111.05,1.7,63.75 +5100,46,30,2.5,111.05,1.7,63.75 +5101,46,30,2.5,111.05,1.7,63.75 +5102,46,30,2.5,111.05,1.7,63.75 +5103,46,30,2.5,111.05,1.7,63.75 +5104,46,30,2.5,111.05,1.7,63.75 +5105,46,30,2.5,111.05,1.7,63.75 +5106,46,30,2.5,111.05,1.7,63.75 +5107,46,30,2.5,111.05,1.7,63.75 +5108,46,30,2.5,111.05,1.7,63.75 +5109,46,30,2.5,111.05,1.7,63.75 +5110,46,30,2.5,111.05,1.7,63.75 +5111,46,30,2.5,111.05,1.7,63.75 +5112,46,30,2.5,111.05,1.7,63.75 +5113,46,30,2.5,111.05,1.7,63.75 +5114,46,30,2.5,111.05,1.7,63.75 +5115,46,30,2.5,111.05,1.7,63.75 +5116,46,30,2.5,111.05,1.7,63.75 +5117,46,30,2.5,111.05,1.7,63.75 +5118,46,30,2.5,111.05,1.7,63.75 +5119,46,30,2.5,111.05,1.7,63.75 +5120,46,30,2.5,111.05,1.7,63.75 +5121,46,30,2.5,111.05,1.7,63.75 +5122,46,30,2.5,111.05,1.7,63.75 +5123,46,30,2.5,111.05,1.7,63.75 +5124,46,30,2.5,111.05,1.7,63.75 +5125,46,30,2.5,111.05,1.7,63.75 +5126,46,30,2.5,111.05,1.7,63.75 +5127,46,30,2.5,111.05,1.7,63.75 +5128,46,30,2.5,111.05,1.7,63.75 +5129,46,30,2.5,111.05,1.7,63.75 +5130,46,30,2.5,111.05,1.7,63.75 +5131,46,30,2.5,111.05,1.7,63.75 +5132,46,30,2.5,111.05,1.7,63.75 +5133,46,30,2.5,111.05,1.7,63.75 +5134,46,30,2.5,111.05,1.7,63.75 +5135,46,30,2.5,111.05,1.7,63.75 +5136,46,30,2.5,111.05,1.7,63.75 +5137,46,30,2.5,111.05,1.7,63.75 +5138,46,30,2.5,111.05,1.7,63.75 +5139,46,30,2.5,111.05,1.7,63.75 +5140,46,30,2.5,111.05,1.7,63.75 +5141,46,30,2.5,111.05,1.7,63.75 +5142,46,30,2.5,111.05,1.7,63.75 +5143,46,30,2.5,111.05,1.7,63.75 +5144,46,30,2.5,111.05,1.7,63.75 +5145,46,30,2.5,111.05,1.7,63.75 +5146,46,30,2.5,111.05,1.7,63.75 +5147,46,30,2.5,111.05,1.7,63.75 +5148,46,30,2.5,111.05,1.7,63.75 +5149,46,30,2.5,111.05,1.7,63.75 +5150,46,30,2.5,111.05,1.7,63.75 +5151,46,30,2.5,111.05,1.7,63.75 +5152,46,30,2.5,111.05,1.7,63.75 +5153,46,30,2.5,111.05,1.7,63.75 +5154,46,30,2.5,111.05,1.7,63.75 +5155,46,30,2.5,111.05,1.7,63.75 +5156,46,30,2.5,111.05,1.7,63.75 +5157,46,30,2.5,111.05,1.7,63.75 +5158,46,30,2.5,111.05,1.7,63.75 +5159,46,30,2.5,111.05,1.7,63.75 +5160,46,30,2.5,111.05,1.7,63.75 +5161,46,30,2.5,111.05,1.7,63.75 +5162,46,30,2.5,111.05,1.7,63.75 +5163,46,30,2.5,111.05,1.7,63.75 +5164,46,30,2.5,111.05,1.7,63.75 +5165,46,30,2.5,111.05,1.7,63.75 +5166,46,30,2.5,111.05,1.7,63.75 +5167,46,30,2.5,111.05,1.7,63.75 +5168,46,30,2.5,111.05,1.7,63.75 +5169,46,30,2.5,111.05,1.7,63.75 +5170,46,30,2.5,111.05,1.7,63.75 +5171,46,30,2.5,111.05,1.7,63.75 +5172,46,30,2.5,111.05,1.7,63.75 +5173,46,30,2.5,111.05,1.7,63.75 +5174,46,30,2.5,111.05,1.7,63.75 +5175,46,30,2.5,111.05,1.7,63.75 +5176,46,30,2.5,111.05,1.7,63.75 +5177,46,30,2.5,111.05,1.7,63.75 +5178,46,30,2.5,111.05,1.7,63.75 +5179,46,30,2.5,111.05,1.7,63.75 +5180,46,30,2.5,111.05,1.7,63.75 +5181,46,30,2.5,111.05,1.7,63.75 +5182,46,30,2.5,111.05,1.7,63.75 +5183,46,30,2.5,111.05,1.7,63.75 +5184,46,30,2.5,111.05,1.7,63.75 +5185,46,30,2.5,111.05,1.7,63.75 +5186,46,30,2.5,111.05,1.7,63.75 +5187,46,30,2.5,111.05,1.7,63.75 +5188,46,30,2.5,111.05,1.7,63.75 +5189,46,30,2.5,111.05,1.7,63.75 +5190,46,30,2.5,111.05,1.7,63.75 +5191,46,30,2.5,111.05,1.7,63.75 +5192,46,30,2.5,111.05,1.7,63.75 +5193,46,30,2.5,111.05,1.7,63.75 +5194,46,30,2.5,111.05,1.7,63.75 +5195,46,30,2.5,111.05,1.7,63.75 +5196,46,30,2.5,111.05,1.7,63.75 +5197,46,30,2.5,111.05,1.7,63.75 +5198,46,30,2.5,111.05,1.7,63.75 +5199,46,30,2.5,111.05,1.7,63.75 +5200,46,30,2.5,111.05,1.7,63.75 +5201,46,30,2.5,111.05,1.7,63.75 +5202,46,30,2.5,111.05,1.7,63.75 +5203,46,30,2.5,111.05,1.7,63.75 +5204,46,30,2.5,111.05,1.7,63.75 +5205,46,30,2.5,111.05,1.7,63.75 +5206,46,30,2.5,111.05,1.7,63.75 +5207,46,30,2.5,111.05,1.7,63.75 +5208,46,30,2.5,111.05,1.7,63.75 +5209,46,30,2.5,111.05,1.7,63.75 +5210,46,30,2.5,111.05,1.7,63.75 +5211,46,30,2.5,111.05,1.7,63.75 +5212,46,30,2.5,111.05,1.7,63.75 +5213,46,30,2.5,111.05,1.7,63.75 +5214,46,30,2.5,111.05,1.7,63.75 +5215,46,30,2.5,111.05,1.7,63.75 +5216,46,30,2.5,111.05,1.7,63.75 +5217,46,30,2.5,111.05,1.7,63.75 +5218,46,30,2.5,111.05,1.7,63.75 +5219,46,30,2.5,111.05,1.7,63.75 +5220,46,30,2.5,111.05,1.7,63.75 +5221,46,30,2.5,111.05,1.7,63.75 +5222,46,30,2.5,111.05,1.7,63.75 +5223,46,30,2.5,111.05,1.7,63.75 +5224,46,30,2.5,111.05,1.7,63.75 +5225,46,30,2.5,111.05,1.7,63.75 +5226,46,30,2.5,111.05,1.7,63.75 +5227,46,30,2.5,111.05,1.7,63.75 +5228,46,30,2.5,111.05,1.7,63.75 +5229,46,30,2.5,111.05,1.7,63.75 +5230,46,30,2.5,111.05,1.7,63.75 +5231,46,30,2.5,111.05,1.7,63.75 +5232,46,30,2.5,111.05,1.7,63.75 +5233,46,30,2.5,111.05,1.7,63.75 +5234,46,30,2.5,111.05,1.7,63.75 +5235,46,30,2.5,111.05,1.7,63.75 +5236,46,30,2.5,111.05,1.7,63.75 +5237,46,30,2.5,111.05,1.7,63.75 +5238,46,30,2.5,111.05,1.7,63.75 +5239,46,30,2.5,111.05,1.7,63.75 +5240,46,30,2.5,111.05,1.7,63.75 +5241,46,30,2.5,111.05,1.7,63.75 +5242,46,30,2.5,111.05,1.7,63.75 +5243,46,30,2.5,111.05,1.7,63.75 +5244,46,30,2.5,111.05,1.7,63.75 +5245,46,30,2.5,111.05,1.7,63.75 +5246,46,30,2.5,111.05,1.7,63.75 +5247,46,30,2.5,111.05,1.7,63.75 +5248,46,30,2.5,111.05,1.7,63.75 +5249,46,30,2.5,111.05,1.7,63.75 +5250,46,30,2.5,111.05,1.7,63.75 +5251,46,30,2.5,111.05,1.7,63.75 +5252,46,30,2.5,111.05,1.7,63.75 +5253,46,30,2.5,111.05,1.7,63.75 +5254,46,30,2.5,111.05,1.7,63.75 +5255,46,30,2.5,111.05,1.7,63.75 +5256,46,30,2.5,111.05,1.7,63.75 +5257,46,30,2.5,111.05,1.7,63.75 +5258,46,30,2.5,111.05,1.7,63.75 +5259,46,30,2.5,111.05,1.7,63.75 +5260,46,30,2.5,111.05,1.7,63.75 +5261,46,30,2.5,111.05,1.7,63.75 +5262,46,30,2.5,111.05,1.7,63.75 +5263,46,30,2.5,111.05,1.7,63.75 +5264,46,30,2.5,111.05,1.7,63.75 +5265,46,30,2.5,111.05,1.7,63.75 +5266,46,30,2.5,111.05,1.7,63.75 +5267,46,30,2.5,111.05,1.7,63.75 +5268,46,30,2.5,111.05,1.7,63.75 +5269,46,30,2.5,111.05,1.7,63.75 +5270,46,30,2.5,111.05,1.7,63.75 +5271,46,30,2.5,111.05,1.7,63.75 +5272,46,30,2.5,111.05,1.7,63.75 +5273,46,30,2.5,111.05,1.7,63.75 +5274,46,30,2.5,111.05,1.7,63.75 +5275,46,30,2.5,111.05,1.7,63.75 +5276,46,30,2.5,111.05,1.7,63.75 +5277,46,30,2.5,111.05,1.7,63.75 +5278,46,30,2.5,111.05,1.7,63.75 +5279,46,30,2.5,111.05,1.7,63.75 +5280,46,30,2.5,111.05,1.7,63.75 +5281,46,30,2.5,111.05,1.7,63.75 +5282,46,30,2.5,111.05,1.7,63.75 +5283,46,30,2.5,111.05,1.7,63.75 +5284,46,30,2.5,111.05,1.7,63.75 +5285,46,30,2.5,111.05,1.7,63.75 +5286,46,30,2.5,111.05,1.7,63.75 +5287,46,30,2.5,111.05,1.7,63.75 +5288,46,30,2.5,111.05,1.7,63.75 +5289,46,30,2.5,111.05,1.7,63.75 +5290,46,30,2.5,111.05,1.7,63.75 +5291,46,30,2.5,111.05,1.7,63.75 +5292,46,30,2.5,111.05,1.7,63.75 +5293,46,30,2.5,111.05,1.7,63.75 +5294,46,30,2.5,111.05,1.7,63.75 +5295,46,30,2.5,111.05,1.7,63.75 +5296,46,30,2.5,111.05,1.7,63.75 +5297,46,30,2.5,111.05,1.7,63.75 +5298,46,30,2.5,111.05,1.7,63.75 +5299,46,30,2.5,111.05,1.7,63.75 +5300,46,30,2.5,111.05,1.7,63.75 +5301,46,30,2.5,111.05,1.7,63.75 +5302,46,30,2.5,111.05,1.7,63.75 +5303,46,30,2.5,111.05,1.7,63.75 +5304,46,30,2.5,111.05,1.7,63.75 +5305,46,30,2.5,111.05,1.7,63.75 +5306,46,30,2.5,111.05,1.7,63.75 +5307,46,30,2.5,111.05,1.7,63.75 +5308,46,30,2.5,111.05,1.7,63.75 +5309,46,30,2.5,111.05,1.7,63.75 +5310,46,30,2.5,111.05,1.7,63.75 +5311,46,30,2.5,111.05,1.7,63.75 +5312,46,30,2.5,111.05,1.7,63.75 +5313,46,30,2.5,111.05,1.7,63.75 +5314,46,30,2.5,111.05,1.7,63.75 +5315,46,30,2.5,111.05,1.7,63.75 +5316,46,30,2.5,111.05,1.7,63.75 +5317,46,30,2.5,111.05,1.7,63.75 +5318,46,30,2.5,111.05,1.7,63.75 +5319,46,30,2.5,111.05,1.7,63.75 +5320,46,30,2.5,111.05,1.7,63.75 +5321,46,30,2.5,111.05,1.7,63.75 +5322,46,30,2.5,111.05,1.7,63.75 +5323,46,30,2.5,111.05,1.7,63.75 +5324,46,30,2.5,111.05,1.7,63.75 +5325,46,30,2.5,111.05,1.7,63.75 +5326,46,30,2.5,111.05,1.7,63.75 +5327,46,30,2.5,111.05,1.7,63.75 +5328,46,30,2.5,111.05,1.7,63.75 +5329,46,30,2.5,111.05,1.7,63.75 +5330,46,30,2.5,111.05,1.7,63.75 +5331,46,30,2.5,111.05,1.7,63.75 +5332,46,30,2.5,111.05,1.7,63.75 +5333,46,30,2.5,111.05,1.7,63.75 +5334,46,30,2.5,111.05,1.7,63.75 +5335,46,30,2.5,111.05,1.7,63.75 +5336,46,30,2.5,111.05,1.7,63.75 +5337,46,30,2.5,111.05,1.7,63.75 +5338,46,30,2.5,111.05,1.7,63.75 +5339,46,30,2.5,111.05,1.7,63.75 +5340,46,30,2.5,111.05,1.7,63.75 +5341,46,30,2.5,111.05,1.7,63.75 +5342,46,30,2.5,111.05,1.7,63.75 +5343,46,30,2.5,111.05,1.7,63.75 +5344,46,30,2.5,111.05,1.7,63.75 +5345,46,30,2.5,111.05,1.7,63.75 +5346,46,30,2.5,111.05,1.7,63.75 +5347,46,30,2.5,111.05,1.7,63.75 +5348,46,30,2.5,111.05,1.7,63.75 +5349,46,30,2.5,111.05,1.7,63.75 +5350,46,30,2.5,111.05,1.7,63.75 +5351,46,30,2.5,111.05,1.7,63.75 +5352,46,30,2.5,111.05,1.7,63.75 +5353,46,30,2.5,111.05,1.7,63.75 +5354,46,30,2.5,111.05,1.7,63.75 +5355,46,30,2.5,111.05,1.7,63.75 +5356,46,30,2.5,111.05,1.7,63.75 +5357,46,30,2.5,111.05,1.7,63.75 +5358,46,30,2.5,111.05,1.7,63.75 +5359,46,30,2.5,111.05,1.7,63.75 +5360,46,30,2.5,111.05,1.7,63.75 +5361,46,30,2.5,111.05,1.7,63.75 +5362,46,30,2.5,111.05,1.7,63.75 +5363,46,30,2.5,111.05,1.7,63.75 +5364,46,30,2.5,111.05,1.7,63.75 +5365,46,30,2.5,111.05,1.7,63.75 +5366,46,30,2.5,111.05,1.7,63.75 +5367,46,30,2.5,111.05,1.7,63.75 +5368,46,30,2.5,111.05,1.7,63.75 +5369,46,30,2.5,111.05,1.7,63.75 +5370,46,30,2.5,111.05,1.7,63.75 +5371,46,30,2.5,111.05,1.7,63.75 +5372,46,30,2.5,111.05,1.7,63.75 +5373,46,30,2.5,111.05,1.7,63.75 +5374,46,30,2.5,111.05,1.7,63.75 +5375,46,30,2.5,111.05,1.7,63.75 +5376,46,30,2.5,111.05,1.7,63.75 +5377,46,30,2.5,111.05,1.7,63.75 +5378,46,30,2.5,111.05,1.7,63.75 +5379,46,30,2.5,111.05,1.7,63.75 +5380,46,30,2.5,111.05,1.7,63.75 +5381,46,30,2.5,111.05,1.7,63.75 +5382,46,30,2.5,111.05,1.7,63.75 +5383,46,30,2.5,111.05,1.7,63.75 +5384,46,30,2.5,111.05,1.7,63.75 +5385,46,30,2.5,111.05,1.7,63.75 +5386,46,30,2.5,111.05,1.7,63.75 +5387,46,30,2.5,111.05,1.7,63.75 +5388,46,30,2.5,111.05,1.7,63.75 +5389,46,30,2.5,111.05,1.7,63.75 +5390,46,30,2.5,111.05,1.7,63.75 +5391,46,30,2.5,111.05,1.7,63.75 +5392,46,30,2.5,111.05,1.7,63.75 +5393,46,30,2.5,111.05,1.7,63.75 +5394,46,30,2.5,111.05,1.7,63.75 +5395,46,30,2.5,111.05,1.7,63.75 +5396,46,30,2.5,111.05,1.7,63.75 +5397,46,30,2.5,111.05,1.7,63.75 +5398,46,30,2.5,111.05,1.7,63.75 +5399,46,30,2.5,111.05,1.7,63.75 +5400,46,30,2.5,111.05,1.7,63.75 +5401,46,30,2.5,111.05,1.7,63.75 +5402,46,30,2.5,111.05,1.7,63.75 +5403,46,30,2.5,111.05,1.7,63.75 +5404,46,30,2.5,111.05,1.7,63.75 +5405,46,30,2.5,111.05,1.7,63.75 +5406,46,30,2.5,111.05,1.7,63.75 +5407,46,30,2.5,111.05,1.7,63.75 +5408,46,30,2.5,111.05,1.7,63.75 +5409,46,30,2.5,111.05,1.7,63.75 +5410,46,30,2.5,111.05,1.7,63.75 +5411,46,30,2.5,111.05,1.7,63.75 +5412,46,30,2.5,111.05,1.7,63.75 +5413,46,30,2.5,111.05,1.7,63.75 +5414,46,30,2.5,111.05,1.7,63.75 +5415,46,30,2.5,111.05,1.7,63.75 +5416,46,30,2.5,111.05,1.7,63.75 +5417,46,30,2.5,111.05,1.7,63.75 +5418,46,30,2.5,111.05,1.7,63.75 +5419,46,30,2.5,111.05,1.7,63.75 +5420,46,30,2.5,111.05,1.7,63.75 +5421,46,30,2.5,111.05,1.7,63.75 +5422,46,30,2.5,111.05,1.7,63.75 +5423,46,30,2.5,111.05,1.7,63.75 +5424,46,30,2.5,111.05,1.7,63.75 +5425,46,30,2.5,111.05,1.7,63.75 +5426,46,30,2.5,111.05,1.7,63.75 +5427,46,30,2.5,111.05,1.7,63.75 +5428,46,30,2.5,111.05,1.7,63.75 +5429,46,30,2.5,111.05,1.7,63.75 +5430,46,30,2.5,111.05,1.7,63.75 +5431,46,30,2.5,111.05,1.7,63.75 +5432,46,30,2.5,111.05,1.7,63.75 +5433,46,30,2.5,111.05,1.7,63.75 +5434,46,30,2.5,111.05,1.7,63.75 +5435,46,30,2.5,111.05,1.7,63.75 +5436,46,30,2.5,111.05,1.7,63.75 +5437,46,30,2.5,111.05,1.7,63.75 +5438,46,30,2.5,111.05,1.7,63.75 +5439,46,30,2.5,111.05,1.7,63.75 +5440,46,30,2.5,111.05,1.7,63.75 +5441,46,30,2.5,111.05,1.7,63.75 +5442,46,30,2.5,111.05,1.7,63.75 +5443,46,30,2.5,111.05,1.7,63.75 +5444,46,30,2.5,111.05,1.7,63.75 +5445,46,30,2.5,111.05,1.7,63.75 +5446,46,30,2.5,111.05,1.7,63.75 +5447,46,30,2.5,111.05,1.7,63.75 +5448,46,30,2.5,111.05,1.7,63.75 +5449,46,30,2.5,111.05,1.7,63.75 +5450,46,30,2.5,111.05,1.7,63.75 +5451,46,30,2.5,111.05,1.7,63.75 +5452,46,30,2.5,111.05,1.7,63.75 +5453,46,30,2.5,111.05,1.7,63.75 +5454,46,30,2.5,111.05,1.7,63.75 +5455,46,30,2.5,111.05,1.7,63.75 +5456,46,30,2.5,111.05,1.7,63.75 +5457,46,30,2.5,111.05,1.7,63.75 +5458,46,30,2.5,111.05,1.7,63.75 +5459,46,30,2.5,111.05,1.7,63.75 +5460,46,30,2.5,111.05,1.7,63.75 +5461,46,30,2.5,111.05,1.7,63.75 +5462,46,30,2.5,111.05,1.7,63.75 +5463,46,30,2.5,111.05,1.7,63.75 +5464,46,30,2.5,111.05,1.7,63.75 +5465,46,30,2.5,111.05,1.7,63.75 +5466,46,30,2.5,111.05,1.7,63.75 +5467,46,30,2.5,111.05,1.7,63.75 +5468,46,30,2.5,111.05,1.7,63.75 +5469,46,30,2.5,111.05,1.7,63.75 +5470,46,30,2.5,111.05,1.7,63.75 +5471,46,30,2.5,111.05,1.7,63.75 +5472,46,30,2.5,111.05,1.7,63.75 +5473,46,30,2.5,111.05,1.7,63.75 +5474,46,30,2.5,111.05,1.7,63.75 +5475,46,30,2.5,111.05,1.7,63.75 +5476,46,30,2.5,111.05,1.7,63.75 +5477,46,30,2.5,111.05,1.7,63.75 +5478,46,30,2.5,111.05,1.7,63.75 +5479,46,30,2.5,111.05,1.7,63.75 +5480,46,30,2.5,111.05,1.7,63.75 +5481,46,30,2.5,111.05,1.7,63.75 +5482,46,30,2.5,111.05,1.7,63.75 +5483,46,30,2.5,111.05,1.7,63.75 +5484,46,30,2.5,111.05,1.7,63.75 +5485,46,30,2.5,111.05,1.7,63.75 +5486,46,30,2.5,111.05,1.7,63.75 +5487,46,30,2.5,111.05,1.7,63.75 +5488,46,30,2.5,111.05,1.7,63.75 +5489,46,30,2.5,111.05,1.7,63.75 +5490,46,30,2.5,111.05,1.7,63.75 +5491,46,30,2.5,111.05,1.7,63.75 +5492,46,30,2.5,111.05,1.7,63.75 +5493,46,30,2.5,111.05,1.7,63.75 +5494,46,30,2.5,111.05,1.7,63.75 +5495,46,30,2.5,111.05,1.7,63.75 +5496,46,30,2.5,111.05,1.7,63.75 +5497,46,30,2.5,111.05,1.7,63.75 +5498,46,30,2.5,111.05,1.7,63.75 +5499,46,30,2.5,111.05,1.7,63.75 +5500,46,30,2.5,111.05,1.7,63.75 +5501,46,30,2.5,111.05,1.7,63.75 +5502,46,30,2.5,111.05,1.7,63.75 +5503,46,30,2.5,111.05,1.7,63.75 +5504,46,30,2.5,111.05,1.7,63.75 +5505,46,30,2.5,111.05,1.7,63.75 +5506,46,30,2.5,111.05,1.7,63.75 +5507,46,30,2.5,111.05,1.7,63.75 +5508,46,30,2.5,111.05,1.7,63.75 +5509,46,30,2.5,111.05,1.7,63.75 +5510,46,30,2.5,111.05,1.7,63.75 +5511,46,30,2.5,111.05,1.7,63.75 +5512,46,30,2.5,111.05,1.7,63.75 +5513,46,30,2.5,111.05,1.7,63.75 +5514,46,30,2.5,111.05,1.7,63.75 +5515,46,30,2.5,111.05,1.7,63.75 +5516,46,30,2.5,111.05,1.7,63.75 +5517,46,30,2.5,111.05,1.7,63.75 +5518,46,30,2.5,111.05,1.7,63.75 +5519,46,30,2.5,111.05,1.7,63.75 +5520,46,30,2.5,111.05,1.7,63.75 +5521,46,30,2.5,111.05,1.7,63.75 +5522,46,30,2.5,111.05,1.7,63.75 +5523,46,30,2.5,111.05,1.7,63.75 +5524,46,30,2.5,111.05,1.7,63.75 +5525,46,30,2.5,111.05,1.7,63.75 +5526,46,30,2.5,111.05,1.7,63.75 +5527,46,30,2.5,111.05,1.7,63.75 +5528,46,30,2.5,111.05,1.7,63.75 +5529,46,30,2.5,111.05,1.7,63.75 +5530,46,30,2.5,111.05,1.7,63.75 +5531,46,30,2.5,111.05,1.7,63.75 +5532,46,30,2.5,111.05,1.7,63.75 +5533,46,30,2.5,111.05,1.7,63.75 +5534,46,30,2.5,111.05,1.7,63.75 +5535,46,30,2.5,111.05,1.7,63.75 +5536,46,30,2.5,111.05,1.7,63.75 +5537,46,30,2.5,111.05,1.7,63.75 +5538,46,30,2.5,111.05,1.7,63.75 +5539,46,30,2.5,111.05,1.7,63.75 +5540,46,30,2.5,111.05,1.7,63.75 +5541,46,30,2.5,111.05,1.7,63.75 +5542,46,30,2.5,111.05,1.7,63.75 +5543,46,30,2.5,111.05,1.7,63.75 +5544,46,30,2.5,111.05,1.7,63.75 +5545,46,30,2.5,111.05,1.7,63.75 +5546,46,30,2.5,111.05,1.7,63.75 +5547,46,30,2.5,111.05,1.7,63.75 +5548,46,30,2.5,111.05,1.7,63.75 +5549,46,30,2.5,111.05,1.7,63.75 +5550,46,30,2.5,111.05,1.7,63.75 +5551,46,30,2.5,111.05,1.7,63.75 +5552,46,30,2.5,111.05,1.7,63.75 +5553,46,30,2.5,111.05,1.7,63.75 +5554,46,30,2.5,111.05,1.7,63.75 +5555,46,30,2.5,111.05,1.7,63.75 +5556,46,30,2.5,111.05,1.7,63.75 +5557,46,30,2.5,111.05,1.7,63.75 +5558,46,30,2.5,111.05,1.7,63.75 +5559,46,30,2.5,111.05,1.7,63.75 +5560,46,30,2.5,111.05,1.7,63.75 +5561,46,30,2.5,111.05,1.7,63.75 +5562,46,30,2.5,111.05,1.7,63.75 +5563,46,30,2.5,111.05,1.7,63.75 +5564,46,30,2.5,111.05,1.7,63.75 +5565,46,30,2.5,111.05,1.7,63.75 +5566,46,30,2.5,111.05,1.7,63.75 +5567,46,30,2.5,111.05,1.7,63.75 +5568,46,30,2.5,111.05,1.7,63.75 +5569,46,30,2.5,111.05,1.7,63.75 +5570,46,30,2.5,111.05,1.7,63.75 +5571,46,30,2.5,111.05,1.7,63.75 +5572,46,30,2.5,111.05,1.7,63.75 +5573,46,30,2.5,111.05,1.7,63.75 +5574,46,30,2.5,111.05,1.7,63.75 +5575,46,30,2.5,111.05,1.7,63.75 +5576,46,30,2.5,111.05,1.7,63.75 +5577,46,30,2.5,111.05,1.7,63.75 +5578,46,30,2.5,111.05,1.7,63.75 +5579,46,30,2.5,111.05,1.7,63.75 +5580,46,30,2.5,111.05,1.7,63.75 +5581,46,30,2.5,111.05,1.7,63.75 +5582,46,30,2.5,111.05,1.7,63.75 +5583,46,30,2.5,111.05,1.7,63.75 +5584,46,30,2.5,111.05,1.7,63.75 +5585,46,30,2.5,111.05,1.7,63.75 +5586,46,30,2.5,111.05,1.7,63.75 +5587,46,30,2.5,111.05,1.7,63.75 +5588,46,30,2.5,111.05,1.7,63.75 +5589,46,30,2.5,111.05,1.7,63.75 +5590,46,30,2.5,111.05,1.7,63.75 +5591,46,30,2.5,111.05,1.7,63.75 +5592,46,30,2.5,111.05,1.7,63.75 +5593,46,30,2.5,111.05,1.7,63.75 +5594,46,30,2.5,111.05,1.7,63.75 +5595,46,30,2.5,111.05,1.7,63.75 +5596,46,30,2.5,111.05,1.7,63.75 +5597,46,30,2.5,111.05,1.7,63.75 +5598,46,30,2.5,111.05,1.7,63.75 +5599,46,30,2.5,111.05,1.7,63.75 +5600,46,30,2.5,111.05,1.7,63.75 +5601,46,30,2.5,111.05,1.7,63.75 +5602,46,30,2.5,111.05,1.7,63.75 +5603,46,30,2.5,111.05,1.7,63.75 +5604,46,30,2.5,111.05,1.7,63.75 +5605,46,30,2.5,111.05,1.7,63.75 +5606,46,30,2.5,111.05,1.7,63.75 +5607,46,30,2.5,111.05,1.7,63.75 +5608,46,30,2.5,111.05,1.7,63.75 +5609,46,30,2.5,111.05,1.7,63.75 +5610,46,30,2.5,111.05,1.7,63.75 +5611,46,30,2.5,111.05,1.7,63.75 +5612,46,30,2.5,111.05,1.7,63.75 +5613,46,30,2.5,111.05,1.7,63.75 +5614,46,30,2.5,111.05,1.7,63.75 +5615,46,30,2.5,111.05,1.7,63.75 +5616,46,30,2.5,111.05,1.7,63.75 +5617,46,30,2.5,111.05,1.7,63.75 +5618,46,30,2.5,111.05,1.7,63.75 +5619,46,30,2.5,111.05,1.7,63.75 +5620,46,30,2.5,111.05,1.7,63.75 +5621,46,30,2.5,111.05,1.7,63.75 +5622,46,30,2.5,111.05,1.7,63.75 +5623,46,30,2.5,111.05,1.7,63.75 +5624,46,30,2.5,111.05,1.7,63.75 +5625,46,30,2.5,111.05,1.7,63.75 +5626,46,30,2.5,111.05,1.7,63.75 +5627,46,30,2.5,111.05,1.7,63.75 +5628,46,30,2.5,111.05,1.7,63.75 +5629,46,30,2.5,111.05,1.7,63.75 +5630,46,30,2.5,111.05,1.7,63.75 +5631,46,30,2.5,111.05,1.7,63.75 +5632,46,30,2.5,111.05,1.7,63.75 +5633,46,30,2.5,111.05,1.7,63.75 +5634,46,30,2.5,111.05,1.7,63.75 +5635,46,30,2.5,111.05,1.7,63.75 +5636,46,30,2.5,111.05,1.7,63.75 +5637,46,30,2.5,111.05,1.7,63.75 +5638,46,30,2.5,111.05,1.7,63.75 +5639,46,30,2.5,111.05,1.7,63.75 +5640,46,30,2.5,111.05,1.7,63.75 +5641,46,30,2.5,111.05,1.7,63.75 +5642,46,30,2.5,111.05,1.7,63.75 +5643,46,30,2.5,111.05,1.7,63.75 +5644,46,30,2.5,111.05,1.7,63.75 +5645,46,30,2.5,111.05,1.7,63.75 +5646,46,30,2.5,111.05,1.7,63.75 +5647,46,30,2.5,111.05,1.7,63.75 +5648,46,30,2.5,111.05,1.7,63.75 +5649,46,30,2.5,111.05,1.7,63.75 +5650,46,30,2.5,111.05,1.7,63.75 +5651,46,30,2.5,111.05,1.7,63.75 +5652,46,30,2.5,111.05,1.7,63.75 +5653,46,30,2.5,111.05,1.7,63.75 +5654,46,30,2.5,111.05,1.7,63.75 +5655,46,30,2.5,111.05,1.7,63.75 +5656,46,30,2.5,111.05,1.7,63.75 +5657,46,30,2.5,111.05,1.7,63.75 +5658,46,30,2.5,111.05,1.7,63.75 +5659,46,30,2.5,111.05,1.7,63.75 +5660,46,30,2.5,111.05,1.7,63.75 +5661,46,30,2.5,111.05,1.7,63.75 +5662,46,30,2.5,111.05,1.7,63.75 +5663,46,30,2.5,111.05,1.7,63.75 +5664,46,30,2.5,111.05,1.7,63.75 +5665,46,30,2.5,111.05,1.7,63.75 +5666,46,30,2.5,111.05,1.7,63.75 +5667,46,30,2.5,111.05,1.7,63.75 +5668,46,30,2.5,111.05,1.7,63.75 +5669,46,30,2.5,111.05,1.7,63.75 +5670,46,30,2.5,111.05,1.7,63.75 +5671,46,30,2.5,111.05,1.7,63.75 +5672,46,30,2.5,111.05,1.7,63.75 +5673,46,30,2.5,111.05,1.7,63.75 +5674,46,30,2.5,111.05,1.7,63.75 +5675,46,30,2.5,111.05,1.7,63.75 +5676,46,30,2.5,111.05,1.7,63.75 +5677,46,30,2.5,111.05,1.7,63.75 +5678,46,30,2.5,111.05,1.7,63.75 +5679,46,30,2.5,111.05,1.7,63.75 +5680,46,30,2.5,111.05,1.7,63.75 +5681,46,30,2.5,111.05,1.7,63.75 +5682,46,30,2.5,111.05,1.7,63.75 +5683,46,30,2.5,111.05,1.7,63.75 +5684,46,30,2.5,111.05,1.7,63.75 +5685,46,30,2.5,111.05,1.7,63.75 +5686,46,30,2.5,111.05,1.7,63.75 +5687,46,30,2.5,111.05,1.7,63.75 +5688,46,30,2.5,111.05,1.7,63.75 +5689,46,30,2.5,111.05,1.7,63.75 +5690,46,30,2.5,111.05,1.7,63.75 +5691,46,30,2.5,111.05,1.7,63.75 +5692,46,30,2.5,111.05,1.7,63.75 +5693,46,30,2.5,111.05,1.7,63.75 +5694,46,30,2.5,111.05,1.7,63.75 +5695,46,30,2.5,111.05,1.7,63.75 +5696,46,30,2.5,111.05,1.7,63.75 +5697,46,30,2.5,111.05,1.7,63.75 +5698,46,30,2.5,111.05,1.7,63.75 +5699,46,30,2.5,111.05,1.7,63.75 +5700,46,30,2.5,111.05,1.7,63.75 +5701,46,30,2.5,111.05,1.7,63.75 +5702,46,30,2.5,111.05,1.7,63.75 +5703,46,30,2.5,111.05,1.7,63.75 +5704,46,30,2.5,111.05,1.7,63.75 +5705,46,30,2.5,111.05,1.7,63.75 +5706,46,30,2.5,111.05,1.7,63.75 +5707,46,30,2.5,111.05,1.7,63.75 +5708,46,30,2.5,111.05,1.7,63.75 +5709,46,30,2.5,111.05,1.7,63.75 +5710,46,30,2.5,111.05,1.7,63.75 +5711,46,30,2.5,111.05,1.7,63.75 +5712,46,30,2.5,111.05,1.7,63.75 +5713,46,30,2.5,111.05,1.7,63.75 +5714,46,30,2.5,111.05,1.7,63.75 +5715,46,30,2.5,111.05,1.7,63.75 +5716,46,30,2.5,111.05,1.7,63.75 +5717,46,30,2.5,111.05,1.7,63.75 +5718,46,30,2.5,111.05,1.7,63.75 +5719,46,30,2.5,111.05,1.7,63.75 +5720,46,30,2.5,111.05,1.7,63.75 +5721,46,30,2.5,111.05,1.7,63.75 +5722,46,30,2.5,111.05,1.7,63.75 +5723,46,30,2.5,111.05,1.7,63.75 +5724,46,30,2.5,111.05,1.7,63.75 +5725,46,30,2.5,111.05,1.7,63.75 +5726,46,30,2.5,111.05,1.7,63.75 +5727,46,30,2.5,111.05,1.7,63.75 +5728,46,30,2.5,111.05,1.7,63.75 +5729,46,30,2.5,111.05,1.7,63.75 +5730,46,30,2.5,111.05,1.7,63.75 +5731,46,30,2.5,111.05,1.7,63.75 +5732,46,30,2.5,111.05,1.7,63.75 +5733,46,30,2.5,111.05,1.7,63.75 +5734,46,30,2.5,111.05,1.7,63.75 +5735,46,30,2.5,111.05,1.7,63.75 +5736,46,30,2.5,111.05,1.7,63.75 +5737,46,30,2.5,111.05,1.7,63.75 +5738,46,30,2.5,111.05,1.7,63.75 +5739,46,30,2.5,111.05,1.7,63.75 +5740,46,30,2.5,111.05,1.7,63.75 +5741,46,30,2.5,111.05,1.7,63.75 +5742,46,30,2.5,111.05,1.7,63.75 +5743,46,30,2.5,111.05,1.7,63.75 +5744,46,30,2.5,111.05,1.7,63.75 +5745,46,30,2.5,111.05,1.7,63.75 +5746,46,30,2.5,111.05,1.7,63.75 +5747,46,30,2.5,111.05,1.7,63.75 +5748,46,30,2.5,111.05,1.7,63.75 +5749,46,30,2.5,111.05,1.7,63.75 +5750,46,30,2.5,111.05,1.7,63.75 +5751,46,30,2.5,111.05,1.7,63.75 +5752,46,30,2.5,111.05,1.7,63.75 +5753,46,30,2.5,111.05,1.7,63.75 +5754,46,30,2.5,111.05,1.7,63.75 +5755,46,30,2.5,111.05,1.7,63.75 +5756,46,30,2.5,111.05,1.7,63.75 +5757,46,30,2.5,111.05,1.7,63.75 +5758,46,30,2.5,111.05,1.7,63.75 +5759,46,30,2.5,111.05,1.7,63.75 +5760,46,30,2.5,111.05,1.7,63.75 +5761,46,30,2.5,111.05,1.7,63.75 +5762,46,30,2.5,111.05,1.7,63.75 +5763,46,30,2.5,111.05,1.7,63.75 +5764,46,30,2.5,111.05,1.7,63.75 +5765,46,30,2.5,111.05,1.7,63.75 +5766,46,30,2.5,111.05,1.7,63.75 +5767,46,30,2.5,111.05,1.7,63.75 +5768,46,30,2.5,111.05,1.7,63.75 +5769,46,30,2.5,111.05,1.7,63.75 +5770,46,30,2.5,111.05,1.7,63.75 +5771,46,30,2.5,111.05,1.7,63.75 +5772,46,30,2.5,111.05,1.7,63.75 +5773,46,30,2.5,111.05,1.7,63.75 +5774,46,30,2.5,111.05,1.7,63.75 +5775,46,30,2.5,111.05,1.7,63.75 +5776,46,30,2.5,111.05,1.7,63.75 +5777,46,30,2.5,111.05,1.7,63.75 +5778,46,30,2.5,111.05,1.7,63.75 +5779,46,30,2.5,111.05,1.7,63.75 +5780,46,30,2.5,111.05,1.7,63.75 +5781,46,30,2.5,111.05,1.7,63.75 +5782,46,30,2.5,111.05,1.7,63.75 +5783,46,30,2.5,111.05,1.7,63.75 +5784,46,30,2.5,111.05,1.7,63.75 +5785,46,30,2.5,111.05,1.7,63.75 +5786,46,30,2.5,111.05,1.7,63.75 +5787,46,30,2.5,111.05,1.7,63.75 +5788,46,30,2.5,111.05,1.7,63.75 +5789,46,30,2.5,111.05,1.7,63.75 +5790,46,30,2.5,111.05,1.7,63.75 +5791,46,30,2.5,111.05,1.7,63.75 +5792,46,30,2.5,111.05,1.7,63.75 +5793,46,30,2.5,111.05,1.7,63.75 +5794,46,30,2.5,111.05,1.7,63.75 +5795,46,30,2.5,111.05,1.7,63.75 +5796,46,30,2.5,111.05,1.7,63.75 +5797,46,30,2.5,111.05,1.7,63.75 +5798,46,30,2.5,111.05,1.7,63.75 +5799,46,30,2.5,111.05,1.7,63.75 +5800,46,30,2.5,111.05,1.7,63.75 +5801,46,30,2.5,111.05,1.7,63.75 +5802,46,30,2.5,111.05,1.7,63.75 +5803,46,30,2.5,111.05,1.7,63.75 +5804,46,30,2.5,111.05,1.7,63.75 +5805,46,30,2.5,111.05,1.7,63.75 +5806,46,30,2.5,111.05,1.7,63.75 +5807,46,30,2.5,111.05,1.7,63.75 +5808,46,30,2.5,111.05,1.7,63.75 +5809,46,30,2.5,111.05,1.7,63.75 +5810,46,30,2.5,111.05,1.7,63.75 +5811,46,30,2.5,111.05,1.7,63.75 +5812,46,30,2.5,111.05,1.7,63.75 +5813,46,30,2.5,111.05,1.7,63.75 +5814,46,30,2.5,111.05,1.7,63.75 +5815,46,30,2.5,111.05,1.7,63.75 +5816,46,30,2.5,111.05,1.7,63.75 +5817,46,30,2.5,111.05,1.7,63.75 +5818,46,30,2.5,111.05,1.7,63.75 +5819,46,30,2.5,111.05,1.7,63.75 +5820,46,30,2.5,111.05,1.7,63.75 +5821,46,30,2.5,111.05,1.7,63.75 +5822,46,30,2.5,111.05,1.7,63.75 +5823,46,30,2.5,111.05,1.7,63.75 +5824,46,30,2.5,111.05,1.7,63.75 +5825,46,30,2.5,111.05,1.7,63.75 +5826,46,30,2.5,111.05,1.7,63.75 +5827,46,30,2.5,111.05,1.7,63.75 +5828,46,30,2.5,111.05,1.7,63.75 +5829,46,30,2.5,111.05,1.7,63.75 +5830,46,30,2.5,111.05,1.7,63.75 +5831,46,30,2.5,111.05,1.7,63.75 +5832,46,30,2.5,111.05,1.7,63.75 +5833,46,30,2.5,111.05,1.7,63.75 +5834,46,30,2.5,111.05,1.7,63.75 +5835,46,30,2.5,111.05,1.7,63.75 +5836,46,30,2.5,111.05,1.7,63.75 +5837,46,30,2.5,111.05,1.7,63.75 +5838,46,30,2.5,111.05,1.7,63.75 +5839,46,30,2.5,111.05,1.7,63.75 +5840,46,30,2.5,111.05,1.7,63.75 +5841,46,30,2.5,111.05,1.7,63.75 +5842,46,30,2.5,111.05,1.7,63.75 +5843,46,30,2.5,111.05,1.7,63.75 +5844,46,30,2.5,111.05,1.7,63.75 +5845,46,30,2.5,111.05,1.7,63.75 +5846,46,30,2.5,111.05,1.7,63.75 +5847,46,30,2.5,111.05,1.7,63.75 +5848,46,30,2.5,111.05,1.7,63.75 +5849,46,30,2.5,111.05,1.7,63.75 +5850,46,30,2.5,111.05,1.7,63.75 +5851,46,30,2.5,111.05,1.7,63.75 +5852,46,30,2.5,111.05,1.7,63.75 +5853,46,30,2.5,111.05,1.7,63.75 +5854,46,30,2.5,111.05,1.7,63.75 +5855,46,30,2.5,111.05,1.7,63.75 +5856,46,30,2.5,111.05,1.7,63.75 +5857,46,30,2.5,111.05,1.7,63.75 +5858,46,30,2.5,111.05,1.7,63.75 +5859,46,30,2.5,111.05,1.7,63.75 +5860,46,30,2.5,111.05,1.7,63.75 +5861,46,30,2.5,111.05,1.7,63.75 +5862,46,30,2.5,111.05,1.7,63.75 +5863,46,30,2.5,111.05,1.7,63.75 +5864,46,30,2.5,111.05,1.7,63.75 +5865,46,30,2.5,111.05,1.7,63.75 +5866,46,30,2.5,111.05,1.7,63.75 +5867,46,30,2.5,111.05,1.7,63.75 +5868,46,30,2.5,111.05,1.7,63.75 +5869,46,30,2.5,111.05,1.7,63.75 +5870,46,30,2.5,111.05,1.7,63.75 +5871,46,30,2.5,111.05,1.7,63.75 +5872,46,30,2.5,111.05,1.7,63.75 +5873,46,30,2.5,111.05,1.7,63.75 +5874,46,30,2.5,111.05,1.7,63.75 +5875,46,30,2.5,111.05,1.7,63.75 +5876,46,30,2.5,111.05,1.7,63.75 +5877,46,30,2.5,111.05,1.7,63.75 +5878,46,30,2.5,111.05,1.7,63.75 +5879,46,30,2.5,111.05,1.7,63.75 +5880,46,30,2.5,111.05,1.7,63.75 +5881,46,30,2.5,111.05,1.7,63.75 +5882,46,30,2.5,111.05,1.7,63.75 +5883,46,30,2.5,111.05,1.7,63.75 +5884,46,30,2.5,111.05,1.7,63.75 +5885,46,30,2.5,111.05,1.7,63.75 +5886,46,30,2.5,111.05,1.7,63.75 +5887,46,30,2.5,111.05,1.7,63.75 +5888,46,30,2.5,111.05,1.7,63.75 +5889,46,30,2.5,111.05,1.7,63.75 +5890,46,30,2.5,111.05,1.7,63.75 +5891,46,30,2.5,111.05,1.7,63.75 +5892,46,30,2.5,111.05,1.7,63.75 +5893,46,30,2.5,111.05,1.7,63.75 +5894,46,30,2.5,111.05,1.7,63.75 +5895,46,30,2.5,111.05,1.7,63.75 +5896,46,30,2.5,111.05,1.7,63.75 +5897,46,30,2.5,111.05,1.7,63.75 +5898,46,30,2.5,111.05,1.7,63.75 +5899,46,30,2.5,111.05,1.7,63.75 +5900,46,30,2.5,111.05,1.7,63.75 +5901,46,30,2.5,111.05,1.7,63.75 +5902,46,30,2.5,111.05,1.7,63.75 +5903,46,30,2.5,111.05,1.7,63.75 +5904,46,30,2.5,111.05,1.7,63.75 +5905,46,30,2.5,111.05,1.7,63.75 +5906,46,30,2.5,111.05,1.7,63.75 +5907,46,30,2.5,111.05,1.7,63.75 +5908,46,30,2.5,111.05,1.7,63.75 +5909,46,30,2.5,111.05,1.7,63.75 +5910,46,30,2.5,111.05,1.7,63.75 +5911,46,30,2.5,111.05,1.7,63.75 +5912,46,30,2.5,111.05,1.7,63.75 +5913,46,30,2.5,111.05,1.7,63.75 +5914,46,30,2.5,111.05,1.7,63.75 +5915,46,30,2.5,111.05,1.7,63.75 +5916,46,30,2.5,111.05,1.7,63.75 +5917,46,30,2.5,111.05,1.7,63.75 +5918,46,30,2.5,111.05,1.7,63.75 +5919,46,30,2.5,111.05,1.7,63.75 +5920,46,30,2.5,111.05,1.7,63.75 +5921,46,30,2.5,111.05,1.7,63.75 +5922,46,30,2.5,111.05,1.7,63.75 +5923,46,30,2.5,111.05,1.7,63.75 +5924,46,30,2.5,111.05,1.7,63.75 +5925,46,30,2.5,111.05,1.7,63.75 +5926,46,30,2.5,111.05,1.7,63.75 +5927,46,30,2.5,111.05,1.7,63.75 +5928,46,30,2.5,111.05,1.7,63.75 +5929,46,30,2.5,111.05,1.7,63.75 +5930,46,30,2.5,111.05,1.7,63.75 +5931,46,30,2.5,111.05,1.7,63.75 +5932,46,30,2.5,111.05,1.7,63.75 +5933,46,30,2.5,111.05,1.7,63.75 +5934,46,30,2.5,111.05,1.7,63.75 +5935,46,30,2.5,111.05,1.7,63.75 +5936,46,30,2.5,111.05,1.7,63.75 +5937,46,30,2.5,111.05,1.7,63.75 +5938,46,30,2.5,111.05,1.7,63.75 +5939,46,30,2.5,111.05,1.7,63.75 +5940,46,30,2.5,111.05,1.7,63.75 +5941,46,30,2.5,111.05,1.7,63.75 +5942,46,30,2.5,111.05,1.7,63.75 +5943,46,30,2.5,111.05,1.7,63.75 +5944,46,30,2.5,111.05,1.7,63.75 +5945,46,30,2.5,111.05,1.7,63.75 +5946,46,30,2.5,111.05,1.7,63.75 +5947,46,30,2.5,111.05,1.7,63.75 +5948,46,30,2.5,111.05,1.7,63.75 +5949,46,30,2.5,111.05,1.7,63.75 +5950,46,30,2.5,111.05,1.7,63.75 +5951,46,30,2.5,111.05,1.7,63.75 +5952,46,30,2.5,111.05,1.7,63.75 +5953,46,30,2.5,111.05,1.7,63.75 +5954,46,30,2.5,111.05,1.7,63.75 +5955,46,30,2.5,111.05,1.7,63.75 +5956,46,30,2.5,111.05,1.7,63.75 +5957,46,30,2.5,111.05,1.7,63.75 +5958,46,30,2.5,111.05,1.7,63.75 +5959,46,30,2.5,111.05,1.7,63.75 +5960,46,30,2.5,111.05,1.7,63.75 +5961,46,30,2.5,111.05,1.7,63.75 +5962,46,30,2.5,111.05,1.7,63.75 +5963,46,30,2.5,111.05,1.7,63.75 +5964,46,30,2.5,111.05,1.7,63.75 +5965,46,30,2.5,111.05,1.7,63.75 +5966,46,30,2.5,111.05,1.7,63.75 +5967,46,30,2.5,111.05,1.7,63.75 +5968,46,30,2.5,111.05,1.7,63.75 +5969,46,30,2.5,111.05,1.7,63.75 +5970,46,30,2.5,111.05,1.7,63.75 +5971,46,30,2.5,111.05,1.7,63.75 +5972,46,30,2.5,111.05,1.7,63.75 +5973,46,30,2.5,111.05,1.7,63.75 +5974,46,30,2.5,111.05,1.7,63.75 +5975,46,30,2.5,111.05,1.7,63.75 +5976,46,30,2.5,111.05,1.7,63.75 +5977,46,30,2.5,111.05,1.7,63.75 +5978,46,30,2.5,111.05,1.7,63.75 +5979,46,30,2.5,111.05,1.7,63.75 +5980,46,30,2.5,111.05,1.7,63.75 +5981,46,30,2.5,111.05,1.7,63.75 +5982,46,30,2.5,111.05,1.7,63.75 +5983,46,30,2.5,111.05,1.7,63.75 +5984,46,30,2.5,111.05,1.7,63.75 +5985,46,30,2.5,111.05,1.7,63.75 +5986,46,30,2.5,111.05,1.7,63.75 +5987,46,30,2.5,111.05,1.7,63.75 +5988,46,30,2.5,111.05,1.7,63.75 +5989,46,30,2.5,111.05,1.7,63.75 +5990,46,30,2.5,111.05,1.7,63.75 +5991,46,30,2.5,111.05,1.7,63.75 +5992,46,30,2.5,111.05,1.7,63.75 +5993,46,30,2.5,111.05,1.7,63.75 +5994,46,30,2.5,111.05,1.7,63.75 +5995,46,30,2.5,111.05,1.7,63.75 +5996,46,30,2.5,111.05,1.7,63.75 +5997,46,30,2.5,111.05,1.7,63.75 +5998,46,30,2.5,111.05,1.7,63.75 +5999,46,30,2.5,111.05,1.7,63.75 +6000,46,30,2.5,111.05,1.7,63.75 diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/test3.csv.original b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/test3.csv.original new file mode 100644 index 0000000..44d05b7 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/test3.csv.original @@ -0,0 +1,6002 @@ +#t (100ms),EW2-Voset (kV),EW3-VOset (kV),EW101-MC-Ioset (A),EW101-GC-Ioset (A),FPS101-Voset (V) +0,20,15,111.3,1.7,53.2 +1,20.5,14.5,111.3,1.7,62 +2,21,14,111.3,1.7,62 +3,21.5,13.5,111.3,1.7,62 +4,22,13,111.3,1.7,62 +5,22.5,12.5,111.3,1.7,62 +6,23,12,111.3,1.7,62 +7,23.5,11.5,111.3,1.7,62 +8,24,11,111.3,1.7,62 +9,24.5,10.5,111.3,1.7,62 +10,25,10,111.3,1.7,62 +11,25.5,9.5,111.3,1.7,62 +12,26,9,111.3,1.7,62 +13,26.5,8.5,111.3,1.7,62 +14,27,8,111.3,1.7,62 +15,27.5,7.5,111.3,1.7,62 +16,28,7,111.3,1.7,62 +17,28.5,6.5,111.3,1.7,62 +18,29,6,111.3,1.7,62 +19,29.5,5.5,111.3,1.7,62 +20,30,5,111.3,1.7,62 +21,30,4.5,111.3,1.7,62 +22,30,4,111.3,1.7,62 +23,30,4,111.3,1.7,62 +24,30,4,111.3,1.7,62 +25,30,4,111.3,1.7,62 +26,30,4,111.3,1.7,62 +27,30,4,111.3,1.7,62 +28,30,4,111.3,1.7,62 +29,30,4,111.3,1.7,62 +30,30,4,111.3,1.7,62 +31,30,3.4,111.3,1.7,62 +32,30,3.4,111.3,1.7,62 +33,30,3.4,111.3,1.7,62 +34,30,3.4,111.3,1.7,62 +35,30,3.4,111.3,1.7,62 +36,30,3.4,111.3,1.7,62 +37,30,3.4,111.3,1.7,62 +38,30,3.4,111.3,1.7,62 +39,30,3.4,111.3,1.7,62 +40,30,3.4,111.3,1.7,62 +41,30,3.4,111.3,1.7,62 +42,30,3.4,111.3,1.7,62 +43,30,3.4,111.3,1.7,62 +44,30,3.4,111.3,1.7,62 +45,30,3.4,111.3,1.7,62 +46,30,3.4,111.3,1.7,62 +47,30,3.4,111.3,1.7,62 +48,30,3.4,111.3,1.7,62 +49,30,3.4,111.3,1.7,62 +50,30,3.4,111.3,1.7,62 +51,30,3.4,111.3,1.7,62.1 +52,30,3.4,111.3,1.7,62.2 +53,30,3.4,111.3,1.7,62.3 +54,30,3.4,111.3,1.7,62.4 +55,30,3.4,111.3,1.7,62.5 +56,30,3.4,111.3,1.7,62.6 +57,30,3.4,111.3,1.7,62.7 +58,30,3.4,111.3,1.7,62.8 +59,30,3.4,111.3,1.7,62.9 +60,30,3.4,111.3,1.7,63 +61,30,3,111.3,1.7,63.1 +62,30,3,111.3,1.7,63.2 +63,30,3,111.3,1.7,63.3 +64,30,3,111.3,1.7,63.4 +65,30,3,111.3,1.7,63.5 +66,30,3,111.3,1.7,63.6 +67,30,3,111.3,1.7,63.7 +68,30,3,111.3,1.7,63.8 +69,30,3,111.3,1.7,63.9 +70,30,3,111.3,1.7,64 +71,30,3,111.3,1.7,64.1 +72,30,3,111.3,1.7,64.2 +73,30,3,111.3,1.7,64.3 +74,30,3,111.3,1.7,64.4 +75,30,3,111.3,1.7,64.5 +76,30,3,111.3,1.7,64.6 +77,30,3,111.3,1.7,64.7 +78,30,3,111.3,1.7,64.8 +79,30,3,111.3,1.7,64.9 +80,30,3,111.3,1.7,65 +81,30,3,111.3,1.7,65.1 +82,30,3,111.3,1.7,65.2 +83,30,3,111.3,1.7,65.3 +84,30,3,111.3,1.7,65.4 +85,30,3,111.3,1.7,65.5 +86,30,3,111.3,1.7,65.6 +87,30,3,111.3,1.7,65.7 +88,30,3,111.3,1.7,65.8 +89,30,3,111.3,1.7,65.9 +90,30,3,111.3,1.7,66 +91,30,3,111.3,1.7,66.1 +92,30,3,111.3,1.7,66.2 +93,30,3,111.3,1.7,66.3 +94,30,3,111.3,1.7,66.4 +95,30,3,111.3,1.7,66.5 +96,30,3,111.3,1.7,66.6 +97,30,3,111.3,1.7,66.7 +98,30,3,111.3,1.7,66.8 +99,30,3,111.3,1.7,66.9 +100,30,3,111.3,1.7,67 +101,30,3,111.3,1.7,67 +102,30,3,111.3,1.7,67 +103,30,3,111.3,1.7,67 +104,30,3,111.3,1.7,67 +105,30,3,111.3,1.7,67 +106,30,3,111.3,1.7,67 +107,30,3,111.3,1.7,67 +108,30,3,111.3,1.7,67 +109,30,3,111.3,1.7,67 +110,30,3,111.3,1.7,67 +111,30,3,111.3,1.7,67 +112,30,3,111.3,1.7,67 +113,30,3,111.3,1.7,67 +114,30,3,111.3,1.7,67 +115,30,3,111.3,1.7,67 +116,30,3,111.3,1.7,67 +117,30,3,111.3,1.7,67 +118,30,3,111.3,1.7,67 +119,30,3,111.3,1.7,67 +120,30,3,111.3,1.7,67 +121,30,3,111.3,1.7,67 +122,30,3,111.3,1.7,67 +123,30,3,111.3,1.7,67 +124,30,3,111.3,1.7,67 +125,30,3,111.3,1.7,67 +126,30,3,111.3,1.7,67 +127,30,3,111.3,1.7,67 +128,30,3,111.3,1.7,67 +129,30,3,111.3,1.7,67 +130,30,3,111.3,1.7,67 +131,30,3,111.3,1.7,67 +132,30,3,111.3,1.7,67 +133,30,3,111.3,1.7,67 +134,30,3,111.3,1.7,67 +135,30,3,111.3,1.7,67 +136,30,3,111.3,1.7,67 +137,30,3,111.3,1.7,67 +138,30,3,111.3,1.7,67 +139,30,3,111.3,1.7,67 +140,30,3,111.3,1.7,67 +141,30,3,111.3,1.7,67 +142,30,3,111.3,1.7,67 +143,30,3,111.3,1.7,67 +144,30,3,111.3,1.7,67 +145,30,3,111.3,1.7,67 +146,30,3,111.3,1.7,67 +147,30,3,111.3,1.7,67 +148,30,3,111.3,1.7,67 +149,30,3,111.3,1.7,67 +150,30,3,111.3,1.7,67 +151,30,3,111.3,1.7,67 +152,30,3,111.3,1.7,67 +153,30,3,111.3,1.7,67 +154,30,3,111.3,1.7,67 +155,30,3,111.3,1.7,67 +156,30,3,111.3,1.7,67 +157,30,3,111.3,1.7,67 +158,30,3,111.3,1.7,67 +159,30,3,111.3,1.7,67 +160,30,3,111.3,1.7,67 +161,30,3,111.3,1.7,67 +162,30,3,111.3,1.7,67 +163,30,3,111.3,1.7,67 +164,30,3,111.3,1.7,67 +165,30,3,111.3,1.7,67 +166,30,3,111.3,1.7,67 +167,30,3,111.3,1.7,67 +168,30,3,111.3,1.7,67 +169,30,3,111.3,1.7,67 +170,30,3,111.3,1.7,67 +171,30,3,111.3,1.7,67 +172,30,3,111.3,1.7,67 +173,30,3,111.3,1.7,67 +174,30,3,111.3,1.7,67 +175,30,3,111.3,1.7,67 +176,30,3,111.3,1.7,67 +177,30,3,111.3,1.7,67 +178,30,3,111.3,1.7,67 +179,30,3,111.3,1.7,67 +180,30,3,111.3,1.7,67 +181,30,3,111.3,1.7,67 +182,30,3,111.3,1.7,67 +183,30,3,111.3,1.7,67 +184,30,3,111.3,1.7,67 +185,30,3,111.3,1.7,67 +186,30,3,111.3,1.7,67 +187,30,3,111.3,1.7,67 +188,30,3,111.3,1.7,67 +189,30,3,111.3,1.7,67 +190,30,3,111.3,1.7,67 +191,30,3,111.3,1.7,67 +192,30,3,111.3,1.7,67 +193,30,3,111.3,1.7,67 +194,30,3,111.3,1.7,67 +195,30,3,111.3,1.7,67 +196,30,3,111.3,1.7,67 +197,30,3,111.3,1.7,67 +198,30,3,111.3,1.7,67 +199,30,3,111.3,1.7,67 +200,30,2.9,111.3,1.7,67 +201,30,2.9,111.05,1.7,67 +202,30,2.9,111.05,1.7,67 +203,30,2.9,111.05,1.7,67 +204,30,2.9,111.05,1.7,67 +205,30,2.9,111.05,1.7,67 +206,30,2.9,111.05,1.7,67 +207,30,2.9,111.05,1.7,67 +208,30,2.9,111.05,1.7,67 +209,30,2.9,111.05,1.7,67 +210,30,2.9,111.05,1.7,67 +211,30,2.9,111.05,1.7,67 +212,30,2.9,111.05,1.7,67 +213,30,2.9,111.05,1.7,67 +214,30,2.9,111.05,1.7,67 +215,30,2.9,111.05,1.7,67 +216,30,2.9,111.05,1.7,67 +217,30,2.9,111.05,1.7,67 +218,30,2.9,111.05,1.7,67 +219,30,2.9,111.05,1.7,67 +220,30,2.9,111.05,1.7,67 +221,30,2.9,111.05,1.7,67 +222,30,2.9,111.05,1.7,67 +223,30,2.9,111.05,1.7,67 +224,30,2.9,111.05,1.7,67 +225,30,2.9,111.05,1.7,67 +226,30,2.9,111.05,1.7,67 +227,30,2.9,111.05,1.7,67 +228,30,2.9,111.05,1.7,67 +229,30,2.9,111.05,1.7,67 +230,30,2.9,111.05,1.7,67 +231,30,2.9,111.05,1.7,67 +232,30,2.9,111.05,1.7,67 +233,30,2.9,111.05,1.7,67 +234,30,2.9,111.05,1.7,67 +235,30,2.9,111.05,1.7,67 +236,30,2.9,111.05,1.7,67 +237,30,2.9,111.05,1.7,67 +238,30,2.9,111.05,1.7,67 +239,30,2.9,111.05,1.7,67 +240,30,2.9,111.05,1.7,67 +241,30,2.9,111.05,1.7,67 +242,30,2.9,111.05,1.7,67 +243,30,2.9,111.05,1.7,67 +244,30,2.9,111.05,1.7,67 +245,30,2.9,111.05,1.7,67 +246,30,2.9,111.05,1.7,67 +247,30,2.9,111.05,1.7,67 +248,30,2.9,111.05,1.7,67 +249,30,2.9,111.05,1.7,67 +250,30,2.8,111.05,1.7,67 +251,30,2.8,111.05,1.7,67 +252,30,2.8,111.05,1.7,67 +253,30,2.8,111.05,1.7,67 +254,30,2.8,111.05,1.7,67 +255,30,2.8,111.05,1.7,67 +256,30,2.8,111.05,1.7,67 +257,30,2.8,111.05,1.7,67 +258,30,2.8,111.05,1.7,67 +259,30,2.8,111.05,1.7,67 +260,30,2.8,111.05,1.7,67 +261,30,2.8,111.05,1.7,67 +262,30,2.8,111.05,1.7,67 +263,30,2.8,111.05,1.7,67 +264,30,2.8,111.05,1.7,67 +265,30,2.8,111.05,1.7,67 +266,30,2.8,111.05,1.7,67 +267,30,2.8,111.05,1.7,67 +268,30,2.8,111.05,1.7,67 +269,30,2.8,111.05,1.7,67 +270,30,2.8,111.05,1.7,67 +271,30,2.8,111.05,1.7,67 +272,30,2.8,111.05,1.7,67 +273,30,2.8,111.05,1.7,67 +274,30,2.8,111.05,1.7,67 +275,30,2.8,111.05,1.7,67 +276,30,2.8,111.05,1.7,67 +277,30,2.8,111.05,1.7,67 +278,30,2.8,111.05,1.7,67 +279,30,2.8,111.05,1.7,67 +280,30,2.8,111.05,1.7,67 +281,30,2.8,111.05,1.7,67 +282,30,2.8,111.05,1.7,67 +283,30,2.8,111.05,1.7,67 +284,30,2.8,111.05,1.7,67 +285,30,2.8,111.05,1.7,67 +286,30,2.8,111.05,1.7,67 +287,30,2.8,111.05,1.7,67 +288,30,2.8,111.05,1.7,67 +289,30,2.8,111.05,1.7,67 +290,30,2.8,111.05,1.7,67 +291,30,2.8,111.05,1.7,67 +292,30,2.8,111.05,1.7,67 +293,30,2.8,111.05,1.7,67 +294,30,2.8,111.05,1.7,67 +295,30,2.8,111.05,1.7,67 +296,30,2.8,111.05,1.7,67 +297,30,2.8,111.05,1.7,67 +298,30,2.8,111.05,1.7,67 +299,30,2.8,111.05,1.7,67 +300,30,2.7,111.05,1.7,67 +301,30,2.7,111.05,1.7,67 +302,30,2.7,111.05,1.7,67 +303,30,2.7,111.05,1.7,67 +304,30,2.7,111.05,1.7,67 +305,30,2.7,111.05,1.7,67 +306,30,2.7,111.05,1.7,67 +307,30,2.7,111.05,1.7,67 +308,30,2.7,111.05,1.7,67 +309,30,2.7,111.05,1.7,67 +310,30,2.7,111.05,1.7,67 +311,30,2.7,111.05,1.7,67 +312,30,2.7,111.05,1.7,67 +313,30,2.7,111.05,1.7,67 +314,30,2.7,111.05,1.7,67 +315,30,2.7,111.05,1.7,67 +316,30,2.7,111.05,1.7,67 +317,30,2.7,111.05,1.7,67 +318,30,2.7,111.05,1.7,67 +319,30,2.7,111.05,1.7,67 +320,30,2.7,111.05,1.7,67 +321,30,2.7,111.05,1.7,67 +322,30,2.7,111.05,1.7,67 +323,30,2.7,111.05,1.7,67 +324,30,2.7,111.05,1.7,67 +325,30,2.7,111.05,1.7,67 +326,30,2.7,111.05,1.7,67 +327,30,2.7,111.05,1.7,67 +328,30,2.7,111.05,1.7,67 +329,30,2.7,111.05,1.7,67 +330,30,2.7,111.05,1.7,67 +331,30,2.7,111.05,1.7,67 +332,30,2.7,111.05,1.7,67 +333,30,2.7,111.05,1.7,67 +334,30,2.7,111.05,1.7,67 +335,30,2.7,111.05,1.7,67 +336,30,2.7,111.05,1.7,67 +337,30,2.7,111.05,1.7,67 +338,30,2.7,111.05,1.7,67 +339,30,2.7,111.05,1.7,67 +340,30,2.7,111.05,1.7,67 +341,30,2.7,111.05,1.7,67 +342,30,2.7,111.05,1.7,67 +343,30,2.7,111.05,1.7,67 +344,30,2.7,111.05,1.7,67 +345,30,2.7,111.05,1.7,67 +346,30,2.7,111.05,1.7,67 +347,30,2.7,111.05,1.7,67 +348,30,2.7,111.05,1.7,67 +349,30,2.7,111.05,1.7,67 +350,30,2.7,111.05,1.7,67 +351,30,2.7,111.05,1.7,67 +352,30,2.7,111.05,1.7,67 +353,30,2.7,111.05,1.7,67 +354,30,2.7,111.05,1.7,67 +355,30,2.7,111.05,1.7,67 +356,30,2.7,111.05,1.7,67 +357,30,2.7,111.05,1.7,67 +358,30,2.7,111.05,1.7,67 +359,30,2.7,111.05,1.7,67 +360,30,2.7,111.05,1.7,67 +361,30,2.7,111.05,1.7,67 +362,30,2.7,111.05,1.7,67 +363,30,2.7,111.05,1.7,67 +364,30,2.7,111.05,1.7,67 +365,30,2.7,111.05,1.7,67 +366,30,2.7,111.05,1.7,67 +367,30,2.7,111.05,1.7,67 +368,30,2.7,111.05,1.7,67 +369,30,2.7,111.05,1.7,67 +370,30,2.7,111.05,1.7,67 +371,30,2.7,111.05,1.7,67 +372,30,2.7,111.05,1.7,67 +373,30,2.7,111.05,1.7,67 +374,30,2.7,111.05,1.7,67 +375,30,2.7,111.05,1.7,67 +376,30,2.7,111.05,1.7,67 +377,30,2.7,111.05,1.7,67 +378,30,2.7,111.05,1.7,67 +379,30,2.7,111.05,1.7,67 +380,30,2.7,111.05,1.7,67 +381,30,2.7,111.05,1.7,67 +382,30,2.7,111.05,1.7,67 +383,30,2.7,111.05,1.7,67 +384,30,2.7,111.05,1.7,67 +385,30,2.7,111.05,1.7,67 +386,30,2.7,111.05,1.7,67 +387,30,2.7,111.05,1.7,67 +388,30,2.7,111.05,1.7,67 +389,30,2.7,111.05,1.7,67 +390,30,2.7,111.05,1.7,67 +391,30,2.7,111.05,1.7,67 +392,30,2.7,111.05,1.7,67 +393,30,2.7,111.05,1.7,67 +394,30,2.7,111.05,1.7,67 +395,30,2.7,111.05,1.7,67 +396,30,2.7,111.05,1.7,67 +397,30,2.7,111.05,1.7,67 +398,30,2.7,111.05,1.7,67 +399,30,2.7,111.05,1.7,67 +400,30,2.7,111.05,1.7,67 +401,30,2.7,111.05,1.7,66.9975 +402,30,2.7,111.05,1.7,66.995 +403,30,2.7,111.05,1.7,66.9925 +404,30,2.7,111.05,1.7,66.99 +405,30,2.7,111.05,1.7,66.9875 +406,30,2.7,111.05,1.7,66.985 +407,30,2.7,111.05,1.7,66.9825 +408,30,2.7,111.05,1.7,66.98 +409,30,2.7,111.05,1.7,66.9775 +410,30,2.7,111.05,1.7,66.975 +411,30,2.7,111.05,1.7,66.9725 +412,30,2.7,111.05,1.7,66.97 +413,30,2.7,111.05,1.7,66.9675 +414,30,2.7,111.05,1.7,66.965 +415,30,2.7,111.05,1.7,66.9625 +416,30,2.7,111.05,1.7,66.96 +417,30,2.7,111.05,1.7,66.9575 +418,30,2.7,111.05,1.7,66.955 +419,30,2.7,111.05,1.7,66.9525 +420,30,2.7,111.05,1.7,66.95 +421,30,2.7,111.05,1.7,66.9475 +422,30,2.7,111.05,1.7,66.945 +423,30,2.7,111.05,1.7,66.9425 +424,30,2.7,111.05,1.7,66.94 +425,30,2.7,111.05,1.7,66.9375 +426,30,2.7,111.05,1.7,66.935 +427,30,2.7,111.05,1.7,66.9325 +428,30,2.7,111.05,1.7,66.93 +429,30,2.7,111.05,1.7,66.9275 +430,30,2.7,111.05,1.7,66.925 +431,30,2.7,111.05,1.7,66.9225 +432,30,2.7,111.05,1.7,66.92 +433,30,2.7,111.05,1.7,66.9175 +434,30,2.7,111.05,1.7,66.915 +435,30,2.7,111.05,1.7,66.9125 +436,30,2.7,111.05,1.7,66.91 +437,30,2.7,111.05,1.7,66.9075 +438,30,2.7,111.05,1.7,66.905 +439,30,2.7,111.05,1.7,66.9025 +440,30,2.7,111.05,1.7,66.9 +441,30,2.7,111.05,1.7,66.8975 +442,30,2.7,111.05,1.7,66.895 +443,30,2.7,111.05,1.7,66.8925 +444,30,2.7,111.05,1.7,66.89 +445,30,2.7,111.05,1.7,66.8875 +446,30,2.7,111.05,1.7,66.885 +447,30,2.7,111.05,1.7,66.8825 +448,30,2.7,111.05,1.7,66.88 +449,30,2.7,111.05,1.7,66.8775 +450,30,2.7,111.05,1.7,66.875 +451,30,2.7,111.05,1.7,66.8725 +452,30,2.7,111.05,1.7,66.87 +453,30,2.7,111.05,1.7,66.8675 +454,30,2.7,111.05,1.7,66.865 +455,30,2.7,111.05,1.7,66.8625 +456,30,2.7,111.05,1.7,66.86 +457,30,2.7,111.05,1.7,66.8575 +458,30,2.7,111.05,1.7,66.855 +459,30,2.7,111.05,1.7,66.8525 +460,30,2.7,111.05,1.7,66.85 +461,30,2.7,111.05,1.7,66.8475 +462,30,2.7,111.05,1.7,66.845 +463,30,2.7,111.05,1.7,66.8425 +464,30,2.7,111.05,1.7,66.84 +465,30,2.7,111.05,1.7,66.8375 +466,30,2.7,111.05,1.7,66.835 +467,30,2.7,111.05,1.7,66.8325 +468,30,2.7,111.05,1.7,66.83 +469,30,2.7,111.05,1.7,66.8275 +470,30,2.7,111.05,1.7,66.825 +471,30,2.7,111.05,1.7,66.8225 +472,30,2.7,111.05,1.7,66.82 +473,30,2.7,111.05,1.7,66.8175 +474,30,2.7,111.05,1.7,66.815 +475,30,2.7,111.05,1.7,66.8125 +476,30,2.7,111.05,1.7,66.81 +477,30,2.7,111.05,1.7,66.8075 +478,30,2.7,111.05,1.7,66.805 +479,30,2.7,111.05,1.7,66.8025 +480,30,2.7,111.05,1.7,66.8 +481,30,2.7,111.05,1.7,66.7975 +482,30,2.7,111.05,1.7,66.795 +483,30,2.7,111.05,1.7,66.7925 +484,30,2.7,111.05,1.7,66.79 +485,30,2.7,111.05,1.7,66.7875 +486,30,2.7,111.05,1.7,66.785 +487,30,2.7,111.05,1.7,66.7825 +488,30,2.7,111.05,1.7,66.78 +489,30,2.7,111.05,1.7,66.7775 +490,30,2.7,111.05,1.7,66.775 +491,30,2.7,111.05,1.7,66.7725 +492,30,2.7,111.05,1.7,66.77 +493,30,2.7,111.05,1.7,66.7675 +494,30,2.7,111.05,1.7,66.765 +495,30,2.7,111.05,1.7,66.7625 +496,30,2.7,111.05,1.7,66.76 +497,30,2.7,111.05,1.7,66.7575 +498,30,2.7,111.05,1.7,66.755 +499,30,2.7,111.05,1.7,66.7525 +500,30,2.7,111.05,1.7,66.75 +501,30,2.7,111.05,1.7,66.7475 +502,30,2.7,111.05,1.7,66.745 +503,30,2.7,111.05,1.7,66.7425 +504,30,2.7,111.05,1.7,66.74 +505,30,2.7,111.05,1.7,66.7375 +506,30,2.7,111.05,1.7,66.735 +507,30,2.7,111.05,1.7,66.7325 +508,30,2.7,111.05,1.7,66.73 +509,30,2.7,111.05,1.7,66.7275 +510,30,2.7,111.05,1.7,66.725 +511,30,2.7,111.05,1.7,66.7225 +512,30,2.7,111.05,1.7,66.72 +513,30,2.7,111.05,1.7,66.7175 +514,30,2.7,111.05,1.7,66.715 +515,30,2.7,111.05,1.7,66.7125 +516,30,2.7,111.05,1.7,66.71 +517,30,2.7,111.05,1.7,66.7075 +518,30,2.7,111.05,1.7,66.705 +519,30,2.7,111.05,1.7,66.7025 +520,30,2.7,111.05,1.7,66.7 +521,30,2.7,111.05,1.7,66.6975 +522,30,2.7,111.05,1.7,66.695 +523,30,2.7,111.05,1.7,66.6925 +524,30,2.7,111.05,1.7,66.69 +525,30,2.7,111.05,1.7,66.6875 +526,30,2.7,111.05,1.7,66.685 +527,30,2.7,111.05,1.7,66.6825 +528,30,2.7,111.05,1.7,66.68 +529,30,2.7,111.05,1.7,66.6775 +530,30,2.7,111.05,1.7,66.675 +531,30,2.7,111.05,1.7,66.6725 +532,30,2.7,111.05,1.7,66.67 +533,30,2.7,111.05,1.7,66.6675 +534,30,2.7,111.05,1.7,66.665 +535,30,2.7,111.05,1.7,66.6625 +536,30,2.7,111.05,1.7,66.66 +537,30,2.7,111.05,1.7,66.6575 +538,30,2.7,111.05,1.7,66.655 +539,30,2.7,111.05,1.7,66.6525 +540,30,2.7,111.05,1.7,66.65 +541,30,2.7,111.05,1.7,66.6475 +542,30,2.7,111.05,1.7,66.645 +543,30,2.7,111.05,1.7,66.6425 +544,30,2.7,111.05,1.7,66.64 +545,30,2.7,111.05,1.7,66.6375 +546,30,2.7,111.05,1.7,66.635 +547,30,2.7,111.05,1.7,66.6325 +548,30,2.7,111.05,1.7,66.63 +549,30,2.7,111.05,1.7,66.6275 +550,30,2.7,111.05,1.7,66.625 +551,30,2.7,111.05,1.7,66.6225 +552,30,2.7,111.05,1.7,66.62 +553,30,2.7,111.05,1.7,66.6175 +554,30,2.7,111.05,1.7,66.615 +555,30,2.7,111.05,1.7,66.6125 +556,30,2.7,111.05,1.7,66.61 +557,30,2.7,111.05,1.7,66.6075 +558,30,2.7,111.05,1.7,66.605 +559,30,2.7,111.05,1.7,66.6025 +560,30,2.7,111.05,1.7,66.6 +561,30,2.7,111.05,1.7,66.5975 +562,30,2.7,111.05,1.7,66.595 +563,30,2.7,111.05,1.7,66.5925 +564,30,2.7,111.05,1.7,66.59 +565,30,2.7,111.05,1.7,66.5875 +566,30,2.7,111.05,1.7,66.585 +567,30,2.7,111.05,1.7,66.5825 +568,30,2.7,111.05,1.7,66.58 +569,30,2.7,111.05,1.7,66.5775 +570,30,2.7,111.05,1.7,66.575 +571,30,2.7,111.05,1.7,66.5725 +572,30,2.7,111.05,1.7,66.57 +573,30,2.7,111.05,1.7,66.5675 +574,30,2.7,111.05,1.7,66.565 +575,30,2.7,111.05,1.7,66.5625 +576,30,2.7,111.05,1.7,66.56 +577,30,2.7,111.05,1.7,66.5575 +578,30,2.7,111.05,1.7,66.555 +579,30,2.7,111.05,1.7,66.5525 +580,30,2.7,111.05,1.7,66.55 +581,30,2.7,111.05,1.7,66.5475 +582,30,2.7,111.05,1.7,66.545 +583,30,2.7,111.05,1.7,66.5425 +584,30,2.7,111.05,1.7,66.54 +585,30,2.7,111.05,1.7,66.5375 +586,30,2.7,111.05,1.7,66.535 +587,30,2.7,111.05,1.7,66.5325 +588,30,2.7,111.05,1.7,66.53 +589,30,2.7,111.05,1.7,66.5275 +590,30,2.7,111.05,1.7,66.525 +591,30,2.7,111.05,1.7,66.5225 +592,30,2.7,111.05,1.7,66.52 +593,30,2.7,111.05,1.7,66.5175 +594,30,2.7,111.05,1.7,66.515 +595,30,2.7,111.05,1.7,66.5125 +596,30,2.7,111.05,1.7,66.51 +597,30,2.7,111.05,1.7,66.5075 +598,30,2.7,111.05,1.7,66.505 +599,30,2.7,111.05,1.7,66.5025 +600,30,2.7,111.05,1.7,66.5 +601,30,2.7,111.05,1.7,66.495 +602,30,2.7,111.05,1.7,66.49 +603,30,2.7,111.05,1.7,66.485 +604,30,2.7,111.05,1.7,66.48 +605,30,2.7,111.05,1.7,66.475 +606,30,2.7,111.05,1.7,66.47 +607,30,2.7,111.05,1.7,66.465 +608,30,2.7,111.05,1.7,66.46 +609,30,2.7,111.05,1.7,66.455 +610,30,2.7,111.05,1.7,66.45 +611,30,2.7,111.05,1.7,66.445 +612,30,2.7,111.05,1.7,66.44 +613,30,2.7,111.05,1.7,66.435 +614,30,2.7,111.05,1.7,66.43 +615,30,2.7,111.05,1.7,66.425 +616,30,2.7,111.05,1.7,66.42 +617,30,2.7,111.05,1.7,66.415 +618,30,2.7,111.05,1.7,66.41 +619,30,2.7,111.05,1.7,66.405 +620,30,2.7,111.05,1.7,66.4 +621,30,2.7,111.05,1.7,66.395 +622,30,2.7,111.05,1.7,66.39 +623,30,2.7,111.05,1.7,66.385 +624,30,2.7,111.05,1.7,66.38 +625,30,2.7,111.05,1.7,66.375 +626,30,2.7,111.05,1.7,66.37 +627,30,2.7,111.05,1.7,66.365 +628,30,2.7,111.05,1.7,66.36 +629,30,2.7,111.05,1.7,66.355 +630,30,2.7,111.05,1.7,66.35 +631,30,2.7,111.05,1.7,66.345 +632,30,2.7,111.05,1.7,66.34 +633,30,2.7,111.05,1.7,66.335 +634,30,2.7,111.05,1.7,66.33 +635,30,2.7,111.05,1.7,66.325 +636,30,2.7,111.05,1.7,66.32 +637,30,2.7,111.05,1.7,66.315 +638,30,2.7,111.05,1.7,66.31 +639,30,2.7,111.05,1.7,66.305 +640,30,2.7,111.05,1.7,66.3 +641,30,2.7,111.05,1.7,66.295 +642,30,2.7,111.05,1.7,66.29 +643,30,2.7,111.05,1.7,66.285 +644,30,2.7,111.05,1.7,66.28 +645,30,2.7,111.05,1.7,66.275 +646,30,2.7,111.05,1.7,66.27 +647,30,2.7,111.05,1.7,66.265 +648,30,2.7,111.05,1.7,66.26 +649,30,2.7,111.05,1.7,66.255 +650,30,2.7,111.05,1.7,66.25 +651,30,2.7,111.05,1.7,66.245 +652,30,2.7,111.05,1.7,66.24 +653,30,2.7,111.05,1.7,66.235 +654,30,2.7,111.05,1.7,66.23 +655,30,2.7,111.05,1.7,66.225 +656,30,2.7,111.05,1.7,66.22 +657,30,2.7,111.05,1.7,66.215 +658,30,2.7,111.05,1.7,66.21 +659,30,2.7,111.05,1.7,66.205 +660,30,2.7,111.05,1.7,66.2 +661,30,2.7,111.05,1.7,66.195 +662,30,2.7,111.05,1.7,66.19 +663,30,2.7,111.05,1.7,66.185 +664,30,2.7,111.05,1.7,66.18 +665,30,2.7,111.05,1.7,66.175 +666,30,2.7,111.05,1.7,66.17 +667,30,2.7,111.05,1.7,66.165 +668,30,2.7,111.05,1.7,66.16 +669,30,2.7,111.05,1.7,66.155 +670,30,2.7,111.05,1.7,66.15 +671,30,2.7,111.05,1.7,66.145 +672,30,2.7,111.05,1.7,66.14 +673,30,2.7,111.05,1.7,66.135 +674,30,2.7,111.05,1.7,66.13 +675,30,2.7,111.05,1.7,66.125 +676,30,2.7,111.05,1.7,66.12 +677,30,2.7,111.05,1.7,66.115 +678,30,2.7,111.05,1.7,66.11 +679,30,2.7,111.05,1.7,66.105 +680,30,2.7,111.05,1.7,66.1 +681,30,2.7,111.05,1.7,66.095 +682,30,2.7,111.05,1.7,66.09 +683,30,2.7,111.05,1.7,66.085 +684,30,2.7,111.05,1.7,66.08 +685,30,2.7,111.05,1.7,66.075 +686,30,2.7,111.05,1.7,66.07 +687,30,2.7,111.05,1.7,66.065 +688,30,2.7,111.05,1.7,66.06 +689,30,2.7,111.05,1.7,66.055 +690,30,2.7,111.05,1.7,66.05 +691,30,2.7,111.05,1.7,66.045 +692,30,2.7,111.05,1.7,66.04 +693,30,2.7,111.05,1.7,66.035 +694,30,2.7,111.05,1.7,66.03 +695,30,2.7,111.05,1.7,66.025 +696,30,2.7,111.05,1.7,66.02 +697,30,2.7,111.05,1.7,66.015 +698,30,2.7,111.05,1.7,66.01 +699,30,2.7,111.05,1.7,66.005 +700,30,2.7,111.05,1.7,66 +701,30,2.7,111.05,1.7,65.995 +702,30,2.7,111.05,1.7,65.99 +703,30,2.7,111.05,1.7,65.985 +704,30,2.7,111.05,1.7,65.98 +705,30,2.7,111.05,1.7,65.975 +706,30,2.7,111.05,1.7,65.97 +707,30,2.7,111.05,1.7,65.965 +708,30,2.7,111.05,1.7,65.96 +709,30,2.7,111.05,1.7,65.955 +710,30,2.7,111.05,1.7,65.95 +711,30,2.7,111.05,1.7,65.945 +712,30,2.7,111.05,1.7,65.94 +713,30,2.7,111.05,1.7,65.935 +714,30,2.7,111.05,1.7,65.93 +715,30,2.7,111.05,1.7,65.925 +716,30,2.7,111.05,1.7,65.92 +717,30,2.7,111.05,1.7,65.915 +718,30,2.7,111.05,1.7,65.91 +719,30,2.7,111.05,1.7,65.905 +720,30,2.7,111.05,1.7,65.9 +721,30,2.7,111.05,1.7,65.895 +722,30,2.7,111.05,1.7,65.89 +723,30,2.7,111.05,1.7,65.885 +724,30,2.7,111.05,1.7,65.88 +725,30,2.7,111.05,1.7,65.875 +726,30,2.7,111.05,1.7,65.87 +727,30,2.7,111.05,1.7,65.865 +728,30,2.7,111.05,1.7,65.86 +729,30,2.7,111.05,1.7,65.855 +730,30,2.7,111.05,1.7,65.85 +731,30,2.7,111.05,1.7,65.845 +732,30,2.7,111.05,1.7,65.84 +733,30,2.7,111.05,1.7,65.835 +734,30,2.7,111.05,1.7,65.83 +735,30,2.7,111.05,1.7,65.825 +736,30,2.7,111.05,1.7,65.82 +737,30,2.7,111.05,1.7,65.815 +738,30,2.7,111.05,1.7,65.81 +739,30,2.7,111.05,1.7,65.805 +740,30,2.7,111.05,1.7,65.8 +741,30,2.7,111.05,1.7,65.795 +742,30,2.7,111.05,1.7,65.79 +743,30,2.7,111.05,1.7,65.785 +744,30,2.7,111.05,1.7,65.78 +745,30,2.7,111.05,1.7,65.775 +746,30,2.7,111.05,1.7,65.77 +747,30,2.7,111.05,1.7,65.765 +748,30,2.7,111.05,1.7,65.76 +749,30,2.7,111.05,1.7,65.755 +750,30,2.7,111.05,1.7,65.75 +751,30,2.7,111.05,1.7,65.745 +752,30,2.7,111.05,1.7,65.74 +753,30,2.7,111.05,1.7,65.735 +754,30,2.7,111.05,1.7,65.73 +755,30,2.7,111.05,1.7,65.725 +756,30,2.7,111.05,1.7,65.72 +757,30,2.7,111.05,1.7,65.715 +758,30,2.7,111.05,1.7,65.71 +759,30,2.7,111.05,1.7,65.705 +760,30,2.7,111.05,1.7,65.7 +761,30,2.7,111.05,1.7,65.695 +762,30,2.7,111.05,1.7,65.69 +763,30,2.7,111.05,1.7,65.685 +764,30,2.7,111.05,1.7,65.68 +765,30,2.7,111.05,1.7,65.675 +766,30,2.7,111.05,1.7,65.67 +767,30,2.7,111.05,1.7,65.665 +768,30,2.7,111.05,1.7,65.66 +769,30,2.7,111.05,1.7,65.655 +770,30,2.7,111.05,1.7,65.65 +771,30,2.7,111.05,1.7,65.645 +772,30,2.7,111.05,1.7,65.64 +773,30,2.7,111.05,1.7,65.635 +774,30,2.7,111.05,1.7,65.63 +775,30,2.7,111.05,1.7,65.625 +776,30,2.7,111.05,1.7,65.62 +777,30,2.7,111.05,1.7,65.615 +778,30,2.7,111.05,1.7,65.61 +779,30,2.7,111.05,1.7,65.605 +780,30,2.7,111.05,1.7,65.6 +781,30,2.7,111.05,1.7,65.595 +782,30,2.7,111.05,1.7,65.59 +783,30,2.7,111.05,1.7,65.585 +784,30,2.7,111.05,1.7,65.58 +785,30,2.7,111.05,1.7,65.575 +786,30,2.7,111.05,1.7,65.57 +787,30,2.7,111.05,1.7,65.565 +788,30,2.7,111.05,1.7,65.56 +789,30,2.7,111.05,1.7,65.555 +790,30,2.7,111.05,1.7,65.55 +791,30,2.7,111.05,1.7,65.545 +792,30,2.7,111.05,1.7,65.54 +793,30,2.7,111.05,1.7,65.535 +794,30,2.7,111.05,1.7,65.53 +795,30,2.7,111.05,1.7,65.525 +796,30,2.7,111.05,1.7,65.52 +797,30,2.7,111.05,1.7,65.515 +798,30,2.7,111.05,1.7,65.51 +799,30,2.7,111.05,1.7,65.505 +800,30,2.7,111.05,1.7,65.5 +801,30,2.7,111.05,1.7,65.495 +802,30,2.7,111.05,1.7,65.49 +803,30,2.7,111.05,1.7,65.485 +804,30,2.7,111.05,1.7,65.48 +805,30,2.7,111.05,1.7,65.475 +806,30,2.7,111.05,1.7,65.47 +807,30,2.7,111.05,1.7,65.465 +808,30,2.7,111.05,1.7,65.46 +809,30,2.7,111.05,1.7,65.455 +810,30,2.7,111.05,1.7,65.45 +811,30,2.7,111.05,1.7,65.445 +812,30,2.7,111.05,1.7,65.44 +813,30,2.7,111.05,1.7,65.435 +814,30,2.7,111.05,1.7,65.43 +815,30,2.7,111.05,1.7,65.425 +816,30,2.7,111.05,1.7,65.42 +817,30,2.7,111.05,1.7,65.415 +818,30,2.7,111.05,1.7,65.41 +819,30,2.7,111.05,1.7,65.405 +820,30,2.7,111.05,1.7,65.4 +821,30,2.7,111.05,1.7,65.395 +822,30,2.7,111.05,1.7,65.39 +823,30,2.7,111.05,1.7,65.385 +824,30,2.7,111.05,1.7,65.38 +825,30,2.7,111.05,1.7,65.375 +826,30,2.7,111.05,1.7,65.37 +827,30,2.7,111.05,1.7,65.365 +828,30,2.7,111.05,1.7,65.36 +829,30,2.7,111.05,1.7,65.355 +830,30,2.7,111.05,1.7,65.35 +831,30,2.7,111.05,1.7,65.345 +832,30,2.7,111.05,1.7,65.34 +833,30,2.7,111.05,1.7,65.335 +834,30,2.7,111.05,1.7,65.33 +835,30,2.7,111.05,1.7,65.325 +836,30,2.7,111.05,1.7,65.32 +837,30,2.7,111.05,1.7,65.315 +838,30,2.7,111.05,1.7,65.31 +839,30,2.7,111.05,1.7,65.305 +840,30,2.7,111.05,1.7,65.3 +841,30,2.7,111.05,1.7,65.295 +842,30,2.7,111.05,1.7,65.29 +843,30,2.7,111.05,1.7,65.285 +844,30,2.7,111.05,1.7,65.28 +845,30,2.7,111.05,1.7,65.275 +846,30,2.7,111.05,1.7,65.27 +847,30,2.7,111.05,1.7,65.265 +848,30,2.7,111.05,1.7,65.26 +849,30,2.7,111.05,1.7,65.255 +850,30,2.7,111.05,1.7,65.25 +851,30,2.7,111.05,1.7,65.245 +852,30,2.7,111.05,1.7,65.24 +853,30,2.7,111.05,1.7,65.235 +854,30,2.7,111.05,1.7,65.23 +855,30,2.7,111.05,1.7,65.225 +856,30,2.7,111.05,1.7,65.22 +857,30,2.7,111.05,1.7,65.215 +858,30,2.7,111.05,1.7,65.21 +859,30,2.7,111.05,1.7,65.205 +860,30,2.7,111.05,1.7,65.2 +861,30,2.7,111.05,1.7,65.195 +862,30,2.7,111.05,1.7,65.19 +863,30,2.7,111.05,1.7,65.185 +864,30,2.7,111.05,1.7,65.18 +865,30,2.7,111.05,1.7,65.175 +866,30,2.7,111.05,1.7,65.17 +867,30,2.7,111.05,1.7,65.165 +868,30,2.7,111.05,1.7,65.16 +869,30,2.7,111.05,1.7,65.155 +870,30,2.7,111.05,1.7,65.15 +871,30,2.7,111.05,1.7,65.145 +872,30,2.7,111.05,1.7,65.14 +873,30,2.7,111.05,1.7,65.135 +874,30,2.7,111.05,1.7,65.13 +875,30,2.7,111.05,1.7,65.125 +876,30,2.7,111.05,1.7,65.12 +877,30,2.7,111.05,1.7,65.115 +878,30,2.7,111.05,1.7,65.11 +879,30,2.7,111.05,1.7,65.105 +880,30,2.7,111.05,1.7,65.1 +881,30,2.7,111.05,1.7,65.095 +882,30,2.7,111.05,1.7,65.09 +883,30,2.7,111.05,1.7,65.085 +884,30,2.7,111.05,1.7,65.08 +885,30,2.7,111.05,1.7,65.075 +886,30,2.7,111.05,1.7,65.07 +887,30,2.7,111.05,1.7,65.065 +888,30,2.7,111.05,1.7,65.06 +889,30,2.7,111.05,1.7,65.055 +890,30,2.7,111.05,1.7,65.05 +891,30,2.7,111.05,1.7,65.045 +892,30,2.7,111.05,1.7,65.04 +893,30,2.7,111.05,1.7,65.035 +894,30,2.7,111.05,1.7,65.03 +895,30,2.7,111.05,1.7,65.025 +896,30,2.7,111.05,1.7,65.02 +897,30,2.7,111.05,1.7,65.015 +898,30,2.7,111.05,1.7,65.01 +899,30,2.7,111.05,1.7,65.005 +900,30,2.7,111.05,1.7,65 +901,30,2.7,111.05,1.7,64.99833333 +902,30,2.7,111.05,1.7,64.99666667 +903,30,2.7,111.05,1.7,64.995 +904,30,2.7,111.05,1.7,64.99333333 +905,30,2.7,111.05,1.7,64.99166667 +906,30,2.7,111.05,1.7,64.99 +907,30,2.7,111.05,1.7,64.98833333 +908,30,2.7,111.05,1.7,64.98666667 +909,30,2.7,111.05,1.7,64.985 +910,30,2.7,111.05,1.7,64.98333333 +911,30,2.7,111.05,1.7,64.98166667 +912,30,2.7,111.05,1.7,64.98 +913,30,2.7,111.05,1.7,64.97833333 +914,30,2.7,111.05,1.7,64.97666667 +915,30,2.7,111.05,1.7,64.975 +916,30,2.7,111.05,1.7,64.97333333 +917,30,2.7,111.05,1.7,64.97166667 +918,30,2.7,111.05,1.7,64.97 +919,30,2.7,111.05,1.7,64.96833333 +920,30,2.7,111.05,1.7,64.96666667 +921,30,2.7,111.05,1.7,64.965 +922,30,2.7,111.05,1.7,64.96333333 +923,30,2.7,111.05,1.7,64.96166667 +924,30,2.7,111.05,1.7,64.96 +925,30,2.7,111.05,1.7,64.95833333 +926,30,2.7,111.05,1.7,64.95666667 +927,30,2.7,111.05,1.7,64.955 +928,30,2.7,111.05,1.7,64.95333333 +929,30,2.7,111.05,1.7,64.95166667 +930,30,2.7,111.05,1.7,64.95 +931,30,2.7,111.05,1.7,64.94833333 +932,30,2.7,111.05,1.7,64.94666667 +933,30,2.7,111.05,1.7,64.945 +934,30,2.7,111.05,1.7,64.94333333 +935,30,2.7,111.05,1.7,64.94166667 +936,30,2.7,111.05,1.7,64.94 +937,30,2.7,111.05,1.7,64.93833333 +938,30,2.7,111.05,1.7,64.93666667 +939,30,2.7,111.05,1.7,64.935 +940,30,2.7,111.05,1.7,64.93333333 +941,30,2.7,111.05,1.7,64.93166667 +942,30,2.7,111.05,1.7,64.93 +943,30,2.7,111.05,1.7,64.92833333 +944,30,2.7,111.05,1.7,64.92666667 +945,30,2.7,111.05,1.7,64.925 +946,30,2.7,111.05,1.7,64.92333333 +947,30,2.7,111.05,1.7,64.92166667 +948,30,2.7,111.05,1.7,64.92 +949,30,2.7,111.05,1.7,64.91833333 +950,30,2.7,111.05,1.7,64.91666667 +951,30,2.7,111.05,1.7,64.915 +952,30,2.7,111.05,1.7,64.91333333 +953,30,2.7,111.05,1.7,64.91166666 +954,30,2.7,111.05,1.7,64.91 +955,30,2.7,111.05,1.7,64.90833333 +956,30,2.7,111.05,1.7,64.90666666 +957,30,2.7,111.05,1.7,64.905 +958,30,2.7,111.05,1.7,64.90333333 +959,30,2.7,111.05,1.7,64.90166666 +960,30,2.7,111.05,1.7,64.9 +961,30,2.7,111.05,1.7,64.89833333 +962,30,2.7,111.05,1.7,64.89666666 +963,30,2.7,111.05,1.7,64.895 +964,30,2.7,111.05,1.7,64.89333333 +965,30,2.7,111.05,1.7,64.89166666 +966,30,2.7,111.05,1.7,64.89 +967,30,2.7,111.05,1.7,64.88833333 +968,30,2.7,111.05,1.7,64.88666666 +969,30,2.7,111.05,1.7,64.885 +970,30,2.7,111.05,1.7,64.88333333 +971,30,2.7,111.05,1.7,64.88166666 +972,30,2.7,111.05,1.7,64.88 +973,30,2.7,111.05,1.7,64.87833333 +974,30,2.7,111.05,1.7,64.87666666 +975,30,2.7,111.05,1.7,64.875 +976,30,2.7,111.05,1.7,64.87333333 +977,30,2.7,111.05,1.7,64.87166666 +978,30,2.7,111.05,1.7,64.87 +979,30,2.7,111.05,1.7,64.86833333 +980,30,2.7,111.05,1.7,64.86666666 +981,30,2.7,111.05,1.7,64.865 +982,30,2.7,111.05,1.7,64.86333333 +983,30,2.7,111.05,1.7,64.86166666 +984,30,2.7,111.05,1.7,64.86 +985,30,2.7,111.05,1.7,64.85833333 +986,30,2.7,111.05,1.7,64.85666666 +987,30,2.7,111.05,1.7,64.855 +988,30,2.7,111.05,1.7,64.85333333 +989,30,2.7,111.05,1.7,64.85166666 +990,30,2.7,111.05,1.7,64.85 +991,30,2.7,111.05,1.7,64.84833333 +992,30,2.7,111.05,1.7,64.84666666 +993,30,2.7,111.05,1.7,64.845 +994,30,2.7,111.05,1.7,64.84333333 +995,30,2.7,111.05,1.7,64.84166666 +996,30,2.7,111.05,1.7,64.84 +997,30,2.7,111.05,1.7,64.83833333 +998,30,2.7,111.05,1.7,64.83666666 +999,30,2.7,111.05,1.7,64.835 +1000,30,2.7,111.05,1.7,64.83333333 +1001,30,2.7,111.05,1.7,64.83166666 +1002,30,2.7,111.05,1.7,64.83 +1003,30,2.7,111.05,1.7,64.82833333 +1004,30,2.7,111.05,1.7,64.82666666 +1005,30,2.7,111.05,1.7,64.825 +1006,30,2.7,111.05,1.7,64.82333333 +1007,30,2.7,111.05,1.7,64.82166666 +1008,30,2.7,111.05,1.7,64.82 +1009,30,2.7,111.05,1.7,64.81833333 +1010,30,2.7,111.05,1.7,64.81666666 +1011,30,2.7,111.05,1.7,64.815 +1012,30,2.7,111.05,1.7,64.81333333 +1013,30,2.7,111.05,1.7,64.81166666 +1014,30,2.7,111.05,1.7,64.81 +1015,30,2.7,111.05,1.7,64.80833333 +1016,30,2.7,111.05,1.7,64.80666666 +1017,30,2.7,111.05,1.7,64.805 +1018,30,2.7,111.05,1.7,64.80333333 +1019,30,2.7,111.05,1.7,64.80166666 +1020,30,2.7,111.05,1.7,64.8 +1021,30,2.7,111.05,1.7,64.79833333 +1022,30,2.7,111.05,1.7,64.79666666 +1023,30,2.7,111.05,1.7,64.795 +1024,30,2.7,111.05,1.7,64.79333333 +1025,30,2.7,111.05,1.7,64.79166666 +1026,30,2.7,111.05,1.7,64.79 +1027,30,2.7,111.05,1.7,64.78833333 +1028,30,2.7,111.05,1.7,64.78666666 +1029,30,2.7,111.05,1.7,64.785 +1030,30,2.7,111.05,1.7,64.78333333 +1031,30,2.7,111.05,1.7,64.78166666 +1032,30,2.7,111.05,1.7,64.78 +1033,30,2.7,111.05,1.7,64.77833333 +1034,30,2.7,111.05,1.7,64.77666666 +1035,30,2.7,111.05,1.7,64.775 +1036,30,2.7,111.05,1.7,64.77333333 +1037,30,2.7,111.05,1.7,64.77166666 +1038,30,2.7,111.05,1.7,64.77 +1039,30,2.7,111.05,1.7,64.76833333 +1040,30,2.7,111.05,1.7,64.76666666 +1041,30,2.7,111.05,1.7,64.765 +1042,30,2.7,111.05,1.7,64.76333333 +1043,30,2.7,111.05,1.7,64.76166666 +1044,30,2.7,111.05,1.7,64.76 +1045,30,2.7,111.05,1.7,64.75833333 +1046,30,2.7,111.05,1.7,64.75666666 +1047,30,2.7,111.05,1.7,64.755 +1048,30,2.7,111.05,1.7,64.75333333 +1049,30,2.7,111.05,1.7,64.75166666 +1050,30,2.7,111.05,1.7,64.75 +1051,30,2.7,111.05,1.7,64.74833333 +1052,30,2.7,111.05,1.7,64.74666666 +1053,30,2.7,111.05,1.7,64.74499999 +1054,30,2.7,111.05,1.7,64.74333333 +1055,30,2.7,111.05,1.7,64.74166666 +1056,30,2.7,111.05,1.7,64.73999999 +1057,30,2.7,111.05,1.7,64.73833333 +1058,30,2.7,111.05,1.7,64.73666666 +1059,30,2.7,111.05,1.7,64.73499999 +1060,30,2.7,111.05,1.7,64.73333333 +1061,30,2.7,111.05,1.7,64.73166666 +1062,30,2.7,111.05,1.7,64.72999999 +1063,30,2.7,111.05,1.7,64.72833333 +1064,30,2.7,111.05,1.7,64.72666666 +1065,30,2.7,111.05,1.7,64.72499999 +1066,30,2.7,111.05,1.7,64.72333333 +1067,30,2.7,111.05,1.7,64.72166666 +1068,30,2.7,111.05,1.7,64.71999999 +1069,30,2.7,111.05,1.7,64.71833333 +1070,30,2.7,111.05,1.7,64.71666666 +1071,30,2.7,111.05,1.7,64.71499999 +1072,30,2.7,111.05,1.7,64.71333333 +1073,30,2.7,111.05,1.7,64.71166666 +1074,30,2.7,111.05,1.7,64.70999999 +1075,30,2.7,111.05,1.7,64.70833333 +1076,30,2.7,111.05,1.7,64.70666666 +1077,30,2.7,111.05,1.7,64.70499999 +1078,30,2.7,111.05,1.7,64.70333333 +1079,30,2.7,111.05,1.7,64.70166666 +1080,30,2.7,111.05,1.7,64.69999999 +1081,30,2.7,111.05,1.7,64.69833333 +1082,30,2.7,111.05,1.7,64.69666666 +1083,30,2.7,111.05,1.7,64.69499999 +1084,30,2.7,111.05,1.7,64.69333333 +1085,30,2.7,111.05,1.7,64.69166666 +1086,30,2.7,111.05,1.7,64.68999999 +1087,30,2.7,111.05,1.7,64.68833333 +1088,30,2.7,111.05,1.7,64.68666666 +1089,30,2.7,111.05,1.7,64.68499999 +1090,30,2.7,111.05,1.7,64.68333333 +1091,30,2.7,111.05,1.7,64.68166666 +1092,30,2.7,111.05,1.7,64.67999999 +1093,30,2.7,111.05,1.7,64.67833333 +1094,30,2.7,111.05,1.7,64.67666666 +1095,30,2.7,111.05,1.7,64.67499999 +1096,30,2.7,111.05,1.7,64.67333333 +1097,30,2.7,111.05,1.7,64.67166666 +1098,30,2.7,111.05,1.7,64.66999999 +1099,30,2.7,111.05,1.7,64.66833333 +1100,30,2.7,111.05,1.7,64.66666666 +1101,30,2.7,111.05,1.7,64.66499999 +1102,30,2.7,111.05,1.7,64.66333333 +1103,30,2.7,111.05,1.7,64.66166666 +1104,30,2.7,111.05,1.7,64.65999999 +1105,30,2.7,111.05,1.7,64.65833333 +1106,30,2.7,111.05,1.7,64.65666666 +1107,30,2.7,111.05,1.7,64.65499999 +1108,30,2.7,111.05,1.7,64.65333333 +1109,30,2.7,111.05,1.7,64.65166666 +1110,30,2.7,111.05,1.7,64.64999999 +1111,30,2.7,111.05,1.7,64.64833333 +1112,30,2.7,111.05,1.7,64.64666666 +1113,30,2.7,111.05,1.7,64.64499999 +1114,30,2.7,111.05,1.7,64.64333333 +1115,30,2.7,111.05,1.7,64.64166666 +1116,30,2.7,111.05,1.7,64.63999999 +1117,30,2.7,111.05,1.7,64.63833333 +1118,30,2.7,111.05,1.7,64.63666666 +1119,30,2.7,111.05,1.7,64.63499999 +1120,30,2.7,111.05,1.7,64.63333333 +1121,30,2.7,111.05,1.7,64.63166666 +1122,30,2.7,111.05,1.7,64.62999999 +1123,30,2.7,111.05,1.7,64.62833333 +1124,30,2.7,111.05,1.7,64.62666666 +1125,30,2.7,111.05,1.7,64.62499999 +1126,30,2.7,111.05,1.7,64.62333333 +1127,30,2.7,111.05,1.7,64.62166666 +1128,30,2.7,111.05,1.7,64.61999999 +1129,30,2.7,111.05,1.7,64.61833333 +1130,30,2.7,111.05,1.7,64.61666666 +1131,30,2.7,111.05,1.7,64.61499999 +1132,30,2.7,111.05,1.7,64.61333333 +1133,30,2.7,111.05,1.7,64.61166666 +1134,30,2.7,111.05,1.7,64.60999999 +1135,30,2.7,111.05,1.7,64.60833333 +1136,30,2.7,111.05,1.7,64.60666666 +1137,30,2.7,111.05,1.7,64.60499999 +1138,30,2.7,111.05,1.7,64.60333333 +1139,30,2.7,111.05,1.7,64.60166666 +1140,30,2.7,111.05,1.7,64.59999999 +1141,30,2.7,111.05,1.7,64.59833333 +1142,30,2.7,111.05,1.7,64.59666666 +1143,30,2.7,111.05,1.7,64.59499999 +1144,30,2.7,111.05,1.7,64.59333333 +1145,30,2.7,111.05,1.7,64.59166666 +1146,30,2.7,111.05,1.7,64.58999999 +1147,30,2.7,111.05,1.7,64.58833333 +1148,30,2.7,111.05,1.7,64.58666666 +1149,30,2.7,111.05,1.7,64.58499999 +1150,30,2.7,111.05,1.7,64.58333333 +1151,30,2.7,111.05,1.7,64.58166666 +1152,30,2.7,111.05,1.7,64.57999999 +1153,30,2.7,111.05,1.7,64.57833332 +1154,30,2.7,111.05,1.7,64.57666666 +1155,30,2.7,111.05,1.7,64.57499999 +1156,30,2.7,111.05,1.7,64.57333332 +1157,30,2.7,111.05,1.7,64.57166666 +1158,30,2.7,111.05,1.7,64.56999999 +1159,30,2.7,111.05,1.7,64.56833332 +1160,30,2.7,111.05,1.7,64.56666666 +1161,30,2.7,111.05,1.7,64.56499999 +1162,30,2.7,111.05,1.7,64.56333332 +1163,30,2.7,111.05,1.7,64.56166666 +1164,30,2.7,111.05,1.7,64.55999999 +1165,30,2.7,111.05,1.7,64.55833332 +1166,30,2.7,111.05,1.7,64.55666666 +1167,30,2.7,111.05,1.7,64.55499999 +1168,30,2.7,111.05,1.7,64.55333332 +1169,30,2.7,111.05,1.7,64.55166666 +1170,30,2.7,111.05,1.7,64.54999999 +1171,30,2.7,111.05,1.7,64.54833332 +1172,30,2.7,111.05,1.7,64.54666666 +1173,30,2.7,111.05,1.7,64.54499999 +1174,30,2.7,111.05,1.7,64.54333332 +1175,30,2.7,111.05,1.7,64.54166666 +1176,30,2.7,111.05,1.7,64.53999999 +1177,30,2.7,111.05,1.7,64.53833332 +1178,30,2.7,111.05,1.7,64.53666666 +1179,30,2.7,111.05,1.7,64.53499999 +1180,30,2.7,111.05,1.7,64.53333332 +1181,30,2.7,111.05,1.7,64.53166666 +1182,30,2.7,111.05,1.7,64.52999999 +1183,30,2.7,111.05,1.7,64.52833332 +1184,30,2.7,111.05,1.7,64.52666666 +1185,30,2.7,111.05,1.7,64.52499999 +1186,30,2.7,111.05,1.7,64.52333332 +1187,30,2.7,111.05,1.7,64.52166666 +1188,30,2.7,111.05,1.7,64.51999999 +1189,30,2.7,111.05,1.7,64.51833332 +1190,30,2.7,111.05,1.7,64.51666666 +1191,30,2.7,111.05,1.7,64.51499999 +1192,30,2.7,111.05,1.7,64.51333332 +1193,30,2.7,111.05,1.7,64.51166666 +1194,30,2.7,111.05,1.7,64.50999999 +1195,30,2.7,111.05,1.7,64.50833332 +1196,30,2.7,111.05,1.7,64.50666666 +1197,30,2.7,111.05,1.7,64.50499999 +1198,30,2.7,111.05,1.7,64.50333332 +1199,30,2.7,111.05,1.7,64.50166666 +1200,30,2.7,111.05,1.7,64.5 +1201,30,2.7,111.05,1.7,64.499375 +1202,30,2.7,111.05,1.7,64.49875 +1203,30,2.7,111.05,1.7,64.498125 +1204,30,2.7,111.05,1.7,64.4975 +1205,30,2.7,111.05,1.7,64.496875 +1206,30,2.7,111.05,1.7,64.49625 +1207,30,2.7,111.05,1.7,64.495625 +1208,30,2.7,111.05,1.7,64.495 +1209,30,2.7,111.05,1.7,64.494375 +1210,30,2.7,111.05,1.7,64.49375 +1211,30,2.7,111.05,1.7,64.493125 +1212,30,2.7,111.05,1.7,64.4925 +1213,30,2.7,111.05,1.7,64.491875 +1214,30,2.7,111.05,1.7,64.49125 +1215,30,2.7,111.05,1.7,64.490625 +1216,30,2.7,111.05,1.7,64.49 +1217,30,2.7,111.05,1.7,64.489375 +1218,30,2.7,111.05,1.7,64.48875 +1219,30,2.7,111.05,1.7,64.488125 +1220,30,2.7,111.05,1.7,64.4875 +1221,30,2.7,111.05,1.7,64.486875 +1222,30,2.7,111.05,1.7,64.48625 +1223,30,2.7,111.05,1.7,64.485625 +1224,30,2.7,111.05,1.7,64.485 +1225,30,2.7,111.05,1.7,64.484375 +1226,30,2.7,111.05,1.7,64.48375 +1227,30,2.7,111.05,1.7,64.483125 +1228,30,2.7,111.05,1.7,64.4825 +1229,30,2.7,111.05,1.7,64.481875 +1230,30,2.7,111.05,1.7,64.48125 +1231,30,2.7,111.05,1.7,64.480625 +1232,30,2.7,111.05,1.7,64.48 +1233,30,2.7,111.05,1.7,64.479375 +1234,30,2.7,111.05,1.7,64.47875 +1235,30,2.7,111.05,1.7,64.478125 +1236,30,2.7,111.05,1.7,64.4775 +1237,30,2.7,111.05,1.7,64.476875 +1238,30,2.7,111.05,1.7,64.47625 +1239,30,2.7,111.05,1.7,64.475625 +1240,30,2.7,111.05,1.7,64.475 +1241,30,2.7,111.05,1.7,64.474375 +1242,30,2.7,111.05,1.7,64.47375 +1243,30,2.7,111.05,1.7,64.473125 +1244,30,2.7,111.05,1.7,64.4725 +1245,30,2.7,111.05,1.7,64.471875 +1246,30,2.7,111.05,1.7,64.47125 +1247,30,2.7,111.05,1.7,64.470625 +1248,30,2.7,111.05,1.7,64.47 +1249,30,2.7,111.05,1.7,64.469375 +1250,30,2.7,111.05,1.7,64.46875 +1251,30,2.7,111.05,1.7,64.468125 +1252,30,2.7,111.05,1.7,64.4675 +1253,30,2.7,111.05,1.7,64.466875 +1254,30,2.7,111.05,1.7,64.46625 +1255,30,2.7,111.05,1.7,64.465625 +1256,30,2.7,111.05,1.7,64.465 +1257,30,2.7,111.05,1.7,64.464375 +1258,30,2.7,111.05,1.7,64.46375 +1259,30,2.7,111.05,1.7,64.463125 +1260,30,2.7,111.05,1.7,64.4625 +1261,30,2.7,111.05,1.7,64.461875 +1262,30,2.7,111.05,1.7,64.46125 +1263,30,2.7,111.05,1.7,64.460625 +1264,30,2.7,111.05,1.7,64.46 +1265,30,2.7,111.05,1.7,64.459375 +1266,30,2.7,111.05,1.7,64.45875 +1267,30,2.7,111.05,1.7,64.458125 +1268,30,2.7,111.05,1.7,64.4575 +1269,30,2.7,111.05,1.7,64.456875 +1270,30,2.7,111.05,1.7,64.45625 +1271,30,2.7,111.05,1.7,64.455625 +1272,30,2.7,111.05,1.7,64.455 +1273,30,2.7,111.05,1.7,64.454375 +1274,30,2.7,111.05,1.7,64.45375 +1275,30,2.7,111.05,1.7,64.453125 +1276,30,2.7,111.05,1.7,64.4525 +1277,30,2.7,111.05,1.7,64.451875 +1278,30,2.7,111.05,1.7,64.45125 +1279,30,2.7,111.05,1.7,64.450625 +1280,30,2.7,111.05,1.7,64.45 +1281,30,2.7,111.05,1.7,64.449375 +1282,30,2.7,111.05,1.7,64.44875 +1283,30,2.7,111.05,1.7,64.448125 +1284,30,2.7,111.05,1.7,64.4475 +1285,30,2.7,111.05,1.7,64.446875 +1286,30,2.7,111.05,1.7,64.44625 +1287,30,2.7,111.05,1.7,64.445625 +1288,30,2.7,111.05,1.7,64.445 +1289,30,2.7,111.05,1.7,64.444375 +1290,30,2.7,111.05,1.7,64.44375 +1291,30,2.7,111.05,1.7,64.443125 +1292,30,2.7,111.05,1.7,64.4425 +1293,30,2.7,111.05,1.7,64.441875 +1294,30,2.7,111.05,1.7,64.44125 +1295,30,2.7,111.05,1.7,64.440625 +1296,30,2.7,111.05,1.7,64.44 +1297,30,2.7,111.05,1.7,64.439375 +1298,30,2.7,111.05,1.7,64.43875 +1299,30,2.7,111.05,1.7,64.438125 +1300,30,2.7,111.05,1.7,64.4375 +1301,30,2.7,111.05,1.7,64.436875 +1302,30,2.7,111.05,1.7,64.43625 +1303,30,2.7,111.05,1.7,64.435625 +1304,30,2.7,111.05,1.7,64.435 +1305,30,2.7,111.05,1.7,64.434375 +1306,30,2.7,111.05,1.7,64.43375 +1307,30,2.7,111.05,1.7,64.433125 +1308,30,2.7,111.05,1.7,64.4325 +1309,30,2.7,111.05,1.7,64.431875 +1310,30,2.7,111.05,1.7,64.43125 +1311,30,2.7,111.05,1.7,64.430625 +1312,30,2.7,111.05,1.7,64.43 +1313,30,2.7,111.05,1.7,64.429375 +1314,30,2.7,111.05,1.7,64.42875 +1315,30,2.7,111.05,1.7,64.428125 +1316,30,2.7,111.05,1.7,64.4275 +1317,30,2.7,111.05,1.7,64.426875 +1318,30,2.7,111.05,1.7,64.42625 +1319,30,2.7,111.05,1.7,64.425625 +1320,30,2.7,111.05,1.7,64.425 +1321,30,2.7,111.05,1.7,64.424375 +1322,30,2.7,111.05,1.7,64.42375 +1323,30,2.7,111.05,1.7,64.423125 +1324,30,2.7,111.05,1.7,64.4225 +1325,30,2.7,111.05,1.7,64.421875 +1326,30,2.7,111.05,1.7,64.42125 +1327,30,2.7,111.05,1.7,64.420625 +1328,30,2.7,111.05,1.7,64.42 +1329,30,2.7,111.05,1.7,64.419375 +1330,30,2.7,111.05,1.7,64.41875 +1331,30,2.7,111.05,1.7,64.418125 +1332,30,2.7,111.05,1.7,64.4175 +1333,30,2.7,111.05,1.7,64.416875 +1334,30,2.7,111.05,1.7,64.41625 +1335,30,2.7,111.05,1.7,64.415625 +1336,30,2.7,111.05,1.7,64.415 +1337,30,2.7,111.05,1.7,64.414375 +1338,30,2.7,111.05,1.7,64.41375 +1339,30,2.7,111.05,1.7,64.413125 +1340,30,2.7,111.05,1.7,64.4125 +1341,30,2.7,111.05,1.7,64.411875 +1342,30,2.7,111.05,1.7,64.41125 +1343,30,2.7,111.05,1.7,64.410625 +1344,30,2.7,111.05,1.7,64.41 +1345,30,2.7,111.05,1.7,64.409375 +1346,30,2.7,111.05,1.7,64.40875 +1347,30,2.7,111.05,1.7,64.408125 +1348,30,2.7,111.05,1.7,64.4075 +1349,30,2.7,111.05,1.7,64.406875 +1350,30,2.7,111.05,1.7,64.40625 +1351,30,2.7,111.05,1.7,64.405625 +1352,30,2.7,111.05,1.7,64.405 +1353,30,2.7,111.05,1.7,64.404375 +1354,30,2.7,111.05,1.7,64.40375 +1355,30,2.7,111.05,1.7,64.403125 +1356,30,2.7,111.05,1.7,64.4025 +1357,30,2.7,111.05,1.7,64.401875 +1358,30,2.7,111.05,1.7,64.40125 +1359,30,2.7,111.05,1.7,64.400625 +1360,30,2.7,111.05,1.7,64.4 +1361,30,2.7,111.05,1.7,64.399375 +1362,30,2.7,111.05,1.7,64.39875 +1363,30,2.7,111.05,1.7,64.398125 +1364,30,2.7,111.05,1.7,64.3975 +1365,30,2.7,111.05,1.7,64.396875 +1366,30,2.7,111.05,1.7,64.39625 +1367,30,2.7,111.05,1.7,64.395625 +1368,30,2.7,111.05,1.7,64.395 +1369,30,2.7,111.05,1.7,64.394375 +1370,30,2.7,111.05,1.7,64.39375 +1371,30,2.7,111.05,1.7,64.393125 +1372,30,2.7,111.05,1.7,64.3925 +1373,30,2.7,111.05,1.7,64.391875 +1374,30,2.7,111.05,1.7,64.39125 +1375,30,2.7,111.05,1.7,64.390625 +1376,30,2.7,111.05,1.7,64.39 +1377,30,2.7,111.05,1.7,64.389375 +1378,30,2.7,111.05,1.7,64.38875 +1379,30,2.7,111.05,1.7,64.388125 +1380,30,2.7,111.05,1.7,64.3875 +1381,30,2.7,111.05,1.7,64.386875 +1382,30,2.7,111.05,1.7,64.38625 +1383,30,2.7,111.05,1.7,64.385625 +1384,30,2.7,111.05,1.7,64.385 +1385,30,2.7,111.05,1.7,64.384375 +1386,30,2.7,111.05,1.7,64.38375 +1387,30,2.7,111.05,1.7,64.383125 +1388,30,2.7,111.05,1.7,64.3825 +1389,30,2.7,111.05,1.7,64.381875 +1390,30,2.7,111.05,1.7,64.38125 +1391,30,2.7,111.05,1.7,64.380625 +1392,30,2.7,111.05,1.7,64.38 +1393,30,2.7,111.05,1.7,64.379375 +1394,30,2.7,111.05,1.7,64.37875 +1395,30,2.7,111.05,1.7,64.378125 +1396,30,2.7,111.05,1.7,64.3775 +1397,30,2.7,111.05,1.7,64.376875 +1398,30,2.7,111.05,1.7,64.37625 +1399,30,2.7,111.05,1.7,64.375625 +1400,30,2.7,111.05,1.7,64.375 +1401,30,2.7,111.05,1.7,64.374375 +1402,30,2.7,111.05,1.7,64.37375 +1403,30,2.7,111.05,1.7,64.373125 +1404,30,2.7,111.05,1.7,64.3725 +1405,30,2.7,111.05,1.7,64.371875 +1406,30,2.7,111.05,1.7,64.37125 +1407,30,2.7,111.05,1.7,64.370625 +1408,30,2.7,111.05,1.7,64.37 +1409,30,2.7,111.05,1.7,64.369375 +1410,30,2.7,111.05,1.7,64.36875 +1411,30,2.7,111.05,1.7,64.368125 +1412,30,2.7,111.05,1.7,64.3675 +1413,30,2.7,111.05,1.7,64.366875 +1414,30,2.7,111.05,1.7,64.36625 +1415,30,2.7,111.05,1.7,64.365625 +1416,30,2.7,111.05,1.7,64.365 +1417,30,2.7,111.05,1.7,64.364375 +1418,30,2.7,111.05,1.7,64.36375 +1419,30,2.7,111.05,1.7,64.363125 +1420,30,2.7,111.05,1.7,64.3625 +1421,30,2.7,111.05,1.7,64.361875 +1422,30,2.7,111.05,1.7,64.36125 +1423,30,2.7,111.05,1.7,64.360625 +1424,30,2.7,111.05,1.7,64.36 +1425,30,2.7,111.05,1.7,64.359375 +1426,30,2.7,111.05,1.7,64.35875 +1427,30,2.7,111.05,1.7,64.358125 +1428,30,2.7,111.05,1.7,64.3575 +1429,30,2.7,111.05,1.7,64.356875 +1430,30,2.7,111.05,1.7,64.35625 +1431,30,2.7,111.05,1.7,64.355625 +1432,30,2.7,111.05,1.7,64.355 +1433,30,2.7,111.05,1.7,64.354375 +1434,30,2.7,111.05,1.7,64.35375 +1435,30,2.7,111.05,1.7,64.353125 +1436,30,2.7,111.05,1.7,64.3525 +1437,30,2.7,111.05,1.7,64.351875 +1438,30,2.7,111.05,1.7,64.35125 +1439,30,2.7,111.05,1.7,64.350625 +1440,30,2.7,111.05,1.7,64.35 +1441,30,2.7,111.05,1.7,64.349375 +1442,30,2.7,111.05,1.7,64.34875 +1443,30,2.7,111.05,1.7,64.348125 +1444,30,2.7,111.05,1.7,64.3475 +1445,30,2.7,111.05,1.7,64.346875 +1446,30,2.7,111.05,1.7,64.34625 +1447,30,2.7,111.05,1.7,64.345625 +1448,30,2.7,111.05,1.7,64.345 +1449,30,2.7,111.05,1.7,64.344375 +1450,30,2.7,111.05,1.7,64.34375 +1451,30,2.7,111.05,1.7,64.343125 +1452,30,2.7,111.05,1.7,64.3425 +1453,30,2.7,111.05,1.7,64.341875 +1454,30,2.7,111.05,1.7,64.34125 +1455,30,2.7,111.05,1.7,64.340625 +1456,30,2.7,111.05,1.7,64.34 +1457,30,2.7,111.05,1.7,64.339375 +1458,30,2.7,111.05,1.7,64.33875 +1459,30,2.7,111.05,1.7,64.338125 +1460,30,2.7,111.05,1.7,64.3375 +1461,30,2.7,111.05,1.7,64.336875 +1462,30,2.7,111.05,1.7,64.33625 +1463,30,2.7,111.05,1.7,64.335625 +1464,30,2.7,111.05,1.7,64.335 +1465,30,2.7,111.05,1.7,64.334375 +1466,30,2.7,111.05,1.7,64.33375 +1467,30,2.7,111.05,1.7,64.333125 +1468,30,2.7,111.05,1.7,64.3325 +1469,30,2.7,111.05,1.7,64.331875 +1470,30,2.7,111.05,1.7,64.33125 +1471,30,2.7,111.05,1.7,64.330625 +1472,30,2.7,111.05,1.7,64.33 +1473,30,2.7,111.05,1.7,64.329375 +1474,30,2.7,111.05,1.7,64.32875 +1475,30,2.7,111.05,1.7,64.328125 +1476,30,2.7,111.05,1.7,64.3275 +1477,30,2.7,111.05,1.7,64.326875 +1478,30,2.7,111.05,1.7,64.32625 +1479,30,2.7,111.05,1.7,64.325625 +1480,30,2.7,111.05,1.7,64.325 +1481,30,2.7,111.05,1.7,64.324375 +1482,30,2.7,111.05,1.7,64.32375 +1483,30,2.7,111.05,1.7,64.323125 +1484,30,2.7,111.05,1.7,64.3225 +1485,30,2.7,111.05,1.7,64.321875 +1486,30,2.7,111.05,1.7,64.32125 +1487,30,2.7,111.05,1.7,64.320625 +1488,30,2.7,111.05,1.7,64.32 +1489,30,2.7,111.05,1.7,64.319375 +1490,30,2.6,111.05,1.7,64.31875 +1491,30,2.6,111.05,1.7,64.318125 +1492,30,2.6,111.05,1.7,64.3175 +1493,30,2.6,111.05,1.7,64.316875 +1494,30,2.6,111.05,1.7,64.31625 +1495,30,2.6,111.05,1.7,64.315625 +1496,30,2.6,111.05,1.7,64.315 +1497,30,2.6,111.05,1.7,64.314375 +1498,30,2.6,111.05,1.7,64.31375 +1499,30,2.6,111.05,1.7,64.313125 +1500,30,2.6,111.05,1.7,64.3125 +1501,30,2.6,111.05,1.7,64.311875 +1502,30,2.6,111.05,1.7,64.31125 +1503,30,2.6,111.05,1.7,64.310625 +1504,30,2.6,111.05,1.7,64.31 +1505,30,2.6,111.05,1.7,64.309375 +1506,30,2.6,111.05,1.7,64.30875 +1507,30,2.6,111.05,1.7,64.308125 +1508,30,2.6,111.05,1.7,64.3075 +1509,30,2.6,111.05,1.7,64.306875 +1510,30,2.6,111.05,1.7,64.30625 +1511,30,2.6,111.05,1.7,64.305625 +1512,30,2.6,111.05,1.7,64.305 +1513,30,2.6,111.05,1.7,64.304375 +1514,30,2.6,111.05,1.7,64.30375 +1515,30,2.6,111.05,1.7,64.303125 +1516,30,2.6,111.05,1.7,64.3025 +1517,30,2.6,111.05,1.7,64.301875 +1518,30,2.6,111.05,1.7,64.30125 +1519,30,2.6,111.05,1.7,64.300625 +1520,30,2.6,111.05,1.7,64.3 +1521,30,2.6,111.05,1.7,64.299375 +1522,30,2.6,111.05,1.7,64.29875 +1523,30,2.6,111.05,1.7,64.298125 +1524,30,2.6,111.05,1.7,64.2975 +1525,30,2.6,111.05,1.7,64.296875 +1526,30,2.6,111.05,1.7,64.29625 +1527,30,2.6,111.05,1.7,64.295625 +1528,30,2.6,111.05,1.7,64.295 +1529,30,2.6,111.05,1.7,64.294375 +1530,30,2.6,111.05,1.7,64.29375 +1531,30,2.6,111.05,1.7,64.293125 +1532,30,2.6,111.05,1.7,64.2925 +1533,30,2.6,111.05,1.7,64.291875 +1534,30,2.6,111.05,1.7,64.29125 +1535,30,2.6,111.05,1.7,64.290625 +1536,30,2.6,111.05,1.7,64.29 +1537,30,2.6,111.05,1.7,64.289375 +1538,30,2.6,111.05,1.7,64.28875 +1539,30,2.6,111.05,1.7,64.288125 +1540,30,2.6,111.05,1.7,64.2875 +1541,30,2.6,111.05,1.7,64.286875 +1542,30,2.6,111.05,1.7,64.28625 +1543,30,2.6,111.05,1.7,64.285625 +1544,30,2.6,111.05,1.7,64.285 +1545,30,2.6,111.05,1.7,64.284375 +1546,30,2.6,111.05,1.7,64.28375 +1547,30,2.6,111.05,1.7,64.283125 +1548,30,2.6,111.05,1.7,64.2825 +1549,30,2.6,111.05,1.7,64.281875 +1550,30,2.6,111.05,1.7,64.28125 +1551,30,2.6,111.05,1.7,64.280625 +1552,30,2.6,111.05,1.7,64.28 +1553,30,2.6,111.05,1.7,64.279375 +1554,30,2.6,111.05,1.7,64.27875 +1555,30,2.6,111.05,1.7,64.278125 +1556,30,2.6,111.05,1.7,64.2775 +1557,30,2.6,111.05,1.7,64.276875 +1558,30,2.6,111.05,1.7,64.27625 +1559,30,2.6,111.05,1.7,64.275625 +1560,30,2.6,111.05,1.7,64.275 +1561,30,2.6,111.05,1.7,64.274375 +1562,30,2.6,111.05,1.7,64.27375 +1563,30,2.6,111.05,1.7,64.273125 +1564,30,2.6,111.05,1.7,64.2725 +1565,30,2.6,111.05,1.7,64.271875 +1566,30,2.6,111.05,1.7,64.27125 +1567,30,2.6,111.05,1.7,64.270625 +1568,30,2.6,111.05,1.7,64.27 +1569,30,2.6,111.05,1.7,64.269375 +1570,30,2.6,111.05,1.7,64.26875 +1571,30,2.6,111.05,1.7,64.268125 +1572,30,2.6,111.05,1.7,64.2675 +1573,30,2.6,111.05,1.7,64.266875 +1574,30,2.6,111.05,1.7,64.26625 +1575,30,2.6,111.05,1.7,64.265625 +1576,30,2.6,111.05,1.7,64.265 +1577,30,2.6,111.05,1.7,64.264375 +1578,30,2.6,111.05,1.7,64.26375 +1579,30,2.6,111.05,1.7,64.263125 +1580,30,2.6,111.05,1.7,64.2625 +1581,30,2.6,111.05,1.7,64.261875 +1582,30,2.6,111.05,1.7,64.26125 +1583,30,2.6,111.05,1.7,64.260625 +1584,30,2.6,111.05,1.7,64.26 +1585,30,2.6,111.05,1.7,64.259375 +1586,30,2.6,111.05,1.7,64.25875 +1587,30,2.6,111.05,1.7,64.258125 +1588,30,2.6,111.05,1.7,64.2575 +1589,30,2.6,111.05,1.7,64.256875 +1590,30,2.6,111.05,1.7,64.25625 +1591,30,2.6,111.05,1.7,64.255625 +1592,30,2.6,111.05,1.7,64.255 +1593,30,2.6,111.05,1.7,64.254375 +1594,30,2.6,111.05,1.7,64.25375 +1595,30,2.6,111.05,1.7,64.253125 +1596,30,2.6,111.05,1.7,64.2525 +1597,30,2.6,111.05,1.7,64.251875 +1598,30,2.6,111.05,1.7,64.25125 +1599,30,2.6,111.05,1.7,64.250625 +1600,30,2.6,111.05,1.7,64.25 +1601,30,2.6,111.05,1.7,64.249375 +1602,30,2.6,111.05,1.7,64.24875 +1603,30,2.6,111.05,1.7,64.248125 +1604,30,2.6,111.05,1.7,64.2475 +1605,30,2.6,111.05,1.7,64.246875 +1606,30,2.6,111.05,1.7,64.24625 +1607,30,2.6,111.05,1.7,64.245625 +1608,30,2.6,111.05,1.7,64.245 +1609,30,2.6,111.05,1.7,64.244375 +1610,30,2.6,111.05,1.7,64.24375 +1611,30,2.6,111.05,1.7,64.243125 +1612,30,2.6,111.05,1.7,64.2425 +1613,30,2.6,111.05,1.7,64.241875 +1614,30,2.6,111.05,1.7,64.24125 +1615,30,2.6,111.05,1.7,64.240625 +1616,30,2.6,111.05,1.7,64.24 +1617,30,2.6,111.05,1.7,64.239375 +1618,30,2.6,111.05,1.7,64.23875 +1619,30,2.6,111.05,1.7,64.238125 +1620,30,2.6,111.05,1.7,64.2375 +1621,30,2.6,111.05,1.7,64.236875 +1622,30,2.6,111.05,1.7,64.23625 +1623,30,2.6,111.05,1.7,64.235625 +1624,30,2.6,111.05,1.7,64.235 +1625,30,2.6,111.05,1.7,64.234375 +1626,30,2.6,111.05,1.7,64.23375 +1627,30,2.6,111.05,1.7,64.233125 +1628,30,2.6,111.05,1.7,64.2325 +1629,30,2.6,111.05,1.7,64.231875 +1630,30,2.6,111.05,1.7,64.23125 +1631,30,2.6,111.05,1.7,64.230625 +1632,30,2.6,111.05,1.7,64.23 +1633,30,2.6,111.05,1.7,64.229375 +1634,30,2.6,111.05,1.7,64.22875 +1635,30,2.6,111.05,1.7,64.228125 +1636,30,2.6,111.05,1.7,64.2275 +1637,30,2.6,111.05,1.7,64.226875 +1638,30,2.6,111.05,1.7,64.22625 +1639,30,2.6,111.05,1.7,64.225625 +1640,30,2.6,111.05,1.7,64.225 +1641,30,2.6,111.05,1.7,64.224375 +1642,30,2.6,111.05,1.7,64.22375 +1643,30,2.6,111.05,1.7,64.223125 +1644,30,2.6,111.05,1.7,64.2225 +1645,30,2.6,111.05,1.7,64.221875 +1646,30,2.6,111.05,1.7,64.22125 +1647,30,2.6,111.05,1.7,64.220625 +1648,30,2.6,111.05,1.7,64.22 +1649,30,2.6,111.05,1.7,64.219375 +1650,30,2.6,111.05,1.7,64.21875 +1651,30,2.6,111.05,1.7,64.218125 +1652,30,2.6,111.05,1.7,64.2175 +1653,30,2.6,111.05,1.7,64.216875 +1654,30,2.6,111.05,1.7,64.21625 +1655,30,2.6,111.05,1.7,64.215625 +1656,30,2.6,111.05,1.7,64.215 +1657,30,2.6,111.05,1.7,64.214375 +1658,30,2.6,111.05,1.7,64.21375 +1659,30,2.6,111.05,1.7,64.213125 +1660,30,2.6,111.05,1.7,64.2125 +1661,30,2.6,111.05,1.7,64.211875 +1662,30,2.6,111.05,1.7,64.21125 +1663,30,2.6,111.05,1.7,64.210625 +1664,30,2.6,111.05,1.7,64.21 +1665,30,2.6,111.05,1.7,64.209375 +1666,30,2.6,111.05,1.7,64.20875 +1667,30,2.6,111.05,1.7,64.208125 +1668,30,2.6,111.05,1.7,64.2075 +1669,30,2.6,111.05,1.7,64.206875 +1670,30,2.6,111.05,1.7,64.20625 +1671,30,2.6,111.05,1.7,64.205625 +1672,30,2.6,111.05,1.7,64.205 +1673,30,2.6,111.05,1.7,64.204375 +1674,30,2.6,111.05,1.7,64.20375 +1675,30,2.6,111.05,1.7,64.203125 +1676,30,2.6,111.05,1.7,64.2025 +1677,30,2.6,111.05,1.7,64.201875 +1678,30,2.6,111.05,1.7,64.20125 +1679,30,2.6,111.05,1.7,64.200625 +1680,30,2.6,111.05,1.7,64.2 +1681,30,2.6,111.05,1.7,64.199375 +1682,30,2.6,111.05,1.7,64.19875 +1683,30,2.6,111.05,1.7,64.198125 +1684,30,2.6,111.05,1.7,64.1975 +1685,30,2.6,111.05,1.7,64.196875 +1686,30,2.6,111.05,1.7,64.19625 +1687,30,2.6,111.05,1.7,64.195625 +1688,30,2.6,111.05,1.7,64.195 +1689,30,2.6,111.05,1.7,64.194375 +1690,30,2.6,111.05,1.7,64.19375 +1691,30,2.6,111.05,1.7,64.193125 +1692,30,2.6,111.05,1.7,64.1925 +1693,30,2.6,111.05,1.7,64.191875 +1694,30,2.6,111.05,1.7,64.19125 +1695,30,2.6,111.05,1.7,64.190625 +1696,30,2.6,111.05,1.7,64.19 +1697,30,2.6,111.05,1.7,64.189375 +1698,30,2.6,111.05,1.7,64.18875 +1699,30,2.6,111.05,1.7,64.188125 +1700,30,2.6,111.05,1.7,64.1875 +1701,30,2.6,111.05,1.7,64.186875 +1702,30,2.6,111.05,1.7,64.18625 +1703,30,2.6,111.05,1.7,64.185625 +1704,30,2.6,111.05,1.7,64.185 +1705,30,2.6,111.05,1.7,64.184375 +1706,30,2.6,111.05,1.7,64.18375 +1707,30,2.6,111.05,1.7,64.183125 +1708,30,2.6,111.05,1.7,64.1825 +1709,30,2.6,111.05,1.7,64.181875 +1710,30,2.6,111.05,1.7,64.18125 +1711,30,2.6,111.05,1.7,64.180625 +1712,30,2.6,111.05,1.7,64.18 +1713,30,2.6,111.05,1.7,64.179375 +1714,30,2.6,111.05,1.7,64.17875 +1715,30,2.6,111.05,1.7,64.178125 +1716,30,2.6,111.05,1.7,64.1775 +1717,30,2.6,111.05,1.7,64.176875 +1718,30,2.6,111.05,1.7,64.17625 +1719,30,2.6,111.05,1.7,64.175625 +1720,30,2.6,111.05,1.7,64.175 +1721,30,2.6,111.05,1.7,64.174375 +1722,30,2.6,111.05,1.7,64.17375 +1723,30,2.6,111.05,1.7,64.173125 +1724,30,2.6,111.05,1.7,64.1725 +1725,30,2.6,111.05,1.7,64.171875 +1726,30,2.6,111.05,1.7,64.17125 +1727,30,2.6,111.05,1.7,64.170625 +1728,30,2.6,111.05,1.7,64.17 +1729,30,2.6,111.05,1.7,64.169375 +1730,30,2.6,111.05,1.7,64.16875 +1731,30,2.6,111.05,1.7,64.168125 +1732,30,2.6,111.05,1.7,64.1675 +1733,30,2.6,111.05,1.7,64.166875 +1734,30,2.6,111.05,1.7,64.16625 +1735,30,2.6,111.05,1.7,64.165625 +1736,30,2.6,111.05,1.7,64.165 +1737,30,2.6,111.05,1.7,64.164375 +1738,30,2.6,111.05,1.7,64.16375 +1739,30,2.6,111.05,1.7,64.163125 +1740,30,2.6,111.05,1.7,64.1625 +1741,30,2.6,111.05,1.7,64.161875 +1742,30,2.6,111.05,1.7,64.16125 +1743,30,2.6,111.05,1.7,64.160625 +1744,30,2.6,111.05,1.7,64.16 +1745,30,2.6,111.05,1.7,64.159375 +1746,30,2.6,111.05,1.7,64.15875 +1747,30,2.6,111.05,1.7,64.158125 +1748,30,2.6,111.05,1.7,64.1575 +1749,30,2.6,111.05,1.7,64.156875 +1750,30,2.6,111.05,1.7,64.15625 +1751,30,2.6,111.05,1.7,64.155625 +1752,30,2.6,111.05,1.7,64.155 +1753,30,2.6,111.05,1.7,64.154375 +1754,30,2.6,111.05,1.7,64.15375 +1755,30,2.6,111.05,1.7,64.153125 +1756,30,2.6,111.05,1.7,64.1525 +1757,30,2.6,111.05,1.7,64.151875 +1758,30,2.6,111.05,1.7,64.15125 +1759,30,2.6,111.05,1.7,64.150625 +1760,30,2.6,111.05,1.7,64.15 +1761,30,2.6,111.05,1.7,64.149375 +1762,30,2.6,111.05,1.7,64.14875 +1763,30,2.6,111.05,1.7,64.148125 +1764,30,2.6,111.05,1.7,64.1475 +1765,30,2.6,111.05,1.7,64.146875 +1766,30,2.6,111.05,1.7,64.14625 +1767,30,2.6,111.05,1.7,64.145625 +1768,30,2.6,111.05,1.7,64.145 +1769,30,2.6,111.05,1.7,64.144375 +1770,30,2.6,111.05,1.7,64.14375 +1771,30,2.6,111.05,1.7,64.143125 +1772,30,2.6,111.05,1.7,64.1425 +1773,30,2.6,111.05,1.7,64.141875 +1774,30,2.6,111.05,1.7,64.14125 +1775,30,2.6,111.05,1.7,64.140625 +1776,30,2.6,111.05,1.7,64.14 +1777,30,2.6,111.05,1.7,64.139375 +1778,30,2.6,111.05,1.7,64.13875 +1779,30,2.6,111.05,1.7,64.138125 +1780,30,2.6,111.05,1.7,64.1375 +1781,30,2.6,111.05,1.7,64.136875 +1782,30,2.6,111.05,1.7,64.13625 +1783,30,2.6,111.05,1.7,64.135625 +1784,30,2.6,111.05,1.7,64.135 +1785,30,2.6,111.05,1.7,64.134375 +1786,30,2.6,111.05,1.7,64.13375 +1787,30,2.6,111.05,1.7,64.133125 +1788,30,2.6,111.05,1.7,64.1325 +1789,30,2.6,111.05,1.7,64.131875 +1790,30,2.6,111.05,1.7,64.13125 +1791,30,2.6,111.05,1.7,64.130625 +1792,30,2.6,111.05,1.7,64.13 +1793,30,2.6,111.05,1.7,64.129375 +1794,30,2.6,111.05,1.7,64.12875 +1795,30,2.6,111.05,1.7,64.128125 +1796,30,2.6,111.05,1.7,64.1275 +1797,30,2.6,111.05,1.7,64.126875 +1798,30,2.6,111.05,1.7,64.12625 +1799,30,2.6,111.05,1.7,64.125625 +1800,30,2.6,111.05,1.7,64.125 +1801,30,2.6,111.05,1.7,64.124375 +1802,30,2.6,111.05,1.7,64.12375 +1803,30,2.6,111.05,1.7,64.123125 +1804,30,2.6,111.05,1.7,64.1225 +1805,30,2.6,111.05,1.7,64.121875 +1806,30,2.6,111.05,1.7,64.12125 +1807,30,2.6,111.05,1.7,64.120625 +1808,30,2.6,111.05,1.7,64.12 +1809,30,2.6,111.05,1.7,64.119375 +1810,30,2.6,111.05,1.7,64.11875 +1811,30,2.6,111.05,1.7,64.118125 +1812,30,2.6,111.05,1.7,64.1175 +1813,30,2.6,111.05,1.7,64.116875 +1814,30,2.6,111.05,1.7,64.11625 +1815,30,2.6,111.05,1.7,64.115625 +1816,30,2.6,111.05,1.7,64.115 +1817,30,2.6,111.05,1.7,64.114375 +1818,30,2.6,111.05,1.7,64.11375 +1819,30,2.6,111.05,1.7,64.113125 +1820,30,2.6,111.05,1.7,64.1125 +1821,30,2.6,111.05,1.7,64.111875 +1822,30,2.6,111.05,1.7,64.11125 +1823,30,2.6,111.05,1.7,64.110625 +1824,30,2.6,111.05,1.7,64.11 +1825,30,2.6,111.05,1.7,64.109375 +1826,30,2.6,111.05,1.7,64.10875 +1827,30,2.6,111.05,1.7,64.108125 +1828,30,2.6,111.05,1.7,64.1075 +1829,30,2.6,111.05,1.7,64.106875 +1830,30,2.6,111.05,1.7,64.10625 +1831,30,2.6,111.05,1.7,64.105625 +1832,30,2.6,111.05,1.7,64.105 +1833,30,2.6,111.05,1.7,64.104375 +1834,30,2.6,111.05,1.7,64.10375 +1835,30,2.6,111.05,1.7,64.103125 +1836,30,2.6,111.05,1.7,64.1025 +1837,30,2.6,111.05,1.7,64.101875 +1838,30,2.6,111.05,1.7,64.10125 +1839,30,2.6,111.05,1.7,64.100625 +1840,30,2.6,111.05,1.7,64.1 +1841,30,2.6,111.05,1.7,64.099375 +1842,30,2.6,111.05,1.7,64.09875 +1843,30,2.6,111.05,1.7,64.098125 +1844,30,2.6,111.05,1.7,64.0975 +1845,30,2.6,111.05,1.7,64.096875 +1846,30,2.6,111.05,1.7,64.09625 +1847,30,2.6,111.05,1.7,64.095625 +1848,30,2.6,111.05,1.7,64.095 +1849,30,2.6,111.05,1.7,64.094375 +1850,30,2.6,111.05,1.7,64.09375 +1851,30,2.6,111.05,1.7,64.093125 +1852,30,2.6,111.05,1.7,64.0925 +1853,30,2.6,111.05,1.7,64.091875 +1854,30,2.6,111.05,1.7,64.09125 +1855,30,2.6,111.05,1.7,64.090625 +1856,30,2.6,111.05,1.7,64.09 +1857,30,2.6,111.05,1.7,64.089375 +1858,30,2.6,111.05,1.7,64.08875 +1859,30,2.6,111.05,1.7,64.088125 +1860,30,2.6,111.05,1.7,64.0875 +1861,30,2.6,111.05,1.7,64.086875 +1862,30,2.6,111.05,1.7,64.08625 +1863,30,2.6,111.05,1.7,64.085625 +1864,30,2.6,111.05,1.7,64.085 +1865,30,2.6,111.05,1.7,64.084375 +1866,30,2.6,111.05,1.7,64.08375 +1867,30,2.6,111.05,1.7,64.083125 +1868,30,2.6,111.05,1.7,64.0825 +1869,30,2.6,111.05,1.7,64.081875 +1870,30,2.6,111.05,1.7,64.08125 +1871,30,2.6,111.05,1.7,64.080625 +1872,30,2.6,111.05,1.7,64.08 +1873,30,2.6,111.05,1.7,64.079375 +1874,30,2.6,111.05,1.7,64.07875 +1875,30,2.6,111.05,1.7,64.078125 +1876,30,2.6,111.05,1.7,64.0775 +1877,30,2.6,111.05,1.7,64.076875 +1878,30,2.6,111.05,1.7,64.07625 +1879,30,2.6,111.05,1.7,64.075625 +1880,30,2.6,111.05,1.7,64.075 +1881,30,2.6,111.05,1.7,64.074375 +1882,30,2.6,111.05,1.7,64.07375 +1883,30,2.6,111.05,1.7,64.073125 +1884,30,2.6,111.05,1.7,64.0725 +1885,30,2.6,111.05,1.7,64.071875 +1886,30,2.6,111.05,1.7,64.07125 +1887,30,2.6,111.05,1.7,64.070625 +1888,30,2.6,111.05,1.7,64.07 +1889,30,2.6,111.05,1.7,64.069375 +1890,30,2.6,111.05,1.7,64.06875 +1891,30,2.6,111.05,1.7,64.068125 +1892,30,2.6,111.05,1.7,64.0675 +1893,30,2.6,111.05,1.7,64.066875 +1894,30,2.6,111.05,1.7,64.06625 +1895,30,2.6,111.05,1.7,64.065625 +1896,30,2.6,111.05,1.7,64.065 +1897,30,2.6,111.05,1.7,64.064375 +1898,30,2.6,111.05,1.7,64.06375 +1899,30,2.6,111.05,1.7,64.063125 +1900,30,2.6,111.05,1.7,64.0625 +1901,30,2.6,111.05,1.7,64.061875 +1902,30,2.6,111.05,1.7,64.06125 +1903,30,2.6,111.05,1.7,64.060625 +1904,30,2.6,111.05,1.7,64.06 +1905,30,2.6,111.05,1.7,64.059375 +1906,30,2.6,111.05,1.7,64.05875 +1907,30,2.6,111.05,1.7,64.058125 +1908,30,2.6,111.05,1.7,64.0575 +1909,30,2.6,111.05,1.7,64.056875 +1910,30,2.6,111.05,1.7,64.05625 +1911,30,2.6,111.05,1.7,64.055625 +1912,30,2.6,111.05,1.7,64.055 +1913,30,2.6,111.05,1.7,64.054375 +1914,30,2.6,111.05,1.7,64.05375 +1915,30,2.6,111.05,1.7,64.053125 +1916,30,2.6,111.05,1.7,64.0525 +1917,30,2.6,111.05,1.7,64.051875 +1918,30,2.6,111.05,1.7,64.05125 +1919,30,2.6,111.05,1.7,64.050625 +1920,30,2.6,111.05,1.7,64.05 +1921,30,2.6,111.05,1.7,64.049375 +1922,30,2.6,111.05,1.7,64.04875 +1923,30,2.6,111.05,1.7,64.048125 +1924,30,2.6,111.05,1.7,64.0475 +1925,30,2.6,111.05,1.7,64.046875 +1926,30,2.6,111.05,1.7,64.04625 +1927,30,2.6,111.05,1.7,64.045625 +1928,30,2.6,111.05,1.7,64.045 +1929,30,2.6,111.05,1.7,64.044375 +1930,30,2.6,111.05,1.7,64.04375 +1931,30,2.6,111.05,1.7,64.043125 +1932,30,2.6,111.05,1.7,64.0425 +1933,30,2.6,111.05,1.7,64.041875 +1934,30,2.6,111.05,1.7,64.04125 +1935,30,2.6,111.05,1.7,64.040625 +1936,30,2.6,111.05,1.7,64.04 +1937,30,2.6,111.05,1.7,64.039375 +1938,30,2.6,111.05,1.7,64.03875 +1939,30,2.6,111.05,1.7,64.038125 +1940,30,2.6,111.05,1.7,64.0375 +1941,30,2.6,111.05,1.7,64.036875 +1942,30,2.6,111.05,1.7,64.03625 +1943,30,2.6,111.05,1.7,64.035625 +1944,30,2.6,111.05,1.7,64.035 +1945,30,2.6,111.05,1.7,64.034375 +1946,30,2.6,111.05,1.7,64.03375 +1947,30,2.6,111.05,1.7,64.033125 +1948,30,2.6,111.05,1.7,64.0325 +1949,30,2.6,111.05,1.7,64.031875 +1950,30,2.6,111.05,1.7,64.03125 +1951,30,2.6,111.05,1.7,64.030625 +1952,30,2.6,111.05,1.7,64.03 +1953,30,2.6,111.05,1.7,64.029375 +1954,30,2.6,111.05,1.7,64.02875 +1955,30,2.6,111.05,1.7,64.028125 +1956,30,2.6,111.05,1.7,64.0275 +1957,30,2.6,111.05,1.7,64.026875 +1958,30,2.6,111.05,1.7,64.02625 +1959,30,2.6,111.05,1.7,64.025625 +1960,30,2.6,111.05,1.7,64.025 +1961,30,2.6,111.05,1.7,64.024375 +1962,30,2.6,111.05,1.7,64.02375 +1963,30,2.6,111.05,1.7,64.023125 +1964,30,2.6,111.05,1.7,64.0225 +1965,30,2.6,111.05,1.7,64.021875 +1966,30,2.6,111.05,1.7,64.02125 +1967,30,2.6,111.05,1.7,64.020625 +1968,30,2.6,111.05,1.7,64.02 +1969,30,2.6,111.05,1.7,64.019375 +1970,30,2.6,111.05,1.7,64.01875 +1971,30,2.6,111.05,1.7,64.018125 +1972,30,2.6,111.05,1.7,64.0175 +1973,30,2.6,111.05,1.7,64.016875 +1974,30,2.6,111.05,1.7,64.01625 +1975,30,2.6,111.05,1.7,64.015625 +1976,30,2.6,111.05,1.7,64.015 +1977,30,2.6,111.05,1.7,64.014375 +1978,30,2.6,111.05,1.7,64.01375 +1979,30,2.6,111.05,1.7,64.013125 +1980,30,2.6,111.05,1.7,64.0125 +1981,30,2.6,111.05,1.7,64.011875 +1982,30,2.6,111.05,1.7,64.01125 +1983,30,2.6,111.05,1.7,64.010625 +1984,30,2.6,111.05,1.7,64.01 +1985,30,2.6,111.05,1.7,64.009375 +1986,30,2.6,111.05,1.7,64.00875 +1987,30,2.6,111.05,1.7,64.008125 +1988,30,2.6,111.05,1.7,64.0075 +1989,30,2.6,111.05,1.7,64.006875 +1990,30,2.6,111.05,1.7,64.00625 +1991,30,2.6,111.05,1.7,64.005625 +1992,30,2.6,111.05,1.7,64.005 +1993,30,2.6,111.05,1.7,64.004375 +1994,30,2.6,111.05,1.7,64.00375 +1995,30,2.6,111.05,1.7,64.003125 +1996,30,2.6,111.05,1.7,64.0025 +1997,30,2.6,111.05,1.7,64.001875 +1998,30,2.6,111.05,1.7,64.00125 +1999,30,2.6,111.05,1.7,64.000625 +2000,30,2.6,111.05,1.7,64 +2001,30,2.6,111.05,1.7,63.99975 +2002,30,2.6,111.05,1.7,63.9995 +2003,30,2.6,111.05,1.7,63.99925 +2004,30,2.6,111.05,1.7,63.999 +2005,30,2.6,111.05,1.7,63.99875 +2006,30,2.6,111.05,1.7,63.9985 +2007,30,2.6,111.05,1.7,63.99825 +2008,30,2.6,111.05,1.7,63.998 +2009,30,2.6,111.05,1.7,63.99775 +2010,30,2.6,111.05,1.7,63.9975 +2011,30,2.6,111.05,1.7,63.99725 +2012,30,2.6,111.05,1.7,63.997 +2013,30,2.6,111.05,1.7,63.99675 +2014,30,2.6,111.05,1.7,63.9965 +2015,30,2.6,111.05,1.7,63.99625 +2016,30,2.6,111.05,1.7,63.996 +2017,30,2.6,111.05,1.7,63.99575 +2018,30,2.6,111.05,1.7,63.9955 +2019,30,2.6,111.05,1.7,63.99525 +2020,30,2.6,111.05,1.7,63.995 +2021,30,2.6,111.05,1.7,63.99475 +2022,30,2.6,111.05,1.7,63.9945 +2023,30,2.6,111.05,1.7,63.99425 +2024,30,2.6,111.05,1.7,63.994 +2025,30,2.6,111.05,1.7,63.99375 +2026,30,2.6,111.05,1.7,63.9935 +2027,30,2.6,111.05,1.7,63.99325 +2028,30,2.6,111.05,1.7,63.993 +2029,30,2.6,111.05,1.7,63.99275 +2030,30,2.6,111.05,1.7,63.9925 +2031,30,2.6,111.05,1.7,63.99225 +2032,30,2.6,111.05,1.7,63.992 +2033,30,2.6,111.05,1.7,63.99175 +2034,30,2.6,111.05,1.7,63.9915 +2035,30,2.6,111.05,1.7,63.99125 +2036,30,2.6,111.05,1.7,63.991 +2037,30,2.6,111.05,1.7,63.99075 +2038,30,2.6,111.05,1.7,63.9905 +2039,30,2.6,111.05,1.7,63.99025 +2040,30,2.6,111.05,1.7,63.99 +2041,30,2.6,111.05,1.7,63.98975 +2042,30,2.6,111.05,1.7,63.9895 +2043,30,2.6,111.05,1.7,63.98925 +2044,30,2.6,111.05,1.7,63.989 +2045,30,2.6,111.05,1.7,63.98875 +2046,30,2.6,111.05,1.7,63.9885 +2047,30,2.6,111.05,1.7,63.98825 +2048,30,2.6,111.05,1.7,63.988 +2049,30,2.6,111.05,1.7,63.98775 +2050,30,2.6,111.05,1.7,63.9875 +2051,30,2.6,111.05,1.7,63.98725 +2052,30,2.6,111.05,1.7,63.987 +2053,30,2.6,111.05,1.7,63.98675 +2054,30,2.6,111.05,1.7,63.9865 +2055,30,2.6,111.05,1.7,63.98625 +2056,30,2.6,111.05,1.7,63.986 +2057,30,2.6,111.05,1.7,63.98575 +2058,30,2.6,111.05,1.7,63.9855 +2059,30,2.6,111.05,1.7,63.98525 +2060,30,2.6,111.05,1.7,63.985 +2061,30,2.6,111.05,1.7,63.98475 +2062,30,2.6,111.05,1.7,63.9845 +2063,30,2.6,111.05,1.7,63.98425 +2064,30,2.6,111.05,1.7,63.984 +2065,30,2.6,111.05,1.7,63.98375 +2066,30,2.6,111.05,1.7,63.9835 +2067,30,2.6,111.05,1.7,63.98325 +2068,30,2.6,111.05,1.7,63.983 +2069,30,2.6,111.05,1.7,63.98275 +2070,30,2.6,111.05,1.7,63.9825 +2071,30,2.6,111.05,1.7,63.98225 +2072,30,2.6,111.05,1.7,63.982 +2073,30,2.6,111.05,1.7,63.98175 +2074,30,2.6,111.05,1.7,63.9815 +2075,30,2.6,111.05,1.7,63.98125 +2076,30,2.6,111.05,1.7,63.981 +2077,30,2.6,111.05,1.7,63.98075 +2078,30,2.6,111.05,1.7,63.9805 +2079,30,2.6,111.05,1.7,63.98025 +2080,30,2.6,111.05,1.7,63.98 +2081,30,2.6,111.05,1.7,63.97975 +2082,30,2.6,111.05,1.7,63.9795 +2083,30,2.6,111.05,1.7,63.97925 +2084,30,2.6,111.05,1.7,63.979 +2085,30,2.6,111.05,1.7,63.97875 +2086,30,2.6,111.05,1.7,63.9785 +2087,30,2.6,111.05,1.7,63.97825 +2088,30,2.6,111.05,1.7,63.978 +2089,30,2.6,111.05,1.7,63.97775 +2090,30,2.6,111.05,1.7,63.9775 +2091,30,2.6,111.05,1.7,63.97725 +2092,30,2.6,111.05,1.7,63.977 +2093,30,2.6,111.05,1.7,63.97675 +2094,30,2.6,111.05,1.7,63.9765 +2095,30,2.6,111.05,1.7,63.97625 +2096,30,2.6,111.05,1.7,63.976 +2097,30,2.6,111.05,1.7,63.97575 +2098,30,2.6,111.05,1.7,63.9755 +2099,30,2.6,111.05,1.7,63.97525 +2100,30,2.6,111.05,1.7,63.975 +2101,30,2.6,111.05,1.7,63.97475 +2102,30,2.6,111.05,1.7,63.9745 +2103,30,2.6,111.05,1.7,63.97425 +2104,30,2.6,111.05,1.7,63.974 +2105,30,2.6,111.05,1.7,63.97375 +2106,30,2.6,111.05,1.7,63.9735 +2107,30,2.6,111.05,1.7,63.97325 +2108,30,2.6,111.05,1.7,63.973 +2109,30,2.6,111.05,1.7,63.97275 +2110,30,2.6,111.05,1.7,63.9725 +2111,30,2.6,111.05,1.7,63.97225 +2112,30,2.6,111.05,1.7,63.972 +2113,30,2.6,111.05,1.7,63.97175 +2114,30,2.6,111.05,1.7,63.9715 +2115,30,2.6,111.05,1.7,63.97125 +2116,30,2.6,111.05,1.7,63.971 +2117,30,2.6,111.05,1.7,63.97075 +2118,30,2.6,111.05,1.7,63.9705 +2119,30,2.6,111.05,1.7,63.97025 +2120,30,2.6,111.05,1.7,63.97 +2121,30,2.6,111.05,1.7,63.96975 +2122,30,2.6,111.05,1.7,63.9695 +2123,30,2.6,111.05,1.7,63.96925 +2124,30,2.6,111.05,1.7,63.969 +2125,30,2.6,111.05,1.7,63.96875 +2126,30,2.6,111.05,1.7,63.9685 +2127,30,2.6,111.05,1.7,63.96825 +2128,30,2.6,111.05,1.7,63.968 +2129,30,2.6,111.05,1.7,63.96775 +2130,30,2.6,111.05,1.7,63.9675 +2131,30,2.6,111.05,1.7,63.96725 +2132,30,2.6,111.05,1.7,63.967 +2133,30,2.6,111.05,1.7,63.96675 +2134,30,2.6,111.05,1.7,63.9665 +2135,30,2.6,111.05,1.7,63.96625 +2136,30,2.6,111.05,1.7,63.966 +2137,30,2.6,111.05,1.7,63.96575 +2138,30,2.6,111.05,1.7,63.9655 +2139,30,2.6,111.05,1.7,63.96525 +2140,30,2.6,111.05,1.7,63.965 +2141,30,2.6,111.05,1.7,63.96475 +2142,30,2.6,111.05,1.7,63.9645 +2143,30,2.6,111.05,1.7,63.96425 +2144,30,2.6,111.05,1.7,63.964 +2145,30,2.6,111.05,1.7,63.96375 +2146,30,2.6,111.05,1.7,63.9635 +2147,30,2.6,111.05,1.7,63.96325 +2148,30,2.6,111.05,1.7,63.963 +2149,30,2.6,111.05,1.7,63.96275 +2150,30,2.6,111.05,1.7,63.9625 +2151,30,2.6,111.05,1.7,63.96225 +2152,30,2.6,111.05,1.7,63.962 +2153,30,2.6,111.05,1.7,63.96175 +2154,30,2.6,111.05,1.7,63.9615 +2155,30,2.6,111.05,1.7,63.96125 +2156,30,2.6,111.05,1.7,63.961 +2157,30,2.6,111.05,1.7,63.96075 +2158,30,2.6,111.05,1.7,63.9605 +2159,30,2.6,111.05,1.7,63.96025 +2160,30,2.6,111.05,1.7,63.96 +2161,30,2.6,111.05,1.7,63.95975 +2162,30,2.6,111.05,1.7,63.9595 +2163,30,2.6,111.05,1.7,63.95925 +2164,30,2.6,111.05,1.7,63.959 +2165,30,2.6,111.05,1.7,63.95875 +2166,30,2.6,111.05,1.7,63.9585 +2167,30,2.6,111.05,1.7,63.95825 +2168,30,2.6,111.05,1.7,63.958 +2169,30,2.6,111.05,1.7,63.95775 +2170,30,2.6,111.05,1.7,63.9575 +2171,30,2.6,111.05,1.7,63.95725 +2172,30,2.6,111.05,1.7,63.957 +2173,30,2.6,111.05,1.7,63.95675 +2174,30,2.6,111.05,1.7,63.9565 +2175,30,2.6,111.05,1.7,63.95625 +2176,30,2.6,111.05,1.7,63.956 +2177,30,2.6,111.05,1.7,63.95575 +2178,30,2.6,111.05,1.7,63.9555 +2179,30,2.6,111.05,1.7,63.95525 +2180,30,2.6,111.05,1.7,63.955 +2181,30,2.6,111.05,1.7,63.95475 +2182,30,2.6,111.05,1.7,63.9545 +2183,30,2.6,111.05,1.7,63.95425 +2184,30,2.6,111.05,1.7,63.954 +2185,30,2.6,111.05,1.7,63.95375 +2186,30,2.6,111.05,1.7,63.9535 +2187,30,2.6,111.05,1.7,63.95325 +2188,30,2.6,111.05,1.7,63.953 +2189,30,2.6,111.05,1.7,63.95275 +2190,30,2.6,111.05,1.7,63.9525 +2191,30,2.6,111.05,1.7,63.95225 +2192,30,2.6,111.05,1.7,63.952 +2193,30,2.6,111.05,1.7,63.95175 +2194,30,2.6,111.05,1.7,63.9515 +2195,30,2.6,111.05,1.7,63.95125 +2196,30,2.6,111.05,1.7,63.951 +2197,30,2.6,111.05,1.7,63.95075 +2198,30,2.6,111.05,1.7,63.9505 +2199,30,2.6,111.05,1.7,63.95025 +2200,30,2.6,111.05,1.7,63.95 +2201,30,2.6,111.05,1.7,63.94975 +2202,30,2.6,111.05,1.7,63.9495 +2203,30,2.6,111.05,1.7,63.94925 +2204,30,2.6,111.05,1.7,63.949 +2205,30,2.6,111.05,1.7,63.94875 +2206,30,2.6,111.05,1.7,63.9485 +2207,30,2.6,111.05,1.7,63.94825 +2208,30,2.6,111.05,1.7,63.948 +2209,30,2.6,111.05,1.7,63.94775 +2210,30,2.6,111.05,1.7,63.9475 +2211,30,2.6,111.05,1.7,63.94725 +2212,30,2.6,111.05,1.7,63.947 +2213,30,2.6,111.05,1.7,63.94675 +2214,30,2.6,111.05,1.7,63.9465 +2215,30,2.6,111.05,1.7,63.94625 +2216,30,2.6,111.05,1.7,63.946 +2217,30,2.6,111.05,1.7,63.94575 +2218,30,2.6,111.05,1.7,63.9455 +2219,30,2.6,111.05,1.7,63.94525 +2220,30,2.6,111.05,1.7,63.945 +2221,30,2.6,111.05,1.7,63.94475 +2222,30,2.6,111.05,1.7,63.9445 +2223,30,2.6,111.05,1.7,63.94425 +2224,30,2.6,111.05,1.7,63.944 +2225,30,2.6,111.05,1.7,63.94375 +2226,30,2.6,111.05,1.7,63.9435 +2227,30,2.6,111.05,1.7,63.94325 +2228,30,2.6,111.05,1.7,63.943 +2229,30,2.6,111.05,1.7,63.94275 +2230,30,2.6,111.05,1.7,63.9425 +2231,30,2.6,111.05,1.7,63.94225 +2232,30,2.6,111.05,1.7,63.942 +2233,30,2.6,111.05,1.7,63.94175 +2234,30,2.6,111.05,1.7,63.9415 +2235,30,2.6,111.05,1.7,63.94125 +2236,30,2.6,111.05,1.7,63.941 +2237,30,2.6,111.05,1.7,63.94075 +2238,30,2.6,111.05,1.7,63.9405 +2239,30,2.6,111.05,1.7,63.94025 +2240,30,2.6,111.05,1.7,63.94 +2241,30,2.6,111.05,1.7,63.93975 +2242,30,2.6,111.05,1.7,63.9395 +2243,30,2.6,111.05,1.7,63.93925 +2244,30,2.6,111.05,1.7,63.939 +2245,30,2.6,111.05,1.7,63.93875 +2246,30,2.6,111.05,1.7,63.9385 +2247,30,2.6,111.05,1.7,63.93825 +2248,30,2.6,111.05,1.7,63.938 +2249,30,2.6,111.05,1.7,63.93775 +2250,30,2.6,111.05,1.7,63.9375 +2251,30,2.6,111.05,1.7,63.93725 +2252,30,2.6,111.05,1.7,63.937 +2253,30,2.6,111.05,1.7,63.93675 +2254,30,2.6,111.05,1.7,63.9365 +2255,30,2.6,111.05,1.7,63.93625 +2256,30,2.6,111.05,1.7,63.936 +2257,30,2.6,111.05,1.7,63.93575 +2258,30,2.6,111.05,1.7,63.9355 +2259,30,2.6,111.05,1.7,63.93525 +2260,30,2.6,111.05,1.7,63.935 +2261,30,2.6,111.05,1.7,63.93475 +2262,30,2.6,111.05,1.7,63.9345 +2263,30,2.6,111.05,1.7,63.93425 +2264,30,2.6,111.05,1.7,63.934 +2265,30,2.6,111.05,1.7,63.93375 +2266,30,2.6,111.05,1.7,63.9335 +2267,30,2.6,111.05,1.7,63.93325 +2268,30,2.6,111.05,1.7,63.933 +2269,30,2.6,111.05,1.7,63.93275 +2270,30,2.6,111.05,1.7,63.9325 +2271,30,2.6,111.05,1.7,63.93225 +2272,30,2.6,111.05,1.7,63.932 +2273,30,2.6,111.05,1.7,63.93175 +2274,30,2.6,111.05,1.7,63.9315 +2275,30,2.6,111.05,1.7,63.93125 +2276,30,2.6,111.05,1.7,63.931 +2277,30,2.6,111.05,1.7,63.93075 +2278,30,2.6,111.05,1.7,63.9305 +2279,30,2.6,111.05,1.7,63.93025 +2280,30,2.6,111.05,1.7,63.93 +2281,30,2.6,111.05,1.7,63.92975 +2282,30,2.6,111.05,1.7,63.9295 +2283,30,2.6,111.05,1.7,63.92925 +2284,30,2.6,111.05,1.7,63.929 +2285,30,2.6,111.05,1.7,63.92875 +2286,30,2.6,111.05,1.7,63.9285 +2287,30,2.6,111.05,1.7,63.92825 +2288,30,2.6,111.05,1.7,63.928 +2289,30,2.6,111.05,1.7,63.92775 +2290,30,2.6,111.05,1.7,63.9275 +2291,30,2.6,111.05,1.7,63.92725 +2292,30,2.6,111.05,1.7,63.927 +2293,30,2.6,111.05,1.7,63.92675 +2294,30,2.6,111.05,1.7,63.9265 +2295,30,2.6,111.05,1.7,63.92625 +2296,30,2.6,111.05,1.7,63.926 +2297,30,2.6,111.05,1.7,63.92575 +2298,30,2.6,111.05,1.7,63.9255 +2299,30,2.6,111.05,1.7,63.92525 +2300,30,2.6,111.05,1.7,63.925 +2301,30,2.6,111.05,1.7,63.92475 +2302,30,2.6,111.05,1.7,63.9245 +2303,30,2.6,111.05,1.7,63.92425 +2304,30,2.6,111.05,1.7,63.924 +2305,30,2.6,111.05,1.7,63.92375 +2306,30,2.6,111.05,1.7,63.9235 +2307,30,2.6,111.05,1.7,63.92325 +2308,30,2.6,111.05,1.7,63.923 +2309,30,2.6,111.05,1.7,63.92275 +2310,30,2.6,111.05,1.7,63.9225 +2311,30,2.6,111.05,1.7,63.92225 +2312,30,2.6,111.05,1.7,63.922 +2313,30,2.6,111.05,1.7,63.92175 +2314,30,2.6,111.05,1.7,63.9215 +2315,30,2.6,111.05,1.7,63.92125 +2316,30,2.6,111.05,1.7,63.921 +2317,30,2.6,111.05,1.7,63.92075 +2318,30,2.6,111.05,1.7,63.9205 +2319,30,2.6,111.05,1.7,63.92025 +2320,30,2.6,111.05,1.7,63.92 +2321,30,2.6,111.05,1.7,63.91975 +2322,30,2.6,111.05,1.7,63.9195 +2323,30,2.6,111.05,1.7,63.91925 +2324,30,2.6,111.05,1.7,63.919 +2325,30,2.6,111.05,1.7,63.91875 +2326,30,2.6,111.05,1.7,63.9185 +2327,30,2.6,111.05,1.7,63.91825 +2328,30,2.6,111.05,1.7,63.918 +2329,30,2.6,111.05,1.7,63.91775 +2330,30,2.6,111.05,1.7,63.9175 +2331,30,2.6,111.05,1.7,63.91725 +2332,30,2.6,111.05,1.7,63.917 +2333,30,2.6,111.05,1.7,63.91675 +2334,30,2.6,111.05,1.7,63.9165 +2335,30,2.6,111.05,1.7,63.91625 +2336,30,2.6,111.05,1.7,63.916 +2337,30,2.6,111.05,1.7,63.91575 +2338,30,2.6,111.05,1.7,63.9155 +2339,30,2.6,111.05,1.7,63.91525 +2340,30,2.6,111.05,1.7,63.915 +2341,30,2.6,111.05,1.7,63.91475 +2342,30,2.6,111.05,1.7,63.9145 +2343,30,2.6,111.05,1.7,63.91425 +2344,30,2.6,111.05,1.7,63.914 +2345,30,2.6,111.05,1.7,63.91375 +2346,30,2.6,111.05,1.7,63.9135 +2347,30,2.6,111.05,1.7,63.91325 +2348,30,2.6,111.05,1.7,63.913 +2349,30,2.6,111.05,1.7,63.91275 +2350,30,2.6,111.05,1.7,63.9125 +2351,30,2.6,111.05,1.7,63.91225 +2352,30,2.6,111.05,1.7,63.912 +2353,30,2.6,111.05,1.7,63.91175 +2354,30,2.6,111.05,1.7,63.9115 +2355,30,2.6,111.05,1.7,63.91125 +2356,30,2.6,111.05,1.7,63.911 +2357,30,2.6,111.05,1.7,63.91075 +2358,30,2.6,111.05,1.7,63.9105 +2359,30,2.6,111.05,1.7,63.91025 +2360,30,2.6,111.05,1.7,63.91 +2361,30,2.6,111.05,1.7,63.90975 +2362,30,2.6,111.05,1.7,63.9095 +2363,30,2.6,111.05,1.7,63.90925 +2364,30,2.6,111.05,1.7,63.909 +2365,30,2.6,111.05,1.7,63.90875 +2366,30,2.6,111.05,1.7,63.9085 +2367,30,2.6,111.05,1.7,63.90825 +2368,30,2.6,111.05,1.7,63.908 +2369,30,2.6,111.05,1.7,63.90775 +2370,30,2.6,111.05,1.7,63.9075 +2371,30,2.6,111.05,1.7,63.90725 +2372,30,2.6,111.05,1.7,63.907 +2373,30,2.6,111.05,1.7,63.90675 +2374,30,2.6,111.05,1.7,63.9065 +2375,30,2.6,111.05,1.7,63.90625 +2376,30,2.6,111.05,1.7,63.906 +2377,30,2.6,111.05,1.7,63.90575 +2378,30,2.6,111.05,1.7,63.9055 +2379,30,2.6,111.05,1.7,63.90525 +2380,30,2.6,111.05,1.7,63.905 +2381,30,2.6,111.05,1.7,63.90475 +2382,30,2.6,111.05,1.7,63.9045 +2383,30,2.6,111.05,1.7,63.90425 +2384,30,2.6,111.05,1.7,63.904 +2385,30,2.6,111.05,1.7,63.90375 +2386,30,2.6,111.05,1.7,63.9035 +2387,30,2.6,111.05,1.7,63.90325 +2388,30,2.6,111.05,1.7,63.903 +2389,30,2.6,111.05,1.7,63.90275 +2390,30,2.6,111.05,1.7,63.9025 +2391,30,2.6,111.05,1.7,63.90225 +2392,30,2.6,111.05,1.7,63.902 +2393,30,2.6,111.05,1.7,63.90175 +2394,30,2.6,111.05,1.7,63.9015 +2395,30,2.6,111.05,1.7,63.90125 +2396,30,2.6,111.05,1.7,63.901 +2397,30,2.6,111.05,1.7,63.90075 +2398,30,2.6,111.05,1.7,63.9005 +2399,30,2.6,111.05,1.7,63.90025 +2400,30,2.6,111.05,1.7,63.9 +2401,30,2.6,111.05,1.7,63.89975 +2402,30,2.6,111.05,1.7,63.8995 +2403,30,2.6,111.05,1.7,63.89925 +2404,30,2.6,111.05,1.7,63.899 +2405,30,2.6,111.05,1.7,63.89875 +2406,30,2.6,111.05,1.7,63.8985 +2407,30,2.6,111.05,1.7,63.89825 +2408,30,2.6,111.05,1.7,63.898 +2409,30,2.6,111.05,1.7,63.89775 +2410,30,2.6,111.05,1.7,63.8975 +2411,30,2.6,111.05,1.7,63.89725 +2412,30,2.6,111.05,1.7,63.897 +2413,30,2.6,111.05,1.7,63.89675 +2414,30,2.6,111.05,1.7,63.8965 +2415,30,2.6,111.05,1.7,63.89625 +2416,30,2.6,111.05,1.7,63.896 +2417,30,2.6,111.05,1.7,63.89575 +2418,30,2.6,111.05,1.7,63.8955 +2419,30,2.6,111.05,1.7,63.89525 +2420,30,2.6,111.05,1.7,63.895 +2421,30,2.6,111.05,1.7,63.89475 +2422,30,2.6,111.05,1.7,63.8945 +2423,30,2.6,111.05,1.7,63.89425 +2424,30,2.6,111.05,1.7,63.894 +2425,30,2.6,111.05,1.7,63.89375 +2426,30,2.6,111.05,1.7,63.8935 +2427,30,2.6,111.05,1.7,63.89325 +2428,30,2.6,111.05,1.7,63.893 +2429,30,2.6,111.05,1.7,63.89275 +2430,30,2.6,111.05,1.7,63.8925 +2431,30,2.6,111.05,1.7,63.89225 +2432,30,2.6,111.05,1.7,63.892 +2433,30,2.6,111.05,1.7,63.89175 +2434,30,2.6,111.05,1.7,63.8915 +2435,30,2.6,111.05,1.7,63.89125 +2436,30,2.6,111.05,1.7,63.891 +2437,30,2.6,111.05,1.7,63.89075 +2438,30,2.6,111.05,1.7,63.8905 +2439,30,2.6,111.05,1.7,63.89025 +2440,30,2.6,111.05,1.7,63.89 +2441,30,2.6,111.05,1.7,63.88975 +2442,30,2.6,111.05,1.7,63.8895 +2443,30,2.6,111.05,1.7,63.88925 +2444,30,2.6,111.05,1.7,63.889 +2445,30,2.6,111.05,1.7,63.88875 +2446,30,2.6,111.05,1.7,63.8885 +2447,30,2.6,111.05,1.7,63.88825 +2448,30,2.6,111.05,1.7,63.888 +2449,30,2.6,111.05,1.7,63.88775 +2450,30,2.6,111.05,1.7,63.8875 +2451,30,2.6,111.05,1.7,63.88725 +2452,30,2.6,111.05,1.7,63.887 +2453,30,2.6,111.05,1.7,63.88675 +2454,30,2.6,111.05,1.7,63.8865 +2455,30,2.6,111.05,1.7,63.88625 +2456,30,2.6,111.05,1.7,63.886 +2457,30,2.6,111.05,1.7,63.88575 +2458,30,2.6,111.05,1.7,63.8855 +2459,30,2.6,111.05,1.7,63.88525 +2460,30,2.6,111.05,1.7,63.885 +2461,30,2.6,111.05,1.7,63.88475 +2462,30,2.6,111.05,1.7,63.8845 +2463,30,2.6,111.05,1.7,63.88425 +2464,30,2.6,111.05,1.7,63.884 +2465,30,2.6,111.05,1.7,63.88375 +2466,30,2.6,111.05,1.7,63.8835 +2467,30,2.6,111.05,1.7,63.88325 +2468,30,2.6,111.05,1.7,63.883 +2469,30,2.6,111.05,1.7,63.88275 +2470,30,2.6,111.05,1.7,63.8825 +2471,30,2.6,111.05,1.7,63.88225 +2472,30,2.6,111.05,1.7,63.882 +2473,30,2.6,111.05,1.7,63.88175 +2474,30,2.6,111.05,1.7,63.8815 +2475,30,2.6,111.05,1.7,63.88125 +2476,30,2.6,111.05,1.7,63.881 +2477,30,2.6,111.05,1.7,63.88075 +2478,30,2.6,111.05,1.7,63.8805 +2479,30,2.6,111.05,1.7,63.88025 +2480,30,2.6,111.05,1.7,63.88 +2481,30,2.6,111.05,1.7,63.87975 +2482,30,2.6,111.05,1.7,63.8795 +2483,30,2.6,111.05,1.7,63.87925 +2484,30,2.6,111.05,1.7,63.879 +2485,30,2.6,111.05,1.7,63.87875 +2486,30,2.6,111.05,1.7,63.8785 +2487,30,2.6,111.05,1.7,63.87825 +2488,30,2.6,111.05,1.7,63.878 +2489,30,2.6,111.05,1.7,63.87775 +2490,30,2.5,111.05,1.7,63.8775 +2491,30,2.5,111.05,1.7,63.87725 +2492,30,2.5,111.05,1.7,63.877 +2493,30,2.5,111.05,1.7,63.87675 +2494,30,2.5,111.05,1.7,63.8765 +2495,30,2.5,111.05,1.7,63.87625 +2496,30,2.5,111.05,1.7,63.876 +2497,30,2.5,111.05,1.7,63.87575 +2498,30,2.5,111.05,1.7,63.8755 +2499,30,2.5,111.05,1.7,63.87525 +2500,30,2.5,111.05,1.7,63.875 +2501,30,2.5,111.05,1.7,63.87475 +2502,30,2.5,111.05,1.7,63.8745 +2503,30,2.5,111.05,1.7,63.87425 +2504,30,2.5,111.05,1.7,63.874 +2505,30,2.5,111.05,1.7,63.87375 +2506,30,2.5,111.05,1.7,63.8735 +2507,30,2.5,111.05,1.7,63.87325 +2508,30,2.5,111.05,1.7,63.873 +2509,30,2.5,111.05,1.7,63.87275 +2510,30,2.5,111.05,1.7,63.8725 +2511,30,2.5,111.05,1.7,63.87225 +2512,30,2.5,111.05,1.7,63.872 +2513,30,2.5,111.05,1.7,63.87175 +2514,30,2.5,111.05,1.7,63.8715 +2515,30,2.5,111.05,1.7,63.87125 +2516,30,2.5,111.05,1.7,63.871 +2517,30,2.5,111.05,1.7,63.87075 +2518,30,2.5,111.05,1.7,63.8705 +2519,30,2.5,111.05,1.7,63.87025 +2520,30,2.5,111.05,1.7,63.87 +2521,30,2.5,111.05,1.7,63.86975 +2522,30,2.5,111.05,1.7,63.8695 +2523,30,2.5,111.05,1.7,63.86925 +2524,30,2.5,111.05,1.7,63.869 +2525,30,2.5,111.05,1.7,63.86875 +2526,30,2.5,111.05,1.7,63.8685 +2527,30,2.5,111.05,1.7,63.86825 +2528,30,2.5,111.05,1.7,63.868 +2529,30,2.5,111.05,1.7,63.86775 +2530,30,2.5,111.05,1.7,63.8675 +2531,30,2.5,111.05,1.7,63.86725 +2532,30,2.5,111.05,1.7,63.867 +2533,30,2.5,111.05,1.7,63.86675 +2534,30,2.5,111.05,1.7,63.8665 +2535,30,2.5,111.05,1.7,63.86625 +2536,30,2.5,111.05,1.7,63.866 +2537,30,2.5,111.05,1.7,63.86575 +2538,30,2.5,111.05,1.7,63.8655 +2539,30,2.5,111.05,1.7,63.86525 +2540,30,2.5,111.05,1.7,63.865 +2541,30,2.5,111.05,1.7,63.86475 +2542,30,2.5,111.05,1.7,63.8645 +2543,30,2.5,111.05,1.7,63.86425 +2544,30,2.5,111.05,1.7,63.864 +2545,30,2.5,111.05,1.7,63.86375 +2546,30,2.5,111.05,1.7,63.8635 +2547,30,2.5,111.05,1.7,63.86325 +2548,30,2.5,111.05,1.7,63.863 +2549,30,2.5,111.05,1.7,63.86275 +2550,30,2.5,111.05,1.7,63.8625 +2551,30,2.5,111.05,1.7,63.86225 +2552,30,2.5,111.05,1.7,63.862 +2553,30,2.5,111.05,1.7,63.86175 +2554,30,2.5,111.05,1.7,63.8615 +2555,30,2.5,111.05,1.7,63.86125 +2556,30,2.5,111.05,1.7,63.861 +2557,30,2.5,111.05,1.7,63.86075 +2558,30,2.5,111.05,1.7,63.8605 +2559,30,2.5,111.05,1.7,63.86025 +2560,30,2.5,111.05,1.7,63.86 +2561,30,2.5,111.05,1.7,63.85975 +2562,30,2.5,111.05,1.7,63.8595 +2563,30,2.5,111.05,1.7,63.85925 +2564,30,2.5,111.05,1.7,63.859 +2565,30,2.5,111.05,1.7,63.85875 +2566,30,2.5,111.05,1.7,63.8585 +2567,30,2.5,111.05,1.7,63.85825 +2568,30,2.5,111.05,1.7,63.858 +2569,30,2.5,111.05,1.7,63.85775 +2570,30,2.5,111.05,1.7,63.8575 +2571,30,2.5,111.05,1.7,63.85725 +2572,30,2.5,111.05,1.7,63.857 +2573,30,2.5,111.05,1.7,63.85675 +2574,30,2.5,111.05,1.7,63.8565 +2575,30,2.5,111.05,1.7,63.85625 +2576,30,2.5,111.05,1.7,63.856 +2577,30,2.5,111.05,1.7,63.85575 +2578,30,2.5,111.05,1.7,63.8555 +2579,30,2.5,111.05,1.7,63.85525 +2580,30,2.5,111.05,1.7,63.855 +2581,30,2.5,111.05,1.7,63.85475 +2582,30,2.5,111.05,1.7,63.8545 +2583,30,2.5,111.05,1.7,63.85425 +2584,30,2.5,111.05,1.7,63.854 +2585,30,2.5,111.05,1.7,63.85375 +2586,30,2.5,111.05,1.7,63.8535 +2587,30,2.5,111.05,1.7,63.85325 +2588,30,2.5,111.05,1.7,63.853 +2589,30,2.5,111.05,1.7,63.85275 +2590,30,2.5,111.05,1.7,63.8525 +2591,30,2.5,111.05,1.7,63.85225 +2592,30,2.5,111.05,1.7,63.852 +2593,30,2.5,111.05,1.7,63.85175 +2594,30,2.5,111.05,1.7,63.8515 +2595,30,2.5,111.05,1.7,63.85125 +2596,30,2.5,111.05,1.7,63.851 +2597,30,2.5,111.05,1.7,63.85075 +2598,30,2.5,111.05,1.7,63.8505 +2599,30,2.5,111.05,1.7,63.85025 +2600,30,2.5,111.05,1.7,63.85 +2601,30,2.5,111.05,1.7,63.84975 +2602,30,2.5,111.05,1.7,63.8495 +2603,30,2.5,111.05,1.7,63.84925 +2604,30,2.5,111.05,1.7,63.849 +2605,30,2.5,111.05,1.7,63.84875 +2606,30,2.5,111.05,1.7,63.8485 +2607,30,2.5,111.05,1.7,63.84825 +2608,30,2.5,111.05,1.7,63.848 +2609,30,2.5,111.05,1.7,63.84775 +2610,30,2.5,111.05,1.7,63.8475 +2611,30,2.5,111.05,1.7,63.84725 +2612,30,2.5,111.05,1.7,63.847 +2613,30,2.5,111.05,1.7,63.84675 +2614,30,2.5,111.05,1.7,63.8465 +2615,30,2.5,111.05,1.7,63.84625 +2616,30,2.5,111.05,1.7,63.846 +2617,30,2.5,111.05,1.7,63.84575 +2618,30,2.5,111.05,1.7,63.8455 +2619,30,2.5,111.05,1.7,63.84525 +2620,30,2.5,111.05,1.7,63.845 +2621,30,2.5,111.05,1.7,63.84475 +2622,30,2.5,111.05,1.7,63.8445 +2623,30,2.5,111.05,1.7,63.84425 +2624,30,2.5,111.05,1.7,63.844 +2625,30,2.5,111.05,1.7,63.84375 +2626,30,2.5,111.05,1.7,63.8435 +2627,30,2.5,111.05,1.7,63.84325 +2628,30,2.5,111.05,1.7,63.843 +2629,30,2.5,111.05,1.7,63.84275 +2630,30,2.5,111.05,1.7,63.8425 +2631,30,2.5,111.05,1.7,63.84225 +2632,30,2.5,111.05,1.7,63.842 +2633,30,2.5,111.05,1.7,63.84175 +2634,30,2.5,111.05,1.7,63.8415 +2635,30,2.5,111.05,1.7,63.84125 +2636,30,2.5,111.05,1.7,63.841 +2637,30,2.5,111.05,1.7,63.84075 +2638,30,2.5,111.05,1.7,63.8405 +2639,30,2.5,111.05,1.7,63.84025 +2640,30,2.5,111.05,1.7,63.84 +2641,30,2.5,111.05,1.7,63.83975 +2642,30,2.5,111.05,1.7,63.8395 +2643,30,2.5,111.05,1.7,63.83925 +2644,30,2.5,111.05,1.7,63.839 +2645,30,2.5,111.05,1.7,63.83875 +2646,30,2.5,111.05,1.7,63.8385 +2647,30,2.5,111.05,1.7,63.83825 +2648,30,2.5,111.05,1.7,63.838 +2649,30,2.5,111.05,1.7,63.83775 +2650,30,2.5,111.05,1.7,63.8375 +2651,30,2.5,111.05,1.7,63.83725 +2652,30,2.5,111.05,1.7,63.837 +2653,30,2.5,111.05,1.7,63.83675 +2654,30,2.5,111.05,1.7,63.8365 +2655,30,2.5,111.05,1.7,63.83625 +2656,30,2.5,111.05,1.7,63.836 +2657,30,2.5,111.05,1.7,63.83575 +2658,30,2.5,111.05,1.7,63.8355 +2659,30,2.5,111.05,1.7,63.83525 +2660,30,2.5,111.05,1.7,63.835 +2661,30,2.5,111.05,1.7,63.83475 +2662,30,2.5,111.05,1.7,63.8345 +2663,30,2.5,111.05,1.7,63.83425 +2664,30,2.5,111.05,1.7,63.834 +2665,30,2.5,111.05,1.7,63.83375 +2666,30,2.5,111.05,1.7,63.8335 +2667,30,2.5,111.05,1.7,63.83325 +2668,30,2.5,111.05,1.7,63.833 +2669,30,2.5,111.05,1.7,63.83275 +2670,30,2.5,111.05,1.7,63.8325 +2671,30,2.5,111.05,1.7,63.83225 +2672,30,2.5,111.05,1.7,63.832 +2673,30,2.5,111.05,1.7,63.83175 +2674,30,2.5,111.05,1.7,63.8315 +2675,30,2.5,111.05,1.7,63.83125 +2676,30,2.5,111.05,1.7,63.831 +2677,30,2.5,111.05,1.7,63.83075 +2678,30,2.5,111.05,1.7,63.8305 +2679,30,2.5,111.05,1.7,63.83025 +2680,30,2.5,111.05,1.7,63.83 +2681,30,2.5,111.05,1.7,63.82975 +2682,30,2.5,111.05,1.7,63.8295 +2683,30,2.5,111.05,1.7,63.82925 +2684,30,2.5,111.05,1.7,63.829 +2685,30,2.5,111.05,1.7,63.82875 +2686,30,2.5,111.05,1.7,63.8285 +2687,30,2.5,111.05,1.7,63.82825 +2688,30,2.5,111.05,1.7,63.828 +2689,30,2.5,111.05,1.7,63.82775 +2690,30,2.5,111.05,1.7,63.8275 +2691,30,2.5,111.05,1.7,63.82725 +2692,30,2.5,111.05,1.7,63.827 +2693,30,2.5,111.05,1.7,63.82675 +2694,30,2.5,111.05,1.7,63.8265 +2695,30,2.5,111.05,1.7,63.82625 +2696,30,2.5,111.05,1.7,63.826 +2697,30,2.5,111.05,1.7,63.82575 +2698,30,2.5,111.05,1.7,63.8255 +2699,30,2.5,111.05,1.7,63.82525 +2700,30,2.5,111.05,1.7,63.825 +2701,30,2.5,111.05,1.7,63.82475 +2702,30,2.5,111.05,1.7,63.8245 +2703,30,2.5,111.05,1.7,63.82425 +2704,30,2.5,111.05,1.7,63.824 +2705,30,2.5,111.05,1.7,63.82375 +2706,30,2.5,111.05,1.7,63.8235 +2707,30,2.5,111.05,1.7,63.82325 +2708,30,2.5,111.05,1.7,63.823 +2709,30,2.5,111.05,1.7,63.82275 +2710,30,2.5,111.05,1.7,63.8225 +2711,30,2.5,111.05,1.7,63.82225 +2712,30,2.5,111.05,1.7,63.822 +2713,30,2.5,111.05,1.7,63.82175 +2714,30,2.5,111.05,1.7,63.8215 +2715,30,2.5,111.05,1.7,63.82125 +2716,30,2.5,111.05,1.7,63.821 +2717,30,2.5,111.05,1.7,63.82075 +2718,30,2.5,111.05,1.7,63.8205 +2719,30,2.5,111.05,1.7,63.82025 +2720,30,2.5,111.05,1.7,63.82 +2721,30,2.5,111.05,1.7,63.81975 +2722,30,2.5,111.05,1.7,63.8195 +2723,30,2.5,111.05,1.7,63.81925 +2724,30,2.5,111.05,1.7,63.819 +2725,30,2.5,111.05,1.7,63.81875 +2726,30,2.5,111.05,1.7,63.8185 +2727,30,2.5,111.05,1.7,63.81825 +2728,30,2.5,111.05,1.7,63.818 +2729,30,2.5,111.05,1.7,63.81775 +2730,30,2.5,111.05,1.7,63.8175 +2731,30,2.5,111.05,1.7,63.81725 +2732,30,2.5,111.05,1.7,63.817 +2733,30,2.5,111.05,1.7,63.81675 +2734,30,2.5,111.05,1.7,63.8165 +2735,30,2.5,111.05,1.7,63.81625 +2736,30,2.5,111.05,1.7,63.816 +2737,30,2.5,111.05,1.7,63.81575 +2738,30,2.5,111.05,1.7,63.8155 +2739,30,2.5,111.05,1.7,63.81525 +2740,30,2.5,111.05,1.7,63.815 +2741,30,2.5,111.05,1.7,63.81475 +2742,30,2.5,111.05,1.7,63.8145 +2743,30,2.5,111.05,1.7,63.81425 +2744,30,2.5,111.05,1.7,63.814 +2745,30,2.5,111.05,1.7,63.81375 +2746,30,2.5,111.05,1.7,63.8135 +2747,30,2.5,111.05,1.7,63.81325 +2748,30,2.5,111.05,1.7,63.813 +2749,30,2.5,111.05,1.7,63.81275 +2750,30,2.5,111.05,1.7,63.8125 +2751,30,2.5,111.05,1.7,63.81225 +2752,30,2.5,111.05,1.7,63.812 +2753,30,2.5,111.05,1.7,63.81175 +2754,30,2.5,111.05,1.7,63.8115 +2755,30,2.5,111.05,1.7,63.81125 +2756,30,2.5,111.05,1.7,63.811 +2757,30,2.5,111.05,1.7,63.81075 +2758,30,2.5,111.05,1.7,63.8105 +2759,30,2.5,111.05,1.7,63.81025 +2760,30,2.5,111.05,1.7,63.81 +2761,30,2.5,111.05,1.7,63.80975 +2762,30,2.5,111.05,1.7,63.8095 +2763,30,2.5,111.05,1.7,63.80925 +2764,30,2.5,111.05,1.7,63.809 +2765,30,2.5,111.05,1.7,63.80875 +2766,30,2.5,111.05,1.7,63.8085 +2767,30,2.5,111.05,1.7,63.80825 +2768,30,2.5,111.05,1.7,63.808 +2769,30,2.5,111.05,1.7,63.80775 +2770,30,2.5,111.05,1.7,63.8075 +2771,30,2.5,111.05,1.7,63.80725 +2772,30,2.5,111.05,1.7,63.807 +2773,30,2.5,111.05,1.7,63.80675 +2774,30,2.5,111.05,1.7,63.8065 +2775,30,2.5,111.05,1.7,63.80625 +2776,30,2.5,111.05,1.7,63.806 +2777,30,2.5,111.05,1.7,63.80575 +2778,30,2.5,111.05,1.7,63.8055 +2779,30,2.5,111.05,1.7,63.80525 +2780,30,2.5,111.05,1.7,63.805 +2781,30,2.5,111.05,1.7,63.80475 +2782,30,2.5,111.05,1.7,63.8045 +2783,30,2.5,111.05,1.7,63.80425 +2784,30,2.5,111.05,1.7,63.804 +2785,30,2.5,111.05,1.7,63.80375 +2786,30,2.5,111.05,1.7,63.8035 +2787,30,2.5,111.05,1.7,63.80325 +2788,30,2.5,111.05,1.7,63.803 +2789,30,2.5,111.05,1.7,63.80275 +2790,30,2.5,111.05,1.7,63.8025 +2791,30,2.5,111.05,1.7,63.80225 +2792,30,2.5,111.05,1.7,63.802 +2793,30,2.5,111.05,1.7,63.80175 +2794,30,2.5,111.05,1.7,63.8015 +2795,30,2.5,111.05,1.7,63.80125 +2796,30,2.5,111.05,1.7,63.801 +2797,30,2.5,111.05,1.7,63.80075 +2798,30,2.5,111.05,1.7,63.8005 +2799,30,2.5,111.05,1.7,63.80025 +2800,30,2.5,111.05,1.7,63.8 +2801,30,2.5,111.05,1.7,63.79975 +2802,30,2.5,111.05,1.7,63.7995 +2803,30,2.5,111.05,1.7,63.79925 +2804,30,2.5,111.05,1.7,63.799 +2805,30,2.5,111.05,1.7,63.79875 +2806,30,2.5,111.05,1.7,63.7985 +2807,30,2.5,111.05,1.7,63.79825 +2808,30,2.5,111.05,1.7,63.798 +2809,30,2.5,111.05,1.7,63.79775 +2810,30,2.5,111.05,1.7,63.7975 +2811,30,2.5,111.05,1.7,63.79725 +2812,30,2.5,111.05,1.7,63.797 +2813,30,2.5,111.05,1.7,63.79675 +2814,30,2.5,111.05,1.7,63.7965 +2815,30,2.5,111.05,1.7,63.79625 +2816,30,2.5,111.05,1.7,63.796 +2817,30,2.5,111.05,1.7,63.79575 +2818,30,2.5,111.05,1.7,63.7955 +2819,30,2.5,111.05,1.7,63.79525 +2820,30,2.5,111.05,1.7,63.795 +2821,30,2.5,111.05,1.7,63.79475 +2822,30,2.5,111.05,1.7,63.7945 +2823,30,2.5,111.05,1.7,63.79425 +2824,30,2.5,111.05,1.7,63.794 +2825,30,2.5,111.05,1.7,63.79375 +2826,30,2.5,111.05,1.7,63.7935 +2827,30,2.5,111.05,1.7,63.79325 +2828,30,2.5,111.05,1.7,63.793 +2829,30,2.5,111.05,1.7,63.79275 +2830,30,2.5,111.05,1.7,63.7925 +2831,30,2.5,111.05,1.7,63.79225 +2832,30,2.5,111.05,1.7,63.792 +2833,30,2.5,111.05,1.7,63.79175 +2834,30,2.5,111.05,1.7,63.7915 +2835,30,2.5,111.05,1.7,63.79125 +2836,30,2.5,111.05,1.7,63.791 +2837,30,2.5,111.05,1.7,63.79075 +2838,30,2.5,111.05,1.7,63.7905 +2839,30,2.5,111.05,1.7,63.79025 +2840,30,2.5,111.05,1.7,63.79 +2841,30,2.5,111.05,1.7,63.78975 +2842,30,2.5,111.05,1.7,63.7895 +2843,30,2.5,111.05,1.7,63.78925 +2844,30,2.5,111.05,1.7,63.789 +2845,30,2.5,111.05,1.7,63.78875 +2846,30,2.5,111.05,1.7,63.7885 +2847,30,2.5,111.05,1.7,63.78825 +2848,30,2.5,111.05,1.7,63.788 +2849,30,2.5,111.05,1.7,63.78775 +2850,30,2.5,111.05,1.7,63.7875 +2851,30,2.5,111.05,1.7,63.78725 +2852,30,2.5,111.05,1.7,63.787 +2853,30,2.5,111.05,1.7,63.78675 +2854,30,2.5,111.05,1.7,63.7865 +2855,30,2.5,111.05,1.7,63.78625 +2856,30,2.5,111.05,1.7,63.786 +2857,30,2.5,111.05,1.7,63.78575 +2858,30,2.5,111.05,1.7,63.7855 +2859,30,2.5,111.05,1.7,63.78525 +2860,30,2.5,111.05,1.7,63.785 +2861,30,2.5,111.05,1.7,63.78475 +2862,30,2.5,111.05,1.7,63.7845 +2863,30,2.5,111.05,1.7,63.78425 +2864,30,2.5,111.05,1.7,63.784 +2865,30,2.5,111.05,1.7,63.78375 +2866,30,2.5,111.05,1.7,63.7835 +2867,30,2.5,111.05,1.7,63.78325 +2868,30,2.5,111.05,1.7,63.783 +2869,30,2.5,111.05,1.7,63.78275 +2870,30,2.5,111.05,1.7,63.7825 +2871,30,2.5,111.05,1.7,63.78225 +2872,30,2.5,111.05,1.7,63.782 +2873,30,2.5,111.05,1.7,63.78175 +2874,30,2.5,111.05,1.7,63.7815 +2875,30,2.5,111.05,1.7,63.78125 +2876,30,2.5,111.05,1.7,63.781 +2877,30,2.5,111.05,1.7,63.78075 +2878,30,2.5,111.05,1.7,63.7805 +2879,30,2.5,111.05,1.7,63.78025 +2880,30,2.5,111.05,1.7,63.78 +2881,30,2.5,111.05,1.7,63.77975 +2882,30,2.5,111.05,1.7,63.7795 +2883,30,2.5,111.05,1.7,63.77925 +2884,30,2.5,111.05,1.7,63.779 +2885,30,2.5,111.05,1.7,63.77875 +2886,30,2.5,111.05,1.7,63.7785 +2887,30,2.5,111.05,1.7,63.77825 +2888,30,2.5,111.05,1.7,63.778 +2889,30,2.5,111.05,1.7,63.77775 +2890,30,2.5,111.05,1.7,63.7775 +2891,30,2.5,111.05,1.7,63.77725 +2892,30,2.5,111.05,1.7,63.777 +2893,30,2.5,111.05,1.7,63.77675 +2894,30,2.5,111.05,1.7,63.7765 +2895,30,2.5,111.05,1.7,63.77625 +2896,30,2.5,111.05,1.7,63.776 +2897,30,2.5,111.05,1.7,63.77575 +2898,30,2.5,111.05,1.7,63.7755 +2899,30,2.5,111.05,1.7,63.77525 +2900,30,2.5,111.05,1.7,63.775 +2901,30,2.5,111.05,1.7,63.77475 +2902,30,2.5,111.05,1.7,63.7745 +2903,30,2.5,111.05,1.7,63.77425 +2904,30,2.5,111.05,1.7,63.774 +2905,30,2.5,111.05,1.7,63.77375 +2906,30,2.5,111.05,1.7,63.7735 +2907,30,2.5,111.05,1.7,63.77325 +2908,30,2.5,111.05,1.7,63.773 +2909,30,2.5,111.05,1.7,63.77275 +2910,30,2.5,111.05,1.7,63.7725 +2911,30,2.5,111.05,1.7,63.77225 +2912,30,2.5,111.05,1.7,63.772 +2913,30,2.5,111.05,1.7,63.77175 +2914,30,2.5,111.05,1.7,63.7715 +2915,30,2.5,111.05,1.7,63.77125 +2916,30,2.5,111.05,1.7,63.771 +2917,30,2.5,111.05,1.7,63.77075 +2918,30,2.5,111.05,1.7,63.7705 +2919,30,2.5,111.05,1.7,63.77025 +2920,30,2.5,111.05,1.7,63.77 +2921,30,2.5,111.05,1.7,63.76975 +2922,30,2.5,111.05,1.7,63.7695 +2923,30,2.5,111.05,1.7,63.76925 +2924,30,2.5,111.05,1.7,63.769 +2925,30,2.5,111.05,1.7,63.76875 +2926,30,2.5,111.05,1.7,63.7685 +2927,30,2.5,111.05,1.7,63.76825 +2928,30,2.5,111.05,1.7,63.768 +2929,30,2.5,111.05,1.7,63.76775 +2930,30,2.5,111.05,1.7,63.7675 +2931,30,2.5,111.05,1.7,63.76725 +2932,30,2.5,111.05,1.7,63.767 +2933,30,2.5,111.05,1.7,63.76675 +2934,30,2.5,111.05,1.7,63.7665 +2935,30,2.5,111.05,1.7,63.76625 +2936,30,2.5,111.05,1.7,63.766 +2937,30,2.5,111.05,1.7,63.76575 +2938,30,2.5,111.05,1.7,63.7655 +2939,30,2.5,111.05,1.7,63.76525 +2940,30,2.5,111.05,1.7,63.765 +2941,30,2.5,111.05,1.7,63.76475 +2942,30,2.5,111.05,1.7,63.7645 +2943,30,2.5,111.05,1.7,63.76425 +2944,30,2.5,111.05,1.7,63.764 +2945,30,2.5,111.05,1.7,63.76375 +2946,30,2.5,111.05,1.7,63.7635 +2947,30,2.5,111.05,1.7,63.76325 +2948,30,2.5,111.05,1.7,63.763 +2949,30,2.5,111.05,1.7,63.76275 +2950,30,2.5,111.05,1.7,63.7625 +2951,30,2.5,111.05,1.7,63.76225 +2952,30,2.5,111.05,1.7,63.762 +2953,30,2.5,111.05,1.7,63.76175 +2954,30,2.5,111.05,1.7,63.7615 +2955,30,2.5,111.05,1.7,63.76125 +2956,30,2.5,111.05,1.7,63.761 +2957,30,2.5,111.05,1.7,63.76075 +2958,30,2.5,111.05,1.7,63.7605 +2959,30,2.5,111.05,1.7,63.76025 +2960,30,2.5,111.05,1.7,63.76 +2961,30,2.5,111.05,1.7,63.75975 +2962,30,2.5,111.05,1.7,63.7595 +2963,30,2.5,111.05,1.7,63.75925 +2964,30,2.5,111.05,1.7,63.759 +2965,30,2.5,111.05,1.7,63.75875 +2966,30,2.5,111.05,1.7,63.7585 +2967,30,2.5,111.05,1.7,63.75825 +2968,30,2.5,111.05,1.7,63.758 +2969,30,2.5,111.05,1.7,63.75775 +2970,30,2.5,111.05,1.7,63.7575 +2971,30,2.5,111.05,1.7,63.75725 +2972,30,2.5,111.05,1.7,63.757 +2973,30,2.5,111.05,1.7,63.75675 +2974,30,2.5,111.05,1.7,63.7565 +2975,30,2.5,111.05,1.7,63.75625 +2976,30,2.5,111.05,1.7,63.756 +2977,30,2.5,111.05,1.7,63.75575 +2978,30,2.5,111.05,1.7,63.7555 +2979,30,2.5,111.05,1.7,63.75525 +2980,30,2.5,111.05,1.7,63.755 +2981,30,2.5,111.05,1.7,63.75475 +2982,30,2.5,111.05,1.7,63.7545 +2983,30,2.5,111.05,1.7,63.75425 +2984,30,2.5,111.05,1.7,63.754 +2985,30,2.5,111.05,1.7,63.75375 +2986,30,2.5,111.05,1.7,63.7535 +2987,30,2.5,111.05,1.7,63.75325 +2988,30,2.5,111.05,1.7,63.753 +2989,30,2.5,111.05,1.7,63.75275 +2990,30,2.5,111.05,1.7,63.7525 +2991,30,2.5,111.05,1.7,63.75225 +2992,30,2.5,111.05,1.7,63.752 +2993,30,2.5,111.05,1.7,63.75175 +2994,30,2.5,111.05,1.7,63.7515 +2995,30,2.5,111.05,1.7,63.75125 +2996,30,2.5,111.05,1.7,63.751 +2997,30,2.5,111.05,1.7,63.75075 +2998,30,2.5,111.05,1.7,63.7505 +2999,30,2.5,111.05,1.7,63.75025 +3000,30,2.5,111.05,1.7,63.75 +3001,30,2.5,111.05,1.7,63.75 +3002,30,2.5,111.05,1.7,63.75 +3003,30,2.5,111.05,1.7,63.75 +3004,30,2.5,111.05,1.7,63.75 +3005,30,2.5,111.05,1.7,63.75 +3006,30,2.5,111.05,1.7,63.75 +3007,30,2.5,111.05,1.7,63.75 +3008,30,2.5,111.05,1.7,63.75 +3009,30,2.5,111.05,1.7,63.75 +3010,30,2.5,111.05,1.7,63.75 +3011,30,2.5,111.05,1.7,63.75 +3012,30,2.5,111.05,1.7,63.75 +3013,30,2.5,111.05,1.7,63.75 +3014,30,2.5,111.05,1.7,63.75 +3015,30,2.5,111.05,1.7,63.75 +3016,30,2.5,111.05,1.7,63.75 +3017,30,2.5,111.05,1.7,63.75 +3018,30,2.5,111.05,1.7,63.75 +3019,30,2.5,111.05,1.7,63.75 +3020,30,2.5,111.05,1.7,63.75 +3021,30,2.5,111.05,1.7,63.75 +3022,30,2.5,111.05,1.7,63.75 +3023,30,2.5,111.05,1.7,63.75 +3024,30,2.5,111.05,1.7,63.75 +3025,30,2.5,111.05,1.7,63.75 +3026,30,2.5,111.05,1.7,63.75 +3027,30,2.5,111.05,1.7,63.75 +3028,30,2.5,111.05,1.7,63.75 +3029,30,2.5,111.05,1.7,63.75 +3030,30,2.5,111.05,1.7,63.75 +3031,30,2.5,111.05,1.7,63.75 +3032,30,2.5,111.05,1.7,63.75 +3033,30,2.5,111.05,1.7,63.75 +3034,30,2.5,111.05,1.7,63.75 +3035,30,2.5,111.05,1.7,63.75 +3036,30,2.5,111.05,1.7,63.75 +3037,30,2.5,111.05,1.7,63.75 +3038,30,2.5,111.05,1.7,63.75 +3039,30,2.5,111.05,1.7,63.75 +3040,30,2.5,111.05,1.7,63.75 +3041,30,2.5,111.05,1.7,63.75 +3042,30,2.5,111.05,1.7,63.75 +3043,30,2.5,111.05,1.7,63.75 +3044,30,2.5,111.05,1.7,63.75 +3045,30,2.5,111.05,1.7,63.75 +3046,30,2.5,111.05,1.7,63.75 +3047,30,2.5,111.05,1.7,63.75 +3048,30,2.5,111.05,1.7,63.75 +3049,30,2.5,111.05,1.7,63.75 +3050,30,2.5,111.05,1.7,63.75 +3051,30,2.5,111.05,1.7,63.75 +3052,30,2.5,111.05,1.7,63.75 +3053,30,2.5,111.05,1.7,63.75 +3054,30,2.5,111.05,1.7,63.75 +3055,30,2.5,111.05,1.7,63.75 +3056,30,2.5,111.05,1.7,63.75 +3057,30,2.5,111.05,1.7,63.75 +3058,30,2.5,111.05,1.7,63.75 +3059,30,2.5,111.05,1.7,63.75 +3060,30,2.5,111.05,1.7,63.75 +3061,30,2.5,111.05,1.7,63.75 +3062,30,2.5,111.05,1.7,63.75 +3063,30,2.5,111.05,1.7,63.75 +3064,30,2.5,111.05,1.7,63.75 +3065,30,2.5,111.05,1.7,63.75 +3066,30,2.5,111.05,1.7,63.75 +3067,30,2.5,111.05,1.7,63.75 +3068,30,2.5,111.05,1.7,63.75 +3069,30,2.5,111.05,1.7,63.75 +3070,30,2.5,111.05,1.7,63.75 +3071,30,2.5,111.05,1.7,63.75 +3072,30,2.5,111.05,1.7,63.75 +3073,30,2.5,111.05,1.7,63.75 +3074,30,2.5,111.05,1.7,63.75 +3075,30,2.5,111.05,1.7,63.75 +3076,30,2.5,111.05,1.7,63.75 +3077,30,2.5,111.05,1.7,63.75 +3078,30,2.5,111.05,1.7,63.75 +3079,30,2.5,111.05,1.7,63.75 +3080,30,2.5,111.05,1.7,63.75 +3081,30,2.5,111.05,1.7,63.75 +3082,30,2.5,111.05,1.7,63.75 +3083,30,2.5,111.05,1.7,63.75 +3084,30,2.5,111.05,1.7,63.75 +3085,30,2.5,111.05,1.7,63.75 +3086,30,2.5,111.05,1.7,63.75 +3087,30,2.5,111.05,1.7,63.75 +3088,30,2.5,111.05,1.7,63.75 +3089,30,2.5,111.05,1.7,63.75 +3090,30,2.5,111.05,1.7,63.75 +3091,30,2.5,111.05,1.7,63.75 +3092,30,2.5,111.05,1.7,63.75 +3093,30,2.5,111.05,1.7,63.75 +3094,30,2.5,111.05,1.7,63.75 +3095,30,2.5,111.05,1.7,63.75 +3096,30,2.5,111.05,1.7,63.75 +3097,30,2.5,111.05,1.7,63.75 +3098,30,2.5,111.05,1.7,63.75 +3099,30,2.5,111.05,1.7,63.75 +3100,30,2.5,111.05,1.7,63.75 +3101,30,2.5,111.05,1.7,63.75 +3102,30,2.5,111.05,1.7,63.75 +3103,30,2.5,111.05,1.7,63.75 +3104,30,2.5,111.05,1.7,63.75 +3105,30,2.5,111.05,1.7,63.75 +3106,30,2.5,111.05,1.7,63.75 +3107,30,2.5,111.05,1.7,63.75 +3108,30,2.5,111.05,1.7,63.75 +3109,30,2.5,111.05,1.7,63.75 +3110,30,2.5,111.05,1.7,63.75 +3111,30,2.5,111.05,1.7,63.75 +3112,30,2.5,111.05,1.7,63.75 +3113,30,2.5,111.05,1.7,63.75 +3114,30,2.5,111.05,1.7,63.75 +3115,30,2.5,111.05,1.7,63.75 +3116,30,2.5,111.05,1.7,63.75 +3117,30,2.5,111.05,1.7,63.75 +3118,30,2.5,111.05,1.7,63.75 +3119,30,2.5,111.05,1.7,63.75 +3120,30,2.5,111.05,1.7,63.75 +3121,30,2.5,111.05,1.7,63.75 +3122,30,2.5,111.05,1.7,63.75 +3123,30,2.5,111.05,1.7,63.75 +3124,30,2.5,111.05,1.7,63.75 +3125,30,2.5,111.05,1.7,63.75 +3126,30,2.5,111.05,1.7,63.75 +3127,30,2.5,111.05,1.7,63.75 +3128,30,2.5,111.05,1.7,63.75 +3129,30,2.5,111.05,1.7,63.75 +3130,30,2.5,111.05,1.7,63.75 +3131,30,2.5,111.05,1.7,63.75 +3132,30,2.5,111.05,1.7,63.75 +3133,30,2.5,111.05,1.7,63.75 +3134,30,2.5,111.05,1.7,63.75 +3135,30,2.5,111.05,1.7,63.75 +3136,30,2.5,111.05,1.7,63.75 +3137,30,2.5,111.05,1.7,63.75 +3138,30,2.5,111.05,1.7,63.75 +3139,30,2.5,111.05,1.7,63.75 +3140,30,2.5,111.05,1.7,63.75 +3141,30,2.5,111.05,1.7,63.75 +3142,30,2.5,111.05,1.7,63.75 +3143,30,2.5,111.05,1.7,63.75 +3144,30,2.5,111.05,1.7,63.75 +3145,30,2.5,111.05,1.7,63.75 +3146,30,2.5,111.05,1.7,63.75 +3147,30,2.5,111.05,1.7,63.75 +3148,30,2.5,111.05,1.7,63.75 +3149,30,2.5,111.05,1.7,63.75 +3150,30,2.5,111.05,1.7,63.75 +3151,30,2.5,111.05,1.7,63.75 +3152,30,2.5,111.05,1.7,63.75 +3153,30,2.5,111.05,1.7,63.75 +3154,30,2.5,111.05,1.7,63.75 +3155,30,2.5,111.05,1.7,63.75 +3156,30,2.5,111.05,1.7,63.75 +3157,30,2.5,111.05,1.7,63.75 +3158,30,2.5,111.05,1.7,63.75 +3159,30,2.5,111.05,1.7,63.75 +3160,30,2.5,111.05,1.7,63.75 +3161,30,2.5,111.05,1.7,63.75 +3162,30,2.5,111.05,1.7,63.75 +3163,30,2.5,111.05,1.7,63.75 +3164,30,2.5,111.05,1.7,63.75 +3165,30,2.5,111.05,1.7,63.75 +3166,30,2.5,111.05,1.7,63.75 +3167,30,2.5,111.05,1.7,63.75 +3168,30,2.5,111.05,1.7,63.75 +3169,30,2.5,111.05,1.7,63.75 +3170,30,2.5,111.05,1.7,63.75 +3171,30,2.5,111.05,1.7,63.75 +3172,30,2.5,111.05,1.7,63.75 +3173,30,2.5,111.05,1.7,63.75 +3174,30,2.5,111.05,1.7,63.75 +3175,30,2.5,111.05,1.7,63.75 +3176,30,2.5,111.05,1.7,63.75 +3177,30,2.5,111.05,1.7,63.75 +3178,30,2.5,111.05,1.7,63.75 +3179,30,2.5,111.05,1.7,63.75 +3180,30,2.5,111.05,1.7,63.75 +3181,30,2.5,111.05,1.7,63.75 +3182,30,2.5,111.05,1.7,63.75 +3183,30,2.5,111.05,1.7,63.75 +3184,30,2.5,111.05,1.7,63.75 +3185,30,2.5,111.05,1.7,63.75 +3186,30,2.5,111.05,1.7,63.75 +3187,30,2.5,111.05,1.7,63.75 +3188,30,2.5,111.05,1.7,63.75 +3189,30,2.5,111.05,1.7,63.75 +3190,30,2.5,111.05,1.7,63.75 +3191,30,2.5,111.05,1.7,63.75 +3192,30,2.5,111.05,1.7,63.75 +3193,30,2.5,111.05,1.7,63.75 +3194,30,2.5,111.05,1.7,63.75 +3195,30,2.5,111.05,1.7,63.75 +3196,30,2.5,111.05,1.7,63.75 +3197,30,2.5,111.05,1.7,63.75 +3198,30,2.5,111.05,1.7,63.75 +3199,30,2.5,111.05,1.7,63.75 +3200,30,2.5,111.05,1.7,63.75 +3201,30,2.5,111.05,1.7,63.75 +3202,30,2.5,111.05,1.7,63.75 +3203,30,2.5,111.05,1.7,63.75 +3204,30,2.5,111.05,1.7,63.75 +3205,30,2.5,111.05,1.7,63.75 +3206,30,2.5,111.05,1.7,63.75 +3207,30,2.5,111.05,1.7,63.75 +3208,30,2.5,111.05,1.7,63.75 +3209,30,2.5,111.05,1.7,63.75 +3210,30,2.5,111.05,1.7,63.75 +3211,30,2.5,111.05,1.7,63.75 +3212,30,2.5,111.05,1.7,63.75 +3213,30,2.5,111.05,1.7,63.75 +3214,30,2.5,111.05,1.7,63.75 +3215,30,2.5,111.05,1.7,63.75 +3216,30,2.5,111.05,1.7,63.75 +3217,30,2.5,111.05,1.7,63.75 +3218,30,2.5,111.05,1.7,63.75 +3219,30,2.5,111.05,1.7,63.75 +3220,30,2.5,111.05,1.7,63.75 +3221,30,2.5,111.05,1.7,63.75 +3222,30,2.5,111.05,1.7,63.75 +3223,30,2.5,111.05,1.7,63.75 +3224,30,2.5,111.05,1.7,63.75 +3225,30,2.5,111.05,1.7,63.75 +3226,30,2.5,111.05,1.7,63.75 +3227,30,2.5,111.05,1.7,63.75 +3228,30,2.5,111.05,1.7,63.75 +3229,30,2.5,111.05,1.7,63.75 +3230,30,2.5,111.05,1.7,63.75 +3231,30,2.5,111.05,1.7,63.75 +3232,30,2.5,111.05,1.7,63.75 +3233,30,2.5,111.05,1.7,63.75 +3234,30,2.5,111.05,1.7,63.75 +3235,30,2.5,111.05,1.7,63.75 +3236,30,2.5,111.05,1.7,63.75 +3237,30,2.5,111.05,1.7,63.75 +3238,30,2.5,111.05,1.7,63.75 +3239,30,2.5,111.05,1.7,63.75 +3240,30,2.5,111.05,1.7,63.75 +3241,30,2.5,111.05,1.7,63.75 +3242,30,2.5,111.05,1.7,63.75 +3243,30,2.5,111.05,1.7,63.75 +3244,30,2.5,111.05,1.7,63.75 +3245,30,2.5,111.05,1.7,63.75 +3246,30,2.5,111.05,1.7,63.75 +3247,30,2.5,111.05,1.7,63.75 +3248,30,2.5,111.05,1.7,63.75 +3249,30,2.5,111.05,1.7,63.75 +3250,30,2.5,111.05,1.7,63.75 +3251,30,2.5,111.05,1.7,63.75 +3252,30,2.5,111.05,1.7,63.75 +3253,30,2.5,111.05,1.7,63.75 +3254,30,2.5,111.05,1.7,63.75 +3255,30,2.5,111.05,1.7,63.75 +3256,30,2.5,111.05,1.7,63.75 +3257,30,2.5,111.05,1.7,63.75 +3258,30,2.5,111.05,1.7,63.75 +3259,30,2.5,111.05,1.7,63.75 +3260,30,2.5,111.05,1.7,63.75 +3261,30,2.5,111.05,1.7,63.75 +3262,30,2.5,111.05,1.7,63.75 +3263,30,2.5,111.05,1.7,63.75 +3264,30,2.5,111.05,1.7,63.75 +3265,30,2.5,111.05,1.7,63.75 +3266,30,2.5,111.05,1.7,63.75 +3267,30,2.5,111.05,1.7,63.75 +3268,30,2.5,111.05,1.7,63.75 +3269,30,2.5,111.05,1.7,63.75 +3270,30,2.5,111.05,1.7,63.75 +3271,30,2.5,111.05,1.7,63.75 +3272,30,2.5,111.05,1.7,63.75 +3273,30,2.5,111.05,1.7,63.75 +3274,30,2.5,111.05,1.7,63.75 +3275,30,2.5,111.05,1.7,63.75 +3276,30,2.5,111.05,1.7,63.75 +3277,30,2.5,111.05,1.7,63.75 +3278,30,2.5,111.05,1.7,63.75 +3279,30,2.5,111.05,1.7,63.75 +3280,30,2.5,111.05,1.7,63.75 +3281,30,2.5,111.05,1.7,63.75 +3282,30,2.5,111.05,1.7,63.75 +3283,30,2.5,111.05,1.7,63.75 +3284,30,2.5,111.05,1.7,63.75 +3285,30,2.5,111.05,1.7,63.75 +3286,30,2.5,111.05,1.7,63.75 +3287,30,2.5,111.05,1.7,63.75 +3288,30,2.5,111.05,1.7,63.75 +3289,30,2.5,111.05,1.7,63.75 +3290,30,2.5,111.05,1.7,63.75 +3291,30,2.5,111.05,1.7,63.75 +3292,30,2.5,111.05,1.7,63.75 +3293,30,2.5,111.05,1.7,63.75 +3294,30,2.5,111.05,1.7,63.75 +3295,30,2.5,111.05,1.7,63.75 +3296,30,2.5,111.05,1.7,63.75 +3297,30,2.5,111.05,1.7,63.75 +3298,30,2.5,111.05,1.7,63.75 +3299,30,2.5,111.05,1.7,63.75 +3300,30,2.5,111.05,1.7,63.75 +3301,30,2.5,111.05,1.7,63.75 +3302,30,2.5,111.05,1.7,63.75 +3303,30,2.5,111.05,1.7,63.75 +3304,30,2.5,111.05,1.7,63.75 +3305,30,2.5,111.05,1.7,63.75 +3306,30,2.5,111.05,1.7,63.75 +3307,30,2.5,111.05,1.7,63.75 +3308,30,2.5,111.05,1.7,63.75 +3309,30,2.5,111.05,1.7,63.75 +3310,30,2.5,111.05,1.7,63.75 +3311,30,2.5,111.05,1.7,63.75 +3312,30,2.5,111.05,1.7,63.75 +3313,30,2.5,111.05,1.7,63.75 +3314,30,2.5,111.05,1.7,63.75 +3315,30,2.5,111.05,1.7,63.75 +3316,30,2.5,111.05,1.7,63.75 +3317,30,2.5,111.05,1.7,63.75 +3318,30,2.5,111.05,1.7,63.75 +3319,30,2.5,111.05,1.7,63.75 +3320,30,2.5,111.05,1.7,63.75 +3321,30,2.5,111.05,1.7,63.75 +3322,30,2.5,111.05,1.7,63.75 +3323,30,2.5,111.05,1.7,63.75 +3324,30,2.5,111.05,1.7,63.75 +3325,30,2.5,111.05,1.7,63.75 +3326,30,2.5,111.05,1.7,63.75 +3327,30,2.5,111.05,1.7,63.75 +3328,30,2.5,111.05,1.7,63.75 +3329,30,2.5,111.05,1.7,63.75 +3330,30,2.5,111.05,1.7,63.75 +3331,30,2.5,111.05,1.7,63.75 +3332,30,2.5,111.05,1.7,63.75 +3333,30,2.5,111.05,1.7,63.75 +3334,30,2.5,111.05,1.7,63.75 +3335,30,2.5,111.05,1.7,63.75 +3336,30,2.5,111.05,1.7,63.75 +3337,30,2.5,111.05,1.7,63.75 +3338,30,2.5,111.05,1.7,63.75 +3339,30,2.5,111.05,1.7,63.75 +3340,30,2.5,111.05,1.7,63.75 +3341,30,2.5,111.05,1.7,63.75 +3342,30,2.5,111.05,1.7,63.75 +3343,30,2.5,111.05,1.7,63.75 +3344,30,2.5,111.05,1.7,63.75 +3345,30,2.5,111.05,1.7,63.75 +3346,30,2.5,111.05,1.7,63.75 +3347,30,2.5,111.05,1.7,63.75 +3348,30,2.5,111.05,1.7,63.75 +3349,30,2.5,111.05,1.7,63.75 +3350,30,2.5,111.05,1.7,63.75 +3351,30,2.5,111.05,1.7,63.75 +3352,30,2.5,111.05,1.7,63.75 +3353,30,2.5,111.05,1.7,63.75 +3354,30,2.5,111.05,1.7,63.75 +3355,30,2.5,111.05,1.7,63.75 +3356,30,2.5,111.05,1.7,63.75 +3357,30,2.5,111.05,1.7,63.75 +3358,30,2.5,111.05,1.7,63.75 +3359,30,2.5,111.05,1.7,63.75 +3360,30,2.5,111.05,1.7,63.75 +3361,30,2.5,111.05,1.7,63.75 +3362,30,2.5,111.05,1.7,63.75 +3363,30,2.5,111.05,1.7,63.75 +3364,30,2.5,111.05,1.7,63.75 +3365,30,2.5,111.05,1.7,63.75 +3366,30,2.5,111.05,1.7,63.75 +3367,30,2.5,111.05,1.7,63.75 +3368,30,2.5,111.05,1.7,63.75 +3369,30,2.5,111.05,1.7,63.75 +3370,30,2.5,111.05,1.7,63.75 +3371,30,2.5,111.05,1.7,63.75 +3372,30,2.5,111.05,1.7,63.75 +3373,30,2.5,111.05,1.7,63.75 +3374,30,2.5,111.05,1.7,63.75 +3375,30,2.5,111.05,1.7,63.75 +3376,30,2.5,111.05,1.7,63.75 +3377,30,2.5,111.05,1.7,63.75 +3378,30,2.5,111.05,1.7,63.75 +3379,30,2.5,111.05,1.7,63.75 +3380,30,2.5,111.05,1.7,63.75 +3381,30,2.5,111.05,1.7,63.75 +3382,30,2.5,111.05,1.7,63.75 +3383,30,2.5,111.05,1.7,63.75 +3384,30,2.5,111.05,1.7,63.75 +3385,30,2.5,111.05,1.7,63.75 +3386,30,2.5,111.05,1.7,63.75 +3387,30,2.5,111.05,1.7,63.75 +3388,30,2.5,111.05,1.7,63.75 +3389,30,2.5,111.05,1.7,63.75 +3390,30,2.5,111.05,1.7,63.75 +3391,30,2.5,111.05,1.7,63.75 +3392,30,2.5,111.05,1.7,63.75 +3393,30,2.5,111.05,1.7,63.75 +3394,30,2.5,111.05,1.7,63.75 +3395,30,2.5,111.05,1.7,63.75 +3396,30,2.5,111.05,1.7,63.75 +3397,30,2.5,111.05,1.7,63.75 +3398,30,2.5,111.05,1.7,63.75 +3399,30,2.5,111.05,1.7,63.75 +3400,30,2.5,111.05,1.7,63.75 +3401,30,2.5,111.05,1.7,63.75 +3402,30,2.5,111.05,1.7,63.75 +3403,30,2.5,111.05,1.7,63.75 +3404,30,2.5,111.05,1.7,63.75 +3405,30,2.5,111.05,1.7,63.75 +3406,30,2.5,111.05,1.7,63.75 +3407,30,2.5,111.05,1.7,63.75 +3408,30,2.5,111.05,1.7,63.75 +3409,30,2.5,111.05,1.7,63.75 +3410,30,2.5,111.05,1.7,63.75 +3411,30,2.5,111.05,1.7,63.75 +3412,30,2.5,111.05,1.7,63.75 +3413,30,2.5,111.05,1.7,63.75 +3414,30,2.5,111.05,1.7,63.75 +3415,30,2.5,111.05,1.7,63.75 +3416,30,2.5,111.05,1.7,63.75 +3417,30,2.5,111.05,1.7,63.75 +3418,30,2.5,111.05,1.7,63.75 +3419,30,2.5,111.05,1.7,63.75 +3420,30,2.5,111.05,1.7,63.75 +3421,30,2.5,111.05,1.7,63.75 +3422,30,2.5,111.05,1.7,63.75 +3423,30,2.5,111.05,1.7,63.75 +3424,30,2.5,111.05,1.7,63.75 +3425,30,2.5,111.05,1.7,63.75 +3426,30,2.5,111.05,1.7,63.75 +3427,30,2.5,111.05,1.7,63.75 +3428,30,2.5,111.05,1.7,63.75 +3429,30,2.5,111.05,1.7,63.75 +3430,30,2.5,111.05,1.7,63.75 +3431,30,2.5,111.05,1.7,63.75 +3432,30,2.5,111.05,1.7,63.75 +3433,30,2.5,111.05,1.7,63.75 +3434,30,2.5,111.05,1.7,63.75 +3435,30,2.5,111.05,1.7,63.75 +3436,30,2.5,111.05,1.7,63.75 +3437,30,2.5,111.05,1.7,63.75 +3438,30,2.5,111.05,1.7,63.75 +3439,30,2.5,111.05,1.7,63.75 +3440,30,2.5,111.05,1.7,63.75 +3441,30,2.5,111.05,1.7,63.75 +3442,30,2.5,111.05,1.7,63.75 +3443,30,2.5,111.05,1.7,63.75 +3444,30,2.5,111.05,1.7,63.75 +3445,30,2.5,111.05,1.7,63.75 +3446,30,2.5,111.05,1.7,63.75 +3447,30,2.5,111.05,1.7,63.75 +3448,30,2.5,111.05,1.7,63.75 +3449,30,2.5,111.05,1.7,63.75 +3450,30,2.5,111.05,1.7,63.75 +3451,30,2.5,111.05,1.7,63.75 +3452,30,2.5,111.05,1.7,63.75 +3453,30,2.5,111.05,1.7,63.75 +3454,30,2.5,111.05,1.7,63.75 +3455,30,2.5,111.05,1.7,63.75 +3456,30,2.5,111.05,1.7,63.75 +3457,30,2.5,111.05,1.7,63.75 +3458,30,2.5,111.05,1.7,63.75 +3459,30,2.5,111.05,1.7,63.75 +3460,30,2.5,111.05,1.7,63.75 +3461,30,2.5,111.05,1.7,63.75 +3462,30,2.5,111.05,1.7,63.75 +3463,30,2.5,111.05,1.7,63.75 +3464,30,2.5,111.05,1.7,63.75 +3465,30,2.5,111.05,1.7,63.75 +3466,30,2.5,111.05,1.7,63.75 +3467,30,2.5,111.05,1.7,63.75 +3468,30,2.5,111.05,1.7,63.75 +3469,30,2.5,111.05,1.7,63.75 +3470,30,2.5,111.05,1.7,63.75 +3471,30,2.5,111.05,1.7,63.75 +3472,30,2.5,111.05,1.7,63.75 +3473,30,2.5,111.05,1.7,63.75 +3474,30,2.5,111.05,1.7,63.75 +3475,30,2.5,111.05,1.7,63.75 +3476,30,2.5,111.05,1.7,63.75 +3477,30,2.5,111.05,1.7,63.75 +3478,30,2.5,111.05,1.7,63.75 +3479,30,2.5,111.05,1.7,63.75 +3480,30,2.5,111.05,1.7,63.75 +3481,30,2.5,111.05,1.7,63.75 +3482,30,2.5,111.05,1.7,63.75 +3483,30,2.5,111.05,1.7,63.75 +3484,30,2.5,111.05,1.7,63.75 +3485,30,2.5,111.05,1.7,63.75 +3486,30,2.5,111.05,1.7,63.75 +3487,30,2.5,111.05,1.7,63.75 +3488,30,2.5,111.05,1.7,63.75 +3489,30,2.5,111.05,1.7,63.75 +3490,30,2.5,111.05,1.7,63.75 +3491,30,2.5,111.05,1.7,63.75 +3492,30,2.5,111.05,1.7,63.75 +3493,30,2.5,111.05,1.7,63.75 +3494,30,2.5,111.05,1.7,63.75 +3495,30,2.5,111.05,1.7,63.75 +3496,30,2.5,111.05,1.7,63.75 +3497,30,2.5,111.05,1.7,63.75 +3498,30,2.5,111.05,1.7,63.75 +3499,30,2.5,111.05,1.7,63.75 +3500,30,2.5,111.05,1.7,63.75 +3501,30,2.5,111.05,1.7,63.75 +3502,30,2.5,111.05,1.7,63.75 +3503,30,2.5,111.05,1.7,63.75 +3504,30,2.5,111.05,1.7,63.75 +3505,30,2.5,111.05,1.7,63.75 +3506,30,2.5,111.05,1.7,63.75 +3507,30,2.5,111.05,1.7,63.75 +3508,30,2.5,111.05,1.7,63.75 +3509,30,2.5,111.05,1.7,63.75 +3510,30,2.5,111.05,1.7,63.75 +3511,30,2.5,111.05,1.7,63.75 +3512,30,2.5,111.05,1.7,63.75 +3513,30,2.5,111.05,1.7,63.75 +3514,30,2.5,111.05,1.7,63.75 +3515,30,2.5,111.05,1.7,63.75 +3516,30,2.5,111.05,1.7,63.75 +3517,30,2.5,111.05,1.7,63.75 +3518,30,2.5,111.05,1.7,63.75 +3519,30,2.5,111.05,1.7,63.75 +3520,30,2.5,111.05,1.7,63.75 +3521,30,2.5,111.05,1.7,63.75 +3522,30,2.5,111.05,1.7,63.75 +3523,30,2.5,111.05,1.7,63.75 +3524,30,2.5,111.05,1.7,63.75 +3525,30,2.5,111.05,1.7,63.75 +3526,30,2.5,111.05,1.7,63.75 +3527,30,2.5,111.05,1.7,63.75 +3528,30,2.5,111.05,1.7,63.75 +3529,30,2.5,111.05,1.7,63.75 +3530,30,2.5,111.05,1.7,63.75 +3531,30,2.5,111.05,1.7,63.75 +3532,30,2.5,111.05,1.7,63.75 +3533,30,2.5,111.05,1.7,63.75 +3534,30,2.5,111.05,1.7,63.75 +3535,30,2.5,111.05,1.7,63.75 +3536,30,2.5,111.05,1.7,63.75 +3537,30,2.5,111.05,1.7,63.75 +3538,30,2.5,111.05,1.7,63.75 +3539,30,2.5,111.05,1.7,63.75 +3540,30,2.5,111.05,1.7,63.75 +3541,30,2.5,111.05,1.7,63.75 +3542,30,2.5,111.05,1.7,63.75 +3543,30,2.5,111.05,1.7,63.75 +3544,30,2.5,111.05,1.7,63.75 +3545,30,2.5,111.05,1.7,63.75 +3546,30,2.5,111.05,1.7,63.75 +3547,30,2.5,111.05,1.7,63.75 +3548,30,2.5,111.05,1.7,63.75 +3549,30,2.5,111.05,1.7,63.75 +3550,30,2.5,111.05,1.7,63.75 +3551,30,2.5,111.05,1.7,63.75 +3552,30,2.5,111.05,1.7,63.75 +3553,30,2.5,111.05,1.7,63.75 +3554,30,2.5,111.05,1.7,63.75 +3555,30,2.5,111.05,1.7,63.75 +3556,30,2.5,111.05,1.7,63.75 +3557,30,2.5,111.05,1.7,63.75 +3558,30,2.5,111.05,1.7,63.75 +3559,30,2.5,111.05,1.7,63.75 +3560,30,2.5,111.05,1.7,63.75 +3561,30,2.5,111.05,1.7,63.75 +3562,30,2.5,111.05,1.7,63.75 +3563,30,2.5,111.05,1.7,63.75 +3564,30,2.5,111.05,1.7,63.75 +3565,30,2.5,111.05,1.7,63.75 +3566,30,2.5,111.05,1.7,63.75 +3567,30,2.5,111.05,1.7,63.75 +3568,30,2.5,111.05,1.7,63.75 +3569,30,2.5,111.05,1.7,63.75 +3570,30,2.5,111.05,1.7,63.75 +3571,30,2.5,111.05,1.7,63.75 +3572,30,2.5,111.05,1.7,63.75 +3573,30,2.5,111.05,1.7,63.75 +3574,30,2.5,111.05,1.7,63.75 +3575,30,2.5,111.05,1.7,63.75 +3576,30,2.5,111.05,1.7,63.75 +3577,30,2.5,111.05,1.7,63.75 +3578,30,2.5,111.05,1.7,63.75 +3579,30,2.5,111.05,1.7,63.75 +3580,30,2.5,111.05,1.7,63.75 +3581,30,2.5,111.05,1.7,63.75 +3582,30,2.5,111.05,1.7,63.75 +3583,30,2.5,111.05,1.7,63.75 +3584,30,2.5,111.05,1.7,63.75 +3585,30,2.5,111.05,1.7,63.75 +3586,30,2.5,111.05,1.7,63.75 +3587,30,2.5,111.05,1.7,63.75 +3588,30,2.5,111.05,1.7,63.75 +3589,30,2.5,111.05,1.7,63.75 +3590,30,2.5,111.05,1.7,63.75 +3591,30,2.5,111.05,1.7,63.75 +3592,30,2.5,111.05,1.7,63.75 +3593,30,2.5,111.05,1.7,63.75 +3594,30,2.5,111.05,1.7,63.75 +3595,30,2.5,111.05,1.7,63.75 +3596,30,2.5,111.05,1.7,63.75 +3597,30,2.5,111.05,1.7,63.75 +3598,30,2.5,111.05,1.7,63.75 +3599,30,2.5,111.05,1.7,63.75 +3600,30,2.5,111.05,1.7,63.75 +3601,30,2.5,111.05,1.7,63.75 +3602,30,2.5,111.05,1.7,63.75 +3603,30,2.5,111.05,1.7,63.75 +3604,30,2.5,111.05,1.7,63.75 +3605,30,2.5,111.05,1.7,63.75 +3606,30,2.5,111.05,1.7,63.75 +3607,30,2.5,111.05,1.7,63.75 +3608,30,2.5,111.05,1.7,63.75 +3609,30,2.5,111.05,1.7,63.75 +3610,30,2.5,111.05,1.7,63.75 +3611,30,2.5,111.05,1.7,63.75 +3612,30,2.5,111.05,1.7,63.75 +3613,30,2.5,111.05,1.7,63.75 +3614,30,2.5,111.05,1.7,63.75 +3615,30,2.5,111.05,1.7,63.75 +3616,30,2.5,111.05,1.7,63.75 +3617,30,2.5,111.05,1.7,63.75 +3618,30,2.5,111.05,1.7,63.75 +3619,30,2.5,111.05,1.7,63.75 +3620,30,2.5,111.05,1.7,63.75 +3621,30,2.5,111.05,1.7,63.75 +3622,30,2.5,111.05,1.7,63.75 +3623,30,2.5,111.05,1.7,63.75 +3624,30,2.5,111.05,1.7,63.75 +3625,30,2.5,111.05,1.7,63.75 +3626,30,2.5,111.05,1.7,63.75 +3627,30,2.5,111.05,1.7,63.75 +3628,30,2.5,111.05,1.7,63.75 +3629,30,2.5,111.05,1.7,63.75 +3630,30,2.5,111.05,1.7,63.75 +3631,30,2.5,111.05,1.7,63.75 +3632,30,2.5,111.05,1.7,63.75 +3633,30,2.5,111.05,1.7,63.75 +3634,30,2.5,111.05,1.7,63.75 +3635,30,2.5,111.05,1.7,63.75 +3636,30,2.5,111.05,1.7,63.75 +3637,30,2.5,111.05,1.7,63.75 +3638,30,2.5,111.05,1.7,63.75 +3639,30,2.5,111.05,1.7,63.75 +3640,30,2.5,111.05,1.7,63.75 +3641,30,2.5,111.05,1.7,63.75 +3642,30,2.5,111.05,1.7,63.75 +3643,30,2.5,111.05,1.7,63.75 +3644,30,2.5,111.05,1.7,63.75 +3645,30,2.5,111.05,1.7,63.75 +3646,30,2.5,111.05,1.7,63.75 +3647,30,2.5,111.05,1.7,63.75 +3648,30,2.5,111.05,1.7,63.75 +3649,30,2.5,111.05,1.7,63.75 +3650,30,2.5,111.05,1.7,63.75 +3651,30,2.5,111.05,1.7,63.75 +3652,30,2.5,111.05,1.7,63.75 +3653,30,2.5,111.05,1.7,63.75 +3654,30,2.5,111.05,1.7,63.75 +3655,30,2.5,111.05,1.7,63.75 +3656,30,2.5,111.05,1.7,63.75 +3657,30,2.5,111.05,1.7,63.75 +3658,30,2.5,111.05,1.7,63.75 +3659,30,2.5,111.05,1.7,63.75 +3660,30,2.5,111.05,1.7,63.75 +3661,30,2.5,111.05,1.7,63.75 +3662,30,2.5,111.05,1.7,63.75 +3663,30,2.5,111.05,1.7,63.75 +3664,30,2.5,111.05,1.7,63.75 +3665,30,2.5,111.05,1.7,63.75 +3666,30,2.5,111.05,1.7,63.75 +3667,30,2.5,111.05,1.7,63.75 +3668,30,2.5,111.05,1.7,63.75 +3669,30,2.5,111.05,1.7,63.75 +3670,30,2.5,111.05,1.7,63.75 +3671,30,2.5,111.05,1.7,63.75 +3672,30,2.5,111.05,1.7,63.75 +3673,30,2.5,111.05,1.7,63.75 +3674,30,2.5,111.05,1.7,63.75 +3675,30,2.5,111.05,1.7,63.75 +3676,30,2.5,111.05,1.7,63.75 +3677,30,2.5,111.05,1.7,63.75 +3678,30,2.5,111.05,1.7,63.75 +3679,30,2.5,111.05,1.7,63.75 +3680,30,2.5,111.05,1.7,63.75 +3681,30,2.5,111.05,1.7,63.75 +3682,30,2.5,111.05,1.7,63.75 +3683,30,2.5,111.05,1.7,63.75 +3684,30,2.5,111.05,1.7,63.75 +3685,30,2.5,111.05,1.7,63.75 +3686,30,2.5,111.05,1.7,63.75 +3687,30,2.5,111.05,1.7,63.75 +3688,30,2.5,111.05,1.7,63.75 +3689,30,2.5,111.05,1.7,63.75 +3690,30,2.5,111.05,1.7,63.75 +3691,30,2.5,111.05,1.7,63.75 +3692,30,2.5,111.05,1.7,63.75 +3693,30,2.5,111.05,1.7,63.75 +3694,30,2.5,111.05,1.7,63.75 +3695,30,2.5,111.05,1.7,63.75 +3696,30,2.5,111.05,1.7,63.75 +3697,30,2.5,111.05,1.7,63.75 +3698,30,2.5,111.05,1.7,63.75 +3699,30,2.5,111.05,1.7,63.75 +3700,30,2.5,111.05,1.7,63.75 +3701,30,2.5,111.05,1.7,63.75 +3702,30,2.5,111.05,1.7,63.75 +3703,30,2.5,111.05,1.7,63.75 +3704,30,2.5,111.05,1.7,63.75 +3705,30,2.5,111.05,1.7,63.75 +3706,30,2.5,111.05,1.7,63.75 +3707,30,2.5,111.05,1.7,63.75 +3708,30,2.5,111.05,1.7,63.75 +3709,30,2.5,111.05,1.7,63.75 +3710,30,2.5,111.05,1.7,63.75 +3711,30,2.5,111.05,1.7,63.75 +3712,30,2.5,111.05,1.7,63.75 +3713,30,2.5,111.05,1.7,63.75 +3714,30,2.5,111.05,1.7,63.75 +3715,30,2.5,111.05,1.7,63.75 +3716,30,2.5,111.05,1.7,63.75 +3717,30,2.5,111.05,1.7,63.75 +3718,30,2.5,111.05,1.7,63.75 +3719,30,2.5,111.05,1.7,63.75 +3720,30,2.5,111.05,1.7,63.75 +3721,30,2.5,111.05,1.7,63.75 +3722,30,2.5,111.05,1.7,63.75 +3723,30,2.5,111.05,1.7,63.75 +3724,30,2.5,111.05,1.7,63.75 +3725,30,2.5,111.05,1.7,63.75 +3726,30,2.5,111.05,1.7,63.75 +3727,30,2.5,111.05,1.7,63.75 +3728,30,2.5,111.05,1.7,63.75 +3729,30,2.5,111.05,1.7,63.75 +3730,30,2.5,111.05,1.7,63.75 +3731,30,2.5,111.05,1.7,63.75 +3732,30,2.5,111.05,1.7,63.75 +3733,30,2.5,111.05,1.7,63.75 +3734,30,2.5,111.05,1.7,63.75 +3735,30,2.5,111.05,1.7,63.75 +3736,30,2.5,111.05,1.7,63.75 +3737,30,2.5,111.05,1.7,63.75 +3738,30,2.5,111.05,1.7,63.75 +3739,30,2.5,111.05,1.7,63.75 +3740,30,2.5,111.05,1.7,63.75 +3741,30,2.5,111.05,1.7,63.75 +3742,30,2.5,111.05,1.7,63.75 +3743,30,2.5,111.05,1.7,63.75 +3744,30,2.5,111.05,1.7,63.75 +3745,30,2.5,111.05,1.7,63.75 +3746,30,2.5,111.05,1.7,63.75 +3747,30,2.5,111.05,1.7,63.75 +3748,30,2.5,111.05,1.7,63.75 +3749,30,2.5,111.05,1.7,63.75 +3750,30,2.5,111.05,1.7,63.75 +3751,30,2.5,111.05,1.7,63.75 +3752,30,2.5,111.05,1.7,63.75 +3753,30,2.5,111.05,1.7,63.75 +3754,30,2.5,111.05,1.7,63.75 +3755,30,2.5,111.05,1.7,63.75 +3756,30,2.5,111.05,1.7,63.75 +3757,30,2.5,111.05,1.7,63.75 +3758,30,2.5,111.05,1.7,63.75 +3759,30,2.5,111.05,1.7,63.75 +3760,30,2.5,111.05,1.7,63.75 +3761,30,2.5,111.05,1.7,63.75 +3762,30,2.5,111.05,1.7,63.75 +3763,30,2.5,111.05,1.7,63.75 +3764,30,2.5,111.05,1.7,63.75 +3765,30,2.5,111.05,1.7,63.75 +3766,30,2.5,111.05,1.7,63.75 +3767,30,2.5,111.05,1.7,63.75 +3768,30,2.5,111.05,1.7,63.75 +3769,30,2.5,111.05,1.7,63.75 +3770,30,2.5,111.05,1.7,63.75 +3771,30,2.5,111.05,1.7,63.75 +3772,30,2.5,111.05,1.7,63.75 +3773,30,2.5,111.05,1.7,63.75 +3774,30,2.5,111.05,1.7,63.75 +3775,30,2.5,111.05,1.7,63.75 +3776,30,2.5,111.05,1.7,63.75 +3777,30,2.5,111.05,1.7,63.75 +3778,30,2.5,111.05,1.7,63.75 +3779,30,2.5,111.05,1.7,63.75 +3780,30,2.5,111.05,1.7,63.75 +3781,30,2.5,111.05,1.7,63.75 +3782,30,2.5,111.05,1.7,63.75 +3783,30,2.5,111.05,1.7,63.75 +3784,30,2.5,111.05,1.7,63.75 +3785,30,2.5,111.05,1.7,63.75 +3786,30,2.5,111.05,1.7,63.75 +3787,30,2.5,111.05,1.7,63.75 +3788,30,2.5,111.05,1.7,63.75 +3789,30,2.5,111.05,1.7,63.75 +3790,30,2.5,111.05,1.7,63.75 +3791,30,2.5,111.05,1.7,63.75 +3792,30,2.5,111.05,1.7,63.75 +3793,30,2.5,111.05,1.7,63.75 +3794,30,2.5,111.05,1.7,63.75 +3795,30,2.5,111.05,1.7,63.75 +3796,30,2.5,111.05,1.7,63.75 +3797,30,2.5,111.05,1.7,63.75 +3798,30,2.5,111.05,1.7,63.75 +3799,30,2.5,111.05,1.7,63.75 +3800,30,2.5,111.05,1.7,63.75 +3801,30,2.5,111.05,1.7,63.75 +3802,30,2.5,111.05,1.7,63.75 +3803,30,2.5,111.05,1.7,63.75 +3804,30,2.5,111.05,1.7,63.75 +3805,30,2.5,111.05,1.7,63.75 +3806,30,2.5,111.05,1.7,63.75 +3807,30,2.5,111.05,1.7,63.75 +3808,30,2.5,111.05,1.7,63.75 +3809,30,2.5,111.05,1.7,63.75 +3810,30,2.5,111.05,1.7,63.75 +3811,30,2.5,111.05,1.7,63.75 +3812,30,2.5,111.05,1.7,63.75 +3813,30,2.5,111.05,1.7,63.75 +3814,30,2.5,111.05,1.7,63.75 +3815,30,2.5,111.05,1.7,63.75 +3816,30,2.5,111.05,1.7,63.75 +3817,30,2.5,111.05,1.7,63.75 +3818,30,2.5,111.05,1.7,63.75 +3819,30,2.5,111.05,1.7,63.75 +3820,30,2.5,111.05,1.7,63.75 +3821,30,2.5,111.05,1.7,63.75 +3822,30,2.5,111.05,1.7,63.75 +3823,30,2.5,111.05,1.7,63.75 +3824,30,2.5,111.05,1.7,63.75 +3825,30,2.5,111.05,1.7,63.75 +3826,30,2.5,111.05,1.7,63.75 +3827,30,2.5,111.05,1.7,63.75 +3828,30,2.5,111.05,1.7,63.75 +3829,30,2.5,111.05,1.7,63.75 +3830,30,2.5,111.05,1.7,63.75 +3831,30,2.5,111.05,1.7,63.75 +3832,30,2.5,111.05,1.7,63.75 +3833,30,2.5,111.05,1.7,63.75 +3834,30,2.5,111.05,1.7,63.75 +3835,30,2.5,111.05,1.7,63.75 +3836,30,2.5,111.05,1.7,63.75 +3837,30,2.5,111.05,1.7,63.75 +3838,30,2.5,111.05,1.7,63.75 +3839,30,2.5,111.05,1.7,63.75 +3840,30,2.5,111.05,1.7,63.75 +3841,30,2.5,111.05,1.7,63.75 +3842,30,2.5,111.05,1.7,63.75 +3843,30,2.5,111.05,1.7,63.75 +3844,30,2.5,111.05,1.7,63.75 +3845,30,2.5,111.05,1.7,63.75 +3846,30,2.5,111.05,1.7,63.75 +3847,30,2.5,111.05,1.7,63.75 +3848,30,2.5,111.05,1.7,63.75 +3849,30,2.5,111.05,1.7,63.75 +3850,30,2.5,111.05,1.7,63.75 +3851,30,2.5,111.05,1.7,63.75 +3852,30,2.5,111.05,1.7,63.75 +3853,30,2.5,111.05,1.7,63.75 +3854,30,2.5,111.05,1.7,63.75 +3855,30,2.5,111.05,1.7,63.75 +3856,30,2.5,111.05,1.7,63.75 +3857,30,2.5,111.05,1.7,63.75 +3858,30,2.5,111.05,1.7,63.75 +3859,30,2.5,111.05,1.7,63.75 +3860,30,2.5,111.05,1.7,63.75 +3861,30,2.5,111.05,1.7,63.75 +3862,30,2.5,111.05,1.7,63.75 +3863,30,2.5,111.05,1.7,63.75 +3864,30,2.5,111.05,1.7,63.75 +3865,30,2.5,111.05,1.7,63.75 +3866,30,2.5,111.05,1.7,63.75 +3867,30,2.5,111.05,1.7,63.75 +3868,30,2.5,111.05,1.7,63.75 +3869,30,2.5,111.05,1.7,63.75 +3870,30,2.5,111.05,1.7,63.75 +3871,30,2.5,111.05,1.7,63.75 +3872,30,2.5,111.05,1.7,63.75 +3873,30,2.5,111.05,1.7,63.75 +3874,30,2.5,111.05,1.7,63.75 +3875,30,2.5,111.05,1.7,63.75 +3876,30,2.5,111.05,1.7,63.75 +3877,30,2.5,111.05,1.7,63.75 +3878,30,2.5,111.05,1.7,63.75 +3879,30,2.5,111.05,1.7,63.75 +3880,30,2.5,111.05,1.7,63.75 +3881,30,2.5,111.05,1.7,63.75 +3882,30,2.5,111.05,1.7,63.75 +3883,30,2.5,111.05,1.7,63.75 +3884,30,2.5,111.05,1.7,63.75 +3885,30,2.5,111.05,1.7,63.75 +3886,30,2.5,111.05,1.7,63.75 +3887,30,2.5,111.05,1.7,63.75 +3888,30,2.5,111.05,1.7,63.75 +3889,30,2.5,111.05,1.7,63.75 +3890,30,2.5,111.05,1.7,63.75 +3891,30,2.5,111.05,1.7,63.75 +3892,30,2.5,111.05,1.7,63.75 +3893,30,2.5,111.05,1.7,63.75 +3894,30,2.5,111.05,1.7,63.75 +3895,30,2.5,111.05,1.7,63.75 +3896,30,2.5,111.05,1.7,63.75 +3897,30,2.5,111.05,1.7,63.75 +3898,30,2.5,111.05,1.7,63.75 +3899,30,2.5,111.05,1.7,63.75 +3900,30,2.5,111.05,1.7,63.75 +3901,30,2.5,111.05,1.7,63.75 +3902,30,2.5,111.05,1.7,63.75 +3903,30,2.5,111.05,1.7,63.75 +3904,30,2.5,111.05,1.7,63.75 +3905,30,2.5,111.05,1.7,63.75 +3906,30,2.5,111.05,1.7,63.75 +3907,30,2.5,111.05,1.7,63.75 +3908,30,2.5,111.05,1.7,63.75 +3909,30,2.5,111.05,1.7,63.75 +3910,30,2.5,111.05,1.7,63.75 +3911,30,2.5,111.05,1.7,63.75 +3912,30,2.5,111.05,1.7,63.75 +3913,30,2.5,111.05,1.7,63.75 +3914,30,2.5,111.05,1.7,63.75 +3915,30,2.5,111.05,1.7,63.75 +3916,30,2.5,111.05,1.7,63.75 +3917,30,2.5,111.05,1.7,63.75 +3918,30,2.5,111.05,1.7,63.75 +3919,30,2.5,111.05,1.7,63.75 +3920,30,2.5,111.05,1.7,63.75 +3921,30,2.5,111.05,1.7,63.75 +3922,30,2.5,111.05,1.7,63.75 +3923,30,2.5,111.05,1.7,63.75 +3924,30,2.5,111.05,1.7,63.75 +3925,30,2.5,111.05,1.7,63.75 +3926,30,2.5,111.05,1.7,63.75 +3927,30,2.5,111.05,1.7,63.75 +3928,30,2.5,111.05,1.7,63.75 +3929,30,2.5,111.05,1.7,63.75 +3930,30,2.5,111.05,1.7,63.75 +3931,30,2.5,111.05,1.7,63.75 +3932,30,2.5,111.05,1.7,63.75 +3933,30,2.5,111.05,1.7,63.75 +3934,30,2.5,111.05,1.7,63.75 +3935,30,2.5,111.05,1.7,63.75 +3936,30,2.5,111.05,1.7,63.75 +3937,30,2.5,111.05,1.7,63.75 +3938,30,2.5,111.05,1.7,63.75 +3939,30,2.5,111.05,1.7,63.75 +3940,30,2.5,111.05,1.7,63.75 +3941,30,2.5,111.05,1.7,63.75 +3942,30,2.5,111.05,1.7,63.75 +3943,30,2.5,111.05,1.7,63.75 +3944,30,2.5,111.05,1.7,63.75 +3945,30,2.5,111.05,1.7,63.75 +3946,30,2.5,111.05,1.7,63.75 +3947,30,2.5,111.05,1.7,63.75 +3948,30,2.5,111.05,1.7,63.75 +3949,30,2.5,111.05,1.7,63.75 +3950,30,2.5,111.05,1.7,63.75 +3951,30,2.5,111.05,1.7,63.75 +3952,30,2.5,111.05,1.7,63.75 +3953,30,2.5,111.05,1.7,63.75 +3954,30,2.5,111.05,1.7,63.75 +3955,30,2.5,111.05,1.7,63.75 +3956,30,2.5,111.05,1.7,63.75 +3957,30,2.5,111.05,1.7,63.75 +3958,30,2.5,111.05,1.7,63.75 +3959,30,2.5,111.05,1.7,63.75 +3960,30,2.5,111.05,1.7,63.75 +3961,30,2.5,111.05,1.7,63.75 +3962,30,2.5,111.05,1.7,63.75 +3963,30,2.5,111.05,1.7,63.75 +3964,30,2.5,111.05,1.7,63.75 +3965,30,2.5,111.05,1.7,63.75 +3966,30,2.5,111.05,1.7,63.75 +3967,30,2.5,111.05,1.7,63.75 +3968,30,2.5,111.05,1.7,63.75 +3969,30,2.5,111.05,1.7,63.75 +3970,30,2.5,111.05,1.7,63.75 +3971,30,2.5,111.05,1.7,63.75 +3972,30,2.5,111.05,1.7,63.75 +3973,30,2.5,111.05,1.7,63.75 +3974,30,2.5,111.05,1.7,63.75 +3975,30,2.5,111.05,1.7,63.75 +3976,30,2.5,111.05,1.7,63.75 +3977,30,2.5,111.05,1.7,63.75 +3978,30,2.5,111.05,1.7,63.75 +3979,30,2.5,111.05,1.7,63.75 +3980,30,2.5,111.05,1.7,63.75 +3981,30,2.5,111.05,1.7,63.75 +3982,30,2.5,111.05,1.7,63.75 +3983,30,2.5,111.05,1.7,63.75 +3984,30,2.5,111.05,1.7,63.75 +3985,30,2.5,111.05,1.7,63.75 +3986,30,2.5,111.05,1.7,63.75 +3987,30,2.5,111.05,1.7,63.75 +3988,30,2.5,111.05,1.7,63.75 +3989,30,2.5,111.05,1.7,63.75 +3990,30,2.5,111.05,1.7,63.75 +3991,30,2.5,111.05,1.7,63.75 +3992,30,2.5,111.05,1.7,63.75 +3993,30,2.5,111.05,1.7,63.75 +3994,30,2.5,111.05,1.7,63.75 +3995,30,2.5,111.05,1.7,63.75 +3996,30,2.5,111.05,1.7,63.75 +3997,30,2.5,111.05,1.7,63.75 +3998,30,2.5,111.05,1.7,63.75 +3999,30,2.5,111.05,1.7,63.75 +4000,30,2.5,111.05,1.7,63.75 +4001,30,2.5,111.05,1.7,63.75 +4002,30,2.5,111.05,1.7,63.75 +4003,30,2.5,111.05,1.7,63.75 +4004,30,2.5,111.05,1.7,63.75 +4005,30,2.5,111.05,1.7,63.75 +4006,30,2.5,111.05,1.7,63.75 +4007,30,2.5,111.05,1.7,63.75 +4008,30,2.5,111.05,1.7,63.75 +4009,30,2.5,111.05,1.7,63.75 +4010,30,2.5,111.05,1.7,63.75 +4011,30,2.5,111.05,1.7,63.75 +4012,30,2.5,111.05,1.7,63.75 +4013,30,2.5,111.05,1.7,63.75 +4014,30,2.5,111.05,1.7,63.75 +4015,30,2.5,111.05,1.7,63.75 +4016,30,2.5,111.05,1.7,63.75 +4017,30,2.5,111.05,1.7,63.75 +4018,30,2.5,111.05,1.7,63.75 +4019,30,2.5,111.05,1.7,63.75 +4020,30,2.5,111.05,1.7,63.75 +4021,30,2.5,111.05,1.7,63.75 +4022,30,2.5,111.05,1.7,63.75 +4023,30,2.5,111.05,1.7,63.75 +4024,30,2.5,111.05,1.7,63.75 +4025,30,2.5,111.05,1.7,63.75 +4026,30,2.5,111.05,1.7,63.75 +4027,30,2.5,111.05,1.7,63.75 +4028,30,2.5,111.05,1.7,63.75 +4029,30,2.5,111.05,1.7,63.75 +4030,30,2.5,111.05,1.7,63.75 +4031,30,2.5,111.05,1.7,63.75 +4032,30,2.5,111.05,1.7,63.75 +4033,30,2.5,111.05,1.7,63.75 +4034,30,2.5,111.05,1.7,63.75 +4035,30,2.5,111.05,1.7,63.75 +4036,30,2.5,111.05,1.7,63.75 +4037,30,2.5,111.05,1.7,63.75 +4038,30,2.5,111.05,1.7,63.75 +4039,30,2.5,111.05,1.7,63.75 +4040,30,2.5,111.05,1.7,63.75 +4041,30,2.5,111.05,1.7,63.75 +4042,30,2.5,111.05,1.7,63.75 +4043,30,2.5,111.05,1.7,63.75 +4044,30,2.5,111.05,1.7,63.75 +4045,30,2.5,111.05,1.7,63.75 +4046,30,2.5,111.05,1.7,63.75 +4047,30,2.5,111.05,1.7,63.75 +4048,30,2.5,111.05,1.7,63.75 +4049,30,2.5,111.05,1.7,63.75 +4050,30,2.5,111.05,1.7,63.75 +4051,30,2.5,111.05,1.7,63.75 +4052,30,2.5,111.05,1.7,63.75 +4053,30,2.5,111.05,1.7,63.75 +4054,30,2.5,111.05,1.7,63.75 +4055,30,2.5,111.05,1.7,63.75 +4056,30,2.5,111.05,1.7,63.75 +4057,30,2.5,111.05,1.7,63.75 +4058,30,2.5,111.05,1.7,63.75 +4059,30,2.5,111.05,1.7,63.75 +4060,30,2.5,111.05,1.7,63.75 +4061,30,2.5,111.05,1.7,63.75 +4062,30,2.5,111.05,1.7,63.75 +4063,30,2.5,111.05,1.7,63.75 +4064,30,2.5,111.05,1.7,63.75 +4065,30,2.5,111.05,1.7,63.75 +4066,30,2.5,111.05,1.7,63.75 +4067,30,2.5,111.05,1.7,63.75 +4068,30,2.5,111.05,1.7,63.75 +4069,30,2.5,111.05,1.7,63.75 +4070,30,2.5,111.05,1.7,63.75 +4071,30,2.5,111.05,1.7,63.75 +4072,30,2.5,111.05,1.7,63.75 +4073,30,2.5,111.05,1.7,63.75 +4074,30,2.5,111.05,1.7,63.75 +4075,30,2.5,111.05,1.7,63.75 +4076,30,2.5,111.05,1.7,63.75 +4077,30,2.5,111.05,1.7,63.75 +4078,30,2.5,111.05,1.7,63.75 +4079,30,2.5,111.05,1.7,63.75 +4080,30,2.5,111.05,1.7,63.75 +4081,30,2.5,111.05,1.7,63.75 +4082,30,2.5,111.05,1.7,63.75 +4083,30,2.5,111.05,1.7,63.75 +4084,30,2.5,111.05,1.7,63.75 +4085,30,2.5,111.05,1.7,63.75 +4086,30,2.5,111.05,1.7,63.75 +4087,30,2.5,111.05,1.7,63.75 +4088,30,2.5,111.05,1.7,63.75 +4089,30,2.5,111.05,1.7,63.75 +4090,30,2.5,111.05,1.7,63.75 +4091,30,2.5,111.05,1.7,63.75 +4092,30,2.5,111.05,1.7,63.75 +4093,30,2.5,111.05,1.7,63.75 +4094,30,2.5,111.05,1.7,63.75 +4095,30,2.5,111.05,1.7,63.75 +4096,30,2.5,111.05,1.7,63.75 +4097,30,2.5,111.05,1.7,63.75 +4098,30,2.5,111.05,1.7,63.75 +4099,30,2.5,111.05,1.7,63.75 +4100,30,2.5,111.05,1.7,63.75 +4101,30,2.5,111.05,1.7,63.75 +4102,30,2.5,111.05,1.7,63.75 +4103,30,2.5,111.05,1.7,63.75 +4104,30,2.5,111.05,1.7,63.75 +4105,30,2.5,111.05,1.7,63.75 +4106,30,2.5,111.05,1.7,63.75 +4107,30,2.5,111.05,1.7,63.75 +4108,30,2.5,111.05,1.7,63.75 +4109,30,2.5,111.05,1.7,63.75 +4110,30,2.5,111.05,1.7,63.75 +4111,30,2.5,111.05,1.7,63.75 +4112,30,2.5,111.05,1.7,63.75 +4113,30,2.5,111.05,1.7,63.75 +4114,30,2.5,111.05,1.7,63.75 +4115,30,2.5,111.05,1.7,63.75 +4116,30,2.5,111.05,1.7,63.75 +4117,30,2.5,111.05,1.7,63.75 +4118,30,2.5,111.05,1.7,63.75 +4119,30,2.5,111.05,1.7,63.75 +4120,30,2.5,111.05,1.7,63.75 +4121,30,2.5,111.05,1.7,63.75 +4122,30,2.5,111.05,1.7,63.75 +4123,30,2.5,111.05,1.7,63.75 +4124,30,2.5,111.05,1.7,63.75 +4125,30,2.5,111.05,1.7,63.75 +4126,30,2.5,111.05,1.7,63.75 +4127,30,2.5,111.05,1.7,63.75 +4128,30,2.5,111.05,1.7,63.75 +4129,30,2.5,111.05,1.7,63.75 +4130,30,2.5,111.05,1.7,63.75 +4131,30,2.5,111.05,1.7,63.75 +4132,30,2.5,111.05,1.7,63.75 +4133,30,2.5,111.05,1.7,63.75 +4134,30,2.5,111.05,1.7,63.75 +4135,30,2.5,111.05,1.7,63.75 +4136,30,2.5,111.05,1.7,63.75 +4137,30,2.5,111.05,1.7,63.75 +4138,30,2.5,111.05,1.7,63.75 +4139,30,2.5,111.05,1.7,63.75 +4140,30,2.5,111.05,1.7,63.75 +4141,30,2.5,111.05,1.7,63.75 +4142,30,2.5,111.05,1.7,63.75 +4143,30,2.5,111.05,1.7,63.75 +4144,30,2.5,111.05,1.7,63.75 +4145,30,2.5,111.05,1.7,63.75 +4146,30,2.5,111.05,1.7,63.75 +4147,30,2.5,111.05,1.7,63.75 +4148,30,2.5,111.05,1.7,63.75 +4149,30,2.5,111.05,1.7,63.75 +4150,30,2.5,111.05,1.7,63.75 +4151,30,2.5,111.05,1.7,63.75 +4152,30,2.5,111.05,1.7,63.75 +4153,30,2.5,111.05,1.7,63.75 +4154,30,2.5,111.05,1.7,63.75 +4155,30,2.5,111.05,1.7,63.75 +4156,30,2.5,111.05,1.7,63.75 +4157,30,2.5,111.05,1.7,63.75 +4158,30,2.5,111.05,1.7,63.75 +4159,30,2.5,111.05,1.7,63.75 +4160,30,2.5,111.05,1.7,63.75 +4161,30,2.5,111.05,1.7,63.75 +4162,30,2.5,111.05,1.7,63.75 +4163,30,2.5,111.05,1.7,63.75 +4164,30,2.5,111.05,1.7,63.75 +4165,30,2.5,111.05,1.7,63.75 +4166,30,2.5,111.05,1.7,63.75 +4167,30,2.5,111.05,1.7,63.75 +4168,30,2.5,111.05,1.7,63.75 +4169,30,2.5,111.05,1.7,63.75 +4170,30,2.5,111.05,1.7,63.75 +4171,30,2.5,111.05,1.7,63.75 +4172,30,2.5,111.05,1.7,63.75 +4173,30,2.5,111.05,1.7,63.75 +4174,30,2.5,111.05,1.7,63.75 +4175,30,2.5,111.05,1.7,63.75 +4176,30,2.5,111.05,1.7,63.75 +4177,30,2.5,111.05,1.7,63.75 +4178,30,2.5,111.05,1.7,63.75 +4179,30,2.5,111.05,1.7,63.75 +4180,30,2.5,111.05,1.7,63.75 +4181,30,2.5,111.05,1.7,63.75 +4182,30,2.5,111.05,1.7,63.75 +4183,30,2.5,111.05,1.7,63.75 +4184,30,2.5,111.05,1.7,63.75 +4185,30,2.5,111.05,1.7,63.75 +4186,30,2.5,111.05,1.7,63.75 +4187,30,2.5,111.05,1.7,63.75 +4188,30,2.5,111.05,1.7,63.75 +4189,30,2.5,111.05,1.7,63.75 +4190,30,2.5,111.05,1.7,63.75 +4191,30,2.5,111.05,1.7,63.75 +4192,30,2.5,111.05,1.7,63.75 +4193,30,2.5,111.05,1.7,63.75 +4194,30,2.5,111.05,1.7,63.75 +4195,30,2.5,111.05,1.7,63.75 +4196,30,2.5,111.05,1.7,63.75 +4197,30,2.5,111.05,1.7,63.75 +4198,30,2.5,111.05,1.7,63.75 +4199,30,2.5,111.05,1.7,63.75 +4200,30,2.5,111.05,1.7,63.75 +4201,30,2.5,111.05,1.7,63.75 +4202,30,2.5,111.05,1.7,63.75 +4203,30,2.5,111.05,1.7,63.75 +4204,30,2.5,111.05,1.7,63.75 +4205,30,2.5,111.05,1.7,63.75 +4206,30,2.5,111.05,1.7,63.75 +4207,30,2.5,111.05,1.7,63.75 +4208,30,2.5,111.05,1.7,63.75 +4209,30,2.5,111.05,1.7,63.75 +4210,30,2.5,111.05,1.7,63.75 +4211,30,2.5,111.05,1.7,63.75 +4212,30,2.5,111.05,1.7,63.75 +4213,30,2.5,111.05,1.7,63.75 +4214,30,2.5,111.05,1.7,63.75 +4215,30,2.5,111.05,1.7,63.75 +4216,30,2.5,111.05,1.7,63.75 +4217,30,2.5,111.05,1.7,63.75 +4218,30,2.5,111.05,1.7,63.75 +4219,30,2.5,111.05,1.7,63.75 +4220,30,2.5,111.05,1.7,63.75 +4221,30,2.5,111.05,1.7,63.75 +4222,30,2.5,111.05,1.7,63.75 +4223,30,2.5,111.05,1.7,63.75 +4224,30,2.5,111.05,1.7,63.75 +4225,30,2.5,111.05,1.7,63.75 +4226,30,2.5,111.05,1.7,63.75 +4227,30,2.5,111.05,1.7,63.75 +4228,30,2.5,111.05,1.7,63.75 +4229,30,2.5,111.05,1.7,63.75 +4230,30,2.5,111.05,1.7,63.75 +4231,30,2.5,111.05,1.7,63.75 +4232,30,2.5,111.05,1.7,63.75 +4233,30,2.5,111.05,1.7,63.75 +4234,30,2.5,111.05,1.7,63.75 +4235,30,2.5,111.05,1.7,63.75 +4236,30,2.5,111.05,1.7,63.75 +4237,30,2.5,111.05,1.7,63.75 +4238,30,2.5,111.05,1.7,63.75 +4239,30,2.5,111.05,1.7,63.75 +4240,30,2.5,111.05,1.7,63.75 +4241,30,2.5,111.05,1.7,63.75 +4242,30,2.5,111.05,1.7,63.75 +4243,30,2.5,111.05,1.7,63.75 +4244,30,2.5,111.05,1.7,63.75 +4245,30,2.5,111.05,1.7,63.75 +4246,30,2.5,111.05,1.7,63.75 +4247,30,2.5,111.05,1.7,63.75 +4248,30,2.5,111.05,1.7,63.75 +4249,30,2.5,111.05,1.7,63.75 +4250,30,2.5,111.05,1.7,63.75 +4251,30,2.5,111.05,1.7,63.75 +4252,30,2.5,111.05,1.7,63.75 +4253,30,2.5,111.05,1.7,63.75 +4254,30,2.5,111.05,1.7,63.75 +4255,30,2.5,111.05,1.7,63.75 +4256,30,2.5,111.05,1.7,63.75 +4257,30,2.5,111.05,1.7,63.75 +4258,30,2.5,111.05,1.7,63.75 +4259,30,2.5,111.05,1.7,63.75 +4260,30,2.5,111.05,1.7,63.75 +4261,30,2.5,111.05,1.7,63.75 +4262,30,2.5,111.05,1.7,63.75 +4263,30,2.5,111.05,1.7,63.75 +4264,30,2.5,111.05,1.7,63.75 +4265,30,2.5,111.05,1.7,63.75 +4266,30,2.5,111.05,1.7,63.75 +4267,30,2.5,111.05,1.7,63.75 +4268,30,2.5,111.05,1.7,63.75 +4269,30,2.5,111.05,1.7,63.75 +4270,30,2.5,111.05,1.7,63.75 +4271,30,2.5,111.05,1.7,63.75 +4272,30,2.5,111.05,1.7,63.75 +4273,30,2.5,111.05,1.7,63.75 +4274,30,2.5,111.05,1.7,63.75 +4275,30,2.5,111.05,1.7,63.75 +4276,30,2.5,111.05,1.7,63.75 +4277,30,2.5,111.05,1.7,63.75 +4278,30,2.5,111.05,1.7,63.75 +4279,30,2.5,111.05,1.7,63.75 +4280,30,2.5,111.05,1.7,63.75 +4281,30,2.5,111.05,1.7,63.75 +4282,30,2.5,111.05,1.7,63.75 +4283,30,2.5,111.05,1.7,63.75 +4284,30,2.5,111.05,1.7,63.75 +4285,30,2.5,111.05,1.7,63.75 +4286,30,2.5,111.05,1.7,63.75 +4287,30,2.5,111.05,1.7,63.75 +4288,30,2.5,111.05,1.7,63.75 +4289,30,2.5,111.05,1.7,63.75 +4290,30,2.5,111.05,1.7,63.75 +4291,30,2.5,111.05,1.7,63.75 +4292,30,2.5,111.05,1.7,63.75 +4293,30,2.5,111.05,1.7,63.75 +4294,30,2.5,111.05,1.7,63.75 +4295,30,2.5,111.05,1.7,63.75 +4296,30,2.5,111.05,1.7,63.75 +4297,30,2.5,111.05,1.7,63.75 +4298,30,2.5,111.05,1.7,63.75 +4299,30,2.5,111.05,1.7,63.75 +4300,30,2.5,111.05,1.7,63.75 +4301,30,2.5,111.05,1.7,63.75 +4302,30,2.5,111.05,1.7,63.75 +4303,30,2.5,111.05,1.7,63.75 +4304,30,2.5,111.05,1.7,63.75 +4305,30,2.5,111.05,1.7,63.75 +4306,30,2.5,111.05,1.7,63.75 +4307,30,2.5,111.05,1.7,63.75 +4308,30,2.5,111.05,1.7,63.75 +4309,30,2.5,111.05,1.7,63.75 +4310,30,2.5,111.05,1.7,63.75 +4311,30,2.5,111.05,1.7,63.75 +4312,30,2.5,111.05,1.7,63.75 +4313,30,2.5,111.05,1.7,63.75 +4314,30,2.5,111.05,1.7,63.75 +4315,30,2.5,111.05,1.7,63.75 +4316,30,2.5,111.05,1.7,63.75 +4317,30,2.5,111.05,1.7,63.75 +4318,30,2.5,111.05,1.7,63.75 +4319,30,2.5,111.05,1.7,63.75 +4320,30,2.5,111.05,1.7,63.75 +4321,30,2.5,111.05,1.7,63.75 +4322,30,2.5,111.05,1.7,63.75 +4323,30,2.5,111.05,1.7,63.75 +4324,30,2.5,111.05,1.7,63.75 +4325,30,2.5,111.05,1.7,63.75 +4326,30,2.5,111.05,1.7,63.75 +4327,30,2.5,111.05,1.7,63.75 +4328,30,2.5,111.05,1.7,63.75 +4329,30,2.5,111.05,1.7,63.75 +4330,30,2.5,111.05,1.7,63.75 +4331,30,2.5,111.05,1.7,63.75 +4332,30,2.5,111.05,1.7,63.75 +4333,30,2.5,111.05,1.7,63.75 +4334,30,2.5,111.05,1.7,63.75 +4335,30,2.5,111.05,1.7,63.75 +4336,30,2.5,111.05,1.7,63.75 +4337,30,2.5,111.05,1.7,63.75 +4338,30,2.5,111.05,1.7,63.75 +4339,30,2.5,111.05,1.7,63.75 +4340,30,2.5,111.05,1.7,63.75 +4341,30,2.5,111.05,1.7,63.75 +4342,30,2.5,111.05,1.7,63.75 +4343,30,2.5,111.05,1.7,63.75 +4344,30,2.5,111.05,1.7,63.75 +4345,30,2.5,111.05,1.7,63.75 +4346,30,2.5,111.05,1.7,63.75 +4347,30,2.5,111.05,1.7,63.75 +4348,30,2.5,111.05,1.7,63.75 +4349,30,2.5,111.05,1.7,63.75 +4350,30,2.5,111.05,1.7,63.75 +4351,30,2.5,111.05,1.7,63.75 +4352,30,2.5,111.05,1.7,63.75 +4353,30,2.5,111.05,1.7,63.75 +4354,30,2.5,111.05,1.7,63.75 +4355,30,2.5,111.05,1.7,63.75 +4356,30,2.5,111.05,1.7,63.75 +4357,30,2.5,111.05,1.7,63.75 +4358,30,2.5,111.05,1.7,63.75 +4359,30,2.5,111.05,1.7,63.75 +4360,30,2.5,111.05,1.7,63.75 +4361,30,2.5,111.05,1.7,63.75 +4362,30,2.5,111.05,1.7,63.75 +4363,30,2.5,111.05,1.7,63.75 +4364,30,2.5,111.05,1.7,63.75 +4365,30,2.5,111.05,1.7,63.75 +4366,30,2.5,111.05,1.7,63.75 +4367,30,2.5,111.05,1.7,63.75 +4368,30,2.5,111.05,1.7,63.75 +4369,30,2.5,111.05,1.7,63.75 +4370,30,2.5,111.05,1.7,63.75 +4371,30,2.5,111.05,1.7,63.75 +4372,30,2.5,111.05,1.7,63.75 +4373,30,2.5,111.05,1.7,63.75 +4374,30,2.5,111.05,1.7,63.75 +4375,30,2.5,111.05,1.7,63.75 +4376,30,2.5,111.05,1.7,63.75 +4377,30,2.5,111.05,1.7,63.75 +4378,30,2.5,111.05,1.7,63.75 +4379,30,2.5,111.05,1.7,63.75 +4380,30,2.5,111.05,1.7,63.75 +4381,30,2.5,111.05,1.7,63.75 +4382,30,2.5,111.05,1.7,63.75 +4383,30,2.5,111.05,1.7,63.75 +4384,30,2.5,111.05,1.7,63.75 +4385,30,2.5,111.05,1.7,63.75 +4386,30,2.5,111.05,1.7,63.75 +4387,30,2.5,111.05,1.7,63.75 +4388,30,2.5,111.05,1.7,63.75 +4389,30,2.5,111.05,1.7,63.75 +4390,30,2.5,111.05,1.7,63.75 +4391,30,2.5,111.05,1.7,63.75 +4392,30,2.5,111.05,1.7,63.75 +4393,30,2.5,111.05,1.7,63.75 +4394,30,2.5,111.05,1.7,63.75 +4395,30,2.5,111.05,1.7,63.75 +4396,30,2.5,111.05,1.7,63.75 +4397,30,2.5,111.05,1.7,63.75 +4398,30,2.5,111.05,1.7,63.75 +4399,30,2.5,111.05,1.7,63.75 +4400,30,2.5,111.05,1.7,63.75 +4401,30,2.5,111.05,1.7,63.75 +4402,30,2.5,111.05,1.7,63.75 +4403,30,2.5,111.05,1.7,63.75 +4404,30,2.5,111.05,1.7,63.75 +4405,30,2.5,111.05,1.7,63.75 +4406,30,2.5,111.05,1.7,63.75 +4407,30,2.5,111.05,1.7,63.75 +4408,30,2.5,111.05,1.7,63.75 +4409,30,2.5,111.05,1.7,63.75 +4410,30,2.5,111.05,1.7,63.75 +4411,30,2.5,111.05,1.7,63.75 +4412,30,2.5,111.05,1.7,63.75 +4413,30,2.5,111.05,1.7,63.75 +4414,30,2.5,111.05,1.7,63.75 +4415,30,2.5,111.05,1.7,63.75 +4416,30,2.5,111.05,1.7,63.75 +4417,30,2.5,111.05,1.7,63.75 +4418,30,2.5,111.05,1.7,63.75 +4419,30,2.5,111.05,1.7,63.75 +4420,30,2.5,111.05,1.7,63.75 +4421,30,2.5,111.05,1.7,63.75 +4422,30,2.5,111.05,1.7,63.75 +4423,30,2.5,111.05,1.7,63.75 +4424,30,2.5,111.05,1.7,63.75 +4425,30,2.5,111.05,1.7,63.75 +4426,30,2.5,111.05,1.7,63.75 +4427,30,2.5,111.05,1.7,63.75 +4428,30,2.5,111.05,1.7,63.75 +4429,30,2.5,111.05,1.7,63.75 +4430,30,2.5,111.05,1.7,63.75 +4431,30,2.5,111.05,1.7,63.75 +4432,30,2.5,111.05,1.7,63.75 +4433,30,2.5,111.05,1.7,63.75 +4434,30,2.5,111.05,1.7,63.75 +4435,30,2.5,111.05,1.7,63.75 +4436,30,2.5,111.05,1.7,63.75 +4437,30,2.5,111.05,1.7,63.75 +4438,30,2.5,111.05,1.7,63.75 +4439,30,2.5,111.05,1.7,63.75 +4440,30,2.5,111.05,1.7,63.75 +4441,30,2.5,111.05,1.7,63.75 +4442,30,2.5,111.05,1.7,63.75 +4443,30,2.5,111.05,1.7,63.75 +4444,30,2.5,111.05,1.7,63.75 +4445,30,2.5,111.05,1.7,63.75 +4446,30,2.5,111.05,1.7,63.75 +4447,30,2.5,111.05,1.7,63.75 +4448,30,2.5,111.05,1.7,63.75 +4449,30,2.5,111.05,1.7,63.75 +4450,30,2.5,111.05,1.7,63.75 +4451,30,2.5,111.05,1.7,63.75 +4452,30,2.5,111.05,1.7,63.75 +4453,30,2.5,111.05,1.7,63.75 +4454,30,2.5,111.05,1.7,63.75 +4455,30,2.5,111.05,1.7,63.75 +4456,30,2.5,111.05,1.7,63.75 +4457,30,2.5,111.05,1.7,63.75 +4458,30,2.5,111.05,1.7,63.75 +4459,30,2.5,111.05,1.7,63.75 +4460,30,2.5,111.05,1.7,63.75 +4461,30,2.5,111.05,1.7,63.75 +4462,30,2.5,111.05,1.7,63.75 +4463,30,2.5,111.05,1.7,63.75 +4464,30,2.5,111.05,1.7,63.75 +4465,30,2.5,111.05,1.7,63.75 +4466,30,2.5,111.05,1.7,63.75 +4467,30,2.5,111.05,1.7,63.75 +4468,30,2.5,111.05,1.7,63.75 +4469,30,2.5,111.05,1.7,63.75 +4470,30,2.5,111.05,1.7,63.75 +4471,30,2.5,111.05,1.7,63.75 +4472,30,2.5,111.05,1.7,63.75 +4473,30,2.5,111.05,1.7,63.75 +4474,30,2.5,111.05,1.7,63.75 +4475,30,2.5,111.05,1.7,63.75 +4476,30,2.5,111.05,1.7,63.75 +4477,30,2.5,111.05,1.7,63.75 +4478,30,2.5,111.05,1.7,63.75 +4479,30,2.5,111.05,1.7,63.75 +4480,30,2.5,111.05,1.7,63.75 +4481,30,2.5,111.05,1.7,63.75 +4482,30,2.5,111.05,1.7,63.75 +4483,30,2.5,111.05,1.7,63.75 +4484,30,2.5,111.05,1.7,63.75 +4485,30,2.5,111.05,1.7,63.75 +4486,30,2.5,111.05,1.7,63.75 +4487,30,2.5,111.05,1.7,63.75 +4488,30,2.5,111.05,1.7,63.75 +4489,30,2.5,111.05,1.7,63.75 +4490,30,2.5,111.05,1.7,63.75 +4491,30,2.5,111.05,1.7,63.75 +4492,30,2.5,111.05,1.7,63.75 +4493,30,2.5,111.05,1.7,63.75 +4494,30,2.5,111.05,1.7,63.75 +4495,30,2.5,111.05,1.7,63.75 +4496,30,2.5,111.05,1.7,63.75 +4497,30,2.5,111.05,1.7,63.75 +4498,30,2.5,111.05,1.7,63.75 +4499,30,2.5,111.05,1.7,63.75 +4500,30,2.5,111.05,1.7,63.75 +4501,30,2.5,111.05,1.7,63.75 +4502,30,2.5,111.05,1.7,63.75 +4503,30,2.5,111.05,1.7,63.75 +4504,30,2.5,111.05,1.7,63.75 +4505,30,2.5,111.05,1.7,63.75 +4506,30,2.5,111.05,1.7,63.75 +4507,30,2.5,111.05,1.7,63.75 +4508,30,2.5,111.05,1.7,63.75 +4509,30,2.5,111.05,1.7,63.75 +4510,30,2.5,111.05,1.7,63.75 +4511,30,2.5,111.05,1.7,63.75 +4512,30,2.5,111.05,1.7,63.75 +4513,30,2.5,111.05,1.7,63.75 +4514,30,2.5,111.05,1.7,63.75 +4515,30,2.5,111.05,1.7,63.75 +4516,30,2.5,111.05,1.7,63.75 +4517,30,2.5,111.05,1.7,63.75 +4518,30,2.5,111.05,1.7,63.75 +4519,30,2.5,111.05,1.7,63.75 +4520,30,2.5,111.05,1.7,63.75 +4521,30,2.5,111.05,1.7,63.75 +4522,30,2.5,111.05,1.7,63.75 +4523,30,2.5,111.05,1.7,63.75 +4524,30,2.5,111.05,1.7,63.75 +4525,30,2.5,111.05,1.7,63.75 +4526,30,2.5,111.05,1.7,63.75 +4527,30,2.5,111.05,1.7,63.75 +4528,30,2.5,111.05,1.7,63.75 +4529,30,2.5,111.05,1.7,63.75 +4530,30,2.5,111.05,1.7,63.75 +4531,30,2.5,111.05,1.7,63.75 +4532,30,2.5,111.05,1.7,63.75 +4533,30,2.5,111.05,1.7,63.75 +4534,30,2.5,111.05,1.7,63.75 +4535,30,2.5,111.05,1.7,63.75 +4536,30,2.5,111.05,1.7,63.75 +4537,30,2.5,111.05,1.7,63.75 +4538,30,2.5,111.05,1.7,63.75 +4539,30,2.5,111.05,1.7,63.75 +4540,30,2.5,111.05,1.7,63.75 +4541,30,2.5,111.05,1.7,63.75 +4542,30,2.5,111.05,1.7,63.75 +4543,30,2.5,111.05,1.7,63.75 +4544,30,2.5,111.05,1.7,63.75 +4545,30,2.5,111.05,1.7,63.75 +4546,30,2.5,111.05,1.7,63.75 +4547,30,2.5,111.05,1.7,63.75 +4548,30,2.5,111.05,1.7,63.75 +4549,30,2.5,111.05,1.7,63.75 +4550,30,2.5,111.05,1.7,63.75 +4551,30,2.5,111.05,1.7,63.75 +4552,30,2.5,111.05,1.7,63.75 +4553,30,2.5,111.05,1.7,63.75 +4554,30,2.5,111.05,1.7,63.75 +4555,30,2.5,111.05,1.7,63.75 +4556,30,2.5,111.05,1.7,63.75 +4557,30,2.5,111.05,1.7,63.75 +4558,30,2.5,111.05,1.7,63.75 +4559,30,2.5,111.05,1.7,63.75 +4560,30,2.5,111.05,1.7,63.75 +4561,30,2.5,111.05,1.7,63.75 +4562,30,2.5,111.05,1.7,63.75 +4563,30,2.5,111.05,1.7,63.75 +4564,30,2.5,111.05,1.7,63.75 +4565,30,2.5,111.05,1.7,63.75 +4566,30,2.5,111.05,1.7,63.75 +4567,30,2.5,111.05,1.7,63.75 +4568,30,2.5,111.05,1.7,63.75 +4569,30,2.5,111.05,1.7,63.75 +4570,30,2.5,111.05,1.7,63.75 +4571,30,2.5,111.05,1.7,63.75 +4572,30,2.5,111.05,1.7,63.75 +4573,30,2.5,111.05,1.7,63.75 +4574,30,2.5,111.05,1.7,63.75 +4575,30,2.5,111.05,1.7,63.75 +4576,30,2.5,111.05,1.7,63.75 +4577,30,2.5,111.05,1.7,63.75 +4578,30,2.5,111.05,1.7,63.75 +4579,30,2.5,111.05,1.7,63.75 +4580,30,2.5,111.05,1.7,63.75 +4581,30,2.5,111.05,1.7,63.75 +4582,30,2.5,111.05,1.7,63.75 +4583,30,2.5,111.05,1.7,63.75 +4584,30,2.5,111.05,1.7,63.75 +4585,30,2.5,111.05,1.7,63.75 +4586,30,2.5,111.05,1.7,63.75 +4587,30,2.5,111.05,1.7,63.75 +4588,30,2.5,111.05,1.7,63.75 +4589,30,2.5,111.05,1.7,63.75 +4590,30,2.5,111.05,1.7,63.75 +4591,30,2.5,111.05,1.7,63.75 +4592,30,2.5,111.05,1.7,63.75 +4593,30,2.5,111.05,1.7,63.75 +4594,30,2.5,111.05,1.7,63.75 +4595,30,2.5,111.05,1.7,63.75 +4596,30,2.5,111.05,1.7,63.75 +4597,30,2.5,111.05,1.7,63.75 +4598,30,2.5,111.05,1.7,63.75 +4599,30,2.5,111.05,1.7,63.75 +4600,30,2.5,111.05,1.7,63.75 +4601,30,2.5,111.05,1.7,63.75 +4602,30,2.5,111.05,1.7,63.75 +4603,30,2.5,111.05,1.7,63.75 +4604,30,2.5,111.05,1.7,63.75 +4605,30,2.5,111.05,1.7,63.75 +4606,30,2.5,111.05,1.7,63.75 +4607,30,2.5,111.05,1.7,63.75 +4608,30,2.5,111.05,1.7,63.75 +4609,30,2.5,111.05,1.7,63.75 +4610,30,2.5,111.05,1.7,63.75 +4611,30,2.5,111.05,1.7,63.75 +4612,30,2.5,111.05,1.7,63.75 +4613,30,2.5,111.05,1.7,63.75 +4614,30,2.5,111.05,1.7,63.75 +4615,30,2.5,111.05,1.7,63.75 +4616,30,2.5,111.05,1.7,63.75 +4617,30,2.5,111.05,1.7,63.75 +4618,30,2.5,111.05,1.7,63.75 +4619,30,2.5,111.05,1.7,63.75 +4620,30,2.5,111.05,1.7,63.75 +4621,30,2.5,111.05,1.7,63.75 +4622,30,2.5,111.05,1.7,63.75 +4623,30,2.5,111.05,1.7,63.75 +4624,30,2.5,111.05,1.7,63.75 +4625,30,2.5,111.05,1.7,63.75 +4626,30,2.5,111.05,1.7,63.75 +4627,30,2.5,111.05,1.7,63.75 +4628,30,2.5,111.05,1.7,63.75 +4629,30,2.5,111.05,1.7,63.75 +4630,30,2.5,111.05,1.7,63.75 +4631,30,2.5,111.05,1.7,63.75 +4632,30,2.5,111.05,1.7,63.75 +4633,30,2.5,111.05,1.7,63.75 +4634,30,2.5,111.05,1.7,63.75 +4635,30,2.5,111.05,1.7,63.75 +4636,30,2.5,111.05,1.7,63.75 +4637,30,2.5,111.05,1.7,63.75 +4638,30,2.5,111.05,1.7,63.75 +4639,30,2.5,111.05,1.7,63.75 +4640,30,2.5,111.05,1.7,63.75 +4641,30,2.5,111.05,1.7,63.75 +4642,30,2.5,111.05,1.7,63.75 +4643,30,2.5,111.05,1.7,63.75 +4644,30,2.5,111.05,1.7,63.75 +4645,30,2.5,111.05,1.7,63.75 +4646,30,2.5,111.05,1.7,63.75 +4647,30,2.5,111.05,1.7,63.75 +4648,30,2.5,111.05,1.7,63.75 +4649,30,2.5,111.05,1.7,63.75 +4650,30,2.5,111.05,1.7,63.75 +4651,30,2.5,111.05,1.7,63.75 +4652,30,2.5,111.05,1.7,63.75 +4653,30,2.5,111.05,1.7,63.75 +4654,30,2.5,111.05,1.7,63.75 +4655,30,2.5,111.05,1.7,63.75 +4656,30,2.5,111.05,1.7,63.75 +4657,30,2.5,111.05,1.7,63.75 +4658,30,2.5,111.05,1.7,63.75 +4659,30,2.5,111.05,1.7,63.75 +4660,30,2.5,111.05,1.7,63.75 +4661,30,2.5,111.05,1.7,63.75 +4662,30,2.5,111.05,1.7,63.75 +4663,30,2.5,111.05,1.7,63.75 +4664,30,2.5,111.05,1.7,63.75 +4665,30,2.5,111.05,1.7,63.75 +4666,30,2.5,111.05,1.7,63.75 +4667,30,2.5,111.05,1.7,63.75 +4668,30,2.5,111.05,1.7,63.75 +4669,30,2.5,111.05,1.7,63.75 +4670,30,2.5,111.05,1.7,63.75 +4671,30,2.5,111.05,1.7,63.75 +4672,30,2.5,111.05,1.7,63.75 +4673,30,2.5,111.05,1.7,63.75 +4674,30,2.5,111.05,1.7,63.75 +4675,30,2.5,111.05,1.7,63.75 +4676,30,2.5,111.05,1.7,63.75 +4677,30,2.5,111.05,1.7,63.75 +4678,30,2.5,111.05,1.7,63.75 +4679,30,2.5,111.05,1.7,63.75 +4680,30,2.5,111.05,1.7,63.75 +4681,30,2.5,111.05,1.7,63.75 +4682,30,2.5,111.05,1.7,63.75 +4683,30,2.5,111.05,1.7,63.75 +4684,30,2.5,111.05,1.7,63.75 +4685,30,2.5,111.05,1.7,63.75 +4686,30,2.5,111.05,1.7,63.75 +4687,30,2.5,111.05,1.7,63.75 +4688,30,2.5,111.05,1.7,63.75 +4689,30,2.5,111.05,1.7,63.75 +4690,30,2.5,111.05,1.7,63.75 +4691,30,2.5,111.05,1.7,63.75 +4692,30,2.5,111.05,1.7,63.75 +4693,30,2.5,111.05,1.7,63.75 +4694,30,2.5,111.05,1.7,63.75 +4695,30,2.5,111.05,1.7,63.75 +4696,30,2.5,111.05,1.7,63.75 +4697,30,2.5,111.05,1.7,63.75 +4698,30,2.5,111.05,1.7,63.75 +4699,30,2.5,111.05,1.7,63.75 +4700,30,2.5,111.05,1.7,63.75 +4701,30,2.5,111.05,1.7,63.75 +4702,30,2.5,111.05,1.7,63.75 +4703,30,2.5,111.05,1.7,63.75 +4704,30,2.5,111.05,1.7,63.75 +4705,30,2.5,111.05,1.7,63.75 +4706,30,2.5,111.05,1.7,63.75 +4707,30,2.5,111.05,1.7,63.75 +4708,30,2.5,111.05,1.7,63.75 +4709,30,2.5,111.05,1.7,63.75 +4710,30,2.5,111.05,1.7,63.75 +4711,30,2.5,111.05,1.7,63.75 +4712,30,2.5,111.05,1.7,63.75 +4713,30,2.5,111.05,1.7,63.75 +4714,30,2.5,111.05,1.7,63.75 +4715,30,2.5,111.05,1.7,63.75 +4716,30,2.5,111.05,1.7,63.75 +4717,30,2.5,111.05,1.7,63.75 +4718,30,2.5,111.05,1.7,63.75 +4719,30,2.5,111.05,1.7,63.75 +4720,30,2.5,111.05,1.7,63.75 +4721,30,2.5,111.05,1.7,63.75 +4722,30,2.5,111.05,1.7,63.75 +4723,30,2.5,111.05,1.7,63.75 +4724,30,2.5,111.05,1.7,63.75 +4725,30,2.5,111.05,1.7,63.75 +4726,30,2.5,111.05,1.7,63.75 +4727,30,2.5,111.05,1.7,63.75 +4728,30,2.5,111.05,1.7,63.75 +4729,30,2.5,111.05,1.7,63.75 +4730,30,2.5,111.05,1.7,63.75 +4731,30,2.5,111.05,1.7,63.75 +4732,30,2.5,111.05,1.7,63.75 +4733,30,2.5,111.05,1.7,63.75 +4734,30,2.5,111.05,1.7,63.75 +4735,30,2.5,111.05,1.7,63.75 +4736,30,2.5,111.05,1.7,63.75 +4737,30,2.5,111.05,1.7,63.75 +4738,30,2.5,111.05,1.7,63.75 +4739,30,2.5,111.05,1.7,63.75 +4740,30,2.5,111.05,1.7,63.75 +4741,30,2.5,111.05,1.7,63.75 +4742,30,2.5,111.05,1.7,63.75 +4743,30,2.5,111.05,1.7,63.75 +4744,30,2.5,111.05,1.7,63.75 +4745,30,2.5,111.05,1.7,63.75 +4746,30,2.5,111.05,1.7,63.75 +4747,30,2.5,111.05,1.7,63.75 +4748,30,2.5,111.05,1.7,63.75 +4749,30,2.5,111.05,1.7,63.75 +4750,30,2.5,111.05,1.7,63.75 +4751,30,2.5,111.05,1.7,63.75 +4752,30,2.5,111.05,1.7,63.75 +4753,30,2.5,111.05,1.7,63.75 +4754,30,2.5,111.05,1.7,63.75 +4755,30,2.5,111.05,1.7,63.75 +4756,30,2.5,111.05,1.7,63.75 +4757,30,2.5,111.05,1.7,63.75 +4758,30,2.5,111.05,1.7,63.75 +4759,30,2.5,111.05,1.7,63.75 +4760,30,2.5,111.05,1.7,63.75 +4761,30,2.5,111.05,1.7,63.75 +4762,30,2.5,111.05,1.7,63.75 +4763,30,2.5,111.05,1.7,63.75 +4764,30,2.5,111.05,1.7,63.75 +4765,30,2.5,111.05,1.7,63.75 +4766,30,2.5,111.05,1.7,63.75 +4767,30,2.5,111.05,1.7,63.75 +4768,30,2.5,111.05,1.7,63.75 +4769,30,2.5,111.05,1.7,63.75 +4770,30,2.5,111.05,1.7,63.75 +4771,30,2.5,111.05,1.7,63.75 +4772,30,2.5,111.05,1.7,63.75 +4773,30,2.5,111.05,1.7,63.75 +4774,30,2.5,111.05,1.7,63.75 +4775,30,2.5,111.05,1.7,63.75 +4776,30,2.5,111.05,1.7,63.75 +4777,30,2.5,111.05,1.7,63.75 +4778,30,2.5,111.05,1.7,63.75 +4779,30,2.5,111.05,1.7,63.75 +4780,30,2.5,111.05,1.7,63.75 +4781,30,2.5,111.05,1.7,63.75 +4782,30,2.5,111.05,1.7,63.75 +4783,30,2.5,111.05,1.7,63.75 +4784,30,2.5,111.05,1.7,63.75 +4785,30,2.5,111.05,1.7,63.75 +4786,30,2.5,111.05,1.7,63.75 +4787,30,2.5,111.05,1.7,63.75 +4788,30,2.5,111.05,1.7,63.75 +4789,30,2.5,111.05,1.7,63.75 +4790,30,2.5,111.05,1.7,63.75 +4791,30,2.5,111.05,1.7,63.75 +4792,30,2.5,111.05,1.7,63.75 +4793,30,2.5,111.05,1.7,63.75 +4794,30,2.5,111.05,1.7,63.75 +4795,30,2.5,111.05,1.7,63.75 +4796,30,2.5,111.05,1.7,63.75 +4797,30,2.5,111.05,1.7,63.75 +4798,30,2.5,111.05,1.7,63.75 +4799,30,2.5,111.05,1.7,63.75 +4800,30,2.5,111.05,1.7,63.75 +4801,30,2.5,111.05,1.7,63.75 +4802,30,2.5,111.05,1.7,63.75 +4803,30,2.5,111.05,1.7,63.75 +4804,30,2.5,111.05,1.7,63.75 +4805,30,2.5,111.05,1.7,63.75 +4806,30,2.5,111.05,1.7,63.75 +4807,30,2.5,111.05,1.7,63.75 +4808,30,2.5,111.05,1.7,63.75 +4809,30,2.5,111.05,1.7,63.75 +4810,30,2.5,111.05,1.7,63.75 +4811,30,2.5,111.05,1.7,63.75 +4812,30,2.5,111.05,1.7,63.75 +4813,30,2.5,111.05,1.7,63.75 +4814,30,2.5,111.05,1.7,63.75 +4815,30,2.5,111.05,1.7,63.75 +4816,30,2.5,111.05,1.7,63.75 +4817,30,2.5,111.05,1.7,63.75 +4818,30,2.5,111.05,1.7,63.75 +4819,30,2.5,111.05,1.7,63.75 +4820,30,2.5,111.05,1.7,63.75 +4821,30,2.5,111.05,1.7,63.75 +4822,30,2.5,111.05,1.7,63.75 +4823,30,2.5,111.05,1.7,63.75 +4824,30,2.5,111.05,1.7,63.75 +4825,30,2.5,111.05,1.7,63.75 +4826,30,2.5,111.05,1.7,63.75 +4827,30,2.5,111.05,1.7,63.75 +4828,30,2.5,111.05,1.7,63.75 +4829,30,2.5,111.05,1.7,63.75 +4830,30,2.5,111.05,1.7,63.75 +4831,30,2.5,111.05,1.7,63.75 +4832,30,2.5,111.05,1.7,63.75 +4833,30,2.5,111.05,1.7,63.75 +4834,30,2.5,111.05,1.7,63.75 +4835,30,2.5,111.05,1.7,63.75 +4836,30,2.5,111.05,1.7,63.75 +4837,30,2.5,111.05,1.7,63.75 +4838,30,2.5,111.05,1.7,63.75 +4839,30,2.5,111.05,1.7,63.75 +4840,30,2.5,111.05,1.7,63.75 +4841,30,2.5,111.05,1.7,63.75 +4842,30,2.5,111.05,1.7,63.75 +4843,30,2.5,111.05,1.7,63.75 +4844,30,2.5,111.05,1.7,63.75 +4845,30,2.5,111.05,1.7,63.75 +4846,30,2.5,111.05,1.7,63.75 +4847,30,2.5,111.05,1.7,63.75 +4848,30,2.5,111.05,1.7,63.75 +4849,30,2.5,111.05,1.7,63.75 +4850,30,2.5,111.05,1.7,63.75 +4851,30,2.5,111.05,1.7,63.75 +4852,30,2.5,111.05,1.7,63.75 +4853,30,2.5,111.05,1.7,63.75 +4854,30,2.5,111.05,1.7,63.75 +4855,30,2.5,111.05,1.7,63.75 +4856,30,2.5,111.05,1.7,63.75 +4857,30,2.5,111.05,1.7,63.75 +4858,30,2.5,111.05,1.7,63.75 +4859,30,2.5,111.05,1.7,63.75 +4860,30,2.5,111.05,1.7,63.75 +4861,30,2.5,111.05,1.7,63.75 +4862,30,2.5,111.05,1.7,63.75 +4863,30,2.5,111.05,1.7,63.75 +4864,30,2.5,111.05,1.7,63.75 +4865,30,2.5,111.05,1.7,63.75 +4866,30,2.5,111.05,1.7,63.75 +4867,30,2.5,111.05,1.7,63.75 +4868,30,2.5,111.05,1.7,63.75 +4869,30,2.5,111.05,1.7,63.75 +4870,30,2.5,111.05,1.7,63.75 +4871,30,2.5,111.05,1.7,63.75 +4872,30,2.5,111.05,1.7,63.75 +4873,30,2.5,111.05,1.7,63.75 +4874,30,2.5,111.05,1.7,63.75 +4875,30,2.5,111.05,1.7,63.75 +4876,30,2.5,111.05,1.7,63.75 +4877,30,2.5,111.05,1.7,63.75 +4878,30,2.5,111.05,1.7,63.75 +4879,30,2.5,111.05,1.7,63.75 +4880,30,2.5,111.05,1.7,63.75 +4881,30,2.5,111.05,1.7,63.75 +4882,30,2.5,111.05,1.7,63.75 +4883,30,2.5,111.05,1.7,63.75 +4884,30,2.5,111.05,1.7,63.75 +4885,30,2.5,111.05,1.7,63.75 +4886,30,2.5,111.05,1.7,63.75 +4887,30,2.5,111.05,1.7,63.75 +4888,30,2.5,111.05,1.7,63.75 +4889,30,2.5,111.05,1.7,63.75 +4890,30,2.5,111.05,1.7,63.75 +4891,30,2.5,111.05,1.7,63.75 +4892,30,2.5,111.05,1.7,63.75 +4893,30,2.5,111.05,1.7,63.75 +4894,30,2.5,111.05,1.7,63.75 +4895,30,2.5,111.05,1.7,63.75 +4896,30,2.5,111.05,1.7,63.75 +4897,30,2.5,111.05,1.7,63.75 +4898,30,2.5,111.05,1.7,63.75 +4899,30,2.5,111.05,1.7,63.75 +4900,30,2.5,111.05,1.7,63.75 +4901,30,2.5,111.05,1.7,63.75 +4902,30,2.5,111.05,1.7,63.75 +4903,30,2.5,111.05,1.7,63.75 +4904,30,2.5,111.05,1.7,63.75 +4905,30,2.5,111.05,1.7,63.75 +4906,30,2.5,111.05,1.7,63.75 +4907,30,2.5,111.05,1.7,63.75 +4908,30,2.5,111.05,1.7,63.75 +4909,30,2.5,111.05,1.7,63.75 +4910,30,2.5,111.05,1.7,63.75 +4911,30,2.5,111.05,1.7,63.75 +4912,30,2.5,111.05,1.7,63.75 +4913,30,2.5,111.05,1.7,63.75 +4914,30,2.5,111.05,1.7,63.75 +4915,30,2.5,111.05,1.7,63.75 +4916,30,2.5,111.05,1.7,63.75 +4917,30,2.5,111.05,1.7,63.75 +4918,30,2.5,111.05,1.7,63.75 +4919,30,2.5,111.05,1.7,63.75 +4920,30,2.5,111.05,1.7,63.75 +4921,30,2.5,111.05,1.7,63.75 +4922,30,2.5,111.05,1.7,63.75 +4923,30,2.5,111.05,1.7,63.75 +4924,30,2.5,111.05,1.7,63.75 +4925,30,2.5,111.05,1.7,63.75 +4926,30,2.5,111.05,1.7,63.75 +4927,30,2.5,111.05,1.7,63.75 +4928,30,2.5,111.05,1.7,63.75 +4929,30,2.5,111.05,1.7,63.75 +4930,30,2.5,111.05,1.7,63.75 +4931,30,2.5,111.05,1.7,63.75 +4932,30,2.5,111.05,1.7,63.75 +4933,30,2.5,111.05,1.7,63.75 +4934,30,2.5,111.05,1.7,63.75 +4935,30,2.5,111.05,1.7,63.75 +4936,30,2.5,111.05,1.7,63.75 +4937,30,2.5,111.05,1.7,63.75 +4938,30,2.5,111.05,1.7,63.75 +4939,30,2.5,111.05,1.7,63.75 +4940,30,2.5,111.05,1.7,63.75 +4941,30,2.5,111.05,1.7,63.75 +4942,30,2.5,111.05,1.7,63.75 +4943,30,2.5,111.05,1.7,63.75 +4944,30,2.5,111.05,1.7,63.75 +4945,30,2.5,111.05,1.7,63.75 +4946,30,2.5,111.05,1.7,63.75 +4947,30,2.5,111.05,1.7,63.75 +4948,30,2.5,111.05,1.7,63.75 +4949,30,2.5,111.05,1.7,63.75 +4950,30,2.5,111.05,1.7,63.75 +4951,30,2.5,111.05,1.7,63.75 +4952,30,2.5,111.05,1.7,63.75 +4953,30,2.5,111.05,1.7,63.75 +4954,30,2.5,111.05,1.7,63.75 +4955,30,2.5,111.05,1.7,63.75 +4956,30,2.5,111.05,1.7,63.75 +4957,30,2.5,111.05,1.7,63.75 +4958,30,2.5,111.05,1.7,63.75 +4959,30,2.5,111.05,1.7,63.75 +4960,30,2.5,111.05,1.7,63.75 +4961,30,2.5,111.05,1.7,63.75 +4962,30,2.5,111.05,1.7,63.75 +4963,30,2.5,111.05,1.7,63.75 +4964,30,2.5,111.05,1.7,63.75 +4965,30,2.5,111.05,1.7,63.75 +4966,30,2.5,111.05,1.7,63.75 +4967,30,2.5,111.05,1.7,63.75 +4968,30,2.5,111.05,1.7,63.75 +4969,30,2.5,111.05,1.7,63.75 +4970,30,2.5,111.05,1.7,63.75 +4971,30,2.5,111.05,1.7,63.75 +4972,30,2.5,111.05,1.7,63.75 +4973,30,2.5,111.05,1.7,63.75 +4974,30,2.5,111.05,1.7,63.75 +4975,30,2.5,111.05,1.7,63.75 +4976,30,2.5,111.05,1.7,63.75 +4977,30,2.5,111.05,1.7,63.75 +4978,30,2.5,111.05,1.7,63.75 +4979,30,2.5,111.05,1.7,63.75 +4980,30,2.5,111.05,1.7,63.75 +4981,30,2.5,111.05,1.7,63.75 +4982,30,2.5,111.05,1.7,63.75 +4983,30,2.5,111.05,1.7,63.75 +4984,30,2.5,111.05,1.7,63.75 +4985,30,2.5,111.05,1.7,63.75 +4986,30,2.5,111.05,1.7,63.75 +4987,30,2.5,111.05,1.7,63.75 +4988,30,2.5,111.05,1.7,63.75 +4989,30,2.5,111.05,1.7,63.75 +4990,30,2.5,111.05,1.7,63.75 +4991,30,2.5,111.05,1.7,63.75 +4992,30,2.5,111.05,1.7,63.75 +4993,30,2.5,111.05,1.7,63.75 +4994,30,2.5,111.05,1.7,63.75 +4995,30,2.5,111.05,1.7,63.75 +4996,30,2.5,111.05,1.7,63.75 +4997,30,2.5,111.05,1.7,63.75 +4998,30,2.5,111.05,1.7,63.75 +4999,30,2.5,111.05,1.7,63.75 +5000,30,2.5,111.05,1.7,63.75 +5001,30,2.5,111.05,1.7,63.75 +5002,30,2.5,111.05,1.7,63.75 +5003,30,2.5,111.05,1.7,63.75 +5004,30,2.5,111.05,1.7,63.75 +5005,30,2.5,111.05,1.7,63.75 +5006,30,2.5,111.05,1.7,63.75 +5007,30,2.5,111.05,1.7,63.75 +5008,30,2.5,111.05,1.7,63.75 +5009,30,2.5,111.05,1.7,63.75 +5010,30,2.5,111.05,1.7,63.75 +5011,30,2.5,111.05,1.7,63.75 +5012,30,2.5,111.05,1.7,63.75 +5013,30,2.5,111.05,1.7,63.75 +5014,30,2.5,111.05,1.7,63.75 +5015,30,2.5,111.05,1.7,63.75 +5016,30,2.5,111.05,1.7,63.75 +5017,30,2.5,111.05,1.7,63.75 +5018,30,2.5,111.05,1.7,63.75 +5019,30,2.5,111.05,1.7,63.75 +5020,30,2.5,111.05,1.7,63.75 +5021,30,2.5,111.05,1.7,63.75 +5022,30,2.5,111.05,1.7,63.75 +5023,30,2.5,111.05,1.7,63.75 +5024,30,2.5,111.05,1.7,63.75 +5025,30,2.5,111.05,1.7,63.75 +5026,30,2.5,111.05,1.7,63.75 +5027,30,2.5,111.05,1.7,63.75 +5028,30,2.5,111.05,1.7,63.75 +5029,30,2.5,111.05,1.7,63.75 +5030,30,2.5,111.05,1.7,63.75 +5031,30,2.5,111.05,1.7,63.75 +5032,30,2.5,111.05,1.7,63.75 +5033,30,2.5,111.05,1.7,63.75 +5034,30,2.5,111.05,1.7,63.75 +5035,30,2.5,111.05,1.7,63.75 +5036,30,2.5,111.05,1.7,63.75 +5037,30,2.5,111.05,1.7,63.75 +5038,30,2.5,111.05,1.7,63.75 +5039,30,2.5,111.05,1.7,63.75 +5040,30,2.5,111.05,1.7,63.75 +5041,30,2.5,111.05,1.7,63.75 +5042,30,2.5,111.05,1.7,63.75 +5043,30,2.5,111.05,1.7,63.75 +5044,30,2.5,111.05,1.7,63.75 +5045,30,2.5,111.05,1.7,63.75 +5046,30,2.5,111.05,1.7,63.75 +5047,30,2.5,111.05,1.7,63.75 +5048,30,2.5,111.05,1.7,63.75 +5049,30,2.5,111.05,1.7,63.75 +5050,30,2.5,111.05,1.7,63.75 +5051,30,2.5,111.05,1.7,63.75 +5052,30,2.5,111.05,1.7,63.75 +5053,30,2.5,111.05,1.7,63.75 +5054,30,2.5,111.05,1.7,63.75 +5055,30,2.5,111.05,1.7,63.75 +5056,30,2.5,111.05,1.7,63.75 +5057,30,2.5,111.05,1.7,63.75 +5058,30,2.5,111.05,1.7,63.75 +5059,30,2.5,111.05,1.7,63.75 +5060,30,2.5,111.05,1.7,63.75 +5061,30,2.5,111.05,1.7,63.75 +5062,30,2.5,111.05,1.7,63.75 +5063,30,2.5,111.05,1.7,63.75 +5064,30,2.5,111.05,1.7,63.75 +5065,30,2.5,111.05,1.7,63.75 +5066,30,2.5,111.05,1.7,63.75 +5067,30,2.5,111.05,1.7,63.75 +5068,30,2.5,111.05,1.7,63.75 +5069,30,2.5,111.05,1.7,63.75 +5070,30,2.5,111.05,1.7,63.75 +5071,30,2.5,111.05,1.7,63.75 +5072,30,2.5,111.05,1.7,63.75 +5073,30,2.5,111.05,1.7,63.75 +5074,30,2.5,111.05,1.7,63.75 +5075,30,2.5,111.05,1.7,63.75 +5076,30,2.5,111.05,1.7,63.75 +5077,30,2.5,111.05,1.7,63.75 +5078,30,2.5,111.05,1.7,63.75 +5079,30,2.5,111.05,1.7,63.75 +5080,30,2.5,111.05,1.7,63.75 +5081,30,2.5,111.05,1.7,63.75 +5082,30,2.5,111.05,1.7,63.75 +5083,30,2.5,111.05,1.7,63.75 +5084,30,2.5,111.05,1.7,63.75 +5085,30,2.5,111.05,1.7,63.75 +5086,30,2.5,111.05,1.7,63.75 +5087,30,2.5,111.05,1.7,63.75 +5088,30,2.5,111.05,1.7,63.75 +5089,30,2.5,111.05,1.7,63.75 +5090,30,2.5,111.05,1.7,63.75 +5091,30,2.5,111.05,1.7,63.75 +5092,30,2.5,111.05,1.7,63.75 +5093,30,2.5,111.05,1.7,63.75 +5094,30,2.5,111.05,1.7,63.75 +5095,30,2.5,111.05,1.7,63.75 +5096,30,2.5,111.05,1.7,63.75 +5097,30,2.5,111.05,1.7,63.75 +5098,30,2.5,111.05,1.7,63.75 +5099,30,2.5,111.05,1.7,63.75 +5100,30,2.5,111.05,1.7,63.75 +5101,30,2.5,111.05,1.7,63.75 +5102,30,2.5,111.05,1.7,63.75 +5103,30,2.5,111.05,1.7,63.75 +5104,30,2.5,111.05,1.7,63.75 +5105,30,2.5,111.05,1.7,63.75 +5106,30,2.5,111.05,1.7,63.75 +5107,30,2.5,111.05,1.7,63.75 +5108,30,2.5,111.05,1.7,63.75 +5109,30,2.5,111.05,1.7,63.75 +5110,30,2.5,111.05,1.7,63.75 +5111,30,2.5,111.05,1.7,63.75 +5112,30,2.5,111.05,1.7,63.75 +5113,30,2.5,111.05,1.7,63.75 +5114,30,2.5,111.05,1.7,63.75 +5115,30,2.5,111.05,1.7,63.75 +5116,30,2.5,111.05,1.7,63.75 +5117,30,2.5,111.05,1.7,63.75 +5118,30,2.5,111.05,1.7,63.75 +5119,30,2.5,111.05,1.7,63.75 +5120,30,2.5,111.05,1.7,63.75 +5121,30,2.5,111.05,1.7,63.75 +5122,30,2.5,111.05,1.7,63.75 +5123,30,2.5,111.05,1.7,63.75 +5124,30,2.5,111.05,1.7,63.75 +5125,30,2.5,111.05,1.7,63.75 +5126,30,2.5,111.05,1.7,63.75 +5127,30,2.5,111.05,1.7,63.75 +5128,30,2.5,111.05,1.7,63.75 +5129,30,2.5,111.05,1.7,63.75 +5130,30,2.5,111.05,1.7,63.75 +5131,30,2.5,111.05,1.7,63.75 +5132,30,2.5,111.05,1.7,63.75 +5133,30,2.5,111.05,1.7,63.75 +5134,30,2.5,111.05,1.7,63.75 +5135,30,2.5,111.05,1.7,63.75 +5136,30,2.5,111.05,1.7,63.75 +5137,30,2.5,111.05,1.7,63.75 +5138,30,2.5,111.05,1.7,63.75 +5139,30,2.5,111.05,1.7,63.75 +5140,30,2.5,111.05,1.7,63.75 +5141,30,2.5,111.05,1.7,63.75 +5142,30,2.5,111.05,1.7,63.75 +5143,30,2.5,111.05,1.7,63.75 +5144,30,2.5,111.05,1.7,63.75 +5145,30,2.5,111.05,1.7,63.75 +5146,30,2.5,111.05,1.7,63.75 +5147,30,2.5,111.05,1.7,63.75 +5148,30,2.5,111.05,1.7,63.75 +5149,30,2.5,111.05,1.7,63.75 +5150,30,2.5,111.05,1.7,63.75 +5151,30,2.5,111.05,1.7,63.75 +5152,30,2.5,111.05,1.7,63.75 +5153,30,2.5,111.05,1.7,63.75 +5154,30,2.5,111.05,1.7,63.75 +5155,30,2.5,111.05,1.7,63.75 +5156,30,2.5,111.05,1.7,63.75 +5157,30,2.5,111.05,1.7,63.75 +5158,30,2.5,111.05,1.7,63.75 +5159,30,2.5,111.05,1.7,63.75 +5160,30,2.5,111.05,1.7,63.75 +5161,30,2.5,111.05,1.7,63.75 +5162,30,2.5,111.05,1.7,63.75 +5163,30,2.5,111.05,1.7,63.75 +5164,30,2.5,111.05,1.7,63.75 +5165,30,2.5,111.05,1.7,63.75 +5166,30,2.5,111.05,1.7,63.75 +5167,30,2.5,111.05,1.7,63.75 +5168,30,2.5,111.05,1.7,63.75 +5169,30,2.5,111.05,1.7,63.75 +5170,30,2.5,111.05,1.7,63.75 +5171,30,2.5,111.05,1.7,63.75 +5172,30,2.5,111.05,1.7,63.75 +5173,30,2.5,111.05,1.7,63.75 +5174,30,2.5,111.05,1.7,63.75 +5175,30,2.5,111.05,1.7,63.75 +5176,30,2.5,111.05,1.7,63.75 +5177,30,2.5,111.05,1.7,63.75 +5178,30,2.5,111.05,1.7,63.75 +5179,30,2.5,111.05,1.7,63.75 +5180,30,2.5,111.05,1.7,63.75 +5181,30,2.5,111.05,1.7,63.75 +5182,30,2.5,111.05,1.7,63.75 +5183,30,2.5,111.05,1.7,63.75 +5184,30,2.5,111.05,1.7,63.75 +5185,30,2.5,111.05,1.7,63.75 +5186,30,2.5,111.05,1.7,63.75 +5187,30,2.5,111.05,1.7,63.75 +5188,30,2.5,111.05,1.7,63.75 +5189,30,2.5,111.05,1.7,63.75 +5190,30,2.5,111.05,1.7,63.75 +5191,30,2.5,111.05,1.7,63.75 +5192,30,2.5,111.05,1.7,63.75 +5193,30,2.5,111.05,1.7,63.75 +5194,30,2.5,111.05,1.7,63.75 +5195,30,2.5,111.05,1.7,63.75 +5196,30,2.5,111.05,1.7,63.75 +5197,30,2.5,111.05,1.7,63.75 +5198,30,2.5,111.05,1.7,63.75 +5199,30,2.5,111.05,1.7,63.75 +5200,30,2.5,111.05,1.7,63.75 +5201,30,2.5,111.05,1.7,63.75 +5202,30,2.5,111.05,1.7,63.75 +5203,30,2.5,111.05,1.7,63.75 +5204,30,2.5,111.05,1.7,63.75 +5205,30,2.5,111.05,1.7,63.75 +5206,30,2.5,111.05,1.7,63.75 +5207,30,2.5,111.05,1.7,63.75 +5208,30,2.5,111.05,1.7,63.75 +5209,30,2.5,111.05,1.7,63.75 +5210,30,2.5,111.05,1.7,63.75 +5211,30,2.5,111.05,1.7,63.75 +5212,30,2.5,111.05,1.7,63.75 +5213,30,2.5,111.05,1.7,63.75 +5214,30,2.5,111.05,1.7,63.75 +5215,30,2.5,111.05,1.7,63.75 +5216,30,2.5,111.05,1.7,63.75 +5217,30,2.5,111.05,1.7,63.75 +5218,30,2.5,111.05,1.7,63.75 +5219,30,2.5,111.05,1.7,63.75 +5220,30,2.5,111.05,1.7,63.75 +5221,30,2.5,111.05,1.7,63.75 +5222,30,2.5,111.05,1.7,63.75 +5223,30,2.5,111.05,1.7,63.75 +5224,30,2.5,111.05,1.7,63.75 +5225,30,2.5,111.05,1.7,63.75 +5226,30,2.5,111.05,1.7,63.75 +5227,30,2.5,111.05,1.7,63.75 +5228,30,2.5,111.05,1.7,63.75 +5229,30,2.5,111.05,1.7,63.75 +5230,30,2.5,111.05,1.7,63.75 +5231,30,2.5,111.05,1.7,63.75 +5232,30,2.5,111.05,1.7,63.75 +5233,30,2.5,111.05,1.7,63.75 +5234,30,2.5,111.05,1.7,63.75 +5235,30,2.5,111.05,1.7,63.75 +5236,30,2.5,111.05,1.7,63.75 +5237,30,2.5,111.05,1.7,63.75 +5238,30,2.5,111.05,1.7,63.75 +5239,30,2.5,111.05,1.7,63.75 +5240,30,2.5,111.05,1.7,63.75 +5241,30,2.5,111.05,1.7,63.75 +5242,30,2.5,111.05,1.7,63.75 +5243,30,2.5,111.05,1.7,63.75 +5244,30,2.5,111.05,1.7,63.75 +5245,30,2.5,111.05,1.7,63.75 +5246,30,2.5,111.05,1.7,63.75 +5247,30,2.5,111.05,1.7,63.75 +5248,30,2.5,111.05,1.7,63.75 +5249,30,2.5,111.05,1.7,63.75 +5250,30,2.5,111.05,1.7,63.75 +5251,30,2.5,111.05,1.7,63.75 +5252,30,2.5,111.05,1.7,63.75 +5253,30,2.5,111.05,1.7,63.75 +5254,30,2.5,111.05,1.7,63.75 +5255,30,2.5,111.05,1.7,63.75 +5256,30,2.5,111.05,1.7,63.75 +5257,30,2.5,111.05,1.7,63.75 +5258,30,2.5,111.05,1.7,63.75 +5259,30,2.5,111.05,1.7,63.75 +5260,30,2.5,111.05,1.7,63.75 +5261,30,2.5,111.05,1.7,63.75 +5262,30,2.5,111.05,1.7,63.75 +5263,30,2.5,111.05,1.7,63.75 +5264,30,2.5,111.05,1.7,63.75 +5265,30,2.5,111.05,1.7,63.75 +5266,30,2.5,111.05,1.7,63.75 +5267,30,2.5,111.05,1.7,63.75 +5268,30,2.5,111.05,1.7,63.75 +5269,30,2.5,111.05,1.7,63.75 +5270,30,2.5,111.05,1.7,63.75 +5271,30,2.5,111.05,1.7,63.75 +5272,30,2.5,111.05,1.7,63.75 +5273,30,2.5,111.05,1.7,63.75 +5274,30,2.5,111.05,1.7,63.75 +5275,30,2.5,111.05,1.7,63.75 +5276,30,2.5,111.05,1.7,63.75 +5277,30,2.5,111.05,1.7,63.75 +5278,30,2.5,111.05,1.7,63.75 +5279,30,2.5,111.05,1.7,63.75 +5280,30,2.5,111.05,1.7,63.75 +5281,30,2.5,111.05,1.7,63.75 +5282,30,2.5,111.05,1.7,63.75 +5283,30,2.5,111.05,1.7,63.75 +5284,30,2.5,111.05,1.7,63.75 +5285,30,2.5,111.05,1.7,63.75 +5286,30,2.5,111.05,1.7,63.75 +5287,30,2.5,111.05,1.7,63.75 +5288,30,2.5,111.05,1.7,63.75 +5289,30,2.5,111.05,1.7,63.75 +5290,30,2.5,111.05,1.7,63.75 +5291,30,2.5,111.05,1.7,63.75 +5292,30,2.5,111.05,1.7,63.75 +5293,30,2.5,111.05,1.7,63.75 +5294,30,2.5,111.05,1.7,63.75 +5295,30,2.5,111.05,1.7,63.75 +5296,30,2.5,111.05,1.7,63.75 +5297,30,2.5,111.05,1.7,63.75 +5298,30,2.5,111.05,1.7,63.75 +5299,30,2.5,111.05,1.7,63.75 +5300,30,2.5,111.05,1.7,63.75 +5301,30,2.5,111.05,1.7,63.75 +5302,30,2.5,111.05,1.7,63.75 +5303,30,2.5,111.05,1.7,63.75 +5304,30,2.5,111.05,1.7,63.75 +5305,30,2.5,111.05,1.7,63.75 +5306,30,2.5,111.05,1.7,63.75 +5307,30,2.5,111.05,1.7,63.75 +5308,30,2.5,111.05,1.7,63.75 +5309,30,2.5,111.05,1.7,63.75 +5310,30,2.5,111.05,1.7,63.75 +5311,30,2.5,111.05,1.7,63.75 +5312,30,2.5,111.05,1.7,63.75 +5313,30,2.5,111.05,1.7,63.75 +5314,30,2.5,111.05,1.7,63.75 +5315,30,2.5,111.05,1.7,63.75 +5316,30,2.5,111.05,1.7,63.75 +5317,30,2.5,111.05,1.7,63.75 +5318,30,2.5,111.05,1.7,63.75 +5319,30,2.5,111.05,1.7,63.75 +5320,30,2.5,111.05,1.7,63.75 +5321,30,2.5,111.05,1.7,63.75 +5322,30,2.5,111.05,1.7,63.75 +5323,30,2.5,111.05,1.7,63.75 +5324,30,2.5,111.05,1.7,63.75 +5325,30,2.5,111.05,1.7,63.75 +5326,30,2.5,111.05,1.7,63.75 +5327,30,2.5,111.05,1.7,63.75 +5328,30,2.5,111.05,1.7,63.75 +5329,30,2.5,111.05,1.7,63.75 +5330,30,2.5,111.05,1.7,63.75 +5331,30,2.5,111.05,1.7,63.75 +5332,30,2.5,111.05,1.7,63.75 +5333,30,2.5,111.05,1.7,63.75 +5334,30,2.5,111.05,1.7,63.75 +5335,30,2.5,111.05,1.7,63.75 +5336,30,2.5,111.05,1.7,63.75 +5337,30,2.5,111.05,1.7,63.75 +5338,30,2.5,111.05,1.7,63.75 +5339,30,2.5,111.05,1.7,63.75 +5340,30,2.5,111.05,1.7,63.75 +5341,30,2.5,111.05,1.7,63.75 +5342,30,2.5,111.05,1.7,63.75 +5343,30,2.5,111.05,1.7,63.75 +5344,30,2.5,111.05,1.7,63.75 +5345,30,2.5,111.05,1.7,63.75 +5346,30,2.5,111.05,1.7,63.75 +5347,30,2.5,111.05,1.7,63.75 +5348,30,2.5,111.05,1.7,63.75 +5349,30,2.5,111.05,1.7,63.75 +5350,30,2.5,111.05,1.7,63.75 +5351,30,2.5,111.05,1.7,63.75 +5352,30,2.5,111.05,1.7,63.75 +5353,30,2.5,111.05,1.7,63.75 +5354,30,2.5,111.05,1.7,63.75 +5355,30,2.5,111.05,1.7,63.75 +5356,30,2.5,111.05,1.7,63.75 +5357,30,2.5,111.05,1.7,63.75 +5358,30,2.5,111.05,1.7,63.75 +5359,30,2.5,111.05,1.7,63.75 +5360,30,2.5,111.05,1.7,63.75 +5361,30,2.5,111.05,1.7,63.75 +5362,30,2.5,111.05,1.7,63.75 +5363,30,2.5,111.05,1.7,63.75 +5364,30,2.5,111.05,1.7,63.75 +5365,30,2.5,111.05,1.7,63.75 +5366,30,2.5,111.05,1.7,63.75 +5367,30,2.5,111.05,1.7,63.75 +5368,30,2.5,111.05,1.7,63.75 +5369,30,2.5,111.05,1.7,63.75 +5370,30,2.5,111.05,1.7,63.75 +5371,30,2.5,111.05,1.7,63.75 +5372,30,2.5,111.05,1.7,63.75 +5373,30,2.5,111.05,1.7,63.75 +5374,30,2.5,111.05,1.7,63.75 +5375,30,2.5,111.05,1.7,63.75 +5376,30,2.5,111.05,1.7,63.75 +5377,30,2.5,111.05,1.7,63.75 +5378,30,2.5,111.05,1.7,63.75 +5379,30,2.5,111.05,1.7,63.75 +5380,30,2.5,111.05,1.7,63.75 +5381,30,2.5,111.05,1.7,63.75 +5382,30,2.5,111.05,1.7,63.75 +5383,30,2.5,111.05,1.7,63.75 +5384,30,2.5,111.05,1.7,63.75 +5385,30,2.5,111.05,1.7,63.75 +5386,30,2.5,111.05,1.7,63.75 +5387,30,2.5,111.05,1.7,63.75 +5388,30,2.5,111.05,1.7,63.75 +5389,30,2.5,111.05,1.7,63.75 +5390,30,2.5,111.05,1.7,63.75 +5391,30,2.5,111.05,1.7,63.75 +5392,30,2.5,111.05,1.7,63.75 +5393,30,2.5,111.05,1.7,63.75 +5394,30,2.5,111.05,1.7,63.75 +5395,30,2.5,111.05,1.7,63.75 +5396,30,2.5,111.05,1.7,63.75 +5397,30,2.5,111.05,1.7,63.75 +5398,30,2.5,111.05,1.7,63.75 +5399,30,2.5,111.05,1.7,63.75 +5400,30,2.5,111.05,1.7,63.75 +5401,30,2.5,111.05,1.7,63.75 +5402,30,2.5,111.05,1.7,63.75 +5403,30,2.5,111.05,1.7,63.75 +5404,30,2.5,111.05,1.7,63.75 +5405,30,2.5,111.05,1.7,63.75 +5406,30,2.5,111.05,1.7,63.75 +5407,30,2.5,111.05,1.7,63.75 +5408,30,2.5,111.05,1.7,63.75 +5409,30,2.5,111.05,1.7,63.75 +5410,30,2.5,111.05,1.7,63.75 +5411,30,2.5,111.05,1.7,63.75 +5412,30,2.5,111.05,1.7,63.75 +5413,30,2.5,111.05,1.7,63.75 +5414,30,2.5,111.05,1.7,63.75 +5415,30,2.5,111.05,1.7,63.75 +5416,30,2.5,111.05,1.7,63.75 +5417,30,2.5,111.05,1.7,63.75 +5418,30,2.5,111.05,1.7,63.75 +5419,30,2.5,111.05,1.7,63.75 +5420,30,2.5,111.05,1.7,63.75 +5421,30,2.5,111.05,1.7,63.75 +5422,30,2.5,111.05,1.7,63.75 +5423,30,2.5,111.05,1.7,63.75 +5424,30,2.5,111.05,1.7,63.75 +5425,30,2.5,111.05,1.7,63.75 +5426,30,2.5,111.05,1.7,63.75 +5427,30,2.5,111.05,1.7,63.75 +5428,30,2.5,111.05,1.7,63.75 +5429,30,2.5,111.05,1.7,63.75 +5430,30,2.5,111.05,1.7,63.75 +5431,30,2.5,111.05,1.7,63.75 +5432,30,2.5,111.05,1.7,63.75 +5433,30,2.5,111.05,1.7,63.75 +5434,30,2.5,111.05,1.7,63.75 +5435,30,2.5,111.05,1.7,63.75 +5436,30,2.5,111.05,1.7,63.75 +5437,30,2.5,111.05,1.7,63.75 +5438,30,2.5,111.05,1.7,63.75 +5439,30,2.5,111.05,1.7,63.75 +5440,30,2.5,111.05,1.7,63.75 +5441,30,2.5,111.05,1.7,63.75 +5442,30,2.5,111.05,1.7,63.75 +5443,30,2.5,111.05,1.7,63.75 +5444,30,2.5,111.05,1.7,63.75 +5445,30,2.5,111.05,1.7,63.75 +5446,30,2.5,111.05,1.7,63.75 +5447,30,2.5,111.05,1.7,63.75 +5448,30,2.5,111.05,1.7,63.75 +5449,30,2.5,111.05,1.7,63.75 +5450,30,2.5,111.05,1.7,63.75 +5451,30,2.5,111.05,1.7,63.75 +5452,30,2.5,111.05,1.7,63.75 +5453,30,2.5,111.05,1.7,63.75 +5454,30,2.5,111.05,1.7,63.75 +5455,30,2.5,111.05,1.7,63.75 +5456,30,2.5,111.05,1.7,63.75 +5457,30,2.5,111.05,1.7,63.75 +5458,30,2.5,111.05,1.7,63.75 +5459,30,2.5,111.05,1.7,63.75 +5460,30,2.5,111.05,1.7,63.75 +5461,30,2.5,111.05,1.7,63.75 +5462,30,2.5,111.05,1.7,63.75 +5463,30,2.5,111.05,1.7,63.75 +5464,30,2.5,111.05,1.7,63.75 +5465,30,2.5,111.05,1.7,63.75 +5466,30,2.5,111.05,1.7,63.75 +5467,30,2.5,111.05,1.7,63.75 +5468,30,2.5,111.05,1.7,63.75 +5469,30,2.5,111.05,1.7,63.75 +5470,30,2.5,111.05,1.7,63.75 +5471,30,2.5,111.05,1.7,63.75 +5472,30,2.5,111.05,1.7,63.75 +5473,30,2.5,111.05,1.7,63.75 +5474,30,2.5,111.05,1.7,63.75 +5475,30,2.5,111.05,1.7,63.75 +5476,30,2.5,111.05,1.7,63.75 +5477,30,2.5,111.05,1.7,63.75 +5478,30,2.5,111.05,1.7,63.75 +5479,30,2.5,111.05,1.7,63.75 +5480,30,2.5,111.05,1.7,63.75 +5481,30,2.5,111.05,1.7,63.75 +5482,30,2.5,111.05,1.7,63.75 +5483,30,2.5,111.05,1.7,63.75 +5484,30,2.5,111.05,1.7,63.75 +5485,30,2.5,111.05,1.7,63.75 +5486,30,2.5,111.05,1.7,63.75 +5487,30,2.5,111.05,1.7,63.75 +5488,30,2.5,111.05,1.7,63.75 +5489,30,2.5,111.05,1.7,63.75 +5490,30,2.5,111.05,1.7,63.75 +5491,30,2.5,111.05,1.7,63.75 +5492,30,2.5,111.05,1.7,63.75 +5493,30,2.5,111.05,1.7,63.75 +5494,30,2.5,111.05,1.7,63.75 +5495,30,2.5,111.05,1.7,63.75 +5496,30,2.5,111.05,1.7,63.75 +5497,30,2.5,111.05,1.7,63.75 +5498,30,2.5,111.05,1.7,63.75 +5499,30,2.5,111.05,1.7,63.75 +5500,30,2.5,111.05,1.7,63.75 +5501,30,2.5,111.05,1.7,63.75 +5502,30,2.5,111.05,1.7,63.75 +5503,30,2.5,111.05,1.7,63.75 +5504,30,2.5,111.05,1.7,63.75 +5505,30,2.5,111.05,1.7,63.75 +5506,30,2.5,111.05,1.7,63.75 +5507,30,2.5,111.05,1.7,63.75 +5508,30,2.5,111.05,1.7,63.75 +5509,30,2.5,111.05,1.7,63.75 +5510,30,2.5,111.05,1.7,63.75 +5511,30,2.5,111.05,1.7,63.75 +5512,30,2.5,111.05,1.7,63.75 +5513,30,2.5,111.05,1.7,63.75 +5514,30,2.5,111.05,1.7,63.75 +5515,30,2.5,111.05,1.7,63.75 +5516,30,2.5,111.05,1.7,63.75 +5517,30,2.5,111.05,1.7,63.75 +5518,30,2.5,111.05,1.7,63.75 +5519,30,2.5,111.05,1.7,63.75 +5520,30,2.5,111.05,1.7,63.75 +5521,30,2.5,111.05,1.7,63.75 +5522,30,2.5,111.05,1.7,63.75 +5523,30,2.5,111.05,1.7,63.75 +5524,30,2.5,111.05,1.7,63.75 +5525,30,2.5,111.05,1.7,63.75 +5526,30,2.5,111.05,1.7,63.75 +5527,30,2.5,111.05,1.7,63.75 +5528,30,2.5,111.05,1.7,63.75 +5529,30,2.5,111.05,1.7,63.75 +5530,30,2.5,111.05,1.7,63.75 +5531,30,2.5,111.05,1.7,63.75 +5532,30,2.5,111.05,1.7,63.75 +5533,30,2.5,111.05,1.7,63.75 +5534,30,2.5,111.05,1.7,63.75 +5535,30,2.5,111.05,1.7,63.75 +5536,30,2.5,111.05,1.7,63.75 +5537,30,2.5,111.05,1.7,63.75 +5538,30,2.5,111.05,1.7,63.75 +5539,30,2.5,111.05,1.7,63.75 +5540,30,2.5,111.05,1.7,63.75 +5541,30,2.5,111.05,1.7,63.75 +5542,30,2.5,111.05,1.7,63.75 +5543,30,2.5,111.05,1.7,63.75 +5544,30,2.5,111.05,1.7,63.75 +5545,30,2.5,111.05,1.7,63.75 +5546,30,2.5,111.05,1.7,63.75 +5547,30,2.5,111.05,1.7,63.75 +5548,30,2.5,111.05,1.7,63.75 +5549,30,2.5,111.05,1.7,63.75 +5550,30,2.5,111.05,1.7,63.75 +5551,30,2.5,111.05,1.7,63.75 +5552,30,2.5,111.05,1.7,63.75 +5553,30,2.5,111.05,1.7,63.75 +5554,30,2.5,111.05,1.7,63.75 +5555,30,2.5,111.05,1.7,63.75 +5556,30,2.5,111.05,1.7,63.75 +5557,30,2.5,111.05,1.7,63.75 +5558,30,2.5,111.05,1.7,63.75 +5559,30,2.5,111.05,1.7,63.75 +5560,30,2.5,111.05,1.7,63.75 +5561,30,2.5,111.05,1.7,63.75 +5562,30,2.5,111.05,1.7,63.75 +5563,30,2.5,111.05,1.7,63.75 +5564,30,2.5,111.05,1.7,63.75 +5565,30,2.5,111.05,1.7,63.75 +5566,30,2.5,111.05,1.7,63.75 +5567,30,2.5,111.05,1.7,63.75 +5568,30,2.5,111.05,1.7,63.75 +5569,30,2.5,111.05,1.7,63.75 +5570,30,2.5,111.05,1.7,63.75 +5571,30,2.5,111.05,1.7,63.75 +5572,30,2.5,111.05,1.7,63.75 +5573,30,2.5,111.05,1.7,63.75 +5574,30,2.5,111.05,1.7,63.75 +5575,30,2.5,111.05,1.7,63.75 +5576,30,2.5,111.05,1.7,63.75 +5577,30,2.5,111.05,1.7,63.75 +5578,30,2.5,111.05,1.7,63.75 +5579,30,2.5,111.05,1.7,63.75 +5580,30,2.5,111.05,1.7,63.75 +5581,30,2.5,111.05,1.7,63.75 +5582,30,2.5,111.05,1.7,63.75 +5583,30,2.5,111.05,1.7,63.75 +5584,30,2.5,111.05,1.7,63.75 +5585,30,2.5,111.05,1.7,63.75 +5586,30,2.5,111.05,1.7,63.75 +5587,30,2.5,111.05,1.7,63.75 +5588,30,2.5,111.05,1.7,63.75 +5589,30,2.5,111.05,1.7,63.75 +5590,30,2.5,111.05,1.7,63.75 +5591,30,2.5,111.05,1.7,63.75 +5592,30,2.5,111.05,1.7,63.75 +5593,30,2.5,111.05,1.7,63.75 +5594,30,2.5,111.05,1.7,63.75 +5595,30,2.5,111.05,1.7,63.75 +5596,30,2.5,111.05,1.7,63.75 +5597,30,2.5,111.05,1.7,63.75 +5598,30,2.5,111.05,1.7,63.75 +5599,30,2.5,111.05,1.7,63.75 +5600,30,2.5,111.05,1.7,63.75 +5601,30,2.5,111.05,1.7,63.75 +5602,30,2.5,111.05,1.7,63.75 +5603,30,2.5,111.05,1.7,63.75 +5604,30,2.5,111.05,1.7,63.75 +5605,30,2.5,111.05,1.7,63.75 +5606,30,2.5,111.05,1.7,63.75 +5607,30,2.5,111.05,1.7,63.75 +5608,30,2.5,111.05,1.7,63.75 +5609,30,2.5,111.05,1.7,63.75 +5610,30,2.5,111.05,1.7,63.75 +5611,30,2.5,111.05,1.7,63.75 +5612,30,2.5,111.05,1.7,63.75 +5613,30,2.5,111.05,1.7,63.75 +5614,30,2.5,111.05,1.7,63.75 +5615,30,2.5,111.05,1.7,63.75 +5616,30,2.5,111.05,1.7,63.75 +5617,30,2.5,111.05,1.7,63.75 +5618,30,2.5,111.05,1.7,63.75 +5619,30,2.5,111.05,1.7,63.75 +5620,30,2.5,111.05,1.7,63.75 +5621,30,2.5,111.05,1.7,63.75 +5622,30,2.5,111.05,1.7,63.75 +5623,30,2.5,111.05,1.7,63.75 +5624,30,2.5,111.05,1.7,63.75 +5625,30,2.5,111.05,1.7,63.75 +5626,30,2.5,111.05,1.7,63.75 +5627,30,2.5,111.05,1.7,63.75 +5628,30,2.5,111.05,1.7,63.75 +5629,30,2.5,111.05,1.7,63.75 +5630,30,2.5,111.05,1.7,63.75 +5631,30,2.5,111.05,1.7,63.75 +5632,30,2.5,111.05,1.7,63.75 +5633,30,2.5,111.05,1.7,63.75 +5634,30,2.5,111.05,1.7,63.75 +5635,30,2.5,111.05,1.7,63.75 +5636,30,2.5,111.05,1.7,63.75 +5637,30,2.5,111.05,1.7,63.75 +5638,30,2.5,111.05,1.7,63.75 +5639,30,2.5,111.05,1.7,63.75 +5640,30,2.5,111.05,1.7,63.75 +5641,30,2.5,111.05,1.7,63.75 +5642,30,2.5,111.05,1.7,63.75 +5643,30,2.5,111.05,1.7,63.75 +5644,30,2.5,111.05,1.7,63.75 +5645,30,2.5,111.05,1.7,63.75 +5646,30,2.5,111.05,1.7,63.75 +5647,30,2.5,111.05,1.7,63.75 +5648,30,2.5,111.05,1.7,63.75 +5649,30,2.5,111.05,1.7,63.75 +5650,30,2.5,111.05,1.7,63.75 +5651,30,2.5,111.05,1.7,63.75 +5652,30,2.5,111.05,1.7,63.75 +5653,30,2.5,111.05,1.7,63.75 +5654,30,2.5,111.05,1.7,63.75 +5655,30,2.5,111.05,1.7,63.75 +5656,30,2.5,111.05,1.7,63.75 +5657,30,2.5,111.05,1.7,63.75 +5658,30,2.5,111.05,1.7,63.75 +5659,30,2.5,111.05,1.7,63.75 +5660,30,2.5,111.05,1.7,63.75 +5661,30,2.5,111.05,1.7,63.75 +5662,30,2.5,111.05,1.7,63.75 +5663,30,2.5,111.05,1.7,63.75 +5664,30,2.5,111.05,1.7,63.75 +5665,30,2.5,111.05,1.7,63.75 +5666,30,2.5,111.05,1.7,63.75 +5667,30,2.5,111.05,1.7,63.75 +5668,30,2.5,111.05,1.7,63.75 +5669,30,2.5,111.05,1.7,63.75 +5670,30,2.5,111.05,1.7,63.75 +5671,30,2.5,111.05,1.7,63.75 +5672,30,2.5,111.05,1.7,63.75 +5673,30,2.5,111.05,1.7,63.75 +5674,30,2.5,111.05,1.7,63.75 +5675,30,2.5,111.05,1.7,63.75 +5676,30,2.5,111.05,1.7,63.75 +5677,30,2.5,111.05,1.7,63.75 +5678,30,2.5,111.05,1.7,63.75 +5679,30,2.5,111.05,1.7,63.75 +5680,30,2.5,111.05,1.7,63.75 +5681,30,2.5,111.05,1.7,63.75 +5682,30,2.5,111.05,1.7,63.75 +5683,30,2.5,111.05,1.7,63.75 +5684,30,2.5,111.05,1.7,63.75 +5685,30,2.5,111.05,1.7,63.75 +5686,30,2.5,111.05,1.7,63.75 +5687,30,2.5,111.05,1.7,63.75 +5688,30,2.5,111.05,1.7,63.75 +5689,30,2.5,111.05,1.7,63.75 +5690,30,2.5,111.05,1.7,63.75 +5691,30,2.5,111.05,1.7,63.75 +5692,30,2.5,111.05,1.7,63.75 +5693,30,2.5,111.05,1.7,63.75 +5694,30,2.5,111.05,1.7,63.75 +5695,30,2.5,111.05,1.7,63.75 +5696,30,2.5,111.05,1.7,63.75 +5697,30,2.5,111.05,1.7,63.75 +5698,30,2.5,111.05,1.7,63.75 +5699,30,2.5,111.05,1.7,63.75 +5700,30,2.5,111.05,1.7,63.75 +5701,30,2.5,111.05,1.7,63.75 +5702,30,2.5,111.05,1.7,63.75 +5703,30,2.5,111.05,1.7,63.75 +5704,30,2.5,111.05,1.7,63.75 +5705,30,2.5,111.05,1.7,63.75 +5706,30,2.5,111.05,1.7,63.75 +5707,30,2.5,111.05,1.7,63.75 +5708,30,2.5,111.05,1.7,63.75 +5709,30,2.5,111.05,1.7,63.75 +5710,30,2.5,111.05,1.7,63.75 +5711,30,2.5,111.05,1.7,63.75 +5712,30,2.5,111.05,1.7,63.75 +5713,30,2.5,111.05,1.7,63.75 +5714,30,2.5,111.05,1.7,63.75 +5715,30,2.5,111.05,1.7,63.75 +5716,30,2.5,111.05,1.7,63.75 +5717,30,2.5,111.05,1.7,63.75 +5718,30,2.5,111.05,1.7,63.75 +5719,30,2.5,111.05,1.7,63.75 +5720,30,2.5,111.05,1.7,63.75 +5721,30,2.5,111.05,1.7,63.75 +5722,30,2.5,111.05,1.7,63.75 +5723,30,2.5,111.05,1.7,63.75 +5724,30,2.5,111.05,1.7,63.75 +5725,30,2.5,111.05,1.7,63.75 +5726,30,2.5,111.05,1.7,63.75 +5727,30,2.5,111.05,1.7,63.75 +5728,30,2.5,111.05,1.7,63.75 +5729,30,2.5,111.05,1.7,63.75 +5730,30,2.5,111.05,1.7,63.75 +5731,30,2.5,111.05,1.7,63.75 +5732,30,2.5,111.05,1.7,63.75 +5733,30,2.5,111.05,1.7,63.75 +5734,30,2.5,111.05,1.7,63.75 +5735,30,2.5,111.05,1.7,63.75 +5736,30,2.5,111.05,1.7,63.75 +5737,30,2.5,111.05,1.7,63.75 +5738,30,2.5,111.05,1.7,63.75 +5739,30,2.5,111.05,1.7,63.75 +5740,30,2.5,111.05,1.7,63.75 +5741,30,2.5,111.05,1.7,63.75 +5742,30,2.5,111.05,1.7,63.75 +5743,30,2.5,111.05,1.7,63.75 +5744,30,2.5,111.05,1.7,63.75 +5745,30,2.5,111.05,1.7,63.75 +5746,30,2.5,111.05,1.7,63.75 +5747,30,2.5,111.05,1.7,63.75 +5748,30,2.5,111.05,1.7,63.75 +5749,30,2.5,111.05,1.7,63.75 +5750,30,2.5,111.05,1.7,63.75 +5751,30,2.5,111.05,1.7,63.75 +5752,30,2.5,111.05,1.7,63.75 +5753,30,2.5,111.05,1.7,63.75 +5754,30,2.5,111.05,1.7,63.75 +5755,30,2.5,111.05,1.7,63.75 +5756,30,2.5,111.05,1.7,63.75 +5757,30,2.5,111.05,1.7,63.75 +5758,30,2.5,111.05,1.7,63.75 +5759,30,2.5,111.05,1.7,63.75 +5760,30,2.5,111.05,1.7,63.75 +5761,30,2.5,111.05,1.7,63.75 +5762,30,2.5,111.05,1.7,63.75 +5763,30,2.5,111.05,1.7,63.75 +5764,30,2.5,111.05,1.7,63.75 +5765,30,2.5,111.05,1.7,63.75 +5766,30,2.5,111.05,1.7,63.75 +5767,30,2.5,111.05,1.7,63.75 +5768,30,2.5,111.05,1.7,63.75 +5769,30,2.5,111.05,1.7,63.75 +5770,30,2.5,111.05,1.7,63.75 +5771,30,2.5,111.05,1.7,63.75 +5772,30,2.5,111.05,1.7,63.75 +5773,30,2.5,111.05,1.7,63.75 +5774,30,2.5,111.05,1.7,63.75 +5775,30,2.5,111.05,1.7,63.75 +5776,30,2.5,111.05,1.7,63.75 +5777,30,2.5,111.05,1.7,63.75 +5778,30,2.5,111.05,1.7,63.75 +5779,30,2.5,111.05,1.7,63.75 +5780,30,2.5,111.05,1.7,63.75 +5781,30,2.5,111.05,1.7,63.75 +5782,30,2.5,111.05,1.7,63.75 +5783,30,2.5,111.05,1.7,63.75 +5784,30,2.5,111.05,1.7,63.75 +5785,30,2.5,111.05,1.7,63.75 +5786,30,2.5,111.05,1.7,63.75 +5787,30,2.5,111.05,1.7,63.75 +5788,30,2.5,111.05,1.7,63.75 +5789,30,2.5,111.05,1.7,63.75 +5790,30,2.5,111.05,1.7,63.75 +5791,30,2.5,111.05,1.7,63.75 +5792,30,2.5,111.05,1.7,63.75 +5793,30,2.5,111.05,1.7,63.75 +5794,30,2.5,111.05,1.7,63.75 +5795,30,2.5,111.05,1.7,63.75 +5796,30,2.5,111.05,1.7,63.75 +5797,30,2.5,111.05,1.7,63.75 +5798,30,2.5,111.05,1.7,63.75 +5799,30,2.5,111.05,1.7,63.75 +5800,30,2.5,111.05,1.7,63.75 +5801,30,2.5,111.05,1.7,63.75 +5802,30,2.5,111.05,1.7,63.75 +5803,30,2.5,111.05,1.7,63.75 +5804,30,2.5,111.05,1.7,63.75 +5805,30,2.5,111.05,1.7,63.75 +5806,30,2.5,111.05,1.7,63.75 +5807,30,2.5,111.05,1.7,63.75 +5808,30,2.5,111.05,1.7,63.75 +5809,30,2.5,111.05,1.7,63.75 +5810,30,2.5,111.05,1.7,63.75 +5811,30,2.5,111.05,1.7,63.75 +5812,30,2.5,111.05,1.7,63.75 +5813,30,2.5,111.05,1.7,63.75 +5814,30,2.5,111.05,1.7,63.75 +5815,30,2.5,111.05,1.7,63.75 +5816,30,2.5,111.05,1.7,63.75 +5817,30,2.5,111.05,1.7,63.75 +5818,30,2.5,111.05,1.7,63.75 +5819,30,2.5,111.05,1.7,63.75 +5820,30,2.5,111.05,1.7,63.75 +5821,30,2.5,111.05,1.7,63.75 +5822,30,2.5,111.05,1.7,63.75 +5823,30,2.5,111.05,1.7,63.75 +5824,30,2.5,111.05,1.7,63.75 +5825,30,2.5,111.05,1.7,63.75 +5826,30,2.5,111.05,1.7,63.75 +5827,30,2.5,111.05,1.7,63.75 +5828,30,2.5,111.05,1.7,63.75 +5829,30,2.5,111.05,1.7,63.75 +5830,30,2.5,111.05,1.7,63.75 +5831,30,2.5,111.05,1.7,63.75 +5832,30,2.5,111.05,1.7,63.75 +5833,30,2.5,111.05,1.7,63.75 +5834,30,2.5,111.05,1.7,63.75 +5835,30,2.5,111.05,1.7,63.75 +5836,30,2.5,111.05,1.7,63.75 +5837,30,2.5,111.05,1.7,63.75 +5838,30,2.5,111.05,1.7,63.75 +5839,30,2.5,111.05,1.7,63.75 +5840,30,2.5,111.05,1.7,63.75 +5841,30,2.5,111.05,1.7,63.75 +5842,30,2.5,111.05,1.7,63.75 +5843,30,2.5,111.05,1.7,63.75 +5844,30,2.5,111.05,1.7,63.75 +5845,30,2.5,111.05,1.7,63.75 +5846,30,2.5,111.05,1.7,63.75 +5847,30,2.5,111.05,1.7,63.75 +5848,30,2.5,111.05,1.7,63.75 +5849,30,2.5,111.05,1.7,63.75 +5850,30,2.5,111.05,1.7,63.75 +5851,30,2.5,111.05,1.7,63.75 +5852,30,2.5,111.05,1.7,63.75 +5853,30,2.5,111.05,1.7,63.75 +5854,30,2.5,111.05,1.7,63.75 +5855,30,2.5,111.05,1.7,63.75 +5856,30,2.5,111.05,1.7,63.75 +5857,30,2.5,111.05,1.7,63.75 +5858,30,2.5,111.05,1.7,63.75 +5859,30,2.5,111.05,1.7,63.75 +5860,30,2.5,111.05,1.7,63.75 +5861,30,2.5,111.05,1.7,63.75 +5862,30,2.5,111.05,1.7,63.75 +5863,30,2.5,111.05,1.7,63.75 +5864,30,2.5,111.05,1.7,63.75 +5865,30,2.5,111.05,1.7,63.75 +5866,30,2.5,111.05,1.7,63.75 +5867,30,2.5,111.05,1.7,63.75 +5868,30,2.5,111.05,1.7,63.75 +5869,30,2.5,111.05,1.7,63.75 +5870,30,2.5,111.05,1.7,63.75 +5871,30,2.5,111.05,1.7,63.75 +5872,30,2.5,111.05,1.7,63.75 +5873,30,2.5,111.05,1.7,63.75 +5874,30,2.5,111.05,1.7,63.75 +5875,30,2.5,111.05,1.7,63.75 +5876,30,2.5,111.05,1.7,63.75 +5877,30,2.5,111.05,1.7,63.75 +5878,30,2.5,111.05,1.7,63.75 +5879,30,2.5,111.05,1.7,63.75 +5880,30,2.5,111.05,1.7,63.75 +5881,30,2.5,111.05,1.7,63.75 +5882,30,2.5,111.05,1.7,63.75 +5883,30,2.5,111.05,1.7,63.75 +5884,30,2.5,111.05,1.7,63.75 +5885,30,2.5,111.05,1.7,63.75 +5886,30,2.5,111.05,1.7,63.75 +5887,30,2.5,111.05,1.7,63.75 +5888,30,2.5,111.05,1.7,63.75 +5889,30,2.5,111.05,1.7,63.75 +5890,30,2.5,111.05,1.7,63.75 +5891,30,2.5,111.05,1.7,63.75 +5892,30,2.5,111.05,1.7,63.75 +5893,30,2.5,111.05,1.7,63.75 +5894,30,2.5,111.05,1.7,63.75 +5895,30,2.5,111.05,1.7,63.75 +5896,30,2.5,111.05,1.7,63.75 +5897,30,2.5,111.05,1.7,63.75 +5898,30,2.5,111.05,1.7,63.75 +5899,30,2.5,111.05,1.7,63.75 +5900,30,2.5,111.05,1.7,63.75 +5901,30,2.5,111.05,1.7,63.75 +5902,30,2.5,111.05,1.7,63.75 +5903,30,2.5,111.05,1.7,63.75 +5904,30,2.5,111.05,1.7,63.75 +5905,30,2.5,111.05,1.7,63.75 +5906,30,2.5,111.05,1.7,63.75 +5907,30,2.5,111.05,1.7,63.75 +5908,30,2.5,111.05,1.7,63.75 +5909,30,2.5,111.05,1.7,63.75 +5910,30,2.5,111.05,1.7,63.75 +5911,30,2.5,111.05,1.7,63.75 +5912,30,2.5,111.05,1.7,63.75 +5913,30,2.5,111.05,1.7,63.75 +5914,30,2.5,111.05,1.7,63.75 +5915,30,2.5,111.05,1.7,63.75 +5916,30,2.5,111.05,1.7,63.75 +5917,30,2.5,111.05,1.7,63.75 +5918,30,2.5,111.05,1.7,63.75 +5919,30,2.5,111.05,1.7,63.75 +5920,30,2.5,111.05,1.7,63.75 +5921,30,2.5,111.05,1.7,63.75 +5922,30,2.5,111.05,1.7,63.75 +5923,30,2.5,111.05,1.7,63.75 +5924,30,2.5,111.05,1.7,63.75 +5925,30,2.5,111.05,1.7,63.75 +5926,30,2.5,111.05,1.7,63.75 +5927,30,2.5,111.05,1.7,63.75 +5928,30,2.5,111.05,1.7,63.75 +5929,30,2.5,111.05,1.7,63.75 +5930,30,2.5,111.05,1.7,63.75 +5931,30,2.5,111.05,1.7,63.75 +5932,30,2.5,111.05,1.7,63.75 +5933,30,2.5,111.05,1.7,63.75 +5934,30,2.5,111.05,1.7,63.75 +5935,30,2.5,111.05,1.7,63.75 +5936,30,2.5,111.05,1.7,63.75 +5937,30,2.5,111.05,1.7,63.75 +5938,30,2.5,111.05,1.7,63.75 +5939,30,2.5,111.05,1.7,63.75 +5940,30,2.5,111.05,1.7,63.75 +5941,30,2.5,111.05,1.7,63.75 +5942,30,2.5,111.05,1.7,63.75 +5943,30,2.5,111.05,1.7,63.75 +5944,30,2.5,111.05,1.7,63.75 +5945,30,2.5,111.05,1.7,63.75 +5946,30,2.5,111.05,1.7,63.75 +5947,30,2.5,111.05,1.7,63.75 +5948,30,2.5,111.05,1.7,63.75 +5949,30,2.5,111.05,1.7,63.75 +5950,30,2.5,111.05,1.7,63.75 +5951,30,2.5,111.05,1.7,63.75 +5952,30,2.5,111.05,1.7,63.75 +5953,30,2.5,111.05,1.7,63.75 +5954,30,2.5,111.05,1.7,63.75 +5955,30,2.5,111.05,1.7,63.75 +5956,30,2.5,111.05,1.7,63.75 +5957,30,2.5,111.05,1.7,63.75 +5958,30,2.5,111.05,1.7,63.75 +5959,30,2.5,111.05,1.7,63.75 +5960,30,2.5,111.05,1.7,63.75 +5961,30,2.5,111.05,1.7,63.75 +5962,30,2.5,111.05,1.7,63.75 +5963,30,2.5,111.05,1.7,63.75 +5964,30,2.5,111.05,1.7,63.75 +5965,30,2.5,111.05,1.7,63.75 +5966,30,2.5,111.05,1.7,63.75 +5967,30,2.5,111.05,1.7,63.75 +5968,30,2.5,111.05,1.7,63.75 +5969,30,2.5,111.05,1.7,63.75 +5970,30,2.5,111.05,1.7,63.75 +5971,30,2.5,111.05,1.7,63.75 +5972,30,2.5,111.05,1.7,63.75 +5973,30,2.5,111.05,1.7,63.75 +5974,30,2.5,111.05,1.7,63.75 +5975,30,2.5,111.05,1.7,63.75 +5976,30,2.5,111.05,1.7,63.75 +5977,30,2.5,111.05,1.7,63.75 +5978,30,2.5,111.05,1.7,63.75 +5979,30,2.5,111.05,1.7,63.75 +5980,30,2.5,111.05,1.7,63.75 +5981,30,2.5,111.05,1.7,63.75 +5982,30,2.5,111.05,1.7,63.75 +5983,30,2.5,111.05,1.7,63.75 +5984,30,2.5,111.05,1.7,63.75 +5985,30,2.5,111.05,1.7,63.75 +5986,30,2.5,111.05,1.7,63.75 +5987,30,2.5,111.05,1.7,63.75 +5988,30,2.5,111.05,1.7,63.75 +5989,30,2.5,111.05,1.7,63.75 +5990,30,2.5,111.05,1.7,63.75 +5991,30,2.5,111.05,1.7,63.75 +5992,30,2.5,111.05,1.7,63.75 +5993,30,2.5,111.05,1.7,63.75 +5994,30,2.5,111.05,1.7,63.75 +5995,30,2.5,111.05,1.7,63.75 +5996,30,2.5,111.05,1.7,63.75 +5997,30,2.5,111.05,1.7,63.75 +5998,30,2.5,111.05,1.7,63.75 +5999,30,2.5,111.05,1.7,63.75 +6000,30,2.5,111.05,1.7,63.75 diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/test5.csv b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/test5.csv new file mode 100644 index 0000000..dfaf406 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/test5.csv @@ -0,0 +1,1023 @@ +#test configuration file2,,,,,, +#Time,MHVPS,BPS,APS,MC,GC,FHPS +0,60,45,10,10,10,10 +10,55,40,7,9,9,9 +20,50,35,4,8,8,8 +30,45,30,1,7,7,7 +40,40,25,-2,6,6,6 +50,35,20,-5,5,5,5 +60,30,15,-8,4,4,4 +70,25,10,-11,3,3,3 +80,20,5,-14,2,2,2 +90,15,0,-17,1,1,1 +100,10,-5,-20,0,0,0 +110,5,0,-23,1,1,1 +120,0,5,-20,2,2,2 +130,-5,10,-17,3,3,3 +140,0,15,-14,4,4,4 +150,5,20,-11,5,5,5 +160,10,25,-8,6,6,6 +170,15,30,-5,7,7,7 +180,20,35,-2,8,8,8 +190,25,40,1,9,9,9 +200,30,45,4,10,10,10 +210,35,40,7,9,9,9 +220,40,35,10,8,8,8 +230,45,30,13,7,7,7 +240,50,25,10,6,6,6 +250,55,20,7,5,5,5 +260,60,15,4,4,4,4 +270,55,10,1,3,3,3 +280,50,5,-2,2,2,2 +290,45,0,-5,1,1,1 +300,40,-5,-8,0,0,0 +310,35,0,-11,1,1,1 +320,30,5,-14,2,2,2 +330,25,10,-17,3,3,3 +340,20,15,-20,4,4,4 +350,15,20,-23,5,5,5 +360,10,25,-20,6,6,6 +370,5,30,-17,7,7,7 +380,0,35,-14,8,8,8 +390,-5,40,-11,9,9,9 +400,0,45,-8,10,10,10 +410,5,40,-5,9,9,9 +420,10,35,-2,8,8,8 +430,15,30,1,7,7,7 +440,20,25,4,6,6,6 +450,25,20,7,5,5,5 +460,30,15,10,4,4,4 +470,35,10,13,3,3,3 +480,40,5,10,2,2,2 +490,45,0,7,1,1,1 +500,50,-5,4,0,0,0 +510,55,0,1,1,1,1 +520,60,5,-2,2,2,2 +530,55,10,-5,3,3,3 +540,50,15,-8,4,4,4 +550,45,20,-11,5,5,5 +560,40,25,-14,6,6,6 +570,35,30,-17,7,7,7 +580,30,35,-20,8,8,8 +590,25,40,-23,9,9,9 +600,20,45,-20,10,10,10 +610,15,40,-17,9,9,9 +620,10,35,-14,8,8,8 +630,5,30,-11,7,7,7 +640,0,25,-8,6,6,6 +650,-5,20,-5,5,5,5 +660,0,15,-2,4,4,4 +670,5,10,1,3,3,3 +680,10,5,4,2,2,2 +690,15,0,7,1,1,1 +700,20,-5,10,0,0,0 +710,25,0,13,1,1,1 +720,30,5,10,2,2,2 +730,35,10,7,3,3,3 +740,40,15,4,4,4,4 +750,45,20,1,5,5,5 +760,50,25,-2,6,6,6 +770,55,30,-5,7,7,7 +780,60,35,-8,8,8,8 +790,55,40,-11,9,9,9 +800,50,45,-14,10,10,10 +810,45,40,-17,9,9,9 +820,40,35,-20,8,8,8 +830,35,30,-23,7,7,7 +840,30,25,-20,6,6,6 +850,25,20,-17,5,5,5 +860,20,15,-14,4,4,4 +870,15,10,-11,3,3,3 +880,10,5,-8,2,2,2 +890,5,0,-5,1,1,1 +900,0,-5,-2,0,0,0 +910,-5,0,1,1,1,1 +920,0,5,4,2,2,2 +930,5,10,7,3,3,3 +940,10,15,10,4,4,4 +950,15,20,13,5,5,5 +960,20,25,10,6,6,6 +970,25,30,7,7,7,7 +980,30,35,4,8,8,8 +990,35,40,1,9,9,9 +1000,40,45,-2,10,10,10 +1010,10,20,30,40,50,60 +1020,10,20,30,40,50,60 +1030,10,20,30,40,50,60 +1040,10,20,30,40,50,60 +1050,10,20,30,40,50,60 +1060,10,20,30,40,50,60 +1070,10,20,30,40,50,60 +1080,10,20,30,40,50,60 +1090,10,20,30,40,50,60 +1100,10,20,30,40,50,60 +1110,10,20,30,40,50,60 +1120,10,20,30,40,50,60 +1130,10,20,30,40,50,60 +1140,10,20,30,40,50,60 +1150,10,20,30,40,50,60 +1160,10,20,30,40,50,60 +1170,10,20,30,40,50,60 +1180,10,20,30,40,50,60 +1190,10,20,30,40,50,60 +1200,10,20,30,40,50,60 +1210,10,20,30,40,50,60 +1220,10,20,30,40,50,60 +1230,10,20,30,40,50,60 +1240,10,20,30,40,50,60 +1250,10,20,30,40,50,60 +1260,10,20,30,40,50,60 +1270,10,20,30,40,50,60 +1280,10,20,30,40,50,60 +1290,10,20,30,40,50,60 +1300,10,20,30,40,50,60 +1310,10,20,30,40,50,60 +1320,10,20,30,40,50,60 +1330,10,20,30,40,50,60 +1340,10,20,30,40,50,60 +1350,10,20,30,40,50,60 +1360,10,20,30,40,50,60 +1370,10,20,30,40,50,60 +1380,10,20,30,40,50,60 +1390,10,20,30,40,50,60 +1400,10,20,30,40,50,60 +1410,10,20,30,40,50,60 +1420,10,20,30,40,50,60 +1430,10,20,30,40,50,60 +1440,10,20,30,40,50,60 +1450,10,20,30,40,50,60 +1460,10,20,30,40,50,60 +1470,10,20,30,40,50,60 +1480,10,20,30,40,50,60 +1490,10,20,30,40,50,60 +1500,10,20,30,40,50,60 +1510,10,20,30,40,50,60 +1520,10,20,30,40,50,60 +1530,10,20,30,40,50,60 +1540,10,20,30,40,50,60 +1550,10,20,30,40,50,60 +1560,10,20,30,40,50,60 +1570,10,20,30,40,50,60 +1580,10,20,30,40,50,60 +1590,10,20,30,40,50,60 +1600,10,20,30,40,50,60 +1610,10,20,30,40,50,60 +1620,10,20,30,40,50,60 +1630,10,20,30,40,50,60 +1640,10,20,30,40,50,60 +1650,10,20,30,40,50,60 +1660,10,20,30,40,50,60 +1670,10,20,30,40,50,60 +1680,10,20,30,40,50,60 +1690,10,20,30,40,50,60 +1700,10,20,30,40,50,60 +1710,10,20,30,40,50,60 +1720,10,20,30,40,50,60 +1730,10,20,30,40,50,60 +1740,10,20,30,40,50,60 +1750,10,20,30,40,50,60 +1760,10,20,30,40,50,60 +1770,10,20,30,40,50,60 +1780,10,20,30,40,50,60 +1790,10,20,30,40,50,60 +1800,10,20,30,40,50,60 +1810,10,20,30,40,50,60 +1820,10,20,30,40,50,60 +1830,10,20,30,40,50,60 +1840,10,20,30,40,50,60 +1850,10,20,30,40,50,60 +1860,10,20,30,40,50,60 +1870,10,20,30,40,50,60 +1880,10,20,30,40,50,60 +1890,10,20,30,40,50,60 +1900,10,20,30,40,50,60 +1910,10,20,30,40,50,60 +1920,10,20,30,40,50,60 +1930,10,20,30,40,50,60 +1940,10,20,30,40,50,60 +1950,10,20,30,40,50,60 +1960,10,20,30,40,50,60 +1970,10,20,30,40,50,60 +1980,10,20,30,40,50,60 +1990,10,20,30,40,50,60 +2000,10,20,30,40,50,60 +2010,10,20,30,40,50,60 +2020,10,20,30,40,50,60 +2030,10,20,30,40,50,60 +2040,10,20,30,40,50,60 +2050,10,20,30,40,50,60 +2060,10,20,30,40,50,60 +2070,10,20,30,40,50,60 +2080,10,20,30,40,50,60 +2090,10,20,30,40,50,60 +2100,10,20,30,40,50,60 +2110,10,20,30,40,50,60 +2120,10,20,30,40,50,60 +2130,10,20,30,40,50,60 +2140,10,20,30,40,50,60 +2150,10,20,30,40,50,60 +2160,10,20,30,40,50,60 +2170,10,20,30,40,50,60 +2180,10,20,30,40,50,60 +2190,10,20,30,40,50,60 +2200,10,20,30,40,50,60 +2210,10,20,30,40,50,60 +2220,10,20,30,40,50,60 +2230,10,20,30,40,50,60 +2240,10,20,30,40,50,60 +2250,10,20,30,40,50,60 +2260,10,20,30,40,50,60 +2270,10,20,30,40,50,60 +2280,10,20,30,40,50,60 +2290,10,20,30,40,50,60 +2300,10,20,30,40,50,60 +2310,10,20,30,40,50,60 +2320,10,20,30,40,50,60 +2330,10,20,30,40,50,60 +2340,10,20,30,40,50,60 +2350,10,20,30,40,50,60 +2360,10,20,30,40,50,60 +2370,10,20,30,40,50,60 +2380,10,20,30,40,50,60 +2390,10,20,30,40,50,60 +2400,10,20,30,40,50,60 +2410,10,20,30,40,50,60 +2420,10,20,30,40,50,60 +2430,10,20,30,40,50,60 +2440,10,20,30,40,50,60 +2450,10,20,30,40,50,60 +2460,10,20,30,40,50,60 +2470,10,20,30,40,50,60 +2480,10,20,30,40,50,60 +2490,10,20,30,40,50,60 +2500,10,20,30,40,50,60 +2510,10,20,30,40,50,60 +2520,10,20,30,40,50,60 +2530,10,20,30,40,50,60 +2540,10,20,30,40,50,60 +2550,10,20,30,40,50,60 +2560,10,20,30,40,50,60 +2570,10,20,30,40,50,60 +2580,10,20,30,40,50,60 +2590,10,20,30,40,50,60 +2600,10,20,30,40,50,60 +2610,10,20,30,40,50,60 +2620,10,20,30,40,50,60 +2630,10,20,30,40,50,60 +2640,10,20,30,40,50,60 +2650,10,20,30,40,50,60 +2660,10,20,30,40,50,60 +2670,10,20,30,40,50,60 +2680,10,20,30,40,50,60 +2690,10,20,30,40,50,60 +2700,10,20,30,40,50,60 +2710,10,20,30,40,50,60 +2720,10,20,30,40,50,60 +2730,10,20,30,40,50,60 +2740,10,20,30,40,50,60 +2750,10,20,30,40,50,60 +2760,10,20,30,40,50,60 +2770,10,20,30,40,50,60 +2780,10,20,30,40,50,60 +2790,10,20,30,40,50,60 +2800,10,20,30,40,50,60 +2810,10,20,30,40,50,60 +2820,10,20,30,40,50,60 +2830,10,20,30,40,50,60 +2840,10,20,30,40,50,60 +2850,10,20,30,40,50,60 +2860,10,20,30,40,50,60 +2870,10,20,30,40,50,60 +2880,10,20,30,40,50,60 +2890,10,20,30,40,50,60 +2900,10,20,30,40,50,60 +2910,10,20,30,40,50,60 +2920,10,20,30,40,50,60 +2930,10,20,30,40,50,60 +2940,10,20,30,40,50,60 +2950,10,20,30,40,50,60 +2960,10,20,30,40,50,60 +2970,10,20,30,40,50,60 +2980,10,20,30,40,50,60 +2990,10,20,30,40,50,60 +3000,10,20,30,40,50,60 +3010,10,20,30,40,50,60 +3020,10,20,30,40,50,60 +3030,10,20,30,40,50,60 +3040,10,20,30,40,50,60 +3050,10,20,30,40,50,60 +3060,10,20,30,40,50,60 +3070,10,20,30,40,50,60 +3080,10,20,30,40,50,60 +3090,10,20,30,40,50,60 +3100,10,20,30,40,50,60 +3110,10,20,30,40,50,60 +3120,10,20,30,40,50,60 +3130,10,20,30,40,50,60 +3140,10,20,30,40,50,60 +3150,10,20,30,40,50,60 +3160,10,20,30,40,50,60 +3170,10,20,30,40,50,60 +3180,10,20,30,40,50,60 +3190,10,20,30,40,50,60 +3200,10,20,30,40,50,60 +3210,10,20,30,40,50,60 +3220,10,20,30,40,50,60 +3230,10,20,30,40,50,60 +3240,10,20,30,40,50,60 +3250,10,20,30,40,50,60 +3260,10,20,30,40,50,60 +3270,10,20,30,40,50,60 +3280,10,20,30,40,50,60 +3290,10,20,30,40,50,60 +3300,10,20,30,40,50,60 +3310,10,20,30,40,50,60 +3320,10,20,30,40,50,60 +3330,10,20,30,40,50,60 +3340,10,20,30,40,50,60 +3350,10,20,30,40,50,60 +3360,10,20,30,40,50,60 +3370,10,20,30,40,50,60 +3380,10,20,30,40,50,60 +3390,10,20,30,40,50,60 +3400,10,20,30,40,50,60 +3410,10,20,30,40,50,60 +3420,10,20,30,40,50,60 +3430,10,20,30,40,50,60 +3440,10,20,30,40,50,60 +3450,10,20,30,40,50,60 +3460,10,20,30,40,50,60 +3470,10,20,30,40,50,60 +3480,10,20,30,40,50,60 +3490,10,20,30,40,50,60 +3500,10,20,30,40,50,60 +3510,10,20,30,40,50,60 +3520,10,20,30,40,50,60 +3530,10,20,30,40,50,60 +3540,10,20,30,40,50,60 +3550,10,20,30,40,50,60 +3560,10,20,30,40,50,60 +3570,10,20,30,40,50,60 +3580,10,20,30,40,50,60 +3590,10,20,30,40,50,60 +3600,10,20,30,40,50,60 +3610,10,20,30,40,50,60 +3620,10,20,30,40,50,60 +3630,10,20,30,40,50,60 +3640,10,20,30,40,50,60 +3650,10,20,30,40,50,60 +3660,10,20,30,40,50,60 +3670,10,20,30,40,50,60 +3680,10,20,30,40,50,60 +3690,10,20,30,40,50,60 +3700,10,20,30,40,50,60 +3710,10,20,30,40,50,60 +3720,10,20,30,40,50,60 +3730,10,20,30,40,50,60 +3740,10,20,30,40,50,60 +3750,10,20,30,40,50,60 +3760,10,20,30,40,50,60 +3770,10,20,30,40,50,60 +3780,10,20,30,40,50,60 +3790,10,20,30,40,50,60 +3800,10,20,30,40,50,60 +3810,10,20,30,40,50,60 +3820,10,20,30,40,50,60 +3830,10,20,30,40,50,60 +3840,10,20,30,40,50,60 +3850,10,20,30,40,50,60 +3860,10,20,30,40,50,60 +3870,10,20,30,40,50,60 +3880,10,20,30,40,50,60 +3890,10,20,30,40,50,60 +3900,10,20,30,40,50,60 +3910,10,20,30,40,50,60 +3920,10,20,30,40,50,60 +3930,10,20,30,40,50,60 +3940,10,20,30,40,50,60 +3950,10,20,30,40,50,60 +3960,10,20,30,40,50,60 +3970,10,20,30,40,50,60 +3980,10,20,30,40,50,60 +3990,10,20,30,40,50,60 +4000,10,20,30,40,50,60 +4010,10,20,30,40,50,60 +4020,10,20,30,40,50,60 +4030,10,20,30,40,50,60 +4040,10,20,30,40,50,60 +4050,10,20,30,40,50,60 +4060,10,20,30,40,50,60 +4070,10,20,30,40,50,60 +4080,10,20,30,40,50,60 +4090,10,20,30,40,50,60 +4100,10,20,30,40,50,60 +4110,10,20,30,40,50,60 +4120,10,20,30,40,50,60 +4130,10,20,30,40,50,60 +4140,10,20,30,40,50,60 +4150,10,20,30,40,50,60 +4160,10,20,30,40,50,60 +4170,10,20,30,40,50,60 +4180,10,20,30,40,50,60 +4190,10,20,30,40,50,60 +4200,10,20,30,40,50,60 +4210,10,20,30,40,50,60 +4220,10,20,30,40,50,60 +4230,10,20,30,40,50,60 +4240,10,20,30,40,50,60 +4250,10,20,30,40,50,60 +4260,10,20,30,40,50,60 +4270,10,20,30,40,50,60 +4280,10,20,30,40,50,60 +4290,10,20,30,40,50,60 +4300,10,20,30,40,50,60 +4310,10,20,30,40,50,60 +4320,10,20,30,40,50,60 +4330,10,20,30,40,50,60 +4340,10,20,30,40,50,60 +4350,10,20,30,40,50,60 +4360,10,20,30,40,50,60 +4370,10,20,30,40,50,60 +4380,10,20,30,40,50,60 +4390,10,20,30,40,50,60 +4400,10,20,30,40,50,60 +4410,10,20,30,40,50,60 +4420,10,20,30,40,50,60 +4430,10,20,30,40,50,60 +4440,10,20,30,40,50,60 +4450,10,20,30,40,50,60 +4460,10,20,30,40,50,60 +4470,10,20,30,40,50,60 +4480,10,20,30,40,50,60 +4490,10,20,30,40,50,60 +4500,10,20,30,40,50,60 +4510,10,20,30,40,50,60 +4520,10,20,30,40,50,60 +4530,10,20,30,40,50,60 +4540,10,20,30,40,50,60 +4550,10,20,30,40,50,60 +4560,10,20,30,40,50,60 +4570,10,20,30,40,50,60 +4580,10,20,30,40,50,60 +4590,10,20,30,40,50,60 +4600,10,20,30,40,50,60 +4610,10,20,30,40,50,60 +4620,10,20,30,40,50,60 +4630,10,20,30,40,50,60 +4640,10,20,30,40,50,60 +4650,10,20,30,40,50,60 +4660,10,20,30,40,50,60 +4670,10,20,30,40,50,60 +4680,10,20,30,40,50,60 +4690,10,20,30,40,50,60 +4700,10,20,30,40,50,60 +4710,10,20,30,40,50,60 +4720,10,20,30,40,50,60 +4730,10,20,30,40,50,60 +4740,10,20,30,40,50,60 +4750,10,20,30,40,50,60 +4760,10,20,30,40,50,60 +4770,10,20,30,40,50,60 +4780,10,20,30,40,50,60 +4790,10,20,30,40,50,60 +4800,10,20,30,40,50,60 +4810,10,20,30,40,50,60 +4820,10,20,30,40,50,60 +4830,10,20,30,40,50,60 +4840,10,20,30,40,50,60 +4850,10,20,30,40,50,60 +4860,10,20,30,40,50,60 +4870,10,20,30,40,50,60 +4880,10,20,30,40,50,60 +4890,10,20,30,40,50,60 +4900,10,20,30,40,50,60 +4910,10,20,30,40,50,60 +4920,10,20,30,40,50,60 +4930,10,20,30,40,50,60 +4940,10,20,30,40,50,60 +4950,10,20,30,40,50,60 +4960,10,20,30,40,50,60 +4970,10,20,30,40,50,60 +4980,10,20,30,40,50,60 +4990,10,20,30,40,50,60 +5000,10,20,30,40,50,60 +5010,10,20,30,40,50,60 +5020,10,20,30,40,50,60 +5030,10,20,30,40,50,60 +5040,10,20,30,40,50,60 +5050,10,20,30,40,50,60 +5060,10,20,30,40,50,60 +5070,10,20,30,40,50,60 +5080,10,20,30,40,50,60 +5090,10,20,30,40,50,60 +5100,10,20,30,40,50,60 +5110,10,20,30,40,50,60 +5120,10,20,30,40,50,60 +5130,10,20,30,40,50,60 +5140,10,20,30,40,50,60 +5150,10,20,30,40,50,60 +5160,10,20,30,40,50,60 +5170,10,20,30,40,50,60 +5180,10,20,30,40,50,60 +5190,10,20,30,40,50,60 +5200,10,20,30,40,50,60 +5210,10,20,30,40,50,60 +5220,10,20,30,40,50,60 +5230,10,20,30,40,50,60 +5240,10,20,30,40,50,60 +5250,10,20,30,40,50,60 +5260,10,20,30,40,50,60 +5270,10,20,30,40,50,60 +5280,10,20,30,40,50,60 +5290,10,20,30,40,50,60 +5300,10,20,30,40,50,60 +5310,10,20,30,40,50,60 +5320,10,20,30,40,50,60 +5330,10,20,30,40,50,60 +5340,10,20,30,40,50,60 +5350,10,20,30,40,50,60 +5360,10,20,30,40,50,60 +5370,10,20,30,40,50,60 +5380,10,20,30,40,50,60 +5390,10,20,30,40,50,60 +5400,10,20,30,40,50,60 +5410,10,20,30,40,50,60 +5420,10,20,30,40,50,60 +5430,10,20,30,40,50,60 +5440,10,20,30,40,50,60 +5450,10,20,30,40,50,60 +5460,10,20,30,40,50,60 +5470,10,20,30,40,50,60 +5480,10,20,30,40,50,60 +5490,10,20,30,40,50,60 +5500,10,20,30,40,50,60 +5510,10,20,30,40,50,60 +5520,10,20,30,40,50,60 +5530,10,20,30,40,50,60 +5540,10,20,30,40,50,60 +5550,10,20,30,40,50,60 +5560,10,20,30,40,50,60 +5570,10,20,30,40,50,60 +5580,10,20,30,40,50,60 +5590,10,20,30,40,50,60 +5600,10,20,30,40,50,60 +5610,10,20,30,40,50,60 +5620,10,20,30,40,50,60 +5630,10,20,30,40,50,60 +5640,10,20,30,40,50,60 +5650,10,20,30,40,50,60 +5660,10,20,30,40,50,60 +5670,10,20,30,40,50,60 +5680,10,20,30,40,50,60 +5690,10,20,30,40,50,60 +5700,10,20,30,40,50,60 +5710,10,20,30,40,50,60 +5720,10,20,30,40,50,60 +5730,10,20,30,40,50,60 +5740,10,20,30,40,50,60 +5750,10,20,30,40,50,60 +5760,10,20,30,40,50,60 +5770,10,20,30,40,50,60 +5780,10,20,30,40,50,60 +5790,10,20,30,40,50,60 +5800,10,20,30,40,50,60 +5810,10,20,30,40,50,60 +5820,10,20,30,40,50,60 +5830,10,20,30,40,50,60 +5840,10,20,30,40,50,60 +5850,10,20,30,40,50,60 +5860,10,20,30,40,50,60 +5870,10,20,30,40,50,60 +5880,10,20,30,40,50,60 +5890,10,20,30,40,50,60 +5900,10,20,30,40,50,60 +5910,10,20,30,40,50,60 +5920,10,20,30,40,50,60 +5930,10,20,30,40,50,60 +5940,10,20,30,40,50,60 +5950,10,20,30,40,50,60 +5960,10,20,30,40,50,60 +5970,10,20,30,40,50,60 +5980,10,20,30,40,50,60 +5990,10,20,30,40,50,60 +6000,10,20,30,40,50,60 +6010,10,20,30,40,50,60 +6020,10,20,30,40,50,60 +6030,10,20,30,40,50,60 +6040,10,20,30,40,50,60 +6050,10,20,30,40,50,60 +6060,10,20,30,40,50,60 +6070,10,20,30,40,50,60 +6080,10,20,30,40,50,60 +6090,10,20,30,40,50,60 +6100,10,20,30,40,50,60 +6110,10,20,30,40,50,60 +6120,10,20,30,40,50,60 +6130,10,20,30,40,50,60 +6140,10,20,30,40,50,60 +6150,10,20,30,40,50,60 +6160,10,20,30,40,50,60 +6170,10,20,30,40,50,60 +6180,10,20,30,40,50,60 +6190,10,20,30,40,50,60 +6200,10,20,30,40,50,60 +6210,10,20,30,40,50,60 +6220,10,20,30,40,50,60 +6230,10,20,30,40,50,60 +6240,10,20,30,40,50,60 +6250,10,20,30,40,50,60 +6260,10,20,30,40,50,60 +6270,10,20,30,40,50,60 +6280,10,20,30,40,50,60 +6290,10,20,30,40,50,60 +6300,10,20,30,40,50,60 +6310,10,20,30,40,50,60 +6320,10,20,30,40,50,60 +6330,10,20,30,40,50,60 +6340,10,20,30,40,50,60 +6350,10,20,30,40,50,60 +6360,10,20,30,40,50,60 +6370,10,20,30,40,50,60 +6380,10,20,30,40,50,60 +6390,10,20,30,40,50,60 +6400,10,20,30,40,50,60 +6410,10,20,30,40,50,60 +6420,10,20,30,40,50,60 +6430,10,20,30,40,50,60 +6440,10,20,30,40,50,60 +6450,10,20,30,40,50,60 +6460,10,20,30,40,50,60 +6470,10,20,30,40,50,60 +6480,10,20,30,40,50,60 +6490,10,20,30,40,50,60 +6500,10,20,30,40,50,60 +6510,10,20,30,40,50,60 +6520,10,20,30,40,50,60 +6530,10,20,30,40,50,60 +6540,10,20,30,40,50,60 +6550,10,20,30,40,50,60 +6560,10,20,30,40,50,60 +6570,10,20,30,40,50,60 +6580,10,20,30,40,50,60 +6590,10,20,30,40,50,60 +6600,10,20,30,40,50,60 +6610,10,20,30,40,50,60 +6620,10,20,30,40,50,60 +6630,10,20,30,40,50,60 +6640,10,20,30,40,50,60 +6650,10,20,30,40,50,60 +6660,10,20,30,40,50,60 +6670,10,20,30,40,50,60 +6680,10,20,30,40,50,60 +6690,10,20,30,40,50,60 +6700,10,20,30,40,50,60 +6710,10,20,30,40,50,60 +6720,10,20,30,40,50,60 +6730,10,20,30,40,50,60 +6740,10,20,30,40,50,60 +6750,10,20,30,40,50,60 +6760,10,20,30,40,50,60 +6770,10,20,30,40,50,60 +6780,10,20,30,40,50,60 +6790,10,20,30,40,50,60 +6800,10,20,30,40,50,60 +6810,10,20,30,40,50,60 +6820,10,20,30,40,50,60 +6830,10,20,30,40,50,60 +6840,10,20,30,40,50,60 +6850,10,20,30,40,50,60 +6860,10,20,30,40,50,60 +6870,10,20,30,40,50,60 +6880,10,20,30,40,50,60 +6890,10,20,30,40,50,60 +6900,10,20,30,40,50,60 +6910,10,20,30,40,50,60 +6920,10,20,30,40,50,60 +6930,10,20,30,40,50,60 +6940,10,20,30,40,50,60 +6950,10,20,30,40,50,60 +6960,10,20,30,40,50,60 +6970,10,20,30,40,50,60 +6980,10,20,30,40,50,60 +6990,10,20,30,40,50,60 +7000,10,20,30,40,50,60 +7010,10,20,30,40,50,60 +7020,10,20,30,40,50,60 +7030,10,20,30,40,50,60 +7040,10,20,30,40,50,60 +7050,10,20,30,40,50,60 +7060,10,20,30,40,50,60 +7070,10,20,30,40,50,60 +7080,10,20,30,40,50,60 +7090,10,20,30,40,50,60 +7100,10,20,30,40,50,60 +7110,10,20,30,40,50,60 +7120,10,20,30,40,50,60 +7130,10,20,30,40,50,60 +7140,10,20,30,40,50,60 +7150,10,20,30,40,50,60 +7160,10,20,30,40,50,60 +7170,10,20,30,40,50,60 +7180,10,20,30,40,50,60 +7190,10,20,30,40,50,60 +7200,10,20,30,40,50,60 +7210,10,20,30,40,50,60 +7220,10,20,30,40,50,60 +7230,10,20,30,40,50,60 +7240,10,20,30,40,50,60 +7250,10,20,30,40,50,60 +7260,10,20,30,40,50,60 +7270,10,20,30,40,50,60 +7280,10,20,30,40,50,60 +7290,10,20,30,40,50,60 +7300,10,20,30,40,50,60 +7310,10,20,30,40,50,60 +7320,10,20,30,40,50,60 +7330,10,20,30,40,50,60 +7340,10,20,30,40,50,60 +7350,10,20,30,40,50,60 +7360,10,20,30,40,50,60 +7370,10,20,30,40,50,60 +7380,10,20,30,40,50,60 +7390,10,20,30,40,50,60 +7400,10,20,30,40,50,60 +7410,10,20,30,40,50,60 +7420,10,20,30,40,50,60 +7430,10,20,30,40,50,60 +7440,10,20,30,40,50,60 +7450,10,20,30,40,50,60 +7460,10,20,30,40,50,60 +7470,10,20,30,40,50,60 +7480,10,20,30,40,50,60 +7490,10,20,30,40,50,60 +7500,10,20,30,40,50,60 +7510,10,20,30,40,50,60 +7520,10,20,30,40,50,60 +7530,10,20,30,40,50,60 +7540,10,20,30,40,50,60 +7550,10,20,30,40,50,60 +7560,10,20,30,40,50,60 +7570,10,20,30,40,50,60 +7580,10,20,30,40,50,60 +7590,10,20,30,40,50,60 +7600,10,20,30,40,50,60 +7610,10,20,30,40,50,60 +7620,10,20,30,40,50,60 +7630,10,20,30,40,50,60 +7640,10,20,30,40,50,60 +7650,10,20,30,40,50,60 +7660,10,20,30,40,50,60 +7670,10,20,30,40,50,60 +7680,10,20,30,40,50,60 +7690,10,20,30,40,50,60 +7700,10,20,30,40,50,60 +7710,10,20,30,40,50,60 +7720,10,20,30,40,50,60 +7730,10,20,30,40,50,60 +7740,10,20,30,40,50,60 +7750,10,20,30,40,50,60 +7760,10,20,30,40,50,60 +7770,10,20,30,40,50,60 +7780,10,20,30,40,50,60 +7790,10,20,30,40,50,60 +7800,10,20,30,40,50,60 +7810,10,20,30,40,50,60 +7820,10,20,30,40,50,60 +7830,10,20,30,40,50,60 +7840,10,20,30,40,50,60 +7850,10,20,30,40,50,60 +7860,10,20,30,40,50,60 +7870,10,20,30,40,50,60 +7880,10,20,30,40,50,60 +7890,10,20,30,40,50,60 +7900,10,20,30,40,50,60 +7910,10,20,30,40,50,60 +7920,10,20,30,40,50,60 +7930,10,20,30,40,50,60 +7940,10,20,30,40,50,60 +7950,10,20,30,40,50,60 +7960,10,20,30,40,50,60 +7970,10,20,30,40,50,60 +7980,10,20,30,40,50,60 +7990,10,20,30,40,50,60 +8000,10,20,30,40,50,60 +8010,10,20,30,40,50,60 +8020,10,20,30,40,50,60 +8030,10,20,30,40,50,60 +8040,10,20,30,40,50,60 +8050,10,20,30,40,50,60 +8060,10,20,30,40,50,60 +8070,10,20,30,40,50,60 +8080,10,20,30,40,50,60 +8090,10,20,30,40,50,60 +8100,10,20,30,40,50,60 +8110,10,20,30,40,50,60 +8120,10,20,30,40,50,60 +8130,10,20,30,40,50,60 +8140,10,20,30,40,50,60 +8150,10,20,30,40,50,60 +8160,10,20,30,40,50,60 +8170,10,20,30,40,50,60 +8180,10,20,30,40,50,60 +8190,10,20,30,40,50,60 +8200,10,20,30,40,50,60 +8210,10,20,30,40,50,60 +8220,10,20,30,40,50,60 +8230,10,20,30,40,50,60 +8240,10,20,30,40,50,60 +8250,10,20,30,40,50,60 +8260,10,20,30,40,50,60 +8270,10,20,30,40,50,60 +8280,10,20,30,40,50,60 +8290,10,20,30,40,50,60 +8300,10,20,30,40,50,60 +8310,10,20,30,40,50,60 +8320,10,20,30,40,50,60 +8330,10,20,30,40,50,60 +8340,10,20,30,40,50,60 +8350,10,20,30,40,50,60 +8360,10,20,30,40,50,60 +8370,10,20,30,40,50,60 +8380,10,20,30,40,50,60 +8390,10,20,30,40,50,60 +8400,10,20,30,40,50,60 +8410,10,20,30,40,50,60 +8420,10,20,30,40,50,60 +8430,10,20,30,40,50,60 +8440,10,20,30,40,50,60 +8450,10,20,30,40,50,60 +8460,10,20,30,40,50,60 +8470,10,20,30,40,50,60 +8480,10,20,30,40,50,60 +8490,10,20,30,40,50,60 +8500,10,20,30,40,50,60 +8510,10,20,30,40,50,60 +8520,10,20,30,40,50,60 +8530,10,20,30,40,50,60 +8540,10,20,30,40,50,60 +8550,10,20,30,40,50,60 +8560,10,20,30,40,50,60 +8570,10,20,30,40,50,60 +8580,10,20,30,40,50,60 +8590,10,20,30,40,50,60 +8600,10,20,30,40,50,60 +8610,10,20,30,40,50,60 +8620,10,20,30,40,50,60 +8630,10,20,30,40,50,60 +8640,10,20,30,40,50,60 +8650,10,20,30,40,50,60 +8660,10,20,30,40,50,60 +8670,10,20,30,40,50,60 +8680,10,20,30,40,50,60 +8690,10,20,30,40,50,60 +8700,10,20,30,40,50,60 +8710,10,20,30,40,50,60 +8720,10,20,30,40,50,60 +8730,10,20,30,40,50,60 +8740,10,20,30,40,50,60 +8750,10,20,30,40,50,60 +8760,10,20,30,40,50,60 +8770,10,20,30,40,50,60 +8780,10,20,30,40,50,60 +8790,10,20,30,40,50,60 +8800,10,20,30,40,50,60 +8810,10,20,30,40,50,60 +8820,10,20,30,40,50,60 +8830,10,20,30,40,50,60 +8840,10,20,30,40,50,60 +8850,10,20,30,40,50,60 +8860,10,20,30,40,50,60 +8870,10,20,30,40,50,60 +8880,10,20,30,40,50,60 +8890,10,20,30,40,50,60 +8900,10,20,30,40,50,60 +8910,10,20,30,40,50,60 +8920,10,20,30,40,50,60 +8930,10,20,30,40,50,60 +8940,10,20,30,40,50,60 +8950,10,20,30,40,50,60 +8960,10,20,30,40,50,60 +8970,10,20,30,40,50,60 +8980,10,20,30,40,50,60 +8990,10,20,30,40,50,60 +9000,10,20,30,40,50,60 +9010,10,20,30,40,50,60 +9020,10,20,30,40,50,60 +9030,10,20,30,40,50,60 +9040,10,20,30,40,50,60 +9050,10,20,30,40,50,60 +9060,10,20,30,40,50,60 +9070,10,20,30,40,50,60 +9080,10,20,30,40,50,60 +9090,10,20,30,40,50,60 +9100,10,20,30,40,50,60 +9110,10,20,30,40,50,60 +9120,10,20,30,40,50,60 +9130,10,20,30,40,50,60 +9140,10,20,30,40,50,60 +9150,10,20,30,40,50,60 +9160,10,20,30,40,50,60 +9170,10,20,30,40,50,60 +9180,10,20,30,40,50,60 +9190,10,20,30,40,50,60 +9200,10,20,30,40,50,60 +9210,10,20,30,40,50,60 +9220,10,20,30,40,50,60 +9230,10,20,30,40,50,60 +9240,10,20,30,40,50,60 +9250,10,20,30,40,50,60 +9260,10,20,30,40,50,60 +9270,10,20,30,40,50,60 +9280,10,20,30,40,50,60 +9290,10,20,30,40,50,60 +9300,10,20,30,40,50,60 +9310,10,20,30,40,50,60 +9320,10,20,30,40,50,60 +9330,10,20,30,40,50,60 +9340,10,20,30,40,50,60 +9350,10,20,30,40,50,60 +9360,10,20,30,40,50,60 +9370,10,20,30,40,50,60 +9380,10,20,30,40,50,60 +9390,10,20,30,40,50,60 +9400,10,20,30,40,50,60 +9410,10,20,30,40,50,60 +9420,10,20,30,40,50,60 +9430,10,20,30,40,50,60 +9440,10,20,30,40,50,60 +9450,10,20,30,40,50,60 +9460,10,20,30,40,50,60 +9470,10,20,30,40,50,60 +9480,10,20,30,40,50,60 +9490,10,20,30,40,50,60 +9500,10,20,30,40,50,60 +9510,10,20,30,40,50,60 +9520,10,20,30,40,50,60 +9530,10,20,30,40,50,60 +9540,10,20,30,40,50,60 +9550,10,20,30,40,50,60 +9560,10,20,30,40,50,60 +9570,10,20,30,40,50,60 +9580,10,20,30,40,50,60 +9590,10,20,30,40,50,60 +9600,10,20,30,40,50,60 +9610,10,20,30,40,50,60 +9620,10,20,30,40,50,60 +9630,10,20,30,40,50,60 +9640,10,20,30,40,50,60 +9650,10,20,30,40,50,60 +9660,10,20,30,40,50,60 +9670,10,20,30,40,50,60 +9680,10,20,30,40,50,60 +9690,10,20,30,40,50,60 +9700,10,20,30,40,50,60 +9710,10,20,30,40,50,60 +9720,10,20,30,40,50,60 +9730,10,20,30,40,50,60 +9740,10,20,30,40,50,60 +9750,10,20,30,40,50,60 +9760,10,20,30,40,50,60 +9770,10,20,30,40,50,60 +9780,10,20,30,40,50,60 +9790,10,20,30,40,50,60 +9800,10,20,30,40,50,60 +9810,10,20,30,40,50,60 +9820,10,20,30,40,50,60 +9830,10,20,30,40,50,60 +9840,10,20,30,40,50,60 +9850,10,20,30,40,50,60 +9860,10,20,30,40,50,60 +9870,10,20,30,40,50,60 +9880,10,20,30,40,50,60 +9890,10,20,30,40,50,60 +9900,10,20,30,40,50,60 +9910,10,20,30,40,50,60 +9920,10,20,30,40,50,60 +9930,10,20,30,40,50,60 +9940,10,20,30,40,50,60 +9950,10,20,30,40,50,60 +9960,10,20,30,40,50,60 +9970,10,20,30,40,50,60 +9980,10,20,30,40,50,60 +9981,11,21,31,41,51,61 +9982,12,22,32,42,52,62 +9983,13,23,33,43,53,63 +9984,14,24,34,44,54,64 +9985,15,25,35,45,55,65 +9986,16,26,36,46,56,66 +9987,17,27,37,47,57,67 +9988,18,28,38,48,58,68 +9989,19,29,39,49,59,69 +9990,20,30,40,50,60,70 +9991,21,31,41,51,61,71 +9992,22,32,42,52,62,72 +9993,23,33,43,53,63,73 +9994,24,34,44,54,64,74 +9995,25,35,45,55,65,75 +9996,26,36,46,56,66,76 +9997,27,37,47,57,67,77 +9998,28,38,48,58,68,78 +9999,29,39,49,59,69,79 +10000,30,40,50,60,70,80 +10001,31,41,51,61,71,81 +10002,32,42,52,62,72,82 diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/ECPCSubscriber.cfg b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/ECPCSubscriber.cfg new file mode 100644 index 0000000..1566c70 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/ECPCSubscriber.cfg @@ -0,0 +1,396 @@ ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +Start = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "WAITSTANDBY" + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +WAITSTANDBY = { + Class = ReferenceContainer + +Stay = { + Class = StateMachineEvent + NextState = "WAITSTANDBY" + NextStateError = "WAITSTANDBY" + +StopCurrentStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StopCurrentStateExecution + Mode = ExpectsReply + } + +PrepareNextStateMsg = { + Class = Message + Destination = JAGyrotronRTApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = WaitStandby + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = JAGyrotronRTApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } +} ++JAGyrotronRTApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + +GAMSDNSubCommand = { + Class = IOGAM + InputSignals = { + Command = { + DataSource = SDNSubCommands + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 64 + Ranges = {{0 0}} + Frequency = 1 + } + ESDNTime = { + DataSource = SDNSubCommands + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTimeDisplay = { + Alias = ESDNTime + DataSource = SDNSubCommands + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + OutputSignals = { + Command = { + DataSource = Display + Type = uint16 + } + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + ESDNTimeDisplay = { + DataSource = Display + Type = uint32 + } + } + } + +GAMSDNSubWaveform = { + Class = IOGAM + InputSignals = { + GYA_FHPS_SP = { + DataSource = SDNSubWaveform + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_MCPS_SP = { + DataSource = SDNSubWaveform + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_CCPS_SP = { + DataSource = SDNSubWaveform + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + MHVPS_SP = { + DataSource = SDNSubWaveform + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_BPS_SP = { + DataSource = SDNSubWaveform + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_APS_SP = { + DataSource = SDNSubWaveform + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + WaveformPacketIDFor1kHz = { + DataSource = SDNSubWaveform + Alias = WaveformPacketID + Type = uint16 + } + } + OutputSignals = { + GYA_FHPS_SP = { + DataSource = DDB1 + Type = float32 + } + GYA_MCPS_SP = { + DataSource = DDB1 + Type = float32 + } + GYA_CCPS_SP = { + DataSource = DDB1 + Type = float32 + } + MHVPS_SP = { + DataSource = DDB1 + Type = float32 + } + GYA_BPS_SP = { + DataSource = DDB1 + Type = float32 + } + GYA_APS_SP = { + DataSource = DDB1 + Type = float32 + } + WaveformPacketIDFor1kHz = { + DataSource = DDB1 + Alias = WaveformPacketID + Type = uint16 + } + } + } + +GAMReply = { + Class = IOGAM + InputSignals = { + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + WaveformPacketID = { + DataSource = DDB1 + Type = uint16 + } + } + OutputSignals = { + ESDNTime = { + DataSource = SDNReply + Type = uint32 + Trigger = 1 + } + ReplyWaveformAck = { + DataSource = SDNReply + Type = uint16 + } + } + } + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + } + +Timings = { + Class = TimingDataSource + } + +Display = { + Class = LoggerDataSource + } + +SDNSubCommands = { + Class = SDN::SDNSubscriber + Topic = ECPC2SCUJA + Interface = lo + CPUs = 0x2 + Locked = 1 + Timeout = 1000 // TODO: change to 1 ms + Signals = { + Header = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + Command = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 64 + } + } + } + +SDNReply = { + Class = SDN::SDNPublisher + Topic = SCUJA2ECPC + Interface = lo + CPUs = 0x8 + Locked = 1 + Signals = { + Header = { + Type = uint8 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ReplyStatus = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ReplyWaveformAck = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + } + +SDNSubWaveform = { + Class = SDN::SDNSubscriber + Topic = ECPC2SCUJAWF + Interface = lo + Locked = 1 + Timeout = 1000 // TODO: change to 1 ms + Signals = { + Header = { + Type = uint8 + NumberOfElements = 48 + } + ESDNHeaderVersionId = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNHeaderSize = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNStatus = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNDoNotUse = { + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + ESDNTime = { + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + WaveformPacketID = { + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_MCPS_SP = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_CCPS_SP = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + MHVPS_SP = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_BPS_SP = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + GYA_APS_SP = { + Type = float32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + } + } + +States = { + Class = ReferenceContainer + +WaitStandby = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {GAMSDNSubCommand GAMSDNSubWaveform GAMReply} + CPUs = 0x1 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/EPICS_Test.cfg b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/EPICS_Test.cfg new file mode 100644 index 0000000..ae4a27b --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/EPICS_Test.cfg @@ -0,0 +1,249 @@ +// +LoggerService = { +// Class = LoggerService +// CPUs = 0x1 +// StackSize = 32768 +// NumberOfLogPages = 128 +// +ConLogger = { +// Class = ConsoleLogger +// Format = "EtOoFmC" +// PrintKeys = 1 +// } +// } ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +START = { + Class = StateMachineEvent + NextState = "RUNNING" + NextStateError = "ERROR" + +PrepareNextStateOnOurRTApp = { + Class = Message + Destination = MyDemoApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = State1 + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = MyDemoApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +RUNNING = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = RUNNING + NextStateError = ERROR + } + } + +ERROR = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = ERROR + NextStateError = ERROR + } + } +} ++MyDemoApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + +GAMTimer = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = Timer + Type = uint32 + } + Counter = { + DataSource = Timer + Type = uint32 + Frequency = 1 //in Hz. Cycle for one state execution. + } + RTThreadPerf = { + DataSource = Timings + Alias = "State1.Thread1_CycleTime" + Type = uint32 + } + } + OutputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerf = { + DataSource = DDB1 + Type = uint32 + } + } + } + +PV2DDB1 = { + Class = IOGAM + InputSignals = { + AiValue = { + DataSource = EPICSCAInput + Type = float32 + } + LongInValue = { + DataSource = EPICSCAInput + Type = uint32 + } + StringInValue = { + DataSource = EPICSCAInput + Type = char8 + NumberOfElements = 40 + } + } + OutputSignals = { + AValue = { + DataSource = DDB1 + Type = float32 + } + LValue = { + DataSource = DDB1 + Type = uint32 + } + SValue = { + DataSource = DDB1 + Type = char8 + NumberOfElements = 40 + } + } + } + +DDB12PV = { + Class = IOGAM + InputSignals = { + AValue = { + DataSource = DDB1 + Type = float32 + } + LValue = { + DataSource = DDB1 + Type = uint32 + } + SValue = { + DataSource = DDB1 + Type = char8 + NumberOfElements = 40 + } + } + OutputSignals = { + AoValue = { + DataSource = EPICSCAOutput + Type = float32 + } + LongOutValue = { + DataSource = EPICSCAOutput + Type = uint32 + } + StringOutValue = { + DataSource = EPICSCAOutput + Type = char8 + NumberOfElements = 40 + } + } + } + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + } + +Timer = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 0 + ExecutionMode = RealTimeThread + CPUMask = 0x1 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + +EPICSCAInput = { + //Class = "EPICSCA::EPICSCAInput" + Class = "JAEPICSCA::JAEPICSCAInput" + CPUMask = "1" + StackSize = "10000000" + Signals = { + AiValue = { + PVName = "ai" + Type = float32 + } + LongInValue = { + PVName = "longin" + Type = uint32 + } + StringInValue = { + PVName = "stringin" + Type = char8 + NumberOfElements = 40 + } + } + } + +EPICSCAOutput = { + //Class = "EPICSCA::EPICSCAOutput" + Class = "JAEPICSCA::JAEPICSCAOutput" + CPUMask = "1" + StackSize = "10000000" + NumberOfBuffers = 2 + Signals = { + AoValue = { + PVName = "ao" + Type = float32 + } + LongOutValue = { + PVName = "longout" + Type = uint32 + } + StringOutValue = { + PVName = "stringout" + Type = char8 + NumberOfElements = 40 + } + } + } + +Display = { + Class = LoggerDataSource + } + +Timings = { + Class = TimingDataSource + } + } + +States = { + Class = ReferenceContainer + +State1 = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {GAMTimer PV2DDB1 DDB12PV} + CPUMask = 0x1 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/EPICS_Test.db b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/EPICS_Test.db new file mode 100644 index 0000000..c344eae --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/EPICS_Test.db @@ -0,0 +1,18 @@ +record(longin, longin){ + field(SCAN, "Passive") +} +record(longout, longout){ + field(SCAN, "Passive") +} +record(ai, ai){ + field(SCAN, "Passive") +} +record(ao, ao){ + field(SCAN, "Passive") +} +record(stringin, stringin){ + field(SCAN, "Passive") +} +record(stringout, stringout){ + field(SCAN, "Passive") +} \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_NI6259_test.cfg b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_NI6259_test.cfg new file mode 100644 index 0000000..1efebb0 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_NI6259_test.cfg @@ -0,0 +1,1081 @@ +// +LoggerService = { +// Class = LoggerService +// CPUs = 0x1 +// StackSize = 32768 +// NumberOfLogPages = 128 +// +ConLogger = { +// Class = ConsoleLogger +// Format = "EtOoFmC" +// PrintKeys = 1 +// } +// } + ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +START = { + Class = StateMachineEvent + NextState = "RUNNING" + NextStateError = "ERROR" + +PrepareNextStateOnOurRTApp = { + Class = Message + Destination = MyDemoApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = State1 + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = MyDemoApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +RUNNING = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = RUNNING + NextStateError = ERROR + } + } + +ERROR = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = ERROR + NextStateError = ERROR + } + } +} ++MyDemoApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + +GAMTimer = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = Timer + Type = uint32 + } + Counter = { + DataSource = Timer + Type = uint32 + Frequency = 1 //in Hz. Cycle for one state execution. + } + RTThreadPerf = { + DataSource = Timings + Alias = "State1.Thread1_CycleTime" + Type = uint32 + } + } + OutputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerf = { + DataSource = DDB1 + Type = uint32 + } + } + } + //EPICS PV read GAM + +PV2DDB1GAM = { + Class = IOGAM + InputSignals = { + ni6259d0p0do0 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do1 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do2 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do3 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do4 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do5 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do6 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d0p0do7 = { + DataSource = EPICSCAInput + Type = uint32 + } + + ni6528d0p3do0 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do1 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do2 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do3 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do4 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do5 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do6 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p3do7 = { + DataSource = EPICSCAInput + Type = uint32 + } + + ni6528d0p4do0 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do1 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do2 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do3 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do4 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do5 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do6 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d0p4do7 = { + DataSource = EPICSCAInput + Type = uint32 + } + + ni6259d1p0do0 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do1 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do2 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do3 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do4 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do5 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do6 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6259d1p0do7 = { + DataSource = EPICSCAInput + Type = uint32 + } + + ni6528d1p3do0 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do1 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do2 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do3 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do4 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do5 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do6 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p3do7 = { + DataSource = EPICSCAInput + Type = uint32 + } + + ni6528d1p4do0 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do1 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do2 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do3 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do4 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do5 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do6 = { + DataSource = EPICSCAInput + Type = uint32 + } + ni6528d1p4do7 = { + DataSource = EPICSCAInput + Type = uint32 + } + } + OutputSignals = { + ni6259d0p0do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do7 = { + DataSource = DDB1 + Type = uint32 + } + + ni6528d0p3do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do7 = { + DataSource = DDB1 + Type = uint32 + } + + ni6528d0p4do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do7 = { + DataSource = DDB1 + Type = uint32 + } + + ni6259d1p0do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do7 = { + DataSource = DDB1 + Type = uint32 + } + + ni6528d1p3do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do7 = { + DataSource = DDB1 + Type = uint32 + } + + ni6528d1p4do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do7 = { + DataSource = DDB1 + Type = uint32 + } + } + } + //HW Write GAMs + //NI6259 uses uint32, so it is not able to use BitSumGAM + +NI6259D0P0GAM = { + Class = JABitSumGAM + InputSignals = { + ni6259d0p0do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d0p0do7 = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + NI6259D0P0Value = { + DataSource = Display + Type = uint8 + } + } + } + +NI6528D0P3GAM = { + Class = JABitSumGAM + InputSignals = { + ni6528d0p3do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p3do7 = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + NI6528D0P3Value = { + DataSource = Display + Type = uint8 + } + } + } + +NI6528D0P4GAM = { + Class = JABitSumGAM + InputSignals = { + ni6528d0p4do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d0p4do7 = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + NI6528D0P4Value = { + DataSource = Display + Type = uint8 + } + } + } + //NI6259 uses uint32, so it is not able to use BitSumGAM + +NI6259D1P0GAM = { + Class = JABitSumGAM + InputSignals = { + ni6259d1p0do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6259d1p0do7 = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + NI6259D1P0Value = { + DataSource = Display + Type = uint8 + } + } + } + +NI6528D1P3GAM = { + Class = JABitSumGAM + InputSignals = { + ni6528d1p3do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p3do7 = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + NI6528D1P3Value = { + DataSource = Display + Type = uint8 + } + } + } + +NI6528D1P4GAM = { + Class = JABitSumGAM + InputSignals = { + ni6528d1p4do0 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do1 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do2 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do3 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do4 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do5 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do6 = { + DataSource = DDB1 + Type = uint32 + } + ni6528d1p4do7 = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + NI6528D1P4Value = { + DataSource = Display + Type = uint8 + } + } + } + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + } + +Timer = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 0 + ExecutionMode = RealTimeThread + CPUMask = 0x1 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + + /**** + +NI6259D1P0 = { + Class = NI6259::NI6259DIO + DeviceName = "/dev/pxi6259" + BoardId = 1 + Signals = { + NI6269D1P0Value = { + Type = uint32 + Mask = 0xFF + PortId = 0 + } + } + } + +NI6528D1P3 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.1" + Port = 3 + Value = { + NI6528D1P3Value = { + Type = uint32 + } + } + } + +NI6528D1P4 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.1" + Port = 4 + Value = { + NI6528D1P4Value = { + Type = uint32 + } + } + } + +NI6259D0P0 = { + Class = NI6259::NI6259DIO + DeviceName = "/dev/pxi6259" + BoardId = 0 + Signals = { + NI6259D0P0Value = { + Type = uint32 + Mask = 0xFF + PortId = 0 + } + } + } + +NI6528D0P3 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.0" + Port = 3 + Value = { + NI6528D0P3Value = { + Type = uint32 + } + } + } + +NI6528D0P4 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.0" + Port = 4 + Value = { + NI6528D0P4Value = { + Type = uint32 + } + } + } + ***/ + +EPICSCAInput = { + Class = "EPICSCA::EPICSCAInput" + CPUMask = "1" + StackSize = "10000000" + Signals = { + // NI6259 DO PVs + ni6259d0p0do0 = { + PVName = "ni6259:d0:p0:do0" + Type = uint32 + } + ni6259d0p0do1 = { + PVName = "ni6259:d0:p0:do1" + Type = uint32 + } + ni6259d0p0do2 = { + PVName = "ni6259:d0:p0:do2" + Type = uint32 + } + ni6259d0p0do3 = { + PVName = "ni6259:d0:p0:do3" + Type = uint32 + } + ni6259d0p0do4 = { + PVName = "ni6259:d0:p0:do4" + Type = uint32 + } + ni6259d0p0do5 = { + PVName = "ni6259:d0:p0:do5" + Type = uint32 + } + ni6259d0p0do6 = { + PVName = "ni6259:d0:p0:do6" + Type = uint32 + } + ni6259d0p0do7 = { + PVName = "ni6259:d0:p0:do7" + Type = uint32 + } + + // NI6528P3 PVs + ni6528d0p3do0 = { + PVName = "ni6528:d0:p3:do0" + Type = uint32 + } + ni6528d0p3do1 = { + PVName = "ni6528:d0:p3:do1" + Type = uint32 + } + ni6528d0p3do2 = { + PVName = "ni6528:d0:p3:do2" + Type = uint32 + } + ni6528d0p3do3 = { + PVName = "ni6528:d0:p3:do3" + Type = uint32 + } + ni6528d0p3do4 = { + PVName = "ni6528:d0:p3:do4" + Type = uint32 + } + ni6528d0p3do5 = { + PVName = "ni6528:d0:p3:do5" + Type = uint32 + } + ni6528d0p3do6 = { + PVName = "ni6528:d0:p3:do6" + Type = uint32 + } + ni6528d0p3do7 = { + PVName = "ni6528:d0:p3:do7" + Type = uint32 + } + + //NI6528P4 PVs + ni6528d0p4do0 = { + PVName = "ni6528:d0:p4:do0" + Type = uint32 + } + ni6528d0p4do1 = { + PVName = "ni6528:d0:p4:do1" + Type = uint32 + } + ni6528d0p4do2 = { + PVName = "ni6528:d0:p4:do2" + Type = uint32 + } + ni6528d0p4do3 = { + PVName = "ni6528:d0:p4:do3" + Type = uint32 + } + ni6528d0p4do4 = { + PVName = "ni6528:d0:p4:do4" + Type = uint32 + } + ni6528d0p4do5 = { + PVName = "ni6528:d0:p4:do5" + Type = uint32 + } + ni6528d0p4do6 = { + PVName = "ni6528:d0:p4:do6" + Type = uint32 + } + ni6528d0p4do7 = { + PVName = "ni6528:d0:p4:do7" + Type = uint32 + } + + // NI6259 DO PVs + ni6259d1p0do0 = { + PVName = "ni6259:d1:p0:do0" + Type = uint32 + } + ni6259d1p0do1 = { + PVName = "ni6259:d1:p0:do1" + Type = uint32 + } + ni6259d1p0do2 = { + PVName = "ni6259:d1:p0:do2" + Type = uint32 + } + ni6259d1p0do3 = { + PVName = "ni6259:d1:p0:do3" + Type = uint32 + } + ni6259d1p0do4 = { + PVName = "ni6259:d1:p0:do4" + Type = uint32 + } + ni6259d1p0do5 = { + PVName = "ni6259:d1:p0:do5" + Type = uint32 + } + ni6259d1p0do6 = { + PVName = "ni6259:d1:p0:do6" + Type = uint32 + } + ni6259d1p0do7 = { + PVName = "ni6259:d1:p0:do7" + Type = uint32 + } + + // NI6528P3 PVs + ni6528d1p3do0 = { + PVName = "ni6528:d1:p3:do0" + Type = uint32 + } + ni6528d1p3do1 = { + PVName = "ni6528:d1:p3:do1" + Type = uint32 + } + ni6528d1p3do2 = { + PVName = "ni6528:d1:p3:do2" + Type = uint32 + } + ni6528d1p3do3 = { + PVName = "ni6528:d1:p3:do3" + Type = uint32 + } + ni6528d1p3do4 = { + PVName = "ni6528:d1:p3:do4" + Type = uint32 + } + ni6528d1p3do5 = { + PVName = "ni6528:d1:p3:do5" + Type = uint32 + } + ni6528d1p3do6 = { + PVName = "ni6528:d1:p3:do6" + Type = uint32 + } + ni6528d1p3do7 = { + PVName = "ni6528:d1:p3:do7" + Type = uint32 + } + + //NI6528P4 PVs + ni6528d1p4do0 = { + PVName = "ni6528:d1:p4:do0" + Type = uint32 + } + ni6528d1p4do1 = { + PVName = "ni6528:d1:p4:do1" + Type = uint32 + } + ni6528d1p4do2 = { + PVName = "ni6528:d1:p4:do2" + Type = uint32 + } + ni6528d1p4do3 = { + PVName = "ni6528:d1:p4:do3" + Type = uint32 + } + ni6528d1p4do4 = { + PVName = "ni6528:d1:p4:do4" + Type = uint32 + } + ni6528d1p4do5 = { + PVName = "ni6528:d1:p4:do5" + Type = uint32 + } + ni6528d1p4do6 = { + PVName = "ni6528:d1:p4:do6" + Type = uint32 + } + ni6528d1p4do7 = { + PVName = "ni6528:d1:p4:do7" + Type = uint32 + } + } + } + +Display = { + Class = LoggerDataSource + } + +Timings = { + Class = TimingDataSource + } + } + +States = { + Class = ReferenceContainer + +State1 = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {GAMTimer PV2DDB1GAM NI6259D0P0GAM NI6528D0P3GAM NI6528D0P4GAM NI6259D1P0GAM NI6528D1P3GAM NI6528D1P4GAM } + CPUMask = 0x1 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_NI6259_test.db b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_NI6259_test.db new file mode 100644 index 0000000..1b2696d --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_NI6259_test.db @@ -0,0 +1,257 @@ +### The board on the Right Side Slots + +# NI6259 P0 PVs +record(bo, "ni6259:d1:p0:do0"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do4"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do5"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do6"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d1:p0:do7"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} + +#NI6528 P3 PVs +record(bo, "ni6528:d1:p3:do0"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do4"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do5"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do6"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p3:do7"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} + + +#NI6528 P4 PVs +record(bo, "ni6528:d1:p4:do0"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do4"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do5"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do6"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d1:p4:do7"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} + + +### Left Side Slots +# NI6259 P0 PVs +record(bo, "ni6259:d0:p0:do0"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do4"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do5"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do6"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6259:d0:p0:do7"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} + +#NI6528 P3 PVs +record(bo, "ni6528:d0:p3:do0"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do4"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do5"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do6"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p3:do7"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} + + +#NI6528 P4 PVs +record(bo, "ni6528:d0:p4:do0"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do4"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do5"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do6"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "ni6528:d0:p4:do7"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_test.cfg b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_test.cfg new file mode 100644 index 0000000..2ac80fa --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_test.cfg @@ -0,0 +1,191 @@ ++LoggerService = { + Class = LoggerService + CPUs = 0x1 + StackSize = 32768 + NumberOfLogPages = 128 + +ConLogger = { + Class = ConsoleLogger + Format = "EtOoFmC" + PrintKeys = 1 + } +} ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +START = { + Class = StateMachineEvent + NextState = "RUNNING" + NextStateError = "ERROR" + +PrepareNextStateOnOurRTApp = { + Class = Message + Destination = MyDemoApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = State1 + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = MyDemoApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +RUNNING = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = RUNNING + NextStateError = ERROR + } + } + +ERROR = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = ERROR + NextStateError = ERROR + } + } +} ++MyDemoApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + +GAMTimer = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = Timer + Type = uint32 + } + Counter = { + DataSource = Timer + Type = uint32 + Frequency = 1 //in Hz. Cycle for one state execution. + } + RTThreadPerf = { + DataSource = Timings + Alias = "State1.Thread1_CycleTime" + Type = uint32 + } + } + OutputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerf = { + DataSource = DDB1 + Type = uint32 + } + } + } + +GAMEPICSCA = { + Class = IOGAM + InputSignals = { + doValue = { + DataSource = EPICSCAInput + Type = uint8 + } + } + OutputSignals = { + Value = { + DataSource = DDB1 + Type = uint8 + } + } + } + +GAMDebug = { + Class = IOGAM + InputSignals = { + Value = { + DataSource = DDB1 + Type = uint8 + } + + } + OutputSignals = { + Value = { + DataSource = NI6528 + Type = uint8 + } + } + } + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + } + +Timer = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 0 + ExecutionMode = RealTimeThread + CPUMask = 0x1 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + +NI6528 = { + Class = NI6528 + DeviceName = "/dev/pxi6528.0" + Port = 3 + Value = { + Counter = { + Type = uint8 + } + } + } + +EPICSCAInput = { + Class = "EPICSCA::EPICSCAInput" + CPUMask = "1" + StackSize = "10000000" + Signals = { + doValue = { + PVName = "test:doValue" + } + } + } + +Display = { + Class = LoggerDataSource + } + +Timings = { + Class = TimingDataSource + } + } + +States = { + Class = ReferenceContainer + +State1 = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {GAMTimer GAMEPICSCA GAMDebug} + CPUMask = 0x1 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_test.db b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_test.db new file mode 100644 index 0000000..ccec4a0 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/NI6528_test.db @@ -0,0 +1,18 @@ +record(bo, "test:do1"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "test:do2"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(bo, "test:do3"){ + field(SCAN,"Passive") + field(ONAM, "ON") + field(ZNAM, "OFF") +} +record(longin, test:doValue){ + field(SCAN, "Passive") +} \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/README.md b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/README.md new file mode 100644 index 0000000..01ec4d2 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/README.md @@ -0,0 +1,29 @@ +ECPCSubscriber.cfg is a configuration for testing ECPC simulator (JAECPCSimulator.cfg). + +Setup: +1) Run softIoc. In qst-gyrotron-fast-controller/Configurations execute command: + softIoc -d ECPC_IOC.db + +2) Run ECPC simulator. In qst-gyrotron-fast-controller/Startup execute command: + ./Main.sh -f ../Configurations/JAECPCSimulator.cfg -l RealTimeLoader -m StateMachine:Start + +3) Run ECPC subscriber. In qst-gyrotron-fast-controller/Startup execute command: + ./Main.sh -f ../Configurations/tests/ECPCSubscriber.cfg -l RealTimeLoader -m StateMachine:Start + +The ECPC simulator should automatically start sending waveforms, which will be printed by the ECPC subscriber every 10 milliseconds. +The ECPC simulator will also be sending command, which is printed by the ECPC subscriber every millisecond. + +To change command that is being sent, you have to caput 1 to one of following PVs: +MHVPS_ON (command 1) +GYA_BPS_SWON (command 2) +GYA_APS_SWON (command 3) +GYB_BPS_SWON (command 4) +GYB_APS_SWON (command 5) +GYA_BPS_SWOFF (command 6) +GYA_APS_SWOFF (command 7) +GYB_BPS_SWOFF (command 8) +GYB_APS_SWOFF (command 9) +RF_OFF (command 10) + +To stop sending that command, caput 0 to that PV. + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/Timer_Test.cfg b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/Timer_Test.cfg new file mode 100644 index 0000000..cea80cf --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Configurations/tests/Timer_Test.cfg @@ -0,0 +1,163 @@ ++LoggerService = { + Class = LoggerService + CPUs = 0x1 + StackSize = 32768 + NumberOfLogPages = 128 + +ConLogger = { + Class = ConsoleLogger + Format = "EtOoFmC" + PrintKeys = 1 + } +} ++StateMachine = { + Class = StateMachine + +INITIAL = { + Class = ReferenceContainer + +START = { + Class = StateMachineEvent + NextState = "RUNNING" + NextStateError = "ERROR" + +PrepareNextStateOnOurRTApp = { + Class = Message + Destination = MyDemoApp + Mode = ExpectsReply + Function = PrepareNextState + +Parameters = { + Class = ConfigurationDatabase + param1 = State1 + } + } + +StartNextStateExecutionMsg = { + Class = Message + Destination = MyDemoApp + Function = StartNextStateExecution + Mode = ExpectsReply + } + } + } + +RUNNING = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = RUNNING + NextStateError = ERROR + } + } + +ERROR = { + Class = ReferenceContainer + +LOCKEDFOREVER = { + Class = StateMachineEvent + NextState = ERROR + NextStateError = ERROR + } + } +} ++MyDemoApp = { + Class = RealTimeApplication + +Functions = { + Class = ReferenceContainer + +GAMTimer = { + Class = IOGAM + InputSignals = { + Time = { //Time attribute is updated with us resolution. + DataSource = Timer + Type = uint32 + } + Counter = { + DataSource = Timer + Type = uint32 + Frequency = 10 //in Hz. Cycle for one state execution. + } + RTThreadPerf = { + DataSource = Timings + Alias = "State1.Thread1_CycleTime" + Type = uint32 + } + } + OutputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + RTThreadPerf = { + DataSource = DDB1 + Type = uint32 + } + } + } + +TimerDisplayGAM = { + Class = IOGAM + InputSignals = { + Time = { + DataSource = DDB1 + Type = uint32 + } + Counter = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + TimeDISP = { + DataSource = Display + Type = uint32 + } + CounterDISP = { + DataSource = Display + Type = uint32 + } + } + } + } + +Data = { + Class = ReferenceContainer + DefaultDataSource = DDB1 + +DDB1 = { + Class = GAMDataSource + } + +Timer = { + Class = LinuxTimer + SleepNature = "Busy" + SleepPercentage = 0 + ExecutionMode = RealTimeThread + CPUMask = 0x1 + Signals = { + Counter = { + Type = uint32 + } + Time = { + Type = uint32 + } + } + } + +Display = { + Class = LoggerDataSource + } + +Timings = { + Class = TimingDataSource + } + } + +States = { + Class = ReferenceContainer + +State1 = { + Class = RealTimeState + +Threads = { + Class = ReferenceContainer + +Thread1 = { + Class = RealTimeThread + Functions = {GAMTimer TimerDisplayGAM} + CPUMask = 0x1 + } + } + } + } + +Scheduler = { + Class = GAMScheduler + TimingDataSource = Timings + } +} + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAInput.cpp b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAInput.cpp new file mode 100644 index 0000000..ac3464d --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAInput.cpp @@ -0,0 +1,366 @@ +/** + * @file JAEPICSCAInput.cpp + * @brief Source file for class JAEPICSCAInput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAEPICSCAInput (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAEPICSCAInput.h" + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "MemoryMapInputBroker.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +namespace MARTe { +/** + * @brief Callback function for the ca_create_subscription. Single point of access which + * delegates the events to the corresponding JAEPICSPV instance. + */ +static FastPollingMutexSem eventCallbackFastMux; +/*lint -e{1746} function must match required prototype and thus cannot be changed to constant reference.*/ +void JAEPICSCAInputEventCallback(struct event_handler_args const args) { + (void) eventCallbackFastMux.FastLock(); + PVWrapper *pv = static_cast(args.usr); + if (pv != NULL_PTR(PVWrapper *)) { + (void) MemoryOperationsHelper::Copy(pv->memory, args.dbr, pv->memorySize); + } + eventCallbackFastMux.FastUnLock(); +} +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +JAEPICSCAInput::JAEPICSCAInput() : + DataSourceI(), EmbeddedServiceMethodBinderI(), executor(*this) { + pvs = NULL_PTR(PVWrapper *); + stackSize = THREADS_DEFAULT_STACKSIZE * 4u; + cpuMask = 0xffu; + eventCallbackFastMux.Create(); +} + +/*lint -e{1551} must stop the SingleThreadService in the destructor.*/ +JAEPICSCAInput::~JAEPICSCAInput() { + if (!executor.Stop()) { + if (!executor.Stop()) { + REPORT_ERROR(ErrorManagement::FatalError, "Could not stop SingleThreadService."); + } + } + (void) eventCallbackFastMux.FastLock(); + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + if (pvs[n].memory != NULL_PTR(void *)) { + GlobalObjectsDatabase::Instance()->GetStandardHeap()->Free(pvs[n].memory); + } + } + delete[] pvs; + } + eventCallbackFastMux.FastUnLock(); +} + +bool JAEPICSCAInput::Initialise(StructuredDataI & data) { + bool ok = DataSourceI::Initialise(data); + if (ok) { + if (!data.Read("CPUs", cpuMask)) { + REPORT_ERROR(ErrorManagement::Information, "No CPUs defined. Using default = %d", cpuMask); + } + if (!data.Read("StackSize", stackSize)) { + REPORT_ERROR(ErrorManagement::Information, "No StackSize defined. Using default = %d", stackSize); + } + executor.SetStackSize(stackSize); + executor.SetCPUMask(cpuMask); + } + if (ok) { + ok = data.MoveRelative("Signals"); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Could not move to the Signals section"); + } + if (ok) { + ok = data.Copy(originalSignalInformation); + } + if (ok) { + ok = originalSignalInformation.MoveToRoot(); + } + //Do not allow to add signals in run-time + if (ok) { + ok = signalsDatabase.MoveRelative("Signals"); + } + if (ok) { + ok = signalsDatabase.Write("Locked", 1u); + } + if (ok) { + ok = signalsDatabase.MoveToAncestor(1u); + } + } + if (ok) { + ok = data.MoveToAncestor(1u); + } + return ok; +} + +bool JAEPICSCAInput::SetConfiguredDatabase(StructuredDataI & data) { + bool ok = DataSourceI::SetConfiguredDatabase(data); + //Check the signal index of the timing signal. + uint32 nOfSignals = GetNumberOfSignals(); + if (ok) { + ok = (nOfSignals > 0u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one signal shall be defined"); + } + } + if (ok) { + //Do not allow samples + uint32 functionNumberOfSignals = 0u; + uint32 n; + if (GetFunctionNumberOfSignals(InputSignals, 0u, functionNumberOfSignals)) { + for (n = 0u; (n < functionNumberOfSignals) && (ok); n++) { + uint32 nSamples; + ok = GetFunctionSignalSamples(InputSignals, 0u, n, nSamples); + if (ok) { + ok = (nSamples == 1u); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The number of samples shall be exactly 1"); + } + } + } + } + if (ok) { + pvs = new PVWrapper[nOfSignals]; + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + pvs[n].memory = NULL_PTR(void *); + } + for (n = 0u; (n < nOfSignals) && (ok); n++) { + //Note that the RealTimeApplicationConfigurationBuilder is allowed to change the order of the signals w.r.t. to the originalSignalInformation + StreamString orderedSignalName; + ok = GetSignalName(n, orderedSignalName); + if (ok) { + //Have to mix and match between the original setting of the DataSource signal + //and the ones which are later added by the RealTimeApplicationConfigurationBuilder + ok = originalSignalInformation.MoveRelative(orderedSignalName.Buffer()); + } + StreamString pvName; + if (ok) { + ok = originalSignalInformation.Read("PVName", pvName); + if (!ok) { + uint32 nn = n; + REPORT_ERROR(ErrorManagement::ParametersError, "No PVName specified for signal at index %d", nn); + } + } + TypeDescriptor td = GetSignalType(n); + if (ok) { + (void) StringHelper::CopyN(&pvs[n].pvName[0], pvName.Buffer(), PV_NAME_MAX_SIZE); + if (td == CharString) { + pvs[n].pvType = DBR_STRING; + } + else if (td == Character8Bit) { + pvs[n].pvType = DBR_STRING; + } + else if (td == SignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == UnsignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == SignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == UnsignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == SignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == UnsignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == Float32Bit) { + pvs[n].pvType = DBR_FLOAT; + } + else if (td == Float64Bit) { + pvs[n].pvType = DBR_DOUBLE; + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Type %s is not supported", TypeDescriptor::GetTypeNameFromTypeDescriptor(td)); + ok = false; + } + } + uint32 numberOfElements = 1u; + if (ok) { + ok = GetSignalNumberOfElements(n, numberOfElements); + } + if (ok) { + if (pvs[n].pvType == DBR_STRING) { + ok = (numberOfElements == 40u); + } + if (!ok) { + //Could support arrays of strings with multiples of char8[40] + REPORT_ERROR(ErrorManagement::ParametersError, "Strings shall be defined with 40 elements char8[40]. Arrays of strings are not currently supported"); + } + } + if (ok) { + pvs[n].numberOfElements = numberOfElements; + } + if (ok) { + pvs[n].memorySize = td.numberOfBits; + pvs[n].memorySize /= 8u; + pvs[n].memorySize *= numberOfElements; + pvs[n].memory = GlobalObjectsDatabase::Instance()->GetStandardHeap()->Malloc(pvs[n].memorySize); + ok = originalSignalInformation.MoveToAncestor(1u); + } + } + } + + if (ok) { + ok = (executor.Start() == ErrorManagement::NoError); + } + return ok; +} + +bool JAEPICSCAInput::AllocateMemory() { + return true; +} + +uint32 JAEPICSCAInput::GetNumberOfMemoryBuffers() { + return 1u; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The signalAddress is independent of the bufferIdx.*/ +bool JAEPICSCAInput::GetSignalMemoryBuffer(const uint32 signalIdx, const uint32 bufferIdx, void*& signalAddress) { + bool ok = (pvs != NULL_PTR(PVWrapper *)); + if (ok) { + ok = (signalIdx < GetNumberOfSignals()); + } + if (ok) { + //lint -e{613} pvs cannot as otherwise ok would be false + signalAddress = pvs[signalIdx].memory; + } + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The brokerName only depends on the direction */ +const char8* JAEPICSCAInput::GetBrokerName(StructuredDataI& data, const SignalDirection direction) { + const char8* brokerName = ""; + if (direction == InputSignals) { + brokerName = "MemoryMapInputBroker"; + } + return brokerName; +} + +bool JAEPICSCAInput::GetInputBrokers(ReferenceContainer& inputBrokers, const char8* const functionName, void* const gamMemPtr) { + ReferenceT broker("MemoryMapInputBroker"); + bool ok = broker->Init(InputSignals, *this, functionName, gamMemPtr); + if (ok) { + ok = inputBrokers.Insert(broker); + } + + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: OutputBrokers are not supported. Function returns false irrespectively of the parameters.*/ +bool JAEPICSCAInput::GetOutputBrokers(ReferenceContainer& outputBrokers, const char8* const functionName, void* const gamMemPtr) { + return false; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: NOOP at StateChange, independently of the function parameters.*/ +bool JAEPICSCAInput::PrepareNextState(const char8* const currentStateName, const char8* const nextStateName) { + return true; +} + +ErrorManagement::ErrorType JAEPICSCAInput::Execute(ExecutionInfo& info) { + ErrorManagement::ErrorType err = ErrorManagement::NoError; + if (info.GetStage() == ExecutionInfo::StartupStage) { + (void) eventCallbackFastMux.FastLock(); + /*lint -e{9130} -e{835} -e{845} -e{747} Several false positives. lint is getting confused here for some reason.*/ + if (ca_context_create(ca_enable_preemptive_callback) != ECA_NORMAL) { + err = ErrorManagement::FatalError; + REPORT_ERROR(err, "ca_enable_preemptive_callback failed"); + } + + uint32 n; + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + /*lint -e{9130} -e{835} -e{845} -e{747} Several false positives. lint is getting confused here for some reason.*/ + if (ca_create_channel(&pvs[n].pvName[0], NULL_PTR(caCh *), NULL_PTR(void *), 20u, &pvs[n].pvChid) != ECA_NORMAL) { + err = ErrorManagement::FatalError; + REPORT_ERROR(err, "ca_create_channel failed for PV with name %s", pvs[n].pvName); + } + if (err.ErrorsCleared()) { + /*lint -e{9130} -e{835} -e{845} -e{747} Several false positives. lint is getting confused here for some reason.*/ + if (ca_create_subscription(pvs[n].pvType, pvs[n].numberOfElements, pvs[n].pvChid, DBE_VALUE, &JAEPICSCAInputEventCallback, &pvs[n], + &pvs[n].pvEvid) != ECA_NORMAL) { + err = ErrorManagement::FatalError; + REPORT_ERROR(err, "ca_create_subscription failed for PV %s", pvs[n].pvName); + } + } + } + } + eventCallbackFastMux.FastUnLock(); + } + else if (info.GetStage() != ExecutionInfo::BadTerminationStage) { + Sleep::Sec(1.0F); + } + else { + (void) eventCallbackFastMux.FastLock(); + uint32 n; + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + (void) ca_clear_subscription(pvs[n].pvEvid); + (void) ca_clear_event(pvs[n].pvEvid); + (void) ca_clear_channel(pvs[n].pvChid); + } + } + ca_detach_context(); + ca_context_destroy(); + eventCallbackFastMux.FastUnLock(); + } + + return err; +} + +uint32 JAEPICSCAInput::GetStackSize() const { + return stackSize; +} + +uint32 JAEPICSCAInput::GetCPUMask() const { + return cpuMask; +} + +bool JAEPICSCAInput::Synchronise() { + return false; +} + +CLASS_REGISTER(JAEPICSCAInput, "1.0") + +} + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAInput.h b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAInput.h new file mode 100644 index 0000000..3a5071d --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAInput.h @@ -0,0 +1,260 @@ +/** + * @file EPICSCAInput.h + * @brief Header file for class EPICSCAInput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class EPICSCAInput + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef JAEPICSCAINPUT_H_ +#define JAEPICSCAINPUT_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" +#include "EmbeddedServiceMethodBinderI.h" +#include "EventSem.h" +#include "SingleThreadService.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +/** + * Maximum size that a PV name may have + */ +/*lint -esym(551, MARTe::PV_NAME_MAX_SIZE) the symbol is used to define the size of PVWrapper below*/ +const uint32 PV_NAME_MAX_SIZE = 64u; + +/** + * Wraps a PV + */ +struct PVWrapper { + /** + * The channel identifier + */ + chid pvChid; + /** + * The event identifier + */ + evid pvEvid; + /** + * The PV type + */ + chtype pvType; + /** + * The memory of the signal associated to this channel + */ + void *memory; + void *previousValue; + /** + * The number of elements > 0 + */ + uint32 numberOfElements; + /** + * The memory size + */ + uint32 memorySize; + /** + * The PV name + */ + char8 pvName[PV_NAME_MAX_SIZE]; +}; + +/** + * @brief A DataSource which allows to retrieved data from any number of PVs using the EPICS channel access client protocol. + * Data is asynchronously retrieved using ca_create_subscriptions in the context of a different thread (w.r.t. to the real-time thread). + * + * The configuration syntax is (names are only given as an example): + * + *
+ * +EPICSCAInput_1 = {
+ *     Class = JAEPICSCA::JAEPICSCAInput
+ *     StackSize = 1048576 //Optional the EmbeddedThread stack size. Default value is THREADS_DEFAULT_STACKSIZE * 4u
+ *     CPUs = 0xff //Optional the affinity of the EmbeddedThread (where the EPICS context is attached).
+ *     Signals = {
+ *          PV1 = { //At least one shall be defined
+ *             PVName = My::PV1 //Compulsory. Name of the PV.
+ *             Type = uint32 //Compulsory. Supported types are char8[40], string[40], uint8, int8, uint16, int16, int32, uint32, uint64, int64, float32 and float64
+ *             NumberOfElements = 1 //Arrays also supported
+ *          }
+ *          ...
+ *     }
+ * }
+ *
+ * 
+ */ +class JAEPICSCAInput: public DataSourceI, public EmbeddedServiceMethodBinderI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Default constructor. NOOP. + */ + JAEPICSCAInput(); + + /** + * @brief Destructor. + * @details TODO. + */ + virtual ~JAEPICSCAInput(); + + /** + * @brief See DataSourceI::AllocateMemory. NOOP. + * @return true. + */ + virtual bool AllocateMemory(); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @return 1. + */ + virtual uint32 GetNumberOfMemoryBuffers(); + + /** + * @brief See DataSourceI::GetSignalMemoryBuffer. + * @pre + * SetConfiguredDatabase + */ + virtual bool GetSignalMemoryBuffer(const uint32 signalIdx, + const uint32 bufferIdx, + void *&signalAddress); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @details Only InputSignals are supported. + * @return MemoryMapInputBroker. + */ + virtual const char8 *GetBrokerName(StructuredDataI &data, + const SignalDirection direction); + + /** + * @brief See DataSourceI::GetInputBrokers. + * @details adds a memory MemoryMapInputBroker instance to the inputBrokers + * @return true. + */ + virtual bool GetInputBrokers(ReferenceContainer &inputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::GetOutputBrokers. + * @return false. + */ + virtual bool GetOutputBrokers(ReferenceContainer &outputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::PrepareNextState. NOOP. + * @return true. + */ + virtual bool PrepareNextState(const char8 * const currentStateName, + const char8 * const nextStateName); + + /** + * @brief Loads and verifies the configuration parameters detailed in the class description. + * @return true if all the mandatory parameters are correctly specified and if the specified optional parameters have valid values. + */ + virtual bool Initialise(StructuredDataI & data); + + /** + * @brief Final verification of all the parameters. Setup of the memory required to hold all the signals. + * @details This method verifies that all the parameters requested by the GAMs interacting with this DataSource + * are valid and consistent with the parameters set during the initialisation phase. + * In particular the following conditions shall be met: + * - All the signals have the PVName defined + * - All the signals have one of the following types: uint32, int32, float32 or float64. + * @return true if all the parameters are valid and the conditions above are met. + */ + virtual bool SetConfiguredDatabase(StructuredDataI & data); + + /** + * @brief Gets the affinity of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + * @return the the affinity of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + */ + uint32 GetCPUMask() const; + + /** + * @brief Gets the stack size of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + * @return the stack size of the thread which is going to be used to asynchronously read data from the ca_create_subscription. + */ + uint32 GetStackSize() const; + + /** + * @brief Provides the context to execute all the EPICS relevant calls. + * @details Executes in the context of a spawned thread the following EPICS calls: + * ca_context_create, ca_create_channel, ca_create_subscription, ca_clear_subscription, + * ca_clear_event, ca_clear_channel, ca_detach_context and ca_context_destroy + * @return ErrorManagement::NoError if all the EPICS calls return without any error. + */ + virtual ErrorManagement::ErrorType Execute(ExecutionInfo & info); + + /** + * @brief See DataSourceI::Synchronise. + * @return false. + */ + virtual bool Synchronise(); + + /** + * @brief Registered as the ca_create_subscription callback function. + * It calls updates the memory of the corresponding PV variable. + */ + friend void JAEPICSCAInputEventCallback(struct event_handler_args args); + +private: + + /** + * List of PVs. + */ + PVWrapper *pvs; + + /** + * The CPU mask for the executor + */ + uint32 cpuMask; + + /** + * The stack size + */ + uint32 stackSize; + + /** + * The EmbeddedThread where the ca_pend_event is executed. + */ + SingleThreadService executor; + + /** + * Stores the configuration information received at Initialise. + */ + ConfigurationDatabase originalSignalInformation; +}; +} + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* EPICSCADATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAOutput.cpp b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAOutput.cpp new file mode 100644 index 0000000..951ed07 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAOutput.cpp @@ -0,0 +1,375 @@ +/** + * @file EPICSCAOutput.cpp + * @brief Source file for class EPICSCAOutput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class EPICSCAOutput (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAEPICSCAOutput.h" + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "MemoryMapAsyncOutputBroker.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +JAEPICSCAOutput::JAEPICSCAOutput() : + DataSourceI() { + pvs = NULL_PTR(PVWrapper *); + stackSize = THREADS_DEFAULT_STACKSIZE * 4u; + cpuMask = 0xffu; + numberOfBuffers = 0u; + ignoreBufferOverrun = 1u; + threadContextSet = false; +} + +/*lint -e{1551} must free the memory allocated to the different PVs.*/ +JAEPICSCAOutput::~JAEPICSCAOutput() { + uint32 nOfSignals = GetNumberOfSignals(); + if (pvs != NULL_PTR(PVWrapper *)) { + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + if (pvs[n].pvChid != NULL_PTR(chid)) { + (void) ca_clear_channel(pvs[n].pvChid); + } + if (pvs[n].memory != NULL_PTR(void *)) { + GlobalObjectsDatabase::Instance()->GetStandardHeap()->Free(pvs[n].memory); + GlobalObjectsDatabase::Instance()->GetStandardHeap()->Free(pvs[n].previousValue); + } + } + delete[] pvs; + } +} + +bool JAEPICSCAOutput::Initialise(StructuredDataI & data) { + bool ok = DataSourceI::Initialise(data); + if (ok) { + ok = data.Read("NumberOfBuffers", numberOfBuffers); + + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "NumberOfBuffers shall be specified"); + } + } + if (ok) { + if (!data.Read("CPUs", cpuMask)) { + REPORT_ERROR(ErrorManagement::Information, "No CPUs defined. Using default = %d", cpuMask); + } + if (!data.Read("StackSize", stackSize)) { + REPORT_ERROR(ErrorManagement::Information, "No StackSize defined. Using default = %d", stackSize); + } + if (!data.Read("IgnoreBufferOverrun", ignoreBufferOverrun)) { + REPORT_ERROR(ErrorManagement::Information, "No IgnoreBufferOverrun defined. Using default = %d", ignoreBufferOverrun); + } + + } + if (ok) { + ok = data.MoveRelative("Signals"); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Could not move to the Signals section"); + } + if (ok) { + ok = data.Copy(originalSignalInformation); + } + if (ok) { + ok = originalSignalInformation.MoveToRoot(); + } + //Do not allow to add signals in run-time + if (ok) { + ok = signalsDatabase.MoveRelative("Signals"); + } + if (ok) { + ok = signalsDatabase.Write("Locked", 1u); + } + if (ok) { + ok = signalsDatabase.MoveToAncestor(1u); + } + } + if (ok) { + ok = data.MoveToAncestor(1u); + } + return ok; +} + +bool JAEPICSCAOutput::SetConfiguredDatabase(StructuredDataI & data) { + bool ok = DataSourceI::SetConfiguredDatabase(data); + //Check the signal index of the timing signal. + uint32 nOfSignals = GetNumberOfSignals(); + if (ok) { + ok = (nOfSignals > 0u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one signal shall be defined"); + } + } + if (ok) { + //Do not allow samples + uint32 functionNumberOfSignals = 0u; + uint32 n; + if (GetFunctionNumberOfSignals(OutputSignals, 0u, functionNumberOfSignals)) { + for (n = 0u; (n < functionNumberOfSignals) && (ok); n++) { + uint32 nSamples; + ok = GetFunctionSignalSamples(OutputSignals, 0u, n, nSamples); + if (ok) { + ok = (nSamples == 1u); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The number of samples shall be exactly 1"); + } + } + } + } + //Only one and one GAM allowed to interact with this DataSourceI + if (ok) { + ok = (GetNumberOfFunctions() == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Exactly one Function allowed to interact with this DataSourceI"); + } + } + + if (ok) { + pvs = new PVWrapper[nOfSignals]; + uint32 n; + for (n = 0u; (n < nOfSignals); n++) { + pvs[n].memory = NULL_PTR(void *); //value to write PV + pvs[n].previousValue = NULL_PTR(void *); //written value + pvs[n].pvChid = NULL_PTR(chid); + + } + for (n = 0u; (n < nOfSignals) && (ok); n++) { + //Note that the RealTimeApplicationConfigurationBuilder is allowed to change the order of the signals w.r.t. to the originalSignalInformation + StreamString orderedSignalName; + ok = GetSignalName(n, orderedSignalName); + if (ok) { + //Have to mix and match between the original setting of the DataSource signal + //and the ones which are later added by the RealTimeApplicationConfigurationBuilder + ok = originalSignalInformation.MoveRelative(orderedSignalName.Buffer()); + } + StreamString pvName; + if (ok) { + ok = originalSignalInformation.Read("PVName", pvName); + if (!ok) { + uint32 nn = n; + REPORT_ERROR(ErrorManagement::ParametersError, "No PVName specified for signal at index %d", nn); + } + } + TypeDescriptor td = GetSignalType(n); + + if (ok) { + (void) StringHelper::CopyN(&pvs[n].pvName[0], pvName.Buffer(), PV_NAME_MAX_SIZE); + if (td == CharString) { + pvs[n].pvType = DBR_STRING; + } + else if (td == Character8Bit) { + pvs[n].pvType = DBR_STRING; + } + else if (td == SignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == UnsignedInteger8Bit) { + pvs[n].pvType = DBR_CHAR; + } + else if (td == SignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == UnsignedInteger16Bit) { + pvs[n].pvType = DBR_SHORT; + } + else if (td == SignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == UnsignedInteger32Bit) { + pvs[n].pvType = DBR_LONG; + } + else if (td == Float32Bit) { + pvs[n].pvType = DBR_FLOAT; + } + else if (td == Float64Bit) { + pvs[n].pvType = DBR_DOUBLE; + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Type %s is not supported", TypeDescriptor::GetTypeNameFromTypeDescriptor(td)); + ok = false; + } + } + uint32 numberOfElements = 1u; + if (ok) { + ok = GetSignalNumberOfElements(n, numberOfElements); + } + if (ok) { + if (pvs[n].pvType == DBR_STRING) { + ok = (numberOfElements == 40u); + } + if (!ok) { + //Could support arrays of strings with multiples of char8[40] + REPORT_ERROR(ErrorManagement::ParametersError, + "Strings shall be defined with 40 elements char8[40]. Arrays of strings are not currently supported"); + } + } + if (ok) { + pvs[n].numberOfElements = numberOfElements; + } + if (ok) { + pvs[n].memorySize = td.numberOfBits; + pvs[n].memorySize /= 8u; + pvs[n].memorySize *= numberOfElements; + pvs[n].memory = GlobalObjectsDatabase::Instance()->GetStandardHeap()->Malloc(pvs[n].memorySize); + pvs[n].previousValue = GlobalObjectsDatabase::Instance()->GetStandardHeap()->Malloc(pvs[n].memorySize); + ok = originalSignalInformation.MoveToAncestor(1u); + } + } + } + return ok; +} + +bool JAEPICSCAOutput::AllocateMemory() { + return true; +} + +uint32 JAEPICSCAOutput::GetNumberOfMemoryBuffers() { + return 1u; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The signalAddress is independent of the bufferIdx.*/ +bool JAEPICSCAOutput::GetSignalMemoryBuffer(const uint32 signalIdx, const uint32 bufferIdx, void*& signalAddress) { + bool ok = (pvs != NULL_PTR(PVWrapper *)); + if (ok) { + ok = (signalIdx < GetNumberOfSignals()); + } + if (ok) { + //lint -e{613} pvs cannot as otherwise ok would be false + signalAddress = pvs[signalIdx].memory; + } + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: The brokerName only depends on the direction */ +const char8* JAEPICSCAOutput::GetBrokerName(StructuredDataI& data, const SignalDirection direction) { + const char8* brokerName = ""; + if (direction == OutputSignals) { + brokerName = "MemoryMapAsyncOutputBroker"; + } + return brokerName; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: InputBrokers are not supported. Function returns false irrespectively of the parameters.*/ +bool JAEPICSCAOutput::GetInputBrokers(ReferenceContainer& inputBrokers, const char8* const functionName, void* const gamMemPtr) { + return false; +} + +bool JAEPICSCAOutput::GetOutputBrokers(ReferenceContainer& outputBrokers, const char8* const functionName, void* const gamMemPtr) { + ReferenceT broker("MemoryMapAsyncOutputBroker"); + bool ok = broker->InitWithBufferParameters(OutputSignals, *this, functionName, gamMemPtr, numberOfBuffers, cpuMask, stackSize); + if (ok) { + ok = outputBrokers.Insert(broker); + broker->SetIgnoreBufferOverrun(ignoreBufferOverrun == 1u); + } + + return ok; +} + +/*lint -e{715} [MISRA C++ Rule 0-1-11], [MISRA C++ Rule 0-1-12]. Justification: NOOP at StateChange, independently of the function parameters.*/ +bool JAEPICSCAOutput::PrepareNextState(const char8* const currentStateName, const char8* const nextStateName) { + return true; +} + +uint32 JAEPICSCAOutput::GetStackSize() const { + return stackSize; +} + +uint32 JAEPICSCAOutput::GetCPUMask() const { + return cpuMask; +} + +uint32 JAEPICSCAOutput::GetNumberOfBuffers() const { + return numberOfBuffers; +} + +bool JAEPICSCAOutput::Synchronise() { + bool ok = true; + uint32 n; + uint32 nOfSignals = GetNumberOfSignals(); + if (!threadContextSet) { + ok = (ca_context_create(ca_enable_preemptive_callback) == ECA_NORMAL); + if (!ok) { + REPORT_ERROR(ErrorManagement::FatalError, "ca_enable_preemptive_callback failed"); + } + threadContextSet = ok; + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + ok = (ca_create_channel(&pvs[n].pvName[0], NULL_PTR(caCh *), NULL_PTR(void *), 20u, &pvs[n].pvChid) == ECA_NORMAL); + if (!ok) { + REPORT_ERROR(ErrorManagement::FatalError, "ca_create_channel failed for PV with name %s", pvs[n].pvName); + } + } + } + } + + //Allow to write event at the first time! + if (threadContextSet) { + if (pvs != NULL_PTR(PVWrapper *)) { + for (n = 0u; (n < nOfSignals); n++) { + bool isNewValue = true; + if (pvs[n].pvType == DBR_STRING) { + if(strcmp((char*)pvs[n].memory,(char*)pvs[n].previousValue)==0){ + isNewValue = false; + continue; + } + if(isNewValue){ + ok = (ca_put(pvs[n].pvType, pvs[n].pvChid, pvs[n].memory) == ECA_NORMAL); + memcpy(pvs[n].previousValue,pvs[n].memory, pvs[n].numberOfElements); + } + } + else { + if(memcmp(pvs[n].memory, pvs[n].previousValue, pvs[n].numberOfElements)==0){ + isNewValue = false; + continue; + } + if(isNewValue){ + ok = (ca_array_put(pvs[n].pvType, pvs[n].numberOfElements, pvs[n].pvChid, pvs[n].memory) == ECA_NORMAL); + memcpy(pvs[n].previousValue, pvs[n].memory, pvs[n].numberOfElements); + } + } + if (!ok) { + REPORT_ERROR(ErrorManagement::FatalError, "ca_put failed for PV: %s", pvs[n].pvName); + } + (void) ca_pend_io(0.1); + } + } + } + + return ok; +} + +bool JAEPICSCAOutput::IsIgnoringBufferOverrun() const { + return (ignoreBufferOverrun == 1u); +} + +CLASS_REGISTER(JAEPICSCAOutput, "1.0") + +} + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAOutput.h b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAOutput.h new file mode 100644 index 0000000..5c2de87 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/JAEPICSCAOutput.h @@ -0,0 +1,233 @@ +/** + * @file EPICSCAOutput.h + * @brief Header file for class EPICSCAOutput + * @date 20/04/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class EPICSCAOutput + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef JAEPICSCAOutput_H_ +#define JAEPICSCAOutput_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" +#include "JAEPICSCAInput.h" +#include "EmbeddedServiceMethodBinderI.h" +#include "EventSem.h" +#include "SingleThreadService.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +namespace MARTe { +//Maximum size that a PV name may have + +/** + * @brief A DataSource which allows to output data into any number of PVs using the EPICS channel access client protocol. + * Data is asynchronously ca_put in the context of a different thread (w.r.t. to the real-time thread). + * + * The configuration syntax is (names are only given as an example): + * + *
+ * +EPICSCAOutput_1 = {
+ *     Class = EPICSCA::EPICSCAOutput
+ *     StackSize = 1048576 //Optional the EmbeddedThread stack size. Default value is THREADS_DEFAULT_STACKSIZE * 4u
+ *     CPUs = 0xff //Optional the affinity of the EmbeddedThread (where the EPICS context is attached).
+ *     IgnoreBufferOverrun = 1 //Optional. If true no error will be triggered when the thread that writes into EPICS does not consume the data fast enough.
+ *     NumberOfBuffers = 10 //Compulsory. Number of buffers in a circular buffer that asynchronously writes the PV values. Each buffer is capable of holding a copy of all the DataSourceI signals.
+ *     Signals = {
+ *          PV1 = { //At least one shall be defined
+ *             PVName = My::PV1 //Compulsory. Name of the PV.
+ *             Type = uint32 //Compulsory. Supported types are char8[40], string[40], uint8, int8, uint16, int16, int32, uint32, float32 and float64
+ *          }
+ *          ...
+ *     }
+ * }
+ *
+ * 
+ */ +class JAEPICSCAOutput: public DataSourceI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Default constructor. NOOP. + */ + JAEPICSCAOutput(); + + /** + * @brief Destructor. + * @details TODO. + */ + virtual ~JAEPICSCAOutput(); + + /** + * @brief See DataSourceI::AllocateMemory. NOOP. + * @return true. + */ + virtual bool AllocateMemory(); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @return 1. + */ + virtual uint32 GetNumberOfMemoryBuffers(); + + /** + * @brief See DataSourceI::GetSignalMemoryBuffer. + * @pre + * SetConfiguredDatabase + */ + virtual bool GetSignalMemoryBuffer(const uint32 signalIdx, + const uint32 bufferIdx, + void *&signalAddress); + + /** + * @brief See DataSourceI::GetNumberOfMemoryBuffers. + * @details Only OutputSignals are supported. + * @return MemoryMapAsyncOutputBroker. + */ + virtual const char8 *GetBrokerName(StructuredDataI &data, + const SignalDirection direction); + + /** + * @brief See DataSourceI::GetInputBrokers. + * @return false. + */ + virtual bool GetInputBrokers(ReferenceContainer &inputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::GetOutputBrokers. + * @details adds a memory MemoryMapOutputBroker instance to the outputBrokers + * @return true. + */ + virtual bool GetOutputBrokers(ReferenceContainer &outputBrokers, + const char8* const functionName, + void * const gamMemPtr); + + /** + * @brief See DataSourceI::PrepareNextState. NOOP. + * @return true. + */ + virtual bool PrepareNextState(const char8 * const currentStateName, + const char8 * const nextStateName); + + /** + * @brief Loads and verifies the configuration parameters detailed in the class description. + * @return true if all the mandatory parameters are correctly specified and if the specified optional parameters have valid values. + */ + virtual bool Initialise(StructuredDataI & data); + + /** + * @brief Final verification of all the parameters. Setup of the memory required to hold all the signals. + * @details This method verifies that all the parameters requested by the GAMs interacting with this DataSource + * are valid and consistent with the parameters set during the initialisation phase. + * In particular the following conditions shall be met: + * - All the signals have the PVName defined + * - All the signals have one of the following types: uint32, int32, float32 or float64. + * @return true if all the parameters are valid and the conditions above are met. + */ + virtual bool SetConfiguredDatabase(StructuredDataI & data); + + /** + * @brief Gets the affinity of the thread which is going to be used to asynchronously write data with ca_put. + * @return the affinity of the thread which is going to be used to asynchronously write data with ca_put. + */ + uint32 GetCPUMask() const; + + /** + * @brief Gets the stack size of the thread which is going to be used to asynchronously write data with ca_put. + * @return the stack size of the thread which is going to be used to asynchronously write data with ca_put. + */ + uint32 GetStackSize() const; + + /** + * @brief Gets the number of buffers in the circular buffer that asynchronously writes the PV values. + * @return the number of buffers in the circular buffer that asynchronously writes the PV values. + */ + uint32 GetNumberOfBuffers() const; + + /** + * @brief Provides the context to execute all the EPICS ca_put calls. + * @details Executes in the context of the MemoryMapAsyncOutputBroker thread the following EPICS calls: + * ca_context_create, ca_create_channel, ca_create_subscription, ca_clear_subscription, + * ca_clear_event, ca_clear_channel, ca_detach_context and ca_context_destroy + * @return true if all the EPICS calls return without any error. + */ + virtual bool Synchronise(); + + /** + * @brief Gets if buffer overruns is being ignored (i.e. the consumer thread which writes into EPICS is not consuming the data fast enough). + * @return if true no error is to be triggered when there is a buffer overrun. + */ + bool IsIgnoringBufferOverrun() const; + + +private: + /** + * List of PVs. + */ + PVWrapper *pvs; + + /** + * The CPU mask for the executor + */ + uint32 cpuMask; + + /** + * The stack size + */ + uint32 stackSize; + + /** + * Stores the configuration information received at Initialise. + */ + ConfigurationDatabase originalSignalInformation; + + /** + * The number of buffers for the circular buffer that flushes data into EPICS + */ + uint32 numberOfBuffers; + + /** + * True once the epics thread context is set + */ + bool threadContextSet; + + /** + * If true no error will be triggered when the data cannot be consumed by the thread doing the caputs. + */ + uint32 ignoreBufferOverrun; +}; +} + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* EPICSCADATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/Makefile.gcc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/Makefile.gcc new file mode 100644 index 0000000..1c65faf --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/Makefile.gcc @@ -0,0 +1,29 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc + +LIBRARIES += -L$(EPICS_BASE)/lib/$(EPICS_HOST_ARCH)/ -lca diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/Makefile.inc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/Makefile.inc new file mode 100644 index 0000000..5b7751f --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/JAEPICSCA/Makefile.inc @@ -0,0 +1,58 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAEPICSCAOutput.x JAEPICSCAInput.x + +PACKAGE=DataSources + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(EPICS_BASE)/include/ +INCLUDES += -I$(EPICS_BASE)/include/os/Linux/ +INCLUDES += -I$(EPICS_BASE)/include/compiler/gcc/ +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L5GAMs + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAEPICSCA$(LIBEXT) \ + $(BUILD_DIR)/JAEPICSCA$(DLLEXT) + echo $(OBJS) + +include depends.$(TARGET) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/Makefile.gcc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/Makefile.gcc new file mode 100644 index 0000000..e0a2fc4 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/Makefile.gcc @@ -0,0 +1,26 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +############################################################# + +include Makefile.inc + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/Makefile.inc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/Makefile.inc new file mode 100644 index 0000000..8bb8ee7 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/Makefile.inc @@ -0,0 +1,42 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +SPB = RandomDataSource.x NI6528.x JAEPICSCA.x + +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults + +ROOT_DIR=.. +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +all: $(OBJS) $(SUBPROJ) check-env + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + +check-env: +ifndef MARTe2_DIR + $(error MARTe2_DIR is undefined) +endif + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/Makefile.gcc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/Makefile.gcc new file mode 100644 index 0000000..29201d0 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/Makefile.gcc @@ -0,0 +1,30 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc + +LIBRARIES += -L$(CODAC_ROOT)/lib/ -lpxi6528 + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/Makefile.inc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/Makefile.inc new file mode 100644 index 0000000..30adbd0 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/Makefile.inc @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=NI6528.x + +PACKAGE=DataSources + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(CODAC_ROOT)/include/ + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/NI6528$(LIBEXT) \ + $(BUILD_DIR)/NI6528$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/NI6528.cpp b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/NI6528.cpp new file mode 100644 index 0000000..49f62b1 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/NI6528.cpp @@ -0,0 +1,141 @@ +/** + * @file NI6528.cpp + * @brief Source file for class NI6528 + * @date 01/03/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class NI6528 (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include +#include +#include +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "CompilerTypes.h" +#include "NI6528.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +NI6528::NI6528() : + MARTe::DataSourceI() { + using namespace MARTe; + previousValue = 0u; + value = 0u; + port = 0u; + boardFileDescriptor = 0; +} + +NI6528::~NI6528() { + using namespace MARTe; + (void) pxi6528_close_device(boardFileDescriptor); +} + +bool NI6528::SetConfiguredDatabase(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = (DataSourceI::SetConfiguredDatabase(data)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "DataSourceI::SetConfiguredDatabas() failed"); + } + if (ok) { + ok = (GetNumberOfSignals() == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetNumberOfSignals() != 1u"); + } + } + if (ok) { + ok = (GetSignalType(0u) == UnsignedInteger8Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetSignalType(0u) != UnsignedInteger8Bit"); + } + } + + return ok; +} + +bool NI6528::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = DataSourceI::Initialise(data); + if (ok) { + ok = data.Read("Port", port); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The Port shall be specified"); + } + } + if (ok) { + ok = data.Read("DeviceName", deviceName); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The DeviceName shall be specified"); + } + } + int32 ret = pxi6528_open_device(&boardFileDescriptor, deviceName.Buffer(), O_NONBLOCK); + ok = (ret == 0); + if (!ok) { + StreamString err = strerror(-ret); + REPORT_ERROR(ErrorManagement::FatalError, "Could not open device (%s) : %s", deviceName.Buffer(), err.Buffer()); + } + return ok; +} + +bool NI6528::Synchronise() { + using namespace MARTe; + if(previousValue != value){ + int32 ret = (pxi6528_write_port(boardFileDescriptor, port, value) > 0); + previousValue = value; + bool ok = (ret > -1); + if (!ok) { + StreamString err = strerror(-ret); + REPORT_ERROR(ErrorManagement::FatalError, "Could not write to device (%s) : %s", deviceName.Buffer(), err.Buffer()); + } + } + + return true; +} + +bool NI6528::AllocateMemory() { + return true; +} + +bool NI6528::GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress) { + signalAddress = &value; + return true; +} + +const MARTe::char8 *NI6528::GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction) { + using namespace MARTe; + return "MemoryMapSynchronisedOutputBroker"; +} + +bool NI6528::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + return true; +} + +CLASS_REGISTER(NI6528, "1.0") + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/NI6528.h b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/NI6528.h new file mode 100644 index 0000000..7074477 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/NI6528/NI6528.h @@ -0,0 +1,143 @@ +/** + * @file NI6528.h + * @brief Header file for class NI6528 + * @date 07/06/2018 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class NI6528 + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef RANDOM_DATASOURCE_H_ +#define RANDOM_DATASOURCE_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ +#include + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +/** + * @brief NI6528 simplified data source implementation. + * + * The configuration syntax is (names and signal quantities are only given as an example): + * +NI6528 = { + * Class = NI6528 + * DeviceName = "/dev/pxi6528.0" //Mandatory + * Port = 0 //The port where to write + * Signals = { + * currentValue = {Type = uint8} + * bitmask = {Type = uint8} + * Value = {Type = uint8} + * } + * } + */ +class NI6528: public MARTe::DataSourceI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Constructor. NOOP. + */ +NI6528 (); + + /** + * @brief Destructor. NOOP. + */ + virtual ~NI6528(); + + /** + * @brief The configuration data detailed in the class description + * @return true if all the compulsory parameters are set. + */ + virtual bool Initialise(MARTe::StructuredDataI & data); + + /** + * @brief Verifies that at most one signal has been set with the correct type (i.e. any integer). + * @return true if the above conditions are met. + */ + virtual bool SetConfiguredDatabase(MARTe::StructuredDataI & data); + + /** + * @brief @see DataSourceI::Synchronise + */ + virtual bool Synchronise(); + + /** + * @brief @see DataSourceI::AllocateMemory + */ + virtual bool AllocateMemory(); + + /** + * @brief @see DataSourceI::GetSignalMemoryBuffer + */ + virtual bool GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress); + + /** + * @return "MemoryMapSynchronisedInputBroker" + */ + virtual const MARTe::char8 *GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction); + + /** + * @brief NOOP + */ + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName); + +private: + /** + * The previous value to write. + */ + MARTe::uint8 previousValue; + + /** + * The bitmask to write value. (new value) = (current value) || (bitmask) && (write value) + */ + MARTe::uint8 bitmask; + + /** + * The value to write. + */ + MARTe::uint8 value; + + /** + * The port number + */ + MARTe::uint32 port; + + /** + * The board file descriptor + */ + pxi6528_device_t boardFileDescriptor; + + /** + * The device name + */ + MARTe::StreamString deviceName; +}; + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* RANDOM_DATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/Makefile.gcc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/Makefile.inc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/Makefile.inc new file mode 100644 index 0000000..2f1534c --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/Makefile.inc @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=RandomDataSource.x + +PACKAGE=DataSources + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/RandomDataSource$(LIBEXT) \ + $(BUILD_DIR)/RandomDataSource$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/RandomDataSource.cpp b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/RandomDataSource.cpp new file mode 100644 index 0000000..bcfc0b0 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/RandomDataSource.cpp @@ -0,0 +1,146 @@ +/** + * @file RandomDataSource.cpp + * @brief Source file for class RandomDataSource + * @date 01/03/2017 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class RandomDataSource (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "CompilerTypes.h" +#include "RandomDataSource.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +RandomDataSource::RandomDataSource() : + MARTe::DataSourceI() { + using namespace MARTe; + seed = 0u; + signalPtr = NULL_PTR(MARTe::char8 *); + signalTypeDescriptor = UnsignedInteger8Bit; +} + +RandomDataSource::~RandomDataSource() { + using namespace MARTe; + if (signalPtr) { + delete[] signalPtr; + } +} + +bool RandomDataSource::SetConfiguredDatabase(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = (DataSourceI::SetConfiguredDatabase(data)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "DataSourceI::SetConfiguredDatabas() failed"); + } + if (ok) { + ok = (GetNumberOfSignals() == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetNumberOfSignals() != 1u"); + } + } + if (ok) { + signalTypeDescriptor = GetSignalType(0u); + ok = (signalTypeDescriptor.type == UnsignedInteger); + if (!ok) { + ok = (signalTypeDescriptor.type == SignedInteger); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "GetSignalType(0u) != Un/SignedInteger"); + } + } + + return ok; +} + +bool RandomDataSource::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = DataSourceI::Initialise(data); + if (ok) { + ok = data.Read("Seed", seed); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "The Seed shall be specified"); + } + } + + return ok; +} + +bool RandomDataSource::Synchronise() { + using namespace MARTe; + + if (signalTypeDescriptor.numberOfBits == 8u) { + GetValue(); + } + if (signalTypeDescriptor.numberOfBits == 16u) { + GetValue(); + } + if (signalTypeDescriptor.numberOfBits == 32u) { + GetValue(); + } + if (signalTypeDescriptor.numberOfBits == 64u) { + GetValue(); + } + + return true; +} + +bool RandomDataSource::AllocateMemory() { + signalPtr = new MARTe::char8[signalTypeDescriptor.numberOfBits]; + return true; +} + +bool RandomDataSource::GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress) { + signalAddress = &signalPtr[0]; + return true; +} + +const MARTe::char8 *RandomDataSource::GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction) { + using namespace MARTe; + + static bool firstTime = true; + const char8 * broker;// = NULL_PTR(const char8 *); + if (firstTime) { + broker = "MemoryMapSynchronisedInputBroker"; + } + else { + firstTime = false; + broker = "MemoryMapInputBroker"; + } + return broker; +} + +bool RandomDataSource::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + return true; +} + +CLASS_REGISTER(RandomDataSource, "1.0") + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/RandomDataSource.h b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/RandomDataSource.h new file mode 100644 index 0000000..11cade5 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/DataSources/RandomDataSource/RandomDataSource.h @@ -0,0 +1,137 @@ +/** + * @file RandomDataSource.h + * @brief Header file for class RandomDataSource + * @date 07/06/2018 + * @author Andre Neto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class RandomDataSource + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef RANDOM_DATASOURCE_H_ +#define RANDOM_DATASOURCE_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "DataSourceI.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +/** + * @brief DataDource which generates random numbers against a given seed. + * + * The configuration syntax is (names and signal quantities are only given as an example): + * +RandomDataSource = { + * Class = RandomDataSource + * Seed = 8 //Seed against which the the seed will be generated. Note that each signal + * Signals = { + * Random1 = { //Maximum one signal + * Type = uint64 //All the integer types are supported + * } + * } + * } + */ +class RandomDataSource: public MARTe::DataSourceI { +public: + CLASS_REGISTER_DECLARATION() + + /** + * @brief Constructor. NOOP. + */ +RandomDataSource (); + + /** + * @brief Destructor. NOOP. + */ + virtual ~RandomDataSource(); + + /** + * @brief The configuration data detailed in the class description + * @return true if all the compulsory parameters are set. + */ + virtual bool Initialise(MARTe::StructuredDataI & data); + + /** + * @brief Verifies that at most one signal has been set with the correct type (i.e. any integer). + * @return true if the above conditions are met. + */ + virtual bool SetConfiguredDatabase(MARTe::StructuredDataI & data); + + /** + * @brief @see DataSourceI::Synchronise + */ + virtual bool Synchronise(); + + /** + * @brief @see DataSourceI::AllocateMemory + */ + virtual bool AllocateMemory(); + + /** + * @brief @see DataSourceI::GetSignalMemoryBuffer + */ + virtual bool GetSignalMemoryBuffer(const MARTe::uint32 signalIdx, const MARTe::uint32 bufferIdx, void *&signalAddress); + + /** + * @return "MemoryMapSynchronisedInputBroker" + */ + virtual const MARTe::char8 *GetBrokerName(MARTe::StructuredDataI &data, const MARTe::SignalDirection direction); + + /** + * @brief NOOP + */ + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName); + +private: + /** + * The seed to compute the signals. + */ + MARTe::uint32 seed; + + /** + * The signal pointer + */ + MARTe::char8 *signalPtr; + + /** + * The signal type descriptor. + */ + MARTe::TypeDescriptor signalTypeDescriptor; + + /** + * Compute the random value + */ + template + void GetValue(); + +}; + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ +template +void RandomDataSource::GetValue() { + *(reinterpret_cast(&signalPtr[0u])) = static_cast(rand_r(&seed)); +} + +#endif /* RANDOM_DATASOURCE_H_ */ + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Doc/RTAppStates.xml b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Doc/RTAppStates.xml new file mode 100644 index 0000000..5a244e9 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Doc/RTAppStates.xml @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Doc/StateMachine.txt b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Doc/StateMachine.txt new file mode 100644 index 0000000..1254477 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Doc/StateMachine.txt @@ -0,0 +1,463 @@ +********** +* EXAMLE * +********** + +State1 // RT application state name +========== +1. // Numbered GAMs in order of execution +if (signal_A == 1) // Execution function of the GAM +{ + set signal_B = 3 + change state to State2 +} +---------- + + + +***************** +* RT APP STATES * +***************** + +WaitStandby +========== +1. // DONE +if (EC-GN-P01-GAF:PLC4110-CON-OPGY1 == 0) //If a Gyrotron is not selected by PLC. +{ + change state to Disabled +} +---------- +2. // DONE +if (EC-GN-P01-GPF:PLC4110-YTS-ST1R == 1) //If STANDBY signal come from PLC, start Coil&Fil PSs. +{ + // TODO should these signals be set only once every time this state is entered? + set signal EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP = 1 + set signal EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP = 1 + set signal EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START = 1 +} +---------- +3. // DONE +if (EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB == 1 + AND + EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON > 0 + AND + EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB == 1 + AND + EC-GN-P01-GAF-FHPS:PSU2610-CURR-RB > 0) +{ + change state to Offline +} +---------- + + + +Disabled +========== +1. // DONE +if (EC-GN-P01-GAF:PLC4110-CON-OPGY1 == 1) +{ + change state to WaitStandby +} +---------- + + + +Offline +========== +1. // DONE +if (EC-GN-P01-GAF:PLC4110-CON-OPGY1 == 0) //If Gyrotron selection is turned off. +{ + change state to Disabled +} +---------- +2. // DONE +// If READY signal come from PLC is equal 1, app starts CCPS. +if (EC-GN-P01-GPF:PLC4110-YTS-ST2R == 1 + AND + EC-GN-P01-GAF-CCPS:PLC4110-YON-CCPS1 == 1) +{ + // TODO should this signal be set only once every time this state is entered? + set signal EC-GN-P01-GAF-CCPS:PSU2320-OUTON-SP = 1 +} +---------- +3. // DONE (with a temporary signal that needs to be changed when the record is added) +// TODO: Do we also have to check, that GAM 2. executed? So do we also have to check that EC-GN-P01-GPF:PLC4110-YTS-ST2R == 1? +if (EC-GN-P01-GAF-CCPS:PSU2320-STAT == 1) // TODO: there is no signal named EC-GN-P01-GAF-CCPS:PSU2320-STAT + // MEMO: I need add this record to check whether CCPS in running or stop. +{ + change state to WaitPermit +} +---------- +4. // DONE +// Wait CSV-LOAD trigger. When the app detect it, save data into the app. +if (EC-GN-P01-GAF:STAT-CSV-LOAD == 1) +{ + open csv file (file name: EC-GN-P01-GAF:STAT-CSV-NAME) + load time series data into memory + write data into EPICS waveform PSs.(EC-GN-P01-???:STAT-PREP-WF) // TODO do we realy write first data here or do we wait for PreHeating? + set signal EC-GN-P01-GAF:STAT-CSV-LOADED = 1 // TODO do we write 1 here? + If there is error, write EC-GN-P01-GAF:STAT-CSV-ERROR. // TODO there is no signal named EC-GN-P01-GAF:STAT-CSV-ERROR +} + + +WaitPermit +========== +1. // DONE +if (EC-GN-P01-GAF:PLC4110-CON-OPGY1 == 0) //If Gyrotron is un-selected. +{ + change state to Disabled +} +---------- +2. // DONE +if (EC-GN-P01-GAF:STAT-PREP-MODE == 1 + AND + EC-GN-P01-GAF:PLC4110-CON-GY1PRM == 1) +{ + change state to PreHeating +} +---------- +3. // DONE +if (EC-GN-P01-GAF:STAT-PREP-MODE == 0 + AND + EC-GN-P01-GAF:PLC4110-CON-GY1PRM == 1) +{ + change state to WaitReady +} +---------- +4. // DONE +if (EC-GN-P01-GAF:STAT-CSV-LOAD == 1) +{ + open csv file (file name: EC-GN-P01-GAF:STAT-CSV-NAME) + load time series data into memory + write data into EPICS waveform PSs.(EC-GN-P01-???:STAT-PREP-WF) + set signal EC-GN-P01-GAF:STAT-CSV-LOADED = 1 + If there is error, write EC-GN-P01-GAF:STAT-CSV-ERROR. +} + +PreHeating +========== +1. // DONE +every 10 ms do +{ + else + { + // TODO do we use float32 for the type of waveform signals? + // TODO is this the right order of columns? Time point is in column 1. + // TODO on what signal do we write time? + set signal EC-GN-P01-PB1F:PSU1000-EREF = setpoint column 2 + set signal EC-GN-P01-PA1F:PSU3000-EREF = setpoint column 3 // TODO there are two EC-GN-P01-PA1F:PSU3000-EREF signals. One ending with -P and one with -N. + set signal EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET = setpoint column 4 + set signal EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET = setpoint column 5 + set signal EC-GN-P01-GAF-FHPS:PSU2320-EREF = setpoint column 6 + } +} +---------- +2. // DONE +if (time == 0) +{ + change state to WaitReady +} +---------- + + +WaitReady +========== +1. // DONE +if (EC-GN-P01-PB1F:PSU1000-YSTA == 1 + AND + EC-GN-P01-PA1F:PSU3000-YSTA == 1) +{ + change state to WaitHVON +} +---------- + + +WaitHVON +========== +1. // DONE +if (EC-GN-P01-GPF:PLC4110-YTS-ST3R == 1)// Check ON signal from PLC. This signal come when PLC check the operation operation possible conditions. +{ + change state to HVArming +} +---------- +2. // DONE +if (EC-GN-P01-GPF:PLC4110-YTS-ST3R == 1) +{ + start HVON timer +} +---------- + + + +HVArming //HVArming is a state to startup HV generation in APS and BPS. +========== +1. +at specified time // TODO: Where do I get this specified time? And is it a countdown time or what? + // MEMO: Time is specified by PVs (EC-GN-P01-PB1F:STAT-DT-HVON). When app detect HVON from PLC, it is t=0. +{ + set signal EC-GN-P01-PB1F:PSU1000-CON-HV = 1 +} +---------- +2. +at specified time // TODO: Where do I get this specified time? And is it a countdown time or what? + // MEMO: Time is specified by PVs (EC-GN-P01-PA1F:STAT-DT-HVON) +{ + set signal EC-GN-P01-PA1F:PSU3000-CON-HV = 1 +} +---------- +3. +if (EC-GN-P01-PB1F:PSU1000-CON-HV == 1 + AND + EC-GN-P01-PA1F:PSU3000-CON-HV == 1 + AND + EC-GN-P01-GPF::PLC4110-YSTA-MPSS == 0) // MEMO: Both HV PVs are 1. i.e.Both PSs are charged HV. and is in async mode. +{ + change state to HVArmed +} +---------- +4. +if (EC-GN-P01-PB1F:PSU1000-CON-HV == 1 + AND + EC-GN-P01-PA1F:PSU3000-CON-HV == 1 + AND + EC-GN-P01-GPF::PLC4110-YSTA-MPSS == 1) // MEMO: HVPS HVs are ON and is in SYNC mode. +{ + Change state to HVArmedESDN +} +---------- +5. + count up elapsed time (time from HVON detection) + Write time to EC-GN-P01-GAF:STAT-ELAPSED + + +HVArmed +========== +1. +if (EC-GN-P01-GPF:PLC4110-YTS-ST3R == 0) // TODO: when do we go from HVArmed to Offline? + // MEMO: move to Offline when ON signal from PLC is turned off. +{ + change state to Offline +} +---------- +2. +// TODO: "(Entry) Write EC-GN-P01-GAF:PCF4210-YTS-GA1" What does Entry mean? Does it mean to do something +// only on the first cycle when we enter this state? What do I write to signal EC-GN-P01-GAF:PCF4210-YTS-GA1? +// MEMO: EC-GN-P01-GAF:PCF4210-YTS-GA1 is a PV that fast controller notifies Gyrotron operation state to PLC. +// When enter the HVArmed state, App writes 1 to this EPICS PV. +---------- +3. +if (EC-GN-P01-PB1F:PSU1000-CON-SW == 1) // TODO: when do we go from HVArmed to HVInjectionBPS? + // MEMO: If MHVPS HV is turned ON first, goto this state. +{ + change state to HVInjectionBPS +} +---------- +4. +if (EC-GN-P01-PMF:PSU0000-CON-SW == 1) // TODO: when do we go from HVArmed to HVInjectionMHVPS? + // MEMO: If BPS HV is turned ON first, goto this state. +{ + change state to HVInjectionMHVPS +} +---------- +5. + count up elapsed time (time from HVON detection) + Write time to EC-GN-P01-GAF:STAT-ELAPSED +---------- +6. +if (EC-GN-P01-GPF::PLC4110-YSTA-MPSS == 1) //When SYNC mode turned ON. +{ + change state to HVArmedESDN +} +---------- + +HVArmedESDN // Start ESDN command, waveform subscription. +========== +1. +if (EC-GN-P01-GPF:PLC4110-YTS-ST3R == 0) +{ + change state to Offline +} +---------- +2. +if (EC-GN-P01-PB1F:PSU1000-CON-SW == 1) +{ + change state to HVInjectionBPSESDN +} +---------- +3. +if (EC-GN-P01-PMF:PSU0000-CON-SW == 1) +{ + change state to HVInjectionMHVPSESDN +} +---------- +4. + count up elapsed time (time from HVON detection) + Write time to EC-GN-P01-GAF:STAT-ELAPSED +---------- +6. +if (EC-GN-P01-GPF::PLC4110-YSTA-MPSS == 0) //When SYNC mode turned ON. +{ + change state to HVArmed +} +---------- + +HVInjectionBPS +========== +HVInjectionMHVPS +========== +1. +// MEMO: Write Gyrotron state PV (HVInjection) to notify PLC. +Write 1 to EC-GN-P01-GAF:PCF4210-YTS-GA2. +---------- +// TODO: Following questions/states are for ALL of the above states +2. (Exist in HVInjection BPS) +set signal EC-GN-P01-PA1F:PSU3000-CON-SW = 1 // TODO when do we set this signal +// MEMO: Countdown time for EC-GN-P01-PA1F:STAT-DT-SWON +---------- +2. (Exist in HVInjection MHVPS) +set signal EC-GN-P01-PB1F:PSU1000-CON-SW = 1 // TODO when do we set this signal +// MEMO: Countdown time for EC-GN-P01-PB1F:STAT-DT-SWON +---------- +3. +set signal EC-GN-P01-PMF:PSU0000-CON-SW = 1 // TODO when do we set this signal +// MEMO: Countdown time for EC-GN-P01-PMF:STAT-DT-SWON +---------- +4. +// TODO when to switch to RFON? +// MEMO: Go to RFON state when All switch PVs are 1. and the mode is async. +if (EC-GN-P01-PA1F:PSU3000-CON-SW == 1 AND + EC-GN-P01-PB1F:PSU1000-CON-SW == 1 AND + EC-GN-P01-PMF:PSU0000-CON-SW == 1) +{ + change state to RFON +} +---------- +5. + count up elapsed time (time from HVON detection) + Write time to EC-GN-P01-GAF:STAT-ELAPSED +---------- + +HVInjectionESDN +========== +1. +// MEMO: Write Gyrotron state PV (HVInjection) to notify PLC. +Write 1 to EC-GN-P01-GAF:PCF4210-YTS-GA2. +---------- +2. +set signal EC-GN-P01-PA1F:PSU3000-CON-SW = 1 +// Write 1 when ESDN command give a command. +---------- +3. +set signal EC-GN-P01-PB1F:PSU1000-CON-SW = 1 +// Write 1 when ESDN command give a command. +---------- +4. +set signal EC-GN-P01-PMF:PSU0000-CON-SW = 1 +// Write 1 when ESDN command give a command. +---------- +5. +// TODO when to switch to RFONESDN? +// MEMO: Go to RFON state when All switch PVs are 1. and the mode is sync.i,e. change from HVInjectionxxxESDN +if (EC-GN-P01-PA1F:PSU3000-CON-SW == 1 AND + EC-GN-P01-PB1F:PSU1000-CON-SW == 1 AND + EC-GN-P01-PMF:PSU0000-CON-SW == 1) +{ + change state to RFONESDN +} +---------- + +RFON +========== +// TODO is this correct? +1. +// This only executes on the last cycle before we move to HVArmed +if (EC-GN-P01-GAF:STAT-BEAMON-TIME >= EC-GN-P01-GAF:STAT-DT-SHOTLEN) +{ + set signal EC-GN-P01-PA1F:PSU3000-CON-SW = 0 + set signal EC-GN-P01-PB1F:PSU1000-CON-SW = 0 + set signal EC-GN-P01-PMF:PSU0000-CON-SW = 0 +} +---------- +2. +if (EC-GN-P01-GAF:STAT-BEAMON-TIME >= EC-GN-P01-GAF:STAT-DT-SHOTLEN) +{ + change state to HVArmed +} +---------- +3. + count up elapsed time (time from HVON detection) + Write time to EC-GN-P01-GAF:STAT-ELAPSED +---------- +4. +When enter the state beam-on timer is set to 0. +count up beam-on time. write the time into EC-GN-P01-GAF:STAT-BEAMON-TIME +---------- + + + +RFONESDN +========== +// TODO is this correct? +// MEMO: In the ESDN sync mode, HVPS turned off by ESDN packet. +// In both mode, there is mode_limit which is given by (EC-GN-P01-GPF:PLC4110-YTS-MD1,2,3,4). +1. +// This only executes on the last cycle before we move to HVArmed +if (EC-GN-P01-GAF:STAT-BEAMON-TIME >= t_mode_limit) // TODO: where do I get t_mode_limit? +{ + set signal EC-GN-P01-PA1F:PSU3000-CON-SW = 0 + set signal EC-GN-P01-PB1F:PSU1000-CON-SW = 0 + set signal EC-GN-P01-PMF:PSU0000-CON-SW = 0 +} +---------- +2. +if (EC-GN-P01-GAF:STAT-BEAMON-TIME >= t_mode_limit) // TODO: where do I get t_mode_limit? +{ + change state to HVArmedESDN +} +---------- +3. +Subscribe ESDN commands. When GAM detect Beam-off command. It turn all HVPS SW OFF. +And change state to HVArmedESDN +---------- +4. + count up elapsed time (time from HVON detection) + Write time to EC-GN-P01-GAF:STAT-ELAPSED +---------- +5. +When enter the state beam-on timer is set to 0. +count up beam-on time. write the time into EC-GN-P01-GAF:STAT-BEAMON-TIME +---------- + + +Error +========== +1. +// Only execute on the first cycle after entering this state +if (first) +{ + set first = false + + set signal EC-GN-P01-PA1F:PUS3000-CON-HV = 0 // TODO: there is no signal named EC-GN-P01-PA1F:PUS3000-CON-HV + set signal EC-GN-P01-PA1F:PSU3000-CON-SW = 0 + set signal EC-GN-P01-PB1F:PSU1000-CON-HV = 0 + set signal EC-GN-P01-PB1F:PSU1000-CON-SW = 0 + set signal EC-GN-P01-PMF:PSU0000-CON-SW = 0 + // MEMO: PA2F and PB2F are component type for gyrotron B. I will remove following action. + set signal EC-GN-P01-PA2F:PUS4000-CON-HV = 0 // TODO: there is no signal named EC-GN-P01-PA2F:PUS4000-CON-HV + set signal EC-GN-P01-PA2F:PSU4000-CON-SW = 0 // TODO: signal EC-GN-P01-PA2F:PSU4000-CON-SW missing in configuration file + set signal EC-GN-P01-PB2F:PSU2000-CON-HV = 0 // TODO: signal EC-GN-P01-PB2F:PSU2000-CON-HV missing in configuration file + set signal EC-GN-P01-PB2F:PSU2000-CON-SW = 0 // TODO: signal EC-GN-P01-PB2F:PSU2000-CON-SW missing in configuration file + + set signal EC-GN-P01-PMF:PSU0000-CON-SW = 1 + set signal EC-GN-P01-PA1F:PSU3000-CTRP = 1 + set signal EC-GN-P01-PB1F:PSU1000-CTRP = 1 + // MEMO: PA2F and PB2F are component type for gyrotron B. I will remove following action. + set signal EC-GN-P01-PA2F:PSU4000-CTRP = 1 // TODO: signal EC-GN-P01-PA2F:PSU4000-CTRP missing in configuration file + set signal EC-GN-P01-PB2F:PSU1000-CTRP = 1 // TODO: there is no signal named EC-GN-P01-PB2F:PSU1000-CTRP +} +---------- +2. +if (EC-GN-P01-GPF:STAT-RST-FLT == 1 && ) // TODO: when do we go to Offline state? +{ + change state to Offline +} +---------- diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/JABitReverseGAM.cpp b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/JABitReverseGAM.cpp new file mode 100644 index 0000000..dd322b8 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/JABitReverseGAM.cpp @@ -0,0 +1,123 @@ +/** + * @file JABitReverseGAM.cpp + * @brief Source file for class JABitReverseGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JABitReverseGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JABitReverseGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JABitReverseGAM::JABitReverseGAM() { + //Input signals. + input1 = NULL_PTR(MARTe::uint8 *); + + //Output signals. + output1= NULL_PTR(MARTe::uint8 *); +} + +JABitReverseGAM::~JABitReverseGAM() { +} + +bool JABitReverseGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + return ok; +} + +bool JABitReverseGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JABitReverseGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == 1u); + if (ok) { + ok = (numberOfOutputSignals == 1u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "One output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "One input signals shall be defined"); + } + // Do type check for input signals. + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = ((inputType == UnsignedInteger8Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint8.", signalName.Buffer()); + } + + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = ((outputType == UnsignedInteger8Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint8.", signalName.Buffer()); + } + } + } + // Do type cast. + if (ok) { + input1 = reinterpret_cast(GetInputSignalMemory(0)); + + output1 = reinterpret_cast(GetOutputSignalMemory(0)); + } + return ok; +} + +bool JABitReverseGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + *output1 = ~(*input1); + return true; +} + +CLASS_REGISTER(JABitReverseGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/JABitReverseGAM.h b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/JABitReverseGAM.h new file mode 100644 index 0000000..1d2bbcf --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/JABitReverseGAM.h @@ -0,0 +1,75 @@ +/** + * @file JABitReverseGAM.h + * @brief Header file for class JABitReverseGAM + * @date Mar 18, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JABitReverseGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JABitReverseGAM_H_ +#define GAMS_JABitReverseGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +class JABitReverseGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JABitReverseGAM(); + + virtual ~JABitReverseGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + + // Input signals + MARTe::uint8 *input1; + + // Output signals + MARTe::uint8 *output1; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JABitReverseGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/Makefile.inc new file mode 100644 index 0000000..e764f01 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitReverseGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JABitReverseGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JABitReverseGAM$(LIBEXT) \ + $(BUILD_DIR)/JABitReverseGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/JABitSumGAM.cpp b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/JABitSumGAM.cpp new file mode 100644 index 0000000..7c75cd1 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/JABitSumGAM.cpp @@ -0,0 +1,143 @@ +/** + * @file JABitSumGAM.cpp + * @brief Source file for class JABitSumGAM + * @date Feb 10, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JABitSumGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JABitSumGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JABitSumGAM::JABitSumGAM() { + //Input signals. + input0 = NULL_PTR(MARTe::uint32 *); + input1 = NULL_PTR(MARTe::uint32 *); + input2 = NULL_PTR(MARTe::uint32 *); + input3 = NULL_PTR(MARTe::uint32 *); + input4 = NULL_PTR(MARTe::uint32 *); + input5 = NULL_PTR(MARTe::uint32 *); + input6 = NULL_PTR(MARTe::uint32 *); + input7 = NULL_PTR(MARTe::uint32 *); + + //Output signals. + output= NULL_PTR(MARTe::uint8 *); +} + +JABitSumGAM::~JABitSumGAM() { +} + +bool JABitSumGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (!ok){ + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "ParametersError in init."); + } + return ok; +} + +bool JABitSumGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JABitSumGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == 8u); + if (ok) { + ok = (numberOfOutputSignals == 1u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "One output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Eight input signals shall be defined"); + } + // Do type check for input signals. + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32.", signalName.Buffer()); + } + + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint8.", signalName.Buffer()); + } + } + } + // Do type cast. + if (ok) { + input0 = reinterpret_cast(GetInputSignalMemory(0)); + input1 = reinterpret_cast(GetInputSignalMemory(1)); + input2 = reinterpret_cast(GetInputSignalMemory(2)); + input3 = reinterpret_cast(GetInputSignalMemory(3)); + input4 = reinterpret_cast(GetInputSignalMemory(4)); + input5 = reinterpret_cast(GetInputSignalMemory(5)); + input6 = reinterpret_cast(GetInputSignalMemory(6)); + input7 = reinterpret_cast(GetInputSignalMemory(7)); + + output = reinterpret_cast(GetOutputSignalMemory(0)); + } + + return ok; +} + +bool JABitSumGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + *output = *input0 + *input1*2 + *input2*4 + *input3*8 + *input4*16 + + *input5*32 + *input6*64 + *input7*128; + + return true; +} + +CLASS_REGISTER(JABitSumGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/JABitSumGAM.h b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/JABitSumGAM.h new file mode 100644 index 0000000..462f62b --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/JABitSumGAM.h @@ -0,0 +1,81 @@ +/** + * @file JABitSumGAM.h + * @brief Header file for class JABitSumGAM + * @date Feb 10, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JABitSumGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JABitSumGAM_H_ +#define GAMS_JABitSumGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include "stdio.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +class JABitSumGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JABitSumGAM(); + + virtual ~JABitSumGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + // Input signals + MARTe::uint32 *input0; + MARTe::uint32 *input1; + MARTe::uint32 *input2; + MARTe::uint32 *input3; + MARTe::uint32 *input4; + MARTe::uint32 *input5; + MARTe::uint32 *input6; + MARTe::uint32 *input7; + + // Output signals + MARTe::uint8 *output; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JABitSumGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/Makefile.inc new file mode 100644 index 0000000..42b3063 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JABitSumGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JABitSumGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JABitSumGAM$(LIBEXT) \ + $(BUILD_DIR)/JABitSumGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.cpp b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.cpp new file mode 100644 index 0000000..99ba1f5 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.cpp @@ -0,0 +1,309 @@ +/** + * @file JAConditionalSignalUpdateGAM.cpp + * @brief Source file for class JAConditionalSignalUpdateGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAConditionalSignalUpdateGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAConditionalSignalUpdateGAM.h" +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAConditionalSignalUpdateGAM::JAConditionalSignalUpdateGAM() { + inputSignals = NULL_PTR(void **); + inputSignalTypes = NULL_PTR(MARTe::TypeDescriptor *); + values = NULL_PTR(MARTe::uint32 *); + valuesCount = 0u; + outputSignals = NULL_PTR(MARTe::uint32 **); + defaultValues = NULL_PTR(MARTe::uint32 **); + needsReset = false; + expectedValues = NULL_PTR(MARTe::uint32 *); + expectedValuesCount = 0u; + operation = And; + comparators = NULL_PTR(ComparisonMode *); +} + +JAConditionalSignalUpdateGAM::~JAConditionalSignalUpdateGAM() { + if (outputSignals != NULL_PTR(MARTe::uint32 **)) { + delete[] outputSignals; + } + if (inputSignals != NULL_PTR(void **)) { + delete[] inputSignals; + } + if (inputSignalTypes != NULL_PTR(MARTe::TypeDescriptor *)) { + delete[] inputSignalTypes; + } + if (values != NULL_PTR(MARTe::uint32 *)) { + delete[] values; + } + if (comparators != NULL_PTR(ComparisonMode *)) { + delete[] comparators; + } + if (defaultValues != NULL_PTR(MARTe::uint32 **)) { + delete[] defaultValues; + } +} + +bool JAConditionalSignalUpdateGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + // Read expected values. + AnyType valuesArray = data.GetType("ExpectedValues"); + + if (valuesArray.GetDataPointer() != NULL) { + expectedValuesCount = valuesArray.GetNumberOfElements(0u); + + expectedValues = new uint32[expectedValuesCount]; + + Vector valuesVector(expectedValues, expectedValuesCount); + ok = (data.Read("ExpectedValues", valuesVector)); + } + } + if (ok) { + // Read comparators. + AnyType comparatorsArray = data.GetType("Comparators"); + if (comparatorsArray.GetDataPointer() != NULL) { + uint32 count; + if (ok) { + count = comparatorsArray.GetNumberOfElements(0u); + ok = count == expectedValuesCount; + } + if (ok) { + comparators = new ComparisonMode[count]; + StreamString* comp = new StreamString[count]; + Vector compVector(comp, count); + + ok = (data.Read("Comparators", compVector)); + + if (ok) { + for (uint32 i = 0; i < count; ++i) { + if (comp[i] == "EQUALS") { + comparators[i] = Equals; + } else if (comp[i] == "NOT") { + comparators[i] = Not; + } else if (comp[i] == "GREATER") { + comparators[i] = Greater; + } else if (comp[i] == "EQUALS_OR_GREATER") { + comparators[i] = EqualsOrGreater; + } else if (comp[i] == "LESS") { + comparators[i] = Less; + } else if (comp[i] == "EQUALS_OR_LESS") { + comparators[i] = EqualsOrLess; + } else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Comparator %s is not defined.", comp[i].Buffer()); + } + } + } + delete[] comp; + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Expected values and operators shall have the same " + "number of elements."); + } + } else { + // Create default comparators (equals) when they aren't provided in the configuration. + comparators = new ComparisonMode[expectedValuesCount]; + for (uint32 i = 0; i < expectedValuesCount; ++i) { + comparators[i] = Equals; + } + } + } + if (ok) { + MARTe::StreamString operationStr; + if (data.Read("Operation", operationStr)) { + if (operationStr == "AND") { + operation = And; + } + else if (operationStr == "OR") { + operation = Or; + } + else if (operationStr == "NOR") { + operation = Nor; + } + else if (operationStr == "XOR") { + operation = Xor; + } + else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Operation %s is not defined", operationStr.Buffer()); + } + } + } + if (ok) { + // Read output signal values to be set. + AnyType valuesArray = data.GetType("Values"); + ok = (valuesArray.GetDataPointer() != NULL); + + if (ok) { + valuesCount = valuesArray.GetNumberOfElements(0u); + ok = valuesCount > 0u; + } + if (ok) { + values = new uint32[valuesCount]; + + Vector valuesVector(values, valuesCount); + ok = (data.Read("Values", valuesVector)); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Values shall be defined."); + } + } + return ok; +} + +bool JAConditionalSignalUpdateGAM::Setup() { + using namespace MARTe; + bool ok = numberOfInputSignals == (expectedValuesCount + numberOfOutputSignals); + if (ok) { + inputSignals = new void*[expectedValuesCount]; + defaultValues = new uint32*[numberOfOutputSignals]; + uint32 i; + for (i = 0u; i < expectedValuesCount; i++) { + inputSignals[i] = GetInputSignalMemory(i); + } + for (; i < numberOfInputSignals; i++) { + defaultValues[i - expectedValuesCount] = reinterpret_cast(GetInputSignalMemory(i)); + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Number of input signals shall be equal to number " + "of expected values plus number of output signals."); + } + if (ok) { + inputSignalTypes = new TypeDescriptor[expectedValuesCount]; + uint32 i; + for (i = 0u; (i < expectedValuesCount) && (ok); i++) { + inputSignalTypes[i] = GetSignalType(InputSignals, i); + ok = ((inputSignalTypes[i] == UnsignedInteger32Bit) || (inputSignalTypes[i] == UnsignedInteger16Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, i, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint16", signalName.Buffer()); + } + } + } + if (ok) { + ok = numberOfOutputSignals == valuesCount; + if (ok) { + ok = numberOfOutputSignals > 0u; + if (ok) { + outputSignals = new uint32*[numberOfOutputSignals]; + uint32 i; + for (i = 0u; i < numberOfOutputSignals; i++) { + outputSignals[i] = reinterpret_cast(GetOutputSignalMemory(i)); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one output signal shall be defined"); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Number of output signals shall be the same as " + "number of provided values."); + } + } + + return ok; +} + +bool JAConditionalSignalUpdateGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + needsReset = false; + return true; +} + +bool JAConditionalSignalUpdateGAM::Execute() { + if (!needsReset) { + bool eventDetected = expectedValuesCount == 0; + if (!eventDetected) { + if (operation == Or) { + MARTe::uint32 j; + for (j = 0; (j < expectedValuesCount) && (!eventDetected); j++) { + eventDetected = Compare(j); + } + } + else if (operation == Nor) { + MARTe::uint32 j; + for (j = 0; (j < expectedValuesCount) && (!eventDetected); j++) { + eventDetected = Compare(j); + } + eventDetected = !eventDetected; + } + else if (operation == And) { + MARTe::uint32 j; + eventDetected = Compare(0); + for (j = 1; (j < expectedValuesCount); j++) { + eventDetected &= Compare(j); + } + } + else if (operation == Xor) { + MARTe::uint32 j; + MARTe::uint32 eventDetectedUint32; + if (inputSignalTypes[0] == MARTe::UnsignedInteger32Bit) { + eventDetectedUint32 = *static_cast(inputSignals[0]); + } + else { + eventDetectedUint32 = *static_cast(inputSignals[0]); + } + for (j = 1; (j < expectedValuesCount); j++) { + eventDetectedUint32 ^= Compare(j); + } + eventDetected = (eventDetectedUint32 == 1u); + } + } + if (eventDetected) { + needsReset = true; + MARTe::uint32 i; + for (i = 0u; i < numberOfOutputSignals; ++i) { + *outputSignals[i] = values[i]; + MARTe::StreamString signalName; + (void) GetSignalName(MARTe::OutputSignals, i, signalName); + } + } + else { + MARTe::uint32 i; + for (i = 0u; i < numberOfOutputSignals; ++i) { + *outputSignals[i] = *defaultValues[i]; + } + } + } + return true; +} + +bool JAConditionalSignalUpdateGAM::Compare(MARTe::uint32 index) { + if (inputSignalTypes[index] == MARTe::UnsignedInteger32Bit) { + return Compare(index); + } + return Compare(index); +} + +CLASS_REGISTER(JAConditionalSignalUpdateGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.h b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.h new file mode 100644 index 0000000..2cf5c5d --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.h @@ -0,0 +1,180 @@ +/** + * @file JAConditionalSignalUpdateGAM.h + * @brief Header file for class JAConditionalSignalUpdateGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAConditionalSignalUpdateGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JACONDITIONALSIGNALUPDATEGAM_H_ +#define GAMS_JACONDITIONALSIGNALUPDATEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that writes predefined values to output signals when a condition is met. + * If there are no conditional signals provided, the condition is presumed to be met. + * + * +ASYNCShotlengthControlGAM = { + * Class = JAConditionalSignalUpdateGAM + * Operation = OR // Logical operation performed between conditional signals + * // Supported values: AND, OR, XOR, NOR + * // Default: AND + * ExpectedValues = {1 1} // Values to which conditional signals will be compared. + * Comparators = {EQUALS EQUALS} // Operator between conditional signal an expected value + * // Supported values: EQUALS, NOT, GREATER, EQUALS_OR_GREATER, LESS, EQUALS_OR_LESS + * // Default: EQUALS + * Values = {0 3} // Values that will be written to output signals when condition is met. + * InputSignals = { + * // Conditional Signals + * SHOTLEN_FLAG = { + * DataSource = DDB1 + * Type = uint32 + * } + * MODE_SHOTLEN_FLAG = { + * DataSource = DDB1 + * Type = uint32 + * } + * // Default values (set to output signals before the condition is met) + * APS_SWON = { // APS_SWON will keep the value from previous state. + * DataSource = DDB1 + * Type = uint32 + * } + * BPS_SWON_DEFAULT = { // BPS_SWON will be set to 7 before condition is met. + * DataSource = DDB1 + * Type = uint32 + * Default = 7 + * } + * } + * OutputSignals = { + * APS_SWON = { + * DataSource = DDB1 + * Type = uint32 + * } + * BPS_SWON = { + * DataSource = DDB1 + * Type = uint32 + * } + * } + * } + */ +class JAConditionalSignalUpdateGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAConditionalSignalUpdateGAM(); + + virtual ~JAConditionalSignalUpdateGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + /** + * @brief Does the input signal at provided index have the expected value. + * @param[in] index of the signal. + * @return true if the signal has expected value. + */ + bool Compare(MARTe::uint32 index); + + template + bool Compare(MARTe::uint32 index); + + enum OperationMode { + And, Or, Xor, Nor + }; + + enum ComparisonMode { + Equals, Not, Greater, EqualsOrGreater, Less, EqualsOrLess + }; + + // Input signals + void **inputSignals; + + MARTe::TypeDescriptor *inputSignalTypes; + + // Condition operation. + OperationMode operation; + + // Array of expected values of input signals. + MARTe::uint32* expectedValues; + + // Expected values count (must be equal to numberOfInputSignals) + MARTe::uint32 expectedValuesCount; + + // Array of comparators + ComparisonMode* comparators; + + // Values to be written on output signals when input signal has the expected value. + MARTe::uint32 *values; + + // Number of values (must be equal to numberOfOutputSignals) + MARTe::uint32 valuesCount; + + // Output signals + MARTe::uint32 **outputSignals; + + // Default values of output signals + MARTe::uint32 **defaultValues; + + // Were output signals already set and we are waiting for a state change before they are set again. + bool needsReset; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +template +bool JAConditionalSignalUpdateGAM::Compare(MARTe::uint32 index) { + switch (comparators[index]) { + case Equals: + return *static_cast(inputSignals[index]) == static_cast(expectedValues[index]); + case Not: + return *static_cast(inputSignals[index]) != static_cast(expectedValues[index]); + case Greater: + return *static_cast(inputSignals[index]) > static_cast(expectedValues[index]); + case EqualsOrGreater: + return *static_cast(inputSignals[index]) >= static_cast(expectedValues[index]); + case Less: + return *static_cast(inputSignals[index]) < static_cast(expectedValues[index]); + default: // case EqualsOrLess: + return *static_cast(inputSignals[index]) <= static_cast(expectedValues[index]); + } +} + +#endif /* GAMS_JACONDITIONALSIGNALUPDATEGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/Makefile.inc new file mode 100644 index 0000000..c66a7fd --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAConditionalSignalUpdateGAM/Makefile.inc @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAConditionalSignalUpdateGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAConditionalSignalUpdateGAM$(LIBEXT) \ + $(BUILD_DIR)/JAConditionalSignalUpdateGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/JAMessageGAM.cpp b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/JAMessageGAM.cpp new file mode 100644 index 0000000..50ca308 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/JAMessageGAM.cpp @@ -0,0 +1,347 @@ +/** + * @file JAMessageGAM.cpp + * @brief Source file for class JAMessageGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAMessageGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "JAMessageGAM.h" +#include "MessageI.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +template +bool Compare(JAMessageGAM::ComparisonMode comparator, void *inputSignal, U expectedValue) { + switch (comparator) { + case JAMessageGAM::Equals: + return *static_cast(inputSignal) == expectedValue; + case JAMessageGAM::Not: + return *static_cast(inputSignal) != expectedValue; + case JAMessageGAM::Greater: + return *static_cast(inputSignal) > expectedValue; + case JAMessageGAM::EqualsOrGreater: + return *static_cast(inputSignal) >= expectedValue; + case JAMessageGAM::Less: + return *static_cast(inputSignal) < expectedValue; + default: // case EqualsOrLess: + return *static_cast(inputSignal) <= expectedValue; + } +} + +JAMessageGAM::JAMessageGAM() { + inputSignals = NULL_PTR(void **); + inputSignalTypes = NULL_PTR(MARTe::TypeDescriptor *); + operation = And; + needsReset = false; + expectedValuesInt = NULL_PTR(MARTe::uint64 *); + expectedValuesFloat = NULL_PTR(MARTe::float64 *); + intValuesCount = 0u; + floatValuesCount = 0u; + comparators = NULL_PTR(ComparisonMode *); +} + +JAMessageGAM::~JAMessageGAM() { + if (inputSignals != NULL_PTR(void **)) { + delete[] inputSignals; + } + if (inputSignalTypes != NULL_PTR(MARTe::TypeDescriptor *)) { + delete[] inputSignalTypes; + } + if (expectedValuesInt != NULL_PTR(MARTe::uint64 *)) { + delete[] expectedValuesInt; + } + if (expectedValuesFloat != NULL_PTR(MARTe::float64 *)) { + delete[] expectedValuesFloat; + } + if (comparators != NULL_PTR(ComparisonMode *)) { + delete[] comparators; + } +} + +bool JAMessageGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + // Read expected integer values. + AnyType valuesArray = data.GetType("ExpectedIntValues"); + bool intValuesProvided = (valuesArray.GetDataPointer() != NULL); + + if (intValuesProvided) { + intValuesCount = valuesArray.GetNumberOfElements(0u); + } + if (intValuesProvided) { + expectedValuesInt = new uint64[intValuesCount]; + + Vector valuesVector(expectedValuesInt, intValuesCount); + ok = (data.Read("ExpectedIntValues", valuesVector)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Failed to read ExpectedIntValues."); + return ok; + } + } + // Read expected float values. + valuesArray = data.GetType("ExpectedFloatValues"); + bool floatValuesProvided = (valuesArray.GetDataPointer() != NULL); + + if (floatValuesProvided) { + floatValuesCount = valuesArray.GetNumberOfElements(0u); + } + if (floatValuesProvided) { + expectedValuesFloat = new float64[floatValuesCount]; + + Vector valuesVector(expectedValuesFloat, floatValuesCount); + ok = (data.Read("ExpectedFloatValues", valuesVector)); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Failed to read ExpectedFloatValues."); + return ok; + } + } + + ok = (floatValuesCount + intValuesCount) > 0u; + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "ExpectedFloatValues and or ExpectedIntValues shall be defined."); + } + } + if (ok) { + // Read comparators. + AnyType comparatorsArray = data.GetType("Comparators"); + if (comparatorsArray.GetDataPointer() != NULL) { + uint32 count = comparatorsArray.GetNumberOfElements(0u); + ok = count == (intValuesCount + floatValuesCount); + if (ok) { + comparators = new ComparisonMode[count]; + StreamString* comp = new StreamString[count]; + Vector compVector(comp, count); + + ok = (data.Read("Comparators", compVector)); + + if (ok) { + for (uint32 i = 0; i < count; ++i) { + if (comp[i] == "EQUALS") { + comparators[i] = Equals; + } else if (comp[i] == "NOT") { + comparators[i] = Not; + } else if (comp[i] == "GREATER") { + comparators[i] = Greater; + } else if (comp[i] == "EQUALS_OR_GREATER") { + comparators[i] = EqualsOrGreater; + } else if (comp[i] == "LESS") { + comparators[i] = Less; + } else if (comp[i] == "EQUALS_OR_LESS") { + comparators[i] = EqualsOrLess; + } else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Comparator %s is not defined.", comp[i].Buffer()); + } + } + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Expected values and operators shall have the same " + "number of elements."); + } + } else { + uint32 count = intValuesCount + floatValuesCount; + if (ok) { + // Create default comparators (equals) when they aren't provided in the configuration. + comparators = new ComparisonMode[count]; + for (uint32 i = 0; i < count; ++i) { + comparators[i] = Equals; + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Expected values and operators shall have the same " + "number of elements."); + } + } + } + if (ok) { + MARTe::StreamString operationStr; + if (data.Read("Operation", operationStr)) { + if (operationStr == "AND") { + operation = And; + } + else if (operationStr == "OR") { + operation = Or; + } + else if (operationStr == "NOR") { + operation = Nor; + } + else if (operationStr == "XOR") { + operation = Xor; + } + else { + ok = false; + REPORT_ERROR(ErrorManagement::ParametersError, "Operation %s is not defined", operationStr.Buffer()); + } + } + } + if (ok) { + ok = (Size() == 1); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "A Message object shall be added to this container"); + } + } + if (ok) { + eventMsg = Get(0); + ok = (eventMsg.IsValid()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "A valid Message shall be added to this container"); + } + } + return ok; +} + +bool JAMessageGAM::Setup() { + using namespace MARTe; + bool ok = numberOfInputSignals == (intValuesCount + floatValuesCount); + if (ok) { + ok = numberOfInputSignals > 0u; + if (ok) { + inputSignals = new void*[numberOfInputSignals]; + uint32 i; + for (i = 0u; i < numberOfInputSignals; i++) { + inputSignals[i] = GetInputSignalMemory(i); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "At least one input signal shall be defined"); + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Number of input signals shall be the same as " + "number of expected values."); + } + if (ok) { + inputSignalTypes = new TypeDescriptor[numberOfInputSignals]; + uint32 i; + for (i = 0u; (i < numberOfInputSignals) && (ok); i++) { + TypeDescriptor inputType = GetSignalType(InputSignals, i); + inputSignalTypes[i] = inputType; + ok = (inputType == UnsignedInteger32Bit) || (inputType == SignedInteger32Bit) || + (inputType == UnsignedInteger16Bit) || (inputType == SignedInteger16Bit) || + (inputType == UnsignedInteger8Bit) || (inputType == SignedInteger8Bit) || + (inputType == Float64Bit) || (inputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, i, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "Signal %s shall be defined as 32/16/8 bit signed/unsigned integer " + "or as 64/32 float.", signalName.Buffer()); + } + } + } + + return ok; +} + +bool JAMessageGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + needsReset = false; + return true; +} + +bool JAMessageGAM::Execute() { + using namespace MARTe; + bool ok = true; + bool eventDetected = false; + uint32 inputPortIndex = 0; + uint32 intIndex = 0; + uint32 floatIndex = 0; + if (operation == Or) { + for (inputPortIndex = 0; (inputPortIndex < numberOfInputSignals) && (!eventDetected); inputPortIndex++) { + eventDetected = Compare(inputPortIndex, floatIndex, intIndex); + } + } + else if (operation == Nor) { + for (inputPortIndex = 0; (inputPortIndex < numberOfInputSignals) && (!eventDetected); inputPortIndex++) { + eventDetected = Compare(inputPortIndex, floatIndex, intIndex); + } + eventDetected = !eventDetected; + } + else if (operation == And) { + eventDetected = Compare(0, floatIndex, intIndex); + for (inputPortIndex = 1; (inputPortIndex < numberOfInputSignals); inputPortIndex++) { + eventDetected &= Compare(inputPortIndex, floatIndex, intIndex); + } + } + else if (operation == Xor) { + uint32 eventDetectedUInt32 = Compare(inputPortIndex, floatIndex, intIndex); + for (inputPortIndex = 1; (inputPortIndex < numberOfInputSignals); inputPortIndex++) { + eventDetectedUInt32 ^= Compare(inputPortIndex, floatIndex, intIndex); + } + eventDetected = (eventDetectedUInt32 == 1u); + } + if (eventDetected) { + if (!needsReset) { + ok = (MessageI::SendMessage(eventMsg, this) == ErrorManagement::NoError); + needsReset = true; + } + } + return ok; +} + +bool JAMessageGAM::Compare(MARTe::uint32 inputPortIndex, MARTe::uint32 &floatValueIndex, MARTe::uint32 &intValueIndex) { + using namespace MARTe; + bool ret = false; + if (inputSignalTypes[inputPortIndex] == UnsignedInteger32Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == SignedInteger32Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == UnsignedInteger16Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == SignedInteger16Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == UnsignedInteger8Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == SignedInteger8Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesInt[intValueIndex]); + ++intValueIndex; + } + else if (inputSignalTypes[inputPortIndex] == Float64Bit) { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesFloat[floatValueIndex]); + ++floatValueIndex; + } + else { + ret = ::Compare(comparators[inputPortIndex], inputSignals[inputPortIndex], expectedValuesFloat[floatValueIndex]); + ++floatValueIndex; + } + return ret; +} + +CLASS_REGISTER(JAMessageGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/JAMessageGAM.h b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/JAMessageGAM.h new file mode 100644 index 0000000..0cdb315 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/JAMessageGAM.h @@ -0,0 +1,149 @@ +/** + * @file JAMessageGAM.h + * @brief Header file for class JAMessageGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAMessageGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAMESSAGEGAM_H_ +#define GAMS_JAMESSAGEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include "Message.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that sends a message when input signals have expected values. Message will not be sent multiple + * times without first changing the application state. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ * +MessageGAM = {
+ *      Class = JAMessageGAM
+ *      Operation = AND // Accepted values are: AND, OR, XOR, NOR. Default value is AND.
+ *      ExpectedIntValues = {1 10} // Expected values for input signals of integral type.
+ *      ExpectedFloatValues = {3.5} // Expected values for float signals of floting point type.
+ *      Comparators = {EQUALS GREATER NOT} // Accepted values are: EQUALS, NOT, GREATER, EQUALS_OR_GREATER, LESS, EQUALS_OR_LESS
+ *                                         // Comparators element is optional. Default comparator is EQUALS.
+ *      InputSignals = {
+ *          Sig1 = {
+ *              DataSource = EPICSCAInput
+ *              Type = uint32
+ *          }
+ *          Sig2 = {
+ *              DataSource = EPICSCAInput
+ *              Type = float32
+ *          }
+ *          Sig3 = {
+ *              DataSource = EPICSCAInput
+ *              Type = uint32
+ *          }
+ *      }
+ *      +Event = { // Message to be sent when condition is true.
+ *          Class = Message
+ *          Destination = StateMachine
+ *          Function = GoDisabled
+ *      }
+ *  }
+ * 
+ * This example will send Event message when Sig1 == 1 && Sig2 > 3.5 && Sig3 != 10 + */ +class JAMessageGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAMessageGAM(); + + virtual ~JAMessageGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + + enum ComparisonMode { + Equals, Not, Greater, EqualsOrGreater, Less, EqualsOrLess + }; + +private: + /** + * @brief Does the input signal at provided index have the expected value. + * @param[in] index of the signal. + * @param[out] floatValueIndex lookup index for expected float values array. + * @param[out] intValueIndex lookup index for expected integer values array. + * @return true if the signal has expected value. + */ + bool Compare(MARTe::uint32 index, MARTe::uint32 &floatValueIndex, MARTe::uint32 &intValueIndex); + + enum OperationMode { + And, Or, Xor, Nor + }; + + // Input signals + void **inputSignals; + + MARTe::TypeDescriptor *inputSignalTypes; + + // Condition operation. + OperationMode operation; + + // Message to be sent when conditions are met. + MARTe::ReferenceT eventMsg; + + // Was the message already sent and we are waiting for a state change before next message can be sent. + bool needsReset; + + // Array of expected integer values of input signals. + MARTe::uint64* expectedValuesInt; + + // Array of expected float values for input signals. + MARTe::float64* expectedValuesFloat; + + // Expected integer values count (must be equal to numberOfInputSignals - floatValuesCount) + MARTe::uint32 intValuesCount; + + // Expected integer values count (must be equal to numberOfInputSignals - floatValuesCount) + MARTe::uint32 floatValuesCount; + + // Array of comparators + ComparisonMode* comparators; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAMESSAGEGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/Makefile.inc new file mode 100644 index 0000000..658d273 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAMessageGAM/Makefile.inc @@ -0,0 +1,53 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAMessageGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAMessageGAM$(LIBEXT) \ + $(BUILD_DIR)/JAMessageGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/JAModeControlGAM.cpp b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/JAModeControlGAM.cpp new file mode 100644 index 0000000..c55e6d0 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/JAModeControlGAM.cpp @@ -0,0 +1,154 @@ +/** + * @file JAModeControlGAM.cpp + * @brief Source file for class JAModeControlGAM + * @date Jan, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAModeControlGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAModeControlGAM.h" +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAModeControlGAM::JAModeControlGAM() { + inputSignals = NULL_PTR(MARTe::uint32 **); + outputSignal = NULL_PTR(MARTe::uint32 *); + pulseLengthLimit = 360000000u; + resetRemainingTime = true; + previousState = 0u; +} + +JAModeControlGAM::~JAModeControlGAM() { + if (inputSignals != NULL_PTR(MARTe::uint32 **)) { + delete[] inputSignals; + } +} + +bool JAModeControlGAM::Initialise(MARTe::StructuredDataI & data) { + /* read hard coded on cfg file parameter values by using key name. */ + using namespace MARTe; + return GAM::Initialise(data); +} + +bool JAModeControlGAM::Setup() { + /* read GAM Input signal */ + using namespace MARTe; + /* read 4 mode bits and 4 shot length limit values */ + + bool ok = numberOfInputSignals == 11; + if (ok) { + uint32 i; + for (i = 0u; (i < numberOfInputSignals) && (ok); i++) { + TypeDescriptor inputType = GetSignalType(InputSignals, i); + ok = inputType == UnsignedInteger32Bit; + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, i, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "InputSignel %s shall be defined as uint32", signalName.Buffer()); + } + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Eleven input signals shall be defined."); + } + if (ok) { + ok = numberOfOutputSignals == 1; + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "One output signal shall be defined."); + } + else { + TypeDescriptor type = GetSignalType(OutputSignals, 0); + ok = type == UnsignedInteger32Bit; + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, 0, signalName); + REPORT_ERROR(ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + inputSignals = new uint32*[numberOfInputSignals]; + uint32 i; + for (i = 0u; i < 11; i++) { + inputSignals[i] = reinterpret_cast(GetInputSignalMemory(i)); + } + } + return ok; +} + +bool JAModeControlGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + *outputSignal = 0u; + previousState = 0u; + resetRemainingTime = true; + return true; +} + +bool JAModeControlGAM::Execute() { + using namespace MARTe; + //When RT state goes to RFON state, update the limit. + if(previousState == 0u && *inputSignals[8] == 1u && resetRemainingTime) { + rfonTime = *inputSignals[9]; + resetRemainingTime = false; + pulseLengthLimit = CalcPulseLengthLimit(inputSignals); + REPORT_ERROR(ErrorManagement::Debug, "Pulse Length was set to Limit:%d", pulseLengthLimit); + } + // Turn on the flag during RFON if the pulse legth over the limit. + if ((*inputSignals[9] - rfonTime <= pulseLengthLimit) && (previousState == 1u)) { + *outputSignal = 0u; + return true; + } else if(*inputSignals[9] == 1u){ + resetRemainingTime = true; + *outputSignal = 1u; + } + + previousState = *inputSignals[8]; + return true; +} + + +MARTe::uint32 JAModeControlGAM::CalcPulseLengthLimit(MARTe::uint32 **inputSignals) { + if (*inputSignals[0] == 1) { + return *inputSignals[1]; + } else if (*inputSignals[2] == 1) { + return *inputSignals[3]; + } else if (*inputSignals[4] == 1) { + return *inputSignals[5]; + } else if (*inputSignals[6] == 1) { + return *inputSignals[7]; + } else { + return 3600000000;//us + } +} + + +CLASS_REGISTER(JAModeControlGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/JAModeControlGAM.h b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/JAModeControlGAM.h new file mode 100644 index 0000000..e9041ce --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/JAModeControlGAM.h @@ -0,0 +1,149 @@ +/** + * @file JAModeControlGAM.h + * @brief Header file for class JAModeControlGAM + * @date Jan, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAModeControlGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAMODECONTROLGAM_H_ +#define GAMS_JAMODECONTROLGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that check the pulse lenght limit. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +ModeLimitGAM = {
+ *           Class = JAModeControlGAM
+ *           InputSignals = {
+ *               PLC_MODE1 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD1_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               PLC_MODE2 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD2_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               PLC_MODE3 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD3_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               PLC_MODE4 = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               MD4_SHOTLEN_LIM = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               HVInjection = {
+ *               	DataSource = RealTimeThreadAsyncBridge
+ *               	Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * If MODE1 is ON and Time is exceed MD1_SHOTLEN_LIM, MODE_SHOTLEN_FLAG become ON. + */ + +class JAModeControlGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAModeControlGAM(); + + virtual ~JAModeControlGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + + MARTe::uint32 CalcPulseLengthLimit(MARTe::uint32 **inputSignals); + + // Input signals + MARTe::uint32 **inputSignals; + + // Output signals + MARTe::uint32 *outputSignal; + + // Calculated pulse lenght limit. + MARTe::uint32 pulseLengthLimit; + + // Amount of time passed per execution cycle. + MARTe::uint32 rfonTime; + + // reset flag + bool resetRemainingTime; + MARTe::uint32 previousState; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAMODECONTROLGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/Makefile.inc new file mode 100644 index 0000000..093c4b9 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAModeControlGAM/Makefile.inc @@ -0,0 +1,52 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAModeControlGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAModeControlGAM$(LIBEXT) \ + $(BUILD_DIR)/JAModeControlGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.cpp b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.cpp new file mode 100644 index 0000000..06de1df --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.cpp @@ -0,0 +1,460 @@ +/** + * @file JAPreProgrammedGAM.cpp + * @brief Source file for class JAPreProgrammedGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAPreProgrammedGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "AdvancedErrorManagement.h" +#include "CLASSMETHODREGISTER.h" +#include "File.h" +#include "JAPreProgrammedGAM.h" +#include "MessageI.h" +#include "RegisteredMethodsMessageFilter.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +// How often output signals are updated. +const MARTe::uint32 cycleMs = 10u; + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAPreProgrammedGAM::JAPreProgrammedGAM() : + GAM() { + using namespace MARTe; + filenameSignalIndex = 0u; + timeSignal = NULL_PTR(MARTe::int32 *); + loadTriggerSignal = NULL_PTR(MARTe::uint32 *); + fhpsrefSignal = NULL_PTR(MARTe::float32 *); + rfonStateSignal = NULL_PTR(MARTe::uint32 *); + + valueSignals = NULL_PTR(MARTe::float32 **); + preProgrammedValues = NULL_PTR(MARTe::float32 **); + preProgrammedTime = NULL_PTR(MARTe::int32 *); + fileLoadedSignal = NULL_PTR(MARTe::uint32 *); + fileLoadErrorOutput = NULL_PTR(MARTe::uint32 *); + + startTime = 0u; + numberOfPreProgrammedValues = 0u; + numberOfPreProgrammedTimeRows = 0u; + currentRow = 0u; + mode = None; + preProgrammedExecutaionPeriodMs = 0u; + msCounter = 0u; + preProgrammedRow = 0u; + resetOutputSignals = false; + readOnce = true; +} + +JAPreProgrammedGAM::~JAPreProgrammedGAM() { + DeleteArrays(); + if (valueSignals != NULL_PTR(MARTe::float32 **)) { + delete[] valueSignals; + } +} + +bool JAPreProgrammedGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("Directory", directory); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Directory shall be specified"); + } + } + if (ok) { + ok = data.Read("PreProgrammedPeriodMs", preProgrammedExecutaionPeriodMs); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Directory shall be specified"); + } + } + return ok; +} + +bool JAPreProgrammedGAM::Setup() { + using namespace MARTe; + //Signal number check. + bool ok = (numberOfInputSignals == 4u); + if (ok) { + ok = (numberOfOutputSignals > 2u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "At least two output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Four input signals with the filename and file load trigger shall be defined"); + } + //Input signals type consistency check. + if (ok) { + StreamString signalName = "Filename"; + ok = GetSignalIndex(InputSignals, filenameSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Filename input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, filenameSignalIndex); + ok = (inputType == CharString); + if (!ok) { + ok = (inputType == Character8Bit); + } + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, filenameSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as string", signalName.Buffer()); + } + } + } + if (ok) { + StreamString signalName = "CSV_LOAD"; + uint32 loadSignalIndex; + ok = GetSignalIndex(InputSignals, loadSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "CSV_LOAD input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, loadSignalIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, loadSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } else { + loadTriggerSignal = reinterpret_cast(GetInputSignalMemory(loadSignalIndex)); + } + } + } + if (ok) { + StreamString signalName = "FHPS_REF"; + uint32 fhpsrefIndex; + ok = GetSignalIndex(InputSignals, fhpsrefIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "FHPS_REF input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, fhpsrefIndex); + ok = (inputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, fhpsrefIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } else { + fhpsrefSignal = reinterpret_cast(GetInputSignalMemory(fhpsrefIndex)); + } + } + } + if (ok) { + StreamString signalName = "RFON"; + uint32 rfonIndex; + ok = GetSignalIndex(InputSignals, rfonIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "RFON input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, rfonIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, rfonIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } else { + rfonStateSignal = reinterpret_cast(GetInputSignalMemory(rfonIndex)); + } + } + } + + //Output signals type check. + if (ok) { + TypeDescriptor timeType = GetSignalType(OutputSignals, 0); + ok = (timeType == SignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, 0, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as int32", signalName.Buffer()); + } + + uint32 i; + for (i = 1u; (i <= 6) && (ok); i++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, i); + ok = (outputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, i, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } + } + + if (ok) { + TypeDescriptor fileLoadedType = GetSignalType(OutputSignals, 7u); + ok = (fileLoadedType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, 6u, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + if (ok) { + TypeDescriptor fileLoadErrorOutputType = GetSignalType(OutputSignals, 8u); + ok = (fileLoadErrorOutputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, 7u, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + + //Register signal memory + if (ok) { + timeSignal = reinterpret_cast(GetOutputSignalMemory(0)); + valueSignals = new float32*[6u]; + uint32 i; + for (i = 1u; i <= 6u; i++) { + valueSignals[i - 1] = reinterpret_cast(GetOutputSignalMemory(i)); + } + fileLoadedSignal = reinterpret_cast(GetOutputSignalMemory(7u)); + fileLoadErrorOutput = reinterpret_cast(GetOutputSignalMemory(8u)); + } + return ok; +} + +bool JAPreProgrammedGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + bool ok = true; + if (strcmp(nextStateName, "WaitReady") == 0) { + mode = LoadFileMode; + resetOutputSignals = true; + // Reset read once flag when reentering WaitReady state. + readOnce = true; + } else if (strcmp(nextStateName, "WaitPermit") == 0) { + mode = LoadFileMode; + resetOutputSignals = true; + currentRow = 0u; + } else if (strcmp(nextStateName, "WaitHVON_PREP") == 0 || strcmp(nextStateName, "WaitHVON_SDN_PREP") == 0) { + ok = numberOfPreProgrammedTimeRows > 0; + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::IllegalOperation, "Entering PreProgrammed mode without any waveform data."); + } + mode = PreProgrammedMode; + msCounter = cycleMs; + currentRow = 0u; + } else { + mode = None; + } + return ok; +} + +bool JAPreProgrammedGAM::LoadFile() { + using namespace MARTe; + + DeleteArrays(); + + bool ok = true; + + const MARTe::char8 * const filenameSignal = reinterpret_cast(GetInputSignalMemory(filenameSignalIndex)); + //Prepare full path to the configuration file. + StreamString filename = directory; + filename += DIRECTORY_SEPARATOR; + filename += filenameSignal; + REPORT_ERROR(MARTe::ErrorManagement::Debug, "Opening file %s", filename.Buffer()); + + //parse prepro configuration file into two arrays(time, values). + File f; + ok = f.Open(filename.Buffer(), BasicFile::ACCESS_MODE_R); + if (ok) { + //Count up number of file Rows. + numberOfPreProgrammedTimeRows = 0u; + StreamString tokenLine; + while (f.GetLine(tokenLine)) { + if (tokenLine[0] != '#' && tokenLine[0] != '-') { + numberOfPreProgrammedTimeRows++; + } + tokenLine = ""; + } + //Count up number of file lines + numberOfPreProgrammedValues = 0u; + f.Seek(0); + uint32 t = 0u; + tokenLine = ""; + while ((ok) && (f.GetLine(tokenLine))) { + // Skip comment line and minus time + if (tokenLine[0] == '#' || tokenLine[0] == '-') { + tokenLine = ""; + continue; + } + // Prepare two arrays at first. + if (numberOfPreProgrammedValues == 0) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + while (tokenLine.GetToken(token, ",", ignored)) { + numberOfPreProgrammedValues++; + token = ""; + } +REPORT_ERROR(MARTe::ErrorManagement::ParametersError,"numberOfPreProgrammedVal %d", numberOfPreProgrammedValues); + ok = (numberOfPreProgrammedValues == 7u);//From time row to FHPS row. + numberOfPreProgrammedValues -= 1u; //From MHVPS row to FHPS row. + if (ok) { + preProgrammedTime = new int32[numberOfPreProgrammedTimeRows]; + preProgrammedValues = new float32*[numberOfPreProgrammedTimeRows]; + uint32 j; + for (j = 0u; j < numberOfPreProgrammedTimeRows; j++) { + preProgrammedValues[j] = new float32[numberOfPreProgrammedValues]; + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, + "Number of columns in csv file (%d) is not consistent with the number of output signals (%d)", + numberOfPreProgrammedValues, 6u); + *fileLoadErrorOutput = 1; + } + } + // Add loaded data into two arrays. + if (ok) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + uint32 idx = 0u; + while (tokenLine.GetToken(token, ",", ignored)) { + if (idx == 0u) { + preProgrammedTime[t] = atoi(token.Buffer()); + if (t == 0 && preProgrammedTime[0] != 0) { + REPORT_ERROR(MARTe::ErrorManagement::Debug, "Prepro start from none zero time."); + } + } + else { + ok = ((idx - 1) < numberOfPreProgrammedValues); + if (ok) { + preProgrammedValues[t][idx - 1] = static_cast(atof(token.Buffer())); + } + else { + REPORT_ERROR(MARTe::ErrorManagement::FatalError, "Number of columns in csv file is not consistent with the number of output signals in line %d", t); + *fileLoadErrorOutput = 1; + } + } + token = ""; + idx++; + } + t++; + } + tokenLine = ""; + } + f.Close(); + } + if (ok) { + currentRow = 0u; + } + else { + numberOfPreProgrammedTimeRows = 0u; + REPORT_ERROR(ErrorManagement::Warning, "Failed to read waveform data from file."); + *fileLoadErrorOutput = 2; + } + return ok; +} + +bool JAPreProgrammedGAM::Execute() { + using namespace MARTe; + bool ok = true; + + switch (mode) { + case LoadFileMode: { + if (*loadTriggerSignal == 1u) { + if (readOnce) { + *fileLoadErrorOutput = 0; + *fileLoadedSignal = LoadFile() ? 1 : 0; + readOnce = false; + } + } else { + // Reset read once flag when loadTriggerSignal is reset. + readOnce = true; + } + + if (resetOutputSignals) { + // Write default values to output signals + *timeSignal = 0u; + *valueSignals[FHPS-1] = *fhpsrefSignal; + resetOutputSignals = false; + } else { + *valueSignals[FHPS-1] = *fhpsrefSignal; //copy input(2) to val_arr(4) + } + } break; + + case PreProgrammedMode: { + ok = numberOfPreProgrammedTimeRows > 0; + + //add 20210105. Before RFON, prepro setpoints should be same as the values listed at csv first line. + if (ok && *rfonStateSignal == 0) { + uint32 j; + for (j = 0u; j < FHPS; j++) { + *valueSignals[j] = preProgrammedValues[0][j]; + } + } + //end 20210105 + + if (ok && currentRow < numberOfPreProgrammedTimeRows && *rfonStateSignal == 1) { + if (msCounter >= cycleMs) { + msCounter -= cycleMs; + int32 currentTime = preProgrammedTime[currentRow]; + //REPORT_ERROR(MARTe::ErrorManagement::Debug, "Write Time at %d",currentRow); + // Write to output signals + *timeSignal = currentTime; + uint32 j; + for (j = 0u; j < FHPS; j++) { + *valueSignals[j] = preProgrammedValues[currentRow][j]; + //REPORT_ERROR(MARTe::ErrorManagement::Debug, "Write Value %f at row %d",preProgrammedValues[currentRow][j], currentRow); + } + //REPORT_ERROR(MARTe::ErrorManagement::Debug, "Writing pre programmed data for time %d", currentTime); + + // Update row + ++currentRow; + } + msCounter += preProgrammedExecutaionPeriodMs; + } + } break; + default: + // Nothing to do. + REPORT_ERROR(MARTe::ErrorManagement::Warning, "Unhandled mode."); + break; + } + return ok; +} + +void JAPreProgrammedGAM::DeleteArrays() { + if (preProgrammedValues != NULL_PTR(MARTe::float32 **)) { + MARTe::uint32 i; + for (i = 0u; i < numberOfPreProgrammedValues; i++) { + delete preProgrammedValues[i]; + } + delete[] preProgrammedValues; + } + if (preProgrammedTime != NULL_PTR(MARTe::int32 *)) { + delete[] preProgrammedTime; + } +} + +CLASS_REGISTER(JAPreProgrammedGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.h b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.h new file mode 100644 index 0000000..4226fef --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.h @@ -0,0 +1,187 @@ +/** + * @file JAPreProgrammedGAM.h + * @brief Header file for class JAPreProgrammedGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAPreProgrammedGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAPREPROGRAMMEDGAM_H_ +#define GAMS_JAPREPROGRAMMEDGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "GAM.h" +#include "Message.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that update PS output value for pre-programmed operation. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +PreProgrammedGAM = {
+ *           Class = JAPreProgrammedGAM
+ *           Directory = "../Configurations" // Directory which has pre-pro configuration file.
+ *           PreProgrammedPeriodMs = 1       // RFON state is executed every millisecond.
+ *           InputSignals = {
+ *               CSV_LOAD = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               Filename = {
+ *                   Alias = CSV_NAME
+ *                   DataSource = EPICSCAInput
+ *               }
+ *               FHPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               GYA_PREHEAT_TIME = {
+ *                   DataSource = DDB1
+ *                   Type = int32
+ *               }
+ *               MHVPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               BPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               APS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               MCPS_TRG_CURR_SET = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               GCPS_TRG_CURR_SET = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               FHPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *               CSV_LOADED = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               CSV_ERR = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * + */ + +class JAPreProgrammedGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAPreProgrammedGAM(); + + virtual ~JAPreProgrammedGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + bool LoadFile(); + + void DeleteArrays(); + + //Parameters + MARTe::StreamString directory; //Location for prepro configuration file. + MARTe::uint32 preProgrammedExecutaionPeriodMs; // Time between to execution cycles in milliseconds in pre-programmed mode. + + //Input Signals + MARTe::uint32 *loadTriggerSignal; //index:0 + MARTe::uint32 filenameSignalIndex;//index:1 + MARTe::float32 *fhpsrefSignal; //index:2 + MARTe::uint32 *rfonStateSignal; //index:3 + + //Output Signals + MARTe::int32 *timeSignal; //index:0 + MARTe::float32 **valueSignals; //index:1-5 = BPS,APS,MC,GC,FHPS + MARTe::uint32 *fileLoadedSignal; //index:6 + MARTe::uint32 *fileLoadErrorOutput;//index:7 + + //Internal variables + MARTe::int32 *preProgrammedTime; + MARTe::float32 **preProgrammedValues; + + MARTe::uint32 startTime; + + //Number of columns in csv, EXCLUDING the time + MARTe::uint32 numberOfPreProgrammedValues; //is 5.(BPS, APS, MC, GC, FHPS) + MARTe::uint32 numberOfPreProgrammedTimeRows; //This start from t=0 row. + MARTe::uint32 currentRow; + + // Number of milliseconds since the last time output signals were updated. + MARTe::uint32 msCounter; + + // Row number where the pre-programmed data begins (time == 0). + MARTe::uint32 preProgrammedRow; + + enum OperationMode { + LoadFileMode, PreProgrammedMode, None + }; + enum PreProTableDefinition { + Time, MHVPS, BPS, APS, MCPS, GCPS, FHPS + }; + + OperationMode mode; + + bool resetOutputSignals; + + // Flag determining whether file should be read (so it isn't read multiple time) + bool readOnce; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAPREPROGRAMMEDGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/Makefile.inc new file mode 100644 index 0000000..aaa1948 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAPreProgrammedGAM/Makefile.inc @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAPreProgrammedGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAPreProgrammedGAM$(LIBEXT) \ + $(BUILD_DIR)/JAPreProgrammedGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.cpp b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.cpp new file mode 100644 index 0000000..56f9b18 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.cpp @@ -0,0 +1,411 @@ +/** + * @file JARTStateMachineGAM.cpp + * @brief Source file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JARTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +static MARTe::uint64 getCurrentTimeUs() { + using namespace MARTe; + return static_cast(HighResolutionTimer::Counter() * HighResolutionTimer::Period() * 1e6f + 0.5f); +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARTStateMachineGAM::JARTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + turn_off_delay = 2000; //us + + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + short_pulse_mode = NULL_PTR(MARTe::uint32 *); + + modulation = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + + apsSwonHighResolutionTime = 0; + + aps_hvon_state=0; + aps_swon_state=0; + mhvps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; +} + +JARTStateMachineGAM::~JARTStateMachineGAM() { +} + +bool JARTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JARTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JARTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 12u); + if (ok) { + ok = (numberOfOutputSignals == 16u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined %d",numberOfOutputSignals); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(10)); + modulation = reinterpret_cast(GetInputSignalMemory(11)); + + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + + outputAPSHVON = reinterpret_cast(GetOutputSignalMemory(8)); + outputAPSSWON = reinterpret_cast(GetOutputSignalMemory(9)); + outputBPSHVON = reinterpret_cast(GetOutputSignalMemory(10)); + outputBPSSWON = reinterpret_cast(GetOutputSignalMemory(11)); + outputMHVPSON = reinterpret_cast(GetOutputSignalMemory(12)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(13)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(14)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(15)); + + *shotCounter = 0; + } + return ok; +} + +bool JARTStateMachineGAM::Execute() { + using namespace MARTe; + + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + //REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence at %d.", *currentTime); + plcOnTime = *currentTime; //Save pulse start time. + //*outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS; + } + } + else if (currentState == SwitchingHVPS) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; bps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + *outputBPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; aps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal at %d.", *currentTime); + *outputAPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; bps_swon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + *outputBPSSWON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; mhvps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + *outputMHVPSON=1; + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (plcOnTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; aps_swon_state=1; + apsSwonHighResolutionTime = getCurrentTimeUs(); + apsSwonTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + *outputAPSSWON=1; + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 1; + } + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 1; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *outputBeamON = 1; + *shotCounter += 1; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //Action in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + //debug + //if((*stopRequest != 0)){ + //REPORT_ERROR(ErrorManagement::Debug, "Stop request was called.!!!"); + //} else { + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset.!!!"); + //} + *outputSignal -= aps_swon; + mhvps_hvon_is_on = false; mhvps_hvon_state=0; + aps_hvon_is_on = false; aps_hvon_state=0; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; bps_hvon_state=0; + bps_swon_is_on = false; bps_swon_state=0; + currentState = HVTerminate; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + } + uint32 updatePeriod = 100; // in microsecnds (get this from Timer) + if ((*modePulseLengthLimit == 1u) || (getCurrentTimeUs() + updatePeriod >= (apsSwonHighResolutionTime + *triggerDelay_shotlen))) { + + // Now we do busy wait + while (getCurrentTimeUs() < (apsSwonHighResolutionTime + *triggerDelay_shotlen)) { + //REPORT_ERROR(ErrorManagement::Debug, "!"); + } + // We stop busy waiting #executionOverhead before expected pulse off time + //debug + //if((*modePulseLengthLimit == 1u)){ + // REPORT_ERROR(ErrorManagement::Debug, "Mode limit detected.!!!"); + //} else { + // REPORT_ERROR(ErrorManagement::Debug, "Shot length reached to the setpoint.!!!"); + //} + //debug end. + //Do action + *outputSignal -= aps_swon; //Turn off only APS_SWON first. + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; + bps_swon_is_on = false; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + //REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 1; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + //In the HVTerminate state, turn APS_SWON off first, and wait 1ms. Finally turn other PS off. + //Action in this state. + *outputBeamON = 0; + *outputHVArmed = 0; + *outputHVInjection = 0; + *outputRFON = 0; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + mhvps_hvon_state=0; + aps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset. The State was changed to WaitTrigger at %d.", *currentTime); + } + } + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6259 = 1*aps_swon_state; + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + if (modulation) { + p4Value = 8*mhvps_hvon_state + 32; + } + else { + p4Value = 8*mhvps_hvon_state; + } + //*outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + *outputSignalNI6528P4 = ~p4Value; + return true; +} + +CLASS_REGISTER(JARTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.h b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.h new file mode 100644 index 0000000..e968f39 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.h @@ -0,0 +1,262 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARTSTATEMACHINEGAM_H_ +#define GAMS_JARTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that provides real-time state machine. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMRealTimeStateMachine = {
+ *           Class = JARTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BEAM_ON_STAT = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JARTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARTStateMachineGAM(); + + virtual ~JARTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS = 1, + RFON = 2, + HVTerminate = 3 + }; + + //The current rtState + JARealTimeState currentState; + + //A given condition + MARTe::uint32 conditionTrigger; + + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + + //Time signal + MARTe::uint32 *currentTime; + + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for short pulse mode. + MARTe::uint32 *short_pulse_mode; + // Input signal for modulation pv. + MARTe::uint32 *modulation; + + // Output signal to which the output value will be written. + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + // Added for HVPS state (20201117) + MARTe::uint32 *outputAPSHVON; + MARTe::uint32 *outputAPSSWON; + MARTe::uint32 *outputBPSHVON; + MARTe::uint32 *outputBPSSWON; + MARTe::uint32 *outputMHVPSON; + + // Output signals for NI devices + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + MARTe::uint64 apsSwonHighResolutionTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + + // terminal values + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.cpp b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.cpp new file mode 100644 index 0000000..55983f1 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.cpp @@ -0,0 +1,409 @@ +/** + * @file JARTStateMachineGAM.cpp + * @brief Source file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JARTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +static MARTe::uint64 getCurrentTimeUs() { + using namespace MARTe; + return static_cast(HighResolutionTimer::Counter() * HighResolutionTimer::Period() * 1e6f + 0.5f); +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARTStateMachineGAM::JARTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + turn_off_delay = 2000; //us + + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + short_pulse_mode = NULL_PTR(MARTe::uint32 *); + + modulation = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + + apsSwonHighResolutionTime = 0; + + aps_hvon_state=0; + aps_swon_state=0; + mhvps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; +} + +JARTStateMachineGAM::~JARTStateMachineGAM() { +} + +bool JARTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JARTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JARTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 13u); + if (ok) { + ok = (numberOfOutputSignals == 16u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined %d",numberOfOutputSignals); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(10)); + modulation = reinterpret_cast(GetInputSignalMemory(11)); + pauseSet = reinterpret_cast(GetInputSignalMemory(12)); + + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + + outputAPSHVON = reinterpret_cast(GetOutputSignalMemory(8)); + outputAPSSWON = reinterpret_cast(GetOutputSignalMemory(9)); + outputBPSHVON = reinterpret_cast(GetOutputSignalMemory(10)); + outputBPSSWON = reinterpret_cast(GetOutputSignalMemory(11)); + outputMHVPSON = reinterpret_cast(GetOutputSignalMemory(12)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(13)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(14)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(15)); + + *shotCounter = 0; + } + return ok; +} + +bool JARTStateMachineGAM::Execute() { + using namespace MARTe; + + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + //REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence at %d.", *currentTime); + plcOnTime = *currentTime; //Save pulse start time. + //*outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS; + } + } + else if (currentState == SwitchingHVPS) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; bps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + *outputBPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; aps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal at %d.", *currentTime); + *outputAPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; bps_swon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + *outputBPSSWON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; mhvps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + *outputMHVPSON=1; + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (plcOnTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; aps_swon_state=1; + apsSwonHighResolutionTime = getCurrentTimeUs(); + apsSwonTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + *outputAPSSWON=1; + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 1; + } + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 1; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *outputBeamON = 1; + *shotCounter += 1; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //Action in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + //debug + //if((*stopRequest != 0)){ + //REPORT_ERROR(ErrorManagement::Debug, "Stop request was called.!!!"); + //} else { + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset.!!!"); + //} + *outputSignal -= aps_swon; + mhvps_hvon_is_on = false; mhvps_hvon_state=0; + aps_hvon_is_on = false; aps_hvon_state=0; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; bps_hvon_state=0; + bps_swon_is_on = false; bps_swon_state=0; + currentState = HVTerminate; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + } + uint32 updatePeriod = 100; // in microsecnds (get this from Timer) + if ((*modePulseLengthLimit == 1u) || (getCurrentTimeUs() + updatePeriod >= (apsSwonHighResolutionTime + *triggerDelay_shotlen))) { + + // Now we do busy wait + while (getCurrentTimeUs() < (apsSwonHighResolutionTime + *triggerDelay_shotlen)) { + //REPORT_ERROR(ErrorManagement::Debug, "!"); + } + // We stop busy waiting #executionOverhead before expected pulse off time + //debug + //if((*modePulseLengthLimit == 1u)){ + // REPORT_ERROR(ErrorManagement::Debug, "Mode limit detected.!!!"); + //} else { + // REPORT_ERROR(ErrorManagement::Debug, "Shot length reached to the setpoint.!!!"); + //} + //debug end. + //Do action + *outputSignal -= aps_swon; //Turn off only APS_SWON first. + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; + bps_swon_is_on = false; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + //REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 1; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + //In the HVTerminate state, turn APS_SWON off first, and wait 1ms. Finally turn other PS off. + //Action in this state. + *outputBeamON = 0; + *outputHVArmed = 0; + *outputHVInjection = 0; + *outputRFON = 0; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + mhvps_hvon_state=0; + aps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset. The State was changed to WaitTrigger at %d.", *currentTime); + } + } + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6259 = 1*aps_swon_state; + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + p4Value = 8*mhvps_hvon_state; + if (modulation) p4Value += 32; + if (pauseSet) p4Value += 1; + //*outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + *outputSignalNI6528P4 = ~p4Value; + return true; +} + +CLASS_REGISTER(JARTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.h b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.h new file mode 100644 index 0000000..876d64e --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.h @@ -0,0 +1,264 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARTSTATEMACHINEGAM_H_ +#define GAMS_JARTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that provides real-time state machine. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMRealTimeStateMachine = {
+ *           Class = JARTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BEAM_ON_STAT = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JARTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARTStateMachineGAM(); + + virtual ~JARTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS = 1, + RFON = 2, + HVTerminate = 3 + }; + + //The current rtState + JARealTimeState currentState; + + //A given condition + MARTe::uint32 conditionTrigger; + + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + + //Time signal + MARTe::uint32 *currentTime; + + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for short pulse mode. + MARTe::uint32 *short_pulse_mode; + // Input signal for modulation pv. + MARTe::uint32 *modulation; + // Input signal for pause signal set pv. + MARTe::uint32 *pauseSet; + + // Output signal to which the output value will be written. + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + // Added for HVPS state (20201117) + MARTe::uint32 *outputAPSHVON; + MARTe::uint32 *outputAPSSWON; + MARTe::uint32 *outputBPSHVON; + MARTe::uint32 *outputBPSSWON; + MARTe::uint32 *outputMHVPSON; + + // Output signals for NI devices + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + MARTe::uint64 apsSwonHighResolutionTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + + // terminal values + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.cpp b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.cpp new file mode 100644 index 0000000..71c7669 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.cpp @@ -0,0 +1,402 @@ +/** + * @file JARTStateMachineGAM.cpp + * @brief Source file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JARTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ +static MARTe::uint64 getCurrentTimeUs() { + using namespace MARTe; + return static_cast(HighResolutionTimer::Counter() * HighResolutionTimer::Period() * 1e6f + 0.5f); +} +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARTStateMachineGAM::JARTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + turn_off_delay = 2000; //us + + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + + apsSwonHighResolutionTime = 0; + + aps_hvon_state=0; + aps_swon_state=0; + mhvps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; +} + +JARTStateMachineGAM::~JARTStateMachineGAM() { +} + +bool JARTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JARTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JARTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 11u); + if (ok) { + ok = (numberOfOutputSignals == 16u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined %d",numberOfOutputSignals); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(10)); + + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + + outputAPSHVON = reinterpret_cast(GetOutputSignalMemory(8)); + outputAPSSWON = reinterpret_cast(GetOutputSignalMemory(9)); + outputBPSHVON = reinterpret_cast(GetOutputSignalMemory(10)); + outputBPSSWON = reinterpret_cast(GetOutputSignalMemory(11)); + outputMHVPSON = reinterpret_cast(GetOutputSignalMemory(12)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(13)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(14)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(15)); + + *shotCounter = 0; + } + return ok; +} + +bool JARTStateMachineGAM::Execute() { + using namespace MARTe; + + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + //REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence at %d.", *currentTime); + plcOnTime = *currentTime; //Save pulse start time. + //*outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS; + } + } + else if (currentState == SwitchingHVPS) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; bps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + *outputBPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; aps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal at %d.", *currentTime); + *outputAPSHVON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; bps_swon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + *outputBPSSWON=1; + } + if (*currentTime >= (plcOnTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; mhvps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + *outputMHVPSON=1; + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (plcOnTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; aps_swon_state=1; + apsSwonHighResolutionTime = getCurrentTimeUs(); + apsSwonTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + *outputAPSSWON=1; + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 1; + } + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 1; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *outputBeamON = 1; + *shotCounter += 1; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //Action in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + //debug + //if((*stopRequest != 0)){ + //REPORT_ERROR(ErrorManagement::Debug, "Stop request was called.!!!"); + //} else { + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset.!!!"); + //} + *outputSignal -= aps_swon; + mhvps_hvon_is_on = false; mhvps_hvon_state=0; + aps_hvon_is_on = false; aps_hvon_state=0; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; bps_hvon_state=0; + bps_swon_is_on = false; bps_swon_state=0; + currentState = HVTerminate; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + } + uint32 updatePeriod = 100; // in microsecnds (get this from Timer) + if ((*modePulseLengthLimit == 1u) || (getCurrentTimeUs() + updatePeriod >= (apsSwonHighResolutionTime + *triggerDelay_shotlen))) { + + // Now we do busy wait + while (getCurrentTimeUs() < (apsSwonHighResolutionTime + *triggerDelay_shotlen)) { + //REPORT_ERROR(ErrorManagement::Debug, "!"); + } + // We stop busy waiting #executionOverhead before expected pulse off time + //debug + //if((*modePulseLengthLimit == 1u)){ + // REPORT_ERROR(ErrorManagement::Debug, "Mode limit detected.!!!"); + //} else { + // REPORT_ERROR(ErrorManagement::Debug, "Shot length reached to the setpoint.!!!"); + //} + //debug end. + //Do action + *outputSignal -= aps_swon; //Turn off only APS_SWON first. + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; aps_swon_state=0; + bps_hvon_is_on = false; + bps_swon_is_on = false; + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + //REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 1; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + //In the HVTerminate state, turn APS_SWON off first, and wait 1ms. Finally turn other PS off. + //Action in this state. + *outputBeamON = 0; + *outputHVArmed = 0; + *outputHVInjection = 0; + *outputRFON = 0; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + mhvps_hvon_state=0; + aps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + //REPORT_ERROR(ErrorManagement::Debug, "PLC_ON was reset. The State was changed to WaitTrigger at %d.", *currentTime); + } + } + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6259 = 1*aps_swon_state; + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + p4Value = 8*mhvps_hvon_state; + //*outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + *outputSignalNI6528P4 = ~p4Value; + return true; +} + +CLASS_REGISTER(JARTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.h b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.h new file mode 100644 index 0000000..e59f3fa --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.h @@ -0,0 +1,260 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JARTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARTSTATEMACHINEGAM_H_ +#define GAMS_JARTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that provides real-time state machine. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMRealTimeStateMachine = {
+ *           Class = JARTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BEAM_ON_STAT = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JARTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARTStateMachineGAM(); + + virtual ~JARTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS = 1, + RFON = 2, + HVTerminate = 3 + }; + + //The current rtState + JARealTimeState currentState; + + //A given condition + MARTe::uint32 conditionTrigger; + + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + + //Time signal + MARTe::uint32 *currentTime; + + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for short pulse mode. + MARTe::uint32 *short_pulse_mode; + + // Output signal to which the output value will be written. + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + // Added for HVPS state (20201117) + MARTe::uint32 *outputAPSHVON; + MARTe::uint32 *outputAPSSWON; + MARTe::uint32 *outputBPSHVON; + MARTe::uint32 *outputBPSSWON; + MARTe::uint32 *outputMHVPSON; + + // Output signals for NI devices + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + MARTe::uint64 apsSwonHighResolutionTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + + // terminal values + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/Makefile.inc new file mode 100644 index 0000000..609ad23 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/Makefile.inc @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JARTStateMachineGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JARTStateMachineGAM$(LIBEXT) \ + $(BUILD_DIR)/JARTStateMachineGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/JARampupGAM.cpp b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/JARampupGAM.cpp new file mode 100644 index 0000000..98003a2 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/JARampupGAM.cpp @@ -0,0 +1,295 @@ +/** + * @file JARampupGAM.cpp + * @brief Source file for class JARampupGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JARampupGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "AdvancedErrorManagement.h" +#include "JARampupGAM.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JARampupGAM::JARampupGAM() : GAM() { + current_setpoint = NULL_PTR(MARTe::float32 *); + target_value = NULL_PTR(MARTe::float32 *); + rampup_time = NULL_PTR(MARTe::float32 *); + start = NULL_PTR(MARTe::uint32 *); + standby = NULL_PTR(MARTe::uint32 *); + isAuto = NULL_PTR(MARTe::uint32 *); + FHPS_PrePro = NULL_PTR(MARTe::float32 *); + + output = NULL_PTR(MARTe::float32 *); + state = NULL_PTR(MARTe::uint32 *); + + rampup_rate = 0.0f; + inRampup = false; + resetFlag = true; + inWaitHVON = false; + inWaitStandby = false; +} + +JARampupGAM::~JARampupGAM() { +} + +bool JARampupGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + return GAM::Initialise(data); +} + +bool JARampupGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 7u); + if (ok) { + ok = (numberOfOutputSignals == 2u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Two output signals shall be defined."); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Six input signals shall be defined."); + } + uint32 currentspvIndex; + uint32 targetvIndex; + uint32 timeIndex; + uint32 startIndex; + uint32 standbyIndex; + uint32 isAutoIndex; + uint32 fhpsPreProIndex; + + if (ok) { + StreamString signalName = "Currspv"; + ok = GetSignalIndex(InputSignals, currentspvIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Currspv input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, currentspvIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Currspv shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Targetv"; + ok = GetSignalIndex(InputSignals, targetvIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Targetv input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, targetvIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Targetv shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Time"; + ok = GetSignalIndex(InputSignals, timeIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Time input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, timeIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Time shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Start"; + ok = GetSignalIndex(InputSignals, startIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Start input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, startIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Start shall be defined as uint32."); + } + } + } + if (ok) { + StreamString signalName = "PLC_STANDBY"; + ok = GetSignalIndex(InputSignals, standbyIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLC_STANDBY input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, standbyIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLC_STANDBY shall be defined as uint32."); + } + } + } + if (ok) { + StreamString signalName = "MANUAL_AUTO"; + ok = GetSignalIndex(InputSignals, isAutoIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "MANUAL_AUTO input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, isAutoIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "MANUAL_AUTO shall be defined as uint32."); + } + } + } + if (ok) { + StreamString signalName = "FHPS_PrePro"; + ok = GetSignalIndex(InputSignals, fhpsPreProIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "FHPS_PrePro input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, fhpsPreProIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal FHPS_PrePro shall be defined as float32."); + } + } + } + + if (ok) { + TypeDescriptor inputType = GetSignalType(OutputSignals, 0); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Output shall be defined as float32."); + } + } + if (ok) { + TypeDescriptor inputType = GetSignalType(OutputSignals, 1); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal state shall be defined as float32."); + } + } + + if (ok) { + current_setpoint = reinterpret_cast(GetInputSignalMemory(currentspvIndex)); + target_value = reinterpret_cast(GetInputSignalMemory(targetvIndex)); + rampup_time = reinterpret_cast(GetInputSignalMemory(timeIndex)); + start = reinterpret_cast(GetInputSignalMemory(startIndex)); + standby = reinterpret_cast(GetInputSignalMemory(standbyIndex)); + isAuto = reinterpret_cast(GetInputSignalMemory(isAutoIndex)); + FHPS_PrePro = reinterpret_cast(GetInputSignalMemory(fhpsPreProIndex)); + + output = reinterpret_cast(GetOutputSignalMemory(0)); + state = reinterpret_cast(GetOutputSignalMemory(1)); + } + return ok; +} + +bool JARampupGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName){ + if(strcmp(nextStateName, "WaitHVON_PREP")==0 || strcmp(nextStateName, "WaitHVON_SDN_PREP")==0 || + strcmp(nextStateName, "WaitHVON")==0 || strcmp(nextStateName, "WaitHVON_SDN")==0){ + inWaitHVON = true; + inWaitStandby = false; + } else{ + inWaitHVON = false; + if(strcmp(nextStateName,"WaitStandby")==0 ){ + inWaitStandby = true; + } else { + inWaitStandby = false; + } + } + return true; +} + +bool JARampupGAM::Execute() { + using namespace MARTe; + if(!inWaitHVON){ + if (*target_value <= 0.0f || *standby == 0u) { + *output = 0.0f; + rampup_rate = 0.0f; + if(*target_value <= 0.0f){ + *state = 3u; + } else { + *state = 0u; + } + return true; + } + + if(*start == 1u && *isAuto==0u){ //isAuto = 1.Manual, 0.auto-rampup. + inRampup = true; + resetFlag = true; + *output = 0.0f; //Enable if it should start always zero. + } + + // Calcrate new rampup rate. + if(*rampup_time != 0 && resetFlag == true){ + rampup_rate = (*target_value - *current_setpoint) / *rampup_time/1000.0f; // Volt/msec + resetFlag = false; + } + + // Update Parameter + if(*standby == 1u ){ + if(*isAuto == 1u){ + if (inWaitStandby){ + *output = *target_value; + } else{ + *output = *FHPS_PrePro; + } + //*output = *target_value; + *state = 0u; + return true; + } + else if (inRampup){ + if (*output + rampup_rate < *target_value && *rampup_time != 0){ + *output = *output + rampup_rate; + *state = 1u; + } else { + *output = *target_value; + *state = 2u; + inRampup = false; + } + } + } + return true; + } else { + if(*isAuto == 0){ + *output = *FHPS_PrePro; + } else{ + *output = *target_value; + } + return true; + } +} + +CLASS_REGISTER(JARampupGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/JARampupGAM.h b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/JARampupGAM.h new file mode 100644 index 0000000..3c6e012 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/JARampupGAM.h @@ -0,0 +1,141 @@ +/** + * @file JARampupGAM.h + * @brief Header file for class JARampupGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARampupGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JARampupGAM_H_ +#define GAMS_JARampupGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that rampup output value with specified target value and duration. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *      +FHPSRampupGAM = {
+ *         Class = JARampupGAM
+ *         InputSignals = {
+ *             Currspv = {
+ *                 Alias = FHPS_REF
+ *                 DataSource = DDB1
+ *                 Type = float32
+ *             }
+ *             Targetv = {
+ *                 Alias = FHPS_AUTO_TAGV
+ *                 DataSource = EPICSCAInput
+ *                 Type = float32
+ *             }
+ *             Time = {
+ *                 Alias = FHPS_AUTO_TIME
+ *                 DataSource = EPICSCAInput
+ *                 Type = float32
+ *             }
+ *             Start = {
+ *                 Alias = FHPS_AUTO_START
+ *                 DataSource = EPICSCAInput
+ *                 Type = uint32
+ *             }
+ *         }
+ *         OutputSignals = {
+ *             FHPS_REF = {
+ *                 DataSource = DDB1
+ *                 Type = float32
+ *             }
+ *         }
+ *       }
+ *  
+ * 
+ * + */ + +class JARampupGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JARampupGAM(); + + virtual ~JARampupGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + // Input signal containing current current_setpoint + MARTe::float32 *current_setpoint; + + // Input signal containing the frequency of the waveform. + MARTe::float32 *target_value; + + // Input signal containing the amplitude of the waveform. + MARTe::float32 *rampup_time; + + // Input signal containing CCPS_ON_REQUEST + MARTe::uint32 *start; + + // Input signal PLC_STANDBY + MARTe::uint32 *standby; + + // MANUAL AUTO button + MARTe::uint32 *isAuto; + + // Input signal + MARTe::float32 *FHPS_PrePro; + + // Output + MARTe::float32 *output; + // State output + MARTe::uint32 *state; //0:NotOperation, 1:InOperation, 2:Finish, 3:Error + + // Internal variables + MARTe::float32 rampup_rate; + bool inRampup; + bool resetFlag; + bool inWaitHVON; + bool inWaitStandby; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JARampupGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/Makefile.inc new file mode 100644 index 0000000..e9ce666 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JARampupGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JARampupGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JARampupGAM$(LIBEXT) \ + $(BUILD_DIR)/JARampupGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.cpp b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.cpp new file mode 100644 index 0000000..d164e89 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.cpp @@ -0,0 +1,361 @@ +/** + * @file JASDNRTStateMachineGAM.cpp + * @brief Source file for class JASDNRTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JASDNRTStateMachineGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JASDNRTStateMachineGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JASDNRTStateMachineGAM::JASDNRTStateMachineGAM() { + currentState = WaitTrigger; // Set Entry state. + plcOnTime = 0; // Triggered time holder. + sdnTriggerTime = 0; + //Output and condition in a given state. + conditionTrigger = 1; + aps_hvon = 0; + aps_swon = 0; + bps_hvon = 0; + bps_swon = 0; + mhvps_hvon = 0; + + // Parameters which get from Input signals. + triggerSignal = NULL_PTR(MARTe::uint32 *); + currentTime = NULL_PTR(MARTe::uint32 *); + triggerDelay_mhvps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_aps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_hvon = NULL_PTR(MARTe::uint32 *); + triggerDelay_bps_swon = NULL_PTR(MARTe::uint32 *); + triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); + stopRequest = NULL_PTR(MARTe::uint32 *); + modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); + sdnCommand = NULL_PTR(MARTe::uint16 *); + + // write out target. + outputSignal = NULL_PTR(MARTe::uint32 *); + outputBeamON = NULL_PTR(MARTe::uint32 *); + outputHVArmed = NULL_PTR(MARTe::uint32 *); + outputHVInjection = NULL_PTR(MARTe::uint32 *); + outputRFON = NULL_PTR(MARTe::uint32 *); + outputBeamONTime = NULL_PTR(MARTe::uint32 *); + outputRFONTime = NULL_PTR(MARTe::uint32 *); + shotCounter = NULL_PTR(MARTe::uint32 *); + + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; +} + +JASDNRTStateMachineGAM::~JASDNRTStateMachineGAM() { +} + +bool JASDNRTStateMachineGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("ConditionTrigger", conditionTrigger); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Condition1 shall be specified"); + } + } + if (ok) { + ok = data.Read("mhvps_hvon", mhvps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon", aps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon", aps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon", bps_hvon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon", bps_swon); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon shall be specified"); + } + } + return ok; +} + +bool JASDNRTStateMachineGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JASDNRTStateMachineGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 11u); + if (ok) { + ok = (numberOfOutputSignals == 8u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit || inputType == UnsignedInteger16Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint16", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } + } + } + if (ok) { + currentTime = reinterpret_cast(GetInputSignalMemory(0)); + triggerSignal = reinterpret_cast(GetInputSignalMemory(1)); + triggerDelay_mhvps_hvon = reinterpret_cast(GetInputSignalMemory(2)); + triggerDelay_aps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + triggerDelay_aps_swon = reinterpret_cast(GetInputSignalMemory(4)); + triggerDelay_bps_hvon = reinterpret_cast(GetInputSignalMemory(5)); + triggerDelay_bps_swon = reinterpret_cast(GetInputSignalMemory(6)); + triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); + stopRequest = reinterpret_cast(GetInputSignalMemory(8)); + modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); + sdnCommand = reinterpret_cast(GetInputSignalMemory(10)); + + outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); + outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); + outputHVArmed = reinterpret_cast(GetOutputSignalMemory(2)); + outputHVInjection = reinterpret_cast(GetOutputSignalMemory(3)); + outputRFON = reinterpret_cast(GetOutputSignalMemory(4)); + outputBeamONTime = reinterpret_cast(GetOutputSignalMemory(5)); + outputRFONTime = reinterpret_cast(GetOutputSignalMemory(6)); + shotCounter = reinterpret_cast(GetOutputSignalMemory(7)); + *shotCounter = 0; + } + return ok; +} + +bool JASDNRTStateMachineGAM::Execute() { + using namespace MARTe; + if (currentState == WaitTrigger) { + + //State Transition condition + if ((*triggerSignal == conditionTrigger)) { + REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence in SDN mode."); + plcOnTime = *currentTime; //Save pulse start time. + *outputBeamON = 0; + //State transition. + currentState = SwitchingHVPS_HVON; + } + } + else if (currentState == SwitchingHVPS_HVON) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal -= aps_swon; + currentState = HVTerminate; + } + if (*currentTime >= (plcOnTime + *triggerDelay_bps_hvon) && bps_hvon_is_on == false){ + //Do action + *outputSignal += bps_hvon; + bps_hvon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + } + if (*currentTime >= (plcOnTime + *triggerDelay_aps_hvon) && aps_hvon_is_on == false) { + //Do action + *outputSignal += aps_hvon; + aps_hvon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal."); + } + + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + if (bps_hvon_is_on && aps_hvon_is_on){ + *outputHVArmed = 0; + currentState = WaitSDNTrigger; + } + + } + else if (currentState == WaitSDNTrigger) { + + // Action in this state + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + + // State change conditions + if (*sdnCommand == 1){ + sdnTriggerTime = *currentTime; + currentState = SwitchingHVPS_SWON; + } + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + } + else if (currentState == SwitchingHVPS_SWON) { + + //Actions in this state. + if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { + *outputSignal = 0; + currentState = HVTerminate; + } + + if (*currentTime >= (sdnTriggerTime + *triggerDelay_bps_swon) && bps_swon_is_on==false){ + //Do action + *outputSignal += bps_swon; + bps_swon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "bps_swon was set to outputSignal at %d.", *currentTime); + } + if (*currentTime >= (sdnTriggerTime + *triggerDelay_mhvps_hvon) && mhvps_hvon_is_on==false) { + //Do action + *outputSignal += mhvps_hvon; + mhvps_hvon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "mhvps_hvon was set to outputSignal at %d.", *currentTime); + } + if (bps_swon_is_on && mhvps_hvon_is_on && *currentTime >= (sdnTriggerTime + *triggerDelay_aps_swon)){ + //Do action + *outputSignal += aps_swon; + aps_swon_is_on = true; + apsSwonTime = *currentTime; + REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + } + *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. + + if (bps_swon_is_on || mhvps_hvon_is_on){ + *outputHVInjection = 0; + } + + //State transition condition + if (aps_swon_is_on){ + currentState = RFON; + *outputRFON = 0; + *shotCounter += 1; + REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); + } + } + else if (currentState == RFON) { + + //SDN command processing. + if (*sdnCommand == 4 && aps_swon_is_on) { + *outputSignal -= aps_swon; + aps_swon_is_on = false; + REPORT_ERROR(ErrorManagement::Debug, "sdn command was 4"); + } + if (*sdnCommand == 3 && !aps_swon_is_on) { + *outputSignal += aps_swon; + aps_swon_is_on = true; + REPORT_ERROR(ErrorManagement::Debug, "sdn command was 3"); + } + + //Action in this state. + if ((*sdnCommand == 2) || (*modePulseLengthLimit == 1u) || (*currentTime >= (sdnTriggerTime + *triggerDelay_aps_swon + *triggerDelay_shotlen))) { + REPORT_ERROR(ErrorManagement::Debug, "shotlen: %d", *triggerDelay_shotlen); + if (*sdnCommand == 2) { + REPORT_ERROR(ErrorManagement::Information, "sdn command was 2"); + } else if (*currentTime >= (sdnTriggerTime + *triggerDelay_aps_swon + *triggerDelay_shotlen)){ + REPORT_ERROR(ErrorManagement::Information, "pulse length reached setpoint."); + } + //Do action + *outputSignal -= aps_swon; //Turn off only aps_swon + mhvps_hvon_is_on = false; + aps_hvon_is_on = false; + aps_swon_is_on = false; + bps_hvon_is_on = false; + bps_swon_is_on = false; + REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + } + *outputRFON = 0; + *outputBeamONTime = *currentTime - plcOnTime; + *outputRFONTime = *currentTime - apsSwonTime; + + + //State transition condition + if (!aps_swon_is_on && !bps_swon_is_on && !mhvps_hvon_is_on) { + currentState = HVTerminate; + apsSwoffTime = *currentTime; + REPORT_ERROR(ErrorManagement::Information, "state was changed to HVTerminate"); + } + } + else if (currentState == HVTerminate) { + + //Action in this state. + *outputBeamON = 1; + *outputHVArmed = 1; + *outputHVInjection = 1; + *outputRFON = 1; + + // State transition condition. + if (*currentTime - apsSwoffTime >= turn_off_delay){ + *outputSignal = 0; + } + if (*triggerSignal == false){ + //Check PLC_ON is reset + currentState = WaitTrigger; + *outputSignal = 0; + REPORT_ERROR(ErrorManagement::Debug, "state was changed to WaitTrigger"); + } + } + + return true; +} + +CLASS_REGISTER(JASDNRTStateMachineGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.h b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.h new file mode 100644 index 0000000..91b4199 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.h @@ -0,0 +1,250 @@ +/** + * @file JARTStateMachineGAM.h + * @brief Header file for class JASDNRTStateMachineGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JARTStateMachineGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JASDNRTSTATEMACHINEGAM_H_ +#define GAMS_JASDNRTSTATEMACHINEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM provides real-time state machine that communicate with SDN packet. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *         +GAMSDNRealTimeStateMachine = {
+ *           Class = JASDNRTStateMachineGAM
+ *           ConditionTrigger = 1
+ *           mhvps_hvon = 4
+ *           aps_hvon = 1
+ *           aps_swon = 16
+ *           bps_hvon = 2
+ *           bps_swon = 8
+ *           InputSignals = {
+ *               Time = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               PLC_ON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               MHVPS_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON_DT = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               SHOTLEN = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               StopRequest = {
+ *               	DataSource = DDB1
+ *               	Type = uint32
+ *               }
+ *               MODE_SHOTLEN_FLAG = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               Command = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint16
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   //DataSource = NI6259
+ *                   DataSource = Display
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *               BeamON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVARMED = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               HVINJECTION = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFON = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               BeamONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               RFONTime = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *               SHOT_ID = {
+ *                   DataSource = RealTimeThreadAsyncBridge
+ *                   Type = uint32
+ *               }
+ *           }
+ *       }
+ * 
+ * + */ + +class JASDNRTStateMachineGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JASDNRTStateMachineGAM(); + + virtual ~JASDNRTStateMachineGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + enum JARealTimeState { + WaitTrigger = 0, + SwitchingHVPS_HVON = 1, + WaitSDNTrigger = 2, + SwitchingHVPS_SWON = 3, + RFON = 4, + HVTerminate = 5 + }; + + //The current rtState + JARealTimeState currentState; + + ///////////////////////////////////////////////// + // Static parameter given by cfg File + ///////////////////////////////////////////////// + //A given condition + MARTe::uint32 conditionTrigger; + //What to output in a given state and condition + MARTe::uint32 mhvps_hvon; + MARTe::uint32 aps_hvon; + MARTe::uint32 aps_swon; + MARTe::uint32 bps_hvon; + MARTe::uint32 bps_swon; + + ///////////////////////////////////////////////// + // Input signals + ///////////////////////////////////////////////// + //The trigger signal (PLC_ON) + MARTe::uint32 *triggerSignal; + //Time signal (Time from TimerGAM) + MARTe::uint32 *currentTime; + // Input signals for trigger delay parameters + MARTe::uint32 *triggerDelay_mhvps_hvon; + MARTe::uint32 *triggerDelay_aps_hvon; + MARTe::uint32 *triggerDelay_aps_swon; + MARTe::uint32 *triggerDelay_bps_hvon; + MARTe::uint32 *triggerDelay_bps_swon; + MARTe::uint32 *triggerDelay_shotlen; + // Input signal for sequence stop request. + MARTe::uint32 *stopRequest; + // Input signal for pulse length limit by mode. + MARTe::uint32 *modePulseLengthLimit; + // Input signal for SDN commands. + MARTe::uint16 *sdnCommand; + + ///////////////////////////////////////////////////////////// + // Output signal to which the output value will be written. + ///////////////////////////////////////////////////////////// + // One state write One signal. + MARTe::uint32 *outputSignal; + // state notify output + MARTe::uint32 *outputBeamON; + MARTe::uint32 *outputHVArmed; + MARTe::uint32 *outputHVInjection; + MARTe::uint32 *outputRFON; + // elapsed time notify output; + MARTe::uint32 *outputBeamONTime; + MARTe::uint32 *outputRFONTime; + // shot counter (coutup every RFON time.) + MARTe::uint32 *shotCounter; + + ////////////////////////////// + //Internal Parameters + ////////////////////////////// + //PLC_ON time holder + MARTe::uint32 plcOnTime; + //APS_SWON time holder + MARTe::uint32 apsSwonTime; + MARTe::uint32 apsSwoffTime; + + //PS turn off delay + MARTe::uint32 turn_off_delay; + + //SDN trigger command arrival time. + MARTe::uint32 sdnTriggerTime; + //HVPS state holder + bool mhvps_hvon_is_on; + bool aps_hvon_is_on; + bool aps_swon_is_on; + bool bps_hvon_is_on; + bool bps_swon_is_on; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JASDNRTSTATEMACHINEGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/Makefile.inc new file mode 100644 index 0000000..0ddfbdf --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JASDNRTStateMachineGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JASDNRTStateMachineGAM$(LIBEXT) \ + $(BUILD_DIR)/JASDNRTStateMachineGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/JASampleGAM.cpp b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/JASampleGAM.cpp new file mode 100644 index 0000000..62ab62d --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/JASampleGAM.cpp @@ -0,0 +1,177 @@ +/** + * @file JASampleGAM.cpp + * @brief Source file for class JASampleGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JASampleGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JASampleGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JASampleGAM::JASampleGAM() { + // initialize member variables. + param1 = 0; + param2 = 0; + + //Input signals. + input1 = NULL_PTR(MARTe::uint32 *); + input2 = NULL_PTR(MARTe::float32 *); + //Output signals. + output1= NULL_PTR(MARTe::uint32 *); + output2 = NULL_PTR(MARTe::float32 *); + +} + +JASampleGAM::~JASampleGAM() { +} + +bool JASampleGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("param1", param1); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The param1 shall be specified"); + } + } + if (ok) { + ok = data.Read("param2", param2); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The param2 shall be specified"); + } + } + return ok; +} + +bool JASampleGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JASampleGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == 2u); + if (ok) { + ok = (numberOfOutputSignals == 2u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Two output signals shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Two input signals shall be defined"); + } + // Do type check for input signals. + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = ((inputType == UnsignedInteger32Bit) || (inputType == Float32Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or flaot32", signalName.Buffer()); + } + + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = ((outputType == UnsignedInteger32Bit) || (outputType == Float32Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or float32", signalName.Buffer()); + } + } + } + + // Signal id can get by signal name in configuration file + if (ok) { + StreamString signalName = "InputXXX"; //Variable name in configuration file. + uint32 signalxxxIndex; //Index is copied to this variable by using signal name. + ok = GetSignalIndex(InputSignals, signalxxxIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "InputXXX input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, signalxxxIndex); + ok = (inputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, signalxxxIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } else { + inputXXX = reinterpret_cast(GetInputSignalMemory(signalxxxIndex)); + } + } + } + + // Do type cast. with explicit signal id. + if (ok) { + input1 = reinterpret_cast(GetInputSignalMemory(0)); + input2 = reinterpret_cast(GetInputSignalMemory(1)); + + output1 = reinterpret_cast(GetOutputSignalMemory(0)); + output2 = reinterpret_cast(GetOutputSignalMemory(1)); + + } + return ok; +} + +bool JASampleGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + REPORT_ERROR(ErrorManagement::Information, "input1 is %d.", *input1); + REPORT_ERROR(ErrorManagement::Information, "input2 is %f.", *input2); + REPORT_ERROR(ErrorManagement::Information, "inputXXX is %f.", *inputXXX); + + REPORT_ERROR(ErrorManagement::Information, "maltiply param value to input."); + + *output1 = *input1 * param1; + *output2 = *input2 * param2; + + REPORT_ERROR(ErrorManagement::Information, "output1 is %d.", *output1); + REPORT_ERROR(ErrorManagement::Information, "output2 is %f.", *output2); + + return true; +} + +CLASS_REGISTER(JASampleGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/JASampleGAM.h b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/JASampleGAM.h new file mode 100644 index 0000000..53f06ad --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/JASampleGAM.h @@ -0,0 +1,122 @@ +/** + * @file JASampleGAM.h + * @brief Header file for class JASampleGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JASampleGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JASampleGAM_H_ +#define GAMS_JASampleGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +/** + * @brief GAM Sample Usage. + * @details Sample + * + * The configuration syntax is: + * + *
+ * +SampleGAM = {
+ *     Class = JASampleGAM
+ *     InputSignals = {
+ *         Input1 = {
+ *             DataSource = "DDB"
+ *             Type = uint32
+ *             Default = 0
+ *         }
+ *         Input2 = {
+ *             DataSource = "DDB"
+ *             Type = float32
+ *             Default = 100
+ *         }
+ *         InputXXX = {
+ *             DataSource = "DDB"
+ *             Type = float32
+ *             NumberOfElements = 1
+ *         }
+ *     }
+ *     OutputSignals = {
+ *         Output1 = {
+ *             DataSource = "DDB"
+ *             Type = uint32
+ *             Default = 0
+ *         }
+ *         Output2 = {
+ *             DataSource = "DDB"
+ *             Type = int32
+ *             Default = 100
+ *         }
+ *     }
+ * }
+ * 
+ */ + + +class JASampleGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JASampleGAM(); + + virtual ~JASampleGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //GAM fixed parameters. + MARTe::uint32 param1; + MARTe::float32 param2; + + // Input signals + MARTe::uint32 *input1; + MARTe::float32 *input2; + MARTe::float32 *inputXXX; + + // Output signals + MARTe::uint32 *output1; + MARTe::float32 *output2; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JASampleGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/Makefile.inc new file mode 100644 index 0000000..c9bc4f2 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASampleGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JARTSampleGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JARTSampleGAM$(LIBEXT) \ + $(BUILD_DIR)/JARTSampleGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.cpp b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.cpp new file mode 100644 index 0000000..3ab70d0 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.cpp @@ -0,0 +1,188 @@ +/** + * @file JASourceChoiseGAM.cpp + * @brief Source file for class JASourceChoiseGAM + * @date Nov 26, 2018 + * @author aneto + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JASourceChoiseGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JASourceChoiseGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JASourceChoiseGAM::JASourceChoiseGAM() { + // initialize member variables. + numberOfPVs = 0; +} + +JASourceChoiseGAM::~JASourceChoiseGAM() { +} + +bool JASourceChoiseGAM::Initialise(MARTe::StructuredDataI & data) { + //GAM parameters are initialized. + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("numberOfPVs", numberOfPVs); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The numberOfPVs parameter shall be specified"); + } + } + return ok; +} + +bool JASourceChoiseGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + //This method changes internal parameter based on next realtime state. + return true; +} + +bool JASourceChoiseGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == numberOfPVs*3u); + if (ok) { + ok = (numberOfOutputSignals == numberOfPVs); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "%d *3 output signals shall be defined", numberOfPVs); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "%d input signals shall be defined", numberOfPVs); + } + // Do type check for input signals. + int int_num = 0; + int float_num = 0; + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + if(inputType == UnsignedInteger32Bit){ + int_num++; + } else if (inputType == Float32Bit) { + float_num++; + } else { + ok = false; + }; + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or flaot32", signalName.Buffer()); + } + } + } + // Do type check for output signals + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = ((outputType == UnsignedInteger32Bit) || (outputType == Float32Bit)); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or float32", signalName.Buffer()); + } + } + } + // Set memory + inputUInt32.resize(numberOfPVs*2); + inputFloat32.resize(numberOfPVs*2); + choise.resize(numberOfPVs); + outputUInt32.resize(numberOfPVs); + outputFloat32.resize(numberOfPVs); + + prevUInt32.resize(numberOfPVs*2); + prevFloat32.resize(numberOfPVs*2); + + if(ok){ + for(uint32 i=0; i(GetInputSignalMemory(3*i)); + inputUInt32[2*i+1] = reinterpret_cast(GetInputSignalMemory(3*i+1)); + choise[i] = reinterpret_cast(GetInputSignalMemory(3*i+2)); + outputUInt32[i] = reinterpret_cast(GetOutputSignalMemory(i)); + } else if(inputType == Float32Bit){ + inputFloat32[2*i] = reinterpret_cast(GetInputSignalMemory(3*i)); + inputFloat32[2*i+1] = reinterpret_cast(GetInputSignalMemory(3*i+1)); + choise[i] = reinterpret_cast(GetInputSignalMemory(3*i+2)); + outputFloat32[i] = reinterpret_cast(GetOutputSignalMemory(i)); + } + prevUInt32[2*i] = 0; + prevUInt32[2*i+1] = 0; + prevFloat32[2*i] = 0; + prevFloat32[2*i+1] = 0; + } + } + return ok; +} + +bool JASourceChoiseGAM::Execute() { + // This method is called every realtime state thread cycle. + using namespace MARTe; + + for (uint32 i=0; i < numberOfPVs; i++){ + if(*choise[i]==0){ + if(outputUInt32[i]){ + if(prevUInt32[i*2] != *inputUInt32[i*2]){ + *outputUInt32[i] = *inputUInt32[i*2]; + prevUInt32[i*2] = *inputUInt32[i*2]; + prevUInt32[1+i*2] = *inputUInt32[1+i*2]; + } + } else if(outputFloat32[i]){ + if(prevFloat32[i*2] != *inputFloat32[i*2]){ + *outputFloat32[i] = *inputFloat32[i*2]; + prevFloat32[i*2] = *inputFloat32[i*2]; + prevFloat32[1+i*2] = *inputFloat32[1+i*2]; + } + } + } else { + if(outputUInt32[i]){ + if(prevUInt32[1+i*2] != *inputUInt32[1+i*2]){ + *outputUInt32[i] = *inputUInt32[1+i*2]; + prevUInt32[i*2] = *inputUInt32[i*2]; + prevUInt32[1+i*2] = *inputUInt32[1+i*2]; + } + } else if (outputFloat32[i]){ + if(prevFloat32[1+i*2] != *inputFloat32[1+i*2]){ + *outputFloat32[i] = *inputFloat32[1+i*2]; + prevFloat32[i*2] = *inputFloat32[i*2]; + prevFloat32[1+i*2] = *inputFloat32[1+i*2]; + } + } + } + } + return true; +} + +CLASS_REGISTER(JASourceChoiseGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.h b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.h new file mode 100644 index 0000000..2a4cd80 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.h @@ -0,0 +1,84 @@ +/** + * @file JASourceChoiseGAM.h + * @brief Header file for class JASourceChoiseGAM + * @date Mar 04, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JASourceChoiseGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JASourceChoiseGAM_H_ +#define GAMS_JASourceChoiseGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +class JASourceChoiseGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JASourceChoiseGAM(); + + virtual ~JASourceChoiseGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + //The list of possible states + //GAM fixed parameters. + MARTe::uint32 numberOfPVs; + + // Input signals + std::vector inputUInt32; + std::vector inputFloat32; + std::vector choise; + + // Output signals + std::vector outputUInt32; + std::vector outputFloat32; + + // Previous Input value + std::vector prevUInt32; + std::vector prevFloat32; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JASourceChoiseGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/Makefile.inc new file mode 100644 index 0000000..cf441bb --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JASourceChoiseGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JASourceChoiseGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JASourceChoiseGAM$(LIBEXT) \ + $(BUILD_DIR)/JASourceChoiseGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.cpp b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.cpp new file mode 100644 index 0000000..1d3f9c1 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.cpp @@ -0,0 +1,206 @@ +/** + * @file JATerminalInterfaceGAM.cpp + * @brief Source file for class JATerminalInterfaceGAM + * @date Feb 19, 2019 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JATerminalInterfaceGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "JATerminalInterfaceGAM.h" + +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JATerminalInterfaceGAM::JATerminalInterfaceGAM() { + + // Fixed GAM input + aps_hvon_term = 0; + + // Parameters which get from Input signals. + mhvps_hvon = NULL_PTR(MARTe::uint32 *); + aps_hvon = NULL_PTR(MARTe::uint32 *); + aps_swon = NULL_PTR(MARTe::uint32 *); + bps_hvon = NULL_PTR(MARTe::uint32 *); + bps_swon = NULL_PTR(MARTe::uint32 *); + + stateMachineOutput = NULL_PTR(MARTe::uint32 *); + + // write out target. + outputSignalNI6259 = NULL_PTR(MARTe::uint32 *); + outputSignalNI6528P3 = NULL_PTR(MARTe::uint8 *); + outputSignalNI6528P4 = NULL_PTR(MARTe::uint8 *); + + aps_hvon_state = 0; + aps_swon_state = 0; + mhvps_hvon_state = 0; + bps_hvon_state = 0; + bps_swon_state = 0; + p3Value = 0; + p4Value = 0; +} + +JATerminalInterfaceGAM::~JATerminalInterfaceGAM() { +} + +bool JATerminalInterfaceGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("mhvps_hvon_term", mhvps_hvon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The mhvps_hvon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_hvon_term", aps_hvon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_hvon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("aps_swon_term", aps_swon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The aps_swon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_hvon_term", bps_hvon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_hvon_term shall be specified"); + } + } + if (ok) { + ok = data.Read("bps_swon_term", bps_swon_term); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The bps_swon_term shall be specified"); + } + } + return ok; +} + +bool JATerminalInterfaceGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + + return true; +} + +bool JATerminalInterfaceGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 9u); + if (ok) { + ok = (numberOfOutputSignals == 3u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Three output signals shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfInputSignals; c++) { + TypeDescriptor inputType = GetSignalType(InputSignals, c); + ok = (inputType == UnsignedInteger32Bit || inputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint8", signalName.Buffer()); + } + + } + } + if (ok) { + uint32 c; + for (c = 0u; c < numberOfOutputSignals; c++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, c); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, c, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32 or uint8", signalName.Buffer()); + } + } + } + if (ok) { + //mhvps_manm = reinterpret_cast(GetInputSignalMemory(0)); + mhvps_hvon = reinterpret_cast(GetInputSignalMemory(0)); + //aps_manm = reinterpret_cast(GetInputSignalMemory(2)); + aps_hvon = reinterpret_cast(GetInputSignalMemory(1)); + aps_swon = reinterpret_cast(GetInputSignalMemory(2)); + //bps_manm = reinterpret_cast(GetInputSignalMemory(5)); + bps_hvon = reinterpret_cast(GetInputSignalMemory(3)); + bps_swon = reinterpret_cast(GetInputSignalMemory(4)); + short_pulse_mode = reinterpret_cast(GetInputSignalMemory(5)); + stateMachineOutput = reinterpret_cast(GetInputSignalMemory(6)); + ni6528p3Value = reinterpret_cast(GetInputSignalMemory(7)); + ni6528p4Value = reinterpret_cast(GetInputSignalMemory(8)); + + outputSignalNI6259 = reinterpret_cast(GetOutputSignalMemory(0)); + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(1)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(2)); + + } + return ok; +} + +bool JATerminalInterfaceGAM::Execute() { + using namespace MARTe; + uint8 sm = *stateMachineOutput; + + + //Update HVPS state + aps_hvon_state = ((sm >> (0))&1); + aps_swon_state = ((sm >> (4))&1); + mhvps_hvon_state = ((sm >> (2))&1); + bps_hvon_state = ((sm >> (1))&1); + bps_swon_state = ((sm >> (3))&1); + + if(*short_pulse_mode == 1){ + p3Value = 1*aps_hvon_state + 8*bps_hvon_state +16*bps_swon_state; + *outputSignalNI6259 = 1*aps_swon_state; + //uint8 ni6528p3ValueTemp = 0;//*ni6528p3Value; + //ni6528p3ValueTemp &= ~(1<<2); //Does not turn on ni6258 aps switch + //Update terminal value + //*outputSignalNI6528P3 = ~(ni6528p3ValueTemp | p3Value); + *outputSignalNI6528P3 = ~p3Value; + //REPORT_ERROR(ErrorManagement::Debug, "short pulse mode with p3: %d.", p3Value); + } else { + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state; + //REPORT_ERROR(ErrorManagement::Debug, "long pulse mode with p3: %d.", p3Value); + } + + p4Value = 8*mhvps_hvon_state; + *outputSignalNI6528P4 = ~(*ni6528p4Value | p4Value); + return true; +} + +CLASS_REGISTER(JATerminalInterfaceGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.h b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.h new file mode 100644 index 0000000..773cbd6 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.h @@ -0,0 +1,157 @@ +/** + * @file JATerminalInterfaceGAM.h + * @brief Header file for class JATerminalInterfaceGAM + * @date Feb 19, 2020 + * @author kuchida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JATerminalInterfaceGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JATerminalInterfaceGAM_H_ +#define GAMS_JATerminalInterfaceGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM calculates one output value by comparing input value and fixed parameters. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ * 
+ *         +terminalInterfaceGAM = {
+ *           Class = JATerminalInterfaceGAM
+ *           mhvps_hvon_term = 4
+ *           aps_hvon_term = 1
+ *           aps_swon_term = 16
+ *           bps_hvon_term = 2
+ *           bps_swon_term = 8
+ *           InputSignals = {
+ *               MHVPS_HVON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_HVON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               APS_SWON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_HVON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               BPS_SWON = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *               Value = {
+ *                   DataSource = DDB1
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               Value = {
+ *                   DataSource = NI6259
+ *                   Type = uint32
+ *                   Trigger = 1
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JATerminalInterfaceGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JATerminalInterfaceGAM(); + + virtual ~JATerminalInterfaceGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + // Fixed GAM input + MARTe::uint32 mhvps_hvon_term; + MARTe::uint32 aps_hvon_term; + MARTe::uint32 aps_swon_term; + MARTe::uint32 bps_hvon_term; + MARTe::uint32 bps_swon_term; + + // Input signals + //MARTe::uint32 *mhvps_manm; + MARTe::uint32 *mhvps_hvon; + + //MARTe::uint32 *aps_manm; + MARTe::uint32 *aps_hvon; + MARTe::uint32 *aps_swon; + + //MARTe::uint32 *bps_manm; + MARTe::uint32 *bps_hvon; + MARTe::uint32 *bps_swon; + + MARTe::uint32 *short_pulse_mode; + + MARTe::uint32 *stateMachineOutput; + MARTe::uint8 *ni6528p3Value; + MARTe::uint8 *ni6528p4Value; + + // Output signals + MARTe::uint32 *outputSignalNI6259; + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; + + MARTe::uint8 aps_hvon_state; + MARTe::uint8 aps_swon_state; + MARTe::uint8 mhvps_hvon_state; + MARTe::uint8 bps_hvon_state; + MARTe::uint8 bps_swon_state; + MARTe::uint8 p3Value; + MARTe::uint8 p4Value; + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JATerminalInterfaceGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/Makefile.inc new file mode 100644 index 0000000..ff7c79a --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATerminalInterfaceGAM/Makefile.inc @@ -0,0 +1,55 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JATerminalInterfaceGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JATerminalInterfaceGAM$(LIBEXT) \ + $(BUILD_DIR)/JATerminalInterfaceGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.cpp b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.cpp new file mode 100644 index 0000000..7004a1f --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.cpp @@ -0,0 +1,178 @@ +/** + * @file JATriangleWaveGAM.cpp + * @brief Source file for class JATriangleWaveGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JATriangleWaveGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "AdvancedErrorManagement.h" +#include "JATriangleWaveGAM.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +MARTe::float32 absFloat(MARTe::float32 x) { + if (x < 0.0f) { + return -x; + } + return x; +} + +JATriangleWaveGAM::JATriangleWaveGAM() { + frequency = NULL_PTR(MARTe::float32 *); + amplitude = NULL_PTR(MARTe::float32 *); + offset = NULL_PTR(MARTe::float32 *); + plcStandby = NULL_PTR(MARTe::uint32 *); + waveOutput = NULL_PTR(MARTe::float32 *); + time = 0.0f; +} + +JATriangleWaveGAM::~JATriangleWaveGAM() { +} + +bool JATriangleWaveGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + return GAM::Initialise(data); +} + +bool JATriangleWaveGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 4u); + if (ok) { + ok = (numberOfOutputSignals == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "One output signal shall be defined."); + } + } + else { + REPORT_ERROR(ErrorManagement::ParametersError, "Four input signals shall be defined."); + } + uint32 freqIndex; + uint32 ampIndex; + uint32 offsetIndex; + uint32 plcStandbyIndex; + if (ok) { + StreamString signalName = "Frequency"; + ok = GetSignalIndex(InputSignals, freqIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Frequency input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, freqIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Frequency shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Amplitude"; + ok = GetSignalIndex(InputSignals, ampIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Amplitude input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, ampIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Amplitude shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "Offset"; + ok = GetSignalIndex(InputSignals, offsetIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Offset input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, offsetIndex); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Offset shall be defined as float32."); + } + } + } + if (ok) { + StreamString signalName = "PLCSTANDBY"; + ok = GetSignalIndex(InputSignals, plcStandbyIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLCSTANDBY input signal shall be defined."); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, plcStandbyIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "PLCSTANDBY shall be defined as uint32."); + } + } + } + if (ok) { + TypeDescriptor inputType = GetSignalType(OutputSignals, 0); + ok = (inputType == Float32Bit); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Signal Amplitude shall be defined as float32."); + } + } + if (ok) { + frequency = reinterpret_cast(GetInputSignalMemory(freqIndex)); + amplitude = reinterpret_cast(GetInputSignalMemory(ampIndex)); + offset = reinterpret_cast(GetInputSignalMemory(offsetIndex)); + plcStandby = reinterpret_cast(GetInputSignalMemory(plcStandbyIndex)); + waveOutput = reinterpret_cast(GetOutputSignalMemory(0)); + } + return ok; +} + +bool JATriangleWaveGAM::Execute() { + using namespace MARTe; + // If frequency is not set, output 0. + if (*frequency <= 0.0f || *plcStandby == 0u) { + *waveOutput = 0.0f; + return true; + } + // Increase the current time. + ++time; + // Calculate the period in milliseconds + float32 periodMs = 1000.0 / *frequency; + // Make sure the time is on [0, periodMs] interval. + while (time > periodMs) { + time -= periodMs; + } + // Formula: + // f(x) = |x - 0.5| * 2 * amplitude + // where x is between 0 and 1 + *waveOutput = absFloat((time / periodMs) - 0.5f) * 2.0f * (*amplitude) + *offset; + return true; +} + +CLASS_REGISTER(JATriangleWaveGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.h b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.h new file mode 100644 index 0000000..22e34c3 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.h @@ -0,0 +1,130 @@ +/** + * @file JATriangleWaveGAM.h + * @brief Header file for class JATriangleWaveGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JATriangleWaveGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JATRIANGLEWAVEGAM_H_ +#define GAMS_JATRIANGLEWAVEGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM provides triangular waveform output within 1kHz thread. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *      +CCPSWaveformGAM = {
+ *           Class = JATriangleWaveGAM
+ *           InputSignals = {
+ *               Offset = {
+ *                   Alias = OFFSET
+ *                   DataSource = EPICSCAInput
+ *                   Type = float32
+ *               }
+ *               Frequency = {
+ *                   Alias = CCPS_OUTPUT_FREQ
+ *                   DataSource = EPICSCAInput
+ *                   Type = float32
+ *               }
+ *               Amplitude = {
+ *                   Alias = CCPS_OUTPUT_AMP
+ *                   DataSource = EPICSCAInput
+ *                   Type = float32
+ *               }
+ *               PLCCCPSON = {
+ *                   Alias = PLC_CCPSON
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+  *              READY = {
+ *                   Alias = PLC_READY
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               CCPS_REF = {
+ *                   DataSource = DDB1
+ *                   Type = float32
+ *               }
+ *           }
+ *       }
+ * 
+ * 
+ * + */ + +class JATriangleWaveGAM : public MARTe::GAM { +public: + CLASS_REGISTER_DECLARATION() + + JATriangleWaveGAM(); + + virtual ~JATriangleWaveGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); +private: + // Input signal containing the frequency of the waveform. + MARTe::float32 *frequency; + + // Input signal containing the amplitude of the waveform. + MARTe::float32 *amplitude; + + // Input signal cantaining the offset of the waveform. + MARTe::float32 *offset; + + // Input signal containing CCPS_ON_REQUEST + //MARTe::uint32 *plcccpson; + + // Input signal condition CCPS_READY + //MARTe::uint32 *plcReady; + + // Input signal condition CCPS_STANDBY + MARTe::uint32 *plcStandby; + + MARTe::float32 *waveOutput; + + MARTe::float32 time; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JATRIANGLEWAVEGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/Makefile.inc new file mode 100644 index 0000000..2e2dfed --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JATriangleWaveGAM/Makefile.inc @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JATriangleWaveGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JATriangleWaveGAM$(LIBEXT) \ + $(BUILD_DIR)/JATriangleWaveGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/JAWFRecordGAM.cpp b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/JAWFRecordGAM.cpp new file mode 100644 index 0000000..b26b6bd --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/JAWFRecordGAM.cpp @@ -0,0 +1,317 @@ +/** + * @file JAWFRecordGAM.cpp + * @brief Source file for class JAWFRecordGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This source file contains the definition of all the methods for + * the class JAWFRecordGAM (public, protected, and private). Be aware that some + * methods, such as those inline could be defined on the header file, instead. + */ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ +#include "JAWFRecordGAM.h" + +#include "AdvancedErrorManagement.h" +#include "CLASSMETHODREGISTER.h" +#include "File.h" +#include "MessageI.h" +#include "RegisteredMethodsMessageFilter.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +// How often output signals are updated. +const MARTe::uint32 cycleMs = 10u; + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAWFRecordGAM::JAWFRecordGAM() : + GAM() { + filenameSignalIndex = 0u; + timeSignal = NULL_PTR(MARTe::int32 *); + loadTriggerSignal = NULL_PTR(MARTe::uint32 *); + valueSignals = NULL_PTR(MARTe::float32 **); + maxElements = 0u; + readOnce = true; +} + +JAWFRecordGAM::~JAWFRecordGAM() { + if (valueSignals != NULL_PTR(MARTe::float32 **)) { + delete[] valueSignals; + } +} + +bool JAWFRecordGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + bool ok = GAM::Initialise(data); + if (ok) { + ok = data.Read("Directory", directory); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "The Directory shall be specified"); + } + } + return ok; +} + +bool JAWFRecordGAM::Setup() { + using namespace MARTe; + bool ok = (numberOfInputSignals == 2u); + if (ok) { + ok = (numberOfOutputSignals > 1u); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "At least two output signal shall be defined"); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Two input signal with the filename and file load trigger shall be defined"); + } + if (ok) { + StreamString signalName = "Filename"; + ok = GetSignalIndex(InputSignals, filenameSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Filename input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, filenameSignalIndex); + ok = (inputType == CharString); + if (!ok) { + ok = (inputType == Character8Bit); + } + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, filenameSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as string", signalName.Buffer()); + } + } + } + if (ok) { + StreamString signalName = "CSV_LOAD"; + uint32 loadSignalIndex; + ok = GetSignalIndex(InputSignals, loadSignalIndex, signalName.Buffer()); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "CSV_LOAD input signal shall be defined"); + } + else { + TypeDescriptor inputType = GetSignalType(InputSignals, loadSignalIndex); + ok = (inputType == UnsignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, loadSignalIndex, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as uint32", signalName.Buffer()); + } else { + loadTriggerSignal = reinterpret_cast(GetInputSignalMemory(loadSignalIndex)); + } + } + } + if (ok) { + TypeDescriptor timeType = GetSignalType(OutputSignals, 0); + + ok = (timeType == SignedInteger32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(InputSignals, 0, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as int32", signalName.Buffer()); + } + + uint32 i; + for (i = 1u; (i < numberOfOutputSignals) && (ok); i++) { + TypeDescriptor outputType = GetSignalType(OutputSignals, i); + ok = (outputType == Float32Bit); + if (!ok) { + StreamString signalName; + (void) GetSignalName(OutputSignals, i, signalName); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Signal %s shall be defined as float32", signalName.Buffer()); + } + else { + uint32 dimentionsCount; + ok = GetSignalNumberOfDimensions(OutputSignals, 0u, dimentionsCount); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Output signals shall have 1 dimension."); + } + else { + uint32 elementsCount; + ok = GetSignalNumberOfElements(OutputSignals, 0u, elementsCount); + if (maxElements == 0) { + maxElements = elementsCount; + } + else { + ok = (maxElements == elementsCount); + if (!ok) { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Output signals shall have consistent number of elements."); + } + } + } + } + } + } + if (ok) { + valueSignals = new float32*[numberOfOutputSignals - 1u]; + uint32 i; + for (i = 1u; i < numberOfOutputSignals; i++) { + valueSignals[i - 1] = reinterpret_cast(GetOutputSignalMemory(i)); + } + timeSignal = reinterpret_cast(GetOutputSignalMemory(0)); + } + return ok; +} + +bool JAWFRecordGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + if (strcmp(nextStateName, "WaitReady") == 0) { + // Reset read once flag when reentering WaitReady state. + readOnce = true; + } + return true; +} + +void JAWFRecordGAM::LoadFile() { + using namespace MARTe; + + bool ok = true; + + const char8 * const filenameSignal = reinterpret_cast(GetInputSignalMemory(filenameSignalIndex)); + StreamString filename = directory; + filename += DIRECTORY_SEPARATOR; + filename += filenameSignal; + REPORT_ERROR(ErrorManagement::Debug, "Opening file %s", filename.Buffer()); + + File f; + ok = f.Open(filename.Buffer(), BasicFile::ACCESS_MODE_R); + + uint32 numberOfPreProgrammedTimeRows = 0u; + int32 *preProgrammedTime; + float32 **preProgrammedValues; + uint32 numberOfPreProgrammedValues = 0u; + + if (ok) { + StreamString tokenLine; + while (f.GetLine(tokenLine)) { + if (tokenLine[0] != '#') { + numberOfPreProgrammedTimeRows++; + } + tokenLine = ""; + } + f.Seek(0); + uint32 t = 0u; + tokenLine = ""; + while ((ok) && (f.GetLine(tokenLine))) { + if (tokenLine[0] == '#') { + tokenLine = ""; + continue; + } + if (numberOfPreProgrammedValues == 0) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + while (tokenLine.GetToken(token, ",", ignored)) { + numberOfPreProgrammedValues++; + token = ""; + } + ok = numberOfPreProgrammedValues == numberOfOutputSignals; + // Remove time from pre-programmed values count. + numberOfPreProgrammedValues -= 1u; + if (ok) { + preProgrammedTime = new int32[maxElements]; + memset(preProgrammedTime, 0, maxElements * sizeof(int32)); + preProgrammedValues = new float32*[numberOfPreProgrammedValues]; + uint32 j; + for (j = 0u; j < numberOfPreProgrammedValues; j++) { + preProgrammedValues[j] = new float32[maxElements]; + memset(preProgrammedValues[j], 0, maxElements * sizeof(float32)); + } + } + else { + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Number of columns in csv file (%d) is not consistent with the number of output signals (%d)", numberOfPreProgrammedValues, + numberOfOutputSignals - 1u); + } + } + if (ok) { + StreamString token; + char8 ignored; + tokenLine.Seek(0); + uint32 idx = 0u; + while (tokenLine.GetToken(token, ",", ignored)) { + if (idx == 0u) { + preProgrammedTime[t] = atoi(token.Buffer()); + } + else { + ok = ((idx - 1) < numberOfPreProgrammedValues); + if (ok) { + preProgrammedValues[idx - 1][t] = static_cast(atof(token.Buffer())); + } + else { + REPORT_ERROR(ErrorManagement::FatalError, "Number of columns in csv file is not consistent with the number of output signals in line %d", t); + } + } + token = ""; + idx++; + } + t++; + } + tokenLine = ""; + } + f.Close(); + } else { + REPORT_ERROR(ErrorManagement::Debug, "Cannot open the file %s", filename.Buffer()); + return; + } + if (numberOfPreProgrammedTimeRows > maxElements) { + REPORT_ERROR(ErrorManagement::Warning, "Only %d (out of %d) of pre-programmed values will be written to waveform record.", + maxElements, numberOfPreProgrammedTimeRows); + } + ok = MemoryOperationsHelper::Copy(timeSignal, preProgrammedTime, maxElements * sizeof(int32)); + uint32 i; + for (i = 0u; (i < numberOfPreProgrammedValues) && (ok); ++i) { + ok = MemoryOperationsHelper::Copy(valueSignals[i], preProgrammedValues[i], maxElements * sizeof(float32)); + } + if (!ok) { + REPORT_ERROR(ErrorManagement::Warning, "Failed to write data to waveform record."); + } + + if (preProgrammedValues != NULL_PTR(float32 **)) { + uint32 i; + for (i = 0u; i < numberOfPreProgrammedValues; i++) { + delete preProgrammedValues[i]; + } + delete[] preProgrammedValues; + } + if (preProgrammedTime != NULL_PTR(int32 *)) { + delete[] preProgrammedTime; + } +} + +bool JAWFRecordGAM::Execute() { + if (*loadTriggerSignal == 1u) { + if (readOnce) { + LoadFile(); + readOnce = false; + } + } else { + // Reset read once flag when loadTriggerSignal is reset. + readOnce = true; + } + return true; +} + +CLASS_REGISTER(JAWFRecordGAM, "1.0") diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/JAWFRecordGAM.h b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/JAWFRecordGAM.h new file mode 100644 index 0000000..ee22c1a --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/JAWFRecordGAM.h @@ -0,0 +1,130 @@ +/** + * @file JAWFRecordGAM.h + * @brief Header file for class JAWFRecordGAM + * @date Jan, 2019 + * @author rhari + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the Licence permissions and limitations under the Licence. + + * @details This header file contains the declaration of the class JAWFRecordGAM + * with all of its public, protected and private members. It may also include + * definitions for inline methods which need to be visible to the compiler. + */ + +#ifndef GAMS_JAWFRECORDGAM_H_ +#define GAMS_JAWFRECORDGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" +#include "Message.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ + +/** + * @brief GAM that is used for pre-programmed operation. + * + * The configuration syntax is (names and signal quantity are only given as an example): + *
+ *       +WFRecordGAM = {
+ *           Class = JAWFRecordGAM
+ *           Directory = "../Configurations" 
+ *           InputSignals = {
+ *               CSV_LOAD = {
+ *                   DataSource = EPICSCAInput
+ *                   Type = uint32
+ *               }
+ *               Filename = {
+ *                   Alias = CSV_NAME
+ *                   DataSource = EPICSCAInput
+ *               }
+ *           }
+ *           OutputSignals = {
+ *               PREP_TIME_WF = {
+ *                   DataSource = DDB1
+ *               }
+ * *             MHVPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               BPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               APS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               MCPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               GCPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *               FHPS_PREP_WF = {
+ *                   DataSource = DDB1
+ *               }
+ *           }
+ *       }
+ * 
+ * + */ + +class JAWFRecordGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAWFRecordGAM(); + + virtual ~JAWFRecordGAM(); + + virtual bool Initialise(MARTe::StructuredDataI & data); + + virtual bool Setup(); + + virtual bool Execute(); + + virtual bool PrepareNextState(const MARTe::char8 * const currentStateName, + const MARTe::char8 * const nextStateName); + +private: + void LoadFile(); + + MARTe::uint32 filenameSignalIndex; + + MARTe::uint32 *loadTriggerSignal; + + MARTe::StreamString directory; + + MARTe::float32 **valueSignals; + + MARTe::int32 *timeSignal; + + MARTe::uint32 maxElements; + + // Flag determining whether file should be read (so it isn't read multiple time) + bool readOnce; +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAWFRECORDGAM_H_ */ diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/Makefile.gcc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/Makefile.gcc @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.gcc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +include Makefile.inc diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/Makefile.inc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/Makefile.inc new file mode 100644 index 0000000..cd7a5f1 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/JAWFRecordGAM/Makefile.inc @@ -0,0 +1,56 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +OBJSX=JAWFRecordGAM.x + +PACKAGE=GAMs + +ROOT_DIR=../../ +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +INCLUDES += -I. +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L0Types +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L2Objects +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L3Streams +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L4Configuration +INCLUDES += -I$(MARTe2_DIR)/Source/Core/BareMetal/L5GAMs +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L3Services +INCLUDES += -I$(MARTe2_DIR)/Source/Core/Scheduler/L4Messages +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L1Portability +INCLUDES += -I$(MARTe2_DIR)/Source/Core/FileSystem/L3Streams + + + +all: $(OBJS) $(SUBPROJ) \ + $(BUILD_DIR)/JAWFRecordGAM$(LIBEXT) \ + $(BUILD_DIR)/JAWFRecordGAM$(DLLEXT) + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/Makefile.gcc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/Makefile.gcc new file mode 100644 index 0000000..e0a2fc4 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/Makefile.gcc @@ -0,0 +1,26 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +############################################################# + +include Makefile.inc + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/Makefile.inc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/Makefile.inc new file mode 100644 index 0000000..9dfc5c1 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/GAMs/Makefile.inc @@ -0,0 +1,45 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# + +SPB = JAMessageGAM.x JAPreProgrammedGAM.x JAModeControlGAM.x \ + JAWFRecordGAM.x JATriangleWaveGAM.x JARampupGAM.x \ + JARTStateMachineGAM.x JASDNRTStateMachineGAM.x JATerminalInterfaceGAM.x \ + JABitSumGAM.x JAConditionalSignalUpdateGAM.x JASourceChoiseGAM.x JABitReverseGAM.x + +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults + +ROOT_DIR=.. +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +all: $(OBJS) $(SUBPROJ) check-env + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + +check-env: +ifndef MARTe2_DIR + $(error MARTe2_DIR is undefined) +endif diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Makefile.inc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Makefile.inc new file mode 100644 index 0000000..1e256f8 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Makefile.inc @@ -0,0 +1,42 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $ +# +############################################################# +SPB = DataSources.x GAMs.x + +MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults + +ROOT_DIR=. +include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET) + +all: $(OBJS) $(SUBPROJ) check-env + echo $(OBJS) + +include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET) + +check-env: +ifndef MARTe2_DIR + $(error MARTe2_DIR is undefined) +endif + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Makefile.linux b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Makefile.linux new file mode 100644 index 0000000..04cde43 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Makefile.linux @@ -0,0 +1,27 @@ +############################################################# +# +# Copyright 2015 F4E | European Joint Undertaking for ITER +# and the Development of Fusion Energy ('Fusion for Energy') +# +# Licensed under the EUPL, Version 1.1 or - as soon they +# will be approved by the European Commission - subsequent +# versions of the EUPL (the "Licence"); +# You may not use this work except in compliance with the +# Licence. +# You may obtain a copy of the Licence at: +# +# http://ec.europa.eu/idabc/eupl +# +# Unless required by applicable law or agreed to in +# writing, software distributed under the Licence is +# distributed on an "AS IS" basis, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. +# See the Licence for the specific language governing +# permissions and limitations under the Licence. +# +############################################################# +export TARGET=x86-linux + +include Makefile.inc + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/README.md b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/README.md new file mode 100644 index 0000000..2064aac --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/README.md @@ -0,0 +1 @@ +QST Gyrotron Fast Controller Implementation with MARTe2 RT Application Framework diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Startup/Main.sh b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Startup/Main.sh new file mode 100644 index 0000000..b425a77 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Startup/Main.sh @@ -0,0 +1,195 @@ +#!/bin/bash +#Arguments -f FILENAME -m MESSAGE [-d cgdb|strace] -x DAN_CONFIG_LOCATION -r root +#-f FILENAME=MARTe configuration file +#-m MESSAGE=Start message +#-d cgdb=Run with cgdb +#-d strace=Run with strace +#-x DAN_CONFIG_LOCATION=Location of the DANConfig.xml (e.g. ~/Projects/ECJASDN/Configurations/DANTestConfig.xml) +#-r run as root + +#Run with cgdb or strace? +DEBUG="" + +#Consume input arguments +while [[ $# -gt 1 ]] +do +key="$1" + +case $key in + -f|--file) + FILE="$2" + shift # past argument + ;; + -m|--message) + MESSAGE="$2" + shift # past argument + ;; + -s|--state) + STATE="$2" + shift # past argument + ;; + -d|--debug) + DEBUG="$2" + shift # past argument + ;; + -x|--dan_config) + DAN_CONFIG_LOCATION="$2" + shift # past argument + ;; + -i|--dan_ip) + DAN_MASTER_IP="$2" + shift # past argument + ;; + -r|--root) + RUN_AS_ROOT="root" + shift # past argument + ;; + --default) + DEFAULT=YES + ;; + *) + # unknown option + ;; +esac +shift # past argument or value +done + +if [ -z ${MARTe2_DIR+x} ]; then + echo "Please set the MARTe2_DIR environment variable"; + exit; +fi + +if [ -z ${MARTe2_Components_DIR+x} ]; then + #Check if this is a CCS deployment + MARTe2_Components_DIR_CSS=$MARTe2_DIR/Build/x86-linux/Components/ + if [ -d ${MARTe2_Components_DIR_CSS+x} ]; then + MARTe2_Components_DIR=$MARTe2_DIR + else + echo "Please set the MARTe2_Components_DIR environment variable"; + exit; + fi +fi + +echo $MARTe2_Components_DIR + +LD_LIBRARY_PATH=. +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_DIR/Build/x86-linux/Core/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/EPICSCA/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/LinuxTimer/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/LoggerDataSource/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/DAN/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/NI6259/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/NI6368/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/SDN/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/UDP/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/MDSWriter/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/RealTimeThreadAsyncBridge/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/RealTimeThreadSynchronisation/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/FileDataSource/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/IOGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/BaseLib2GAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/ConversionGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/FilterGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/StatisticsGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/WaveformGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/ConstantGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/Interfaces/BaseLib2Wrapper/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/Interfaces/SysLogger/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/Interfaces/EPICS/ +### Add own datasource lib path +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/DataSources/RandomDataSource/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/DataSources/NI6528/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/DataSources/JAEPICSCA/ +### Add own GAM lib path +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/ESDNValidationGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAMessageGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAPreProgrammedGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JACountdownGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAWaitStandbyGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAConditionalSignalUpdateGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JATimerGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAESDNProcessCommandGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAModeControlGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JATimedSignalUpdateGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAHVArmedSyncGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JARFONSyncGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAWFRecordGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JATriangleWaveGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JARampupGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JACounterGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JARTStateMachineGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JASDNRTStateMachineGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JATerminalInterfaceGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JABitSumGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JASourceChoiseGAM/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JABitReverseGAM/ +### Add EPICS lib path +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$EPICS_BASE/lib/$EPICS_HOST_ARCH +#LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/FilterDownsamplingGAM/ +#LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/mdsplus/lib64/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$SDN_CORE_LIBRARY_DIR +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/codac/lib/ + + +echo $LD_LIBRARY_PATH +export LD_LIBRARY_PATH=$LD_LIBRARY_PATH + +#Starts the DAN services only if required +if [ ! -z "$DAN_CONFIG_LOCATION" ]; then + export DAN_ARCHIVE_MASTER=$DAN_MASTER_IP + echo $DAN_MASTER_IP + /opt/codac/bin/danApiTool api close + /opt/codac/bin/danApiTool api init $DAN_CONFIG_LOCATION +fi + +NR_CPUS=16 +#Setup performance +#Disable CPU speed changing +#service cpuspeed stop +#memo:Redirecting to /bin/systemctl stop cpuspeed.service +#memo:Failed to stop cpuspeed.service: Unit cpuspeed.service not loaded. +# + +# Migrate irq to CPU0 +#for D in $(ls /proc/irq) +#do +#if [ -x "/proc/irq/$D" ] && [ $D != "0" ] +#then +# echo $D +# echo 1 > /proc/irq/$D/smp_affinity +#fi +#done + + +#Location of the MARTe2 application loader +MARTe2APP=$MARTe2_DIR/Build/x86-linux/App/MARTeApp.ex + +#Start with cgdb or with strace +if [ "$DEBUG" = "cgdb" ]; then + cgdb --args $MARTe2APP -l RealTimeLoader -f $FILE -m $MESSAGE +elif [ "$DEBUG" = "strace" ]; then + strace -o/tmp/strace.err $MARTe2APP -l RealTimeLoader -f $FILE -m $MESSAGE +else + if [ -z ${RUN_AS_ROOT+x} ]; then + if [ -z ${STATE+x} ]; then + echo "taskset was not used." + sleep 1 + $MARTe2APP -l RealTimeLoader -f $FILE -m $MESSAGE + else + $MARTe2APP -l RealTimeLoader -f $FILE -s $STATE + fi + else + if [ -z ${STATE+x} ]; then + echo "taskset was used." + sleep 1 + taskset 1 $MARTe2APP -l RealTimeLoader -f $FILE -m $MESSAGE + else + taskset 1 $MARTe2APP -l RealTimeLoader -f $FILE -s $STATE + fi + fi +fi + + +if [ ! -z "$DAN_CONFIG_LOCATION" ]; then + /opt/codac/bin/danApiTool api close +fi diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Startup/runECPCSub.sh b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Startup/runECPCSub.sh new file mode 100644 index 0000000..3254982 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Startup/runECPCSub.sh @@ -0,0 +1 @@ +./Main.sh -f ../Configurations/tests/ECPCSubscriber.cfg -l RealTimeLoader -m StateMachine:Start \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Startup/runEPICSTEST.sh b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Startup/runEPICSTEST.sh new file mode 100644 index 0000000..c141074 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Startup/runEPICSTEST.sh @@ -0,0 +1,2 @@ +./Main.sh -f ../Configurations/tests/EPICS_Test.cfg -l RealTimeLoader -m StateMachine:START + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Startup/runHWTEST.sh b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Startup/runHWTEST.sh new file mode 100644 index 0000000..5991673 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Startup/runHWTEST.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +./Main.sh -f ../Configurations/tests/NI6528_NI6259_test.cfg -l RealTimeLoader -m StateMachine:START + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Startup/runMain.sh b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Startup/runMain.sh new file mode 100644 index 0000000..623ae28 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Startup/runMain.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +taskset -c 8-11 ./Main.sh -f ../Configurations/JAGyrotronA_FY19_P1.cfg -l RealTimeLoader -m StateMachine:Start + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Startup/runMainB.sh b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Startup/runMainB.sh new file mode 100644 index 0000000..a6fb765 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Startup/runMainB.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +taskset -c 12-15 ./Main.sh -f ../Configurations/JAGyrotronB_FY19_P1.cfg -l RealTimeLoader -m StateMachine:Start diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Startup/runNI6528TEST.sh b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Startup/runNI6528TEST.sh new file mode 100644 index 0000000..ae06cf5 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Startup/runNI6528TEST.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +./Main.sh -f ../Configurations/tests/NI6528_test.cfg -l RealTimeLoader -m StateMachine:START + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/beamon_test_async_GYB.py b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/beamon_test_async_GYB.py new file mode 100644 index 0000000..90477ef --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/beamon_test_async_GYB.py @@ -0,0 +1,51 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +import test_async +import test_sync +import test_ready_hw +import test_setup_hw +import test_standby_hw +import test_ready +import test_setup +import test_standby + + +"""" +Test GYB operation with Async mode. +This code can be executed when WaitPermit state. +""" +# turn on permit +print '2.. set PulseLengthLimitMode to 1 flag' +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) +res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) +time.sleep(1) +print '3. Write PERMIT' +#res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SCAN Passive', shell=True) +#res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SIML ', shell=True) +#res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SIMM 1', shell=True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 1', shell=True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 1', shell=True) +time.sleep(1) +# trun on HVON trigger +print '4. Write HVON' +#res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SCAN Passive', shell=True) +#res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SIML ', shell=True) +#res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SIMM 1', shell=True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC +time.sleep(11) +print '5. Confirm generated pulse' +print '6. Reset HVON' +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) +time.sleep(1) +print '7. Reset PERMIT' +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 0', shell=True) +res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 0', shell=True) +print "end of async, non-prepro mode test!" + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test.py b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test.py new file mode 100644 index 0000000..82a2603 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test.py @@ -0,0 +1,90 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +import test_async +import test_sync +import test_ready_hw +import test_setup_hw +import test_standby_hw +import test_ready +import test_setup +import test_standby + +# +# Some EPICS PVs need to be simulation mode when we test code without PXI board. +# When user uses sim mode, new value must be written into PV.SVAL and PV itselfself. +# +print '### Start State Machine Sequence Test ###' + +print '---------- Pre setup for the test ----------' +test_setup.test_setup() +#test_setup_hw.test_setup() + +print 'Enter to continue test:' +inpval = raw_input() +################################################################################ +# set SELECT and STANDBY signal +################################################################################ +print '---------- WatiStandby test ----------' +test_standby.test_standby() +#test_standby_hw.test_standby() + +print 'Enter to continue test' +inpval = raw_input() + +################################################################################ +# set READY and CCPS_ON_REQUEST signal +################################################################################ +print '---------- WatiReady test ----------' +test_ready.test_ready() +#test_ready_hw.test_ready() + +print 'Enter to continue test' +inpval = raw_input() +################################################################################ +# set PERMIT and ON signal +################################################################################ +print 'Simulate PERMIT signal. State should go to WaitHVON state' +while(1): + print '''Select test type and push enter key: + 1: GYA / Async mode + 2: GYB / Async mode + 3: Two Gyrotron operation + 4: Mode limit detection + 5: Short pulse + 6: Long pulse + 7: PrePro operation + 8: SYNC mode operation + 9: GYA / Async mode --- operator set delay and pulse length on HMI + 10: GYB / Async mode --- operator set delay and pulse length on HMI + ''' + inpval = raw_input() + + if inpval == "1": + test_async.test_async_GYA() + elif inpval == "2": + test_async.test_async_GYB() + elif inpval == "3": + test_async.test_async_both() + elif inpval == "4": + test_async.test_async_limit() + elif inpval == "5": + test_async.test_async_shortpulse() + elif inpval == "6": + test_async.test_async_longpulse() + elif inpval == "7": + test_async.test_async_prepro() + elif inpval == "8": + test_sync.test_sync() + elif inpval == "9": + test_async.test_async_GYA_manual() + elif inpval == "10": + test_async.test_async_GYB_manual() + else: + print 'invalid value. Enter 1 to 10!' + continue + +print '..... End of test code .....' diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_async.py b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_async.py new file mode 100644 index 0000000..8f595b2 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_async.py @@ -0,0 +1,414 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + + +def test_async(): + """" + Simulate permit signal and ON signal from PLC. + Confirm pulse generation with async mode. 10ms + """ + print '1.set beam-on schedule (10ms diff + 3s pulse.)' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 10000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 20000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 30000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 40000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 50000000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 1000000', shell=True) + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 10000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(1) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print "end of async, non-prepro mode test!" + +def test_async_limit(): + """" + Mode Limit Stop test. + Pulse lenght was set to 3s, but it stop in 1s because of mode limit. + """ + print '1.set beam-on schedule' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 1000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 11000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 21000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 31000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 41000000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 3000000', shell=True) + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(6) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print "end of async, non-prepro mode test!" + +def test_async_prepro(): + """PrePro mode test""" + print '1.set beam-on schedule' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 100000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 200000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 300000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 400000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 500000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 3000000', shell=True) + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 10000000', shell = True) + time.sleep(1) + print '1.Set Pre-Pro flag' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-PREP-MODE 1', shell = True) + time.sleep(1) + print '2.Reset Mode 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 0', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 0', shell = True) + print '3.Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(2) + print '4.Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) + time.sleep(4) + print '5.Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(3) + print '6.Reset Pre-Pro flag' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-PREP-MODE 0', shell = True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print 'end of async, prepro mode testscript!' + +def test_async_shortpulse(): + """Short Pulse Mode test""" + #print '1.Set puls length to 1ms (1ms diff)' + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-SHORT-PULSE 1', shell=True) #Set short pulse mode. + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 1000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 2000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 3000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 4000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 5000', shell=True) #Should be grater than 1ms. + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 1000', shell=True) + print '1.Set puls length to 100us (100us diff)' + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-SHORT-PULSE 1', shell=True) #Set short pulse mode. + #res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 100', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 200', shell=True) + #res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 300', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 400', shell=True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 800', shell=True) #Should be grater than 1ms. + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 100', shell=True) + print '1.Set puls length (100us diff)' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-SHORT-PULSE 1', shell=True) #Set short pulse mode. + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 100', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 200', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 300', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 400', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 800', shell=True) #Should be grater than 1ms. + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 500', shell=True) + print '2.Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(1) + print '3.Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(1) + print '4.Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '5.Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print '6.Reset short pulse mode' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-SHORT-PULSE 0', shell=True) #Set short pulse mode. + print "-----------------------------------------\n" + +def test_async_longpulse(): + """" + Simulate permit signal and ON signal from PLC. + Confirm pulse generation with async mode. 10ms + """ + print '1.set beam-on schedule (10ms diff + 50ms pulse.)' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 10000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 20000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 30000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 40000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 50000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 3600000000', shell=True) + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 180000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(185) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print "end of async, non-prepro mode test!" + +def test_async_both(): + """" + Simultanious operation test. + """ + print '1.set beam-on schedule (10ms diff + 500ms pulse.)' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 10000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 20000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 30000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 40000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 50000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 500000', shell=True) + + res = subprocess.call('caput EC-GN-P01-PA2F:STAT-DT-HVON 10000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:STAT-DT-HVON 20000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:STAT-DT-SWON 40000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA2F:STAT-DT-SWON 50000', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-DT-SHOTLEN 500000', shell=True) + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(1) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 0', shell=True) + print "end of async, non-prepro mode test!" + +def test_async_GYA(): + """" + Test GYA operation with Async mode. + """ + #print '1.set beam-on schedule (1s diff + 1s pulse.)' + #print '1.set beam-on schedule (100ms diff + 1s pulse.)' + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 100000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 200000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 300000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 400000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 500000', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 1000000', shell=True) + #print '1.set beam-on schedule (10ms diff + 100ms pulse.)' + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 10000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 20000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 30000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 40000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 50000', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 100000', shell=True) + #print '1.set beam-on schedule (1ms diff + 10ms pulse.)' + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 1000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 2000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 3000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 4000', shell=True) + #res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 5000', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 10000', shell=True) + print '1.set beam-on schedule (1s diff + 20s pulse.)' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 1000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 2000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 3000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 4000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 5000000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 20000000', shell=True) + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(30) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print "end of async, non-prepro mode test!" + +def test_async_GYB(): + """" + Test GYB operation with Async mode. + """ + print '1.set beam-on schedule (1s diff + 1s pulse.)' + res = subprocess.call('caput EC-GN-P01-PA2F:STAT-DT-HVON 1000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:STAT-DT-HVON 2000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 3000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB2F:STAT-DT-SWON 4000000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA2F:STAT-DT-SWON 5000000', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-DT-SHOTLEN 20000000', shell=True) + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(30) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 0', shell=True) + print "end of async, non-prepro mode test!" +def test_async_GYA_manual(): + """" + Test GYA operation with Async mode. + """ + print '1.. Set delays and pulse length on HMI and set sleep time here:' + inp_val = raw_input() + try: + sleep_time = float(inp_val) + except: + return + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(sleep_time) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM 0', shell=True) + print "end of async, non-prepro mode test!" + +def test_async_GYB_manual(): + """" + Test GYA operation with Async mode. + """ + print '1.. Set delays and pulse length on HMI and set sleep time here:' + inp_val = raw_input() + try: + sleep_time = float(inp_val) + except: + return + # turn on permit + print '2.. set PulseLengthLimitMode to 1 flag' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 1', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 1000000', shell = True) + time.sleep(1) + print '3. Write PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 1', shell=True) + time.sleep(1) + # trun on HVON trigger + print '4. Write HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 1', shell=True) #HVON signal from PLC + time.sleep(sleep_time) + print '5. Confirm generated pulse' + print '6. Reset HVON' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R 0', shell=True) + time.sleep(1) + print '7. Reset PERMIT' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM 0', shell=True) + print "end of async, non-prepro mode test!" diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_async.pyc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_async.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f899918b0c2bf4fa267029b3508985b2028ac207 GIT binary patch literal 18679 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 CH!=4B literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready.py b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready.py new file mode 100644 index 0000000..72089d8 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready.py @@ -0,0 +1,38 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +def test_ready(): + """In the WaitReady state, simulate READY signal from PLC.""" + print '---------- WatiReady test ----------' + print '1. Simulate READY signal. State should go to WaitPermit state.' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST2R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST2R 1', shell=True) + print '2. Set CCPS trianguler waveform parameters(1V, 1Hz)' + res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-AMP 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-FREQ 1', shell=True) #Hz + res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-AMP 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-FREQ 1', shell=True) #Hz + time.sleep(1) + print '3. load csv file.' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-CSV-NAME test.csv', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-CSV-LOAD 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-CSV-NAME test2.csv', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-CSV-LOAD 1', shell=True) + time.sleep(1) + print '4. Simulate CCPS_ON_REQUEST signal' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS1.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS1 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS2.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS2 1', shell=True) + time.sleep(1) + print '5. Confirm CCPS_ON flag and triangular waveform generation.' + print '6. Simulate CCPS status PVs.' + res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-OP-V-DIFF.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-CCPS:PSU2320-TR 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-OP-V-DIFF.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-CCPS:PSU2320-TR 1', shell=True) + print '7. Confirm PCF state changes to WaitPermit state.' + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready.pyc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_ready.pyc new file mode 100644 index 0000000000000000000000000000000000000000..68b2851b04e48dee71d4fc8c763069e3f1127910 GIT binary patch literal 2241 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 gMd0o>B?bFEbP2iVD>(*OVf literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_rup_confirm.py b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_rup_confirm.py new file mode 100644 index 0000000..3f14868 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_rup_confirm.py @@ -0,0 +1,106 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + +# +# Some EPICS PVs need to be simulation mode when we test code without PXI board. +# When user uses sim mode, new value must be written into PV.SVAL and PV itselfself. +# +print '### Start State Machine Sequence Test ###' + +def test_setup(): + """ + Setup EPICS PVs for testing. + Turn simulation mode ON for unavailable device + """ + print '---------- Start setup for the test ----------' + + print '1. set PVs to simulation mode' + #res = subprocess.call('caput EC-GN-P01-GAF:STAT-AI-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF:STAT-AI-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DI-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF:STAT-DI-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-MCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF-MCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-GCPS:STAT-SIMM YES', shell=True) #turn off for GCPS test. + #res = subprocess.call('caput EC-GN-P01-GBF-GCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-CCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF-CCPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GAF-FHPS:STAT-SIMM YES', shell=True) + #res = subprocess.call('caput EC-GN-P01-GBF-FHPS:STAT-SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YFLT.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YFLT.SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YFLT.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YFLT 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YFLT.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YFLT.SIMM YES', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YFLT.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YFLT 0', shell=True) + time.sleep(1) + print '2. Change SCAN mode from I/O Inter to Passive to write sumulated values.' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1.SCAN Passive', shell=True)#SELECT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2.SCAN Passive', shell=True)#SELECT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R.SCAN Passive', shell=True) #STANDBY + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST2R.SCAN Passive', shell=True) #READY + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST3R.SCAN Passive', shell=True) #ON + res = subprocess.call('caput EC-GN-P01-PMF:PSU0000-TYSTA.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:PSU3000-YSTA.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:PSU1000-YSTA.SCAN Passive', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY1PRM.SCAN Passive', shell=True) #PERMIT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-GY2PRM.SCAN Passive', shell=True) #PERMIT + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD2.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD3.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD4.SCAN Passive', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS.SCAN Passive', shell = True) #SYNC/ASYNC + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YON-CCPS1.SCAN Passive', shell=True) #CCPS ON REQUEST + time.sleep(1) + print '3. Set pulse length limit mode value and state.' + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD1-LIM 10000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD2-LIM 100000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD3-LIM 1000000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-MD4-LIM 10000000', shell = True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD1 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD2.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD2 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD3.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD3 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD4.SVAL 0', shell = True) #Pulse lenght mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-MD4 0', shell = True) #Pulse lenght mode + print '4. Set other operation modes' + res = subprocess.call('caput EC-GN-P01-GAF:STAT-PREP-MODE 0', shell = True) #Pre-pro mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS.SVAL 0', shell = True) #SYNC/ASYNC mode + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YSTA-MPSS 0', shell = True) #SYNC/ASYNC mode + res = subprocess.call('caput EC-GN-P01-GAF:STAT-SHORT-PULSE 0',shell = True) #Short pulse mode + time.sleep(1) + print '5. Set a beam-on schedule(10ms diff + 100ms pulse)' + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-HVON 10000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-HVON 20000', shell=True) + res = subprocess.call('caput EC-GN-P01-PMF:STAT-DT-HVON 30000', shell=True) + res = subprocess.call('caput EC-GN-P01-PB1F:STAT-DT-SWON 40000', shell=True) + res = subprocess.call('caput EC-GN-P01-PA1F:STAT-DT-SWON 50000', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 100000', shell=True) + time.sleep(1) + print '6. Reset PLC INTERLOCK' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP.SIMM 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP.SCAN 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTRP 0', shell=True) #CCPS_IS_OPERATION + res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP.SIMM 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP.SCAN 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP.SVAL 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GAFP:FMC4310-YTRP 0', shell=True) + res = subprocess.call('caput EC-GN-P01-GPF:STAT-RST-FLT 1', shell=True) + print '7. Simulate SELECT signal. State should go to WatiStandby from Disabled.' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2 1', shell=True) + time.sleep(1) + print '8. Simulate STANDBY signal. MCPS, GCPS, FHPS rampup must be started.' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R 1', shell=True) + print '---------- END setup for the test ----------' diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_rup_confirm.pyc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_setup_rup_confirm.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b3a9917f8c94fdcbe8fb3564d998bf88d480af90 GIT binary patch literal 5717 zcmcIoS$En-6c%>K;>O*RZb>_hvp9=DELrNNNwC0}hD8S{$ssSUjK)Se0uhbm9zXP{ z{TY4gFYGz}0qva;AO>y>&N;agKA_+H(CW{tqdq+v896{Dt`#CXZbfgg|%ws?1Nm=Odk z3I>F^{m8RJ*B_9+?@-ce3Su;{k8Ibo_dQA+dgOMgFku<+u1-Fq=Lr)%3I9DR`XCdE z%C3S*E<=DM!U+A@KG}6(bnRgjl8UZYo2sD|)M{yG%d|?CTCS;Pt!KD?cbrAS{Qp>hT zZ4gq(MSrX~zx*|Dp(bIG$VTdrBioB8%dk8mMAb02jJjUToO^k*}XGjZ8wK}kBe4=2Q zjCMngZaKUBoSn9yKR#8B@=RJRXEc)(%NZ5qVJ&A=l#Lc;EuUMpVVLGA%|LoxH_RC^ zvY=og!=Dpm7s*m6Ssvat|ksMvwPzdxj0SM(A|7`1DWJWywlx4qfYjl5goQ@>@hL#7;@<} zj`K@9hI~7Xg!W-?1p*C9O3V6D= zNd9C6#6jX&HZ@;k18|Ne?>Gu`x7D^(<3-)%aqyLRKOT`y_Nm=hp+I8Y9(5v*ZsxQ; zBaVA;K<@Hnha0hgZlgIbN(YDnN*PPteF+8DyVr-o_gIOW7i$TN+<;wQqVjSEUv`pP z^A&_pd^eXr8ODAE_rBnw={^<@Mh5y>^~z{)8oLYvKFE+Z6?I=-C$*+kY1do&b5taG z;k1p6sQGeBa(Rh?k9^*5oHo}M<(btsz$I4OL1k)e?KJda0m_dK@W!z&NsfbEk{m~i zRgH6DK)Cp*M$_3gEfs2Ak`o2mLrCtp^oJ6yQm^P1l;wv5+XGy@9%4N|@*HyL^Xlvs zEM|ZQ&i*kGWn9^1{A}Q47OvQ-0*w!5@sv&sfV*fr7;{Iv?DEd@;Jgeu@Mu~FtJExS zcP2VCbi=$ys-oT5HB1uN{UIEw`VqV*+lOM6zf9v2++CPVqjb2*Yxi&! znt+PDS9ppl4Bj~^*`D90*{<){T@_A)*+!{t(Y&~P%R=?=IPk;3AE*a5+;#l{+;|=h zviyzW9-QW~{M@-G0^bXw;T}*9+@PNs9*anmU)On$fAW6Q>6P^ArPQSh@Rk17Q)%g5 z{x!ZkiIZ5*vS#mNU-NwNVztdR6>_m-*5=x^&p{(JOPc>%z4OrJV>n#FL+J^hI>v#E KDfl~^UilAY04VSP literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby.py b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby.py new file mode 100644 index 0000000..6d3b3b1 --- /dev/null +++ b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby.py @@ -0,0 +1,73 @@ +#!/usr/bin/python + +import time +import sys +import subprocess + + +def test_standby(): + """ + In the WaitStandby State, simulate PLC STANDBY signal. + Turn on FHPS by push auto-on button. + Turn on SCM PSs automatically. + State transition condition is checked at last. + """ + print '---------- Start WatiStandby test ----------' + print '1. Simulate SELECT signal. State should go to WatiStandby from Disabled.' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY1 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-CON-OPGY2 1', shell=True) + time.sleep(1) + print '2. Set MCPS rampup parameter(target current, sweep rate.)' + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET-MI 4', shell=True) #For A + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-TRG-SWPR-SET 1.5', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET-MI 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-TRG-SWPR-SET 1.5', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-TRG-CURR-SET-MI 4', shell=True) #For B + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-TRG-SWPR-SET 1.5', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-TRG-CURR-SET-MI 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-TRG-SWPR-SET 1.5', shell=True) + time.sleep(1) + print '3. Simulate STANDBY signal. MCPS, GCPS, FHPS rampup must be started.' + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GPS:PLC4110-YTS-ST1R 1', shell=True) + time.sleep(1) + print '4. Set FHPS rampup parameter and start it.' + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-AUTO-TAGV 6', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-AUTO-RU-TIME 10', shell=True) #in second. + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START 1', shell=True) #in second. + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-AUTO-TAGV 6', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-AUTO-RU-TIME 10', shell=True) #in second. + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-AUTO-START 1', shell=True) #in second. + time.sleep(10) + print '5. Simulate FHPS, MCPS and GCPS state.' + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB.SVAL 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON.SVAL 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB.SVAL 3', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-ACT-RB 3', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON.SVAL 4', shell=True)#turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GAF-GCPS:PSU2130-CURR-MON 4', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV.SVAL 6', shell=True) + res = subprocess.call('caput EC-GN-P01-GAF-FHPS:PSU2610-MEAS-ACV 6', shell=True) + + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB.SVAL 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-ACT-RB 3', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON.SVAL 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-MCPS:PSU2120-CURR-MON 4', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB.SVAL 3', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-ACT-RB 3', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON.SVAL 4', shell=True)#turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GBF-GCPS:PSU2130-CURR-MON 4', shell=True) #turn off for GCPS test + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB.SVAL 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-OUTON-RB 1', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV.SVAL 6', shell=True) + res = subprocess.call('caput EC-GN-P01-GBF-FHPS:PSU2610-MEAS-ACV 6', shell=True) + time.sleep(1) + print '6. Confirm FHPS and SCM ramp-up complete. The state goes to WaitREADY from WaitStandby.' + print '---------- END WaitStandby test ----------' + diff --git a/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby.pyc b/EC-GN-JA-PCF/target/main/resources/qst-gyrotron-fast-controller/Test_P01/test_standby.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bc743004c50155ca829c523127ca3604fc816cd4 GIT binary patch literal 4531 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 Axc~qF literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/JAEPICSCA/JAEPICSCA.a b/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/JAEPICSCA/JAEPICSCA.a new file mode 100644 index 0000000000000000000000000000000000000000..3c1ffd9c8c44279c32a3b84f711d0f274de417ba GIT binary patch literal 570944 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� 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

@oAJix;zdw80M=X-dmhu3>}i-#}s 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

RUo6H9rzxFcEOyvVF~&HJ zRA|bh(qEz&|GD8eDt>l2$hi%d$w<;_-+&+nm@fmujcEC;T8qf{f_+xX1nPBVqjl13Bz(v z9P<&_f9`Y@_d3Q-<2>oGqsF{`n3Voi>6eg~Odc97P#iz`h&&VH*~liv&-8@b zU_;>OfN{?|&6rIBSB3g^P~J@a1fbBCLkwlowBUBDAHaDr5 zQ}Fw(@<~vfA1d$KDV}x3w){K!T-Kbt8ig(AyZzzTzz{0E1v*!F_CY$M3pBIJR|@|q z;Hwm0$&D)NDmB%^^F6%G!|Oe~#lx3-_y!N(?cql~{IrK(_V8OC{=~!IdN{Exv%HNx z+{VLQJlxO2!#q6B!;3w<-oslwe5HqP_V9ffxRlS{H{We~FFsyh1^O!Ws|=;9)H5D_ z)x%$S_y-Ty!@0)oB+WeB*27&r+|R>9Jv`IHxmojQXqZ;T9fl@8KRE9_Zl_9v6`%Z}ad@58vkD2R;0xhoATG>mGjJ!(Vuq zZ=t*GTi?SiJ>0>=Jv}_w!y`RB-ow*9Tfv`h z{Hcfk<>3@&g>L;e^>AAcck^(64U*O@(Jba^v@AL2z9{wK> z|JlPId-yvKXZOjhzt$e^>fu2i9-V=&R!7X$bK$5>0@X-$Y|tb--k^1Z(^@oAxh*i~ z?hs^W9|IOHk{W`<(~#ytyurZiLD{34;F+iqO0e@0Wpf|V`f^MSX4YIRo zqQI}0W9|FHT{d7!yCbaM44+WLO@%t*qX92F8fInK=XQpDeh$9eG(c%f8Z@?<)FEtQ zGO07F$&glqTjj%Z(;mT)R$@@6tih-zjI5ckSQyJ{?inJV79Oh(o;t=5(%@FisZ|dJ zw^AW=+dF%3t0J)TSb#prqcx%wDV6hS7gfa}Vk@N&ZK;KoiYC(Rkc~w%Hdcq(wg8pK z%5ImB?D}W-MmgI@0qJ1q^00^*x-4o!K?it1*tj*(QwY{nCs#T0aroYBJlQn80Tqp} zrJI^UH(;&f)el=4l-upfG9)9)v@! z7LJRs0ft3PT_XH}_`Y(K9v4IL+1$fLg_+6m6cv1gwMFOE2gvbO*Y;=K&?8+zY4&1AJ}ucHT;=Ea|t&Xlp3CrZQB;b@~9?xd*PL&OI@;2u?1e>DDBqk%3>c#4fe zO6WJzID3%V3J8KzGi}1y$Ghy1d75UjcZ7vv;HSH~VdIAlGrM zG0~gPh|HtjikFZrTZ*Fl3BD{MgP9x~_;Q~M^OIP*Wf-U}96NA6&1D3^^boRudWe{j z;R8X=3>p79Z(+(EF55qbIs{ywo;?yD4f#{y|Dlu=Jv%|V_q}Ep5GFv zgeNCG(3SR3$2V!D8Yc@|7B#tanDqYzb>sl<(<%n#vK~RG05Mh>5D&`MCfmtbL>GhV zw9VE%c5!HpJ5wat|2Z5k>7jZxDQn>6RZ%DC)r9#h6))MLmu1FO&Y{aG3neQu{U8Lk z@XAP^-YNm*$YaiD=>WZ)SLqBrZWXy9&-h*)6@$LlWMgK~811`OMXg1_I>lw<>qD-D zzJbUNIA;Ut;-2I1X?w0%v7ZxdgeT^~l2wa@N9ic3sPiB@tpz3L3&nerCJ)pztuIh4 z1TDfk+pMBils4NUD!QDelozU~&gf+;y!L96kEu?LjX-x)N-u(gc!NHzGF)7YY%-X9 z*N=6??#-@>H95e?OO)G%Dr-P*KlfZKV_s1=I?g$q*9&K2|9`F}{gQ1O4!Hk+t`$yS z|NmUe&NcTx*Rm%@oNmKzbhI!{?+Tg6xSIL|nlb<4=uoJqP(w2(aKoYl7_%$@JDwir z`i#2qaASb+kVkwp-@?f|oG0iRmz|cJFoI*cvDwes^fes(sUpuoEEjTqS7aD=epl==@Y$vi z>eD8D;FCDvj7Ycc+-QC`&z;}R*8zp|yOMBzR~pXm7KHP=GS2T7hV#2cJew|#=6B`p ze8$Z0mT*23PBki`nSspjmhLsbTP71FJHJ~VT4U*JG%>;qEOTCF^1?(+Pk8n*35z^% z9#9npBh!@CQS@e(k~#S@0|8Cf$&4nN@~r1{#vDxi+L06@nzpjLo*mA3%*;yWWX6Op z&vjf7ZxkotoT?hgozR*9&kLQ(r1$)ceC-T-ld$#Nsi=vuyda!rnQ7c+nNDso6DU0~ zyfD;}$>mmPuplx)vxDMAW?FbLboB&|lQ7*1mp~RyEVoM#?lkdIv82Zx%tr=5J*B+N zDHW^YavO*4+vHsVe;KnsI!f<7CA?B>qbcE4z=DgB*6)Ovdmo1xDzOZaTaal#d zn0aMOR}}Q!&a7DlEBg1F)~`?Z^5UYoGb*~5N|9OJeZvL_GFoHiys&Ju78cEz)xBSj zBMXWb&6~9(QvXq{R4}xB*4%j&sIsMKLb8{Gqbg8RP54?S@S z)^ws*&MU*8w?G#!owtA$35tF7*ts*xXUwW7E}yrg0#(^#E)I-fczOB4a!NHEKW{1e~2&MPe{E{9GQ?qrp%G;#p+tEEz_MaRvkm@!IgFsETlXU`T3Ob$jY zEMG9A;<(}^v&!c!s#r)rI3P!z?CNN`xJY+YI)b4F*v~7QqdCJ@%qm_~F>hhn$Qflt z=yc%X9D2gg;bTV~d+M=6PhMKFXlX@{S&L*bi_ez3^JB{w&MIEA#FiS7j4xiWsB}g} z@mN&Qf@0LrlG9O3v**p4p@T&|jbPOw+Zm;!$|{QINXB5}&%zE{xUjT%Mi~Opc-)M# zIi@zp6{8A@%VrgihZL1{Z0U?8OU4z?K?9Vp992=g!0&w_(c^kXN%Xx1Z0L5;?2%u7cN*d50%Jl zD8Crrf6UU6#0j0KCJgFbP5aanQsjMC$ZXU{8}$GmAt4EmQ~D{huFYpKP_4|19e{{UHrruWi#d!bHIfVJ!@~H5%WsX z^4hePl0bm?2hYTjP|;#Uh0;mM;~0Wa8`+gi8{su8k9tD@wWoCA&6zE#5>r> zUdArIJ{H57C@bcw{Sa3t#FBfl*Jstr{;%5EdunGtm#Edr|J2T|N!F^pt#fuRRJ?ZB2Spx1xKU|CCtAzS2HRhFfKTj3B z`^qb?)S~f45*ni)zJ0^HwFoz)LSbrjE#fb%xEA4tY_(xSE&Ofd-+ue;8*G*-w=5s3 zy{g8So2senn!SlOHM!Mu`FF-uyk4xQx;j;mYG?ix7`lm$F5A_=HA_AGx#rh*`B%ji zs-RO7^a45Hb6nx|aTpn^2CiV;-i7hyrZ5d%vm?}RVU9pIDY>eO7XNlOHW>?2f*V)C6 z5oT;2e^hKv=rQ7WSyDWv})z`mEOIzA4ZTEZ5ec#``Goujp-~WDWf*(h}-~HWt z?z!iE&Rrcog}=RPb@-WAkG%Nq%!e``8u^~g-S5Q|-KJFfVlJPa1IgWpfbm_N!nHSQF572MJ2MG=O zj{}dvzlQeRy6+<&{7UBI4gSaQ^;hjX`4u_Vs|4sd`@ix={#)i__+xnZRYMwmU(4Kk z&+yECFr~v+@8!2^?D5`e#`{X+p4H4J?ioI`|EpgWAHRWjEOU^SxH^33>U%&s!%O>z zUnF<*MzN!L{$t-+@lptwxqIKp{jWSe^0DO0Bky}9$ww?5zYo7^-^lML?;LsHm3NO^ zmpMMNg#Ujm$sEtT`MsCUpS*Pbd71N>6RVk-H4yOG=Y8eA)%Tu#UgpI4lfyUe&uoj& zouQA9?8CHH8IZY~#@#pk?ES-I*NohmS;<_Td0b}ov)?!ma{c_pgCN&;4|OlyGbaAa z9GbxazXVPvhBK6Vbq445f#DrRYcCXwHRSt6egh}xk@sVos}GzVKD>Xpy8rA8?-_pc z(Ei~c8G79C4-fG_e+B>ifuU>UCvFo1ti9yap2 zi_nKfoF;eLSE_5&Y9ale)^@&4WWyU*2y+ z|2`S|vXZXO5AMRYZ3~=UZNKmr$wD#Fo#CS2v47wU z_N`>-uRc5bnoKq$m4d)DW;0{aDe9l~9<}#RAF6MD^>^%*_}|Q2{W)u$>7P1ic$|&# zUl<<3PCR@61DO-d##oH8bj-XHfRTNdGW#ERU}Sf=2%RglA`~TOgwG8PeK7M>5~4%6 zsYGhNsV9Wy>wy2!sCSO$`}Idi1r^F<=B!izA8$|kPm-Y>=zFi{Z;~Z9oDoyLbsxmw z{{Y~MeYfL+oZ*M1n9m!Ahd%gfes6`}<3-+%zmDu91dL?fN53~S=im6Fmqwn_Ju4RM zFol0MLwv$s2+7qEdm-=QncgUsh8`g!b9XjfwJ!47w$!3^SU_YtFb>!sZg zo4^;|G<<4*;GAJ!-h^!*-bbtp+7y1jB6I((`|b-o`_FAYdnHI`>p@VNs~!LkVz*n5 z9}TpHMBev^p`7P|GKXP=S^R5$2Ufw;e)JyR!%x5Up5PunghTBWan6!r)M}x?VOd`U zqW5RMBFWN`y03%4KY2DI%-FQF|M&y{b$D+7jMTuKH@^tK*axLU%K5<`;Ri&?`^XX+ zrr$;sCv=|s^P!<{WY#kGW)AVwfsbd_Lm$30JR}v^KYj{@5nlo~@Ba_Nh~GvKsduPr zk5Ni{uz{mw-=WavcP>h4MUllK|1SzzikM>0AhU(o!^Qg6P6NTUfj8TxkTliGkZ3S= z`)$TK!vP*drQ8501vs1aI>o&ZGjhUo03mW{Vxjm4;*?%26hJ2y3jPs@g<@zc7K&%m zu}}cLSSTQYSSTWXUWm*Og<63#KN5<0{2z&g5>`TyP{17&QzR6yevwc@UnmlaS9K&5 zF*y|iMclKC&?Lr2xYG-d;%8ME9z{IU504`Lmky8OD|UDk6cY@OB90lLIVU^{>QmuS zjB>it=`OUJNR?Qf-R{;e6zdy;3I~guKE{ok<}cK%9F;8~H2~vW8Jx}(e)8B*Y!q;; zGagU{G4=?k;?-E(6!fa&ra=DXxar8{xT%SoI`Pzdt{A#>pU}D;_)kRO2)^AXl}6|J zU!d`&&(#Uc9v(U?! z^bI(AD>{zB;-u^E~mK6TGwo!p;w%ocjS`|K~DL=zy(&uoDe+0>aKu zf&pRY2|pn0{4gC5c7E&!gq&5D@l%E*IkjM-Cui;hsy|nNK`0{&A)+8A3$FDf2YMi8K3) z!{7IKgo&s2Bc6u;_@UwNC3gYEZeMgw<{re4->7~e}*nOpaLnE(9CeVMV5wul?c z;3tKQNBHlENnIs=gy3H*bJfUI!{0Y_#Z@Cu@7|5*&e{9%Q~Fot?iKvA{7w-;esHnk zXUeHRAF;GhbhzR~hfnJ0a9Ko$pZriohadIM-hp6>f(Pd%pe9?+^6~ z{hB!FHG@WeDaiXF1bIJ-An(t6LEhg>-nlxQyBa~@yGNdhAn!T+|DzP>{jq4E_avgS zGR8YjBssM2go^O)8@}$EOf_>&X7vt4gP(`c?o}hNdF4US(LW?z5YmaveQ*M7%ZP)? zMp$?pV!f*$9RB|O>PK!+cNX-MX$;RkcKA8_pNqVW+bDPA4?d$Fb_2I~cw}1yU=g;x z@_xjbw=+-2ckzh_hI9MrzpRe(pFjVhk@9;ozc%tDWK3K&^399y#B6_X=wmVveg5RY zf!_16K<~a#p!Z3=0=-ZEb^^Umk%8Vv$UyI-9$cVzzYO#~cI2-wBG5bX;o{gT2mh z(eKzla0W{Sdjr$Z0o`6d>pg1kpY|HJ*U$V>-C(c(Q#aU~{;3n}b=<-aD%k6c5DfOF zo)FP82W$m<9Yrx1?0tf*UR@6MCL@SLd|jzX|p}(WaMFu-Ex%AlRGw`TuRf zUWc_>oZ5lgoYjdv?KN=ajQSn_nlsf{m@EeW=N4T3=Qf{jYwJN!RmK*GKr0$-Az0R9y>7+U9|>3M)g`=HD95U&mLatRF<1{s+YpN@P(Tjt;*K!T)QhivVzL0 zCRan@5gISB%33~~-D+>QYGqvU+TOw-(M9C~Yl=QRna>}?SLat&I`ys?^=uedNAmgV z&N3dkMdG*9SVh_0RIRp!vOQ}$hn-;2bWV&KSkrF)*vq#Y^=^5tGUt4HLc~%ERV?}x z)%{^(f%5!fHCYx&G@m=dv6*A1wl|wp7g*0PoZVSZTJ7#^rSmfLn7{L5>2=FxPx#@x zQ?!EC{7RA6+d=rLwSy|W(_8J0{ARnlMjz2Q)8Up6u2)ZR(h$|Ok8}Dwj5&ujd)SFrXD6^p8bXH< zPkZ#?O-xUdNcP6jNzAj*+5y?uL?LGZXQPX<-}+YK^8Vws_BI&nNwDS9+s&qCs7xK; zO<3vnreUl*o87I0UNQiJr?pahdV34?z}>latxk9k@G78NNEc1@&fex|Z?ia2N3eQN zp6E9sTaJS=ohz&p{i}6bn?K;7+YO@*4{vP{CO9iGV8Rx2dYMnY~guG8GYzw(56SLqyb(DCa)?xJBiH#gNE>*ZP%E< zNdDuc00CTp9H-L+yth`R#8Ri*qvzb=?Hfmrfr|CcAJeG_*&`sz*+vypsaM;rT1V`K zT!<%asZGi&2S{e*L3v%qO8i=-@;Vi4ks<1DtUQp_*QY#P$xWX4ai&SV|fks6L< zoe=N2?7&@tmDzc4}dp=E&FOv;EO=8U;?P72NR8s7Sby9!$z86k+w8j z5UN$TQhgcgulfzpj3-~$At|7_DT#^Z2=-+5qJyw<6VO|av%Y-OO(`K|XkBpY!`mlE zPbTxwh*p~IJ4gV9Mr*cPtE2pzX7*sx)(OduJ6a=aPg$Qe<@2XJ*<zkbhCfWa_t*evP;T|*^;bs@i`M|VtB>Inqr32XuhM|R3 zZ=5Zcd^HUnrGo;VZdy>}>2!~Kutb;+-S!=oty=lc`c^xFghqZ6<`1czy8;V}!+IkM z)fKv3RNKgrx}ixpcdQD=NgXHZwLrdAK9MR5%{xA3c0!C9*gfosC!fQ-Z!JFw#>yHp z7MQ=V*>17mm!=pdtX4cmJ0mjwCZ{W{+qTfB#>Gio#KNv5O6yFc1BqbWI2@I3S!_e6 zyW51Or9@7mrRXwRmL#*qTgub(bEgZ7vxGlA9fN67CP7Vt(s7=)H#gD4s9rl=CpN*X zK)&TrA#-UyA?waMjBsLkh-MvY_&F>n%Cl?2{HoEZ)>|3I>$-zi$N<{OLT!#%6EACn z#xPU zch%9`<7~MyIUL!x1;qpGnp_f^ANEo!z!*bDl;S~9RL-><1E?pJ{NY(RXeyOt!!gYb zDU46IH+S=k#cY{SIkmM_*|l)#@%k)ecFKT-ZNAc2C0i8sF$ve@O2?6n2HSLsuze0{ zn3N{QBOiq#0TthQL8Cpq(~bPmyp}0~mjq;muMCX`7DilQA)h}Rl&*qqSfG+C!BJDK zwFH&Hm3%HM{8MxFRiJIh@>A7!8a3p;UeJaW^QO|`(%dw&sk!-L;g-3nnWVi94-y-? zto|)5v2|c@ZIlK~^2X7eVB_*oP2f3*u}X`)ArL7Br>@%D=1`~+8QCM=b_>=f&zW!OD8k3;w}Bz{SO$31 zZpsNrPml9ElNR2BXsOu8xK859avB(%2jA^uF(^-jAa(N5DX-vZ?bUlO> zgpYF#4HV&;5a&Y<5K#F_jq1zT&7^io`+Sd;wkoa8CJbaD3gCKGyDrU0<1eL6k^^Kd zg>76q+IyBw9ETqjz9X|qW12S);JnRRZkYTc9T5LegIg`bS-k0R2%u7`x+H&K_4?vO zp#u+szrfQkc0vf*2u+e*$~4(=D_v^S?9ei9Gd>U>1y7k36`V>NTvXja@?x`#xjfIpH*;cQI z;d9iUxM85Ak&JM8S zmhnM7bsRn~SFUG6F1N9Qj-X-l5JO|SkYAouv)0SgA$!uY+yo89}q+^^| z8){EnoG#aFP94!fRf^pnN>ZtWhKrT$W=}goM;M$?V4|Z|wDkhFT8!ZYkuO~M!$DF3 zSwu!JpL_6f44{N=WUL(RkYkmn@G(vs5)ew(VGOedc)Y4R#2SomnkefGh%Q;)?bbzn zG2N~6xHR5^8fa3SK9fIHzGZQ0ZfRy}u~0f+UMh0Em~2c*TOUM=<;ekRcos6g)@apK zKvBptNqWWzrufCF3YnsCD3t5cLy#S#5FjvXg+`3wBIpQa3z6vQnfa-{QD>Jh6)U#s zF>)GVfr!&+xJ(Z}#29-Z*v!Lm+p5$W7pyHZ;REXs1-asi(5Y8elGBZ?j;1s-dcOf` zJx-8biObj~z}WmSEgK;G+su6a_WU$`HiRggesU=bOxa$ScC!Yht<|biw5Wl5JB8cP z9w$uUFv`CN@+kB&pes&ru+VJ6&}zLpHAf*TPA>>3t|u3D^p4d{<(;~?H&IKn0LMitJ4P%sTXW^G$F|9-;z%|CZi{6q+{o?RnGgT$@k`)3zp5?=*-pc;E0Ds#onag!WBMP$|_MOe1l_0OafpU zc2vh2C`?Wm4ne;a4*G=%082cXV83hgt>&(biU=Q>R#L5R_?ozKlPfy`L}OP#XU8b8 zR%$P{+fwn94|^RL8vSo-AHHS_Vc*KSZO`_3 zcC82ZsUg6{=@b?|y*c&PPYu@s?J192b%&g+ZcKyhOp}|zf~+K-kO>W7%_+0bO8T*o zn+lC^EK?cDLVJ?2%wC)+Zr6i8-AEwm^!4hIBgeS>8b+^n3Q5Tdm9hg@y1}9nYM}F( z^$8rx{NhxpT(&Z%9Ly>Av~zU(?kl@`)-1=eZ(Pv9b%tb(!^|>FTnH1)nkeWJlm-Mv z>NQv%w#}M57BFm0?RYi^uAn2oY$Td9lP8A6X=jV=J1nKbnZNKjrjDT2G8``0i_tWg z(cqXW5;=uZdr%{i*(ks-op<2ZgqVOzwdSU3&9xWn6mzgC(mOL*9ih+)vNK!n@xBpS z*f~9TQA(3N3e*#0#v!D?NmMI8LP{8zW7*e0yr5%$fkA|OlN;DP7+fO)hgMt-4=eVbl`bF>a-6^=|Gk93zWsf}Eo^A`bRvLaA(S&R z$rC44qc8JPSy^&76M56tGi3kxen)8x7X{7(Vz5q_jwNXIUU}0c&SJ|)R}d1Nk$kDw_*i~ zvX42r3#X%#kPD0b`azCtN9s>e3JgnT4%iYk1m0QqW1JVYGFhTm)R|48l$^y&t;Wl@ z5zM{aUKr~&|VSQ5Wu1+g3i1k(594V8Ep9_uHQFj8%-c29< zAP-v!xc;Un#~Thl@g;b{ncGnQx0#}w@a*Z{9*^j$QKwE5;n86!7d=hhn#E+=B;-6( zAA$LqW%v-_n?sHGiq#g)Rk_>Ldz)FIrcMI2_?b z8oSN@94y&3aMsp-;9L>aMuo(keK_8L_!AtK2@dbkWSTGje!zykfmW# z4GaqXfJJr3jyBqhNMYM|qp;zGYMKre*XS>(wP%k3rHU^rJ)19_$`0H+i&Y>O1u&5ZQ9d zl8&{>^c+fBl(+IFC-|g@{4t3(n;qD` z{s3V@W{pYDN-w*G*dk??`fO3tN0>LS_fYmh;DlI{3_#keknWt9?5ZGKGa=%07d_WA z60$94ok$k*r}K;Xx#>J*NtUKimA6LSFR4_YHC)`~AJoI~*g zOc~hjaj$xgL|z{h_dceuR}fDW$s;B$)pc7MHtRX{vsCgx7HfWSaelEpn=clpZpoLq ze9GfA-kbUZV463M(ke*JD4w4q;i01uo@JJ1K{yNKWfWY-;K9?}D7=t5E>)H4YT?g+ zZ!q(o{0tnE#RQZV0hHkgRomdgXB*9C$xVM0KV^2Xo?s#y+bybOB=c3Js|)f|iE@+& zx0_7&%a4S%G|)5OM-fM%kwr3?*_1=ZNH2 zLH!A?I%PG8RWG2Nx@~*-ycH`?ps;~MwXCRE-RUkj%P6ob^Gu-(v2R-`fRX1gvYGpZqPOKB73Q+TM?=EV;wokwS9`-}tyBbDgXkWK-S(FL`Y z+%%#9(X{)eya;V`Dl&Hc%o>qVVR6I}RUW}*!Nyr;;!8RM!*CkUZV+X`Le(JOHa1Ex zU5U^v9S@N`cuLjNE$ax36%5gDDv#8>G}<^}Q>Z>>c)!plN690kJQ1;p>eM24L5f$Nmw)WY$-Gy!1wfn!RJv8ao} z$H8HadN~SY8WU(_U<$@kiniVa$9`rZWhYYxxf@j(fTf_yz>E@n@Pe&u;#rp!G&{a_ z=P9>2^4X?bZnDr3Bxt;yl&%1?S&J9jZcKLFdJ*4T&yI^o{S-WP9m)o^)Wfi5kM)bX za1gwckw8ha%F)9e2MjmE)Rg5ec)awe8Wm7xUa&%95-6^G_~2(FysBeE3;q9{eWL0&uR%(jPWvxzrj1kINNCj(W%F30b# zHEh`v%z>mJoNysXnS^Ns#>P(ev-~i-lqw4@63^1ijv)z9R?$f@V(34N?MJYmB_FQ`jd8D=& zJJ_6pJ!!ZchJbRVrrDasmCS{^(*RMaoduK9w{laC?= zn4HpRD1kmYdZJ-rL#BjDlRyi641k#g4-3?BU43S&Y4-ybn(?Op? zH67luayJq%KG$k=?KEyIKspH5{VK~95;!m?lQIR3K`2fzfoW#0QWmS17WV(&B7qy&l5c`#UjTXmf%nfaiC&PCXeA_GVvy}vfUAmyIE6MaBm_u-clN?iID-piZ1bM)-w# zjg?xhB2+8WR!W{(D?CHU$4h6*MBRgQ`feQM$df29S!q^Q&62`g2^lt4E>g3;(w%DZ zskboc%t;1TbqHA;b@PZ&1li@~>`|Chc5MT#PA)u~qZ7k1ZMzxJum@1t~HY_)L zexX>HnKz{ps2fz>IS4;qJd{y}Oo4m}6(FZkd|WEv-Ll)%LQ5PS#WyHR9UJJ){zfX* z!8_16&$`?~JrW2DGG`Jx{mr`EMK~e?#|uncO&8Bd<7AQ;EYg0cDG*1F*pX&PCAfi9 zmjUjKx(u*dJFSpjW)3G>XmKu4tALVdBz@G-1VlJ>tQb$94?e3RxLpbB!x#l0-9gAJ-eU*!yZ$mq;SbYQzQZ1mwgu=24a6V#=8L>$mT zG-J=~s+DBRag8-9SV*dy+bUEOSS4At?DA!%t|W#~!L<^mJ{+Dcr2_lMH}IuKN{GcO z>`020U#K0g4?2^Ij!RGDZhK9FGen&`aTbwU z@2X*(sIi-DaLX2Jr5@{~ZIVq(%A(sW!LC(_trq_@JfF6KKi(Y9<51tt~rfgWJ3=t*W2CEMRAoM{L zu-n(6+2|3f=PU?ohTaaOR<7rylnB*Q!#nuGF2d>W;Ypf+yr+YsLg#wyFrMP72D_rA z)3O7tRPX|&!NDW$x1j5Fuqa<1WQ%-x%%_*YHcmK_0XSXKeMNcc9rX{}mnC_j{J6`G z$w7e719&n>D&-XJu|evHn8{kAgA$pgLV)?XBFbDRiSiAEy(njW2RUqoZhgaAx;L8S z1Q?AIhG|L2?pdb3!o(5EwNAT?>c|?}Q`H))$Qy#w$aE)8m}RR@wW5nvpIwJ4j&CxD z!bi=+zKew<2`y07&&!sg*4ln z4ogY&^#H1XI@Wj=&Xwn;X7goIOgVdl+nT_+z|>8QQYl7(Z&zHY+eMubDk$8;6I>LP zTp3cq3*pjH>VyCp3n$Gf8OY<7DTgiWdz+^`D{iL-bf#!=8l%FBd!kvP_v-?HBT@Bh zeJq`Z(tDppi(iqW;&I(9ab;`hAey>8!~v*5t;WLv$zoy06we@acm6h?zD? z7tN?uV=RJpQohZC6I*-Z;}=OGtm~LX*-yZM0K}y@h+Lu zDJ_VC5N^SFi|iFe5Yll)xTSo-J-1<-1f&Qnlr|UQ~{V2uhHdY-ohgEt5F7;S2R7!fqLS1i3j~5nz^h zn@DA+m*f#OZ15oMW1o|P@U}x591Z0B84Oro5H=|7nznj^(LGLL|~k2 zCoZz+=sc?Fc5{0J73DJTo075m&7KSdgB4SXF7qWhTvutH(mfhHl}Rux=@a03N!DX@ z#ZSZ$2s)O28ctx5jS#KPa1xJnVT$m0u+PwJN{aaVH-_tn6cnYToUOVkUcZ-X!Q=s9 zNx_f8v0bMs$G9+sCQTJS)aSlXyI{U$7%~MzWNV%fM>YhVl3KPey%#e8LpF{}WXvrs z77IeTj7c*+GAPs1Wz6(@=zyU`fE)Nqjrw%2)BakQ?AM9r08IA*#+w)@rx-XxS*39!v7N5Bp1R0j=i7Z}4vbpWvi0>%%DF7k^(ialXvJy11_o_T` zC^F3ut%GKpT5$S`q&+%}q`L5GX|t>s0uj8NaR|C<6NU*d?}Dq3nDzP7LCv@0f3_y# zJxU3SQn8;~8lAr3hSBkZlLwEC=Ekx|#wK!yN3UPR%}!@3T>(Fkop|=>fsO8VtA1j& z-Xbp-{#n_ouAR6rIdNcOeDuI7{#&grj~?iBYbUBV+;D7i^uWqOVH&@;+5qB}?g6ND zl@5Ys0B&`=jYPG(x6WFS5g}nr-a*t_MSC24zqP6rsb!A5;fSc_?r=FQRBGgCyhv7n zh|F1^2xrd#BOwlLupOLPAEk)hXVT1~2}X7p>)YU-Az-(z%ZYf)+&r~jnT6*A3Ei{v za|NVx7p?W!M$%!jvZW^>kO0F;Ir&{utb88^4X9+#xJ#Kj%ibU(j6<9tWFUziK<3#X z;*jTJ$rkf%&AP}bjngFMm~a{~^5OV#v1xb;vFE2;lRYQ_lr-&DdmF_}s47}>Vf});Cy-8x11xhm2u}eFlb_bNu?6pU42WzF z3)KB9jVdacqB7zIHk^%sIOo)>$WBQ71-ThC5SN?vdN_U-SObZ>Z@ir&O>w1Ct@DyV zqO?NL_r_*|=A+0?>QuKHoC!ldc+O}+G>*@(bWK#2xsjea;e#i~i@TU8B*k4Lr8lk* z3qYEPNj4`b^5Qx~h8FQcU!Ap%b7bYQihh1m&!nxbFDx07? zb2h_TBc-e(5{8uZLmRE`p+YIYcnBS5w%V(Q_;BPvzUy#V9J-}YI#jP7SZy6xuN>H{ zt{lowAGl@iz^zjU7N$=h>Q=T^>)k^el}76jl%zwHNhO+ccMj>gA5PRFg92uRS+l3X zk!#iq1f(1U6{d7|o2Rp>GG9zgfC{k~fyp=5=JD(Gl0+N}aGE`d;}F_eJlr8rB5- zQa)?Vy%ZqPZ57&uxz&h8raq{kd|Hr7|1#DYeL!)1-7m;#xhbU^@FQvq zn%!<mxwPHGI+~cQct>C0bHIQlb{aQ}~EeZINq1m)Vj&K@p7&=@f-e6U`T`-EhS;wOr8U zlUgS{;mY=tnA!%%L1Z&7i=16aEB$(+;thvZrK575QCg+6EgTL5#S#*rBe)D+RBX#? z_=|c4;;M+P1YTb6QZphHFE+#B43(M?^Ffd+)z?n2JIbO;@n$Msg|HS^FbXKDURK;L{*^#U6>$i=LLsF=58D9%Eg7xA~$EN3~{A%lte*? zvqp|;&(Gg%A1#lmWXatjc9d9NalxrjDbtsI7+M{dbV(l>q%&4)y77}TrIraq4Y4dWy+|4 z!mqTo>rD7fUn*7@P7>p?}G?kK7Hlh3(PWjS!)p65J!^hI|xx@)7Q(G%(iB5oII_3&Kv2oHrf=+74m zk10?IrV-(O-|uvMoni@TJTxuL zUKocOk0P#}j+}zlU`cKYf7T`^qtLd%wnTbV6azm0x8~y+5fj2BV1ieq#g#zfNSPc2 zYQ4zX7ukq*f-h)tyR|`Dbl+TGDk?LHCRX1P3t_&Vi(+k0&-J`h`i3c^Mk&RLISzDN zYxtCUL>IkE6T^wE`twNpRwdK19~AjFz7tkF=un?(LJsP~h1_%vyF7F5BJ7iA_HeL% zV{o#IYf`M$2lcTFJuTB+kLxqoV&kJ3RGL$Ul&*2`geA0zQ*GcF;M&e<_Drky4ceKGUSPbHVuFx=HVsRi~ zgcf%@$ag(8Gn2p2Rqf1C#Yx43>d+{5m1=(%-1pu-hCLNvW1q=jhLyCtiW z;x_3bZJjdo;A?Dhuq3#xpu4SDp)y$QbHI%mPnzm8i#nAi-Y4tO;S*BH)s>=>0B{#A zS#qJ6>ZJ7M(2bRSju4fE;0X0E2_f6Ua6_3&L|aTX2;ycu>suZv`(0LQPB#EpUN+(Q zWd?lLF!Q2pP7symWGR)38?j?X?D>Ii<*N3UVuhnjWeDQKNvjA~X|ry!imBSFiWW%GQx&` zQ681xnD$KK6bFrve`r&jB6din#dWfILbY(*!c@ldJ##fn(^85B*ckQ<3Z`N8&M8qf z-r|^C6x~7l5I?eU(>YHNnB+XN8#8d6?_?q(46H)PIK44v{a>HsnVH z&gMlrt9K%_Nylr+@^?*>J04WbYW! zy{ZL3f8-kK0ai^XxfI_qzGqg^`>_4E;3mJn9g(oLy2S4n>Qcj=?6h%;JPDrQ%RKgx z>U&l3j9@qDKw*%Xx_Rmdhbf5UyqmoZCOlG4-SS~QN&6yPQs`LQfnW!xhb`A+0WViA zr){Exhl|@Ae0Mfw+$hpJY3FfzGf>W)Lb_4Ci2h(JX~{}1*?!90cr>AjrD*P0&m@il zUq`~M&n!F0l_^i%xjt8HnmnW4ihB1%_a0WoTk85@YjnDNB+URziEL zF3>TLkRIA=B=c2JrcMAfOSf0Ds|oTIL4Rg;3|N+NC!xRwxHfX!O@3A%vZ?fNqxE23 z`oYH6laE|#XI&vJtY^X1?ysdO=b zR-@6t;j1ox>>0OZonFOl)pY&E22wDjju)I98WqVR1aiU3m>97v{6DM-QLB%O_$hd~ zwd==DBV~J`-E1PRGz+$Hp;+I@W(kPP?`GQ7mqD=LZ&RyC62!%zt=$&7k(8I~;O9u! zF_$~axu(w}MKle~_+|KHQo{J8JHN=0jAS{uOx?^R$FjQ7R7D9@h5UA^JeS=TmYdNF z87bqg(K&6GL+v!Sy4#heikP`Hc+*WDPeacoSOtNiC=qn=-M!$*P77T^MS$yKH$BC~ zp)!>n5Hg4j5%)?0L|7M5U5O}b`%}r1IqT4g2KH3mg7PpCw^q~}_xz)5ls&Clq6&|J z;>VlzW^1K*v{k=DRVttrWa{3e@X|=r2vo-#jD-CoPFfAR_fD(ESms6Fl#b{SN~2X+ z@mLTlpacuT!0M5ZZG( zl*GUd)&``)0p#T3S?kIoXDK2_M6E<_t4GJsHhuLguo7&$;9=~sv6o>)lDwiYuHYD* z0`y6N7nyTLX-Wh1D)e?Bb?K|ss*p5imGNjzHl+ovJj_iRYTJvxoXXOLj7T=upcE0z_Rp3B$1 zxrNXcAOzgWIk1}oJ-r04=(M-Ds^(%Uvm@q&Q+!>vQ4Xf-Rbt9a5+F&7l>f zuIY`E^$EuaZg8OrE*&BMOZH!M19ITI&UjjbR) zB}D={=p?~d{}kP!2$GAx2?Av5>~l(I{qQoVPrF_1Jpkr6NYK*v}Ex5 zaRp5S^c%Bw=Aq!4k>nGwP$DzYbTDDGZP2`}rDsFgfj*bc2W~ghQqa;x#$cSwE6D}@ z1jrZV9ESOL27nBrhq)H{21SM+)&DV{4?l={2G=>ZDdMH#%2P#^9-)xaR8UF{LXA`o zx(kL7rOp6hl317(^)H|mnzfS_hX@s?IBdcpIc20eLfo%O={FZ}b*G?B&fD9|J!XdB z65&=C_aHQvQF}lqesFjae5*9esqSR*-3BbvGESxnFyWK2>S&Jl6Wtek%Ollcf=UCw`I4> zdSC4fwf5KkAcSHlXN^LB3;F!npx&W_V<-7WEyo6S9knANQ6kbKyoZ$BnWa1Ip`EVQi{aED^Xok1zR!1-Iz#~Qjx6iox)s$nGk18mOoedjizEdr?ilMr;1P_r z5y)}Iw4zReC`&6;^Wl+pP*LG)H)N88_l{gyEJp+U`M9xIyetVxMY=lyE(F07D}j6h zYICs}@WCY{ArxUt;pDfXlF0<{Wr;*yJHG5``nryTGyzq?VHpR48OSnz!Uo8S!UA<7 z%swqo2y+VeS}+~ct=6m|xo=k1 z6{^mlDnU%17Efk`bRXJ1(IKD^7q?kzR;_o_a5K_v#*j$rr(!RqxJ$AIZ$O7-{$jC2 zS3XFOFwU0Jo8mq9cllDi$Gr`;afS*av@4AL6( z_g%h0CrF^*Nm)vCz&GZro`kD9-cpTx63j<%GVnna=GI%RMH?Tk9Hq%R)=(;2ZJhQp zAY81KMMDmP)#%0z%<#{EUXx{g1yUeE)YzU9|DNG=REFh6N~Nm~<`aR0Y%dIRb^FFip98P)5I4~2?7I9^#v9_@}j0YJqcUvqP%o;}r1^-S} z=!$W8oa`GrA^WhmR{4W*0*FI^`v>WKot~MW>fM(FAtLuwDd7@4OcpT zo-816dyM*~wdKKKYduc3UZ2aWWm^QtdS#1@f18=l-=61;&=@b!;V;|YhGsx89#Gm( z8FP)5UFl4>c}n=?ac&_AdB^|?6w5mal%u8>SEDjY6Ug^ds(YBYHeazd=B#(Bas#Af z#YqRLj_b)q9R+6{R;90A+?!rOmaZXU&yh@p{d%i?@k0(OXQ$N+R9u|&?x@>BcoCfU zPt#2aVWSlz^_U5K{Nl_~n*nvgH=K6wcHq)lQkZZs9NGYiE;u2Zgl9tuY6%*3)wqR} z#*(nzkO5m2K4--SyfA-uOmr<6&n(1nNQz1jPX&QsPV%6c zmf7LVo7j2OF&(|UuxB4k-Pp)|o?Yv~R%*I^wHd@iNNTNIU6#P!#)6m`Y=Y~mOqFq@02By$x*K!IdY6D6E@+@)y^y_7NN{? zpEHdUC6Pd+GwTyzbNR)oQn_rk32^YB;s?%Q(}RWQPq&&urife3!lX&3&KZ&wmVSt# z+iOfoCKb-$YM?q@3bofFG~F(a6(Dm0^198sy4xWze<7?>Crhgc4&Um7odT{aRJ&| zy|S6e3i{&{RDw0PG<$P?k-FC2GBbbk)J%E)=3DdArJ}`B{j@YHfid-`jvel82vxE0 zj%@Da$$j1DBqA(qMRf46V%Bzi)9!&o7qi*lH{8O8hL1hnq+<}uS=QvZH9_(K1!LQw zVmf2nD;6hBkRV;Yh8~}|?z}6myJCa=^i;7lzmT7^Fkue>P7aE9I8FE{;fe$+fF4z9 z`0ib;Dd6a!(?AXF^p>0ODIr|Au}KzFnOw&dV=}X{q-ZLxC|OL9N;^Fyo?ClbG9Pm| zxRPX{BnCr1VKxOVE%KUD4uC1}ufzDmQ5v$oFO=)l;TP;6=78;nO)brPN3@a)t$qPw zi~=qG#b9QAG5Q-U5sWT&1I^)LH`47*PN`gy5eCGqSRK;$7UFd9CBIwj`47-DB$P!) zeE%OUMWoxY@u1`Dw4A^QXjtsVdoSu(2k)>t!6^h&0}Q{wBYLoKE{K(+WSFR%C?gXc zdMbM|4bzamSe-&*h{v~2sEobH8Sx?mPQ+}0accV?UN+h?_>3TU9?&u+<$|1|>o(wk z79WFaTvvFQDY}&jr(~LNK)3@lA+=eLlsa3f!orK5x*l0E3W$s|13Az0-8H8btChzR zZnbq5y|y%MV98zNOxL$gH=5o07BV|U+n-QyrAkQ92J)B3_&N%aj5_otAxmw&D< zV*n3RJ?B(lCopUBf%_3l{dos-GM46i9_&VR2GFkne5Hxa7sPwWkWWum%?aoG%yi3sbOP(A#QZtBwkj`W*ETpg!ls zc7aV=tCCeZ_~pnnQuJ*;X{kKaZrr@@Tvx;eqeTRkS1TJJ_l52jE>j{tl$bCWd*?)y zXsSvz2dC<-M!iOKW>6K}0c5|JEDQ6juTEEYU@EHlqLZ36tfvG~MBX7pwztr{sUusM zi7i%R@kNj7G%NL-B&K!9u?*Yl@^spOlnAaATrgz)d((%t$V#BnFKMBHvx!1NkE2+- z7l^oUSuS>OxxOVW_Zg%JHG#<1HeY93ZZw1q?YG(;BuY^6RUZGa0-NTD zkmf3*PY$&a)-b;6xn=LITZdAhdv>6I$xLAQ>*%&JQjm~CxZUJLP|5SsNyKpv0*z>o z+fwJn^=#&jy7|R5>i@UO;*$<#o+#z0D+!5IKksJ0&RO8aTvpn)P&KT=G7M2&>r%-@sWjKVtzs*b#-5;P4yCUM$Bbl#LH-Um zp)yP`G#wIdq-h;~kLZ;bvRvNjE;q}Y-K{cD2Wk^^DU(V@BLu`M8T(Akeup6&4X(u= z$l1Rra|KfU{uCHdciOzvKsg0f zsCCu?{X9`hVj*-B6^nvtnhdw6ch0$|pXA7w87n&lMI+s#ixWxdB&1ncjW!}gjXD71 zz0zw6J7(k5NfIDHa2PMZHOTcB^}P6{bBC$H0U^q0&}nq(E5T{aDNDnwDy3dpCSQ2T zR2c$%qB6vc5@fx&xXGy2c-EEe%?|6b#w$x{5wO~^wzS!r?7B5RzPBJdF46{6BT9!} zf|J84L{JS>?<7G`s}kipq$?0}j#BK2ApJ_up)Aof$lEubdg?j+UH z%oGz0SUSYtF`nk_0cuC(y(=|vA($=Af=!pm3K4`Mr5vUa7#sTvE{kJtu;Q(jW|z`x zaZ2JjuGul9ngikLhQ;e>|- z9*ygpud`8h)Qeth&Bv94y6I#qF!kU`M-q-~4P6F53E^X$hOD7$x>vH%Mt9sm7C{ZS5w#$>Sp-uc=;2UNW$`p( z;4C2?;GR=GcPZeB#pKtQ(|%wJu^vId#PZw?5j3QAHHbTNdg5PD%uG*KD91;UsLXfQ zBT#2~4#F~ytOgVBM`shM)4`>Ov>Xc5V|2v?(<>AtpKcBaCSbcAycg+0uoPp`s|Zh& zE=dE0c2UK}86{H2h>IS~y94TnY*ACsPa-u+aIi{fO$sEHVOYyB;eYYE6SE2k2pGc9 zjkGJwnxxU4sd9$gj)Ra2T|Q&>irgWm;H0B?kh(qE=h3TWTS1%S=Y{Eo{1A9&K~|EErL}nL%%4Ep|Li-ylZ4In0~kO@#S{O%&Oncs9U4aLs@^FFge^$iY!)TJ(7( z3tnO-;uw*#MUC^Kdgp0&mt^0ufq9GbNpWSQNYqKYVK*Al&Eou0DQ`Y$h?~tLM3jVT z8CY%2%~&(UY)%f&KOFhgM^!3{+U|R(uG?b&faob5xoGQj<3hd0At9}sR4dcmX+X$i zgJm2-Br~SdjG`_|;tV&Aa{NuiDpm&Yz#~1$3duID7V)4e$zz>4$>6gWwKtCl4U{86 z4s~dP7P-jdd?^}>g1~O#R$F5P*2#E`#yRB)L<1=iZxMz)itRJfCs< zlD!|6W}|5Tx)Uajq?37>@TiFuCwZ~yQE1&hJEPh_Elicp@P#&#ohA8&Vqs?9)P>+G zA=`-d0>M}zmbvTEfRJGwNMr}3JPu&pbE$uwG2EX14NUo9m;mI6m;&A`_il-xUp260wIFp z6d-|$0aboAy-XI4yz7H=vRVZc!K1Hh4c*gEb0E=}{{23Lq^p$ItA3$c-=r8XZCpCo znCM22Q>Ce!r;2&IGD>zsKb&zUG8po=>Ae$og?0cI0wQlG%-c+ewv(>fy^-zUUyR6+*aYB zz>3IR1{unJK1w18J3%Xe{CSOZ|4bqmAay1KUuvYpW2n;}RWHguW03;1%BizRkc zr3H}~N2K4;FoH*pZWx2Ej2p(Z*wv|JjMrlK7@a({bO6;oprQU(Y&Ci$KyY4&HN$`%=&W2LNog7?v%_N(!s^2+dbqMC zLuqnwv$L_T6pXzm)leM*=oxhg4|7sgCJG?3`&hKCDu2OB&DBBTgRhU0`; zs<#iMHkni4vkRQWl-sCODhN+iokHl~+~)P5Z0vK+!?+8ML?s9~w@9eOCxd!GP=``@ zv_lxM3q>awV2`$i6&g?M(+^lFTsT*ro0`p+Nh#-^g1GGV5SfNSg|rr7=oQZ(0et>8 zuoV$%R!wq59;Uo#OWs&V^~HpIg+~wj#7d6S?-~*(4_J^Llk{ZUMFCm znO9P5RSF{-dj{NeG8mVaCH|tUtT2bJ8g*O+*Q%P!bVj8|%0ywMhT!$d^bm!M zOSQ}iNF{t9m`rgeNFh?$E$R;v1XbMy@MwH;95e#50w)@c&&H&**nq-j#{<1HGfoD$ zl~}>Zl$sWAbzpSd6JhxQbYM#|jKB+M1{Y1=HtUJ?2oDU17^*j*(yB)T2ECzlOCz9$ z?{?_hK~iu-dY^xx8q1VO^TpJGg<>zy7KABv6J#DP)2mc%a_nI0mz{XW;T)lUbB9^H zx@!*i%pr@VW0RRJT{a4^)po@-vf@GmWknRFt3@fVB*wKdjC+C_)sExSwSpmz8AFar zBL6^VeRTGQQkif>iX*>P3LKm3_Vt4iNs6>{5wFTYQ~u!AVz?chy)M=hSiOIwj%w@tm+h29GMEl(SfOQ|!0< zxKz(1T4+iUmJ?h-9DH}mtc<5tXv0*pMR!dVYTUY5?3LlDq|C@pN+FhN$TuZ%>{viA z3IInnULmtB>RtjcCpge%E1MR@olH=#x3pL+2(?gesxbv9mW?o)lzE_6OWCkc8rR-J zi>0%U+7uXe;1<6Ap(fEQIb>N#d;KW;8I03{%wXyENCh0&zcFB}91WwCO9&s-4BmuV zY~r=j%1tN0`8#lmg-Cb%pecRlzzOY8JYb7D-?Dci~T!9P=nSKYeGO%D8r+{XIc)MDE=9DxlW`4`u(&+RJH;j%SoIH4BG&hz#GB%Mr zJbL{i!h>fjT>(Fkop|=>fsO8VtA1j&j$-~s75}VkRo6~jn4CB;F+O@=75}Z)mPZeC zy0sJ48*Vr@IeK7ap)if#TWtXGO7{S?xJm~(vjA>&yNyI$gJGSupkzZTpUC&kw^q?h z0N-z|YDH_A8*h_UtQsveIt!H=IVLZX;xF=itxp7)HPV`Zkr1yo*bdIDkJ7~6G-FgL z@f9fcpAfzxWbM;JXtn`L03L)r%$A>Y2y-NRZk`(Z%)-Ng;`7=0xdKYhi`JTL+vzYF z&C)>-NLng2sxRy0cav?fM|z6*Mbvxedo$>hiulJ}`qotz2BqPhz&S*2lITHYo(-ZO zNlKQ4GT+t=kR0bYlTsRrJaZNw5WTZ>cb|F33V12KnF3xE%QLg^yymSt@*4}F0m0YV z;hk^ zH&x*iATnhB8xuvv>M%t+Y!cZFc}fvNakydNBQU5u4~W?azhokN*zvv#-A5j!$yA6% zT)XU{CUpar);dOOFhxYWa)BvvHGpzBnw<|WxzF*p6jEz>0iociH!3$;#E{euD4PiL zv-+=9x3>^M6`dv6e^SGVMgBp%#TG-)7U-nW8DAnM7}zJIs7j6_l^ocof}!dj_2zUq z+P+Nji||x=N~B%}Dy7nBr9OdvWtNj@^`jY(z(s;?TMz@4CV7!yaJZS3O8Icz$c1dy zI{d&a@g|ZEc9QHKbR9~>ca=i_#A*eN)hO;Af^%Vo771?wjFU^*x1xoJb1bWDPGqX# zcL+nHaZA2V%ZqFbN+>wJF0wO9Mg&T zEOQe|H)5xG!{DVE;-Wf=F>~Wo>5=TiJdi+SOm3oa?3v|IOLI15%DU6Naa3GoaGHW0 z!jHkH2dz9%nu7u*X>Rtt6azjgeTl}%rBg~ZL6}0V7b|*u-Z-47>F#Q8spGL zt9z(W$}b+meJNY*)kA#ja*(;}@ChBdrBFIluO3)!9ayg%*sQJ`%1vl4Y88nWhrwtD zfljlsD$^P-Rc?;aL~?0+t5!z|k>Fd*u0i=Ck=#tjjc`!rGWnG08a^G@XmrGN?NZGx zq|1;2vA(z zG&G`196SjIULXov2O8~b@gwv{i4(a&G9e;ow^n!5 zs^CXqA@yrIL3v+%b|fP)$$BMPQb63{8aYo9ghJM>un{8MBP1$tb&2p~0XMAJY)D@( zT(#&nYHf^OH;Y|r)uHQWExxXwBJ98m2;bn2d+Vmel%vup2c{^Gq@yGqNP4#fzfoMG zE`RQz*0#hriWSSXfFj`XTG3WOc4xS#mnH6VVFoNGoekY)K0(1cl!fn5eyVp#BT-z- zjX_1PC~`%;yh_N9&<SSTH|-vtc@h>cJ~zAkaDqaPX?K1;u6FZ*A5?`0KNQywMOg=~4L=EOvD(amN=VhOWy)^@_Ba36= za2ODh+JB{z!06Em42LMFuka2U1{S*Y4b8f)Gj4c&NxHQSuI|9{)0`D2zGOF7=2{w& zrDchCp(k($2f>JeD)77rA1BuoBpY1X^5VDd4x)Tq3;-QXaYAdVR=gnGMigB{@i}2^ z>iriH|8z_ln-9x$Q@H&$S#@Up>gH|ajzy>JiyqC#Q}jF`>;{*NCAZJn-Z;vgQ}F~Y zWD^u`GBK>*vW4N|7m6bD1{TQ z9WJKs3jiBK7q^{KnGTX`ad~|>5Q=dWvB*xu6D-KO*-~L%Ds4r>uoo=lm-6&!He4u+ z1nUY&y>-{;PjADun@>1=XCi%(x5;b6hY|h0xd63Z3pjd>a+WOS&mp@%pLAi&+5FAh zlUkE5pkJqp$26t*^CV!zTJXf6rP8qWN z)j3k>ZK>vz!5t3yHM-zyTp2=>lpl(45sGy@c&*k)0pak+eRE zLAXT&YE$@jTyfJMVNB7RUezlin}>EXoKTM=a}|-qIv&TXvRv+rKe3&?GA|-Lk^we{8Y^Qy&nU**y zIqHxS@;z~|Vp&^3n>#d3>D1Du0`%V&DZqv~Xj-Lf2q=k0MkR}og3Y=Nu?i+i!opm< zVkXv$Mlo3?Ser)GCxO?+^;l^+-vTPLD?D>GOH);<3V0Uw8EUFol5?(*C&lds#KF2K z+WGc5F35yV=d1ynerSf{pC=O$2w|;5X5T_tR{98fnu=4Juyz8>0Rtr{@>v=Qtv4b6?K>2-4I}%3n)Fz`{$5 zQG?9XL8iHKV4HPyW>bo<#o~?r*}w`@X+DX2mrDXw4L3Pewsu7gEt}i2Dnqqzi+kg! zHn`E5v6@7v;!V0GY-77cS2IKLV=_)QtZq*+(xt8lIcm;GST8M}KQpy>iWw2z7Z2U{ zPTQ7}3Lm+oxtFZiQR$HgGIKPG5qT#{XE}ZxV!H(c39Z)cUV9#Uh8Hv?+g5bd1}USB znz2!_Zm3KJgrsm2WCNj;K9NNnLgBjrKSmQu{7z9GQFrHxbzQj=urRPT5!uxR!z6q* zcR)lnca$_$91pp_vlQc;5?7vJ6Rn(hi+_2Df*;$l-TX@_X-d6_o?^PHyh<6UfwgvB zYpQA)P--CdU0Qh3k)%BuAckBkEK}gEVteMGYP2 zJBX+an7>lJtWOUVEKu$36%BwSa3VRat*=>tjxj=#Ab#D6OURsTpCLb?s5@?hV-Arh zC`rZnD#%xBqy|5d@9@-372zv_{>tnaX~DAgoYxs(u&5p|Ib-HX1%+y*N2O>F9wy?L zZtH)K66o??*T-qjX|*Yo0Jmoab|1D7#y83UIwa2W%aF>o0Jmoab|1D7#y83UIwa2W%aF>o0Jmoe}i z!ob1K?nbw=oE$`yS^T-C{z7O@FCOjg!08vrUqwnk~xAqwY`Dgu}AiM@B!}=265AH8e{XCch+H1gZ%J3(Q1wNWeJc#dspNqwDVtj%G_svl;Wi>EzOen#xNYWD+@A|_Svz0X8IDl4eb)}0=3*8!3fRszWv?q}pF zi*zUmK0D!;Gse-Kew3*`w1;loH9ll8PVHVz7MykPJ!*Vw5_<=K&n@a1{5`kP?%?ma z*W?ZU9yLgQFza(K^WNL{ELI-c=iolLeKH6Co|~9G__(2)vH9tk!*Uo(?Ki3g>F=Q!W1 z&|7$kdOW?*06s7p-JHzHJ^h|T7d-J?U|Fg8Q9fYL7BZat$n}CD>^kGAJn)|5ae0my zkL);7r^D-|uA_sjSKt5KcYf&-$iAgjT2(GbNyMYH_zf<6u=nFiS|Oz2z%?={fk$gCP_2LP%qO5PUdSL zcw!K~?-9;v1dc*ScTak4Hqfxh9aUjtPs8F^qi(c8-6`DBlnJyK#TmvCmw?&T>OK$O z)9kowh8{sJFdi#F*Hda3(3x)1RYklgMVkFz7QLYN@HJcrk`6n>CkO0=z3JIdi;81* znR9S!LT??Nrdy3+qJ_6pRMDe|zKYJ9p+RH)lS0p?4$7D|8LbOF9<;F-87;2*`jizL zAQ+Ju@a3p!n2lL`UOR;WjlB>@^GDjF6_I*9j>&<(E(~pluc?x z{7@<$6&Vb5`nZcrH^2@*<;H5m&xEj&I&a}ueWXM-Cj7Gh4aw8%YvmQXY#=$fTCJ8v zlb$m2R+@mwou#Z5`YSPZ>@)50xxMdkuTer<)$4g55q+tn*I+>k==DNMYm=yq;V4ZN zfzb;O2}boO4+VzwU;}QCetuAl>K6vYsD8dbMw@Lk&y)K?y;IAgGn~*(c%x3;hJUOa zESFa=TqvUjdZ&%s2pZkp^3GVF{T%oN2e#Q99PQa<1&GdUugCrU>~Zu1!)U~PJ5$$# zJXCW@VPF~kBveX4$LITvpZB^>W$l-Kem811bA{|MFf{%35#e_RCq_z3*k2>b~V_!A@WCq>{-j=-N1fqzc~{?rJ3Gy;EG1pd7d_|qfs zXGGx7jKHspz@HU?Umt-#I|6@B1b#yVeq#iFAOb%afgg&%$0G1-1fGk)4@cnR5%`e^ zd?Err8i7wn;Kw5HnF#<0|;7bwsxd{BW2>kX4{Coud z!U+6D5%~8-;4hBAUlM_rBk-3-;FSn`IRdXn;I#<69)Yh!;Hwe%S_IyRz}F-2mqp;s z2z(;~Z$;qk2z)aFe|ZGH6@hmm@NNXY9f5~iQH>;bM4rD8f$v7(cShjfAA!Fj0{<5g z_{9kPl@a(|5%|B1z+V-CUy8tA9f7|l0{>SL_-iBZ*G1s3kHCK*0{_7X{0$NK4@KZV z9D)Bx1b%k}{>BLWO%eE;Bk;FG;6ECHzcm8?u?YNa5%|B3z~3H$|9AxcjtKnUMBwj? z!0(B`?~TCU6@mZT2>d4^@OMYx|1JXm$q4+XBJiJ%z<(wJ|MwC2&qm5%|wX;J*-oe;@+?#R&YDBJlqw0{`U*{8u9I`y=oNBJdAI;J+Gye>ejF zNCf_C5%{l1;J*=p|7HaK(FpvvBJkgiz&{p&e>?*JLhD{`m;}4K_ebE@MBtB)z@HF-KPdu#N(BDY2>fXg_|qfsXGGxFMc~hhz^{+M zpB;hU5P=_vzz;>>V-a{Z0zVvqABn&xBJiUT_^}B5xe@q@2>f{w_*4Ww9f6;Uz)wfu zXCm-hBk-9Bd@cfCh`<*k@KOYRE&{(j0)Jry{(TYnOCs=>M&Qd4cr602N8qawcq0N| zkHDJ|cq;;LN8p!2eAIeoqAct_b`mBJh6~ zf&Wwl{xcEy&qm{~0}=QyMc}_2f!`m2e=q|7)d>8<5%@KjR^cVBk+$#;J+1t|8@lau?YO*5%}*!;Gc}Ze>VdEj}iFqMc}_5f&W1S{^TwA6}eS#vgiq}BD4xl7B0chdE-1=!f%&wwb3Uf zoYqah6r4138s~)qtlo@IoHz-M zbC-l)DgUICMew^l_|-rN!SD6pha~*{9y~AMAMxNXmhew`@b8!KFL>~`N%+@2_|Hi= zCdI$xAIT>re8_|Uv4jtM@V}Sv5fA>D5wYGYJoxnz{xA=ILc;fX@C6BfxCgIEc*cX@ zA>ohk;6EnekM!X0lko5I;J+c^kCJdKlYf0)!XNFy|3<>E^x%&MfziHS<-wmN;a7X` z;}ZTj5B?$vzt)4lLc*Wu!QUa_Pxj!yD&gPb!9OqIqaHkYn3(_fdhk&Re})IYS;Cb^ zN8#;760STq3VuPtpW}^lw}jv5!GA@<4|?$bB;jKo{7)tP`4X=9=vDi~y6%$jQMtc2 zNcg=HF8@f*O1QEB6uc?n|JHl{2PFI_JowK__`5y$Z%Mea7}WS*lJKAOo=+Yw=C3RX z_52eg{HML=a}xeD9(-29|GfualW=8usPSJV;mYz*@V86&ecm`9kZ@&@sONuI!r$jT z|0M}mmWq1*TM|xuntmzxC>S-JFJ-|f`12+F7rf`o60R&8kUjr;jf8(hK7XZz-^=h1 z4?Q1rM868+kL0f<{9XxHa&PGoG#}V0m@oZ0EdEH|%J6RveM*jx*ZJ3n)$`bA`gIro zo+M9wWCA7Ufn@YL0m#W0<^iYiUk83eztsGj5`MRYtMOki;cxTc@0IX-y>UJx;qUg~ z|0Ll*?ZL16E-|0?c<^Znf4>KBFx=?dqr8eFd9!@}*X8qSA3q@Bzv+$hUnKlv9z63X zF`rL*@arV}Qy%=3g#Tv`z9!+H@!)Tl@XvYh{~+OC@ZiaJi}`%ngCCOcKl0!&mGD3F z;BS-guY2&{l<>du;9r;UzxCkX`)DzrZ+Y;Nge!tlboF`(zd`~O{8uGBcJm@gG}e;86Nz&gkSH$+Y)}G2YHsT!LN9Nn9pB%@aIVQ-+J&D zNcgur_?;4dm()Xc1$#>VC*Y)qEFKg9kO%*|>WTCRHqHC>T!sUA-mlvkjzxICwi%9( zc)#AnaQ@Bt$@>`e6bDBC_$b4_Ck6jQhCek0{~Lynrr?i$5`mtUffGyGX8 z_&XSWLkj*uh95}5Kg;mvr{MdZOrWV0Jjd{S3jPv?pH9JlfZ;Dl!GE9Oiz)bH7{yB| zc$VSi6nur@FHOOJoZ+h}_-`|OJq7;;!?#oLr}EbBq~K=(@8y3}ox959s<$pUP z;R^rC|F+=4mH+Lf5)O5Xe<}alrUzI4x4S&J^1t2f!Il5*UJtJPZ}0cu%K!Ee53c-g zpYq_!|Mmq5SNK={w=a5d<$wDh9$fj~zU0A`|Lw~j{Cep9ME_s$;L88@RS&)(pZ}T% zSN^v@^5DwA{u% z?XNueaS$ru=Wjf?^1uD92Y-cp{(pJ!cS!iRJh<||{i6q0{hCe50N#>%o=(?R6ep z`QKje!Il5*2Ryj)zx|*GSN^v*cyQ%^`ymgm{BJ+(!Il5*M?ARlzuoP@mH+LH9$fj~ z-sHiR|Lx5lT>0PLBH>CdDF55N60Z39OCaCrJigz9-^K6`4~@d_Lcg-&kK`96{G}3p zM#3Kf6_D(yk4Sh?!q+5x6n+c(^-}&lNq&jp-yHgg{H~HmpI6Vrze2z66n|)c-L(q> za8kaY{B^H@|BQaA^(ueeT@tRwSN^)!d2r>gyW1N_`Rm@|!Ii)6Z5~|t>)zqPmA~#@ z53c-mqdfa0QGY6b-T!9qP2i)bws!9lWl&Lqf`FnXQ4kOz-I)a?A!$e?lSvpvG-E>o zA&D6V1~_mZCDl=F4>3p<>zdsuMJ*F7#c=j*xz=X~92!8u>IR&dVO ztrMK{b?XJ^eBB#@bG}adTR*rSIbXL?aL(6t3(onvPX*_E-6p{~U-ymRoUhv~IOprO z2+sMst%7sDZkynoud`I170;LRb-M`8`MQ3BbH1*>;GD0E5uEdNg9PV%-B7_fUpHKE z&ez2X&iT571?PO-D8V^jH&$@Y*Chzf`MM;*IbWA1IOppo3eNeu48b{Hmn}Hw>v9C= zd|jU4oUbbqobz?1f^)uZmf)PPn&gY^d|kERoUf}9obz>cf^)vEQE<-JwFu7n zx;DW%Uw4Y&oUdyaobz>O3C{VtrGj(5?gGI%U)Lcx=j)aU&iT6Kf^)v^8o@bV*C{yX z>uwaB^K~l)=X~8Af^)uZmEfGOyI*k5*F7va=j$F9obz>Ef^)uZwcwnuTPrx{>(&X* z`MULjbH45k!8u>IL2%C3Z4{jIb=`twMjeSq5;v?ghmy>v{v>-~Ms>kADC$FDKjlmI%Jc<|`xkZHn`p4c~m&gTJSEy!DDB zRcUbh@te*0D!yeML40_;yZv+ze!SxGR%rh)`{8n%|3y|Ui`;5Gqj;PZ+NYPXlaYLA z>+9$*%gUfnjz37-FK{?te{QvTj>E4f{R*3}r@t(VGoDWoV*L43C2aaL#_>?q=kY<=iHAa3W&ZO*$) zENcqs?^4|Dyxvk=mxuE+YCD1b_?`H^Q_bI7hzC>w;;m&)ITML5Rou<~jUN0Z5B{46 zA2eDY_g6ZaWhK+AB%AYY49l8G{6xj|d99+j_(wnU#`U)TZO2Xxy?Rn{xAOl=cB-kq zINtqZbiIW3KgWm5*h96Q ziyS@sq1xuWYsa!w^Rpj+SKO^UFMIGeY&#D-_Sw#`vHG|=OKcvy)AJOYf5OXrDW$|^+C7u%~m|#DsuGP z51(iARSwT2J5Snte}{9w^tH|BINZJ*qdqfKUH6K&BKxHZo2NSZ08)dJ9yvaq;9=)FTR*_D!{u40c%1dJ!?}Jfzdr8c z4u6o28&KS>oUMxM{wFrw2oKrAJU?OENq6kzlbug(zLx$9&1ZI29lM+T!xY!{YgD__ zkK@ggRqLT&sd$|Ap>tfexrXelqQD(McD8uf*+0p>JXwlgZ*6nz_ai%(C?03M=J0aj z>lBZ-LidreKZmG}DBj}TrIw|_*?vq^oXbqee#-LT3v4?_Imf-8KD5l{*E)PK@uzG) z$>CftzbhVReedvc(kGBvJ6!MiipN`LI(ja{ zNjAU1;almrS1TT8J?n7pZy&Yw*EpQVg->jLw!`BUM7fBWJ`6!!zcyG1euIOkSy-Kl$622^<>AjhZtE{~IFIjrC+KqOtF-1Zke+=u{}*FR zrOoX}fz5r6zKHl`HvfqJvaC*eb*JK72Io!n;!VZltk8W)s`~85kBaN|lcM?w{n*t! zSwqx>C*C^WIWG6BS&C~t_izW&m{qB`t}pty6-zHJR@|*T_bMJ|z3=FUl7791{x1){ zpPH!a^2`$L|7hZ8>}w3~NA|B#+-=_bxZ-Z*e2?rDksXdx-;vr*t=GF9%!9{;J8aIo(k-i!-tSgC&icsF^Ev)$>pvisW$jI`#$>vebGqX3 z)|ZZ+`Al_@TX>W~%2Jmr{6_2-0b@Xbuu^$ySf0F(R%?H|T z{)5ARq*re#9%qH_>x?D-lj3~t&WF^Cep&8(nBwu)caD_%pER3CwyWtLc24%-D{MPA zIp@pyfsYiAv)*wy$MxWBU7poWdAOY<**w$Hb2%Gr&Udqf<`35>?&gP=Z2hi|9k#z! zaos;;Q2+K}Z&QTifV-U<#pA7p2s_JcUhQ!1x1aQ|^G{oUwWA+KXTHrtpQ!q;cq_}% zbNg&mT$lg+5yrp*vh#OaAL*axN&h^}CnuA|Pi_6X^y$!geJY_sdB#%vA4I&^!_HC4W>+}b0KE&|@*W)KP|J^CiNP4w%jww$a`G@sKDDHM% zMIL;n;_=q7h~u6`_WLE61Ag1fJpV)SIBSig=l=O^5BndJo$ttRJm1(U*S(y>71w_L zna+##6Fv0Jq|a2x(T_gn$+|=Fcqw?n-18A zUOi*;4#)nN#ADS$z|Bso;_=qAj-B1<)eM_+RyCA=KF`C>3R~ak9QOyZv&QDj9lj^= zoz+0^R-VHYkGJ|ddM?jwo0mI0gX~t`w+Z$0YRPoz&SQ#{Uk&*3~Tebv@St~+*~>27~l#pA8W{CTp6eyXkSiYWhF z5B+tD>vo$!1*h<`o>e@~`XQqHKYQ3Yc$TrVo+h5$zs*rR-rC!-GlWWZuFWIYFAvy! zqf>s4>wnsOwqu8R-($>iyXd$B=#xh(9&bgi`{vtxKgZ5Kq`y*exAt(S2Y<@86B)l- zY@X=YFCzQtv)%2Vs(8Hhi*vr?=+$)|`mYs_v;O7SA4>XI)v?4|e|Pv`;?r#Yhhu+V zdR1fdH4f+aI!AFgKP>a$PkZp4=IHXQi?AQ7xNdK9y>O(hzuhVSUi8UUo8RJaHEpmT zw<{iJJ@4@G#6M8nt^7M5r^|DWqv!nLSjBaD#?bh}?X%3**E@Rl&-seG*?+{=ALi(} z-v1=~ONW~R4x)07I$oFOCHgC5bE@LHJiAdmayt*&`Z&ja9DVXq#ofyDs;&RYv9Fq? z{n)uoA2)KG9j~}PZi^`Av9>;P-g}PCUvTWRe{NRXtvp}Y`Y#;4>SoQOT$g9Cb6)KK z!)*Qui7e;(W47XM_Uml@%Z`2zdUd{sewD3{Y*(Kv9%nu0l!xQ1SA{O;NQVz3`(qV% zD^IE7+Mg>Z;2x$=b`sx{+S`6)=WE5|tT#y&%FFGlCI)WyvpsmT2ftHsU7j=5yiz|F zm?!Hk;&Q#YMe%s+T&Fx4q(7ue^T>IAiQ?LRF|8lDpE*x)xAL#>;4hJ#eRehnYO0EhBvf`GMncsfYd{#jm%1b^Oqe?Dq+pI(hjX?aPD8fC zc^dg74Ncnz)aMvR)5sxV&^}s()aTP?r{oo8mWH2-dPAL}`y2cTQ9YqggujtiT3XOB zv!b>IOYTc5EzPZ;tAA)U81Y_WY3cO(q9*mrj8!ecYW!GwX=%3kflj2p1U^Lgk$oxQ z2NCZkhaE<|>2r=G-bgH|omU^M&aH0=&I>k$6(f0ieY4k_$y4eYD#BclTGUXhjD(x; zO)f3V%2GcaU0Xj7ZKoBvz?7`arlyL;s7o!0{A`Ls!HR__^Q9>UzfN7yP#p|=KS7ma zazjI1u%aG$YHs}^^_#b0b>d6Rs!>0csj8|eZL+B41pBNL{q8&^Nphd9_xYuvv>6Sx z)uoFY!wZ=jRu%FyzI0I?5rVX^&-+qDY5WPoK!ifM5$ikRJR>YbD1?Owk3?9AQ22aQ zPZ91(&T3FUHmfTqvQ79B+_^tBykY2O-ZZzODi~qiN6k0#4QeCu4SzDdp=>raG&ic? zu5G9fs6WD5u+O(h)pch5V)=Pr+LYS1V6}bNf`*m~`_ni+q=()wb`_{!nQm;TSHJ%1 z`fhrlexCaI)}RhOS3zRQ!ipyM&nj0hY*ZoO`nlxnU{&qHiaOUfeL2B4_cv5)bbTYS zu&TwwSYnYXe2em3OO5D1e17{aU7fPmO0eIF=$_~kuAP+qiO5EkPRE$rfPIF~$8y!- z;2VA}Q;GWdZ$5y<&}$3<4Yr(N2y=ic6&dS-k+79=km5cN&niiwmqexX<# z^;I=Z4fVRzi#!WRzbK#QPZblivc{&`MHMZ<+?Jp{jyUd-zwDioA6(ebv^c+_F|%16 z(oF9rH#IC!<6I!i7bu!mRivDjoD-~Q%nf)JB*|A+rfROGwyI1|5wyEcvID+M)n-|B zu-P8HRQFMqP+Nz8$LYy(@JxS z1DV++W!agfnUgb10%cQ+GYh8YWftd_9)s=HpX?|DQ!=OLm6ny1W@b$*$(%x=- ziZY8c)k_rk6H2mj0@--#Wz)kBmY7l;m=Y)s6l4X;vI+}IGgXm`%RXOD zg?@Ows7ZB}x=eUPUrN!8vVzR~K$&(|gcJRm28xRdi>TGl2^CUOzl<2kTs=^xuZD6+dF_i!FJ`2e8lGuwp9fi^;~j$)_wj!)Y62O z+J(V})|TzsOel>`==W7MEL_-HUt1M@WAyvftaJxI<4aP*c1uNDbZs(8O)H`m`+cqT z&8>}%4NYoIKP6bvqGmeVbC2JrR$x2)88rnCHq}?usX0|^V^k;N_v!v{$3Bx*9jt8K zZktcbjz;B6s;!@EPf(+2he;}N616zt#EPc+Xo53gW|Ts|YKe_?s^{8nJo@~4SrnZ# zxxPWofTLEcl~MF+pB`W4)-{~Cz4qqw6-KM{x2h#WbVmJpbrGF3QS}*xbBinL=WRDO ze2Hpu9j(@1SJB)ORVeuUdC^K!3mR;bJkOH-jG#*LmopqH0C4)m-{ zi|o+1^MS~oxyKKvWQ*#SdzAQ8Z|`)VJt|YFPwY{Y?sP;w%6xw8vwD=KaWB-PN~Jfc zTj^1zrld|kp@sk6(mjf_NAa{uuk}1FOUs&DE6Z}rL~bGc;!nhCBHa!Ioea!M4$Kd& z^?g2S%k)<9v>xAF44+Iatemg1kCR(#>y!tT*+rgjW{16*N@>aPj{q&6R+6AIJ(Nhn zcc65LvDCneW=yLJ*@?(8g%``0V%Bk??3OBE@id*BN}ZxJ^J-R6QAbO@+?u?a#6TcW zQ&U-4l2oQ;zA_E{3RYIaK~=hxrp7rc>rxkN5=T|p#s)n(Z)nn0z;F7~OM_|{uV@K| zdeRvxsXA9rUDd)fuhOS7L1Aw7C}on?<<1WTO2MTbT6IQIYt@OmXm>1=rBX>@nJjSI z4jE#vCFf@rmj*)(AUAKm%1;FXD)~}YhAkl}tnHTO+8Ia@Q4#))?nB{a>Cw@(QB{g@ zbaYx%fpd4juF*QDo?9PzAz7^<7pbI2Rz+Q1WkuD3DQaeu-`W<|3nqmd$oBP+9_6t1 zi4R55IePVsq3&4N{O?W)3-hUgwqR9j3#G6V&0ngU&?BRFTGq)Ar-XYg>hy4elODFK zYsVAAP8G-~^ROI6)$I7V<DPsJ1GoV@FF$T6{_MtqWD3UsYCDyRf#UId^U#aiK~o z;5eJ07GrefGIxGnjW0D2s3-~8&1XK5d?b>E_8KOD2Es&O9(Ke%^u2o$@QKwltgQ7w9 z1~?mYwd6f6>mfMcOPt=UlcCB#c2*XhmRzFqCTeWu!F;~AF+Iqep}w@N6lW!BHX*Fk zs0z@djU#la!s^H>jJP(IqO$iYuNf=|wza5>da8R-jlIN=!}kt)M4v<;Ew|ZRXAi5~ zQ1eL5ZC3T7b|s*zlI%%|bG=WsjFwRQbp~2$FJk!htLEl5U-Nqo%hDA))_v>dluOMi zbXwSuOzJe0$A?+54`;=C4};2kaVVPeis+nrzDno!?4s0J*;`3WFYbh=zOGjV{_^>B zJeD-HHdO_4qv(M{^%DNcw9;VH!rFSfxvRlFtD$jmVE%kOP?WuH6lGAO02ITumChAC zKtzS@@L@!sD=yP+uROJ`T}7y03SZ`6YZ860Uqu=By{5$^m(&G=jfo|}s=!<*Mp(Tj zP7SIKYMxqI=t#30VQEc$dP*7hi!vreqm(C~tn9(8pxInqce!w9H_xzcUN(as+jn?x zK_f+qnO3K&G8CxGGT4)Z0@9aUtgdb^3OWrRWnoR%pJ1joy2(0?*z`|Mpoe_`YbSEu z!)sodfEDC1!SW^Ls{kl%$kY|8x6#bE76unqHDarX@_0Q*lWPy$ z;@$&0qq!QladZgp0JAxYN?OueRF9>0mdtHPsu$7jvFz1LS-+EuC@tYWPBb)ZDXwSG z^K>ns`X;jxtLK?aWedz@BBygbObYc3)1-QwxgO0C+!~rZyFhqr_qm>8jjE*D`p`s~ zUF9VXpWOXhGZwk8C=}9R0hy#v-9)6yDw&8Zh%R4c+D@nsippEi8p663v6gXn<9rV{ zx*a*PL*T|v?u?l6&sPaQ<%!UYpZgn^@z$S^tNM7keMWZ{W!23MWi@tkFywM48hu`~ z<&ZPN+mosrHDpv*2dimCnICMaX;7CLb)q{ri{jU1ZBi4tHWA55`YgEv=P`bt9(h`u z)aD?wW|`bNSDh>Nh3*x!Sae3APC<5nJ@xgt8z^i>;7j89P~qIU&A}Em^9}3Va1Pg^ z*3WVZ=Tt-3sr&tA?(S>~Y0e4OsSP4Y_T;)~QPH$T*n_&pY_mM^&`LO}H{7YdgGFqaH1+Z_$H&Lik|smI#@zT54@QHZFg9 zm0G)2>P3BZPVKy!;$U+_U8_#n>+2i1PZf4$+VkW9<~9SqG&|Qx;n-AG(KN3)6qM?I z3!S5Pmc#yZ)w(p&v)w684GY8HcG4}*ghkzrBCZBt4ag42my}tjGDqs1OmnkOSoNO1 z1eMKhYpbZNUF7qt*UhzMReB0p<_ySa)h)@CRMOJWXq$6VfoT!*MpbHc?L$;^z`pX3 z#?w)i=S{1nsj2c)sB8bXqj!fs=+UC78xA!s9oh-1ZKVVPRf}5e6R)l-!s$V}PHPu6 z)YYksT)s-_wv_}Irevv2tSbG2Yubo0Kxch)enrj%(p{Qi`jn>N39V}Xbc9a^T%!(IThMChDOHS-00&jHLIajZ%qq}I@eKIWv9Yt(mbQH@ANT~niQA0jdXCb z-65+>yJ}X@Qma<&$|c*4Jz-=ALeFiGY>OBqc`~E6zNtIR!g@bFa5*=iQLbKR>R<^{ zHm|L%Or4Ipg+vXtEsM+4_xC#2=tawLvCp;Uz#InyItlx945u1tl zf6tKPw)_>I3IxJezu;x>OB?P@&O37KOLcDP8V(7U8V$>(@-?RI_N}r;qwid&*Pp1C z&Sh#vp{~Y4kB93eyIDJA;3(VthL)E)WVCW~sng}tC@X!7}0 zqjjA+_Po}&E3m3UEe_PxS-ow{+_t9{Mfx;cG5{43832z^6m8hO-&M0>$o6r6A63&+ z)gImz%7n4qTX44@KDfAMaYJ2GkJ%A4%T3UiqGkkk23_5OS{HGdTaI7uU0wvG=)%T)?@IHjod&dB%%hQnFTP!N&gqW0=hN}tITu>m zMD(4ie$>jhqO4Kf_E5H{wyCAHqRw(!c$G?`)d%Y!MrE@R17uiNqKjZi_SOb7mYI}X_{i%T7&?oKyGGcyX!JX@*7NAu)LO>AHmSB=)-JMlUO;p5 zC|vje#tp;WNh*?gGU`+=ULfO7Cwnf8R13oi0{S<(sI_Sx?M8D+L1XW>WA)z{HsOkx z4c4C+Sm=I<)ZGcXrTCodKpwS8V*tM!-pQK*$nFbNhNi6+uHcOI|FTnMd(q>n z>e{OoL~Id4uln`m&kX83a}3nk7iZO4S7no({>M%oLUW1eeZrE+?sKIIkER~c6^gD* z_66I!6s!xa?%`EijLePT4U6qdkPG1(gxm|LFHA)di!^x*r6;271q0fhjX^cxs%-#Q zikhpg3xwrmu)4yhtr2Zie$*vS)YbQ9wQSc@x6rItb?f>b`S2u{C{{E%F4sP!#&r`4 zH+|QS=nE&XI(H_(k=Z1Fiki6ew3{G`w4gZA=x5JPx#VbShC8*bP5p=cnd`~cibbo( z5J#IMd#odxx`rC2+k{j`lgjTxV|4G-^u=vouGpuou8Y+*RI1yD?RzDfd55LFo>V=L z{iPZ@=NL9Ki_CSYOoU!4agJGB1MsD)S&`=j0FQw#saSnMgPw8N6E*HM@ibj)LJh@` zAj_UPt|>ToTv^Y#Ay-2xqv+OtLjfn^7_ZbRcc?2VVz-scEL5)!|J_+=kHM$6vAPDI z*Nq}-VkBCI&+WR53JRS=?s-{*i`4x>CigC;?C2^vqw@KRgZe&dd!l7G zl!UU-hEN?DCCO##KXoxz{oAbmhb|y8L~FxCl$(#}IPL4?W-fu*Cw*Dk_S|;zdtn=G zWzJQw4BCf{81!_C8 zs$2|0oMzc6em#q{uaTC)+M8$FvI2Z*Y97rqXt%7Z>#2D6-*)m4N2Acyi0H<2x=KNz z%0r;;gK^(__T^QoV8{dg4XT)h!HR5?+k{&a+j zdrRD$DB7?}65E*pdm%QjReeKPSyNDD8=Hfn;ELQ?SEKq$w@cw?uzQH(M{MJ`_#7v+L<+b zPm^0>P4>pyn~CrQ#x(-;=CvK2|H|P|By_?vjBd`5XTY6LXo)GVl|^~6&%M#;s~3?u zDpzmloDFz`zdmltloGvS%bc7SD6>0b%D0#i6IyL_C(D6vW)oposr`COuDy5B-m>L> zLiTVOew8|GX#00J@To~V%q!hCM_@zsr>IE)Un%3sfSC|`T`RLUY=+__%1+6S6z<66 z+&?r9S1qaxn+Jtoj^*oIE**sKZ0!M44YL*c3xw503CKda_PjpzH7?C9)9dZd7xrKD zbRUCXuZeQ!)iaVqEYOOa5HJ5@dj_A4MMgpGquy>;Ls7L}w`KhS#EfLcS z=;u6cm*c9T$#vv{OzjWCoC)`5;!yvEl%0Fp9~*nvjF%fZ)O%PEC+Z+hwl}|e&w1?& zfgHqKf3jor*%$wcrsr2QFEEYUrJ3mML2|<9^q=-967536ZQi6V!s`9sY7e^IH{|+~ z>~EMg->{*-j$AJrb#8`d-B95^`C+wlu(rNs?!UPZ^M|fxdOFPeLV#yqiWwaj_v$Um z!o98;j|3In>g#gtsxrx{@E!>K!md)`%NI7N@w<*n`ZgaJm3WkNtf*xUtUx@XEGcwl z#N{M)SHmaCz778t1ij=_OLlcp3YvYy%+O+H72bQotl;k}IawL{TUiw@tl&ChjRnQ_hLrGY7V_ZXU9rbSg-}A& zZpWS{;<+`Xta`CpPO0yks8X{OeFAJk)I{X?Ld{Q=Kz=E`nziaos(qP9U+K|Z4tGWB zE7IhhuWFj7_e(iV#JDQ*aueQkz||{16+U5(Fv_zaDtp8PV!pb{p!yHzq6;4e_lT$D zt1rcAs0z$i=Lj_}OCm01L^t2J+q?d$7yezZUDWGw>Yr_YnMbUCQ$6(Wm`+x|ox|L3 z(@0J~e`9GogF$~U={5fa_!Gb%1-_BEJnnZMyf^)FjkezaY<-T0v}DB%QLaJEwd&H&cEN3EBII=w~i*RpY~P%aCt5Oj()hFI3Jhem9RVEAHw`$RZy|6z z-x}ibd`}jf&v&WdyU@7X0rt@k9|OM=`p-Xv9riGZ>z+7EM}{L_HrJgSX2 z`+?if`Jl)4^AF(IejWgh?PncuY(Jk7=i^>O{rgtIx&8E}g0Vh{>T3_;`h2ndWCK4Q z{Ll{kF{sD8gnjzcdK&cThYi5d4_^aEKlGv>7}e!OKkP@G&x`#qPH^_a1i|N!AF{wc z`k@v0dEkd-!VaJBEuhEqeG)jH?`y#Ed^Z8d^WBMl$XlN8Ai?>3;{?Be&UZ9%S?@K# zbKrba1}Mj?ht>}Pel+kT;I+Vy1AYc@>}Qq%NBa)}zX{sgTg2H9FVT5@0Q!D#+#&Si zqzZ-2XA*$pcp4zi_TM1;`Jl(~bPjMFPZtO~+)hpfJ+_m}fnz&a2^`zWQ^2vEd`O(j z&vEgi;M`6u`hi{TA8h{vfMfr85bz|Zmn`5|@9n@3gL=7$xGv`+I@o_t z==)KhyEF%--q-sdguqx59V@thLU~=aao=@ zLccHRt3C9$3jJ`>-{YbGS?G5o{huECENU=Z{{Ez&MqHM^6FAOe?*`rm^}8DQCgAT7 z*T>cCWzIW%1bU3e&A>4p{}OgM9`~X|k1jvPqaQfNV*ohD;~d}^kEaml@^d_1EI1X< zx)$tUJl+8uM z^L<0`;rfH>u@UT}AC9IUF4yI6hx1LO9}w3Z^H&pq_f~K6Ja#2;)UN`L`rU`=QkiiO z=dt?(9}M=#dhpr6u^#I^_!+>_{uLhldf+&}?MFWpuKk1a*h=DDU#F4(n+0zt{+0*- z0PG(F_3{~Uz5MtX_(=Lec3qx(fu9V#0{nS3@Vh|&0C1iA;`&_;yc+mN#ASK5fIbMv z-DS8cpnB+Xo(*<}0LOBU0*=Q`2aa~Kfn$CB6FAn_R^Z1#Ifv|T7c(N>#}K#65Bf~t z81JRPG2Ryd$9O-BIJci|lxMk8aE|vI1;2*c)g53T<30ZXb6&dq|;?Dd1I5 zUvCiSa;~Q1ZUjA!BVPl@apX5)hx^q%4h)qO$B~19qn}fOqn`_aqo3=EbNSiNrwh)0 zz8LJFKUV<9{%1*SsQd?mpAU!&@haf=0M|Kij=PNbkp2hYeGdw8wDWi1XlD&@tY7P3 zumkq@BF_H#f$Dc(&}03M29EWcChTziP6IvGZzXW7-&WvQzvlwS`n{Prm!IqR5y82B z*MJ?Y-?xBc{cZvN6ZmcTh>$-~e+Y2wm(qcwJ{vgdPXIo0mry%78~FE7p7(%X3;Iui zqy8J<8DM9(k)iWCANXFt(ayfW{{a0|;6s2H5ZCpk*Dus9TP2{c1^sNHr|PiEKtBM^ zcdpQnHK$`O0R1+w-z4-&q(2e#M}qw&LO+r8XMp})u)kF3Gf00S=ywPEmkE6~>6e54 zc(A`h=yOPa1Lzw-f1A+fk^XMb=Y#%1p)Vl)W1!d9u(%(4M(B%3zXtS6K>v!+7nA;V z(0>c%c}M6=N&f-pe+2!fLO-4KUxI!nl;?Y)pF#R9s0aJM3H?mc{{{NPK)=T!M!@ZV z7U}mQu8Lw^1NvB@pF{c)pl^ZlCkuTw=?@3}p`brX=<7&dCip4DtHI7|P|n3de*x)F z_0V4?^w*GnxrhEvp}&Ll_j>5p3jO1xe;M?Xp!}Z*{W{Wb^3eY&^czXP^CyLEez<*do^T*>-JVOKy$uz5Za@2j9_=RzJ?G8R zK#%q(2|e4-20hxJE%cmcD+4{+pDXlie*x&x{^>%$C;9(xphx=`3O&c~rJzUqD}_FW z?B5A`w12^`dd};<0eZCmp3rlD(hYjF|Fh6@9{6|Aqy1iE!rL2{zb|p! z-q8O3LeF{Qc+jK$(L&GV9|wB0pDpy9XU+vZ+Ak7%F8_4Uqx}U!&w1%a(4+kmg`UfQ z3h2@Pr9#hn>?=W!_E!i!m;VOPqy0yO{s3y9Pl6upKPU8D{ue=y_Pd2Xmh689dbIzG z&~yK}4fJS#z@g#oEuQQTA};&4kwVYo*P)!DK%R^jQAsLeKVRgC6ZK6nehy z(*%07zgXybJUSKhXn&c|kD~Hl1$wl9yU_D|U=`@m{^gQ0Z0eZCm zmC%o+@_!F{v_Eugczc*g`u&OP_OM+2!|R%Zh5i)Mj|P1ljE~7ee+}sm2mK7NKSk)T zCH*uH{Y;@>LHao!`Wm6Xj`RyX^oxbQlk}&0=+6`S>q&pHhyH4z{|D(iL9h2rvj6W8 z`Wr}pkB9yVp}&#z&v@ux5&D}*|GJ0%L!rN!^q+zr>vyxz-$MGIJoGyq7T!KrlD-dd z-9FL&UP6B>>4$je4-)#@NI%L$pCt6RlRn);9}xOGNPm=veumKBN%~_!kL#UzLVp+O z>pb*rLVq{umw4!x3BA)k1?RYaT5xU;YXx6L$9&R~{z;$`n?P? z|8T!_Kk#}e=VKmrxoAb!pB06v$&ecmZ*JUIU># z<-qa&iz|uqI+6Wz4d~B+^4td;?=N@}_(0Hq1pEo$KLW@55&i&<`Salkwj1pGP0$bH zJb1PTuO_bja|)EF8F)GPtphmfuLF+ydx&$qoYL2n`)SbQb(0Oi@w&+-;CS6+8*sdC zGQek!!^a)o-~1gf_*qn*@q%ANJe9ci4_;51B=j72Q-EXK_P#9NT#faBSx-z_Fd53;btjhn>Lj zxDNrx}M?&k*PK*+uPbGwAX9 zW(-}p(e;RSMi6H^>&VVwpkD;#p9mbUZ%z|-I8KiTJ;rG(aE#NXz%fp*1CDX}6mc&9 z9E#I_3eIub4R$adzXy)jA7hh4^@x5;CeFv*On$2ZJ^KGl;Am&Lu(OTqbb=oJe>ZUS z|C7QF`~Nl2qyIMnNB{p09R0snO2`lBe?M{d1N%Q9IQzc@?4bWEfusM=0X`Jk;Vr;% zzPASW$)JA=IL_<-BF^O>(a)Uc{;B4fIr}q#xQ-+A=TzY6&)LAypY_1epJx&0nj{WVIz)`;iIO_YPoAcG@h3#P=aMTw9$NM-cfa5rO5pk|ZZa>$99^22u zz_IimN@;v_v;CLU$ zYGI%K@HXht58nYtKkPIiRA1Wn?X|!$?oI}d_E!MM`x>4g&VG1+&g(hQ<9!W(0>|-d$PuCQ!trY? zakl?B*-rvJj$c{8ar`P4cDS7cL67a^6yVrSE(VV6KrN74@=uKNMBKS$`dkiObOf2+{{O!|8~^gj#zR?`3Jq0h<)FaK|(pGI7kzeDJ^ zk$$;{{(YhUiu9j(=*MJQ_Cw2beSJfEKXF-}bAV&qT>-oe+RyF4@xF#G;`(qppYsL9 z<66*TJiZMag+q|#K-@bEbyzUnWam)k60Pn3n#N+z{;5biP0vzunxWI!y0el45 ze;ar=l=Da6SdV?CgvyV6U*K4taUMJ!IL`Mvf#baHH{x7h^T_|ZPc`LX&i7+a^59d6 z>w0+u&bNTLHd_P!SpoX6`xJnO-KPK??-zIjcrDof0yyfo0!RJMIU)a}-2TaDh_l}~4|XkZ%!A!1IOoA`1^bu>yAL?t*YGCr%fSB|!M^T4xgYo*^w&4Re)Pjc;5Z(& z0mu6wE+o$9bqAI6a?sQk3te1y?W4*jUoX>Y7)yr$3 z$9m}oj`i}ru*3DzE8m=#E|py}3>@pF1MKMj zg!_%lL67A>`7H3wpns9Lu1ECqtDr|ee+eAxYYT83U-}e=&I|Pe zfup____kLgmE!M0Nv?cJ=~}_lZmbJ_PJfAj(C-fR&lmcGN#6l_yieo`p&v#1t3i+ViTp$8$CCaQ(C0(>?-KfPq`wdJ zc%R6lLZ3kTr$CSQi99d#e$u}L`fs5;uL*q;>E8nVkD%Wu^vR_E2=sWL$QMGNLi%q| z5B7f)`c%^Y0{X*1-}`9Oezi>ZGijvXjkszGVfTp)75a&!-yigNpU7cCpG|r{=nsYV zHd*NNNIz5XImG9Ho!8*JP7wM!(l7GRpD*;MkiNr1f0NK(K>FJ}^j$)K4e6f)J>JLh zp3vVx`fd;X&qDt=>3{do4=fI^_jRP-hq$hHEKj`9ZzTO8pvQevi9-KA>C-&)*+TyT z>2p2w(}n&+($DtL&lUP^(l7APpD6Snk^U49{ZgU-nDiHV=&us`Pe{MQLw}ple@gnh zJ@k(W{b!`_^3bmn`p-%Knuq>oMdbD3G^xu$wW`Z8=A20N5zY6qdf3eViNA^zz zJ=#B8=sAAR13lXB6#C6%|0d9*{X2x7?cW1>w7*8^IZwV0^l1Neq38Z&1L)EIcS6s3 z^?!jL?f)k9T>ig6kM;+bhPO}7!|zL6w$C`B=kkvPJ=&ir^qjZP1U;5NN9eiy`JhMp zRYK2s{uNA79_>FN^j!XD zK#%q}2)(7|7W(l%=+XZ7LeKr@7SN;pzSE68U2Hw?>P7bZ6PNAh0HNpc>mbmh{S=|! zh3roNJ(fRT=-GZT=+S;q==nO@e9)u)6NH|}qeY-c`xgj(KPvwvphx>R2tCgSR)QYw zKPL3Mk^L^vqy05P&*R-X(4+m2g}y)8{{r-AKW0XFdl*jo!NhfY!23jo3;i6@$AKR2 z6FE%iPa(Y@^fS~!_&UXrLcfIcSswaAp+A-Mr5^fnp+AlEK@a^2La(pE=*J=t{TV`k zI_b~x&|fC>dT+6QEC)T_Cvv0EpGo>#J@gL<{aK`c)I=qrJL3tW$PY-bB`oleL7W81(!-Y2s2EM3dy zd-E_a+K;#{|77UL1`*fxZ-(*=2R+_bG7{|TymW9keKgBT5WJRnD%f8R_9uaTysso1 zIOb8Ofqi{mk1JdH(Z@VlI*xRC68aiImmlo!J=+V8J5cB+y6A`ZpwA=y0J5Wx;{*NP z9(+7;?SI|Za{Czs{Bz*3z)`>mrf1?(&Y zJ_Yz`!1n+YwT{u|)4K|d7umB0@M{t$5XGmnp_ zP`gU?(9>lcyPdQ`dGNTgz(;|df536E-d_gJN4^tqv>)%m-}12kln0*+9PPj4 z!KZl~7sm^gJ1L;oYdAjNY!6P`Pi((k0(L4v{|MNbPh3f@*`PlG^myFGpg$b+ z?Zma;a9wZ?aecmcTpr&wzYgqNMS5MHFQA;A#HHWv2ae@@oVd1g6xd$_9NXs}z-Pg6 z_XCdoEo~3C{fzx~Ip`+{zS?SJIMY-%`;kEnki%7c2WUpy}AasKbM9+}`#&JvH~ z9soQV`}=v=e-P~8dHFz(afJTCIErTeFci?&d6YG7YM}1uZ9P0)32Y??w0X?>dzk{C- z1^qbC7ZTUynhKmQW7_L<%(vjY1@kSKmre&eE8w`8Z@HB?_p7JSg&kgpGUt2?&nKC0 z(+x>I-ZM{j|F$ojZ!B;u503kocRCvM$3gkI-Aey(yVV^1(++mfKQwIE{#*q1vEAxx zT-*=fyekGc&vV!hchJIO5*?TM{lvNdk(~Pz=8uz}`%mVpiD$rhT>|C7b?8Che=eu4 zrprNJ0e18?e?H%fiSu!}JXZ_O=f&eV>zTg~_OU#l0LSt~lehdElrx&V|c@{_RlVyc%$_x^K9arx6}27ar9rwTcY3oD|yRWXjie| zADo}_>1jXfy*b>jc%0IFIq*Zsj?|9_`(Am)Kfz8m*g=l#8n3+KRbXd69QPUE*#DsY z#h^bN{L@Zc*RNMz5s!Nb>9rqbz;Ul4uG@oGUJ?C_c||NI_vhM9Ga~yPFgJUpc;`e|B_y=X%uV#pkHcAVdG79-2R4zcT-n(`(J2q}TeX zonCAH6us6@o%CAsE_$t>__gLwYe0`~de;0IdTl>J|NkuTSm3LHX8?Z=cscOrfwu!+ z1H2RXTHsy4UjW_>{6*llBh}yfym(C1Z^vq&9{OpW{mT540i4$k`kiv%uYkTC_^ZG> zfv*SN1^hMO-N63|+)^>CANp->^ZIXntxZ2Pf5U!d{>cFTCh&6LeC<-d-46V1(02mg z0K5zMJHWevzYE-+Xsf?Ru9cL+ONz%8NhjNrr#+C{sHLQfpe}{zugJE z8}wbkKLXwj{A1u2EvR%kKLH*K{8QjLz&`_C1N?K~OM!m@{665jQQ7p{Yk@xo`qzM$ zQ7q`UHv`vtj-_9LYyDniYiJ+yLZ7eJ^FHka!TElcBEk2ec2Fa@-W#DGCji&S9c!@F z0bCzH`WTika)M?EyS&U=5t*BrNm2z7`{{|Bdg$}|(tc(B83p_+;5op*2F~Aq zqwRbHd@1O^1-=sacfi*I{~q`z;G2Q>+s*u;kNX4gQNVu$o&)?}z-xeS0lpOYPrz3K z{~7pN;J*Oh1bi#-eiVPY{J#Pp1^hSQIlzAhUITm^@TI{20KO9VpTO4w{|opg;FfB) z{OH%;ywc_8-zd{$6!2c4&jHTY7PYqlMeA1r?*sa^!1*^)w0;wCUQ=t{ zkLJI+{JVmkQNa1PxwJk9`0k*u0nWd*rS&HO*YVEh&;fi8u(Jv{|E89W&~FCL zduFvhhVn!Dyas}P7;s%4{#~au;QU)y+D;Ddm#0zMe{2H^Vuw+85=nEq!7 z@KM0Ij9OO&oO2+W9|K&U7yq748*u)ODXm`)d_Oqu!@zkDwbpL{zCY-<0_Wd=()yt> z`d@Qi2ZBBgcr5T)z~g|o0gng19QZ-N9|q2Q*mOBI03QMRt-wbDA39Kf%9Q^Q;Ay}| z0WSwW8u(J+TqoM@CBSukrO;|C52I0cW3S-7Mg#pl<`N=M}Ld zwOY;Ff%9Gt&AWi7gPm^RhXc1Laj*S60eCF%iNG^}9|61^xIOdK;Fy=#09@;zC;dmj^>|mnZD=3k58a-% zzF&g*dspCE-$eRRz_tD-ztLw1{wMKSg721S^lgGC5bqE?MR4=!(7!8%K7;i40N3ST zPUT+@T$evK-Pn2uxYoZx`mMmVK4*&252cM(?6+CO(*&;}K1=XT#M=blcdD^}I&fW{ z!TLbz(Ft6aXU`lPTU~;WA>J)`Ch@I;=Mdj%sIjLHr;p3uqZJEWANRmQqe~NfEb&=_ zXAo}_yp;HI!K;ZsEO;aF4T7IZe5>H!32sUq`j_<~VqX1+|Hlv5CjQeNj5mf-zE<}S zQ>c&B@5BMu{YH@bs|?^%L0=9$2Y5U1To-Oi5&E|i^hbgIR^YlkZB!oSAq(c!|7m63a|KZXD=I{Ub=l@JUBtSdY^OK=Prkt~Y zJ9A$3RvYj_h>PXGi-122{Al1CfENSb3cLjP(EUugbUf;E&X{HX?q{AXEq#-&(P>2K zH=FDG9r!`h9GjN{k0pV&lLL0p{vE*4{^ei??cWM|v_A&)qu{vwoi`fMa>6d>M_?xn z^yh<}4B&adX?kkgsQ^1v%{CtkdUC7H4+ecX*gq0@4e*nIHv%sL`)$DQ1ARO2!+|da zz6y8;@V|lm<-pGc-U)m<@Rh)8!2T-Wg`j^J_&cEQ0=@wFTHu$0o%O&E1^ou#O~AW> z?+<)4aBQDjfhU9Bu2}V+Zs(UldHC9m=1W1}59~|(NqX%#E;O!oKsR!@y z;LAODKj7Da|6_oE4tyx^5@>I+z*mEwupOr-E6#TDxI2R#eqXl-EKf9c=EHH(&IsVq z*trPwXlDX&w9{9WpLKX%m+qiG1N;z;{WCrErOJ8t)3LEUnmA=iy zqv>Kw=IR8QYwct0@7r^;q`SreBeqj4d2YoCF^m!ct zdbEEtaJ2sdaI~*~$C)3o^g`Qj29ADv5A2}d{&&rbnxQ=9Q2z12Yk*%2yb<_tINvtl z7l6JUxYxWW1@s-DKL_kD2ktd5x*P1Q1pWV%dC@{R-%U{d(ZII?$99YJqF$iKc~L%a z-V>tR?Qh_>SPj%eKcRiTrmy+_V27`LYkmvZ;cLg5X94f0{?-r8%fJrCoxXpB9~gJJ zU?-LY+Rj+uqk!iD$G8iC{WQ>f&BsmvJ2{~Dnvbmk{VdSy-*J-Y9jq4|AJPBMfxZu&xE?0j^-0r%kE4+u7x)oNFEoFgp?XdL zj{Ea7faCuBBH*|`zZ`fMz1B~S^jaVHX?m@n+Ud3C&(LfA)IqN`f0kbBr%rmU`D%Kt zpH|Up&7Y&!`l*XvYyLdF)=%r{wdQN+wSMZR*P5@T*ZOHQz1I8%dTl>xpdR|^Mf;Wc z2m67SfX9M<9dL~Imw{)1{uSUwz+VMk4xGyQC%`*_e+qmR@XvsE0skEMdf;CG?*_gJ_-5c=0=K9y z(ti62xV~3cKQ#Z^er5iN1^x~21mNES&j9`%@FL*f11|^8F{|Hh1pWi)+kyWGyaV{Z zfOi7l0(=$lpMZA({~7pt;J*Ox2EG;eX5ha9x73)TAKK5q*{{q$F~ENZ9t#}zEhhlS zeajiZao;lM?(}hS-*P$V?LyJ98-e4#<#yn>Z@B|F?py8zj{BBZ0p~rx`p{j#ao_TK z;J9zO8#vGLw4Kesao@7lTfb}kkNcKmfaAX9Sm3yCIRQBCPtE|2`;&`+2hz;PdPC-6aFe-&`thuj4m_aUzbj{A_if#W{p&A@RVvPBahT@>7J z90MHp8^;32{l2|x(RItj{A+RzWQC${&Bx?3~=06919%x74!F(YnS1^ z;tbH^{^26vxPQ1Dcmnz#IPM>A2afxPJAmW<;ZER5V1E^G+&|m}9QO~e2afxPyMgms zPy2T>aNH-%_etrZ;6C9PT3~1%woe#1?h{S`j{AgX5a;#9EBEWtSXMdc_4w!N5yc_tlz&8V54cz|167{$C=X1bg z=sqdUp9dZbd=2mf;A??r0Dl2^5pY~zlmo~0MI&%rU$g_q^+gA8Twino$MwZ3;JCi% z0*>p8^}uoea5wNt+IjTY3_Jt4r5m7nXoUNRV}RrS;aK3fe>ed+u6Htk<9eqEIPM=V z2afxP8-e5cs2w=2k2-+k`lu5)u8&p$$MsPca9kg)2afBbZs52++6)}mM;6_Wru~oW zqZr`0K8gj7>!SqV-O3g}GJt=?P(2p`{}^~V@K1m@0{;|vJMhndcL4t!cqi~LfUg3+ z33wOqFM+QI{uS_U;9mpZ3>?=-R(~VX{>SxE3~*c@#RA9mQ37yWA7uc?^-&RUTpyJK z$MsPoa9kg?1IP7I2XI^;bpprr(JJ7$KI#IF>!bC+aedSc9M?yif#dqf+9TwDTpz^% z$MsPxa9kfH0Jl3cs{0J!xIQWZj_adx;J7|&1di*YcHp=^>Hv=GqfX$sK3WAF*GFBz zaecHNIIfSnf#dpUGw><8vGZe3^Fkxs_sI8MYMul7SkU9X#{}TGKFR=&`yPvclYALRd%0Z9oqekGkK57S!>!S|fxIXFx zj_adUz;S)l1svB$>w)9?s2e!0k2V9x^$}k<(0;)6QA~^i>Y+KVk79x2`X~W7u8%T+ zj|%<@7368br;Ie< zCBc6>$pD^9>vp2+B|FyekIa*EUPsV*eIxj9R8c$^Vml}7ZG=1)Gk?0paLy$%|K$|J zIfura%gM3N{I-0f=U8LDAZYk(buRkB{LeAw?{dMP`VN1;6F|>e1hPO zIx8a`(o)&93|Bg2w_nmCR`|WI=ncrPv{vIg!n$rv) zDtNHk@HoMLqJDLh;5U^Sy-)Dla}7@u{9&rcOudpKFoamUvanRDFTDD2Gb zW6FKM;0@G%o)DblZnfZ6nc)kM+N7&TO&Bf-5Y{)+%wfGg zckc<#akoiuj=ODwAJAm#uRmS)c1?RY%BlrQdE)ELLaaSj}DUD?<5_|=n*O`KI-0}5p_A|%b zwL;HvcbniGcMl29akpA~Sp;q&6S+e>hcy8{L1 zxEm`t$6dPM9CuR$=eR2ooa3%saE`l$f^*!RBsj<2If8TCEfbvMj=z7E{j)&7P>+X& ze&=C^KP@=N9e-ad+u599^sfm$$K3|OZ=-zFM}l+Q@%O&6{d~%|{2=rkcUuJ?R%*(# z6P+L1;kfH3_};W094I))-B7`&Qob%;@M@ZGj~ATdZld5Ece#Rd+|3Z27GYHwx~f@%m1|IqvS4yxNrK3Bft;RttXU zVMhOo;1-RW?+MOv$KPYj_0DnklhAYA^`dzM>pAWQ2+nagTyT!N(Smc_r3lV(mnAsI zU6J4%cgG3NaW`LZj=K{D=eRpdaE`l61n0P0Avnj~?SgaMJuEoK-E)F--2GE zPT1kNTPOG>1xEj-;2d`w1^=4z51$Fnarcej89rnGC&4-Hwh8_yUH9ru`z83iIPUrj zo*6Xu2Mf+|H(c<2=sL(q!TZttGf{Aky9~iO?(zlaxSK6F$K5=^Iqq5n=eRpvaE`l+ z1n0QBMsSY1TLtI1dr)wWyJrRGxZ`~~ZlK^C zcLxa0ad)WT9CvAgbKC_4=eRpY@MPM6P%Ai>qe*a%yTyWkM(2Nq;2d}73O<9zg-ZqJ zxVuX5RbxzC{6lb#yITeSlJc4N3eIu&h~QP3#{M&cbKJck`1y3*@O8m=ru-xC+u?fW zxcgSW*bKKn`ILF=nf^*zGEjY*BD}r;}y(c)w-6p{~?tT)S%+m0-YeZjXB8NN;MIR_fPAMF$2cJjwE!$$~yCFREs6@1YQqfZw6+nI(> z5Pa7H!vlgRCmB9X@CRsqGF|XNKBGTY@MXss9u#~v~=KLkJOBBSq1?{ocfJ?bl z;MY?7pC>ri<3hpv&NKE;6Z|6D|8R-mr_y|5mEd=j8auBFK5vxa?+DKI^`YdnpXW=# zxxT&^yo2K9SHZcy{u2DNqfB{rrFPBjhwE#A;D?`X^uq+_`Z`eXC#k<0EjZWLc){17 zVeF?1&h<4(@bQz4{%FB(q5N8v;7>0#`ZEN-i~6_g1)o3G=x-OC>+2rDV@izvF~PaM zo)(+!YYjs9z)=lc3V@b1fu{&&H-zILKGVEe~X zf4jTjTwenPPi-~!4-$Msyy3}$_nu{Vso-x?95oBR6U}p$2+s9&rr;Z=8v7Rt&h>Sf z;7iE=*9y+{b%Wr|xyJsTf^&V{C-^AJOFSVs*VnUx4<`FB3(ocRy5MimFy(n)aIUXU z1iy^t6F&*wMe~-vLySFc4`0nTe~%RWQi`L1;0yX2eWBo7U(*Hu{ve|-6P)WSDEJau zKQ;)?_0=l)Rn)Fd6P)YoY{CC=oGH)6f^&UcF8Far8~t^HbA8<;_}EmVzguvwuLlHw zaf;Ee5xh6e8{QFo3&kV%Xg712z z(O)I_+p&hor-I?TM!JkVhN z-dk|4uVI3JMdR;5f^&V17W^W*zLqFB*H^mWFU~dP$r7CFD_8K(=NNs7;9OtF2+qGl zv_SB^X&$>o@IEv@xkm6#^7CVY_sKHlc}{Syua^Yp`PQ3)bA7!h_?I=t{%3-7eSIzX z#xsrnC&9VCei!_zSflSv^K@<}Twl8jeua@+g9YdM+E4Hy^nnqAbA25u_%o^I07nQu zi{hnF@Pg?^UoZH-Mi_pf;NMYya;4y0U)Ku$0=nNA5QC?ae_Zc<4%&`ero?m3cf$(TS^75C^zMpEqHOZ;Z1_aU10dhf`5Om;eQjH z*HKps-q>vPw+Ma&<#X>7{Cmm+JSF%>I^UNB|BLi*3w{py?GwSdJimJIgJ>PV^;LeX zDgS7}7nK;EDfn$PPn#-uzu87#CipbUlLQ6do#vTK1pm0+*f~@1;}0|ZYQf*3art_| zd(nF8QNhpI$=K-<{3i1M2Elp%(+7g{e0pcfOR+zHp!3>W@J}kuaSsr@lKPo(f@c>S z{UpIFsr?rV&hd4;;Hzm|s1^JL8rNC`KeU%Q?rDN=Z8!XE!Jj?E@D+md?>gTo_yIKU zeO&MpY5wz!;FW(f_SXsi$`Zr>DR?54f1}_W@1F^N%z4JnPlAu^ZFoQ0KgIRSejX$^ z`}sh@+0SDHXFn$k&VHUC_?8?~o>IZt&$9);pVpgAg0r971iy;M2n}V~Sy9H-Ie=Rus`3J%I`&M?Nd?eR9`#DDN zt$C*WqXcI^j}v@P>VMJ%XFne)IA6cX5uE*ewBYRL3c>G*Gv#a%oc-J`IQ#j0!P(DO z2+n@KUU2sFErJh9GUe$Koc;W~;Irwv$p?b7pFb76Lsy)7d?z^jd5hq0(7feO!P(D! zV{LQJ{gv$JA%YL~8{HVe+0QA0v!62sXFul&&VHULIQ#iH!82(bUnDsD`4qt~S!UUf zWrDMx|1S8ely|yOaQ5?Uf)9wd?8p6rv!9<3oc;W=;P*|k%~;)nv!A~aoc;WZ;OysK z6dxS#?B_iMXFu;Pcn0}xtl;ctzu?t7nerbcIQzLs@Rch ze%a4`1TUv`P>kU0=Y0e}jMfXWg0r7T3(kH{7yKKVhvx~-ex4;b`?*SR_H(`9?B~UT zv!72Be8_O)=jDR4pH~Pzpr6q{C^-B1alvmNXY|ht&VF7e_#>46dP{Kj^M``7pT8G; z$pUlSUI&?HZV&9|Jq2e!4-=gIe6Zl`=kbEGpOXbIJHnKsKydbRso?$k8-1PN?B^!I z^8!YHis0<$GX&@FV7)+a_VeX}v!8Dg{I`?LaUT|({k&Rm_VcTPv!CA;oc;Wn;OytG z1wUYpDbFqx-(2tP=iLPVaZjU<7o7b(O7Oj@|Mv^deohnooH54!WWm|b(*$QfA1nCc zd}F6xaQ5>_g0r8`7M%UuAvpW_YQfph*9(3H<>ej~oc-J-c-(QO{2K&kKYt+jr?lSO zBslx|JHfxF`Oj9t+0Q#szL47k`+1KB#8~sIsv!9m<{srahRtV01zESYO6O8@41ZO`#Bslwdjo`P}8awX_ z&VK$}aQ5>Lg0r8u3C@1*OZnITkFL7_x1xIgzkg`y?oLUO5CsGYK|oMSLXhqd0Rcfk zx{*ea?vyU21!<6!PC>e)L-@13@6Yd<@B4c8xh^^G*SXJ{HTRmeX3d(}`>5TO=eY1L zk81*@nx)mFKE(<@pP^^4tQhJa>dE&t2gM{JLp0TzUQx9~EpB1q9190W}1YCK(25&dc%6S1-p5MrBKiBb~JST=L&*|XGa}K!joEP4w zo^7ujTzUQkzO9|bH-jtBZQu`m{kAh)dF~Ex`@WSw0IocbfGf{a;aB5YIm_Y7^G3Mx zybG>8AAu{+=itioWq8NlR-cz}~M0Jbw&Vo~yvC zd%au1mFKVEdpvK0;L7v&@KJee|9^xl&r{%=MqB(mxbnOVt~_sn5AYMP@*V4Sv3(=G z{#zhE&peNK<@p9&d42>}o+IV@-}Y6WW5Bmou(%9x%j+b<@p)BU=%AqYHs@;>-D$Laiu)Rf_Hq|;*!9X=d^I;IS*X#TP^`to-4wY=bCWk zxe;7>ZVOkQJHk74v;7(dSDy7;r}C4pp~Wviyz;yhe!INI{|Z;0H^WoZwD{d{<@qpN zdHxGN>J2OB5nOqW?BkjCOL>k9SDsVAmFLXxyDe?IIpCv*nwNy@IhK#$Gvio%6}a+N z6TYO9#W#d2Z>`{ZUgc}J^4SkQ!RIq0;MM$ka1MNvzg`aST-)lo5&n_SOLxPkma+Ih z;mul`UxerN=K*fRPx*T3GkEO2R!($ZSJv^+s+D;nc+o-T>EIo5n&*UH^6|M4{C#iV zQgFS0`xE$$WLEy?@Fsp9YzA*`;Sn9+jo-5$^n};(dJcidN@MZk;lqcU&w!t3WWE^w zQ)2U9;rVUtQDp4ZA#d)8Zw1d3!+aq8Rz>sg;l(nVFNAA6Uk=~s?fVB@@qfa{dHj8N+V-~HXYeRKjwSZ< zq4Gc4?|-L)$8#?L&pFJ>F9ILw{i`~>wXZ+4gdg(rS10&!D?Xw(Jci!~91h>w)qY_D z{6QD<+3?o2%$LE>c>D(Ve1E+QzWoO)=P3Nzr{)*nv3*{B3;yp2i+>9LIH`FwA1Bma z$)cGjgs=R>JT3g1KcA2TzM+c6zXNaW$5l!AO21!O3Em;Ol~WsjwVioWc)C&M?cqmD znD>C6^n4D6*YJ)yls5*tngMoPUeHpsA2KN;1gq;mxu2uY5p0! zy&umF;oI9=d|P-;zs~9kU-Xs5_lM_iV?GN0w_g`bhOh8`G#@_Q$FWuL<$k`{0@u7{ zAN+*B)_1kn_6%0f%ZRVu%={kwqMwicg(vspIhL=Rs{HXat(+8eKfh;#ANtJV3&L}z zHZKLg==aYm!&Cb_tRDQ*$5u`o_}(Vw-QgL%oMG^iWi5UZ{3p-PBKTV0ul4YYO|6`L z@L|2okHfS3@%9(|Qa_8oP49314E~p2M@0AM-PB&U{CtrJ-o(fAbns%{E;-@ne7l9< z8@#`lf*&bm_51{W$;)X19~jxh$ADiMZ=M1E&S&P?;5q!fP#nG_t;K%` zACTGn3%H&SZVcb<_52n-GKrPb8?Jf4PjHRP)8JM8e%xC4a_`q0;gNm*e+>R(7pu=1 zxISmay?>)XT z{Ia)8J9s@m-oAy$?_uQ+gsVQ2;VZwk_?hs5*~~Y?6Lv7)4lm&6yR-1mJkOWlBYfWS z6t2&CiTSQ=N9}U7qrFZF-{|wVjPRO1&&&f?IpxB5<1pS6ej}#Uryu;Tk5`l7OOspt zO!(|C&DX>8`|+Unu_+JVjj{NXh;QuYh4b)%KEC}6S9}!DlgjVa(8|vM*L7<)ctf9W zl!oiNwLE;D&p(>MbsgFUzSfVA!SEi*t)3&`#p;;Pg?IG(r$57w^|bik;oo`w_rMqA zu=oe?pFF=&3)|0?&j&vK#D}jLYH@kthde*;zzg`o&FAnMe*83mS7~MC_lEoM6EP58 zqrAm0gCFvBo;C0|ejdL7@9)?3SKzt)dOU`&Cn-N&8ryc`!mrjg*Yhljui(dd0mOgZ z-QsJ(Q^Yo}2hUU7{9E{UKHnMuuR7l1C&0CCJR7d{+lBC>ZLOSDaJ>(454@e{@gTfz z1}ox5kKz`!pDUkQ2TlgpI&e04o38fzh2hFW8MxNZE5o&ZUI(uA^Jeh> z8z0~qLp$>Nt3O=pcthb|q_+5(aNVbv51-}Z#tOLB+kb&)>0{+@g)7f{;aXQe4gb^U zA$Q=)^K-cJ9Q}RUzS>uLP6$_?)4-MIOz^Tft=yt;<+&tW?~ketSDx#`^_*5qxboZ% z-YSvRrz>1}?gLkzN5gxiwsK~}mFHz}<#|0^dENn6o)5trHn8m;hxdtTeiyFs;2v^ZpTKp!^Ai5Z=jW+Q*zYNywW`|djPP;3?(q)%i*GExD7=7Q2Ym|f)W_mK zgAez0^_K8R-&uS+_+WqC7yi!Y7O$Uczb^PX=S;*m^6S82pN_|J;FVp7#*`mX8~8 zOIdl!b27iaOAPPf>#n)rec!U*&j+9F^SV#q8~t^4cr#zmZ3D09<824{TwmWF0)IEV z)n_EUhaW#n;9AdJ2Os43HFm;Ndix%Q&r53Cy$ILwd`7<_O~-hVlAgyjvI_AI6u5 z@%>@^dKi!H^KtH1rZ8SSjDH@+JBRVnVSI5I-yO#P4&#yiJ|6c=p9e!P5+=Sz81E3q zzYpUJ!ua+uei8npmmTNV;0JwP6#XOnIrl457%vV_Tg86A417bVz}H{(;M;v1YYM*| z#o~Lwo4;$`55A_A`6PJbPUbV=k$ir&9-hk2*IVKBMq4?j;2O6t!b^{{_-F8vZ<kaGW5O!jROM^fBX%Lp8{|9j`?i(RPU$z;Yt0v>@Iwz&&M9a^>;3Z?T>T}|C;ywDS()v1O1Sz=ken3 zJjpD+23-B?3;2;H7XKYw$JGFM+FTaD5Wcpn`5JhtM&?`L$%mQ$0l$~Y{1iNn$6tXj zZfo)P;i^wef6hY3r#uUMmzVPaysOU-%fMUtJfso4Q7@}c3wRRu0dU0+gZIm8nc+Qp3NFds(-j`QoB1%f*42N6YkhkPd}<6UXC7Sl$2Y=t ze|#Ifn_n-ShU@I|f-BDh;Ol+-83|XO=fIWcMezDQ-`)mSo{zwlhpTYq`3YR{as2v2?V>!Vfh+!P zxbj>Wt~{5A7q4!4t_xS5TflXns3TnWiF(3ypJ*^#?-LvWZ!^g1GZ(J*{TY7I=gDi} zx=*wLz9FBLzXP7p=Q;b}gL+u}DY)`~2d?}-fh+%!t66z!U)^s?1V5d|;#iysMByNri#^!0~X zaJ9=?xY}h4TFC=f-g5xg|V>->2yVSDpvKceb(mPlGGZbKqkJTKrPD^1K@Uw$Fn% z!~{Qhv;?oGJz`~DKEXk(Sh?@QHO>@+>+?-M zf-7&8;As+C`8DAh|G$9Gk81I);TmVYgDd}o;2LK}!__V`;1!12c2~jGE?eMgm%VVc z%Q3jxcG`5dSAHqcTWqePjAHkT*`bnT+gvgfPb9Y;%CE0_cC7wFXZ#p4e+jh ze%u9bHN?s}3ZL_h`33lgt;}!1YYaAj3hx-xJZ^3KuKawI-d-nx-|+cBKDhE(E{r#U zYkY1E&(_7ZI|#1w55vp(`oLLuin>GCIdKQ3xJ<7`e0KU1bc}4hj@29olDyLl-9}&hEgz?|Q_<4BgXjaeX zaIN=7s$)M_o^}5tJ^a3}lazw*_Vv96a2;38;H7*V>+C_V``! zy1owo2YkCp9Zn@Pm0Q{vllP z&*5o(-kie659MF+>EK;Fz9?MJsg{IS_V%p@S9}xr<*`=(-f+bagfAIq@w4DN+!w$< z@bPB{yt}V6?1TU7=e6tbIfZPyci~M+n8)@0p?oH8WS$tltEG8v_)VV&7J$Fy$5kbG zye3voZFoN)pPRzx`#Ap3$wO505Bp@qfen_<8*mJkwx{ zkLLH^l;>M1%`?Ft4l&OT&ymBt1iVIW^Rn=2-hb-BpY*c$Ch+P%nD>AyzAyZ~uVYSv zD}Dz2ijRkz;5z<)hfnqM>{+<_`z84H0#^S>4ea~><=My281PXaSX>tPeQ)2K@L_&F zEd|f)^Vo9mS6+Tq__q zKE>xDRp9!&r8VIN+gte!;rhF!&Eb!Id}|Na-!1I|FOb#B?+w@AEgcA-=JUBxaQ)rV zAK-~gTKUuA`n#ob;k|wQUk0C+)XG@{Up2~n7yMtJ51fK$_5Sq?UVfmJlhU`Z_O0XF z%?ww2<$%8!Y~>VytGx=t{~BQNrQvF?^6(rnExsCD?Nu9oxwyqQhO50=!Z)_I_>OS3 zS66t6uPweWT!!d}&sp%B#jO5&;PL$U{|jEfuf_ihpIgm5mX8z4 zk3KIxIs6yzM_J&5eg2RS-ofWx#o@!p*>*pMtNu;kvwS|&8vfAd2}9v?ykCrlcPwSw zodh54^Sznyitg*-aeW-#3NO{m%0CR(eqDo4d)MM)`n*#4|N1TS`0x?letF@wOI!Rq z@Ed+z^BH``M;2cf-pYL_yt*Ifqv82`SUKzAgZ=eZ_|Kg!{vUX*IOb2`?fkkpdo%mF z@>4m#z0M2Y^@(|Hxc*LUefThc-4Fg&e=BDQyz3D2CGgokpIi+e>*N1^_{GqUy#6{0 zFW24t7F^F|K7i}*8^vjEzo-1%?PsqO!v`cc*XNfgzJQlo1o3fwUi~TjXeukGIy`eC z^V;yUJ|Alg-{|?#`)F04529N+JrS?@d>{CGX)Jy!JW5{kP4Gjh&3}iNOKW}y{-GZa z58+#CTYM^?cdPyp-OMwS7LhtV%!N;_-->(Ee+`+s9Jb!-k zZ{Wv$yqXOEpsvNwgm?Ahd?);*&vW*}5B0Kg?!&b%`4pZgyTzw$W#5&bKEB?U9=?8< z#c5q%@l|S=S3rDM-=01vTk&~(eE16SIsLk|Km2HQD}M;QSy}Vx@ISJc{|uk%{bFkv zKO4rMh4G|5KaKTzbD`(+ReruOUKL)|&yOA8MZUHAe*;hQzWG>qx-RBF!5{f`^sjJ@ zV_V>R3tBm6;flWm|JLU}G27VhDGyqgNC5vavc=_rf9c0b0r+Yk2dcq!KK&eC!`F@b z!L=?u6kfsewg9g86D@_O_wjQNe38#@55RjBv;92>KVH)O4!ot$|DVBE`usLV+yBjT z>Pq%H34D^zt24s46|wlY;2%dbFAD$G&tK)>L*BIbTJUV%ubaTNzdgeEm@uyA&~;oL z_kM8_@t2cXeXheBjy1mz*Yn=b;K%&DoW$2rwB2$(&ZmWE9AM>VfiLs=l!m{`VDS~< zs!uie%8nM_0{$$Mc?Wo$jOO3MKlbxuZ+H@K-_h`Qa$7l*;U9Q?X2C1^xVj8pCyABw zD_r-}x5A_P_;47W)X#$_;m5jK`B&iD?p?UH`xLJ2#`N>N+P#=0bd%t5o7_RM(hHJYM;o9y( z_`1SY{&IL!AFnpSwcVX?ZTBEt+r0q))yF-3e!SZKPUwGLe?3IJw)+yU?Z)`Zeoy6S zyUF1RMp#@r_=YIvx!~GvLAbVC46f}~g5UFbZ*}+x-)=*=w%ZD>?RJD~yM5ux*ARGg zKi+l?m4)&dk0?RL)-3i_-OCfF?{_- z$I0?x7M~bC-OoGe;dw1QA{V?@XZyjs@a%q`Dh)5}`TrFD;$17J4!oGxr#bvyZ;S5; zAKS$IJNU86=0o9mbv(eo?_}{a;Sp)fm%#h``Eeb5W;%=C0skkb`C)iWpXZ!|@BY-{ z@4$cab%rROC$;ZyLo7ZX{DzM|>EUOpSbQ#cqp0RZ;6wdxioG1UamndhnP& ze`^WfQo`ap!SDHcMIZS0J|7+gUmn-W83m8z^W;hJFa3IBF1&>2c{zN%9}gSg>pr&a z?u6@kBVEUWv{T6}Z(Kp!_cz^9eB_#W`TqMHwbU#Mn2 z2HwfXfhq78e%#K75Au9!9<4mT^!fQF#OE1k+uZ|iRL%St`~z>tzu*Ubo^}WRSwk!5 zIXtS*&trUTKUY1=RIt~H;dN@7r-z^R{*?=!Jg3FK3qKmiyfpkrfBh+Z<=Ylt2i~`_ zd2{&kg619Iw|zacCp`Ll7C!|3gP+I8!K?WBWg5I{JS%4*{HM0&tKs_mrY-P+SuK7q z{A=%b$Kah4Tl_`%WY60z`1ElW{{-I4kMk)0UB|;BA4lTB3y!jKQo;{)H_rl}Q`$T) zys3{5Mc_S3SbQ1yBR>u+!{_^P-T-po2@D+KjoZsPPzA!%s*LwXK_-a2tUW5PQd3Xq)=;goV^E(|6IeXZ4 z3&LL{GA{zp?)|6)Jn{DyUl!iSkLQZ;1D=Pf@IIrhoLcZi-tP6`M?4SB;QjJhIc?$9 z>zRKIzv1opE&OjE2l~KE`#R5HcnYu2DEM&C!vuH@kDm@7?eqEh@NPa1uYgC%VEeTZ zp5NCqcf;?uxA+L|4Y>YJODGTf0-nwLcgXh#ym-L>2zZTv9|(9?cO55c_df7R z-`Owy2rt&!d{UtNgMspoAztO5hkr7_e(4$f8$a*A43vK;P<~-Q-?ILt;Qjn{P58Bv zR#+YPP(BX_${&Y#)qfs*a_ARde=Q1>bHwPsf6pRbO9=m2<*E{`KXZWx(R#+eS zUp`;`9$wPh_b2#fzh0OF|8BUIzZ|~5n)ya}g>vS*;rqLo{|QeO-TXQHgQDiI+(Y@i zX!PH|oqRqL^1lK;(p~MMeCobsDE?9)en*&i&DT^;yBhXOmk_@;iunU~m7mnN5xt-N zkIK>Kag=lq#b5T=(6_pXSN*$(@&0ff&p*QJMz)Piau03yZ=?VI-G=x!(d>si1Myb^ z@y`&iddBT zuhSZMhERoHe;r5p2{N0XM*Ll`Pt*bSbM0>$KTguSYrnL=x#5!%*zXrbIfcBOI*5Pa z*HcXc@zq~%yhJoBr(M89`Txbs>5p@jTAENu&f527# zS-8r-6Yx;^zMK&8G~mJVQ~LZu`BeGY;VQpyz(eIXu-%F%9q?fJjo~W4BV6V8bq}Q` zl;6JEI)!Z-2PJEq6K`j6(8|sz(dF906(AhgzJ4Y zli_+l&d&i4ZTGI1za6e|Z*RbZ{o*EE`>Xe1FmLgO*oHzL+HU37|AoF%1Uy*&dvKLs z4z7IGat{?7Iu45_3zZ%bq4)8}dj0>Q@>Nc^Fy$;lIZIRiS4_kX#H-&ONBm}wzaJ(( zs?XC^&jTKx-aVGrQ|0G^w`^|pDFR>6(Y!o-gy*@IySDqcZ?`YJvOj+^1?8wd3*Z`O zeu3A>V)faH^6TsQ7Q}y_!QvkvzK_SpA7(#iep17`eQR+!;bkkD7l!Zj`EY%>_O}IG z^N?@hzxs9TckZD)U$ssC_wU?*hmOxFzF)tg9Buaxcs5@LI|tW(-GOVrUb(B?cl&k| z`n+EG>{r(+Thv|gHPV>ZK)mYN2!6!t*&e>*9V@3l%KzHSpN4pquje9FpFtjfFiiYK zlt0Pi{|yr#&*!Hqf2qgka94g*pF)V=>hVnxuk&eVxX!1&0_B9xrx7tMKSKf@I!=$EWYdrid;GyxhS7;lrzxD<^INsidtNfR6m9OV|Liq`mztqc5HsZg{L?~~y zGTG}l10IS$@9}v89<0x&aMh)NU{C260ly#c3UHO*KHv`m@q^%sUlQ<#f%qK(e-!X@0e>9uM{t#&c8mpu_V-C3 zz93xjbprl05Z^K2&jLQ#UB|il*HZWjf4wqL&htPyewT-L zr|L5v@v6^4_?qapU48yas49^H_1TSh)#tW*C^T{)KIV8UPxVoJBDm_A4z7CUc31fc ztk{U+h*x{n48%tX)TaaDwcVa@9arN6s>BY|=WTcP_rh@1rwm;6 zsfO}ZpQeaceFni*{wTQqPUvK~=97!yy6#x*9@^Fat~-33Jcsx$zP|rgAU;kYKgoak z|MC{{r1ml*kGt}g#_xlcf@{A%hU@yeHau-?+rSs@p{m3U)Tck8C`a}D2d=-L^#ZQ=XcKMw%0s>+_Bu6uj?d@QyN9ZhAW)woh}U*M55y-7#J7k0 zWo1NPl+)+~&ky{I>gHnt*m%#6L%nW$wI_`t7?04qFxA?mDia`0g z7ZLi6Z2?ad*soJ4NAF*_1lPE63$FJsJcg^EMxSK$4Q(>C-8l9#B89u!@!;3?gY57@ zp3nE-H@jJUIk-NDww`-vyNLt)+X?a7-=1*o??AZrcNARvJI!6&)&4F=y!Q7uxc2uD zT>EaOj^we&_@LA>_&FG2HJ+$3qf&Kju@!H=?aP4mmxc0XJT>JZ#ySA(S?Spvj?`XL8cLrShyBx0l-RU0M zZt}qXo@E)btO5Wg|tX#)Od zz|#i&7F_ELuiTZN@6tv5_myP2eGe6pE>KP`xXLN!&T^^-;?oDpX&G?cs|;b&X9ME3-P3{itbzFZaOEM|Oxq6g zkkUO=M7BUVZwLI%fR_t+_JG$%`5MPsz*YbDaE)W%!j-on?x9VFwySY_65=(EErM$t zTMySbwim8(?4o;UyEy{;`z+u&1Da++(X+f7}(#vh}Zreg=>G$!nMCw;o9HF?%J;QH|AVx7v)*|n-Z@5 z%>mc`7KUqoKXngn_npB0HiN6*eS>n;?}i293kAxV74UZhz82+Ni){P3J`lg|HD$6Ci-w7> z7>IvA5Z^pZd`I{gKOqeblv6BF&K$%mpDW={{YJvtKslk~r|Mg_pL-GCptkwxKz!%d z+s$AcaTA{1{RRAO_c#mee?nCcmGho^8h8o!-0%b-t;nUpf!e_a+fzNaA4qxOx48GKTS-{(dcFw=H1U$4~zj^#Y_%`{nZ|> zd(yq(y7xQ^u6w}K;ku{046b{$Tj07^dJwLAmKWf<2YC;!dy0{Mw*6E7b#E^rT=&>A z!gX&cA6)lrO2T!IqzYX33>w0dDF5(e?!Dn!+ZqMen#**!)=-wgwf3MZ@Z6z7j&Nvf6sjx{C)Q=@DlC^;UBtR zfR}T>2e0TJY5D)=zp{Hmcy;%T@LKNq;C0!;;GPhE z#62VYxO+bMY4?)w^X^sPm)sk|ue!H~-*oQ{zw15<{=j`Y{E7QA_zU+zW3|+HZd*!WWYn^)bt7cIrxGn7XKG~mp=q?CE)#Dm$NyJ z#orHjpV$6T8uMoX4{f)}ZSzR0?7Q}Bh%XYyg5Q2>aq-~?51FTduk{PFobY*mJ)aN0 zD9P(ez5Xfo*mi5elie||2e0Jb6#kblez$^udDF`21drzDk6!S~e_8x6 z_)@>=`Xk*hB$mLZ`}O&HcnrVb*$N-yH=}mLyZmPLIRa1a7hsp+``26ib@*yOP9DPN zp0N0c)%IP-&vl>QCxl;1Z0(y2p51SfXM(GqMc^rJ*!C*JzkO)l0e03DtueI>JJFJ|I@PmHAc>u0;)zk1_eL>+O{Ci*Tz6!tc%C>tO-u{;P z19%MY@6X}uA6tBkHTGTYyUgg-z+?Kj{{Y@?qLm+Mt$kPfF820{2Os&^;!?w>9yHGmZ<^Wq#XIn! z{ybJG_-{V`)PV25VC6T1|Lgs+9ekdTx1HfjBU^pGgV*x?9RP3o(zZJSUixqI@$iP; zj#J_JPg(pNc+_X+OW>7!JX{U0<=2gy;G=xMw!_=`JmCPmu+P8Gz}4@r!`1H|!`1Ji z{$l%~<4652Azb|~9bEk`7hL`BJ-GT^8MyjgRk-?HeYpBv8@T#iSGfA!0J!?y7`Xb~ zG`RZR&v5m-U*YO^JK*YfN8svr7vSo5x8dq{k$v1!JMQ=A`4Yh=`0i~c3^WpCB z4I6E{gW>9TQ6cz)bH*gUU4ts>UXjI{Hb!( z?^3|k@3O+x@AAXd?>>O5-&KUG-_?ez-!+4)-*tqm-}Qp4-wlVW-~9wvzgrBy?Kg5Z z!Uy|#Z3kTaZa=)*9y{KS!PW21!r%Aniz{&TyW8++euL^UT>b7Pe79c@#_;pJjtBL- zc<@7hBPuyu{VpB+lwa3mhri+H&3EAHcctL!cb~%5@9M(U?^?pu?>fWP@A|^k??%Ga z?`8?Ju$9Ik%%hMzxm z{HWh0g{$9Xf~()=%`oY!jM#0tZroh$jmcwh$i}>&BH~1~T z&ff!9zdHmU;Pd`daP_;3@U`*nJbMGKe)kXjsLx}c!`1I1`}&QJhvS*7{Mc~yyF~Ej zzJ8J#u6~yZ-pa2xbHf|>d9yHF{jMxr{jM5Z{jLFA{jM!s{jM8a{ca#!{cbE={cbv3 z{Z7ZP@~nQh4)N-DTK84F`rT2)tKVIOtKZ#$tKYqVtKY@^E#ki~ZCCY923Nn!3|GH< z8?Js=46c4x0j_>m4_<4#)$dDq?_=h=Z=?FF-}OX%HSb3Q;p%ta!&kqw@_&G<-%Ww% z_WM3_;p%sb;g|e+a1C7jZX^83bgRz}xcc3Gc!vuXe;nQ~OQipPa2c+C_YYkC?iF19 zE{?AcDgWwsDdFmO+2HDT1>ov;CE)6JmEh`kpTpJfn#0xazJ_N#Z+YttSHJrnu6{QW zu6{QUu70-)u739$T>b73xcc2`xcc2Sxcc2AxcXhJZMNTP$A-J@bt?ELC(Sd%)$ek` zllgt&0&w-aBJeZ5{!kjOepdlLWS`Zi8eIMEb9k+vEWR;Z{jL>!nBTAL2v@)B2LJP4 zE59GSsLww~!PW1kz}4>-!qxBA!qxA7hpXQmf~()1gR9@&gsa~@gR9@g_}%tf$B+75 z61e(ZM!5RjTX6NeqHy)Qa&Yy#&*18Jjo|8c?cnNn-QntYgW>9TUWRf7yP^&;osHn>US~V1%2L_0Iq(Q z9Ny2bPcy*P@7{#Jf69)(eDESu&5Og;?>>gB-)Y{V{ZhYcig@+A4si9m@8Ifp!{F+7 z6X5E1bK&ZDtKjN)TjA<=2jS{>XW{C1H{j}bPvGiz(fm0M{q7h%)nzOH0=$@yC)eTgd_DFqJk38=P9lG< zM8{82_muFYzHXBaKF*&T$pOEf%i5(VysgjMKZhUi`!QYNQwv%-ec_9JeQYrN=6&0* zG4RF@%_qRS+%TUBpX}@2^WhOutv)N@^}HQ_fuHf`QnteN{KPJJuiaLk!|D!K753~f1?ikGkkKyOXad5TcM0gah&uqBbaUuNQRaXC1aJAz)_?v!T z>Ua1OZ^u3G68^@&Gw`+k{KFl1KL7BQcz%4Teb4(ka31)NKJR=NuJ$ShFYV9sd<0i} zRf1pg{!$aJ_WA<8=8EOBIb7}47Jkd`7k7cHy?Vgc_;@uCuJ#%Z@8autKfu*qli`)m zS^by5qt7wl0w0v!#+mc*EDtRH6?~%i=a_r!=doUY>-)M0wO4$2hr1S+60Y`24?n%o z;&Z^&UU}iEeZEo{uJ-x>KFY7-%EQ%OpTa*0eF(?vui9|6SABRTUpHIc_(dM13M_tT%@YOfXWs+%o88{lfMt?)z(EPfwc?R6Nw+sEfKaJAQ8@bWLL{9ACf z*M0b(K2Q4>uJ(%J}2) zuUzng&#e4+;A*d;@bkVtSq855`WW7Gvz7lDTsr0w{e0XU22ba& zN5jW>{wKkk`g+T9_*q}4S_}W^g4Oc?Je7YS$O-sLe_zricy{lgEci?yYcr6K6eQJjB-teP74;%>JcGv2!bx`fsPYcXv zBfiQL^9}H{zAmv9{=Q$Yoq~_?^V9|SWWSz&3Qy@DV)qI@-{%7<{5Vzp)B63mbnpb8 z|3dI(vuwZKhv)P6X*Yyt@_M$1*YWkG?(m6z9vlX*eaE&t8NR@e|D|yCul4XDeqPuC zFXZR7L-329pEK}CjMtp3g5%5w*}^4tTiJP(2^&tu@q^8|QnzkXZ}SDx3x zEBZY109<+g6F$brne%Yv`EU5*jCOv!3s;_>!jAWnr|<%Etv)T_%JY}-o7XIU09<(<2A}2kU&h0g=SlE6-cRSimFFdJ<#`kQ z?TuE?LvZE!EL?fM23MXRz?J7$aOFALQQN-Sy}O@B)4`SJEbzm(?DyY?E6=6iYkb_U z2v?q~!q@w}r7m1~ZVFePJHcD}^}`^z@;nxYUw*am@uZAnnTj0v`Ubymn46Zz%f$v{qd3Xd@o?pPH zO}F?Y$L+h02jw{x{Q7Q-%K}%PbHeMawD^K><+&JKd9DP%8q?-24dBXi8@Te^1+F~z zfh*6$;mY$Ec$|~AUyI<%^Ky6{Ux(ifSDp{ROJ20{Pr{Yw^YDW{E?tK!&-dZVbCeUd z9kqKJf4^rkxbmC{t~}>~E6?x2mFLoM<+(h3jQ6ibaOJrLypLbM^nxqT1K_=V{2vKd zp2x%2Znu0*gDcPT;mY$b@V3{joV{@6`8Zs8{tK==--avCPvOe*D|qz#R-Y7pT+5E<;L3A7`1l{K{1$NK`Ac|DzpnoVt~~2GS>-`_9)XFAHlo&`-bA3vES4FD$hyaw=P&*I=J$j1-`-8vEPC# z&+o#O=a1mY{C?BtaOJrfTzPH}SDw4WmFIzQ<#{-~$iJ3{IdJ895qx$$J5IL2mFL~? zM!qg|1g<=vgeURy^d-3Rd<(8T{|hhb_qh_B{omt3c}@dYp5KHk&-vlXb1}H`TpFIu z*CFe|mFGtA(QB>V-Qdb|FL;$z7C!{8JdcF`eBR=Jf-BE6;mY$0xIW)-J6w4_1XrHV zz?J8#aOL?vTzP&9@8Qp-C-VE=8V8i;6!0nQEe~(QmFGh6<(n+N1YCJ83yx+F>vL13S4=f4_BU-!2ADhdDsb8p7+Dw+HCQE!n+jG+wU>Y@!`sIdiYnqev}`sJQs&6&*kCDb9K1#TpzAHH-(S$ z=L&klmFIr&ZGN9?5?pzn0Z-@mKNi82=jHI4J`Y?E*YW&2TzNhU-|O!exC&REAHbF8 zS8(MymY>hn?#gpgxbmDDzWq_ee_sXR%5xETf)^HF6|Owjf*+k|@r~fha|`$?f1a-c zTzUQ$t~?KgU-A1yQ{c+;0=V+L3a&hFhAYo|;L7ts_%MGz$aT2#d>20dmF4XXUmsHY zD$nuY1N?qs3b^u|4*vZED?dA2dCmt{p0!@3`ed46+r@dkOy9utm?S$)jl|yjl^CCQ#&u4DIyC#qH z--e_5{dwj8rJpYnz?VI?dZvNb^yd<@!^ise3c?TidTa^!TmC#iMR;3ZkEjJ-?(auv z0zc~Q_!T^|uiJNr&-8V#we-?N+spY7|1i{MFDSl-scH}5mw2H*Ch`2o1@ zAD@Po@p@i`Z&_pIJb)kd=SdujKKsHoz72t2_UFfDz-ynk{hSZq>94oIYx?`Y^mFBB$TTbGGU6{>GrtL6zrj4F z-;Y%}8qX8J=N+~9JaEMqgzJ8M6?pvw)~{>9U-)w`?cr&B-u?}|kFU>+f@k*U=zfIP z^!~LRp2pV~cEBI_`Rg$J%L$f;bMQ_+FTDXj>FZjL;rV@hi{j@o<^LO>pTvi!_W0Cr zy-(mxc=UHI&jsKW{JDh>;6M21x_=D6?9U<8gnz!w^3WKbeu{ZJcwxV9`z^eRueS_@ z$Gl_ZjDb(_{x}t$vuWxLHFYx~L2mFz*JDh?S^?Y7|_g!xFxeu@4 zpZoL*K5DAP$M)+09S>Lhe36_!)8aG3i}`slFT9&S4_6d^A*&rHAHkb?d^Px4???6F zZT$Fb4X^dm>e&VUuf|XKQ6DEqz*G4AZ6f^HY%6~*{HCuLtbo_{<9QSO4gWmPJ@7$W zt^8x~g+3qn3qIM`C-1-qPO@^I!_Rm>igDF`u6DoZ<5*(&g!2}c92QPKs;zz?TtTvwpFSEsbF}&g~ z^Y!pe{(3h&c@#VTPr@5`IoIKupFM*o)cEe_TeV|$->+2gJf7!V@N_Z0&7^KHMX z!Q=RKN^SU>6BgeAeq^EfH}H9Wy*V6S(A#S=e7f(~eE4R6E_xNbfyZxwC);K9*$4l? zkGB)>68;?fWw`3|9DX{njh~Txey4U>`kVxuV+VidY`|22Or||%%O0VGbfC13FD{XlYD-A5q|8v)&Dtssn260d3}}V zf^jYXso+ulc*p?1<<}|i!T0<7O^U-e`uJ7{uK0%VC$FsjJ>j};?FT>Z=fUZ4UANAK zC-C{qHn^@scf*hSJoXBFuIKX>e8N+!e>5MbmFHaln#YE}=YMA*GrWrDKL`BO?^aG# z_{GEKjo=G?{L$z1s6I=5-ETPJi+Fypz#_w|)K- z-;Zn6bK6?mucYv;Kbe03f9luuW#Fa!db}z8j;{-~hUa@?7e31S?O=Fg zUq_k%kL%;)RQM2|C#-wUiQ{J2p5YyWBcl?48`uUqDZXY_Tp z_u*e1vT`cJb)Tg+T=!XYoT@&3eZ8?e;+2O%aNVC81K0hjDRAANnh)3ccL}`QEZeW0 zaIKT?hbQs#-QRHC2fPWd>*wW1aNW;(0gv$eGI}mpc~hR_-?#e8b>AvIJmw;c%MVwc zi^G-Y@^Iz3I$U|K4_BU>!nXQ?$d=`Q$pC#eSXGOU3 zSre{&egV(q&)al@E1&wi$J(y~eqG!j@yh2=_z|BUj)N6S(sE65ht=;mLfxM0ry_)4&(`byhaG@|hdn$ma=#;L4}gX|!GC zvpnLJ&)V?VkL~#U5`N{mc~|&(zrO1S*WbS$0atx~f^S=C<*$XSK8M5jlQ5pb_d|Km zdO|w*wz;<5qHwJzl!VXq>wlfke0 z^>QY-J~!qq_81E6r zXN2(`@F_l??}Oj->!8bU)hEKwGs=%Vbr>%c#;b(!Heq~V7@rZwH-zyMVfESCgWwPTFrNeO?(4cg!{hk#QNP2>`uuP&JkA*_|1$g| z&%;glT0g%>jj;PR%5z80Lu`0vzh96UzSrlUIpK}{zEUapbk9$D_)1@oZ3ge)<+p`j z_47zCctO7}HXQ!g=g;%t-F+Qn1H8Z2{{sBnddu?-c#{+6kKsDMNA>f$@*LsEVM6#N ze~u^}T<7at@Iihb|2_D7dj2Yme-*~Zhw=4c{5U+R-%o!4f9Ug~=kV!%JSX;fkn%IZ zkJnW21N$w{`QbXQ3d0Bc@m2$_arg`P^Ixs}Zty|A4%i!>+n=AA3D>x~0N%mxul)ws zIIs)ea)#CC0{jP`PhN%B^nRMqk0a%?uV0rHfYMxDp!+k!{4X*QeZ+J~Vk57QBe@%m@_v7g| zxQ?q`@K1JF{cpqn@cV1e;G_Ng5#66(Rz4H>{p&>VR-3H+bns{%pA(+akN-k&)u&<@ zZw@c$<@AB;^F0T_j~B3c#%%ZlUzb=2-|oH(uJ}LT-|ewH+=7?&`OJOzIA4E=?cbH> z_x%2HLipgNR(=lnGGDjJ3s2(Xsy_c%bl@Hzfm z`e1k$kDm_L=K#-z*YxwndU#rYe&!Fj*40nJwZ44;{%o4%^9Ee^$0PZ3L&}@(kH>(w z@#}^3aNQrz3)lVe(r~@cq#9iD&EYG3yItUl9}3qx{8+fwy=TGy_1A0Q%JWvZ^1KUv z%g3L?aOL?LTzS3&kF?6#D~4a^sa=%kghXVQ{s} zXn1lje-ga4uWQYK5A^bv!qqO@;A)qBaJ9=ZxZ33kJe8l1p25{F(S5$Ac2~P3gsWZB zz|}5q!qqN$;C*x3I93L(cKH~7YpS)&XK=Mk9rzf(zH16U;OjZ9;ZObfgsyP4%W$~b zWjtK%G7YYFSqiV2&hoGou6FqYu68*ISG!z>t6lEGb^Y}Ser%)VIlkYo*72a{yOP2i z_`Ep}T+eqEfNywWqBaHVu5qRj{O)GUb2qrgnO^X9J|7+eSKda#bNhYCpWqt* zr@;qKw)!lFYn=HFuKe$TYn(X>SG!z>m(FGF@&vASiR#a5sNK~r@!@KhRB*LRR=C34X$>n4S%}D^4u7{E31{$5}qTIc^A0aWhh+jG8V3OnF3e4 zEQS~I>)UPcvFEJ*2jF^+9b46iuF@>v|N_1+KR zd;I-$jo?{!S~>mUCB5Be!gXBDhp&BLIfB9EI!iG5>+j%5U*c;CuXdP3qTw%D zRs4M>b>NC`2*2X-J>hyzwIBSxj~mnBik}M~SkUsY4X*gz@KXN%sVnf$-EYD7`0*Jl zsclF3Jmc#O3E-c&=YelOWO*(CZ*a!EGJL47o7I39^z&Lfcx}HQ+8JKhkE@aJ+J0Yl z5`6zOtIs_61HZ4d0wZ0z1Fq+`OTn-Cx@9@| zcfM}i6n@+18?E7=`|}%p;RAhq9t_{<=e6l@jh}Pj%M00Ywi&MY?eNe1{gcX*@~QaC zi2u^Z!^l2wQoN4;H{kjly^L`6_c!5h`SYtE!qp!uz)PLB?33vt{xBrI6@bmb6cq6|* z7~%J0)n2tcE-pN}KmU^ozS!4q--MUUX2)AW_;kNcDGAs8{z~v)58M9MhX3){yeWLJ z=ea#xc^e3S?&r1P@TcCt^mo6NAARo9BE+Zl{rw%D+}Er3z)yL9xdgxO?Q$J{!uxMz zzYnSUocH_SZ@`cH_>%#CKex3@Huz{i-xr7LKIw<>p8kADE%^GU)-Ltn3;ljmXLvVX zujvlI>(9mg03Yw;{!DnYytZFU;B$RkT?hZk$Kf6DS3a*e3@`0|4zA~3Zor@T^~+=U z`B#>osD9r`?YMTfc`|qxU&nk0p2^Fp4o~vX^AFeG#cl%c?AL)`!u5BtzlN9c^L0puJ-B-&*AsydcoCR1K?}?cpeE?dyR*W^?C9<_-OB6o8U?P z_&grQZ^IY*I%+&0pVYpEd_5`&e8mDgK1;$Id)}(RBYAt(g)6>O7#|An;_KB5;i~5{ zcu&7RIu5Vv*DX)r(KB1WNaXj)m4}BuZ%hy0?9bchhWGf%@>3Wd+xu5pxaw0MzU+~e z(+ob?=T`&Z4Sij1IDEqyE9VFJ>1pOu;N5-Qc@6wiA6GZRTYKL2!?jJtmT^N4v)c!~4oZ^P5=HLnaW>d$xSKAyIl)3-YS@eTaA9S%=>)XHB2KjP<+ zjqtKQue$~BImgO*05ABfd1ilZPW4>t&wJ#A_we(0b@+I{kNi3O{3I*?JNQChpXm=D zyU5}fz|;ABZy9{5ABVf(HGRA~0N*>=%D)P)?8nI+_&(pSBtAYVKW)AKso}@`xx4q^ z!&cjNi@|gIe6ke$q|dKDf{*m|goUq9b9gU_96^=S{+^=T*goi!Fe8eYnu zb65@^?D1>iMLeGu;afbPSK+bzzHnU6tMZ@R=Y@&kw|u@)46f(ZOT(A@`gsfZ2G7rz z@S>j2G4N=x)|y2Z!$`&7!$q6j;`B!xfq zd43W2hdvIMfM@mdNK^O#A0Jx7$NKm?629`8)pI=jZSNQB;2-&Ua|^tQA0L0ik3O~X zZ^BFac{7fmH823hBJa;7e(zG7XCd)U za$LQh_z@lLe!QRfz(qDr8Sxk7bMb``g= zOPu%$X(#=O-?6jZzoUuk`E)$-207ndOv^4AC-)$(zYE@n_{}mtc?9vR z^_`=0jcP#Pmr5;WvuH`N8@LN6n5#n8?zw|!y=WRY;5Pw?EclE?~m2td{#7~}M z<7{RAspUI}50vZ1U8Mi5^}lqGZMW&f^?MV06Te%o2L=%TtBfBGCEg(IUd3ibUbLIHIn)rCR&iS6W-pBG2@r80d+(G7NbiY3#pHuywvGR>F-ntLj ztL_2BRrgThsymGM@6rz)N&E=WJ(;-b<`P%kKM_~m8N}1%d{jvM!0om@%p$J3cN16L z2Z^ih6U5Jud64!{!h_NBXT(h^y`e#8vk);;MTi@o78R z}`qlmAT^VCG*cb3}tQ;3g} z>(yz*x5|0#O5*xGuA7J-DdSOh5x-ILnN9pr=^s8u{Hu1hT>nQrN9IXiCH|1M2jW9z z{^%3pFUt9S74ctQv-Puq_}&XG|Aly886WN-_oeE7A1c>l-H0D5_b2xuuFpjsO#Hde ztZst%0n*=}Nc>=#Pn<$LA>&BXiT9NGxI*GJ(oSw6KH@E#PYLm*a-BJc_@mPAeu8+< zmu;K{#0N{9mx*^MxAu#P&tGBr2gFx&vh8OD@e1j;t|4A5{h&?6AE>wSw-I08Xt{p> zSoizK(%;wbF)Oc^_Rvel&y*i2*JJ&OPmuom0OFU(b>j%)hsyD29Pt;WJ)cgzMvf;_ ziJ$X`E!QQ)Uz2xx{^m;JS4(}aC7vn$n$5&>fsCG9Xi|NNj>pH zSJ`^lLcDU3<@!Am-S1b*=dP1n$0^@5-`e*ezM#zV{fQqn*yeKx@x!E@4<^1*&c6xb zRdQeASmH}${%PMaC&vSA z4`0b~pbPQIa=q7+xQ^%cC$7J9Gm!YmUv2$dO#CbvKb%4QN@<^06Yssw#<`yOep1ev z#J5YF+leocdiWdh)dOrh|2y$D(jMj#e@Lz$<`J)z`_`T!-cH7y{*U-4vVSXyUnSr7 zd7b#S7i>MeP5gBk-~WJkN0}d7PJD;he@VPt&MRw)KP|`S2I6oF;z~#~;6Y_dEp8#AwD&f}ify*g2ENV4nc{7d`fiiEFu5K%5Z}=SQ;FJY(6`Nb5o4^bl^gj)XXe0zU!xNaAT>?Zje# zrueFRJ@GST-26e}Ps?@G9EdMdAfdviWUuj85udf6P4;KvyUKj=Hi$2m{$c#XhFCxI zdLoqf6ym!}dCwEB^*LjA>vS#HkAgV&l6}9GHqax)C(8XW|E4$xitZw^Um_o}8sgvW zW5qWS*LrI=)Na@O2gx{gN8x6x?2=G<2-$0#k;JD;e`F%@3+rtGPJ{Sz%TBoA2C{$u zU2A_c*vqLg-0&1|nUV?lTNFq0{E+yOa&X;FT^05> z#0SZB=|vDnh7!U!kCVN|d5idAGA{66h$E-WFiwZzsrhT1e#9H)V4Nx3cuCU?f5jJUSX1abYI!->L; ziX1XR;Y-MVmW&_H0Q)+dV)!}-_$uHpP#i69t%t87ev^E^cmwe>q+jz3@xROd?QmRb zy&Wq3%5KE9zq&8+-ZH*%F!3#Nyc$fr^WIi(1o4Ugw3Tro@d5H-x>&gJmZF9ZUjtta z^|^!M%$CaTDJNqSM^X&E1`F5Yp4yKj{*Cl2Pa%HBTq{16;_oRrT|xH$ka3s_u>VGE z&1wnRYd+t5_)o;OJ$I6e2`yLmIaXwM;ieweS`@w>P4@HtVK)v1d+F+g8>RwZ7?AuU zto^kV=N-8&FDCl}v4559wY7&vccwmkZ@B! zlY*CcXUhkX{UE8&QN$088_!s5BJr`(&$*3wr>@ri4&mmVsn4`56D1a_0Q*~ljYXz_ z!SXV2({IX?&(Z4?XR^fkjQD)v?c^d)b*~v<;~ywo>+=Q~&p(*#cO7Ky&mnuQ{|kw0 z{r`n{ul-F1vDl3eUoH_sUJl&UPeODTQykS@MttehVVGDQ#W_>r#N?t@%d72SSK%f* z(;o7qJ@f#3vtKG?zw8HmX2A9NpT`l`b~2v0wv%&!oA`ASKOgu^h+j-x<3C7T<3Axh z2obiop2yhwd5P>bPBn3j(@8FlHBNkpjnhxK)~D{5fy8ycjG#C}CC;D7UO#s;i0l6P z3&b(|t4j9QEa0a7+#&JjP#i7qQ^d8r3n|Wkp|-rs$X>tCuz~C^7yIAI{%JYBb&*bj z*5@Lzj|kdySJ%T;n`Magw8Lod1x$eqP=t`&_YK<+0yF_W5GpWlU;4X#AeU|JA|T z9ZdXJxo;|)_<;}E{Kp8_`nf@LFDG6v{4R>4`OGG+$A@y_FI8FH7b*T$iT_`+&yc~t zHDup&jE(a<*=s(Xld1LAxZT?KCf-M$r*RnZEE&WaE?nzpkmybz`|ZEl_=RNOC29G6 zWUqPtlX$*-4`@Dd&GS{_n&)!in&%;+yP51&cL#BOj!);4QtNG#465}JuJMx+e>mA| z{F8{E|GKS*GbqkfiE|y<>v`c;un({6y4W}+U~i5aF*#q912@MdJ@32(am;aGh3GCN zdp!<(MO=>qn}HkMEYaN#9FK?l{=p>IJZ`D+4=1kij|Xnz>vhX0;28fx;u`;I;u`;U z;U+6n57pyMcCpw~WUuwMlI#yV+1me1_PXCYkG191_zAH;NVp!))jpf-CyD*39{cmi z{yee2j(CCa2R(7h$$qBTzfSi0oUspx>$uYw6z4vP(`j64J!}+y1o3UcCjpm3QdrR! z17ByWK773y_8iKof7*MWZz_REQ@{jb2KixqlxAKzTAjS%M$;G2MtAg=K*1TJ0c z(CY@`YX2y38Nvwd7Xp`Cb3**xJm;>A+g<;2gCLF;FPn^MRrHq?EG>{a(0u-^gYjpf*S;PUPz+-&^~><4)4 zk0XA$eE23qoZlhN46@gHxSs5FKmLvEZ#~@R{XB6k?<>SL{@cX0oWhcmII@zo4Jz(Ds?4R-2|A)Bd z`37;#vxefQ+caZelfCY*?O@*?^4aSY`$p?cb^8+6b~Q}6@!A>UOeTAcb1rd>b2G$| zu0mLXhsj>+^Ks%D|9RqCKZ_{7*3U;|ul2J9>^nlax}2I?Kbp_p#5JFO#5JFR!c8<2 zU-LPU>@}Y$V809GQ%LrzJBzs1^TQA)4dPUiy~cTqxW-unaXLYq-^pI%X=$v&F6lK-%av)oa{B9x50il z$Y&MVYd-6UYd%|vYd#%Lvq8%$8g9r3E?usW&!jk-=TpS>_YD^iSNm6qSN_}P^D*&H z7g=5_+>|TbyvVYJ>{WM<)2)$tl`d51aWL^+B+fA5TF>2OGIj*v;XQKgcJtcZ{u!3{P~p12 zw7f?V*YX}qT+2I#xR!UaaMjiF=99gaw~)A&x0tw=x0JY+_gUdaw+EE>O|sYWzE51s zyPUX|w~n}$caw0{)$;CihD}22S6xaw+o2a~;)cNB3g?`g!fyyp|w@?I<4=89_t%uWyzq`BDJ43j6*AMc!g6viIUa&t9?4KmA^{|lQXgw?i`~DDTE%1YY z?*N_&yvHBy8?84zj_pfa^Y2ewk7HTHwcd^wZd8n}9=9iwy&lK@L|l(!Gl=VP>?Y!R z9D6{x(LLA}G59MMdlvX1z~2OZDDagOU+ZTLajl;X#I=6564(0am}kYztI^f^$q=sl zMe8S%xYkcLajl;uajl;z!j0}>HU(2Xu`7Vf5NgQp0Dc76|BJY`+Xccke{HuP5!ZVA zocQcjp=@j|ajmzl#N#qgx?Q+Q@kq#XuRqy0nvd!p@8L<}n$Ic3HJ@{dA0d-b7YaA( zS&+}oWUu*@f&Bome-ZdV;2!`V1pFI{ukCgtan;>QT-)tVQ*BVKH!W|vaI@9u>h;M1 zWUuXZAaQNCBZ+IfJ%zZo+Y5yoT{-0kf5l=qkiC}oHsV^|65?9khlp!=pA@dTTHb|Z zujO4rT+6$XxR!T4aV>A`T%#C_eq3xQ_dMMR9bzvD10B zFy>XJw!--Rglqk1{4C;nAI|Z_=Se4i0>$rPixtZwdmV?o2<#^XNtH>5tsJ;a8HJG+ zQyk6n6R?-5lF+`vW8d!l=6aB+gV26o;am@g5MTSaE!aqiBSY!ohACvPd0tGs>LVNH zGKgc^&*WUoXOjIKne4p}?5{FKX=m-{5l<8TJn?kli-~6l|A=^8_-f+)gl{39DZKp! z&Gl^ZJWP0Z;#tD`5+5jh5b>jgpFsR*;inSM7Je@AA;SMme5ml5#D@vLkN9xm^N1&e zKTkX5;o2=7k(e&KzImkJ+5e6H{l zh?fb^2YyMQ8xOOO#R`F&e4Z2gV&V&gmjXBKCr|39oOproO5#PrtBIEguO(h4yqQFtTq2H|PbQtST*;Tgn#6rM@^XW`kz8-*u{ zZxfzN{8!=m#D5cBNIWKU9>v7l2`?qSv+#1_9femCPZM5Ed{^PM#5)VGC*DPPBk^?M zX&0r|e_VJ5@jT&~z|C=>Qaze{)q@w^4 zo=f~*;rYbx6J7}1?Dtpn_z&Fd_xr`Zlz5r&a^NOTmBgte{-*G1;3j^B#Hl4-CA=QE ziC-;o8i~IrJZ*YlB*%YaUn4w&_{YLCiPs9xCjPnbB=I`oxy089&nI3lypZ_!!i$MF z2rni6qwsR#jlwI5|0=wicuc;RQA>Ph;q}DRgf|lJEIiFzWI+Av_gpfF_YnI`;u*rT ziT4(sBpw%@OT3@(eBznH3yB{lyqI{F@KWMO2`?v}ExeNWaN*U&_4_`x#7`9adg4jp zjl{xowjZzTSn@U()|`mYh5 zLHuLknZ#>_XA}Qic#?RX@Lb|+gy$2l7hXvGd*QbVH;3z)K~cuZ&E|K4eW{!q&2jeH zj^@?&cV4l7hOdtRm#D` zBZ1>{md*e!j{*t33V^>2ac%?t4)A{fuLk}f;P{-S_kh0(_N##}0lp3Rd%(NNfTyX4 z_km{u{{Z;$z?TBg1zrPu2JmITZwHRg=a~mwhPpzpMZo3O{E&YJTyEV9`8MGAyq9jB zY!art_`H{cf#dU7P5{2bx`wak1OE*8&A?Xze+0PP@)d4<4LCl}WI1qrZplx;zk>LC z%5{?|R~_)ffUg36BJi()UjckI@H>Iyb1bAj&#_M3p?{dfcSYOa60 zZ|zFp`#_xgfcFIcJn&w?-v!0)8m)Yk?mI{C?nv z1Fr&p1n?cej|864vpJtE;DdnU{Rv}%}Fk<^w+p;{O61=ev*Y)tt}KU_Svk z&R<^uJR9t90zL%zLf}Jze++yW@Lz!s2YyuV<~)xD{#@T?j{S%gz_B0E037=fyYy?0 zgZ+s8fLB?Q@O3coMZm`a$9}}Qz!!u4wZPv5eh+Z$N0bA{e#Gm*-+?&GfmZ|H0Q|qe zcRtX*F;)C7@Ls^NA2AR(_9IRLj{S%{;MkA28aVbNN`TiuK2HK)27D3lJPjQbdLqT3ixTju^%)G_-e3!82B3CF9ZJu_(#Ck0^b7sTj0AMY~Pr2Ee!ta^YK1A zyqVYAKf~7s;MfmJJEGYh`$2Kw*bf>49Q#410LOmNMZh;gJ~so$e$X7?4Pd_j_-5em z0sjH`8sJ-i?*RTI@V$<-Z%lpu1pEl#KLZ~Pd@Jxj0&fIf2>ch|CBU}<4WEj{TtBvTRUOUhD_;2af%qJ>PgRTOO{h)h+V?Rir7ijXqe$abh zkNu!^z_B0HaX@pqupe{)aO?*qfMY-C9N^dwx*qswldLSS10Mr?74RhRM&Ks_PakLl z8if6zfx!O&_Ll(1eozH)><4WDj{Tsc2Q}+rKj?Pg*bn*~IQE0~KdLzn_JgJZ9}D>x z0Urmv4ET89F9OGY&{x2*AJltrb3WJ)Is-WNgKh$j{h-;vu^;ptaO?+d0*?KlU5;+f z2m3*B;MfnE0v!86R|3a=&|Sc>AM`13><4WIj{Ts0k7>>m`#~21$9~XFz_B0nEO6`x ztpkqzpbpv1y4Vkj1IK<)HgN0*Y~{4_XTx`$2t&H0Oi;pkctVA9O143D9mY z1%5K{a^N|@7XionPQL?w3fT7<+MMU9z%8}&DdsxiKRa8JCL4^Y;U9LeAf5QrGTxd& zT<=?u!*F=2FmWKtKPJ42_@P}bs3xxC4mHFzel2m0-$49FiQh=Pdp7{VpSs^Q zzMd_e@JaY{Q7UdOt+V^?HHBLV9 zt0n&;;?wrCaf*rmYk$j2hFL5e~H%h;{inzw9CZ3e|b;O^Qaf*84 zpGo`%;u^n^xW-R!XUlCioAFf{4vOjh+R7icX0bTgKOv3_bD5D z!!MNU@*J?oahqJ?a#`DS->!*+<2m_YZ}@J(f3p+-$8nxQ;%Z+6{B;{5d@Uxf_9eip zz`m5Y+Lr-e1oq{`)xHAw8(?2aTiFakZ}j{wBn)C9d{$z~2JatdXhzPr*Kocz4;B4qUGp%%%+Ddi;z7Ujgwm ziI>T?EZ{hfmreXMu}=VB3GtJ}FOqFJz;WC!m$=5y1O5fX&nLczY%2hc&3$CBW;zzLdD`-!kB*py<`dU^3V?5fdBz^F9W_A;+GTGd@6uz8#iv1#MQnE_!fv?Owy0R z_VvUyp9bJRgMA}$wU2eQMyCC51^YDOdVWj?u6;n`mO)(YA_IKUVB(faCalEpfH41CHbN z^~5!w2H-fJ-$-2TV=~@jsuIWf(}-(6>A=&V{xgWHeH=K>3uF?XAoY_49OnzNiH{fi z1aO>3ND`kY_Bp`uKC4{fI%b*&9Phu%C$9P6{l<7-Rw39M-e2-50^SwsvzWMEpOgSk z2m4auvm|~Qa5Mg(OF8ix*-!x-=Q}EiKO**3z;Pa=nz-860LS@}THWM!m zWorPA^C^wQ)jpPH3u4@Ho+XX=94T))@C?y3n=**c6Z<%Dygv=^>o$C<*k^$~-nW)b ze1zC1faCpaN#fexa)9If4&FCzcrS^c2lhDclTSP$_65LkKB$nm+7|)Gd7@(CnokMv zIMjbBaXlZE0mpfza^g+Lf8aRZR7qU(uL6$qP}RgWpBmseKUGUy^Qi-l^H%l5HJ=9H zIG@!>yy^O;6~G5V{7T~Kl7AI&oCmBXuIIuU;5a{6OI+>ifaAPjJ@JI((*PXj6B~(Z zd1G>6Y>JBWjA_KRyy?KRp?)%m50`x6!14afOyb{(eHL)MZ!?>?9?uiN@qW%Eak-r! zmIEB`^UNjwg5;A29Pj_kC*DQui-0c-*q&K-LoxBfftHsLzgKuE@r}YOh%c9dRTAHF zl#O3Sd{MUL)x^IPUPt^S`5@I3zu;&ar-8V}X(YZ~;-^c)Gfl_TPth|*Z7shHGU28OGemwt0jK-NXzSpYn*!GU8Vl@frq+(?@ih`X`Ss_`E2Phq!a&A zIzk!5_dMD9>+g(doCE$~c{bUP7;AZgxW-Qs-!8g&#LpXN+Uh*#>u5k*9YySGY zd6U1n&q~J$OTpgohplX^jQBIc%ZV=$UIpBIzVyD$YT_5?T8A3ouSg8DswJ-D`E|fw z1^as9(mY}fz;Qmbk+|B&cDF%I{os6P8gaEx2VMpFWDr+-{k;eie-YScg1zBtp9TC4 zu+Jv0_6gvN!9Gb`?Q?*?3HG_f)jkjSTVS70T3D{Q?*L-S#zX$fU#N}0Iz6|U$iR<`n7I6GtLpJd}B~}7B ze%~QUT2V=2Hax1h6kAK3(!G0sf&TAFNA> z50GtTz&`@}a^m^2tpfOokWVFXJ^fYz9|iW+#2Y1k4e*a4pIYL*Wm_HaPr$yO_+Z)A z0DL*vHxlo!+q&96OzNL13)X4GyUVt8;I&|%LHtPB76-lp>@$g%$+j%uDf7|9PZRqD z@RblhN&F(&mIM5Au+Jr~@$-Ox0rvUC_mFJ`z*FX5ZCL>IB@NA8@Ej2dVb6Tz7FDN6Ic5L@bzGy zB(C$DIl#XM`&{B`p9g#c*yj`1dMQsQb~23*JF zj9WQz&8GsmwsB)$NnGu#fNwE|vQ!h-`m6!|qZ$Y6TH>G)z zz5c+QY3EzPKCPR5qg<~~@VOIuPBWGnU~jnE$ASN1Lx!)J#GB@$fv3zz6YnFj62P}Z z{3P*RWm^vLU%@_?xL&{I0p9`k`NZXItN?h*d^GV95~~P!%6v3&&8Gx-%6v3&wJ!sn zG9OJ`?JIz%%tsT?k^HNGr_4taKUVB(fTzqy6Ic5>;3@Ob#5JD=;3@Ob#MM3~CqC28 zQ|6pHE!#DFB`X`$FP+J}m-%64)0Lm$$JJ;3@Ob#Aivl%7B}39$m_b*T{wn;3@Ob z#2*p+D&Q&e(Ztoh26)PRG;y`B1D-M;O zKAL#bd^GT}MnslO;!X3>!14Qo*~CXkoCI+EUSX2BwznMMDf7|9drAB};3@Ob#1mp) z06b+rnz-5*0Z*BaCa(G5b9++eqru*AIo!p{fTzqy6K^{H15cTcCa(Ec0Z*BaCa(F^ z08g2ZCa(F^0Z*BaCa(E308g2ZCf;=YBLhdKX{O9a6Ic6m;3@Ob#5V`=%n}ElG9OKR zk~NQI0Y3yjFWJP;68i-3l=*1lnokb!l=*1llO%o~@Ra#z;+jtZ@Ra#z;t7e5&wbK! zj@eWU_J(VJtps?=d^B;jF9V)3A5C2MZw2s_`Do(ll7AKOl=*1lI=@^4JY_zbxZ2kN zPnnM8;@Cnd9Gl&nDeB!`Q2K!9n+BePuo&)yT z#PxWd06r1ylf(x}J~_Zo0sCCyFNl2}@KeD)pSTRKiP!)C>Z*gAkKGt0A#c)Ty<59j zET?_b*GXb>yM4^(pLF;yiQuo-%c%c)1pi!z{@5UC&0E*L{PP_C7evs{claL=LBGJ^ zpB=%!(BZ#4LjFY#|D7V}7d!kWrXsVIsC7UpkMCre<*@}g~R{y z2>O){{|h4cS2_HPBKTK3{P&1Z{u+mW?+E_24*$6k{OcV4hejxWy~E%9c2f`{Ty*U_ z{xmrJ&2K!ZpRRrWjSheFTTtq!YoEW4^`uE0bNoLxg1?Scp#O0Z{I#!*{-*{>Yu>u{ z<*$83^nWwL{@1<^`X3)5f4x>m|3n0Tz1Bqk5fS|L-aYgm8Nojx*B!W_{7;OKf1bnNe79HIovwZDFW=$+U9;{}n;M$l-rg zP-rc;u6^Y%cKA<;;9uhKA046mr4Ij%5z1fY@E;RFzue)!cLet?~@@AVP<(;WUABIKX$@c$u#e}=>V^a%OKUH%dDGadeiNAS;b_+Jqr|7?eUGGIZ7 zaM88z_-(FL%!2#>qzL{-i~VnjkbjQDe|m)a%XRn{Mexsa`2QhbT5r1c)nC5De{2N* z0*8M=g!(IV`0pOUzsTX=Jwp8zJN)NG@Go)rpA{khQiuP*2>N9X|Lzg=%N_n_M$oTt z_+JshztZ79I)Z?W_MBhyQ>G`neAO_7U{+9R8m~(9d`H zUlhUL^!0iFjgF9ip~L@~2>L}1|GOjjn|;msUlYN<#NmH$1piWp|KbS#We)#Dzyvp~ zeeJj0;s4JF`V|iUnGy6W9sbD(`c)49qa)~7JN(TxmEfkeul{Nr{>Mb{uXXs}7{R~J z;XgcJf}7U9{OcY5vm^L7IQ(CVkbk4Yf7b~5u?{Uizk5Z{PjmR^MbJ-o_?v4oDOS_k zSN|Cf|NA2N#~uE+MDWja`2RhEf0o04Pz3*MhyOhh{1XoU&Jp~R4*%UF_~$tMPm185 z>+sKy(Ejoq{=Y@g&v*FW9>KrB;ol{Kf1$&_YXtuyhyRcW^;hihKRbeciNil5f`6&Q z|JDfpWe)#~B9y<};XfgQe}%*U#|ZgXI{g0_LBGo3|9AxbYKQ+R5&UZ${>Mh}uXXqz z7Qw&H;Xf{df4#$hRD}9(aQM%Npx@~5e)X-S0eyZJI?q6IO{Hgun42#3()Q0*L__}kf z!I5I8D>93n7;JF)KP~=E-+Pb%a$AOmi%s+RztBeiyFLDk+UWnh$N#-H`kVV~UFH9@ zjs814{$IDz-+X7xrN5z#{^mQTF8{_h`cL=xxBp{MuwZFz|KH>B@6ty97d-y^w9$X1 z$G=}2{bRugA_x)dNFR(N#Xmi)h2|Gyi_3u?|Kr=}Z|=!(>7U%j{4ewPpDF&kW3s{D zod0Z(|Apc&UxR9j!v6OM{;uO!#ZY?y*W;8qeti%`;p5k99{st1=p$4*Ubm)H+ zY-4>hr{dE8Ui9_35*nWMZ}#}N%d;K>)KS*#|Cq=BDDls4#ovs{y7HeZ{`y=e4a53o zp2oHRGKaNnf96=v_4kuUzf$xEtFWwD-^_Ek^b?|w?Z-TyiS_ploL%MLDEj?d(a#9{ zUHSzMee?V#)=zl!d;G}?%h!OLvf%Px?eWhP|JJTQ^gBU`CI$OPnIr$Nf=!%%sYgFo z^vftN=YL<|AN-3Y$gakrzbdd{{Z~EujiP@V#by0UkA7^pZNEwJH^-mV4*jn@`V*#F zM}3Z$rosB3dGwQ_pC^t+|C``%E`Pfq&7A_y=g&&fZ>{`0Jo@F1@|)*Pv3?(qewTA? z;_?^=`zCnh@}KJQkBk45CQthZ`%eh`gCfKdWY-}1OeMg=`|o>C z{`r!BgZP^EZ=MOj^><3p&vUi^FVC}%`+>Ikll8|3{;u|udt8uMuweVy61->qYd!kE zioQMO@E{Q}X?6Gv12pMt+x|0R$9}&dU+B>P-Jx%O58GA$9WJmXZcYCI zkA8_m-#ibD%m0x_KV9_oxpZ3pCRbcO@aUI2^v(0aSbw(wxXOP}8}&N|{;u{{<*&GW`s|1Tc>liH|%l}Eq9p>Li?#`@2D^e2h_p18AvzsD`Wlj9{p);)L-k-k300u?`yGs-%jrKcS9TNf4{)r)&8;_`duCR zXL;E^8eyKy>Ja3Klhk5khZ=?RvfxoN$RXFs`?|`xXpFR4uqR-jM_{hcqgrQ9D28~n}X|I(x1=+HOM zdt?1x!3o~PqNg>O7<=L59W7PT>f{9|A$9nunivI-N z@v`RqpB?zS${!oq^7w0>x5wo#@aUI_{`gk(FZSqXIP}f$!?FIqJo;aX{=`=FANJ^H zIrN7)^gs6KXI*TC@fneZaQ!d!=qE)#$26{BG2=hx_vN_!nZfS_7!yAK=1mXXVy)GG z-@xCs|4UD>`#)*Jg!<<9T3G)wkN$ko?=Swk;__eQ(XSJIJb#XG=>MNb|6|c_ZT$Hc zkN;ZnpQVY*n)CnBlYjb&w*Ke? z=JPk%p?{V~zu%SCaYQTnlRf$sqMro)T!;P~kNyRs-`e@(0gry8=x2fcnGXGx9{oE- zzZaE12$8ZZ_vmMixAl+Xhi5zVy9X2eCMNIyCqzGyqSmtgcM1Gm`#&N2SpIVy`V&3+ z-?mYIoJYUFp`Yi_|C>kupsQ@bTdV)Sdi2X2^*`02|At3@r0549@05idU*yQ&Jb&C(e>+`mYbjw@O|M*k>pl8OhrYSjlg~e+_jK!z z5dC0yCuL#%LXZErHv0eDZ8c{+%BEt)kyr{om%%Zxns3 z|EnDORUZBNYi#1J)&D||epyb-`Y&|o_t@KA|HH4f`mNP}*TCOZ{}~glKGy%W4*h8! z{Rc%qVbf@O4MLMh5<__LFvsZ9l>0a52ZP znU4H#^yr@>`ue*Vs>%A-di3L>kDuRJ4*lmn`qQtoimmC-_vlwU^lx+Mf9uh|_Ij(I z(1OdF%m1}UzrfrW7%cetx!s{34{lI5F}eM`Ec&grpVK}5Z;5|v?dO!h-_?G~B>$jz z;bPj)osRtf=Fwj+`ue*h5~juY;a@%am5%zm+oAuZM}LnStm1bnENj00UE$HM7ySnD zGvzOF=#L3*kaF$6Uq!#Q{@=*J-&Oy$lUja$?{(-u?9o5qMw|GcR?1)M(Qk0*-|x_0 z@6n$u`Y*Jizt*Flc3R8x-vbW);l14T-?_*N2gB1T3-A9MJpMh4tXpt-ma?$_LXUq| zk#%d$|9g-BXz>r4XUf9*y@M|}xY}P{8~t-U{?~{<=Wn!d85{V!+Hbz>KRo_D?AU*| zdi3uuvMMr+-6YBSH+l3+9qs3z4*i!s`rAZ*bd$3EgX{l49{onqPl~@eemvsPU+K|L z++-aaThU+c(N9dapPwqwpXbouWnXvu$-db-wl@FMF7S8l|JdnPALoA_bLgMu(a)c0 z^;?_&$?@pt#?7E z|7{finiTJr*WX{~T^yue{KDHk-myssr(d)APgBzp*+~WGN zSoDXtQvRNSzia=OI`kJf^e^$~zbX2yU4P|!^s7a`LGm~I-+b4X%U|QspMR@$Y_0y6 zc=RjJw)6^`f6= z!-VtauQ>Fd5Bvk%qW!%l`mJ4mZ4&>WdQ+A<@&B9x1m-Er)&Lm&b`+rM0c)n8A9V`M zQerKT;iK9jEt6kAJMx8V(?P_MhePPl!KXKXd;7R)5mT6aOsQ z0ebvV^QQuT*XK7m#U4M3C1G>?`0q|Fk6$l&^h=(%3iAU$T!IiO%M$T#pF(4??9RLw}`1f1yV|tBv|E zc=WSpwQPT1IP}+h^m9a?>zm)N_2?IgewOS%^ZEPAq2K#J_x{goqyFB3|IUF%LUeRh z;m}{@&>!c~FKDCw7>|CPLw~hH|60}8#ARJ1`U&E3dVi%yKmFDYp=F8KoBIF8p?`1S zZ!YoLQ`{;~`P0bmE{}eh=;QwX)}cQy@DFf|&p$Py&wBj+A0GW0(bvzfDgSp4{dYb3 zb)uh1<&D$(w>+vUN{#{uFuitM9P- zNpUpg-|WzT*P~z8M*X)u`ssJJ)ZgOJ?{<)T|HodjiDzrUWgVyYodbW@{?8TtJh3|L1e@mNR=gR(XCiXA&Q+{tN{&Bhij{WZn z{9Wz0Qrd6PK32)JUo&~B?MIIbk9+iAdEff|y&zRF^<6M0;L*>1+%ZmkuQ5Ni6D&s!MepYQrnJhFfBKiZgeEyqe;pk8FB5$| zPix$r@3i{U%$Igx(RaFD<;njN^RWA1DWVB1_0y1_d-BiQYV$7}W-U$qr#bRB&5I6E zp~Hq+OE(4aabbP)-j)=tVzIh*rd0-u+{fQJFiHn7H)oW?26<=Z8_6UReMC E0m=|UXtv_YnH!ft-a68n!^lX@B8`v^*uGtd7iV*+H0@9 z_S*aGbLMcjZOo`P0Re3dy|p#2F#@n(vsMwYny-APo!&EySR=-0kAHg`Jy|x;eWdx$ z)LEp>FwAem2xCm_Y4{Y*RmThG_GI4t4m*>fVeh8C&GXs-(s|48ROcO|}J5;6vx`E8yz9_Q&pO5iX44bjIZ z=<@verL=<*G{1FqxNco>h#K;`8xoAgDV;xfF#E9ms~<04J^SXl8(*LIeKeif9w!vz zI}D#r`0PBhsEZM5Eb9|nK0d4>ri}=k*U58(=?UWKcUJ z$XEo!@D;SsFv1O^Bq+8`_~{|-x^9UpYS(Uyk=(9h`+&{i0p*c9;)ZoCEqdmog&iv1 zi3tg5YxD`|^kyP=v<(amx-6vE^to3wb$++=&Y<(ijRYUkIe~g2|i`|*!@E00qmCxyj1T$gzrc6{-gN*2R@H! z{J8#p65mhZQ=u_^t-|MNe4ZtM?Kym&=RNO#DgjsHvj(4+@Oc@ZSMgbo&jx&|@!5#a z>-d=48+vDx{(ckRZ!RI(WzvDyOpX$pviSK{_1p@UqA?hFI))D)i@HriyV0_NR=PZ0^>xS>M@d?G} zTzt;M=K_2##HR;7J@M&in&^8j^l%7W6W5*{BpV9cxHb#Gs$M+8C*nIv z?G)2;Cr#sYd}rV@TjM$UJ4=6)e%f*@_%`5Nd?@V~;xiwgJMi(fQHo!H&t3Q| z#HSb^b6YI-OR#^B!1rRmRO9>b?Zl@Hp9eHYI+luk!Vdv2!{-rvmg{5AF`qyB?St3f z_f5%FPo{l4IiT#(mCsGPZb(qlr-!n>3^TrKpHy~s;Ljgj_u2TMe;4OGc-eI?zIx7> zZl!&n`fS&2*Cri48Gh}abJ9LNP}#Z7V|_MuIev88Lr>iD^6Hy!S(UcGYh0%#oyQJ& z{m=OmpStI&3AbMH%j}a`Z$G-@%kWEMmcB7>RqfF2Ys%|FBY%5i|I#}HdS7+Xp(hqD zdEo1j4-ObM|Kaxs6bCmIygci+b|3T`9Q))wSN)@HZ0F>{M-E4h3MzWi==#HzDV;BW ze*J(++pqm<#m!&b^UqORAAI_q!PUdQTXp1>ZnG}RdwloX$X@#?fY z5;nXv{nxuIj}GX%|J8rq^h4ndD<50hxVGKnJHEX3Xtwj&%aiNo*QXbh4m$5Y6ADVM z9JI0RC6SlhzJKKPIbXlL_lnh-q4sB1rBB^+#j1r%?!4*Yse>**y|HZn(T7$hzL^)k zZ{%}pe|d7%2-~NJHwIlYaoG(uMTz5Q6iz#Pi)+g&qigl8@!35-tQ8lrB&Ia@NdQ-$pP0EcEM`sH@5*7Cv=%!iGx+ z49#7*{6yc86+6BheNEbzn-`9YcyH?SH=Vb?>W-3eIbYwpch#($SG-Yx?S9!!n6DTd*i#mbzhnGz`eKh{4)IVnuTpXDayXC z|GRG=ZS%a*_4n!V*$387zGUF0XG<;__Qn(Ok0*R`$LY`9e!(4uH+MKV|KZ)`HxF=K zcgfJFZhz_@y+^lsG5f)Zh3zi*v*WbzZ*spXPT0`zs=!{3jYpq8`0>#*X7|{2?xjE7 zQg?rD!ly@^gG<_kR;JvP`Pw(H9?9K*^!)abtA0z_J8#_2SDy?kpBnGTxag;nA6GxH zXyHE|@AN{{pcRj9xP8`@Jq~sXTY1LeqYrH?`|*s!^H%gZ=j=^I)onK&cLv4n8JW5I z)!OLqmR$7MhBwDQ^nUgDA?-3(1@HLs$+73xch2~=5I~p%)cb#CUqs)JMy2{QR~l=b!e>%|CU8o}{ylu2)Y8UOO{2Y}W^o&z`^c z!8@m35b*sSWr>dth`#T~)k~)~4ZilzD|*+bJhya4+~>dDwY28$ZQrh0nOz<8<*nTZ z-15LL4=1!A{N0jH9eP~w`R#q~eBsERkIzr)cJ}d^rw#q~tQ}ug-W9&<&AfHze*NyU zF4b#a*zm+}_g=B;se~SH?z^yXSl;R<$MjjWWX{b;ANuf@;)L@?jT^J`_1Sw@bvL?J zeYGX$g^aLWXPUsJ4bCyANT==N>*Uh`@;fEfbKj^|QM*T4Kk6wvyyu70P zrNpBTmGxb; zZocuncb0ETtQlYqsg!nnZf%VYMgU{BiFmLw7$Ak36AHlrR z7r(TVZ+=abZ~ieq`p5aP|B@?x>zU+-4~_9H-_4JmjU9c<*M#}z$By*P*ZHZ}eb@Mw zFYRR*U1US)eHvO&bh9lPOjt7(b1jtXOV16s(D20{8{(UP;|kw)F7dv_VD|3CB-|K~;d)`M>3Gu{&X=>Nly{sDgK`yt}fmmhxV;hUcT zd(dT?ZFizw(8SHQ8rXxPn{8M6Y4^|k#9^JEd~%nccx#7B`Knj0A3wLpMY%8ePJMmz z_xg$F4Sw?2GC%SBN|Uq=5*in8tunFmHm9nr$zX-f0Up4 zwm;Xmo&%x2`3`>kFx`)y@BQSrGyLR%y?(~8IzRI7qQ1W3e7GNbV*S{Eou7EV-A_DE z_mk&4UgFzt|MHU$Kl0O#@A>iDd_Vc^%1Gbk_V?3&pY@~vFghLnZ?;7uK7HklrGEVL z#R%W+QtYRF-^cjttK1QO^ym5+@3#9HACvs>4_@xO+)6)w8|p_-v7h`o!cV*3>_`6) zKlNJRr@cP$lYg%DljkG+@X?4XU+w!3KmLE&Pdje+<4>m_J-_;^ub+H1-A|m4!XW4? ze!fRO_r<@_hQ`fK#wGhzsQ1wkzZv>_8l8dR=) z{_JE-u2aM+lt7yO24{_ft2|L#AEKv?oNq_48SZeCBu7|wY6^lXarPR4NUH%v2l zi#tp4zrL?9!hp9fxK1H^tnGX5wT7`0tyk$(`nCIw-?crHXz>)=nd-~EEXNg&9AqblkpmNa;1(_e`z-#4g1njCs2T^DEMm<5C!>^OkUpiiesz zRC^_9{)Yjo-J>p64m0z>gSsE(=ze6zN&Y}3e?yRxH`}ETUq5y-vMx}(Y0q;y&MS1B zn{kzPsj_pAUSOZ3?O6o_$o??_N{<=;|Grq+Z`|IKB@s@%eS$bA`TN^=+w(j0P(G=$ z#Q!`U5BKSKNYHxziR4fHVzQ2ZGjG)EINYS;5NUz8A7WLx*8aF%w_}y19Sb|^dNru? zO}~8r$CCYNjfywNprrPS@AZS?$Eq*m0UdA8>3Bo8<*iQ3&p)iNnQ!e8$`4^WubT0; zK-VklH6`BzaYl8NQ_NM+y&%bs5ZPM~z zAW+Xl9;>-m*%M~+ZI!&WUzg!H*)!B)Pfy)X%PswMF&diWn{_Q%fJ|6>A`{1ND-ZK>w-b-Tc9-oDj(zOv{k(eb}U z$GJIw2=A@z*{H|0^R%8#Ixj7@5dzsQx@uw1u*76r>{Zr|t95&tUjhA)a>w7{8nsL4#`I+n- zLpSxXnf6TSsQ9zB0#pCpm@tsMOXodpmhmqgKVdo!hpA$WJTx5TH*0_2iHfiuJzgN4 z@-`9yN%NB;%RKN-bXby~azx3QdFD4bisl0qmVP}>$HQF_ z+v_~-e>2_^HGhev9fw_{>{+k-ms#I6n3$2B*0|~stN2NJ9yMLt^R=#Ty{@l0Uz(@; zb;wUjaHWK9y?R>=XO+jto=Gs$Afh~e5S6ibzGowx)`S$Gj!h8 z>W%C^O8@D)zOniMnMd~DYRQwk(GbM{t{u}&%lFWJcunUSbH3fA^V^d;f13GcuD&j) zvRoI?{eRMbpQYS?^i+9cxg~Eb*Ku2~At^?GNGu9w}Szg+v%I^P?Da><_9 zMpe;EbbY5GK~X$B{<$LHM&6!6M_R}}oDS2xi z8-KClAJX+galHMk&HHbbKPc@K%C&A%2;q|9-3c(XD!( z{Iiz-Y9!5j&uupEy}5(ZbH7Uo-lXN<(spjscBX57$pGd5j_p*y4p(2sARW&&di^I% z%ip8(@Tl(9@jJP*B8+0&r=(T`eBZ!N!3%OlKqi`D(BNcS((pPwQjlYfpK zRdQps{0-rXpZ|vZjy?wX6r$`pGlPbQ~Hw4gqdBP(@l>8DsulNk@O54s0l)UviZaLzC^jq_i4Gl#6 zS#|1st;Wc_OzHVlk6)&LcATsDM=fzO_Cm#5*Li-^@~bRy^0;oV&N`kU##;~)BiYmC zbA`=vr|SIBP3MQlw0weYm(e;unAaCgy_7wZnv~#lE#FP|BWr)ZN0)n{E*EK#w>-of z#qDD4f9)nC0|k+t)_&*GdCz*CI}?s2Jt4Z^nRb@y{5eBk;9jZ+yw|lok=mZw+MWj3 zL*>@$eqr)6b-k?ld>+SJS0lnQUYrb5_E`Jl&S5I=CFyYr=J7Th_K^L5HY#lT;f+`& zAFK7FJM-34$DwsyrGw6s8M>dE?R(YbN`JbZ@1gti)>XHA$}b9=>)s98&RA_H%;RmP z_JcJ~ey96;qNTqF=s4W0?FrF(x`$~$==_n)0i3ea|?g1kHJJy`H~W z*Kb$q`H3|?BmKnlJGwtwuY(5bc&OCzVEXe53~&@Di}iKT*RX@OXSDw-EdK8We^UE4 z>Fdf%l(^Ad*Vno};L!3H>h%G$z54ix^NV$Tt@BKpZc(|``AH!90olK0y)xto#&z1B zI9JIpvE&~kF>&Uc?5xDR{N&vH#6%-8BP%1{NKC_*kr+2=Y~qa6+|-#FdHJcilg5t7 z%+5-klsr8%RUPwvBr&BhnG_^vX3U4+=(&j#w1yFx$$5FHc}C*Y8?K+2KPZ1*PAbYv z%kH0*JSWvQm-vbKk^Qp@=A`Ckq$Fl$%*n{li%Yiko0E~%;^E{%zlYOXKAR4=aCTnH zXVc*p&dzW7Y&zV+*%>XLO@~`JdsfS5)8Q7*E^PU1I^4q9^IATe4!3Z2TFZxLh{Mri zhfSE28aZeZB56c=a&B@8;uOJ}k&+jeW{Vk{ku^Cvvp|PdOTsh!2uIs;bF*{DCTAtj zOr4XOl|P6v7Z+ulMFFd|wjdbkB^Ws=V@_&zLB7^8;d-gX>tLj`ZyE z-?-_sQd9DW7i46jJCBIs&N6ATX}kAfo6zcgWJILuWxC4V2S+NcGcx13AN!VRQ9*># ze!b6AquF>{{0$QmqwT55IdQ_wfy1)qX?M!9`x7@ZH7_MMBPTyQ7uF-OnGI&1(?1UR zPFBl2;9XfaOMagifjo&6rVKR?MGlC|o0y-B*c+Lel9`;FI>V1zw*v3;(JT{0ESPFx zhfkUe5#o^%!!z=SXJ==oCTGRvk4cZT*^(#PrZ=xJ>60hA%ZakZPrg3I=Ly~iBBLkf z=N6>o7odtGlk=0~bklnR$|@k*s`<&@F=0J*q$MgMsGAQjNJ~r29iYCXmm>#^%FdmW zoG)6P{Dh#195{-yLq;}+rMRs8)S0Qdap_~y``K)^^z`Y|C-zSyvB*Rsqd-m~1FY@cOk$u_ z!pkD6R-`KH?^i2|e8Z8~f^W#XmP%V~jY6|{M{hHU{#FUE+Vm$wRBdKi%W57X)FWE1 zbPFM(vp`JTIR8 zkn?jBQ__>OvQjfWg-1nRmzh01Ia7`Od1eJ;;<7N;&r0!XV?VNy(I^vRTGou@+!-|L za$L+vmP5QBKUx~uTGJVsHmRhUqx9*M(z6B)NHm+;s^l-q&_l;x=x90EA|q&ikb$Pn zOSMg)Bw-z(L`ZqJSL@Ey>0^LuC2nNCN{Y|TMpWfzq*5b$CL58_mZJkHD%@93-rBs6 zncc}Uqm7K5keZX7o6j^S!iYrAESIv(#OOr)AAkK^{F{f53^A2P#-`56&Yd?Qm2w;+ z3sD}QBIYJhkv_%xPsH`1%rt)FyqnoiyhTQg&7PY&DSJY8w%2sdpLi6BPe{!~=bxKO zwUo8;nHi#Q%*{Y%Y$0d+E33aUZ5UjWhl!}y<$yJ&;e*tCvwStbqO^2svG>1GG6119 zsvwIeP1eMtdID#mkr}zTwm=HC&5{#Uug(zFU+7ZFYhv=8oJ>TwZ%r+zilB(sdC)XZ zbrP&1cv>;iYYem`UYXV-`$3_yi96CP?&e-+%RcUPAZ4x`fW2ecY(%f&rT>J~WFETx zj{AO0qiY$jz#%&@xZ6`Rktd=@WarGg0lf~<$sJE8f=J6XQ0i^y;rjAL=L3sG)F60+ z3L{^P%FUkReG%2{bZKrB4;LI1W&_zW`La3Bj165YnZ>L%=PNI-VNxT z1e%Q(k^P5dW@e{g>Y{RyY>H;W9F3-hN?uL2bgnfsrDfuQLDCEqd6I3`tO+fSWgK9` zbF*is=5m1f9!7lj0};;FM8RWoToxuoN_Cz}5iy=DoSl`QoRO89%QHoJVcZXc3sO;D zb}l!rx^UNn>;SY3GLXgHmNUF3aLp{E#G&SDr)*k;+x$s%2@y3wd3tPe&ak|BSt(Mh z%|_!4Cc%&sO9E!(pOU5=@5uA6E{gHGVjkqSk&k$HCm;SFfEgEta>{g`Q=t+ItmbNj zhxc}TOZAV6LOaFH%*xJ9Rna?cZfb6BL6*Gek31zWc$eL*+eG5BB{c^N8#kmD(yUMo zh7+S`LeTOgtEDsDlig-v6h+-FKRIQ#XP#g-ZZlaL6h_1+j7`p)ZJ94wI82T!i}B<7bK?OVlF?Gr{KKTd=742n~jK!8#8MFu32pphD}OLOfmBE zb5rKz(5cC}xykbq(T$BcsdG|t=JA(0l#_}Jjf`vx6Mq$t>KB*CF@T}KI|^inZ|1IO zEKud;i8-bx6q_}B6ip*})~S~9bLYk7r_M>F0LV!3%Cj-eq_`6|(`Xwr9g75(3lYCH zmor)Rxry@+6TWtnuZnbdoshE*|D#E0>)n<_9RtwV|n^wm&-Ldf! zj>7U4E-8?a<8dQsPAcvMpK}J#^5fz73M!DFF zRf1%!kHZ%CS~C`DDgRGOoTTm^=#1oFX{1M~nH&8Ir_4?F%80%Nv8viyQ)ykib*7S1 zVQP!j!qRVR4S;AX4Irh>4QSQ?vuJ|t*DtsN@m1wh(Lxrhdk0p>HP_-N7@7;>ZUmOG zn|b1trgez<=F?==PM&$EFCotjol`20ua26Ln`~YlME>oWl`Se_MrvAeL1wgty# zSzhx`erjZ90T!AQlT&Uhz@pOs#z?;oFjtlPdwIssjFql6F{2hn=B8rVJ&%k$HAU(o zixpvbD5QsNgx2KgSc(-oea`zZsNz;L)>*u7G5dZDVwNqkUqT)|vqM+*mK9gur=*|y zDVR@ro7D1d8Ot2?z>7YTZxR`IxE!>^j}&@xiwF@)}G`ioBw}#3(>p>-CvzEHZ?zahX3<;_1g4>50j!I z;;>?8-Vt`+i;y?7b%D60jmL`RB;EVoVT8JiK)1Nu52$!OTjwR-kCu(ibvj<9PAkZi z_iHR`cH|oU_z2(N8Bvgno7if7Tdk=2wJdUwUJ&QoFyqqF@>26#&>o?s)lH1Q5|5-? zrb02@W)k<*z3R;Of~49Og=5@aWcB1%$otjpc`8ViAmlx9d`eeOGFngR#8y0wG2wdg z;NGd-{_u0%XvX*{S&E^|bG2)(-g~Y+5$@Leu&1OR56AHhWRFJSQx6F-S_k)BJG-ZN zr&gNfq8$$#TAm1_(mlc8;}IFY#L2-Eqlt4fa`Ow4={Y6O3C(AblO~#z(blC|Hem7% zkr8w;RhT?IV{T*=_VY6EbQEqKBMR|$qinW^f=jDqpyVSsi;ipK1_}r z2=iOA*SF){)$!r@sUA-@_p;l^-Z%MitvfwmUWMWkK0h}*FGoM;0Wc3TSX9EzKlQ&? z`mjEuBxOaK@wo6*`?cpx?g-w`V@F0?o^bL!%@o;>59N)ZC+5tHXS09%KP_eMbTtP2 zwJ0925H)PU6c{cA2iY@brsJ8y?92jsl!ksIkUI#skZvo$16A|n2oyCa1ECi zkCP~>%zP8&OX~=Ic6M$gjg&sii1c;hz!BL6xbK+@V^VP6YA7%>o|u`M zn$vG$YKkq*%0@AHGcGS7kIt8Vi5lp>eamB&Z7zmp)F5*@ zZVTHYV^Rqx;>kyPEETs>XYy~0^mWakQCJ|1&(6%mz0t7+SZkS>Iwyv>F|c0c&q(>R z32Agxl$tV(!^1WF08gHJ(563+e(`hhG@PhGq_3hPBdDx|EG|vnjqUGUC-atsvKmh< z;}OppGw`f%YVO>O6g+`7AB9sB%PdWIN8PGq%{miOwAwO35d}7tAK`nm3l$MI|ULmolXhpj9bl*r{{=~Cc z^4ScpuHYjQA|oJfKAxeTwfBC+Muwcl*uVWOqc6KLK;mbPGMz?Rifi#fGK*|0pChxL z)yl`nET{c%o+7gCvzONPQU!Uq3EoIm7?cQmyQ0r*`Yu zPamh?bzdh%`4$p`QY%ffObuFlmKr@2rhByg9h**VSU!L2#VYnIWP6D;A=y6WipnfZi+&!y#N z74pj6tt#g)7M86g$nMo_SBYT5D%ogY(9ac$0z7VlL#JtVZUW-Ttc zwbrBf?FU^6de&rG)zq9D-HSY}w3kn^tcXP>CeEGn7fWI-1y0M?a57wcT@Yg`IM=|^ zMNU3nlJ?EZ?i)ckH=lMRX?I2@?MBgVN;2*C?;F{#??A$N`7=^3znr)M1n0Q-W~QVh z<`H5IDT+@_rCS$xv|>6I|MF%93Bu4d(>KkobH)2F$KiFe( zk^R-~lqsP58zZJn88$pFF|sdSTh+=9FUY~x7XSI)@WPtE+}hz!jvD-FE~@la*G}kbV?3wj zNkjf+OYw%Ww#Io{{^OTt2U4V8s`Z{7}u;Soq$1NUpDy@Eg`OP2X9@W#{T??Gm3*O)zf;Ip3wg;G3HhEvzDCGPzEsHP z3;FFrUh?HaezuUW6Y`Q@F65JiA1Vaz6nZKJzftg2g4bPzk5&u*A40xH@OTBCXVZVj zf=rS8b|HVUu(M9^=DYAo*>1t(m7MM^ROpv{y^#OIEo~Ss!QUnLaG^)?jY1v?&b>tl zdC4~kdGlSKbW)6vm%JhROS)UTVZ;h~$p;DfJA}Ml$V)y%$WIdT@j_nmp+Y`Z$WIaS zk`EK|FADh>!GA0GSi!$8c)Q@~9n|KQF8D`H65lz3mw)rRQ1BNCJw<}=EcjBv>sRn` zDdmFiF65UB{$^oMlkkt^D}?+ZAzvx@^93KI-}6XCO1?_S2Mc?u1^<@N6DIPld{Y`?87rde0J51CVp(n@>AL54(^}~nx;lus# z5q|g>KYXko-tLEw_rp)|!zcOS)BW%{e)vK^e5v5)i*~8;!$*ktl=9_5K1=9XE_m~u z&D6{lg0B(nUM2X+;LZ1r*7@NZ{qW}d$H^3_$9#{fm9G|hl7#)c1+V`E23uP%_+(*! zyzr0Yn}oc6HMBZQjN?T@PodBwdGmefWFlUD>h_QMcZ00F`954LA1cbFch#C(xZoF? zB)($={~y8I1uy@!LA>CX3HjY3FG+rikbh9vlO*_u1YaunI|W}T^04G9{P1j7%k*O z1m98cVS>L@@JWJyMd(i#e2S1S5_~(smkNHb&{Hn>_Cmf=@W+IFmEhkKe6`?j6neG` zzF6>ef;ay*0;$_Ac>PLVE~Q@Z`jywry9B?V8TC)2;41`gi2i<_uqQji(I@I$%&du&AAF62XtdNQIl z)Mo`BCV06P8!mXcf*c|EKZTwc!LJs4tl--T-Y$6kr+oNmyx_4w=H8|Vp8B4-B?+GD zW^U<%FBSgD5qvMf7Ycr}sRZ9ef;ZRT=y0jvv5@HA$_2l}%^JpX!FLpVh2RGYdnyG# zM(|aF-zM}_3;uV(*9cz!i2^>lUGVx(Rxn>Dc>HM#_qJQ`vxPnNf?wm7#=3;y1B85| z;GY)qO@jYQ@W#TPjHqqRoJ~ZK;LUgT6CWb@v7+2i!T&;ndJ7Z0`8PV~P`KcCo5J{x z5PVm`#|Zu&!N&^z3Sp03@N!&;7yLOw&lJJO2|Y=IH~*Fbot7^6?}VNl!JjMmLcyDV z3y}^N3I0_fUn=+;ggxbgKQ82#3x1#AD+FIC^i&EyQ1DfPe@*DA7W{>RuMs@{B!zq1 zF8DAvYZ!HcA0o=#E%;tSzFzR}3*II8!-8)V{CJ_iN$@ub-dNO=&!+glNazU?{J#Vr zBKXsVo>0Lr7krrDdka0`g1=bs5rV%&@G*kFRPeEar@ysiZg#Z@?PZ9h` z!6ym+GNC73@O=cIBlweoFBJS0f-e%hygn)w{JFxOa>4f${Bps&g#HS_%lUbw;Lj9# zss!Ix=&2U`C?Q`X_+~7rdM|MhL!*uqQ_FF+xwQ;0FobF8INM zj~Dz9!A}wV)q+nF{8GWE3;uxMa|G`Y_7@5sf11X<6$$DfnSRzDn>Vg0B|*aKYCIzESYo1%Hkxw@&aQg#2#7j}&~p;BA6;34WB| z8wFn}_$I;66!sX4d$JV8zg@@&34W504-tHvkPj97WFa3W_|ZZ>T=4lqK0@$vJv>J6 zyM&%t!H*TZUGRg1{&>OPAmpbAew^Tw1iwe{>4J|Je2(D93%*eBn*?7Z_z8k975v+R zFBkj|f?qE9iGr^X`~u;JO2Ky#e3jtkb!D~S^`DgDQfdVMwJ3MH;1dL2C-^eK?-qPF zVNbo_Zxr$_!A}uxEd7Ycrn zD7Q%P(}jGg;L8PHF8DgZFBkku!B+@AMevn^pCR}v!KVtoTJTMRuMzw$qF&ntpDFk{ z!KVp5y9FOA>_xFB0;Nf}bVin*`rO$Q$?cWGRaOUxj>-;I|4sMDX&yRjA+( z3i&X>FB9d43;tTcM+iP!@G*kV6#8QYKS%I(!DkCTUhppnev05{iE@(!pCjbc1^=bs za|C~z;0p!+xZsNf|C!)R1)nSUa>0Ki_~n966!upLzF5dt3jPVfR|!5(@YRAJAoSM= zzCg%t7yMko*9m^2(6d|c`cDV)S@nWnCiJ)jf2+{bDELAl-z501Lf+8pnH2vo3Hczw zmkK^a@E;03RPgfzA13(uf)5w`{lcCI!QU?U7{MDFg1=AjQv`1p z>71Yachg+foM;1>zrUVJ#n?hG9IMVMhPsmTv?-O&aU z*W#@~dXjW9didTjlm*k+=Xxr zLNK|pga;5VVtgOrfrN7y zFCrX6IEnFm!n9P;5YIT5@LY3kQd#dsCre8LrsR}d~BT+VnYVVdGK6fwS!@a=?i7%w7RNH~e{e8Tex$1~0) zJfCnZ<5`67ARNJXI^jDBhcTW?cmd%M#uEtNMc80GnlMdO8XAA&_9t9KxSsJ~!V3x4 zF^(d8@#{4-z& z;dsW!2;WCImhnNtPQnq4_Yqz~IE?Wg!exX*7=J|ge!>Rh9fThs-1sZEKjCu1^^9L9 z{2<{v#%l>LC0xUJHQ|Q{S212i_+i2oj8_m|M!1~uQo@fAE@FHi;YSJQFkVD>IpHM6 z^9lcha6IE&!Yc^JGM+{FF~SjyrxSjha2VsMgr6WB!gvDVCkY#jM-zUEaN{rB{)8(C z*E1eWcqQRF#!-Y<5w2m}hw#&cs~Gnp{0!j=#@z`&OSqhI7sAgGE@Iq~@biRo7`Gu@ zNjQn|@qYuqKscW9F~X|}$1*-h_(j4IjQ0^V`59K!e`!Y>gv81EqbGU3Lb zx%~-O5w2(aI^kCc*D+p8crD=?#;XaxO1O&gD#EW3u3)@^@H)cfjF%E#Pq>KjeS|j< z&SAWWa5dp1#`6hpBplB;m+ zV7!CyF2aq+xcv#&5w2(aI^hoq*D+p8_#?tKj8_x>m~a*2RfInwT)}t+;ZF&dGhRyg z--L@8-$(c}!a0l=5#CKWiSc~GpA(K}oJ)8Q;aJAA2!BC1g7I|1dkKdzo=W&j!Xb<& z5dMm=!FV*`uL(E)$n8(Ko^UP4FTw{1S1|5Q_*=r| zjJpv2j&Kpf#>YPaZXg`b_!!}Xgku>WBz%Z)1mk^#4-*b!yoc}+ z!Xb=5BK!kk1K3^`xEqAMZ0HVrCD<=(vOB)D7dM@8dz)!*3$MME=io>6eAy?E$A z97d6jZ}U$_`AgppGh9y~CA-qm4AZs+#zHXQr?=^>w7$VTXh@|?_n~1BH1aQjaoO)F ztx-uh8v+ExJMDmH(ZbXaw=pZmI6ZUjs-5e)8?`}YF*0t zbbvm#t>^?DJJj9ofXkI}pERNf$8IX^TwJDM#Uk|PX>XhL2uD43LlmEGt9D4+i797B z+Rl1jIePM>1KRmCHXJJ=!HenX%32!*jL|?Vz3O;5Rm^ESY~Nhp&R%vpq+^@i@!81_T{mh)C;9u76@?*sSy8d=Z~%NV#O4ZK^eGk(lpUrk^UsnP zcGqKm$&@>A?#GDB42~ZA;p9mg<_s)LU2BqWBK{9WsyNtfcb_*I=N&>9qwwIiT!)i& zcpS%748kKE;bAX6n$)lx;X-kOa7R2ZXu>H?3y{6 zgSmXxNxFt0NVhExq>{+no9?7isCy~(kQhW^?66hA+f~ZjRdnJ$ie+!faZHi7tH|3% z5$URRxsZ75P8C_sgx&VCb-G?81*aD-Bst~u@yh8#VMZJ}GMo+t1F7HYiU3wp5czjG zC1FU{c>M9%K{|gKGj5k(!!!R_)okIP94E)V3U zQ7)gPT)qR>)E<{_<+*{|S|1PJ|3?|S5vySo^4OGrDX520}ls{VO@?lgpcP`OI zM0kn_P(?7~cKK_l1-WVxA9UNFfXEas|MxtSvTZljGC!lm1dN0_qd#-;PR!M$CS%&R4%^}W_VmazLDhICT~H|s1&n~M`e*^<7oia zS-C9wXRgd=C+mEs&qIY=)f!RNbQMO+QPt(Ds>`XWXR4}7$-5{DRQjZ7E*-#zo(| zX}6oZo0|up_8e?-2c&uM9?!uq=-|SwG!$copl8Ah58J87I^NulC2+fAT@8IXOBgwq zF;d>R5)Fl#n#W+t>~Con`HYTCxUhJ^Ge+>T8b~!CyR+tU@YRd+4{=D@tiks%jS*_> zRyNhT0+@1-CT8%hpq}kqr)=f1TMr`-a&}R{hrUK*_pb#a_&VH9#?-nR5C_V98``V3 zWDT-7#0}HPvSq~B9UsyngW+z|RcLgYme5nNwYI%>P7 zz!NaR&Jq$VZVCu~*tgeWU^RR}1A^&`b(9+%wsLgYa@A$asVcYfG|)@(JxW8|Wofu` zci9;f5pJ(xKv3gjS?8NMVJfecp*rwdO}_Bj?`%x1>s9oNV%y#TC;MxVZEs#jc4Em1 z6rDQa1&YFSFPEaWP2wl*cdr3}Qitdq68>w8&C z5q}H|-#TgCcTC+W!`r>MlJrlfWCQLVt?9dU#!e^WmYF!2z(6pj#8L`f>Th$Eo7es@Z0WTM) z{F6JUa=^kZ>Ux>3om}nEGL%R>v*RiOeqhvWZe_4&1N7J-Z&ZECZYh#k4gm?m_2Z86P;Id@~H7f=H zK07*ti>r10hYu)-^=%$rg^x+dZ6y4?o`d8`~x*{lfCS0%W zb0%z6nf{{hPM%D2lvKET^Iddd<7uvsNrhvxSuINp_t!lFZQV!<1jRKGugAg?eZevc z%At#tqutiN9fkw7u0{mW;+p(^eso$F9cp7~2rwGHRg+Dv>^iON>A$CJxtFqbTG`}N zRt9Hbt;tK-#x1Iv9sZuOKao8=KFiX|HX%Yz&1dKeM#C#!$}ZB%vj3j48D7eEZ&uap zb;`;D$+C02l$B{^pCXT(S~XeO4wXrCX!O;}N>5oCY%&_?@n=s1?5|PP9CFIaP9tRz ztju2`nk@PUI>vQhQ(r@hD~X^Et~%&GN&;oem~rPMBO5m2jMTk!(4CXgFxrcp^nE5t z;R@c9lXyPhC@CcU#c$G=LF-qFfWmfUk@qRLVdkgC+<1t)lT$}ZhfXs&Re6#VNg+8M z=Y*(|6D{*2IVHj#Pjb46h8d6TJHCYNwxh-&OwArg!hqupnqTB!XqsQPjCl80GzbRh zu_$=)F-V(omKaSm4jd2+)CA`tLq}vklgzof9o~l5MF%N zRnhCux+<3SXH-Qm8rvNs=yH|kgn!{+*GtrmQRw9VL7`!0p?r<(zKr=Dz0G?f_Kz=6 zsAtx9AE0M~XwLG##qtPEunyg%QUK41VCngLurhs)Hy1=4uU31e5B;Il!M?t+KVJ~vT zZyB5;nu-_f4JhaY;(JZt#3oS#oPnj}1e`gxz8aM?Yd0)m*rbW}g@>1e!gV?4Wyd;| zPL`!}Rw<*rVK1{4@g)i7QH!~VT366#;GKaFR)ry3B^2>W3AKo`E#_fU#yBYwNa09l zB`;j+EMHcxR*r2IdV~r4ob<4$vzpiLwWM<$7wu$2MmjQk2ieQU;;hqq4|Dv76Vitm zu5^ffJ?!KsrM9nOC?slKUm%o=7JO~w=hfOa!3fjOdoq=;}YBwEMrLsxUG zD%-AwZHKxlg3GucW#}kXCmrFA$V)Iwag~7(r3Sir*e%1Rsk?C$m1djjXr;R_hxVH> z(nJB^m|(5{j~ zOViVe=FDZ3YUw#J!!zTXNr^^R1P1L!EEn5cSdwrJvF!|A6vc|Uk#u0wx?3z}_-+Tf zllZOp*ihYi4%8O&%nq>3Xqbfy z#i9ipaPRaqq%gOxmIK0R$M~az)?3m$Xt8358HyIHQZp?bW0vWO9d&oNXX&RRpxx(t z7i5_{J7dEgt?fwC`oA(NOfML$LohZRXmz`snmL{({3~isIdoN2*RZfI@(jz(ad#c_o?3I{C{rf zotP_%g}W=sqkePfRXn!%>htO<)~WM74LhcqAStR zbe|9zh_dHP(@09)aHXV#6E3IRMOSv-w`M<~oaik%j45PKTZOx;eOU)Fck1N(vYa|? z708dBe*0G!1Xl+izCqWPduqs%)SadK>OEmO9$4|{^b;- zj=;UNp9pzJ;ODg48?+_T;j~pa0#k|V z4I@0%WTIB?qUeDXyjOuL#1Xj!3MF|p$XXj;xgfBs>B*?Fp#w=W3dXso__j^z$dz;? zl#kGoH98?p{OO#F=*XX_9Bw`!66wfRb>v(+asWpV8rwNE%5d+8PdbAR#qHoj=t+DQ zVuJLwr9*wyq20Qu-Re-&8XP)H9je!5)vH5C=up$UnB1s>h8`y3QX&xNNC89l5^**W zNc%+WBqERq4B$j;BI4)mATYKQv4)8KL|{Hb#N$MKL=VtW+K`v;!Yx}h(Mf? zL?#hW5z#>rw-9kZ5x7Z15@U#1Kt!-2t|lTA1P)$K`}K&6;Po{dNhL1N@GqTrHXX8& zd&`Czw7*e{g?Wkn_#zHnsKh>}{iRwg)=O+B9r}%YTQ+np?a$U?MP6dh)1f*g=AiwN zS`1RcwncR41tm6}_Ak(4-c^`JhZZTZt7-pNL|F5h#?Yagl~`BW-=)RqK7z*~XVIbl zO6-T#*st^{#)mp9v27%_P>Y3mX?vFreTVRXLn>&0s!y?J=+M8ESRw8A(_*n++U}-9 z%azy!+CSZ=*i<@n8^rh$baQ>%;0<`pYUpJ|??D^FH;&IeHNKMg;UrFeb&LP}0_Yco zxb6Z5iJ#R>{2da%Q;0(s1=z>LA5d}l9PLk0G8^f*$B38c(3=qRHX@7YOPXt4NIb=E~B7_L7;}s%KB8QquYb6ms5TTRSgGA7L z#jMLhB6bp?i@lAA--YSPL>v^Rk0;`D5Va$FhtgU2=9_q!TZQA8-7%8Zk^;}>{dT>5 zw-%;rC!dFK+0ZtmZyx%feqb4c#$lDne};f7aT|q4H~TUYj{b(uaRwfLg376NMd9EZ zL8v~s)1Fk^{iw|_%zer_UyMhx_?Am_5887EKCMst9nsdXG1a# zqBIHNwKTU{&pK?Aqu^)qsx#qdM~E)XT$gj&8tJ0g*2ItYH#rSl5oOf5I1cE+==dOW zo+{4Z>u7aUwN`wPs@L~)-k>dWPba$8ARiqHS0ZR$+`O>AzU#M%`=5PmYnc7FeRw*M%ah*W$c$_g z#5S=Q`(M|OHJNpmXBO84sh*9~enC5#D$Yd@u$Dxt*i;93&SrHE4zRz~Zz&ps*T;7x z(Ngt=xqM^rh6zDwa6ITns!BCF68NUl;h{v~j85td`f7B>bDbUh1*962zkujkpve*6 z)e|}H66f4uc&f%`|(l#QGCI_n#UFu1Fx(S&GjoH zM7OZ63oU85`%Hw{=8o+n9lM+bVa~DPr3r^iZLX1}wga)H3+iJ_3-*@s9U}Bvvj!ZC z>!YZ!R1}8Q=EGDmwPf%yECYjkLngC%3o{2i%(xn6>OIVYP3{Q5y&_gU`b{?#s;LcV zJ?P%+Iqy@Yd$)(Vh{iIM?e3CGA!3Pg@)QDzD)1URQvH^r_;5NLQiC3-d%x~!O68uB|r*yb(~n+P^(@wC=tV5y8Dit8J()!5IS|t z8@hIM!A=+s@L{F1+eMG~kAidHA~RNH8PJ!h-9Wk1U{fMdN>=D@8!XSG;%Jns{ zn&XA1RO(@Rl%=Nl6!T=K?Pu)WOkSnr-NtM|cecU&#C;dc(O7ExxoE-9M*cbE|KJTF z)igEjz(Zr2Bjga>qh*?|-Fup}M+0?4SMUbpW!sM#?~`>+D?$I&JdbK z{m4~usoxbkjZT>BP~AZ2<|n_peZx+`iS*k*o;ZU>v0jP0C2aq4@dH}HC5ucw5V~SL3E`kwW|^(tJ(0S5BMySVHQ<5kQMO|e|B!De zCNx+}|Hh8x05*XQ;DrDTf*s>XvexwxiZ_3P3ma-(AJXur7RDbz7-J-~`y2_K-4dxH z?w=21lBAwgg`G{Ls1%C0TseQg2o*6ire(}4G-nJr_ryB)c&hWN*USfFu73W2%96A3 ze&h>nz>TaBGhN2yTukUX@q`XDzgXp7_Z$xs;A5Dw=^47W)&vh&O~EZdEA+v&uhDH%Jhg-8K1UAQ z1RYQq*k2!gn6D86=V0*7{#&!n2RmN5w>V>-+w#5euf+5mJ zi)k5DeOKm?CE%?F6KhIT+%ox1B&Rk$C#%0~+kB{T| z|3GfqQri(%EZpo%q||oUY1@m3u3SIR^x=eE}bzK-f&_?i~#zD5`fD$-O3DCO- zinqq-r8er6s>NR9m@-@J3G#+$4~iG>7CVmurn!V@v3F4=?-tuYap2uzKdYgITWmQF zd$-s1naiN?VI9b_rxoxy62bnT?tc7rBjcx7a5z)zV_a zlu_Jb>u}g_i!H~&R<#&sspA;IN^NF?9Y*BK=AbO<-C(oGGSOgK0u6?=h{$ohz`^EP zg)eu#LU0W6JojuB?uX9M7{Ns0uY!qQk>E+7O{KQIu4%%!^IhXS#s!`{d9nwRKr{2+ z^F*At3=BlaVGC>5u;&enh4q7x<=qblY79(%F2ElT4{PsL_>fzFJVd?5_9xg)aIdq}xKBRVtclM05 zSTi?)d8H?=oe!c^R&SoK^mX>6aXMe;bno+BFPZ1kl9#t>+B2A^nAcj(uM>CSbakB= zjlO1HC-TKJgk41l18G^sORcJz`^t`d*<$$=ud4iY2(@PAM<`FWuhyO^f>0|x%gwGD zN$k3(M&F^jo|#8F^m>ij&1W7LV{+$9#67U%xoM+tkn0JA91`h0FNnTvPLLK%N0;FV z(oK4TG~Oia*!e*XS*P)DM+UkkDos~gH66iJ>n@sV9q~-Hj^xo)iwJyKr&^&HsD8jb zi@+aaF@&N^bwD!`NBc)O@dF)okL~xV!$;}x2RMv0x(tugy89hDG4u_@8}3)FrUogv zjL%2HK~Kf=uQ>k=ibrCJa6kz+0s@ry#a|riwD^m1I`k*pYEjKOcNBDZ+Gjgl;pP11 z6R#4C?!H8Wc~xn8+^XsCx6k-%Rr`EiDcXl;Ene-@2bAgB53t`t z`y53QYt}vo(W|`M2TJ_3&#kDWXdg97cGiF`NO%y;f-r_X$4Uiov*rX@YT z<3&Lbhw>>4*c$0JT%&6c;>FAb{?9tga@NN%!#s;JnCSMd=aI-b^u+i{ChT>6`JxQ8 zL{!%+ikc^a^I@DX5d_*#!B_BA64hdF@Qv>V_uZU3()AunK*Z%gDwKYO~}czD>Ws?EFI8OWo)MErW=O_Ts{q&@S$^hUZ;dZtwRcfG+O{yqFE2fpi` z)&oz=A|s*-^*5KF2GF589kc5 zC|_fQffmfRc-aaXdD*HUlXXB~9%|3~dRgeu1f-uv_oCH~=WrMVmNQ-+L>WviTG6dH zELvSLz~`b>V2sLj7oh1-6}n{eIV-cQMEwBgc&1M7*&mGD3M)`?UK=tO-j>zqDUo%) zXWpIU=QKmrbDCJ`qUST|mM+s_if&{YnzL{Sb4|M4%8%rxtYoi%^6ljp?_e(r%bQ%*v?@_p#`&#P~*~mAU&T=%8LP^Q4c6*}{zU5wU9&>+PdT zyLL>iYX;>w8-AUP4-6;))W4RZ#b7SXEgQqKHIS_#*_%AFWh7e`*q(bIwHR!K#5t%o zqGmUuX1Ds$6jBu4-$O0o@Q6h)rgeonckkax>B?DvDj_D$Oz5aTij#8SFUE)V&*B)(l@!Kr++`+AO7`7mcDipeP;eH_%w2 z?x^#-8aw_0yznTU+VJNI-|uZ4ta>jpAKov6^WW9)ZPe!-dQXpy3lFD5jotBPB`I~R ztDrAu2_xq+Mk@2(^d!wv^cx(fQjTzzC}I8BJrb!pt*l(XbEWQ2QpxGX`51QbHW*^` zd1cXqqp9R(@6t0!sH~(4mdKyNrDI%gRz#zxh;UT|GwN)F_x}D|gzFAI$U4a*cOokA zgAFQ)dgdIKqMs0`8bD$`#SOjdt$4w9)j7A*i5HO(vlH#lTh{q=&Iamd8@C{$&|iP(Cx5n4NF7C21SL0c@cMN*C1ps5k#gno z&=qw4GG^Q^{|!a7-sQjWsAIOOE+W=b#JYcQ5zM$z{z6+vRvZ({wpW!R2Y30+q`XmCNsd8J=It z1X2R@xO^@Jjk3?lqaI$;#2sVd78<%ZA-Tqr4|FBmk)Px7QGjYUKCi5thdlk0M|J*f zs!Vl8t!rO}`F^7pXyBH8ES~2^s!x_hPiF^uUIVAcrAJUNMD$~k>|V^Q-0rR9IK_`I zykCDhp7SyPSV^UTTGv}-5=FGF$o;;Ksa%b9Dla5pz`?Ji$~t$&JkuO>W-5?miHAG4xU=g)n61+hzqyZfs5kf7 zb)mH|*%Y~^*7h3w3D+dN2HVSZAL%L^hhE!9N9ZL{gILEdR|qbYT*U!LiP1cNpo**t1e|;~W<3hhDb$o4%M|tJ8f0X5%zejQYn`%{e-uuK5q5uY zicuZ;UKMt0`--qDVPk4t(MSl&eD%)0O_c8`3bc`B%ZPEmvyTs6>H=&9!0>}okYaV$9iQ*)yQCvc z*4CWbYwoT?JRyUsiY}u0Uaf5>`R!1YS%0UVOz!kOnbhyNE4J;#6maJd+nU^MT1CU6 z4lur~q@JU^)^!J(!Bkqdj9BN`o$4Aa2SH(WX?h8rc?!=Tw0R4+s97Apgzj!QlzIl< ztE9W@1<Nrn$jz1_2C}nLZ3jS32r9U_PF4x;jS+|Ic9!OKDoP%HYXfG?P zqcY1%itr_8L!6JxmeD&Qanv|Tin-vP(1>B58Fd=c+0H9e)8_L*Rz@vd@Fb7PR0Itg zX_s>})|ifiL>?s2S*>r7JfHF=4b`5wbj>)(29K&t$zK2L3_ZDZuPF3Y6AH}+sgWn#lTBQIhMxwcH;Ox5D zG}aPi)?ZRvUP8AS%Au=@9UXn;?P1(UW%koz?*bn%HPInY`b%_d4gEd-YQN{XNg~KJP1^&$(-_{at(Qwf5T6+4tPTfpVp+ z;r~q8?JmmZu(Ed%8XTPb3(M$u?QAC(WvyA+!vC4FU({xl+wAOA0~5x9)fg^I-CjaBk|qJ;C3G~EVNS}4fx{?q za-|$#G8gO@7_7KY(C4K0qDcz7R_9Ffxg5@2-QV}RgbZ<&{Dtb3b5dXPoU}^L&H9}5 ztaDBxDa=Xt$$3!CNk`EFSSSa;4Cj5qr?k58j{>t(@X3tsG6(2du|gcTWR0aM7G*)T`!E>DR+_B zwY$Dfw7+a39B(<>_a$1VWvh)bx7rYjtg)}anVA0i?qbZ>`V{`9YOW~MZ|p1Xlp)0b zU%=EYn}uFE_xH0VUO7iz8n2w2P2KPx6jZOAlXDN;4n%B>SI+%|N{t$p&;|tyvD%5a zE)s{#ublhuDWzA=k;}#_=l)hTy>f2%Dhk(YXNJI28hP?yEkM0;PATBCHFm}AZ0(9y z&dD{9jGE`CiAI*yzU z)}TY8F4__4Z;jKZhSSS&bjELu)AQb=Jbr6j0!=JviOVaTdAfz)B9HH|s;Ga@J4p9M z`h608r(yoi=nCG`TjQvc(7`CZ$sC>A{MNW>OFX?bPW3EL2d01j*0`OK)Kp#Rt#O)s zYuw$O(H&ow@N*~56Y-_|d!D7eR(Hoaw*CNfo-Bj++b>0HEVoY>8;*$sKju;2#{_g= zaG-nUa{LBwAWl=KuEuv6cVR&5k1M2Cz031gSsHfWm?khEqA(prt36q}#WL$KUeI;~ zW^LgwKq3)$*^@{R|8D`Iz}wcaw^j%22N6xYZLPUFeUKt8A;JMxGFu?SkxZg_SRIVY zZ|mqg8xL>FqloGlN80qpHM&neL-Whh7h^C0ai1JcME_q6+%*SL&C89qoZN|79Jh(< zkr|H8XTEmuKH1~te4 z+TO0Tf6|Cp`VQbWWe?8(XzPCE>DV1|y>*eSk`n>8yUG{&6@hv$*vh0xITx472i#kt zQY>xLP!}z2E0c;Mlo6L{a64;$>^3?FctOuuuAjBzWmMQY^0xtJzq6t+7t)t84_%xl zDdpF4o@H6kZI;E8=^kFD)&X8S8vJJl6OxqEfhu2_lr%0JB(;b%70^iH z28NOwp&0)_M9*37oP-`nMD}riL z){M;&{&&J~%q3?gpb^jH$%ajx4Y$vHI0t7`vIm~yS8eGX;d|;A>TtLV&CGIZu7mG6 z!KMVxJ4ovo_BHw!gg5-o|H)9UfY>0YuQK?#27bz6`CR(S&Y35_}k?P=CC z%~6-}NJuzTpTXjK@><`@l|)U8jm??EvI}GWlx=PL;jOBQ-^x`7v7@(g-N(|=kXA;~ z?#Jb=Tn)WVZ{?~D=1dRSaQ6PWX#4Y0fxS1SAIECleW|@CrPs@0W6z-U>(l}5ohi8r z*-PymDA`#ilPGxt3YXgBDETR5@g}ZlN@v4Jq{AqE3^7JJkkZuuk@lu^3v$F>m4l=O zT9(*5Rv)_%&WiI|yR!1W|$UW7t( z<_=_D@m8*_B)JL3UGY|~I|-RDk^R_dW6bMsr<(fp$T?%r0E7w?pW+~_-CKxJpQk5D^&{#lfm%1`_5M`{Hg$xV{npiR@ z1G{wN1vkl*QA`=wy^usSWsIT>Iu%1k9m?oM8FrQ7MHw9^!%Jmc#LoFlbINe2jMJ16 zN*U;9q~kbc)S!$SDx-ojew&F5oTHP(9?JNJGW=D>4$3%=41nt?-4n6HuP5Bz$~Bju z$L2^e+QFZRWU+9lalSNZI6+I4SZ7LKLI)*nX)a>P1Z69+FiIa|vAHf{wFzpc#D303 z`cW2xl&R86f`XLTVM;G%F=`d3ZLbkjNdaA%x`WbVt}1pvL9Z&Y*_2LUF*;avYMVvS zeM)Qyr30@jCZSuDSOSTiLl>n63D?ZpS`pM&iTP0a;8n$H5!6hHeK`i{ds!?^Giy6b zkVT2TK|A*EWC|!6} ztrY~l3$cInR<4Ig`e$Y8CzO70I>r;(iCSch8CZz*so-OhNTLjjl6aFcqA0_vGWJqN z5M}T{e}pnDl)(diBW3)Esd*pQvYav!rXfQp9k)_OBg)`fCQ?Q%%HUdtQ^sGnICb1i z8JkEc>u66I%PE6(G^dOil)*Y0PzLRn^hv8GWelMVp0xfPg^X^L!M>cMjAY7S(?6z+ zJd^2fQbv}^^u3hP85vi3E7u*s^tW=&mFa5U%2hxDcvm6m`wGM1innr&BINZM)ICC; z=t06sH&dDA_T2td&ueEkNiel5366nDdt)$N121E|63d@@L)WcA0G85M`co;j+&;aZ zQZW=YpV@XRDp_jxBkfmxL)T-!I`=;MUI`C>;ig~T5qZqj-!7%K?|Q*iUPtJ?Q+NcQ zw_VHaAzykLYEl6k9E`Y&!TK1>zc;pOfZP{&NjUa=(-u@v_X)zq!@sc5ivaxsjt?1RjwO=vwJNOsZe2)Z;x` z0e-j3^bnJ!+Oj68X+Aw}xlZx@^t-D@16`~&&^F-Ly#AA+m)z>{ab#_C38$gLaq z;(^u z_PF9*2s5Eb-jkT$g-{ocxIbf#Q9zc=#Dt1=lj$GIjK0ZZm7W4u<4e7TprLFZ6>_z|+Guq%1tDo25j5vI*{`bk z)y6ARU>vpm)qk}SOrcf3+Nh6>t3JH=R~tpXR~=p*Ymp@W{~r3yzxdTgTbN?Z$j$8p|lMgQ)pIulOJ~l7BbaGx!L4HAAuGYElz*4PuaX8WN+`RmPqP*O=@PVZTMdOIg zo?2KIo*LdHR~t~4oilMj!Hhg;hP=U6Td2plqT-S~Wp1DHypocsMPwMtUj?aF(}03; zMcIX=(k-oX@zlcH@S@_f@JYqxdEsTn;br6V!dWD|G%u&DptwlOEY6t-5Al~?7G9W_ zU0N1iTm;{xCTCl)(UeDN}ADMkR=w$zt|R)!#ZHJg+cs zQeIJ6X?V`~?2@*_TPKW+3r{a8$(~*+9p>WMC1?gH&zV|M0%>?`s-{=oq~en4y|O2# zmrgIrQ5~*RN%6$I5>3m=9-UW|J+?4!^yHGfyh)SG3d-|F=b%BxqVI&~XBQMILm`(_ zl9ycuaC~-AQC=Zq(&@f~l(|J{8+b}e(WhM{+7X~>@x_zN;wNRp|HKwK=xFh(W#c!l~x?KT)Q}X)WUt z+y@tjzBN;j-S`QM`b(3`7W&Zb`WouLaJxU(M3AwqO%*ieE6yfN*5+=dHI3Th1ptO z*c54WVV;*)ZBV+ft&$gRM>M*E`NC#YqYJxid4U+V>b{V!a9nA)=HmLF3Yg=SA$wD} zk=3qUkD`LIg6zVA(!7{vRLPZpHJ(c2^1gLX~(NBRfkm31yI$}bqFD;%2*i~mtoEM)kc)gkMqcI}*OOipnTdaoSZ zH^%B7cF)V6+~dY(;lt%Dl!fV>^>`l2?R62U3MGh+)XeSXtW_FeYJ3l_#D**DNJ;d+ zvIhSaME(7<_QkX`zNEN_`vKnTJV!4NI@grelSbZKhYzRfnOCE|lcaAgTdVn`)6{~( z+`N*k9=!*QZkgoPk-B#6dW8zTe1fy_sBB`g=SaAy(aT>^7uTfY$z7-AF8=ALcIAGfN0E8EVOp0<%ZevsK`t6sn3pvkQ+@7$ypr;Q zoV+--;n3~^ZMPb>fb-gRF#06ETU{`K|#|E=r2zCQ2@WX#Aig6-PPcFnkQm!Ow7uXCgE*Gj?N&#WLEXD8CrnKDWIDRXSJI?DFZ7m-p6N=?XpB zndsbwaXR1e#WstQkke7$cj)Wy)%F*yT|1)7zCh{6eKqe--1ip=#{R<8c307$mv^s= z^os`8_DgVsaRljuBde;mA^q^As;V;FNR$*+Rc!)YGr6kjAm}}ypMdTMy#!hT8jPEa zr*IV10dyFic*q5v0J;!#2Iw}>KR^$H#^PatQ=r{Jqv*y2PYPs#)&(sCZ3wyoG!b+c zXa?wE&|#pJpqKCzT`+E9>a4A*Y7N>LGz&Bdv-iPbQkC<(8Hj2gI0oW1NFsC*khovpwEM5 zg1!n`2zm^31?bnHyFh;cJq-F6XeDUvdr=-YZ#RO*f@Xncg3bpm1icG%1?U@~yFe4~ zLwV5Npp~EtL49%KN58_01>Fal3HlvqA?T{jC=YrHbQfsvEhrDV4YU$;52!D07K68< zJZMkQOwh@og`o36SAdq?kMf{*fF1^|1ib(nil24{BmR9sTZ5K^+7O@BpiiOwH-a7o z-2r+5^hMBM+$L46-YdC(D{WuW(ft^+**`V?sNLnseg26_Rs0yG#m))#kT zoPc(DxT{n zdC(!CT|g&*=7Qb{x)AgO&~2b!f*u4t4|)ppv!`KiJ@nT-uorYC=m^l+&!8OWd!V~O zTRaPUL5n~yfNlc~uCHkyg0==d1)2qV0kjO%@;urHG+;041MLfX3UoNA4dc8JG!yh8 z&_d8VUO@i^eHL^VXeH=j(EDFR{|DU-8XJalk$or!+V>^Y1DbjO^?+u8J_Xtz^f2f& z&`QwRptc({joyVF20H!_+6Q#?G1LpX1#|`IZqQwz3CB?$bS!8k=%5eaXG6@Zpshji zaC=o2=xWeH&~cxkAAy#E?gCu`dKh#QXeH<_P~S%I3p5t=P0&oxf)T)z$eo~j0q0{%`lco*Q$SA*vQ-(C&A5cuk9@NK~9=ggkk?;!B}YVcFQ`vJ$a z?ri^?o$YVKL1=n4coguK)#&d6JPbIt8BYD(o%(Zu*8nd2n%+P9IPrzR|5{sBh3Umv zKFf)31AY6L4OM~KHiC+0$vL^rdy}}eoowmLtq>5mS()riAMpi1AM$0 zx8z6x+5dr$0#0e8{||PS&jmgVc#;{P?8FxWpA0=JJ+}QUTd)vtfP$KF|g4Yv5796EMCexZo-P(tqGHfO{&R3w$?lEbC7D zdpYf22>gEFBh9#Fh*AGG;3t85YQKZPF9P?}ey4z6s-}LM9s4-oKe^O@-l#tc`2G!5 zRag$3_77F|M>prJHnZVzMTqBGdTZpTiHN+wX zX)JfZzW&vmsw!-cjX&};3;BDHf3Bob}HHJ^}p>+ao7FP~ox2I*NHa4CU!DP+Jp| zpP4JID{Kqw)(3?WhAjC*_e=CV8@7c`ef^aPwL9HMZ3J#^cPeMYLcI+6BxAIbX?~6Z zKD!#c3-A&TIK^ud`cXdc`ypprfmzHP*Y)1gK(d4G-%c*LdV3H~_jMlu_p}bu{ayud zPxB<*2R;XUB6JxxSn`efebJF^3q7whvA~aF9r9FvCh(W4!3%*u4E$>Gk^TeUS`EGn z_+8cLKMZ_9HFzcPBH$R&PXE<3FZ+)#?o)HB!DE3BsYZV$@XpoXg}~#0d-NZ8lWOo? zz{9H1e;Bx<8oUztPj`6U2lyheXR5(tfqw=Z+i++54O8Qb;+F~hQ{WM1e1sD(;irqIBu_<8P!)#yJAe0Mc?CGeBg==a42_Hs3N zEO6TA_BPvZ=^-7E@dw@$crO=RZG@%&z^4K4=Yp#M%JmQP^TWX7X}({L#Z8|lu|8Xy zsJWi>JOw>ZVBPRk&r#sCUy3%@W7E& zyQ`||3ACeO8@1s>&h?V&y#%?B@BVwaC~P3|Hda+_L>aR_%NkcdG9h;Yau2x6-R&wz z^LQ4{CC5U}_7*y&-hR|JYTGO4<4w><=b-6keWvmJ0`T3yJ;nJG;Cq03+J9UE{y6Y7 zv;JF^t<=xLaKlJ16Y_+20RCe&`bPk-1nz0RnhE?f;4RGco9^2-0Y6tw{VxFb#d)nK z{ht88T#f!qz-ywsC;!5rxH)i4o6Z=S&Mi6suj2ui{U5jh{-e1(#rPZ7{;&{obncwx zF2{RS$|ilMV8}(t4M*Cx6|0E3-|+n`$OoHj$}shb5_B`dPXTWY{Hz(boRXc8a2q!Mmw|hlN1}k+?yst9 zWiDUjoF}>fuLpdO8Mi!c=+6cIC~!=-PW#ldDeYef{LEa>`_gT|=N|Tq9|T@r4SouE zA#hLUOEzqX^Q*z5fRC<5e;43czzfa(S;jg22fhV(h6|o<;Pkyh1@PZo@ShEQ8}ONk z&nOpM9Y9dOrg{8%;Pj(?+g2}U8&h9ttNJ#{MWLe|MI6r4ef_;|a$h;`>w|Gnb~nC{ z!7^q1p$WBESwecea{kx?={d&&bBd~1K4mw;#&g}__Cb#*&ve%S`R9q?928@`&>pMz9C@I7YS zwEmm|ehRp!^~Z({vQNd;*B4TW_xaTd#<1yae^6*I2&9lxr^73jZ>-u&R{LeE_NEn8 ztfg~gASrQ65tH|<$HWSM?Q#2b9Flq+6FdF2ZQe*fTjQ9h@Yn9FSqY(S{wVS?eSAhA zD4ZHMAFW;C-TiWywyQ?ow_)0LpJU=cn6}V&g9F^Qpr6I@Fl}qdDKBt$gxMjtH4J4p z+@KUR?+Dtz-D<1$j<9}b(LNDPkltXiS6Q^}mL#OVwm@RLRf)$$?13GtY{$fB0or-{ zqp19yT8G7-0owL}NNhI)Ahx!)lJ##2+HbE|WzilW9n>yypau4wLaX3*@s1Bj*9Ixn zyH;oqtJq*++ZSiuOGKS2otvwtDr{v_%g4vo*E#j+1b4 zLrs);l0J^mhivNik+{>V``l3NFR#4H`r1XuF@Z0;kJZ@V0QXD4x8g*7?QGy_JGf8k z*&%nXUNYvYP^F+zENI6b?+fi7VLu?Wox+avbJP%LxHX!!-H*B-v+WgY{j>}A3aq@} z;hz%j_S1Izd<^ChKL{V94;b{{Xbtx4`ul zxZVP|-+xlI!f#(FdQS`7KjANd^HnbH$5T{(Tc)W@bv!Cv;W12GFxBys-FI=zM# z*ixnbu0h51qSssC|MxBMPsb7cR{{F_|6+sTyvg`8rzz7iSLLW#9qU9FC93mt-T38h z{029Eha3O28~>6U{}%J|j22aY&%FL!)0PL6J@~3e{^imurtya(Z232h*Bkk)19EWW zFaK~>DF0S7PUp$=M@QQ9_siv~Vxm8=qd19^e@En(IqE$ilrc?yIicSDL40CY`c&`# zAgb4g(?0b#H$qaqoyX%lDEgD%p@8C1ANeQ0%R#E`O2zB>CuS&Kw{wjA(m=g`gb=;H z%T>z$wk(gXEB&#l;@S_)TW(PqzcbJ7u+(+(zq}HOm{Hd!?c3wai*u4US#UEo$F^B%`};52Gc=I^O=@2UBq+) z(;ZCrFs)#Eoat$%7nyqP;QEfkXL_3HMW$X4 za{WxBnI<#MU^<9tKGSlhirFdf7+pJ_SM zMNBs^-NAGZ(+Z}?nVx2Pk*U{CuAgZ%(`2R@Ob0Q|XIjp55z`G!cQD<t`CxG?{4z(?Lx0 znU*tM#B>AG9ZdHytzdeb>1n1HnR@Nw`k6*EO=g3h(C+&or88 zGSdvEgP7(sEoZuj=?11dnC@X(!Sp!O(@ZZi^?HKqXBy2knP~>oK}_?RmNQ+%bOX~J zO!qKV+BL0P=g#fIW4iSo*etwtT-&&$@Wh0cNeRh`t-@pa<4uI!@d81a-=bx5GcD5_ z8)sP(3H*;7R=9Pp7+w)I_6t4 zUcvl$=HpJOgudzT$$S#ybD583eh2eG%sAe4`S&eHqN__7yU(m!Hl2Ph5WT8I_PfR77$W^FtXw!#sCSts$Hb%=@tYCz;p#Z>@6*sLgmd^XbfwWnPzG z?Z)qO<13l(%jG*%szfUDGu-%Rnb+mL&nrQlAHuv|euEo-l=z0&_qTlJ_5MAL`P-D3cA5Dj%)kAkN^E7mmo=7c%lsbZ_4xh9yzWoK-<6<#D3QW^8ke8$#y{sK zf0TK>zno^i1(y%{LnU;5Sx>%^MkgKXW-jjdy)N zlS%(j7k~PCP{O>Y{meqf|Bvlw5|zEieunvUZol7{*ZsM^pHU5??|=Sp+s`y?rQ)sc zXNEDa?`OKScJ03tnAi6+_c5>UXR`Q9I8XbTH?Whj$tLp_JtiXkGj>)z%kWkd3->T4 z7H`LoeX#ejIcChpJNdmW-u7jSA>S?;zd|{BGo&Cf6_DL#$A5y*EW+|GDz$jqI*-A3 zbl#I7;V2<7;blvq9L0G5*%o;gN6pa^`b%>5&sIZv5f$l=58F@}bwdZPWHKs2?YE(J zi_Lbr353Rwkk@ql1~%>(l3v~)nk_R3$(FQN^zwG# z)B6`#Q^WgKyiKoR5=|LCQd{y#2x~QqCue|zBHb_j_+vX?}C89DT%g$&q8yM3da2LTY|VudPgt~ zB%=j&ghiGxW_nPiH!w3X1586^W_AJ-F12YvONohKhJIybY0M10DbW&XAz!ti57GH7 zO&GZW-dd8F@g*0MB_o0~+=W=$FtT$Vm=s2`>|ok4@&xt6_LlvmI(Sk+5jOCax?S)h zM#*PS(=1lY?fn%Wa$pvO>sU^YWqy4W`1+QNQOrkDfMP5^!bK_{vXVS%Zb==+ycIpm z5@$&dX8tuOvLsr5K;TGT3;Y&aPhm;7(2s#stU9yNGFE+Mvw5pn^_L9CYB0MaV>N`! z$XE?!M#gFwmyxj=%R!K_%3(&vDwi1+7&U#VXTk8dpQD zTOj4HVl_-MHZ`tBv6zh2Xl7)r#xNsel`YFyf@G`;B*Wus0y8pJ6Pb~*Dr82+sz_?% zaaGKWjMZdjWUQuGP2;MR5gDs_%*a^Hmkh^h0V6V2w=p7PwTKZJtHoB+xawnl7B^Ds z&?v!^Xk7KTK7ipwyoyz>^}9IcWvs?oH)ArFxQtb~_16OCWvr%KzsP1@#%iYZsVU6M zSk19MjY*%%Yk@(*6swiisklQ|vAUg&mg8!ZY_RCo)tlnTo#_CPU zaI6k9BV+Y8Gcs21a2Xk^Bj#A$VeLN|zrQnLwceULPw^^NJFT64nU}HJWqqd=^DSsl1v4U$TCN2~P4dRI^^0V9TwP>F#_CsQWUPK;M#kz7sg1|gpUlWu zU1CPY>MwJwsu+>6^0U!Ap#{lU)shUy%AXM#tJ;jnSOqd7V-;jGjjNBX6VXywqIg_= zX8o+5;#I7Euy#yiUdHNY>)vV1%UD@#sea7Mab>st4rQb-M8?Y7_Qp`=Wvpu260zeV zTnn^g1PV)i+gmmDST$gyWvpUsTObv#Vs)crI9BoOj*L|Tmyxk*$&8FuqAbI)Y9|?v zReNS+tU53wW0lH`j8#XjM~@7ZV>t4p%kI;vP* zmQ0`;S5~`eA82Dn#>&o&jFp#t3##E*)shUy%AXk-s{m$XtZFkOV-+N|@wf_RM#d_H z85yfOc2lhCF(PBtlo=VT7|C#~nlU0{)tnI-t5`;4tXkMj4`#{OdST(RehwY%`<+y5SKR$tZ8LJ5UIIKnzm$7PM-`iR7 zT43dTid8Fn6MsEcNo=%?RVUeOX)0D-Bom}!)q~xUB zR4yZ9Rc?+|Tl=#u@G>n;k5zkn$5h3uSoN{r*^7A@tN!*1>nq)sXQt?{g&xnz*)b@HWK#x_BmuVju?zIKg)KjsFkc^j# zRWysqST&W579?X8!;FkoGg-z`NA3e#N@l^FI&yQ7D7oQ5GFYu7GdD;EtF>gJgJiIh zxgr^?Hq6LiwPi*IE5(ZjmQa&mdp1D^t0#-eU}Z8RZ?Jl?m<(1QW@NDXG9!c4--`y8 zP&Zh0yzX0vH|`q2s_#_;O-H;6R;z57dJ-irtX|YoctnBo(Ye$@r^aO<^$^tP=K3 z2CI}A8LTo{hJ!UzG7F}uV9k=;TeIrQXw8w|8J*XlijiEsyE zRsVVHCq>So0eIy<6pPKs3(dii42~`+mYM^56dd{3zkvkKNNyUVX${UV!#~DoWGTlX z)S9IzWKE%0a^27icOTZye_(Q^J|liXaX(7Q55PDCu=Z}=h+%r0my&ZJvdK0HfWt=X1m!@1Z+sMA4Sg`HW2($5iVuMMjUf-|L-+72Y$sFnbte(>+oiHbOwm9^Q;G_$sMm564<{ zUU?W1s(Yk7r2oEP_Hbq%%fmyeR|_ksBR%Si24IhJ7N`YM?1Yzov~rehZ9)Kd0}@okk5ckO_h=@%m4xqch1nw?Z0;n?9{qsB3Ue=97ohXX zqh;98_?kSLgGEg7%A+1@bPtqA$>^KPL*-E}T1?8rBdS*mTi;lEbiwJ-n}gKNf#`)i zzy9PAedr!dMG%M=g|0ArBrvl`m^})?Oknot26$lZbq{vOyV*z`_qs=LjH`I|2)H>$ z+tHwAk7ft5JUo(ShGmbD9#zyeVzd<%CdfLF=SL~|p?j2wAV~NoSC~D@_ti_QnPOL@ z?t$ucld#sAJxW0X)h>5>)OUo=E01#e>K>>VJ)NxcDn`}}mWM}VmKJsrKBCv%g}XxT zbrEIiU_|^#Ca)up=tK8t22>C)0#L*Rvq$etWSC<#9izn@qi!WSUm?d)cn;pPY4T_$ zW)j6Kk7mI`bBsR6>TZrv32c$_@JN~&c2BtUXhMC%qZe*b#|PpSGMQ#Y`JsE%tp~$j zy29+yv)IT}8O+|(F!D!tuC05ZVs!r`omU>c3gL}XUd`s4aciY`WoD1o4cB=U zqjiZa509u`EiA|?J?el-l4H~bv&TxRV?Dg|qm=y6Jz5SECH#~t%pP^=#4vmGN3iaJ z@+bqVsEV2L=(TxRFHJET5w7#fqYbFv?9tq{I$*6Fx^U!h*)j5H{+D&K@*n3(Q&# z3DNjP>^_3ZMK3S|aD{$IMItSukvng7XYOzlflMLvb3&tDUaIn&>{zV4t)VV2l)oSl;`My? zj6r(I4M>MImU`NXpP=(MGUFU+QMu`Y-agtGm(2AeMWzobuSM3SR_!(jQzyZq9i-E! z#E+yW@*d1>;k{lO!srknqnzkStgqn%9%;^KIgpu7wBsb8LoZ-*ZGoD^Iw1ELXmqFb zKu7N$0pwBSK1T@I?)R&#c(DMS7lZ~NGsU}rKOhllR?}rZK#RVt1LPZ{;MLsIY-><| zqjs3kGzYb{ZDBUTcaTD03mpllDNV7Cd%(v;^#k;=h1%FbCWl#;Ln^q<_eh)jOYjgm zEjN1%LoRqE^_6DyAJ~F(Xx4Am+=AqIN=BcbjbuqqQdyho>1QI~DJ0@=vN{EwRa)6dS^Wb#zXz-FP3Hx& zdU=qvdU&I2vigWGtiB9$YCunDh`ZI7Z)U3_05>I(1}3X(q0gDEjtcZ>wMBD0j9S9V zBBa%|!>`He?FhA?e>V0KnH1q}^%&gf$hQ6f@TVlw)MWK)j0LmRWtikVw6zuArK5P* zBQ2%XuU(tf5tuW?1n8KGE3}2X)qkvEt5*VEOCqgIRzIw_E%%W3(2yRiwrP$!C?00% zD6O6a$!i#mJ7JaxhmPjBLQ~wW&J}ERXTUv3q@&5|1z6b3ZQV(4`zuGIU2_~JtHXLr zt6Md`CaYgu4XcmCoG-|vuI^TM)Nk#62TcF|BJ^gH)i*@BTJ4Rc$wOOv;bt7g!|uVV zfSK>?wOLJzl2`#9cj5}|=WeyXH@Ed;fS)Fj!6vKI<6Ny?hmD^Hs~wu7EsBSIR3NS1 zjE%rG^pGz*!0JxW(F<4TNO!BPm}2B;%mX};L~=}4FYDrJb$j8_YH!W)9a&v-y0m&A zqI3;bA4bH)Z!pISJ)s5eR)48)t{PA^BvNd$dL{;ixnDQE(WBKhG{-j75;iAOT3r*H zv}>@s96L(!D9m||Oq%L$^*h74t=|Rw0g2pdvU(vFRzA+1>SxPfbuM%i;|iVUZuRQXZ1rNmD@kOr$?92{e9czh)y|{UH8n>7iidfRmsZ~r zeNAnBaxJV5g^nh;LRY$5ofE)TrvmOwB5O@n?@n>GdJSd?4{hzMIV#BNXcR|Vw?LGx zp@+=IGAoY2oR7(*yWOo0%4e&82K+mTY&Ka9qg~p1HP(L*R{Lp=nJ6Ci+ilY7uddDN zMp&!FBIsCyD|EZN)e|SM)jI({Mk0@xtWNIYYW2B9k5<>x9Em6%cH$0c_1!Vo)Yb_j zVRZ-S=!Prwad)dDirDJWfb&S?8I#o~Yr9(gLwk=_`)iIf(rQ0xb)RO}WcBztu=*#M z^B0-)qPx|%;s!y^*CD8;0j|(jOjh4h-_>ecXOC6~XpZ|(L)Z)01fXBrF-KlQzdld{ zRzC!Do+OiAcenbhMr`$)fZrvNcT84?U~Y=BN$dsX?{&@{ap`O z9Sj|faD{&1Zgng4MQL>#z^Nqijmhf8$*xwPfk__PI!JTuC#zSf(bzQhnyj8P7*@Xl zbB>Wo=iRNYJA$pI@34L*k)KUgx3;=kT>~b2usRrL;wT=rP>se@^onq0N>q2EexFHrpB@DzM3o9f8HeDN^A3w zeooM4KK3=ZXxk@fiyT{L5z?;++IYqWqOaNx3EIxZj>9g*_LiVcQfwQzYkN=7)+5%A z10dT6f)@1HiaJPtB50Y6{R1x8z7Vwd#EwHt*-i_Z(qm7zLHeAai8A&x8oWOUnto!x z#;t(u7eRwMw#9O!{}41(VrOI{T_vak#!jUp0Goxv8XJvC-B!awEvU8Fhz8O`oNT`C zLVSisJBur{CSs&cB^1_Mh(C~TkJmA3Xf1vU*_0)w*5U!v5O@^H)TS86(=m)~m^hQq za4MkAPIz}Gz+=RKZa4~oIxzy!SSLJu72t8Av4czB3TTlI`zZr{z8Nw_LPId*JhK`2 z!)`KkR%9y^>20~1SAf4wGSW$mqUfd6F3kZLWVUorH|6+4%}R0r%0#AVWv zkd0nrTO>ZEZ55q;CA#7*-@r()tr8Q_Po%Bg2&aZpzG$|0sXbcKshndK;^H9F62F3g zE%_7-3r{=&Gi>cCttBp4jdTZ<{u%?_mQHDr7(pYUlS;Q7jC40jTM~UJzq?9zgkoDS zN?Q}-aaw5WPib4?_r38sK&2Poj`R>p+Y|3yiS$sFjt)V36s5fq>)4SVtI|GR@w4Y`jx&&PoT7S;&;?tCaUyU+*R2oQ@TcCuewN2QR%KlNS9OEC-G700k^1h zR2tGVDP1%1B-uGjrCZa`nNMlo#6PDay+Ea#c_F=o(te2_(lA}B()E0hUPb9ziPj-V z->%Y|laO9VY5&CY3y@x~(#t6S9!du!{)EukHmYwW*z-ROvscw>?Ygki=i3k$z64Pg48r zqja6b+b1CXl1iV(vSd3b=jOy!6r=YkEfUk0A$@|ZgMCVATcVumzNEBwVll<* z8%hTxE)7SzlG5RcujeBDBc;<4>vTu@BBkfHilKJ?lhT@KeTagA=MRXpv`(fO$gVhB z>nCs%YV%Q?cWXP%RQ`$!XgwbjqAgf);jQ;#IQ1F}d*{m2$Ax{#D)KJJY`+yiL40h3-Wawyr?uOW5@#ETaJzd|B6kpAeo2xG+X z_H^_50dl`|D}1^S;4xbq6^a6jaZa4T%X6dEx*A2rCD%K*=C7M>Ukbjg$GZ(yDLlisg;w z55i^gx&Dd(z>idR;lfP`mIXE2$pQGf=%y63pyNFDD`6*KMoeVfZxHdhZ3QAV@B?IP zK3k9#srYv2W^$U8L*;Ck#Y$e2Kt0 zD3T6>9NuVw{%wQb%3ABoPWiME5$k)qlPf<$Br{uef`(9zTI(I2>$ zG9F$=r9G5~QY4Sx&q>kV5F4tCs+ptRlZ6oN{wQWyh*_oBREW$q#J-$C8qvO5RR3jI zl~|)qif(}zov6vm{YX@)P5Dn4kv{V9D@Vk(>0D4d@m_!7t&LMIa1xZ&+UX9|HTd~rps$8?CPR~1$d z`^c|os7B+fd3>>S8&rhRp`shl<*KiFDal{+(yv{_bm&-! zD|8CXa{0ovZ3AxCO@Qwwkz2@e{+hQxMgY|&_{O*XT;`n*6qvr|ZGz%qFJm5u)hjRw znp^c>T74SBO2k7)J6xf&+^v4TAzR%a@DLJNV6vL-1kF|t4D@I;7x<1 zfdL(_$-v>$xyr*Z?maSaqshQ8Fh`q1{2=B*4+aJp24aOMgQBpz%VA(>+P!J`&y$wW zZekKFP5pB?s>q~~m5Qw}zOAJ0n%ay)H;6h$Ds`FA;S_?@zv>}5hMc`AyRZ0&dopE97KKqPJ!x=kE}z)@Er^=J$&+M%~+ z`|-%Egv_rb_aN2tA8I7IXouc4080WX7yfC0>2iv6Y>N$h=;mc}Fknzvv<57n4bnO; zBl~yMs>_pmZ$hNnjuYkr+5ZVLWSQ}V$aSdWrI|nuoq#5K3P;R0kouKFfV>@2%%*Gr zBF#WBNJ&^vjD@xh;&yhz&a8K1oR_^x8gN_P7wIFE_V(FV3+ZE&4)8gIR&VeTrPXs# z4L&Ce!hPrgn+B&S9p$qHiW{7zXRTs<>SHo!@EtuB7~7cYYS2M6#La9JuFzMgu~cqv z(Hc2J^jyHU%9T^u*GXe!I&SS6j9#{$(N#d!Inmd% zf#z+Rz^%9o$P-TVezatRS@a*LrRFz)9C4zT&($b#K2Gh$*9mYFtK?s-uR;tA(jY91hBAJ?Laj9TNS}EARY0nG;GuBGp z)N4$d9YaJt1gs&h(063yWp19J9eRqM>vzlvm5Cn69%Vo@3jC;EwGC2QZxcljSa1~~ zX?x@c^-%T7Vw~m5hTRCktt9-hv!1)f+BKOi-N}utgaIa6XF2!>0c5k`)_b!&2avU{IdoY>BN$8 z{)>EjSG}CPdsDV_7NQRFBMeO5Bq^+~5cKZ^QVpz`Q|Cw_dLw_RfyFzq2|`Rj{!{}? za$>g#u?YEV42(AE+%EHlxF7ldF|hW|aw~<{hy2$KEZvFSCB#R_|JuO1Ik5+XxQKj_ zq5Iy;i9ISrAo6c8umMi&IU(YZpJHG`o!CJkdLnq{0-osC1KMc739Cy1e`xv97ut6tdoMvWFZt0lr^Wvg z2K;l&N4T?*6Y5dm9~s5tX}Wd%W!Z&&oP>V{^t%Bkd=U-UZXJYGUev8*7QO|kB%6M+bm9 z5G+@RP7lNY`Ozi@AgjrH*bXJY;55~UpWZ{(J4mbTmtfq+C9Whs7oraOs?T;f0+~_I zQ08>Xq@xH2o%=ZM0^6A$Meb5B9PGVd!_u(9tkxhOAgUTSi)i zTM67LL@L1khQL-7zCsFbH*r`NgHTfn2X6cVamf}? zUdjohNdwCuOc*o+h~~hP4H;=+{K+in8D(j+4o_#0OdsH*4H;ACrx~D0k)_F0o&lyo zXtpkhL58u>q||c4o5#kTfbJz&dGi~#qfMq+F6rC!J%B27*pIA}A6nM|QzvOn)>_uA zW<8%n==-Y(#@}8K8XvYir*AgA(F#GhR0GHvFFuyK$3e>%@vJNs_{}6kMmb|>N~v-s zc_??@@+bzvP{cyyqD-+-PRX=NgG_tzxnP+kz}Ffw)RtQOTI$6&i+yNgsb?4PXABvs zCq1wbGM`%?_1CmF0liDG?8W#g2X0L{azTBxI&*Jah3a-h(}I4J=gCgC-j@>iR^&}M0&YYmB>T(R0Es$90Sc0CnN$CSun}?s{(kKc>r=x^Q%J zu>&&)EmYz=;J+I((tNo#MfVWdk=UBS91)0ys)sA|RbnHlXGU)=8pSb40FrE=a&d_6 zBfRVIFzW+opcAHk8=WNvqS=R%?jk_5b=Z$ao}Uc03}f_I@#2k|b_ejgNJcii9!AH5 zG&fR-u%@u6UX7GethqjW$Kd&o0V;g=D;aYNBk7 z*WZL^0gXvdjc&q%Uha)6^j+j?DtEA`haCC^y3AFr**KaCj1aAmeUlEUU_@Fl3D=nL z{u=gk5a4WGM3s&niTy{78UFYbQvuy(z+{bCW=Uu~WbOvO(~yz3meS40!>FXj?Tg3p zjor(Td5z>gAoC-~P%Z0Af-xMxi_d|4t!u&YIaa|M8^6cEBwgY!AXYRZm#vrxbnAdx z>_h_~5l(c(9H2WwvHlE2MIr@AM<+UJCD2ED0hO8u0~u+c8T2ch8prZhYg!>?%9h6O zA`s=U#@I#R$ai=@*E66XdR7l3P#yVhcDNn+J_9u`lB!Ro*Xqc3Abg@y;uw&R3H^#t z{mAzMa;k7Sk9?`HI`VC7LHEM3a6On2iA&1#M`2lk`c-S=d!ZjP9e{V!W%d~|lv2Oy zA{&gOWBih08Y&I@e!TRvGnASS<6Qk5(cI0?&8TNPuF$h4Kik!3KVJm$3ZdVd{rm(u z-{5lkNrhegq#wZ6#O3r;%8Ds@R}U) zTgImS2~z}gg*r@*+~(!#$Teqtx zhMN5hUi3l}=AA=B{~D<-?s`x>Y*|}r_50Um^`OqMx*R&@;R>zqZgmr^K`;&LAK=X- z(#T|W(QU3)Cu0GV(Yey#xrgL46{&on zn|9+qp<=*P9H2mlm8$LWV^P+k~kwASS-sC>%xnj>$2mhK!z;_6~YcOf4~d1~%4> zNh&5;j7OOwT%p;>#f=f=-XvxtXO*7oHx3YQwI!Y*?gO^dz~%l|740RSL-s)fk`KZt zXn;71?9UBo(hRDwvmF%<72hNK4;|vYI~{PvjJ}A&0l9Sz9FE%yT%n~@uv@2sGA$;5 zEk-yRN)rh{+Uuw?w)=oQh)lZN4R9YoqX{NACCqa&oj%5t1)#@G2O@5P%zQ&mniwfX zZtdHSMeYH--4Kyy&`M-Joe)VaF9JSfh{$8(NS~3YXh}Xc7SfxOfKQW%^d@p|1khFI zQ~3#*%Rp@C3yj`{btz`ULqT{PcNmNe1JYDS{gja{F%QJt`(iy7=?J)|o5)KyLuA|2 z=mb*BSiqCqL{i9%hg-rADRLX&<+_L#8My-J<9B01kmv(I9@SAl)eujthRCxoPG*q` z!0)<=(3hVvFO6%#fjbNMf+3=uks=j;VcL+f^+nUw#U)#VE0Q8_4aRIDMdAUsGelI2 z({oQTN9j9WDMAluj5I`4MN;JB-gmIbRKRl$5#^B-`Lf~WV zjQ(E06(l12nyP4iZ;1S0#itbc4DeYuk@#eY{Q6`^77-Y}zPL44fTXF-k6LQEO8AE9im*^QV`YVW3W zV-l&|PRv2kWmJ3)6!}Rh1*M65kiFf2=wTx+)k8du?EMBL+b_CDI287I8*{5T3g~kK zmP(@+v;{n{J7#(DGoZ@`EM1EHYZ2fPhw5wc-Rz>yXe_e0LYI?SN@U{_h>U$bM$_m4 zWsw57qb{OFUc>}ZdxF4tlIUO{BMnqO_fvcFi|bHs3UX%>;`CU-x4e%zSI{p)HyW_2 znI?wXvkqWbu7Nq?Nx=II5!o=&)HP}^IDuJM(C=nGb%o{Ad$pGjZpEGJ7r@#W-94#6 zJ_t~I?a7;1q#oc%H<9ubRC4zU%%s$&qCMbrT|{fN2K&w0n|pWEv`jRv=+U77{PuI` zePSG>)cn!&M#NoAp;F|(nt?S3mAJV*mZ$jC8g|orKd|VSaN>E+%*h z^SgM)7jt{^yW*zh=)8J!&HGUpLlk#@r`2FgA&OUTt{I!Azo|yO0je=-HNUy$rrTK_ z=VVl`7S?i#^yr?khDQ&fyV80tekPMCrS4SNqo~^$4nz?X%pN6&Fw7o3xmfo=y^Ckx zLY-G0HN$?24mos>`l3fEUU}4Dg6@IxsH{Zi)w_67Fn39LcqDJAlB>!Q@_KDrq3P&~ zpbt%CHo%AzFTv(FaE0zdJpG=)ht`;YdPBuW$Udn{9VMt;#4q^JphcEaeK6(j z*}%s>nxtvZLJK|7DMjgpR?SItA5}n4fNC)84Kg7)2(Ej3btQXV#nr|Syn22#lOQny znd5MU-h3;{_QQwPm;kR_aSO6%>5$g;on^=!CrFdH10VP5kTR}48Rs>jIMr#K6n&1w z29t7W7+y{T$9hGf|9e{ly3zMVy~m-!=tC2|v*uw>S0?BMHloku@=`6}z(F`Q*V1<} z;uY{34UZ+3zVVph0uB?i!qWFVR@i`d2SCAUOW#~fj{(OC`OVTd5Q}uc$LOxwB}?Cn zcYrxbh-S^C`o)l3v@ovFH>ll?;6v*-VX!n{(0V+ljtsQ1Y)G*Xa?42e6B6sc13d_K zKAz5E1MYChj7$(3+F~zc{nC(9ZfB)qkfA^-8cDoI7)fc3$qxS;#h1uAL)ys_t!*Ub zCJBn5_zT(Ic?@ws@QDNddqXrN`34(nO3@gI#p$A2%AK7c_18RXF34#}1xl&jkjOHm z`hA=MDT{ajgq8V9v8fPQri-avBB_y&_iFv(7owEENJ3oYgFTi2KUwM#l-O&OIsWFAIDE;UA3x-%$a1jx3v}U$ieug$e&vMyUW4b;g47jz} z8pW_3{ktYERl47?`GDJs?7D^_KGG2S`C=l8$)42mA!_!?;yk8ZX>T_}gVtqtD899= z6^M^XgRv{3;>lgT(A&H-$3ko&Cc!ox!K>+FAg%C0Vd$qYSgeJ>eWa@+jqI-Y(AwUO zUg=#asH}JrANzEid+mQPsJ%x9{h<&Gvs^H599a5U1sl9Wj4dJi5@nE`? zuQeXu|Kn0ss{p<}5u%g5R~xErQZxl(JzPZ9^H3@D&7$|TjlqVzUCI|gw#<-M0Ut;$ zGXIWlhNzbmT?etvhUgnukhK(FY~8(=R5mt59a8iqh`p+dYAHWs9`#;R7lV_V!COjw z4T&FgDYczT*@)FW&=gE{q7)jnwe~j?5sIL@V1F=nps0zXPVGw;e3w?@3{iNs%5PQu{ zv{orZ550!|#G~41N zhJ-8$Bw<-v0-*&0p@tfI@1X|>CDhOZgpxv&8Xz=5f)oJ@7C;45L{uKd&Wj4z5qS^= z5gVddzW+HhcXpG=^L@|9yT9MPd;aH~IdjgOnYnZC-h1~fIGs!0)SN)JC$-W>?9{&%{bpC&ocx zhNUEjZ1e8(Ais2f3vN_9tK~ywqormfb)OB5Z|)zVbLn8Mr=js2X@!s@e49dKdw$j~ z91L+5qR%WNq3moD%`cJPU*3e997qKZf3T%Lp=P3u17c2~6W++)VyjKnS{3qm(xKXv zxwnww$iD}!#u+u55a!%$t_RfmS*k`~n)xH$q5uFy6!vZTcgyoO=haE00HK`GI6ywX50#fS*Vfw!sUrEGnJM=X3VKotp!6 zWZ)RwJqVy1gP_4>5&(KLa1N=B;Z!<>0U|Jh%b>THo<`%r>_JY58K{0CHg7{}&m`=O z7!s78FV=v)!4fHMj@Sdv6Bbuql^9At#FbtwC>(LZlF5E$xQNTMql*@aj+2r2m8La6 z^+b=}M88>pvQu#@KmCwgD&BUuf*RT`Fujv-U_kM2U^IFm7JuzX^A9jXc8WEy#F=bB zn!CXaIHVZSuT;Tu*D@TsPh7<;$a6*-sW(|lhC3XMfpuE8M8601LP#o~#7rDD`LTLx zxu=%b)#+UpT$?d$7A)CA#e^*RyXRSys@4Ptm|R%YSD~vr&}E6^ke8x|-9%zhie4;1 zY!j=*|4_=VO3~ZgP^yC})%rh|vZ+$R=(;GCG>pzFaiFtG5zrU>wTE_jN;#}MW@MBK zM*2zdu@a@|1W1>%$XHmwM4I+pvdKO1C_Qh`*Fw{!l(_15Pwi*E&^d@qaF5Q>BI>ttd4H2Wm2Z ztVF33Me8DH47-RCi&F13lBI6^=TbKL;`h|7_9)d!EbWSib@M5A-NiQ;9I5?Qf$k&u zAHtM z6+~vwlKgUGKxa$-XT3o$7Sl+74cS>P=n=Qn7jQVYuaW#uz_1rceme{!`xdd1^k-HA zy zC_fXl%Z7d8nLc3DrI3?HjCO#oPc+7wk$4r;O-w@;CBj=HM$V;)2Wx^(V*bdVaq1b< zd+z~Q@+5;C7K#Zmq2b%u$E1>qr$*Wm=+v#hCloi=G{Hsmr7dyq&J#Bv8~N5mkO!H> zr8%$qloth zCVRs(?=2=j!hGz#Lu9JC45T5LZbv49B>e@(uQyoIxtN^1VUoTz5_DNf=V1QzmY4K& zbR2IbN!J<(I#$weBQ4&Vl0I4sbX`dwCpuB-py9ktCEcw)=$4YE>q_3XOpk2e2+QkV z=ni@{g1a)g z7{fTY50f>jgB-}@Tny;owA*B%Zv@D6CL6+~;7LpdZv;7w$tTdr!SmiB-HRBf!8uHx zS_^UslV8mTxq`{da634k$%e>z@CGK|ZUgduA|1!kV!?&fw?=kL1G#(XY{b|ByOG_{ zMT7Sf9{B{uV(Rs+!E1O}{+-$lV=TBpoF-q&W9*hWnhhg~m2t4F#ltN*u|^WE zMkP=?olZS92&bQ!g07^D?uz*-zH#DD$Z&jf5*vwQ#({1_v`E~Ip%veOXj|e-s6C#S zE{?>msi6B1AHCT{^Qr47?GDlo&1JYY(GFw7aOGk*#!>$XdMwvdcLB_L&WFRGryla< z@H~yhpu;m9&24(d!5fd~uXVUo=Am1JPa2+=;6a}7cpKmgm)3^k%i)=dX!1{i zWymrvo0;?mXQ#QD_cZS~O}Yf;G;4xRHt2 zVW&xNQF5APs?a`?_pkH*ZQj$%W}POzMagN>D_ossGv3pSQJp5eMagOIjHNxjMagN> zOFW$>y+z4s(yK9@CcQ<;Y0?WPohH3S$!XGS9GxaTJL@#*<%mv`-lF6*zv4Z;MagN> zi~O7>y+z4s((Cb@CcQ<;Y0^vQoF=_R$!Wg8dwPqK)1()qIn6n|r`L`-O?r!x)1;Sq zIZb*wmeZuS^*GHD=mAcXUhm*ElbX<;CT6EePgX>t<$9EyPYOILFqKiLI+G(N?ICLMgllSTT&&f{KNjLW~U+yVV^j+rAZL&_2ej7kP#&QzaYG-%vDInP-Boat_jH4j)1+G_oF?7&<230u8pJY~_H?H~x=AbibVbwDm2T2h zm~PTcjMl*3$?b-|i;2vsdI{Y$;52EUuK4s5P`a6&Mts_*o5XRUe;MO2p&E37pA+2% z3Ur-2-K2}|=n&jEl3vNh>1tcLNqeU`cs%WgW1mjF5qr8Ofy7NBKAkW+`6M&l`~Wl> zoH?{dLZLGe&BSMllb~2@0iI(tE49Me3n-^aXIiLe3enOmJ${1m&klURwA^22n*QA= zV>NcAFTpB4m?-%p3Rl43W^7X~wU>mgV1nTq1J2Z&Hry|w3Y5|X@W(}l(WNB25UaEP zCE1UIJ)$JLixVN1WDf>Avn2ax7Z%wi*$x~%R+VJ$awC$G?1NzMD#`AF&<>Pjr-FT? zB>Q%VVZ5x^9)Fvdp|}sABzrH8FkhB5@(kG56&nTlBMPUEg2CSu8!JSMT?Tmz{Yt{} znmsKg0{2qHDL!Uc{)ob9bbk72AH}b$`P1ojbWt{2RyOW@!8U{PO~lOmv2#S(_`OrE zQkd3eO#tVCiMVS_S&7tEjzID{woEdEo|3tUzsDN0>3uZkZ07*4VPoq=%&D~$YpZiN zK^m^cFz%vX&1aE~J1DV9)quk@e?(z)4ptr5GRYLx@CART8M8-2{}Wp?$a-S)*RUL` zuAondXSnEog;`X*MqAvYpo~w@#_8|j@57c!R>*i;{!TOI($8hKO+XJ~W7|X+F8T#+ z78Thca9!@QwB*wUUxVa5Y?)M)M$TONan1G_&`oUG&k_D&K|kH?S9<6gN^d-L7GvY#O$6-D?b%1a%Hox(ShU*tQu?!bIbel!RKU#rV;@@E5gQE+7L}6YY?rOl6*#SE; z-jly!oSx0aJ05ofKZ~u1afgFgvJ+=f@wh}>2vNo{Yx74Geg?@6Y?)+)j6cTTFisDn z&UV=T0uEmkXneZin(ZK#;i5-Tv#9u_X6PnYz{1Dxd2=Yy;xv!~427g3h1{CID<4!;XO5tTEX#E8-T`^Y%9acq#>moa$^|)1px&RfKOTP};o(KCK zY}_zR=+5n;Uyib<+(jInJzq<6jkVQZAo&YhCfOj1tou65cT&1>TDR(AoSI?Nx(n&4 zlrJ-sqCdKBP#T1dqa%W&qo-1)(@l;Cg)IZjOW4?BB4+*z9Vqyq_?qZP2ZBDtmp5jf zM@I}kEa{3k$ObpIj}h>aVO2yR63 z!)ZoPF&}noRWY5QpiV~szXpP6S#5h`;(v@6Zi3vDG*N3yaV|P^wG)A#3#dns>bNzSc%PP)o|a#j2kSto5w=V!YAYCQ z%%$53jCN#%Hae2CMJtR&VzF2V|HGQliNhkXL`=o+%0%OnMWzlT%&E^XHY!7tKB90F zB=2L(B-6HnF1ZgWm24qZmWqKa8Jzo?k_^?7u`Ef2BG>RvjA3j!B8&OkvyWhOBF`d}|uKVMnuD=l?VmikId=+-Mmebn0&rB?{H zlv2!6N-;|*(o(Xrlp-x{B}-|rwAgQHP%%q`idh;&mh1(`a+Rq;($xA~Blp4MvN5bS zQBjPLB@S98M#vH?FgkIu5?z*0kEnrpPdb$XnqI0TUCs(rG#t+J#uX) zWj)vA7qoXE#IWU3duw)XU!`CXomBp6M59g%SF?dr8TQeKX!wA>y~2q+#(C! z&M{Vr^(e*O70TM5$z3I=_7&o39HYYa(cEb-I5}^HaHj!3F7bMF=ghH2*fVs!1HCzW zg`h{3!#=Zo1oU(D8dX=|5d>%6peHOI*P@(uWk&p!DDi`;DgmL;}Y zCH^f-Ttw~o_`5ZABktDy4c7+H8FahWz;~pvF!_ZU^EHUx$Hs>mny2WPkU{rrjVq!1 zBlP|*uA5DFZOu`-lyv%F{=<4>9<~6xgLBS96?b*<<Ul5_ zEr^fhZBCEw3~5z?gJ8~xM27bx3bGlModHZoxy8*xDyidj7& ze0CvLZR)V?)vj!VWDmAXvO$h#)2(bBl*`A^%JdP1FGJiQKfq;s!PT6cp=ep$+(rU> z!NnZuv`;OCF62nBeS*BU7o5q-ov!TWD7$$gaTqLAAX3&jt zf4nDsiIQLNX#lFt3-k&8=a|!BuqL}e&DaO484U*;8GQHJ8EFES4)`Mqcf!i!mL(#n zC0ulqTL#?{SFc2YGtl|0c!3PM_pMzC-9Mn`UaOkUGM-I0!VOfqdrZrbn$VlMu1GVl zSeQFe=`B-wvXzolD~()DQ*(2EDhORAPaY`bGhX(BO>43} ziJJ4|tkFjG;y!tDZO}%@Y2zRri1T2eG;HO`LwYBnj>HRB%hf?Ap$^3hm9;l&SU2FqM`#M3 z=eI<|Ma`Q*_ZQy2AY0u(81_T-G&UZWR;Ka=-838ikyI`vztH=#$ADc)vHh1IzD4<8 zi`!T$=svgxN_n!jk+L4=L`TvPeWoCqMmk-t09+35G17C}szO6lA>@AaBvQcjA?~Jz zD;d;UzFoIaDc4rYqHrIqt`pP!1qSCnqLh3}N%p2p|6G|bZewVyQFDbq;(YODIsA28 z3I1APg1<-c{o^yD0M{`eQ|wSx+cGf|&vDsT9|h)#a;^9nrJpNNx-XS}`7WgoTBY+v zVI*G2r_=&{oeD=jDZyVW9*6!F#Ye^b5rr>NZ8wUkTfX9S4ZdbjE9b!Kof4)0q|)|p zr7_D1t8{&XYN9Y-gqO$fwI%p#MIY$LDZam5CvQM)^%T2!yKdszrjoBQ zu-d9b=|`z_$Geoi&nlfSE~9jcQnNxLUyoqCj4Z)lD}ILlB*jM)^G6g$ZA5J|6+1++ zt(L*Wh<2SuzP<*lc_m5@pwcVuQksT0m(CX*F#fhEwaTgz@-+_q_*uoTs`*ZneqCK7 z-oQRQ!B&V$_G9CtClQ8=e$$+_8ap2ndrlb$)&|~%~_1ITr`u9*Bk16Y#SXu0&-~@h6+&%8@c&R~v5x{f>cFGRZD#$^4bS#~K-LqPEi4 zWQj7m;8+xzfsJP`BKROS8MS3pXo(+*Re`p;z-H(iv`!P{f>S>B{r-2h`{WXJ4va)@$ z9d+XV?-I40g@hg`*FI;GU8-#}e~-n*8hYS4d*C4a>Y<8Lu=EjyWwzjYJ~l2+zZP<` zh=azPN4=z6HnD95gL3~+rCZCwSkrS;=GF)1*~mqXWPFa}Ma%0_2YKR;D4YS4Yp}6> zBK{$_FV02rO||e^_7cSpqQqNPaU%YqIQ>PM)1;@tvj?Z(Mlxl@AM9T!*ZltC!4jur zu%}h&y9Y}zv2dF7zWu<3rt)`;T|R(6z>+^>qcP_iS%qny*E7Xf6yhF#1JSx--0-5XE{+NP?b ziI=M*j=wrNAE)FtRHbQ3q)*A}=nXNr#e;gzI_##a0yIkLBMO_raAt|>h*Pq)T^fAH6FVs92l00mgR2<#R$Rgc@ zPPo7Drc{d4x(`9}c%W_u-H$#_>EU?5A5r)gbS_}y9zX=ybxT9k}{G~TG8h0Ql zvmH0B>i0CV=k(jk%#gBZ$R8XeHe8=UG3zVrI#mauYFj2NLj>)ilv2b_CYeT^nGUe& zhoH4${#5+XqKcl;MNdGU8}x(3rxd$D)JNxw%4mgtNB4BO?YmaWmBA|EvEfHDQHolA zb|GA#+aKKaN0b}}*5YSt{0W#cxm(vX7$;Hx;htwl4o&R1d$!CR^0-It$I8N5Wg$-l z&4NN0|AJyG7?CH=qc_{jh$>uQc%Jw(3piZi)I4#fK5#i9hulc=jPBN+_M;*67=AKX{9#kfZrE{20r_6tfPN&2;%~t883T*|cluo*}eatVi(fqEx zQo=PlplR21qtRVQ?Aml?;(yaMx_`dhuhKOPG5(0c)Sbm!jiS-6l^6q6m4y|`!v992 z(LMSHmEDJwT~Tw}N8dwY4(n4TUL6%OBS; z6rO;M<069NqE{8prPmW0OTpTPt!P{U=RGp6DNva+1qXapfj_Q)L2@q8Kqi@_xbpd% z;u<{~kJOcjt1Jd#?)Lv%TvNAr@w0-`LU-g3j1tpkiQvDh_<@lekHmd!e@Xph`GtO6 zb|3QJK(X)Iujj^6H?0HRWNh3`Pk_O*Tfp!mo{>c+C&u7Pld{^FxcK0ZXnO8`lBoRh-5qphpAsxT1jZAS)tMo#)^-wh|S62+5T|1DRx!D%!!{V~wc`(HtMD zg8m+z&yV(9RD2KnO`fk6i_sBoDt>7p1)}h&{lz=N35ZH|X&c<6j_{YVpk^jqSikpW zB|RSY*Wc13zh_+^{*RvNE^2ueV#uKWH$5ARqezI5c9W%pXv^jBEEg|^W5!*(+|+6) z+(T&vCa4kkgB0JNpbg?18*Z@tNY;{Q%5PEl6DrH0Yqw!@1a&QYL1Au=t9Ag!ZxGq^ z3X}=TW=mNVj)p%153upHO$1I1`Buf~(el!Na_&4;sG2IY4A=3a$I$IFv=+dVB%reC zN#MOo@f&S@It-q%tka1uO61T_ns`!}`1F(Juvvh?;zLuChCCZ3x2rp4fD<=%Po?Gw8YK2kp|W z(z^IQ=o~Iq+}J2CquFkMDYeRJ(6|X>Q{#4wLp1Ki*rV}K#^D-|V_a6_nT#Vf&S4y_@hZmUHQvJ5 ztMMMj6*PX5u}|aY8CTKxHO4hHKFhei#`N31+ioVwgrGecdo&K6N%CloD>1I3ac#!c zG)`h%Q{#?|<2CNfxW2;U=r?h`BMb6t?@X0Z)!Y_v7xR`Z5A^aCu^L|xQp(eD;cM0 z`6kArG~UU0w8oDy9;5NIjK^wxl5x7mZ!sRH@j1rhHU5(E1dXpVo~ZG!j3;Sqn@#OI zS>sT~85&13o}zIqWe)OZr(SsKq~+(WnLV#b+TzLs&G z#@iV8(fa!sr)YeL@p`R)it%7AKf^dx<4+lW9tU)T6&#y2%K5~)3Z);NUm zZH=QD|Dka;#)i7Lc(bU_*r9Pt#-_$y7>8(_!q}s68soAWXE2V|IE%4QXS7jRY6$Z+G=SkV(kkXmAC2op*Ox9 zuK77QO)_m}(5mIoZ;msxN*{EGDm3VEwID~(#HpEvP1ybi>vEgvXrD$u72>)SZrma@ z;dCSsM*{OsGw^J#QX^UPC!?Ux*TZxhTve^S3A%W7_UhzD=RYN`C24*%fzGB|E?IIdKOQW_~aarP5a z&x6G)9$3dd*i{AG_Gqe@gdku?HqQED>a#07B0x5vvnf2&LAt*n5Yxmti6^G58fpkWqtPCP6 zrn^=vlpIWEJnqeCm6#z!N0%Bq8u~-2XchNb;t!*kYr?Zn!7Ckh9SL{D9J~eKc@QVH zhG*AOT&^(6%)))s4ULuvCG2rz$zdyu$LX=>@$oqI_S6X_O-~v$J&}}ik7FHDjwdp3 zy5z7O=uWC3l}NSREK+TXhQyyylL?o=F8o>zFl={(aNt_$ORHhxPeGN5hzn}~f^DCm zm@A?h?Ab~&utjX7qzZh&J%Z=2M_6Ra#Mj z$(;ZyDX_2|Koz!TM64uGRe`_50b&%mj7yicSR2J^M0|w3t-6v_M6|ZX3WQJyO&Ev> zqcK2JC3$oaK$4QA1OYTxlEXAETG;xK>9SKMPQ?@Xwx|wxynykjEW>8EtwSOSmwP1} z%8|A!qZQs<4Y<6m(+Gv>ua|5!Z9gDH*3WMTT*uaGsKRzMyRDwBZCQn1hap>{?IsdO z`bPM-RfcmlS|x#V zHAVr>)mQ~MSLq6HuEwi+I9C%C;9N~qfO9n|FjpB$!nw*(fOD10K;+4)~wRMY>SmtWD?NXY;oU1h3a|sG_uBO@Uk5`y;HOm%+(L(mh zajxdt9__0z=W2m14O1-1jqp2FDOcU>LtIv_de{TT)et+4t1y|Xp$r^yT#Zm_oU4%v zaIVr6;9QO3GPVfL)kFqrTuoAdb2V83&Q*p2oU5s9O^vH*3UIEbE5Ny$VGkHrvy_B$ zwMYTZ)nW!JS4)(HbG1xKI9K;63Fm6LJz!k*wjayD}Ca3U;oHP(Kk zp2D1~@%EiKLa>~3HOKzzM1?t5^Xy-aQkZkK(EiK}g*jKb_GjlwY=lQ(#0guzJqX8E zIj+_zr+HizahQzbtEuX$CQL~^`-)xtG5`aT)nLT=jvSrI9KnfGMuY3fw|gX z?>Alk;k?Y%X8Tyop!exqJ!)?sqA=&`ar=7>73N&MV9&r&p7l9bFWEoG1jm?j^{PDq z7h4%~u3oppG-KRB+K6&>&VDG^%GCwsH0SEy+-#L)uC6d}%W?IsQsZ1*Q-E`IT>;M3 zcU(s0>KBy+&ebgiI9IXhs zRmV9j=LySPHFkViQDM$iGskyR73N%Zc1*|di}g8I-5hZkmyCH_^>XaMl7cbks-NR! z9N!2V;bk!5gzY$+1kil{ly?$jw^dmz&g;O0Ou-50nU{(h?1>x zRhogyRhR;tD~|%4t1=33t|Hi)8dqf%;9QkcfO8cY6p*WECE;AvP=Iq)lYz=rEhXVx z)lm}8RlJgLuIdH_jH@3Vuh+s&fQU)v>K8|NbBSfH+(Da>8*GJs>0!M)lHS*Ty**xEiVe=W3V& zoU7EpT#Zl?&ee1UI9D?ms9eodfOD0p0OxA9D#N*&6PT-JLC5Oid3l|y7C~)VNi1{K zJLvwN3UjXd1-*t90qK|HT#X7khe5)abCn+Syik~PH8JQFoV~G}b2TOC)NqN7@Sl() zVJqVtUB=2)gfn0rSj9=hB3kCEDg&p?Rh&}eT-9J;L~yQZD!{p_#bs=fybf%@U`cKy zCo7TBun108Lk4*foUBF+;vzU%O;kmktfmTZvYIKt$x3q4z!LHVtA%oblhsYBak6?S zz$aKel^Q3jw*s83J_>NM`Z;M}33-AQ>3k5Yy5DrN$~)a2iDk0looCRbB$op#!P#Po z!knx&&OSJOW;rLToihuQ9%D{cN9W;Wg*jPWoQ~EK8{u{*B`eh#jsviq1V^ZFcwkND zW@{{ymBAoPCToUL<7CZLv2n6yDZt6fX<)wYQ(kbsHY+vG*Zm4`zP2hg&esD9aK5%H!1>w{n6FXJ zAJ^axIi0Vu&fl<%CM@$c*ExKn!aTUMirkDnD`TqJU_k0B_QOKSYk5RAwG3R$o&eUhbG87Lbigys>B7nVDoytnQx2RbC zzs$G|O0520ro#aB+Gq8TIboP?$RkntwT8G{Go#5^+<`*}VD*nV-EpZxV)_3v=P`XX zg>#~^{C}A;s8wS5|1wkNDt)|4mV7lFtFiQoji)8Fi=y&fU5nE8q|&&8pdy^mO}3&K z4|!-BGWgqh^l7F z3nO9?q72;xCEi&%nhz7i6uXLwRYdPiR$>*=yoOc;GNR5iEiC6g`ZFr}w>B$B3o(;O zEF;QBgn>Ew0!R129LV(do1OKkTo@%)1MhgEF=0Cl+UsJF*LD#)lNhwv5cq<=CZ(uHVw0|%+aPq zrH_cHUc(n*=ZN0+>Kt{z?2%7(R0l7VDBf8St%i#%?od>$BI?jiiB&|um$f30IqHO? zXkbLIFT!i?5QUYa)G8L15p6;Jff40xw6Kh*V^gJ%h{!F&w**a&UiV-H9Z|g$dFfRA zN-onyRQbAoHI6n`SK>$%2@tD@ZlKpt8RR4jZ9cN;I4c4fQMu9knljYF zGNK2tCJc<|0>))vuN%===_4Yl*YGt&V77AY%3)Hh8oz*Canpk)?%uFEz?saQG&m-D&Cn3kxa)|c0cM^Ze9;ipV zkEDTK@dRjJ4B4sHOe}`s739WHvLd-{#a3_*Tij4G6tJW6Mr;&XwOZ$am^w);-h}oU zDv?HZVjsZVR;}ktgO&6uBscuh;W)ll>wln*k~(291e+?`W(uT3e#YebBAB8YcD1!M zuH9xxM;=UtgkFN(l_cbQ=s2!;xqvu50u4ZJic#2&Clz+9#;RaQr(TMLWUemwPvIGk z0@NSd921)1qPBJ{9fkCrq7*p1!y&3cQ>?2tf~r}qFGQc%sEu9Zvd^{}T9Hk2D;4c8 zk%Os>QR^uTxya$vS86?j!5le;X8l@qY#=8P$^WkzIde=6xETW*b+LIfC`KB%M(k;H z_{fEWI;w8p5#sKoGLu@MGW}nAqtS zw!WssOL)cJ4s0tA*dyYn$O}j^e(|s_gad zD)-dZ`;cnU0XBML^R6%MbsA1|xUI)SJcU%Y1bDq3Vw zZP@G3n0xa2QMe@zqP7>vrALZ;Jys~M--q}kQh74K>m}ZzZQagl`;wzE$Z(~ixX;&% zy?*uHynb;#ydDP|Gq8D|DeiR}>(p)~#Op}q`2epgRx9eYx%{qe?ZnAAiu)eGQ2{gG zJRDN*p@;lf0bcuHqXstb$>LsznX0YZK-`g3UJLNLZM~viZ^BacE$j0Hu>v+WV)I@o?)4=cYuM`p5Fa9y&jY+(h(W<#s?k`Z_FcVp8?Htu?#u1L zUT?=D?H<~C4px++HEeXn=Dl3p>-UB!uSY>Vo>aaK@Omi@tbty?hY9H}Z5?d5z9p}J z$4UnMx^LV)d3`JsUjGbt{w9}h7WaDnNab}Ds;P+0dn>@}Y)rm^UTc}d zL~&mn&gjtAFW#HiIkdh=gN@19ye3>KvU-Xbr@USQ@k&xD9pE*bF4ETPas0oF*P(c2 z1B&}@FJrG~)x4*+u8d=qh$I`>yk(1fJ$aJynywYJAr)_c*G)PU_4-=kUA-=CxLzTz zFKl41YvJO`J@kv3e-H65q!Jh4^~Ewpy}sGvu3m>3t}GPy zT?l2bzqmKAC*;EG#juf&%^P3b>jggL^*)FXkV;~J*AJ90>b0Z&UA^`gu6ii$JB~#F z`t@eak@wKnuejlLGuUX4&D*TF*I!juUJrwK6sfch@VXq18-a7kok@4~x{TqvOkQWg z2E6W$leK&B`e&p~+<>Xy$fXX&yDqOnD91>x;`k=UP ztsIR<@6GGnLGXGgY@}oJrWW@)Dph%%4e=6E86DttBYRP=-EjFXUY9joP89bom7{SA zvUCqUqyX1;gaXZ07AV^Voyf;0Vn%iB5_EbTe*wn?$38(Po$;?u1pSzxQ@QwMn3Ek( ziTyZ1iXYJm^fQ7^JK~K+pq~@8n2&!QAv#V7S|Z0s-Us?sK?~3LaGDZM3tG;_kH;#+ z@s6NHQhZZ{>o_ZD=@B1<3qX$Zf)42Mui<)&<5NM0$@t$9g5yg;2Os)-a>H>&(3Bp3 z1(y*W*91+J@t@P+y(wt=iT`&6(7y;8)bVv!gZ^F6P>G*E3iRKCI$->4x&+{`QCj2U zazVRo)PhFcI!LY|>T&aR5n?JDZ5}r7eBHaGtd|h0z~8K8)X+x44Du;O%r314%#)Bm zLpphs;{>`4;}|NgS}TcnAbQ^~KG+W8G||5^E``9HxDL^eelh)Tv17c5aVg`apc9FW zjfYAHe(DaLslq^Fc%Dgsym>L5?{c7%DcUwu)%1s){s~P6DebV%d=YKw%!Pch)*;hI z{l3#+Cr>$?+jrya|YaI89&uCe76tY)}${W0ik>FS>CZnIQujffl4JBhS z9REY@(SWYXxhf$qE;5_=6-K?INhT6rCGi5>aI_%WNL;cWbW2J9o7RJEi57`fX(Y6h zbOX$Dj?P5e5`&4~Mbd3x*wK?{dtw5v7CQP7?MVE-7xw)ny?h<$!9)io?#Kr{MAC8P zK#w5WnHU)adZeVE?+JP=(XPZ?EUO&pl76)h=t)GIi8rXbOqTTMp`fP|?N00&1$u_0 zJ5B{Xhv?wMC#eU_m2|aa&I@V zN;*0i^je}zC)x*tUMK0DjX`fBIxO+KC7?G;dKK{>Alj4oBU0zsF6mj+p1X)HllaLv z(7Po)JPh=HqQes}5dUFGPagpKaiSvM3+na zH4gN1lDMyDwmhG1lC z)P!cBAc-7}4&x-$5iF6}D2QgNFo`^k7Gpwml$EGTqZcqWIm%0v-0049ph^%<#0@qa7W;C8pxURwuqw%|#P#lR0n?~cU zF1LZ(Zc$%r{zFfU#KzK4^2LbDAR|2vnMg!!h#G4#*)?K^kbiwEja1kAdqUiwRMwFF zxICn>`mh#s@;V;enZ*iU=?!rjy%>^=2^t9N{e_1iVbv$~L8FPi;67EXaJdwSr(LuP zzYg&`{=%zZu=>3Au_*i{xYvsnc3=vvo-+c8jMZ3J-IBTE1pL06P3WNMG|VT zP#N>DxC&4`zbZ^{;kFQW_7^_Y4buC6#UViq19x1p!vC5LabYW@i3{gIywqQ~KBaYk zeoGYI3hqNi3zuKxf%w4n4yy1`UC?k`?2q=Qzxl>%ZjoT$1-MbOM!gl75Z%kx;4s zMt(?9FYz_lKWfoIzbHl6a7+%xCQBV5QQS2*3=XT;9==tDC|--nT_bLF6vU%#Qy@-; zsJj+(Bgbwg@r0}ERqSIRo=7Uk$#(2XEV`W2wqk6&0xT9mvPK(V&!ozns%c7PFT_u2 z74|Te7B9~1bC_v31+PPVmQ<*Y(9>KItzDc;TPG@&Zz2Arm7=cKrOfhei42T_!X=s4bf~6I#SJMf<)qJ>`suWcTugkALK^T z1VmXg`H^&#B7HnR$EviB{l-$24* zIR{&*AAW5fH>=vw-m*%=H){v{aV6XWt5)*;NKO{zsq*!`ARFJ_gNYm&6D=Rz4czh( zV9^<>p`>rL>YqNwaJ5^r9bEc9bIEO4XE=1b)Z7W~EaLJIZW;CJbD{OOy^k;Q? z!1BOwl*3tKY~$bHxi7j9ouF3Jn=LWXJO#Q|CXt4l-XdOW-Ukb5q9L7HZA4=TT43{j z46Y%$okVwV23p+EizJGBA7Rw$(GMPpNf6D}VoH<|`!4(is$50g zC^86=;UxW$q%oD&LAp@P0cR05elZ%3ud=Ybqlsv@a_ctSDsnZtSq0U4Wl&8NHt%2Lx%w@? z-*D?DCHY%^`8 zh~FWVV5nGL)8Bwo8wqtyWUAA9fWV6b)&zrQ|A4!WDLgO~5k!HOGHmAhbP zKRM_NaIoCWq7G(Yin>b+mevlU1-rnIuk}E7a9P`XYQbUiRF!REr!zKhOn`%5;y@hO zf)7`|tAifxAV$tNmyl;y54am_Be%FNGp>!L!Aw}~< zS+Hwq5zW*r4^&zvlAzGFsM5FvQ00}GZ{4U+H8Mv*ht8tB^{Adk*cq|3GV^WikM$!N z7fT^tS5&1#Gn|$AcCO0Bt$lD*JPI-20A_SpMgH$E9i@)ouabn#c9@h0$;nTXRhiF7 z!bjQ;e_$^2oxXs^puvZLz z6n%><;F?Mw&}WD?-6u+e{*Y*o`!q6A@nfRp&2AOHAP=gz=?<=nmx-?C-UUA@epAke zm594MCWDGMnrCB?9Yb|hY$-Ovhi&9XH*gKf?Ij)s=N*e1a4#HHB_SD?@y0$g5|)O1 z4RsQWe}lM2W&4oD*tVS^9l2_=lG-t)xUnhe8>1jiFPx-Wu_`1r{L(#W$%@(Z-bA+C z29l0`=^yBX71u3arKH0l8RM5;Y60oypE3T(Rj~k)MSkh5@sMs`(pyQlL9){?EsqsI z#mDk0s5~8ofs(A2M9In~?#}Hq%RE*e{F(fO#xMm3s#AtYN80j2Bcl$(JuzP6HRKMtuNCkVm7G?THFN(QfFV>>@e$iWE1K2yXD9i4TDI3Ot0nk)`v@(2%r9#q#5C~d`(+qR%9r*+tOkFJmhoC%`q@W_hrvJW zm-%fD7vfd$>5`m`;fP;0Nr*4N|5nS6`(<;5xC6cu=Xa`{-M5SNyVfh4=*gD_ZuQU-pp@zk+Y;YQ=urFS{&61o)M->@UCUdm$3QZ?0vI9G$=4 zh3F3cKrIUPaJy`~D&g1wQcQzUHN>_j!u2X}*y z*rd4r`dJWvWcwim)~kbEpF}+TX__+;BXBIM#72 zrU$~NYH|H9;~);Q55!SkECG8hiP$=68woTYyGz?oVlL$g`C-TpTgBz1T)#c$Gh^hyg-`A2cx= z3GLv&yN-R{3gt%v{|Ky<$)mi~7-nFpN=d)4x|0|cT&B&K#UIzL3|{lOtlgXRBg7U}$JyUBYO zS#|t^rCn@dKH-m`>Z0Fs9dB0!v)Yfuyg|%cI5fNH;+`wC2QKi?YNbnb6~J&nUvf(v zq-rCA2WvT!6-RT5BExEun>} z#-yBXYaLd3E>65x+RmB*%H3S0-^Sw;t}*3&Ub6bJCIHzDw^;LmR+@N zw!a!E@oI}5p)Z0fc0qnX>#&Cj7gJzo zgstf&%tfSg3i1!MPC)0U8KCx5TXkG?rzt^v2c@4ZMGUeGh-cX@m}+c<^umv7*iK>+O)+(dmGa45Bus0umxBz4$Mr*LYxFYHf-VW>dViNxHC@w^UB zO)+9VMUV5;X;_Zt2U;rDd6~MP;ie^Eo!5B0xM@_>d5bCui76!hIk6U&Hj%Yt@~FP*s+V1?KBiWqj!U#e-xq&FAsELIu29PB zZ6{wUV*LYtoF!8OfVyy<>f-U?s_V6Zyql#H(1q*N5&Lndp#zl|1Nl^~!|wC3sZLih zDi-%cz#Xw1@_f?iLD9uh&#be1>IjvCeUKc`Qa(7;=`GAiHOx*y^rl}-{kBeu7=UJ{ z#uZ;d^phnHrI9C7&1tMNTD({r^BfWticL1Wl}48jZRDa7z8df-x>VBDen{dAY50-+ zX>M%yQOxb7o}+pk?k916Sn34PLGH(i|Ef$h{rPRFH~JwmPYl^9)mh9%UD;IMV2W3A z2Z?-ewpv`-nlW)yAXPj9_S2R~CL`8{L0xLn`voe_w;(=esmRiC!(qPE{4ngrw-EiV z#pF$(&I)e=bV?(BAw{d){dY7Q|Ik}QAO*Cs={yMJjF#Ck}!_@$}2knZ>5_`|7u5|U^9(h>QP z9_R@vTYejovs&7X9!31(uS)tn!p#61xL!YJJY}DHK3xGe0REvUGj~G zdLlOOSdLm=@*RMf;G`kCLDGk$lSpb^@|_4yCN}>iUn(pw`Nq%+6qkkbA>V50z*Sj+ zd~`Wx2kb-V5ah=#o!_($QS#9}@3xVs@m0bOx6&;dP&Cf}@>aUeSR~emFQOdmRKVt4NFnks08u-aq$w$1O^({zzk$MW ziSuyDJbU#5lpKswW3X{EP)fWDcA^=Gl4&CQI!$KawZ9h;weKiazX+t;z7iwv|I5RpCKAHh&=3|DOV(cdnvBUp@}42qa?AJq5A} zlM=i3FkE>8n|DP(An91NvQ%YcYCS8E*jbd3XvoF4DD{gK2n`DFBRh~0qW&QxcAXL2 z$J-mle0GdK1oG*<1roYSxi%ek=3w)#4G3hJvuGgK&=q7xO5u1LmHlQm0(lyxPGIAV zP_Orve-MEX^$&sAbRf9hG#bTxLlz>C$fg?x7tP3j`RH5~9OFb|*ht3a-Gm^D{EReZ zoSLZzLp*|19^g3TBcahl0^^Ll?|5~E`IirhSbH61xV|K>S2bg=yP#y?4EA4oJ+M8z zz6N)0kxRRZdtDvJAXI?kANFOjdG`l+J#|@8ubW^!z}YG3b+qBSA2s+kuI5ft2G{rk zz5Xxfqi)qyMf>2=0dnhcc1!+@R2$QFVDER8Q8-Ta{zn}M=qgJ6gpE55_x_`W|1Z72 zyy5DJV!oRzIFOI;Es*Fi<=Rx($;9S891uu-T>K0SWP;Tz;yzqLy}w-^0y%_I$FXrB zr0or+`G}~0==~1ek9>wJ62*M|`XG>yms_P`ZRiNWmALuCFu`4Gi^X>fK4pzRk_Ni1 zplLWht^(-Zf@ZS#<#07*fV?lbB_`I8Ve-CUx&$4PCTNm~uZm_0Nf$KE;@_VGda|J2 z8^0UJ-;f!C`b2z#<)E_!HEaAVH|RxzJTvNEqrFIotPGwI*Dx1A#Sjm`!F|}g$KXKd z32Lx<6h%m=5J$j2ZpjoI|CIC&SQjjIz-m0iEBenij8m{7et`TBt@9?C?aXFt3gJfU z$m-5eopdQi?#Lk?=b`6F@G0#y4@=}P5Q3{SN;?*IfrqpD5&0UJLwgd z!=;GdFgezBbM}mm@1YmfEiEp=H8X~^>NXLd!N^zGyjQ`+i4k#Ii=V);4_DmK8x#w# z<)yrnh=8n;mIsJ>ih5utX%XM;Bun)dUBOP#qMy0K_Ccs{h!_j@G)tt`?sS2x?nt^4 z#Y@-a5a*N1?^LjRyNQ`b-EkW+!nrH#gXEwkmCp9)pAMBNe|1LN(EH#%ATfo>Vor_` zOIIK3W_r*=X^ASXL+4km$1X~h1$~+;m9P;oLmQitcVn@Y#q%wdM2K5yl_LvLGBy}i z>#i7wg#|}50ODb!!qLRi^U8JCe%DIf1~m(kd44I~G*@@aBN2u{ITr0|@U z19f-27_C&Ef%v6jDlc`1%HC(u3E0Ych%XgWNg_8MYk)Xd<#&jUk=n`FHIN?Kh6#bC z(U8PiQh8%d?BVrLIridorP2c8PQ_H{wzRr0jjyW`Hv-~`T15uKDzE*CzRtN_1o0ZJ zB3qnQ-Wi0Mh*kDN{FGLaElxk7*8Sjpv?;5+4lzBT!Y!^^ja5GBwLz(T3-K>nMOMTr zm!dZ+mC!VtQDBeTZ9-3U?40(c)fExoO9qRr*6bqL@lT6R7<9 zbQ`5I2jWFVRpOojuKQ;kW=ydeL_q&)|MOTPYw3v;?EolbvfG#)^hzStQ(qaxN_RsquPCZ>7=h6{S zSq@7?X5t9UFbC$jh$yqJs`+g#(zqkqI zu7LXkN&FE@@!a=uIxK?FW*%%(ENiAwACdhE9E*lKq9()*wF);(9CeL|B^NLYi_Q@B zD=Ow20U}lpYN$HbB#38|3WvuQ_(p(;jTc)hm3)Y|7E_snxFfc$!AweRDh@(?#8NRT z7ht^^v9nhj{NF1QDq6Oj2)yqarX%qwwB$(WS-UDQy*Zx)lrym5q7uDY;E39&mG93T zXn}f(ucEK?{$W3kv`Kukm(hFFg8;1=;K!})0PPvrdcV8}pbGZf%1& z7_pbb#&-FzZ^Y*8gm`JCb~n?*Dt+D&A7fB++*oP zNTz9N99^8Lx2^p{D7OUMl_cSSV%H;-dJk?#%@nrS4avh=T7&-Wx87cJFC<4TZfI?C z$8h~M8qE}yi5pJC8#hkJG*AiGhr*MB1cdI$TA*7s0ByRx7**kI<3M}d(=f}1(<`KK z!^ZdhL3bj$3SX%W??&0F>Ar=U!g~=N?{=qw?$;PK);D}9rQnA>$%S61Uf4Dfm+NTB zBhugipJmEZP4%KFI$p3ix2RaXXlg7D)ht#onwl_8jSTfNuq>o+2;8$??f8B*Jo5*q ztygCaf>7d}$cTO4=w!5FS(3{aw#AIHuzYn^>vc*WS3Id+!`EO2wCzbB`6GG+lNhbc zL?U>6x+%{&RYcX6DRJMTVii%7a!RZsdV0APfqZq=iKP~nugpmHwj3^05A=XDkd}`bzX)99hZ8~#2ZrsIIm3D^cQvq|Q_zOO}fxR7( z&(QAFjbcdP9U{tuUD*;D&Ah}NA*fwMBe2_8A~~BRZOegtbQKJwzOX_!V6*B-s7)f( zK~w?Vux-FG_XK=5i9qP4*^&HlfYCG*Sl;g4heTpK1pBG%w^Wv1L}bKpnX%#s*vBoA z(d@ldurywfCGkJleQJrMb1ld@bJDa{e&<;AHmTjxj^Xz~MAz571zp||okj|3F}q zZNT4~0dCELg{`&$-(dk2ekTjyq`eQ-CYB-m_1L^)$eD>0>A*>YxSAoDW2S+D7UgCW zhoEO^!q$1FPG|iWZ6wP+&YQngH8w0BnHkkwZ-&%S7pPOf3TnI{4 z6}K_hE9X31strn{+_lt|1}GILKH8~EdAZbVlvt)qk>6aGk(7(T$_#FgR#&yyS$`jN z4{Ci1#z=}-0@b`R7;s9}&8lah_DNCIguDo-juDgYR|)tT^502^yHLWVV2DSGJk-kh zi9pXRk4=gP{))a^rnYz)p;tn>k-iFCQ*)?vBsK1|`Q+5l4;MpsyzrrODX)TAceJI4 zpVbd~vD>;IyQQ=%9gf|UK{$MoW|NLi4AtNs%TeIbsp!IOfaRnxj8|kBbrioi28CD2 z>gPbAm#Ow<+u&aCbwOpt1?;}E$PbItB!!$)FP_#{1I}T0Cl_1t% z3*Bv6UnY70S|E7whR#~m$*Rvm?UYvi9&?J36oMWeyyAL{R&}xJWvG2?sTxT?t%6oT z6b7ZL+hncaDH!_LWHV4tFp{=oumo>Ahbcv=x>>a`)RMI-wV09gVH#9-AIjIN!K|7F zwaLX)ZvqED>cWv$SuMq?tHIu)Riy)`F@l1h{RA~A)eu%a0=1X5s&wGHp-_D}1-(nD zhO+9HP`h4CmHtmQ`1I>IDk#;`tQvw27lqB=5sV~y$zt%khimBRC5%;@LamjhY9!Ss ztq)Vtu;dGdh=;X?Lt}!aB^RVgl?OoelXK(sWLSn(S3qs8rD~Lq#y|@Gp8nU5yWSox zF}gg9wMdiNnBJqK8&le8tIGKo?rGJ)KCls^!4vaMJm^=%mnix*72ifFY1Avq(wVPB#YG%q8s=Fv}~VW)<}qP;Lp)A9%8%} zXm*vH{7gIvcf@KaY_XK&kZs<59^{vn?Uloi)eb}Dn5AYUb)OB5Zy_ozUZXp6g{0fl`4JYGgXOn1tiT*wrb+L-g<77)QP^+s|IpzeqKoO1W zqYtQBJ3-!;bf~saY3?ngIQs9OcHx#*su53GvAG#gn`@~W18K&Oc8iUen^j-5vD#Ls zJVI)ewopEP@tuFEbh#+nA;w~gB@yhJRNypp-?j9O;V1K;_4El$-Cu(FwH9FU^)rCc zWm5=t15m4rx{ixXG`Zav{l=4E$H4p^Thkwb<=oqQU3rN3EdjX4v1$(heocU|^FQ z>UU%Fo~7t7U}wazck{&|u#Z|I#my0~gLBs6%F9(Fzd_&eEEW`w_{x&Wer33b%d?}4 z*PkaNG16M|qlinA@Z)Db7I_H`n$0wfv@U3$phnR+I+8f8eIekGkyupo<BcyWOtcwY9hH+E%UITGv(EZMWU-|NA`W@}BpdcP7xf|Ig>Qp9W^; zJm)?4^PJ~A=XsvoJu6LEr6_L440p_Ew zW!KTs6M}w~ivX?P(Jgeuxihf=OdxWd0<@xp)AF)kIv1Uibgqav+a>5KHFE944<%e% zkc(nHL%~`8y}vF3t;Ew<@W}O#wIWw@>0A-)&+tT*F16&!pk^5_3F(CH{S6Hlr()6g4dDdOx40~;roK?DarH; zJNF>Xr0RE_ioIenyi?t}92W2okKtMB@3Bmxk8lvg!HRy8gEwM)qMza5KU{_2-*9l< zRsR? zg4;Ow92`6B!ng==J*EW%4f_$tt#xywa(W;?=l98RsNg*5IrbYrXi8+#z% z`PL-5u~YLF3`=z_A;P58gTURXOWu4vM&O^2bLt8XuAYYA8V>$vFM{fIdt))ffePrAM-+T{(y*6#1-Sr?l(VJBhWL{-?VjTARKCL+~YQ`WMlH-S+geVkEMf z9(gl<%BE*f@osne_b|)5r%ylUZ2VMCKb2AmSvjVv1oMxL6t(r?-Hvo4`uiutG4 zi%^;6o{H0}J*$em>i1lT8LdO$tj2es$yU@Q2klY!{JHc^Bq-{Vs4VJ!4&h$+8yxd( z{vHQWjk@F{E$Wib^Qe0nf0HNisQVIsKU7KK_whG*y^gx%BrWQm`Ud(YCuvcaJTymL za*`Hx$?tL0B`0Z7x9U9luI2A%`J0@iMP2fI8+DKIH~Eu|y5uA+>XMh%s7p@LqVDJU zo1COYUGgXzb;(Iu)FnTiQJ0*gMP2fK8Fk4?TGS<9Qbt1p*Xx>G;~~5&??xcdtu# zD|#6-dfgu&zSkxFNUux#a<5y-VY;Ky>(Zs%UYGXwUYBt2`ca`d{iNB6p0(XL*Xbc|8=1vE4hbzi|xIfbLHi!{I|PDwJ~ zUUv?Ei#DF7cgM6|MA5hMQ5BtRAB-nGE8+<@`-XG*OpK)}k&M(L~+#=uFfl!>XuDR!P7@ zeD}I^GU%0IqHet|QOjPJh;^?^WH`#>7IjID7?s%b*ft8&cdv~9GKYyMMqT>ubtxw5 zl5PnrElDx-LX2{ZuhmCAC)EK@{S`<+67*h|#Q8uG9xf4n92ui7N%(sC8;IUZF}L6w zlZ#?{SqjzblGG2A$kowNHOj|ZOfkZU=NS6#<@f;%D4$UWk??V}h@r#@{-bDT`&x?G$Aj@&2 z`nzD3o5;WAyvUDbYHuK(N6NB2{t9+-pXPC&B8SjA@@!cf`E5bw^O3PmWv0qO>S zoq5-pAO@!`2zG4jB1E4jqx*D!??Gwf^JH|pjNWbMbJnD5KMpW*Xd49mHhJ^kL13<}(0UwkVT_4mGruvJdpzRJlSWrRxo1G3!nb5UYU{8;wkU*O5_@EN7DXht69 z-)*Ra+=Bfm;-bKF@G3u?xH_ThC%bPYbER16hA zgMYVKd)PP99S3Dk*XbPZMS@%H9C=H+gLbUQq3g#Vl&Odu(%)Wt-$SVTPTKDxhcI}1 z*v-+qzbDiEP9#J3X6%K34SVE4q-OVMDD5`;O-BH}M`YeI{s)=qJ2KN=d*xv~{~&Fk zXz^bA*Y5)OApvf~#XOsIuaQcWdvH9m;RUhs@4Z>}uXKHQ8a*Woit zSy3`dB2{gq2jDJzbV=LK0`w!wx8J4=bjS57S==IB+(UTsA$&$DKNTkup9h|4w@iG2 zPW)}8dCE+jB~|eIWIB)n{<9DN7HMYQCRYOmQ1ET`k&D1i_sn5%8}5XnpXDT`9^Ms4 zQYS)hd|ZqV_kaRcIbB8FZ_h2A+Kh3`=p6>3$(eGkB z+<=e2__8vJ6Kiq5O$A&~10NK!_#Rz+9#8h-GfKr!@gxbL6+cYZ)rZO=_X7S9K1T6_ z*5siwinGe;w)%dX3g}r1jCoF!>$U!$@#GnNMyVJo{s{kWvu>gr(zi}JCUeZx4Vr{e zn28TlUkV@>jCN7aO>`gm-btU3S>CL(EJdog%0jq6S@zkal8m$>z6&32J_j_Wmy^13 zzfC!x9>%fl7otE9-4Ei)+wmEtLa0oU`0tQyolJazZp7!2=IdtSx7u`j?WcV*rPsq> zAl0k*a1SZKJ*3-f!(3S zjJ(Uq>bjgPtjo#5dcXa9H1sQ%VTYCdd0F?It{swWeUzGwzKqV~-)*Dk@bC4bm+b7&fUVPsv^MO_8Kl^YeQhZkBqkwbhf$^OyfV0p8JjU?B@tvP@82&QD`^U%M zEz4OU%Q;}rZAOY?_SZSZF``eTHYg|NpJ_%P9a=~=zzn&KR*}NtcKaRpeqNRa!YNzz zM^q?sgU=2;o$MTwMcrZFW$(mD&DcOY@_c|Onz50R(jOnRs63w6YP^UL;r%wX>jw{EK-t6( zrgJEt{_Mj~;mMosK&z>lglu=)yH9~8(%wi}?!!`lhs^V|?CCvr2OdQZt-aTNSw2F3 z{-c*K-eV8(<1P2tH*;XUHU9ai$op}b?jHLfKjN7Xt=o1KHm0sf=1uny3LI0dqe;4t ztyL>xk-HH4E_`@YIpAR&+3xPQDc`5DDQ6`Toh2)`5C1)$Jc-XJ6+)%nZj+JCt+M)m z1?JJ8efU*8pK_PPd%^+?&`r15`*5(Bv4tKuhYsE}enjSbROZ`l5A<3yw$h@G9BLC& zT#3Y!ou}m#-)}#HF}@SixYwpT&oiz+p9_2Grrma~KMR63}+~*(MeWHg4$E|zqq0>bExcITM2PxM}qnNS-qP~yp+D!}a4uT?w8pb~(bNouy zv)6ubA5tF_sXwr5eA0ALmTHJ>#C`r@zE3n_KMnKU_Vg*>VX2x2MKOZMWH@{du=okNd|OAPs#X!>q6{eJril(QWb zNIZWsP}Y-yvYr%WeL$7*MDt<&Jrs<mIhYf*%)8k?k&XA+fhEX7k%q$sbHos1c!r8h_ zUq!WlGTVgN-FYpB4i=jfkE4ZX(YefPVG|b(I@hKKVT@$yWXPG3rO(l&zu_Ls+K7*d z4?EpKlzxFMZrjc#@I4ybg25yE$pf;er@-gZpMAI=#k_d0Q4|Jm=gvoNLFP+rdVs;( zIsQJG?~^j$19mEl&Ery=^aP-sV}cYqpy*&P){4=%-?paW0E#jmAc|7Uw*rBE2Lu^i z#ISSdBjfkluRBL%*(;i5or_Ed#D)};Sg_@Q*pXtkSa;Y+?zgK^!2qXa0&=-6_oST< zh~4dSTW(4_Woeho($>q;E|;Z&alPB#hSCm*ZE|(6q}9QaR?CuB$&yyfk{-bPjZb}} z=+6}KBL-lT?C@jbas(P>#68Gjm6N$D?`AZLOhDSK@>kHgEE&cQo+pZ$B}WMIUnHx= zhmn8+L_o^Pem46fWVp2;!xp4T1v6yHUiJZ*)}v0hBHbaCR#B&2WaRw;nRbe9$n7>6 zihoMRSLpc1k^j4@4AsD~$C38$WLi|sfA-l$7=6o?)mmq@v?87&s(6`%zUivNLD`g@aAo))$@LrG1 z?b<&Z2=Pnt)a&oAYfs09QxHA&08+n8M$eID+J|32#p556(UPseE|^W_E$8-^k&K%@ z)`K$trXcgh4s@EU4x%7>>}jOFKt`j< z{AV9t{&rNgKt>106T}STnL#^0fihPVWFDc+@gkXTQ<-<=!NIr6RH`><=Q_~$wu0!f zTamg)Mq?KF&p!MNRh5;|AT0c+hU5-FypxVyjWTx^WIp#D$h^NuW}+6HdDoLzZ1>4j zuNO4{)pvacMB>vj`dl3ybxCo5pS={{v#KJUsA3QwKGskG&Nc8ovKe1c}%^{6e<)@>>eKt8HvVM(B4j6OYR~|Ep@sAmKCfaX*7pcEek0W|POBNx= zIi4#m6$bhqxOQ#-=v5BIiz~ygRCYDzY9F|O;rAd;+*N$tZ|qRb9_xB?1(I$KD7R%ZqldjMs{6ReW8a`YB1;R$?o-yQq3i;>kTi8nl|bRKZF#&P!*0Nnk%Fjqe6-Yvpc>}X1`2kFRYN!c+-K9p2&)feycZv)1{Byq zUewR1C*KXj&MLu; z$sbVcpX14y4`J0&{Wx-t4)O1*(VOv0;->MR%fuBTE5w9%;n7EdG1PXtxM5v{0xri# zw_S@nQ8$%-%KbQmRf__=*=xg-ZhS^5KQK-vUV(+xKzEVxcL9GB+jszJ?llu<-!uq( zmg#2dbe}?+FXO|QKmjVaoUUH-gSpe+%F1&d0NtL`CX&WFKDeF5Gv;$17-*%0{iDFY@m;YwRakoC0J^pU^G+0CJ7r zE~CFHqu*gyKY$tO`xQov%n2tukKBGPKfBvLI2G~)dkWZ@Gl#y0RAf&x+4-D&jznW* z&j0QI5JjPK{<9C)VdhJj>+dAq04Ch@;#87n{ZN*0r!3)sJqhJHr?ECBa_EKw_ESJ< zXNG+jXL$1g`@eSpo+;t$57v4Wk< zO9|6o2{tVEo{}RL2{vr5Ea5e57#SabTo(HYTQtxt2+4#pFXIAm>uRO?ob=LRb!9F6nMX$8SW7yq3Mcpk=hP>6Yms zBbzpE*`O@qHEbE(-V3g6qrT{tl?5mBTv@_?S;A{DWOPO35m_v7 zp8xE_KPYGzEg0P}S2av5vxf06$P$WR*`G0&`)s=4Z#|EOyo?W%KnhspWVpBArWU>* z4Q{Ow=+n+ECvtrD`!T5aj8b0geW0tar=k`jZXG_lD03^I48(7JMiy76i|fIY96qCz zUu*@G_)jSOcQWw>I`RE@a?DJ;Yw_7I(D}VcfFS?bhsQb*UM8bg>F8IHb-YeSFP71J z?M>$ZG2c(7q~hFq&KWp^6=aTm0GV%|DD$ot=ioFZQ+W-_l7rMIWwdu{>Oz@$e0a;E z0B>33DRrMs?oq8nhKL~Qm@jz`whA=9+S~UQF@X#(0`I8aQl(+FGuJxx}Nx_{}B!K8aDr zC3d#guwk!Oz;wwL#jX{&-fq&;YC&uadc-J>)-_)xgyUS<4VBV3m_YpWAJ^$$qU&`Ac2?W)%5pRsMUA zaTZof;-)*rlUnk+9FDuE*vCcf;~81VKg&Xdj_V)sbh1;qR&;=M24_t1bOx*kE~k6( zd?=>Wd??OZ_70#enfWvy~n6MWGq5X1$t!Sg(58`^;{%e zpc1RY=IwR_9X}!ye?}+XgoHgRu`KyE`_8H8>c3Mw89A1d3xVthkiT`2XxTKK|4yWN zXCS|I*uLX1PKDAcd$vyepgji@u>|lDo37--5aliB^3x;s4Gcf8;U0!x((o|Dztiw7 z3|nti`R`=7OvCSB*wyg+7@n%(PcS@P!(U){riQ=C@GK2~kKxlb{4<8n(C~{4pQ+*h zV)!f#M?o1UJ7;TnCc|?zd=A5v8oq?#i!{8L;c5-9X84b*#Drix8Mf*ad?UlIhHqhb zx`yv$c$S7AWcUmXe~@9^(3JD@X@)B$+()|iJ3b+?7tZTlpsAhMO7wiH2`r_-PIIF#IzO4>SCXhHqi`ISt>*@beme2gCoS;rB88f`&iA@QWJ$ z0>dw9_?rw{QaE+Q{w~9-H2hPBmumd{HN)HV^WQO?(6BQ?~hzTiAJgzchS%%#S1{b5;SCHoY4{q3TQ%Il@D>gKuA1tSi~&tK5J(0G1I!&4dloQBU} z_%RKi$MBalT+Q%THN2eR$2Gj3;cscUmEk8eyp7=}HQdMW_cgqO;U8=GR)(L}@Ii*3 z(ePo0pV#mQ7=A&+pJMnW4S$K@S2g@ChJUBw?=$>I4L`%MC9QXl*e@|$rr|#_>}uEr zS2)?3s^M7-PuFlI!?QFzkKr>kyp-X&8eYqArG}drK2O8fGklSTyBVIR;XK3D8s5!t zt%eUUyi~()XLz}W-_P(W4S$;9wHp3ghSzKOI}A5y_+J@r((tbtZq@J~7~Z1cDYd-* zHGDS1+cbPB!$}Qa&TzMeH!$2M;iLA&-8h9EqcXoF8ClDoVV^&(Vu~~E>}i|l%&@1= z0ndG&HD$_5MB$Kh8iKgMbh_nCyKKtkQ|c?A6P1r~vWn7UiYvdsq93;c>6V{~3My=8 z+LS4j#YX%or|SGmQQQ=Ot|*Scsk7li4MK%UT*fpycAQq`%Rl`h|tRIpT(EuEsG zVN|QzYD896Ven|M&z+0vmQJZbKi}XrNHm6ue4`hsicD6}gY!@VnhnuJH3w*#Z+$SAcfbaW!?koL&KDfXPA#KGam;ZUT!}0=Y>g$99SR#jnxWo9$;<+KrS#S zV*RC1(&{uhV&fykdb| zsncqF78AYReBc#PZx*52eU*r$VHc%tSSF_zLL&b&>gGnCxJg89#Kdj#`h5kL0SE5h za4p5;H^~%0X#(G*TfsdHPExa8q3wY}AhR*{=UBw>f@6gB*6Gp(9@H8I!d zhjMT!#}=>MqGzVwO_$qEr)}5sD(pHJ*jR-U zx))*BNY9qhJ!b&wrOinYy1oVWl@&AWndPg_NLJjxn(@DX5-;G|Gb2cxSzxIIcnq~X z!Iw`FS?;5lK`P?%NtIIs#@?uMLo!7{!ha%%xdnEtA~P*eSALQetDt&@xRfcXlwp~b z_t5S1Og-7*F9%Ja86NS{Q)#0BdF4^fH;D!YYThX-48-oDSQRJB9`m|EWsgq*XD}1< zyW93=iyqu;Pk~J478T1)-$RflIJW{4-Q8=%Q{LM+7vVWU`%n_qK|R~gPiU3a^FX}? z&oqlcm=uM~!n;gJbax3rSP-YsH_FD5=KE7hIx6X;2 zpQ1Rizw%m)mo%q};Qp1@Qtazrc`eOrmgcqe#)$1!q0tJCl-Q*rSDGos2I}L#h&rqi zEL5GJfm`h@U~pLgG(BBwmg%8!TxI}0q!sV+TiCo6pCC9c-kqq0w27`)oSWdTs20t* zh`mj6SVUSC=eEJ@tKzJQItz}=7z9zoM$u%&&%ofpW73G*;?oh)OKKIdDNX(iRP>vI zoLe&=c!0Cuue`o1Ca%>RGUD1cd$kZ4%1wzOp}MXKW8${xan}PxX}6luYTiALiqo1* zqUNiD9NzV2K|v1h&HACi;oabMN)8?ITV6_&ncJqjgaX9bH=$Em#ouL!zZ+2e z-5~9zH+uYC*5qd-f0rYEMzI=sk27HYZm5928)imH^LN`-ZkV@vj1f36KVK&60wX3E zo+3<`R|4??yS&CQn=^ z_8+F5if@}Vp7_{RL%D2KI@8fNluT81TzY9$?SiEXYOJb(!F*MJBAZXu%3AE}CGhSS-BOn)kquWCqV zhIUjfSb+a0Tv$zGdrzt(f8w<-Y{_R+iT)GMU^cgOvsya3Q^}#eRJN+YpNWRIFWp|% z)zMM4W9j0y#kKRZsbqH|KfjN=OvAlMO@QT_jrO$aTgN~$(J_DVf`wJ7!E{H?OMX(b zR8^Pl=uYP`WJ8!lY781xx?9Ffo82m$y4R=}fdPL(@r$mk+n9q*C$KV|!Rsx6;(h6U z8c2i)SJ!kWvWbp-Dx1#bF_a6su`sN7Han1|rvhwE_ooJi@-o7K=!Ow(^-#JmnaUzf z86;Vm5&0Yd@M?%hHMusCPt=PPRMYCA&Q8t&=3w1Gwm*?yo62=$(}Vc|DhCU)zR^r0 z!l|S{R4ND=1%U5#rc1=ccXXr%^XY-i`a~uPq(dzB(5vd=P4#P9*3>l)_A5`uEr>JraKa%u^6XyG<2vo(N~|z zr@FXeMB}xvs|N=9Qi%*2BH-pkrb~`ya|%O{%5Idd@>l2 zgm`!g+B48Un8qMdHS`pWA2$(0G?>cf(;SI*6IQh36a9lo1Dv=rl}Tk2eQQ&l=}emH zro6ByTA%LfZcgO}`i3ZyGG*5!KmoFH7$NsxpGpkU+@h3?2~6t_gfVPaqYsQ02ooL& zl1m98IKUX=)w&{~p6L1v%`;D^9_2LynS3IRwjrMIG&!8W*e4mqHzqQPt`remJOpMH zW?Gl-!_14UAw9tZw10U!RziM$IU=wD7NQ)rI^Xd{D@U!)p>i{|a@6YFYLicFygWyqm?uR8aY*$*EQ^E?Uh z$^)qLUE6;2QMb!`qMUa+Kg5$~-LB6^E}A8tMv+gsvvhuL*|)godJmLiO6NJtKJK2& z79RX_F~D#wVe(2mo@ee=z@E%>Ii@qo)hR(0-f}x@3%5Nb(mqRld(aK4o^EBpE)^-Zwm9szR zV~*{d5~;S2x>fGE@?VtPFCo=VT)ESK|w>f-O)R}yoLoY|2oV$R7ZYBRX zryX~0bPqbGMHbj))1B%0veTRdz~cnC2LWX}-9zrfMBo+A&5S^ zJbQ>k?&J80L~gP5@cqI)b~MsZ0iv{U*2#R$Hp{!uEAQF#(JuF!MV(d9OD1A#YO@$AE0AKh?;yJG9g z$h-=7NL06;DtDr2Ru@OO2dUg>4*^=xO_`IZ!0F=IC3JAkIqqyd=v2DL-3N~Cd8PWQ zTaM>n=8BlB5G%`em*Y(k$K7v=kvxL_J57&&5q}@YpZawd;$LIgBxnDadzJe(`R^eY z|H{sEUL13exO4d587}=3VSJaJ<@~qh&Wv0*=Y;-O&54NrNMALl>}=;#MJHdG6euoR%vqJ0;RD*J@Q}95!%?XyI{N@DXmE)X(rYfg61rLT-8uXd%oeZQp#5i$3G=FshJoI<$}gpU`u|v0JK*Vbz`n%3aA;%Ly2t0Mz`8)qVhfxd`6`zmm-Cw(o^OCqwp!! zseE<>%cW<^A4l*Rm8zUI+YC0p{z zh>e-JxZ+WF1(Pw}#&~yhk08Q{?r|#~ebgC=w1DSwI|ZXeCA|FavVif!;`h$xG0!3%OClN9k$juD&N-QIbSE|<4$ft(23FjIPS;jyU*Qv z=-xff>+%~!hlwaC7Y2Vp5z}9hBl73BLb(N?R(#X!2<@wm*^!61J8z6Eo$YRoEUoys z`{<`0z7N6Liv8}M-W6WQ)P4Tfut;?gzhJDwTZ!S`vk$}FX|zgRnWrMYZ+7$}!H#~O zB1Wl*LtYVQV8&X1Cx`p{mi@T<4R^)WZnx+*J^hS&`Y$+vp$Iz~xp1aLUwZyK^SMA@ zLIZWxoX&F%oQ?ZL_*WJ+wzXxymzBQNG}`jQk~; z|3+ml(Ly4v>N2`XsVQDvAoo#LYL&Vm4i4?)x+v!ZTo2jkVX?E-`irw{2g6Nm>MCPH!Fo)LpgsC(8_!`+d!72Y~iSFH(i?#8r7 zqC~pDP2s!DJ$_a6VK1$^fBl!YM_rgMY>&D#eIo5q7pYHrGHB}6t!SEJcjlv@K`eHo zN9q!D;1Nxsx~3eQDs@kp7vND*6s1=el?w<)_!RE_dz=c+z4s{3;Zye=HRn)WEq)D( zQkQ{Gdf=!_>N0R}2-Iz0a|noJb+b|pvd*7kpex*GC0f$1izUnS$k~q#f8_>O9AgW2 z`)@q@!^ozJ2FZa@&O0MA=T9NncuWeU=)tGdgXi&pFgZ#mp$L6BiV{+~=T*8FZTl6s z+dbx1aq5uD-5#T2h-XBT_eAVHBL0`JBQ@d;5cB>&pho-)lt`sjT_>rfGz&XnE!qE) zYV&_jOKE74MJN9csVs#~v7|=a7}$j^sqAnX%C!@oY!gEYu~w=?Lv^=*p`J5b!2_+7 zUja%A&c0NN^j^>z`P6iXg67cEg#v({GN21Zq)!(L`VpcFMbU;X6ln@|p@k_$q z(?B0gCAu~aDsPmf3qA7F;*QtJhCD@Ak*57fq7# z?P19@QhN0cN#~QKmz6SCQp~D1L^=!Y4N`4M(drG64$knmx)sjU$eV0YJ84nFwYl`9 zxHgw$O$Qf9*7AT2wH)+tqDXqA-l6Ec+qS>I=ea|X58AViF~3?Fb*~WVNO>8m5T*yE z6vFg8L?KMkVG3c=hK4JI=}BpYFr_G}5T=JE6vFhls6vd&muB(7P4gWb&bCv)!Z6A0JXrNOL@$ z(_9t(BLBV|b*r5Lp*NPwPf{5>9EMJ6rg#M9U&fv3%#2)bm(6tEm_G>Z&W7W7N|1Z7 z6JXmBp+Wxhbj9b(rmuo7ElfL{@M(uvYVB~F&<@Xit+c~akCavflO`7$;2Cld_x=T{ z-=lxI>i3RPs$WkJI{QR5zog{-Je0g&gOc|X0VVHutRr2Knpsc+A9T)#lJ{zSzDA1P z`->`iS3)Z*b-cBNl6G{3((pzj7tD4$+}Uo|c4&jIfNFQ9vv+&}@aVs-JP>Jx`!Iw6 zLsH}5StB%^4qb28W09LG)FZ!AcO&q}O-DA)h+I-}IqWvBA={1beqSZ_D{hh484?Ou zsBNbohn{)JeIx2c6^}-0D(HVqYx%cs{k+rm5%HO!|5w!Mp`*Ep=-n#OH z6}?-FDSD$}ir%wJDSGGrC5qnHNk#8uspy^h=P7zCq@s6*^P4d!dYvyuj(f^plHmPS z*{gI+|F0{1NgY|J>?LJlsIr$HgeiMT zPN=e%QYfeWoI+^JC|ddGcMN4OF^Z*?y=NkY@|lnK8U0n+`&VVJQqPAfd(Q&CC^zMF zQ1mN%>8bKM?u00N>A7+=&d>j^DSL^6hADd~{$Bw7$ZM$|;OFmYc8NvmobVr-GMOUAX$EuU546d@Z^`|rOVGEa%TGFE_Yh&G( zw)#!23u`Q7T(q&SxiuB5_AZ9i_cV0J7RKYTnoUFf?Wt^IC!XbypKj^Vy*S*JvNpA? zSzp)O(zYpnO+)>rxRuV~GE**}$mAhdPxSQ-bQpy%qx)Kc+kEwjcx>V3T%x@%Mfau9 zF4V9(ok?UzHVx!OC7rlg)yKD?kc7$$>18q=i)9CfGRd|S-3&w_MLSg!(x;+{m&W7E zP-|mnXD*c&rEUlxt3~m6$8bB6Tq(ylm+r!~ySijDi)(vEa~ArPMQdtAsUdwDi7&fx zD4oi;ZAxtNRlQi~QtCU<>9ut44-<K3tXX4%@I!9Kbdn2I-T81At$ z1Nn`KT(6fbIP=wo{g&Nc98}+}r5-q)~rBQpaLhaV|&GEXmEp2P#>*_W)w6?Xh z)~(slQh#mSXntr#x$u!$ilxQ(PKnqojAKx+iV`h^8nGn>S6A!1DG~h*x3*1GV|RRE zV}_=IN2>*s4UHtx4}9d+*X2VQi3=F6d6luDmDU)Zf<9WU*^#;~+{uK>H8YaI`fY1Z zf$F6!tTbpf&E;IU9;$tdHMY>FuZ}IoBodbZ`=q$Y zS&y}m$F<*7*7DQ-<;j5|5Z09-%j<^v`ZPgh>;P>-PlpCQ!a6*d&n^fU13-D2Y#mrL zl*N7E{HB3qipD*JR$;is?xL~YH@7u3w=t}!Md*ECKhZggOgR?Hnwt6^!hh9oWAYaV z4HIgr>*;nch9{RI8iWpE=Htyx8+b2LlxPw6+q+)7jA7cLKz4eJ3KnU@1VNoL+vELB zKu|$gT}#+c zV@_liV_INE(k8m%4M=c1j$z6YE%A0~O+!4KwD@UBF&VOIUp}><9BTAuQ{1W|c3ytYClg&|DDeg+nVVS6Yo=hC2HOw$t7d zR$AXcrmK>_G@S>1HWo*$*2ge1;}i>0rFeX8VB0aL7&D0B(Cn$nX5}m}UU}dNvCTAP zA@iD#FG&sN(rDzwi>ya2vK+gg(F5*bgSRx$tQy+&mrb-W1p0!tKmSj<=-Nnm{Ef!^lOc|yjupfuhy6*T=5K`ud(ZTqR!GR2K^z!J1 z2CE)d)5%R(_$^(N$Xt_!UmE|I6yH*DjwJNTt%1i8L8`GL68SbU4Y~YCA2=(u#aMdR zY=?^yYh%lmZEG4gt*dX|NaLrQik3b=T-dIFKgM;u{luE8k5m{i4MdtFM9#dsr z7CpXxc$*RLe{jyxjpsNqkzHLMj$27u%6clp$F;{duAuoell93>@Y8~xqDZd*V^gbM zmrcP>6CH^}lR{>;(_D-Jeve0$(JVBh+z+r{=5pK;bRr~SIw&!a)`o4|>mm~n;|-3^ zze$`xXqVfHx%PS)K1?INVe+PQd9E8%SZPv3!JxNY+0eMUt^p^&q4u`=wg7L&4s`U) z_-0$3E_~Zq7CZ*XGf5vb{VT;mfDneAmlXK{PjdA@`UE(UM10{!$YK%+tKWAD_fVmB z&A{MDytyUTMnhSb%_c^Su?*0|7`Eqvvnr0^o#`$*cH$^Z`)GS2$7>;6e1Yln4Gp8x z;@TpWf@c6X@5`WvJ$$Cq@g?z)JtWYR+K`SA0ceWHH-zq<0#A6uBq@Q912x(n%I9^) zYhpt5v?P^sZ`5@xMC^qGmtP;2w%O>3AUZE9?(zj9MugEcS&;Sir;nX_x! z%#6Q*$$lKJ5foc4qQyvu9V?L`K?imZZw&p1M(lRM1fe|w%SU*XOu{;qoWBLngN3VV zC3OHUiFl(4CkG^<^NlOkIJ0IxjP!Pg*dnn@=&fInGKqG>aPw)X=t%inzilZ%%Bm@*T7)G(u(zY_(p`(L97p1KnQo&n(pXj36h#6EzVumnoVSKgE;#N(hsSsnss?X^hBXFNwR>L z!JE}e8G6YZ5z8SWg;>Z#{gXNv#S95cyqOkAa8ZL=wL=a(=%WxAO3Bp{!-fNGaQjfh zfrOwh5aNrO5SwZdoTMWs<7Cc%i6yy)WmTSpIMp`j^;h9sEs2T*c~V0eE}LQIhS@-+ z3t=~bIU!y2q)3pop-OhNXJP9Q&i;~K#Rcbjh*k@BZewEo+W_XdX>&Y7>`D?;AaLpp z9zQizK!fI0;xKA7Bb3xZhf<)5@lYf<$FbTq@X(h}HK*W$5PK)fpSJJC{3qmsC3>PP#YhPzskIfp6ca;zCC>#~dEnFXSy~}QQ!mEWkFZNI zswCr2biU%4UKgZDv|xj zsK~F0gGE*#P8nhadX%Mvn4y{l41AQs63Zr%=^e(jc-jDC;e=AcPQgcac3SJw*__5M zuk?uuNS0VNx+i{Owiv`LsCDH-2Y)p*#<#@RP_8=mOe^4+tyBW1v6I_UiRNR8gliN1`)zz&I7BbDL7zSzTe^Y@j(1!U};ZnS`kI+|P<1o_vr9 zQzc^*6plzJ4jQ{o*4TwjJvz72!b~R{Gkqgcr6HtV`pjt55#+U%pj({;fG+0sc-CldxbO$#QB^%AK)0!boeBB?+dZ}lzq4pyN`cZG++I<*vD6M=APNsoDA zogi&@30jkcc8YBwjPVS#sWb=b(I{Y@lA(1Blf*QSV^gc3Ez;lsw6@^vW*Frd<5!@+ zU|pj+=?WG|>KaRto#KacprBt_@&21kjLed}_G!E0qW{y?n1(bH0H1{VM& zMkHBXOl@ zNt$U1R-!_YwYUlo>kSy2kpf;y;6RLNU_#i%Zoetjrh(=Z=?F}W3@nS7)+lH$*Vo!W z@(DGlIINT)HwEnI5)3`jUaT_;$)Q%lfS>?~#B(7gO`*Ka4y~XI(WHjvfG)#8CN#&; z%1(rcIG>Y5GM%=%;X+;comjrO7JKKW%^O$8o7)=KDWQJj>Z{^wTA9yP1T=5}UWnQW ziN%0maJ&T;n2;EY)}S#T9FCJL*Gm}MM=1IXJs1+J2E?QshxRcxu#)g*DBjKbJ!)ab zhObU&J&XZmi%AlvNxml>gE4Jj(0yf_Jr*lXu-R>c+4KO^b0h390`grx`>v~NX>DwZ zZ!$*0ECA#k81JJr;SK5ZsYHwNKQTJHX?_Arrz6ppOtYaU+Lywc3rJ|t1~q73J2d)U ztBkF+Kpj?UFUXbH2FLswbgwcW1y|c!X)By?G6jaNNH&Q`Qq;c?1Lor-Vv7Qj%vd#W z9Pe=;;)dzQ$yOe+eSIK7Q)&mcF(MBQ;I=zPHiNBNSi_9_1js(3NWcW?aLA^`+XGP( zae&(LO?JuK42W7Wk3`nNY2BH5gL{|SaoyqQD1WCK=kFqa$p|GsM$9&phlVxZfs$}2{BQUpXbAIc;iS`98?PG zYJFXmYA#>3pe2DLsYgo|V^&BY)nmcLb*PxVDYj5!l-a_~!zyDh7Agdqvuo<=Tk9Gc zyj0nqPiVhhS5|cSuxhM z*BO)=(`25P0;b#{bU&0rgC_Z`MieRXkU*HfOBswjw-q5TxXx2}(M4^6A!>)382W>W z!%W0*Cst;qB@!bS;n3^DTSb^NH zuAWbiPVnS-%n?etb^?HH^o=~LYZDw)P_FSllf){c;jY^@66;@PAU8Q7>H>|L7 zxOXM2yX3H$6u^|yhwOLQrmCd~CCIM?b{{%Y7f?ct7vbc%rvz6I#HNAuRQJTDiVd9& zg#BCxUtSmsh>l?!%?d0KRjCx5pgk}p@dy@EJZ03V?$gB zV9A6=iHew_rlzZL{{W{I9M6kO#cODPn_!4bFHjswp!X9-9-gJBRvprjqj>c(x^+N@ z(s*-oV{_ZacuPy&mGL&d!BkY64#GGuV2Mb*AfBRS>n7SRv^F7d_$nkm;0H*MDCmnf z4#9;&r^z78(4nkPjqwZSJFycyi4s_MiUuf_0Z4?!(=hnaFMttdWl|^hTuMS`XuLanvArZ+CZldrNH_Srx_F z=&~4*^7eLbyu7Uk^FXJ4AtXAX>t-#UbVhVFw6N0q*h%f2F_<*FMkSD_peq;cwqAbQ<|8_ffz5HHYUCF~Oi-mvSWxHLMP zZ|`fv9k(`aDcBztUn|y+&?IDgqhmNP7OV=tQqx;KG5=XQWTPGv`XVSuzzwwUH7S#^ z6nDvLrNB3l$Cb5qb~2sN#^|zHE9b7k7@+CesRlI zuni=N27>DDsqHXEs4gt_)~f4i?OI`C=q_|lB}!_Pr!6*;6by`4eDEGi4H<6`3q*(` ztQ$a-J6hSEy~kQx-wbhjWAoOwmUvSglvj<-=4Bt^8;slIMerYX+b4YYr#MEiI<9b% z(fyDmM-r`~vW4InEMz5>j}0sw3HSx@E@A00_nmWje=+S9LvfxA_dyL{xbKw`nsA57 zCnBwX75C+Wj9Gv$ts#kOfoM!#69mS2Qc1ED!0}e^4CW!v8u4Gj2p+3rwL(>12Z>sa z3@#1ME}R`l|HZ9p;J42tfb3G0K!)$@YtIGdd0LQXDf#rcH)-_1yo6^t?Wt6Qn)~8MVj;wD_c^T*nCn$u zKzbMBsO)pBKo?b)X&ixH0eNq@NG~CP_tOSlmt-Y~ki~o2g@w8)mNjN8fX_IN1>^vs z(~0|m1?(DxFmw@KEL*Pz!PqW=Z7qq6;e-LcXLLiuw;1C6J<}C9G>{w}ToSH*eER%^3n!6MPjxSnMPmFYXhte zsgyQa8Hyfs2@O0FE}nJ@)?F4a`BQ4>21<)R8{ow z1-4)%45@ddlFXdyt-d3%#xQ*I`U>F;tlkRkQHo0FNMbRsk~KZzCPrspf~^Tk?S-&o zF)V)iQl0s_K3>qqNc!3&6`5LPD+>3L2!@WOPQEz`N0kxtT$Lgznn|OHmU!qB+$&?a zL+4il%8PGa9=R6aI812oicXH7T?<_q#gBD-&^K5Lg^m}j@N^JbGz(Hp*N~urAk!db z#cr6(j9MVsc&fXZW!Q-opMw`;}g(7@{mC@A8*BFiFLTA+ggvj zZGKk|`iP>n=H8GMEF18@!HF!g0bxCh6^1!eNkVjSOqm34zFOZ55%PnONQy0XGWEDU3?qvqTw?@% zD;a|oS`kcj3OEC=Z3Sq&sDnHaKzfdyA)ij=;#O)$M+$~v0~wl4?QN{CwQhA?OWeE; zLoHDw9W1wIVSTQ?3my+i1;_XFh?mL^kvSEgsW;cJrC~%JEJvknsz881F+4Q7{Ytn~ z6EjW;o-8MB&@%5#5?c(Si`qSRc=0}Jd&qo~6s)+|!!Pl|{yrfi1q$P_wlEpslVkX? z44BRw11`^*JPpw{-$3)|dGlo$sj||bn{4{6j=>?N2MOsVojX~c%H&$@1%h4HoRg|J zytQOX8(f$nHKhx-r()O4Xn$(ERx7{$Y?~xnu);oxMy=H50~HJe-0>Ydyi=jJHR2I( z$uFbDNivmzT4E1?y8}78WNmGy?GD=7!7Q8<3=HLh!ciqkB=3oA&48L%nB3aBIfKc| z<3>Qrlxu`8WnA_qnjuWn4qj99_`dF)Hxs}YF@$NhZ8to z@zxZSGupG$1oI6o0?qfxgaXEN34J%45*RHEjCVoLb(<73pu9)~mbo~(V6B&s>@3E< zEtW}1ye`fvumo5N56Rp>ta!zNK@c5uq*iMAkX1R56ISKuquK_-He62_MwA|FNXnAP zdON28Q?Mi{o~+zYbm_rnsFCYgdQ|@6HdDZ7r z{YGB{+2sO9cDAFXKEM{Ho!sHlLT^jv2HJ2VFbOY9$#fU2Yap`moa$OkiIsy@;fzV6 zPO)WR>gT+~K`94q5VVo1yWw)Ggj66FYrwk#F{b1n7j5@Or_d&v=8*~#9+Z%{o~{6p zn`4SCq44)#`VFoaAZ3Asv$eHec>GF{9uq{$>s~0KoB-v+2P(8AGPed+!vqaghHhw~ z41&UcQ;dzHjqq84p~BEHBhz$s+ormW@iyWl+2R2Ym=G#9C#1@Re-F*$)(!3x_!miN zU+4mo=L#1Y!u4`=xgR^G;l`1@fGjiyJuqiVxZ!s`0A~vsHWgKa;a|DTcn7WIF*M?W zt5I2@#YXAr6%J{IIY)r1#)#?~MTZVkz67~9)Gg)%U$RS;qEL+ z48G;vfuts=Q3;eo=D<>L=99rU$2T@!ZO8<|i2z*-@}_u#Rgx=xG6*o1Y@1nNy3g)n zN~lue;+{+WCM`;-G_KPMC7F~*Z3M+N<|Z&M`4+}p4b-F5YZVNW|FR)T()J%>tfC% zM&@48Uyp;rh{X<^gu`gX7Q=#p#Q;h|Lwl`0qXnhgeo4EJFDJ`^% z0IT;5t0F!{5+PGAW@rvW@BpT_o{2)nZ`Eu{pA6Z1I7ORaZi{=1)Aj|td&PuXG8lqR zAhBeL7WCu?&th_w82!t+z59l3VmkuaUO@x2Jc*$pxglBTa<0NR3A?F#PYGF znRt^zPFo(W8R#48$CYVm^-ShV6SW>H4_*(Yv#AscbdVVO zYH{V(Xl3Ydz|)NqTA+MQsXckVS*Kxa>-qI++>R9}_GZ6(CdIwXU!fV;`R1M#JYD+~ zol2yIMtQu3r+enDCMLa<2`VVL!o^|>hE${9aJ#Qt;In);2B+YpM0avX$RiFzbjTDA z%arRf@ZX*0ODHtjN#j>?eM|-dR)I1s#H|RSL7}o=Z}vhVD0?e$MTzfYN+{uNtQa#t z+gyC(=5ahx2k>Zs_6#R?p5h1#1H>Ln-obJUjx%AS?+67A&EUK)jjxDNQT(hw9qGtHmSf9v?`1!HL7gx^j&kto%E4oq{ zl0^YbWIMW7>{z;Z{^Huo`Ca(mm29t^pUWp#bX%C5`v~glEi^y#K8-- zm{CQzy$MDnj3Dc!`)9GyEaZ|$Bx)eFB4mcqzkYUj0dnh?5D{(J)JT3qHbPJV^X83> zo9bcQ++y^{Jm4&(L$N&ghuD&^JJ$FJ(ej|kfeKXEQtQV|ZFBAoM)(+F1;J)VII!{3 zhE6HWM~uD2t6P&Uk`-e$$!$x>c$n}T4K=hUicO_U;TUiuQBc=S5)Xml&_M^Hk_#d#ti67WVbXgMB(n%EE` zgVd-ExH1Vg8aJzfHlh=ddE(xN;-)8PZ*gKu+oQ=%8Ep$8ioWe#S$GQNgAx)beje>J zTp)Fbw>8nK5i0DYa+btga!Jp?v2XAz`+G@Aea`>1oi5EDw^F29L#pr2CEmu^LEywZlY@!<4j+ zx>sZ(uuHR{QjwV`#VdfZ@Dr(0iHolVW-N+JRQ%%Xdh#pRndnGymw=+wL*RG+papN2 zu;s~hWYcUnLXvP6h(Q&`YgkGX67B5VO|9?~w+k09@gcP#J1g{%E0lu6=E5_urd`J` zz*$FPc5yOhWX6m8VA2nrK4Ce#_nn}8&`s|!hO{B86OvlLthnjwYqE(!nAmu@5Wa7d znKtxKFw?H;&*ZD>TjR}DaD16j{K1aSs`#4u zS8kerRo(oiHS4PKiELLYU)7&TXR5&TRFOVHxOvW1X~`4YGtmLTbj?t(D?!K^ki!=o z>`A6*$~uHY@}*kPtj#J&2Z_^#9$;^u40&&&6g_*XV+9vd(J*0Jr%Q~TlpQ_14P(d2 z!ZZR@lZhA$ZP6WJ0P7X&*JY7eCP_xgUR(?I(>d|ZRLSFo+>D`JygBf?6W-Z_7uAeD zmttsycTaE&-Yaogj7tC&=PNCTV_XbvQIkbitjp7rd|~F{2)Y zkTP5}2yk;mjk2^G=o?|^KXWzx%56$VH@y8BBktdW$pL`&m!TQH75m8&Y zCPYt|ytm5^<;b>5oejXZE2irLPh6_sCu)qpf1Be0 zFc8mNI;I~^(&Pi}Fjchks2xX04EQ26T7oy5Uv`=12wIo7t~9}mfG@c`zYlupCG(WY z0Ka$Pl8Y;^+n&yMSGHEJP!EKTEX>8g-{+5Pizm z2wv7YE;j){8Tq9!H@uW};%!SV#a^ z&NRq29W)_09KzhPXy1c0-e^hS6tGzE^o-&PsrcfHSVW#)pFI097e$9W)9Mx2IF#up zZg@fiSh^nN*=rb{GK`@LND#3d1o_o~)JVU3$P+#*28n45cvPeK0yc+U@hOiAK7D4e z9fdMaNoLH1!i*&-92E(Dc&9vD1Mlz_W_tIwTy6eNm}}0P!xMXXDTLqR1sX>0L;0#5 zB@CvRIZ$dty3YnLKX2L`-yEm*@+pK&4bZfZZLh~KPo~@uEygWY4NZ7nCy59z;F53k zw3_2r#-!$pHPcA+CcuUhcb)M6Rn2-z}{gN^9ghKBf# zyz-2VTZp(yq3N$8Px5u~UPYm^U0O77Qb!%kE*-wGRSJ$0BY=LhZ96qWZuIgnlNylc zssz9E(0H$w#m8r1tz49~F-Z~M=f(k$--9R&@0#5a6}Q{KPQ+QGV2E( zz^vcvR@fzdzU-`oc%G^kYap2z$yvjA-AOy;@mSf<4QOQq~ZzQbLP zR_N@~{Rk|aiSI|yDZ!(D(nyD=< z;4q72{4NTNaSER5_=;O0;Vg0l3PUXNI!ZPXQdI?rjEw}zGb=8RJYeDYAy_y~brs%X zLuu}zLw?weF7|IJ72|<3WQ>}nH~~;3k4pPc9TqI|jned_}us#CHA}C6?pliq{8BIWI z^Vaos&1;!f4B{-E=mR%s98V-)L@y&}e~MyqOHosJU=XGOdA^ZJ*hH>uasE`?#Pa3X zjWgii;pf-9lNKPD5YvV1WXg&%NHwr3;h9P+4~fT1C%sc3d`9|Q@lT{YV_5|W7{r|= zHaOJVy1rcz!po!kLO)6Gz0o)H28V&9Nq;GYSQq+&N8U%JjjZ4Cp|LIkLkFR&?`Rc# zCmJxr$XvLnOuJ`3@L~mq^fm84w{-ZADiTS86BQ%BaY7z0Wt0{y7bnTAApzKB<$Y1Jf~y@ z1SY^xdlW8|Ln*!$3$4B+9ofTlQKu+f%kJY#Hk3mm8Bo zibAWErkP`)1xlu(-)TqvQyYva6|AW(YTUy+ea*6xmJjv(h6$!&ULQkIf$Xt;FEbT0 zBo|wt`K5hc2NJ7$N9tv;##EXzJaX+M2A>uwsJz9z)p0|Zb?FY`=}jZfYq4q$ZgGjY+9Vzh;VXCKI>#Bel1GX_5o zR$~XyP#eQ}T{n9&qOoshs0=YyjZv2R9KqFukYCt!OPQ??2SU*%Q9^W8f;f>7d0wU8 zZ+2jk>2;C;J^6`=-IS1Bpsu$_JNo1;RPn$Qtn#2hEK2?aOvXGM7x3Z(k1S#qLIx1% zBKB%;&H42J=od(@oH#?Va&pWVN@0p;I#>%>su97$jF&P24DO>fWRJ%TPIIaY_o1>Q zbWdAgf?AJZEHGIh3l^BRG8X)r>apM!QLR-DhM_||t~Lkq=7jmcL7#pHvX*!A5^%1G8aRUb4^9jXCfrb^lK*?}c;u9woT23$mm^*YB8ZB7^&I?vremWR3 zxl1XICsy3&HMj71=WEilB62cs9|(QpMsUF5A%48Q`3$5!Nr?$w!IH`2O`H7gI~tIU zLp#7cX{5JkfN%&Dx7@uIyr`uwl^TS4t3SPZC^teboxCP36qEob6cP@{=tWA<$#kV! z=v3L6?jR3EZMl&gy>qXPeaXO!OfZpGo~)}ew>d|Z`cL-$y69}mRrzV(3F5rC%4NPI zCb+7WNE#=ODgL_6Js~hDCx6bV%Z+3@T2oo?z1IVq0 z$s6QgPfNQ&_2xRz(~|F(3t5ELCS1kwAqTl($l{(AFJiBKHB0=|Hf|zrJhqe(SvnVy zW)>)@3u?A28yZ*FH2~p;+S}^e{G}}D7#xK66_5*9@UHVa>kIU(i zQpWOfwDJRBH#fuVfy`1(Y&pRN;J@h}z5!3<5!|=-v8n}u@Fw!aNFMKldGsO&nqg(& zhYeIl_iQ6fI`xW>%{;*_G6P0OK1FY=|1Gl&gGVZ2kfB$RSevzMLV|-$8+BZg#4uJs z=L;@cc8QF&ExhPSAvcymeu#{bu%e7<@Dndyw<4RO(o$LnvMcEVePm6BhX-1}Sb_%S&H%gs5F;*Np!7M+1gbDvKCI>^U7mc*&b1ZHktVX?mIj zMVU_!5m_v&ZCEt36UOHGSe_6fx>)Sac*iiikdS9ZYe*3S-5E6^a%$nMW+RTQ#xMk? zHM2e5Z)(enPSF3?-nYlcRaN_+wjhNTC~Ya_C20lWD#V=0+Y6F3nY5vKk(oX~eoQBm zNs~6o#F33M%qZyrLqHD{4XD7D4PqE}-(L2v`uYC`v)VyY}AS zb>^Hk`%EWZf4|S~59b42+26DF+V8d3UVEQ?g6p@?okbzO$P`qAGSGJ^L9SNOLdtWf zRREWX`f1S$$g9<$)<3y|j;^JBwQ9y+ov99*9+xHii{@UHo^3GFD?0h4Im+i%kCDg6 zxzlKnpiN?1Z`2uU%P>N(1kK)!7GcdJzITs5k# zYX3?yScpiC*UsE}tZaH$`j5t!TQ=LOx=^|@2c&EH&QY-61TI0#PtYX?DWzLzACH^3 zFqF^*BK{E>@MRR~L)Ul0Bv8|$CCo9nX%|l)^N*#o6GJJw$AmUOa>4Oa$U41|uUGJ} z-_;p5J<`Z*S2vNBj*O|yEDE%;G~K}`UX(}ot6)V3jJrZiBRitJj<%twU(=#y8CC5P zqh)kBVfFxoyvy*t^q`@C0$uqN6PEw}=iLT*v`qf1eq{LXxW`bIe_)9GFHMvGiZ34 zxyOdcKlEY4x8i4p-uAemkARv`;opA+-!+2o{}W-Rze1SlO9(T49bu*i{~GlK`ffpc5N7%jgf9U7oS^q2d>?4#vqnDCGZ1Ea zA;OzMZxHkjg#R7%1<)5kKk=NA&-7`8cY&Vqym`*_T7Jgqc2% zFw?&v%yiz1s2|Xy1${TdOix3YX&hmu351z$K$z)fgqdE6Fw^fM%=A%&neIZE>A}A> z`9B2oIM52vBxoP#r$M)XejoG)puYuu3G~#LjC`h32yX(t4fJ-<*}pUVOxGgJ^a_Np z1pOK4BcMxPHu0He5FP`)3-oT#SAK8!{{VXW9usZ?9T0R9VWw{({5I%A(7#MGe=zcx z&ikVYGyN9AOjCa{&zTNT|4Yza2s7P-Fw?jHYUDGWJ7b0hn06q{bPd8x*CRX# z`ei{cpK0WM3iK91e}nLD&}(KHex^4eY;sxn_pJR5-<<~-`Y32*wh0$F&0j|yXz==j z4Bh__LzjX|{>#DlwK+k)(?j_0nP>Q3Jj&4b9&PAHL8biFhneS(l*xbGe8c~N1wr|z zhsZx^n*85dWaK`4grO`q79#)AV-4SvOATFmyrE}-%JL2zXP$qoBFKMw2>*>s4BuUl z&wOF>uW=3kl8B*IpxvM{Kisdrd5Yoxhy7`4i0w|Me=qy|fLV|FC~eJ^aJ|HTA%DFH^RAnf|@( zUmk~VRhjYlHt0&|^$yUipcf-7?O(>@(EtC>?O&vOtDvtTychJH)uz1vuzyW|W4o6r z+r3Qxf3<(P9nVI4GHt0b?b`~vLC~uaz6La2YxtS=A#7^L_itrxY9ycRb1LbiouPyL z*C>6}sB-=2cx9h@)%+AX=dVNbRq8>fvVUrnVj7yynkRHnG)Ip1Kp;WSvgzTZih#ey zhVxFPy8OwhRIgAtl>-!@XPJIF=a}>mNUcIVVWwyFw2?g?6Kmr zoXI%>Rvnn-?C0!sZTSAq%=2vcJDi41Hv9nRaVtLCX}H|Rf1tDNOE&x&1i82&2kQPKHg!&=Q%g6x8a95lM_pdGBnGX?`*N+3!JT1 ze4(?=iXZN5J>MpOk@NTkHv9<3*=)lXJ6kTX;YT{#toTtyWm3Q_=jagpm=OHf5d57X z_;De4MG-!Oko}xj;5jHfo=bnuaEj~sNWy12#r>xe_#V-(nt@kgkAQ;uw}$?m;S}mk zHj(c30hAr8_3%d|vYx_n+Gdx0UNb&3~k`3+*+V!s@47^(sHR1+H8|3g07e zA6+rSqJT$p1Hi_Xzv};OhkbJn%7rzX^P^z!%Ok^{_?Y5#ZYd-VOX_fe!-T4xH=%BH(uk zd>in)1^#W|KN9$T!0!?G)4=Z)_^ZJ06ZiqtaH`$^L*PdP-y!fy;P(r>3;2%(J^=gy zfo}r-AaH69{ksDALjwN>@SOs`7x=>he+u{`0{S3%nZmF9aR~{)E8C zfj=eiD}e73_-(+S5%^=kpB4D)z@HcR{CAlA?-uy`fWIj4<-lJO_!#h)1%4^;Jp#WT zxO3?e-F^*d$NPad0j~i54DfZpd0fmqz~nzE@OJ_46L>T5l)(Fd_Y3?Zz|#W13iyD) zZv(zw;5&g23j77&LjvEA6rCDh8w7qF@Qng*1U@YAGl7o?d?WBtfnN+fBk-$$j|u!c zz&|AL$AD)A{u=O{z!x28%9{sH!%hEA1-=+>}lKiJv+e$x}$!G9C*ihnkE9QfRW zlzg&dPc?Wo@J@{%>1=^~%AWpBFhAsM2L34F$_}~j=LU!%!aHa^pybbPH1awB?*cv# zILmJWzF6RC;1xp7r-2_Y@LPeOB=9GJpDgeUpie&jfysz&{3joxpDc-Y@Xyfe#A& zh(k=e!vgOHJ|^%F1J4WmtH37({&V2x3w+L@Cf&^fZvuX?z{i1qT;SILzf9mi1-?b# z4h=NbpFbz?2=J`}?+5-xfqw@0Hi2&k{$+vx5%`S)fA?V~KQ{^dOyD;Q{CwcI2>dI+ zZx{GO!0#0J%=sqW?Evk@Vvl(1$iJVUXRow-}!ZvfvTaL?}{@RP_e zP;#74EYbPkaq9U!1n&7g1n&7g1n&7gfb+WVDx^DK;GW+@;5)#-NZ`AGF9uFQ{qy`D z0{8qL0{8qL0{8qLz`1@rzlXp*zXx!(8$G{=z&*bQaGFN-&+~f--1B<~-1B<~-1B<~ z-1B<~-1B<~-1B<~-1B9L9s>9L9s>9L9s>9L9s>9L9s>9L9s>9L9s>9L z9s>9L9s>9L9s>9L9>BT(dwvgrdwvgrdwvgrdwvgrdwvgrdwvgrdwvgrdwvgrdwvgr zdwvgrdwvgrdwvgrdwvgrdwvgrdwvgrdwvgrdwvgrdwvgrdw!2kF45z&0pry3djPKh z?)g1{^SJQ*9s>9L9s>9L9s>9L9s>9L9s>9L9s>9L9s>9L9s>9L9s>9L9s>9L9s>9L z9s>9L9s>9L9s>9L9s>9L9s>9L9s>9L9s>9L9s>9L9>95C@cbUYS)V_l?E&&v2>fl0 zAM9*fW_pN={!>j`P0Fs=1$+hYOMo}E82%XW=Yel)HTXKCy9XHl%n7#sS$G6PtqW8_LH0{aQ2fl37q{TtpaC1$qIq9 zpQJ?i3FIQvQB0%t$TT7k2l|Pm&in z`$;AR&VG{f1rjX$;AR^Kgq`h&VG{11kQevEdpmh$>#*lev+*MXFtgo1z}Zi-OW^D$c~;=;C)q7<_LICMaQ2hz5jguv zUKKd|N%jhy{UmP+oc$yY<`LGn>?hez;Or-vEpYae%oRBMN#+Th{Ui$o&VG``0%t$T zF#=~lNrk}KPjbA#*-vtkz}Zi7vcTC-QYCQqlhg>D{Ui+nXFtiQ0%t!-lfcNzM^C`$^Uboc$#I0%t$TpupKrGA!_0VTV+} zZpmR@K7o$TC_l+nID^i95;Z^D{3OeXe+Hdjx>1}{TBY&g^DrtIo1CQPFPs-*d*&k= zCnwqFCCH&6p9TL`oG0Oj*J^yBvrC+7x=G{3=bFAt_);n_pOJ5apa%$N8xuf-OIdFalbQSP(f%Ch1rvU#1;kI;dAbdW_=XZy9fd5{?m(V^`(u)cELG1F7G`da{dT8{4VZUkaOZvfdXGtNt){{0tqY?FRi@`YwZ?dyK(f1wKr;s?V|A2B2=K zf0qL1v+ExN{&nE|4r&kZJ;3>0c5cT*k2mu99a6l~;;bdyRu313;MYSAzZ*V?bbkn( z-x(%Nq<=3FuIgd+P7}UWANPeYX+g{3~#NSDwpzGvTaTz^chk z@bkL_Tn`IKpvvcEN1Jw`?MwYTop6;dza!8GJO})xXAD5wyZZMT!YlB%pIjG$f0uAu zK6em)7_E!9!ynEvUnP7At-H6MX7WkPbN!otqRIcAx0>)ffY%eQ^3Qh_aQ&>-{9y8t z4UlsS`YmnS>EG3m!|#yR0>3{*&Mv}j{px5^yedEZ4s8?UYy{5l#KwW&Lbz&|gZ4A! z#q{hv41Rtm`8x3b1^h>$zwx*`@t>5O;&aHS5U%pW@3wQlJzMk7aqdQa{_X&iz*g|{ zJ0{$AKL!7Ppx!njKYIzc)x(MJG3hRN!!S01|2)EN{8tgK>fz$qrXHT&-$Zx}a`@d_ zZr@q&waYn~a8=$HpEdEfA>FnR{>_A|bU${iNtgT89U=Tr5w7(4_75-7lGj20f|Cut zYtrD`fV+g-%6nD_{u#nme!eKi=?=nGx%eGF_ESBl`H`59yas-L$8Rs5EvAV>$-fEm zF9hCAxRTFz3^W5D1I~9990dGo$mu`C)Z2*%n+MN3)cC-GA^-`niz*4Z_v9*bF-jZc69Jkk5CL za2>t~obRAudv9*U@VB3AC)_6g zEy7iKJMgak?`E1|{~5xy z{(+vU06wEe;pDHzdnIhAy_0a&zWgpB_y0KXPt7zPkn8zcEr;3>_Bl;A`u9EX^PMMj zd_wx8TN&!a!He*P)=`OchG zoFCx)?&D72@2xZW;X5i`0Ujq@)#p0Y=Q`k@CYcCb&X57 zO-?!l|3V0UM+p8D;Y*QcKY4?2Z3klgUV(=vHky3$of@YC-w2%VBI0`ZByd?jw-J7r zKSBKc0^##5_!}YkQSUeT;X7UW5VxCf)gRvZa|0{@ei7le`n)v+e^SdS&d`g5tM=k| zcdrA>f`2wR-zl^NcoX5OKUawLW)A#(rx4f4)xh~KC+;WTC)}3*1F0cYd2jxKN$@L} z*m?<9`Q$rixIbS2obUQM6Z!lKaDHc$g8H|c{;;LHlqLupUQf76m)|Ak{BI;&x+ZcBIG2TZ#B&hpX7|7nEV`018Yolm|KsSEs<6Rz58r|^gD z2$Az^!d1DJA)gB&=kU{we10dLvaNshz@;8u2b}M?X#)Re3Ag3{XN23v%gZ77TOo3m zQbMY|_%1k3tC?_BuFG#V8DYC+0Q`KX59`Cv5YBN;4D;{z30L*$z`o-7>lMOPy8MnY zl5y&q?Q(L2D}KH+?GH%ge&Br9*COD52F`cGu^w2u%r1X9;VPf=U@vi51_)Q_@?A)A z$p2=DoX5Z~^La{(k;8Y2@pwFoa83)NHMxjzTl-!QIsDExnIHQ1G;qFyj`i@{z@9qcq(Cg|VggsXPvJ7Nw8eh+ZI8;bkwq08<0 zJcn>Kj!t^W2w=VRRp8QpdmrH{UB2tD66yX1INu4z{b#`nd%DdUKhlwY_|6di^9fh! z%JuB$f%DyMJCUC!f%6?_JbxX~Zpyn1_TgOcpG>%tFYWMl@P85WHMtk`ZwUN+ryAGW zmB6L_{2<}Besb6uc6+0ZaFrjvQ%;?;RKLpzSN-I6aX#cX;FtETv(m`nJLO32=wB`2 zw*0Ij+}6(rAxHX+FVOsRoG#QS_wz4?$bS-Yq#k$^INwn;jC`KZVe&8iy~_!=<@1At z+sZWwIeh2dmmvQ-;Cy#rC-5gjJ?Zo$;&zSigM)INxpY0{H(6 zIN#Ozzkt6?xGn$HWB@4ne23~B@b?mKxd>16AbtQ1AS04b*cdMQPS+4=-J4CMoUa`v5^P4|40M}a_ z_`pvLekk}qNw~_t)H62{&Upi?CU=8hu795)T-lRV!k&DaaMkW|zxdeICS5tdw-c`H zlWnk1TqJ%0`1ua39^gL$F4x6-wVZ{{9h3r zxVYV42QKG@Q^@d8a`_-A?=esRg{)d4}z4}!xhci*2cN4DKu?h8Dk4JBX@Xt<|dbkmG3)fpS zaQEj%z(&Z~NVu(^Zw{f^zUrod>8U7z%K&M zce1_@_!kJb<@13M{MUr5{vh`+W+V;X2s{5k$NWwpT;-p?Ex`5G3S8RNn}N%9{nfzv z&UcpcW5VY<#rJOQ)c73dWSkq}dFO;adwEYMT;)^x8#e;yyScxBa(ymD&ZC5@`q}%q zVPySqaLS&plgj3E`SF2)$`pMc?2MM)L`Qopo=7J^pW$Se1O&au8aA~yZ+vu_vxCB#?I!oiT18|U5)SKi5+g0f>#ycjh*dX zR&IiA+(veF#4bCCv+N*BIf3jT&iQuh?6QM6%MPLi*+IMkb<*G$trJvb44@6DkN~Jt zD`ItBCAO`jyEz^#3O%4A+8=NX(L9A1!3PcTcvnV!A;_O|wesKQ+DfuiHN7Qfn>x(*Gow}sE*MWz0>{e^mWMf z^f}qWcYQkC+Et^uu!ps6!`7O<|RS>4#^ z=c|tu$E_nMogDGAxebJkr}E?3bU%HkD%q9kPY0e?Q9kf_bU$9-K01*c9tyOHTirsR z08dg=W!0zK{p|GNFIDR5h#jx1k+`e*-G~&_usSo;uRcZ{kX|2X3K_?36wOh@&=834 zs*ia4daR3k+aia1;s?Nn4fweiL2R!q1!)a7a9sXK(-3e;z=Fuq`-)(3c znoRfWWV`5#raHEN_%#-u_gWe1qLX7Z5sv1qPaC77>*)s4v>JL=hU(Y|eb3AKh^l&I zjD~>yVJm&#cqBP&edw-8Pud?)Z?rzB?oQF?TNX}4J-yL*{H#RVs;-uJdv_O^WF>@7@9W&tm+uBYA{Z*5%Y0n2!}nEXW1#szaTur` z`4PoB??a{fQ`IK+vTSA}O_k9WH`=o@<@<7IXhv#W`Y^K^;wf!A4$+*mNe}o0^^`o2 zn_FXv*5-KgvgTMcvAnmrYgI>cZ+rYKf0v5XdYsX==2ac>L@eIivNG0wb~MPQ?60ow zM0Z=FGuqkRdsd>eyQ@9k-5c|>xwT!1mKDvtu|!vNO-FlIP)1GHs?KH6UL^w`weDVa zMzkd!5D{s}jHRF$a*Q1&VS4O)6G2A*DfXc4x$&#{E zdGe>|*7dATbTxNI6RNt3DlwwaXm4+KFI8eJ*1S9_c_Nl?0=Eqf)7;icmQP20Y(;ZN zNB0_En)`^+NHw&oH`cz|-xT|ZQ{Nk19i@gXKb4xE=J<;8*{Rk$y8}6LYopn0Cfk`D zrEi|AOSwBDwP}T5A~0H!W}4X0rnE1i;&^WL0NIJdT3pahvhlW+&)Y~1o}uf`)jj0p zNpI|(W{gNgtuvGo$r-Cb)xf?A5s9=GcD z_Cs+2B2~I7rxV4En0xR^;p|Jg8;R;G^UGnaQlDzijOX_$vnpO5W5iXr>W_~OrKZt? zU9w828ON>3O^xQ0ljZfv8u~VIxy%uFd^9&cHkQfKn!YVfAD_>r_fdU`@JdY+AGE#1p-d-SgC3tP`)S(?a=_a)jB!lR-$ ze>|*xbZk5?_Jhb2oS?N!OLBO)FPYldMhdEPd@@j&nxKGIH#!lPnL-VSNM)39+A{y% zo*j|p`sidjHJ(pLd%I!@x7virhEN?m8k$+p%~KbwwX(fDRi2keH`nz2JE5I0L~uQO%UgcegcC{);o!&?_f48oo4_^&bCKBr>Clj=gA}=H@BlA;#;w4OySjP{m-yQ(%eoKBBb$I_|jKmm0lb<>t8Evbl zvyJg|c4TNYNn=dcJ*qR1uG>KAc8!nprL)}wCXt-KR*Q<=8VNjZR9hY1CfZPr8YkC2 z5N)8A(%VaZX0L^)a#aga6`2OMR-LTxVBJ-bjfu^p_6;3_ZhbVGj79qbQfsMFd>e)B zzPYB*(iBU!bf8_TeD%ZagBptE-I~$y5!!W0C5DGahVr@ge6*Ts++XMjtz>Dlc>TC? zU}i>DllLWa>6%{h)GC*9?@Iq5DfC6JvZy<+^!I0f?p)foNRu}vt@T0oz(6jY4>q5* zeFmd$^{SlmT2U=(_nGd=UUSIlHAJ)d>NC)%BD5`|b49Z^&4{*a)tVlf?l=9my-sh1 z43w%6*FKPIYy;V=JTpeQn>EHr-3+JW+D#ryXD5bIX;N9~JZY8GMqLqMH685sA&m-^ z&}Hcu{nRnYH4zwxLOHk*>S~3YXjUE{!O708B~IV;l{0gw#Zjy`E&Pc#uyUv~E#U8} zUadviJ2uc3Lo`bM^F)G<=kT1TwxRV3PmQ_iD2=-YHSV;kvo}vQNr^@$jFz?3OU_p> zD6H&#)7zIRWVSHI-P+#t2rZ;N_3kgVYnzL>C6Of;YY(mL)YL$ygt$&z>k!LD8#;$Z zS0{(Zp?o1pYBjOFXCj&U z&^S#+O-(Ip*ETO}Pq>xUC6c!1wRlU-CqfR5n&#o*4EYb!#(E31Us>}mSp|9+gp|+> z&BXc<+LoiuyKG+BQfEvgdT|o1g`5yMI);`wdo(%H)U>>#eHj%!QC(S6BGa{Gq~vmR z7>JCo{1DCL#2b&XGP2E1@xjr?x`fB!je4U!=_P< zLMmhWQU+0IwrJ^KncKKZtz$J@p4MLV?KyM8poB&i`l2?be8f~Z&*CI~Np+@7ZDUk& zgB0n5qDer17Iz=oCSR_$sq#EeSa;caVHamk>X49uJeCji7}3W@&x?-u_RT~3MWo8C z#9A_AQ=ZuxuQrQfxqcfxZx#$MJ{V7@`;wt-4FAe>9pg6rf ze%0h(8s*7E^HxS(5n2(_nv&YG;3-~B%a;MQHAfrk9eu2K$B+K+X;Ik0J6jQ0e6P4;o8F7WfRFOuiRRwj?mUdeaxhBi_8P%GBs$`}n)b1CM@ zAhWjmsK-nW(V{r0JY;>BQqRGo zV!j;K1RIsQcwatWcpkExt6h_&Bi`0EDXGr7nkvsy6N7{eHB_@KLb(IkI)MxZn}-`A z(hwydPJchGsLi^TwB2BajvXjRdplddCPTg>a=Kea{T}M5+n_zxaQ$WJ-G}wc?k%Wu zQCQs|-oR9@AY;f`7MQMIH7T!6T|qaYu4HEkF*!=F=mJY8JspuA?kDx18f0~>8XuW1 z3@xQCt7vRdwo((?sA-RPQbd0FguJ8bZIrn3oD_PGbphF+e3{ylsU1A7e{KkPOhs*C z@+@huZlEq;TU!RlAv_kIh2b}EENV9CQ?sSi!#)hIpyRL5Y3TfNDm|t=U@NpsSs!98 zEQUla_y>8JJwjBRj8#(U*n3kU^VI>*u0M0uA)2(e4-I?$vXT*&V^3g1JDqe-lFvC{ zMAzy))WYGnMjeKJRoayYKJ9p_Ri=OaW?auw>qPbJ?n^D&Focv-^C&c@vhig`eM7ByVKt;2QH6z7q0y$*1N?1DRU{Aj(}ZD+U$TGczkrn{ z>)EZQN#0EF%A^RfjMOkHa_Tz?rEkKtjirT@yP3U;r3P)k?2#5(%7q|g*%#SV-7OLF z@nh=*TC}j7q6H3Fbo8Q)-zc>?X=Kesqai&>SQH@xNqa?UrJ~Q{uSh4y0vYf-AtK6u zYAk8C>Z8N@j44^*{(TjC)hl2uQa|vS4TU1p{2DwRPFrcpTSjYlb^MzgW!hs@WI4$i zaBVIlo~O#(B_Y>3Z9wT2ZLO*W|F#EBxIzsF{n{aJ71iRd*Wxt9+$vSR$zExJ=AE{01CBwp1{zK$vxyY#CXS|uQ8&hum`&58T$m@Zyk5iB4I3e{R`>1Y z3NZj_ai+b-v|<{X(1xH-71=fuXi-VNL+W=_=A?SREkXMqzBt9|i>x5!X!ra=`x?c5 zGv1rptvy3(RkQWTbz~pfl$F%PU|`%7_Zaw!k<-AqQtKPuB;%3An~GMA7aVOx4d?!i zi%om!OgA24#bpXmu>Pni)WXW_XcQJ!Tw}JrSX9TQ246v4l;NJCBLRhequ%bLnh+*V zSs4myRO#5@k;852-{w&Jj%u4DIQ7dWqSqVtJ%&SULR2h2dW?T8%1N z_t^H7gTmF+Yxr4EnPm?PS>)=Y38Xd)io-8NZlSw1dJo;a7Ng!hR~AXg z;R3hLuoc{3)L+d)HB@y*2M7E5Vl@fH<|c54CfesyQ}&Lg92SAqDi4X^s;ZRc44IzM zz=e@pG*|iS%i8|ot68;M6YLz`xYG-+!nU4&ap2Q9mO55;Y*d;8GDO*XkW z&J<}(k@eZ9_M!S$46PsRP3JPh<7y4A^t@VuYa?}x-eyQl3}y4<$>G45Ex1VBGJCAm z^p~D?F)r-|QX7m#1#*L3hIK4vFU#?VI$B%P-m5x79k#8A4O zc-G)PQD3wOk5JmQEvjBzV@rq^`oS$udW$+aW)}L{x=uPLnn^`B(Af3q3v1UM^!HBB z#tzwnwdIcv(Up_GV4br)!GlVIPWJxPDx>H?8)sG^{m9RifYy(vFGRM65Q^vvPv| z&C&n9t|KR+zvbu<#+MW&#&N*uYIFXU8tB3(k3`H4m-qf(&e#Vv+FIwOQj*5l+jRSgbaFqQSv1Q{h~G4yt(>2nrGfV+D^|wY8^PrIzJAt2&dpjj(8f-O_J%70v#^)Eg~^NqtLZ zT)ori_d|G@cg5MnTt1r`87p$IVe}Pd{ZXnQd7`_h$I!uWS{4?0W8_dMsoaHHES`DY zI;y_Fj72(J_0`}^s|Q5MZN`#sQ26G6pj^?9WZ6Q7`E*?t++Os;C%yUX_XPVD^z>da zQAM&W2saeADOl-7Y~709!O_NWCaX`{(wOaa}=bZJGUyQ-l_;J-lZbo@yXMR7{0DP(TB0=OG0kFMrg$#{Ru_G zAzXo~)lu+7o3{!p3^|_~2stXGmQH4&&+10+aEap!^g2PXMlGE{ZC~=id#)N;b>Vg6 zon4|*&_q>od{1{I&^C`e3^)*+d$`xSwPIyy>nmXnFWsj$=y$0CmY8aU{-otdC~Dj` z`G`KHy#IkgVmE2blFi!}V)?-%Fy-p3va$tL_CKGy13RImy5fdXUbCWiWg@Bpi&lmS z+9aUYWT-|*(j&IH%U*M(Jgw4jqAQ3dM#{FF%A5koJeHeWUd{WJx~pDg()PA_^Ftj_ z3v=cT7MywBC z)F@PcWEVfNpPK8$|T-UhmylN~g_si_czL_cD|B0wcO&^#n@k)#K4Du^2JXQntoSsFB zw1KBa3$-F!$(JwJW_j1d@|nQ4cIh>hF!lU{w6$6f2uV%!1^T3Qu&cw30cSKTd&`?)VrX0CZSXtcj5`%? z$n=rNCd``}+Naqi;EfHN>7e?bP!VBmRAbtxnNAnw)Wv~eYFL@j;_OG6BMIj<%RE{v z)_!5ep0$N+%tNK7;}Dy(#(UwBYuVbe>S(e*9|au~)RAhW6rL3+Lj9QE+LGI^dX#a` zwv56^RXZK*;#ZPsU7w_T9SX;Iudp7~Xh^FA?|~dzRSxGt9Ct~7sA$bxX16e_ z6w90EVn`HfuDt2irX%3kBk0qFku)W*d6bUsgeX41`6=)TkHUs2_! z8zW;jF_bBkS89iStscCJDzY@nd*w=R1^8dl_6&7&PrtoD=c4sXH0so9$dN|9oEe)c z)R9}`E1bM(uOle<4hz(zCV$*Ta!2G!~mT%1SxwRTPybv^O{Z*ik?YE3)>4FIJ zLX27oE>V_#Lf=1)wKGbunU6|npo>w6`InrK7}?! zK0aSli-P=*4#fH{iSW0De;x=Q!x3+Vz|%lchu9Eu0I%3>TR1u0+e0^lXvjHSQB?`V>70R2A`vUbcce=t2BIFtSO570`YfBx%V zGaP>p;xoM%A3T`_{@EhF`VNu$W(mii#0N~6uEhs>RJw|X<1ePa)vt;ESF$<&PJGaW zX@tHH>i;2o9z>tJbpGng|IG8uBc>5#ob%7=Fs09aIdA*oH*7NTnQk*dN9AAr&-n-J z^aE#kk0U33))M0vojQ?%JxE=KRe?deMpV5oy4}bdowWfuc z^7nR_U$ue%_X!H97+n9G5ufQ4XB3etK$(1o{_w|t6W?=VdKp(NBFOZ&iTEGyF!^VC zyc(dsAGaSvU!y<#>EE>8#Ao_%Trfm1PdT>Z+)00`Z<%rbnw(goA5KmfPVQ$ML#Drj z9;hbf_*)Qv3*t+D8GeM~s+2hXR>a?0W_O>flPeQPVTU0;KWBO`r_Ueq!vl`bd=(+_pWA9UuNVu)2!B6Af9d#bh%f8!lr<)P;;Z)foR2d@(!cC&6Mr**7!6`L9!pi# zYd9G(bnZga@Cgw?1a;dB6{7`=9d6>!>ooG-MdVtF%>9q`iqg-v^f&jJ_$Q=HeEwIa F|KD*G@@D`5 literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/JAEPICSCA/JAEPICSCAInput.o b/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/JAEPICSCA/JAEPICSCAInput.o new file mode 100644 index 0000000000000000000000000000000000000000..3137fa3e10e3922bedaf07f3b7697e32b61bebac GIT binary patch literal 330768 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 z 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

_>?UG4) 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

  • F>ww z72oOWdcXJse*J$=eEG9Bp3lYc_e|XpZ{x@LAL42KbzfG0p2U2ujz>K_zGpO1^OQ z{oE-2_aoNN9pdQco8su_A#wEcWARu&Z+|0>e*Pkke*Ptnex~t$;5b1)vx=jikBIMH zZ2MbY9Q~{!e%Y_vYm1|w4a9plv-&N?(a%oe=w~l+^mC;6kakvohB*4USRDO)SseY` zB94B(CXRl-CEnM4`-vx; zVEMt~GyUhu;*~mD9*<+cF8h7XwUY1duUlUgUr@m6yd_?;h4~Tj6B*3Uh}ZMu_)Bs8 zy%yh#@5y6zeiLuuKPUG-VZW~V`wJPxv0sJ5cn9$;-E6yE#W(xsoSzj>@Asw0i5FXL zb(V-1_19A`iPs!x`CZ~0$D6+)Uf%Doo)WJ&%kt;Mzw!G&H^gzBcSpRmpEuIiwtDFE z!~Xg%i}*Od?^;59a%ubh<;2(fbzL*@{r+=n@!ozvcc6F^Ki>`$-{|+ZXNgxXYU7C$ zALqx{wL4dYY9@8_`X%@UuI$$X7C#xu6R3MPF$Eq>U~W4*+G zN^bda;(aQcPZ8hK-+YC5kCEnU#gqB<)!X8a`1AEa@uwGBoeSbPZ(k9wv&8cE#A`ij zp3I+b(dSWqo%V=0&hz=julaenhIm?^*Lvc3f4YbGbAH{}U%cK78|NhP)P8+9Q@nVz z<=2RR>aXKAi=UZg`2*rjy$?slhYhy;CGoYNaNp_lmuaXepN7oRuJ@^{34^g8Jp+2a@wyi^!(6~@Pe@g?H*r`h&)i0|_2 zqP^nJ`|*5IJbyQnVU`Z4%(2RIK*ll=MAmR}`4xRUvL@t1v_o)FLGugh+V@Am7l z-^B6nnq>9+h!|%Pzdp|;-ngudr-}HVz0F&RpYioLMEq*B<)0P*GO0(w*JAOUUjHTW zn{6z=SNyd>=I@B(-+B5>`~$yl^R+nE_0QtC-u_D*>ojds+dlgFkRNYRVZ2%xZyUx( ziTl%C#5nQC{O6_OIcnJWc8X(ty&?YB)0Y249P8_I@#lSg-V?`qN!IK?`?Ic~{hU)A z>m{G~hg~gSSsc&fHN;CjZ27k0SYKVlKkjMy3F0`erite%Vfn4%d&ijX5r3q+`9bmQ zbId;yzg58ef_OU5es!M|?^dtFuM?o?j0qh!^i?`J>|RWHvt`zAUTx*W#)D`sN4mtbSg7(9f6X zXFu;-TJatktbPIUJ`>H0iZAo)jcD=x^DSRr{FvvT7RTRH+Ee`7g;r;bc*^I@=ZNFJ z`f_pH-(DsDaw@B{NgVHw?-$4W-8%6rVB9@)yL>{~O}y z|6OtP|AAIk5A%!nn=*@E%x$^C;+U6m;+U5w#4#^Viep|{iep~di`Vw&%OT>J7yP}~ z*sssyZ2Ym3$Gl7v|E{d%TAIwXnIOZjnIOZk4_+MqLZ&k%HFEz!lRI_|Tam>q8;^#|SzJvIU5$0XR zmw5d_;+U6-;+U6N;+U7k;+U6p;zj*=aF00V<)Ap`<%Brq9P`ph9P`pj9P`pe9P=_r zyzO|~uUK)+%N%jc%QA7y%NlXa%XV?R{@NvuzxVUFI6mKnKi`A-`n!*f|2xU!^IdqI zjeIwMzxbZyF^>^GZ^-8^V)fICqyJgN(dUBVsj6C?$HdX++T!SQQ*rdUy*T>ZLmYkX zC!WLKr^N9DROY9DV*&{Fk}5-5`!>*7T- z+IS+`+jq=6<|U<2}W3ejXrRqqEidNqlY>^S{L3H;zc-&y(oGwXF6)R`J`t%%jAk{61|F@lk$X zrKET>A7=&e5euw-P4UF~=1s)E^L5%m9CZeV@%dqVOBjDIj9(J3lfuUNhdA!{ChKI6 zqtAH%BcJ#$exIba_%Xk~7bA}2s<(J;KMzh8M}DUGhmYI%Hi#p?P5d{{zc1d|@56s2 ze%N1!ej|Q2ziszN@&0~XrSRhgeOu|*u@8xVn8oT86>s9_;nLz)a#+5x_!~{kTZkX? z+8XZ06~ck=V_tKyF>vixh}Gl!X<7RTpE&x@ZbW%)be$p0ap z$FG}n`1u3LAB91zqaYsA0t^Wi(*Rq$Imxk zBRc8c#TWd1=IzbyV-3CkzzVc#*2 z>tgNaRN{sG`lO=xPVZY?@$x=jPl+SnH;j)LFXQ*?R*7Sr>%@PkZsY$zJcA$qUx{~} zZ23RMH?}fQ>*opd2Y+9DcJViS9TgIv>DLeC#E1EHR}JyGOKiK1#WDV#;_Li+W`Ot| zzfPDfzQNbULh<3XZM!SP7y9+yTJa|CZ;Pk*^YB6O+Obyuj5zk|Tk-hHmQUl?mFWM7 z(&ib(=llGX5${mP@|DED_t!OT#MeA&`Of0~-Diup_Tzk^c=>Tw=WX$s{_{cc?V~LJ zvv`Sg=D&*%_SeNld)wpaPxJEja~bjXo0)eI$G=nCReX;BJVm_pRI4*fe9SEKSH;)+ z_2lc~i~an6Li|dwBS~Lp#T$$@|4|&D%e*a)f8QuwANzgi&&?_Ja~APw+0F6ymmpuk z>pm{|^nP9al=#_4tWIn3f|<=bh=1YNV?D(8dw=lfXfd9eDXq?U$>Vx{l6aNemVa41 zc^UI}#82lke^0zY9`hUGb^Um_BYvQR;LoA@WGY`eMp*?07(qCZa; z5YOc6{YmjfgYEY>6+bh~e3*Fo^5&z(&-?jmrFhNGmR~DA#*g!(;-C3-&I$3;u~z37 zaom^uT|9G9%jfKG-_f5*e!nlD_}gwX?+C64FQj^b_ozVQ@s+?Sp$-pKp5MI3*gC_y}*pFckk-{#l1 zC&go{+x~tje!iCZ4e@?{{eMqcugPAI`JlcUfm(yDXZ0aQylN79~6Jk&ktwBv-$JjXX59^ zSp9FrvE7^E*zWJ**lrqsp2xh$dOst@v-@`Qh-14&#IfBn;@ECY@l@k&zv_$6_UnXJ z;@ECyacsAjIJP@d{HOl5-Lc{mE1Ay}$95NrW4kYjW4l|$->Pc$cZxsg=c{+bvE8HM z*zPHDZ1=MGn||KI-ye^8zY+W*>FbW)zJl^L@MB#IfD};@IwRacp<8IQlh9Jf$CR%fzwWcyVlZvpBZ< zhWKYqt)GeF_5FDMP#oL+L>$}wQXJd8A^vz>+wLFY3w>Ru^7}V9PIk_*d=~N5{=Ab< zyo|*oN{GjfvIi=Q7xm|dl)c?-*z5byq=`QzfV{rRlExIbM-v=omlW_6wxPvh5b{lpJMTYjYY zEx%teNqnAP56=+ancnIw5KrdU$t%R4@z)z0#iPB?JH?m!@vu+)t;V+9qvH6y5njh* zzViF={DtKA`0?2UAg@mYR8DJz~l zwbiL6-k_~{een#{%v*?m=H6NSY8uP;5ufhojbY;P4J|)T{Hv7aGsG{qGG8P<($52{ z#P9oYyIFjO_Y>FA=<{EGeg2N*OHH@!ejwhxmH9dGnm&(TiJ$W8v>W1Wx>=n+#2@tQ z^Hd}3ag4KGBl|gvc&B#e`NS{!`YIuwy}0Eoi=RzrUPpYn|NNBr?y{EeBtE%^c^~ne z70ri<|K#^G$BU<|V)MeW`EkDZm?AdL7sdN_ zGT$J+4zD}J@%iKZ;=9UNo%h7+bum9Bj{EhWi@)yAkKc;F;eEIx{*u=(?bmlW9*U2% z?N$`OpV|Cz@uI$tqQ$e!vwVH=Nq#&x5kKjDXemBvq19hu-2-%2}O3 z;;o-HA0hs|&*SsrU;BArl6W1z&ofgzhmU80_+0P93*v1(zgm2uU(atAf6mXtyTp@6 z*?#R8FYos=kBR>>)bb^sx9>O}Uh?axXWWw|J?xj5q2Nr(ud8dn|7FViQ*!8m*U3{^ zH1z)u$^B9z<}OnDo6Exj#jP9*rjVr@D~0Bljr}`7`7h zLt_7%N*+nRf;Fo z*YxYmJK{_HJo!7-?@0CY`~08}^L!Ety9dMTMER!Voyq%39gK5?_+S41;7W1i6U09* zW*gb<9*n08ZTGt5Q71*Lg|J`!{rsQCJ*e}vMMD3t=Z-w;bQiBM+kR7T_n=N!qtO4? zxNDtv#N*1_Z#w86)QK?){r~S+`$6mEp7@{sjURMT?m?Yy776{oC3$!9LGD_AD&>1n zK0ZwTtuTH_9LMK5@m-^BBNyD0CH>fowwrvC{eW?v_FO9WAm5wvWy$-HH-$7w~ zl=z%_R&0{^SAM-ZPrR1T?~CGz{(519_=LGuf2a6~R_6P~8#ORLCVt{s^H0PdNooFv zc+G0&f4c|$^iyW&fsuYa61bm2LLTRic|kw%zGaa2r5VZ}36sb58tM#g8;VCu;Ll5;4)&|P?t8?ef&nLeotOHN1#9Dr_c#k;q_2limH^C#Xk_Vp; z!TZ@CiKG4(;;4UvJgD!t6C!>m=lVJQ`U3q#{i5QiUzI$lA7i@}QHPxC_Yg<@;o_)2 z**$1Y(C54UqG5^TQD?n4>RgjLY4M_Ah7B0|i{mG~IF6s(?if!Yuk(cDv5uOEg4hlL)#?(rN6E?D*4Wy|4i~<`+d=GCBN14 ze@GtVOzXc7ea1NRxTBv7{KZ)X$)ipkanxx|9vp|hydwIFC)#vJJVPEFpVR#Lbi6qJ z9L-8`{CS-1mll}|7a*%WVD&nZ$ zKpg#S?;ey5j>BsH;u3$3KW&l)^-<@!Fm<*`odkbzc|`J9cjqOa==op5Lzp3Gse?k^)IzkBe^^Zr)IQzW2GkJGT3^Z+EhIbN~FwDyf6HDagIH%{mCW%-1C+zE?&Qhc~$YFem&e(9Q)f>9M>Vw zi@)g?p%dJLKKrR9wBe29!ST7u_v>A$gYAAKUc~Q%eJPIpx*?AJ`r94ze$2O<$*=3t z&nf<*xtcrjZF5`S+Dabd>@NPXk8`N_kxEu)s?;Ch_2VUv`uJQV#xuk7r^4i~Nc|O_ z|1(TJgI}MbeuC$VxuZWA&tsB5==olf$MfkZaXg>KQk~%WG$NJtXBK&IoMg>o9xrup z9!n6%`S4xx;Cve!>|oN@adJN2{v?k2e~F_$KGzfUC#av`^&g%e+Druc*1mxK{3v;l zzvTH+Uhx0Z!%yBj5sd3;0i13iCIe6;)bVe0%T`PrV&>QCtC z1O6VHg5tRERNfuqf641~75~+JiueOXY=5_s`>8baz(I09C4~F}xi68B|16%`%17i} zV7~~)>4!!L%8Dc3j@(-n$`2;@O@(|qx&JcctHe?NJ@SR2r2X%rIP%Fo6pVin<#UlQ zCa*xgguIbB>JKGfO8FV$$iGUyjPggwmy>@<{sQ^0;;5g;cQV-D7b#y+9QjVW26e^)%S-|tHAlZWw?@cWRN+=D)>qV1NH zJht12@-I`qm*g>?=P4gg`K4jynZ+^Ayy6&VNq5wb^lj9TJm#w%<=4}AhDjdV9WRdK zYAMy(Ky`LV9(DGKqs|4YvytljDtYwhZ*kOr$WM0YC;F4qJ?KwRAN?sIdGx0da%tdu+YmfPQKsV$EEYAlY|*B!+3 zJY*Z_;vQ@_!M7QFn=1KV>)V4fDZhjAJIHsEAD229=g;E!_p|PcBcH-Ap3sMKS#2Y^ z#5ef$d_MPJzjo1h9+y0}+mZ6GQGTenzpRXyEOolqwBIySyi05IMO5c{@Pf*}R#HBA z9T(}3ttAg$$JHESzhSfZf$8SEsQ&j<{}B1>*l5!C3sMJve&MP(*6EMp`11?DiDR9n z^o!b{|G{?C`L=VoV;)b9um_5Y&+vX$5&z*i%Qq0m-$VPfd$8R-zRlpnjyGWF_icY8dF=0R;@IC*{$dI9g8j`dj{Pm=9&Gnb+TXg8$Nn}I$Nshz$Nt8MV}FOZ zW4qYjNs`C@E)>W9t`W!n?i9!V9(514`xfo*my*Z+UKhvy-V(?D{vnS2P3td8v0WU` zx!o~e*x!=k*xx6_vA<2kvA^BjgYCXe`#VPR*xyOw*x%XW*xx1M*xz;T*lq^j_Un?z z{vH;`{(d5k{ry@T`Sby`yXAl2zdeu#XE)WLkM6UTA5T^#w>#c>=S7SHymZTy&fvZNp1 zqw!pmJhuDb8Vd#a!<5e@j{cN#*Z$O^{1K|tS@PJgvEmrdRB`0ziK7pz#B&a|jjwSJ z_UkB(XP@M;-HViepYp$mqYo+kCXV(Yr+cv7V^pUs`3K|;$d8kEmHIf3^%ckXhl=Ao z_PjXyHp@L2XRuwIw^v9W=do?#IFG$8j`P@Yah%7lxCh()koNZ;`3dsOe)B8He?(r) z9sNgt%8R2v)x^=CdgAC$Yj}0*KDpn-4C;JBo{Rh(d3ksAAIEJqacsA)IF8$9 z;@ICV?!kD1?c(}mu;g*vP7ud&J6{~f?aSggZeMc`wtJrT_qgP-zh}jR{c?q5Nl5XC3(k z^1V{$+Xw8yw<#Y`R1xztlCPZ8{44Q3#m(n@)-?)#N;4@v}e zaKEuFc_XSnRO+DqIB|T=XO8%zBW-*yN&T!o{_T>-eaJnOpPH17O=-X3HhB{oXGXu7 zu6>Ad528&eUoA|&3FVtnzE7C^aPdX{gfyG#JVkXjNFM#%E&h9??eAWy6C6J+OPe2; zd`t)Pi9*Q0(ElOs zxygfdF(bJ>P*Ob3{R#2q?oGtw-8+k~a~~+a$$hN&HupK=3GO?{fAf6`z8xSB_Um2G zpAtXhewjQtK4X*q3%+iN#~DW?+h)H&KjYmqi6^+{7f*CACw|hsmiQ(27UDPEyNO2x z155fEDxS=JqWA;u3&fMVuNHsMeTR4o_XFZ7-A{?9a=$E|+WnSz8uw)W=2`G#Fkfli zGl@Uso?kqjdpYq8?zO}t-CKxfcJC&h)qSY=!|oHsbGR=Mf5d&Ycy9L{;(6TS-g<@E%74m$zBPLu87cK7WBWUdnWPX?)k+_x|b6#?Osc~ta}UbX!ma7vF=03 zgY&>qU+)vigYn0Eeu4OE_toNS+;@ntbw41!&i$15diTrX8{BV+Z*))gYSN&SzJecv z@o#d^B)-`_zxWpSa^hRvYl&}jZy~kpY%HU$%FiP&zBRw=w3_w zl6wpBtM1*zue%Qw|G|Bt_)Yf(;z&zSBsB!-yuHM{eXC^`zi4$?w7@9xZe_=6;tB2x#CN-|7T@c>L;P*`1LBG9r^FAr zUlu>=eoOqgd$Qej-a`LRx@Qvq*ge1adG~VS7u{=#Uvh6De$~C3_;vT8;y<`g6u;@d zK>W7*YVo`7JH+q1zvG@ZsZGJ>bK+W9zuu#Kg5T2$9`V~Tp+CpbI%ukYMf&%EC>{|- zp2B|}d@D;L` z@PvCh!Du+?xqJksSAC0zXNP zdozJwBJUD_f88X18W?={gFAS*D>**z7I+MK6y>{-mnH8`9!=hZyg7L<@)+{om`5qdO%d>Q2v$(NI#B!7YY68Ved zH_2ZjkMQS>p#T1nz0jkPEV+NgCiG}Dc|7HtldmR^Azwp2gnTV|EcrU} zIP&%6@#GuG6UhB7n$V+(V`aq+%LgGK7{-=D;@fOEcxr?apZf*8Eo=E;C`APD($S;xe=hkkL^XIj20TlFqKh=r!iudu$m7V*k;jvtCr=>%lsu9A zGxC$<7sxM>^ZUy;$@zWZ2*3Ca`poacMw0XUtx@FszG_)=exDRW3+e}#0I&IZ(Bl#C z)4o0<{Wrk3`o(?@@uTi##f$oJRzNF6)=JjL5U-CMA#rOIS4G~A3(c*u5 z{W$T;84Q+-*UxDXFaDJKCh_&|iQ*;vMa)t0vYtOFj{4`tQU9j+ZLfb;p2&t{GVPQ?|UGR`eh}L`c=eHzq$A{f3ekGJi%XV#fYO$U-4&s{ITNw z^4k8-5MPteJWf1QVe{qUrQH+6zxO(O#qSofI*H<_b5y*6*S{pby`a^(F8-OKPukWA3I6jf%50YbNgeL$U9R0x_Bjj>?S$iPrEB#1hxEnEjWGieYVu% zI2I$xyP!tW_Z;Fle@2l%P5GkY@%~s@@~)JxBHqRyizbhud;{_R{#bMJZj^5?j`}g= z-6`K!9BX?Bc@N5u7Dw-5$$L?LhB)Roj=VSJmy2V5%HpFlp2@_WU9_Qw** z$5Z~OxL+1UoFtz>`Sapf8<)sqDSurYYx^eoM9SY4M?WL{A|N>aCs97NIQkh$K7;Z( z#BrSyMLwJIMa6M`E=xX#@>Rr`3B-R7dI!LNBQ>R$j6Y+r+i;=jAsaW9OXxg zBOgn?fbuiMv-x9jzBFFP2ipzYU)DsF zr99uSt|Fe_w;fH6*AT%&4a9Nn+njur*9g9~7svHO4Ef8H?<KX#IQ1Le<)BY%l} zBjvA)V>~y>H&OnsIPwwxA}u%$`96PYaf~ODd<)gjA&z_$`Buso6>sK`l_ke(-{7Gt z;!QmtO}^bN_|`zYg+JDu{1wW#7cUbuBFKQv3T;=D8EVkq(7EG{yOFNies%NlJBAXQE}u?lJBMbd2!?~k-tIt z>*Dy_=1uZ9DSuZSdA>jV7Ufg>&4}PI2ps2bzHiL$zvQ5N;5gUt{p5XAzbNGc$F()z zXWmcwDwGermOmCv{to3Eh~s!`PM%2l_Tstxu^93LlmU>mR>~798gvP(HOd@{#1nDW609mOmCn{vqXyinsR1%95X;d=>Fd z{#Z2mN0e_Mj`1`n$2l+fZSBP|o*42|RKKq{#xsQcH04K&NBd*39L%fnd7DxUu z<(G>iA5VUk@|(mlzX{}@P=2p?q(7EOeva}-#qsA~PLiLe{CRQYFOh#r`Rn4*{@6|O z&nSOa9QzykU|>=%IQ}nCKDA#k!?C}S@!TIn&hLBn70=-HpG#@K2>RwPxk9j-+xzDM8Nn?Q4^#4^^=Lbs)#S29FFO=lku`$#Lui z`Bmh2P6+%pa$M^Lew;i@0RHtAc~)T3_j}~o$TQLTAFoY=hl`TqHFw}O$#VqYU+u|r z0+YTEB`-}rle{wdTJkF72go~+e@5Ps{2n>Z!NJ3sXuWr)d@=Ga=aKg!=lgr($m1x#gnR+{ zE948wkB~1S|B`$$`ETS)$Rqt^5%ggxc`@>3F6<@1uSCa+4qhP)*?UXuk64*OK92kq^3&uAYD0bML9T_f`++-vRwW(3gOY z-vfLI`bx~(j}nlINhb|K-clOOZS70#v0FR z&=-P^h3%dLND=p^*(7%NIFM?jPQ?j7>*MUA0 z^p`+C3iOvjKO6K{K)(m{0nk4O{Z-IsO-U9sp4UJ>7WCIaKNoZy*IWTQj$c-Sj^mVd zpyPOC6X-bZsQ=nXoH)L4p=taJ;6x!~AE>m2&Fds<^QzlWps3_Qw^QSy(gwPnLKc+* z=ynQLRC+JG=%<371^qP8^PtZKy$y66Ulc&c@kKA_IKCJJ z9mf}`aS2T0&jU9D`kA0-K|c%hJm_bG-Uj+Ppcg>L@kKA_IKCJJ9mf}L=hXOde37x8 zR&^X-90qzD#IpeOD?q;r^eaKX7xeiGvGh3TAg7)K{VJDPrXPT=`Q0(^Q_wZP+n1`X z)6u;8deF)n_&jDSzGvuY|D$o__{$KSP&^7<}G_#~-plg2j zzmU&*x;y@T;OXvv9=Ep6RLjtp`@h8*p6>ql@MzH6CBI7xLDzEJ{|R0Ky2kI$iQVs9 zj_dx{&;35-^b72`@+_32pSl0(`@qxP|M6{Y2Lo4*``^78p6>o%Z$HpAPInA$0$s~; z|KqmU)7}5Ib$Yt{zqS>g?*5l;ou|A1Q`-PKj+d+LV5YJBTwX5KgO20nCeVN3GRt%^ z=r~^P1ib_DuK@j8(AR zD?q;q^mU;B3iJ)2-wb-Sog6543F!5p<9N9VbQ~`)1|7%CouC(>{1u?z3i>+Ge+~Ku z(3gT><^Lz>IF8-~`oBZ|E$n1b>!tD3 z*!kRUpg#clbD;kR=nFyb0lfqC2SHx}`a_@(fW8v+O`tyvdd5y_HGUjl?+&`wYY(ee z4s;xMw}6i0?sm|7f!huGD$x5tUk&;Y=#PP(wv%s-|8dZ3L0GH-i2==4F( za|Hc(7<3$`SJ_}p<9{8>sRLa&ADpA_M5CH|TSe;e^nj_|h=|4tG94&t8@;qM~;uSNI^#6LB{ z-%b3}BK*sVf9D8)5AkOr{Jq4#ON76V_`e?E?gnw2< z{I$e?c7(r<_!mU@8;Jj$2!EFN&yDcsi2s0y_HQKq{UiL%#Q)uh_;p*?gxk;I5&Rb7 zKO(}vi1@Wk*KfFKsQ+js{-y|i8}XkM;cqAYQzHBw#Q#0fT)o{iRR1pGKRtq9ApY|r z_}#?+U<7|T@jn#d?;-w`5&mA{e>lS5NBoaO`1^_fcM<*p;(s*4KS=z&5&j|KUlrjW zCjQkC{*A={ScJbg$n^TZ$0Ph{$*T$b&ovSLD&l`4!mnc;pZ{cpU(c0&zdnP)^*e4F z>VIm9|EUOn9q~UM;cp=R^JSZGal2_K{w(n?jPU1(zds`WM&kc=guj{ie-Yu&6aNJf z^=~2m???C-5&w50;%_DXqa*xn#D7eLzn%DxjqrC6|8WuiF5=g1%5C><8ruE~#D9E* zznl0^i105b{v#v&J;Z-hguj>gFO1lJ`-p#0gukEo-;RiXfcSqE;U6UaA4J4IMErUU zgWK-hG_?H<6aRe?{*A={e1tz`*H7T_`-KR9n)qLe@K+K4D-r%0;@54$wY!^!+CM}5 zuSWQ5iT||-e;x5(6tVp^5dXyy{w(q9HsRXMO+)RMBmR#g>fcEG8zTJ8#Q#ZzKTrIh zM)+HZ|9>L=5#QJL`e(e+7dUMmz`fDTp&m;Wp#D7Ud{2j#qMFhW#_`f2WtGAnm z>R%xK%_98W#6K>=znu8Di17Ci|M&=hFY%`%{C&j#cM<-6;{R%de}MS6itrB-{|_U! z-y!1vhY0^L@oy6m|3>29Hp1_A6g>WK7vWFa4u<~iBm7mwUmfAEA^sgA{2AicYf4Qn zO+)=hE%ARD(SOwue?G$BK>Tk+__M@+T7*AG{D(#O8;O7K2!Av2*GH_sJn>J8@V5~E ztO)-i;;)VHw-W#42!9*#H$?c`iN7ww-$DGdBm7;&zi))UK>PK-rs-rL=8;+}I|)Z|Ty7?q~Tl9rhrrONmI`eTozj=JOny?#uu z_jcz4HHn;>E>q=8(~e5tojGc;w4ix0&5#8x)AzTT-~A5cJQ+7*(|u)HtiM+==ikT6 z?`2CJ7x3R}e7pR+REi(};(-653jNxqEdDhW`t_P$=I^i2|7O7ddWHV9z#0FY3jKQp z{2x{5KOx}XRH0wb=~?_+)=R@kD!2ZZ1pE^#^sfr|r&j2HC*ZHG(7%=J5Ul<)&0m!? zL+M@fVyX-H53SIz*Ca6hi513wX}~|<{C1l_DP%wX+XDXc&0k$|CNsYOU&YV*&#phq z2a;Srsr~0Yvh4St`kNxF|K-M?Tr6ee&FAZPV$9!V{yj#l#knM^5%Ir8VDT@v_^tad zUO)C*vH9`qF`e;O8-K466y;ABKjRM){{4hMKfoV0KHht)0r>U5Cg2~xUoqU29$zr| ze*K<@)xW{~Eohc`->=_uFn_`PcH3U56yN`%_*wf^>57$v+h30?`|D55jQ_ClZBi^t z-+cZT0e-FVar@ExVtjsWfd8?9_51>p&)-%2tp3e}ulL#b{G$T=npp{TdxXop&%ZL@ zpJD!T=N~@`#NSTh*ZX+<_?HIwryIXeCjMIj{2szzMff^SVB60o=i;Ol)$e)~_5`=43;A2xou`lrP&A*8a#agz?? zWBv6$D4#zgz@ONVlw`NlxMIg_zw-nB-OP{o>}w(Z_J3+1{sD_0`yajk%8&ob0RKwk zm+OCi6yOgVANwD@pUdYj3-Ei4U#|bTGr-T-55UOR`@?+x+5rC##xJ-2HU<2{=Kolj znEdtkSs?yKi+|Y6y8o?}c|ZPnV}ywCq> zfS)=bF`jCEH}Uyx0e-Xb^JY~3OET~C9}nx7`1-tVR{vuvI&O`SMiUNa@T~p& zjK4EhR_6WsZ!Z3EqG!E)gM|MTG5ht;2Ket9e;2P@pFcam-$?kI6aK{ketJ#}>PzaZdWU7`OB@w4qOOWJQM(tbAw_`?!hboy?=pV5?@y;y@%FpR{68&4p3M01PZmFGzl|1u-u$}$rjz&&7k^sv zZ0;3YcT{53&oKGR`acU&?3n)F`TNl<^ByMkn?U@{pCvinec&4Z?j-&%1N_v{3HVlz zud!m<7~p60W(7&DmRb3G68^q&f}~~o$G=-E#u!@&%Y_af7AG-|MfGd&+iQI+l`Owe_z7a|Eth4{r129xCB^^ z|8{`ixM}S6H1=zGXB9MsN$T@|3iS^ zW&9lQXA}Oe@&modW46CNPE3sDjz81H&({B-@#}zp5aFL4;5Qmyudl?Uv0|DZ;8)od zk*=T7_Ww5F-yGndZ~QF6WZviB5a8DuAM1ZG;lCQ--(4YJpQFgyznSn4CHzU%eEqLC ze!2FaD1OFoC+$Cn@Q)1e$2TPnFWuXy9f0Tq#dRG=E z{huM${&}l^w`JD;??h7n^8@^?Pfm=s8cIl?e{O)E)|*8o;rZuDg#T!OpEv&85;>Xi z`40v7ZN|@=U+aGg;aAHK99pKo|Ex5Ax%S^y{H*;4jgRerD&gk>{AH&kftPFlLj(Nw z&BwO?T*6-x;HR1se!2F)F~Cph&AyWI#rITk{HxD@^!u-m0{pqg&zj#&bX{TkAi&QX zANwDD{-e*|M@|s5On?0^G5&rClX?I6vxoTE`tKn8GYS9P0RM#w`DX_By@apNU-awW z72t1a7yiiC>!Xsk6{g<@{1eSzg_&jE_dgwof7s%ekBdq7Uw!_fAODt<`TG01@wf4S z-ePJq@w4@p)|<^Gbr;{0?YD*SX9xIorzOU6{8<71a>Cc=@A>t=Fu?zo?YLQs-%b4b zpBLaa>&^0#aR1TgU-|s*0RP9vFSq^tG2s81`O9rTuLa_7xA<}Uxsb#^NiHzbHu1kd zDj2`E*a{%$5pr7eD~zdrxM=f4)<=Z&8!mNN3@FTWJvr}be6 zl5)lOWdGHBm3;nIQ~3ICGk(GRZjx~`HXSd1w*DK9kKh0NBjL{u@H6uhK&{8ic+2{~ ze2iZ+A*p}f@@xBFM)(ViznOPn%NyVA{|=jRGd8_F5PygH-Tvon{{CDD#NTT1I4_uIcvVf$Ymh`+bO_%98_znsMXa}s}dApU;i zm)n2Vy7)(}C0WQPLMEA%-u>lg1Mv@%?f;h~{`ZXUpZ{m_3G%=aIhpag$<$i`eyu)i zMiOqn*Ajliv}F79`KRZL_SAdHr1b9dXNsR~f6c}pHmB}C*Af1$0si4Al*{@7C*k;#bW- ze_m7}|DeqO&%ads64sdH_|LBx{gI#dmJDBi!&d*H9TSJHzkv zlvBpmb$mD7Vwc44Z~vL0B!_EnSBk%!5x&QzG literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/JAEPICSCA/libJAEPICSCA.so b/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/JAEPICSCA/libJAEPICSCA.so new file mode 120000 index 0000000..c40f2e3 --- /dev/null +++ b/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/JAEPICSCA/libJAEPICSCA.so @@ -0,0 +1 @@ +JAEPICSCA.so \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/NI6528/NI6528.a b/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/NI6528/NI6528.a new file mode 100644 index 0000000000000000000000000000000000000000..9635a64ff5bf31921dc9f652055afb03b0d84c60 GIT binary patch literal 268632 zcmeFa349gR`8Pi2CO3Cj6G()hhyfSCg-tdUF)SCuPFPeF4I#OZKuBU11j`Z)C=sb* z-CEP4)!N0nv@Uh4#pS11TWeceX{FXyR4Q0;soIM2|9+oyX6D?<4GC!9_x*o9zk!+a z?B{vTK4)fb*2SkyiYS%lm_s>Z9pxcby5mt_#K{+WzH_O%L{at%oJ_AY=|+<_ne-}? zZZhfBCf#h(ubcE5lU{4mEhfFrq~9><^(MW+q&J%MW|Mx?q_>##+a~>vNw=ExR+HXl z(%Vh?J(GUlq(3m}k4*Ywlip*}`%L;1liqLA2Tl5rNgp=pqb7aaq)(W1n@OKC=`$vM z)}-4_`b(4k%A_xv^d*!2&ZIA!^p7UpVbVXFbf-yQGwJIl{kutbne;7_zHQQfnDiZ! z?ltK@O}fvd@0;`klYV5Cq-V#-x2s+RvoNne+sc_BZJOlb&eOlTA9vq(e+P z%%sCjI?|-0O?tXX&oJqkCOylf<4iiiq!UeAXwo?*ooCW>O*+}6^G$kzNvD|fLX%E4 zX^}~%nRJp#%T2n}qzR<+3Yy-WQ_#3Kx1edw?t)G6-33k0?MB@>0&hA(z|FI>3YxN# zDA%zu6g16RDAef22(du(*@ji1h>>R-zUG0?HLNCR7zNKYG#GTxkp)dpC*|I>!#CIX zOzs62K7DOVPuuI=CdtRQ#~@oc>~Y!moekUS&a%DPGt_f0NpDY@NA@Cb;dMdddkgU-XT#4wP4PW1>qsx#dov5F>E|nDY z%xsLmm-$fqy~cfN{kF{Y9B2zRM;S^%Q~Y&L%l9(Ay`XW;cBhV2y4^F8Qu677&GCjO zvc!;AyANs?=Dki{!R9VHn`y_n&!rzX4#+f3n%uOnpy^Kqn@4EA)^1qyo|C!$=d@=+ zF-|ppsxq(NcCavZgf!sqHiWTFhq28HqopLnxVDurc90heV^X`q_Y_&Tpd}+f@Wos+%_q zX;B11IkX~RyH5`6U_B&Rl0`79^&&tg5q78uirOdw&!MDYvtZK=lK1ATIQ&2AxTwaa zXA7EsBlAvE{PD&$k2@^}gB6&pHpL(RWQRYBJq4exmDXrAoy|kOK*QX;;dL+`~Rw$G1dhwykPTYQQSPQ!DJTd>>ky4`|SEC9kbdi`*Cs= zprbafxli}_`+T39;w>fF<8OTe1>z4m1)Fro+%yk8{y|*^@moW+wb-sL%s_wgGtuQ` zp}JgkIdMGDGhniqp8mpR8qC|5J;TP0A;g={K844a&vIEqn>H}XeCS%P6MRgT3ZtLO zT>lS>dNM-Ie2C>hrA@Mm$b4wK!3*^K9@O)OZJArQWj?g6DZb0MaV-}i2HPl^Zi?^v zVm$3}dP5I6{jMX=A8& zt1(Z%4Brsp@Km*&M8(2_HO;`?vCE37U3O6ua zZ}WDef$8YcGLvWj+JiJO+gU_pm(as($zBVy<-8VV3l~^xtjnHZlQJ!gD=V>N){4ZN z>OX3lhh@lgE^R+8*lbz>SGieX*@C9}eNFTBni)m6T3M}uUeGjew~?16+8eSOmGR2U z&8+Q&_PjKCEcfzY0D0BFUhrI;3ua7#YhHKij)ym|7i=;UBAVsA-A%v6^>w!4R}Q>{ zs`_+K4up2gy22mv;-89nzeW*LD67rE0)AusK$5hUapE$Qy|_ZxY&|t54hAr9#z zaa)z`ko-e;;xMh^mYbU6B-e4Wc_ARTE}et+g%-@i84B9&==8%bp~K1LtFUnxgVv#E z``pCia;b%sy$XTL)K$Xf=?=Wmi z64@#41v@tHESKzf36{4dzrcYpB7fdhJl^Kb(u5d*FR%Yd|CKu$m&6~Z1B!X7oX ztm8CzvIh>VJD6;Nv|Cs)3I$k=$k9@(;JIz&Xlpv^ruhC3Gqd9RHOaCwJeZWFRejR+;BM$+f}$P4WGn4SzMIC7~{oiy_M8!KYX=;J(S&ecssB>rApX z&HJb+%lN^4KCT=$#rJK>B2zX{Ki%XsZ7V2$X*Xt7ZETk7`DbYqXcg?Qx+1j+sT9iF z)I05|6`e_b&S6>X8K6b--GV1~rxiTXn$S9hGA zr3q#JOzMRWhRavCzm!oQhE>)FT*!PVKR3B0J)7T2Jb5mkPjU>%hd2i0^BV!5&CgX5 z#d9Edq!v*Gbv?u@o2Km(n|`yYK5x_X0UPJ--5B3JabtW}{>C-0=WndvxpDdq8Vzhp zojo+ntE$Y0a977t_wTGhksHD!3ib*@GOs67h{1GLW? zS}k5O$@fN)PHVgcHcsEQG5$KX zQjqM^w-|WT! z@-|B3ZQ~KD2Av6%=>;{PNKW@Q_xLLC#)F^!IUMuZ`!vp{!zo4 zkDR(A7%vq09K3^>efMM=;(-HS91v?*5_pleq8&-4{do&*(+g9^(j89pcI;T*(E107 zghkL34{$q{yIhfYAgGS{4l7o@99W)~U1qVlCDW{+QZH(_}ShL5eJ5pEA zQxEgL9a}ezyIDN%_*INYJFQ9Zg@?`Y-+0r#JO{$Aen4sB(~Z9*t-na{6h=Rt`3y)izLb5gN+k^0$wY&pnS!2t}T+fz?UH_)|-hbQ;&^7@V&%nw_%Uv7DZ2*Y& zwnrXK)pd9-&KJ0xJr}2RYK(2M>FG`Lc7gEMB&YsrIdvVIdw&jz@x6PFv313pU6~?~ zp#?U@_oB^@w%UAqYK-mW;5B9>{4rYt&4FKJ$Qu~2~-${MYNohEinr` zwC5E)baUU+)!=AMZ2r12B@dvVZj5_lymqd)-MgchOOL@Ia4`3hW#Aw>&cQr<{dA1- zJ&lK%6sF59T$Fjb-S5X;xLe#VX!5&%J6>#S@n%@kJ_^^2UbmIW?Mv;chXKSf_aF<@T=i zy}}KwhdtwssZ1~_Bh%}&|9knr?*>b)cWb%SA^}Nwsg;X~>Yv!ZP1^1z z&FdmEx4##j+u!rpnA>l_OM~)4DT`Km_G4%PdZNcFcp$93hn;e6qv)0HW3qJtsz;DY zK;I#K{i}OAt$+1ej}?vfbA&dhV4&m8n*&BT=b z_$YMKy&qh#Gyu(i2R5Ex!sPrC-Zc3IA6JSb z-;4LQmYXi*Ui)ry)6B6p)iJMfS!LBFmClUGBS#DyJ*cF*T1!nVt}C8XRbNw*n0)%_ za}sqEswx+kFR8Cdl#;WkxOTw6yv4=k6^T;k>_pv+`sIrfH8U5_DPK}qTtQynGxLVl z!xWgBICoWbV!)7k;moV7g3HX=Pl-DKl>Z)4G(9-n8@~WCu(~GO;tg0+2tEs9iuT7NBtgoxCuNz-ewJcHN z3>`GYl%mer8E#S}_l@!3d;!uOrmSYBgKDdsK}(94JA+DVRyc#5to{zSpq%YEWyVEH zS=6$_HJpnx52tsK=kY0nXO$vHS?crT8v{J~Mi5Wh;K}!Yc=EL$o}J9u87WUbhvnJT zoO~OIC!e$P>}JmHNO@+PGY2V8Zcp*-VNN8zuU;&)lZP`OX9Lc|7oc+Tv7)@DuD%#e zsj8|XPdD<^?Kv@E`ncJ16JXZW)R)wGEq(F{1CtGgu$1;ESC-e67gwN(v}rV@zSYJC zAbUK<$5Vg*Xz-x`@M*vP)vx5m9FH|)goHJ8_{>F16D4)y>&q)j6E$-ukJM!mk2?l3 z3ZDFkP%*?q{8N+c#igz(qAs27sFhjjsLnC>S~SYupz-9vw&jfLnsr5FLYIt55CBS^ z*Ew3_FQ6Wd*7&P6yH$R38~n%H;O}gMzrPJWzmwz9n*U?k;4f%{zq$>6v*EL!`Q<+~ zDF4UX;O}h1{(i%kcQ(BGEeP!Q=AeXwhZ_U5Q4gXeKKXQv0pwBxEe_j%Qme1ec z2ER84dK{b|eE+5g{*5vG3vGVnJm3BT!{>LhzJBCgpTD{d`^|>m$JU>(^FI!>#|{5- zn_tkF7OB@VB(ofL8M(7;xl6SS`RQh|Zmk}VGyK--aiZZ5vh9}#_DNQk&YC78Y>Z!T zJ4borEaTwGGFOHh;F}vpjlp!G*(!3Cw(l8+vQ=!d$~| ztzXv}{xVwh$}^%Jr~T^E9rCF!r%x50m)4f`**!T-qcTZ=Epbez`s!wtXH_}k#u8GdW?+VySlA29r5?D9K5 zXxA?reqWovAmD#w_`GlM%Re6QbA-|Qygc0Sc@N?1PYd+twxM6w2LF1)pJm&R=!Fm4 z=L3c>3udqVtPJvhxefkDZP?F|igldU@*i&at>r(r4St>B&q#`IvIHRg-|(j=@%6$? z;y3)lB)+Zyj<0oQzz>a@o6$aZE#x&6k@ZMGfGIXCIDB$;x@@rDvdTXNId zDOYFYe#-TySAWPi?FY)wnE5uhQ|=ifCo`*MFS5lqr{^alcRPcz<-VCL=Z&w6AeK~q zEE~PN(f2>HaE2+{-fC@&^|Zk7Pq6v+`p@u>viau(`pt%)Z}Yzv@E>o3zq1Yd`whRf ze%zaz2RKgQ#VapseLlwU^KHK6-vYyL&Hm~(>^HYz|8c{YX6*TA-Jk9}2w&R2;lFSD z&pLiPxjh^w3lQvGh2_jzgk;*=YsS?J0Jms2=Dvk;b;e#>`8KyR-%>N49V}nA$Gyg0 zK48B-t@`RLH=2&q+B*2;Hu%#FzqR_PFnme8`ZD*kESIYdpTBG4`^Rx1J$YPspdE6I zcc+od2khIk;@xlft@+zq8m`_i^Ytx%#~A)+Tu*uN(BJoCegmQ(rABUy?FZy)AVvOq z!%wvyI&eUB&B3~TMs%ZczO4X((tSd7jWaKLy>g0=#BGD2_8asCTHXIdqqn%Y1-K@1 zrR%&KBeFjRwfkMI+jrSw$9YFZA4_-st(qd=Pj{|PCvpq#f_~2nvmAu9Jo-cBJZp@* zgR{mt=V-3m^~lN2%n;1j{`WZK61bI*=5QRc;{PiA-z|Z&Crmg!Z@}3z<_*jnK4|oy z5qZOg3>`6KiR{3H1S-zwO zPy=q$e6xmh^x(CkC*#4JL% zzsjAK#m~23f?+%?-&XyF^$%4(+#bXD`*hMe1v|@iGvXsQVDEZim{s zQs-pnb2JkfInq`0yP!)ctkY#7S0&eoT+=+!yZG^_kdj257)`{U!bP?_l=@6P711vP zIO=o7%v2X}9n~>%7ezJFNsx#}vLcpPHyi10BiXjjQG&=z2af7(BS+gv9~;RNYeuK9 zjr6mTV`ExHky0B;*vJw)pE4UMw~?iGT~*kewKlR&5K~tTHgdU*G}=1r?Yf#IWjDmH ztI0mD>*~S~zA%JWh49)Cen|+IA7yozpI28?(vC#0*EKRN&FV1o)7Y;vHRpUm(lv6C zEmmYB3vHxWbWHu03u5wFY9q^Rq{2oj#hTHnvXN>Vxj4=0SG6|hG8?&E5K~u;HfMv) zxx(gLnP&B?new1{j$c=^eO%X7X$W5u!dHawRUv$J2w&&pUR`ZYdlmz@u7qoBr<UKMvJ8Yfr*~p!uW9sT2yAtlTk^5}qCpL1wozDX{@}P}8WY^WhHs_Z% z@`50yu6|`BFWSg&Y@L_vy1Guvjx$x)1K1f+nnrlt6#k;Wyb}DuB+F4T-VjU5dL8Z zk6^BG9O`TNXb5*hcqbqC>Z(_IA1pz1B^+ftJs_Q9V4mijD2S=6!FD)9Y@MMtGE8(# zU7aq7$>$6k8Dk@7+Q?aUKKV8>&PK+kTVvovn={Ww&Jo1a)wwn@-$u^2buO^$s*jZ2 zSQLt`tG+(2%YH-%A05Ka4&hTm_>2%f+sD1SdN=)-SP|+PdCzuwzZBb9n)8Jq-8GUH zwWhUn8;ROTMwFFp>Z+?CCZ9|j$+D4dHj*vYj82Y?9AP6pqE=ny+MND2GC&YhR|9R% zNjB$Xn{!Ik>Q^5~*(rokRFhA-qor?;FC8_i?YTPK~a>!zo<} zBW$O~OR?o^&O|}7H8R-_XNs*e)kda?j;X7;b|uWSk#lV1TpO8h=X1V|Two&$?7F(h z=2Y9r#e$f+szQ-R@iklTFP#-Usq@NxUL&Mr*ItdH9k9p7l-gf2rm!e%YEFd zt8N*`W_fj$ondvDybN}WTwOhV1(0atI$B!p{of<3o5ngcta@S6K@(evb)Q7tTd?ILoBiMrcljAZ7)B zu`O0($5v}2b)sV`YqcPaD|Kb95$xA%IQ2Vftzb^N#?}co+?4%gc3zj;NTZFcx9jT) z+lw1)v72n@>ZANy`#UHj{fFbM+Ga zRfD4|Qe~6Heq@UmMS3F%uTa zmDV(lEI|$Mi;2?_!@nwoe~)+>__Uq7OaXqi?-n;FsH=rSR>*bxbv-{x3sDvosZ^cMZ`M{bw6DuBo{j(VgD|fZAB#PLx_lzuHCOJyj>BAJR)Mg zencntOp1u>c(nmh<`R;N9g(o_NM>6R3HuNtx;0cs7T&IiL>>__Uq7NRk|UbKh|UEq zmylfSh=jc&nQcWR>_dp?d!dLdyj>BAJR)Mgenc>__Uq7Pn;sLl75qGB5XLOm6Tge83L>Atzh(sO{ zF<%`~r2F_iaG>`NzFDA-CcS%^RH3-lT_*aE0joa3TcPd;@(9kHkEkLKl)GO>o;0}M zg7XTw{~@Ww{Ky~W9+N2~Mj;PWD!IT^H~spC{7C>uR$E)7{1>g#ZhJ{u5TA4AZ$Li$c> zbfz5%_UP$8_X%*G32~)Ei|$Tv{vP7ar|vh9lll)hd~E2aw16#nVe5RI{{Wx3k@8CHRSz58>BjX7}cINIy} zYJ_DRqsvl9={ck3p}_6-l5-w)oa1@PxsYu|gC!ibHCRSaV$7+bnEDj<(qJbimoai- zsS7t}HQBPzJPPc-6zRhffK`Cf&X}7XsB*3#Rq#9y@>?3bzQgjmQ=c#I^*wOs5xR6- zt6u*W>{lpq;^BF%oY?tL_saUoufXe4*r>vpGo)3ouLOHDMMfT;*AXX{1$EEsOVCli zYzsLOHjc-cGp1Fq&jfn{MaCbV*J)1dSu;i)e%Z1f0~=@K%vso~ z*F|6_D6;tQyv}f9yDhJ0VhH=PUVi|0KBr3+t$KX~vN;N8PR-$Y9dlyeK@MJ7M=?Kq zS+9QpckZW4D_iyY1+afhk+p~Cwd=&@Lf!NFv9G}Ei(sQ1XU_Uoy}k_WD=Bi-;d$M` ziFJg!=k>*yHNR|G=fK7>ICHLT)$37UpGlD$56|n4PHdayb$`s#U)Jki!ks_RrRG+> zei!TyDe~RJ^SYB0TLE>itpD;Ac-;USn{ej*pjEGL2m6N7(4me-T}e|fL>!ktg((zaH;&O|mx;LLgU@VxHo z#BN3oURfXb3cUUntah4t3A#Wdpyw*Ii+w7tWkra4Gd&!BDVAQRE$n9L8NiHz)R}<#pc^ zzr5Gaz@6XFrG0QIwbyTh{Vqj5hR9)f-5u{=LftFtSH1$TFNKW_ICJ*HrPN-38|>RD z5?Oj!US~V86QJ&Sz4@dsU)Dol;|!cRE?i3O^&GJ0Q>5$Rd7b0Lc3NIfIQh$a{TAGL zpDyLJ>U9TXlZi9u$iwsc2q$(Oa?oX+ea5bk*V!dwQHA<$JiE-lN6)VG@6oes3F5{A z53H`?l?v)s*twH#<@s)9Z}quyQ=WZ?kLP(1R-byir>75Lp;Q1v*d)iD|H;EnbsP-T zc+oj+oO)!ij+64S!GZrc=W|QoNPZ@V$yR zNE&`X@wP+5kEq=~{Dk5XS<|0ZTzG1DyW(PYtq&6}arLeQ7_JQlPAbI_Zsn8-%UdhoBJ%*oId z#9kENH| z%gCk@%gae?5E-=`yp=v*Y-s)!n!g#mo0Iu0X(#RL!k5Cjn|v0O_EYbgr48k-Tj`IS`VAKREy7uvev1X)O1PV*-)6yg67H_)-?!i&6VBH3 zyDj*qgmX0gehYq>@DZB+hy_1ExQC|y!h)Z99!q;oA3CwMkQE8V^NKzYpkQjT#aRFEK6fK8q3pI zFOB7EtdGVThDr{{YRplN#s?TYV(?Q8o^J4A26qiU%HUZBA7k)5Z@YRBx7#zASMPp& zfUCiQ7*_RE*t^fk*N-rd5&GOKTl|IJgwr+rAYuJ@q0hsFJ8Sx5g!Q9_K2H$N z(ex(?=VH2noio(an982VnKO*Tr%a%I#*-)G#oxf$>v41Gi{1zCGmRpOzt!0Zrzq#r zuCY)^HgR<<*aImtn)WeKA=e9dRcC@)kV<(W*`mAkOwI^G%{W6x1=~u(a(0Yxb4r zf_;8S`A$);1a(!iayA)#?(&uS_ce8{x-A_u_I&VSb5Mn{wi=K(=%SIPLFLUm6J-62 zD(`%fbtB3vVm<4IlUGVuKcmVkr+l6?oV?T2elQ|X${Fi7oVQ;A_JWg zh)kjg4XHE1p5Te-*NpO{S9w8f{fPtBHO@zA(hA`ibzIpfc;O3NC8?_w)j>uP!FAP+QHmJ zuJqyKz&X+9W|N*Stz8OYtk1y$8xNrCCYUe#ofNc=0oiD(;NqM$EjgSDRe;; z^JqnuYQp7unz|HW=5YMf-%j?;C&+SFk*tV_J^-;_c%r%svI3pH1-wEmO~hV>$XmWx zF|$O|gV=0djm2~k&46P)a7yO66xC+6`~pipD)J*CJIR;74}4p`gz|S5i7Oc*zZkL= zl)p9bqTG^-iPY7QxGp4BO(|&%kt|oFehP`7ds4Z~TfgzpSB5@$@EghMAfkWr#JqWF z1Yf}GK^4_~{1vAs-&l4plNnU*sZu<4KM~?XaOO1l?NC2xGr9JRi{EOs_8goXne>vx&5ql4G?Z>E>3wei-a0DDs`d^BRwN$3b0toqfhP#w3?@c1cjyNw@2MS!dT0lo3ncu1oRE zgq?XfbMEln(zokDVd~rURthuSFIGI!{ls!`_?cgggZtpz$8_*Vhv#5N-$6W@yBUVO z68ytg3!_iXihSjRYk4m*uKOM``Mt{Oat4MT$$unIJ|kinjgAJ2Dk6Ey1#yb^ZIYeTuq z)jPocMZX`1-?@ClR}WLUt5ozXbbOqKg)vh2w$KK3A_PuP7V6G1{1}{0?lrv1I6WIO z7gFvi=ChrJq(yG_Me4zBNESgvklxDc*Wjf37TEG`kfS;5Z2FC$2gnh#nzM}z(Rq;^ zSx0Hkc5-Aw*zI!|wv+oJuj1`~aKuwo28~E-8Qp78=6JI*>-7RH=v7*;mk8@MX0JaG z)@#gOeH2lvOQ7k9-5t%V+eLnVoaOS+m!qU_k z>RX^Z;Zd#Eq$Df3(72BG80a~@=JQI9`eQzRy9{T}F2DGD6_F|2kHGm4PMez`Q%bS> zI9SDLbJvh7xd3 zLEq;acmeF+dLp{b_4+xvEO_+~aNhH|(hPb%fW^Tp0Y79kV zlhU|sGRX8amY1tJbJCbgM~$2(NGFY4n8wQPtdT`&j7HzO#?Dh~k?neB{SNC%YCe`w z*MqXvqvq}lSas@Nke~5c>;<{ZS1*IK{s#3j1pbjiNPL&35|cYUDOfcDapBDQILPOl zswXJ@NTp-B`vcbZ)G(0G^jVQ*zT-bp(?LGZXSo6E=c)|kTA$T5V7;IkLH@eW$_ZG1 zQr`jjhd%4bfc3U|1mtIYR$jpRmwFlGzxu2b$T|@xKJ!p&ALyU?ypsc7rc#|J;>}W= zI_O~mueVYIKtI*zjShGNvHuJDOrJM4;EhyjA?V9|p4`1@UnVHE8uTlDp4=p9-YlhV z2K{!QH!-kzp;8Zk{tKTsCEzVp>Lt)$^?9=b-X%)y1^pABCwE*rzsr?!&>MYTWx#txsp~=C>htOX z-ZM(w2l`_^@6v$xqEf#C{S}{gS-|^~QoBL_(C1wp@OCMcJ_*~GICbpT1-$o^$^-o* zpLcV>`;Ss%KtJ2(eTTf0q@BegOzr?dEd+m=FC%?fm-(F$wHov*ecq1(+uI`QX3%f< zdH0bgTjjCsVp}~7-qSu`dbZB{Md6d6c7p$R%1GDN?3aZt1N~=Usk1${w*Dt=y$8sB z$&&6*X%pFBg)al@>EP%4>e~9}0ee1JMLt_wkEX$pqv}9jN0wNpF=M@}@MW&J8T{Kl zbv-C+8@bxX!{BZAZ3Hu+_Tv~4lJV_t5PI7)WXkY(ZDT*ku>#KzN*g~;3jD|e{{+fd zWjHiop9NMt#2yu}F9NGH#6C;dIpa|fYrxv*v2~DVvV>w4B6BlYGBY?a%4d+*d)PEe z+yP#U5Aihdxa&!Lgv8ge9E@>CC$xf(fF zu_X1B)^C9zdgAI=tXMu-T5Pc(-J~J+TdP!jG6n&hIS(y^DNVi-{U4+Xk1XNo7`4Dn zO05C&I$z*%D7TQpFmgL29`>b{B8L`I7&M-T#LK?aQ-LENEA=Mm`#hfBTak9s?{mf2 zrNMQWfwc9Y$of(bL+A-l(73CAfJR#VD`5SFY%7|TqAl!?!OECw*tzsh zE>8ZO`sGf)Zv=wJKxl9Z!IM~S{eBb(7C>kY1*HIFEYmX21Tq!iZ=wvH3hK~;EWLLF zy*r?DudipxoFUaG5p4(m_r46v(iFQ;=8G^)vz z9+P$Ksjp8rHvz{!xs-HS$RGQx^cM}kKu0>uBJ9{ds`;=~L~Ae87fpRlRe^G;N6r0n z!1`2O1@a9(i*}9H0rfqQAM{zwUN^Cm0XfIUBtrE|2>ihp68#f}f3#9>f&RY7vpT@B z$BV8sy^aX*2%O@u)r5~dNn|($sX^eM=F5otCrKWYMTVZK+2Ef?nb#SeEH{t6jY3jS z)!?k~xmtOqDAQwg4OlmX*w&Nsd%$|aW9PEx-p1$` zqlQ!{w*P)TBY8idjqSgI5Fd;)=Pf@hYy0nPaHf;Hmt3iBZ2v6=Ol^mdww<(%h_~wBLHu5v56(QKIJ-f-C(fJ?QpGtK zoDt-HYR5SPl=(RG=(NO1<>WYPz+dCZNSq>*6z7fL-{#3koFdaooY>#_9STL_OwT@J z?X2WD5BH6m?y!@KGv^D2$i<0skT-7n34aZ*Y96!};>;s91ZU18SHKpbplJFMBgyq4 zG|Wd4wHL_Qc=Tw$41BnOyb4$ThBGI<0@)o(AbsG$K%9Bd(}DEAvOR&|4e~~0=mnBB z`>P4$4!H6ooH-p2HITQV^??@%J4Md>>k$Z{6g86O*9czsn+7#6kUxDzfh>oeTAVpq zhZ@Lz(0UA~)CgOBPSFMgLMTNb5kC;Tm39QwbRapSu9=fuBZu?l*f7{Q6K75j1d;lY z!aT4qph#~&&O`cgtfv!u&GI@v_se^|8}58am-@Bpbth!g4QI}P!}B`ViCvEzyhhV? zUb5GR+l{{qmwrIE2KjEab3A$zTKjNHqmkAhZCC5><;12y%?sp}uPBgZuyZlaoZ*KW z$UV?{1g8Wd^UG8Ytb_uZ-{ym7D7~FnHq>+=?vtmV%hw!T?8;nnj(MfeJwtAC2GEi_ zPH`C4@Jz*#OvCen*9YATg4YM#g^GiOmPsh~GYv0OY`q%3Sg}oLc%@>oYWOlm&zym~ zc~vJ#{z@^CWztP>@Vhv3PG@t?XMxFL&h4Vq{h&YM@eDafsb7Nh2ajy6-`pd`>?GJw z{{;WvzRWb59nU=70ZL_{baZyJnWtSE;Gu3Ylb$EhsRMVfP zjNX**@O&w}<4dV{LGEnz7npwoXUy-t<| zYzMAvb(xN)v!bXM0;Mt0MiA@g0z zRnvXVy@5=cRgZ$R&9h>-!EX8va9#`P-bP&(ocb7?{UPq1J~s!&ekEPME6SkzRbk)vEU4TL5EF7eH$t= zOY5oH`UM?fKc39CzULRVEOjD9%u%A%_>vHQF>&4m*uS}8;ol>_tzXa)dE8?#Uq7NA z7bHc*maVD~rA*g)&bA^F_SciyRz$)+gowD@wx)%}g?9Gd# zu!oH68Gt9@%z2ir{8wzF(vNz~SLcAdz+>?hI~2}Eishm%#$~m~vfgv)v4~Q?W6Q>S zE+X0tvF}rK2Q%P%F%BGijTsH2u$vL5KjRi8y;Y-~+X2QK)ctxDbg#!nJC{+aJ_PyS z9!ooyu|(05>Izf6aEg|8ZWMFMkpAyEC!!-L_AMG0$D9~lK8wQWV2)D__9+Cqeouy9 z>ColWxosuMBB`V3GOZr;o6ufQB}cy-gsp0QT!1Xpoe=m5l`m(88ySrhYL~r=y6Rb6 ze(UkALhW)PjYuazp^E7Hlm}UxlEFuIrAJV*ODV6iH;K21M7}R%Pfn88ZxMB=rl>KU zE~3*QwjfDVKfKbWC2S)f75UYWz0#LwpvLs&mgx);{XWEg>WenBZ)>YEq8h6)5&a#+ zc6g#jYKvvi6{$}lk#><+3^L1TgWt47JBaA95F6x+vc!zlU_6avbrjJV5SyP$^oN$! zP9nMrV(WcT%Yg?i(as`z2gL66MJ)%Ov_!jz=x-qQ=TxHGEzzzb`X7izQIJ7HFk!t& zQE9J{tV|I-9%3hXqDJZumQPv!Hb0!JcMeGj& zyl$acqY}x(DH|lBKuWq^#fG&WTzF8ewA5OA4z3kxsWlcZ^ewg=%L74XGvC8BJqOz! zQtR9nTAVR_t%#oI!djbKXo&~Rw3X5z|LGQ56!!CS^%jer7y1A8w20*4l;7j>wbJyj zh=sKVV;&OW)LN0$T8S1~+_bXtl0B?&Ubh@vE24iO5KpPlxF)G*3b4i!c&eI-#;@U7 z7JZ&YKVR|XVl7jo__c$EOD%f2MXyv3`1WfR*F9Q(rA1$3(Jxo``tnyQe$b}nueRu0 zEc%V=d0+k(3%*so=+nO^@KA~I2jUyR;b0^FA4+Tl9p}C=8BC5j;c{FD3E2PH5~Q(v zan*!V7;^q(VGbe8_bWB)RAFgYz7f*jdmM9`(5HyX%*i);mM*C6jji9oLS8_Tto~Dp zoWvI5@O5rcNxyq8cpAJf0PhdLhXU}C0DL?Ee-VIB5tJxrbi=IOs z0yTC6E*c*}T!W_v;8_6}55TDbSQvok1mFb$xG(?{0l3r$bKg$OHyP*d4Z!yU@Z$jd zjG(lWT>NbeAC6jZM+?rh;2aC?Wx;(c_*e@bV8N$Y@GuJ=Wx-=Cc$~men7#hRH^Ic^ z*sr2|6G+JJsPl1$qro!+a6$l14!~IfcuoK=Tbj1Tw2<{ejIxI=&IesvE z1HV1QGxFhtqr44r`i~G&|IBA+dZZ72(Gfl2ZH=Pzm)W_wNC8^uOiuTuzNER?R zuiB0-&w=twYBSPLyqiDaCLCKTT`2nM3Y;a^Jh^Vu3JqGLLH~iC1})v7#T&GIgH~wp zG&~hg$5U!(@F@)q>CQ})lcTx~=5NK#BK$6ZoY5ROov6#79gDi3$(5sA)a4J4McuCh zE_AmFg`fULUH;}+)a9qYQJ25u6?M7G5_O-H>$7sb2K6MC6Cu(a(zRtyXDH? z9g4dA^f&7A*LhjaysLS7TiMsssH|p|NQlc(D{f)Z( z?UAUf6*iA^3&g_%iqa}y8QGv>hjkoqAoxEjk^3zhp5X>f1@scDFJ_lNv{0; zfv9_eT=`Xh)ZHmpek&h!`RQ-es<(nmiE_eP4T~6_ZE+_XwmoJ+Xx_ocA(B)F0(B&eb(B(HTg)W!(g)Uz} zDRj9!FLb$FDRlWZN}q8J5stdQhfLJv z`zwVmUt1}3|1MYUIUnT~x_p)!bqPmZL<$NY(MRQ4D1T!sDl&!cn?l!DZq!6wZrem% zE?Chr&_$vypB_eCK6*pTp3N&C`b1ssv8WDB5yB~GAHI5d8YoW`# zhe88$h%9tDU?yB zz@wm`-uZ4pgyPP*i|Q9UosWsE07L&BcBgY*5JyD^+O%rkc)F8b~fS>lj8DE!-TV$fO-Ow zxt9RayDtdZW2=|RqLAM3$sDY9f$|Pb(+jMCMbxxC}m-&AF8q_`=DBSrocUsi6H zd0{IfuTZWSShf;C z(7jDyefB&SHKw`^U)NfqsHhtP@y5)$~8^2k69R!FY_XUYF8_ zeGD~-YCf(8Js)R+rkKMXNf$bc`SI4*oZ>YByc-4fvfmK2j-X__)nWF*nV>3NFXjgtm!w5b1aT}*-_-JzPVAC2lAIW~ z(3eroK5jLLYF-S^B{&l_0;7pjC0*zg^P7TyrA4j;ehbdPc)1h%R~ku9j9(Niqq=>_ z8UX~={4_W(<4n*9jbAG%jPqsq`t-;y;Gg0Qj8|i0HJv0U##iB&QQbZQ<9YRtGZbfn zMriz9Nf$bmeEWL6KQ?wZ>Z*A*q>FG$JrQ6b#`yYlCEspT_K5><-% zp!z-)`7Ri_D~$I9WOQ)vQ%C#oPh_7-(|>Bg_sicZ)$|7}_(9dr*L_I!_u-#eG7k&v z#P|R{#wX%2KK+hegv&DeY9Al?k<5gxTX81nHH+&mNf#!5Ch3C2(~_Q-_>H7<6R%1- zEAh6ZPU1sJ-NXS&rzJYUSY%6qQ^g0yfAca8N_!jlzs4!0O+ZSU4~(NOH^!@ffs1$a zF@S3R1d{1kKZzOvQR99&7SL4thoyG8uQmvhU-#4qq;2_hEe1nO#&@W12)@t9Zx(#F zkAGY6*Vkfv(Z@L^mA=^Nd+NI)(6A20%>DQny_23Lm)TtW{}gm{Pa{pXb5UfVXAbFE z23F0-u0+!>O{{Pr!R2XW%X#7_P_CgPTjnOCvwW}m8yhQDBubpl#St#QBU=_?Wc>-o zrN~eio`_RAlMl#%7~|8qWz5+=Mi@jjSI{S%3EE(Rw~!4+#hW3*CxyOj)aAmudagA# zV)m3nH9rf<-{X|(Bp}sE{iR$EJ8uE{H%@Vyz$Gg)M;h zBhtE&pz!_x-PZymWll90?%uIEq9N7%Ib?QYwJpWQVoBSwdo8LP_Y!B4p0>qmt>s2- zWo99xSXH&m$vlfo}o)CSGv*!C-yGjYTgHV z$M|#&q5k33c-XPZ=+jGe8Os~;+%yrZS+NK zMhAZFYM~)t6mhK%{Ju3h@LC=C>#Ge{2Y#Nx7&xaT9ugj1k(m2AF$Ph_n_BP4G=OTZ z0*jgYF>;_Pi0=eIXWOc(^D;vmL_!<-(H`qdhQ3V5s6XR`f8SjU^Bi8_` z`D4h8#tpRXhE{JR8N{#3>rXz%E00M)zzrZ%L^Wh3WG zKNo|Y=d9%hh<9}I?NoCM#XG!lP&GdW)7w4s1Z2?X_Q|@fmclaM&hcocI01n=GDAep=~U80j=ZSi+7x80M%Rriw&yU7Y`0r*q=&JJ zB&d?LFQ+80>u!;~OmT~2=j0iY!7s9DpyY&#Shp*s?h^;m9qZ|?z0(T|6fXnSymqD6 z0Kyz4L_CC@h+Rm>#-;(x< zMm4`^=hWFKnzEb*G_r*q;AG2Wpxg0sE5eZO5KnjQk1)J?$1w&#Szhh+JdpbOWb9I- zV_c?o;o5C*WF~T$k8=?P2skl5YbhN|&^kIA82A6+T!k}1RW{e9{23wVHee6o%%dRd zc@Y6pWc#A~YSOS>&ihWP+s7#eQO$3I^C`|eQmB!jUF4GZk))+g8Gq8qJG`w1)!efY zzgvM*21o+*EXLn9S~`6O#PdO#hcl0=zI&u3xyNs%mJI~eJ_7fy0Ouy#N`iLj-egHj zouwmYLiHYCPup^fXpfYn-1xE3GTO6`Ah(ae;S2D2WJ_VtE_3^tq@}p`;S1W;+i~#@ zJQk2cHJ=LAN>81S5u|KL@dncDH6%y2oa>KBQc2L4Su=Yb(a09`^%(sqn>aw*=JiYi zs^;s!x*MmMCjbwjf*sl#J}!xDDaDt)V3z$SrTTB7vDZ^4kV2im?j3dc@_O|zaq*5I z)?+r{7yNMMk>$rq%3;L%KAecUd_BJU8@PB!klSY1-R|YahcXg6DM4-|x2t6NT})XY zj#uUgN_H<;u`7&u0x61yAGMUdoKpQHXiW0d38YZx*CkPxul84O!Noh+Wq7FORnU6? zXC6_u2Z@!GAXeQ>=K8J3i=ag-;#UxOsEIC8J=!Zym_#F#1N|QY{jM~*4FOSdBPGa< zWGof^+`RFiMQ;3^I-Sd7P*nqdTy=ukp56x*MFe|BA1s8h}$-> ze0QHQ<4Z^y~3rW|`o)AI zUDT~h7~wSErLU8Yqn4LQrfeidwp^sqZi;^cF0$o9jdnNa0*xLazYL2zN;tJ{A@%hU zIMu)DpiZUzmz{cWq306jC=|+f4aKodiAH#Szi6=&bt8h$M-6|Bk*c>3$K#joAio`kEQ<` zUh%z6@3_SPs(H<(a9OplsiTL;@g<9juZ4QY?FLZI-LDQi#ctP^d;+dlRJud8)&CB) z{+9CF1}6_boQP9a90c$u%PO$Upl|jed=Sv=z_|ctf~pw!oTdB{!YK!~8mDhafV*g8 z8O7~moIzCcR&aiRGeLFCH!WpP@MT|s$ji3u+RoN0_$Xg)-586U@00s)wno*FhAfjn zRH4TA4x1>F~YoD=n19!^!RlRp~Gk|LTCQROmQ)Vmzj6TNC>zDGA zdgm#SUcs41je$6&JgpTdY0k2{AYvb<7(_LveH}|GoOz^BI6;%hCGmo!rOvv}=aZ+8 ze3Po?Sy1xFiq;CMjNj0EM-WvNbXVh)s0c_@{Fr_zKcIJR2I+2`c~teIvR1k}s>>i^ zA3;=q0_PpuK!PS2)oqd@s@GCRb;336h^lD6bx+pGc!0;m4_GxDkk>t3960&DFZ~bX zlt+x6SO5mq7pGACarrI~>}mBiO5jKyYYufb>Zr#V=Y_o)uDyqzm2Ic z*MisaV*~F9oXY>kL7np3@yM->l|@%sx>lWh%OVGL(rBtd zTm3AiQ`P(?vZ^4Gc{RrqK2S(P@%W>fA0B$g7z3#0^y_i|jkBB-0@&FW)gFuV&S<_L z!f{4vRkhQjgip>m!Q*}$;_H+A@|qKhfGU|+C*PB75aBX#u2B36B)A>9LVZ7k-ygz% z5yD>x;je`7H$wP(A^fut9xF-qCp&~66T(jl;iE$Mgb+S6gkKQCmxS=z5WX&iZwleJ zgz!g0_zNNYl@R_`2>&32f02aGX0zePBJ%VDzrAxB;44(e(&R!sB82x1;b(^Mf)G9@ zgkKcG%R_iw2wxY%uL|LJh49Bh__HDWw;_CI2!A_-e-Oey58-YixxBJNc%KkHFoX{e z;b(>LDIt7b2wxb&mxb_4LU>~czb1s=62iY9!tW2^zX;(kgz#5F_!}Yoy%7Fc2#+le zm2U{|6T(jn;UhwLeh8l$!p{le#UZ>RgkKWEFAw3HL-@@h{PqxjPY8b`gg+C)e-pz0 z9K!d7a0gSnJ!p3d;XOk5u_1hL2tOl)&j{h?hw#NAye5RN4dE{iPWJcDA^fcn{y_-; zB7}Fu;@ytFM+om1!Uu)$(?j^A5I#GEUlhWZhVT_3{PGa~^$`B85PoL}|7i$+B82}k zg#R&w|2>5NGlc&qgl7y*F3;{EyiW)}F@%o{;p0R2j1Yc)2wxn+YeM+i5Pnq%zcGY= zH-z64!XFLc&xY{dh49xx_&Xu|;}9MhmRz1)L->&){DcrbEQF5@;Zs8RIU#&e2(Jp^ zYeM*@5dO^&{{0aCUr58g!fIt@xiYwkZm1&Wu}hrn%ya_ z>rq|j_3Wmy@N_tGoYSe(*iLCK*5d~3ijDJ3Q1L8*$>eOjz}v$~>w0>pGX#m9;E?8? zfVFXl(^Q&Eh61Hyx=QQXsgs9x8UUrXWiUiZI7BX-uzDkaMC4 zU^wzP0^Unl6z)O2!26z}E3tXHl**+peuBhz*td+Al6{vg;!%U0G?yy9dqZ<{r(p>9 zXyY}Cb2QLCft%VzW^_zI^ztvwCL<395e)8ThX}y(>t_oGHjZsc#zSLMmneSxQJTOL z)&;&2^-DqOs(()a?I9@HaewNW)_dosn#Xu2Er3P!nuIXZlj; zExMJD9U(3CtOz1y&E|^;?MjCVVjLINrTy^%QA^?-Q=f$9t@D_uNi0OK*5jJQ(z3~u zd}Y&}naSC9J;@*H(;Z&wF@~GAq?$%OPO%AiyUs(In{L0;Y?JI7)4e{<&xv(omJ*-o z4@!d0@*>fJ6=s={Z?;mCrNzwYi{cy%gLAo=H80zg>N(k_gH(29MCY2SLsMk6oG0xr z$`MhwyZJ#qpCyHcr}zPBG}`V3enFv>z1m)Igz@4+zT0yVhh;qm6b*9D&hDnV$MSP; z8jng|Nc@aWnsOs4#e)4a&pJ6cz5&{RmT^9vq=+N?29A9zE-70@%z5xt}nc8XS>?y!<` z;qEHKM%j>!KO)Jh8s3Y@*L2>Dc(uvhh^^_Q=3zQs8`P)N-nt+j<4l7x-WbKp6h)Z1 zSHhPo&$R9q%(xL!X(M&z3l@6sWQ*tvOd)~{=p?Doiup(pwWYdIfJXJ>jp0`uBl55JEf$m zCNX$UReeoKV(Y6@#Y@nY*ewQQL0up|h%L>WUYYSCrSSYPZs`nTwVt zO6uC5%c*nfY7)iEjY3IPX>rLZBL|)8h3QDl73GTtFDWS*ymIu&qLIT-sY#TU71y0o zQC?ZUQp#XNvba}7i^>nd5nVci$JLaSmDeGJdK4b>L%!{f-Y&Ai@yZqDHC2_%6P0y? zr_t4~$jsnDgYduI#zveyZaPZWYC0Ga%9pcf(5BcVCX^M|6qnQ`YRYTt%1deom7)DP z@tT^d8gex{w|se`s=m$;($J;BDz98zMI*Y-$JduvlqPB*pN^lUt6XJdflR8ZSzcT> zF;QDmQ(j$HMG;tFw&Uv;FBTOv_sKJDOv8y%-8?2k1tQfe%SVnFHW~;fEO6?jno1`Y z*A-I&S!r=x%PW^?of(rwrKGwVy~r^b_nw`(iRIN5#dV2U2!DA3@zHLE7q zC6>?Cz9kitp^Y!DEibW(8KoL7C*)jHRa=cF2}j~UR%vs!b)}_=#egy1R@arG7nQP7 zSbwWY_FLk5*{cA_#-Q(Q4IvADdl zoEcKLBi0Y)OUh;^YO5;hNu*NEgkp5d8dFvjNfcMJ7Pv4dMg^<{jM6v05Lsc7xN#LYIN%(9a}J7C1VSIIR+YOw#JR=>h3N06DFXi z+w?yu_1I(Xk`$ajgY%}l1JvLv9$LxGQ$bh-2kEP&zoS{B&r@iv#hwk7v zUwP$~6cQiBATjl^yBpt3#dHtCZ0w{O8&fDRK4?8sT!s8?wsoo()4)0I2_O|%|q z3|(y29@U~!!hBOHU2U~H(%^@2B-3ULQqM;w<=lPuEAA+_V*PfsB==;gayL(spSznQ zgN{hgTAiMmR)6i!)3e;00bRP-z0SS+O_7M;!y2@&4>BUfIa}TO7Q`dAMh0cKp!S%0 z4^3>1%xJ+|0*zGE$jI!iZ@M39@3u3~$W&&n+z$kqCP<`M+}V}!*4N?qt?rP>aoLfH z+3wc6L%Ic8R~riH?*3L}P|sT%=Z|I8&ma3%{g4mmr)Q;IGzhUDS2yMIN9&lS=~=n} zlshKF9rUQXoxM$Ed?!7Uk@l$C{tFyG!QrLusrWZDJw0vXT6c>34fF3d7yr_Gru}oR z`yIEZ{L6LuPs6yT=caw`xZNZDd$#NU;GPlvAM%5HruRyFU|poYN{^+z(jhWPrMqc+ z>K>I0a@}5TZdymTyUr?rlJT^+l-nJ_f3_wvOGT!1pW?FLCk=S}95vPS`*zWr&}Ftv z)lED}p;gA=SvDH z<&9iPj0RMj8JLpjtt!}zY&(nnj{4|N(>J(7T{EKQ*xdIW_52cdI{L2+f(PRr-0H!( z2eW%HUfAkeFW8ZUxo*x*E6$eOq+&S2E{1m;wF2`_lME`H!y_)fl}k@^r({G1=lmUD zdd7Jf?l&UQ79H~HhTBi#9s(b+$7AA8{L8vzc_-sml_P)n(5r8Ro{I(K=w3=lWp&4J>^##O0?3FL4c)>tX}8S3RaRCpwV zLl>41xTd?0PRY1Ch3x-p{(Pyb$E@dee+*-g%w9>YBAL~$DrEECnqnb?B1;-DQV;PP zUU28TeQ($*b@F|pF3^xjJQ)?i@l%P zy5h<@?D`Z}R8*B%#!utES!nZea&dg)w2SM@6Lm#1if1HcJyP%2 zO)f#u6S)zJibavfXO}pObRh=WjgW1=(kB$P1W*vbyW#|2BWyP$TX{pD#llYYR7hTk?ccatMO8)yrN=MNofK*tJwQR zizynCY72V|%PLWtSAs3(v8_8b3|_TpjzQI>Y+t4E(bLN-&nd2`XUhtNN6ab4BLftO z*(jb|Rz9r^O(QA+;8$YjT#?0B%$4zspi}9inOpMgK(v_FQ zm(MaiM;CLvtqjngOa?Qmq(xJ~G^kN#4}R!yv>@)h&Z@#*Xd<~Sw-V#1$+eRzs)`TZ zLPvTnRL3@_XkvWQxOvm&7R{MEZocSk29wPhe95YUhqa4v0isww8 zF{fzgs1{rDlglW?W5wJetH4s`SQbBZW+iJ*N^1_<2Obn~7{F;Z@yFCxn&yMzIyrA> z{a6S6L2BHxK0K+{&7ExOFg}s}udcjuRV8|9(V_&#wgmO->+t9;)J8%%`T4Tho}4!t z8BeZUfu>(NS9bR&qkq)l`9z||Ngk8OlvdSaz#EIuLt!5sCfu1UvDibE_uQ*I>iFZbnsUf}y4uLr{JQ#%}pZl{Ji&H59#S1ln9^oDcd+ z>N-ScnJ{efQZ{HWZmYaUh94pg8#0+sC{R4L2@WIrnNNK7tf?|bc%$kFi92|-aGKzp zIT9DgmpU`+>#FN9PjG0hbxL&ncpg%hn1N?P4xg3q2}fRK;u6c5)B$jEJ80Y^LWMqb z*z~FuiE)eMu?k1h5@-C}q6rgpD9q1`A~cVV@_L>nG8zL<=sD5Q(WrC_0Dt4gKi zaKcSpvnw%i>L~_2!b}lfKMXb0VW-xgoOc?Ur(dO~`Hzu?jzDXhUS0xM5+zlYrL`#J zz)NeU89BL@AeF;P;1ht#EZqZ*pB^Ok#^*UvY#T?O{}LDz{rY0HM|x{(c@9* zy2s=3AAVV=Rcoo1cD`^h7a>S{E}C`FIdmz8cC47ZDULnTH#u~4ixT%o;c1I72BAY> z34zClD6JGL#WAu%J^l0+^GVRy^*DTL{n)&*&P*&<7FSeV!nq=qwTi0BC3$l3hj9$Q z(nVV7#0X3;@M>4#@#f0^kG(gKud}Eg|DUq&lzovUjeuoo$-Pa|gtcjM+onyEkfa-n zw^?r5lx$=vsTM5CE=v(q7J(uli!4RiM8OIOsGy*zh=>*0K?MOpMEIREbI$Xe=R7m_ z-un4`|M-2s-WN1C@0@3zdCtt4Idf*78PhI#N_`|VH8(ii1IZUQl4S`aiK;RbdK&xF zYIjS8zI4>~xZP4PgLth9i*_p3-`M7vY*SriEmJ*&WcwB zLj!dGR@kRzJ*pI;9dDV_3O<&%3r}Mo9#))mbtlbS=eiv8z?p#j0L-^P%~YjL(~)r~ z0o6yko2jKxMTfELF>POFY;d68biOo9feiB#mto1+6%kdn?fnaeV1-ItC;n~@##}gp z8Lou|3bvJnYTQ1OwZ$+zvZ5FK6Yd?N4zB}NGz4>7XJ%`g8fVnQvGy`Mk*3i@gW6;( zGSvLhL2MLrT{Cj%4jXf&hltfe)1VpySQdMZs2?$17tH%Fg}=k-0+%!N!qB7(?Jq1! zw_caU^a@QgmSlaG>Cnw%^xhhUE$V$+%i=xF?T1q3&bl$xeE#KN$iC09s8Pi-(OHH7d^T9a=fpu!9>Ia2Vzf^c3MHv}dNw1s}D& zJ?M*#NuzQuuN@d%k!fj7$?<~hKA~2ppnG%;4$09setxJ7-L*qm#8hGGMP<1t4S6@{ ztf9Y(T@a=0R8>!AY9{OuY{L+)it*e89;w{%L}=p8namt#r)DdG>Bn$<9&-=HZJb%` z&ZJW|5Yw1j0)F0d5s;ac8w&?1rj2Q9nb%lrnw!R^*7})^FgS+QW=-8@6d3g9#zrEa zTvXC{^-RlF-d)`bc!ol$1quNCFsx%;U3w^%w40;wQDBf^`V&ajVelBViYXVY*f>fn zgqB4okg8B+ZW~cDE2h;TmB@#)wA-ca=CH#NW9tIC zEKn#sV7K)hBT^g#n-K=`qU^<*r7G}spqGKr!O}1~K;03yDyeE{DS4!t={3vGaLl3_ z_OPa*Pbj^*O1r)dV`t8kmIujRk@_%48Q}2Rxc69Du+taoGLMK{Ok zsY0M9Hu4X!?c^%R6~%ba(Tczds+OlOb2k?C2Z@CJl{;1*`7YLvQupcF*z5?z}&Hib3*5akKLm`Eh=Y!M)Wo(RN8 z4S{Z>QsuR()JBli%g`?1nh&k^^MtiFg;Th^QJ{1%8Y}GIW`fMfi5x_ z2HJ5~B;u?HEAlu39X%t)M{8??702zPy?GtnFy0)S-wDF02pp_g9fz$om;we;Z7>z` z=`dIvtr>%b1`QJ6zQvPP8cQlRoP>Z^+|tXjV6gtS%z>VbE!)Jxxp3V!4H1;ie_J(1tZ~Xj)u0WvY_8i`$hFGYT<2t z0+$@C>Wqe_nu1e_?m&dBm#lDExvjTttum^*c?QsBX6S4hS}?nz_O6~WQAAPfIeI9! z^Vw~E#_sN5M$gc2Skt1^3nkE%$CAP)i8pYS(7@@rH{)@ee;S%H3p2H%1QR_4Gy_&s zGF)J%KICQY3Jv28TcN|uxfRnMn+B@y?S%nDZ<7hVV=L?Ogd2ryv>uud7GkH5gvc7&adls&w=eBmxIW7BPBY+Qu|nmh^u)ysQ2 z?Q9D4@Lf&)y(=i-ZR0GiajR}pQ)M_&(l*dCFhJfBd8JB$7*S6+HldcH<_SZU*r3^} zK#hd(5Pr^r`21=a)W zH@bV4K!n%4eAm&A!!lm)_Qfs8z742j^ZX!UN70>e1nbEcLBf(WR3L zqtH=FOLah1FE}9v!+|`_N5avY3Pps?DcB8uqaxuL0z6Q-3~B?Wsxs*^c&iUx;g~HZ zdV$C;WjpP(yfK~;GI1HuH55moY6~%RQElPz#H3xJYhehCv9X?>U@5#3s3H`wHl(2; zQzu^q3>xRnot|mQHqFS+Y-pNZ(~xbNK08y})+%nKiV_=L2p+9O@Z>nV=Q0+{C<`YX+z@YFgWxnlp`2mSYKk8Gxb0nlX4bM@G6c za`p`>jc0WXu2KoTj98nZip(qv(QE%gy^78^F$a@R$HRF#%2Q(&)D~$Z)?07~n1AVp zyMYAH&T|>ps|pojOO=5w!E46Y0zxUnXp;uMvAkjwCpQKiUzBHe@3MkTJ5;1w4hFes zlFOE1Qw-nCY9zRZvKe(P*rplJ$kcgi@w<96Fi#&}!q(C>eICR@Fs27DcPlH7nP9^k;@yL1oJtvLAOdl_k@|qF3ZHdm& zE=0}3R0p`O_`0`$#g>hVf!HA>cErkRaJ4H$#H^PL@l(@);7Zu2 ztm8{R>&o&ya9-CqVG-EC##)I}Rg}Y1X2WuFG|H%)yQqRHsHZO=T7m&B{l2$-uN&4b z!Rlh1r)p_hxX5#3=&(cui)xDV$*i*rLXI+9nwSQO5{rTr)vco)cGWBx)v{&zrxJ0U zX-t{WoQ5uKQ>z)Pq6LVEAeoV`TW1P%0R)Sr)*G z!%^S;p-U55HfxZg>L~g~8yLhgTToMvJ$@wRZlK0=$7~z@#3N}l!NuTxkjFQL>~_ngbzZkW>gzuodEje))2W9kj@3fA4oZNIeWDE zgsBELo?p}139Coza{WC;EqH*5^Jq3W(unrMJD1CNWWKf{r6Un$r~@nehjF2Qcn2=< zR5er{?f+tD11e(-s+S`bXEO+mM{EIrdyo&qFyjERZ-x1B*fG4PkX*sfCE|##r&Ewy zXl!9zMRwSbTb}C$HTB0{fH=ZLH9{RkH57d_noo$;2Yhl!g;rxn+Jo_gUNYWomKpMr z@u7h(SfY!*0Ibg$?KSJ9NF|9&m-&a+;G{qh5dU>8MbEUfG_^p8xOPsqu~}r!SwKr= zMT7NQ{j_+xr=RDyp>^PwIj}{8|NXNbDW3MgT4mR^(Bnyik>OlNF++0=119l0N?0<9 z76Dhi=@#M8KG>b7zAe*oDD*u;14|Ays{+$7CyLt`9XhkV?a*B3q$T~6mbFhB?Cd@? zQ#)y9Ju zw&TR9O|}1xS+i}YdT9Iz4H!*RMJjQYD$LzS&4+1)c(EA2)03(US~4>-Et$sJ3@!+3 ztAUquTC&l&t*vPeEcO#m>-LwSSqYbTkHY$38e|1jm4eJzXKoN*>%h7b z=@eZ6FCYEt1j6Q^rxW{HxW}2o^yE(IASw3wMWlFfpS@8@nIKCA;HFHnP#X! z{MOc~c2N*S%*D$kQ36)1oMMOVBd}RkhZ&KFujgUCa&&euPKV1(plJuX zC^5Z2K8jqq0y$6McLL&b4^PPd=1141lVzkS2*!Dj(P;k zM~i-+z+c|jE;@?PeM<~+ct@^U2UE=KN6h)L)9m=Z5NiV7B8Xneh>9}dEXb8z&KiyD zg~8@wy>OI@Q*cZ=N>Qu`7vjO#C~S-6@F7?cUxcm4WT|pHvsnZ0sSLx5W`$cs$gO>Y z5$axS5*Js*@!;INP8+o*p_4-IyeOCHu)_?9TN~F|aPgzn4zk}4n+a_^dO=mBRarKv zDewT~0Ai3mPn(`*bEH?yAyYRT6mLJ6NYaerL#08jt%BKk z^Zr|nnNV&UfFj|LZqIPMut^i56Nkq)o%r(52|lvum#Sd38@yBnx8wML?3Y>TN=*>^ zv1?J_5yJODBAboEF+F2oMqKBQJ0TKr`xr1WAB}&Y_YYfqSg#b-U1y6hY~$+izB(wQ z)x1S&Q{9b(9MLe&v`Tgam~2>nFdLQ!9+=@Y5|VE8tFNU3SO#7 zcpEUb#ZkPy6aJ^2x ziU>9;-4y4oM{FG&840ig=DMgEuPjGj0ILX2I>KBM@9!H8D?`WLHX+d*9Ox5*l(DyC z9PO%o?>-#RM;g)v1cSt4N(f@W&=2#Qxj4A3gHQtokRccgnyBxeJ#0o9=2czC@(H_o z9L$3z*a{UIzQh3?KfJ^N*N6$<0G6J`2N`jX-@N;S-LH9%j0ZZ?EME$M(>G>naf z7TdC*p$S57%_h8(T>$GdF|N`agbQM0Q>xDLhaD-zYlKh=juvMm7Pt486u5M;L34lX zmD|{$f!>LZiF2Df;Yd_HH$JL5z%ao!k3&Oj5+m}So@9w@}re2hPZ?1c!rq?tCq6}hrqN$;963kkEBx3y~6XJ-KEaB@(Towfq-`LuRD z1_MSJu2yCdmp_VA;C2FIdbnB~hQRJ(gT|J#i;*6?cT<&dW9+^SX0FGCPQse)tAC~y zg=NjqB+6w%crkj$LJ7_W%s;|35e1XFeIW_<^M?I@;JtAh5fGvA0(pd`1c}ZcX7|!T zPDY%Qi;9DAYnz(3n&~yI8M%-?ASVxpwY1rg-TQrBeH|(i>J0m9*bPUy<@crH%HgPj zSzpI)aTG+zh^2{<6P~JsWdZP#ZM2h8rq@&A7;f>8z?~%nwjKGNpf5Rtr|L5g(dN;T zQSw5tRT1UyGhv9pnu^NRTQBbrOYH`ES|fBy9gPx>xl9-@HsrBagzk{an|dHz45$s% zai^X{N8@VF@D&v7X$n+Rh?7IKGcz`Zf^%9&s?mgSP(M(PJu&ELU>M&53{J+L0^D>^ z#`2zl(P2BSU!Y%!Paxp?M%ZA`Vjvy?M0=XFwax2?c`!T+BPR#v&YA)*E}|=yZ~ZJP z)VP83IB*lh+F%^jM{RKO6a}Lb@>IhO%cg=80jsI#r9k#SCLS1RI_lT3JI0w%7%;>N zwwX8F0d=t5)h>mYF6@QGo+li1VV$=qVP9(~Oa@shBtp!2w9NH9%8F>Oas40M z%j}F~_oa#Y1(A7m1z9QN*DRgGOu@2%4%|rvZ8O_7Jdj-qT_fz}(bcmA792q6BHHFK zFs&eOuV=UXC{S+TRKh)ZEEWmtkv}%f*tzlhnxuO>f=;Cx+Qavp@;C4%n1%`2eL6t6 zei&>KH=ac5_aRg9m+^Fshgy~hgSEB6NDRw8hx1c~2UrE_uv<~iYKqG+p_;Wd*KF3I&b`&mUovR9k zotSmTTW7(twx$JOhw+t>LG-GUuxB0f!6ktEZ zps9ojNBMV_Ev~$G=qHLFm;xG)@1|uGd#Oa+XyFAGu4$&7ejtaxlWJrz+V6Ttl zx-^P4C^tCDZ_2Y!Gb< z9uI}$Zn-uTT3}QIiQ8BiZhIwssg41R6TlH@f`wHIOHFXoaZ2rYlsg>nG=+Bq!ChE4 zo!DW;**f7C!cm;t-3oQb@08d8)_oO*IrI=eS{y0joGoF8<4y>c1V*(86-#s4VPV;Q zjOk@A3|RC25>U{PWWHtsH~ozse}P>^D!R(3)td^#Ph0|iXbK!~gJAJZRZ5;M6HS5@(5`w;VlE^j;&apfVFPaHwAR;;tHZ*`|p`vgS1! z<3xl@(Rm}w*rvroV=38mh1($(C#+BV8c1|2XzK!33ki4hH2%25ylwo$T)CS!XeXo47A&cu#>k&C zMDi0UJ0``*A#&v!Y)<59)kBP6^@*K^BOgaM z<>4(I3+^!vVFwHt1h-q{aAO9mdb;I?+F_ld6@0i`Bu)0>XfHIS?8acH!n}$zf-Mbi|I*QS2!0 zK0q>XE63xF#XIrn`E+*R-Mm;t(w}o&3PtX5-E0*al)dfN4#A*cSx30>1L@nTI9ORAx{c`GVbg^H zPcSa(qHJ))H18s#(bBEZ<-<2BLE%CuF;axcfi;EXTLoy%-saJ^v?eBMU*2_(KzK1m zQ)B2JprebU8HgFeY#4;xpp73k%?B)`b8OlG>Tos-!nx)_E#z3vu6cA#)&$*ptkrVd z1cm}C3=ox#UT&M35(~CMd!{tP2YbNdb6;N4mBV+pan9E&AgWW&ycaMq;f#rVI$GhF zo4|_(p;Lld#;RnmKiWYSt3wxWJc2bb$h#{fCI(gx?~?a-n)w)qeqq&>HFfqHVBlk0 zsBkZ-$h2dQEiIgJHB#(%K>eZ>4B<|Wycz{Nq3J^dC+3DQxSMA|N+WEE4zCy*FFPE0 z$jD;C0ZR$v1dX~P8ynzM;PTG6yA{PntObUykMUQ`E4b*dM*ESX0v)QyfTkYh+Rh_3 znnnr0?LNv3DLq`>@VX{9TQo%V{2ng@CGg{>xS8LG&8dmW`Xo!y?-=D zbk{|Q=EkGN1(L)C!!QE`3x>Jf$a`KIgfip7@u;WFd#qF96*ox5zIF~pYnLtd4BKPT z$i=F+8+qud&la_ZyXjc(>6_Z-Nw@1H<3MbrPH2&Ct4rXH3BJYYH*&-ySY z4S60Fdc$}NWZylcw>IY`HZ#V;hxjNC1?fmfy|K7kr5G>Ny)H<`3cMUcK(G|R42bjf zd@yQ=PtZ{^JZdoWbEeVez%#AWuuHsS`7l$DO-<7yeMahsnoJWd(H`)i0NP1c+CY2{ zU*3+IL$JKOf!hPvCN#b~2nyhWd9TZ3e4Jw4Com>EGJ(9hJ6AY@>!<)CNa12^k+~(d16lLZowo+kVmq2L@Dv2Ey~=x#pK*ND zL4G3Gm~w6&1bYX8Sy}HpeCNbY-X&*tpdi3iAGCpmLF49_WfDB(u`?U7A)nhI!0=QX zqddQkYI{eA6&gN2vu;p-OBB)NF= zJG!Cv8gb+JxIdzYlHs`kQRmIwxf!p3nTX^QoigrVMc!F#B1s3#lJPQ9sT8zp2XtV~ z3dWiU-Y^tuCLBMAr$~|w#2-Rh0=i4$L7ZLtSe_LoraPh|GE4&o+d&*NFEcNLw>JBT z;3(By@s`EIigtws?gqFVwhOBt$@Q58AX*q8$d;+qtlYS-?XcQMRslTkE7)EH^U(20B2 z08x)tU@u*KFT!pc0Z&<=QWhAJ%fUT{R>HUKu+D{1Guwr<)z5{E_aS7Kg{qW=`cv>t zo&q;F3xuNuG>#Sz2Ob#z*1H^e-3Zu%>8R)(2vm-8#C!{nNGxV*;2V4JBxILPOsUmM7`hZDtO!u z4c{Z8zJjDrKi5bz$;$)Y;7B+5LhGQ((`w?a*u=wjuEnVB)3 znz2YWVMj+|0`a<@LG}|<+(CRF-T-=cSdrL1w8Fl$VtR2}G|RhS_=n>75>3x=gLui2 z-?6~$WcA)sed1+)U)94m4b!+A4C=70WznpfmO5jigRp&CJDfXjJ!u~KrGzhF3yak0 ztXuGgv7P@cPzU|SZKfY(x6|3)4{j;EGArK{Q7sw-NfLcPcQ~Oj0+qX`D;oL0hFr02 zbLkZVvuY{q;8K;;hB~4xcqp-%_6*HO+0X^w4z9;X#jJaltB{z%*(?~KBPp|5(RSosobu;^V}mv@@1 z&*n++O?cDSI45ZMBzRuu3Onm{!CKcP(atal`&2&N|E#8pV5W3}1HGLVRVHd*!nWSb zZiR<1fqhw{#KR$@eCdL!u;<}APh4_4Nr~N!qr^q9fsVt2CM`T?FrMuw7CohPw9lMN zM^o1B+w$nSKKaIbc&dx&IAY8C(&gS|0LH0JSLdD5tT#tuLmynw1IG1~u>-bZm#Buu zwWX$Vm~6wrhm(n76q+`B0onMCaW`UpkGf^J00zn|(NEgdcV_a=hFgUbBW~?%tKoPi z+g3v%dxCEC3a6^I{vnk&r4)8JO`RjIlMA9KPpT}67F(Cf(fYtr%xI}@RF9pH*q$dM z0hdxAXPyUJ@Ah8k-{B}^TQcz45-xSi(|*`#T^v$G`B0^Y8%@R|NRbhB_R^bC)_Rm4 zAXbHY zw)5Z5e>L!54g6OF|JA^MHSk{z{8t12$2Bl{ctzhxdq*%Cf&}*GQvNmsrz=k$ffFqP z^Y3K0cNA_|SxCst8RZkgXyH}j8ljC6@V#tlR0Ws&uexLi?zac(%EK&O}xSrLgiclvQYN_-zeGn_9% z&a8DSMh>Un!;Ew6H-1mYW^1mLIilmuq7bkP6APpQa|Z<^%wY{W_k0`YJXXF0%W;Mu z)#0j%iRG21(DMgzeJ2R$9LwGHqeaW{Y;fFzqbfc*uFZA;A1+MKd&sf4lVc5<_-i!A z*8w?yeM?B18s}26XYsc4{?1rOd^geJuZy4BSp0SI&zb?MtPx05q--$2&y7=x0Ve43YeA{^|_j_&-ONMpnu;vSve1&)7e$RV}J=1;z zZUZw^(QRB6%Y7^R79Qo!aan94iH|YOySma$CYl9q;nPwVp~JL1RZ&O|-dr`|T$eTy z`P+aaaSEo#)8ToaH(E_v;5qQ+e)}9aIzkuLt(Wj5f`a)=t|=^dNn)jPQCFA)Z|axY zb&IYmQX6pkwA zEYpf!btp0u@D>e}biVueRug+&@RaWgzyIdF!t2L5`%LIl#9MMs4S23g&P^77wQCdL z4Y@j&XKp9*_ZCp&{=?qFzI-~|L~s2$3n1CH^%QJYoS7?7Xod3epQIV9#15yzaVjZ19F{`Qc2O1s~3tQP;^J&T@CVX<*|}+wIGZ8*mw9IJ%5mlYI3ub`Xs7MxLiDsFh@W zhJ$D~xUY^KUR!+rTxXvbWvB4wWC1&M>I23l-oA&MLSHxM41NvZ{%GJhnV;Y~wzabJ z=u0LOlcrS{F~%wAcuD+9mWoH{PzK}txuw}|+@m6xyri=e&NRZKRkJW50DA;arYxfv ze#Hym0WkCPInjKXcU>1fhU>4Ks_TLB$-5s-<++|y-@rWA=go7NYLR&k)|C3aF8N)4Jan+c=(nczLke>?cv*a__iLtoriDl;p07g2M^!T z!*}xVojrUP58u_pck}SwJ$w%j-_yfC<>7mI_}(7AkB9H;;UykE!NW^E{L>!3pNH@7 z;Rks5XFPnOhac$S2YL9x9)5_2PxA1|9)75Ymw9-~!_yu<#ly=zyu!mPJ$$N%S9y4~ zhacwQhkN)D9)6^UALZdkd-yaDukrBd9$xF=bsnDa@EIOH)5B+Zc)f?u_V76#-r(VL zJ-pGwn>@VP!;kUs77uUr@HP*h=i&1`e1V5A^zcO6<0 z_&FYau7`iw!_V{Z^F90m55LgES9|zH9{v>%zu3bs@$j#D_}4uAQV+k(!>{o0D?R)w z55L;O*Le6f9)7KdU+>{Jc=(MTezS+);^DV>_*xIY!^6Mp;dgoX-5!3ghu`PnKk)De zJbaypKj`5Pd-x+B{+NgV)WaY5@Sl75lOFy{4}aRjf8*iLc=)p({+x$D@8Rn``~?qx z(ZgT%@K-$iH4lH?!{7Aqzk2vv9{#q6|J}pi_3(dq`1>CIfro$S;U9VU#~$tuz(M?N zoa=&(gH1eqGY{Xw!?*JAZ9IHC4){hTywt<@ z^Y8;a{4*Xt(Zdh&@IyR&vWJ&>c-q6uJ-pJxt33QL4?o<)kM!`PJ-o)lYdyTq!)JK- zEDx{u@Yx=IPx7pv3yCjQ{6^xa zSNv>Ye*`}wK1jbaf0pNyUeVuUGs+ z;%_N_BXP)-`OuHxA>!i{Ur(GpESCQ}@r{-IW*gh*WzUP{_a(lmk}oID9vREeB)++l zKaM!oFZ{54Kk+RUzkoP&Ym6f7UJyLF&`$*o*naxiL+W7#Mx70zLq$9YRrE^oIN$>FA$$b_vLnU%gt>5R}n9v z@+~F4hB*BQrW3zL@lN93RQxpJ*DC%^;@2sDKk@4of0p>S6n~%i4T_K7+&&k!XZWEX z!GXkYQoN4%&5CDKP^I&!t!zHoqv7YB zPJB$s_YhyH_?g64DSnILk)K&&o+=1_L-JoCdHNB&Py7;<&K{r_)aRv&PbK~h#g8Mt zM)C8BvwiXN{*XA^1@m`^bA4vMKR9rhAFhYY+lcG>a|UrPcb31O_zzS*Un9Ow@m;pH z_kCFLnZzGcd2WezeTbJ6))Y{ z=4Y|ujl{bY{~Yn9ieFE>SMeu_4=Vm1@e#%M*~R8(O!2wIS1SGm;;R(Dj`-<{|C0FG zijUjX-uFDk4hl&3zQ7!H|LpS|`#VE&2yrP`o9V+?A8@@Qf zzi9Z034WX5y$Sv-@Y3LGA&2I|eEw?{IFH_gfc^1z3zRM-pcMhb}Vl zxz@R}p590hzr5XF6-1S@!dH5S1zIll| zok|aH_V6y?6M`syKAxU%5O`^Db-vnZ+%umu4dILjHA+{I2`seUt6dA%_1lkbZFno2$`MJg&;7RQTBX+YLm`{@VR!NbnY|!Zu%_d^=B<`tcME-oJi^X+{oV> zrvF9ywkasEG$;$7i`%6}!;|@0YWP)QIw|^g25?tCFER3Gh4P%w?;8Gk$hn>TBk&19 zG=Iuz{@cjk5XzGq9UOQt=6`L-xn4CJ9<6_vMiOfbkLLHeJ%8NrGsASYrf+W;{@svs z$<-X%)*+iFibcYFBnOgiU<>2p3mF#MH}vp)BOFRa7xkMN}x zcxmu>h&Y{9hR+D=!x1ELH}GqMr6J#f_-2zaooKxWr;|2(uTY-t<#^y&KkG=4%W)NO zS3d6{d5lxy=V1FI_@hZb`Mg_0M_d|kFBAk^z7v7F(yuV`w^6D=Fps`98lLn|`V4kz#_8-==Fb1oz$XN=LwPQjIlxN; zo}G&P|5FWrEX)s&B){!R|78!~4h+9Eh}ONZ9u717{4jmyiwx)4sUU#rWIksYzDbz> zYlzy&L11}BU57XiMo@#i~uf77fOAq&W_^&*CmvVPH z9l%S2$zlHArks7*a4wA?;C}N)PdZN<`E$eP;&OinINHUY1Xypofnk;gRpEWvPHPRn zB20(%ISAaPhjTsrdXr8%OrOW6e>42bFnt~;?p}%c`EtlP|5Jgx?mGuKJ{Ny(qA$mq zbS8%PWqp3hBmWgo`Zt(#e#*%QoS&yDolEEr=aVnJ!&J=w?%{o>(Uo<;Cj_`E!+uN{ z1ip3{`Ii|7)Vu~48h$~@`M$Rq{$|LzT%HB)($AZ~Q9n1+6?f6kf0=a74%6ZE_pEZK z(+Ye-5Us!3ovvKrk-q_WY4Dpc{oUx>(}pMeeViyP4XzL6xxL*RIOe~L47Y>yJeBw( zq_FMj$~KeE>tQ;qpH+rGAM#!4+pWM|dV2`?gdkd1#?Si;lg_(gI?eQL=fm9TECOB{ ztPAC#yELEA0mtX6BE_@*uQT!&hVslGGW?PRe}U3Tk>F+|vCZK&{f&ro{ucmuJ?~23 zr9rgrk;f6&8-74oZ#h3tdD8jB$p1CWC+nvU9GKGJ;*fJ5It_m@=B zVdRtT)jxrwJ|CnE9z+*y2@QK`knHa&48JH$nxCu9@Y_N@kG}O8{!GZZK3{J5Eg@(5 zJAk|L|2yClf@q!OM7r`5lg?Mebhf2$`y7Sx4Wa(I91jCt8oUAt#h}oO8b6ylQ8@QbGL+ODuv0;XlSZwi$4nd0Upu)2fjinJh~$OhpM)=#(@Rxu&uRJN_krw9OH|- z(Bu+-n-V))TwYe))>dbCkdZW1#^AC;sqjwf4^v_X492oiq0S(a zf2=Tv=SecPc>vDT%MD4EN=4La#LHA*H!|`wf9Le zIM9A%XtZ-=bST$V2Rkt}4s_*We=mc4&}n3nPp$7?4jTe>NtT)t9$AW8ug3mVW}bRV z+Re>z)-m~%k+;X$%0E=ihhw4fbSnu{Q)5MuxOufIj)Xu}?0R!zoJ>DmrV>azwMDI_$KNFgBsRc2tIH`m^uP)`M%3OhW4g_EokcDwf^Pfv|k3^+3|H`LwU zX--;~%1NcD`X+9hqB^4gkglLVB+ns?CoGNtkNu%)M$cHT%iOkcV5EHnPU?*Py*m1P zi&LO7Gd4KT5BoVe|5}~tUjiF4<mjz6c% zVWTdS_6&1kJRD)$In*;aGGJ~Zjvj>L_rO}ZdzNsEh({}DT6l-I#9nNfRCPAn+>&W) zTa=vv=Y+P^H#KIn(7}airpoXr2RzF6f0|JI>|gJl8&Xx)o5~Ij^(=26$<@P=$B?7) zR5lA*80qPR(^zeeK4*+43!2HospF<60AtFQ_4LRtx+2ruTHgTA<#Ge!e~kB$=_%X< zEQOAztG)|NuBW>vUhmRXZL?Z3HFd4ox|+6{={2pH?97&$#(51jE%j}SWF1IXgp!#V zHS-$UvaM}3wR2kQkIlrz(3fd!$~Mi&&dtniYFU(>+tgU!*3{A}#ZncG*;+Vlxi#CE zSI%w)A#UlFhNcA~9|f+c1|7_6X@#?oi@#=SOJ+WtZMy+i zlsDJ3%_{x|pq05zu^grJ`8y5iirmo9zz{W?whe)H*_;*|nM(4y)Rb=Us(Q_-^l{(E zB^x{FS3H12wi+q{9zBlxX%?4ywLX=-P=3;BZYG9pAB!3&d{Nli6@O8xtf{rQhp0-P zn3`WtRn4#;V_y!c>~L{+sCFC`o&OfqjuXH0Utud#D>!7(aum`i6@HP@>9QOaQ%z@Q zZg{vZ*WZ)tDs+Q%nbFLKT#`!L{am3DDwH~$xNEk4Ek?9#q^B=8Fgj8&&9b)Q1k)+p zxDyVT?<~GDrc=(7&-0gP`S6PV5jZ-m7!ygAw-zs)PL1{tj}8tF42|TvX5`v&q*h2h z=@g7tHu#zz^zdPqSMY#F2a9@;G!UQJiQ+{{Z-_MN7jtqIl^P_AlMN11A?$ zZK|nQ$@FM{SCNUP=M^nF1=@_J?iSp4w_skUG!-wK?rk3)DasU5>4suOr#23lB=a{Y zWsxtCU$9bl>-oj29o=)@E2dJ{oL4ASp}N`p(v`Z$%rBlc`l1dnzvxsWD!a10^3`GA zlvivjbvJp1;GCO8Uz7g=9M5s5kzcYZ*`OD=AlWkKy#PWJ(BS43NkMBLHlTSWr&61k zSExE{i1Lc1(z4CUD_X^^P+lnr22u-@R}5Uzu$=%w8UtpBM?13hS=VGm!bh(*RS|<< zwH0t?XLP1h>?qC(b6RJfKdum0#&>pyWS4vYSQq;vA43_xL{NJMW|$567m;;=&1sjR zd@6Y&B|cdG^F@3oQbwujXbV47afh+RG>~#1o`EN@RnQ4+(S6;rc+f_%vUs{iQr34q zK)hJ|=OPvJL^hZ9@S8$UWOG@ZtWDP*Gg4f-p=|3&s=R-+4+5&4+1{SMo{?cVu7pn7 zjgrzw!12*;a45vm{_4tXBb}B|mx@(;=OG*M!#AUQIEDSS6!had_$Nv)adJtX!@59$ zvD3fuq_Q-2LKg@+G#H*$9Hp~?Plp+b9YzwRRF2J76eF!oWk#ZwCTs<4LHtLjHF(Zh zNR&06>jiPi9FD7^9OP?jQ?jj1ryw{DQ(kj(eFH-)qF`1k)7&ZAwNwh{zFG%HhdOih zDqh=~g(Hb#b7b|h|f9Bc12 z^FT%!bk0p>Q^&Gg=g3r$XoMI|%&cV^=`x!I)Mu#SE+gI+o_ZoL$OL?JFvMs3A+)`` zr!xoDr)@r;xFVjJd^^)or=Zi49q!ax7y%5o1en-ePOI7CJvK@j5u_@40PVpZ*&Mpf2GQ@+0L=C z_Ku$AsWf~a?#Xsy1DqWJcLXLa?R;`qZ>+aT_+aQgp}E@w1KkQpqrSNTx88v*&UhmZ zlk)9@bKCpdVXnM<#!wDsf@Aki_7AB_h@aYiZTe_WFAO!Ik;Y~z-XO|;*;$Hk+_}rz zlSZ^Oc2-{Ww9ZuHhtGj9TU;5g4zU`jl=a$CWMfg0(X2Sv&T@<`6}AU-ccPQdokxsC zj}cd!IZGD$@vzsA|5<7^W?hv~+P0z>@651j+=D@A>Fv3skrJ!wo01wV<}|+WX=4_I zCu(oNiPd2uTpFM&HL6d=+=tHPP%T*)j&Bx?r>E}3yH9E+`cKaEHB&{XKy!(?$8cg{ zH#XW`)(@|*G^;ea(Qz^1f$;vV6}V`EmsvP7;P2ecI4zz#+gx$-;3{cd#G){$D)3(B z^`G1WOCefv!!TOK>^Q1_d$N~s*AQregxeBTS!WB%l`USM9p^nlrbw2bEma8(g;~}C z%Zqy3LDz-L(yvP6CnZlgj*7A94XK_e`t{CV>RjiBRb&kn-uSax~O z(8ws9Zy4oStGo_}mC>JLRROag2PvrvGX`iL!lfP~J-OldaD@v_d6Bu3q6+7zL?ekd z)Z_bNd@AYt%C;>H%eHbbE1t9Mn{^-Jy_nOQ&`WC{o8R6$N&~O(Nn*WM8y`}caaP9v z-SZ!#BJpH7ZsVL|Za%4_+lO6l+io1<6P-Z zpdT0a7-kH?@<5mjZ||kWB=z70V=<=^VaRx6V26UHnuGH>)+5F!+!Wx5a6SwPBRwW+ ze%#G>s<~a)40=RmHO^~sL=&r3|rL)4*zzkj{LCnM<<+F$}$>QY|@*bQx@l ztSlSNx1o0l{v`a@JZCxlI~;c|lLN-s3GA7mEg)y5Bd(R9qmCY}cXo z9#M6vs^zPe%doqE_#8Uswust0C^}7g;jpmdUKosv4;QGSrpockzd0edv&^7$3Ajgi$o1#d7Ii!>7;Mf=nkdfU)OUK?+`(P5v96qbs=0)VxI|59Gl zi^sZ;7e@hLxRT4KQ2!WfyGd9_uu|nFgk@g=fYqGX zRhtMe55i=d;x;_=xzkawgbKT>H&et&(O%1*q09Bhkb3-qIcLzLs^Ov2*m0&$7&}{G zmFe@bos-NuHJ5L&gW=GsIX7#w1K*p!S=`C*PD$M9nC{&~bgN2cyf#E@F)ZmvD za=45mW>FuLZr(Dznue;QoZP9L+m795W*N??!)F)TuK>3-Tm^ffeDsO^ln~z%e*P17 zH((CiBAJioO~f&sQIQVs(1AQF_*FvwaKRrSuG4?g!+B>AOdt2g=6v#wx5#m?ZsxqB zrOwX;+Q9)i?m5l!yfcVShj#$f>9mP-zoKA^3Z6EvGX{@HYgnC5}JvzR%I`^A*SY;HOjZoh=SdB#v?? z!*{-~-0%Em!LL>6u>9R39r?UZ2ri#@z2NeB-xXXw?^YYz4C9~W^X{!UKkq?`!!{!3 zlP0d8w^{Iag`Tq_ovnfM&aX>^d_81}^}y$!a6Xw|EaatrZWdhX=YGMZex4Fs>gN^W zd|$2)A1coJ*_^(x{PCop?TKss93%K&gnlj*{4Sw~>xgsuXHfbND$e@B^Oo>~Kcs%% z6kO`(6Tzi^cHPt@W73iOIg~i(=Lpivbj2yzph@v_ZL+}vk-oH-uLxc)^l*bp=UbG{ zj}>Pxpyzx&GrhQutxc(8%rI^-X| zEaYYV`M2P*{*0%6^-yoJ{_H2XtUooxIsYrE{cKYl)5A}PNJrM6lLVLbVU^&rK3pca zl)qJQDSxlvvi|H$8^Ce?`NW1JiDSM$67}jB!M`c$`3-_UCiq&xrTo2u|4XF*8^KFO zI?oF((|K8N^yRqS*l8Q1Zd3p9>?!7Z5(m*>Yv6lXv0z^zzpF^+042X4$sa7_2ZVfD z$sa=UQ-yqokUvVvmy>+0kUvMr*DLuWNWM|X&lU1`4jFy`ndhB`zrbgakjFEHSU*`M zUuVUGE+N0YkYA?cXOaAXkVhY$(_gOS8%X~1LVhD5|3xL=Nb+Y1`L7B23zU2_$zLqw z?-cTvEBO|Zzgoy2E99?N@@*u4vyeYt$gfrMyiej?LjD^<{`*RPKBd1-$ZsX&A5roP zNd9L+9>-j)|KBP3g(UyHkUvPI|E7{Zp5)&a^0x~4akPOWAXDGENPaWo*q)p!Z~ zP?XEC67ute{x{#w3b20uP4akN zAbzmirTp$n{$nE*1bchr4^;A>ko;ti{9#I-<19ye^bz zX9;J|^U4`oCB5yfgQDAurSayOQVr>wO_F)8C3V!shzJ++qT<_FI@-qDkmHa{6KMHx7 z{uN4|`@1zlUZ#Jyl0Ssf|Gtoy>A$Gtk0ANig#06-zk5r`uO#{Rg#0VO*v}ugqqS?U z58oj9&4^=txI(1AqmsXpR< z$=^WoKk~>wq2zBQ`CoeEpI7oXk^G-M@_$qEH=(7d*l}@`LKQ}&USsi;#?mtQG6}k_cG$B zw>nYJuP2V-(W?Z%Rmg8D_&p+hoPV4_>HkRa*~A|c>Hk=y^Q1_>OYmO{{t=|X?b~xA zeT?JXN$JycM;NzXL-AM&_ZmOv46P<5nK0)DuVjd|TxIIKlT4yiagUjO*1G1n(34BEg>*dcIEZw2;3? z@T&#?iQs=1>HJ>sAtBFk8hoy81m9iAe@1YQAESJ=;IoCiEK!JT<((JD>&LS ze(<>_diZsM%XDx}h%5c?2rkpVz{B?zT&Dje5APOSrvG^lpDnmd{|FD?S#X(tt%rZb z!(}@x(~<2hpErd1-&Uj}+mkt_{lK*5fJpG6$=FYn9kIr0;P{ADDM`ClOT8sb`ScM2}^ z`2*sZ&T5g)qk_wMSPH9~c4liK|0y9a?dT}Mr9Cbd{L3PpC4#pL{{Py2DGY4%yiDj} zFQFgV-by{oc3bNC7?IA9NJsKB1b zl=8A1{{+v%?Nu@5DASSUc%itjEJrCX%TaP!jxs;Rl%q^XmZQv%EJrCX%TaRK{z!Y2 z?Vhy9BW<-Z^-9{~X9bt_Fz4YsUc>q+@5}ura(Ukxk&e8tOkcLEy+U5*NA~-Nh;l3; zdF)^A5xh*KBiFqgF8HT~yzGBB5qyD=m;H|P&*gm&5b`n|d0*eSRraSPA{{Beso*z> zeB$%t2lX%c9)?=JwMV{La49d#SKe337vl$>Dbknu++1*Z-R-xB{mc3+^)J(r z`j_eW^e^otC-N`r)qWl>$CU?)^4)&}-6r4fd@y9g! zj{Hpejz1RDcjP=KMYIb4fe-St%{Tkc8v2g>9Quww*3oz5=hAolv7Wvo|1y0yKcEfA z5AyTOH~SCIZzDfn@M%K+0>Kvxexcy21Ya%q8o}8&#y_tU{3}9!z2FxMZZZzPV?Hkt zyaWM!@W)rpH~Y^t!M`T>V!^*I_$t9K6?~20mkGX3@XG~XFZdOL2h_jepT8k^iQrcX zK27ke1Ya!p)q<}Qe2w611iwb`b%K9W@b!XUE4XpQ;CIabb%K{{Vt+w?z2MUX|CZp3 z1;0V?Rf69r_!_})5`3NDJchzQzbg2*h5Qy|@R-kA1fMAQt%A=I{5HXd1wRoJqtDrb zpUx0|UL^R(g0B@E<@p)DCpgN}G-$x@J>e};K1+7;mXJrzt10fcT|~KS=yu!EdK$#UIZI&b~474+Osh0eyBS{o!+c zhavo|68yV@FBF_(kND>?!S53CmkNHj;P(p7zB>N-8Nu%r@*fEPJ;8UU4jA))pWs!3 ze_!y0f^&=%|2!u6{X+gy!5r-_(Os(6#QYq z#{~be;Fk*ih~W1M{;1&32>zJh9|-;v!FQ+ni247i;9TF4|4i_OLjG~V#{_4e5dVCs z;6E4g_X_?C!JiTQNx}alIJOVN{I_lF7tH5V%;4ul!G9@uv*5oHd`$4C1z#ihuLXZh z@ZSjjmf*h?eD`hbFPP6~1fL){KGzxaw`qd^PRK77{8_q4H_C*ytJ5d1MA|EAzi36ANrZ}*nqe-ZL> z-S1xoFB@-v!TbJA@Mgi^5`0kbw*_A<_}>M;SMYZP=k=&~-**KMcCf!7e^2ld!T%xn zG{Ldof0OKgso?Jm`LhK_`B!$bf23|FKzHR5yg7X+`-Wq@kw3fB7nJ|3;3a}L3NF*f z^-lbe>9+_j)BnEUC3GR)_c*~P3jQg<%LH!~yh?B$Yap5?_{Bngmf$-G-YobR1Yaol zxq>ei{4&9p3VylZgMzmSJ|_6L1YafiKTt{ZIh%eWdPnfpf=?FdTq^hv1z#ih1i^0< zd>6sj3jS5W?-jg3@O6UkCir85KP>o@g8x-K*E53eDdg7+zEbeF1ef*m1Hu0&(l-VH ze?#<|;9Jml{BgZVe+!Y$QG$;b9M|FSXLrG82>BAhGlEa_@G=jt^6+UMKFhXfOER? zz9}Kke@A(lpJLKk>`CW+Q4eK0J)ZoWC(E7~rk)KUmJ}>g~RbKH| z*{{K`=7aoTabFt#2I%hdJ5nep)5mo9Q$k-b9risDl?i?(ea9cu=sU`vMc?s9Gkr(S zbrR8H{0BbB&oSTZKZEog`MH9x68y`8uNM3~!Pf|WzTj&Gzd-PHf?p{3lY;ZT5Um&d zBKnR$-V*#Pg3I>vV!?TxDL!v34v7Fh_(R4a%LJEk$Z3MhIApWnmzosqKZ^yIamYcz zWgK#q;4%)mT5uVMTq8L9s(9zMf?p-_vrcdshkR1-H9~&9;MWNLmf+tMJRn=ZKg&2I zu7$%7^6Shu`%j7B*9%@I__qX~Cio44<6JO)F#Q|NH~Y_G!EX|LQ1F`tUnTgr1z#=r zErPER{8qu&3Vxg5>jb}D@FxXl+rdAt7yJ$(|CZn~?i6fng-{RQ74qW+mvN^O!DZa3 zOmG=@nkKl6JMlhac;9=)eHROP8Fv~KT*jSN2`=MKs|A;Fr!|7hxYJs}9}xLjC%B9| zJt_D)A-`Vm9|``J;13EOY+`>wJv=1%c)=eQyhQLH3tlGpBZ5y8{87Q11%FKN#e&PY z)1cr#74oYD|C!*c1%F)dHG)4O_*%h#F8DgZejnRl;BN{3g5Uu;K&bye3(oTz$X^t^M99A+c$wfY3qDQo zR|MyI5KRA7!50g88Alov{B@WDv;=WS^$NO$nYQbTOzdhT68pV%3-GW() zzkaL*O^Q#PW5ImId(W`o1jX-YwV+G!PwFigR{Ug2U`+8I($AL^KX-czRxAF)5ewLN z<#L&QisjsAF@I)T%ek#)Ua{D6ZZnxLpaSQ%i}}+Ft^A+t4^vODT=t{qeMRvf&;zmU za5_Id#tMF@i*>qA${-38=ew5;O zQ$FV?zL501Q1QEVv+3j%|NMcL4=KLu-j;ts@r@6+{5-`oq@T+ae{hwR|CZwKO|$&F zir;>u<(ic_~Gx3~TVpw{Ny87{cc|L_&aq}wmaURne)kZ*Q?~&?p7$yc6X-YYrXg?oW!d-My#y$7H9QlK;>7Jb@gC?G$Ib z+ePuK7ukBSkK$~1`zyZw5Gy}fakje(#VZf8@<%Doc9&7Se?KeVs5sl*JjK69{>En& zXS>TOej)h@1B#!uuf6X|#o6x8QJn4WYl^eoU8^|T9ghdOyx8vUSMqFkKUJLV?zf7w z-My$d+uhrWv)z5HINROURKGZ%Y@wlswzr`HHjMU8DG3Ia^QeP<%(~*X~oC?e0g4??ZOF|vQG4HK z6=%Eqlj02>R{nLx+3wy}{3G(`KUAFUZX6A4Sf5{9X4BtFakjf16kmOkmH(9D2T;Gs z>-so-wz~=?&vrLmakjfA#o6wTSDfvxM{%~h<%+Z2eMxb)J02Hv{@L!XRPqn5vU<2# zakjgA6lc48SaG(yrxa(qdtPz2yEhbPyZbeMG;%s-PD1Kv^l|NH)w!8Bczbj+qzot0b z-Ia>(_$4dG%k2rakjfZDb9BHSH;=x{-rqE z-4s0b=cY}(v-JPO1 z+ugZ}v)z4Nakjhb6lc4;Lvgmd2NY+!`x_fN&&+S2N6OZv&_ z?7N%gJ1Wk0w};{n(|Ej8akjey6~BJark_@v?XFt!o^7oBbj8{3>J{I9u9a_5ob7Ir z;>Xi?utRaSyB@_mDeg3^_=DtcuTq@t?tI1B?k-oH?d}G}+3xOCobB#MinHDQTyeI$ z-z&~`_p0J-cke0AcDE5$9QbhkVY}O2akjg?6lc3TP;s`qO2ygkY87X@YgU}??gYiz z?v^Rec6YMkYDgJfxWB;l++ueJLf06p@j}>RT+m!le{4>Tyzd`Yn?G$Ib+ePtZ2ig4Z ztN63jZyusJ+g-KdY1 zobB!y#XtKQTYuUWFR!$m&xzoCvfZ7eg3ch@NSgFCG}pYOo(YJYex&%XkFx3Wc@3QYgcX)QqvYA{UQ(Rx z?(d4T-F>1s+ub(QUh;j}?)Ffe?d|}@+3uz&&UQCVakjg;inHAvt2o=;62;l>Mighe zJ56!6y9*R&ySqYhw!0e@XS=&gakje$6=%ESa~W9AY31v6cE{&0@bj*xiPn>q{C?zro~}6C-9?JC-CdZ#Vgk8;`fo$DHkME5)ZCVdZvG zob7H;#aC8a`TZ2Xg5sws#o6wTQk?B>j^b>03l(R(%PG!wH>5b*-4_&RyE{*Dw!6y} zXS=&makjg=6=%D9SaG(yrxa(qdtPz2yEhbPyZbt|7INRO1ioa~dgNqes zySrTR?a42_R&lnwn-%}o410s`D$aIypW>%bfBKN(YD83QJe-2Q*dzF<>DgLih zEw5F4i`kZUD4wGAFsCX0#j{_FmWpp%YxB92;#^*PD4wJE#-|nM@;XrQ+sXf#qBxgVwc;mJ zJ+D=q%d1}TmE;{Y&v%W?T79ce6ja{&0D1t$5uO zE4Pc{Twb42{3p|_{3ONyO67R8;uU>X{#kst0RlJJgWA`Y|<#oT}wY0wNQN_8uo>2ToD&OBK&gJz7#m|^%^Z$zC zTwZ@s{8Eaye4_Z-w7z-=@^`qNe3ksnGR4oPcBV=3p(QpyixlVb$|`=$cq`wdIG5Le z;+u6_`4x(Dd3{0guT%efj^bQi7b3M?UCm(6$4pyAYE2a3hg|b&b9tSl_}6Um!RHm{@;XiN?^1l@%ZhV( zU8ML=sQtWF@rTJ??oxc)Mw_9h6@Q}C@^=)!i`tWaE6(M$G5JSa?hky{rn9Z$TwXgV zUbC&0-&=7muTLv}z^ASJB*nSBrYQbC_18x#&gE6Bc+Fup{ke*Bd9^BjJoVQnD9+{8 zsrWl7oBpWcbH8Z$*^0kU@qtSepHBVG<%;i4_5V7>D_7a{?^FDV1(vT<{N|%9e@5|x zzhL>F6z@32@;4RVoa}cT#UZ$!3@x+r+bYiceC?t5GpAYk{S|+Zo;RiVt0aG<;yaPv z>J{hwWIg;G#c!f|b)n*e4K|-QDESCgOlXT`70*>ql0 z{Gx*_AGeqN$@>2X^~;+p{(JHVN)$h9oW1@4#lKAYKT2_4=TxWoZ)v>Iqj(wRbA{qH z$J+azuJ{6KXD(5^oW`fuEB^UaHl2GFXZw0s@rl$g{6g^usb70mao!8&CB;u2wfB8P z@q6~Oe3QNHPcD~tsXg3E@#WL3T&dzY@_!~OKJ+;&pH}?058+x&r$sG zQ*8RjDgGDgFZvZ{J%3Jd*7F&Pvz}Kg&U(H=an|!SieE6@=JP(qS>FStIio_A3E>pR+X_EVhoT&6hd`EbQq&odNf zJs+bu>v@6Vyv}J*an|#4#gCj}^M8TjtmjJ<-;Ua!s}yHFU#EB}jR$X2ob`N<;;iRK z72jcBo6lzzXFb2HIP3Xs#aYiEDb9M{obJQr&U)TfbLzhiP@MIAh~oYAHve^svz})w zz6)jmK5dG#o{v@h0`gnB6lXp6Db9L6Me$!!Tz9qNtmkhi&U(HwUT5XD2jqB!gMQpLNd9ayV4>-lcQPoweb zI>lMfk0}1=mVx;^sW|KTcZ#!~UsHV6ER#&|k>af9EhgB%bA4bv@1!{Ec^}1D&j%{b zdOlR~DvEp0Qk?bNsQ6~ok9RB1dhS*H8v1>?;;iSDivMDzef~2QXFXr2IP3Xp#Sfr( z`*##)JwKp0>-i^&v!0(;ob~)i#aYiUDgGjjlRs9R^}I=Gyxdo9ZhzlPan^IG;&&Zv zDb9MXP@MHVO>x%q9K~7B$0%M$@xx_`vz`YP-;Tz)XDiNnzCiJs-ZI z&tFrV^?Z%utmj)4XFc0KCEr8yLBCO)_57UT$1Sw^e^+tV^M{IGM}F)kG|$HQ zVLfl9_;r;w{hbwOJ@2hJ>v@vmXD+tsOjDfo+@SdXSK6JxMOA+P10Q!>LsO*G#3dqE z+_7BH%+Opg_Z^pzObd6iRNOJmNXyVPagEdp%ak+|)66A}EDbXgchgkVGQMT?zt5a= z?D*-qFPQ&tUga?FIp;agJ@?L?doKe>pL>E!p9h0WpGShr_B;msQNF%34_x}Z0Q`0S zoWMG8>2oUh;YPH)TfwEz>ELzv_<29L^!ZzG>GK)z)6Y@eTj0{?{K53Rtas^iNpR_N zAh`6o8o2cNVQ{%F)*4*;909&$0L?E7T>2ah-ju>UvEb6@@!-cEr-XQL>GK?L>GNXn z{V&ou8^EQ{Y2ec5UEtE^L*UZqW8l)~li;WLyeS7<`usO|`e2%W0KZ?!_8@((2p-AD z8^Pex=UU*W`1^E?!KKeF!KKfg!CTL!c@74bK0gO8eSQI4`aA<%`ur-m^!W|&4n1f- z?}JO9H-XQLrueVGrO$`K&++x!AHk*1r@=Qiq49qKmp=anE`2T(LV2>@3-Wc{Kyc}E zb#Uo(U2y61BjD2K$HAq~PlErCuS*XFmp%^%m+x0i1D8H0fT#2K`xk&qpOe5JXhHp2 z2`+tJ4=#P)2L3*u?;iq}KK}qNeLe>+ea;4#KK}_Wea^?@0*@R*@x8#M&x63F&!fPL^YY8*2W5Gs&xsH(eSQmE`n(og z`n(Zb`n&~v8t;EIz@^Ve!AtP@`BiY~^RM8$Yf#_*2A4h;?>2q6f>2nuw>2p7D>GLpf>GMeNx@~B=W`Rqe=YcQedTfvL*@w2R-VotjGIeO{yL5P<=p8(I9MRl{mrO&s)rO!q9dQ35{D}62lE`6>9 zE`6>B{y-O+Pcv}ob8GO{-6_5gxb!&+d~be=9}X^kjs*|p&ml|%mp)Gimp(59Pc1=p z*Mdu*KLnRPZwHq??**4We+w>sJ_i0GUvIeqE`81cU&iNy{celiGL z`Wy_N)|ti)1(!ZI1(!az1JCbA=u>01W4d|u@TaOvkI@HKoq^BedOJ|8T>uMgQCZt(sh z5PS!}uB(HG^Kq%X&Sae5`MjVR#0T>EMFe=IVbq6i;D3dYM}ha7Kt2Mz<{CX&gVUFYBube_o|5_~bGa9|XRIkHZ^+%XSs%;v>L+Ye3_V0bfy)d@i`` z-xh#J4W#&W;QO1CZv;X+GbTKFj_*5c~^X zzm32pz8UyZj_(crU<}PC3cMum$6f#*#>egP;Ai-AKa0T|PNDIW!JG5<#kPV^;_DAz zgCFGgujAmEG`!~mc+r{k#7*#h&y)WHUhp~c;-Pde{l5`OkIRE!8A)CZJeprWb-~Xh zQ2e9de?^c#0p5X+tGj}4nMUyg!JC#Pe-`{iLGlUU4Y=-f@NwLiSHaJ=r*Yl_AI;m< zJK(?Y=LSClZyiA6>;Qi^n*0Fx6n=eu5B~0>6n_T%DlgYHaQS(vKf!m8qH&7UqkCEJ z@_SwH1#iyp7nQ-66{Y-|;BRyxZvx(skN+P7uR4+9JA+r|_`cw~`E@i5ya#X3W565q zr17VK&nZPd7d(>plW&5z?o9Ekz)SM`-3Q>yn^F8W@cO(xe+ix*L-F5&NAY>qN$@57 zMtB+gEFVAo4lcj%y8!o9*82*69o+-ImG@&6z>D$qoQJ^WxTOL3)BO5s2|j`M|4)K1 z=uds<3I0-R@*&_QN0G;ZSBfN`4E{kp`8@E^oyeDf{~k!50`6axT+VBypM7eO?}qqD zzJ7if{ONuae;PcB$GHK%IGp11^KpUH?ZEvh1Kx|5t15UH_qhT1(Xljs3-AEm-r9i| ze1YP-f&a=L1-?3p;zxiNn?oK4-o6m|4De!n{FVrQjq5H2KgO^36!6FS_-7Ni%zr<4 zzx*_x4Di>UB)jZ+5vXWoz10PoJ*e<=8KvuT`m;J>yb z?+hN^g?t$J5xy=q5`26D#m@pi-I07A_-Gz~HTaAQ6u%Dq%OLVy;KeGE?*q@`d7c8F zd@sdc0RMrHTReOnPWpcj@2?7jKg4w(0DpjA*VVxj#!=no;79m4>M`(Vc>C-NUX{1= zLEumDdEZ3v?e|dKc<|!k$BuxXbW5{cQU*`VT13wi^@qNHQ zaWF4uwQfscNk##s(7eOM1J*UvYD%k}e};Bx)^EATt}2k^DL zAHEDO*YU1{*SL@7UzD#0$oi7+Q``go9Pc;o1DEUVmBH7Ir|};Kmp<1Am+R`S!Ef+! zNOy4Q^B{2P^9XS1^8|3|^E7bja{~CJhiJK0fJ>j>0Z-@Sy&d4v=P$tJbE{v2OP`N` zcje=Rli;^f?S%e!jQ`_)R~WM-On> zpY#K7^$f*FgG=8=fcx?F|^jhd7N$FgLr@UHTds*9&`k}Kfho83_kfOn$I=xuZNKr4X1nQb8kLx zEeHN}Ws0i;9^Rh3Hu$BIV-G+=o0L=Slys4<^44d@HZ_%HXStP<#{c zv`OU6!9DTh-N9G!`FUUPkNNu581UNzX`C0pUu#GH8u%+U$=?JY&Bt|{!0Ynj-lg^OPT59Iy1T!)Z(PV%Su_&rAV;xeCV zF5be$d%O5p7k|~o*SYu?E}rG$w_QAtuRr1PHgxew7a!r`2`;|c#nWBi)Xs{uP*M-=T*4AYPom>xSV%)247o|`ZWSvw*LedUkzTb zJ&m&-ytSFIbK4DGESOw=9#od=;{xPoAbv^%@=M@xgUItgLH9Dw`y=RaQSeH9d{q_v z+Wi#&FnH7q@>bxo-;Mwem`(9f;O(oE4+D?pP;Wco7KA!Q5pgigS?pgHs9`MWj{{9enbM8YO@CMN|PFwKt z6UaM)kDW~ZH27!XwJ8iB7J_V8jVv5d@H}dR{)py-w^OcQ)!$=;E(ku@8IGiU3{U7f8ydtz zDEOrS@+RP4^6^zS@JD$4^#%9i>m>8QZ}4`w5c~zMn+l%B`=u@5C!J+5x9`B8=kbq& zC-VBr0Utk<#`y-ykw{M-UuUZ?HBvno)%C>MXx#TU8w zX7Gn-c+YllIX*ZF{s^Bh-vF1_*Z;ux_Mid*9q;a&yuK=dU*O}~N5JLv(hB@s5RKa# zTwX5&!6)>j_zB?hzC0PcLOF_G1TL?yW#A)u|GWcSwyQnhLqcf$%itwq$^QnI>$k;t z`<3lbuKW3e`xl{c?gwuiPaX;`-#3)spCRLS=IyW(#LM>$2Y}1>4dwHFGR`Poztdde z7lFUYb=QK+_*=o{`s6NfxgPi}cvn8oJP$5?z5yN=F!eJ(UniF3l|Bc8OP?PA zf02(v8iPxp+k#6U`hZKHhl5M}WN_*8d~k_h2`+tJ4=#P)2Hudj<3r%m=O4i3`uRC< zxqhAvF4xch1m74%>m^?#-OGBp?dF49%42a*z=SOdX%X(P_F6-rea9J;(fXjN>4KC|t zKln~Q4>=7k>*XSNr|HyZ`S}T1URf_W5dThXiqFsAe~@@tFMi+~_`ECtT-Hksa9J-6 zz-7HO2bcBI5nRr5qQGUni~yJQG67uH%QSFVFRy^hdRYj*trqodJ-Dowjo_o2Q2aJ< zSuZ=mPuHaQ1K^L1ApZuuI*)%6T-M7?a9J<6!DYP^ev0bI_8{ve0Q@hxo&YZEr4hKS zmvC@dFHeHYdg%eaF^cBb4}8KD^0DBuUM7N9DopV+z-7I>48EP;=UxY|5l-VQ0dG2% zJOy0V%ctP7UcLaA_3|~ite2DE)A{=mH^61R{0%ParD#{0udH`jFJ-}Hy;KI5gG-<1f^UqXy03vBszUxQxa?;> z0MFp_noq!`Z}N9kr2pmoY5aW$(Ale)5>DafBY5SR5* z7Q7o@_j?Fj)=L9$SuZWXWxccmm-W&OT-Hk;@HVBW52L|ly~Kfk5J&OTz-7H8fUo5J z#sctSd>tPqg*2@X-jr{%Jo8S*Lr{(V>z~lJ5?``lZQz(8Nc$XmZ&ENqX|2g>ce7*4yxXkCQ zi~j@uGLLgVUl*5tzSe-|69nFU7I|~<4ZNK{20od65V*t-18>FW3p2s1@O9O>;QmoG zpH<)~rODp~pLs9&PVj}T$iD!uVR4Stqi?<2s+^6P61_yMzk&TS_6 zLGIgX@Y39`UEmM$dH6wa`MX!&g4cj?PoO=rpBX`QQ^8kp-_pTbPo($*;1Yk<#s2`0h^KMx=kJq9e`KCP z;H7vzPk{Firg1uezZ^&29bDdb`hjmAPVu9_C-ZfW@!*eeKWBk|Ux>ze4P1_k-T*Ij zKgE9tUXtH84}&kikK!}ID^(!R&+h}$&jBxx`+*nZ{a9`A!m$+J0DL~b@ALB@b+8>{0%dpb88vpz4OTULmsBb?ZI0OC+`CO6z?AffVbn<`!H}h-;V_^ znBU{Q#e-ihPd*#`1fQ3^4lZ?f-fn`wz^`i$pZCl9lDb8~rLO$kw!}-_st}*dj~@nqtsc#%F}T!i2`+Ubz@=_4 z@KKFu{DI)_vX20ly5qp5?qqPOJ0JWhe&2Zme3)sJb6W{6b=QMS-A&+9cQ<-X8vg+J zi~{7D;8OP#xYWG_E_MF^pUuak`S^HNwufq5w-mV4Ee|ergTSS3DEJP3ziR^iWfU!M z8*r)H5nSr_0GGPa;Jx|!+eq*pygg3@m%7uzrS3d%sk;<>K?_>06z~uDb-fAvz!Zv? zzhfZlWi-EEdo3qiTplwna@FfpX~?n^7jQ}z~d^?_+!Bz=JTU? z@FUeIejd1du6HT;U_Ne11)t03IorUe^Zw^6@Pd3DEED|Uf;68C;2oYOzX{Hpo97?! zXZZZ6_)yA|evahhq5$wW9;LXd;CuM|qAvK22^8N5{7?z<7T_(y$lHO-{-qoEKm5Kt z5d2v_ZyFB%(Bm}zIPgq9--!o*XB@@P1%HXhk>9r=eM@|V;#WX?KE6(}0leijivJY6 z@Femt!KYRxKMej3uiz8lWBEMgBKSq#K5v3AYfR(+4KBaOrzme^!R6=1 z2ZK+qO5=mb9x@8|c&G2jPzxu$@R-n zF7T^kX+HbFzvtss`8jy$^8w!f9D(=_1!$b(;GOyS{}lKsUakw^Yj{6-1$y31;y!Ew-^%fyg0JWErrqEh zAENol?^lrRFtZZ*F^Jz2Kz1TLRbssS$ZYy$onzaHCww+*6sbOD$7 z4+k&Wh2mquukdk5B6v;i=OXYWkI*>D;0211uLY0h{p1eta=hNZ0RQJ<8s`YOEZ1f5 zHvBp&{v74WdU>G&JuVG?oA(=y!6W#1sTp|5>NL(E@M0W441Fra&jz1dll&F%cs?(9 z54<*S{~v*0olWD&-|dv;9XgTxBE-MU$2n!5r{^X9?>h825Zs^7cP4^w=kv$)?D?GZ znKXp=-_MoLQhrQ1Pu=@$w(&h!Ae?xhF<%^WJSN^8*!OD}A&t#YF z0HU1fhm+^lAAHdslVLmR9`Ap&C&tmMRKTFj3k3+nS z-wAvLZ|6h6<@etWQ{%s-#$Tp7nw`T07+}mpWp%9Plgzg)#9Do<9v9>$S*ZUL9S@0$fK@i)PXKSV|3 z_g$I!uTXVs@^L-(Cj$H--tTo_H{+~S<0L@5%x4XF^U0L-t{P{R8s{9u%Q*SRQIO2@ zYD0QlnBB~0wHhZ(`5NV2VH_F%Srxxl#m{nyU*+N(z|Xd%!P3Cx=ihdNFX}+?8Q@d- z`0YpVq)g`4#+jD~k7wr+ew=Pkek(0{p{56ju-YP-F5&?56+k5PAPyt2{;d zP8dh}e?rB-tKxH9;>+@JrK!74#n)w*<&yE6f#1`ak~)A7;^Qv)duTGw$@UaK0_yVR z8P6mb=N|6=N8poqfBl&nXT6&LS%{b8+neBWJe;4;pG+UjH~~CXeRi3@^x;u(+3$4% z-^Is6PpR=YsCiC=_+Gr8Cad`ORQv|z?<@Zj#*ukmaPb0s{3y#6(~|}(!fyI7Lycbp zyemKV6pSNv`+`e_)I|KeYyIiM~ zab*6*`Tbu!?H(HEes<~4`#erdi1%+t@$FQ6jzd}b$)8eg`h1MX83yB=;r;kH@Fvq~ zoS86AGLOFm;$@r^a2Y2J#+k&g-+d4-<9rV;;}qfdf9X%vf;7*n?9xx^b6s%ha|;-! z8ILmr;-$|cRlMnQIM08ka?|G>JkAmrN0uuET$U>h#`&E0=LaEP#yJiy<6KrA!0X&} z=pXPc_>B-R{okhIP57lr>p2Ua$SyzEVwTs$r?da1;?3`?kv>%5>xj}H>BGa|(ueNs(uX}J(YeJ! zy!2rz#2@AOr7rO)-~;$N^Jef3!>R6W@K?>moSXcdkjyiGaq{0GUglYVj|Zg>@;WLF z{$>>#r!u>YUz*2n4Sqj+e;7yVJ_CNEFpWO}d`=nimtp)c9)AUR8}?6O9I1O4;(K!Z z&k!#^=k+_d9RC;M_YLX8FdnBa_~-0h!4I*^&taQ!KA=VQ{ySgArz&5ge53MD!TDw9 zIi>tV6`unx@s;8!$js*>72i<#Cgo2m|5*88a2bEL^35v#ZE%U-rF@Hu|3P`0^6Sb! zQSLXD9+>4aF5}l$zE#Dy0hjn^ly6h<@yb6{{-*Nn%HIc<@xN96nTo#zF7fwFqo91w z-3}EWtUO(LB)h!c<#jOxeBDe+8m7kCsm56h@$xySmEbb|dhieV_&*)IKA%_aW;e_A zxvF~-;-&6iDt?!W51dX9aCyVPWt>*vGXM7AGXH_#1=>)(A?#-UyVZOqL%h^o>*61P z%Y4$nWj+VNJM(_^8+J3FFVuW~fq0pZzd7h}ZYF+@_bd9RCcE@g;v0g?Jj20do}FNP zf37hQ;(Nx^6LBj3OO7>n3n5CYqVrvGMq>Ccl8FZ~&=;`gih%!GJZU-Q9bK1;x5J}EH1%;yt`m-!r4 z@dwm=u0Xuh{U5mWx%4bbHhuU?jZ=#q`xyo<o7i_ z_IcJoy!1zYAF5fdLux)JAztQl5nSf;E4a)j|7;pm#^=*z&%Nx@H_JQy3NB*rEXH@=w3;d|! z&3QyNKXqEUIghA4jGnj%-ts~68|%b!4B82U!gxxbHH){A`JxGK2xzb3eR z-nbFC^uGihXX%Nd;Kd4&j{(0BOFj);u8+ORZt5PUQ18F*L%b~S7I0bK zbZ}YT{ot~^$JnK=Ebk?Vm*xE*xGb;V9GbMO7g^r&;Ih26*iGGU)$%?D@v^)fz-4*6 zgUj*`1efJ~j$P`?@=k$xS>E~Jvb@W{WqCJ%%ku7IH+8>L%bN-Dvb?9jWqB`w%kusT zF3Vf+Why3hOLFaU?6SUOd8>oV@-_gM_c@4{<(&X7%Nq|a%lk68 zEbkI_sVmF79^z$rw}Q*^?gN+Q%>Y6p)7Ana9Q2}a9Q3U za9Q5E>{3^@=WvLZBJqWqEhA zOWjgj`v}C#@}32k<-G|m%bR~54JhkNmbVJHypJ~oZ`XnH!`RI{GkK2YZaBotIAg%& zdj3@Kd-?rkrW*g48vi|r@5$d++oKOtV~-Z!6uO#CSo9||u0X~m9x?yllbt8ro>UY08nT;{VFT;f-POCLT2|KVvW zzM0)D*BLdRZy;XkUQ_XBRea%B>46!?xb&esJNBWbia)2uX|4Rc^4`iXD368lWk2=; zxXgbVxa`N~flJ@sVmHfW>XzWz8z5fxW81)GKeiuS_G8DuWj}V6-PFCvHO*b2M0#NS zXZq6nZ$;&ols90P{!4$FflGfL2bcbI2ABQ}U^nwIb)`SgL%j57GPv~T6>#a#QgG?d zMs`#8vRdA~%70OQQu!6-x4>n)E%F)#N#A5Y`5?ITtq!=n9-Dwm-<|-^7ew`*WH-xo zmB{;VG{j5Y`7Zt@xXdRRT;`JsUgJ3`zKPw;=bD<&*BD=)p1h*svsHY-1@yp-b6t4_ z_4p#LMz#fXnh81DEAJ11`&ZgI(&%@)lS~laM~k@|FRY<*foP%Nq(V%lkOH zsrxIH^8VWoTwZr0VH|ngO;z!~sd18&-%`E-#+k&|L{e3}x#amvaZ36U;=7h7KMMZ# zL*$p#IKLBl|1I=7J&=CN>#j7oeBZ4yyXlV^r!=K|+CY4CV|pS&#hdwGxR<;y#J@9v ze3*(a?i5Kgg`C?ch<~>W`BaDxBKEun9>Tr?Jd}MSco_Rm@No8Tz}v8&0*_$74&H%1 z-y8IWSxmFMk?f_xpJJ~9-i^H;cn|hg;Jw(pfcIt}1m1^z6nJ0uso;Eh&+{616vwXs zk73^k9?QN{d5&YfczgH;Jc|7kxO|T2I(RI{=UYUD%tJH&SoYH3aqLyVUt+HZ9?#xG zxgVRU7_HpYUBJ(c2ba$~%~Ec*lXx?Tb6W(SNbFe)p3J@(Je7S9csl!0@C^3z;92aq zz_Zy4ze!)1#WeHxeq+nI3joi@eFz56&)yik0DD{Tg6uuO3$aIo7iJ$1UW9!XxU9=X z;6*upEqF2Z&EVc%IDOayUV`I~f|p`H5AM%?3%m?_;UuSsb2AT3&9dwP;O3gUxdnp< zvNs05pS>-3MfM)x53omr2eFR_ugX3PygK_L@L=|};34dr!E3PZ0k6e=6ub`mdGJv7 zTj1gBg%?v_%|q|&mpuSHnLQYM1$$%gmF#W7SF!g1U(Fs3zJ`4~_*(W^;P0?60#9LI z3;r(qX7F|Fd%)MT9|hmQejfZi_FLfcInTmN?(Y8w93KFl${q~9k-ahahwN>^KVt8p zJjaa9O`=!DYQ{2A6*B0hc};1($iA2T$X9-U9!W zz3^NA_TMa5I(q>4ZuVgCz3h#_zhZ9-p26M&{5$q&@J#mc;6Jj@0?%S!1b&u%E%-(D z&EUVV?*Y$dKMMXU`+4vj_FLe$*$XedyZ;_OzX$-A^Ri%YKaOtJ|4Uu`z-J%_C?@B+1G-{ux|z*!M+DPmi;LBSoZVa zaqPFiUt%x(_TBxDXAc0M!5$2rz}^^q9(!BxMD`xwud_#kC$WzQU&=lUJehqF_-gjG z;3@2z!8fq)0Z(N=3ciW`Ja`)WE$~m-3opOB|LN=j;Jev_!S}K^WS8p|p66-YM^yY5 z9BZCQl-QY|L_5Qm?Ie&!5>syu2R`FjePf&hVIe)9%`|SUezpUa*6{ZJfKK!jh zFH}=LPsN8R=Wq3RpY5o8zKS2LoG;0HpPisw&JoQM^OWzkGHB_*#P zP|lY+yq=|;Pr<$Zn{qy7^m>UR-aC)!51-0-;X&nmi0$phh7A&J*xmGfJr z*XJweUAWgjR?fQ?uOCv*o4nVrD(6ko>xKNhci!bnrZ2t!R#Lt~c@yO;mG@S@O8I!@ ztCcTQzDD_a7|Ro+$kcI6|Kf2Mq<@*T>TDNk4a zvGSeD4=Dd!`B~+=l;2jqTX{MDhJxwC7s~4>-=n;P@-LOgDBr7mhVp&NS1RAHJYD$# zS_{A=Z1mCLm~^Ynb>->CR+lpj`J)}J1jy5B1Asr)y#f+{+IHj%EL?312g{j%BL&ORK7y_G37gz|DZfm`Eli*GW5XI{ZV;yl->N)I`M1hXDfj2^pP2caRvw~Ue=eex^0O*_vhs7v7b!olT>d_Qse3_rj*7pi zyi8eoVB&vP-a`2$f)R8o0!#E1$38_kv4&hVoZc zd?vWWXDLrq@fX1*K3n-~Dn19?U!LQ0dGquFG3VY7T;lzeFI4e?;4+^e<*%#w5O6+> z^n@yZL&b-I^V^drT=^mu9|3+JKNqQ7pa1p(ufg$A%4MHso{9ml&GE6y_4#rfIKSO^ z;+5<3=mhY3Jbt2beSVz;F8lXn<@&rk1-vegpQ`-MKF@hB4ZI@9rz_Xz>3hK&aeRhy zeg2*a9?bDs%9Gj5-9>QTeR{H$uTb$h;Ih1)0u*Gn|CK7<4?LNl^H;t~#Rr0S=jVcy zuU7FP;1VCITwhNJ1LwonJHOAv%zv#KKSISD@6XRgD%aN^dV$NaSCn#jk2XWafXjSh zmA}h1&0QS$1N>aP@^vac0el)im#BQbicbP>$=xWs2G->Bkqz{|^X1?da3{d_3q-1~t`yub2~ zRD2+~%qK|sCKVq7F7cttKUVQ!;N|$aaOIm-d<3|}M=IZ<;(LM1e4>=6srVRhiH}vT zuM5S2OF!e4>+3}c;1ZvxTwg~@0+;zDE7#YTQotoXRrz+cylLR_{*|s=Uys@gF7X-4 z^>wOD@XA~}OL@AQ&qeSm{9Ly3ohm*DoDct<571MP+5SIQ@qXa){_d}Qmx>PrFU`*d zDc`N)L%?PHP~~5!_%LvZ4_CfN#Yccg@^g{O^>wyh;LSNcO1YeKnWtjFB|cX9J|4r| z#evIw;+5}L@d@A(pQ!wRicbQU`6Mga(z8^FSyJn zL-|P_!`x+p%lY~`m^d=7ZHJXeIi$miUh7IW_Xz-2!E%Fn3yKyaB) zkn*!CJ_J0Rp9@ufPQ{0T%lmb>^7AS_0$k!Fm0wWty}+;Yb5Y7Ks`wc2Zv347{_oE! zK2F6O@5|4{E5D@T6ToFYiOMgl_#|+dPqOk~RD24!%qLa(6&0Tb9?s9DE5EAZ_kuU# z=Q5OEQ}LPL5}&0!Tg6`lm-U;iTzY2Ga=`s%EI<0fZ2xl3XT%R&J{Rq;{3fM({|y9} z_#oxKs`wD_aDFaS`EM#d3|y91u5+9D-%{}rD&Dv(Z=~|yReUe-X6m{B%a=bn7nEh+ zp~ng52VB+@=PbZu`JLZu$u9S9`4N``@?EcvT^$WOH7SMni0$&&w}5BbTK{16}VQ!M%Bvv%^j zk$bn-PpT!~e6~;W6U!+vl_D9$-Ue5x7U(?j}Q47mi+sC$j`Lo=l3DsY-{-XS>!|h zMN7W<*$L^J+`IKJ+mheMhx{B%em@`bJx(kxzxi1dnYY}#&ELR)-~24Cyl&;*?e&{t$v@*meySxu$cOo-S@O*`Df5vyZDeFWXU&w>r2*~+`Fy65KDe5 zAL@r%^6UDLA7;t_!H4;WTk=o&kRM^mf7gfkM_TeDeaP=+$)Dvzev~D@h!6QOmi%)* z^e@(uALm2;I7@z*5Bc$y{HZ?VCs^{$IgPw-{3(|F>OSPBTJj(CAwSKMZ;nZ1x#iw%`O_`=JAKICYsqiqLw<%OKiG%-OiTV2 zAM&#-`Tz4_`?+Yz|ICN_*_Qn4KGe^#S@_3+21%q0u&trzFZ&#j3&L)>*UpZhYQ;diOW6W@j+LxSju zIH$-A=S$h1135m}x%bwGfxB^ld=7-ey|MDOxqs66-?J2$NVua`CIaspX8GNc^>n( zyW}6tW4^g2;QZ$)4BLMu=leU)>6?kwH*-vF%fFb%{8}#gIeDDFIVZH$FTg*LS5i;b z`5NbMJ`-fi_viewx#W*`@@@N{l%dWO&W#tt`~CMt&STvFB)inF&h`1uJC^we=fB@2 zzXd1OxRXg=(5(K&FC4JVKb_|v%Ascex!Cy{=bzs>POM!E@0aBRnvHnn({0*F6FPHq;F8M!keoQX;>s<2NI-lz^w>v*aNDn=lW&gmZRT>fyE`d7KW{M@L_0qak2$NY@Aze z>wmP%{F5y6PjSY>`6s#5ug~?9%_P(f=fBXU{$5M{bL+vkY@U}{ zf9B^wvA+3vD%4_)dfS?Z@d`B?vqOZ|RaKezMWpIqwiwXFZoE%hrnKR06A{)gqUet?s2 z>wlJ|{%%YCt}gXQbA9=_XeZTs!|lJ5OZ^;6{XNbI*#EgM_2=ZV{w$aJ{?GjP^|#kj zf0s-B z{Z%gYv+~&gw_WNdSn40P)IaW0|8gGd zA9bmpY^nd9rT)D|?d$&**U#pM^1b)&87Un=apK+K%*`e|wq#pHJVE1#2ZTYqspe|`LV!5I>_pD>sDKXLuiG>tp| z;`~RtYJYr$NB*!?fp;V`nmPLg-iaeJmx>^lHafz z^}iF{-T62Fov-MNXeZy+|47U7=Qt_2{BOI|pT_k&LOra%*rk4qrT!n5`WY_uGq`@2 zTQvYqGwT~J|6eZkleoV89E~~t_}du>`~R3r{Tp0= zg)Z)V?F@6*t%Z|sTmC5XVSDEm$I+&~NyhpUTsNKiZ{!rlo#{hPm0i1kD7v2TB~L#SeI z^=mr$w)LMFOUtk8`&sHwb*bO92GxH{7M$;$A?~`pp zzkU7x!1Y`GTgv+t)(>#qn^i{+9Y3UFuh?MTz_}xHAi^AK_9zXe>pBs`_Ot z^{2ShZ_V}j+dy~fJ44)co9I$MlI!c^ud_13)5?TJLpp1f82jxKb0-@ zL!57LnK5zw#c_RS_`7bn{QX_>U(RFydO7*F^&f7Te^tx;Uw5g$C6E1k)un!{rG9lw z{Yx(O>u{k+HZbL)RiC*Rippb516y8m@7^@qCDe>;>Wo?HJ1y42sx z^>zP4E%nn}>fhk{x%K}em-^x6hh3aol=oj}J8){(x707`e1pZ||Mb6OJxUDce7Q5R z`sU~4+xnl(^?5P8^&491Kj~6`KG$!gi#cE8{Z z0r8w4a#yy;69kWIxGaBM0u30&@n-qEIR8ukoHXxkm`nY1u5Ye6=v$C};CwyUrG6&Y z_i$rO{jQe!GhOOub)Z7YP%j7`$Gg>^OUtjXpLMs?|JbE|d`BvjTmMsC>LMK zKl7*kAM=km`DPL2bs~!=^RFYo_tFlzKganH=9$m^Lzg`9KXS>Bay}oZZ9j$PQI;v)Dl{uNq-|P~?PS6{0jyu!C4VB3W|G+)0s{tts{e=iv$Gf2{9({LETEo8ORM38#GdmqwLG9?$;+`<(9q literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/NI6528/NI6528.o b/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/NI6528/NI6528.o new file mode 100644 index 0000000000000000000000000000000000000000..d8db3dcb7a5c573841ca098f148a88e42ddf447d GIT binary patch literal 268576 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

    6D1XM)Aui`V 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 KhTKa(|NjI0^baBc literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/NI6528/libNI6528.so b/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/NI6528/libNI6528.so new file mode 120000 index 0000000..a157a2c --- /dev/null +++ b/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/NI6528/libNI6528.so @@ -0,0 +1 @@ +NI6528.so \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/RandomDataSource/RandomDataSource.a b/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/RandomDataSource/RandomDataSource.a new file mode 100644 index 0000000000000000000000000000000000000000..02825712ec17be7909513896d242465588d367ba GIT binary patch literal 260168 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 ?aA}tnz;BvF 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�E65u(wf$U2ez6>fyhy%8-j7}tfr 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 B3K9SS literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/RandomDataSource/RandomDataSource.so b/EC-GN-JA-PCF/target/obj/Build/x86-linux/DataSources/RandomDataSource/RandomDataSource.so new file mode 100755 index 0000000000000000000000000000000000000000..fe8475c06956fc2fb68ea701ab9572b81e214d99 GIT binary patch literal 161200 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�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 IJ)iIY0Js4q761SM literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JABitReverseGAM/JABitReverseGAM.o b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JABitReverseGAM/JABitReverseGAM.o new file mode 100644 index 0000000000000000000000000000000000000000..21b3237d3891c8af1f8d2514b34d13609f850589 GIT binary patch literal 265880 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%0AKYfW8cNd)PU)K%4nJm2e#6HK=b4UG|P3a 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\zRO{yib`vmE)8L*!>W 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 i?5W<H+pJ(&+r&WCxiTpp3n88E< literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JABitReverseGAM/JABitReverseGAM.so b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JABitReverseGAM/JABitReverseGAM.so new file mode 100755 index 0000000000000000000000000000000000000000..d1ff6f09886b7a32ff6c0416077a2a5793adb1de GIT binary patch literal 166600 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 literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JABitReverseGAM/libJABitReverseGAM.so b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JABitReverseGAM/libJABitReverseGAM.so new file mode 120000 index 0000000..ea84286 --- /dev/null +++ b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JABitReverseGAM/libJABitReverseGAM.so @@ -0,0 +1 @@ +JABitReverseGAM.so \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JABitSumGAM/JABitSumGAM.a b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JABitSumGAM/JABitSumGAM.a new file mode 100644 index 0000000000000000000000000000000000000000..7b32ef49633bca74910eeabccb4a2fc8a7b48450 GIT binary patch literal 267424 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 WaMcf;WLsU?+2-p{+p0bah5irO2U?5( literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JABitSumGAM/JABitSumGAM.so b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JABitSumGAM/JABitSumGAM.so new file mode 100755 index 0000000000000000000000000000000000000000..0d3856cd85f0929d27cae6a85a3195c854f65dc7 GIT binary patch literal 166720 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 literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.o b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.o new file mode 100644 index 0000000000000000000000000000000000000000..887e1a988b45c3707247caa767aedb09f205f160 GIT binary patch literal 306496 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�#m3t!zlW49(o6E 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

    lRX9mEDnZ$od@gcHSoIpv*2U*_O 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 O-lf04*AsL6`u`98&`Wv% literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAConditionalSignalUpdateGAM/libJAConditionalSignalUpdateGAM.so b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAConditionalSignalUpdateGAM/libJAConditionalSignalUpdateGAM.so new file mode 120000 index 0000000..82a275a --- /dev/null +++ b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAConditionalSignalUpdateGAM/libJAConditionalSignalUpdateGAM.so @@ -0,0 +1 @@ +JAConditionalSignalUpdateGAM.so \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAMessageGAM/JAMessageGAM.a b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAMessageGAM/JAMessageGAM.a new file mode 100644 index 0000000000000000000000000000000000000000..58b88e0dae248d3280d4fd5b21d2a935b3e41c37 GIT binary patch literal 341104 zcmeFa349gR-9J3%CYKCb5+Gm%#E7V<2m&H1s6n}UQQ#s01qEdbTUe8@s36gR<~Bq@ zrD{zped^lU7B|GYfl$D@(MlDoRjeB{DAa1pQ?2~J-`_bibM7P|0eRlH&-?!8ley=& zpWpeNbFXxlX42oA^i7lg(WGyg^lg*wFzGuc z{gX-GGwJ&#-D%PfP5O~ZKQZZNCf#k)8k6oZ>E|Z>!lZjmy3eG4GwI(=`n5^_VbXt^ z^uJB|jY@g_aNq$ip5WRsq1($h@Z-K3|Rw5LgXoAeBmo@vsvOnQz<`CGm+#iSJ`O`5dQq{~fOWzt(sy27NloAgeT{?Md%oAgH}tv2aT zOnRS5e`?a7ne={>K4{X1P5OvQe{Rx8P5LX7t}*H3CVkSRYfZY&q`xugb0&S>q%WFu zgGo1<^tUG6Y|`B(tug86Cf#e&znS#!CjG#qUz_xwCf#Y$4^8^tCjE;^zcJ~*P5O~Z z51900lWsNX?@aotNnbN*Q`4@RnKX)YWIXvvLA-oVZaleoSG+Q|E1ul43uBKXaMZi(8!dma<_Mx}|JX3O2^VAUe*VHQnOLjbg2KNxe8EclZG)-;{gR*o`Y{$IOet zVMnD>Vh~@pzVvtiidkDf~Tr5thS1Wdn$sb zsxZ8^iidkDg4-&!8%4eKv5pM|g*->%VvHPCJ;uxTj@y0ucLxr{Z`|v`ln8yHVMwT(&T zGQlcW36^}zGh7jSqipdTPS(;+QRq}I)51=?e0^@b(ur49m3>QXZKO)~zT_JRw#BQK z3C9cLvh`W3)>kZ>ec-@>vgi5hlpbefxURE$@hUo!yonveNM|+l&+IpAO8*2 z9A{@%{OoNDn#4EkOsmO=Z&?r1D3muyh_QI`CTTdjjFl^B+Ana0u&S2L`8V}m4^*w9 zVkF6pSFI8eluIQ22!SCK6Pv0&^a^GUyouOlt&P1=zE3S(pSAQclB*C!a%1Z~2Rv7k z%f`|3^5>a2>?E4t^XpLAhzPERH!o!CEX~OHl&;E=>kT_z)l%m=xQn|by~_+BgEeVT za$h|8PTcod3}mex`^JFhs8Q2&04E=3V6q0LbcA$d2b6!SvXS`IQgyS_3E0A?InQIV_vgi5RP?O;(Y9zCka&|W{t}G+xP@9Yl9A1;50k6g?D}+_G zY}~<`%;3sAvN8p967U}*y}(BovY3~4E~#>t&B%GNbb3deI-0>I&-jN@(9 zGBQ&J$mFttEU(uvt+7lubG5CXNMzl)-XFVvfbqUk>zPq={juJt89B(P$%(M?$C97S zYmT!?#n0ZjASaGh2L{}@(n!N~(M z$_y&s5+79lg&I`;-GO<39aJ?CV##G^p=_0_bP217AOyn>*3IA@a~Jxb zP{Q3zMrK`GY=T>2kD_Ls-2+(Kk&nic+jQA}bQz?t6}`P0q%0;zulwp*VD}!xIvC9Fu3faQx@b&v(S#5bt+on_Hm-KjyhYI6h8-%? z&+RhRu?X7DU7UlBvdLv#;3G$o(vnJny%lNW$JQ;eJK=^?)7gtdr5Q!;Oc_PWV|OC1 zclMK9ir?J*5OjhdR(Q&Oke21@ATrTG6oSu>)mC8;=hPp>3d0Tsacu)Zta0=xdnHB} zSV)=Z>;ATlAULKOpZf+iV zt~X#`2EB2OmzRO}bjUY6_;?=pRmf3hHN%xM+X?0HMwznOtteZ!A||>O3Bh+ER$GOw zXnpNgYWADCS*-EnCPU zrYd0(;_8AkaZ1^Sgy0vvZY`F5TkW!&VQ7`)q$NV-{)1iaIz}R0yp!3kD$Ug+_JpeB z8V`L6S<0HunyS1KRjufXHp#ZbXeT$vlW!k*(?`8aWW9b#+2TmO2uTguoH|41=#Vkd zArnFnvO2XGvVHZ3OmwtFC}g~o;y0B#LdGlD6wFZjePRPc=Au7g<<)w_@JsWQD^YkHKncM~@8DMUh1w4C_Tj-C)K%Y&BaI2X zM0Y@PQ`}rMmYqN7>`e=rTw0ahrPgI4TYqxLpsEpFaD}*iQ1Z7mZRK)zaB{D?O#E$R zQ28EQCVqQh-Y0(H@6MH`unE37yYFPf^(uW+%GL7ZVtA`ItX{()cUN>8(J^tjCwik>*JJW@P3k06P3!Sh<$*` z@B_0Y$vcVA+a?#-{(KosCr3o$pV^>aH*j|JY?7F&(hzgoBc)t(~uS8Ge6^~Y9(`lcD|Mq=0NDP6GG zictS_5F@|&hc13>XG4WAk729C?hpN9o8~u@z9JhMtc9A3u}OmYLK^zuy*&fAZC{F${P_FZ{w zKO#Ua4)y(F`?GG213I@%p>lyp1Rs#ErYjWPlXiTW!A=}VU7+o|hxyM&I@?#lJ z>)0Nfsl`_4+b^+gm7MZr;}Fv)XH?pd>3hh>@eLnhLlLu(iVd}WTv@$t zrr(Mfy@s`_VQgaClG(fW%KY=6<X60 z67Bj5xlx7wozm}6E=~%!r}Vqu#VeZ`dP=|hva&U1)2&}-WyiL%1HLUoiSB?ft2^M1 zWOmKm|Hre`qZO}U#3%FQgLijaXfMkJ4oG<%!s5w!JL6{N!m44XQ+fiN-pPx$^7R;v zBrwU}BMduvBlvCH#ZJcd*W|EdGHM2^|NUa#pRh5*hO(+c7YjzK6lpEVr&^{a7eAMr zx2}BgbGVuME^Zv%xOg4bJ5JWJ*MS%%x#n*)oD9Sp1SeY(je#oy+YN$$&uSH0gDWO0 zi#kYOQVQY4g;iiXOxzM%kJ%ZkK->YxY*uwHF$u_)*e0wcu^f$I85QDinMe*=ZHV(K z)|BMD8sea7Y%>|5;!~8s+F^3S3>aqZG+FJe&Dv%1LSsnL(vz@Nloz-HvCH-X2E|kY zhM`mf?}((RFor3FCSd}aRjPy=CNvEbnuQ5jA%dMF7B0`wWb&n2B@Bz@HBKzQabjhS z6N6M^d~0M88Y#x7Ga3<)MvCP%&RQeI@*8KZ9x=I|z59^jc(>`@`?QR|k)Ls6dWfdfkpChKk3c?xl?M&ziiWuCOt)^w?pv2Xv5W#YG*=IQQT!bKF< zkNd}Nl;?T5LX*fqS{_Wxx?%&@2H#f3zV&SQt0^rBb&;G5Q7#X-*RbEW`?9f%XCjmH zz9Oq~eui^KTUbk!pHZhXV8wD@n{_-DaK58S&cFaFQJ$W4V^>DVfR zwC%H}k+s(8f6BZ}55-DV)$j@#A;?ehOGs_mUgG-kXH$OrY0;Difn|`wqpISlw^;RJ zX={1QUglt6Q$HqxV#$k-(~v9_~&?MUn0K2>Skt3v!J{bFIN-U*#|V6m|1nnW+UXbDS2~X|Jftc?jj z@qEwNHL!6vudvKsdc5kwJa0z!MxLsXkQ%ZYlF$qu^VYL+>PRG>+9T-^7%5ZBlbJ zZm0$ND+(?N7}8+qHcK#@+<*-%L9h@BS+I!>=ub|@zRP+#_Fc$AD!Bn0*k22FxBSx8 zO>J=LRC~GPjgP7Q&5VRzbE=Ge<@Fs-q!DlC^2b$w?6uoMN;^gi*~R+?vd{0Zaw=mV z$E$LF>kX24Q1-BVFgZ5TW3&B-A@wsv^)s&n#lGE8`0df`+nLA3zNM3u*`7zqw0w4 zf$zeRHDy7ILo-XM<&Lc7eRgCHWHnUFo;B3;$7nW|!F9NNv%2WJ4C~e=9O&kby*iRzX>v< z%a`81|CK~iuV}0_bmhoBdR>pzSPKj}wLCOF=)TFQ#1ZIqm^ryBSXbBO1eoUW0sE1j zN<0OC2SK2NWgk~_YXY&6>yj6+aBET)H}bR>!i(GAdUHB>X0>uG9x32{wa#dA@j89Wb7JN}emJ)K6#D zzKGOxzv9hvDPB9!&u6mwMNYSXx@4ps2qU#AB(Vh)Tb=SaE*_Ar!jtv(>iEavY85!C z4a3LdmEsB8hM3d->5gj=?2dcmCWaxrF7vJ{<=$4VzPE+`%6nRJ@y1(TSb96Ur-6)@ zS!RL73xRzpK9huv3p_-TA^p6jgKTWZ&B##Mhn?Rm544fX1=-qCem2#P(un`gsEBAs ztc9AtnlzDtKeiPtfXyRJx}zr-f6Ly&=UcE^E8m~KU?CnYsLEL;-smm9%JfKlBA!an z+jeT(ft~OK4-!DIUu+jvyfpJ?%$vEF)l%;O8YF5huAn064a z4<*WL@wAlhw2pE>@}nG({3r(`Kgt2gk8(gdh`)yt<+X_33%lV!656FdmG<4u(|9^&gza4;og^Igwx2tmumR<(!PNGqnG4Q~r9+%RgsSm52ZsV67QlXyofxiPl%<9QhFjaz2z z5Ily7=P&i(FZ(yi#qY^genspH*-+^qSk~HY-c8eTZ2NC`^Iyqr{>}>1$%6Dbu|4xM3<1ervwh=TkNEpH zS!?rKz{uICB~115Wem<~0{amM8tg-E$#+pdY)7&v50>6t8&T-Ah6`;(j$olVB{#NK zA`LreME(aHJPVt@Z%FM{#A?bG*Epr^b(O!gj(1LR^Spc)!}C|a*(75h*C&z0!%bDO zH@w9eCX-|gPwNI0Tn<*n{+zm!1;JA|Yh%_OXkS@NZ$#EQlTgdMFx48KoC4u}Ysm}D zvc}e$wUmP_p1XoCyMM`MWH|&E`^9!jtIk@wB9L1K5N)_dKjhlfJeyoIw@#<}+ZK}> z`Rra*?1L1iKCqm+on7c8ZW+Y()EsN;iZ>r;i9i!AP>BGRZ#v5?x7nl`Q)6r|2d^Yu^0pn=3c4{97M-Cn1?&h!OU@#@i2?Rbh(y`!7c^o25SoN zc7$s0%^ZQ5B{kPdf6v+MLgUIb*gt9PUbE4~To>qKw!@CCZ;f@4i%U}8P1~i5p+`aD zW|F)@!@TD#r1D(=F{`G0KBB54w~~Z^_Qu-p34Y`;sT@qUyMoDfR}kr4+yTSr!>@dO zpSWN=Om#B(65QA?oAI?)2VU)pgz+$#@ckI2I3LMU7G>-&EpfBG-gt|MWAja}p&#wxUY@q5m~vn6Ep zEx;E~!0;&x@X=-gewjyz1NcHOUz%)=?R9GU)@$i=Eah+DQvUN`DgSv1m+~Ya@s{%5 zsx}vkmM?HomU>|Vn%663owql<&fDv;vCdny-V7|h&1ca9^r8<}Stlchy?Abo8?E}f z=UI970aTA5m4F6H`qFo6nlF8Kg~tk+w&ve@FO3dk5&nPc=Lpo#_ZhEJ<__MLmS^$2 zM!@^YvhNVvCoP{_#lc-=GjcUrD>MR#MQM6^M37;C#=Nyuy$$V<27R(cWZ`Yyx*rE5%<_2#JvxEj*t&Y^6@wGYIOLC_t4W< zd}9=?6)%^jtQ=C;G4u)xnL3Zy!a0Q#OA99rnpJxF_!;vGOPrCjie}ATFw41Qz>va{ zlJQdtFCH+Y`@}hOwE9Kkr_Cswlvg@Cuefmhq`X?{-5rl~(Tv&SJ)4eGkDeveT{5Uc zJ8%4~NqMu2Yv+|$GIjin8F>>5^ClHeo;Is+Qg`RV*)!*iFCJeyyST)OT{d#S-~wl8 zVuW+?@YsM6vEhbvO=9>p9%XQ>pui#v8W_ntp(JlwN#3m4r9l=t4xXQR^CfE9$2o;M zYvb6|@$(DwN~ad)m5iTRm^W+Q%n60Xd9x?y70xJ}Svae-q`Q+4jcK!IIRl0cbP~hi z>~LokPM=ZR1D*eXJX1S)vnNbP4F<6oKWUP#pwg*ued6p{rQ;EsVy)&3pu^K9`PzO6 z53c46D9xKuIKHGbZ}zOhylJ!M%tMaTrpy{YBgoiPg3f5DUs_wZB#`#wG9K~ug$qq{ zG-2)T6zEJ)55A`+pFAk`?$x8`nLW@)*zN=EV0u z9iDuepC>*bD<|J6G3(5z{t)6m{a3cH?6M{6GwX3w6HH)O!@5ryZR<13En zKjOR;Wg}2fT0C!J>Ad2?Ndw21jvsVlH+C=d2^u-^w5HzMy`&!Fj|V{2#Y zQ|3=AE}e&7B!1XKZe#LCnGT{~P*^%|4$F;~Q}8Z}f0X%90Qj`mUVT+w0}WXJ+0f8F zQa3%%(Cy=bdDCW0Dl8r`sAn%bn6a3XO7IKi>7O1{{-B`+*Yq`27lUTXVdT#)C>>u~ zIC3hsbT{qlO3$s;+78x!-k=GG4o;=vsodKEIH%BgP z+2kS!042{Gtm@;Bp&pL<_=_~VUVe20{O20rzt;f&+Xna@IauPT&;R}n@W(X3U(^7< z+VDB<`SHIri2rj9@ZW2|{)m` zZRW_7@pG*9Ja+a8SN#!{>Uz z=MM?^&o#h*uL1tIhM#NOF9_^+T8Ex3}3F4ymC$p{1|BX z|3xDnpMKn}Wk{wUGmKn)ek?cq6RF_YvHHWKhF@R2sHUzPHdtn|3_dXAbnxag#)~J9 z-Wd0!>b*SRYud?5oTbcQk;2Qyb;&)iWP?LJ4_2?}(^!w?Y zuXkTM^=S7|!>?~Xe%0{n8!z`5ei3Z>_9K&}K(yb&6r{fSs+-~0m;c}f_%jUuC_De* zI-bmbc?0}M8?gUs1N=RP-`37w5BCz^7QC>-Q6ImX;n!RK2KX}!zuxjUz<;y>`>!^@ z-(&dottVPY!Spq#-#)DMMmNJhmO=8`=aoVI4L1DaZ2p*lKg00F4NpH7@Ru8Yee0n| z4Zptm@>RocZ|6TUu)oLfPqF#ddaQ*Ru|>5~oQv)%CPnrG<8SB78Ld`^B2H*s*()sE=r8HO*f4S4lPAAhau zlDf1r#>mx`5A7^!q@DW@Vu$%`GW`1d_2#j5;rTp{dB3Ti&uOOxH>_~*EBJo@jy&eq zZ#Tp5ZS!XZ?RT)@ueSNtdV59#{N;wfCPn`je*TXdetrJE+JOF^2J~CVg{I@YmXiNg zKmTrqFY6Ak-XnX3&-z?y=9g`NQ`+x^%hSr!BVvehrN+)r?R?mN?$WU&ne|a^rpNkHX5Bb%G-@(?uJkWp6@bhi{^#T9A2Ke7LV80_5>p1Fb zFZ~VwGzxh!u=a1p7=FIZxBOewfc@$Q>_69l{r3!CmOY+-*8b(U2jR1xJIX@XasFoe z&pQ4r=$DimXyitOnQ!>_MCmK(kd*Is>@{Z7W^QNzy+kI(6;%Xhy@y=gzqCl3my$yY0-O&H8LbIp&A3^@F@f z&GF6;^ZtZP?&u67YxuMDc>FxYpHKNy-UUB!u*ZGsFUYbw8a>d=c{jQi`agG%f26td zw)?SK)!g}QvnY`5%`h@=Xs%USu#~-`XFEeRo^#p)t^}fADyK$)bc-o_W_KXdqK_zN zGs(!z?U6mex!k~+?FTuD5X@@(|H`qNkEG#fs66}ezrq?L*N~n6%m3dK0rWEeuwfD- zuDRLZOZmyfeC=)xA$%uhV<>IsMFDz4N*b$5S5h@uix6TF*02 zb{1hvN0-=aF`B}CDof>{q-F!gC;V^2&4rZje;5y!$80qC@@B#1<8tTF#~ddVE=N|D z7T-+RJ|(Q*)8}YlY6$NU!Z~}|hpcQYg6yDJxLGj!l(4ByZY3vVcX-7Q&y{}sX;(hvI+Zf{}SEPVW2 z!gyFdjJNeQH4w(b@?kujUlup^@f-L^P5evBX;0NNXEu zW9xJfL>^UkR7V>*#zs2XNS;_TI>*^aXB#;_!m=8%6KqZ&8#z-DQ@Fl1=WLsEj?L*8 zDW_?7=CoOOfEjUeoLdnTcjowoj!N@!xtF5ah47<8c-IhqY6$Nh!h89+S62ffJJAw! zC0uAbJxs#pYR+&$OkG`J7iW~MGulS3v~?!fl`zppCfP`#jZCrgnQ9}`Y-GA!S2JwR z4K}hw5K~uWHgc1Vl-oK>?Yg>1VzuPKW9~Z)BhwzdRz958O@8e!wU6QsO zTT8k|2B%paW^@|+RhH&lDM-3TuC~Rlv5|2$GG25{{Z13aB_ z@I@hfiI01ARh4!YYCu=QZMM_Z61Hs3`H3K=u6|}0=YCt~0ULQxbWC0S%C3Z8+sGOl zdCW$hu=9D+MxL^fwRT;tvpK)BkyivUb@i%^ylx|J*gD(ny1HFr_jA9lR{6NDt4Bik zqapm+5dLBa-x$KT__$YBZ>4>VeH&dPJ8Y*vk+2=BIiCvBR3m@2#cFJ1kBxjTI;O6^ zwkzQuHu6s!*>5BN5^Kh{Z*1gS8~L|gR|jlP%XE$t#z3YZrmnJVPAi+!+UB%LFXtSk z=c{)mc4dBDz3=0?uJ(oSzlU(WqM*K(kID)oz}*nu+{eATIy!v?u4;89bg-T7n$9sW zPjgNY#MD&}yEv!YIz4Tqm*|+fI!6$bPd^*!ZzJd0$oY0Y`8G1ZMlMLV#=wC#XQYi> zE{LhCD{N%6ja+H#TxHi)CyCu-eq9~s<2v?zLikxB{NfOPNeCYr!iW2~S682>_s6Yr zT_byKr@xi3ov%6H3DR04X;EuhOSh4zjWmg}vQ1rO3S#ofvXN{XX=NjA#G28`v5~em z(k^P%Rj$oB$ws;gV(RK-n{%qo>1K0IiPv~;X1}h!_HkWTO)>8~4*42y5yCr! z@J=E8xDbAVk9&31JG!f-S66*(r!SDO=wD2bDSVeG;*RXc9I~* zKvx?%S#%<@Z>V|-QoclEy#%{To9it|nMTeKIT7_bd4<$ z>cY=jr`cIukjMUcm4XBr_lAc-|Uk(+^8>C%6*`1}C0^f;KMm;70-ChDu~5SA`;K$cz-Wn~M-+?|fc#^9Fh z1*yo{n*p>Lg3W`-g=Dg+t7AdSAtXOwW3M41o8`hjFO}UkF{{vtT;XfWU4{rZbsQE{ zX?#iupG%yM82%4J_yfd$kDLsDeF%Spxac1>LcDh5ZdJ!_yb_4ARQQ8-{B9TXln6F==!MHVMm58&SdH|)&AtXO`iG;l=m2H(s*oRP} z5up-Uc%w=r@+cAW^-I(V4p=2(H&+W#${a%SW0y$SKTKs?B@*@_l<0cqrsbtyS$LyL zB=RT`^Yu%#FSSIxGEjp+%ONB`c8P>NHI;3ZNZ8uLMvWAsLv>`~jVh7IqeRTtFVRc5 zp=#9;_j^)i*%Wg{MaQD_WP-9 zt3<*+gc3~+mB_*yRU(l`iI}fnqO)+@)+!Nqgw;xvGKY}-*d-G7npCz`B4HmwiDrgM zWZ{h}k;tP&%vYBv()xm5qeMqPI~Nosx1?K7l`0gsT9fSj26QF24_nVy3xF)fnfW$( z@=!+W8!06XZWTE9lKW?JkMZc82r$=7Gtr+;B+9I#jHt}^dB^nX275rES^5zTX!u&f zu7+IGo1N6n!j>xcTfILBNJ$RS%z zg7kE1?4=z_IL8d(uW)Yyry|5H@VTqOc`(EsP3{%2qh0`Klg~Yt^kZZ!RXafah#dN! z^L3DMA%*Cs`UY$TK)aPk`Z2Tkt6GsNiggvw1pk~{S|RR?HToKYzll{KV8@d<#6~v( zKTcThMi}ELU6wjZZ`=21)T-TH+K!T8xijV4j%8cX;6#qv8k|Z{%GkD;V(K~A+k!Lm z8t3X^m~AoiR5(J+{4>(t=A%BjmROm47gOc*Q>z3mm)0>&uisGJ3-y^dKrrIePi7fHhSaCY*Vk-mx6s6MUFl^uOm)$ zyXAF1RQ31u`hB>wn=Tz&uh$CMWZ=v^;qbgpbD}>$4z1aU(60Y>1iZczHtwTKr`GHB z(_lYOk)DU=b-EMHhq~wWLwVmn)|bG>NSv8{>-Bmj*d-J>_wc-qI?;bvUXR7-@_kzf zN2umFGcT;y>*K*bnIeM@&+8^m^idSLwSxmKqzy*1@9XtixU+#SCF=G19k4&3$jHO< zI>U)hfV$`P%SXWL8L+VcXXaJ)dVL$%t0*%5@Vs`NXfD(}ua_ME{bSu3HcrEtIi+5& zV_;uOk(r0*byFw$y5)7BF5lnl9dPF(x>QoH*WZAxkX7cjhv#)OC%P0STAOxVa|FD; z6*lgnOH1nY`Z2JdrpU6x^SZecJqPNZ*FQbs`^S19Y$R}IR@UqF6tHJfWaZ&`-NK3P zv%J3I#P9F*zu-<3b~5j(*Xv`zKAs{!K0L2mI?)G_OKa0YTAuX%y!^T{knZK^r>m=B>QRJz^^E%6kwuZXr^|f8Uf2=#g z#z{CcpRL#H^TCc$WW(Wko$W-oT3+`!`TKkQ2e|WRy0oQUufGQS8;ZPkcwV=1qBlUj zwQ1L%909K@VB-#)nQzwX^)JAFj3VzGp4YAMgeBBHukStO`^Wk`*cgN}^MiW59uM{u zihOc-Ubk_gf3>{6?9}h?^;dA`09~r7*XyH@%`rGL|8{s@=Qz>T$f31qAsOAizt=y9 zJ5SN2f7a{uYhb@gk$)ea*KM8XMARBGR8j)PeT5_sC^fuKarn{j*NUB5!~at3DjGhZ*Z?)09$~d=xM_qDbWZ#&e-%t3 zPI0ANym-k=~WiyrD{U0lkOMW1t;m54{nJiEOmQ!5>PQEY`7RUm38cfHgD3 z9w%&?Q#XUPJj9+7Xg>hf8jqc0IWQ}bc^Uleb;*08t0AZzNF0kN>2}d+NZoxwcr)m0d!s!|=u;5XIqnbY2g0Cjr zMANUa;7NotG`-M*rxSKHy~u*+5N@jJb1is2;bxk?z=9VMZm#KzE%+wFEi}E{f-4BO z)bykU-%2=B({HojI|*lL`YH?l5#el2zt@6S6KiRE)O}%_Z*pzV( zVbk9JMmS&R^$)^j95bA>ZwNaI!z>U-2^P^w|l@-%j|#_~1R zNn>T`s>tDZjXBEEcvpi*41Suy(+%Fs;I6^@8a&(J{SBVyZC7{a{j*%=)v+^g;A-&X zGJrA_cI?z`6yEcZTLhhcEnEB=ew=W+hMyv=Z!dION4SNiKTBBOYUuO=;T%ohKsXm$ z@Yrqcr*7%(I8`_^J97902heuIrK&EgLfKC5w!`dH+(kj8Vi?^OtQ%L}l_cv% zly?p5SvQ=#Nrd%1s=R5G&y$9eceYv&#%5;Ml@%)uCoi9lNW*y_oZaMh2RG-8K;$Bd z(2!EdF$1TF=m(ebq*>7w)xqbOUeT9Np+u*`rj#T*{p_X~kfcec|4dqsh99DFSG-J* ztI04km!{64ANlk{vxcf0L0;~&E(%y9R5i#C`K-ZYNy|;wE%#ZlHv4S4YuFP2IqFX! zeB!eu$P%9Pslx6Jk$;1o))#IKr)|xZmOBc#>HyA(SXXYdnGn3<|gC#on`TV^Wmj)`59TCxm5G(gY^{|87AR6Z{#L`6UK8XC> z7wg1}e?hhx3M08^?RE9_mgT&<_DU{nZhDf$6Qu85kqbDVKI~V;+Nsd87o9oem6CUo2V3mE%~2B)LAx{c`D?$lB(V5~LH%sJ#r z2W`DboeIjCIQ{D~QPvOp2#vb_6&h|V{TdmFf04F*oqnnQwH?J9{N{$PeVdmLe&Cu3 zYo4hDrJtMIygx(czoJ|7Sx4+t+H>nR?`E)HrN|cev|+jkH> z=O-|vBiKHF%lTMXMcQAi?t-V7Ij}Ss%$}ve%h+5scsUz}2CrfjXmA`0+ZX>D&1qjq zv(AZ^!j5@tsQpa!D`3yy%zO}j=kN(%JxsN~R=o`J`#y`Kgz#;lW$FtEe3vQ|JQ~wp zx`0gD?NE&4aArQrd>&_zI^uNN-_2hUIUDSOsUnzAAaWmn&qpTeYOv+mAV+g#{V0R` zLUP2c=B)R1ZYM|9QJS-r9MO5y=g92c{&jN1mG$6=r>G2OER}Iqhwg6C zrFGawSg$cV{E@I;V|MrxVZFxe@Bux@YtI}yd`!5DhIjK>tF9XUVjaTLt%Jz)SMhx8 z|KQBr%3x{gP<1sZH+fX+F)3!HQ5x6f1pvj-{3TocDBp2bk&eE5wz$7jA1rEf=Sq?<(rjRdqTzXNI`<`rM)5j0kamPOj9` z3~&~BT)WU~d;_v18Ne;r9O+$y$t?#Pe$9&~D21gi z^D+{5U*b6DP$lD{G%kS+G9-;{-_@LgG`5W|->bB&BmW5?xM4+bWru~>Q=B4d=w z90-?iX6~n3(iSobRToftc+{Nl0#>OyALJ1}iz8YN^VLgQt-nl7g21(P2#N1(C{9Kd zeltans*kk9s6T?5upQ2z_ z^LeWS-d?5Ffc~t{dobYrOQ}~uf7|ChN}h~R85t3P&f_4cec*rN%Sc~7iOh@#BdSFl z^^a4>U|nE)eMEHyy|>SMfjk+$Gq#Ft6$h`t=S$D-Dt2ENzFeu#0Kb?r(zP{vyRc=_ zt^{kP&(_x8(bgXX`7yFMF6B_#l2khNo?e*E(dNhqvDt!>P z{&8ySG-j-43SUO{uHg5k41KqzuZ&!6BM#mu-v(8zIVj^;5t8w3E`%0%hD;1k&^DHX ze3x&7(#DTd13%V)zt&gRrR*87-vH~6A$H$@{RLQGh1ll{`~C|Nh?baGa&cOPl&L9W zhRAdSs~6caJLqPUh^k9K8i^Bg6?e~d6nia%_rAzXuor3(PG?$#Q!@7l(D-0wxn`$f ziKp3@(}EMFW4VMn_TnoP(H}!D$~(WB*oE(qMIR@TJ5y0^14e%jv_GFr=Ou&_eG90} zow=QRwjOGx%g)19Fn4yoLb1y9+}U}IAbN)EJYKOPvSqsLJXw%dQm)Q7D0SYYxCp?R zxykP=oo`WUBuIrGS=xba3|j9lrRIZK=?nbMYf`op#;a;bJmyPXkD0!fEsRbtLE<%E zYFpsQKa_eO^xYoMS~zv)hqld%HiF$=7iZ>MRFxLhIU@Z=8vb!$ofKm0@r0pN`Cwg2 zHY1?@*CslM2@WD^68N)y8SzldTrD#1QKka?yM38Z|LHtS1Z5C;3_?$Pg2r9_9VF>q z+rWB@Y^yX2MO)Z=!8+ivbLgG?IOi42o9T4EBM{6Tf>_`bJC>k!{O5t-00<4Hpaeh$ zO)ax2kSPRzsc+0LTu__Z39a{ep!Z|wJnZXPw);u-Nr^Uq|Ee#;Sel?*8pwPC{ytwu z>`1@v{DJiAbW~(BoVpdG8}rQ$|H|Q=gm<;DflaW%D~I8*G>X>#LSJM7hbxDvpp5z6nC^H-N0QaPJJJR4`GGY{6K`mAzx1*bc?P001ia4{&u zaR%k2a%wq?z@P8QNI69&rJT2c|07RE$|*ASloOkRuOKK=&h(sq3x=nb^Kc*2Y7RTC zaAvk(5!>N(4)U1RvBF=>Uo{k3qj5?YSS6YFt%5S4AT*sQN|NhCXqZo+)UC-uLGlZZ zOhLB8l|SLkY<;K&ISL+h#u*eO^M{Qo2wpo_gbclcG#znd3i4yP@-v*7xrbViozSZB z3c^m2x&00lgiswdlIGV4o)L{f%`3k<((Atet8jZC6&u(u_>p$9wUI;a>Alr^mK_xkRo&$CJ$wkfyFyy!c6o+9A zClp6A4UY_-Id!iJo;h{LDGm}^rckk;X}CzS^=f#oVw=$LLdCFZ_(ny~oD)Cfuab3; ztAeHK3OIN#&dfMsl{1t9lf|6dQmIElf8664a*k3PL3-UITkAKsy_g*V8|pLgzw~9U zq}hHr9k;7e2YmWC<|+G^@>7a1OOMH!OvViU_%zI2e?$?Y=OVVbVyYzWfvs<6ql=F6 zaJMH}(WyRuRfz|-uJWhy+@@z=e3e;WH+@3ZvD}Jqnm)r!^hXp zr-0qZ6VckT255R6Mbsd$M*D1fW6M;C%uMhX`!XNR^<;Ebw^4>fwF)x#Qtk%2ueqzp zrCId^IL~-i4EJ7g84mS(aNZ8-{*+uP#9nZ|4sjp!xh)a?HaP8ke?hKTJ{6pvJ{R{^ zP&I$#Z$60G#!UP=4=Gb50Cc`_+da@9|mEsyc|)0rf4&EyfsIIm}*H*~!8;_hpWQ zKsR4V^!=-=b3u=LyxLb+-C$9T2Y-eqqwVX9AANPjeIm6C{1v{8xUXgO)fGKckAVMc z%A5tP*45P(a9;DdTG_g~`V_1^A+~jO6-6bq#VNLP<{&IN^gZRi%*o*Qpo|0_S6A|> zpD2aBy5!!KuD=cEQN5wMTm*AB(d0l%>sonV-44o+J!;M+0c*edCCKZ1R!UuN1$l?h zV)k{^<>wIC?+c~YWz(ynf>WHSU6;dPQJn_?gTxyR?$s>{d0S{Gtlb@_X+KJ?f*{ZZN+`kqpkUxWV*WhC&ZOV*tJdfQ+? zl4Z*WWcHBp=mZc?#hEG9dJ1HnmLCUmRz6wxmm?=iV|Zq+(kSrhvE#>~KL;OIb|Tus>brn0S1y$HJ<^N2vkjA$Vscb{iMRP~1J|Oq=SWZuh=U%NC7c~szt2~zOM!keT zfxok0g^xgr==Bi0nWCl4fR9Xa3w0EZ2%Cuh z$`cEoCouubZP(|dsSqzjO$wktMbz#WPr(PhHfr~h`V#v4Y2#UXCRN(*73EGuqsA#z zU1pi)+I7PHKhS&lJQ_1skI69nZ>Lius(@{6<5ZrknkMerc3Sn3V2^L$Y$vo@zET*>tc@F!4)x#d{q4$vG! z2=|+cxtkzX;fXpIkl(JUIObKmh&=+4XDG&M%lS2bpRL$7UhU6jVH=kBbSCdo+s}O@Zt3q#P5M{R|3uSznYPZ7l61JXXbY|f+H)c zX5Au`k|Nyhvz+Kiz+&h%03zA^K1E3x9-gD*cr;L}>o`%a=gy^!C`P84y||-_Nc#yI zwlXtqClbVva}mKvOEJxD>a(DA3~59J;I@k>kdm%tC?I8uTG1>dY5rAtUUn`BYH2kT4e}S&(qicRyj*>Yz|M>O z$2~1S@@2MGn*MZZSZmk8wIX$EbwZPnAozK0PtA*Ht+p}Z;93#=(d3KSdLkF8=PyBb z6Zlfq2Hir#!z}tpi+-iz8&z878pT&UH9X0pPqXN=)GvMeC5kJ0Ex*vBFSh76sfT^} zTNK~o*Ye9P`bvxbL-mp`f3F3vR$F}f0|IxKGCnN60X!ov_#;v_f_R9te=d__PrM7W z)u{rWv}6X-=v4e_!f7mW{vctVPMF&#n$=ra8kQHM^-HeDo-K5E1Jj8Pk9n4^>WeY1 zM>iplp-A>gml8Qu=5@ZqCMxN_%mq(_YXb0z09+e@&jjFe0r+A7zCzBz-yo9iRnf%0Igk4zS zU>TJ+MCGw8ZjnVf4@CKfb(HT5Mdcwb4z^kPll4R0gv;kma_PWH+g}8jaBs)(5cR2D z`;$5>{p3?W1U;RCDLbk{Nvnr$3L^5l2DRw&aNW#<1EY3VZa--@(+nN}$CG&~hgr_3momHCvivUKM%#zVF0 z@iu%LPIw!D%$X|)CR~1%HQ~M}zZ?$}F2Bo~aEAjfa3>0dUq(r|{3L6_?Igea&}qWu zmr)WfKOdTK`DK)Z%a3v<+qoGA3Mp871NJV}}WsUq(r| z{Dfe_<(E+sE)ei3l`D zz~!u6;IbzaxSZutY=JeGa6(@GOt_p25-wleOt^eGD&g{GRKn%kQ3;nXAELnh`O7!v z5-wj$Lx9fXFQ0u)xEz5Cy7vH(Lycm5W0v_M`NVpvQ5-z)9f&3<1zClpn@;#6O zffE8JTrTkoTn>;4`7LnyX63<#THZ`7MwE22BPs1@8Mo z*S}mZCtU7wCS0z96E61$6D}XAK{GGlFCXSexO@^K;l3@ue3&5N^7dxJRacIhUF<}lTMUV# zPnZC0brrAO+%z?Ywz95L92V4ABH6{)A@l4sjg<0TyIg}TpeK0-xsI2BT@A9Bb(n9E zvN9Nm8>IYZAj1rDGn>XJgCvQJG05`e5F3}4PY={x^YO3Uac15QV$R+8(K|!%lYF^^ zi)71YsoDs+mnnNc#jYmb7Q4nG$P=Xhf^5!>Xd`-?Z=A(ftrmbR&joi7^113bP)@=r zp6FektU-#qw5mVI7keygmnRE#>2Iy1iRcuF6?>wxd!;Yivp%pyn~CV{5WCwGHKo>9 zrHn8x*_(^lGZ1+(B&Pp$uMuk@Vml$S&l9tDOvg*{`badXkdD~tV6#qg_|k~{u$^)m zPq@6(g;4>GqChAGLP-cE;qr<*;qt~ufy;X+1wtthN+_b3Z#F{WxJ@#ycV7 zL_$Udbbf>v(*u4BgI+(XCUuq;7InvpS`Zt(*L;=M|K) zjUr<5O5NlsE$g(sz#@AfjC9Egq;mq>+r4~1I@%{sz5&zF+n&NH0exH>JQCs2PxI+h z_|dbYA`$m`>`UN81#4g$fwZF{@^zyqKNvQB|8=AVM>_+m>WiRx1FWN#d$``h#-$UFwdKy?&{}r5Xa2C-NeSA#Pan5Xhe&yXrvqiXi#u>`tUDBK= z-_Dv&b^8!e5LETW5aR#0Dxwt{ZzJhA^fCTFthqz+;~hN=psE)`=m$6@2n3+%L}{m( zH@6}`2J{e4$%g~zj6A81h}3~l~CM1 z`WQr2cU+7+fH;e&PGhxXu^yE}RmUNBnJqh)H`=_TjR92k9LQASlp+&=U5vH72e(47 zarlBY${6MCpef&BZB~*Nc>tVW;}ow6I8nZWQ?iPnbp(-p8=Rdui>ON1r|`AT1!<9e z!1>=peN*!mIvESn^v=auL?bX-^xu+>bEfdkz_#g;Az+SA zF+R=7Xq!$Fsujg7p}KvHG>EEBg7YJsMKnU=mrDxceAVx~^vKVFzkoCF9LCQ}C&`KO zMZXfN+ecvhQ*i!?vxr7${0T{6obTt&OOIqM!96{kf$=#`#=LZroG9PUE1|l51ja9f z&Zc*K$+JKJ7My509G$^8?B@6?7!Bn>|A*8+!zwfQR^7rnq;t#A_Hl}f zUIsJxhTGCQq%VSGK`m*%Q^$Wdu8&-ks_N1*Jnn8#fDi3&%S;`3fT-!&@>b3JLco5MKC@ zr7_yqxEa!Kc^U-LR^Gitngs6kyes$$AKxi>#S)B?`Z(95GCen6tv(Tf)oANcx)J5I zm~^L+ykh(sB)M2tPBHJ{M);q^+u;f0f6A5MuL0SPysJi@-t-tk`sP}MI(vhz}-Mj)~> zjt?f`IVHv~vNGQf*AI-&^|On5IxRnuR~jQLuL0W2Y5A!^uLj!NY5AE!(f^|NBZuPR z2{6_N=HoaeVm_cF#)m#iP6E?Df{4ul=USXav>_1-%LWmvhR6f9>>_!rq+8@E5MRXU z=kH9XoP7k%_b=eo;4GpRb1ddXp7YNHjomJQ-?KSX{R$WC<@@~YE2+M5op zs$Yf7=%i@^^dxQN)&-ancs)#d+RF6{{8sR(nM@XE{dqUQ8)g?dSz~!6n6~o8CFnYM zSP3dk(+Ke>6W6=m0=EUq8pqC*wsPM>gOAtBAKYN@VvWCXgVucbW?yp}FD27f?!3-- z<^i3DXL<&EY}(2-ON^-*dj;QyDOel(Ixuz}_qEbiZmZYWVr}eU&)8yZY(0$Cm;X|& zvf5Kws#Vtc`Bzo=g-Pl#Y+Il`%LzD@ypm2^`J@TJhe7CWV{cAd`LGwN6})an?Ob=0 zg!YDMPSz@|T)jk-Od#$rk!swx@P-ontC6hx|A0o9wsN&s1@~*eS9pHkul-&Pzw0gQ zBU-1z(|JVe+--*^U)=JG{7dcIoi~&lI^K&h6*wBjr~8j-k)=!O&G#vt?|v@^Pw9Ls z=&KIp7eOeW<@N$9c|l4vUP+C{E1_t}M~~1zy&PWAIg}xX!0}%h$4@|DO_2YfJ=^8! z{Xy&PUmTRh(=r{Hem zW(_Mk)kfq3h?uhOVOcSqc&IKaCfmTUr*&=s>#t9t9?%V9=OW!b4(JB4Vv+InfOf(k2@Yr{R!EdgeK1&3NuBW& z3E;WhWAl#A22j;~!J2?mCTR|}m{?@JlI5EDc3dht%2~)wJ@3egXh>Dx2rD_uQ!K^( z+HGRQP`kaQb}=hESy^UMo-GTWtZakM(r7Dru?PNWw6#IUXta$%NBMb-Gd^kliH1K3 z)P>wQ^p5+}HKeM0!`r)3JszbC+s7!6@KB1OMR{nop!t5*mBuEDH(D33xDfvXyRTP1 z^d4?R%Fi;zJznohEALS15&FW8^Q5CuD?a z#-!|_`pSHm@AqhafjJEPBDP0UInA`=LGUW6`u| zQ2J%6bBvoS{BLQw+oC0^qbXNmb?e5>PPL&JaOY`nPfJD0e;vr8Yu5Rh%#@JMOH$2 znVRmE4UTzPsOn`(KbxYx4d^$k>nwQ>RMnT?R)0)+w>z?O7CjxD8x%iKzT+Uuyh|?1 z%T(skfpXx{GPSc#`pv47MfW14svQjU*LsFp7{J7ocjF@~XVcStbt<2G5M|!Q7v*JY zmUop2^T(Pj7}H^1j|A;FpPq1eAAQjl{Iu#3DMuDnIMIJJ;6!=zdU^?d?4y}MRP|Hf zynwTas%(G7{A{iBM__-&c?<-_f*Fe9DEG!RI z-S!Ub;o=l^-WrygBn4qaIWbW$CONY53O|ZioXDY<7&%M)aVAPf=DJ-CAIZ4}#Qq;l zuD~hw3BX0M-?o^WP_p;W|G72yg*w%rgvJ}5I)OUW`OmKsZma->-H0FW2nrjy6T7N7 zQwvMV;S`o%7f85#6L{fr{CG!@-CP*{B~HnXx7wxbqy*WK+_>2C8vt{U8tG+Y$M*MN z?ZGMb3DgmsE@(z`U#n9+dleph!YS$m>QLvK^a+=*F)#c9e!OF-0aW$X(EAZiDJ)xr zSR*AUtZpblcl26E?S{lxz7y^f=q3w$4)-#1oFRU8uR);c4^4I)lqEY-g6#BI9c0Jx zl1J_A`00*>%a_0x{>#b^*~_7-`@`_UTG^3Oe|GhE6MkT$_%9P+yAseUoYM6PI8naP zQL>nzbzEs+RsB3Tn{gIV6`4E5e5c0Q4(v0Wz99khjts@^BZy+NyYL1K&LXO#)}4~D zY_KD9CgjeyWsCWWtuq9qSvVy>0&|#En*${PrwQojhhw9Bi8RVbJf_o(eRMa7s=gPT zCvg_hEF3DjT+(qx<0T#A6!X1Y=Oti&#OY^hm6q!E5zHw2!BKa^IMrF&Vt(1pX$R6E zoOnE*YdbN;P4;>73vqWM5hd>yRUy~?86%^VG05fer8bm`Z}gVXw0%5d5Ukh1S%cH$ zP{bUu6|$u0SOHcC+qzh^%aK&4fraW#s&hnU4KCPG?;)L_>))gM|tng4K93Fo4u7p|H z$1?^|)pvpO22PVh5p$IAoF_n?;Ta5;glDwKNO<^~u=8i&-{F+-5HR84u5xO41};Q+ zn6G^V;W_a~Xzw_SXp!OhRMK%pf0Gp9;cLat5QvP!>E|ba?s!zUkM;&p)#czU$5}*m zX^IOO>z@MKjuVmK#lD!bn<9Butp5*tZyq1_QQnV#Rjf!NVrPD%>k67#9XD6CQzSdYkA@SwL#E03VTduh=@oDz$r?4h1(ZM$O8 zSFjcwcP>RGLy!F2A-*IIu7U{$t)e*wvm}jDR`7A>l4A{)K_bN0tyhQ;U(8+FLiYQ3 z_Ou}T<7NLoRr~vR_OuZC<7Kb=@CwsH3gD#)Ix{9ecZx5GgKtAgPoWU?F8e}5?5Pr2 zQK4@*L$()!w(ZtIB|mN^9G@4`ueRgZc5&OSFW|uw5_2s2^Lg+@5#$EDwv!WFb%S_Y zdNFof#&93(R!*YWE=xCq=BJ>_a{Tn~m7R?ZW+Z0$qOAsY)%PQrF_g)C{5}x`9T1^yt15 z@!lij(wc(QfcjhLv@Mv)9V-HN7v(}$oI7}Z~DS2PH$k?Pj6e0AD!Uu z5$B)W1WR=9i~Ptf<;1~95bvilE@{CuRqcPC5m)DX9Fm=ZAJ#MUg;j*Eso76g(#Vfa za1r7Rxe4~uMLP1MHM&{EdzXwWDiX5J$+adM6|m0HjxnR)65R+PKQdP0;JwKA%QA1F zY(`bOza)AD@Q?7r=1%$&t)weWY82i4Oo#vsVQcpad3h%q9005O{lqXpP}O3j3|F$#=Rl&#nW}RPgW7}vfU?X{33<_2#J*# z?h!DzakRaIPN)d8{D)8Rr9S5!t)#vo@p2=zuG4c}TniKdfE!g|&;W$F0(pxX~n_CH&a!GEBO>U4w{XessIu zh9`e#W^g5CN$r|tf2my`y+WtGNPJBkd<@T zx8lWr)36mvr}$H~;>B0UI>DD#e5L)PR~fk3itnDR<6orW{}8Qc-tSeqbvkN$H&!_K zVeCokkr~Ry7wsI5FULGKXZggjcEUb5m)v>;$X*nVW!6qiz{ty zud;eWj-zwd< zC*13V`<-yn3D=$QHBR^yPWbgs_zoxhZYTU9C;SN~{COw*fD`_<6aJAC{vRhynw3e< zW1aBnPWVhG-06h3I$`o!GxH~>HZx2Per9;q2`@R}>z(i|PWYe`ey0=upcDSM6aKst ze!vMo;)H+fgn#XXSIpb(JI)C|$qAq3ggc$^bDZ#YC;VI|{5&T-?S!jN_{C265{6W->8hn?_c zPI$@*SDo!h`uMXow)8HG!Q z5@#K|dR60(T@&iAD0;dg3G2=?PfalTtV}arI7{~kE)qLNHRzeDAVj2opo*TYLAwRdG9T#p z&o*J*q33idB65B@*8;#4>ji)oAqIdA7SMtF0adG3J%!b+lNv(Q?>e12B&CX8HHa9x zPHFvs+Az3k=rr^3CiAiTu*-aCr-hS|AT0QSXw{?p0rn{b7#C6x_1d{m)hNLh1!GW2 zil3*uhxqC_Iu36UJYl*SFQ4Cr=2LfHz@kuLY;5X=U#QZ8vH8flh(km%SzsUXNm4%B zRCJb)ONxHqW0}c-dMJvb_GLIoL^liEuHp(=LUDJP-Hk)5X7CKySF!@Ya07pU9WFKj zyxLL*sWd(e2CY0m%ONQ@qGjZ{CJTj z_YBD4-HAk&apRt~=#`Dg^OA1BmojEuNrH_t>s~E^Ik#K}8Jr{;d^wXT7<0H`N%#GQ ztcRlL`I@PEF)Ci5WR>dcD9YOemF#te2}`hGf<#Md(!|N45tFB(?nNRB7f+=P(T>$8 zBu+fyqSO9j8(3tD!p~X7kv9-By&(Z)<(gGoUd-TTE7slcTcfXh7J=kc7(jG|O@b`+dvDOSmH7sON6nfvLPlUJ268M|iJ1`VOw z)O8+I!XkofP!WF|&;fdO6))W>W63O6WV*ZxbMuK{;1_Ccq#XVXL6JKJUqnfXTVxeq zd|pJs(@^%+A}ZQOQLmwlXhc!qC5csu-KSFR|2!cI5Yet>Pv`_CuK~rmKEZNbNx9yT z(0$8#@}&t~eNp+BAuT!UiJaMNb0b2$(_VoD=IqU>A-eV^nTXA)7qZH}5((Om?K+)D z6lJ^$^{_y^;en;4VN7F=Ogdd)J8JGN>|5nn`X2r7)1c)!oZOuUAWjxz-bO<0TNS z$L4L`*jJsLDc4c4MUZ5vwg#8zG}h(ak_mWp$q^G}qPxK(kU-@*0>M1g_x&@4 zYGJZos+Mc@@?>qp3>YoSRIBqj@?2?tu`Ymi$PYX!SElAE6W+Po7R$56QWf!6 z;57u5Wf2#F?eo>SLVciAo2-@>>hlx@IZ(0N7N@3I67Y3)#0>H8r6T8pERrA!0*kD( ziUWmufk5QWW8inWGA*MO>ZPg0S&BfDXWvk%Rx3=Gz#aJvuGHfH|vzQWT|BSRm>j2|c8Mo>{_ow4Zv7OCixU zeZ>O>kfX@BZKzN|C(#f>Z1lFGR{wmZUMQn7z){UOzP&t)4&zU2^$2Ry!8lA%-8wAhkW2SeBfUtJ$c^Y1AlfTVjk_Z{TDv) z?~n52c{hPaI?3O7G{EB>@DTz}2DqZlB=c7iiR+S!ZAZl(e2pI5+O~=ww3{j3up)8j z*0#17{%+v+aD0Us|I3NQJ@+K1Jx?COlSh-&A8kAPB>r@zneN+B;yT=dn&|irez$!E zzuK?m(K^g%k3@-UlWRQ>z8fX(POfD++;X@7`8{p8?>w=>%I^nJ;-0-c`VnS1Kkq%6C%^1S{5(1Mz@v{PH$M8n0}pu8zAlLvyY4x3-J_m|A8qvT7mXfXcVyz8+fnYL zDE7f!o~*xjRN}ft5B?M2*Lm`)Z!uk!Jjd!HS}~N16CLR)9rC*IN(3iuXLmGg@UPxUD^r+|~As z)!;@FH!F@dAO0{A;}`e2;Fn{}WN&LnS)wrO!6PVa^&ynj_MFv>3#W*M@5Zk-oXlUb zqT@1NiDS*&QmDf^7F+VH^Y|m2Wi9la#It#9>Xtcag?Bs*LC)?S4zkH%th4g1r6eDdD*h2$;m$0NrT$Isug;<)z3yW5Yy zd&Tj|o2FJA_t$OfPD&oSqwSp4$vbXM{^CBK_FnvHV^kmlw09&gqd#ryIeFTieIk!` z&!g;b+c^|&69u5p{C(0cmMY0e z)^;etNYgfbVn_Ra%0AI?aYy@!-$`D;^OltAXq!EyZQW|<2#AsNR=Dj}JZww;v&iI^ zZU*I3Zx_^f_K6+HD|u`3GUMlRt6p!=^-7-f-P@CkBIyR+bC-6s?K_!MuPwtnmqqZ# zYk$o(Uui!fN#i2{wpy3Kmz5oD&th5qyrcc(a zm*^lbd-3+Rb)Fy^oV=2^_$-lc+w92>FfFQ_q$x*tct`R!gjZ4_E6}eG-jlp9`B?Ju zYw+h1Oq9t>cClY9v*az5lrj0G_}1QW{-cj3%|X!iDnYrzi5-k2?Tc)d>quVO(SH1G z?Uh^Fk4AgXPrl*7#}4gXaeVuiuHJwl_Ws0eAKA5QadGj{Ta&M5C9ytEZs_=>jeMu$ zy{~y7iD~+5)$UUsP2O{B@*jArj_=(u4au2W{oY;3{2eUwuO)6v&g^P?=IXY+tCJTT z&fkgE$&=eAR)2R_=f&6FUH>^Nf;Fd&Q8|&^+L7FFck*7&xwoxo>uA67-jCt)ethKL zl z|Hf0>_3iE0XO$tl!NFI4ya4^0fA&k|*+_^fx=) z{@q0KM0Cx?ZKH{{i%+~bNpjfIuzngPb_s=|CHzLrcDIVz+)5C9@OVnN?tDH!#!B!$ zcswQif6#^ym9FzWKpU>R&!gxP{s7l=PcY}t4VYD#mV2U!{w7L%N9q>VgO{M&gs!#P zOmMI*@sW@4j4b?ZZP1;h_G0A}EW&(nl3B)Yqr@-1I&?!al@#jJ$>!6aMTz^SlS9c) zUW-Q08t2;hX`_4_J#%yY?&r*wxKEQOecfnh{HaBTQ%o{^B9XW+dEY&IFl#X7&wBXv zMB*dKr`^LuSMp-9T!_Wsx|h|B|CdO7_t5P^JGGt|9d9ic?mr3=1FM1L#_N)u$wlbB z=c8*_m8|qu&VP6gR^E;3b_=HGkgS#AC^sV4jAm@^ zWfLBoCfhr%yDzyp6)>+s-*Dss4SJGwPMZE2qcWkkfM2a0BBFX zmwwMC_ul&Y>)M}E-{s-aZ?$1<&$3{88`otH5pd{wURi5?d3+`Q39|UC*=|zS+Rb*~ zNkH=HZM`Qa_qO$}et+_w4<330zILsCdGfj|&*yY-YxO6{(&`<5EzvvIy$roG6{yvN zW<&3C8~RZKUPxKosjyBa-6M=1mIP_u^H%hG+Y;9u;2dG$_XGFMn%3-Sr8wN2 zP|^GNB9|?_+nz~^{|frvo}{l>C@~Qxxi&6{54S{K_uF}EEoy!X!tW!3nx~ng_`xV~ zFBTH#tI5fF`VE+*SWQuRF*U`W^Qp;VN*KTfSu(~tBo$UjQESC}TOx5itz}nqu+;=b zTuDhfNT?@iA)D-=Wgko@Oicap5;v%!r4bprm4%xM(H~SRE7w1HX;xLgiC*$84?=ir zGPGP~V*8DUNPNHHx@94}-I8AebBaftpR0eR0PjPu%~%)#q@z z+3I>QRPw}oAnLt}zwyW=q_+!+y@eRC;)7(CTqeVUH36}S_lD0U_a@iA{&v=f54_=a zZy){9sZG0Ug^Ae`vZs2Xgl*+Y zp}LH>#qmO>upv0hHvbTX^7FK^m`SCo^NW>YzC?S{$RyaPw5LtM$i11&7L+>zKi&d+5Q<|k*OnL;fuSaNp0R*Uj^ zunfEk@@xwkyTmVK9iK0tJBuZ3dt*Nz+?MZ*N=vkHT`KM=%r2H{*vj_#CTy*hrz@r6 zno0N$ToA5&8nurx_tj?YjkI3gEoOR$$`w`@PIQ>D{LICo7iiqBRKV0;yG%;h1AL0E_PN~s#zlg8HK{30as1>j0>3|JC##^Qn& z!3P%V)eWeU>1Px56^ps~{>3VMSL(y_#gM!L+0ayTyjb0srfy7OWOf@86BH$BsYny( zT@11Qbao$&3E5C;0T&kNTU=ODGP||M^*Ks+X32>K6sna-T%n2R)6CfDE;f%z$=}T= zp*>NyurLkV(*Df8Xk@Xj#&Rv1XlV}2NNQrKz8&c_^ z`2(fC3Fdi2a@?4Kx3Ef(&(i?SE8BAU{(j!XRvC%0aToYV%Nci0*c=xNsoreN=_u8U z{v9fjW-&BhWK1Z!*fYB?K}n#2gpR39i-}H-eTV1Mn-IbSK(&{?`6J$k+ho(_e zJz(mCGhH-bh~`3C^F~YIQOuN=&`N9GwEWsg1&Mi><+|-F7BTP(OW?a=X=0HHN=>Rx<*t<@>AhL_;?a1v#=Th$v>h`ztA&w~7QQqo zU_NlwH&4ybcU&aFVGS=926iuGlob53>@KOgW8{fbgivTbX)( z-g&V}O>;k&@tYPeSaU%%312>VC_>0YBT&7jX6LU0UA!63&R3?_uwQDnz#wllz)@SS z=+>6uaks=|U!cqDna!nzS{d0}z33f4`{V$sF%M+L5V|`w+oNaGG~aLWOGjE`2)U-Z z#}!i;GB)d|{@YB<3|X!nCo?o?yBsXy%Z>W{RfTFX|H2Z^^rA2?clBb)M5^sFsDQpG z)U%ahX^EoC8O6yQ(+K8wsEV4Kbw@K9oF-jDH7>nn5~7iOD@#R>k76bg`Uo{4%I_E) z+157*rF(HApUs;JFLQhimYM3|WqR6(&T}U9l(&;-GQH3XnR*UdWR@1@D@3?p%O5BQKJ-t0;4r@nqWRzyC=}jo604xb=HC7#e31!!4foS&1GG(Z0nK5a< zaJ8X~^ySSn5=z!_dNal5Pg=Vdu}-2HaW5E0lgCfAJ&-Sl&k(|gQ|cM zZ_a$TV9nwd1IY!BHKA3Z$UwrA{X_|3u?qDLKuBcY+D-~TC_a1U%d}QQWgF#F$ZQ&d z7GEetbC!ibb5d9T{K9f(3`;2^FPHF`pJPjKU2;$>NOg~aLl2Y`6|D+8g`jgSk}(eL z=?c^eS_M`gRsvliFG`j5 zm5tdc)$R1T#fz>$lA{81`y%?1*JO?kTidA<|m^fOaN7wG@|XwVyo+F$+BK3ZZ7y_9@<4oIp+nVx5efg#1V#NA$z=Lb`6rSQC0w(p-7+O2&U;M%44hmRz+^sV!iM&LKNutbQKowQQLg4&vNN(Z1Ali8lk-Mh1uI`(P!wH=>ISUz}$oiTxH-rYez!%G3>Q1H;x2ieLxcko#sq{p`$g zX2R9nAOopu%C-3lOh2$u9U!Z?qN}@7OTo|_QxbxPPZ9&?I?5Lo#YXmCnTai$*fx}| zkt@YhUHv#RR)_w9!+@AgZ8MwO0H2bhJ6}sMkPnLDX0x(dXp&yi38@KUSbVZOz5toQ z0=mW~@Uih+v;Y;cT%*l8%wkfnm3?fgO5C2pmo=y!o9?}%rwbM~F~7@vdwh-u{qgmErg6tG%LG)nyl`Qng+B3Rofz3uY zq%k^2PPD3@T1%wUn~j4FIToDvC(t1=&RR>Qi7xOn^E zNMF-EcAIzQ#A33nkK6cCg)^I~Myi2Xq>~v$nBc~UtQLypC8HPhhKHOxb>sZ{;S^WA zr>3IqI~DIU*Rf6F&a@&)+@|{!OOzwVp_V&PFr@Kq@&H+HEgzj+q$Xcd zKG~F%<1vKG1%xbS8EYF|>>jYyxhAt;a)b>f;2?X;kd*M!WOw%#BhTL0_FgV)^Yq{Z zOkPmoYH-||Br7}P@k#9B3%h(~|6*abhK)PsMh1SWwmY0mU4OoWJtI$hq$r%t7>wt zbhJ5b5>U*+hO;JwIV$)}9vg*9f3U2Tjf6>=2@?#_VNt~aT)Y7v6gcI9R7!f6TV9pH zmqA$mAjgT?9^G^%XDL0PVormVEM8WGZ8B1_yPclvoLh zrG@e%rP-I6yY?~nU8bd2!olfK=1Ju`@G7dy1sF`E_O@SaPgo`Ki`iO(+4pK^vQ$}F zvxb~s8#_DsMIThfKr+dO-H!b;)rql(o0~{5f+?_?77Kf;u4K|GEy2)hbb5dzg(+OM z%}*vQ;%Nx)+eZs#e3SluqMCY&A*scbtOL$C9~;@W8#Wy>u)<3Xg9!d*;C;3w;9+}A ze}?P90Qudp`HF2T2ZqW%ckA_PrETUYNsy*wDBfKu?_b1DGt>j-(iI$WLfFKnJnmYa z#|9UsOS(NP?3uuhz^hdzF34+{fw#Q@UGO*dZX(ow$$;vX)=5#jnyL z<1K78*xg{q325_jY~<3t29rnuZ>kZ$H^{d;=3$l2D+p#OZt#blj^brySx6$$bJ_6=N)K*)uoqvKMD*nyX?>(SS?F_$^YawDQM{K9nNNlMRWL~K);A(fFKyx-oCSj1i>E<~kuH|Xt zmkn6ea9_9yPG)RuWDI)?{k!tRqtOl+v0$vxm6UT>k$jOyi>ATUD<@`5{)KO7MVty@ju%W! zLmJ8hbR@y?6W(h}$;~!mRyeWIpSqCsf)eI{1TU#wE)Pdw66_R4oJPwbQqHiP@d+nU zrnlw$8mt1qS=4szIG}EFB}&^8FV#Is?t%K^(G2O!Ts2{;hOP3jvnG7oFqT!CH0hY| z6z=U{Nn8R-`*{$LVviI#G-@JTYqW4;GEO>~%Hx!&o@gwyJu{XW?$3}TX|50FBFFN2 zEuI_M1%G1AUxBkM5L)Ui%OZ{|h=p?`I7$vC!}la$Xp;Qv(ZSf!fXvclX@QQ{5ijcI zn_LCPAKSH${7{tRvK)ns2HFcipM()otsylVk66F_3~z6tL}PGDaZZDF4-Ubgb^b$H zX__w8nH)t#X37mFO3?`u+9zPbBR`ZGAMe|d$=heyB;}X+84S`)#`l^Qgt!dD$V0~q zF{L}hozZB;>uL^@(p}i-L^oY)HVQJ9u)StmY1(R91xy3KZl`C%3e}ohtk9uST5FRt zn%L-9XOU1}WtfDEe2eZP{e9IcS6~Dyx@`@6amJ2)G5!uSBU#yJW+o=ayYl3xhda$PqhKI@j5-rtEiACo=%BVA!>(speg2oJmZE!jj$OipU8rMsZGxGN)R}K$ zK~F{#GO@Cx;Z+<*8+BepRuaR*uizapB z@PB|=;KJVWIjwM4lAQGPNRU6nRtc8|o7jGwr9X0S6*^!pDS^u$^iekyD*7;{$Qbqp zzs#Yt4Uhpi+n{st^52rF4O$MHk+x%!<2DwXN>ZCkt7zFiXW}k$Q(b%yzYp88HJs*a zE-z7cekdIh)^$dZ175n`^-9|vBrAE@N-GTuX!)XaBXI`NQTfh0j{){blbnsUkM=M! zRRGmJj`$|`Im`Z}yTI(o)F!k~sKm6D)L=qL%R#GhlKKj9vg5Vu?1P9aQn14^PVY!D zjCN9b`m}eFqbO9#P>*!Rfo5Ae*JsM6*!L~ZQ=1eIiRl0>^5hK`kc&H|S539-uA`_F zGgqNWF{KmYrNP>@6E2P7%%ESOVzQ29$*ePq(il9wSf#Op(0%L{klZ}FUhaUDYc^8} z7B@5v(2Qvs2b7L~zI0e=dYBeYt~gAK;-uZjR31c8E}3Bd;~sfv0!{yFtA$fQn~>S! zOOCC}pWjT@z!^rbJfWhf`3Js;y3f2~s>ZjS=%SSX!Bbt@`s(v*o$PD$Qg!jZ?AG6Qo7-2lKDUzfm@!p-pDC1oAgQ{b*1-S|N6 z=B7Dreh`ac3?zOunKF>w6K?=#X{pY#A$sl_c}Ylo9AVV51%nv%-Wt_8SJwT<(yev4 zk(ccJNm9gM>atW%|MoD{5@kuzRC3#hrEx1J3+w_wH()y=v_Qg=egHNe+Hio49nH>G zF2=D2d1Zsg$%r3(F_+ThaBu)CE_$^OsR?3Vx>=9XsW)gTIQ51!hFe7hmr`qmBuVC( z?#MU-5}Mp&uWi^pA*4#M^TKjThxyRcGVMNvDPLJQl`t5)WN-u~)=_31%U=QqZZeCF zM#`z)@?-F_4DMSpPLHE6J+oik+HDH=H@L#mGb(iRf{Jb}io^{YR&*)2*Ph>C;9zaT z2adRP2Rf4T>LtZNVN|!JDY%*hbeE1t&w7svwCaX>?ZMK(}N=2rDsu`9qRh!!p zHA!ILfHz*;bm-><=j zmAZ?MzfW#=c7P}g5;E-(jLv3LzOw*pG4`qH;+h(_0MXnQTlXtPQ^{*-dP%1YZCzVh zGKOQZUK^x(;Lw806ZFl5nb`n)k)DjJtVT1bB$Zr9JWGd-yY1oP^ zAtNXHVR_Wmmm0^irC1BT(yP|ZP-WmZDb8j~E$HlL z>5TM*OL_wByN7pTf+voca_=nBM&(^~=nJ_Z@1KF`9TyJD84|A=<(j9ikAHOH3L8B- z=>`=rJi8;S38!IyfH-ZrsS&Z^V1udWigFG zMeqOJxFeg}SejfvU0J`cuzq23YGbB<{f^=F7x%3n?cct!UZ_r&=$*yo3VV++z0!B1 zxt`Jm`@5bT=`keXNRO6F!Rb>#w7rdHDhyTOc1zCdH5o81P$ZYZoH2g`qegC5%P~Gk z*JkMY7?Tvae+e}NRj?<+a0(%;kb-&rQqAB+GeI{b(-oNcVr@P@1FZo!VHL~M@Xvu6 zN#C=~Zz+>^^zsX{ny?Afb(AR=#yYZV(xw@S8X=F&iw@u>jZ|u|pw5wU*(f{6o!OW* zlrrMiS|M__2B| z9rdy2CpP2N`MC<>NzEtTd7X}LX{JH~zY7OlnE)NwxNP|FCV27yVcRrDeH^}!<{>`g zVe%9nmhuLOXcz~>b#f{4iWz1>(anszd^Bbjeq}LtThqCCiB)ef;~=T*Zl__SuJPsA z_)hrDj$8scVf$A_`Wz`WFpv*9IrDtB(*ay%UKq;^jqEWj8-AHg2cvXHH)&|ivsBSZ zVuFJFIb-J%*!4RNHg7Wg)K7MpxL(YZLlDF9F2+?&Av3f~YItEdHbyfB>=U42O!(-Q zd3&8sLwP7C8E}&O9w8IYXr-!KR&8BYSTiHX5M!A}1o31IQ=PFMR~sQ>%zF~x+O43o zs&0(;T5*33u*K$ND7Do!o~11E5R7e1y>#)ixrxeWq(-8+@nGh2+1Pe0(h{fxsH1UAEJ2hXS z8#-&|L|{%wb6ME(a zQ|-48z~yo?cYI?etBS%xFvOR-m8|!P*O&BD-gjZrn61R$|9XcB>iy z)W1eF#t|kR17fIV>m!DCi9Lz~R0XCi#x(YvXNw^_3+b&K#+QJlfwS0RoXiyd8Cy<^G_ zPNZQsi*A``7vRt}PGCFLQa|nJ4G)@jmvFavN+hJRqz^VkuuN1hX$ajlj+re+6pTXV z0oXr3yEw zm8;Y2c1xa03tifV5tsP*q^|CAcS50;5%CG72^AoFwQWZWxNy$c&5Gsh*-I9FJ&kKE z8I|O=>s;h}tpEn4s~t%VyOEcK{i30itMt+;TNo{3n*!``MT?uvxU@*xbNGtT-HSBnY=%x=WkfGvZrLdgxYAXf5t(+NL^iamVOKoahf@cnj> z|HgWu$p8=QL~Ls;E(0|kV?u>F>d|N--GF)Zh&75Fg&xabT3ZHfy#(2yD9`F9*xQbQ6@a{GJ=bW>qYeVmb?ltMoRCi}jdefS-$M6oUorOBb*Qa`(wPyWX zeX&wHf4Wp5I~jt7>g3G%OT9hod%D)FpT_^`;>4QuwR-XV$#c%x(z|B;)M&OJzbo?q zk)*yJI#Zzrw@!f7dc7RUyZMb_cw87W($vW#+eLIBp{pxJ9}#u<|Z2Y+_omxY*fKO52Jl^?1mA@OWPDh zVqFYvZ8o zB@=hqe5%gvHlrxU6MU!mtwK7kmyB?{F{TP#wvt?A$i~^7HG@PNd1e&K1tQ{O1iS9So z2S2sRGO$C`ITVp^bwl&z+`gt*BLCM249yA9gom08MMJGq8A#a;uIlr7i_m1QO#)O`$6y#WUc&m(!Svs^K`yE>_qF`l6qP=2mC<}lO{cwLJ( zK=J)+$O3pZ*310$cpd_hN!VQkD;BZ!aIKmO8B28yP#13e%wMb_d4mgDTO2kTvthnx z3QgF^V_WK(PB~SWEZI$x{lCmNBfyW;a?Db5#zo++P?fgovUpt&_7T}o7N&*51iJ!I zFZJb+Z{53|zp9G1)!6-(!oH__%{$A$t46!Q(>!V0h1lK$UwSjn#U?pUR>1LtSeo4@ z-6Ve;>CtOP#P#qREY%^axwp#Xevj=rYkyaE32xqs-|;Gi09F^ew&qR&94p91Z0{xL zsne6Cu(uic#SXzTmkYYl6lFR_7h+F$Eo-jEu#pF8H(E+nFpfHvT%}(0WCI%a3LMZ6FuyRzqM>^mbhoe%J$Q_tO zGh9cxF$UCQdc&NsFNPP)bj^Ueph2ls=j*KvBF+V<)g0TB5chN$l(CcrX?No%)2IuC zd#map%j(E>U-q%hK5?Ge-(*a_A%Pg&0bt`psN1{^u%9|_QX?jFwodfk78Gn|E%I~$ zSwTI@fDmfJG(&bN_@J2nciz#3WsSYRDzcG!Cp*T)<{D`(7hXdApoditwx>KYvP};i z-96w(u@|LZiUR_O+w?i-<7Fn=n>KuuT=%9cmE?OXq!pSu;W$G>^A<>a?wVG$HjGcc zhC-$NLJx0dg_}i+B7woFCx@AH@=e^-#kN4W5uz+EiMaeH;g&?$Q2&n`LR~GK~dmHzc4fQ zaE($rg4sJsm8&vyqhhteM{Gv12s?7a38FXai5g7vpw)-zp$pzxtjrY_7OYo4d&fE* z?$W*##$6b?8(lS-&MQkj%+Z=~X3%Hw*938lGU`oB+O#WG73vI0CpDwl?>Avr*arp{Etw^6`vxcDz1#F+b)jk5jWEX{se%SU13eL5^RW3; zywNNgkuOkSmr>GrJlx3h+})Yo8L9}KyI?b|pIi6YR#{3716?L!J0$j+Q?MJggKcff z8v{MEgckEmmNa}PtJWlM9e}tA&MHG*PIr^&5JFRh_j7mpW*^@luRlFQK<9 zxirPXXMDMaV}%2_9D1oPF9J91TJ#k|{ZPoLa2d zjXfMMr});=ww%!yvax$2nIAvgZRr+;0=x8wt@5}RbWlG~>LXJW1XB_bJw1lIQi4*; zOKduCfG!s24aE5I*q7LidU6e+cSkYL6bs9>NH4<=;C*hAvXbJ4mdDzFEf(|IIL!}1 zCChn7Dpql>LIC%g3Ar|=Z8!>jN*qPJy`Ljfmr@uc0YQM6*V)&`;F?OA)8R z3ub!7jls3%7njh%3Jj^{2P;S+*Md%Xics(9o_Cnby;7uTovL^IHk?l87j9E8Goh18 zGe&UCZiZTgk*au~`SiotaS0vxDW*2!dd&NNZc)$u4%UrPvR4 zd6Ft3r)~^s&=g9XuCT?F@+30n%B$5qkYeceNDs|d+CVUDd3{aHw@+Cfw!2{1G;`-`^ebHa0Xh1ZKwg+ z)Fm*uskz0=^@JYDsV*q#P93beZ2yjFr|j^7ln9=wkZrZNOo~Rv4nRcq3j-pkFL=Lt zp}Ncz6I{ADmMaODba^dO*nUE12g|iVqW*SXRi>ivewtCg!q=uWT)wtFd}?z zZ12v#u>m?-Q(M3lqSzdNVe@4MZf@W^bc*NvTL|Ilf^AHjbJb*_0)-p53s_e=bNdRe z$@cGanM2$WnJ|0BCK<-|tP}WI-6^%HRflD@T-3`(-1lg`1wb4zVlH!~VwRi2QawUw zdlWKIi0_A~qmLBVnvmm+<9$~pn*jUxord-mh2i-E)U{SV?z`HkF1E(nH_$hlgA=WA ziVThz({Wg?=RD1?+v}1^V=1DPL;Kzdt&P)#lbeMqp2={>LB4y=Yh?*fabtn+y|1FGG z{_c2oUmKyaH81lNuZ4zCR`2h&DW&(AHjOXNvG+5RYX&>dIyzsiyVnCdwUD+FNC5X9 z6m>(UG0$7JzI0d67lz5P^p=LZ@LBebGqyC*P4_AXR7}HLRe79sf3Z;^B zg4-Hsbe@enU0KugN4MW`(;m~+thv{zq4E-g&sDL;-urEkSW5%$+{$*l`SyUJ3>rM{ zB^mCz;1e3SC1Cp%hxnZl7hWF+b4t{cw8~>NJ@I*h0#8uj2?{(xfhQ>N z1O=X;z!MaBf&x!a;0X#mL4g)2u%Wg*S1(LN8({I}e`n;kYH7Bxp^n%5MeO$m|7uTN z5#KBl^J8cf3HRIabz`$gO>LGk)Dw+68&%R0&~-yN3TrrY;*GXrM} z@tFH*!6W`f_Yqk%eoCFIT;t6s)2Vg^2+Vxpb7UmE-%=_0(xlg@rmUhDO=FWzfCoqb*;Lot=7{~dB$Y! zVMRZ`*vB_oFVA+TZ9N^`SowJRkIH*I?Xz#lY`vcL?MAJqv+uZ4;<)wQS8q}NV}01V z#Hnt$mBXuCl_cd{Fv;YBnZSG{cV5M%oGME$y7g0bq~|c|34ak?PakLc>&j0pispHe z>AhLFebW0j((FubOK%i)+7>*u&@3LVBVl`!K5E43cNlLxZJM8Sa%=H~Op|ud1y8&k zv^1vmi2bfMma%sy`AU&h z@uX{|v7Tg^F@Q4LTt1WWtK`9+WvdxvVZQXtuDO(~!7Pkh8?BVe!E|5C4yOL}u-%b)oJ)3@%R>#u*Y<+nWg)3^SXNGrV*riXt}($B-*!Q;&BF?IaPCRLH`Ti1 zAfV%?S~;BNW$PvhgVT1i62o>KuVDlWI^*6TZ%qT~;%=+0r}n-5>u^$Ab(VY}6^fw1 z3oq5eLK3PVzmBf;>NOU+9(P}NoCj(H347Qr;ETRLUJFRdH)?@c=LA^Bxa&x@xlszd zgjnB>ZXCysIX2ZrAZ^cv|dW>Ehx~src{aZvvnn~w=8d($HOK#mmWKc z(9$@y-frftqn92q3I^vMDa@NplPzurhPA>L&#b#-2r3Q*dS8i(En5+czQ8xT=IQ=> zu{yzZ^9aCb^tji#@f;3!r5n%TaM!x=91eH28_(fz*Sql?4tK>H&*5;_yzv|kXVoiN zAvZ1;y-mggnQ3$)`!JdHNah#hOgkqLUGKknAIFZF`D5Ap`4oq|h)Og0DZ0Kk+Auvi zndg@XhIivG_rm0rg1*Jl#NspvT&PUrdR;+chT%f~ zc?@;_d}5+nl5QXzn#DEl@-f^Gt)wEiM*fWLQNsJUJ!%W!?E!p60ACrvI|BF-0X!MN zj||{P1@Kh?{OACFOaMPNfFBpYj}PD{1n?6B`04%(o zlLPn}0sJWe{HX!_X#spq0ACxx*9GvW2k;QgF06#Z? zuMglG0{F%N-WkAC0X!YRHwEyn0Nx$Idjk080NxwGw*>I>0{C+R_|^b^egMB9fL|EE zFACs&0eo8k?+@Su0X!4Hw+HYY0eoiw&j#>|1Ng20J{Z7<0{CzM9|_>20sOfEd@O*E z2k=|~-yOjB1n^4&_@x1SZvek6fL|WKpBKQNAHZJ_!1Dq8iU3{+;1dCSGJqEYcqxES z1@P$rJ`=#p0eoKozcPT&2JpE6UJ2my0em5V?+@VB0A35=^#HyY!2LHMv`1G3;x7g8 zWh0DnyYe{BGNT>yW50DnUO|BC?r#sL180sKt?{LKOU zU;zKC0DfBlzdeB85y0;Z;BN`wZw=sY3*dhpz~3Ig-x0vy8NlBa!2c$IzdL~66~GS# z@b?7p_XhCy1@QL=@DBv=zYX9Y4B&qkz&{kg|2}|!IDr2{0KYqc-xI(;62Sj4fPXB2 ze>{MHB7lD~fPX50|5E_}bO8TM0RQIzes2K3FMxkGfPXH4e?EYJA%Nc>z`q#4zZAg# zEr5SHfPW=`KM=ql4B%f4;131xuLtmN2JnXi__qT1BLV!;0RFuI{(}Ji!vOwY0sKb+ z{Ko0{965e02anIe?!Uz)uh0PY&Qu3E)o);A;c;(*yWf0sNT({8<6~oB+N) zfNu!kodG-*z&8c(t^nQ>z(-60eou!zaW5L6u|oe__hE(5Wu$w@SOqt;s8Dv zz=s3)NC1Cs03Q$Fxd6T=fL{{8_XhCG1Nid;cs_s^0{CPAF9q=F0A3E@R|fF806rhU z_XqG=0ACE?R|W9p0RCqI{KWzMngIUi0sPtketiJHA%MR$fWIt&zdV577{G4|;I9ne zuL|Hd2k=`0_-g|A>jL;20{9yP_?rUw!2o_+0KYwe-xdytCH?jZw3gWo0aRSy1ffgde!G?RV4 zCUD|w`bhjSfgkVStH5~F?soYzJQy__H1SRRTZP!9OJM4G#V<0+$vh z*)QK0_(dYVl%vOW@cO?*;A?nwqq7Bmhrq?3Xs5vCibUdNfxpFx|1yEgm5Pl2PJzpn zio`!9@V|EQd060Ycktf{{2dN{$`QO>?{x5u0+%Zr@i@9z;BsXn@shyb?c{Tfz~zcZ z#{Ua}A9CWqU*IHP=_BKRR^ab-@P`F1S4cAcuLb^oC;n3)sA+u3m6MErzQF(1iT^x- z%M}&an|-cj`2C5OfM4iyA^#KotH3`l@TUvB{YYM}TxlU1`>X}t7JVf8$~qqY4eCvw z=d$?sCz6m8^pWLO1b)20Wj;3v{4@uDpTO5R`8*`>GaWo}6xH+o#Mushw!qJI@QlDa z9sEj$YkhJJYef{jUc}!f;!FB}NZZ5tNMF$@c_>68__-zD((IrzT{{DThu8-ah=!8aby>+=x@pA`7V9sCx7 z|C57%RN(hI_|F9Xc?Uo11YYhJ9el6A|J}h~CGZCw{BH&RbqD{dz#n$-4lH0uZhXhV zHwpav4*ooW|CfW`An>0$`1=I@3kUz2!2id=k6g{`^IHesEO0r1y4*uj*czp&Oe4D^`I{37}2Oa#40v~no zPYOKe;ExHM^ktK7XP(OI^E?ONA@D04e80ep4*mv#&p7x;1wQNG-xv6TgCBbuuTR~< zy9K`F;4ct(B=nFe-n{5zz)9cu(z7{$?qHw)03Jm$#4-AvJe_`{QqJcrhOHt{S22@ z5B>Oa43GQOKf>@A=!oLmsx#G{Dlmkh~aN#_+$+KI>WDz;YU4% zpc`U%FT-CM!;1`mbqv3S;ctrJA7S{LWBB)hpNR3*Bjz0}yVz$1Se)=WOBY2@zuD&* zz}H3hi%=9nT(eJx;nz#`IKs5cKC=ubs~7*AFaF*P94bNV^KKUZ#|p=E$v*$WaB203 zBB-_O^IL}N{gEFCd^?8Xx+tg0{Re?pfUk}8e!;T@{$>_mu0o^eB7y&q;d=j9uESDm z{PiyZUl;9H<=!dsxtZZ#6rm_$!x^DNz@&KB`E0ACk9OO=c6W}nM} z`^tSii?8=3FB0+ZW%=uU6Pf>aSbS+cj3Oy{e;dgEq%)~L7peNl@zTTacs|3xef8WI zz;9*wyiDaU$LWU|{-9`06wQclUk>DR{8|2THvwN4ZBqHm8EY5AhZVj-X=Z&bOG zKGy?Z8|i&3NzXU4_}f)J&lM>@$#7{!jUpyy@$4bsKKiTzW3P+8r^?+ezO7^Uw95Z| z0>6aedlfG2m$v|48|nSHdqw=WviMI{@uj@_BE#c!_)mswzX&;VuYM-g^Xsafl0Kcl ziT|%SnLqmXmHh9;EdEzjd^xTs7~Z4mvtGownc>pf6-7CLKfv&Kdyhv)_~_XQd|mWs zDt{>_4>0_h3YT)=tqgyI!r3&9vcJgin!?9LeSXgH8x{W70zV4^d|k9n;ZnmGV)%N6 z!~DWNFJyQ@;dco9y$t`U2t|?96u%1G*WUkT@kdlXOdUe%W5Dq1qEi(vx+gl1;qmxm z48KOjf2*j$p8@xk`vDgJVijL%S`ShDHdTG~<$EmtoQnSo@#KtisGcuXIHIvn7jR#> zgDn0hL@Yi3UdeE|yP)wmGW=UAzU0IAF#L2??kW-EYYZPyxNKM3xm3@4RX#HQT86(y z#qSd_Mu7Y3zZAf)VfieoeC`zayc77^=-UdH^UKEq`TR!!KNACOU6fb(+#&Mc3*1-F z3X4Ck;!8RCa)#3`A^%8y=6wv;ek?N2Z!r90D*mzJTL&^+7kx(IGX5rp|F_H@vW0)f z8U9&?%lK7>|4iY}7vFAT_?Hwe`Rc>KWm@$RU%nB*f6nrGNJW+M{5UYu+UQ|b|KmiA zbqxQ#!ev<(0ACl$U5ZHQr85lwmC7G#B>UXJ@S9XVa(?_M!?!AYRK%wZ?RC*3A{0e; zh;L^AmvvAN@ns-@?_v3TTIDbK{91Mz%^_+L=L1$=F! z{Xk?{C#R{N4~tk@-|GWT^WYvafgCAf)L8tuK5!Gmf1>g^QGELV@Ds4lA|I>~U%mod z)s0+-Nx`iRj#DxXMp?i{}qcLr`yvvN70>;_Ag3` zl9qt`^uyN!_vQZ<7XJsTp1Z}jdl(+q!yjV!T2+5Zw{Ps)#=V zT*eU)`}2wb{sESc_9K;a_$I?Yt+J5#?-(w3!J|m>|Fh2XmwO)YbeU`X};Jh_)yLl z|I6aX^{aJg;JRp~%3qG(^BCTza771(&nx_kqFsLpoXV9m-am^N?`82H6tVQW`}4qk z{P}$r|MM#UV@1m2FYw1d75LhSyteq~H1T&J5dVq*{+0m#6X5G2>CF&DKa=HLNcat^ zTq#!v7#?50%mOF+$d9xjT+8A=Bw@9#za6-bKA&UpKdIu&@%W#C_`hZGwcj|V3HCYr zB7gpSfcxq>3w&KvQtkZ^%LTm8@P88_EeGxg?yLXzfv=5zr1H5!q&%*V^8cX1FBkY; zhX1+3rJTH;;a?W9qUaRy?GVF1rEp1~&ja_>=V2Bv0Z#qPMP%HiL$_?N5v-I)Of`XD);xQ{&Jml7I3P+tdW%G&tdU@q~Z%TCz@pVKPz1F^R*(M747`d(IUp} zEdJ+X@&A$GFIVlAeD$BeeeFGNryuVHzApNu%Kr@U?GlE6Lgg>*1}|awI~6YLe;31h z6)x%aGlqXo*r@P{81HO>ZKPl{2Z14S`lLwxXe=}!k2fk_`g=rUh(Z4 z43EqCBQK`<#PzgphTo_1k?qYf{09n`^_*k)(^NgxxB%{}=O(u|$`su&U5Y*1l*{d|j8<`F@?^bKG?Q(~|& zF2s4-Z587@OsSHb2b;#r)0I+DyuZw>T&jC_r51YFy?u7RVAXo_=saF;U8-7Hq_*Yq z{rz~8b-6NaKIk3wfIa#P0GEAReUjSLKZ850(N$G?FR2+F@5!Q8Z%X^|o-P+pvG}R9 zn^Etc`EoJ0ykJ*yv(*)Dn$#AjJ7N)ft@NoLr#9(MCxciFkkRb#SUY1m#9}x(#3&NW zAr>Q*68#h-Pj~-(rBxD|OP%ZAjJ1;D^{t8<0=K&duaEicsP zSs|AV+plwQUVtNBd(`cW2)y)bOFln3mdWMz=C|)2?$2dMhVyxFqMKj$c&Wa)kU0=c zFqrN#)u8-BwS0iyjae_vA-k?rK9B0x%aeJUC(97LFJxSwN0ai!QjLjljG=sIxoi%E zZoD2hJBUj8=5PC$~MEKdviO-GJON%`GLM%-?qN-On%2$ z-|+6izOig>ui1I&ZWS}Ly>ItmE)$n=y$tWr)ss;gguXOCJdz*To*&8#jg0Nh z4~-0Gb0cHpX0%lIaK3+M-`IG5ICIHhcG%9NYk2q2w#*piv14##Ti;-QWZT7={+yLX zx_2HgtN;xw)8orEPV&hh@8nE|uu z`Q27wsh%QNRYt2A|5SpNK243zjE#+qq0!^xeLFIFmoS@p#xmP8W0~RpOum0)IM;_p zkL7hkb0fPl!)BT3-m%hDsamQ`mLU7<1&Fii_VO%5_z))e!Oi14`vwO`E-~uSB*hlc zVE5Q~c8^KyCTTX0W%gvyb*-1uHQJZk*?M$PWoX2zQK~yrtFyFC zLf-Mg4}m&feqqTdD4s60X$tDlEX&ST2Yhk2w;p#3m|*?@m=7=UX)SlWF8c6Nq|;JN z)cE8`6lm6nbUG_!%V8u+b&ia;)`;E(sD^VTaA2*)1fz$UU`u&+wlrOs9pNK;zS6A4 zsV&*VO~ILI9GVm)N7MW{GqxBz-C3e;>YJRzYIvYjDVK`P3P^V{QXWo{RGPm;3PPw^ z?x}QUX|l9H+Evr2o%QluX@0TZJYuf3i0Kr)IA^g^o;(Z=PC@xP%rvR4+A`$hQfoZf zHQsvUbZW6uTU=O}uVU%Cy+m)jE;S=hI)#PCVW)wnSE}OGOI*olX{@J69v)trUiQYJ zW-aI)pjQ<&iD?_y-2|C2GBrl;y=q$5O(U(x zP0to;_14C8da%`~n}_FFmW}m>POS?xj@aW)>y4vt@l4MRQ*0JfbHhlfZfBZp9J|Mz zF&jruGkS>$uyNGQEUGz`HH^PS%}ouXZ5Go_!$_%K3@vBgXq+Hr%ma;M_QnNzlLT?e z+%N%b3J|yrqog41l>luRbF+|%4I^z)f~aA%RN9nT4Wsr-Dbz3)taw5KHH-$8RLKd7 zsNN75d&6}%udov@pY}mp$o{U@l-I;xQ8JtQ9 zrWKFIb~SvsY^1c`>WFL)1RoAq4>t=lo1Mf!$99c(l4V1@HPd`zRKSFb-q@pic1`LB zsUE%{)7BVNU~E_8_m0oZOiYY- z-Ldk*FMM{|5F9CXJ!Soui3X#~2AAq5b_&fO+2u@T4E-!)=JKYQK%zyKbJ57z$f4Lu z4#Y}n*zK_GA9T=wO1Ce^j0RHr>HX}LCqVJFm0v0akgH#n2poXHf%Gfaqxj9_&U z7PLwUGD(O(@ldj1Y7@#pR(-`{70Y%@-g;l}zLe=5DlF|O%r1&n3EOgT$h9^(X`v!( z)}Mx4@p0r~yf#~RueU8U1U7G{4L_{n3bVq*CM9wvwP|;aj9efOv$mP!?;fZ1Z~+!> zz7LVz7tRa}ml>R)-?@CwoP;*PVSsf2?Y$Ld*)|bn)6K&JWmwwS-jFfW@z5!G2Hg+w ztTXrUS<&D#(P5TQ=}&16Y1*OPW2HGP&=h+$XPU;e$@FGxeD~2B2%3L4XKP?M?A4k* z&_(1j=G|1L?qQ-7Ph;sX>Nu-lrr@p#nGt% zN6R;P2geY)$7s64Hp8$=!g%gu8=9b;*@I}b%O*#<6EdJ53(neDX}XNPm}T0wF-uIR z_zX0Jj;}7Ojz_gdCy6%?GGqmcCAsz|e?O zn`4}j?#Wgrt88~-cyVr`R2`YhVtc-Ty&7u*(X~X2N5P6cyhR2%#+4{$9P{iC7o zA9O}1r0q_SPdxRp`!Qt?qyaHD?CQzQWhR=&>s#s&?ARxsn(wNRXfyaeJX=Fsa26;2 zrc#alQ$Eel8O$`?eZVMG(LdEH{iQsQPf-(fW0Hzb;h-}ZmTr$aCE@t5UR4tXb^f&uM#_;e#D2X)^yQoQgD5CeoP;70{$~j4mtMcKD zD^~~JLLyd3vdkLV?(U+S{TE(P^Ty6Dom6Qq|*3a zE9WOkLCY)INRv%*cGQqlab}^Ffw}BZD7v+|E?0;wKs z+3`tz+hTbZ*3HZ)Gk)1(p9)bUb>Cr(RHcA#79Q3{btOl^!~zw;Yhp<^Hq!VdXW1_d zJ=C4DsVk+vm#?7L+9Fnt+fMRo+_pG{VcNt0aE|dX)KZM0BxhrT5$>ucFN7-LofJH> zqf4%M^V3U9c{n6MIl&UFzMMbMN%OQ2a&|up)i*b8&+mw@I?_=HSbs`V_~&Izd6Nfb zc;iIO-t35nV&b9X3*Vg7z@TD{@J$%uDLyYXQ5fW;#pxmY1B7s<340Ybc>vkU$e8#v zMQLs4tRMni=~GpjTIsCWr2(Z-g;CqYC~J$sHfAmlytNAxjTD$BT2_p7*7AfXizVmo z%2j2!4vv*-FsKpvBohVK&KEL>R5yI3^G&NJZ_Iiu0?J?5L1SMMzb(6f! zQd}4hH*bzv7E?X&w3U5=N#fp$eLIsl#LhrfxT~u!Vad1+ys> zAgW@ZGo5KSzDYxi+%S_;-GZAmn3oIr1^B|`50tC*#loyXDtnZd_EUf9&cYO89aYFm zJCqQn7N1iM8F?jRce8c4?joOEpxOAB1Q9uO?ih_y-QU7;k z&KvIBJI~(k?>}dJ{$mpPp#* zZR)e9AF*FD`EM`4(UsU^t_=In%+DW2$nFhWA32|KbUV8{`PbVdSk1BfC}#%3zMMM*^BbCXABL~ zr!n7X?9wLV&M5t%WJBChioNH&cA~%iIK!DHt*eZCSR17DWg6RMP908H+^AzXW6by* zSGVt<%&`G_t&nj$GCutAT4lPI3>WJ>S@i}{#?kOh+G8G(Oit*+a~_)x8GHE;4l3h+QB4>jfdo z9G>mO-a^=V$f(%yyneeOV}?!~CdZ;ow>)-xg051Ucds#i$Tc4+%PKry z&15m)7!)=*!;`x(zw}%^;;?LIub7LNE0Ko?5}7B_uB^`DL#;Q*0wUne{D4Ch;6Ht}^$h9b*xKeA*4?Cg5*fb{z&XIJ}w zIxXWpL56l?Lrd3&nLLU)cbM#y9D8PIhiW-dpBhy)87Xr^No}P9W0v znf3a2uGc^Ls>!kcPKf=V4!i%l(;6;!sQnxTlQ;I3hD>j@@-{}+7GsccNO9TYJK>CH z0vXE}`#mRm8x3wD#NHt_e)RA$;o>U28=36vC;ZEKZ`ggyWXk*`$aeo{FITLW;iu~* zPZ~ee&#f{!TBnbhY^lwKvwNHg|4;342J0RNqh_aDu|sL>H%-%vbM_fq^nGKVY?&Sz zqW9S8w+8t5bM7`%uiOaqJFb6Ze zy@av)4?jy6PPPID42&HbLPs+xb9g3`@ivPWp;ldcPTqdV!~uh2Z(fVIehk0ndv;$o z_`iRkl=<0Hczlz|*;7P`?Sx47&T@y^PgF8}dmm<@FSy7_l7879n^^ z?cC)vMljPg9j-%Zqw!0_En9XDyP7MmY}bO0+E`Sv$0o6Ry!_ZC!yWM2;mK_5&B3uZ zN&JUBcE&s48Bb0#JkiK_I797pxrAL$#&>o_9+$&P_lvNIlT<%_%4GUZqv?y|-MKf* z{HL>&i1$Nbn|wZGxC#ruqLF?t*Dpl*-rm{g84bHm7%~`7Ue4Y!`PTzU?8y^f9RAzc zF-)#zt#cU$J3Q{FUGF~(b~tjKeMX;2MZ?pnjF-gcrdq~xCF~kw6YxJjN(g5snH}9? zJG$`9ELN`cle#vw>Zbqs1baJv_**-%>;3e7Gg{*%r#~FK(LQ|4#B0LOq+e5J_A{9; z)3BGWeeQm=kNm%jJ$wC?Ne#mz{z zGCAb_n^X5pwj``Ctj)9M3K`GN(+32HwahCPy9~tLQJ>>fkMuWI;kgeEJ`Hi^a_&aC zoVsRu!jf^{G-gVR(aGN6xra2Zx}lu^gNxDscoWlZyT%@;hd*}^d)|}&j!r(J@OcLR zszK%l!fP@=&-=IY(+)Xj=cmPDM#Qe&bI zPm7)M#NPHkDE6z0bmkMgeAPdo!*}Y!%{snY_b)rb5&G6=-#&gPL;dyxMvWRfsKp3- z7IW^RoQoTq?`Pj)5G!u_tFZq)xNNbHpT_=n<(a?jRf+sN^4On=Pk-f({r6V#*q`0Z z)O$tvbobEiEXsqws2Y4eIsQUt@bGWfqMw!hFVzJl zsgysFoZG#YJQu}pau3Z6jMW@<=6{d155*s+JdehH2=R?W;bX7xp)bWxBEN~^*OS+v z_$S@9Kktj;u>LXPzC^mrbx(d0Z{;on^kuaN&u z>d*V+VeMetzj8-?(9aw>)6>NM%}twE7_VaPAwQ2-BXSgUETjX1b$YjMp-8 zjMr`AgRR?f_fUQwuh+@Xqx$FZKU|7-vAyBnT@Nqa-th0P!+Cp?$$5K+lJoYaxuacd z?@DoO?*{QD){VIPDL-%TK8b(Z(-FRxydl-OK%VsU z>G>}qZ$y4itQeS|9o$hL^nZo;N0v737Rqyq@*I_T{3Yt+5%G=Aw}fc-bI*T;d#DfR zzft0kdHm{#_|GK%jK_Zy5nnH_1)x9Y`SG=>yY}Y>^4U~}hsnoM{a+@}N50n`?Z$h% z2Pu9w#UCf1Pku)7V0{(HXWOOgt0pg^)<~M{m1%RB98U7j`Hw2dVqW~ zZCChr=EE!WzX$n8k{{c9jN*C!na2Y{9^T%P zhj++%KTx7Ts6zNRnlm0RYP#$Ab|mNR9Z1gGJB^&T_a=9=i}Afz9NYW2IJWmW%Fo-o zhn)9gf0KU_YaIKlLjFgl(VywQUTTWZb#LGv>cjh!{t}PB^gc8qewoDMUoKl45&x3J zFZ2FvkBHCee^5O1llLbVlJowg5;^Zrnz*ArE4|(36wmvU&g8s587O&tTEc;b`06FhZ63FY){-hE4`!wHrxT8O) z!x)O^IxHpUI^09fb$Fhf>+q2~+C?3XiK7m`ia+V&{x{|4`otHsx`oq-;Z%oO?xCIq z$@`K&OZ6E~{wMijck~~1yOZL%ZZDH_-994cx_wX1b<0!8whQf|ZY9N0w@bvo^Sae` z*Ll^EoUccEk@I!vC~`g@o!`(5ym{&6?p6As{a-LWBk@LKIft=^n zUU#&+)vqVN5%(|Sei1JpelYg>%U$PH9{-0dkRRJs(mllUcGV^4?P^8N+trVpw`+Y4 zhqw1)cf{xQ__7i4btOKJ$2WY*)Dd zc3b!)_BuxKd_MC#IiJtu@_)bzd9c2UyX*R@P0s791v#&;p5(l~CcC3utgnUQXV(|y z;dOK$Iq#pJBIo_{m*jjLIZ4j@;jG22uAvT`{~~hEUzVKnJV`!1w$WJE`TQR~3i;Xl zMfmIpe>cK^ityGY&uv$4npb_ubC7Rx597uAnJpC0>+Zr*=kjl-?QQOkJlOxVqj=79 zA9=WEj=JrWJlHQCrg+ZNxb(UHRHp43<&OSfe>IWfInPe=@NbEtKXD0`A9=7J%jK^7 zrGezP&~~koJlMb8M)BOAU&!OAKb6bGrN7W0?DrDgwLdG#2UDILWi3yLe}?*5iM$rY zUrOGEdnc*d^L|RL-7|;d}WER>+#hoz7xgQk@zMa-;m<}rv6_h@kt)v zjN;2>J=gy>65rh8J5c;)%HKueTYG#@ihqIPQzX8f#}A?SaIC|87$xx?JboO-56OBi zeyYSLd;GN&e*?wOmH18`zmVb!Q2a89@8a>RDEBpT>9$#2|ru)V2*0uZbW<=iNDR`J4D0}lK6)`epp2OEQ#Oh@pCAC zDfRyriGRoA?}&(hQsO`H_-7;HcS-zr9{*uP{9%bdG2yP;x|e>>hmzgFQ)nPip1yg z{M#x1URp0ZB_8wV1B&PT-$*>J`@W}m&VNeck^eNsbN={>Hoq{RaXwbqJb%W#dH2<5|8!Un<sKZ(clxIq-p`A0}R@{gr>&OcA$ao)R#;yM2c ziO2qA4aIZ*hb128=bI^>^KX%O^#28l=lmZ?Jgy`5Q9S2AB=P9~5sK&hrzIZOJAYF= z=g(0o<9tK^&vy^=jq{h0cwCoNqUE=fG zD4z5GEb-+%|L+vf`OmMMasD8Gyt~eyauQ$B^H-*L&R8&H6nhl#NX@j z3nSuJOZB*UgXFBL40+J=loZ>$5N!<&%t?ARJ;E)53Z;FZ}Z^1sI&AF*E?-!yJk@Rdy~IN z^%+gRn*2KQ3Y2FB`A~|#hx}vmXUNA;o;S%CQv3n(@ScCnE8Oo1^XDOo_s6j5^JFJ^ zdCKzzIp%GQ(#IF)Aq^tpalbaSn@0WNb+MEj`9plvx>!m5NuYK)p0_KB^80B{`u6Ul zJiNUL6knh6PbKH=Vo#xX&OeTP3gzKCtfKz>lR7M-_yo$&btvE-_Dh`KcU$Rom`VL% zUq~K)KD@%X?4owrCsI7;86V+u$vIEY2!Dy%<^1g_p1n9Z=f5Jt|A@%{RfIoB&iQ|g z@PQHS^6`lC@Nws&^y*vvAEx}gKO9HS$B_rf|4E)#|I7GNv|XHkY($-q_bk8;klfZ`Lpo}u1tD1RNQ^Ht={$;*>>BtJ^|d0lh<+7!=uT9Nbm<#B9E z?I!$#_*E2Nmg4z5p$0i0#~YJhL)(StS7ATUg!1!oa0|uHr#zpLuO%Nxc{Y*{r}(nu z|84(oq&(dJNz^X)e+9*J|8FM$Z~M>V_#oxs`tx=*rS0W$X-6J@XAsBtRPqJ1T}#RD zp!f~s6Ud(+|AhPvavra} z&qnR0xrh8~$$4BRQ=al3AEUTI=bfu_tqAA%!4dK7I1dT=hfsVy%FoX6*F?m#bNtYV zcy^8-77@>0h59+1;&Hwdwu_zPM?}Q4=kfeu94pay;d&=HUq4ogi0AXDMwAEr40)E5 zH>W)8yzW+0{6LD&Lq5Vi%(p|aVql%}yyg7UD82*bNplbNe46rLzZCkK-|El*R=fGBK4qvrCCK@_n(NQ!=P4AQmGX>_@Ok7bDIW7P%pcBkH^rZz zdGa7RkNY-q&hr5|-~T*B&hdB-ul;El+ed|0aPH6Lh{=lB&7 z{{O}}enfTVab)LlEDhzB*?B*}>yh_|ydL>Hkk@0s^jT%|is#{w2*-VZFb}z198ZIDyH`*iZkO}({&p0_ zbAO`t!!s$K_s&X)-PZyfEmy*9h@qBz=Pu`v4`MAc{cigT& zu1{a@oQKCVSrj?Y4QIG*PTx6AQ-y&rX7 zBAN1YyLVHax!pEq*veSKabiSP0s6O6FJ8} zL(cIRxW`hb|2{}wf6&3(6`sA|JhKAj;p0m~@|9GF=HwjD`wbqi@)XZ`aQzbIA?LyS zaD($Y`u|h?n^8Tv{=EO^`t$LW>(B9Af1b}=f6l}8=R8sM=k<6o^`Ga}+cdA(dA(Pm z`S8wv89$BM<^2rzhwH%Wl#gG$PLrrVd>w)7uP_g9qIPlLAULl(zVE^D?^1q_|Nlxq zdE5_1jMuy5JT4qxit4b8>dEt=1$kA9pG)~Wx`%%4An!)b_jCCChwta`b2mPJxP#i| z-&1?QJ=UcCovSbbVlQ0h!e_eUycE9G{eb;g`f;`~ZLf3s^X2fKFTSrDz8CTY$M)y) zAAk?`uk(se^RMH@alg+wJ%71~c7tcuZt%?74W3!M!82<&JZrtoJK|+Z?@#cq?!3Lh zaURLr8+?w(^Y#W`hYj_Qp>7poo>{xWF`u~I;A8yfx!vG5xO2O~F`xX~>DyH?=9#q{ zJhSZ$p4s*W&un{xXSThSVxC#M!86<5;F)c2@XWS1cxKyMIp&vp0eF0a4|L}`2cPH8 zbq;>3JJ&h*W_NrD<69->nY9~yqz7`l!B@F+yTLcPbGyOcaZm7%q1_k!^Y9_bKM($* ze;z)h_~*f2^3TJEH2*yKHvc?)*x;WBf7w3|AGZ1D!C&#u!-vEEdGJ^L^Yjm~K8IKE z*U~?;|KR->!Cxm&qWCw+Q^;{oFMK(EcsK72bN zK@fH;}(azK#5S^26jf7NmbWs|AH`e@O8OI)`zK?tZ`F`?kme@UJ~{uOx|`Pbwd$iE@qMt+PO zf2T3@^IP&oVob)>Q4TdD~ZtgwAQ{1PD zPxK3*<>Is4H;I=mYaQAxUc>!__!aK);lw=lLjNCjPbB}*Lel@6O#TyjD*4ak%gIlX zZzBJNd^h>8KF{>*` z4|y{A`Q)kOcu#1k!*cR`6u*fazcUx&cas;O_!H!KPiTmb_ZwBA{})hvBKd{n$>ase zQ^^aFFDEZdehYcnpL`iQ6MJnT$M2#A-$#BC<@t>qzgrgKi{=miwRK&L;v16Vcf~>+ z|GmfJ6rV=%CCKk5$KMPOd3KQFce#RpO)^e*(oPl9wS*CJ)!$ zc%_nu>sh>(lZWd~yf%@C>p{GBlZWdyyiSmZ>nXhA{lX*6t8l%8S0Z`19>FV_{1Wn> zr=_AQv3#T{H{`HV;gyOivOCt26_Ai*0a$6n&b`16UkG^YmqM?uT8#*ybk$p za-36yo}3`BNAdA~f)V;zpFEMg0eLbxo*{<(spO3)emQw#@-5_-lJ6sLLjD_hQ}Ut( zL+durFC%YAj%S)7?h5iSAFwu3$df2f8u=CE8_2ID-$vey{4jZQ^0-2wSJwX)2_QQZQ$1&;XA&&P4^UXPm}Jyhh+Xr@Q)!+e~Rb)-N`wB8s*{q zsT9xor%`-mYWG5lPb6QfY|~(0<4>gWBahr6cF$`4>gR4~%s-{7yo6aovJ9bm#2~&il&nb76b=_#Q00f`35U<+n@Y!tI_#;hX;A z{2>os3I0h4eE}Hzm`Kjgp_0h?IaD(FHvc?)Nb%1@{+Ipp@FCSd5B`dO9zLY`=fPj~ z&%=l1{(11%{PXZ(gMS|Ub^knk*yNuFf5SfyAGZ1D!MFS8;lpnKJopa(JbXCpp9g=_ zKMx;H_~*gj^3T&h1c<%Dhqu!|v;W|pPw;oh6Da;&a$MVnZ|@{eqWE3pIOh-F#vJdyl+@+9&f$dk#j zHp915$WKyyD*2D(Y2-hVFDL(*d;|F@@=fHwkZ&XZm3%k(Z{&x``T4>La(=!Lm(6}S z)R~_z#FL+){0Zdzd?AsXpD!el^Yevd^7O^$ZKRO%^MzFMETOahN+ajz3(Lv*`N9VB z49^$H`T4>&a(=$Bo1C97946=I3n$3=`9hpOpADPD&llp!`T0TuIX_=WB*#71P@*Jq ze!h@Q9#8d5A?N1{`1b)r=!F!YM)CZ7VL3TJU)Vs-&lfh4^K*o4X|~$&kIt?%TjzAd4}f& zRbp#*$CKc1ZL=O>W!{rp67zHgsI z&iCz;$y2!g5D1e-zJdmH^%(8(dnBL=Z_!HdfRH|{`lprKhVRxn0-k1 zrLjCXzpp^Pgxak~9@;JL&y}wbUpK;_mH1eHA3%HYhXxvS7H^hp&{KTTa)T7{t9luX z60cg?V7&N{$p%x!2UIjzC|;+E!5Z=DHyYe6zHX_(Ch-Q|Puxoh!yoFo+8caJ;%8lK zfNNpIUtQh&h{V@SFu=78;z#&E;anZw&+CJ8QTP?UT{zc*AM=65xdgmPb88pJN_ZQ0 z91Gyz`14xq>)?BfS{|%rc=%gF;dM={R^bKD>f<#*ytLOjO?-cS`}t7w@Isz#bL{JN z;*a`yPxKv6dGS2HT~)=eo??0GiGNwd{7P}GyN=>m zcYVaM?!w=S2`_9f*4<=rth+hlSa-|CvF>gc$GQuDdxzV_x_d?(>kjv#(NCE?K>J3Qk+{PG+YH$~!GUSy8@Hi*Z%n=kQ`2U$Gs=O7;IZmq=UtYz`I&x3fZ zyNwcm#`oK}|ATm}yJsYRU}ejX`$CAvy4x=CE&M==`$dSyy8B4t^ER~npQ)EK|6UyH z?hkRSyIk4q=g=kjvw(0{DEYb74* zZjm_F-CA+1yL-g3?ly~K-MuJ|b@#S7*4;jFth=M)Sa&~)W8M8Nj&)bikB6ww(6Kh& z<-{xaajlv-)?FR(9Ep~vi8$6>Gx5=B7T-=B>#no-eSTutM;z;Jkocd2E&nKSth))~ zM<-hROmVEcIpPCnTKtXTS^T)UP8{oQqd3;xlj2x+FN@Ch{w7sE%874I;t#=byri|vd6_W67S{L1uey~?mCNO z-KB_Q-HjHu!}e*4>@rSa*+#W8FP3j&-*~9P4h6IM&_g;#hY-h-2NI z5y!gA?f1tpzF2of#If$miDTU*ieue1700@3D~@&7T^#FfqVqA>(5c~TLzi`D2{daw>Z{a-rV+cm_Jx|#l*4hDvD#>)e*GccT2^w?rs&wy1QQ->+UIWth-mlvF>(>W8Hlsj&=8qIM&@S;#hZC z!vMx!7)PwTi^PZIx425;Z+T_Oth+7ZSa+|B zW8J+kj&*lP9P92oajd)F#j);k`2IM2JKWR5x+^G-b(bKHbyr;+>#ngl)?F)cth+Aa zSa$=&vF^r*W8KXV$GTe}j&-+M9P92bajd(?#If#P70+JP=FbP>wVRlKB93+Uh4?e$ zEdD!jth=AYe@n6WGvZixS^c~fjlCi^Z|-ZWhP7yH_0R?s0LfyO+eV?%ol{ zy4x>~b@!z>*4Z>+WK4th-9$Sa)^BvF@%A$GYnvj&;{t9P19x z$I$=3e7}92#{2#G1>#tD%fuUWwE1?kIM&^I@u&R$!~Nn|caMqBu5J18d%@^G*4;}I zf7qWx>=4Jg+a-SL8q1I0FGhZ>yF(IRJjLR_5ufbmpTCG>-DS;hKZpESck$v_cO}KK z?k*9>x@#bgb=O?HW`gzOYH_T){^D47qr|c9rio+S-5`#2w^AJIZi6`1-6P^ych8Aq z-E9}gy8BQZ>+Umgth?{UvF`p5$GXeq&#N)MSa&7FEBXW8YT`?L{?rr4x@#id+2dP? zW8JkAFE`J|y{kCZT_5qKRV{vqIM&@L@uhy=I7uAqZl?HJzdoHOj&-+0{8!&Etr2hH z_k->h$GXGsvtwMa?p~01th=|wvF<(+$GSTrj&*lZyr!?azr?Zb^7?q9pICPni(}nY z7RS1)FOGHBOdRVDzju#zvF`dxJl5R^ajd&3;#hZc#j);Ih-2N|A&zzTkT}-e7ICb* zcf_AuYV-LM@r7Z-W3Qv)Sa;uvU%cAlPl;pQoe}@i!sD|08)#5xth>D8lT+*m3X5ai zl@LGN-r_5WW8GB~KhKY+^~AC6nuxb(WBFT(f8ght9mSh^f4Yii>uPzXh*$J_EfT+V zsKu`kU){<4W^w#G@$1FQdAs+CZ@tO#JR;uD^FJw`Z-vD_FW%knQ@tYotv}y+Q+)bD z%Y(o3fca1^&HN*Y|GuL6LGc$Sn;#Y5KhXS`_|YZir^LG~HqUvXeMEo8Ty0-h6z`N^ z-a@?BD)Wxwef+*+SMhw^Exy0_4L!_BhQOp<>zT1iy!d& z=f8`0tYZ1I`go%L7_Z#o75sfr1;sI5#l$bKWBJR8W4x+}xA6H^M;znTNWAQ9%il~K zM~~fA+%m5%UM*b-wuC{uWnQ9OG47ywXaG zuON=`sw!U5_qX-LF*#jzez`5rMsbYSBjPPv zTl_QP7_S$^dwc!2i(|ar75}r1<^M<=wO)KmH73(PN#`uysi`9T;B386vuci z6aU1o-)<4dc&!(o)mGN%6OQ9JBgy4C6A@k1u7#fA>6Bh|d~h`L7bkcwH?%ww}fJ7RPuE5Fazi;zx>O zyvB*&?)L*{h-18Fi$Cw@Ka0gNUMs}k^zpq_-On5E6z^Tl`u~tP#%r_q>D3nhs`!yI z=6l2|O*j8pd|6xbf<^5k#`mjn_H{{dj8{4F?0!C4T^!?8N4$TksE@oFZ%-H*TR z#W7x;#q0a~$@_|9yatJX;nxwP#j(C7h#&52{l8Wm<26ToV_l11Eq*GC`9|?7etzy-F6zJLE)9OISU--m+vPp=9 z{$+8D*LLx5{QBZOag5hT;&by`{?EiQUSEm-?EO3`j`8|c{0YAwa-RQQ5#|ZTE2sGT zN!FhW#4%nMiGS+H>oVdPuS()W8(98E;@|uIz;@y@YFm5{@&5J9`-wLjZaz%>sU_yP zPmDSw3^1Q7@grK8-zGlSuXpYhe{rG3Zxa8)*YE4%dnQ`^d*ZmS`lMZ`7UmuMWFY5Od$BDn+%j&RD{58LBT_#?@ z&oeiQpBZa;9uXf@!~Ave9=>CGTl|cl4;&GH;ylZ9O#Fn;w=5;>`>6Ak=iAr0#N&NG zUS0eb->#-64LpA0HnO zKb&U$e@y(L%H})78~FMBPVtd`zWSy3$A13vo%mfhSpHwc-}Cd0GvYnH|2h167vqTa zUO+tmBFkS|e1RV?YKx=Jmx-g!ZNyRMF5;+je{s}#i1@5F)=&JMery-&JXhi`Yiseh ziKEVUiP!f1%){cS^W)-quebbL#Zl+i#Zl)y;uHM7$=Bkj^Uva_^WWmAa~?n6M}1J| z!s4iNaq&X=Y`f};qt1=Rr?j{DPU5I@4{`j>mx1D_^Dyzhe4UOLN1bPgqt1)P*Oaw> z-XV@UKPZkmKP8SjZxctI-xf!m-xI&pk6*{cQRfrlHzr&EbNTx~F}|pCe(~16-!3YS zI+qf!xy@^leLom0e7=aJ&5^JH<A19CiLs{8OKY2gOn6uf$R3U&X6lVeRHg@Q<+%;eDj2a}jaW zxr{jKTumHxZXk|2Hx;itIWGOxO&oRZBR<&ALnex&&eO%O^YfLt;;8c?@zY^}#9pfs z(m$MipEl}zyEy9ni1_Ut?dP|Nqt5S$qs||Rqt2g;qt3_0QRkn;7u*z={>od%K4L$B zI$tQ>HJimautOnl)eYqy#>>fBHqb#5k(I(HC9oqLL-&i%!|yUhACRUCDmCEh--#p8I6I-t(C zN&GD>E&e`n)EWOS6Y^Yop2a^c@u>4l;;8d3@#kh(p3lWm=kLW)=ikLq=WOLHANq+p z7Z69C3yU}FYd>E@9CfZMezjk}v=c|2JBj!5<7OXm)On!zkgC?7QR1lcByrSvo_O{S zmgi=1)cGE9)cG-S)cHAa)cJLB)cI}kr@LBzj)uq^Dh@;NE#8KxV;;3_~IO;q@{BWAJJ6rsNDdy|M zQRfZfj}EZ-E#j#2i{fkQSo{ug)On})&rK|TpE&CLnKe=Xi0{ zxwts$Tu~f#t|fjr&Dw1se*0?kWO3BFn|Nt|pTHP#)On)#?n^EIEOFF%uJ{wae_Se# zIPvSbw&Pqt360Up(64KNd%w4~w^GY4OLzQRfrlfBAE|)8eRe)=HKS^8s}(DE`hW zi>oM(I@cCQotuiI&aK5!=g#7&b5HU4{jERa#Zl*};s^ct>~e9`d5!ojeqU&VIO=?# z_<4Swxk(&#epVcHep9?ve%r23#8Kz3#Zl*<#8KzJ#8Kzmew@d+qs|4yd(XE1R2D~_ zYlx5Z`-UyWQRjBzFZ%PCZsMqOAMuBpTYs(*N1extqt4ffKkV20H;JRpcZj3T4~V1A zPl}_?FNvehuZwpI0}*>26i1zpi03I|@n^(Q=PXt1`xxJn=N1eNfqt5-sQRfljsPiOo)Om(@l}oG+tHe>~b>cUA-5wW5owtau z@#ko-h@;Ls#IyMQmiNU`=L6!X^S9!i{5RebHbxsgRovVtY&b7qL zU1fD{D~>uRi_iCYJWL#Q9wT0-q2-?{jylg0&*kUO3&c_972>G#o#NN~aqvlT)OnjY z>io7i>bzGRb^c5ob^c0xT~Dh+oUgMyu`k1YTGTm*_#nR?EG3RQmlwysIaEU&b*?LZ zT`lX+W#XuFD{<7hyZ8tBEYApW)OoTv>O5N9Cbb>{#bX*|Fbyi{HHkToUfYw9OlXQx$Nr%an!k*IO^O$9Cf}@ z9CdClUS_1V+gbeJBJ+{rcpu9+@sILa{0wo_ZMJws)vX>F-|?gD>%8JO`TGHiinqVq z;>(MFb-j6__^m#UO~i{Xu=v*E$v!W;h_CkjbBcIsUduB|e4^h!oGQNWB8#6Zes68_ z<>Et)<8Bi_>KC;4i~r@v*(b&K`2GBC;uUVR2Hp|RKiGVqc&|d{N5qTydH8SQm{)~- z9%0=&p#1A(Ae_)E{^y(e}00x4fptx;_Jp+p7P=y7nwH|UyxwlT>OmR zpXn=p<6?^+EI!)T*DUe;S6KW?@wI;ZS}(rO!s8wiZ|mo!&xrS)Za?s<_!CpjcZrYj z^OFPOw|V?m;>Y~_;V1DH{ywz7#Y_167S2z!_Ay=;uduH#67R9hyqtL9BIY&4r)D?5 zRD3~4^H$#1WN-0C-7S8ocws-@O%VUv z#|!7z*sc$jTAsxc-*a3;QO)1#4j6d@z0B&$!fk`e37rC55%)AvG_yc zYyEiftvJqGeigso*H_lsmJfA!*zboF5P#Ya@WsVPwXvVCB>s`_C+mvW>|ya&ir2W& zJXt(!*t+`0;6h_@Z`}XN~w<*O=cYUeWVBExxps#lIom#Ot$H ze4jsm{8GG+*ZEiR#%Y#6i$Cwecr6}ho=^PKx#mU1H~YFSFJ8#^CyC;t{CLqs{6*iN zw-(3ykGqIJ?CqwASBpdm3Ya{=9|Uy`FeRqJb!MB-z}cz z&x7}hHyL2@-;3Au{rS)0zxjQSe7^oLj>%VBo`T{p`*FXj_(OjFT1$MNKL>0p-pA)# zviMJ)f0+36Qr4d_;+@Ky&lfM}=Uq37KkfazSG-qY%kz*p*7c!FQ2R1jb5&o3?$Z+(Ha*IYc#_ZvOMOLVpP z;o_rwyC#W`_2buU@thuiqxdl&ms`XK_Rj_cNB@mKvgI9eRntrNt1`#N7PemKqAT_b+nzkWje2CwI{;???C zp7+GN^*8@W{Nq{XKZyV4^*<$!`{|_`+Rvf>XZ-6L;xGCBr;&J8UoSnyXLx=3i}xL7 z?adV*=<{ch`1K<#{vmPS{lsk+KkVl}2gGmp=bN92*Y@N1`M%CjhZzah?gio}{5rap zc-bKq-$49vzYgjyzS`$`U-1&Y-@9HMf5&!#_*<7-yZ4G$_Wjx>@u{mV{#9|@H{Ki6IN5bx^e{{Rdq_bxssVoiUG)A9Zdi@u+h< zaXcp*B91zb6yNXXdvnB5=Y`_;`1!_4an$)1@tOs#&UcHW&JT;D&RfN=^7*h!9Cbb* zjyiuSjyj(dN1e}zZj=;vdXh@)>#Zk}q z#NR4z`45Pro=3z{&+o-i&%eZ<@%{D%O|2cw6V$V$IOSe z(MKHh94Owz&)Y|dqn_i%^ZNPxOmWn6o;d2cOdR!GFaB3|>;L28sOO8~sOOvFsON{` zsOKSZ)bpr#o|)F4KgChctbYB3abM}@f%(Ky&w}DR6D)s8an!S-IO>@wj(R4EAL(iN zyNb8!XPzQH$2e}J_|K*68IwS2$PKzzUm%hObRQ?hwi z@kuq!dyA)*FrO-Zdo%M{;${7~zeaqr?{9AtpXm3=pA;`$#qvKVUdZRqe(_iRI{m14 zJAbZmQoN+k^FPJ^xY63hb54xQ?>^5<`?^#1#@pifJB<6pv7f}> zEkivqKYx_?Kl|8r{Vk4u7H)3eM;>@$gm;bb>EihNS!v?6F0}S;7Du~JMEK4K|0cq- zwa9$CN=JC(2=5xNNBi+@(U#tQTI z#Bn~bPke)47oQNv?;ZUr{-dA&$G5R|P-h%RE)w5b#Nz6TclYtTRJ@+w$L=YP<64S% z*#(w=s`&P)=GTc&@$-+H#XEQ%@b`(aUDX#^o@XTfL9fG$;!FIxX|H&JIhN;B@uxli zDRG=voDm;%t>r1!);^-28?U#o6U3`tY+gtFcq8*};@|syhH2vXJ?%ThKlJ_16XN?8 zS^kg2JNS9aXX01;b?k9*9QRL)53gkTb6#a1^Ta-c-=`=&)V?kxj^lV4ah!kF5FhG! z@b~7CAAU_l{E`TNJi>R1ce}y*e@wispNF3mZ|v9Cx&1jj`gwSO<%t)sSPMN8&h- zJt+RHuiu>Q?dMR>9)2I7iun3s7MCbK!_U*&i}&>F!7k$6YgwLo;zfp;FA;y-@1Hy% zUevE2Hi>7?VtL*bU+MGwL-AxEuan|9pZ`s~R=nje*ug%cZkzo+VQF!!>#E{74{soj zb=piE*NHtNd}4$zi*WoqFzA0J+nl(kCH@uP{$1j@PW)CJ>+47HtSQz&fsXbO?P7fu z5kJt@;_8TFy)+iT)7MKUajcgf;=8;*sp2@kPZ7^{k@aVpIM&x1@%OK>_$}g?S1*ZI zu4eH^#J5g2|5Y6K!?XH2Lp^a{I=A?fIW12?aXiU@Ep zk7K-0=ZnOf`}s^wan$*8anzx+IO;q|9Pv}cQRn&Mh`&`Fb-qU&b$(KOYZt5Yc5&4C z193dxIVg_jJKu=o`OeSc`2D`q;%)rA`a(a?#kgR6i;9;TWc@EIj^{g-#qoaJ+Tx$h zusjXLAN2Fymg1;?FLBg=kT~i;S{%=bt`*V_Y_hV_Y5=$GE&8j&XTa z{A)jc91zF2d?sFExz+Pqag57J@v5~g{tt1C%Xyvc`J^wy&jLUc87?)Gx7?;1rF)jsszlHhmldqSu;ux12;ux1k;ux3a z;ux2X;ux2%;=31Heen0s&`*rZ1c`qvhs9qjj&YeIeyyJ;-zZ+%ubWniue#3i-zko9 zc}g7P@}fA#WrsM%WuN#Bv#i~3#W60wiep@|bhV#D-7qfs#4#>K#c>{6O1xq@%iBO4 z@5^c`UV6C2cNNF`vU-bG_4Ae?;uyz~;;&V-{P_1Yu)V1NEQv>*mx`CX)biXZjygXg zjyi7SBR7IFMLudj$>|Gz{0>ulDaz2ex<91}KSLbjGFu#f&u+2!_IZ|Pg?K-| zPrF_m+}Vhj`_M=7Ys|`~ASF;`I_N{yOnWet+OL zan$pP2;U`sIL-3!6)!i{{3mhbzpSTyAN7B~jeXrlylG$ap5pWSnGY9#(>QLT_+y3b z8`p^^`~8;1;vN0EZ>{)rKkvF*e2*XZ9}^$z@z0AtH^%z2T^#-SG{S!q-{W}-_Og7a zCw_0FnD~b)Ev~+Je42R^@%?^Y*GnAnDdJW9dSRCMQort+D?Vw2wR@ZR+=AwJi4X8` zd`^74KhN7H{#jAWvrl}I*X^MAEBP({7x9j>&CiHez0ACjpO>Nj#g>_0EZ)!KYl~lb zzQs2buXdApd+{+t&3lT!aJhMZ@ddu#hlpS6>uZ$wyAv(XIPv-&%&!&4eeZ?hxbMAM z9QVEN6vut6GN@0~0@|5D2{S{(by ziQ+gfTp^D8-ZzVnX=3>|iQ~Ta)8bRJS^Q3M-1puio@1%S9~Z}c@1Mo*D`oLTd>*0B zxbIz3d`N$b$9^60SB^7pBk`D5UBxl428d%`jTXneniJu7MEJ82zF!>k3jdBJw(D&_ zUjHufm{*1UIEHx4s}kb*8e4rDiDOty13!OySRDVZ<>TUakGK3=#qsZ2z9PQauQ%Tj z$G>a&zWB3#J@|<@{$0z@#Ygyl`8#p^yOuwSxANz_XTmKnNa>u2=9u>!UJt;mjDLp*yMRAPRYvON>viP0i7_Se-Z}s(cP#oiRM0|Onxb)XA z;#W5@&*$p~^I?R~&x#R_zdM5XHGaRMkHi;UWcde*=kfWlOuST*#jh8?@&@w<#S#B% zgzp#MzQpqUE{=ZwE#B{Pi?2G+K4N<(Ot!Bt6~Eu>*-{+w{UdyW`21@u|4Q-Vb?@SRD8DE*Hmfu%-A9e!VkD{MixK z&*9=5E-+sxKDLzka`ErynLj7~!YuQb#ji{;KP-;-6MiXPzpTZdH^e@oK85}MU=HyS ze%vo2K0Js0d>Qe>Y33Egvz9c!Qv6g+^MT^GmoOhDUeN1ylX&rY7Jsw&V!w`kLHudI z4tiDmE}uWg#qmC|pTrjxwswp9{s8s7&g)Z3Jg$w!HxuvC&%BNJ&*jXAi+}6;$+6;F znpylR@eM=G*NK0d)BGjz;l8e37r(*h|1t4LQZ3I3@d19mQP|r@ee(K#vbcCIpXW*9 zWBOYDmg339%}0v&^Zoxg@zrS-zeXJYe)MhPrz>0hR`HZR=C6o%@p1V|{A*ud$Hias z{YE~2pCIbfb*|+vDE@)ht+M!|b1c54_|}WeyNN&A(7eC+B)=ZHM!aNmi=QQq>x+5f zclr8VFTQhv<+)${s`BQKi7)W}e;|I)*Tp{Z#=bs36Mw|({*`#Xiq`IL;*F}CXB}=I zF)n$19_A6hz>jwqiC6IbLxMP-7gQ0yB#X7zNc_8t&6C8(`hKjvINI$dj&}QtqusIM zRl8cdlf@sKW+rtwm8~7AbxtJZP(}G zU(`4MK^*P=CXRN`^YxASgLW?vZ<5RM7Zu-lsd)u)v|B?Q?KTicyRF23%5M2Ph_CbO z`rhJbcd$6x9W9P_uNB|x=Z$m4KgeqRSs{*g*NLOuyT#G&6XN{_TmI+7uk&`di=*A$ z;%IljINJS2yy!S<_k?%@pKpJPqum_-{XDTB55FIQb_%q55J$UR#XGgI?HwTgxUcKc;%)u7IZeEcpFhkK_tVC>72-RlSi852H@w080r3(3 z^;6=r8d?0y;;;Jg>s|3I*IWF4@tgd7=%{$Bt1bSdc#41hr+5k9uH2*S=P)1M_Ty|} z@z#EPEF-?6wEcW_@$ajeHxhrZl6ed9KRcRt7606i7sJJO`Ehxoc=;TbXP)>te~z|7 z{LX9^zd?NMSo4R)eYoPbh{s=I@vn)WKi7Ph_^B(*4~QQsW&XAJ@;T<;i=WJA{;T-X z%gnQkwvQO!=^mF)e5lvCsQ3WC&MK$g&hpj}$8)tt;<;yAd~@-qJx@pRGG3ov;-C8Y z&k*s${`_TRUeZkl)wpU;cMAN2jn8u3Iwp57^b$j`$c7C+v^+I>d+*{0^Nh))ay z6nniZ{*9kk?-ReIt;K&Ko-e2Q_u~D#nEx)G)%OG0#@P2UPrmVaTR^;@*YjfWZ~eTw zf_TUImbaGp{?6u2#qV5d-bQ@>O7pJbH~W370phd#{Cu={Z{JT&6W`z6^3M}5p5J_h z_^C_GZx_#<&-?-LpC*|N*sT0^gO>GgZa?Iuj_M(U*6C9Q%Jn9U(Y0n zZ}H<=HSzB{TAqgDt3CfD@gof^{(A9G-ES5ze1XM3BtF3RSDVELF-3D@h5#hd71c_8!f)M z_?5o@X)8V}(c+WEN3AgLCO+QRXXRl*^7!@Qrxshg8^wG0`Tu6|-xDl;tN4}0%y)=Sn_xcAkDr)t zRl+B+*BbH9{QlM5;=TNM^q6=HU%yX@FS)_;KQF$ur}@j`3w&Md5dYb)?O4LzTtbj54q0 z9{Teh981O0qHG!%P1Mfvv{rT_PXS>vXsET{ou7i}PH~As*$&v^8Z>RXf6u%`RemBK`M)BW9 z#Q#O{pHqCXH2Xrgx0-v{t}iSk{lBf;HNKa7h(D4ZY5$qzuJNCLgjn^gq*3R~gY;)|RZdX2W?B^52 z$NTwEdG}DaZ@ta%p`FBk;dM`@`0prwD*18pm68Ybe~jY4r}(!b;=hpi3;bv5`~4WL z!{y?rLnrZ~xhzpP_fUr)s6VqLzNh!&dWt_m@lQ)Uw)ZvhJN!Cj2jw|Qc}`0_^5mOm zLD=4#`qZzNfK zQ}M!n-P&IK3Ln3|6{jWxeXv<4PXe8`g!`+s=dDxU0qCwa(^ z-=Ezkj{58tM}0nb4{5_Z`7mE-H7@RFiASDn3+(&oKk^iIN1j>vEv}Npqizi({-DSA z5-(Q3@{E!^=+8`X^k*4)sApQ}SnPERd8k{ZZsre=hxkn%{}?&fd8at~b5I=pIpH4C zhB|k>(Av$h&_1G`$Wufdc`CXi&w_&X^9>~)d0LAj5AJIsPl}%?+%56ge{Pa?r+EBF z5|91lXA~dyliPeh`7L>Zm=A|T!q{u6c)TB{R*{E!g7-n)Lmu)ZdHjRqA-=qyhd)Oi;!{0-8#&LzL*m%3 zAH=a;CH*=wmO6bN)-9gCS#b^B^TfUk`7!Rz#nVUr! zQbZj0RVuinpI3XHtHmF7pCrD;{Z{fHZIjaf`vmz<&1aC;y$|-xNpu59FsQKBu3rh3)!-yfpb4^7`V)--rB9 zik~2k_*=;TqWI0^f0MsS9v3?6ufyWVpTkesLg;xEUs4?L&B(J*d~fosCh_N6`nW$N{tLf8y4c4D z{YM?ji6cM$jtJsW|0^W^*S6Mh3-{3V+|>URiATE&B7B87`m;_P{dr9MvmDl+C)`6< z@=$+vN<8}WBgLOj@%dI-KGXs6Ma0q1vf}7xqI*ak^2b}+xGN=ouODxEQ+!_P&t!>5 zyVr|9*uffDM|tv5o~I-pd0rMro87}eY&v z&b*!_#gXSy_mJX3%F|8aQJ?f>Vd~@hn z>~%NgFHHU4Bk{;{P#njp@5C3*wEQP1e-X-Gbgg|K^{H9QzAoV&LNB8D4ib<4bQk}A ztmPRfUeAwT*NQLm>%rOXp~<4u?yC}ycHa?49X=K>FxmQZkn$I!{1@G9-$xygzoz&@ zwJolRc*BY2oy9-(`0nnZ$&0Do#o`q$P25Y82mRS0jyiuJjyiuM-oAk~aNIp~r8xDc z{w?->twRTK)SM&mXyYZHHvU_N<1hxC1IO=dv@}Lf1iK7lbilYv>)@9tT{O#=P zyzZeZC8<9hBp&T{7sq@XB3{7f!*I%9it^tj@yP$2IO@Dz9Cbb@eoZmkuFu^=lclNM zBDdQ2;XXa%t{}&~*bv#rUFX9v@$GpnZyMz(L+#!w@z~x+#V1#?JWq;mt!KWK@|UIj zpGkZk@6Qk7_`CmqiWd(X7<=Wr%|2p#OV+fn3yPPnY+l?wbfp~iCrRSbpAO>aPakpg zXOwt;AK&rfTbfvZrn`r(l&Aizmw5E&5pneAd2#gTZSk8fw|3tXf69*|``trVDo}s^ zl6dqd@9mZk^+$g$7DsWUl*)(4_&E5{n;w<=+9f?=+8cJ^yh2w4V|q&--{3M`%%BRhptqn{uIB%eh%Y; z{!|f1e;SCRKdrz>9Ovy##qoR1t;BJj+|4~S8QS&TaNJOd@9O7clg01#=O**S zH_xyQSS60Xzx{xFXtx?|?`sl|C-9wY1 zUDT(F#G^h9#ZjMD;;2tIanxs&duX=?ZSNe3$M!A}$M&uk$M&ul$M!zzj&`xVFG)PM zcc(bE_fv6f?|0(Z-Yj>xdd!H4@_P!#H?R`fa+xv<8d9n6FyV&02 z5|8aYBaZDo|1Rq=#s%AZu{gFj(LJ;N;@I9F#Ie1*xr`n*xugmq1`&Py^|##`}6q}kM~%GuHF?9{{+R?qx?G~;*U^#eTx4( zB0l~eD^v(=K=D=GQ8)CzrNra@e|L$;{r^!E-;napmw4pAo#Go&{FaFLHz~d`#UF`? zKSlAEQhfZqRtMeQitZt_3B_L#5#Nd8n^OGfi1-B(k9yuB@u=sc6n`1ze^cU7&m$53 zt9ZW~Z2SM9{FhVy>i1<{pZems&(K`FS4aE#*6ty766H^o_zUV-{6vbsg5qx{zmohZ z@@C}kh~v5BL3fP%=+f5iPZZyr^5ofQ-wzZVc}lozo>~;&g7UN`Z%IB#@?ae2h+{vw zL>%#}#j&5fSNzjTwmlEHhpx1u{=6pfX!i?>Z%y&1#ZjNU_ggz!p9J@iq7CJ_RN}E+ zy~WX=!QzM?Esi=|D_$qn`ZwD>bfqoz=QfE)yU$bnRTTfecrHsHcSQ1FzWqk=?I=%y z2kZv}wI{Dc-huowchnij*;eA{f3i4^v%SPox8d%g$ z;yBK};2zrTNZY%IJemAB`PJmv9<+LDee#K;K1IY)p9FE#r>1*oGPH~OBuPB#(@`At z=_ii*j21_I=D3G;JJI&uO5U0L3Gy!FZ;4~xe&U`dmOotYW8R(?N8PeMl(EiOk9oyW zw-VyZ%h}H-xQ8xwrG8#2@o0BYgpU$OekGxvZgFwU+X~{?-n#Cg$^TQ@xxl$qRck!9*hVZc&=vw# zZYWUFT5wuGqoSlxXz0rU3Jj%S3Ppk<4i7PaR|f0Va0MNKi^JneN)_gof&=9dUNTZH zL>@9w9^s|KJ3OjWUJmcO*POMc->g~tCi~v=gE`4R>)YSjd!L+~oV~M4zH$^@{KJg(&`BDCa2feO|@O`|j_G%Y4NTRXH+#z0SjO zANz->JYBDeitn;{6t^vNDuVj);b{?{uHvtr7xAw^{BkEMv-iF#e%j(F{$LfKjBxB2 z#Z$~rQM{S?a>dikFHk(ge5K;EnXgei%Y3ck^O>(xyoLD-iXX)MEyWixAKe{2pyr}> zJCyl&#ao&0sQBT`cUPR7IkvCjM{xYXiZ5Y)jN&=wrzoChzFhG(<`)2`<2gP$dSRvF z@;k3JiYGXJt>Q`M>lELK`3s7tn7^g?bmpV4i}IrOr#zdPr+~N9i@c?QQ~W+0pH*De z326mR{oBsvY-pjnKcpvkM;{D94ipRJuYKqI8-2uf% zaeVyxs6cv3?J$~oLUEaEn^Iin!lo6MIj>p8$8!0tip!kTyy7y~v!J-lxhyJ9b02Bz zR9xmbb}7C&$CnjvVqQ^P=DJlCmpNWF#bs{OfZ{TjD844jm+YwhWiC!a@kyLdN^zOP zkybp(@ma+uGjCN~#^&>i%b0XQaT$v(DlTJ|or=pCSeN3vaXw|mWz3+Wc!uMvip#m6 zrg(|t2NYkyJbuIQ_P>I8Lh+T%Q;PqNd0O$`GtVl1CG%FruVS88yo-53@&968RD2cl zPQ|Zg-lh0z=4HjNVO~-ETIN;7|G>PacsKI_#jj%?zj1i`U(YfPG=M`VXyr6h1^P=KQn0G3kW8S6sGUjE)<#*5(#ZTb)s^V?T zYl@%Bd_eI6^Y~30+n?I!N6Zt7w=+*E{!`{@#f!|dil588Rq+nydBrbeUQoP~c~SAp zn0G2(V&0|r@0gbr?_yq2d^Pi`;@!+^ir>I|K=Cs3_|3!H|90jH#e0~i6u+B!TJZ|= ztl|$aZ&kdPd0z2HnHLnVGA}Cr4D(LK`6A8t-Z z&&M&RkI}#LJtTVN7kvMN_#FgzD*^wbK)1gU_?^J-1KtDtZ@~Wq{B7WO0sqXH=n3Vs z7WnqS?*_g*@c#y$1%40kBZ1!w{AA!2;6DfcXW*9szYq9z!0!is5AX+oKMnjr;Qhe= z0(|V)=n1vYL%@^3_;bLY0RE|X z^n~hF1up9V5q}c6{5u20p8`G?%6S_23BaELeh%-E7$(VrQ>-vFKkz8?5e;C}~x5%7NizY)0HQ=ymd2fhK~p94N`~l!{PmB0#z~!D6@iF7+Z}dLe z4BBBbaJkn-aT(zF`_`j?%RMlPKLhxdQ2s^0<=z;@-vE3(#6JRD?wL{i2H^O6!_6nq zt5Ln=UK%}b29Cc6oC93$u~Ga|;M+nzrvsOJZxp`*IQ|~(HsEqkj^bYcj=$Ub2)Nv< zqxgvv>2Fjo{5{m(z>|=ttoK7`2jG`O{AA#3f$s?X72tBukMbC|HT{k9*%{(z0GE4# z6n7}_T_FBU;Bt?U;!D7%Lj1kJ<=!F1kJ^U*M)`aJ;`akC_Y^7aRN%Wp{LR4SUL(c7 z4;<%XFG$df!_^$4)AAzXMt}wX=6SI0G|nbF7SE4=K(JQ zpAWnQd;#z>@P)ufeSTv;IL~Sl@D_;A0;l;-vYik7AmFQk<9wtl@I??mar=$=;QXIv z;5ZLw9&ns*a}4lSDF000IN##wxDV|JQ*p1up$S=yv!2FXg@#zaV@yf3M)n!@)}{il5D&Pkb61;y-5ItjhT;-#17r zzLLM6XB3z6vx>{-aZd4X@b}of;*aw8z&6FDoPy$#e~02XaXWM>{>LpMP*PmV=~8?& ze~$Jj{xO$dQT%kCztO9>lwVa`%I{ZvE`N_2Q2e3I0Jw+J?^3>8iwc+WlLR1s8Gp}_ z&u)qD;qv7(QTQW#oXBU5@Rym(IYjsg<03zKZwkML%g+&Tn{X*Vueg-ouK0c2k443I z;_K!P#iboO72kvVw_EX7o1*;6ijU{=dlZ-QD~fN!<@YIm4PTek6n~OG=lT_w&%Xi1 zr|{>HtdB@9)BAmDBFaC(_wsEX<^RnV{FRvFkwZCjt#b2Hl zz0wE#4heSqn&O}3*ZP6~5#k3Fm-rZeK2Uq!3Gs2oCB6xG55y-Fm-r;`KS6v-afxpR zeiy{26_@x7@U;-1Rb1j*fa87OR>dVg2ORGY=M|UuHsJR_J_W@kz8(0z5MNYW;yZxL zX9~$W6_@xD@IOQOU5fK*EY=PDK8PH1m5HI6n!X^I=-uP9#P*Ls0J1MyYG58>DPfIkcIHN_>qANXG(en4@Fm-)-oFMosh zIA6aD|24nX1iTO86N+!iuO)#$2k|Mz`En`N4E%YBPb)6*8Q?EKd{%LZZvp-y#J4KW zmqoE0@RuMyulSMtS{ra2Hz_FoCdan}$MKY+;*x&{@EYXPskpqqO2BdarAu-C+8gTz z{u-2DR{U^&tq1t)5MNPT-oL%TaU7?rxV(S+fUk%0Yl`p2uk{1Rai0OjuaL6FL=WgV z|A#QQk1H7gSxEv!SODis)ry1aHLHRg-OuaPvo*nz~6)NyA+rB zZs6}jd|7eHrw8~45MNPT;(LLA2=P_Lr9JzAe+2P0#U;KU_{R`Gpt$4{B}bI zNofCs;x}>oB!TY$@hQc3=lEveIDVa0yu|St;5e?GRb1j*fa7>~tK!{UehxT}gXa~O z`nCbb@$rJ|Kh>wO}`J9Dgq>-pl3p0LO9p zisCCcz85%-*H;xknB)6^<2ZgzaVftaIF9cRC@%3a{-CF(#Bu+);@4Av+nRtkGb5f* zT;h|!ah^a*@k^-?w>1Nw3FW61Um1nRGQe?O0nUpfKAGcNARgx%v??y`p97Bb5b}!4 z^-LRZoS#roT;kh-qA2`l$8Blx!9}lun4>cvudx`V7wD3h7-vqn`+CQQA5geZc zj`L(vic3Dtzz>4*(~3(z8Q?gtCabvQ(*hjl+q5d4;rw&JaUM=yak)R%1{~+-6cm^E zcHlT~r>MB}ZwK&JXrE5Sn>haxaGdAUrMP@o>;{hWf69tWd=GG(7gSMP+Orop&KIgG zF7@pLj`N6Wic5X_f#dw50mb*?_K^iqsVQ;ZQGBx~K=`X1-vm4d?VnJ5bB<2}UkdRl z#pV7s%l^;18L3!I&Sh9ghM(})pjcv*o1gFg=V6hdy-%Mt^sfZyTMYftZcMUK|5ihP zYk+^w(9a6+&l~y$0s1yW|3N_h1w;S20RMJFe|UhtXy{K4(03U6I|J(9Y3S*<){P!N zB}4yEfPa^v|51Q{x1m2ZKwmcW=LG0`4E?bI^{*KElLPd9 zFZb$D|5|{*+-pMpegS&9SAzQe1N8D;AN6wr^zvO5^)x53(c@pfYoY#t0KI%yK>eo! z`cJNPQNJWWFV||QKPf<;=W93AA0JTvHbcKYKwmKQ*9Pd@4L!}pY_$K2hJJ2!}HfR0s6S1KPW)oWavK$s6Sn= z==^sK@J|~0>jL~!hW?HKeY2szEI^+&^v4F&pRRRv`~56HPuB`szeRw)#n5jVpl>zw z-wn{`4EK;LcX&kSh4vZ3EOK;L8Nj|<4ZV(6a=(Dxep69e+E8v1hr{QC@j zbAW%%&|e+k-*4#u7@!|8^#2i{kGZ<)^Y_64`naKA6rgW1^kW0sKVj$(3Gh!E`a=Ws zDMNo)fS!&u-Ttis`m~`xJV2i@^os-ZSwnwBfWF1hFA31M8v5fMYxMIYXXrl)@XxcJ zhmi)yPwoxS)4g8WP=8H;zTME%G1+MSWt~y<-#tM2?=ti|1n9dB{pbLF+0cJ0p#6FbJ$)x* zJhb<LpHm!f8NkP7@%)6^gjvE7YzNS0s3}Be?UO{6%GA`0sb9^ zp4O)0)7sG9_xaOl=zkXAUo!OH3($8N`Y#9M-)-m*3(%Jh{bK?7_Za%c0sa+3e`$ce z*U;Y`kbl+CZyn&@XXsxI@UI#ALjwH!4gKQ*{sV^o-vj(({QH0W{Qp*fK5pp08<2mK zq2DvWKVj%!4)9MJ`dtG2Q-*%i0DZHepKR!p?j9*kb>MLKDB98tWL-Gnt_g;1^gARv zr)GxHSgiD16q(_LixTeX?Jj2Mc;NUcZa?U+3f_K36d=D#;PAm%c})9x?te=^wLyKG zN54md`v36g_ij*st4BY#K|QUZWYzzW2KBTig{99msHflfTKexcsHfjdS^Co&)Su$f zpWUFI=DAt^=QgOn!=wLAgZk$^`YTx9}c=^p)E4dzc{`j-EL ztmmKI45h5|KhvXsiuDtQl+gpNKh5c_^G{!sJK4D{5y=L}kN)Bw>+?^^>lg<>7Ibq{xjKs*I{mMU3>Lh#^f@J zr)aW}+t7cVd#?TIGu86XvA?XdGgz4Wqy1@2$A!A-ex|c4Djj zPGf)h-K5Vy>GYO=n{oU+WB4!d_^)Pvx<0^7w_n!dUo!k@eL`LTHjn=!>^~mO-DB;4 zl}G+ALZ6`uTijr^Z8@~8WxR{w3iN0fLe+712H`LFf($F_0@mfP_C|AKq2+i$(c z|0ec7WU!Qtf3!c{=XC$YG8;n%A2qXomN}jOUUHAM{}%3hidFw{eBjpe-_+?X|AOKF zis3)Q<9~F6{?k4FJ%&I1CRW$K#p7RQ|6gZZykT}@zMKF{OS1L z;L6bbf4av%{^iK<%{u<4di;~@-_LsTf6MTH%;Wz)``7FL4?OyD>BzX==ikn5oi(ff zQmmJCMx_~a|0SK?YX7DQBisL_xHv;UMK=jeg1|8*Y!vf=-c;ZN)JS^fVZ`^!3I zl7{ww+T&j{{As;P-Tvbou>7ZeC33t%jCrs9$2z@r{3U3x*=+^ZQUBArmD>MH9{&f} zzh3{(@c4JIKlVSZcd7jk_xO+cYLs}r{$J$r?=k#oJxuNYBaeTI{p+1Se(3SFO(o!&bB(}q8-$Ep42c>GUl(0?C~e~aNy>vd}XvpoLA2HXD( zkAL3qr}aFw|IHr%3mWvl-s9hH_>VXI|KaifE&ETz&UTMo5yQ6EJpP@AKdlF<>%WUz zXN=0!$KRR;{U&*~^7#Li{p-E|@ALQ%82+>#srDc1POuJ-=>K;b^dIH)R{uBAk2T$f=U-Z{RQvDk z@gMiKL3ym+`TwgP|CHfR>zQi*AA0<^Y0&>GRJ*_Lp_TrOvwk+c~{;{1pv< z8f(%1hk5+J$NoErG4HkiK_35-;ZN(WYX5)t`2Ujq-P?QErY;j=cX{-ktgmjQX0$)8=c?O(j>rE^ z_McYA|2rQ2q`e~Hu66Xsdh(AYqVp%VKdt|&^IzfdpWC4SWgh=#!=KiN)&5nFe}Vm5 z>ePRo$3MsZ`1z4G{C9K<*Eu}m_^GhJtkW)O==aY&kA4gb>*)&~{cIN2tN$rZZymn{ zqyDu1tZx5`$N$0x{nvW@I}CqXpH};i-@Jq|Kdq0e z{Xg;eFWfsaUR=ljeUE=X`xjVG_iwU>|I8-)`0HZ-dhNff(_8(Y-!?k`X2GA<*VXku z*5m&!``5dFlk@m@vwt)A)B3yG{{oNyq)a5-jrFqA$A8(QpUe7spTBE7`S)@Dc>bpK zdUgI!d;FKN|1FX@?{)r$AGpC8-LiiGvrZ#R#AKI`k{ zKh^22M8bOcU+B^A!TNgr|0_@a1zPOWZP@>` zUa-!;;_+X|{_^iwM70@t{kPWR-@*P#=Sds2AFU^>{l~ch77EeVpUd_gl*Mj}c0+$% zF~hd8PH**J_oS%)IgTcOT5nkUFZB3tH#-vYF!+$C_CLVm-}L#B?N93wYyYChe*ycK zhMc1Z)K<7H_xPvSznO!n{*Q@_>kAKbZKhE&4 zc>Gt+X{`QhJ^l&$v9{ar_&eV4kGlzS)TX-s56=$DV-H5Vp}!Q1+i0h^`af&HVZkDq@u*H)i@W_bMn z#{MgmKjn(sbf>qDzZm`4)oob+9~l0}di>kxM=tgJa~}VK;r~O!|6-5-4t(J*|1M9I z&B){bLXUqx`{VI_2(P zIeMVqe~)_fFSEYh`}ZMF{%upD_QUt@PmKIO^!R`EpeSE=c{*&<`A>BNJk+N8{4>8n z{ShAhQLL|b|MGN?zSyAul^*>i4eFou=vTA;_rqFm8<0xX!PGXM*nT?I@oIe zgZRLy*MEyV`ehC3f8)`g#`@js)c<~ueiiGd)Y0GL^j7~stKg;8PD*M-K z|1&)P9qfpjhyC5*F}P9tUu5|Ad;D)?{|xJ8r~O~| z_*aek({GJ*|L^8*P*9or{P|9U{!^XaI{xCcSee_f{Vy^6Pw@EfdB~tVR(L*}`VGU}N7n!6PH!DQO|)3K+qzg! z=f71({d+wAhaMIQ`833(jP$?F<6ma~0{E{s{3m?gZvR#6f5eb;^gy@&7EW)~zj<0z z{~Y*VYxp1U@&9ydB&^r|%RK%a?2qkF|0aPx|Np1Q|6TU4*Z!Rz|MVB4`eXakcR}sH z!Q(&o@TmUv+W!rYe>eMM``=*r@4vm>|G#JdOq9mZUsuGiZI;tp{ogcw2_k#Rl$n>_w)hX1XG|9X%Af$U%J{I`>v;6#0* zuV0q1zDczo#p3oaPH**JiStizFrB~Xx7PajUE=XSf&DjEhU#hTFpqzk{qg;Kr{Uk> z@jrv#IQ9I0;qlMyI`aJeC&T}4kAHDV)NmPWZ1-5#|4xs8e7BMBpS6bnM;`wQ``0^u z_DI^t&pOuEJAS_C^w#l{=KS&axyQ)=1dsoV?7x?5Gu-s`<8evbzr|=jx|gPp-y58s z`b58fl1E0auSUC}zuNx~N!!1j{rg!-@1Oe&|4nwV{Wm=-5^g@^96iwfGd=nQ>$j?- zU&?x2Zie*}#tbhYIs9qtMA54P7A=bcC#ZNjR&YDs>8<0ZjsCG4x8djKL!TPif88Gc ze1ra1d;DvL|HFp=n;!okHR!+ILw#KQnV={hv1c_uA3! z|GozOzwGpzxc6Cx-fXay4gY5i|I(NhTy_?=OY;!3L+y3m) zXISrE9=0WiJ&VN#Jo+})k5}>f^KhG;?Dp?q{dRTqU-#&{SudZTQjGThw&*2*_Z8MB zRRQw(C*ez-eiQd3BY^kKyN@1xl;aN&`uuvy=>Im4f9+qRf@sbmZt7|5C#;X$HbzcA zYvW^lr1j^C-sOi|hV?0g?r~B*FFO4uj%5_@*pKVaoa+CoGne+0W_`fp-_HIORc=x} zzt`j6&;CtZFY}Bt8`m#@NYE#>K}&x!5;tE*^#isdf6rA0q+-j{PXOO7X05a{QEur zv7bc3v>5X~sh+>?@vj>7|EJ+U(G8F|9Mi{NhW+c+zsc#X<1alwYJaT%dxrl)kAIH+ zb$jdQ2YCG3*}s|Fi{5`982&%>__sCaf3nBF+wlL$@W0CA-`=4A6(0XS!~YY*|1t4b z$5n~_lZxx-y&nH2`p53whW-C3*9Y-Ix^Z6WdZ(xFXi+r3=ypBqFY)qoeSv_{2TlS@bG@(Mx?r zrk|hv|J48G|EW)VZVm*$Xtn)NCyw)t{RqUWNMR~OXLw{I$uwm$3h z*7>i<{olnG;B@?LX7vA3kN+>vi~J_u`oH@x@%T3%868n=lcE}v{}zV-_dNb9=R~@9 z;{UsUyGP&I66rs7_t$XK?SG~x|I+Eys&38!wBJ@n{^zp4K7KB0i=4VHLigxcBO-ZR z=E?sXv@oUHGMf$VhW?07z;8VHH=h&b-?LK`N$o$;$e+fC^?RQbKb{czuX5$%rv2%8 q6p2x>SnBH$E%7+qw(jXM?*BN4$@$MMUts!IE{OE&77Q;}`~MH}%JA#} literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAMessageGAM/JAMessageGAM.o b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAMessageGAM/JAMessageGAM.o new file mode 100644 index 0000000000000000000000000000000000000000..a27cc7821527eac9834597825adb9b12b9c34ab8 GIT binary patch literal 341032 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 literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAMessageGAM/JAMessageGAM.so b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAMessageGAM/JAMessageGAM.so new file mode 100755 index 0000000000000000000000000000000000000000..7cb178b3a0872fc8fa78c56a085ecbe6ea7674b5 GIT binary patch literal 208552 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 hZ6;%Ssb*h?Ce;X#^>?5xFd5|Q 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 R-}$&s|I2MUz5I5||NqCthD87X literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAMessageGAM/libJAMessageGAM.so b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAMessageGAM/libJAMessageGAM.so new file mode 120000 index 0000000..e291b9f --- /dev/null +++ b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAMessageGAM/libJAMessageGAM.so @@ -0,0 +1 @@ +JAMessageGAM.so \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAModeControlGAM/JAModeControlGAM.a b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAModeControlGAM/JAModeControlGAM.a new file mode 100644 index 0000000000000000000000000000000000000000..ca45dc683c897dd19ceced36ee9d574bfc0b8303 GIT binary patch literal 269872 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 HQ6%zz-Lw@> literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAModeControlGAM/JAModeControlGAM.o b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAModeControlGAM/JAModeControlGAM.o new file mode 100644 index 0000000000000000000000000000000000000000..2ee886ba27f330a20a21fca65ee06e382bbb9958 GIT binary patch literal 269800 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 _JYl7K$94$IA0)vER016ve!7K3hMq!I_e?OHJ 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 mWagzddxm%SfcH=Puk&x79mDD;28o4^qO literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAModeControlGAM/JAModeControlGAM.so b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAModeControlGAM/JAModeControlGAM.so new file mode 100755 index 0000000000000000000000000000000000000000..00a9f3ed11713bffc64a0ac6a234345563ffed0b GIT binary patch literal 167760 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 literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAModeControlGAM/libJAModeControlGAM.so b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAModeControlGAM/libJAModeControlGAM.so new file mode 120000 index 0000000..01081fc --- /dev/null +++ b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAModeControlGAM/libJAModeControlGAM.so @@ -0,0 +1 @@ +JAModeControlGAM.so \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.a b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.a new file mode 100644 index 0000000000000000000000000000000000000000..091b1f3583b43c2bcac609eaf35a37c57570ccc8 GIT binary patch literal 313512 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 literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.o b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.o new file mode 100644 index 0000000000000000000000000000000000000000..2c4aa22feb81805bf67addc39eac5b2768bd9c77 GIT binary patch literal 313440 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 literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.so b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAPreProgrammedGAM/JAPreProgrammedGAM.so new file mode 100755 index 0000000000000000000000000000000000000000..1ac07036e027bf247f470a0405d6e8c5e97098fe GIT binary patch literal 194984 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 z zq@8S;-~HPK&{yJ9ABa1{zgHxAZcft z)JHn_n1_81+1Xen_-!&TLs9TOwf0(#oWD@xpt54Z8gOFtW=pP^EJvGmj3{xIFow}c{Y zi+q&HdU#B(ONkP%lX2eU7PqZ(-Fs%UP?Xa{dqL)Lh0G&v$9%kZm567V^b=*n$A|by z`#)jeWM_G$P}Ij2i1-t}POjT}zH;O~Vdu+2f4Q_j zQO3=E-|~mdOR}s(lrbOA$#v$`cEO`NK1N+l`?^rAA+V=J1UV?<`Hc0^v;=EScA0zR$a$Fl_o#^#Yhm8TPw^KF>#px{st&wq#ka5=U zM~}&MX^LEz;-vkTKqbourU@VTyoB{5eQ+5kI>6Z4C ztP}VBqy+(_ey`du^!4?291=me`#z^?`eellRRj(*AfX2;@%}sV~E$1yP_BFj1}> z?)#qxgRp;z%$GjDOmbZA`$LE>{Hv*@+waR&|*KLj*ulxSQBCDF)G7j$hjVGjjC#jEV z%SU(FZ+EwNev85&{|$c_SWjPXyUP5wb*qOf=J&cpVx8BMRZ{RlYO zua)zGFQ`sO(_8yf3^b$0e6TEll2z7Rx$`mijBC{*O{0%M>32Wt~UKb!@7{gF1=z zcFB_hxK-je%6&`nVF6q#@kTi=_vh>PWnHyIKn!i+5AA|K+E0pgPqjjF|)+F}P+Ty!4iG8%r@ZFlkK3XsE-I~NcS{L|kO=2Idm-uc?Vjr#3e2Y^R zapdGN@d@Ve;R#D}%;VBia#QA^9#NDT^YUWTj8T&_vSy@Y=9@)v_)<>wq8w?=&CSl8 zoRXC?-@MSAWf{&qcNbw?Kou#i`cMpaQ4CMWSZL19w@4fD6IClN!f>MxVFZLrl>VEw zWZ}f=mf;q}2D3LUduUe5Lf23XnL2lYd7fo#enuvy^SB6(Q^E{=Os-<1(wnPfT)0bs zU4=2iYHDU2Phc4?Hyxh_!i4pS9-Bt8^TxO-(~}}i=9HXR#m(!+WG#_lR{I`GSd2Mu zUT#K?B|8`1V`0-1ska##i}g+&mM(A|tOKQdOb^34Icth^R2PL0i_M#ENkL7j@bIv)8J4lx*_q~)tXRvW^l+mwWx8>0^8sUA zE)5<1L>S{{Oq}PjfvX^V*!b++g((&#wB!sj6Mo%znwlBeSo>qMEav&<+}QL<=|hZ0 zV|x1BxzmRxky>~Xfe`@bD*i>m|M--w`R3RK)B*~TG=x~+W{t*037iZOOBW+iFcQW# z(*H^=%A=Y~OyO1dF!!J~)40xE!^I;SR=DWvzaLfv#fH=CBQ_LWw?Vu68iBO9mPj*= zq3#+kqZvw$h|w%?@2h!0!YFfW~n& z>WgXYwZrL=N`;3w@gwG)6ATGDHy~H29g3 zHQz%FBf?Y#Jr~0h%(>XtrC4M#JQ+hBB2><`C)}m0A=AwkU-FzuMz3v$jmgO|XQg^q zKw}?W>&>N#UWYF3WfZ74{^4{FFsJ2bHp`4tqNKzL#<=7{!CjKz#N};V-ozDL+6j-E zFeWb79G9CtKR0FJLUZbkVB*v? zASuV3n@9J949k+FMPX#oQ%|}@Pcm8I9@~XS#F#V97W0_g+>|AGJlj)KTy`KXsnTQY zshiYHqiEtiEXAK{g0}@gd1hn0 zzV&mT@k(V!h8xNL}|_*5P4dI~pE!quIibgs4%Ji6z4mW|2}P5#eIVpKM;3ox3F7On1<%d1e~@ zJY{$4MQy0_7A?H;qNh(=IXdz^A`Bsk&C1D_0Tm92g;-S!huYM9izhuiCV5+q!f`V; z=U@*%#av+F1)XanJW0#5=g#chwARS_I^Ar()u=wXx|C3JvHM<%7KeoFTQLZ74g-mwH+@Kw1}`$`N1F5A zF*z&tNs?oE8GzAkzmSMcyiJoV+}DQlUx>WZMa^U@|> zjO8wgwU`$siHAqk`|zk{S_!e9MloqF9tfghv+^t{n0<1w^`ywtrkPREz>|K~V&lR% zd9!Ht+#McHPvYXGN$#-8DVdqs^Ng;mSNL_!I*S+8<&-?B`}UpUvCJ2g#rTrU4| zJyop_9iMAPnY!HBJ(YF65%JUYbyDY<=74iP$VqK*-U>D~q z8C6{MIV`;7xmX9FdXWy0(dG^`OTYr!6?%;e-VAvf^53yS9*ehx?tyD=#Y-_XSHycq zys&bQgy$WNbBmI&C@hJe`$RVWr@JF;Il?2tlH@J+e`@;18T!la|9T%`j0j6Lr={d) zT3kLsz{ckPZaOMMZdaT;IS;!9=cXn;4*NiU7;%3r#PbM$<~Tn;B{wxGW!`Q1c$oU1 z_~>=``t$Qpm$-P|oMArEYNEK9i+2_&dF0~XvLp7fYzIqW0ew!Z7)_ar2V2FY$2|^i zAo!F5kD#ufPI&%gZGka-NMas++>3Yf?vHAoo238!CfGZ;y5xI##=3Ix%X4^a2F>=r zii+>G%=3_Zdx_QS;=B~g?f=nBS}Q$!DeoT_SElZt3tm(!lJ=W%*;DZ}S<^Iihs__~7Y zg5+5j{$Lm8uIt5>iw^)E>Ri`apSh&HXhbt7n%8Wa=bH6CvWql&(FKy`GaDYGmgaf# zdeL=_T0-pKx^45~rr$0uYIXDYWe3lj3+Jtk-ik)X<>$_)*ZWvuqnvMJv$HHIc+Hoq zEVKOnH_TW-Z^P+xMA62_+kO3|{ZP?nve}Z7>b)JlJm&a~~015ikFkubb^rR_I9Yu1{7?h1YF#&P44 zhM@BsC&i8(mlQELVsNCmo;efvP;K1InPbMrCWQ|kqJJmUN%5slKJaBw{)vhA-0(Pw$GPE&5>Ix+b-q~QelRP)^35HT zDR`;ql7Ch<8JOa0@%%Ttn8A0UZCJlDY#X^ zXDaws1^-^bgXH(}sZLb9LeXES=vOMZ{<|+Eu2OJ0bw#TS2Bu_R#e=-yAztuMFSx-A z-roxz<^_-Pf=7G7OGeY=8h)s;aT z6}*>%>%Uh!SO5Oj-yt= z?{T1-W>@gD3f`dLcPn_Kf-hBYyZn7=%GVeL55;f&(a{R0b5}|=;Kb*%hWOE6!Lt-R zOu-WrJW9c7SFIn>3jUl9f|?Y3vx3JdxVo#Jso({QezJnEQt)&ISNGjH3cg&?FHrCY z72K-eetu3tv4S6R!djVvf1}{*75rlbFIRB-o0s~rRl)rgyh6dh)s;aj75p6quTt&l=(3a%-3LKIwGH$oM>onptJ;I}Ave+6%^;9&~hLBXRGJXpb_6?~I|n-qMag2yTN z1qGj};QJIjS;6Nic)EhWrrl+t z5|=Bue5B!4TNV6q#ZHBSuT=0#1#hGHQ>Eau75xJWj$eIt95o8w$$_H&6`;3pKkR>4OpxLv`YQ1Au? zuT}6y1)r|qntYz6{r^h}9;D#u3Lc{1>l8dx!S7ITgMyD%@cs&Zr-Fwm_(27aQt%rT zJX*n{72KrY4GJEo;A0hhrh?zE;K>R;PQlX^{G5X4D0qy57btj|f?E~*c?B<4aP{A0 zC{ys&ivD^9H!66!f-h3=tqT68f>$W`LItl>aJzz6DfoB=KcL_@DtL{8H!1j01ve>p zt%AoYxT)||kf|i_y9W)Lsi?{lXus4SFFgwP1*tb<=r=`iZzG($Tgm~I|)Ri&6hWKH`TbW-){B^|V zFu$C5+8Wd)GryGh;l#%=pG!R5lIxkQ1#BA#w7bs@~h6MsGN z8uJr~r&~r{!|$Ab;-iVLWqt(lV~DR|K7x3B0)g?3k+gk9nwAIBie}?!8#78rKlK6?lhcW*R z@so%*F#j3xlZg*u{zKxY5U(+Rkoc*@H~hx=Cq9n&TIP2WKaKbr=C=_aPka^g&k#>r zhPn#oHxZved^z)v5T8hV8S`t1pFzBp`BlWpfiT@Yz8uJr~Pa?kISI$52$;8((KZ5ua;%k_X zAbu|KRm=|{ejf1^%=aQbmH2YzyAf|DzKr>f#HSH&WxfsZ^NG)4-k*570o5fl|JwuL zGl-94{tWR8h>vFeB=NTrAIAJQ#Agz3VE!}W=~i7A!u*HCXA!S4e~|cW;u{({|HS7I zU(5VX;%_6qhWTy8=MrDV{4>Po5nsXlCgLr`moxte@%hA;F~5fRMZ{Z~Uq$?4;&Yf^ zPJ99J$;>Y$ehKk$%;yrnl=x`o7Z86t@nOu*C7!mJbq3~V5xQez%i7QB0h(Cf8w_ipUnJk_k(|$_&Daz5dRGE(afJD z{y)TrG5-zm&k}E7{xjmABR+)r4~c)Cc#Zjk#J@m%!#U1B@fF0^GQX4f7m2T7ejD-I zh_7P)8RB0ezJmEp#J@~@IrEPYzn%Cp=GPFvgLo_RtB8Mv_#Eb!6JJSuGV@D`f0g(+ z@TSs0D*#jJ=v-WZU2L4Yjw9?uvF={#B;J(O*G~E^Xgg+M)ls zMF!3O9+nV$I>I(*e_%tILGwGims+I_4!)9>01b~EqeGymS^B}bB(`5=>6VE0zpX%L zw(pv1=G5H;1Ho5XNxyC)uFI&C>3D<*HQAQgO(jOV$yROeiRGHF1A|(?Fp#g#N~EN7 zDw!^g4>8$7Sf`|OJR@spB{A9Jk|jDypcRaku^}=a7$QxsrWgaMw(>I#sgb3y|zri-k~h1;ia z`>pR1M?>CkeGiv@^@B_{lo>@V2s|ZW6?PGf;QC%li0vrB8;gY9Yh7`tKBs2}GDgKjAgmg+I9+@h1In9G4V8J)h^ddldS3Qs53eTqjh)7_^j zrgiV(nr8qe0P1;JBYMUxueQ^AreCi`cW>{dw)KZ)!}@pRyt(@nEuSXa>ohSX6-7I`~hXQ0X)|d*H)o2!) zyfx%nC(5qPMe}alt|`8y#2gk}9c0ANEnWR)t}Q&2$c%HuM;F zHhOjp+sbZK+k-G{%8lvneN-rp8G83A`qzI@H%EC&7ZEA3(z~C+#(?0pRgO|QB%&qc znJo7Yeu(5s%ITJmlz%sk$4)6{vl!%29;66e;p-GZ&4Q^a0LVjm#GHG*NfDJk<-Uj> z>K$>o^Cyl2Yn4#?S&UE=;ekr80D2ZcC{p2wBNWfESJn1EP(O9j(~-hc%97sgVBzUZ zD*D3Li3m>_fTvmP7N<*Z@;R+2>?ysDaCmySLG=_FDA=1<7 z@Kn@l6Bcr`ucaiFMkY!5IC52@@N6ir#C!Cylvbou3F{;Kz+^kK8=WCW)%GQ)cok4m zN4qPeZUFq?si`+ZeR67w;zU4*h=4EvTXT5yn8MB`2iX%!9lft{1Y|GGp_1(~bv06q zfE-MuUd804$0DTe>8VOUmah!~qnfsM4hqdO6HxF-3F|f2;aL*gco>-)%FoI zE~olHvTb`)A9(4ycH}y|;HWLDbFF~j6|(jR!$AbBN^b|ZdU7EbMT>wD5dmWW@)VAa zOOyAxa|)PM4Olgoj9&XyQjAEw&nvWuREdbxbCZkxZ(6%I$xCBubTB zM(&78K2KojIz}9o+*1zjW;+RahLC}!2&+=b>n3tyDwV_(bKr}jL}G}D#4rF02WY9W z8Pz6{3{he#)Wi&?N#v;HN@pdL7V(UNuI9d*^%jMRxDpX@WdI%LaB7WelP|b)iffe`*CP}M$6{Y0#R%vZyn2a% zZV&<86{{5dXwG)EJrOfT7Ca5dz2H}V&jsH=qS7KkBJV3SaD0{^*FFn=Jz`R_POG%uKA5qB5x9XY%Udm>;p^ zf?DvW)PjHXTlehCf}eCF$F*FE>kVAJMFtU9A|kE~pyRtZwMMncDej!&N}r}Vb~oQq z92^B-F2xAwDW0??e&IMm93SN-N3af$RQ;b~u zEcmAolah6cUH5`d<8t-3!uJ$OSW~)AIQxOjOxCBO>uOFbq|tKh`bdpTitST8=iheRJ&p#?s8^wC+4Jc zB3=$F$Yq7dr67^RZWp=ifWf=w(&C!SYbcz0E*%rGrP{$szJ+>A=(A!>`g${&YMT>U zPC*fC&3ayw)-mEp=w5_|=K1f(I0|}Dx}!HGq1Q!|R#5?E&p8*b;+z#}gciO|M6+~( zoB`OJPfj&!^#S`vX{~~9jurSI0_d2I>$oS!j3h;5wwf0Wk=f5hX1Cm+W_G;m4Wt!C z)tOm4*ydRbQiGiM1!u8bWKodFoFyWQCe)+PEY7DGHp`+*ne^dFXRg#UUL@1aWP zEY?r}L>52fWo8{Cjx7FxFi;jFKj#taS)73cC|SJidd^~wYZg;PmKv#x!q=jN^W4#r^b+FsRu_QD7W6eK1g6l!-WC8fx`p^`wc9 z3`*9Kr0}Gl?L*U>-?T85b`OyXLL%}ofy36KP?#xvo!Ycqv|V?IvQ8Q4?cz`wI@UF) z@JPeYMPofQ=#^XDQCcDRg`pmZD2zdTl;EuCP6&>U=?{h)1x$R}^06aJx{j4xA9mI(b<47Nu{9#<(94Z~revfRw zOSB*4vwgKy|8%gfo72Q9X<`YRuv{)J-!0*}3HfYs^E2QFaAqOp)~N+ za2gT4#m75DjO?4QDEN3+UbyV2_{4)hCmcu%iK6x>x)C3D)a*8pB{Y2qkv5g&EDMi~*arLUibO!GCg7{de-OhzZ<1ink>4!^&GJ%;fUaL{zZ}kqdrdMe z)1t350!!C1A}pXJkB$%_e4EXS9S=r#5ESKAxOOL`hBT((|h zdOc;4*LPRV=h+#aws2;*7A<;wiiTby!%8XNF2`mimrL8<$oDsq{O%(8E3Z@UEd6L2 z%7LKg?>}aijezaXqvgnwU#(ero#p`+kTVnko|o)f}Mc44HdP9cOuKxT>D50 zB2ZK%hdm8(s?U>v<3?42zDM=8TY~{Q zu{yBQ$Xd>Dwf%l{Ro4r5Gxwov#lSJdP zlkEdjY3J`zRMhKy^tz%d|1ktwZ1{_k-6mOQUZKPaP+BItEF!F}dmB$v+A+b7VuHzWkrpP{37-05g54k{SYNo|d?bGB2a7p4}Wp79wiUIz$kK1a< z*A|7w!}=T+b9$ul@Zv}7Zb4MNm(zZPx4P&Ql0lD#s8hN`y!rV^R8;SeCdu493t@UD%7QB=oQR2|MNhJaNHZ(syz@dtqVovnwcuwoQmu_(M^o*z^V zu9}Bw$>m)wy|8f<-g_K(ePySQ3T5H(Yn{^e3we5q!ka7#@7Zv*@Fr2^I$ds0L6%V{ zvC^KpTB8LODj{;o_zWtd(Bi00oPv!UA=kC!2Pjt?_faL(y^kG0;j(>NaM7P+(a{T) zTgf_FC;7R-pPw6?W_MCz5ZpbO6Sfv5yr9xbMqdeZGeRreipK~q4SXGsFNh(1NTo-+ zLWI?dXj?_Jtz`ID3W2L;8bdVA4HRwtKAObQ+0OP#60yw`ueM9ux8#*agqbQ4yC)<1 zckG_BhLAJW_AfDpx@VzKV%+DPykZ6n-xIt>|4N8urtY?!HO}y~pl=wKU>@z$AGF*9 zW~0ReosBt!XY$}qRcXPqs?G*q(xPq%I`%$CHc^~Qxg!iLj8_K!R@1}puz(Rq$?xN0 z#{H6oj)m(Al&MnkQP^l9wDgIVo`iv1$l{Gi;p+wHM!e6WEAskQPPa>wqdXwWMjT~> z>k*nCP`x=8U3>_p*FI@s(Y=jlrASJuNJ_)nv*lz6{B+{rz2N z;;UFR(2_)af+oKb)_xPuA(75SBAs6kQs&qi8Ly=@K({oCXOB6jW$4JGm#81-Ha-BX z?Py&U4Vjl&UPqz#JHlUgp9AKt2H@j>>n{_kI#xp%e`V2`(`S+S`hl)`TRrHlAU)Yu z-vH+*n7-Gh`KIg9qYMqj1WZ1LUqMp^Uqiz#56@VR@BPwKvg7HvgdcW5^XK0 zrFh8J>f1UQepp8b^sQJl!s{gVzzVjS?CUPkYbShxvcIVWFO*n?KH)6UZ2rO)f2+3c zCg&KuH>eAjTCR`VJO!}mvhe~oj<*IkRvYc)Mtzi&klm6*JMUm<8P?sQoeeF@lOg)r z-{g0Id@D5C@iN>VxM+{KUG|~n7d@1e(c>{+@na7b{zCdw2`;@;YKqRt5R~xabzx)c z;FWLaP+1j>RMI2&)%aGLvC_tXuu(?0RM7!-g}oIve7JAGE8}6=4FwsSFfV z^%JE)jPbbp7>mUi;Xc3YV4JuX;T-~o4Q*xE$1&{Vfs0;ndce;Qc|R8>nB?8X;70(g0YAR~a(8Q)GY^-uDDq9W!E6GQBCt`EX zU+#Q>Z%tx3c~vYYYtW(NmVGPM7V32%CRZ7MyHmcmpsyEi#yU>l!p1j>4UVtWi(55) zZ#t>kc!6Wu2O+RKcD@%JF=fk_?5DfP1)2nQu>}}uys-E^r3u;6zjMvuhd;OQ`p8x} z%TUq3rmgdO6XwyRKbpMF-x{|+hd{`6LH{Zhk?3^q+nkn0dmD;9fK3G8o7Zk#m0~E6 z#$Zh>Ha6LhRSWIS&=#8Xdkg8dWxH(om4(Z8VOD&O=i0lMRnlX1aMAlR3l5l;R7skLwy8ejEBJdntFNVG?@F%)F2G|yOk}hxK%Wvtj3sPeXJVuwd zLpRM9c$luQg_F2GNY@YSY^qTBYc2#++}>ZlN1PNEq?R4cox6`~LljT9og>hpXcx8PBsxv8EggN3 zuD?Y}sZ*ARu6xWv!FjsLsgMeuOs$=?uQY%oJd$Mt;!&DO3KAwzJ+uOsfG59nT-}>qefel~d zjOGA`<-E@zCgW_*LgC|+>n{Sm?++XD7T@cAj z@?Kuj4M<0!tfNrYQO~;g>zKN3Q`23(bWN4i9S+&Rgxv@q&0ER0tioDJps6qBn(@Nf z;1J^lf$42e-$k3KGY~W?J2d;}$P%>MUy6poH@!)Fg9|0b3%U)*ZYsq7;!fHUgtY$^ z6D$p?v^{9Vo}tlU_igb+h#hOAE&m*eN)pf6LZlz`n{l@M2EYycVAIII`q_wwhALA= zjhz!q#^Qo>|CAQuS%{_FWl3C+7})pJZup)>?Fg>cC`$EskR#8cgG_JQTbOnp`epjJ zPd>WOVEW}7ldT3=0O|x9E}qF2!8^231M=x(MPUH%QR;(qPW6iwIxn1xf)c;RDo3gQ z4q!>=$xb<^6uW75lxp`j#8Z!$+6tl>v@}rKkowot%|M^&>0A)xW0KoMZY3lb2eOJHpY% z{n2eO@r{kauXIjKG-%|Ydwe~O`f0`LGM`qP5`6iPXL+MGd(NxU~3tcMl z>MHwlR#lju1>1ob+o6(tL&@a+#fhhijrN#gJtW_>AK&EMq|M#Hu6jp}2t@cOvfyomwaI@ODS0LxP3r@jDz)sD!2?p0ISx z*^bsLAnc&%ze&ys$0W&eom+4VtA@H>0V#*({m7eMzv?Q5SnVgfWC7O;SWUj|2;r(D z3H?4Zq_ba=nvx&&vL0oJCp@RI2(Uf=MByGZa_iaFP;5LGygQNaN}?KW!=BGgOUzmq zTd#449DVd?fPZ#d{_*`reAY|vUZh){p*7NY9KTeH_l(_DNeO%@L4o_#;MRgS5O~$o ztXC1s*0J7WX>{?z86`w$0EVH*vWGJ|a>X!}bbis~uq&$9{tA|BdHERJbJn!IJxwfZ z6Ud-*LAH;lEV#h-A<&dIOjy#<%9pN}4UC zzOxR~dybwutXq(CO!43iL_v7)9Tq3PK|4HXu6@5l`zqwdU7IT(OaAvL;O{Y}kC1;P z^iA`Ht~B#I^fX?8clMGH^wjhdJ7?$pgS|v+i~S^d3qU5+WwbmjG^CGc#9%R2ddb+x z*8Y@3rR|!BSUFq!dushhv(|DJD`RQp7)wVu(Opx=@~vp^V=T?>J>{_18TOK0>^=UM z_PoT#>S=U$H5;9m)|#J($Ts~cipUvR=L%P1JdP~4M@@(+s zspPWQ7E8|4kP35D} zwj{8pqo?ns{H7OJy^`1xt-cpNo-nRBo*xY5)lwyumLT!9;hRyNw~U!B)-8Jb-QTwC zn0-3>C^r6RUG}49x!nF1bb@!(=&zLu@yPV%N59!>69+GGaj*~pcj?`~nS%y*2c?SB!5^^@ z!@=*L`M)|Cg$?^5dlP$DZ(UZeS-RObBIC9_mGmA6uL2A06rPig6x)o)?b#Hc<{I>! z&{E?eD&taEq}PDPQ#x`x5dL)R3&$?|C~6(zFL*x(an#=62T=FHEAB?u_RkP~jIjlV z>Zp=&y0vTAn)n*=mtxy?5Kck-C0XkrtkJG3cm*v`_!J4g)ICSjNxFCvlLIb}G}dwj z2Cpb{>J{M<^;XY+^~Tb=+IR|pR)3q_D4fbdh#XFh(k-rsMcZE5)Rh{)5>7=5r@kVm zmOzXluA!-Y6)mI2Q}tKsZD;G=92W{Lg+d7eShz1rsdKQvt9V_{udU4Iz z>ux!f8cN1)g@$X!Zl*T$d8RXC=Mh%|XgDJvcFmamY0lU*C^>@T$XHvp=901Er<@r( zbrBgm0G+>`vFXC8T?moGDM!W@!J=En&Te6+IAb>nr#xqDgzn8>WsH~6$DUIYc0DRz zO&G1Bt_f>Lo+&An8b}zHMO2Qxo=ohu9|v)aD+Dss^P(=I-0M3?9>qlEFN(=^0c|Wc z9NrT;xM$J3&C*7{+jVpKeb=AtbvA^4J?^BvuL7@NLlcYB6ivz1-sXV@*QM*9Q% zNO+Ek@A6eC=Oco>yDqlULes;33}p-T_Rc#k-Z$!uho_*`NE(}$?FR{a?VZawwU=wU zYkPZ~-j?18$ve4p4ZB9#Z)2aL@3EUdAKZrK;%VX+n$YyR4^I=0hpTU%boFd5lrCaq zjvf79_Wu(SB>RUa&H9fJk!)2dBeO@0_F^K-X%~@DE*(3MC}i5XHF^eiU2g2ncOEw) zDV|guH}=A1$Fzds_8TxF%$%Snl)0^Mke1EGl;I81&2ob@O$SW4_)*-lTH^OswEFAp zKch!j+P%rm(ht~b-AP-mADmmQAM$9cMF5EVRx1?C{*U-PAh36P+(I#>UK8u&k97Sw z0>O8R(~f)l1tC67Vk^YBQ>?2}<{i)M*HCYo{Y?xLyI_3H(0CfJn~*}Z*@gD6@jFVO z1dN0cP67&)@D-oew_Wjh8Hvg%YajXfi6^jI zeoi4BF8LVi9w$tN!r9biU^BKLI;rDhlhFwabZ|26>+oK0m-1!Yk#a)hR3iSc_l6A=BW5I(DEV`8tn$UCE z3Ozl|)S;=ka9JF#w^w4~!RSWS=w(p*fs6(ZHXd8ljW{xRi8SbQjp#3;(GzB!(Rct6 zbs1{&X%~ih>Pf|GG@4M`aNPdy|7A3u5k?c?Gge6K!sQ6)|{PNmH3 z-yl7bckGG!gq8#?CL`B8&ytC|nv@ztRr(|Xt=9&$8Ip%p8X&L5J&82aiIX5Fab#flQe_=6Xnp5&D2Fv1XLw3F; zC*NYo%b1^)lIb*(YEH|@f(bgtXXob{GP0a%d4|OqmUM#!{ikJQnzK?CnhhygsmvHM zvr|$HmfVc_^Ub-G_U>aQCK^ z3`@K@C3T5LSIGIo3=3bHW=x%u6c=xdb8^#TBtph<7_%&>k*xU!m%1@5%uY3P!ci(n z^Af}2ltt#W?A(Qh)D%m~U~OuSIg46RDH!^qz6NPo`3vWobEl@c7@C3l>Pr0E}c^JH5Ufv>Mp?}}hs|^`>hOBH0up4He#6C_!LA0b0OQ1i;TF2 zP54D28;seWj@d)16zaiR_~0-PGhh6UHC)Fp57JRFN>ELU=8FKPbZ;bna9*}Hcz()4 zZE$MtBJEl&0qs6J<=t6 zbkcW{=%lYz(MdMwq;E^oNnetr6T2fm+kw)F-7KFSKxrEz7!^E+69Jk5Tixyv4{}C|vqO-<1zEH66wElydwk0wzv(?2sx!M__|j z3px(85i|}o1e0kIXc*`npeE3jpvj=Su^A}_HN4)`Q~~-mp7M@@{s`ItI{w|Jrcg}8 zhYvM1MT2evoe3IW)6`S|`Y+J+ptpfmf*u1s3fl4mw7(3~=~Fzvgkt`I(qhmP)BrjN zG#d0e&}7iDpjObypyi-5L90OLf!2a%fzl$f1k?b!0yG-*KG0;)M?kHh&w!SL?gXs@ zeG9Y}^g~cud`^HGXc77h?Lh~CCWFodwSs1WmV=gqR)Ge6j`pDR_hM+#N&q#0(qCwa z2CV>12Hgj01w98^4!ZUj+Jl}1tp!c^0_|JFKTrcG{SA?5&~9I%J!reH&>pl0XgTNz z&??ZGptYdeK!dPI4y{EVK^K6=ftG>hfbIq@13eB}0ovy4rluOuFwh22D`*Jnf&NNe z80az3IM7DWM&zr-H^?&<*$$vlpnXASf{p?$0KE}(J!m{=CFp$6qo8+yHiF&*8j8hv z4QLeT)1Wg!t3V4t-vM0@dIYo*^c3h(Q2%ey9<(QDC>GeGqg#=wZ-G(2gh29yA%W5%hV` zP`ZhHkM^K_L1%&v2F(E-3R(;rU`KpGp9DP$I=&8h#f|5C(Egwg*CVc=6MsOzpeI1f zL0A3Q)N}y!6leqJ;M2$lZc+)LVW8QdaiA}N=763CEd!;$^jiVi9kd2C7PJ9$6=(=< zaF2n8fxZnI2ip24vcTF zU6m@(BcQdQZGT2P%;zqk2GD+>(V#=mH#O0}tTz_l#VrF}4q5?P3R(lY0W=izpANXq zhu_k8&95ND@A7u7g3541?gO+t&ZGCDEoxHh5Hh|)=!D?5i-WA%4c$f#7}BQ~H6)!F z5+81AA~kJHhme*2h{fSdyIfO-}nUkRODcYe~=lRHr-@^4*YkRof>x~ z9$tn#6!O7pKN+GAvVR!zevtQ7<;hO@Imie3kaxn~EW(F;DCAL)PgU*vPv8!y{{+a> zA@?>u3*>h~-cN0>)cabbA8KmCmd|kzJ_`6a;ArVMc>J_C z1@38l)XoC=^^jwjj)U;kzz4bYLw;@s-UE0P)-lIeP**Jm`irCjCO!I-V1plSYMP6C ze87*m8|vdG-Nefr<30y_=@m^)Z$jUpL$P^9j2S5J3%cV5?zhc#eAEx!ug<^N)N~VW z2m#M2aie}Fw0HC~8}0kO(bO~@>yJx6u`L{a)3{eaZ`vN$_);7n13ngb1+E?K{r|&l zNxlp64GcSpi6K<@3nGz#)Ytef8YpAGr9KIC^m z{yyYLmvemaA~ZaH$lvlI-v#+DANG$y{*({-1<2Px-dXKmEc?7pb;mQxJwD{4Aiu+h z{n?Pu_aVOn@_5L-jvw+^AM#z0NBgjU4Dx|K7d!e|RN(CY4#*39$RC6JK_B*a zLB8LI{21iteb~PMc_-{Ey!qE1>stimQ(VRu%LAbCjeN{2H}?<#}r;!CXW6oz+&3GRAgt4k=)leJjDXG8B6@Bt$O zoIa6F`5a39X2RZm(EF=?*FtY5-bMaZzwHo!70}~;4`Gv~)~ovb3wy87yG{7u&{66s z01swIA@{al?*sXdKIAcwx4=77Z}~`-?Gbio|ML9=#bpKLU&4L|_jMt_bzOKCdi&6i zFFl$+hoScj-pxki+S7Q?L4FW&Z~k_|hH*RO-uxX3d52e#$Gz=bu_R3W)re z4ZS;IXO!v(^m3s^@;e}Zv&!@Si<;oCw|D4-XSF4PkG9bEw7?aR&WVAC{j^8?0_**> zO22N{!TAfpCjW(>;Q`@;7N`BU4%EJF*?a9kt*q5qKkGoPv~?hu$65zM@SoPW-F(*i z75^UwYR|Rn{pmpMvvz0w-WsTV(jgGci4Hv=cq|x7?*zZ%zip7Vp=0k2gS2-#p7mQb zNITFe5X>i?dO%Rx8A`i4zvBPPAnm@;-ro+=c7>kxJ2XgpwOb&V1KoN+@MpI)Jp6a> zz4aRHh3;ql)?TAM+anOnYdwJPyt4PF*J$5giTnG#EcVq92Ig9al`$w8g_Kx@kN8PWqL0)t+zB3Cz1KCO_6qvjv{>EAEB|F`M7J zUA2m!kNq}x)$VKau|K%w?JxLMcGZf51Ht?!xCiu(23NE=*HwG$(l7mLyJ{;sCxa>K zvH+4_yL{pYduKueVf*f`==wl6(SHZ>BO~x>KW)FCK!UCf8KcdR*B!dWYE#{=sTTe@ z{)xap5%?zp|3u)Q2>cU)eoVf z`sM$xXnB)3{%TN-7cNfkuk8FI|KCM`K7P{=^_npMAo`H&zdz{J2OZz_7gXnecH_0H zUFB`v_-<}|A2&Wi@^~f6M}p+>Dx8n?>4M@FF(1d@6_mfbflGs&mzN8ezw=9%coD%z zn3U7|4La~jm5-nQY|5sK201W1;_^|}OVE~*@84Qn@Mj{pTqphGcQxSU*OvG@%|f#$ z6Fna}c-KV-y(g!GUeVCOpD}^C{yCEX(F4oUY*dPLF_lAf2e3&I%NP0rj^OCmAlKo5CPtswMj+b3B(JNSY?;B1u7MA8$Io|m*`uIyjZev%H8biAZ9Bu$g_|6}b-;Hs*&|IfYy90V_TA!Sl= zKv5Kwoab3Fy&}%y00PQY1Y{Ib!PzV|EX|UaT55Bdm1d(&YG!3+^YEIdU-fLVUgQ6} z*4}5|%O(52_wn)JoU^`rt-bbId+q6rw^AL~tK$xJJfMz;)$zDGzNU_!s^fWe3@TIQ zt78Xs?4^#Q)N!gh&R54ubzHBGJJj)jIv!TX(;$zw_a(NCM0FzWvDSZ zfNxSbLfL;P06!TZ|GdIYmHb-@M=AV`!qy_oyhk!RD}I{7T@}t&m>*n0TBX9>75`R+ z)!b`D9F&Yy#UG-uwMd(#Fy8=#%r=EPDES8!j#T)x!j`_@6yBrw_4i6*io)M1tmZ;v z)}e;{Lkhc<{L>20R=DkblK4*HsQV>h$#+oL@@JUB{6Hr}vlZqCIDsEhc(u|u-~mZk z{+B9j`M*=)6eWLL;Y5YM3c&8el40@tC_F*QZ&bLa!jCCzmG`m2mOsW3DQNYV&;Z31o~iI9Dt~bRUK=34H2~kBa0`|H-T-_uK>n2g{GP(iRsJ6WaFYim zgCDd4*-2r!^f!#L3O7;tCo63Am(>b4Q~YZc9;)zb0rHNcl40dfQ#eD(uU2@V!tx{f zhGF490^~gpNkJ?BjS5@x?*!o3ho!tn=`T=tyuybSo~W?-h$O7`)>YvU#qXuCb&@qe z;WLUK_NXNGDtuP}_V8y)48!8f&z9h!Y@zZUlSd0rdQ#$D@?d^w=F<^Ux55e0rJg` zOZ`^=j1Rya75-M)8+}3&lNByhI7{IZ3S06Io@^)|_N>H~`~roCsQkAoY>hAP1>ne2 zQqZ!umBJA!e~QBVpas$fJSQ0z9(!8iA@X2sQrObBU13Y#0fh%B`M|^5cjCbrPBg_& z`Jgv8#naI7xQ8FqP}Ejdo@aD5iV;Y=%LPGEKNk{?EoezKj)7rBuRyH`$8BS=1aWj; zPj5flZ<|D-cdR7#td=DD`(mR1(GH@9lTB6#0SV$)(Zhx-2gg?f{4S_45gfJ_ z`zE%_0fK|KL!Ss`U<+q5wtydh5)dss?znWm5zrZkV*0IX8??iVZEMt{tzZ7#9V~*7V z`xTW6bF3=u`|}j$SXJ9M&sLaYwcK7?s4&N>#y+-8Vk0OYJx++t_CCQ@thOqnxnI?D zwMEES-N-=2>SpB*$7-L-!?D`00LSV8=TWh`TLppp)jbMutPU!`vAS0Qj@5mt9PU^5 zE5NaOKmm@`VgFb?s5l&}Qwngbo@1b5by@+A)e8!6tX@=kI96x;W3|oRV-cP=)Un!b z&&CK!SjOr$dp_nx#vH3V?M@80j5$^h+ZT;im}B+0y>^|#9IL17hY%Z<=UAPOK3rm@Wy+Se>)~8#6Owj@9?}(o%&vRyM~3tTC9+ zv2r?2W4>d|u`(U2rzp&^3U$!4+Qc`47GZQ1BE~^q1dy?cQ$};Fk{mP!CdgQIW}sq~ zs@&mNbyImbR^1igSfz0u6{~&>)EL-b0glxG1vpj%72sG6R^@QN8lnKlYN!Gnt6>hm zF>r+9aIB^%z_FUjK*egB0vxLu3UI7usyrO4EdN-wa&*Ni@LnCOHjb;~B$l!2>FADy z6Y)bhR(%|2y$W-zMmt`{7|DE&)mTRp^h?GZE03cimK2ORR+)}1nBNE+LD!K$Lcq(w!t!1e=u;%er0$1tpgnjaIBmPaIAuy6l@hM7XuZma0NJ45ejgu znkm4siezo7UqvavvARS7j#YD~U#y}Phhx=I0ghD?0~M=Iio>x=RveC17scUNb#?mn ztM43>lkhH%j@6Hj-MuB2u?lf6M{I~MV-@D~%v6|T73UmxnZg{aR?fBg3UjR5IA6nT z#Q8Z^iOx<#BsPNTmr<-Pb$*W4B4gE48O^a8#?>}N#%ctENExeiM{j5 zR^vF2iq&Kl1RevYD8R9rssP7ongSfF8LAxaS2GphSY;`|v6|%{t2v6pu_{r3W3_~V zidCrs9IJ8#I93%Z567y~KURI58C?wHc^#|%&N=-gma&@PygOZC?pK-4=qQCbRyodL zxb8>!LpWCX&iip0fHB9)>+CRBVUE>e=Nzp0iEji|U^En>S1G_U=Q`3ZlmBuJ5n1gjGgW6yYRu2Xp zf;m{dR6!i9-U@KA`Y6D`>KjBIOUM(f{>lUn)>tLR!5XIkpJ0twVjQdq3UIJ86yRWG z22sZn@&v1SP`@kjLW2%gOwg66I>ItoU4k+#%)v?xdKKM)`5dglLGPktGUi|n3;GEQ zLB<@ckwJw673N@#3HlC=f%rzyJS^6Qm=!bRjMqG*J=egUTYNK zc&+u1*Lr0I$7{P1<9J=C0LN>m661K?pa92fmjWEGfB45MC#VB16uhnDl^3)I3l73E zUR6OUn-u1FEerY-Rn2^k*QTI#=q!vmUYmm|$0*G4x;p4doRl%2<8@8Y`@dqf@@|{V(N0+kCiA&qLG9gjzR5-=QxN9GT{-9 zJ8)>0gv%Rot#e?O`*baAv-LfW^Zdy1xOiY2ejVljYI>qI(xQms9oV?mVDoHfrPzZS zvM-rXlyBIkU3P_HH(!V~n{DoExY|mNisrpDffsa0xA1S>ftM`AC`E>d=FL-qH$5`R z!ZWbWubmvkQPN@H@5z=Gn;VE?W z`F(rH7y4VwJy#FQbC}J)D-UuD3B;c|>>7{bRNbk@5E^0rj`Y&!c`-7M31ek2dA+(XOQymNDx% zNXf$^D%Wr~31yGQ!7=60A1mZ+CHBM1D4Mr;XL;nBsMt?8WGj!h;F=%h5z3>x##*@)T+7mXad?l zb#qY#FQbU!o#m0yQL%S4WGj#8i73vkJo*t=?EGW271{kgIx_-aOX3=k{pypx7M32B zg6|)r-V-e>J$ep#IX^t2at-$j7&*|7&iOo=F-5M_MLN==XwA+$%cH{x0ws!qhHT~0 zM#P-i%A=gNmIpFM|H8QF@6kcD(h9#AeKF0#(xd+4EDvOi_V=)`^e788#`)n9pI^AU z(zs&l`y@_2RjZ3Bme*fI9MYob$`0==k8XtuN)-JXvXw_G<}0@H=$`JD2hyXE#TJ$$ z!wYlpbv8ebT01N(J!(GP@<4iYc_#}?k6c)kaDI41W*P2xTC+#jVn|UQl`WB1Da6-g zGL4G7vpgC$QnAC3#gDB#+70U{kJXQE()~tylu^*oqmCMkidhS7D=}~O9<$?65 z>of~Xk3Q?BXjiW)w$B~}+J|Z5Akha)d&PC87Q-_K)q>Qstqezk8j`ADvFJf$r zA06+(+pb`XJV-C39HFEqKAtQa-)*wut_EkLkGmN2Yy70)ofUTvI0t;(uNQzjvGC$G~}7b6Xc;Oo*SGJ{_DlkopmE$o8maT<`_~cK(lu1(_*+1zUiSW+k+00&dY9 z4A-I=rE z{391FinXTJl~7_Cylt>1Q?FulBck z32K*d5#_&ZA#Wqp;ysx21)0=8(CY8Us=5{^CK#J*sGrrT z=nMW<@5LZ@0juqXa}!E%x4`U$y8ia!to{sZRdFqJ>?V^&2U`6TmZIE3j)46riH!HN z`X{SyRSUTn6?p-x9forVvb&7|Z1pXWyokC!g0+np3msFixh4f#orgBSRxbv-j6`Pm zS)GoF&A+Z+3%Q`xPQ!VgthOU~sO#BnF3RfT8(_5o9iiAiSL$jp8uOd4fz@6lnFzU}g22VE>aumiSqH zs!Kzw@4~w90xcxiaLz+^_r^T7`q_)KI=&yQE`*LMY_6(6t9ykitG9x^okUjnS?wCy z(CYr;f>xV`GaA|5kCw94HSI2{t`8w%qAhgLg(BCQK&$DaOWdwUf_)i@T;XT+I`mcl zc71=+1+5M-oG*~oyT-89J=Baa}I}dohXJOrz3bwjw$BVMMCFUwY7Xlt8lO7MWIwoIP{R-G`lE^cDRzEbP zq1A)1Jh*_>F2gws+1>A7!B#(YaaNzA)%bkqSc1*H0jt9eryJSb;W*<%Z>+{>a}n*j42w$<4;>w`xn2*nx+hK@xLpqhdnAdx>u2@G z=!SJ&I{1QCM;OkNWOXGL0kAr?(?wZ52}=j@GR&bnF0PLPtxm_(@Z5ccS03)j41QFsz*bsE3A>Q@mWEn;rx=UF1v!Qo(O+0qFuk639EmAIrK$YS1?R!aNc;(nj2f7 zn3mXFP5rEX($>)GMJX4o>nOvy2PL?7hq2YcT`tP%F<8xr+hGo!_`4zltsZ5~jn9Mq z3W>z{S)Gj9^KaKnCtlF%OAO~!WOvgm!;Yx_w+2`pl}maIK1Yu#(C6q;Mfw~)s*K3^ zCb_8Bt&3|_L3z-#5Syztn?;v|qIT0S8u-kL+IMDjxx_;FV82Ju2~y$;EL`pP3p(vcd~GS{qk4ccL&uqL*w0v%$b8Z30Hy;DOhh&nG-$?mo#N24KABtjCD%(LL14UnO0MfP%$fB}z-`5OG6 zNrs)2dRS(e_zC{7Of%RMkIkQ^aGioM-y#Jev8t_Ncs+VZy!&zJ$c5J*k=;$NM1b_ z^dw2&wI1|zqMga7)`FfP>7`Mi=MWu~eAEGYuB2Z|2c1WBaPrIDK<7)kY#iu?M4QRa zQ*&7)>48&0mk=G2{46#9C6fNW0CXkMO_IN+7EmSW_pt7>FDE)Qxs2>wA?X_~0lk{& zu;i7v*I-{G>5Wd%8;Ne3yo0*w6_UOw1oRf7UCAS9NZ2aruW(JEYC6_7L4H`B5}*`(8;u?gD*)Xm|2Mlzxk(Z5VLvcM=_${8bas zcS-u}K+uPXj!GU$^?aYCzoypqAkmj3=VM&3AC>e8FX+dJZk{|aAN1przQPXr>CI>| zM)D67qgRL)$;+wLy+O1sc@8zOcZqf+^HBF8(Pr|K6tB;Sj!1s4HR!L1PDuV_F6eKG z9+EtG1nBcb*LHb}+T^c98=`9#1;Y@GY+aYp2;`K=(RD-yP!oyFu8(7RXAhSsqH8P$ zM0=D(30*g0XtKvhG^A?~b?a6V)u#M92dJGyxK@*rG7LCLVVjYXOt`DU4kP7h3@G+A zg-s)+Gg;AF;Rqw;I&y1(!U?!s{T+tNxD>j77M+jkjcZFcaHHo80@;b~e7f&ijNzbV zm+5G~vA@s5qTn9B#2?$U4d_EeJ7Sxm!L@vVXfyU@c-rzoqQhe6pfR<4nCOVu&f%aR zBRVQ}8PvCYg6QZt(%-Vb*nqaS8JnvQ4WIE-ZAcxKHQpNkz&U7fqsSJc^;uFfF2O_~ zo(Ahh%_hA@d{?q>;_0Jv z5Ekvh?o1*w^FKR-yYMT@JP4`j0h#Zf0CsWPNh)&=*b97_M?hiA>YrhqxE!hL12Rv> zT-#C~&X)08@ha z5vc}h(ckAMi@~nnjXunoqrq-PBGTtCDXa%h^hM@0qz-JDxv47x>^n+^s>~C0MzkeV zN2@^(qAfXFAOP;qVMbExl(v|YVxM1wSWFQ}HewGVz4c5=He*|%OSGO#agK<+6;WuN zM|5=T=yK3rl23>uJ+1qSV_+Po;zn@8xgE`^^^hg)Rl|7?oG*ww7Tl-|7U{SMBBNZZ z;0hE8ff9qUv53*sjrC6JajDC(%tNAx(;OrE2KW%yo1Q{(7C@)_IjDOCVb4Kh@Fdes$ax;!(9Am_Ms98d)rji}A$PUT!h*e0wO0(wqSd&FPl5f$h0%EnU zz##6(s>g699tP{UW|O%_>vx-jJ@4QGu-`($Cz{Qb9RC@y3%&wjB#9R}txs zzX|=@QQWl*l?N>1!0A9-HkvJyB9&Wc!A&BAz)sg9Y+*btUK}gF!$>2~f50vz5h^2U z85cxr7suLNXs#@>7VND7BD5@VT-hBBl?%EB>_a5Nwn!~!$(g!4rzkC_z&>MXG2$Pd z4(@g1D^!#G9Gq`7x9MKA9!LEn9aTlx5JOoBSYRV?PKud2XfI!fJ&m8O}H))Hd- z&L|sZ4n_X`VUJC13*D{ z^qZb%p~-y}4ZrSTV^?=JoGE#bBYgvQlKxb^6Sw8H;r|Xng-onH?|tLd7a4az9be_NA;gJpkZA{<@)Nn!RflL>!>m!`RR+O zt>0oP!39N<9&E1L*(`awUW8f0XI9j{qZq;h%(70`9lBa^NB3be@be*T;LjIlU<_1o zk@rK-LuBAVKLe}N8X9;l+QtP8Y@!Xst+`oH+8#Q=6R^A$SO*eg_#Q=lgc zo9nQjfvR8jR2eqUYQQMQ(2i42&6a0uysjTg+&29W3p2?KGG>j(S!vtaOZ+iPT(sjRB6C zN)4kIHJO+!3PG>mT7b+ZXM5)q78)`6q}J$g8T4Q(CiO9k#oa(hvALdv-BI*}uOV60 z;#nlWr&-j$nC~yNPJ9D_KNaH9=2*GVep1*)WYnzUnf3Y?^J z=j{vjh=wA4{ul?5-P@}SV=xL4bkfDo1{r;3lKlrZVaDdceJOERZJ!E^N-@WFz*)|- zjW|3H^{K+#9dmLUYJ~ILsX0yeVb+Ox;WzYMHsu&NY$<|4O5D+7@at!>DX(BX8rv32 z?bzo?gAw~8*7dPxh&E#ru+oivm1sN%g^0wyMYMblD)ygbK|*XM_OTxm-9EMqcEo-` z&srtL{tC(1Z_c7xy2Mdgu>-`IA-Mj7&Gj)=mQ3}CIY?P;rTRT4MMX(S%B8>YNm#-_?`huJK4`_fFcj_L+ZFCTXb=J(iL%~7x9i12_j z*~h)93%IxUL!EJ)3c;zexXS4~#4Gk-R}5aPU@O?$EfFKWJ{#OeJ6w(*z=aZV7dZE6 zZqsfZz(zcSl?|^0p{7so9H;w96VhN8-}08#O6B3k>}KW zF&!znR%+CFAFEuHA$g-_Q7?$1a^*5eYF#IGLg22y5MtZoU&CM#y!i#p)?BgAK=3&d z{>@j;_2O-$e5zI0aAssk?fb=fBnvbswmHi5vF;VkkQ}dBE+6Yr(FMu9H7m-;dQOZ+ za;9d*`dDv@c}QNYSqVPYXJQ4CH)>V~AL~c46UjGgRu^J*KDnkN2?zJB*R@h>HQvH zpS8V|s|NbV!FoosI~5m!{ie+x2JLSl`4eK%xD-XhoRM@-9QgmVJ+WR5sDFU(z`U-s z({LO7yX}6g<9NJn306DJ?nKXc1Uv2V5Cj51~6qkSn2+6N`!9MEf`l)8ZJC zpCcCAL8GCOG#K^=C)*#uyv7s5$KZddvnPEr4(#ss6aaKd>MP?rp!U zRb*VCW1UY;RYNAFP5eVklVSEVgvA-wskyXitbXj9J9unZa<9eDr9{G;wM4 zG`zC_JSW}6i>6ni;@Z>eK+YAENEaELbVbKm57?g`G9IwFHQ-)AH=Q|0x9R>ani5ZG zZ8C+N(vG&rvTd3mugtzP=K{=PASbRiIfCjZqVMQ6;LK;xtmBho0agkTl8!+Do9hv7 z!<@VU{U1r)tYmgi`Y7{Vhp*p&IaLchiOh|pFpMmK#Bwclo%b)KFlcOs#7-@Bk`4I* zlYg7@LfnS*`z@ZlwvzM~rv5g+i=}7}9LeXwe}!aTpsY!~u%K#Vvt@Nt?61K3&c~)m zwh6ZN!GWq$grX*zW8)f-Uh+`TCeC&MLjm<|kqUl4EyETjm1aQC9NR0Ka08BHCV`); zWymn4jQVz)BHL12X{C6Hc zVn>m6yfX$)s#t8axyH7CgA)7*LiD&V>+uszx)rO4Hn-an(I|Ks5r$f5flXEbk7Y@Z zBV(JVZNpQPOgHc+kPI2+i?kml^Nr6&zOQZc(QDRSfIMY7pOpC;9k@+@@upBRSAkD2 zU`pLomqyYFYQ>j{4Ae2}ISBs4T88xuIyN6N|Fn0*1tePGze;Rw#dt}B9@57P7`Olx z(e~1Pu)d8ppw@nnIW~iq30{CxQGJZ|CZL&Cw36Q2B@g4ZTYZ*45XPvg`qIp{cfLdmA zR1^*KF8+pbJdMX~_r8QuI0iky>8H6o?6;jDimYLO5?C{QY-+b{Cks0Q$+=6xT5YkT zsOLp-s5y*n=ZP7e@RO_H*OLraycI_09jGHG<#4~b1Xj9-)p>9t*x;=j|I2^pg90x9 zeGQf0liIHqqtfH$<-c%5i7)?!LRm9xuJ4FzUHW^WL#7n`6_(6dEkl%i!>7SzL_Af0Hw<;(iHRP5R!{glKf^i)`1vZz zc^jMSXForOV>V(xzX#{v#QnqHPdAF7S7m*EQs#z!_5y#XCBuHQ3}5KB{G16sy{*l9 z*iV+ZfSxkfSzX)V=KPn^gkIajT$e2~iwC>PD?-sh6`#JKxv!Np^P=nmmT0ep{U(|}naREk@ zBUcSJc7$5JtM@iAiTVpiY}ye#mG&k%5(*`F+H%sQhK~G~?*;vk08`Gx3;{i^c&g{} zX0SlLIo2ab4bw4TwMqu>pl&HVi>7@6tD_C)bYyqmu$o){ z%K=vZm*dfom`}N&`Os5{&DDd=lD8Dz!bHbhHY;l1{0N0r>mTQU&$l7h{n&i1|Lv>) zlhz+&I9wm{r{yS%UsH|ROso6&DGD(kpasZI&!R?E1`+9wg6L+R%3sB5JUXPW8>_|GHnVVQeIKu5W525feUu7y#I9}w z`Z1!Nv7b@;Q*sS{6nR6QT?p$U;z&=(Xt5XSZ^7m&L8>8Br->s-dD2Ri6%}`uGRzV$ zBl%s6CD+OE-}L}%;hBvpGCzWCOjkN(?$&9Q5LxEHUPOV_UbD#>f0>O_F{g<>;E&NV zd_AAtjDHq|glzTBQ&-coAv2%kD#`r#o>a>Arz7z|FtAt&&RR>05$~)9ch~$D>U^~x zoSS@k%gMjJ4>VOyJOs`$A9q0&xCgTOD()NLyyxRyxfa|zwt!1kiu2(7rny7t)#s2` zt8u~@im1t&Hk|3Gr2zvIaX!=n9h_GGN#tD9{eo_c^1XsVNE|^~K1D~D7tWd<6K@15 zBW8nDV6o+$prm-5el>kbjOd_bR)K$&mZ2*hhLm|#ywqFC><9m#mZ6f3&UEV2^at?( zfNCj&|M8A>HvL&Y=v)%flh(_;4!j)EVyE;WK^zVkWNp%5VR) zz*!D8b`gg(USG&XhWhr;Lr7(IzlLn}C4$cRXGgpia{s=FJ-Rkad-MiQm8egO zugPShPa&La6Oi)C~_MX7TH)r$JXtAVEH`IP-2OxNX((U-Aj?TH+DuGF@o~M5+qkyETel9 zG>f1Gf;5S%u)EG;N#lBuaX|~W^z#|VqW6*5KvK?z8BQ{J*yy3-jnp5}YfM*{XCX0X zHf;MBu(FLHOQVL<)%NFO@nAYt{#FRwKpGOsxMVV} zds}qzu&)H=758BGki}Q=TY$`Av)_&L8N#A(LF`LQR2svV?$e%M2Kl@%Fs1VaTw8>l z<(t6YOUP#~ng^M*Dh#<{CI3QKQ$9Lav?s(yHV~C}_|oW#TG-OBF}y2zC(GwUmcBwR zRg46&VBREFRc4A)^##KvgRrY!m( z#GVQeJ&yq;?Bu;@Ps#uni+%*LZvsT=3ngJMgklondCV3O&Y~{VcN8|R0VC~ol6v*J zRaz>7rFuYOuqCCc^j@qq!`{AYo|<575zSb1F2wRJQKM;lYI^^Q?5>(#wdNR3>O9<9 z2K0vmPU_{+9hzg@7{reu(z9@3Couhfjyy>>p-VJLvVDwT^L&0BiKj`~8`TEpMw+IZ zbg>npW3YQ4XqMsJ2RdvHf;2V3+@w_CMZEV zPYe)}eZX+WW5ykDWgF}UMWd|QlW`dv(jzYQqJuRNzksdc(_{wH#Tx9kU~?_G7G;vR zM$2c=JF+0(^72;53Bm}YM*~hntob{LW%EVW4V<}*F0S-)Vb{P z66wfp7^YEHOO@-;-{-QaTp?%{$dv$TQvZ3QTxT1WMbH@e(-_Wm2kMYLz@nsK+h~x> zCO`i;>eIosKyhQSdj-dN;dipOI##&9-e={_l8UQk@cRUsmUB1P> z)hrT;=s30pGF`eo8irF0R9^aHeWCrXXzakLBI!dLL5E9vVHW5pl|C1AjHK719mceh^i2~%x0AHJDd;3gk4OUDRnqB1 zr%8ItV$i)MeK-a507*ZF(I93h)9KC7Fk^qD2l+*D%=+qq(_}$xJG3Gn3CC&gM2I*P{`e*AW>#BokykwWstW zs8n^) zGMTzSVh^I7UG9XJ9l8^3M06QF9w3c@NbXPtz+EpQc_SKg2hJgyt?P_(F^93jahd=4F3kig2pBoKirF&u6T55mz01=<`* zNG1)*chP-F$7D1G;b@O0WpgBtL4xC<)wJJFjm&WeDmudP30h8qV?3gL%y2x6imern z^_VegZH`^jad0?(LuhMFM;{js5so)va7b``yA%iHI0#j>$dXDqk!LaHpju?QC5eud z(xABZTGnZ57 zt#OY@pR4nj^wzk?q>sRPOnPhFW74P9JSM$0?lI|uWgc?~@98sO9+Tc0_n5aN(Ed)| z(8){( zNuRCpnDo}T$DG!I_Vm`c$D~iJcuab0++)&*OFSmMHSRI#b08j*-WvCq^pOpZNpFpN zO!{<%$NZA_^g#%Zxrg`knFWtYZ;g9Q`gnoIyp{L#cCyFZh+uil-i3xS$z#%6Z5}fh z9nfP^H}sfY5xq>6POlGTnzRncG^syinzU|!+e}L?(H?#=#$(d#;xXy97LQ2}j(bdc zg~Vghlj9zfUd({Q187fg6L?H|WFHkYi1zf1m&c?rJ(Ks7se94$$Wyj>(H_C0Ct^J& z4W}NHPJR(&v{6`(eWpp*(K1bH2$?25o0MtNwc|{aRvDQltuHc7dR!^fq$kfaO8uIWGWsN7A_L)3* zcvvRWyp7Z4o-UYqOuF3WF=@?=27-lx$E5qu9+Pg~qJi_CZX0?`x)CT(SqfECY^6(Dw;;=Op`|aOp_*^Op~S)57)EDq|2*lsxxTc0{dz2 zq4LhyBZ|pYx~OIUXemaHhy#a;a4@RSV;viY(dZ(tVA}T$A@*%w5Zf6_?3+u#o<1yN zl3|-Z6nnelU{fSJwx^&@9XDVfWW+o@3!-8Moo||UF|$uKhTGGEI=;wyY8l3-^>hLk zVb7|7qY)b@q|@zLpE>|GJqxq4?O9);uSHx*oC15+g4qC9y$DW;JU^9s=wP)>x z{}ETe3Q%j$3a$mHdmCV*J?k{;Gh!QwU2V@gjNTV<4S}8Zte=|z?4Ue*0M-CpM|p0w zXFUZ&Bd(`H58AVCUj$H3;C_47pH%2S2s~)dYEKGoB=CqmYa{wg#9ji&>{-J+0Q(3$ z4MP(E?z#qbcha8q{BVGKs4rX`YZ9B)JA}njTPU&F&joQp5Jpda25bXlqyB-0D=*~D8HV-) zy`QF|+#89CBShU5GQ+iyxxtb%`h6Jz?&D(7NIZ_KQ_*SY zl4qt#*IzLo@BkobiZBL%zO<)d2{RV5c}%h)llLC;d!#sJ0$r!crqfco9+?BVa2)5E z1N-4s8O}#NCDW|UCLJW4X|7|MF41I~TbZVPrb)5#n7cve-iMlMb+^HP)Hmr*)aO2h zvS4JDyYT)k;59f#z=pP`2I5wy6#U!z9y2_y&pC^eFEP5hQ~ zW8Gy)4*ZE~NQa}dUDa5+HIf5=uo}`2qaton(ugVlA^ABZA8MSu07KW4jdfQcIq=7< zp`<<5f^RA5D4*`LC@1iztwnv_N;jUA5B!O1q-RIsxuL+Hx)$~M^ktY9Hd|LL?uKKV zpD{!d3-)!uINid=pMY@ES5*pHfKr{Jc``F}>(Lg&ynz zf8|@$XCudA+NjEifLVr<^c2wz5?d{(P1x8ZA`BQ8XYN+_f3q>N?n>S8qd0di5F z47ncuvW0ZBCh&*JMg1hm&>0B3Oa%0n&|{uK3(FW~8&0})#JdNrsbNn<=L3 zQMGt}^ImD{6nVhtR|w7uY+h1A%KP#W%IWPIhr_lRcrUgF${h|$l5M}3vajie$GDYp z%$EEo>YoMYEo@#=LdtjW5z6Uxk_w0IOW;4S`IMI!!4(clGMw}>Nik(l?}cV^NGkPN z-T^DI-q^gPgp_~J$84jN-d|YjJfw2CWk&cq9n$&OxDgP6T!xe0Unr%w1-3f_e_&qJ zUkRz5Ru*aklqH`Y^*AVOw}R0MDhz03G(R2@rc0_m01br`G>RT|$1NxAppPLW* zKK}jS1-Y1H&HE+2iew%TNtCx7fi(|{u0%gq4El(asm63-KFGA;q(@ks^h}A9o*!}2 z^CQJ%tEZ1)w7pMy{hfAx3UnR7<|V7Cy6)v;w)as!&hkFX$LZcz`8e780UtBGU-QxM z{+o}cmmY|))s6EuukB{3q&DAVYUX8f5U8UqiV3Ja*YC#|)VP?I0V{ z2dx}L*z0!IRJ@qMw_P4!e05Dl7AAV!hIxqb#+u3sr3V8s|5d#?9s+yB<19e;gq>uD zlg>7{OHZbAq8E|Gr+UIDr<*trDJ=**|B3ol;g1y+(LRl7SU4`CF<`5=OJuf(n0ZJ*_Y8DOO-69Wd0NN??QxbyK7mG zN#{1@iP-H_(kWUx6!S$iHm)2ZxHVAza(c$)xXO^IGYo*t)PM|2%M3gLLse<3%QnjC z>6fn>WvoD^t$`VH>9H6(`L@;N8RhgyjQg-G%2(pu$aFF=BT9T#mxyZzhk0icw6mpM~MH9HS)t`D*F~a9;Px78vDpO1MSI z^|48LQGXsX_oAP2QzxhGb#JUJ35mdo)+9=|*PU5eNrN~2MX7Ad!*i)#RunHX!l%%Q zovm)}%I#y(Gms<1e(Yr_UXzR<(%%kwFjj(HD{?ELdL9)v=}N$0JT={hhK&!fu-!+98VIi1@cR|@B~V7(ZLzXa<` zlgsY3ON*%ye?4v5FhQ>{X=x-HE8QavH)Apo*F|(Gls-vf=YuZ9|n*H$+uj zl~i|ZrLkIcLylTOAF~NxMpq2&b+yY@i)>Ei0%~Oedn#9pt2y;3RuSQ=|3n4Y>yA~e zC|g_#I3b7Nxk?qO)l?vbMwPf)g$iv89bFv5J`MAb@?nGJL#?L2~LGvM8svNT<$KuNKq~Rf%;zr!qK|ow}x>Q`ZDI zb&V|XR;$EoWQn&br)r@nc#SUN2A@+An?9`32h&@&j zH_9URkW&ZQP>$4I>D2ph>V2P6`+QDC*vJlc>Oe!M4g@%LK$f`ED)E3Uai?->2o$~J zbLuXiQyFvN)ZNmlcdBcSpgs6IwSY6RQ}@auuC|J}R~B(KIaR`jvQzg(%oCvVwgtVmAvgCxcq!yN}5?4dbJ6r%gjuL)a+HnvS zaEuG!3V6|1>^WbtFEuRorGR2zlEt1|sruhbve=(7d7<0{2gXYFKRFTQz9!4vgK{&# zQC;LsU%9oM%B|_`hULB;Q108Z+|R9Y-2-jVx}nJQ!8nr<{Vk#@t!OQ>Rmq)3!RCOG@KO341i& zaFU7T%i+O!rD|GJsY}$K18Wbiv-)}PMrCElwUXaY$*mFL%LL7X)il{(!mo;Bwy&Bo z39hwJX9`!>R23Hk#|Rn3_bYida1h$D8c^O;&o{zbi^(}WSu9&6h9JrZH{d!22RdHJ zNS|9)&9h3pkfGjFEu9A6-|2XE+FrM@25q_onhH@?)#(rz(OwyGu&NrrBAdc*gxKp& zFJC40K<>y!$c@8r9FAW#P*>+~B zv<-Z=ZHx@aU}YOle`-cwFRPPgCHgCd(&~ly#s-^Zs~dr?fm<=EpvwXZx-6g|@YUQZ zOS(*z^fOvBrgPH6u1yMXZL)Ih)beU?-clocs;ZRxYidT-OT*N`Xh-$P%`8h5c596+ zEK3!J``}n4Xq)o_Y|aa?8GN>Rk5ZGT)O=1ouyXHiS^R!^P(@d&JUdmMN|on*-D|07 zaT{-EIH?hr)2#{5Ua4gg#!C7V^=HA_x2ZuJM?cI`a)Xr|+W4csHonqoaO4aIJ^`27^uUtXJ`zZq&5DS+X8iB1<4r^^prL?0}$~5C}TuxLxI#Y*d>2 zq-eu#ev~T#{aRN4QB?=L|5X>yL$#ge4_uIb!$~*G)(N_A_OX)f ztPA)VO7S%aEkC{ToRUG`SNbrZomRod=(Sd~jRNC{+qo}ch&Yf*n((^8C`#Ryc1g|nQ%6t=L?)lf5={XtByjC1X<`GKD z-_o7U@c>Gr^mXDj$j?;iAo&lMc+uc0=LLu>OX)V4tqx6LowyZBiyLJgN13bsIx{_O zz?s*Ig)LCC0a8?_1EO)^qfz=gu?+GzsC1CZ(xX(^O)5E{PU)c`TU`-ZIu1(jZIt;u zWj^}XnQyl;uNAHsTv1U{{&h+(5WdnVeVu59^!HRcYDig{y9I@Ps*=N0vZ_;hsEIF} ztP|&u`G-cC_fY2F{yH-~48@t(iXtp4nmj0Vw^l_^oo1j%c2enWbh^i+$B~wOgk7^# z+ovev95%l4K!o8ugMGnk*d=0e8msa*(fOmXifV(+OIfM?6}kI?*#}AEvFWF%StF$^ zDxHWcR?Ddo;Q0+Sp<>FuxhIwWFG}$avNMC7Ptum5I`V;kc zgZ(fzUcC@OmO1Hjt%W1|<4d$E!%!)Y4F818FIEO3kfEeaI^K{frKe8lQk#=LP+HW? zgFMZz#uISZ8hS@54ZNcdKotK8WiOA!eY-~9&4T=5e=T0pOWw8SW1dm;Zz^pq(DnXu zT$hy6pfvh?LNVz}#O&)hDqZu{zrK#*0x`IOL z@Juu|{m?mAEu~;^E}@u4t)Qo6Y<1HrhpF6yRPI_4vl{#w-SM4dNTHd8&?(V@x*#u9 zuEoasiTI01(C;i2K8Eba8fCu~Ii9kz6Y&?>KSFkoN$>NPZ^7=5M$Vo`zBDYy8#+rV zjh%HpBu&4tvnQd=W4=knP0IwSGWhB?ABy){#qB`I*>_6u6-UWbw{!l##nHzC3O~#= zj2o4xuWp|K>wRpjpNPMx9D38gaOWhPe>TeQxCSqMVB_pW{6%(p&MOKtoi;JpqB= zt>S2uLS$K0GG9EnZGf?H*Pc5L#7Sw`);**w{N=9Hlfa z?u5#H;g(}VK95N+zm(6z&U{1`lcLCD*ELa+a*Fq7R%Umf?n>qtC3aXaUuC{tg;7M zb@YF16}>#VTDkR1+yrG^!C%4$gIC_?{k#~tg`s;Vk?VY-}*-BROg(qYT)&O zl|@}dSC(nDEZMEbRsN)!G7nX67QCbWwcT@R4Y3L&MVlwlpW)xQB1Or ztTc>XY5?q@WzU22r@!o4aV7>2ekj2>Ex1k?u{e=e=|gn-lp8R<)~MuODj7F3TB7J% z=!s}`Zt`GroLe@^eGTP){QsAGt=Nd%KPfSvO@;IcGxsyHP(+#kMExl!eH|Om8AMPW zIO$tvMLp4RjPH?T?ovIRPV~5X{T8>BW)!~zu|M16Mx-jBtJIHZ^+4v4{tCRL5~X;5 z<6|DW@}`-1&p_oIqI0f6uF4rI`GU1oNS`d**2u4$kog{L>=zO27k#^|h`v{5Jcp$B zvGK^I{qkEzOTX@iNc#d@7;5BKSUob+MmHr$*h?zOud{q4zh-3_#!HR-%0jNnH~)Wr z8T`R^Sve74`vdP-2wPGgH3spKQiT_0XIzg{~o>1vNFFyHuFZ7^pdGU(U z@W1jR9wt6`Qd;TnMHi%pJuB1wz4-JJJQbzVhe$Sh!lWA!_hOZN!S-A9$kt%v z)^!%a3G8;1W)zdkfo<^IrPA6{7j_3YkN7L_l1gfxWqicxBz=?5cm?Qle>pD5uOG;Q zNL7mxT*PQpP}FXmV`9^mdPyY}^bQ~MjNAjLj>uEeG+#?zD-I*Ql}eA$mah}^CU1&L zcj*PkmsCiDrc9ZD ztF~a)7<*b;HAEiJ)E$Aj6! z&eM24;{uIK85e52l5vT~n;4gByn}JM#y2sp)c9`3OErFoaka+B886fLWyY6l{2t@w z8h^>SR^#)GH)?Flr~0~DV;AH0s=iU5jFU7T$he!v9>#q%p2>KC#$LulG_GJgLgQ78 z$0$6RZX)f!S>5o!H&M5P-Xu0lCBG!7pzdTmQ!ClWc$UV;81KlH zrHsdEyppj;<4ue+G^Q^cgxIq+-phE8#&%>7(c6V9OF|OcVPUS#@!j8)_4Hp=QSS9_yvtK8NaCU zY{q9aE@S+X#%mbAtnn7cuV{Qd<80l(4=_Hf`G*+iY5rr33p75(xKQKQ8JB4MG2?QL z&oN%AaWJNq5c_hCBN^9f+?w%PjguK~)VMd}t2Ew*i&_|THNKJYwHn{fc&EmP8P{w4 zB;!3Azrc8(#&0pcRpULC;j1Ox32jlxSZqkkHdr;%%j33dsE#qSvr!an6<9>`! zYCMYZX^k@(pV4>@xSPf+8TZh56XQM_?_fMYWBN8Q7FinK&3J^y4>2C2 z@o~oEG=7{9J_hs&mMO1hq!NCm=+kD>BsXigQhA(M&|Nz@odau$%ot`-h51tn?ki?g|aH zpd-n!yW+7DcXlw+!48VF*iMoTZVEPJo#~N-V+O>;hF$Tx5K4+0DJ#qjpd4zBh z%UMZH0y3h6(10W-PQ+~}Z9oi_)HFpvE$Ij)9ciHhV)Bsea>A@0C?mYR5gIxOe&O9i zMVh$S0@pYXsc@4vpKFn?UQ2ZZ0b$lt4^8 z)bt5WLyg2L$B^C!FwWrUa zLU=*TX9X>9d$tvq&SeFNxsB}9(3|&_~bkL zC;I}L+(TEQY)@SpB%o1rRSED25=cmCkPw7d^tD%^E!nniJ`m+O>J^Yys^Wsa{s$$U|sIGeX;(*r)0k{=Xg!(kpLZ(rMzP?CM z6Y8g>(8pv)=--o@?Eo7*rN|Cs5z@=u(C6czz`Ue?urEkId^pAs+^(Yo1!ICkb_b4Gh93DCPPFPmR!wGv$}_10CjZGo zq;tcY(gsmUh0dvT8E+c5ODBzCvRzKc=xWmFI)g_G^d>x~* zWG$hVmPINn$D)vU0T~xt#ZcxV60ousH!KJ?QbBl7Sk4CNT-*{s?jRKFQt3fJ31!lv zfYfq-Ta@k!r5mFXSyLH`iPnwATIFkbl)ltgCc$cOl?eowkz#5dmLHdg3f!UZXHZ%+ ztX!ewQ6(h5l9W@2BTyrYBu8t7Dpkp?5}{&B3*xM13a?HJR_Y|BYlSbq9L;sY=b&30gq<;uVkvoMcRy0@mPu&KcImN z@vEyT_V`gg0Q{#`l$EA>i*gGq^72!2lao_>r1VKiGg6C7%2OBTl$PhGbmpr;!@&DIN7^6zqq1YCD`#C4_Mx!`NgC}Hi=;s-om{6Qph{-f$gGdB?~aB zxO8z&`H1|o+){5zc`=DV0~I^0V*Y&2g5Hom!5>LFKTo!vbYy`DKm~_5Z$wUc4kbdn zl)&Cww7?R}DbJr@QAh%qHpdRlD9z6(EnZNXvv_fS9-3E5Zb=Ec++T5ULbBa*5#F;ro z3sfyObZT^dQGTh?2NYmPgk>R3*2pJTEVQKIkTxIm-($SmjaUCjYQZQ7Hgn_-sjW?xK7$0*t?K91OTS zU>-U`c~@`I|7-5e1LL}?`|&4@qf8c-*v>{FRhB|%Vn=VZSW2D5vNX2G)`m28oCG=< zNh50dCcZr3RdBOlnB&5uT zPmar!I7pfM2zZkIT%sUl?l={|XKSFuK+1fFfTshvp%ud{A&@d(ZE3kByWD!RypR}3 znQzjI+geYd7a4qU?fYrgU@&;|hL(G7Yi%X?2EZj4QRZJ-TJFC;dnkS*k%Thez?4dLrdEu_}%(d{L0*{v$Y|cgaOKYCuq4ji%UJJUV0%R zeKL;*E%#;5RVCbdU;O^|d%3-Me}C(9o-ejIQ5jpnVf6pz) z>-eQam&x36O3N*`#Bd2AlX)Y-@44rmTcRqn=!?W<$-F<)k~z7xqvdG!lI*$s-zEI_ zCSBY~$S+}4G7n?Uxtfy!m$)gJzuW*^;IXF{5+5b=o((PcKduWp1#pRilDRX}f=)hv z6VQRy^#*z=K}j-i&$P6jx2g3CdaLm6RJ@gVADRDXNlYibmlz-Po~QE}0822B%sVn@ z2{(maNYIYV$1^RMFx^IaAwfAZUqTxe};y)FAbp1^0~ zD~WKC3DNHJEHtFo64U~(KdP~ipc14ab5YC9t($3to&~4`n#gpte75!a%?}+ve*97V zJN_uJP5s=Hss1=~R_hB}R*tpyZ@T|+Rojo-vKOg8vh6zgLiV+-JI>tj?92s?TQ@u_ zbLFv*)8E-!XYla5cV=(T-gC5dWYck#x%Ia;B5nO~TWk6Bqpf>9(0zAh!|YW@vsdv4 z7pV`jTiaUa&d^1~kVB^xG-Lx7?F` zL#m2L+8%xMX!dGd+?Mp>vX5tPIet8=2P37V?B>?r+Wi0L(!O^zdz`w_dVbRp`QH86 z&#K;jw#m4uSDBY8a@uxhTju0D{e{1khx;%O_jlKq?ca}L^&)f{X6%0Y)%rW9sTvz? zZ=hv;-sa5fUvVEuedbwNBxg9u$=Ulrl0u?O_;nKfI<0kU%U#)h`?7}~df(&tbx-yZ zRbY0eEqgS3E@RMns+B<0Yc@ah&=X(V2b})ljSZmm8(NNK!$*fuF^2Fm#y`e`KaMb} z?YmsgZ!;#{mECll>%mdI4Vf(cZlzxv4z}%sXFkw3TWo#)*&q^^0j&uUTiaBw7WF$5 z<-O{f?7l~{mtB&j@o32&Xbtts;6}VAZp88IRoVNGQm!`rat42^f--GZ%T4&zx2X?W zx2X{@-n>V__qJuPGfHe7P#tW&K;>>7(ocsrwtY8y*>{hknafulZQZ7^?5l0rWnFee z2IkJl9zE20@N~1p*P0!;Lbo$h+nd?k+TD`<9OcXmWDg?Ew6$KSs^y`{Tye85XKUM| zhqBjXb*-&JFx0!&Lz}XfXWsRSy_s(Wk7VBditNpq^RqLVQ?uK%J2I!^_W;s+UyUAP>2O*B;wv?gB2 zVO6&zIjri!<*=%5sxeA(5H;~a4w+I(w|q9%3FMHef@34_Y1(>5yK?sm{zzn6_p8!6v}v@Mh*m2xfdJTg?u|g~=hyL}79s(t5EOrO8Rh z%rAnLC%!)X2asM^)TO%Qcp}#|ob8C)A!iTWcT}nzDNL41Z{-AF@-5XV$M)QE>7AU( zbKg;^a@3AWef0BYPw1_jjH9>N&EGQmNpIyKn|^Bz!|8Y}2hTFEX(j3S;#*tWXfd9F zS8}8*^Y1~+3drJX6e%LLtW~qU?B2H4OE!NSfDLU2+p=$HJwev7oDs{suC?W(uT#B?L9qvRcr624`lEE&^>R)pIw_?oxSC{%i@mR{Q#?hzrG^nh*F}X{#IhR zZ+R7ld&X#$oF}3pzGimxy>3VUo&YbUB5sR|I1@7_hkG(#3m}MnHhbBD?5yrKy_M5C znSX`4jUrmwT3@h{wRCzfCv?<%tsfB@$ax%6?uXQ8s!vL+Xfrs(4WHsseMd{nD@pU% z(6$%9l{|0)ebPpnMV6$HY}-EiZP39F|0*B2}L*Q<0axIB4=A%xSVZCAS}sn*0NIcp;}c0 z;*NWWP`vq;BLY9LOIjnPL-VLPz&&=E{gKY znT`a(@K50%d>#tVxo|OLBU`9RfK$VGaS2EI9#@ z`9B!wP1)lbElXFAOfO0VaIf(hJByXe6^Ne2_`CyiRw!$!Epb< zQemVB2Q+-xJ={NDtb`r$rb*%O&}`V5&xg5@<@w3V(&!A{)$u)THPI##_85YZ(!ien z@rlw%{>q`kNIt06u@6vhlxq#_48ZQcFl7|pN4q4>4p*U^4?FkQ%ad~z6i@9!4Lhr~ z^3su!g@&$V20IdSYWD$Is60&o^427h2D(C4_YUbX2z7MsI&dk&+ z4PEL!|5$bB^HVF6$g-QqH!ic&+BX`=Aya;}GPT^Or1a)UzVG_wYNb&cDUVo{_UK)k z!W6nYNV{Q}QVe!}d@7jK!x#6vTW$9A4K6Rv(Qa8KKelh>a8O%l443QI#o63B?{IpI z30=Wv)UKt4`TXL-)NC+Yu9q00<`(Mppj5(yW4E%TcB8Q2^inl#r7|XCx`G`v>=Oc4 zN*%r(&h7Q;p;~3SeF{5}m!~%>hgKyJF&XJt7!ckq zEX-DiW`Pv>VyW0s3dV|i#`FDyrQ!X>{K3-5==gB|P_S5rpXwS#V6AWwBMS;!=>tZV zZM+E^b^$wRhiz=3ioHr3Pg8oatx(@Jw@_}5eLaGGy7d#K!ThfN{X@mlM6rKh-$dc+ zywQAbMRosh^#c3Vwkgqr&OAm6h+dv3j7*fmZHb-N!YpN?pOs>1tr}W{wqkGG+%^yTr>Bbx1ItU;Lv4&KOjm+QwGA(u?KFfQ zYKM_S-%PBwrYT3$6k^461KS+x9V4-S_OK8Ja)rZ$$}$YbJodQ$1G$a@?LlL->J=gp zdhb6!KDJL$exa4!Y8c|p<39CF{Gf7u{%|m*2LOBAjmikN`2*VjrtSFlTIB|#`W%Xf z1B3xDWnkcIhnP*sN_Fr%*SUOg zdmpemn)<%Tp&;xAk`7m=(3Hy5LT$Q^$%tENaGRb&ow{C~8mvss!OdyfM842VP^z-L zqk8@M(kTfMWl*K^st|FolPc=oP2MBrC8MP=`ZtDVy9oVh%$a0{y-Bx|ZOnkt4UBri z-=m~E8xNVwB|}Uq5O9*DDR#)2s3=77EZ1o)*YYZ=nyySPD+(76iHR#{JNTR`wy|(s zr3RlTB_X5=9Ij~MsT;GPNd-JZ5D<`8+W3OGtjsnjD&K_H#+(d2H#yl@QyzO5i~+I~ zGf0mhxLpaLmtLA+DKR!{`rNsEdHdzTC}fhExrG~uT`Za|MKl>+L1S*AcBozbiU>Xk zwOSP^>lW?R5?%cWd|Or($s&yKjB+Ett+H6JqWHDf#o@%dh_M%=pCcyQw-(WIrVQw= z&?dsGXqvVWf?7UFd0KE?4lK~Zb7SF#^3rtarIn?Hl%7`ey-)y1)H{N%l84SHynl?P z=oSqEKfZ4Qf>kP4&k^kf*>lnPm z(tc^Z1LfM4OYox9=p;GP*(fwM(tGLy@ORVH8LOk*DCudfH;&9f91^Y)v)4&D$OXd_ zyGsM3BfARY!&YxY84%}`VsRV#q!`e zHjDSrOvoW_4r|eml|}8J zO@rp417!2E1{Wx;q^TpuD0jr%Anev$A#$G8q=}c3tG@_3gXJz`E|q!D(}*Jpiy7ta zQs49%?eLCA*<7g=;yi}>KGr|pKipL+Oq9m+yYl1tkpacDo2~pcCQ9rC8t2K>1-*F* zntre=vJJ*fwg^)%q$#iIK!J!3GYG-gP99p8u1mA>ZH z{4P3HE;bgyv<902Cl`_FZ zQ;l=9%r15W5Ga2}@m|t|oq)uKf`PlPv8QVQI!vQ7Ucn&~FfH5M<95I&1f=q(aGTlK zm?#mu?*LW8U|18qKPgww;&54A@yYRtBI&tP)jDmvfLVxaC(~u}er-q4(mI-_xT=R! zUEJOU%Mi0sDaU7+>L^6pIv|VK*qJsErB@CM^=J}AOGKGE)%HU$To@_s$2L>1CEpv9 zXf_-|i`Z4trwod&Rw&~vUPL(3L?S5`aeAh_Jl9m7j%@1I{!|ccsE~%K$2MXOSOR20 z)>dS+&%<{~#Z*fcWCjHYBTFeOM>AyU$1vI1YrTsm#6##&y-ccqEyFT8wL)t-HsKOx z?E%sS%Kj8g9%)qc)>rb7)pk~Oyh2}a$vn>N6^i-sOK?62=e;gb=A9gv1|3 zNo8uwq1u+iX-GneECw(K6+vbTTB*ubt!8s()!6*^{Ft*N7zbPDkjk2W|luqQuQ z+CAPsvVW+5yimNVv|lOIKC)iBAwNIH+njo5ObI342{LRsm?SkGyx~=?P0OyE-n`=x zjy2jId@)!iaE^@-c?Ate>UOm0pWFbIF(AGehrQ059SA`THo-2I+58|kDuPsHM9B`8I&-+ z$f5@Mhox+7zZGy~?ofGdRBeM0#rFw=Ne%sSvhkSam@s{EvGZmMYOG?&##6cgInmw3 zlxOp26ZdHFT(vkJ5+^4H&0>v?ByQ-bsYSqys!gKg<{)coUhS?Z!wZ(Fx$j}1ntvWq z9QMU#)V`Q+GC=t+4}kwLht3`0gRt6;6lrZn9WD(IJ7~|TxG=u3z?&82NA&PR6es3JcKA2yZ3HS*4`XX(1)mrr~|J>2eip##^% z9yPT>rpH23uQ8lOjCt`266wk*kiy=eA}P2s)!p3(A%A`mnpr1fDHso42iLjk+@aJ(HCkA1Gsqm{*nkHZ|68)&!3a$1$QYuI5S6Rt`qkl`_qFChlw2l|cQ7VOqwuW-GX=R`3i?0T02EprUnKv@W6X zktifafk8AKjtFpV3PvM46(lwqE{_B;o94dbPC^(N)#C{@dksXE4Z+k5&?TCXgoLz6 z+AR@4tP1*zM_#NR#{64*?TbVCDc2rC7A%kFj&}*I%AS|96=CEsxJF&xZ(zVTa1D($ zb{hklz#6(idoXnFf4Z`|R(a5s$%a?02D3N??^r92K`hsk6KKCyJwE`4MBz9K6TMu*j3YAv4x)B=9Q5Z-|_FB0<2S6;8Fv zZN~L@jAqi{poxtl9tZCj*PC!VAw^2c26chyIJnVr7%ax4WN`-Jan0RZ{KOEVSjuN2 z1-MqeumejFu{VeeV&7<3~fVMPpNZ zki0xnR?cB}XD{wbm>6*~mhP`ruV2Q#rTCzwE;ZEDjnEi-_Flm`+kAscvrY8f}Tq zyGo9~m7qpmgNyUEF6*B<-=b&jOr z(FsNFNQ7cfSmJgm(?J$pce@M?)dbh-G;j7;4FJv1-l5SaG0o_~ERwP2Z~%W#goF1F z6F8(X-pYrIa_aiUmOhYUt0Wl`uIw+6JQ3&e)3#Mt1W4(UJEl?P33-y7K3(pW$`!l7 z6t(qRoE-yKh9DUc14JERERFHP;vXcso21Da7SpHD5^rFG(5BpBeO4e2@}$s1Z!+{x zO<|{Ruu`jPzmT~1Ub+J(0^i=at8q`Qn7d+T(-VX0S|gOEgkuwRTFFssq{m?&kjj;- ziGN`z1&k>%6&-IsK!hx32$nA#f(R{6$yp-8QF}Zq9fv@Y$0LO9cufAe5Utg|sJuRh zDl3&a3{%bC|5j#?Xbj@TNFpF_a#(mmJ+}rs>5V_5yf?)ge`#SF4$~x7z_hhIr`*zb zC=#C@PS?~S@4)g$zkOc*`SJ15aTt>a_LWA);wkm7+F299;4W8Vuk~up*!A~G5aeqM zhj1mr%h<0=@_=m)@!axb=$@FaL6GDS4iQoOOW)-QWt)c(7A{1TG??7-P?|c2X+`#+ z5|~B@8#7!vz`;$@ZWGif!WIAE9&REj10{(|#M{Lr5^5%_n5xa(l{Y=2iP0_($QtjQ ztx-Mv8e-z1Xpnf+$#JQ$Cy2Zn$ZM|Hk8@AsrC4t)j_!kprGZ3#0USgn^0Qxt^EE4Z z0V5O+2u)QM>D&xWZ`^8gq7=)qY`Ch$@uqC-Wv_KH;aN?r!pLZpC^QWm{qW~mW1_no-3M&jT0V;iPU1H33*O^L|jb~jPyCj zM!zLQBBxMn(=RJ5)cfg>Bl#+Wu4^fIJ7K-)9~2s&g04 zWplB|aw?hgX~W-Kn|}HUtC9%3Xb`$PhO?jxYQNquK#29KR9b0F&XsURsib%V_`I^o znwCKiHy~|Lp>NgQu`-6t*6=*s>_+WD1v@=hs9w2BKH@RgOs|X0mgNRaQf1c+db&vgD|qKoD`|!RNvZU46W5iLxFVeHmxjW@jL1j zs|uC?x%Y{#t{$Re)UkBJ2aOzA>C#ITprC!&^f5=M!{{|Lo5)GV%b;Cu>NSa30tIC zkDeHIMhL;w8TmbBV?MRApoJ5)&S5@QHd%N##G~VmBifu0zOek8C_5eSnBoIIsT?m+ zq*Cdlq2yzR{p#F$aRGBA*5hj3o_!t~gHvNX6sKPC1d-mJ^kKTVUHgQJ?0ng}&%wcO z59i>}HZdxgoLZ*L8BQ3IwD$_S8lAO?M?bdhDC?uN>6(|sS^SI)JO8oTWXYe(>ca8)>uvr|C3QfvT_0ZjLw(T3GYD^!KX zmAFX>LfGS;_ol;meUZ&LADwFq$WNf5w}T9U$g{Ly9krJ&s`rTv5ZY5W57pL&qJO5b z&6p?$kDx0!8l`t8af~S;-#~k(BfNTT#WiRVZyQ`0NuI{}afGUf$1$aJbK??6u~{{x z?_~Ot?bi68JY@<(Zwg7?8XFoj8%iPfjd7SWPbOi!3DIcR02^Ww)89VNYSbBTE@Et9 z7PYo+JtSR+T8NAY@o2f7h9bJ2*@8715`rAHCWU$s<_$7sYd%=0?X4@NMV-CITH?*X zwdRS=&Oq|O*%^Gp%#QZ5130(Ys)?;9D5L~^8&-$)L_GrEYwBtO9U`)fMaz5q%Arx% z_QsUurgSA-Mag6{7DR5q)|Rk$?h#GI-mdp7#fG&}kUk-hDP8T-)nmc0`53#EQ%Lf; zmo>q1C?p!oIgABl8Yk3%GMCWoj*lYBiRbPG+O=PSR!esu#Pb_ts8R-CM%0p=XDFs^ z7noGlBc=E`bcwway> zj{;+!=PEOe{yF97Vhp&|Cf;+3_Srl$3CT+tK&+`m4?W{{#8g@;WCb!QGATaz&PRHt z=khp#pE}MY5k+#7Z9b#$5Ft58C~3D)J2*Tf0T#yki+h53!#bHCn#oW&p-R^Wvw}Jzb4}xbzgBMyLwdB_(&W1&BZse1E~uDR>L~P3 zf3bgO|3u#O%-7QJ{=#4y{)R>%88`^?5_JWrJdHI5RhjSl2L@m=E)9xg?b7 zNYINqDE5q8Xo$|S`6557T{Ckju9>lS}eBn*KluLHB#;Y1KDVM4ggN{exE!G6+&U<~m>p=bj@LKPJzTJiqxV7R6UKeDFb ztlDHpQf>JfEp)J&oC&R-J1bN32Q1Gf=8PV2XF_I8KYlfSplq3JSffo~y+lRafl1Yk zuEc2M#Y1wZ1s=kk)}Spu4jY?@h-!mxvL_zt0CjmV4J$;i#4D2grBsl&cskud2I&y> zhDn@3q{&v!yjgQ~e->Ve$fBJ0s0Hvin52M`Sdq4~F^<(v*B45&V5JDEVv$T8RH}@< z9lh;>%k!qIhv4!6t4AEgGEj6qUFRSOMqYCFNG$(dm>S=fiOgAoK!GCoRf={KKL9h*`+0Iku&+YN(tg~UeuA4a>$F44OJAyDbk9^^TVSD^2P{wCx{MC#1phe zN9!INUHpkFD=O!1j^XOw?$;s7@oa5DPYWbZxBAOCEuT-M| zY;}{0ngo8n0MqUfC<6#asKdvK#EZRkrJIZGh1Nx+J?ZOUW7Dy1t+qsNvPaP(@OZx{ z+q&AoGF(qoG-#qq5(0x}%`@|GdyKc!Yql4tsqGjRZNKEb#%!jCk&5=hRScU@hbn?U zo*l6no&)>GCkh~w0=KQd6x>-`f7ejqFvi+!Na55BTM4U`%*Y~SqWLm%`3JFXGipN~ zgWVcF=!sZ6UV=rDtz%2Qzor?xCRwEyDZ{a6dT}r%VWWuMJPi}=c*KqT6~l!x#uFMk z_7sSwLkHI819xPF$EghQVUuVfm{pYCj3!XH>Ua#U)NZ&2!HFs6HmKI*L!8Hs3gV>u zTMas%=sx)pYF!=ZuAHF;aJTL}4uP)GHj>ukw#6q#m36Q@H;4@|wY3~L`k>g+@!TSJ8ka$MgyZY4%iLU zcAn+@9vj=@qGJk1A_E6$@R2Z7kV2j5t^!S+qel4Y4+vRoF-R{Ddku;5JiBl#;-s|I zXQ>an;XYNb11qrsMwdM2A=k#+@hpK$FPm*ZQ>;g$1Fo<}${?%Us>XHh*C7&xm;|&I z;+n_JIt|yxIR4M*4Okan6n#n^^J(e4!hICMa2pVke?u&-kl2|a@66MSqvXM5Q-k)npurgf0mvhl_=8jOt78%s=xl<@V`7)67UsZrF%=THuv@o>PWxUh|C zs@~}nMVm~(R}c3AHMiyCW~4t|fKVGANm^#C5m%p3K2fxeh!v~eI_uA4(aOaZEt~11 z7=QOxZDx#2+&{NDINxX)4AWaqTVX8Dj_hwAxagwxuC2XWyW4XeVRuJQuCx8ZaU9Oy zQ*LPZmaylA?OWy>%eBg7hv>5V>J%Q!OH;F#t@ie8>FH|UatQw)nx1Umf?L=xo4V+t zzTWmNGh>AT{H`qkh))_@AflA(u=N1A)M!)#iBoJWF0aS}ryjoRp>_yS%~5~tP$Wo9 zDzg#RgoNIO+B{aCCez!EBm!%l#;C$Whv5x@5lJD#PY;`v9mw21qXwqTF!~1?2Lu4= zw2dA_Oh!g2qQEe;ceu0;kB$`J&^lrC$J7uyp@4}p?D2F^p$?&*fwsGPI29;tqszw3 znjEx?QO`eySV8b8(Lpleyxu8=w}Zha;<_VRMYdP0CT2m}@S*6r(NJS&LBupVU6=YYr!`5C{hrCGwODVcpTfQ2)UNCjviWDA-G;iST_ka4KK zHkD@OfTNdQ%_0dvAF&N9g?LCT*_Ay#d~`@;31E-t6JzFntFrFb#T?*<(o9H6p|PMa zL_TxDdaqPqS5jLhilqp>Y9jeW>BZ{our0=>tN}7G>dh;V{P;pEMkniFQ!GKUF_1cy zGSK2v;~VKUuoc3FO}L&OYAazQ-CAMWeG7CRWTre-QC$KGQV+o?=8dqdE}0Wsr_X9f zhGk`h!iJSvs;sM*CslYUS;*^mCk8cyJMkJL2d{+K&zIPgZS&Yg#%is^DqkX8dIcYH zY?|BQH9T(6IKYR{hbm0y8chI6wX`=6b%Y@`VUuk(#pG~|{TnzO%W`jeCmyVT$^Uy1W{C{7=P2VQ7z$7)^QfyYvi=j;LTxp61HzT$oEDV?}^J`24*nFp4y zBilvi8mTD7*&=+!RMQSrGH5eZz+#6n0Ccm1L$kqphW8vmBna&^&3&6XGBsDhMrl0n zE~(R3Ev0T1+A#-{svY?aMyg$0i&v(BH$jZx7z5dzOxm{fuKXIsk;5=Bs{!+{XR6|l zy^W6b(KS^!9s-^P-tEnqQ8l${!mGer9i->Aj>3`wT%kU%K$s^{5Gmaa6?A>rsSbR?l%X0s& z8}#CtZs#Do5 zbBl`+DP8StDQYctT6WLSG1bWpd~|eYygK92#k%6XhB&xBy3Fx{He? zW^NEit^TPKP9#4sD+ceGWzrZy8(=cxTMeQSvxZnasG1&)R-%Y=<)UGk^G7Q}up+ci zi?z`S6umR0wx`U2gTABG@kMp+RCywZ7NO1gmX72n3s^o5S%`X^h*H?2r5c4Akt`D< zVZ572ahMd#ga}Ll9T9A)qRt#yK6RMl<=T9CaS;{;6?wBW#l6#SF{YCd@dmMR<~weY zE4xvsdqpbaJ~}FSbQMBu$`js7<0~FK5y`fLeycE9EHhb~C9Xv&X;9)4&5U~A+_gOE zj21RZFj8P6u85>NJ{kM%PMB+eWEW$cyli*1iMNH~9kSsu3X{3oz*KWg#0jw@UbH{I zUpWSo_q5_Fegr&hTjA(y7-aH+V~&p-8~asCR5H&xCS6gj^YxxPc-cG?vPX zb&8j*Gy!3QswZ^F8KKXWY7jTVkCGHFI^JT^O9Ybk#F08qYz!ilGU?#zt% zr?_VEy|i(4-s$!!S@!ymBj^MT5JTlT8z_B1J2|HEL6gc{4sSWy8pGvVf>+cq&!FR= zbt)}M!7wF>v41Zw0gnYj1wInFHQuQLnVzP*rdDtpiVRsqmts)_%!)3LjSe7@1fY29 zOgzA0ucD#jl|$InUphi3Z2SQShbAFzp^3l=oSP;AP6hn1bgAG*9dkk*(lBLcb9IAJ zr+CG%EU-rOUOFP7{TZndPuCKpc$BGlYyFj_LPER9Fr`^au`rD2{;*2XH72F0*`+nl z?yRvfpd5Z=BV1*&oL!nT$kY z6~&8{-)Qf{gEAC*jSeHR;XEGU^u1sbgOs`sM1UK~GRH+Wx@OGZ_+gTdeJ3YWpfKL0 za}k+ZB@9;60Ur)y*PO44q`2!h>N{ZK9(c!>?lQKnSizShQPb9sd2m+Q?JwsWvK60a zhbBmM!cY-+U9SjZEv`Y{RB-ahBHW~FbchcmS+7sx*mO2_*Xa1@NIqeT5qlOS&$#yq zO^70ZM83Ux4a=hU@Fry)*Lq5fUubW_JmAC+4!~k?UuSvgh%zxl@fj~xB59dDQYAJ= zy6Qxy5UTYd<3yw!x1eD6ZtN<^MA4c5G<2hrhdByPLxWiyziLna_@G*&i#Tc9%V0%rLSSN%V+YXsd5d{ERM|5?m)!to-Ws>jcv`r4McFbGmt95a%Q3} z3X-R))3M@(AYoQSVEYIH?;_}92g>0nI*u6jFv0c+RCGnP+P{pB22oy%MJMshd#99Q ziTye%mL23OeE={Amh$0Ve?o1sseS)o|5y=Deo8+0HOx{DmK_x;&=#*^tV*t3(`Qn& zHP6U4Y^`G|_WOy1@yiT%n1n5vtL9^gq4npH6y+8t%xAc(G`_;A7f*A=fv{7x}K1?z5UgSMIpNVhDJcx zg=xghb*1_ZDEU3t*K~ulpcD@!=fxfK&Newsx{N#i#36Dx(vcu?jufZ~l*Dy1CfKxP zQOG21v{Les5`1M8oGK$1nRuY$<)t0>)ZTzL4jWRJQMI?@IJ2#}4rWxg2uwv5Y>l`j zs`WVl_KKm(k~Ks?OV>bCD+`H-j!rdvmrul|vakaq$L4P>Yj~&?ygAqHu~2SewP`{} z^mZ~SPN}#;H$~ajvv{#g&GAVqy-J+^!A?h!0oT@t5MDXn=|Mw0V}V)LJkfFXpk<7q zZ03IBlitX6PfKrNF2?-d@UlStth_>}g%R{<`L9pO|I??Kf9s99 z{DV&UFG(r?CeC;0X8oPC`^zc$UvU$c@8tj6l>Emyf4I*4|IPW&bMpU1O8M7wzJq_D z+a>Kj>o)!D{$9LALkdp*pQn`ncbxycb>{y*=ilVy|87e8lbo;cYTYhr_e)aRU;aa# z?@}lKj+FfG=KP!1ng1J{e}j|%;*|0yIN$I7iEfv)`<&bLv-|tcIe*(9+4*0eQvMe> z|4(0I=f6HB|3)tNW3ScurQDCFgmpJM*!zFxO~l<`5z-;jb2uYRM>|JQHQ=^x&u z)3<9S<(;k zv!tKkXGy=n&ys$FpC$b-ewOsa_v`V=a+-6}557y7B|rZar_a7umnZ2J{JewH z7dz=~{Cqp7A92#p^Yeq8{+!caaQfB{==vo65kLQ!(-(hGznAm_{QN;qKjoz7{x6;X zJWe-%NIy&Ze14X6CqGMiEk8^8cl>-Gr`!KVmnZ4<{Jg~J9ZvcgewOq<`1uE%p7yu8 zyp5c0^;qEH14-*S2))7>nmTb#6qpC#SS&yt?X^jgw;_*v4Ck8%4s{h^cI z{eXTi>BJ}Wv!wsU&ywEuN&WtIPM>hn?oa9WJ)FMSNpIk1Nk7cblKzyRCEfUGU7n=p z^YaCqzQ{>$3+dr@KOS<<#{VeGp@w23F z;%7qq7r<;h?xEb2O)mA`6;c(wIVZF%b?U2n6cIvuDd#PFUC zwoV_Z;Y*!1mh>BnJOz`o^-#jQrOI5HKH$F==NiFQ@?s0NHgFkcu$98X;N1e9Mh>=C zW=k`4c%w8sjc?@%g-%Uj$AWHMDWRbV?W4*lm6w)q0hTI5{ysc~52-M!8Re>0mT>|R zg)E>x{MxD-p(~t(XYp1#sX`b3ZdLb(p`>!{Pz7-Ph{JDG3SAsnDo;)>RaWF_4yUE$ zZw#FL$)6hoo%}Nsv;@ameDK!bF)ut5TzHZ%|Aye!^L+3Vg69wU;BCR45g+`-;3Hmm zHn{LgU;dMVJ7#_GlYAH1 zXDh?+a`393;SW1-LgSVo9ye+S{mkHBi)Y?RJ*Ilwmnm2L^QZW;B}n2Ai8H=_{cn~3 z>|h7aSC)%9&hR}B{Fe+LbKslMU~2zC2YwO5uVwfKF2A4Q(+>P9hR-_i1%}T#@K-T> zk>Rae{@WP7v z__rDUTMqoE41c}@KN%B8^Zo({eh$Mgbl@SwU+BPJ#PHvC;8liSf7@E(R=>c9^$e7gf*W%%U|{0@fi zaNzebe5V8d2Ezv(_%9f~%YmQXrrW>Af#(>$*MaY4_>cpyGknB>zmDN!4*Z=Azn0;> zJdY1D{4R#KGyFKiA7HqwixW=N?f(Y{{(Odi!hsJm{F4s6!thTy@S7O^X$Sr`hJVI^ z-^cKObl_iR_%R3m1BQRrfu9IMN9*fz4*WcZf8K#_XZV8-yvXn`IPe<7zv#eU#qj^_ zz~9F3FFEkPW%xfi@NY2upB?zm82)7kem3N3>hD(=j^(C)u2Ar21P}bPe$F%eO$=}U zvIe}6;SVzWT84`lz4>G+ALTIo0?t3e@Zc*Na1p~_rQl}=U*q$=bKzk`#{N)UPu>*e(!>@JV z-(dK(13%#`UGJ;|?`HU%1Aj5Y7ajQTGrZxzKgjS^2mURFzs!L@1EvZZhnpPuqy!#n`E5l{~ zYzxCb3b?P{?*YCM_1?IuGeXT#KPST!NbQmRP_Yc2$8gzSkTORZ?zU$JaLL0(tK=x> zmwmg-_~kz^+^zTPDdqfMz|Vzz*zwDDRf5!YCQO#pe%U9MaqDKd_$NT@R6j+A%Rc#G zhR*>`<8$Hd8t@M+Xugf}-|#67-@*C6B;|id1FmBD2AE2zJ+dz<^U}d^+0Va(^X~$j z>OJyK4Y-cs*E9Tr8#Le?ZqFZcIpW8FWvhPP%W&C`$D{iBESK|{m+I$9LV5grpYzN9 z>6iuwTVc|r_KTl~jN357#ou9;^B-oo>`Qa;!CL^AIpVA;IhF!{gv$~C0!+91$+YYC zh@XeF=RCk=?dY8P_fEji1--iVEBaZ+c^PnDdtL=N^;i5xAWo~FcL9Dk^u&i9y)1KX z5a3nfXJZQd`GEV{*#|ha^Gn=LkQeoHCE(N^@tcwUt^n?9|DUFme~*Hn65Ra`T`tsB z_46+&<(zb$u2=RiyE%V1;4}{3bH?EozzJ_($@E0Ze;1b{`?ou|oS!gU_G60-zv6sd zuk3%{&G1>kHwMXlq8jHHzX!p$KWDh?e{Sb;{*B?X|Gb0YTcMcKILm&jjPunD7eAZ3 zIDZ3h@Av~wbm`%rx2v3z|HFXO`0RAX=j$ouYy{z={0BMz^SR!wfGd1>zXpU1-^XzA zcNt~)EW^d`qMzZf0o>RAzvlen*8wwv`uQs0)USJg(XO7)(%|4EG>qCKel9X@Jq#Cr ztIeE$Kj73a@k{$+i+*uE=NG?=Va|UC!^ICq%KtQ%Gr|ZmkTkQlUn;7cQ-Yay>aw72sGm0jPU9f{HPX&cGF<#aWL^B`g*w0ZQ%T#d zV7U0ZT*l>>0jKud#dw8B^|OjUeC>ZD;O(5pOzs6->N4S<0G!${{zoE@{Sa`XOSdvz z5_tB7I=}c2N`GGfxUW6CIKTK?T*H;$%5d>V5&ZlV;MCun7~jwg_46?27r!N_59;R` zzpdLN{&@oL0o>P~1;7apAK`h#qxyMWO8%pO)A)%0p_KVChKpaF$YT#NT>MXd#N`JU z`P*{|;O&yfNDF{dz2ZkH<2=i7@lzDJ;!O+}ze>sfA%=^8iqP|i0jF_r<%(Z$epfEq ze6hd%xfJ*q;8gzWnU3|g>dyTM;9voXpZ9S7t9f3e{ohvkPYK-iKNB54Em2Ak>;T+{ z=hp&G<0*bvU*d1y4!F#zS=@&>zxZh}xe5N2;o=W>E`N0LR$adMy-C};04IEYnDM!n z^AB@=@ry#S>gNc<#oz2j48M!v?t1wO!(DmoM+_H#E{Of==Nt$^G!EkLHp1{-fcwVb zAmB8Q`*L@+}vwk~eTU;?MeHe))Zdi{GQrjWa@BulV5#o!=?&W4Zv5TV4yeuipQa0)K?d zaoclgPS@+|3p0TG%D)-#jb=yr@4LAi@voKj{s6;WJ@E$&7yo3Dw@>QS?GZoBF)n`u za9?{~lLCJ)mm~gqGLK(N$-k*f*DLF;zVUe}=XdqZTN&=+$@>{D{-84c-vQi*Z$IVy z;$J$+ow#V5Zm0O6zMbJkz&a9@8jeSY|F z0#5C8$8&<=;+E& zzwtJH`96lb`2Tr^%Q*<4C*MsezXb?Ga>$NfwyTn*4bKCd+Ue5Cg3AAl;NGw3hHT>Y zT+8{zzkZD2?*yFe1CKfOf#7mozMPjhlk;x@oZ9oi&)OA)*=n$h^NT;XjQq1*53#rqg8=Y}BmtDjYdi+}hIhQ9}J z8FL1y%bkiz@*4mA{e#zf-}_O7OvV zrsO{cxNrQw4>;kEoPUw|J)_^>o|gbl`Q^Ni(C3#ieDuSC`jPSfYruW={sZTC?K9s5 z+&2!t;Qa17y>O?-!h0>w9g~{?!tGYY7oWI-rCdI)lD}BCo`4kSb{!MP{PRo z#5~l;5~i2u=Mj2{4=Jc8#Am5CtgL(ct-Awu_YZHKS~OzG5A{)aTLe_^=`!vM9SS?* zsJAA(k3)$jaw94`-GpSrrR>g}Sw>v84VSWQC~|YzHeAX^0M$4?gwbvrE@j)$xNIBV z%VW}O7Og5&w>_EAUWrF<0#$8^tYJvS?iw2HFWOzf3v|){LcXvE*7(AH(OWEzEYQ8i zW^-`UhjsCi^{&$jfNQ?$D;5WJtRoW|c1RU=&0&vSiSxGGs>XR4Mm0GvI<3G`Rx`St zm@wwcZWYTAVg6$ zL5Qks#pE4Xn66mwJJ1e}4r9W%@lB5=EbNSe-BE-Z>s5#9wYpZp16ScyEqJK%>-dM} zi{1kWUP_@yOklXpnu_wGW1&Cs|Y@3`MD0KfJ6=qqZtV@(a%H)i5yM|i4jSZ zkjMd)Sy-5>lxvCM=|()kI%4#dmy$T4qdg_zxotLLP>9p$?hkWt!jRE7QEh1425Nqh z>*g0Ib7`TDIC%{mh|3fAFtdfB5vbOB(YvdisIjTJpZ=w4x_n2msqcI>J>+My)RN_~+;o<6Q)X2Gf;ll#XYE);cl_e9G za=pbpG4wB(c88e>b8hNeQlg;z? zd9Em0oXNfgBKmd20R0m4?;2Un8_Any-8QnI$VAgjVMiZv8Q{%-9uzA*P30BrLe_zC#nr7R^?51fZ+!U1H8_hom4L;C3XK#|A zukk^WGB^DI1{)CErddK*xgu)YH0L&^iA^*0MTDqnHUuFzXjap#y+VbW=7NcoDNxgF z5J@9CfsCw&mg>usr9vsG`s?kS(ysCT;e07SGDv0-wLhi*9=sBVXjJpSB>-!7tDbA)~(D_ zE4VyEqLbs&H&U71F#SF5wf8z32eP+{TO5+h67*Xs83E^UF-@e7H@U1fq`T*E^<0z} z>b7ymnZ%Drl=~&b?}qtAHKsUQ>+30b1G3BQZX8h@rnE+7W_hkK5L(?x2?cN79TGJu z>Q!jIzA+d6(x3z?@ZR=_Oo%r~rfN{xh-$j337J1#uVM+m*s?ZiMvsN&_c! zzcu<4J)g(FSV*mG2$U5*DE+4-4jRM5jRuLJMJK z1-s+cyT4wUj_=pEQpR($s3XbZ8m&?^1c{`em%p9XkdN9_-&)D1}=)(XZl! z^lV*sml<4w$U&2tr#A4+?>-O>-_yQ{DD94$(xG{njA2+_Y7m#%yHe7Z6IPbgr9<$0 zC|zAE&+pi=d#JDzJuh``rCY7yZYS*eG})dptwv)Sb;g>lo_^fWTAOAXGd(x9lBhGC zh{rZ|s$G+EMQ-T|8BJZ)Hk+5)u9xxXThf2s*Fu3cZQHgk-sHawl)B_6UFy=sW|y>h z*J65kiWC?Z-bEt~23Bq?<8Iap$%(k;yD&?aDaLn-s~DVdc5l6DcU6b$T34VH2qT&w zL+cG<%OZ%kzBT&!l*bLX$MenTCJBo;1#v;ptQb9Wp_W^4D+sPUjV$AXTI?tu5VGQ1 zU(LiBOKj=UH(G^Vv~jzH8%P>u3QLMzIVE;jE)0b{Z5w$Ri7g`~3A}X=kF~1R4de05 zn|Jik9XzfalOW*HpsnxTA|AX*xLFtO7&O_x#H#MCm>%**_r(aK_VHp{F0=S>;v)5U zyu6r8+|s(F(^sF5BKmtr7hD^~DUOGwyjpEA0WRgX=C;C*O$aMokKjlW?*xO-PB!Q= z&`79^#Zfi3`+N<|b$~P{Zo@U#j=#CHc5|;Tu5^@?aIY78uG1F%c2{b2YxKfW0Voe$ z0am!Vik*dI@V=epdUc8}5YOkkCMuQd@=9ol?v^4a5dD=Ubuoc4(HfKwj%RX%QM8Vo zA>j|LwW61Pp*W1)TyZvp+D6`o`bK$lV2e(rB`+38(_jh=UYJH)r|0rx#?{JQgoNBR-?XeIU!%b=-g;=Dx(?a5zSijv10xM78<3UM?Wc)_ z?khS+_lhNmXo-v%)hUaXrjJ$_jTVSi*g>sWEl*Zg!f+e@hRwQOY5@1?n#hH`t^F9< z5rUyt%5_&ek|p(Y)fSVf&~h`^bP~BidZDf-kUJIW46YYx*D12Jx=nCaji~>^c3RzQ zB4${q+QzGd9H7Ga$H^aOYlI&}1tKnd+Fy$$SOtU1bkzI5VvTh{| zaaJp7f>_LHs?=D^&$Vsg4r$??GM;+J+DngfCO!7c3p0L0k%z_*Wp!wb7j>$pqz|54 zO)OPL1lN2Kb}2KI_N2pp9MP1qG;>ss>u{&$usJuKot>PV=qizk3ywapUXczqIcXq; zw?iaSS&UG`9-E>5I(00ioB9-{uv?L{_@Z2s4;chlGheON45q6zM%R-AN)-QB9Z)}A zC97f1wN%F(1$|toE6cQ^po_~(mC{Oesj*z1vk7cOQ(P@j1cas}2ZNk!MQBedFIZk{ z)>0??V6OYA*axLG367NODb%Kxlr%N6JU>}k8l5Td&DeCWuR*lv(s;epmvHST-6WlN zjNvIL>_w(+o|eFwcs(t#hsn`^U6K@r;}ue{m87V!s-qN(jY^Q}E=_d9WVwRhb^J5> zY$*Xg^}>&1dUlzilyJ|8w&EEDCpdswKeD*}rGorUt!PH)6`sP}AUJ)aq7F{jbLX8H zs31O`@@rMo9JwV28Kz!cLv%4#mSej*+?*tM1!zNvbVP8tr$-3gwQH#Yk7!fck3O_{ zcVfBQuh(VPP$&zp;Hmk=GzPV4IY~mU1531TbxvB1 zo2)z#JK{!3G)pm~lGI@7YudE3sB)XB_e& z#MqU3tZA4oCpSYxIQCO<%^M;uSR<2x=+?^c%gu+qain#xRhF5FCi-=hw>TWX>Hj zXVYg(nt;EB@*}XW$+ihqO-Hd0eJPCo(759Z6q>g!0;Y>(6 zGY>EMv1q7g%@L;)EqHyKF6$sBL}<;S6ioJxSk+5;WI_42&AQ_K{AQe!c5=*iL}=?n zf8T5y$G~XfWx71VO|GL*k8Huwc^Az`?By7eTZ5zZQof41LC~nh*>|a24^2buDS8~i zT*PWNDo31A;h|P4cD#YEqyk#833sK#O2D%SkFofX-`-~wF{@dVXy?KZarW14sN$5{ zc%{BP4;$m|fdTj-z}Za}un2cp0MU*i7jHF7oD59oD*sX=CK3DnMB6y)6NRka+nY^= zR97ThDfF(4HRz?E2_~rkHUTUu;2S9tp!8nCzKKR(WB~4hF9^$q9@;@X-R9RZJ8&!( zHV<@s?3B9X)cc zH8&|k9Cl68X63X2TBtRxJ7K=SMh$#*YEz^}V(IIBe3y1`IFw&G`3;nCBL1~X7dx zj?oUlsBEcU?lG10O^Eku{eAK(9v@x9!OD(NEE zNA0IFr2PyIrtydLjbL(rs-%njfz&VGOaE*9{Z9HAKNntUr;8lOioQP?|J?6a0i!XI zIAL-htEA7tJM)LyYW~#mV16(6wn}=h1PtPjBzBLaH#*!*lGM~|Xv0u=+vNB-&Q9GxS+>Sq}|MI=uD=XpzAU z&oaK3dv81Vd$+yrGleCi_DlV8KW^_jzyG@P{SI#b4r#v>jC}Odu71bA9>t%8`;txW z+a3F*&eOr;C-WxlmvQ+avYG9ddwFkqQh$GwPNLuPy`)dzjrl!A5z{{e4RCL-ev;qv zout%E^Lx4H_j@Pk?QaNzR2#4(iD zQkVAK5%J&!FuXFy{8ueeA^8IH% zslWf?bDP({i@$fr?~M=Z??3cf|M&WB5WI-Lw{wB7&1uAam=?G3Bi{*#*h4h;0z`V@ z@9FPL&Iit;ntO-Ds8U}2G7a6q0qM>M^gr-VhEw<#(Pv-%$KIpA|N5XRF8bxx|NjBH C+Aw$k literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAPreProgrammedGAM/libJAPreProgrammedGAM.so b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAPreProgrammedGAM/libJAPreProgrammedGAM.so new file mode 120000 index 0000000..3a956a5 --- /dev/null +++ b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAPreProgrammedGAM/libJAPreProgrammedGAM.so @@ -0,0 +1 @@ +JAPreProgrammedGAM.so \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.a b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.a new file mode 100644 index 0000000000000000000000000000000000000000..0eb595edbd604f8bf7f578b7509d13d00bb3fe39 GIT binary patch literal 283896 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 H81(-DbJ}tY literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.o b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JARTStateMachineGAM/JARTStateMachineGAM.o new file mode 100644 index 0000000000000000000000000000000000000000..9904d8a1ac888398a8c469ef5b5d74412bb3c1e3 GIT binary patch literal 283848 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
    nD`uW#OE5f*Nr!m zchtV}jITER=aYBP=L(EJZ{iP=ch=_$jlXE(kCGSYb4AA2nD`Uq#p{-y#Jcr=t%;8& zN4&irm}}zWOuTc%+v|kuOnicgcaG1Y+3SZdnfPWV-Z|p!b;XxWe6opmj%|&--nibx z_cHO$@!GK0Avc)#R1@zU$By>;g{pB&>UFuu*iA1254v(Wf<6MvK(+ruK`ubTK1 zVvOgR_&9QmC*JsLCO&~YNuNtJ{f0!Kcg~s19@khzAe2a{~ZQ@Um$KW}= z$mrJp12FGCnjD|!k1>vYj%yZ2j`(=v2TlJ8YN(+iDb8|i$#@$($$ZJ+U~K=1xbxUp4()XWYKt z?RCH3Ogy$pu2~hce)ci_Txq(3RV5e}))uV0@@?eDAW0Pc?qKiGRrW4C4D{IuWx*9++N2xY203~xIi~vt`5(dyjL2x z*B@>*zR<+?HEypb+-KZgH+al=w&`c3@x{jTj4v_%nQ@%ExTpU#ZqMJ(*Nw89uRTw1 zVtj?^zl-se#_utnV|<43RmO9SuQtBh`18iUHvXdVc-?up@vkvH(D+*8D~#tF|3BmF zjJMRCkn8^?<8zF^Z2TSL>y1~_otEoogYm14+w;V(#_jpwFyr>TZ=P{`es{pQJ&&uX zJ4-j7t!6w;jN9|F_Qvh`*I?uJJZp(@dp@RNyaOOTgs1+ zaorV%pGY^ZyQZ*b8`n*E*z=6*rZMb=#&wexb{u@T@#`ik?D4uR+?{SJ!k%PYUz%YL z8P}Ic*wc;cDjD`{<5wDwDlHG((}~98jbCRx$+$hP4jH${)#=9V zadozFdt9Ao+#XjK8n?&QQDy!ef5?n8-gtlGNyY~l4;de5Jl*&pCxE(P*73kfU(T#|U zb^kK;xw_=||7&f?SLkx>MZQ*j1UdfR&@A#VH6GUuFdlr4VLip;?-SvD0mS3{2iNoA zy>(-Dfo>d~cXdDX*3h_P{C$~gj88|fci+vpi^t#Z7)yS6Eop@7)h^ck!{6P&b!IsJ z?gp+8!}0eua9tOUzl#yA8+YgS{3yY=JwHk|ZqJWWjXx$s5C63rjJ zP5e>g^Nizqnj8P)#&I3Y`F!KJe&zfLYBPTh@vsqqBk%Zw)* zUv50r_zL40##b88F`i>Q-}oxyM~$yG9<2u-Zv4+1PcUxJkFGL4-HY#`ZBmS{G5w4+ zzSek_@m%BEjN9|3LgV(lsf->Zx$)ccrUc{mys5qM4JL1Q<8EH5`rKIK8%_Lt*$YKW^NfPsQp%o}1Tc=TpY*`BXRK_IzrraeF>B-}nwQp7qA_j2|-on(^bt zUpF4B2cvHMZy0Z4e5dhV#&;Q?V0^dnsm9&%8mrGOGrq^f=Nr#A{)6$o#(y>L`cK#A zVq@eNH?KF<++7pn`;2!pzTfy*<8K+CZ~SfJ>x~~Ue%N?{@xP7R^RF6u(C@}?&%at4 zx94AdjJr1Y{yqHNa%c9uESuuLxXcXd|KrytHUIq^61JNpeW1I?s99%4Mg8dg)5Ff< z`=Iv8KJ9;spnZx@`~OAIzL!sX_kRsaI{uJP`=29dkL{eT-?0eVr}^anC4%_q7^{0IVetJseOv_XLq6@h zMKJzUpZ0Yl$e-rZ{?Z8AkMn8YJ%aJ4`?PNyLH-P%_E$&HKGUcDH4(JW@@e10vyyKA zvwhk(k05`JPy3z`*AcFSkKJ6Pu&_2Vb z{S^_k&-7{ED1!D`KJBlJpnbMad-s|w>H44J(>@`B_PIXoFOQ)8W}o)6BWR!J(|%9{ z?el%wyLGCh^(*jcKP7_phke>li=cg>Py6W+v_I<8entfCi+tM8jG+AqpZ2pNXdk8T zf7|o_J`rsHqJ7%;ji7yuPx}=Sj6cq&z1t>~bp4C>Y5zQ zPx}QCv`_MBe`f^CFWIO4a}nfE@oB#(g7&?9+V_iK{2`zAizCRN>eGH@1ntv&+Pi&9 zN!QypnaB4`?V3Y&-Q8W_Q@r!e~wT4brH1B z^=Ti9VEx_f)4qQM?el!vua98-`9AG8M9{v#r~Re~+8_35|4Iby3w_#eiJ<*apY~fL zXkX;hep>|XPx!Q78bN!k=yv~qeFW{J^@U>FH;bTsj8FU85wwrH;k<9ymb7D4-TpZ0SjXrJNJ-hIARx%fWbyGY^fmZJ3I zwC<8c_?D@G_?}3(*TreKi@ZlJH0d<;{@>>?iOi@cPq@#o%=CW6_9#x{-P10=ZZ1{5 zzdg~g_}9~Zak2L1!d#!+K3m)8QG0-&!YOZ|GI?j-Dl_g+833u{Z|3)|0-eoXfL^6{<2p{$<9>2D+1b| zTf+A4JypN_HA>k2{($zEm9YJSfcA|`*#5PE_N_|T{+odI$t7%G!Fxe?UHs?u(^cEY z$YL!1>0<3IF`)gx61MLi(0)t_$M4<~@EiX_+P;z?sMs!|IUE?F^wdp{Xbn! zIRCtW_Vu)V1L>ytC)a;=!1yzK#-HQ$!sFi+kiWC$A5olHe&PJ?Jkzg!n>Bw(+q>oG zK3~uIj|b#`Rr9<3tG#jkF7T53E&n2IpK2R>zjOQR1KRh}9e0g0v~TXU_nUv*JjrBV ze`~zHc>Y5J@{iU0*PJ2$fPnmon%};Da((j83CO=%^XuVP@hG@{GXnC5eDb^hpTP5f zDIkA==0ENKR(kC@|NjNFKcemRE^z!u0>+=|Gk*8~B6$4e&-P#cVzuzu#hK+79{<^1 zdv6F)Nfejoli&S+3eJCJK>qcbzdQBI`RfPdFVg(U+TOi>-T%+v{G9{xm)95Wnew*} z$lvU78L7?h{=Wz3PYcK&(){P0Vg5@3+K<-u_Wz=~uDE^+1IC}O1_L6R(zr7yp|&{2S+A5Rm`q ze2KK{kNbZ+T)({m`8#U<-e<_aGa!G|6Ouoq?cMy{{{!Ou(dYOtzZ}i4yW!$d@cc`A z?fvQ>()@P)-RG0PNkIPhHUF7jKUW6i&-BUvmQVhk0r@L7ktx?Jp1J(O^Y0RnKhG!s z0iXQi1M)Z4{AW6Txi=txk>G9o+w_q;B7{r_J;{stw?|6M@-c%S?q_~dur zzvgPf*PpJ{{1-?WihpwbYJ2VdUVqJe@_*=)zh6N94kgTgdqDmapZp*DF8Kiwz)=RWz*Dd)fZ$7}v-UK@Mks~l2x{9pOxzds=VvJ%#RbU^-mpZs6@`}@65{+|na_~if5C;yy){J)eizx%#KzxgNm6apApdQe{}Ln)$UiI~f3{El-+l5g3CKT8^Lynz?Z(Gh9|g1@tL@Kp{q((n@o(1g z+vE2?ea2t0qW|(+qWRA~ZS?;=PP`$Y{rVD)zopmSZ}}hf8UH^%;~y80|H~5Q9}|#2 z&VAU?yV?4k^2xt8Ab(7YaP#87H!qL=Tffx-`I9w2_Ve!i?=0^hum67rmg;OIH790`iaZ$$ySd{_g_v zPtg2ls{eVF{p-J_gzc{nXn#W6cRa)LZ|=4CtAD1?{44m(e{?|pTXfPm-6#LO0r@-J7;b*X{AmIC3l{!2e+{4fy94r{x=Hds zD|f{|y)I6>y%vx^%e^u0-R$ze*eCy=0r{V4BWae(UGY!O|7$@0nC$=NkN3&n$UDGt zee&^h>zgIzfa1*Zi}d<0UhcK`TmBiEKT|{9>#w#?{(A!QXKVf&{!JDBjq~3XkU!3S z*x$P)hkr(ezyGMNPyRIl`M=csXS#m7Dj-Wx2gPhS3YG=I`*+5Y?bzr<_rxBPQ_=3n0@|Db^U1522{UqJrD zKKUE^;c>OP5)qnXFX!|QpYyIEj z|FgaJe#I%FZXR`q+!gl27adcza5Z2dij6r-^M5ZW!?o!S5vP4X3c-5 z`q%c_`_(^P^V|C0;*)n)jWd2EVSNzkB)!yz8$X}@W?e;s_C%^kU5q|UUrunb2 z$-Lir|Fa<=f6NMrwE5fmU=1-7m6#tAb{!M;ye_zEff4t@oX}rttzQ2X@9}UQ#t@-mQUpzhjDj`T%{Py}w$S42Z0r^8IlHg49PYuYw+5Km6?-mOGl=%JRG9|VlQK-+t($7#2i(;j)>^&Bw%xEEzW$r|t0pTR!kuUXxH{fX)<4VzKE zczPV?wf9?pLYhCM@h<;RpZsk!Ki4lw^Lx9;({4QfApz|}+TJ_8IPJ#mX9UbYUE6a! zKb{&e|2&<4qGosVAMP{%mjm)=mN5UCfc!;1`S140|C#3J`e$o?@9EQSJpXdu1s<>4 z|6IS%E8+OdcGg95#vjgResq!F;|;lA`Eiec z@u%qc?dxxh&-lk^e%}AaYkqwjs(2K%nTfh5Ab*xm{qFV2|GL+{ve$d*;tcXjNb_TR zkEi+Z_JI8PnjiId>%aTIf@lwa+iUNP_g|?c%wN04|6ltIue~>{|J;zj|B}<6;@HVv zd%yL!Q0HG*T3WdIKj{7A`Ogo?zxTN0eF6=17@U7)K>IuYkp}MbsrJV0mjsMI?2WfMDCFv_upxIUjO4aN(3$b;`Il;ejPCW ztgobgc%8ZWP4)hvKX}EOvi|e<6EuG#B+`3~8~4?;J%vT}(Dv+T2d}T~dArt2+iyM> zk#djmLofB(`@Q~hb^ckEB+|`)y7v$5F@M)RZ~I(}7(MW8;q`BCJbw3>$L``&zLv3ij{_<1|daeWoAZY zX3Oo;a?O@oxFlxYqHc?&6_(kcmSkq!viN<^dCoiY%rHZCfA{nM{6GJHQ}3MT`#tB` z&Uv=?of)~^K53lQV(~NN90Wf;*$l+g_Dy^Wr18{pJ5PDCG2 zoGA^%#st+7NU6^lLfTY9WN1qTLtBep@=+@&U&QB%kNDii38$21Mu-ejW`;i`UHhqG zFS56y(I@pHTYANPlRKZ%K`%0FBs0X&lxDu`kdOPPvi;$Eh*-o+eZKsnoCaelT)M-3 z>j0VpIeyA?W8b?+7c@T=`L~a!ciZ;m;d>J*3(`hW6@|El;G+6k;3_J3)UvA2rK>wl zOGq$wb-eV-R-pxmk#&@%UHm;v^|CW5-m=+z>JUYaY)~Rhsm7g)G(y-aa8cFLy){i#!&s;UCb35ye z{#_8LxM--SYFGT}(vgKIsm`*7WlYa^~rxXjl>NIZ<|5nPX& zB;;d~-U_)*(oaD?jq5qV6_77T`en$SxL(EehH$$e_u$$qxC-)ZTn7Zd1Nkpp@8YV) z^**i-aD9x+e0_q%rvhkNACdHzkTtlz#&rzWH@J@DqSpyrr*Zv&>$SxzBfB3S_x)Yj z(?6n z;K9TteP1d4p-rd#&pz^AA8VT-ulR)x+4R86V>6z9adO9^e#>vzF!R_w6YqTO+ucVO zzO#90-{I4ytxJ4hQ0?ZL?H?8_9)In11Al((k?B2#ulTXk_S1tpOtc=j`=wz2%AM_g zIsN>B!s6OK={JJ1;gzf0j^B-Rq^l|MX+j|?PR2EDbw0dlfap>DLPv7h~;^`s}ie(`TN1n%GRdS1}l3Afgy`NDVEUr+9{YTeaW1@!vx=XbWeGxNzChX2+pF?hu{U*0uz_1K?oKe(lJ`nff& zzSy_uWJ}wlFU2Ll{7O*R)Z+QAQ z-`Hi)>;)ek+uo;grM2{dN4HgnM*jSI&ObU&dFIjgUj2IgZ8z;c*L>jHdrqJD_vtpb zTkSpKcg~-D>%M&ZzIL5Dya=$6tT`i``jO z-#q*1$kU5U>hu1-FzCcB8)lUIS6*!S_SVvVtJVc>o%Q2Y@i+Fpb?PH)@A{!|`oPr( zw`@Q;y)1jKxM$5rLpy&N)&E?;8^Z^Ux@E(4!~8QY|7z^Eht}7<@Kn0(J%5Zr+xPyZ z*zw*LUFOPfX#fw(m_K!BdgjQ4>u^GpoxFWfFX!Mq~*M^V#*F^tVnif7^enxYn zZjQTpRtvROyR+bez4I+P8%8@%W8eo{dbhVgXY*p8?1OKO&E8x2ue9-A{std>W-ssd z^*-AFMsM%-IX?W*%}4v|eboDkpZD^=@KJA+kMhglpAawpj0cCR8@+Bs`E47qhVgeF zei-DVJy-jP?{Ce$x2N@`-uV$e{BySt|HNG4eLO5dr@Z-Lst^8sAAAPRf8NS@8})kg z+w(rk3HH&ibr>k#%8&C=uieLZ?&HJ$jE{DH;iEkPUA+4g`eDA1efDNWOcDOcu8Q9;2dpcF|4Hf{AoZeHeyze`oXW|U z@;eEiEA@64-fZW1EW~6#=N@Hf@@2?Ke7{YKH|zburua~t$ zM_j0!;rA*`XI^@}E%se96ker-u>kX(?6cP^;tJu(f9<^NQ}0T@21vgy68l$LtM)|Y zD8l4B_fX|W&>^CEx)UT7mcNTkxjFW7-Il${tC5(5QDf>zp&y$63jsZ{Q?2&f% z6#fuw7X`iN7;Ki!m znNKJjriAg6w7<>6invbrNbIxJ&T~?ZY5$t|$6xC0Blb%XXtIAu%8wSlRXfFRqMI$e z%z4)v4k7#J{^rjAEcHH1H)(hwJHLL%IgRXBNI7P|hWVJkKcW1dMhBzvh>i2pd4gUe zFhQuC_T>zX7c5F{3{-r#`xPFjgfUY3`=-Y@S%meL)`2f%UYp~23MOz{qq7nHjg3oC z@3^m%_9saDO@HRVfZ7xP44WHmq&*I)x1ad=N~Jcgk?|ZV5N4f3)}q&F0sYGGFqxDIBeYaT^90#l>^I9V_GWu*dkc zh@T&kewpQ`V&GA~DkNU!x_a-$iuatSZ;StzKCT)f;W4h3`E{p^t25HhdE%dA;vcw$ zUu8c0_9y~D?YUg+&3SZ>j6;Wv!#Ip%dJU6y4t!E!)Bai+=ll=^s_9B?ye{=dY*B;^ zBja|lpK+h!P5Tpo)SlrUHN^y2$k_K#T%94&o9KEW_xzaK4pDISq_v8mtcZZ z`JU@!wd`LGR>#D0^Hb?;a4+eGo38OJ@HRr#SZ9!5zysWQ&fJo?o^=0&Bfhh{sw zi+_@2zLZNj$7P&*u2&~y{+{!gzink5>n8hMTPf#K3`iQ!J&F`zt~1Rg?oUYE0r|B< z>g^?dHrv@n{BTzIj$;1|0zu`!Am#TF{$==+*3YCPHfF+w-wa4`@r>7g;ggjUgk@f@Kh|-8|D$0&m}IN{+|GcP`?gkr~*(dzpUcV z%H;|t!e8`ShK4_#0%rVr0s*3aZIgLqj-Ldq8$52sKW2Lz z(w^blRep2bNQ6IWoOqt+*RelC8?9qk%D8$#0vjgn8H5Q%?eSdChse73gv>iLjyKA_ zb3o$WTFU7vU)&cXJ&|cPud|3zJMt;4I_)__v z>-N3k=PL2Dxz5*#e>~Uix264?9#G}pAmz`Kc~K(sB3k(6T~)n1JjUTQGT%MV;dfwO zP&+->;UsB~=Y8VSGS0h7`KXRx<9pM1Zf#V&pfHwkenrYYSSI6nmhj_ks$S1|ZIkiy zcZs7pf4>vI)q0H2R2e^>`~EB$Cm|l=%47#hHmYxyjkNiHSyHdS-gA zk(df$B*spgoH#!vJ7qz7PHsx}w8>*K7H6hROP-sNqIBLhiSzQ4set5+^jly!VM$`V zlrSbEIVUG2$4HzxW#ZJ_A-T)4Qcz#&;sKe-i&E@Mh@YApIUqA{QA&3Dyu^(3Md`UY zvB~zU7o}%5sZP%KsZMJ;H>sP*ozrw~Qa6!1x9QxZZX$Pj)456AMDB%6=O%R%x$~RO zP3k6cFKaqCshh~1+O&GUrXDzXRQ$A*$RX1(lE$PZXD83YIK^O1pO+JxYLA+no;f2q zBTt4_Q^xas7!R~(XD`m4oSd1wAZ1ZXX6_KiTwQT$ZiYi*(ifz~r{pZo z$jeP%oH;EWV|`E@TD^F_8pEo<{zK+r{>;rz&P|!`C5N5okZJ10V2tEmoIPZGN^axw zBfYg_@R-GUneZSQGB0ECyqgjiq~zwJfm%N!slki$a>WJl6LlxJDI@JoDEmXX%vZ6L zQ&(Pn?c9Ya^KwV$rDtF@8q=TsG;N0IdUrK@MuOt5855~HIMQ7?R+TzGBaW9LuLX>4 zvVaIx`b4i;2Xf=>aZ{!y4va}j&WhEVIe1j&GI6I~_W9FT{g#? znP)&OmTSFRroz3mPL}*WH3G{#R$$doQx!QVHfL&XGN#VhlzAD+*(q+r(X>Lb&H~)? zBP{XSSkNsXHACUAnF~^47g7!w47A&mr^Ys2tlhq38i!Ry z#jTJi6cWK@r2UaulvlIJ2()SR;>8&$$(huu$U$Ug*Baf(Vz8%$TZ^b$k*co$zFYmt zH<8?6--VEOJv!~#*8T`f)4l0Gz|+F5Hv_04sy7Qg>uNkiXa@Oi?;i{inY2-{*ZLln zSZip&rp(90Nl9K5J18zYJu^4e9yf6w*KAHrw|U}`CvpI1QsWz25M_>|W_!!rUsZ(n z^vnfb=1Knu-N0=6kZCE|IM-o=)92I>T7yzj^D-LEbC*VIxQldOoHbsiw3-(#UbYe0 zL^NJjh{z!maJJyqOirGcmY$h1e$-_5Ojo;@X*0aq)2#NYFqdbqN?GBgX;h2Jcr~A& zVON`$SFQMET3Y6iL5bcQ<1!gM_z!G+6rgI8KyXIVcbh| z*Qrq$>3Ld=jEqmoTAZEBr%PTRA`)FkO`3dD2PWeGxQR>fo`cKh$cn^tPszgmJtZYS zmxnKBkE9$3kZ}9dJDT@--(NrHCkx`ATrp0<)IwsAW~X5cYSYWlon+^)y+qGO&HFU;8e z-qiaoB<@7U^pC}DhJLq)y)GFy$Y_i6W)pX5Foo4Lb+>OWH(u{csnAGQq2?axvjy{( zq`9rc-VJdpbD>S8yPgYcDix|VwaISb-tR&iK(~n()&MHBaRV9!U?FY%KK+6lMsHpI zGo?_A)x!hNb~i4?$6#n|h{qAQk9B%t{0!$l^hobbxsV7~tj^ABPx> zI+}A@BePTRJSK-4`R58!2Td*rD@Hzj+@qD6JQw#NTA5yt0$6A9v=HZQ_osy3AH*-T zM_xTWhdwpJQzXwLzV|F?e?AMgSobD1y^3M_UHB>%8JkX%;*Y%2^pyABrKVenNq%9i zRIAeeWh-e(@!m>VW-oA{dOo1Puxyxt&Vk(c=o&c)H=Azr1h=*1aQDafdLb89t@&u> zPj%6JPAr*x%#p#dIpZ=GC%ZkL_debi+P&KP+&{3bdB(cYVxE@neUtIp*gqJ$UR(Fy z6yz~SFJSw=pnlTG_1p&kWb=6N|1bK<1$pnM*CwSmIpus0fk=G9>Aom=w?%t!VDYr| z(Uc2!0PcU>*V`szNyoPSjT+H-%%*xDv%Y(FfrVc107-2!8eYAY>V5M1uyyy^wAeql zck}vY?im-hz$@6{Z!&gz9pI3ToN&kr0953zTPgBKNQX!6g_zH`D z^P-xL&1DSwg-53R>@dPv+O$~OWh6IN8MMS1GuMX(p!o=ug-psttF*!!R;2amga@mQ%ex z_0qdW{^LT;7Q1<6rbnY92cv;rT4ZMS?kK0WiOs&zr{!~V^gC8h-va9TIcWC@}jlW6bZSs9mYLCvx_~7%k_UQH%TKU&#cD`yf9s|$$a%jByn=De+Y5WyVYs0A5_z;aZH2*j>K1k!A z)%XyNpP=#K8h=XTBQ*XQjgQj!EgB!E@sDVHg2pe__#}#;0lJzoPNwKKLw+m#>m@u6&K3rQIq8b4ICkJ9*c z8Xv9kOEo@5<8w7WPU9ca_ymm~rSVA`KU?F|G(JV+vo!t_jnCKkTQ$Bwqn?uOKr8lS1z@7H+!E~r}L12p?X z8egUHH5#waYlp_atJ&9Se2~W1YrOfJAXXo>v7m9go>S^A=%|eo#82jwdJ8#f;{@@$ zIHle~kJ>mvy!l%*B5X%(B=GM&s(+J?0p7xo+Bix4?VM6?5l3yDApS8AU>5->aF0YjT6MT;*@$TI%?wt@vS+f-pY>J zI6-_Jr_|fVqc%9u#JA&=daFNb;{@^YQ$WVXS1vwBG5j8+@yj$mMB^XO_)v|< zPvo30o5t(=RJg{!?6k)EukjaYe3ZtQYJ9ZD&(io9jel6<<1~Jp#wTd}9F0%X__-RN zrt#x7K1<`j)%bjkAFlBQ8sAyti!^?-#+PaQ7>(bk@kcejT;pHV`0X0sMdK?pewxPb z)c6e=U#an3HGaRwzo+rl8t-oxv;jW>?j7}5BDP~(F%euTz{X#ATRAFA<%8gJA1gBl;M@qINuLgPQx_$ZBkLgS+~ ze!9lTX#86mAE)v2H9kS(4{3ao#$T!NX&V2i#%F2#RT`hK@evwdpz$ARe38cY*Z4Ax z|4QRGYW&q2U#{_+G=96rkJk7KjUS-#J2ify##d_mcN)K6<8RUUYK{M1;}2N}Cb0rZP9c@r=bV zVhZ;L?NLSz1J6L!aOqjR2lt3ZiZI_1*VZ)Pb?FJh$Yj)3GyaOOm2f5F&j|Ywu3-ED zVSmEqj1LeFAY8_HH{n3S1&m)MOx>x?V*CPOx)rKTV*E7W=7i%IKSr2t5o)6uZz9~1 za0KJ^gz0ErYh!#TVLFo6hA>`5xD8>0@hyad3D^A&;?iuwA%trfFCf$~cO+cKcr@WogbNrCB}_-h+APNX35OC+V%&!?9kpuX z822JfN1)nh#$5>0QKmM6aXZ4@2-_I9Abc_55XM%*-3c3ve<=W_qepGsZ`A)Ygl&Xt z7@r{AlW;ZTuL$=dT*>$|!j}-PVEh5$-h|5;A0T`w;WEa%35O9bVEig!+8S%K7{5T6 zwz%3P#!nNbEvYt+@neMPQDAK}<4uIGARNJXJz-j+Yi*40BuqUT7~eve zmcH7$^BjM|wB*&+FkVPFl5jQSxrAwntF2@_lQ1n|wH1ux3DZ(kTh4d_VVd%_WsFA? z9z?i+@le7vm20yY_a{tKxHgG#AHsB$tc_#bi||mw(Tuwg9!5BVaXZ3vWUsX`Zb6u~ z#M%(XR>Id1HW>eMJMc)tb-!}_2}cvIVSIw{D8ki@zamUaaBU^y&j^npT*3GQ!ea@S zGd@7rPPmNmZo=aT7chR6@OZ*mj9(xeLpX`?(}ZIQ$1#44@C3rqj5iUcCB8O-@p{6O z2-_InNq92h5XP$rPa$kDzJ>6$gzJ9c_!EvJT*G)F;p+%jGoDL0o^U1OnS`eju3#Kb zcpBky#uErnCtSvOG~pS93m6Y2Oh=;HEXMr_ClF3z+=uWDgyR_ZB0Q6DG~+IWXAzEI z+>Y>U!ZyY&2+tuL!q`gqM#2W;UseDo60Z9X$DeQ#;Tpy#2qzP+X8aZ5xr8eje@1v7 z;R?nd5S~xCobds|DTK=y?BmlDom+@Ekh;Uva=2rnZX$G8_^I-=A@ zGwwq8R>BdC+YzQ)x>_6K7KE1*4q%R|(%iIE(QMgo_9#F@BnGG2uAI zj}g9;a5Uphgi8oVFkVl19bp^eI|-K(4q?2C@Lhxr#G#F{J@PAYw{K{BoPkm>zR^ zeN6E;F@^PQmRjfR!NGCbQgv`VGpC`3&WEsnABM0$pxN)L_lqgs9kc7i$QVm?%=`6u zoVnvwocV*?Gjn2!_ceS)`3puoh#NR29szsYTd@*ca{W;jYQB^_x9!<>Bq zSunKxxQBA3_6zPoL(0I>bwnHtjodIa?tvw$ab2b(|4`5F=K?tg*y2-%b4P)Zp;yGrG-s5afO!4yim=ZgDUgd~KHJlCz@_wX=!{&OmPU?lyvlCW_=L~ zjVX>x685`1vRhxlY#A4X;;RZmP$a#`tg3+i(RLT=0G-9D>*i)@b3?t|P`Dck)lf`T zL4-Su(jb(mzq*-f4Q!(|C18v@jB|$x?l8$6rn$o`cbM-E3*2FmJKX3F%iZC2cUa*L zce=w$cevjjR%>uy!2pU4g=t^GKv!~*D>>Mej53q(S~#VhS%;aLeFei^$q}yPHLm1H zO1{0voFmRLS<>;592!mfs4Hd0bJQ(WtjDN}aSr5*%%P1z-SWqVhMm+<+>N&4Q44Yh z$hY^z6rN71&BJ_+S$R4LPN_}T=dQC|u;2HS%nYP&appbwp=3Py4$rWuF)L4P$H&3p2Ct@-8H?x>thLve z#i9+77+BMwDpy!Keo6orufsC(t#tnF;$M!aO(xRAXK@a+~orQI(7jw zP8T#+<@#{JV4FSyOqJsl*4ztn0j-lLzS`vi%V~B2Gfo!_Qsw$^!6VnO3#v62 zT%p2U4i}Uw7nG9=_R@$iw(FLom?9U{=`MJh2BUKnRErueSUJk&0y;0k1(%_IrwbnB z##A|KF^n$A1vcdZdW<3y;rH*@1@d7wn?# zu-L9!Uc(f*fS&a@C&H677@aQIFKW181rJCy5$H$@7xYH`P8aOs##A|uV;EhK3us3~ z@$}?LT=45Db^$X^7u==F_2GgChqDVRH5Xi}!d(UzlqnaKkqh3S8D4DHEr&5hE{M}z zu$2a*(*>2Hh6`@x0jXR-r*62QC+c^);74vumE&s+Bjti0VTGpoS`NdN3zA$es6WXr zV8-c!*HpQlE}(-jmc#ppu?u!;F6gDgT?7{tDHjxx3tpocUToJbqnLsV>;=vtu=RVr z|2s)X@#mqaI#0I*6o1t0?0lGX{x}8@t=Tav_tFM3YmV9->9kgyhedO`V<%_>CuFr# zovfkVllL1db>yFEc(g=)fhZ}Ur>BMWt%EmII=7hdpq%;))`uv)wpCnAMx~`8w8UVY zLs_rxCwCRUOOD9qdCpbDl$KE$Fyfh~Hl^$nl;(c1`HZXfl=F$Bc6*WwX<9{&JAg8JCIhur`$bIhaGk zi?*~jR>i<`hx>{uk>y=16Pco+l%$7dKMh{zP{Q(V4kfZegz7m0Dnie~!I8i9IhANR&T`cD^MXP$5b5(zr#+ozoSk)!+_A-Rs!UIx;{S_7V@o0c6>><1_ zIm3Q4InEXKUMRcJzSk9YT2hDE_Xgk5!x{GPX|Gehc6xXd^{C`NUMPxJMQIl1NXU1y zh|nysS@2ky;bsx7Ss=+41KccPGz-3wgYVn9S;T1;0a8XCFTrL@6EurJv3S?bB1yBr z-8#49SvQL`%_2xF?sT)r(kz;bMVgyMzGl%vEXKK66lfML#iF;HMUiIFN-V5y7G;_R z47e|qyu_RS*r-{Uk=x>CQLb5-k-N>!V!LL6B-b+2&7wlHFe4Y`X0cPVFeBH=&7xAX zFe7)C#7X(;Vl=DJ$t%CNanh7(^k&Tzjg!%dU{$50G7 z97D|~hc-M7am19^9VPr|Z%t)hEFm;K0!=TWhX+v6lZqj`gV)@N2#Y$(sV**~$ACnu z$AdKHYw6F^sk|XDEUdQ#ujwvUC_9TXwGp<;g{~?**aB-E`Tlua5!PbAHT)VnnVk*5aJBeUma*npy} zMA03Bj0PV8jB_;`^65>D>kFEGXw80P^fFCp zX1fL+<{foWt$4iO%1l(uU~Mug=2EW%D2igoF)c2$p}g9YG62julp8b)SCu6NRORKnsbx4UAdRhdgt%{`TS0Dmerch&e=xJN~0 zLtOdQv2Z$;)Acm-gLizO&IYJkod;P(8GintDCFc)s#a@3@QxxX-Mujb8a1ZQQfWbh zbe?Ln><8btO&odn(KgI{~&NF8SeFEpW=`ej%Cm$B7V`y<+O-z-&o||5{ zyaxZC1X@-TQz9Ro!G+Tu#qZ<2hMru0(ol^%{rZy~sQG*sjdQder4s9C#fd6MZ<6>F z)T63WY!fiw25phO!STgslU2COWn;$!}_;^nUw=j|+9{yL7YhjIV2a`{d?*ffII z&|gP(eEJDx3W%SL?;AY)1*fM_+VVN4Cs6t=l^#dwbl4XMjG^Sapo;^BQ!11VY0 z2K^|x2+7pqfG|qmgGM3UjnW@|#OZdFehOX%A4KUn)RBOOSx9ChYf->Yl>CH~Cn>r4 zQ(})&lFIurxUIbc9}E@;yhqdlY3lxu%Wd<5oW#5a(KX^7`->WnakS3lr`+rlK{Yq0xnkd#B#8VQ=b5LmtNz)w~ z42^232!W@H@=5jLhpa+tIT!AxNVSMm8NgMo5gPpY|4sfRM9 zBW4is!@oiBUQjw>91%4{@S&%4#2_NxBLZ^<&yYui5%C5Qm=Q#DBI0jE1Sleqh|NUs zO?T;tb2CAd5P@MuS&kEN3lV%vT{_}pBGQTAJLu98`-n&&f^V2hN9-VCJP~|fS~_AI z5raUWy!$A906q-fQTYlLS-jiqVF9VG!l;7TLP|d_W;QpoS)>Y5W@9LQo0vtrnGGV< zQSxo+h;EdgE@lO8W^GCJsxtfW2BiCm8LYInog&q}%IqMen~9lw7ph2=q0F{Xx(4lR z+|$QMWmje^DE*3<(Z}8{hb$*mcV(79>GfXCSoO1VZv>g$BxW|Z(yk^|wK8i#>9JnT z+K}ogW%gA9(ie+av|DMlq*|rSUZ?aqw3B-3Znl?HvtY)HF*dc}m+`s7hgw?W#P=n0@~hMQMxyW2%w-BJB>uM#Jk75nI#n}ASu~bM5dSXBkq)8sXlXO)U5yAO z)su}%J#;N=R=3k#$f#rjb@Db2}ODP_)u?PUF< zD)b1Yn^j{zkp&Uz6Y-YT^mmAONo)FRL_7|nYHaUN$^}W2 z5AF?E4_!?0*xo@%7jW9YxA$n_1Fdv2C>@bO%YQFyRc z+InaYD2nkh)W89hDhW6uCeI?9(vSQZC_Q*niR)8ymXH)xN4lYHkm^D`Y>_>f|L z!>%McD0qi4yiZ;mY>f3WfcRpM}U2!_>5&|1mhkeqM2A-qW|!=?dRV zwAYJ*z76>ZVhZEdKf}kt*YBdk#rYEZd9w)T*(=2H)nM!vvg2-&~Yp z&2Kfr-^F=nNmVlaY;lOIHUx3}WEJO&-c!dB&l2QR8G=(p9d`CNX(x7U!YYE|>gb!9 zmDGlGv;kki+)s4~slJ1m0EOFkFvqiHQ{TZfKha0|d`ni(w+Qtm25zm>s~wnTs*`a+ z<~dl)5u>u;>z6W$AURgwQobR(m+<%7stgLz$#5=+hTSfQU(BoT{XF&SCmz~si~0Gh znBr=1{uu4(kkez%aoh3JiSU~G7M|u!m;M!(o=1-U#k$Ymp@Xsc)Hp={4&7JpvtJQG zeE*Kkobv_Wap027K4Yvna~4(xsg(oS-lKWQgP_VW4{NSxP4ry}QtNphQhA`DTVT{q zqAqwx9G;BX>x-1Yy+U2^%ke>}%C#5_RgSrDQ)ScZi$>FJ5anp8a*(JiiDPFMvjF14 zi&+5Cy+(a;TnE>P=KgqV->(?yWKC7xjd99pG)KO9yDz#04~gKHJGQ;fW>5n!q}NYq zr4DJb)ID+TrAnNGcSMIu^o7|M-I7~U72S&W3$(c^I>eRiU?%rPhte%zeM}XmlN!)k zFGfmz-eO(SaYU?h>@^x&D-jUSzKi3+w1F{`&75P4EJ~tX>q3MXiQ@fZi{C5Bvz1H^ zFPeU;$nF?hWIq;Nw7e#|DDOzoc8I|K}MjK;F=TxAkjdY(={G}t4hEC}i8}`K?Wka0B)O1))E{7#@ z^0$Mgp+?yo8_$0FMl0%#*e4wpTnFqiLpWL;$B*|t3T}mqe2jt!bD*QHX>8^`3Ob%1 z=PXx^ZO3v%MUrRG8rOQ~_;EiPi_M1o?rNlCGxfoZc65e2rHmB_gjU9zFvjMFElw-p zRd`A#9nGB;JDx+OTK?NH(o&1BwbC4uU6}&E6iq6zpG9gid6gDbs~JP*dV}+f+sM)K z4|e7+rD5ilU&gm)-P~#Y2pa5ZZA04}nBw2UBj2J$&mejT$F7v~ooU5s)6;$)A$OF7 z(9ZfpPkyAPp5v7mEpb*6Lc&4)tShpgEm(fm$n8jD1sU-)&S);X>&f;)HZ=U+z@_n) zt9t4qx7Azj-x}pEJmuM!FX3I)mv(4GH$(5s*DAlmcV8Npx7g{Mjwmn5t-MG6usk2V zEAZC4+Z*-HM{dL7#j_2+dwN#-Qk-|J#C{A>o~|YxqTG$5T&H`cA^4A?Y?g*dAH%Sr z0$;*}gR6Hopfp!ubo6SXFmrr!+-TgGrKPIU(7d3X28wi**nlGcsKimzrsA-hJsOJ} zo`J5Z3|>>n`)T5g1^wco>ksR!~ zcANxGpA3feQ2VJR&4hqBjomF=?);n${C4M3;4(yRXf(g`{?7BXpOUvW6aWS;L`Bv0*Eiv0c-{uMTklp zs!F4g6}*}j8+FGaI?g{=uh#U5}Y_o?O&=!?V{Zeh#K_-)aW98_L_ScEs6G1CwrKAi=gDz z98(5?%Af=eEZiHVjd>NZbeI>}&4`_(inVyqcyW(dx<^dKLW|gCuyBu9N6O?l5@0(ZFtQUvF)m~CL^{QHh(%|4X<;fHo`^DMmZza zUmB%Ftl?Ex#M-Myd5_q+3yl~rqdT$KxdJv6tGpgCT1DLhw$me|Vu65RS;WY3R8bLo z9F-8xeuY4X@w}vy8ty0C2*zNd;jadh`vO{DWIy8Qsx_{g<6$6aTmbgc9#{k#HLtU) zdG0o7ASMpC&<;{6*5jU^1pAH)H=D5 zx;sKKmtfx7wbSCcr3t*2D(Tf79wmK;qt*&KYJKNAYJHbOM=c^C zJdawTSoXiibK`&pe5y%9`&)#SI7+_*NAON@+PSxfBg#;pCiSyWW8=H8Qk!=?vtPq_ z!{_JdCQiYZlR27;e8}TK@vrgIEGc9G3gIANfD*s@@X3~|50{bcaOCnRn%CS9QHCo% zYhmT){Kf~bLJSpeCZ6$`s5ZL!|M2iC9bo@ld@QP@E}kX*_wh-@2ZQ94pHZY4pNYH& zvVY0r>|eOkj89*vn~2ZFJb^vpvmN=};`6QV_-sb`T6}29b!^0~y*?|$k)2ls=dsi4 zdS%|d@tRGKN%&I->d*ryfK~x}9eos1=U7Su(A!fAw_M2{xgvqhT(p8|)86q7#wiay z?GA|wJL0$r8rML(*mD#$UI@CNac%=mOfb-X4DQQ!Nz{uY!PmbX+;3O*SVt^sz>09@ z1#QH2#WaO^pGufcJ`&t-|B{=Cp$R>gOQE}`1e3ZJ3Ae@J8pm0z3Mlkpz0iwb_8k=( z+|PbwNf$y?U|T7$$u%Ned1DTWb$KHg9(C(#<7w9l1I(L=Pj3uU4L|n$|I!=BF=611 zyY)i>B;=?fO5WE;~nZ^~S} zG}G%Jotl@GW#*ffmSS_}jkM*Y;ji1<=BC)_FKpp&V5iJC7Nsr8%1KOHvY7tuC4=l; zj5qsa&05);j4$h)rK)VRe6lCboBdq3(pC8;=gZ!+e6sgd{?wEuDVes#dAV76xwahq zW!&V999Oyc3&{A3dGl?T&Nuxx1=yCJ*_1V#(jVDP&ahqTrLg22TV8r*?$!N`Nc`n5 zFMlLV>Kb6yiNE52-?FM#Gz))&Bn>!{^hd?|El6Hu^qZf(#JI``xs3iYltB-~jQzOi zMYi z^h+SR==VN!(YL4QqVFZp)mE-{kaV?|s{8Mni|jW@7#&XQbz(gijt7KP_eG(5boEdGql1+*9V$-%^YXyWA|y zi~QsA@uv;*vcjnhe52rYhypLgxN#}}`qwCBQ!|ES!Rme{9{I0>2S+HKdjGS3rqKJ} z6Lgg*<>`M!(4|DmtgrFkmUM5A=U)o6boCpSfk3Z=S%m|t9}9o+X`$c8zI|a zFWL#Y0rC*!!;p25PeTS_Fjhl`Lw*d24`YoQ$OOm;oc;?S$3vDw#z7u}+=++1G=7o4ss!67UX@9WsueyX9pnzk5G)oQzD9n?36OD+S&&(ft02oD zbB`fE;8^p;&xAhKzzd z3Yh?T3Njzkavbr4>;$_Sqa(x$A*R)$bOKta7RPhAQwSK zLp}$Y1X&4L0QntcIpmdRksmS&vIcStBrWy>enNX8iy-45zlO|*{O}y|L5BZ~_Cgjy z)vRa4GmWjF{(|-TI-nBfeTR(AnE7h8U{U<8kc^YOTQX)SQGlK(6?hWv^1nY0L02`Q?+tyACdwZReGBNZgt*F&ag{$G`ky~(XyCDCj*n|y`qj{%gub($ zf0|3b75Zb)_tEt!F8yBUzlZ)xU7zOCAA|lp^cecC_Fd=F`{Mw32Kp;>eX2{}8~Wd% z&(QVO1#H0MANmRCf26L@aOIy5{cPydbiH++GyiJnw?a>4Ip@#yuKZh}FNc1huFrDm z_d>q|`Y>Ie?9v~D{&ncF^tj5O;?n#3`by}__59X{xB%`y^wF4~)7|uO zPW^o7mo%YY4gIswV`+7@Z?da>TcO_q{Ty9yO>maK7y2X6`|{5*=+8j!%Rl}&Yt%PU ze{bkdK!3)q{_mXikA?pA&l(!K>-rm1`+I|%5B;mq-=OR5g??6<14NS_*TL=-?E2|; z=`KG!3;i$9`|9UG=tBC$x4Gk9|?X-(m zCRF|a=pTVz?+5z~I?F9_lXxd>_Rxqho6%L@PpJ)A$hQFdssA3l>1~+Vf-9hMHlX~9 zHyRoeY2P(%{FDLJ{}S}4_cyNpAov>azV_Ku&>w`}*E-M&8}^&f--J4x^;*?JNbTwi zeT%n!ufvm|Z)zXSfWE1HbRG1xk9zYv)&DH?k2Ik_2>t!g`|LmTE1S@_LO?U1@2K}* zEn_?``a+-FgnknAGnyzr1Nu=-=+{Bt7kZ!lhyIc#^ar8u(nR^Epbuz5-wNZcu8DoJ zFZ9Qo&`*N?2=qO4|IJkMhT@k2{bA^P>iXF({W{4H;TnH-m;PBO_94Hoef}WyA3~3# zy(|ADSN>CfkiQiM4(0b%eqZRnf<8_!->ME$)W1p4w}XHA!Gk$(^Ii34Kp)YBejW5v zp!Ze&v(VEy(U<-p^v^X>{we4WHlc5Y1^5K?Q{4I&%N^kP4}B>1!O3oVb)iAz0JQeeKAI1GHPZf_u?U+!8ne!?(BHbBDk8fLD946<=uy2K+Akkaz9gFLUWeU- z7hrb`cI~h){!w|YTH{MNuzLaLWoO$^uitiyvtp`u0PH&Ana3a5&4%40cn0wh^62GR z?{OB#{a6jVc6b)?xToEN?soHOUxVFT*!iFIcP~>Nhj^X(5asQM-6*}h+f-Q;r?b$X zfIdvuYv;udxR-t+=`f1R{6L`dsL*fZkX68=wz^-q$>S z3Hngzuhi?;&ifxie`yo-pM`#06XkcnvxulB${zr|y@~RtL7xIWrkg89+Wl@W^l?7) zJpQ2{2K^6uej5MZx{rs~Vdsx$Pt!c@Cb-*e#=aK;yIHXFe-no{bKX&zavwzXwhA$f zd9eGVdI!L+FP?4vQN10o-z30}>z(SoUK)?9QCJp??;7U+3Pv(C=Fhp!XFIe+)Fr4>MQ&a(_&I=?(o0(6{ki7yRAVg-Nj6h-Z3D*-?LUVYdR$_@a^a z*53`#Z-L%ddtZXS7)B68&;(6 zh8wbxRo>4-l%=7;5`Qz+^m{BHS-xm*)LHLAj5h^ba(4%#D&U0W*Y?J1%>n=pG8 zyFE~urrP&OnUV#9%~toVP^k!!14Wwp=+A6s^8Zt^yg|MGs8jXlFU;bBJUTuP2>)d`$T>$^0>%zA_J2ResvNV zCUTI-aUy4kOcl9A*KNfjhnK8JHsViwqMvNaQ$?Geo9} zTq1I<$ooZZ6S+g=K9L`bJTCH_$iP&oUu2lbK_bVAoFOt*#a-YbLMIIMM^Pj6nm1cc89{Lp?xYz@4@W77<4w3%+ z-2=brVShldd06>Gu(|o46l@+|{MW03`$+ly1oIaUz|9uSUn~aB7JP-+KP)&yaEp6Y zB2w^h!Dh_23N{Zzm4XL~{W-y5g1c={iS~jc1e@_q5?n5N<35#`E_j9qepYZh(Z3;B z&Ui+*`;}s#=;H;O?a3Ex=D$<$8L_|Z0hQ=3c#~lMVl23`g8PZS*G82v>q`)9*0(~i z>90+K&GGew2d)ro9`33<@E0ETwI2Aa;EvM1<`1fbiMtCn>%ZIs4-jnDKhXov^{`*$ zf%64-lKSuRz*`0P5d9v(Jp~^VY#x@s7i^B_Zkv>0Te0sa*woMVz;_Cc6Z_8uj}RRC zkV=?%hG5fvn+HDUVLxEAd;V;}Q>6S#!IK5Ic~~W`6PzTtT5!Y`m3UO}`yM#^5qEw2 za)tSeUP!(r8BM(Oaiy1L8|}6#EVQvhu$(Q7&?l6BloG~F!RB}_5ZqPt4+)MIeAokb z-KG?#{UE_+{9*)~@yiozmbb&he!qwPPagIIpH%gk<2%{|PZa!vw0HP+m6#^DOz0U&IUMFYF*|(z7bRi8KGE zaI_M}bArwCUJ-1TcR=uPvG){n9>W)~m<+Ncr66scZWy0N;9J`kcT;Ol?tG)4u^55$ zTZTJSf9qztKkz@0Y#6uuzezXW{*TVYx6S<@nSd?dKW+`(;rb;{CDUhCkh12%sVY2H-7la2N>dua*H;-0`NYLJ_}Ns4`2lghGH8)>{FZHH$`h)|L#c&32(! zYlu~u1$72!D;&ZU4V5YfQ?Ht zngtW+DPR}&6>Bd6UttloUSg%b8qMezK-Nn|b3b}(9Vj52x-f`=rCHF`0E0zycp1PD z(G&*&3>D4o@VIrD6`sIBYEgP7en@Uz9gXi^!YM(ElJgC#pY_+t3O8@L1je1L6>|hf zQ|+CtJ#P^FECnds`WCuK`J1<=9$jI56p?5A7ImthHK>E&dr*+IzxBgRg^j@9I#R4g zS!?{vSdEcJbFAXnZ9ytl@eCwZ*GqReRtb`aV|9Z7j@3-b!?BtxLEu=;6Tq>WFMwl} zB7kGHKI#E!1O`AsUX=3IQCe+Zjl#3IuShRtex(6-pkC)oMLfgCEVSU=^#G4E)u+x>3wHR*3>QR!IUlR>_>l z+KgkB&OqkXLIE7Bn*?yIG6Zm}GPyLFSBnL3tg-}ftZw$x=2ebpI94kKaI97_kXRLp zhGVrxG#sn7qTyKG;it{3YyH|UFpS5Yv5NOQm8YIv{{!^$r7x)jJ?j_QUogk&HNV@&3+7n8>9=jQV2;%uzk0-m^K-1K{ICo&HUjTKNfztJ ze#e5$SRIl^bF98$xAjo5I?kZEnpY>pjAM0D0LSW-0FKpnoJV5ylLUcdbxr`s>SqBQ zt9k((t6#V@nODCG;8>j(z_I#Gk5z+cI99FwX`L{daje=fkXQwahGW%MG#smTqTyJz z_t)mtVL$rqSb;NEU--=rRanKU&hMfTf;m<{`t8gX%(1fizmGEp18pi+eHciru9EI>tRf^2 z$0||)$ErW)kys67AZy?-0UWF00ytJ91aPcIN!YWn+{ny~&MEd3&t0@25 z(gky@#``~x{fqTHuO|3MV_q`mSWWR?fFlKCj#a$B9s3($tbv$u7VCHZ!x3#2tJBhG zj@5Z~+ej6w-x;)1^U5zkI|up;;8+C+;8+C)P_QLdZ5T+bf(3A_LIiNE+6v%Uwdc}g zUUd+_vFa#*W7R1@i&dy-I98Vl;8=w-kXT(V8jjT!qTyKe6%EJg$^dO%o$)_^8GeK2 zjMY#6D+epAV%0pLH)2D26{}VO**FI>=2&$NxPGEwj#c-7@34Qdo@3QBU=mh1#vH3l z1Hz*fHUjtGLb19!z=6@CVl_}2&9NHIZi`m28q1))idC$1hv(G<$-}XlD1c)%iStOT zrb!TZ4V*53V>Lqn$Le|k9IG3o9-db-1#qlp3E)`G)?;;}XgF3`0ytJTGmuzi3*cDg z3gB4fNgj^X5CKsV_APiv@tiFM7nwW!iRp8H<4y@;iH8QX)TrdY~bl_+#daUPQ*#qyy zhR2wL6%+Uo1_NRIYce>jTdcDK?LaD6H%fPSV%@}U8>oVn!5~-#>t-?IU}a0+I9NFX zI9R!yM}l=5gTj0jtmTaUwY()qYXu|2za@w3c18m%Dqbt4E{@kK0UWPF0UWQ@dc4+3 zD>z>Fi5bW10RbGZjbg^}+9ZJE^^gFL*TZ_ek^{35y~ECU%@6#dxxy-5O9Mw23+8y; z5_lG_CVMrx?hO15lZ7$It2A&?j9`veS>VQgf;nFI27Wb0VWZWHhGa*9!--Bpd zz0xqc_Gp1-wM#8P+x&*?YlnY8Xfhri_>FlCdjJhROAl}zD8+A3<5`2>l=r%e`Wkn2 z$7?fF48QAF6^Xi21^Vij7$2v8QD*7%<#oUdBCx7a$1R=0`vc#+{YHE{g8b9z6kO_e zXYN!JkHI;^?};$1lJBD?OQ)GQXZThA8)=0{{Hdkb$C`-`Tj2@~28_gG!~(n&pl zdev^g8szpHvK=>6(!x;o@w?#^(gHs6RVhYg8w>bJzBBU#HvSEV@&BW z`!e6esz>%~#2!7OdX09Iac_ngO+rYeN8c`2yOre$^s)o(Yy4*R=uQkPA}xE})zYI` zeMBuiO2RV{6%*B?LfjANF?ti{rp{WA?!oj|SoJ6$lTPo^{;nogJ!%e*u|0Z3%|eWN za*w(rRMMlLuT%FRmZj)r2b%EwX7*?gf=y;H*rAM`RVyE{g9zD=|^z>N6 zxRr{NdG+ED6RRE#hhFc|Za7q*SJ9X{oF6^nJEwMMuyP&An5ItZmRN8d=*-S< zW{(OH1R^c;uX$-|>CsuloYm5!++Jo6RE)-9OVxXH2OQL0i_x;{O{{t}ZIamoHIJ4I zFtLh}4IbnC=n>yvw0n%!6~7_7FLK7{SHzK?*I2rO>p&@fGkdfdMX-9PyV{IVim0VW zha=4%s2+WkVPcs_So#82R;4_uB#!s~&}{z`qNp^=Npm ziB*qsv6ksQdS-@+RgeA_A@=AIwbf|%yOn#CibYc9Q8%m}^laMlCN-H-{ATtj0|cwT za92x@4w$*6N4v0o=slW`&oJ~+_n&3>7xJ_oeTUUqVb!CpXr$hw6dWw{dGr%TA={%z z)GVW2F|9lgu8dQTG+@ z$n+jf>TMYPwI01c-NdR#Hw`m;pyp9I=B3`F+pZRS^oXA;w>yf%mbLxpzoSQ;U&Dwo zEM3}R%V?j*A?)-{B+@s(fo8o53rp8>oIctwu`C5xj;qZll%?CI8^EsoZKMpi`=EJ< zw4amq;`<8}-~AnoFsikU5&9ZJ*ENDb097489&I-qbIjJQe_tFPx?F@+zFY3sR6v(- zw6WVVN(Xhh9x?8=g3=*fqKGdX4)f41o6*p2MdOj~)|JZX7G>#%g}xWAHnmiWVnSTCd;r>UH7#aP?AO?FHb?J8)BT-tfqU%O2W z!Scy@%c0rk(r&_>>vluN6^3y=YO=fm&0eRrM*-G^Zi$~_<**zA`!#8(?HzvNitn>P zoe~KLP%|yRLTy1pHOsc51+^P{w8RGN1@8Gg7UuSct>ohXYI3`8FaZ2J4(^NtojzVVCh)S{>nNsN$2l}sdQosY z&ZAYkS1uNUj%k$aF?=bK*?+$j&3ql@RpI(SyuArvR7LU!{CeI@cn}yu5+DgzKq7$v zAt4-rh=dRzBn%;hE21IC*?jYZ1(R0eT+y9 zkZ1#5OaXSwr)OE6&$Dn*{m)(x?%Wx%rBP_;q)pP&AaxazM`od&LFzxBnAC&N?}{ey z*nr3D4VLP6CkIRY%Y0L6foyu<@s4#!y}ehU)FZZcE48k9&O;87pTp@v*I%EQ)E)2{;xh2q zOCqHPOFd+#DfI(DKSCr^9a7g~NaNJ?lTc(gx^`=xnMfY#&S0r;2IUFp`jR?GJs&)l z;PK7~mbwWxz;;~+bTg66c1YbDZQUvL9`Y6!v63I%3)LX^|N}YybQa2XTL-Uj(dF0n+EcLS|CiOqkA$2Wyti$6i z4VLRy^>J6J@XRLD|)dSX&1H$a+;z~f31>Fi*s z6N^l#?*jS(BDugJ^`mgUPN|=p(yi3tnr9l4M-D1wsjowMPoOnEbuOfy4IT^ecrOW- zy1-g$s06x>NcK3S9%e~t_KjD;OLWs3duyJrNa~Z;u++;i9XtJ}uR5fD8@-)V>PUaLQuot58<9NnUVK67V<#qcJQN^yg2$zJyl)0e zosXV@rM?~LyNKjHhtzv96?016dUm%`N8*Gfl1FZs%u-)H=7eKp$A^eaT-UTy389T=(8Li#T1R_gwmXDO0Lt~H?R=;^lvNgZ8Ad^Db; zM^~vidUU;-qenMWaPUg>t2`Mr@zprIW0O?jzJg;Dak zKH(Si$nJfDrpF1{nF!w~XwsSRW*Ne_37X0!L{}sHdqESVgxqNe-z#X^kr0Qq3HO77 z2J;DYNzeTUK||z(66)Tb5H#>imYFEo0b7p3 zSS!~<{QB#1UigNH6?SXZ; z&lX!~ShWbam4Wy%dp84rk+>gr!ai{g;Ym@lELzMA(nkud%6Sf=UOXg8(tBw2?#W(s z`SD2~L8(YGQ>9e;$qS859mnn&?5eScc!qLAad4J(BiJ zK-e$C=j0(=Lt!K7S~8c_GW_%sgc~W`GwGax2(OXheQ+J_wG{4^6h$(uli`17AiSQ! z;Yrmb=LQ*`OHF4hg?lGGN%OsJG8_?x@J( z2PDzmS@)wd{E?3ElNZ8dv?SU;biYDjku+cn!f#O6m2^58*xM9#C$X!0pTb7cPO7hu zDIAd$7mx5~6pl}tTa5766rP#Xb2h@?Q+V^(c+&Gv6xPJJMN}D@V8}HtmOPM0Lhf;o zEd@yHS3`g+B`n%3_vGINE7&VqfEew zChXG2e?{;(6LxFkkHVq2Q%%^=#@|FzOflgIZTxG*FT;dU+?WAym4n99{#i^PsCUo^ z+Q5xjKLf$hwDTF+UI%wDWbAU-Z`?u{(~#fu5`Wyh;RxSNVRzh>XbeN{qp%T2TNgtP zQn+{AW*F0uLllmP+uax8KTtS2ZV%WGd7Q#AgNXl->EayN+J$($bdXsae4`7ov%Cu| z{|C$g3mZ+cXv4lCCV5vFsE8+l`m;h4Uv2PAl5f%dE6lb2kAeQ2NJbFDH`s|&qk-M|9ekKLh}b6xLkcs+9s^?@ za^X{8!HM4j`fo%c#eQxMu)F7=OAxd#r$LL(#LqMU-PsG(#ED~o9!exK@gJ#LZ@QdT zu~HFxN?_tXXGH*g`wCbiCtjoyYBB%tfzb?_$aw~$0wUjm7>UEik3gRkHx#XY*b;$g zE$$}74=bW*Bd%u>!o^h25pnrYUJG*? zHnV-CX*lly^9fMD)!Hl}D&y^dod(r(F$qCJq7hv_g}(+OVt9pM;g3UJ3M@ zh&ZOutmMHr61r;OIY3j{e+F8g0y%mkb0+N6`|K3$1y*L?p5>6PE+K`_fj^B>xV~7Yf^FH>@YDbJHkO5iZoB zOostBG~=O~^pK7`snAh!h6Lcn0#%_i+P8Ea_3-Gm^Se2ug zUOqXJx&@_-pZPY_k%RtS;F=zjwt;M$MJn6xL@%l>e%>SSvLMr$Y%fS|Q)G)M%hXPM z#TQ(NUdiO>X42o9;WfGy66pNk$Aj~gdJ3aF<8`kk%XAZc!t~qbD#+zCzgkO zc)CtGs;zl!Ed3rCL|(B5!;bz_wCREJ^U zEyN0#u0I!N>h)=$Um%k8B)PfGTfW>nzaqCDtJ+N1K2YG;=3R*7kq6+%A@%(yCiS31 zNWB6)%JF!&21|Vg?2D~oJi&(7ZQ=s*|OA)rkioW5`aA6GF%Cx5I zZZ%!Uj_x56@a35-;14Gz;J;BroaMdX^AHJmnM1%EQv(HD2BmZ(U@s*gw&qrXQRE9S zZD{aHjL4m>>A%$A%$;VIOTgzeJl?Au0$z`<(5b--bGjAKs|17we!D|W8f4M`_Q zE`zvv)Uqabpk2l;B6FQQ0C4P5GK|S&GO?#o6-?e1gWxJE>=gVCx)$pvw%W+@1T6{CM6A~PCItbo#>;u@umYkJCJ1RQ+XiSdvqOsn*y1LGl1r^LE6+}lK-Z8 z15M}NMi^#0^+9;0*vIZgVL8nugyC`2)JM>F#~!`{8sU>bcPLDs{)NE2cmujD7UeNu zSW;95F^L>M55E!>$c3Eo_JwSxJzX%kmD+D*~q#g&-%ixC()Nl=ekd|71+<;)*Xj&%_=C<_|XZ{FT7^ z?{MVck1sICQ4@ff zY-2l0fW3M+^hyO0K41!M?256#-WEB?tfyLF)>&Ay&|6VoaR*kwc`<{Ffxg@#(FW72 z*WwCVo?orr2v^5v^B<+K8+Gi|`WUYB#fL%ncIukW%EG$DcrN44IYJQGR z!yqkvJyd2a(8*wo^z-}Ud$CTr^h&3yHkLCGo<3+AfYWuV?B3~vmI5f%$?9ST5ocq$ zm^Dk&=Hc?G$VSaLQyM-rhMfvNOIjF_JCl22qKn!@aZwg z`oifDgBt+7!Qgo!{>aYfO7RwAK2j_`vr#vS?-4CvP%LxwH#X`n(GSss73v2Y^@tdY z=qU>Ii;a3-%tds8Lb>7UHCd9Qq7>0}3f0R-eJnO0dZ$7~*r@Ns9zx4Lf_(KZE zGcK9mRv}(M{1JtlW2d`Nh`%HLp9)7;?@fK~5yG8~r9V8f>;*RNdLiNwpQLchZQPwg zWFUU7!kuB`9u#6Z;>#4S+{QgAL<{0KDO`<>dr^p8h`(Cl*4VhCLfnD)2NZ6-jr&lD z!-#)H;kMeiFNOFJ@n0(3P8;{55E>?e;do@(FCttb%{`4CuGvF1?J`7&k-#S_8g9!{ z=Qp{;OvL9Z+*LO3$6R71;wu$yAK^wH%?0nnuDg1H?|R_QQFw0IiT9oi{EMzHbaS@0 z4|rM{kxe`CE=-7xS6wHSnU4NZpq^6b(Ua!lQi5>#fNeVrBRszr-{ewJkpNeR@>?668|I!l49~)l% z75Gwi$SZ-bw317wJo*5fv=O6UmqO(S?gGVwl1QS&)JhNy(^qdW{o9Qox}6Bwzm4vN z!Gw{Z=fh2l#}NHIp}3Uf4Yfo+PtlKAsYd{nXrueXbsDGY)tJ)0fwG89pzuZ-$p%Nht0a@cW*i zk9jy6t}&HP!+WZL^Ux+|M|fYa%aamMY#0A2?$av`uW z!&BadDRGxJyg;z=q(43q!?tCDN@b+)IRn5-24u%IyhMk<2IQ&UhG}fG%W&-dFiH3x-YuXW#>28KA8UDHJ4;b-tx+7_$i>7E)rcP z%>}^kRy3qbEs@@gH9S|m039=*1Hd0rG|Xp4T?J^~)vxJ`Z2+KNBQ#qvE@{vqeJ%0< zO#C87OuPXb3UM?D9Pv1rpcY4iyAe-wdx@h~G2(g3r1zj}DgJdaBoF=%kM~KEMaI4( zCL(5r6&wAWjru|O5WPa7h_9LIKcX7Z?Fyw@fHry(h(`1f3+KUfE&{=oiip#Xx`t#K zBE)Tozt6&%4S-B|M1uIka?|u)1pcT+V_F^cW+Rfg^Q10Fd;|Q?iiX8!%N&s-Mvp*S zhGN73C~7bs?@LIb4JLm);<}s_W*wvfGfiRH?T=U}1`RNq*lOqxZ^G#j_@BS?1|e#@lVK#u0Yye&%Tb5MGPW7z2=HAY*O^b
    df#w?E_bVEnG;%Qqe~CC_DJNFz%8_a0d9XH|pNhbufwMmU%kxv0Y%otm-2ee@!{gQJAR4djNAHbB ztGADJMc;6FvI!3x17{z-;ddCIiI0)$8%umrm-iL)((;0#ebmlcxHX)sdU;3|c^a$< z1vz?R1*y(4MXLj!W<1_7M?v04t8o_OkK+RiatDUf;s8<|!ozjN1<5?`w-f~T0s13Z zB#moOkl!snp&EGxPKiaG3_clnyuBR-**!I|Aa{#ba{FnCtd!UaK zPeP18Qz2qV&n-}(br0~WRi>x@80gQ5WGI(Y-UG};gl&2K&yK?MfnmF8SQ|tGHBTd` zBj-(KsgInP)K8oWsm}zD9eBJWgQde|4V;loMdK{20qj9cqgz}&!<4^dvAu@wv`!u!z&RcJWN{u({2=K z9a3$@V_W|)^yI&8{jr+ouT+qyHgQ3!mz_{Sj-hvFQGbRgI(T^}I|@>DW?(@cwTeBg z15>f+4IOPL$V{Zl#lr<5US7KU?bsBhIMs~p9kIch=SE~2nU#lvgg^emayqmcjy1NP z2qmn+B1QOgp0Xy;edO>=L2fwVAiBfwg@Qa;!sBZZULp^Jo({(vewsWCIucDYe3c+4 zk&q2Fh5H4yvxHk35ne6GdJ_(y{|#Rw$R-ljY(%(CkXjR#_e6M$Aj!0o&qT2_k@(P1 z#0l{(d;#0yXb6~w$D2XsI*SxGib@gQM~H01=UO;3IvVSLh^n-r9i#E^II*q)i^kv~ zHUodYqVW;inanm(h&?L4kn-e3V*Vn5xSdBA5n>g6sW>>adK7_Qc@?v1HY9BR8yLlm zLFu9{AxG=^n&1Kug{Kh8BUS)Df~><&>rKIPqCt8gxibAd4BOo&rA$V&`$o(}H1|x5 z!-RVkxVf~*|6ovu`}{@`6392`JXwL6J~9y{NWzva&D(r~&O3-@^yWacd7pn5s+-Z~ zeg3Q(Q~l-}bUM+JxjM`@=;XmTY1nAJ>0>jhS;F!@|Fl!A`}^`f{~Z`LIPdeHx5K2z z9E0-JBA;E&C3@2?(bt%8kS@eT#Ib{yUfwLx^XpA?K_J>J(a+E&r#4IU2JB9jK)#{C zhvd!@d0~q*K(tCUe7Xh85~Y?~C6Fa@q4J$2s){n{Q6lb)l25`E+88*c8AYcjmcFoV zwP!TG{{xwO0roz>24#C0U)mr-3|t}N5FKx!w3OWxdxjvrh)IZ^X`#$>E~lc+4J^&Z z5c&wX&^Z?-T?Mk$MEW*mK<8pK2vz~1wd6ma1;Kh`lRTc4SY~<_usl_hNhr|?#LalT zr#2yNHomk$gy>N&9zgUX7D`LGdkbPK1#uF8!PnasN(z@o!u6x^dtht#BwB!e;K(@YP`$Dc8NVaOD!^c(-0%BodwX^Sa>9(XWp%#cpf!7;bg#4 zvMieF-#7>-n;?#O69mVI%|wzgog_>-iXmCg&jh6vKjO=Cx{0?c5s7=A{>)%o8YWEu z*(8fpO2n(+sb8K6`ts}GXL&6Yr9_ z#i^ccrD#3eI$RMRrl*&AA5!#GP%SkF8tA$8nk+>c#-wk7>?1|`8g!+lp0o_4JMYD) z$>iFDNyAV}z45TFwA9yOPCYxWnW3l*rWy;1DHfIV=c#?bw&#`C!zY>ydot-Vkd-P@ znz?JK#jv)X*R^j~q`jDQE66SkBF(J=>8*RwT1>9tOu8Rr2NmgDRFjt43kKBlzE@fl zX>TTd17sg4QYpY9`0SpKza6Vc`!K1FB6#UxLy@Epqk;B3JOK7&3gBhZ@gPeNBBhso z^nCG`1amFI715VTSAeY8BGpnaBdXU@pjgTP?jeGyHi68-+(H;&dCqlu!KgS4d2I$7nqD$|wuGwfKT!tx#^sayy zpeIJXY4@)QfiVZq!rA-1VlVP!^_3vfy9<<#wxjjVLd0$&C&u0z#oAhv@h&1C2_9(j z*TPhLSHt%{gUA7KDCL0FBPulQJGfI}deWiO#+Vst+2LTK_Yr(0B!XHW%j`1ItOXWoYmCDk_ zbskRjI>t7H&+L+lbfi)laycRU-6T%+h%R-w&Pt^;PYWw5l`hwlvI}9Wknl`1)&AqB za+#^_hkrn-CQuXm54xm!H83v%wd^nEajGM!GF2>88d%E#sa*2ShjWgdid1vNP9&bw zN_CejqR@iojM{>5zKlNymai|7@uwgwy-3ip=s6=X%+-qp-P4%!C=6OJm+?13V7*$# zCr?7SUbGSa>BOg5(0FFfq&9@xWPCV0nZ7~BpOuU7R?$rKR}-Ie1TB}%xuhQ93uJs9 z+NjitlN;d)6vn_=OUkMQ zIFV6F(4IDwZ#Rjg9-|OW=lGnH;T481th^GOUd%x7v?*}&$zvObAiR=DB1X->56;Uo zp#gr24x;B=0M`|^KL)s*_fe-|2RJwha);f+!Tw+oc0UJSnS-6;poF2 z<=~XL2>y|RG1pGVSJF^FzVD010Dm`~Y|VLP8{i3Pi1kF_D`(S2z>^5hxf@<5W*P_S zj(W_g9Q=C^1hY9f5{)z_mxE7CL2wZVFQ&|va`4%n2%g5lm(vhj#X&mM5aX9Y^z|_{ z92^Jt6Z`QqFwdNJ)P3w{9DD@&i~X8|H$$@6?>QJX5W$})IA_m#1U13oyB8qrk>O&L zE4G&mzi|%2eP#HfB7~!5_$%09Y^)4l3_FY+D#PiE5I#wUuSB)PCd%+X2|fXD-q7*aLy&+batXBorK_04$gv5;j8{l9K7fy!u=d< zg-GEw9E>~{!3GX)hmynFUnbg1&`!fQa&Ytx1h;W;a|?nyIk<>&yO4vKsPphkICx$L zg1adg^LJ=0ypwDz=Pf8W{JI^LC{Y8xa`IuK;WrVSGZ}3${B{cFeh702zkr+Nf96a_ z8w>9cFMw0h)o|`7CzC=B=Vgq;tb9^ZuVwf%jiR)qF;MBKQzl8m2 zf^qw4cgB4c>RGt2gp+o;>G*@&y<#hU$H9UO_m!xF2zU6|m_53)P?e7%OXz*GaMQKW z%`SJ+a{O_-zd*fhHr&_4S~o|y>2-IT843B|4k;(Kby+vO`)Rz$OE{0uF1xy8FpYbSvlPmQZ^ji5B|| zx*+W{=*?_CgDyz>40_+0&!7v^K7-yO<}>Jmw9lY-bNLLqAnh~gjaNS7d;Y#Tp2BzV zH@%(7XV3*{pF!_D@)>kN+Go(4gnR~FkoFn$ejcAe7o>d#z4gXt&;@CqLGP0B8FWF~ zXV4p3dR_8Iiv6Q4mBq40`v0&!7v^K7-yU;4|ogw9lY>`aa_p{yxaxJ5gsogKlp5j54?$Xo1dxp zmk&_V4Em-M^FD))r9(3_=$pUk7H-vtI8s3|bW9109Ng;T(k1qKZ&3Je-f6c}_cr@){y)&&L)P6`YfmJ}FtKd8W< z$yb3vhjj`JnkN((G(aja=;Tg;L4%C~gQgP&1`RL@j24JlV9<-^eMVy~w%L8gI{fia z*k|kpjnAO7J_QCH@hLEF;%_NAZF?6OwD0XRD2&>wq8K{P;N$NC_A@@FDKKv3c==5w z^%=CwiVQI#@ENqs|(AYLz;Qwm@|0VDOI&3ysf zNkF1r6y*kR*9Q=Df?hO@F!vHLRWE8K)(;RcQ!k1m)&~igrx*E%^@9ZD>qY6r`XK_A z>qX7P;1B_;^rD?G`+g4-P^A~mM_KzlNi*jZqbW$6szB#2{@n^T}PR| zM8HA4Xw6Ole<9#8z33hoMZZ@FIII`_Ou%adyrdUB4-@S71_5vAMJu-eI7+~K5ELG? z-+1a2FjD0RBzDDej`2Z2*2IV1~Qs-*W)`Lcpo+ zOlksRT_ZMv@OVF216%zPU)pIq(DY!|b5VahyLUzKI;prGbhi@iPeiuz{GLp9W2{Mb zdT|eq_zspw#{k8fpp9OMkX+R~V+`sBd|w{}+}DI7Ds2$S5s@qenD)TKl4vQ*`XRPL z&;qR(jObAo%3L8l34LKi^;Ko&f&*6km~<}43M|rSxh(e)YCd95|13q?i%FY6)@G4v zsXv?!s$*-%DXMU$+5?Jf6;&E7lSW)h9XnMJmXCTf)k7AAbD7j<&@yg;;aN$pi98Lu z77mkj_zX%}z~6A5950&SiDfh`H5G409<-#o3e-dJx5NmahGiIpd~U&sCas%_UN3j5YWpI-}4w>uxlo(M$2CzNK076jj1( zT^*}5t$}W=zwR0V(kXaYUJ5iGI}1w$uV)~LcL_pV4=sFF6U*BtVLRzk$t^|xArl0K zR*q_j70H~$e^+S@bn*Qy*LHwc;<0mR02KBX#c3Y8<4{e>|AS#*@XvCK&c}iI3!WO{ zLd-AZzpJ!0v~}cq570mGFmDRridYjEQj)`HM>m+#!ZYwkbVj1{8HA^Xl2Th-LmN%5 z(TK{xqZm~_zFz)HfYwCh`{Cn*e-vDFQcqTer-qUfGo~#ct7*YM7%n=`2gzkl+EUua z3jQH+(RmMOUc|!=g96~&{26ShM-5F1sqQ?qspX+ft%_8bQM2y)J22niVeu(|%`Tvu z-aznH%o~D#pImgtt;6A0JT;V*M6aM*PV02nL`2TTqgb`HX~sI8qBIZf3pG))S;_F9 zmr14WlYd|e4Zv*1Q$tL^w1&21{?+daWQ(2m_pP*>sMdZGX+(L+}lTIs^T<(}Z*a2K5yf$C~23DpuM zS#u0sj_X!LKa7VJ!vSS~9@@BRqIB*xFqkW(LMAD_dazt1-z~#!6$szMKY3i`+KTYKG8_jn!tWFGOGs7c!dAlX7w=K{C5*?y zACNR64B>+u);x4h!$SurJha;8p+gc)xk&Nt6l^(}#rZ}R$2b#*mhse()F?_#IsaW% z)5w2U)~x5h%WHP>-@=;9_-}sAKK`rK+`)g1nuGi|ujWbqI}alO8o;g_fv@$uWp-FX z;E(9sh#b$y!%Cz8E0N^z8Ck24EDv8-naNggB3N+eeIW3_33D^k*g zc-N-3gXs7H_hoqJrn=voeBeg;(|*AM5bP7tOt244%0qip9-78+J1(T@C+$P=+*&}U zrd5#XEPQ=y@p#z0|#vTr9Jef(|~*lL)j5~ zBum?VZvbXLo*LpoY?*c=6ujJ|h4VATcnKs&owR4R6kzB$ie?Glqi3Vf#qtjn84VX+ z_lp_5!;C&FV$3J~D7>CF`1_7^jRe(rJW6z}niAG7#BjzGV6bAj2$&)~HI#~kT|;AT ztqM>R9_B#-%|k=~CL&!i4le?N(&=-VOa2v|R{?W9o*GKZjA)py-391LJc^N{A0qOr z(H`Q^3h9I9!ynQ4F)&}@siEYoLZW>as^L27e=JMzhALNP5Q`>zmhNuoO{E@p{Kg>+4)-cJ!fB3-mcFqJxxM->_PXSWRPjS4Z)N z^XFqEg%myY&38$%jXTVAof6jmh|D$}hDVHOAp3N6{bpB25SM=S;Ipr8!5YIbfzaN2b}lNvpdIZGt|gr!vL5P}1LG(qAa)e*iztL$j_z zS~MnAa+A&0JkKCpN)xH6&CE_4DF2}TegbMFT0OT|sz2C8vyUc|my!=buiSh}lnpJ{ z*3k@axyh#z!*lwG&Mffgy~V)?c5r6hYLjlhNq1Jn2dd()a#s9cB<-occb8=JoZ>bxiT>@G6`&9vzP$-b3j*LrbXO1cQ9#S_7<@Uv76}CFA+D>+N0j_-i9q=7e($^gvi^P zK!C_Iw}{6ml7+q_Q0O}Xg}y`9p=Bp`ND*LL_-qkh;hQAjcdO|g_ioxE;-QmGw22>a zuN2`Wh>%Z_EW!h}2&6qJ!h?Y#JQyg#gMnuBpcDb7${#i&sunh)(Rd{i!W>EGH#qXJ zwvOiTkD-atr&t+7J}9ol<1nh_buXA?i%hbuB4W27YpAOwd-j0B+ZP5YWO2M|BS5vYGqFW@^v0sIH`RI3Fev!Fa|RdoB{#b z=&UJLNGR;;Sl&isX@GJtonN=iOl0-H+eAZY4H3`;pZMeS8op|2-Q{kRc8tp4LNMJf z8g2UJb$>94U}F3MLwLh0`9h|v11@Rxh-h^CX4ev~SgrmR(KmL9uBF$)9WbNq=KX)j zxbC1C4XyI0zRBOB>F3kN7E501?vJA-UD8h6hO~bUotE~)IPL1Ek@g*v$RXvP0l06} zCA#)?P=9MiBgh}oc@5?C?;vVZN?L|tBdEOvEPGxl)7WW`QrdoIv?YLb(w{(rY^&b4$>v<3c5Pb_tfTrWp0q740)t!KL82LW*uhbN zB=gW4!`9GsGpz_w4R{n|7LQ^A#G~OH@dXdMEq_K!=h4`+`P~~T|`ha*AQRI?PdO3j-fvtlwVi06must zIb}~D(YXLgcUsA5dx>>JG4Q6%R4LILDB9JrtnMl^HM&y%Y`cm2OiIyt2T;%8VfGY&gv~KIcu#B-ZLGOE$~Dg)Ymod8NFH;wOlK$m6e+^sdO0}- zLL{em=KBn~M6hnK!c5(5S?TJN&!B4x>kuP1w1(L5+vmQy_$D=yFkM1*{;= z98}rKvyozzm7D@0lG808pFvkF*3lu{CX)$f_52Z?mm=MZc$5*cFcf2#Rhmg*-IgE` zx>yn2M)4VWFuirp;p;Jzeu2tOoQLH+Je(UjIL?h??A)Z^E3A9jOg+s^-6c1=ROmD4 zddj*>@#Vcn5+Y;%VA%_NZ|jm9#dOVWn3=j;tD&2JwKuMU%1z3bR6a51!;4p%(NCJu zJH$_oI5t{)AHHd0si$sy9M8Bd;()*ZnOwV0 z{y~%9kBkD(4pP;q(~a&nYV|mwIJAn2m{*r!a=6Ik(0&ihLGQ~;HLi{`+BbUu_7n8e zjINH;+kb2V7-@nl+vx`t_5MQEM=^x@8A83>MW|U999JkkSg5!Ew?fgW*`~e0nmTfP zppU2C!k ztiRK&`jgdNXw{zt^R4=mt#>8rj}HAlb)95sOQoaCfyZ;nw<)QVs_47|OZ69%#s5eu zI#j&wdMTCZBB852U8Fj`sc$nmz}xcY1XV?6mLqSFtW3@jYTU)as-niBRApFJB^y*; zUA)O5v{n7L^|ywu3~AFLLpB~Ba!^3?(2C;)$8cEGH~Q$tDN`Ls3h z#ArL9-FOru$C4J2FU62Q=0?dRQ~rSp9s=eGJT;UY9gfySwAW%zP-N1ctY|+1=1V8- z>X%}%5n<8|QgpRi99GcG=$R^d)-Jf!>&@uNX7r|ShQJJOrb9t;_fQ(FbUm< z=v`(swO9IJXPIs|d}>D9MR?};MNm%MD#HJn9R5c|C`Aqa^;RjPqXS_y7y6sI*2$Nb@VN3+RvlFI8` zV6Jj9s3DeQl#BQ;CVKRa4(%>LPdn*?tzTwDtOhrN!R;~!JEL!a(JyyMT0<-;qlfr! zxmJD?v@yj@Xj|~=`w>0MjE+!(*V0v$0yEkxWW4Bnnz9J6U=pmW1^23w7QD*j@Gq0` ziCJ*%2M}u29g>$V)M-~7S14tZmQeL3hyRgK7om%&-!FxlX_ixT?uJlxYt88HtgPIJ zw0D|BjygF5(GQx@cAcCpUUk9zcgj3|>LLG%PSvH!+6f*nW4lSjB%1wYR4RSNzS!&fW#D8ro!KF07q1%J)(Eeigb;R6cpSx)-X4zOZLp9~ucp2~29 zf^!&-QScIm2P?Ro;dli%GCWej>lsco;X>MIpvz3WYk>D4EkpQRu~Ra6)2h@<8J?z? z>}5DZ!G{=r?3hLWG{Y|`_+^IQQ}ACI{z}0gGpw2Bb*}h^;Rpr)%y7Jd4L>Puf`Ugg zJX68x3}-5MHp8Q403>PZ+6NZ;6_&bJ|D_B&J{)!abhvAh9j%D}^ z1t&1PO2H`%mn!%ahRYS4!*GRymoQwV;1Y&w6ijaj?5Wo(xSip81@BgOc`s1#2!?klcs#?GDR>&gdlWo};Z6k?FuYH}XE1z&f@>JQMZs$szC*!V89t!k zix|FF!B;VSP{B7b{IG)WX817$|AFBr75p5-hZX!f!!IcKeTH9B@D~ifs^A|PenY`w zDWt!@Dmaqi_Y^#o;SUu&hT*>}crwGEDR>scUn$tf@V5#sV)zFIS1|l<1vfFQ-DP#s z8yR*h_&kOU1z*8%Zw3F3;Rpra$#ArSA7VI0!A~7`R(&q#Pdl^nsa2&%^6?`(o848}r@Jt0~GCW(s3mKlL;L{n-Q}Akr^A+6AaG`?F zVR*TMFK2kAg6YRo(Eb&CAH(Geev08L1;55{t%8p++-Sn*iQDUN=o)jPp88C445EpC zBEcIKu6qZ0mkjJDA_ii3oGx@@TKM#E5rr|iTj<{Ka0_%NYPxrD9}J&Q)^dOji?Yxj zqVCZLXwZ6cqE3y?h#icn0e->s)L7={srTkYWyB(Tj$%41s#j1#~!ih&}ct&hFqP-r7m4-a}j?}`#XP{gd$D2U|w_Q*)PD3mriJM)tDCWoo zw>T12G;zdUo+^gQ56e`lAdbj^$(n9Zl9&Nf8Q}!P4hEa4;i=F_oLMl$PX##0E{QA! z-BE%4IM|m-KoxlN7@h~T`%_F{RG`7=Bp-@9O(`ZXV)rEuAN+n#KBL@oB zk0+IFA;GQ@9L(#Z3N%V(1VX9@5;W0{3@pKDC&H#5niCnA z77KEwVqp)YtI2jfV5tKDTOrlZ)IcsI8YM`#Yl2K@nxaA*lMP||BsSX&7fMPsdkT{f zUv7qW8D|8iCH|+XNEo(cI8#NLm5eu#$S6{xRqL~mpF#O$NgS!oiJu+VVu&)^W=zzw zfODL6hyzkiaBvSSaG4QkL#TArF@Ek+wruHQ=35}Kl(wB4zyn&#vz!5L$M=P|z-B4^ zA+;}5ZjI|F-!0n#1B3SVldn*=#

    IR;#uOO6u*G@XvNnO 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%0DT%l>d|9QvMymrTiy?OZm-cUscqbl*jYN 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 X{bcjYww+sI(~K_<|3{-fyzBWt|BPo7 literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JARampupGAM/JARampupGAM.o b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JARampupGAM/JARampupGAM.o new file mode 100644 index 0000000000000000000000000000000000000000..ef700a757df08a05926fadb12506173849a1e5ce GIT binary patch literal 275328 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�L;A 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 literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JARampupGAM/JARampupGAM.so b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JARampupGAM/JARampupGAM.so new file mode 100755 index 0000000000000000000000000000000000000000..65e9bccf085385b1820e765a2af85adc33d253d2 GIT binary patch literal 170928 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

    8v~>#*eo%jv!ZDP^{I;YCAp8)AwE%56 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 literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JARampupGAM/libJARampupGAM.so b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JARampupGAM/libJARampupGAM.so new file mode 120000 index 0000000..1552254 --- /dev/null +++ b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JARampupGAM/libJARampupGAM.so @@ -0,0 +1 @@ +JARampupGAM.so \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.a b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.a new file mode 100644 index 0000000000000000000000000000000000000000..4f70e8dbbfef6bdf803ab6dc973fe99221907fd7 GIT binary patch literal 291128 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 Zv|s*Y_hld6t;B7iyYv4^ujd~|{6CT}OJ)E7 literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.so b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.so new file mode 100755 index 0000000000000000000000000000000000000000..e7b8eda4601dec08b614186c5af2b779b83da4e3 GIT binary patch literal 179440 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

    AQJUmwPAeHrl7;X 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 } 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 literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.o b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JASourceChoiseGAM/JASourceChoiseGAM.o new file mode 100644 index 0000000000000000000000000000000000000000..a647a560ffdd0271aadb55055c2cf4bcbab1259d GIT binary patch literal 577472 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

    BT*$ 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Ŷ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 B;rg2daNRhZ0n&t6UAX#Kq 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 i_0UJjoGGK7(AA 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

    `P`T81)L;xlxd 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 M@-K}l_dK5e1B2S7umAu6 literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.o b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.o new file mode 100644 index 0000000000000000000000000000000000000000..a9eec2ae5cf73b91f8f55a22d149922caabe8fd3 GIT binary patch literal 274040 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≧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 Q)ptUswSR85)qfuUA8cDZ3IG5A literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.so b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JATerminalInterfaceGAM/JATerminalInterfaceGAM.so new file mode 100755 index 0000000000000000000000000000000000000000..7c1924ccf382e0cc79b5d505ee052eb372281557 GIT binary patch literal 168608 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%0DO7? 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

    6Q4 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

    ;_c_n=CY-9U#3sX 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 UuSx!K&syE`ePnB8I_~nn0SnMGM*si- literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAWFRecordGAM/JAWFRecordGAM.so b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAWFRecordGAM/JAWFRecordGAM.so new file mode 100755 index 0000000000000000000000000000000000000000..61939ca263395bd84313211cea6aa8033939f2e0 GIT binary patch literal 188080 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 +- Initial version. diff --git a/EC-GN-JA-PCF/unit_13-05-25_15-59-1747151989_670334485.spec b/EC-GN-JA-PCF/unit_13-05-25_15-59-1747151989_670334485.spec new file mode 100644 index 0000000..5293c3f --- /dev/null +++ b/EC-GN-JA-PCF/unit_13-05-25_15-59-1747151989_670334485.spec @@ -0,0 +1,134 @@ +#+====================================================================== +# $HeadURL: $ +# $Id: $ +# +# Project : ITER I&C Integration +# +# Description : SPEC file for packaging CS-Studio related file artefacts +# +# Author(s) : Bertrand Bauvir (IO) +# +# Copyright (c) : 2010-2021 ITER Organization, +# CS 90 046 +# 13067 St. Paul-lez-Durance Cedex +# France +# +# This file is part of ITER CODAC software. +# For the terms and conditions of redistribution or use of this software +# refer to the file ITER-LICENSE.TXT located in the top level directory +# of the distribution package. +# +#-====================================================================== + +%define __spec_install_post %{nil} + +Name: iter-icint-%{project_artifactId} +Version: %{project_version} +Release: %{?rpm_release_num:%{rpm_release_num}}%{!?rpm_release_num:1} +Summary: %{project_description} + +Group: Development/CODAC +Distribution: I&C Applications +#URL: http://www.iter.org/org/team/chd/cid/codac +URL: %{?rpm_vcs_url:%{rpm_vcs_url}}%{!?rpm_vcs_url:undefined} +Vendor: ITER Organization +Packager: ITER Organization +License: ITER License + +Source0: src.tar.gz + +BuildArch: noarch +AutoReq: no + +%provides_self + +%description +%{project_description}. + +%package -n %subpackage opi +Summary: %{project_description} - OPI resources +Group: Development/CODAC +AutoReq: no +Requires: filesystem +%provides_self %subpackage opi + +%description -n %subpackage opi +%{project_description} - OPI resources. + +%package -n %subpackage alarm +Summary: %{project_description} - Alarm configuration +Group: Development/CODAC +AutoReq: no +Requires: filesystem +%provides_self %subpackage alarm + +%description -n %subpackage alarm +%{project_description} - Alarm configuration. + +%package -n %subpackage archive +Summary: %{project_description} - Archive configuration +Group: Development/CODAC +AutoReq: no +Requires: filesystem +%provides_self %subpackage archive + +%description -n %subpackage archive +%{project_description} - Archive configuration. + +%prep +%setup -T -c -a 0 + +%build + +%install +rm -rf %{buildroot} +mkdir -p %{buildroot}/opt/codac/opi/%{project_artifactId} +install -d %{buildroot}/opt/codac/opi/%{project_artifactId} +cp -r src/main/boy %{buildroot}/opt/codac/opi/%{project_artifactId} +mkdir -p %{buildroot}/opt/codac/opi/%{project_artifactId}/epics +cp -r src/main/epics/*App %{buildroot}/opt/codac/opi/%{project_artifactId}/epics || : +mkdir -p %{buildroot}/etc/opt/codac/%{project_artifactId} +install -d %{buildroot}/etc/opt/codac/%{project_artifactId} +cp src/main/beast/* %{buildroot}/etc/opt/codac/%{project_artifactId} +cp src/main/beauty/* %{buildroot}/etc/opt/codac/%{project_artifactId} +mkdir -p %{buildroot}/etc/opt/codac/css/beast/%{project_artifactId} +install -d %{buildroot}/etc/opt/codac/css/beast/%{project_artifactId} +cp src/main/beast/* %{buildroot}/etc/opt/codac/css/beast/%{project_artifactId} +mkdir -p %{buildroot}/etc/opt/codac/css/beauty/%{project_artifactId} +install -d %{buildroot}/etc/opt/codac/css/beauty/%{project_artifactId} +cp src/main/beauty/* %{buildroot}/etc/opt/codac/css/beauty/%{project_artifactId} + +%clean + +%files + +%files -n %subpackage opi +/opt/codac/opi/* + +%files -n %subpackage alarm +/etc/opt/codac/%{project_artifactId}/*beast.xml +/etc/opt/codac/css/beast/%{project_artifactId}/*beast.xml + +%files -n %subpackage archive +/etc/opt/codac/%{project_artifactId}/*beauty.xml +/etc/opt/codac/css/beauty/%{project_artifactId}/*beauty.xml + +%pretrans +%beginlog_pretrans +%endlog + +%posttrans +%beginlog_posttrans +%endlog + +%preun +%beginlog_preun +%endlog + +%postun +%beginlog_postun +%endlog + +%changelog +* Wed Mar 31 2021 Bertrand Bauvir +- Initial version. diff --git a/generate.sh b/generate.sh new file mode 100755 index 0000000..3e2e146 --- /dev/null +++ b/generate.sh @@ -0,0 +1,147 @@ +#!/bin/sh + +if [[ $# > 0 ]]; then + mask=$1 +fi + +cid=1 + +project_name=EC-GN-JA-PCF +mkdir ${project_name} + +current_dir=$(pwd) + +################################################################################################################ +#Section 1 +#Update SVN + +ok=$(echo ${mask} | cut -c ${cid}) + +if [[ ${ok} != "0" ]]; then + if [[ ! -d ${project_name}/.svn ]]; then + rm -rf ${project_name} + svn co https://svnpub.iter.org/codac/iter/codac/icdev/units/m-${project_name}/trunk/ + mv trunk ${project_name} + fi + + cd ${project_name} + svn up + status=$? + while [[ ${status} != 0 ]]; do + svn cleanup + svn up + status=$? + done +fi +cid=$((cid+1)) + +cd ${current_dir} +################################################################################################################ +#Section 2 +#Get PLC data from SVN + +ok=$(echo ${mask} | cut -c ${cid}) + +#if [[ ${ok} != "0" ]]; then +# plc_proj_folder=src/main/resources/52HV05-PLC-7103 +# export_folder=${plc_proj_folder}/export +# if [[ -d ${project_name}/${export_folder} ]]; then +# rm -rf ${project_name}-IN/${export_folder} +# cp -rf ${project_name}/${export_folder} ${project_name}-IN/${export_folder} +# fi +#fi + +cid=$((cid+1)) + +cd ${current_dir} + +################################################################################################################ +#Section 3 +#SDD(-cool) Generation + +ok=$(echo ${mask} | cut -c ${cid}) + +if [[ ${ok} != "0" ]]; then +# cp -rf ${project_name}/src/main/resources tmp_resources + rm -rf ${project_name}/* + cp -rf ${project_name}-IN/* ${project_name}/ + cp -rf ${project_name}-IN/.[^.]* ${project_name}/ +# cp -rf tmp_resources/* ${project_name}/src/main/resources +# rm -rf tmp_resources + + cd ${project_name,,}-sdd-in/SDD_IN + ./sdd-generate.sh +fi +cid=$((cid+1)) + +cd ${current_dir} + +################################################################################################################ +#Section 4 +#Post Patches + +ok=$(echo ${mask} | cut -c ${cid}) + +#if [[ ${ok} != "0" ]]; then +#fi + +cid=$((cid+1)) + +cd ${current_dir} + +################################################################################################################ +#Section 5 +#ZIP generation + +ok=$(echo ${mask} | cut -c ${cid}) + +if [[ ${ok} != "0" ]]; then + cd ${current_dir} + dateId=$(date +'%Y-%m-%d_%H-%M-%S_%N') + zip -r ${project_name}-${dateId}.zip ${project_name} -x ${project_name}/.svn\* -x ${project_name}/src/main/boy/unified-control-lib\* + nKeep=3 + nBackups=$(ls -t ${project_name}-*.zip | wc -l) + if [[ ${nBackups} -gt ${nKeep} ]]; then + nRemovals=$(( ${nBackups} - ${nKeep} )) + toRemove=$(ls -t ${project_name}-*.zip | tail -n ${nRemovals}) + rm -f ${toRemove} + fi + +fi +cid=$((cid+1)) +cd ${current_dir} + +################################################################################################################ +#Section 6 +#SVN Sync +ok=$(echo ${mask} | cut -c ${cid}) + +if [[ ${ok} != "0" ]]; then + + cd ${project_name} + mvn clean + + svn st | grep ^? | awk '{print " --force "$2}' | xargs svn add + svn st | grep ^! | awk '{print " --force "$2}' | xargs svn rm + + svn ci -m "Generated on ${dateId}" + cd ${current_dir} + +fi +cid=$((cid+1)) + +cd ${current_dir} + + +################################################################################################################ +#Section 7 +#Project Compilation + +ok=$(echo ${mask} | cut -c ${cid}) + +if [[ ${ok} != "0" ]]; then + cd ${project_name} + mvn clean package -O -Drelease=final + cd ${current_dir} + cp -rf ${project_name}/target/* target/ +fi

    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�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 literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.so b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JATriangleWaveGAM/JATriangleWaveGAM.so new file mode 100755 index 0000000000000000000000000000000000000000..4a0c43b790b0ca7b876e444bc4938ae2a35c17a2 GIT binary patch literal 160064 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 literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JATriangleWaveGAM/libJATriangleWaveGAM.so b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JATriangleWaveGAM/libJATriangleWaveGAM.so new file mode 120000 index 0000000..560278b --- /dev/null +++ b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JATriangleWaveGAM/libJATriangleWaveGAM.so @@ -0,0 +1 @@ +JATriangleWaveGAM.so \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAWFRecordGAM/JAWFRecordGAM.a b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAWFRecordGAM/JAWFRecordGAM.a new file mode 100644 index 0000000000000000000000000000000000000000..8c5d152a5eea0e759aec840451a9c36aa756106b GIT binary patch literal 299984 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

    xi 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 AR{#J2 literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JARTStateMachineGAM/libJARTStateMachineGAM.so b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JARTStateMachineGAM/libJARTStateMachineGAM.so new file mode 120000 index 0000000..c1be501 --- /dev/null +++ b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JARTStateMachineGAM/libJARTStateMachineGAM.so @@ -0,0 +1 @@ +JARTStateMachineGAM.so \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JARampupGAM/JARampupGAM.a b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JARampupGAM/JARampupGAM.a new file mode 100644 index 0000000000000000000000000000000000000000..8eecf04eba6a79b3137ac0b151fec6e9c20cffd2 GIT binary patch literal 275384 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

    1w?Wm@ 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�l{ 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 AQUCw| literal 0 HcmV?d00001 diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JABitSumGAM/libJABitSumGAM.so b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JABitSumGAM/libJABitSumGAM.so new file mode 120000 index 0000000..6d5fd99 --- /dev/null +++ b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JABitSumGAM/libJABitSumGAM.so @@ -0,0 +1 @@ +JABitSumGAM.so \ No newline at end of file diff --git a/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.a b/EC-GN-JA-PCF/target/obj/Build/x86-linux/GAMs/JAConditionalSignalUpdateGAM/JAConditionalSignalUpdateGAM.a new file mode 100644 index 0000000000000000000000000000000000000000..46c76abfb7b84a8940c556025aa7b465d5f84a40 GIT binary patch literal 306560 zcmeFa33ye-88?3BCKoPS5+LkbP*hMB!3_j82v>q$Bmz-XP{4p7VG+Wj5{V>eZetW| zsajLTDlV-H)(xvw6cnshv0AGY6)UYEB5KuAH~zohJ9EyNJ4r}D`~RNrdA{@H+2FQ?JCojL()&&NfJq-T=~|OMWYXW8^bwOjYSPC|`h-dUVA3Z|`jknZ zHtBkkK4;PmCVk$dn@swmNnbMQ%O?G^NnbJPt0vuI(!ZGW4U@iU(!ZJXZIk}pq+3n; zo=LZv^dBbOZqk35bcablHt8oO{nVtNne+>jereLLO}f{l-Zy4g8=<2blC&lOAun>23H(@Z+T zq$5pwx=GJ4X~Lvunl#^}V@x{Eq-UFSyh+b9>G>v|XwnN!I?1F{Oj>BtsV1Ff(&;9> z#H2+goo&*&CY@)}Vv{a3>0*;!X3{H6T4K_rCcVm}%S`$Ulm61AH<|QTCapGUrAco! z>1vZ+Ytkx{{>G$tn)Eu8-euD3Oh+uk4eoykyDVyvq3AyyPZ! zJ5S(f4C84ErLv7MtHwYfOJsb?4HeW%=1)qca%{^>t`I{szo|6KjL{;uskD76nroq( zO7koXs`;ttcnf`@bP_RRw5P?{RC;s@mSbVCInbalZdg&HEd1CGI@(HcIdA#;;zM<@ z1bAy3x68az3dmMrff4sr1W#3AA=)ZF?yCr%s=|V{Reao65j<6eMP;k_xUV93s>*mr z#m9XW!EKeAP0n!FvEiWqu==vCps5Zqnvfg$c$_NWK<|Vi2kaUuKF0V4aB2S?S`_(IMm&;gZx`~Xg z)P43J5r}fa34^ahemaBbZr;w4pU@yoc{_Xmga%Q1-p+U6=TB9JXr=a}HABE7mHx0oJ#`nWwYFmOs1Eqk3h*y1c4KWdznzc~vcR zo{1i@P3b*KfFv|&WD;|uw}Y%wT`r4nRF(0K98Z?L#v!Y$WQA9J2Ao@wSGFUTSBdFT zZM~|y7SP(71yl+jN_7F1 z23{xQH6>X<+iDijqxwQuu-34hk}0=K<};Q|>M*eD%9N4zKrc=lRX4@CaQ1c`;s;l0 zhLihJhLf`ReJUld!SVYRy{w0^^U#msf6BGOzBucv*z(WVSgTfPG5abejGDtFFVLS! z1!&W$p<@JWYaH5C>d!WJu5Y+JB)y$08ZIv*3>QCssP*_GL)_7jufM31EYQJ`aES4{({jxtY@i^<%gn%EfslqmVG{o!ZUnZQkF(CTMVWzyjrKQ546+C zl;58bTA5)+D6FdGxiYHncSa~8kYqWB^JDZbq15b4dPb-X>#;5KvG}WHpDA{-H4G`Z z4BTX*3x~7ibD2%qADQT;B80H1)Kpki?R%0A5ILC?vY{Qc6B_pzSpZ%I4LoNbx@GAFIZ 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

    n(hvg_!0|WY2g=Gc$0-+Vc|De_;)S* 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�EtV?a{8tm_bS511RS7BF5I;&B?VE~t#U5>Cw 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°^nR@EYKgz-xjp1V0lz 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